{"version":3,"sources":["vendor/ember-cli/vendor-prefix.js","vendor/loader/loader.js","vendor/jquery/jquery.js","vendor/shims/jquery.js","novnc-sockjs/core/base64.js","novnc-sockjs/core/decoders/copyrect.js","novnc-sockjs/core/decoders/hextile.js","novnc-sockjs/core/decoders/raw.js","novnc-sockjs/core/decoders/rre.js","novnc-sockjs/core/decoders/tight.js","novnc-sockjs/core/decoders/tightpng.js","novnc-sockjs/core/deflator.js","novnc-sockjs/core/des.js","novnc-sockjs/core/display.js","novnc-sockjs/core/encodings.js","novnc-sockjs/core/inflator.js","novnc-sockjs/core/input/domkeytable.js","novnc-sockjs/core/input/fixedkeys.js","novnc-sockjs/core/input/gesturehandler.js","novnc-sockjs/core/input/keyboard.js","novnc-sockjs/core/input/keysym.js","novnc-sockjs/core/input/keysymdef.js","novnc-sockjs/core/input/util.js","novnc-sockjs/core/input/vkeys.js","novnc-sockjs/core/input/xtscancodes.js","novnc-sockjs/core/rfb.js","novnc-sockjs/core/util/browser.js","novnc-sockjs/core/util/cursor.js","novnc-sockjs/core/util/element.js","novnc-sockjs/core/util/events.js","novnc-sockjs/core/util/eventtarget.js","novnc-sockjs/core/util/int.js","novnc-sockjs/core/util/logging.js","novnc-sockjs/core/util/strings.js","novnc-sockjs/core/websock.js","novnc-sockjs/vendor/pako/lib/utils/common.js","novnc-sockjs/vendor/pako/lib/zlib/adler32.js","novnc-sockjs/vendor/pako/lib/zlib/constants.js","novnc-sockjs/vendor/pako/lib/zlib/crc32.js","novnc-sockjs/vendor/pako/lib/zlib/deflate.js","novnc-sockjs/vendor/pako/lib/zlib/gzheader.js","novnc-sockjs/vendor/pako/lib/zlib/inffast.js","novnc-sockjs/vendor/pako/lib/zlib/inflate.js","novnc-sockjs/vendor/pako/lib/zlib/inftrees.js","novnc-sockjs/vendor/pako/lib/zlib/messages.js","novnc-sockjs/vendor/pako/lib/zlib/trees.js","novnc-sockjs/vendor/pako/lib/zlib/zstream.js","node_modules/@testable/shared-ui/node_modules/jquery.cookie/jquery.cookie.js","node_modules/@testable/shared-ui/node_modules/moment/moment.js","node_modules/@testable/shared-ui/node_modules/papaparse/papaparse.js","bootstrap5-toggle.js","node_modules/@testable/shared-ui/node_modules/@fortawesome/fontawesome-free/js/all.js","node_modules/@testable/shared-ui/node_modules/spectrum-colorpicker/spectrum.js","node_modules/jquery-ui-dist/jquery-ui.js","node_modules/gritter/js/jquery.gritter.js","../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js","node_modules/jquery-lazy/jquery.lazy.min.js","node_modules/jquery-lazy/jquery.lazy.plugins.min.js","node_modules/lodash/lodash.js","node_modules/js-cookie/dist/js.cookie.js","node_modules/browser-pack/_prelude.js","lib/entry.js","lib/event/close.js","lib/event/emitter.js","lib/event/event.js","lib/event/eventtarget.js","lib/event/trans-message.js","lib/facade.js","lib/iframe-bootstrap.js","lib/info-ajax.js","lib/info-iframe-receiver.js","lib/info-iframe.js","lib/info-receiver.js","lib/location.js","lib/main.js","lib/shims.js","lib/transport-list.js","lib/transport/browser/abstract-xhr.js","lib/transport/browser/eventsource.js","lib/transport/browser/websocket.js","lib/transport/eventsource.js","lib/transport/htmlfile.js","lib/transport/iframe.js","lib/transport/jsonp-polling.js","lib/transport/lib/ajax-based.js","lib/transport/lib/buffered-sender.js","lib/transport/lib/iframe-wrap.js","lib/transport/lib/polling.js","lib/transport/lib/sender-receiver.js","lib/transport/receiver/eventsource.js","lib/transport/receiver/htmlfile.js","lib/transport/receiver/jsonp.js","lib/transport/receiver/xhr.js","lib/transport/sender/jsonp.js","lib/transport/sender/xdr.js","lib/transport/sender/xhr-cors.js","lib/transport/sender/xhr-fake.js","lib/transport/sender/xhr-local.js","lib/transport/websocket.js","lib/transport/xdr-polling.js","lib/transport/xdr-streaming.js","lib/transport/xhr-polling.js","lib/transport/xhr-streaming.js","lib/utils/browser-crypto.js","lib/utils/browser.js","lib/utils/escape.js","lib/utils/event.js","lib/utils/iframe.js","lib/utils/log.js","lib/utils/object.js","lib/utils/random.js","lib/utils/transport.js","lib/utils/url.js","lib/version.js","node_modules/debug/node_modules/ms/index.js","node_modules/debug/src/browser.js","node_modules/debug/src/common.js","node_modules/inherits/inherits_browser.js","node_modules/querystringify/index.js","node_modules/requires-port/index.js","node_modules/url-parse/index.js","node_modules/numeraljs/numeral.js","node_modules/papaparse/papaparse.js","node_modules/clipboard/dist/clipboard.js","../src/parsley/utils.js","../src/parsley/defaults.js","../src/parsley/base.js","../src/parsley/validator.js","../src/parsley/validator_registry.js","../src/parsley/ui.js","../src/parsley/form.js","../src/parsley/constraint.js","../src/parsley/field.js","../src/parsley/multiple.js","../src/parsley/factory.js","../src/parsley/main.js","../src/parsley/pubsub.js","../src/parsley/remote.js","../src/i18n/en.js","../src/vendor/inputevent.js","../src/parsley.js","node_modules/async/dist/async.js","node_modules/datatables.net/js/jquery.dataTables.js","node_modules/datatables.net-bs5/js/dataTables.bootstrap5.js","node_modules/datatables.net-buttons/js/dataTables.buttons.js","node_modules/datatables.net-buttons/js/buttons.html5.js","node_modules/datatables.net-responsive/js/dataTables.responsive.js","node_modules/datatables.net-responsive-bs5/js/responsive.bootstrap5.js","node_modules/datatables.net-scroller/js/dataTables.scroller.js","node_modules/datatables.net-select/js/dataTables.select.js","../src/FileSaver.js","node_modules/@fancyapps/fancybox/dist/jquery.fancybox.min.js","node_modules/smartwizard/dist/js/jquery.smartWizard.min.js","node_modules/ion-rangeslider/js/ion.rangeSlider.js","node_modules/card/dist/card.js","node_modules/inputmask/dist/inputmask.js","node_modules/@testable/shared-ui/vendor/flatbuffers.js","node_modules/@testable/shared-ui/vendor/agent_generated.js","node_modules/@testable/shared-ui/vendor/dataTables.sorting.absolute.js","node_modules/@testable/shared-ui/vendor/dataTables.colResize.js","node_modules/@testable/shared-ui/vendor/dataTables.scroller.min.js","addon-tree-output/@ember/render-modifiers/modifiers/did-insert.js","addon-tree-output/@ember/render-modifiers/modifiers/did-update.js","addon-tree-output/@ember/render-modifiers/modifiers/will-destroy.js","addon-tree-output/@embroider/macros/es-compat2.js","addon-tree-output/@embroider/macros/runtime.js","addon-tree-output/@embroider/util/ember-private-api.js","addon-tree-output/@embroider/util/index.js","addon-tree-output/@embroider/util/services/ensure-registered.js","addon-tree-output/@testable/shared-ui/components/access-panel.js","addon-tree-output/@testable/shared-ui/components/account-integration.js","addon-tree-output/@testable/shared-ui/components/account-integrations.js","addon-tree-output/@testable/shared-ui/components/account-profile-page.js","addon-tree-output/@testable/shared-ui/components/account-profile.js","addon-tree-output/@testable/shared-ui/components/account-settings/package-managers.js","addon-tree-output/@testable/shared-ui/components/account/billing.js","addon-tree-output/@testable/shared-ui/components/account/billing/addon-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/allocations-row.js","addon-tree-output/@testable/shared-ui/components/account/billing/allocations.js","addon-tree-output/@testable/shared-ui/components/account/billing/balance-alert-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/billing-category-card.js","addon-tree-output/@testable/shared-ui/components/account/billing/credit-cards.js","addon-tree-output/@testable/shared-ui/components/account/billing/current-subscription.js","addon-tree-output/@testable/shared-ui/components/account/billing/history-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/history-subscription-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/history-usage-details-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/history.js","addon-tree-output/@testable/shared-ui/components/account/billing/invoice-details-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/invoice-details-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/invoices-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/invoices.js","addon-tree-output/@testable/shared-ui/components/account/billing/monitor-check-usage-breakdown.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-details-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-details-modal-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-details-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-details.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-purchase-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/plan-purchase.js","addon-tree-output/@testable/shared-ui/components/account/billing/pricing-plan-widget.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-details-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-details-modal-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-details-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-details.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-entities-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-usage-modal-grid.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscription-usage-modal.js","addon-tree-output/@testable/shared-ui/components/account/billing/subscriptions-grid.js","addon-tree-output/@testable/shared-ui/components/activity-entry.js","addon-tree-output/@testable/shared-ui/components/activity-history.js","addon-tree-output/@testable/shared-ui/components/activity-modal.js","addon-tree-output/@testable/shared-ui/components/add-credit-card-modal.js","addon-tree-output/@testable/shared-ui/components/add-member-modal.js","addon-tree-output/@testable/shared-ui/components/agents-map.js","addon-tree-output/@testable/shared-ui/components/ai-agents-page.js","addon-tree-output/@testable/shared-ui/components/ai-agents/attachments-modal.js","addon-tree-output/@testable/shared-ui/components/ai-agents/browser-sessions-modal.js","addon-tree-output/@testable/shared-ui/components/ai-agents/chat-history-item.js","addon-tree-output/@testable/shared-ui/components/ai-agents/file-upload-zone.js","addon-tree-output/@testable/shared-ui/components/ai-agents/settings-modal.js","addon-tree-output/@testable/shared-ui/components/ai-agents/summarize-panel.js","addon-tree-output/@testable/shared-ui/components/ai-agents/tool-call-files-modal.js","addon-tree-output/@testable/shared-ui/components/ai-agents/tool-call-panel.js","addon-tree-output/@testable/shared-ui/components/ai-agents/video-panel.js","addon-tree-output/@testable/shared-ui/components/ai-settings-form.js","addon-tree-output/@testable/shared-ui/components/api-key-create.js","addon-tree-output/@testable/shared-ui/components/api-key-info.js","addon-tree-output/@testable/shared-ui/components/api-keys-list.js","addon-tree-output/@testable/shared-ui/components/app-switcher.js","addon-tree-output/@testable/shared-ui/components/assertions-result-download-modal.js","addon-tree-output/@testable/shared-ui/components/by-iteration.js","addon-tree-output/@testable/shared-ui/components/capture-param.js","addon-tree-output/@testable/shared-ui/components/capture-params-modal.js","addon-tree-output/@testable/shared-ui/components/capture-params.js","addon-tree-output/@testable/shared-ui/components/command-related-results-modal.js","addon-tree-output/@testable/shared-ui/components/command-stream-command.js","addon-tree-output/@testable/shared-ui/components/command-stream-summaries-stats.js","addon-tree-output/@testable/shared-ui/components/command-stream-summaries-summary.js","addon-tree-output/@testable/shared-ui/components/command-stream-summaries-widget.js","addon-tree-output/@testable/shared-ui/components/command-stream-summary-command.js","addon-tree-output/@testable/shared-ui/components/command-stream-summary-errors.js","addon-tree-output/@testable/shared-ui/components/command-stream-widget-stats.js","addon-tree-output/@testable/shared-ui/components/command-stream-widget-summary.js","addon-tree-output/@testable/shared-ui/components/command-stream-widget.js","addon-tree-output/@testable/shared-ui/components/commands-download-modal.js","addon-tree-output/@testable/shared-ui/components/configure-chart.js","addon-tree-output/@testable/shared-ui/components/configure-column.js","addon-tree-output/@testable/shared-ui/components/configure-columns.js","addon-tree-output/@testable/shared-ui/components/configure-console.js","addon-tree-output/@testable/shared-ui/components/configure-glance-metric.js","addon-tree-output/@testable/shared-ui/components/configure-glance.js","addon-tree-output/@testable/shared-ui/components/confirm-email-base.js","addon-tree-output/@testable/shared-ui/components/confirm-email-pending.js","addon-tree-output/@testable/shared-ui/components/confirm-email-result.js","addon-tree-output/@testable/shared-ui/components/create-org-modal.js","addon-tree-output/@testable/shared-ui/components/credit-card-form.js","addon-tree-output/@testable/shared-ui/components/csv-grid.js","addon-tree-output/@testable/shared-ui/components/csv-preview-modal.js","addon-tree-output/@testable/shared-ui/components/custom-metrics-panel.js","addon-tree-output/@testable/shared-ui/components/dashboard-modal.js","addon-tree-output/@testable/shared-ui/components/dashboard-settings-modal.js","addon-tree-output/@testable/shared-ui/components/data-grid.js","addon-tree-output/@testable/shared-ui/components/edit-kpis.js","addon-tree-output/@testable/shared-ui/components/email-confirmation-banner.js","addon-tree-output/@testable/shared-ui/components/empty.js","addon-tree-output/@testable/shared-ui/components/execution-agents-grid.js","addon-tree-output/@testable/shared-ui/components/execution-live-session.js","addon-tree-output/@testable/shared-ui/components/execution-progress.js","addon-tree-output/@testable/shared-ui/components/execution-region-suite-results.js","addon-tree-output/@testable/shared-ui/components/execution-region-suite-summary.js","addon-tree-output/@testable/shared-ui/components/execution-results.js","addon-tree-output/@testable/shared-ui/components/execution-script.js","addon-tree-output/@testable/shared-ui/components/executions-grid.js","addon-tree-output/@testable/shared-ui/components/export-csv-modal.js","addon-tree-output/@testable/shared-ui/components/extend-test-modal.js","addon-tree-output/@testable/shared-ui/components/failed-results.js","addon-tree-output/@testable/shared-ui/components/files-grid.js","addon-tree-output/@testable/shared-ui/components/filter-fields.js","addon-tree-output/@testable/shared-ui/components/forgot-password-modal.js","addon-tree-output/@testable/shared-ui/components/forms/max-duration-input.js","addon-tree-output/@testable/shared-ui/components/forms/resource-parts-input.js","addon-tree-output/@testable/shared-ui/components/grid-search.js","addon-tree-output/@testable/shared-ui/components/histogram-chart-per-bucket.js","addon-tree-output/@testable/shared-ui/components/histogram-chart.js","addon-tree-output/@testable/shared-ui/components/histogram-grid.js","addon-tree-output/@testable/shared-ui/components/histogram-table.js","addon-tree-output/@testable/shared-ui/components/image-details-modal.js","addon-tree-output/@testable/shared-ui/components/image-widget-filters.js","addon-tree-output/@testable/shared-ui/components/images-widget-details.js","addon-tree-output/@testable/shared-ui/components/images-widget.js","addon-tree-output/@testable/shared-ui/components/input-select-all.js","addon-tree-output/@testable/shared-ui/components/instance-logs-modal.js","addon-tree-output/@testable/shared-ui/components/instances-grid.js","addon-tree-output/@testable/shared-ui/components/integration-slack.js","addon-tree-output/@testable/shared-ui/components/integration-teams.js","addon-tree-output/@testable/shared-ui/components/iteration-results.js","addon-tree-output/@testable/shared-ui/components/live-event-modal.js","addon-tree-output/@testable/shared-ui/components/live-session.js","addon-tree-output/@testable/shared-ui/components/live-videos-grid.js","addon-tree-output/@testable/shared-ui/components/load-results-widget-header.js","addon-tree-output/@testable/shared-ui/components/load-results-widget-resources.js","addon-tree-output/@testable/shared-ui/components/load-results-widget-traces.js","addon-tree-output/@testable/shared-ui/components/load-results-widget.js","addon-tree-output/@testable/shared-ui/components/load-test-regional-dashboard-browser.js","addon-tree-output/@testable/shared-ui/components/load-test-regional-dashboard.js","addon-tree-output/@testable/shared-ui/components/load-test-result/action-menu.js","addon-tree-output/@testable/shared-ui/components/load-test-result/child-executions.js","addon-tree-output/@testable/shared-ui/components/load-test-result/create-test.js","addon-tree-output/@testable/shared-ui/components/load-test-result/info-panel.js","addon-tree-output/@testable/shared-ui/components/load-test-result/tabs.js","addon-tree-output/@testable/shared-ui/components/load-test-result/wrapper.js","addon-tree-output/@testable/shared-ui/components/load-test-results-base.js","addon-tree-output/@testable/shared-ui/components/load-test-results-browser.js","addon-tree-output/@testable/shared-ui/components/load-test-results.js","addon-tree-output/@testable/shared-ui/components/logging-panel-details.js","addon-tree-output/@testable/shared-ui/components/logging-panel-stats.js","addon-tree-output/@testable/shared-ui/components/logging-panel.js","addon-tree-output/@testable/shared-ui/components/login-panel.js","addon-tree-output/@testable/shared-ui/components/make-default-dashboard.js","addon-tree-output/@testable/shared-ui/components/max-resources-warning.js","addon-tree-output/@testable/shared-ui/components/metered-grid.js","addon-tree-output/@testable/shared-ui/components/metered-widget.js","addon-tree-output/@testable/shared-ui/components/metric-chart.js","addon-tree-output/@testable/shared-ui/components/metric-details-modal.js","addon-tree-output/@testable/shared-ui/components/metric-history-modal.js","addon-tree-output/@testable/shared-ui/components/metric-picker.js","addon-tree-output/@testable/shared-ui/components/metrics-table.js","addon-tree-output/@testable/shared-ui/components/metrics-widget.js","addon-tree-output/@testable/shared-ui/components/monitor-item.js","addon-tree-output/@testable/shared-ui/components/monitor-metrics-chart.js","addon-tree-output/@testable/shared-ui/components/monitor-type-description.js","addon-tree-output/@testable/shared-ui/components/network-results-widget.js","addon-tree-output/@testable/shared-ui/components/no-plan-page.js","addon-tree-output/@testable/shared-ui/components/note-info-modal.js","addon-tree-output/@testable/shared-ui/components/note-info.js","addon-tree-output/@testable/shared-ui/components/notifications-table.js","addon-tree-output/@testable/shared-ui/components/npm-modules-modal.js","addon-tree-output/@testable/shared-ui/components/oauth-org-chooser.js","addon-tree-output/@testable/shared-ui/components/org-link-info.js","addon-tree-output/@testable/shared-ui/components/organization-details.js","addon-tree-output/@testable/shared-ui/components/organizations-dropdown.js","addon-tree-output/@testable/shared-ui/components/organizations-list.js","addon-tree-output/@testable/shared-ui/components/output-files-widget.js","addon-tree-output/@testable/shared-ui/components/print-assertion.js","addon-tree-output/@testable/shared-ui/components/print-region-summary.js","addon-tree-output/@testable/shared-ui/components/print-selected-assertion.js","addon-tree-output/@testable/shared-ui/components/print-selected-command-error.js","addon-tree-output/@testable/shared-ui/components/print-selected-error.js","addon-tree-output/@testable/shared-ui/components/print-selected-region-summary.js","addon-tree-output/@testable/shared-ui/components/providers/add-testrunner-modal.js","addon-tree-output/@testable/shared-ui/components/providers/edit-provider-modal.js","addon-tree-output/@testable/shared-ui/components/providers/form-aws.js","addon-tree-output/@testable/shared-ui/components/providers/form-azure.js","addon-tree-output/@testable/shared-ui/components/providers/form-gcp.js","addon-tree-output/@testable/shared-ui/components/providers/provider-info-awsondemand.js","addon-tree-output/@testable/shared-ui/components/providers/provider-info-azureondemand.js","addon-tree-output/@testable/shared-ui/components/providers/provider-info-gcpondemand.js","addon-tree-output/@testable/shared-ui/components/providers/tags-manager.js","addon-tree-output/@testable/shared-ui/components/region-queue.js","addon-tree-output/@testable/shared-ui/components/reset-password-panel.js","addon-tree-output/@testable/shared-ui/components/resources-grid.js","addon-tree-output/@testable/shared-ui/components/result-details.js","addon-tree-output/@testable/shared-ui/components/result-filter-bar.js","addon-tree-output/@testable/shared-ui/components/result-metrics.js","addon-tree-output/@testable/shared-ui/components/result-modal.js","addon-tree-output/@testable/shared-ui/components/results-by-assertion-failure.js","addon-tree-output/@testable/shared-ui/components/results-by-user.js","addon-tree-output/@testable/shared-ui/components/results-timeline-grid.js","addon-tree-output/@testable/shared-ui/components/run-in-region-modal.js","addon-tree-output/@testable/shared-ui/components/saml-configuration.js","addon-tree-output/@testable/shared-ui/components/saved-result-details.js","addon-tree-output/@testable/shared-ui/components/scenario/ai.js","addon-tree-output/@testable/shared-ui/components/scenario/ai/fields.js","addon-tree-output/@testable/shared-ui/components/scenario/ai/instructions.js","addon-tree-output/@testable/shared-ui/components/scenario/ai/uploaded-files.js","addon-tree-output/@testable/shared-ui/components/scenario/change-type-modal.js","addon-tree-output/@testable/shared-ui/components/scenario/code.js","addon-tree-output/@testable/shared-ui/components/scenario/copy-modal.js","addon-tree-output/@testable/shared-ui/components/scenario/device-dropdown.js","addon-tree-output/@testable/shared-ui/components/scenario/gatling.js","addon-tree-output/@testable/shared-ui/components/scenario/har.js","addon-tree-output/@testable/shared-ui/components/scenario/java.js","addon-tree-output/@testable/shared-ui/components/scenario/jmeter.js","addon-tree-output/@testable/shared-ui/components/scenario/link.js","addon-tree-output/@testable/shared-ui/components/scenario/locust.js","addon-tree-output/@testable/shared-ui/components/scenario/monitor.js","addon-tree-output/@testable/shared-ui/components/scenario/params-config-editor.js","addon-tree-output/@testable/shared-ui/components/scenario/phantomjs.js","addon-tree-output/@testable/shared-ui/components/scenario/playwright.js","addon-tree-output/@testable/shared-ui/components/scenario/postman.js","addon-tree-output/@testable/shared-ui/components/scenario/puppeteer.js","addon-tree-output/@testable/shared-ui/components/scenario/selenium.js","addon-tree-output/@testable/shared-ui/components/scenario/smoke-test.js","addon-tree-output/@testable/shared-ui/components/scenario/type-picker.js","addon-tree-output/@testable/shared-ui/components/scenario/ui/additional-panel-wrapper.js","addon-tree-output/@testable/shared-ui/components/scenario/ui/additional-wrapper.js","addon-tree-output/@testable/shared-ui/components/scenario/ui/editor-wrapper.js","addon-tree-output/@testable/shared-ui/components/scenario/ui/left-panel.js","addon-tree-output/@testable/shared-ui/components/scenario/ui/right-panel.js","addon-tree-output/@testable/shared-ui/components/scenario/vcs-select.js","addon-tree-output/@testable/shared-ui/components/schedule-exclusion.js","addon-tree-output/@testable/shared-ui/components/schedule-recurring.js","addon-tree-output/@testable/shared-ui/components/schedule-single.js","addon-tree-output/@testable/shared-ui/components/scheduling.js","addon-tree-output/@testable/shared-ui/components/share-media-modal.js","addon-tree-output/@testable/shared-ui/components/share-results-modal.js","addon-tree-output/@testable/shared-ui/components/show-country-modal.js","addon-tree-output/@testable/shared-ui/components/signup-panel.js","addon-tree-output/@testable/shared-ui/components/slack-notification-config.js","addon-tree-output/@testable/shared-ui/components/slowest-iterations.js","addon-tree-output/@testable/shared-ui/components/slowest-results.js","addon-tree-output/@testable/shared-ui/components/sns-notification-config.js","addon-tree-output/@testable/shared-ui/components/sparkline-chart.js","addon-tree-output/@testable/shared-ui/components/success-criteria-panel.js","addon-tree-output/@testable/shared-ui/components/success-table-data.js","addon-tree-output/@testable/shared-ui/components/success-table-modal.js","addon-tree-output/@testable/shared-ui/components/success-table.js","addon-tree-output/@testable/shared-ui/components/suite-errors-summary.js","addon-tree-output/@testable/shared-ui/components/suite-related-results-modal.js","addon-tree-output/@testable/shared-ui/components/suite-result-summaries.js","addon-tree-output/@testable/shared-ui/components/suite-results-widget.js","addon-tree-output/@testable/shared-ui/components/suite-summaries-stats.js","addon-tree-output/@testable/shared-ui/components/suite-summaries-summary.js","addon-tree-output/@testable/shared-ui/components/suite-summaries-test-summary.js","addon-tree-output/@testable/shared-ui/components/suite-summaries-widget.js","addon-tree-output/@testable/shared-ui/components/suite-summary-header.js","addon-tree-output/@testable/shared-ui/components/suite-test-results.js","addon-tree-output/@testable/shared-ui/components/switch-org-modal.js","addon-tree-output/@testable/shared-ui/components/tags-editor-input.js","addon-tree-output/@testable/shared-ui/components/tags-editor-modal.js","addon-tree-output/@testable/shared-ui/components/tags-editor.js","addon-tree-output/@testable/shared-ui/components/tags-show.js","addon-tree-output/@testable/shared-ui/components/teams-notification-config.js","addon-tree-output/@testable/shared-ui/components/test-add-user-modal.js","addon-tree-output/@testable/shared-ui/components/test-case-baseline-modal.js","addon-tree-output/@testable/shared-ui/components/test-case-card.js","addon-tree-output/@testable/shared-ui/components/test-case-move-modal.js","addon-tree-output/@testable/shared-ui/components/test-cases-create-modal.js","addon-tree-output/@testable/shared-ui/components/test-cases-folder.js","addon-tree-output/@testable/shared-ui/components/test-cases-list.js","addon-tree-output/@testable/shared-ui/components/test-glance-details.js","addon-tree-output/@testable/shared-ui/components/test-glance.js","addon-tree-output/@testable/shared-ui/components/test-outcome-detail.js","addon-tree-output/@testable/shared-ui/components/test-outcome-modal.js","addon-tree-output/@testable/shared-ui/components/test-outcome-region.js","addon-tree-output/@testable/shared-ui/components/test-result-baseline-modal.js","addon-tree-output/@testable/shared-ui/components/test-runners.js","addon-tree-output/@testable/shared-ui/components/test-scenario.js","addon-tree-output/@testable/shared-ui/components/test-summary-modal.js","addon-tree-output/@testable/shared-ui/components/test-summary.js","addon-tree-output/@testable/shared-ui/components/test-url-modal.js","addon-tree-output/@testable/shared-ui/components/trace-modal.js","addon-tree-output/@testable/shared-ui/components/trace-timeline-packet.js","addon-tree-output/@testable/shared-ui/components/trace-timeline.js","addon-tree-output/@testable/shared-ui/components/traces-grid.js","addon-tree-output/@testable/shared-ui/components/ui/ace-editor.js","addon-tree-output/@testable/shared-ui/components/ui/bs-datetimepicker.js","addon-tree-output/@testable/shared-ui/components/ui/cookie-policy-content.js","addon-tree-output/@testable/shared-ui/components/ui/copy-text.js","addon-tree-output/@testable/shared-ui/components/ui/date-range-picker.js","addon-tree-output/@testable/shared-ui/components/ui/delete-loading-indicator.js","addon-tree-output/@testable/shared-ui/components/ui/feature-flag-button.js","addon-tree-output/@testable/shared-ui/components/ui/feature-flag-container.js","addon-tree-output/@testable/shared-ui/components/ui/files-manager.js","addon-tree-output/@testable/shared-ui/components/ui/folder-directory.js","addon-tree-output/@testable/shared-ui/components/ui/footer.js","addon-tree-output/@testable/shared-ui/components/ui/icon.js","addon-tree-output/@testable/shared-ui/components/ui/infinite-scroller.js","addon-tree-output/@testable/shared-ui/components/ui/info-icon.js","addon-tree-output/@testable/shared-ui/components/ui/load-more-button.js","addon-tree-output/@testable/shared-ui/components/ui/map-location.js","addon-tree-output/@testable/shared-ui/components/ui/modal-wrapper.js","addon-tree-output/@testable/shared-ui/components/ui/note-icon.js","addon-tree-output/@testable/shared-ui/components/ui/p-select-multiple.js","addon-tree-output/@testable/shared-ui/components/ui/p-select.js","addon-tree-output/@testable/shared-ui/components/ui/password-input.js","addon-tree-output/@testable/shared-ui/components/ui/privacy-policy-content.js","addon-tree-output/@testable/shared-ui/components/ui/right-click-menu.js","addon-tree-output/@testable/shared-ui/components/ui/spectrum-color-picker.js","addon-tree-output/@testable/shared-ui/components/ui/terms-content.js","addon-tree-output/@testable/shared-ui/components/ui/time-range-selector.js","addon-tree-output/@testable/shared-ui/components/ui/videojs-player.js","addon-tree-output/@testable/shared-ui/components/ui/x-select-option.js","addon-tree-output/@testable/shared-ui/components/ui/x-select.js","addon-tree-output/@testable/shared-ui/components/vcs-root-modal.js","addon-tree-output/@testable/shared-ui/components/vcs-roots-grid.js","addon-tree-output/@testable/shared-ui/components/vcs-roots.js","addon-tree-output/@testable/shared-ui/components/video-details-modal.js","addon-tree-output/@testable/shared-ui/components/video-info-view.js","addon-tree-output/@testable/shared-ui/components/videos-widget-detail.js","addon-tree-output/@testable/shared-ui/components/videos-widget-filters.js","addon-tree-output/@testable/shared-ui/components/videos-widget.js","addon-tree-output/@testable/shared-ui/components/waiting-modal.js","addon-tree-output/@testable/shared-ui/controllers/account/billing/change-plan-base.js","addon-tree-output/@testable/shared-ui/controllers/account/billing/subscription-base.js","addon-tree-output/@testable/shared-ui/controllers/account/billing/subscription-history-base.js","addon-tree-output/@testable/shared-ui/controllers/application-base.js","addon-tree-output/@testable/shared-ui/controllers/load-test-results-base.js","addon-tree-output/@testable/shared-ui/controllers/reset-password-base.js","addon-tree-output/@testable/shared-ui/helpers/add-auth-to-url.js","addon-tree-output/@testable/shared-ui/helpers/ansi-to-html.js","addon-tree-output/@testable/shared-ui/helpers/camel-to-title.js","addon-tree-output/@testable/shared-ui/helpers/can-remove-user.js","addon-tree-output/@testable/shared-ui/helpers/capitalize-text.js","addon-tree-output/@testable/shared-ui/helpers/contains-val.js","addon-tree-output/@testable/shared-ui/helpers/decode-test-case-name.js","addon-tree-output/@testable/shared-ui/helpers/disable-bubbling.js","addon-tree-output/@testable/shared-ui/helpers/ends-with.js","addon-tree-output/@testable/shared-ui/helpers/find-metric.js","addon-tree-output/@testable/shared-ui/helpers/generate-id.js","addon-tree-output/@testable/shared-ui/helpers/get-frequency-label-short.js","addon-tree-output/@testable/shared-ui/helpers/get-health-service-color.js","addon-tree-output/@testable/shared-ui/helpers/get-health-service-max.js","addon-tree-output/@testable/shared-ui/helpers/get-health-service-title.js","addon-tree-output/@testable/shared-ui/helpers/get-imagediffclass.js","addon-tree-output/@testable/shared-ui/helpers/get-metric-title.js","addon-tree-output/@testable/shared-ui/helpers/get-regions.js","addon-tree-output/@testable/shared-ui/helpers/get-values.js","addon-tree-output/@testable/shared-ui/helpers/has-aggregators.js","addon-tree-output/@testable/shared-ui/helpers/has-feature.js","addon-tree-output/@testable/shared-ui/helpers/html-safe.js","addon-tree-output/@testable/shared-ui/helpers/is-aws-public-shared-grid.js","addon-tree-output/@testable/shared-ui/helpers/is-awslink-pending.js","addon-tree-output/@testable/shared-ui/helpers/is-boolean.js","addon-tree-output/@testable/shared-ui/helpers/is-date-passed.js","addon-tree-output/@testable/shared-ui/helpers/is-empty.js","addon-tree-output/@testable/shared-ui/helpers/is-multi-user.js","addon-tree-output/@testable/shared-ui/helpers/is-number.js","addon-tree-output/@testable/shared-ui/helpers/is-object.js","addon-tree-output/@testable/shared-ui/helpers/is-org-admin.js","addon-tree-output/@testable/shared-ui/helpers/is-undefined.js","addon-tree-output/@testable/shared-ui/helpers/live-relative-duration.js","addon-tree-output/@testable/shared-ui/helpers/lodash-function.js","addon-tree-output/@testable/shared-ui/helpers/lookup-by-id.js","addon-tree-output/@testable/shared-ui/helpers/lookup-regions.js","addon-tree-output/@testable/shared-ui/helpers/math-max.js","addon-tree-output/@testable/shared-ui/helpers/math-min.js","addon-tree-output/@testable/shared-ui/helpers/math-op.js","addon-tree-output/@testable/shared-ui/helpers/metric-label-class.js","addon-tree-output/@testable/shared-ui/helpers/optional.js","addon-tree-output/@testable/shared-ui/helpers/pick.js","addon-tree-output/@testable/shared-ui/helpers/print-browser-title.js","addon-tree-output/@testable/shared-ui/helpers/print-browser.js","addon-tree-output/@testable/shared-ui/helpers/print-bytes.js","addon-tree-output/@testable/shared-ui/helpers/print-ccy.js","addon-tree-output/@testable/shared-ui/helpers/print-change.js","addon-tree-output/@testable/shared-ui/helpers/print-date-utc.js","addon-tree-output/@testable/shared-ui/helpers/print-date.js","addon-tree-output/@testable/shared-ui/helpers/print-datetime.js","addon-tree-output/@testable/shared-ui/helpers/print-datetimeminutes.js","addon-tree-output/@testable/shared-ui/helpers/print-datetimesecs.js","addon-tree-output/@testable/shared-ui/helpers/print-device.js","addon-tree-output/@testable/shared-ui/helpers/print-duration.js","addon-tree-output/@testable/shared-ui/helpers/print-exclusions.js","addon-tree-output/@testable/shared-ui/helpers/print-image.js","addon-tree-output/@testable/shared-ui/helpers/print-imagediffmode.js","addon-tree-output/@testable/shared-ui/helpers/print-instance-type.js","addon-tree-output/@testable/shared-ui/helpers/print-json.js","addon-tree-output/@testable/shared-ui/helpers/print-metric.js","addon-tree-output/@testable/shared-ui/helpers/print-network.js","addon-tree-output/@testable/shared-ui/helpers/print-notification-style.js","addon-tree-output/@testable/shared-ui/helpers/print-number.js","addon-tree-output/@testable/shared-ui/helpers/print-operator.js","addon-tree-output/@testable/shared-ui/helpers/print-percentage.js","addon-tree-output/@testable/shared-ui/helpers/print-plural.js","addon-tree-output/@testable/shared-ui/helpers/print-region-info.js","addon-tree-output/@testable/shared-ui/helpers/print-schedule.js","addon-tree-output/@testable/shared-ui/helpers/print-script.js","addon-tree-output/@testable/shared-ui/helpers/print-scripttype.js","addon-tree-output/@testable/shared-ui/helpers/print-subnet.js","addon-tree-output/@testable/shared-ui/helpers/print-success-record.js","addon-tree-output/@testable/shared-ui/helpers/print-test-short-summary.js","addon-tree-output/@testable/shared-ui/helpers/print-testtype.js","addon-tree-output/@testable/shared-ui/helpers/print-time-from-ms.js","addon-tree-output/@testable/shared-ui/helpers/print-time-hms.js","addon-tree-output/@testable/shared-ui/helpers/print-time.js","addon-tree-output/@testable/shared-ui/helpers/print-unlimited-badge.js","addon-tree-output/@testable/shared-ui/helpers/print-val.js","addon-tree-output/@testable/shared-ui/helpers/print-vpc.js","addon-tree-output/@testable/shared-ui/helpers/prop-lookup.js","addon-tree-output/@testable/shared-ui/helpers/region-popover.js","addon-tree-output/@testable/shared-ui/helpers/render-markdown.js","addon-tree-output/@testable/shared-ui/helpers/set-page-title.js","addon-tree-output/@testable/shared-ui/helpers/sort-by-ts.js","addon-tree-output/@testable/shared-ui/helpers/sorted-scripttype.js","addon-tree-output/@testable/shared-ui/helpers/split-text.js","addon-tree-output/@testable/shared-ui/helpers/started-at-popover.js","addon-tree-output/@testable/shared-ui/helpers/starts-with.js","addon-tree-output/@testable/shared-ui/helpers/text-to-html.js","addon-tree-output/@testable/shared-ui/helpers/to-execution-outcome-html.js","addon-tree-output/@testable/shared-ui/helpers/to-html.js","addon-tree-output/@testable/shared-ui/helpers/to-lowercase.js","addon-tree-output/@testable/shared-ui/helpers/to-metric-name.js","addon-tree-output/@testable/shared-ui/helpers/to-metric-style.js","addon-tree-output/@testable/shared-ui/helpers/to-number.js","addon-tree-output/@testable/shared-ui/helpers/to-outcome-html.js","addon-tree-output/@testable/shared-ui/helpers/to-string.js","addon-tree-output/@testable/shared-ui/helpers/to-url.js","addon-tree-output/@testable/shared-ui/helpers/truncate-string.js","addon-tree-output/@testable/shared-ui/helpers/truncate.js","addon-tree-output/@testable/shared-ui/helpers/uppercase.js","addon-tree-output/@testable/shared-ui/models/command-stream-error.js","addon-tree-output/@testable/shared-ui/models/command-stream-summary.js","addon-tree-output/@testable/shared-ui/models/command-stream.js","addon-tree-output/@testable/shared-ui/models/command-summary.js","addon-tree-output/@testable/shared-ui/models/command.js","addon-tree-output/@testable/shared-ui/models/conf-group-info.js","addon-tree-output/@testable/shared-ui/models/conf-info.js","addon-tree-output/@testable/shared-ui/models/load-test-regional-results.js","addon-tree-output/@testable/shared-ui/models/location.js","addon-tree-output/@testable/shared-ui/models/resource.js","addon-tree-output/@testable/shared-ui/models/test-case-info.js","addon-tree-output/@testable/shared-ui/models/test-location-conf-info.js","addon-tree-output/@testable/shared-ui/models/test-location-info.js","addon-tree-output/@testable/shared-ui/models/testable-new-app.js","addon-tree-output/@testable/shared-ui/models/trigger-condition.js","addon-tree-output/@testable/shared-ui/models/user.js","addon-tree-output/@testable/shared-ui/modifiers/autofocusAndSelect.js","addon-tree-output/@testable/shared-ui/modifiers/cleanup-overlays.js","addon-tree-output/@testable/shared-ui/routes/confirm-email-base.js","addon-tree-output/@testable/shared-ui/routes/load-test-results-base.js","addon-tree-output/@testable/shared-ui/routes/login-base.js","addon-tree-output/@testable/shared-ui/routes/reset-password-base.js","addon-tree-output/@testable/shared-ui/services/ai-agent.js","addon-tree-output/@testable/shared-ui/services/api.js","addon-tree-output/@testable/shared-ui/services/api/admin.js","addon-tree-output/@testable/shared-ui/services/api/billing.js","addon-tree-output/@testable/shared-ui/services/api/browser-manager.js","addon-tree-output/@testable/shared-ui/services/api/changelog-manager.js","addon-tree-output/@testable/shared-ui/services/api/command-streams.js","addon-tree-output/@testable/shared-ui/services/api/conversations.js","addon-tree-output/@testable/shared-ui/services/api/countries.js","addon-tree-output/@testable/shared-ui/services/api/current-user.js","addon-tree-output/@testable/shared-ui/services/api/data-stores.js","addon-tree-output/@testable/shared-ui/services/api/executions.js","addon-tree-output/@testable/shared-ui/services/api/integration-teams.js","addon-tree-output/@testable/shared-ui/services/api/live-test.js","addon-tree-output/@testable/shared-ui/services/api/live-videos.js","addon-tree-output/@testable/shared-ui/services/api/metric-manager.js","addon-tree-output/@testable/shared-ui/services/api/monitors.js","addon-tree-output/@testable/shared-ui/services/api/regions.js","addon-tree-output/@testable/shared-ui/services/api/reports-manager.js","addon-tree-output/@testable/shared-ui/services/api/success-history.js","addon-tree-output/@testable/shared-ui/services/api/tag-manager.js","addon-tree-output/@testable/shared-ui/services/api/test-cases.js","addon-tree-output/@testable/shared-ui/services/api/test-confs.js","addon-tree-output/@testable/shared-ui/services/api/test-runs-manager.js","addon-tree-output/@testable/shared-ui/services/api/test-scenarios.js","addon-tree-output/@testable/shared-ui/services/api/usage.js","addon-tree-output/@testable/shared-ui/services/api/users.js","addon-tree-output/@testable/shared-ui/services/api/vcs.js","addon-tree-output/@testable/shared-ui/services/application-state.js","addon-tree-output/@testable/shared-ui/services/env-config.js","addon-tree-output/@testable/shared-ui/services/environment.js","addon-tree-output/@testable/shared-ui/services/event-bus.js","addon-tree-output/@testable/shared-ui/services/gtag.js","addon-tree-output/@testable/shared-ui/services/org-acl.js","addon-tree-output/@testable/shared-ui/services/realtime-service.js","addon-tree-output/@testable/shared-ui/services/test-case-folders.js","addon-tree-output/@testable/shared-ui/services/test-results.js","addon-tree-output/@testable/shared-ui/services/zoom-info.js","addon-tree-output/@testable/shared-ui/utils/ai-instruction-templates.js","addon-tree-output/@testable/shared-ui/utils/amcharts.js","addon-tree-output/@testable/shared-ui/utils/app-initializer.js","addon-tree-output/@testable/shared-ui/utils/apps.js","addon-tree-output/@testable/shared-ui/utils/auth.js","addon-tree-output/@testable/shared-ui/utils/auto-queue.js","addon-tree-output/@testable/shared-ui/utils/aws.js","addon-tree-output/@testable/shared-ui/utils/azure.js","addon-tree-output/@testable/shared-ui/utils/cookie-consent.js","addon-tree-output/@testable/shared-ui/utils/dashboards.js","addon-tree-output/@testable/shared-ui/utils/data-store-utils.js","addon-tree-output/@testable/shared-ui/utils/environment.js","addon-tree-output/@testable/shared-ui/utils/formatters.js","addon-tree-output/@testable/shared-ui/utils/gcp.js","addon-tree-output/@testable/shared-ui/utils/general-columns.js","addon-tree-output/@testable/shared-ui/utils/google-analytics.js","addon-tree-output/@testable/shared-ui/utils/http.js","addon-tree-output/@testable/shared-ui/utils/instance-conf.js","addon-tree-output/@testable/shared-ui/utils/intercom.js","addon-tree-output/@testable/shared-ui/utils/lib.js","addon-tree-output/@testable/shared-ui/utils/load-test.js","addon-tree-output/@testable/shared-ui/utils/login-redirect.js","addon-tree-output/@testable/shared-ui/utils/login.js","addon-tree-output/@testable/shared-ui/utils/marketing-attribution.js","addon-tree-output/@testable/shared-ui/utils/matchers.js","addon-tree-output/@testable/shared-ui/utils/mcp-server-url.js","addon-tree-output/@testable/shared-ui/utils/monitor.js","addon-tree-output/@testable/shared-ui/utils/providers.js","addon-tree-output/@testable/shared-ui/utils/realtime-state.js","addon-tree-output/@testable/shared-ui/utils/recording.js","addon-tree-output/@testable/shared-ui/utils/scenario.js","addon-tree-output/@testable/shared-ui/utils/serialization.js","addon-tree-output/@testable/shared-ui/utils/server.js","addon-tree-output/@testable/shared-ui/utils/session-cookie.js","addon-tree-output/@testable/shared-ui/utils/session.js","addon-tree-output/@testable/shared-ui/utils/starts-with-key-map.js","addon-tree-output/@testable/shared-ui/utils/status-page.js","addon-tree-output/@testable/shared-ui/utils/suite-utils.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-java.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-junit.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-selenium-junit.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-selenium-testng.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-selenium.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates-testng.js","addon-tree-output/@testable/shared-ui/utils/templates/java-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/js-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/locust-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/mocha-templates-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/mocha-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/playwright-mocha-templates-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/playwright-mocha-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/playwright-template-py.js","addon-tree-output/@testable/shared-ui/utils/templates/playwright-template-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/playwright-template.js","addon-tree-output/@testable/shared-ui/utils/templates/protractor-templates-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/protractor-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/puppeteer-mocha-templates-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/puppeteer-mocha-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/puppeteer-template-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/puppeteer-template.js","addon-tree-output/@testable/shared-ui/utils/templates/script-code-js.js","addon-tree-output/@testable/shared-ui/utils/templates/script-code-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/script-code-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/ts-templates.js","addon-tree-output/@testable/shared-ui/utils/templates/versions.js","addon-tree-output/@testable/shared-ui/utils/templates/wdio-templates-ts.js","addon-tree-output/@testable/shared-ui/utils/templates/wdio-templates.js","addon-tree-output/@testable/shared-ui/utils/test-cases.js","addon-tree-output/@testable/shared-ui/utils/utilization.js","addon-tree-output/ember-bootstrap/components/bs-accordion.js","addon-tree-output/ember-bootstrap/components/bs-accordion/item.js","addon-tree-output/ember-bootstrap/components/bs-accordion/item/body.js","addon-tree-output/ember-bootstrap/components/bs-accordion/item/title.js","addon-tree-output/ember-bootstrap/components/bs-alert.js","addon-tree-output/ember-bootstrap/components/bs-button-group.js","addon-tree-output/ember-bootstrap/components/bs-button-group/button.js","addon-tree-output/ember-bootstrap/components/bs-button.js","addon-tree-output/ember-bootstrap/components/bs-carousel.js","addon-tree-output/ember-bootstrap/components/bs-carousel/slide.js","addon-tree-output/ember-bootstrap/components/bs-collapse.js","addon-tree-output/ember-bootstrap/components/bs-contextual-help.js","addon-tree-output/ember-bootstrap/components/bs-contextual-help/element.js","addon-tree-output/ember-bootstrap/components/bs-dropdown.js","addon-tree-output/ember-bootstrap/components/bs-dropdown/button.js","addon-tree-output/ember-bootstrap/components/bs-dropdown/menu.js","addon-tree-output/ember-bootstrap/components/bs-dropdown/menu/divider.js","addon-tree-output/ember-bootstrap/components/bs-dropdown/menu/item.js","addon-tree-output/ember-bootstrap/components/bs-dropdown/toggle.js","addon-tree-output/ember-bootstrap/components/bs-form.js","addon-tree-output/ember-bootstrap/components/bs-form/element.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control/checkbox.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control/input.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control/radio.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control/switch.js","addon-tree-output/ember-bootstrap/components/bs-form/element/control/textarea.js","addon-tree-output/ember-bootstrap/components/bs-form/element/errors.js","addon-tree-output/ember-bootstrap/components/bs-form/element/feedback-icon.js","addon-tree-output/ember-bootstrap/components/bs-form/element/help-text.js","addon-tree-output/ember-bootstrap/components/bs-form/element/label.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/horizontal.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/horizontal/checkbox.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/inline.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/inline/checkbox.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/vertical.js","addon-tree-output/ember-bootstrap/components/bs-form/element/layout/vertical/checkbox.js","addon-tree-output/ember-bootstrap/components/bs-form/element/legend.js","addon-tree-output/ember-bootstrap/components/bs-link-to.js","addon-tree-output/ember-bootstrap/components/bs-list-group.js","addon-tree-output/ember-bootstrap/components/bs-list-group/item.js","addon-tree-output/ember-bootstrap/components/bs-modal-simple.js","addon-tree-output/ember-bootstrap/components/bs-modal.js","addon-tree-output/ember-bootstrap/components/bs-modal/body.js","addon-tree-output/ember-bootstrap/components/bs-modal/dialog.js","addon-tree-output/ember-bootstrap/components/bs-modal/footer.js","addon-tree-output/ember-bootstrap/components/bs-modal/header.js","addon-tree-output/ember-bootstrap/components/bs-modal/header/close.js","addon-tree-output/ember-bootstrap/components/bs-modal/header/title.js","addon-tree-output/ember-bootstrap/components/bs-nav.js","addon-tree-output/ember-bootstrap/components/bs-nav/item.js","addon-tree-output/ember-bootstrap/components/bs-navbar.js","addon-tree-output/ember-bootstrap/components/bs-navbar/content.js","addon-tree-output/ember-bootstrap/components/bs-navbar/link-to.js","addon-tree-output/ember-bootstrap/components/bs-navbar/nav.js","addon-tree-output/ember-bootstrap/components/bs-navbar/toggle.js","addon-tree-output/ember-bootstrap/components/bs-popover.js","addon-tree-output/ember-bootstrap/components/bs-popover/element.js","addon-tree-output/ember-bootstrap/components/bs-progress.js","addon-tree-output/ember-bootstrap/components/bs-progress/bar.js","addon-tree-output/ember-bootstrap/components/bs-spinner.js","addon-tree-output/ember-bootstrap/components/bs-tab.js","addon-tree-output/ember-bootstrap/components/bs-tab/pane.js","addon-tree-output/ember-bootstrap/components/bs-tooltip.js","addon-tree-output/ember-bootstrap/components/bs-tooltip/element.js","addon-tree-output/ember-bootstrap/config.js","addon-tree-output/ember-bootstrap/helpers/bs-contains.js","addon-tree-output/ember-bootstrap/helpers/bs-default.js","addon-tree-output/ember-bootstrap/helpers/bs-eq.js","addon-tree-output/ember-bootstrap/helpers/bs-form-horiz-input-class.js","addon-tree-output/ember-bootstrap/helpers/bs-form-horiz-offset-class.js","addon-tree-output/ember-bootstrap/helpers/bs-noop.js","addon-tree-output/ember-bootstrap/helpers/bs-size-class.js","addon-tree-output/ember-bootstrap/helpers/bs-type-class.js","addon-tree-output/ember-bootstrap/macros-config.js","addon-tree-output/ember-bootstrap/modifiers/bs-conditional-attribute.js","addon-tree-output/ember-bootstrap/template-registry.js","addon-tree-output/ember-bootstrap/utils/decorators/arg.js","addon-tree-output/ember-bootstrap/utils/decorators/uses-transition.js","addon-tree-output/ember-bootstrap/utils/dom.js","addon-tree-output/ember-bootstrap/utils/form-validation-class.js","addon-tree-output/ember-bootstrap/utils/is-fastboot.js","addon-tree-output/ember-bootstrap/utils/size-class.js","addon-tree-output/ember-bootstrap/utils/transition-end.js","addon-tree-output/ember-bootstrap/version.js","addon-tree-output/ember-cli-app-version/initializer-factory.js","addon-tree-output/ember-cli-app-version/utils/regexp.js","addon-tree-output/ember-on-helper/helpers/on-document.js","addon-tree-output/ember-on-helper/helpers/on-window.js","addon-tree-output/ember-on-helper/helpers/on.js","addon-tree-output/ember-on-helper/utils/event-listener.js","addon-tree-output/ember-popper-modifier/-base-popper-modifier.js","addon-tree-output/ember-popper-modifier/helpers/popper-modifier.js","addon-tree-output/ember-popper-modifier/in-runloop-modifier.js","addon-tree-output/ember-popper-modifier/index.js","addon-tree-output/ember-popper-modifier/modifiers/popper-tooltip.js","addon-tree-output/ember-popper-modifier/modifiers/popper.js","addon-tree-output/ember-popper-modifier/template-registry.js","addon-tree-output/ember-ref-bucket/helpers/ref-to.js","addon-tree-output/ember-ref-bucket/index.js","addon-tree-output/ember-ref-bucket/instance-initializers/global-ref-cleanup.js","addon-tree-output/ember-ref-bucket/modifiers/create-ref.js","addon-tree-output/ember-ref-bucket/utils/prototype-reference.js","addon-tree-output/ember-ref-bucket/utils/ref.js","addon-tree-output/ember-resolver/container-debug-adapter.js","addon-tree-output/ember-resolver/features.js","addon-tree-output/ember-resolver/index.js","addon-tree-output/ember-resolver/string/cache.js","addon-tree-output/ember-resolver/string/index.js","addon-tree-output/ember-resolver/utils/class-factory.js","addon-tree-output/ember-tracked-storage-polyfill/index.js","addon-tree-output/ember-uuid/index.js","addon-tree-output/ember-uuid/utils/browser-rng.js","addon-tree-output/ember-uuid/utils/uuid-generator.js","vendor/ember-cli/vendor-suffix.js"],"sourcesContent":["window.EmberENV = (function(EmberENV, extra) {\n  for (var key in extra) {\n    EmberENV[key] = extra[key];\n  }\n\n  return EmberENV;\n})(window.EmberENV || {}, {\"FEATURES\":{},\"EXTEND_PROTOTYPES\":{\"Date\":false},\"_APPLICATION_TEMPLATE_WRAPPER\":false,\"_DEFAULT_ASYNC_OBSERVERS\":true,\"_JQUERY_INTEGRATION\":false,\"_NO_IMPLICIT_ROUTE_MODEL\":true,\"_TEMPLATE_ONLY_GLIMMER_COMPONENTS\":true,\"_USE_EMBER_MODULES\":true});\n\n// used to determine if the application should be booted immediately when `app-name.js` is evaluated\n// when `runningTests` the `app-name.js` file will **not** import the applications `app/app.js` and\n// call `Application.create(...)` on it. Additionally, applications can opt-out of this behavior by\n// setting `autoRun` to `false` in their `ember-cli-build.js`\n//\n// The default `test-support.js` file will set this to `true` when it runs (so that Application.create()\n// is not ran when running tests).\nvar runningTests = false;\n\n\n","var loader, define, requireModule, require, requirejs;\n\n(function (global) {\n  'use strict';\n\n  function dict() {\n    var obj = Object.create(null);\n    obj['__'] = undefined;\n    delete obj['__'];\n    return obj;\n  }\n\n  // Save off the original values of these globals, so we can restore them if someone asks us to\n  var oldGlobals = {\n    loader: loader,\n    define: define,\n    requireModule: requireModule,\n    require: require,\n    requirejs: requirejs\n  };\n\n  requirejs = require = requireModule = function (id) {\n    var pending = [];\n    var mod = findModule(id, '(require)', pending);\n\n    for (var i = pending.length - 1; i >= 0; i--) {\n      pending[i].exports();\n    }\n\n    return mod.module.exports;\n  };\n\n  loader = {\n    noConflict: function (aliases) {\n      var oldName, newName;\n\n      for (oldName in aliases) {\n        if (aliases.hasOwnProperty(oldName)) {\n          if (oldGlobals.hasOwnProperty(oldName)) {\n            newName = aliases[oldName];\n\n            global[newName] = global[oldName];\n            global[oldName] = oldGlobals[oldName];\n          }\n        }\n      }\n    },\n    // Option to enable or disable the generation of default exports\n    makeDefaultExport: true\n  };\n\n  var registry = dict();\n  var seen = dict();\n\n  var uuid = 0;\n\n  function unsupportedModule(length) {\n    throw new Error('an unsupported module was defined, expected `define(id, deps, module)` instead got: `' + length + '` arguments to define`');\n  }\n\n  var defaultDeps = ['require', 'exports', 'module'];\n\n  function Module(id, deps, callback, alias) {\n    this.uuid = uuid++;\n    this.id = id;\n    this.deps = !deps.length && callback.length ? defaultDeps : deps;\n    this.module = { exports: {} };\n    this.callback = callback;\n    this.hasExportsAsDep = false;\n    this.isAlias = alias;\n    this.reified = new Array(deps.length);\n\n    /*\n       Each module normally passes through these states, in order:\n         new       : initial state\n         pending   : this module is scheduled to be executed\n         reifying  : this module's dependencies are being executed\n         reified   : this module's dependencies finished executing successfully\n         errored   : this module's dependencies failed to execute\n         finalized : this module executed successfully\n     */\n    this.state = 'new';\n  }\n\n  Module.prototype.makeDefaultExport = function () {\n    var exports = this.module.exports;\n    if (exports !== null && (typeof exports === 'object' || typeof exports === 'function') && exports['default'] === undefined && Object.isExtensible(exports)) {\n      exports['default'] = exports;\n    }\n  };\n\n  Module.prototype.exports = function () {\n    // if finalized, there is no work to do. If reifying, there is a\n    // circular dependency so we must return our (partial) exports.\n    if (this.state === 'finalized' || this.state === 'reifying') {\n      return this.module.exports;\n    }\n\n\n    if (loader.wrapModules) {\n      this.callback = loader.wrapModules(this.id, this.callback);\n    }\n\n    this.reify();\n\n    var result = this.callback.apply(this, this.reified);\n    this.reified.length = 0;\n    this.state = 'finalized';\n\n    if (!(this.hasExportsAsDep && result === undefined)) {\n      this.module.exports = result;\n    }\n    if (loader.makeDefaultExport) {\n      this.makeDefaultExport();\n    }\n    return this.module.exports;\n  };\n\n  Module.prototype.unsee = function () {\n    this.state = 'new';\n    this.module = { exports: {} };\n  };\n\n  Module.prototype.reify = function () {\n    if (this.state === 'reified') {\n      return;\n    }\n    this.state = 'reifying';\n    try {\n      this.reified = this._reify();\n      this.state = 'reified';\n    } finally {\n      if (this.state === 'reifying') {\n        this.state = 'errored';\n      }\n    }\n  };\n\n  Module.prototype._reify = function () {\n    var reified = this.reified.slice();\n    for (var i = 0; i < reified.length; i++) {\n      var mod = reified[i];\n      reified[i] = mod.exports ? mod.exports : mod.module.exports();\n    }\n    return reified;\n  };\n\n  Module.prototype.findDeps = function (pending) {\n    if (this.state !== 'new') {\n      return;\n    }\n\n    this.state = 'pending';\n\n    var deps = this.deps;\n\n    for (var i = 0; i < deps.length; i++) {\n      var dep = deps[i];\n      var entry = this.reified[i] = { exports: undefined, module: undefined };\n      if (dep === 'exports') {\n        this.hasExportsAsDep = true;\n        entry.exports = this.module.exports;\n      } else if (dep === 'require') {\n        entry.exports = this.makeRequire();\n      } else if (dep === 'module') {\n        entry.exports = this.module;\n      } else {\n        entry.module = findModule(resolve(dep, this.id), this.id, pending);\n      }\n    }\n  };\n\n  Module.prototype.makeRequire = function () {\n    var id = this.id;\n    var r = function (dep) {\n      return require(resolve(dep, id));\n    };\n    r['default'] = r;\n    r.moduleId = id;\n    r.has = function (dep) {\n      return has(resolve(dep, id));\n    };\n    return r;\n  };\n\n  define = function (id, deps, callback) {\n    var module = registry[id];\n\n    // If a module for this id has already been defined and is in any state\n    // other than `new` (meaning it has been or is currently being required),\n    // then we return early to avoid redefinition.\n    if (module && module.state !== 'new') {\n      return;\n    }\n\n    if (arguments.length < 2) {\n      unsupportedModule(arguments.length);\n    }\n\n    if (!Array.isArray(deps)) {\n      callback = deps;\n      deps = [];\n    }\n\n    if (callback instanceof Alias) {\n      registry[id] = new Module(callback.id, deps, callback, true);\n    } else {\n      registry[id] = new Module(id, deps, callback, false);\n    }\n  };\n\n  define.exports = function (name, defaultExport) {\n    var module = registry[name];\n\n    // If a module for this name has already been defined and is in any state\n    // other than `new` (meaning it has been or is currently being required),\n    // then we return early to avoid redefinition.\n    if (module && module.state !== 'new') {\n      return;\n    }\n\n    module = new Module(name, [], noop, null);\n    module.module.exports = defaultExport;\n    module.state = 'finalized';\n    registry[name] = module;\n\n    return module;\n  };\n\n  function noop() {}\n  // we don't support all of AMD\n  // define.amd = {};\n\n  function Alias(id) {\n    this.id = id;\n  }\n\n  define.alias = function (id, target) {\n    if (arguments.length === 2) {\n      return define(target, new Alias(id));\n    }\n\n    return new Alias(id);\n  };\n\n  function missingModule(id, referrer) {\n    throw new Error('Could not find module `' + id + '` imported from `' + referrer + '`');\n  }\n\n  function findModule(id, referrer, pending) {\n    var mod = registry[id] || registry[id + '/index'];\n\n    while (mod && mod.isAlias) {\n      mod = registry[mod.id] || registry[mod.id + '/index'];\n    }\n\n    if (!mod) {\n      missingModule(id, referrer);\n    }\n\n    if (pending && mod.state !== 'pending' && mod.state !== 'finalized') {\n      mod.findDeps(pending);\n      pending.push(mod);\n    }\n    return mod;\n  }\n\n  function resolve(child, id) {\n    if (child.charAt(0) !== '.') {\n      return child;\n    }\n\n\n    var parts = child.split('/');\n    var nameParts = id.split('/');\n    var parentBase = nameParts.slice(0, -1);\n\n    for (var i = 0, l = parts.length; i < l; i++) {\n      var part = parts[i];\n\n      if (part === '..') {\n        if (parentBase.length === 0) {\n          throw new Error('Cannot access parent module of root');\n        }\n        parentBase.pop();\n      } else if (part === '.') {\n        continue;\n      } else {\n        parentBase.push(part);\n      }\n    }\n\n    return parentBase.join('/');\n  }\n\n  function has(id) {\n    return !!(registry[id] || registry[id + '/index']);\n  }\n\n  requirejs.entries = requirejs._eak_seen = registry;\n  requirejs.has = has;\n  requirejs.unsee = function (id) {\n    findModule(id, '(unsee)', false).unsee();\n  };\n\n  requirejs.clear = function () {\n    requirejs.entries = requirejs._eak_seen = registry = dict();\n    seen = dict();\n  };\n\n  // This code primes the JS engine for good performance by warming the\n  // JIT compiler for these functions.\n  define('foo', function () {});\n  define('foo/bar', [], function () {});\n  define('foo/asdf', ['module', 'exports', 'require'], function (module, exports, require) {\n    if (require.has('foo/bar')) {\n      require('foo/bar');\n    }\n  });\n  define('foo/baz', [], define.alias('foo'));\n  define('foo/quz', define.alias('foo'));\n  define.alias('foo', 'foo/qux');\n  define('foo/bar', ['foo', './quz', './baz', './asdf', './bar', '../foo'], function () {});\n  define('foo/main', ['foo/bar'], function () {});\n  define.exports('foo/exports', {});\n\n  require('foo/exports');\n  require('foo/main');\n  require.unsee('foo/bar');\n\n  requirejs.clear();\n\n  if (typeof exports === 'object' && typeof module === 'object' && module.exports) {\n    module.exports = { require: require, define: define };\n  }\n})(this);","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","(function () {\n  function vendorModule() {\n    'use strict';\n\n    return {\n      'default': self['jQuery'],\n      __esModule: true\n    };\n  }\n  define('jquery', [], vendorModule);\n})();","define(\"novnc-sockjs/core/base64\", [\"exports\", \"novnc-sockjs/core/util/logging\"], function (_exports, Log) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /* This Source Code Form is subject to the terms of the Mozilla Public\n   * License, v. 2.0. If a copy of the MPL was not distributed with this\n   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n  // From: http://hg.mozilla.org/mozilla-central/raw-file/ec10630b1a54/js/src/devtools/jint/sunspider/string-base64.js\n  var _default = _exports.default = {\n    /* Convert data (an array of integers) to a Base64 string. */\n    toBase64Table: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split(''),\n    base64Pad: '=',\n    encode(data) {\n      \"use strict\";\n\n      let result = '';\n      const length = data.length;\n      const lengthpad = length % 3;\n      // Convert every three bytes to 4 ascii characters.\n\n      for (let i = 0; i < length - 2; i += 3) {\n        result += this.toBase64Table[data[i] >> 2];\n        result += this.toBase64Table[((data[i] & 0x03) << 4) + (data[i + 1] >> 4)];\n        result += this.toBase64Table[((data[i + 1] & 0x0f) << 2) + (data[i + 2] >> 6)];\n        result += this.toBase64Table[data[i + 2] & 0x3f];\n      }\n\n      // Convert the remaining 1 or 2 bytes, pad out to 4 characters.\n      const j = length - lengthpad;\n      if (lengthpad === 2) {\n        result += this.toBase64Table[data[j] >> 2];\n        result += this.toBase64Table[((data[j] & 0x03) << 4) + (data[j + 1] >> 4)];\n        result += this.toBase64Table[(data[j + 1] & 0x0f) << 2];\n        result += this.toBase64Table[64];\n      } else if (lengthpad === 1) {\n        result += this.toBase64Table[data[j] >> 2];\n        result += this.toBase64Table[(data[j] & 0x03) << 4];\n        result += this.toBase64Table[64];\n        result += this.toBase64Table[64];\n      }\n      return result;\n    },\n    /* Convert Base64 data to a string */\n    /* eslint-disable comma-spacing */\n    toBinaryTable: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1],\n    /* eslint-enable comma-spacing */\n\n    decode(data, offset = 0) {\n      let dataLength = data.indexOf('=') - offset;\n      if (dataLength < 0) {\n        dataLength = data.length - offset;\n      }\n\n      /* Every four characters is 3 resulting numbers */\n      const resultLength = (dataLength >> 2) * 3 + Math.floor(dataLength % 4 / 1.5);\n      const result = new Array(resultLength);\n\n      // Convert one by one.\n\n      let leftbits = 0; // number of bits decoded, but yet to be appended\n      let leftdata = 0; // bits decoded, but yet to be appended\n      for (let idx = 0, i = offset; i < data.length; i++) {\n        const c = this.toBinaryTable[data.charCodeAt(i) & 0x7f];\n        const padding = data.charAt(i) === this.base64Pad;\n        // Skip illegal characters and whitespace\n        if (c === -1) {\n          Log.Error(\"Illegal character code \" + data.charCodeAt(i) + \" at position \" + i);\n          continue;\n        }\n\n        // Collect data into leftdata, update bitcount\n        leftdata = leftdata << 6 | c;\n        leftbits += 6;\n\n        // If we have 8 or more bits, append 8 bits to the result\n        if (leftbits >= 8) {\n          leftbits -= 8;\n          // Append if not padding.\n          if (!padding) {\n            result[idx++] = leftdata >> leftbits & 0xff;\n          }\n          leftdata &= (1 << leftbits) - 1;\n        }\n      }\n\n      // If there are any bits left, the base64 string was corrupted\n      if (leftbits) {\n        const err = new Error('Corrupted base64 string');\n        err.name = 'Base64-Error';\n        throw err;\n      }\n      return result;\n    }\n  };\n  /* End of Base64 namespace */\n});","define(\"novnc-sockjs/core/decoders/copyrect\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class CopyRectDecoder {\n    decodeRect(x, y, width, height, sock, display, depth) {\n      if (sock.rQwait(\"COPYRECT\", 4)) {\n        return false;\n      }\n      let deltaX = sock.rQshift16();\n      let deltaY = sock.rQshift16();\n      if (width === 0 || height === 0) {\n        return true;\n      }\n      display.copyImage(deltaX, deltaY, x, y, width, height);\n      return true;\n    }\n  }\n  _exports.default = CopyRectDecoder;\n});","define(\"novnc-sockjs/core/decoders/hextile\", [\"exports\", \"novnc-sockjs/core/util/logging\"], function (_exports, Log) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class HextileDecoder {\n    constructor() {\n      this._tiles = 0;\n      this._lastsubencoding = 0;\n      this._tileBuffer = new Uint8Array(16 * 16 * 4);\n    }\n    decodeRect(x, y, width, height, sock, display, depth) {\n      if (this._tiles === 0) {\n        this._tilesX = Math.ceil(width / 16);\n        this._tilesY = Math.ceil(height / 16);\n        this._totalTiles = this._tilesX * this._tilesY;\n        this._tiles = this._totalTiles;\n      }\n      while (this._tiles > 0) {\n        let bytes = 1;\n        if (sock.rQwait(\"HEXTILE\", bytes)) {\n          return false;\n        }\n        let rQ = sock.rQ;\n        let rQi = sock.rQi;\n        let subencoding = rQ[rQi]; // Peek\n        if (subencoding > 30) {\n          // Raw\n          throw new Error(\"Illegal hextile subencoding (subencoding: \" + subencoding + \")\");\n        }\n        const currTile = this._totalTiles - this._tiles;\n        const tileX = currTile % this._tilesX;\n        const tileY = Math.floor(currTile / this._tilesX);\n        const tx = x + tileX * 16;\n        const ty = y + tileY * 16;\n        const tw = Math.min(16, x + width - tx);\n        const th = Math.min(16, y + height - ty);\n\n        // Figure out how much we are expecting\n        if (subencoding & 0x01) {\n          // Raw\n          bytes += tw * th * 4;\n        } else {\n          if (subencoding & 0x02) {\n            // Background\n            bytes += 4;\n          }\n          if (subencoding & 0x04) {\n            // Foreground\n            bytes += 4;\n          }\n          if (subencoding & 0x08) {\n            // AnySubrects\n            bytes++; // Since we aren't shifting it off\n\n            if (sock.rQwait(\"HEXTILE\", bytes)) {\n              return false;\n            }\n            let subrects = rQ[rQi + bytes - 1]; // Peek\n            if (subencoding & 0x10) {\n              // SubrectsColoured\n              bytes += subrects * (4 + 2);\n            } else {\n              bytes += subrects * 2;\n            }\n          }\n        }\n        if (sock.rQwait(\"HEXTILE\", bytes)) {\n          return false;\n        }\n\n        // We know the encoding and have a whole tile\n        rQi++;\n        if (subencoding === 0) {\n          if (this._lastsubencoding & 0x01) {\n            // Weird: ignore blanks are RAW\n            Log.Debug(\"     Ignoring blank after RAW\");\n          } else {\n            display.fillRect(tx, ty, tw, th, this._background);\n          }\n        } else if (subencoding & 0x01) {\n          // Raw\n          let pixels = tw * th;\n          // Max sure the image is fully opaque\n          for (let i = 0; i < pixels; i++) {\n            rQ[rQi + i * 4 + 3] = 255;\n          }\n          display.blitImage(tx, ty, tw, th, rQ, rQi);\n          rQi += bytes - 1;\n        } else {\n          if (subencoding & 0x02) {\n            // Background\n            this._background = [rQ[rQi], rQ[rQi + 1], rQ[rQi + 2], rQ[rQi + 3]];\n            rQi += 4;\n          }\n          if (subencoding & 0x04) {\n            // Foreground\n            this._foreground = [rQ[rQi], rQ[rQi + 1], rQ[rQi + 2], rQ[rQi + 3]];\n            rQi += 4;\n          }\n          this._startTile(tx, ty, tw, th, this._background);\n          if (subencoding & 0x08) {\n            // AnySubrects\n            let subrects = rQ[rQi];\n            rQi++;\n            for (let s = 0; s < subrects; s++) {\n              let color;\n              if (subencoding & 0x10) {\n                // SubrectsColoured\n                color = [rQ[rQi], rQ[rQi + 1], rQ[rQi + 2], rQ[rQi + 3]];\n                rQi += 4;\n              } else {\n                color = this._foreground;\n              }\n              const xy = rQ[rQi];\n              rQi++;\n              const sx = xy >> 4;\n              const sy = xy & 0x0f;\n              const wh = rQ[rQi];\n              rQi++;\n              const sw = (wh >> 4) + 1;\n              const sh = (wh & 0x0f) + 1;\n              this._subTile(sx, sy, sw, sh, color);\n            }\n          }\n          this._finishTile(display);\n        }\n        sock.rQi = rQi;\n        this._lastsubencoding = subencoding;\n        this._tiles--;\n      }\n      return true;\n    }\n\n    // start updating a tile\n    _startTile(x, y, width, height, color) {\n      this._tileX = x;\n      this._tileY = y;\n      this._tileW = width;\n      this._tileH = height;\n      const red = color[0];\n      const green = color[1];\n      const blue = color[2];\n      const data = this._tileBuffer;\n      for (let i = 0; i < width * height * 4; i += 4) {\n        data[i] = red;\n        data[i + 1] = green;\n        data[i + 2] = blue;\n        data[i + 3] = 255;\n      }\n    }\n\n    // update sub-rectangle of the current tile\n    _subTile(x, y, w, h, color) {\n      const red = color[0];\n      const green = color[1];\n      const blue = color[2];\n      const xend = x + w;\n      const yend = y + h;\n      const data = this._tileBuffer;\n      const width = this._tileW;\n      for (let j = y; j < yend; j++) {\n        for (let i = x; i < xend; i++) {\n          const p = (i + j * width) * 4;\n          data[p] = red;\n          data[p + 1] = green;\n          data[p + 2] = blue;\n          data[p + 3] = 255;\n        }\n      }\n    }\n\n    // draw the current tile to the screen\n    _finishTile(display) {\n      display.blitImage(this._tileX, this._tileY, this._tileW, this._tileH, this._tileBuffer, 0);\n    }\n  }\n  _exports.default = HextileDecoder;\n});","define(\"novnc-sockjs/core/decoders/raw\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class RawDecoder {\n    constructor() {\n      this._lines = 0;\n    }\n    decodeRect(x, y, width, height, sock, display, depth) {\n      if (width === 0 || height === 0) {\n        return true;\n      }\n      if (this._lines === 0) {\n        this._lines = height;\n      }\n      const pixelSize = depth == 8 ? 1 : 4;\n      const bytesPerLine = width * pixelSize;\n      if (sock.rQwait(\"RAW\", bytesPerLine)) {\n        return false;\n      }\n      const curY = y + (height - this._lines);\n      const currHeight = Math.min(this._lines, Math.floor(sock.rQlen / bytesPerLine));\n      const pixels = width * currHeight;\n      let data = sock.rQ;\n      let index = sock.rQi;\n\n      // Convert data if needed\n      if (depth == 8) {\n        const newdata = new Uint8Array(pixels * 4);\n        for (let i = 0; i < pixels; i++) {\n          newdata[i * 4 + 0] = (data[index + i] >> 0 & 0x3) * 255 / 3;\n          newdata[i * 4 + 1] = (data[index + i] >> 2 & 0x3) * 255 / 3;\n          newdata[i * 4 + 2] = (data[index + i] >> 4 & 0x3) * 255 / 3;\n          newdata[i * 4 + 3] = 255;\n        }\n        data = newdata;\n        index = 0;\n      }\n\n      // Max sure the image is fully opaque\n      for (let i = 0; i < pixels; i++) {\n        data[i * 4 + 3] = 255;\n      }\n      display.blitImage(x, curY, width, currHeight, data, index);\n      sock.rQskipBytes(currHeight * bytesPerLine);\n      this._lines -= currHeight;\n      if (this._lines > 0) {\n        return false;\n      }\n      return true;\n    }\n  }\n  _exports.default = RawDecoder;\n});","define(\"novnc-sockjs/core/decoders/rre\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class RREDecoder {\n    constructor() {\n      this._subrects = 0;\n    }\n    decodeRect(x, y, width, height, sock, display, depth) {\n      if (this._subrects === 0) {\n        if (sock.rQwait(\"RRE\", 4 + 4)) {\n          return false;\n        }\n        this._subrects = sock.rQshift32();\n        let color = sock.rQshiftBytes(4); // Background\n        display.fillRect(x, y, width, height, color);\n      }\n      while (this._subrects > 0) {\n        if (sock.rQwait(\"RRE\", 4 + 8)) {\n          return false;\n        }\n        let color = sock.rQshiftBytes(4);\n        let sx = sock.rQshift16();\n        let sy = sock.rQshift16();\n        let swidth = sock.rQshift16();\n        let sheight = sock.rQshift16();\n        display.fillRect(x + sx, y + sy, swidth, sheight, color);\n        this._subrects--;\n      }\n      return true;\n    }\n  }\n  _exports.default = RREDecoder;\n});","define(\"novnc-sockjs/core/decoders/tight\", [\"exports\", \"novnc-sockjs/core/util/logging\", \"novnc-sockjs/core/inflator\"], function (_exports, Log, _inflator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * (c) 2012 Michael Tinglof, Joe Balaz, Les Piech (Mercuri.ca)\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class TightDecoder {\n    constructor() {\n      this._ctl = null;\n      this._filter = null;\n      this._numColors = 0;\n      this._palette = new Uint8Array(1024); // 256 * 4 (max palette size * max bytes-per-pixel)\n      this._len = 0;\n      this._zlibs = [];\n      for (let i = 0; i < 4; i++) {\n        this._zlibs[i] = new _inflator.default();\n      }\n    }\n    decodeRect(x, y, width, height, sock, display, depth) {\n      if (this._ctl === null) {\n        if (sock.rQwait(\"TIGHT compression-control\", 1)) {\n          return false;\n        }\n        this._ctl = sock.rQshift8();\n\n        // Reset streams if the server requests it\n        for (let i = 0; i < 4; i++) {\n          if (this._ctl >> i & 1) {\n            this._zlibs[i].reset();\n            Log.Info(\"Reset zlib stream \" + i);\n          }\n        }\n\n        // Figure out filter\n        this._ctl = this._ctl >> 4;\n      }\n      let ret;\n      if (this._ctl === 0x08) {\n        ret = this._fillRect(x, y, width, height, sock, display, depth);\n      } else if (this._ctl === 0x09) {\n        ret = this._jpegRect(x, y, width, height, sock, display, depth);\n      } else if (this._ctl === 0x0A) {\n        ret = this._pngRect(x, y, width, height, sock, display, depth);\n      } else if ((this._ctl & 0x08) == 0) {\n        ret = this._basicRect(this._ctl, x, y, width, height, sock, display, depth);\n      } else {\n        throw new Error(\"Illegal tight compression received (ctl: \" + this._ctl + \")\");\n      }\n      if (ret) {\n        this._ctl = null;\n      }\n      return ret;\n    }\n    _fillRect(x, y, width, height, sock, display, depth) {\n      if (sock.rQwait(\"TIGHT\", 3)) {\n        return false;\n      }\n      const rQi = sock.rQi;\n      const rQ = sock.rQ;\n      display.fillRect(x, y, width, height, [rQ[rQi], rQ[rQi + 1], rQ[rQi + 2]], false);\n      sock.rQskipBytes(3);\n      return true;\n    }\n    _jpegRect(x, y, width, height, sock, display, depth) {\n      let data = this._readData(sock);\n      if (data === null) {\n        return false;\n      }\n      display.imageRect(x, y, width, height, \"image/jpeg\", data);\n      return true;\n    }\n    _pngRect(x, y, width, height, sock, display, depth) {\n      throw new Error(\"PNG received in standard Tight rect\");\n    }\n    _basicRect(ctl, x, y, width, height, sock, display, depth) {\n      if (this._filter === null) {\n        if (ctl & 0x4) {\n          if (sock.rQwait(\"TIGHT\", 1)) {\n            return false;\n          }\n          this._filter = sock.rQshift8();\n        } else {\n          // Implicit CopyFilter\n          this._filter = 0;\n        }\n      }\n      let streamId = ctl & 0x3;\n      let ret;\n      switch (this._filter) {\n        case 0:\n          // CopyFilter\n          ret = this._copyFilter(streamId, x, y, width, height, sock, display, depth);\n          break;\n        case 1:\n          // PaletteFilter\n          ret = this._paletteFilter(streamId, x, y, width, height, sock, display, depth);\n          break;\n        case 2:\n          // GradientFilter\n          ret = this._gradientFilter(streamId, x, y, width, height, sock, display, depth);\n          break;\n        default:\n          throw new Error(\"Illegal tight filter received (ctl: \" + this._filter + \")\");\n      }\n      if (ret) {\n        this._filter = null;\n      }\n      return ret;\n    }\n    _copyFilter(streamId, x, y, width, height, sock, display, depth) {\n      const uncompressedSize = width * height * 3;\n      let data;\n      if (uncompressedSize === 0) {\n        return true;\n      }\n      if (uncompressedSize < 12) {\n        if (sock.rQwait(\"TIGHT\", uncompressedSize)) {\n          return false;\n        }\n        data = sock.rQshiftBytes(uncompressedSize);\n      } else {\n        data = this._readData(sock);\n        if (data === null) {\n          return false;\n        }\n        this._zlibs[streamId].setInput(data);\n        data = this._zlibs[streamId].inflate(uncompressedSize);\n        this._zlibs[streamId].setInput(null);\n      }\n      let rgbx = new Uint8Array(width * height * 4);\n      for (let i = 0, j = 0; i < width * height * 4; i += 4, j += 3) {\n        rgbx[i] = data[j];\n        rgbx[i + 1] = data[j + 1];\n        rgbx[i + 2] = data[j + 2];\n        rgbx[i + 3] = 255; // Alpha\n      }\n      display.blitImage(x, y, width, height, rgbx, 0, false);\n      return true;\n    }\n    _paletteFilter(streamId, x, y, width, height, sock, display, depth) {\n      if (this._numColors === 0) {\n        if (sock.rQwait(\"TIGHT palette\", 1)) {\n          return false;\n        }\n        const numColors = sock.rQpeek8() + 1;\n        const paletteSize = numColors * 3;\n        if (sock.rQwait(\"TIGHT palette\", 1 + paletteSize)) {\n          return false;\n        }\n        this._numColors = numColors;\n        sock.rQskipBytes(1);\n        sock.rQshiftTo(this._palette, paletteSize);\n      }\n      const bpp = this._numColors <= 2 ? 1 : 8;\n      const rowSize = Math.floor((width * bpp + 7) / 8);\n      const uncompressedSize = rowSize * height;\n      let data;\n      if (uncompressedSize === 0) {\n        return true;\n      }\n      if (uncompressedSize < 12) {\n        if (sock.rQwait(\"TIGHT\", uncompressedSize)) {\n          return false;\n        }\n        data = sock.rQshiftBytes(uncompressedSize);\n      } else {\n        data = this._readData(sock);\n        if (data === null) {\n          return false;\n        }\n        this._zlibs[streamId].setInput(data);\n        data = this._zlibs[streamId].inflate(uncompressedSize);\n        this._zlibs[streamId].setInput(null);\n      }\n\n      // Convert indexed (palette based) image data to RGB\n      if (this._numColors == 2) {\n        this._monoRect(x, y, width, height, data, this._palette, display);\n      } else {\n        this._paletteRect(x, y, width, height, data, this._palette, display);\n      }\n      this._numColors = 0;\n      return true;\n    }\n    _monoRect(x, y, width, height, data, palette, display) {\n      // Convert indexed (palette based) image data to RGB\n      // TODO: reduce number of calculations inside loop\n      const dest = this._getScratchBuffer(width * height * 4);\n      const w = Math.floor((width + 7) / 8);\n      const w1 = Math.floor(width / 8);\n      for (let y = 0; y < height; y++) {\n        let dp, sp, x;\n        for (x = 0; x < w1; x++) {\n          for (let b = 7; b >= 0; b--) {\n            dp = (y * width + x * 8 + 7 - b) * 4;\n            sp = (data[y * w + x] >> b & 1) * 3;\n            dest[dp] = palette[sp];\n            dest[dp + 1] = palette[sp + 1];\n            dest[dp + 2] = palette[sp + 2];\n            dest[dp + 3] = 255;\n          }\n        }\n        for (let b = 7; b >= 8 - width % 8; b--) {\n          dp = (y * width + x * 8 + 7 - b) * 4;\n          sp = (data[y * w + x] >> b & 1) * 3;\n          dest[dp] = palette[sp];\n          dest[dp + 1] = palette[sp + 1];\n          dest[dp + 2] = palette[sp + 2];\n          dest[dp + 3] = 255;\n        }\n      }\n      display.blitImage(x, y, width, height, dest, 0, false);\n    }\n    _paletteRect(x, y, width, height, data, palette, display) {\n      // Convert indexed (palette based) image data to RGB\n      const dest = this._getScratchBuffer(width * height * 4);\n      const total = width * height * 4;\n      for (let i = 0, j = 0; i < total; i += 4, j++) {\n        const sp = data[j] * 3;\n        dest[i] = palette[sp];\n        dest[i + 1] = palette[sp + 1];\n        dest[i + 2] = palette[sp + 2];\n        dest[i + 3] = 255;\n      }\n      display.blitImage(x, y, width, height, dest, 0, false);\n    }\n    _gradientFilter(streamId, x, y, width, height, sock, display, depth) {\n      throw new Error(\"Gradient filter not implemented\");\n    }\n    _readData(sock) {\n      if (this._len === 0) {\n        if (sock.rQwait(\"TIGHT\", 3)) {\n          return null;\n        }\n        let byte;\n        byte = sock.rQshift8();\n        this._len = byte & 0x7f;\n        if (byte & 0x80) {\n          byte = sock.rQshift8();\n          this._len |= (byte & 0x7f) << 7;\n          if (byte & 0x80) {\n            byte = sock.rQshift8();\n            this._len |= byte << 14;\n          }\n        }\n      }\n      if (sock.rQwait(\"TIGHT\", this._len)) {\n        return null;\n      }\n      let data = sock.rQshiftBytes(this._len);\n      this._len = 0;\n      return data;\n    }\n    _getScratchBuffer(size) {\n      if (!this._scratchBuffer || this._scratchBuffer.length < size) {\n        this._scratchBuffer = new Uint8Array(size);\n      }\n      return this._scratchBuffer;\n    }\n  }\n  _exports.default = TightDecoder;\n});","define(\"novnc-sockjs/core/decoders/tightpng\", [\"exports\", \"novnc-sockjs/core/decoders/tight\"], function (_exports, _tight) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  class TightPNGDecoder extends _tight.default {\n    _pngRect(x, y, width, height, sock, display, depth) {\n      let data = this._readData(sock);\n      if (data === null) {\n        return false;\n      }\n      display.imageRect(x, y, width, height, \"image/png\", data);\n      return true;\n    }\n    _basicRect(ctl, x, y, width, height, sock, display, depth) {\n      throw new Error(\"BasicCompression received in TightPNG rect\");\n    }\n  }\n  _exports.default = TightPNGDecoder;\n});","define(\"novnc-sockjs/core/deflator\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/zlib/deflate\", \"novnc-sockjs/vendor/pako/lib/zlib/zstream\"], function (_exports, _deflate, _zstream) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  class Deflator {\n    constructor() {\n      this.strm = new _zstream.default();\n      this.chunkSize = 1024 * 10 * 10;\n      this.outputBuffer = new Uint8Array(this.chunkSize);\n      this.windowBits = 5;\n      (0, _deflate.deflateInit)(this.strm, this.windowBits);\n    }\n    deflate(inData) {\n      /* eslint-disable camelcase */\n      this.strm.input = inData;\n      this.strm.avail_in = this.strm.input.length;\n      this.strm.next_in = 0;\n      this.strm.output = this.outputBuffer;\n      this.strm.avail_out = this.chunkSize;\n      this.strm.next_out = 0;\n      /* eslint-enable camelcase */\n\n      let lastRet = (0, _deflate.deflate)(this.strm, _deflate.Z_FULL_FLUSH);\n      let outData = new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out);\n      if (lastRet < 0) {\n        throw new Error(\"zlib deflate failed\");\n      }\n      if (this.strm.avail_in > 0) {\n        // Read chunks until done\n\n        let chunks = [outData];\n        let totalLen = outData.length;\n        do {\n          /* eslint-disable camelcase */\n          this.strm.output = new Uint8Array(this.chunkSize);\n          this.strm.next_out = 0;\n          this.strm.avail_out = this.chunkSize;\n          /* eslint-enable camelcase */\n\n          lastRet = (0, _deflate.deflate)(this.strm, _deflate.Z_FULL_FLUSH);\n          if (lastRet < 0) {\n            throw new Error(\"zlib deflate failed\");\n          }\n          let chunk = new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out);\n          totalLen += chunk.length;\n          chunks.push(chunk);\n        } while (this.strm.avail_in > 0);\n\n        // Combine chunks into a single data\n\n        let newData = new Uint8Array(totalLen);\n        let offset = 0;\n        for (let i = 0; i < chunks.length; i++) {\n          newData.set(chunks[i], offset);\n          offset += chunks[i].length;\n        }\n        outData = newData;\n      }\n\n      /* eslint-disable camelcase */\n      this.strm.input = null;\n      this.strm.avail_in = 0;\n      this.strm.next_in = 0;\n      /* eslint-enable camelcase */\n\n      return outData;\n    }\n  }\n  _exports.default = Deflator;\n});","define(\"novnc-sockjs/core/des\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * Ported from Flashlight VNC ActionScript implementation:\n   *     http://www.wizhelp.com/flashlight-vnc/\n   *\n   * Full attribution follows:\n   *\n   * -------------------------------------------------------------------------\n   *\n   * This DES class has been extracted from package Acme.Crypto for use in VNC.\n   * The unnecessary odd parity code has been removed.\n   *\n   * These changes are:\n   *  Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.\n   *\n   * This software is distributed in the hope that it will be useful,\n   * but WITHOUT ANY WARRANTY; without even the implied warranty of\n   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n   *\n  \n   * DesCipher - the DES encryption method\n   *\n   * The meat of this code is by Dave Zimmerman <dzimm@widget.com>, and is:\n   *\n   * Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved.\n   *\n   * Permission to use, copy, modify, and distribute this software\n   * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and\n   * without fee is hereby granted, provided that this copyright notice is kept\n   * intact.\n   *\n   * WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY\n   * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n   * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE\n   * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR\n   * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.\n   *\n   * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE\n   * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE\n   * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT\n   * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE\n   * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE\n   * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE\n   * PHYSICAL OR ENVIRONMENTAL DAMAGE (\"HIGH RISK ACTIVITIES\").  WIDGET WORKSHOP\n   * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR\n   * HIGH RISK ACTIVITIES.\n   *\n   *\n   * The rest is:\n   *\n   * Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>.  All rights reserved.\n   *\n   * Redistribution and use in source and binary forms, with or without\n   * modification, are permitted provided that the following conditions\n   * are met:\n   * 1. Redistributions of source code must retain the above copyright\n   *    notice, this list of conditions and the following disclaimer.\n   * 2. Redistributions in binary form must reproduce the above copyright\n   *    notice, this list of conditions and the following disclaimer in the\n   *    documentation and/or other materials provided with the distribution.\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n   * SUCH DAMAGE.\n   *\n   * Visit the ACME Labs Java page for up-to-date versions of this and other\n   * fine Java utilities: http://www.acme.com/java/\n   */\n\n  /* eslint-disable comma-spacing */\n\n  // Tables, permutations, S-boxes, etc.\n  const PC2 = [13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31],\n    totrot = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n  const z = 0x0;\n  let a, b, c, d, e, f;\n  a = 1 << 16;\n  b = 1 << 24;\n  c = a | b;\n  d = 1 << 2;\n  e = 1 << 10;\n  f = d | e;\n  const SP1 = [c | e, z | z, a | z, c | f, c | d, a | f, z | d, a | z, z | e, c | e, c | f, z | e, b | f, c | d, b | z, z | d, z | f, b | e, b | e, a | e, a | e, c | z, c | z, b | f, a | d, b | d, b | d, a | d, z | z, z | f, a | f, b | z, a | z, c | f, z | d, c | z, c | e, b | z, b | z, z | e, c | d, a | z, a | e, b | d, z | e, z | d, b | f, a | f, c | f, a | d, c | z, b | f, b | d, z | f, a | f, c | e, z | f, b | e, b | e, z | z, a | d, a | e, z | z, c | d];\n  a = 1 << 20;\n  b = 1 << 31;\n  c = a | b;\n  d = 1 << 5;\n  e = 1 << 15;\n  f = d | e;\n  const SP2 = [c | f, b | e, z | e, a | f, a | z, z | d, c | d, b | f, b | d, c | f, c | e, b | z, b | e, a | z, z | d, c | d, a | e, a | d, b | f, z | z, b | z, z | e, a | f, c | z, a | d, b | d, z | z, a | e, z | f, c | e, c | z, z | f, z | z, a | f, c | d, a | z, b | f, c | z, c | e, z | e, c | z, b | e, z | d, c | f, a | f, z | d, z | e, b | z, z | f, c | e, a | z, b | d, a | d, b | f, b | d, a | d, a | e, z | z, b | e, z | f, b | z, c | d, c | f, a | e];\n  a = 1 << 17;\n  b = 1 << 27;\n  c = a | b;\n  d = 1 << 3;\n  e = 1 << 9;\n  f = d | e;\n  const SP3 = [z | f, c | e, z | z, c | d, b | e, z | z, a | f, b | e, a | d, b | d, b | d, a | z, c | f, a | d, c | z, z | f, b | z, z | d, c | e, z | e, a | e, c | z, c | d, a | f, b | f, a | e, a | z, b | f, z | d, c | f, z | e, b | z, c | e, b | z, a | d, z | f, a | z, c | e, b | e, z | z, z | e, a | d, c | f, b | e, b | d, z | e, z | z, c | d, b | f, a | z, b | z, c | f, z | d, a | f, a | e, b | d, c | z, b | f, z | f, c | z, a | f, z | d, c | d, a | e];\n  a = 1 << 13;\n  b = 1 << 23;\n  c = a | b;\n  d = 1 << 0;\n  e = 1 << 7;\n  f = d | e;\n  const SP4 = [c | d, a | f, a | f, z | e, c | e, b | f, b | d, a | d, z | z, c | z, c | z, c | f, z | f, z | z, b | e, b | d, z | d, a | z, b | z, c | d, z | e, b | z, a | d, a | e, b | f, z | d, a | e, b | e, a | z, c | e, c | f, z | f, b | e, b | d, c | z, c | f, z | f, z | z, z | z, c | z, a | e, b | e, b | f, z | d, c | d, a | f, a | f, z | e, c | f, z | f, z | d, a | z, b | d, a | d, c | e, b | f, a | d, a | e, b | z, c | d, z | e, b | z, a | z, c | e];\n  a = 1 << 25;\n  b = 1 << 30;\n  c = a | b;\n  d = 1 << 8;\n  e = 1 << 19;\n  f = d | e;\n  const SP5 = [z | d, a | f, a | e, c | d, z | e, z | d, b | z, a | e, b | f, z | e, a | d, b | f, c | d, c | e, z | f, b | z, a | z, b | e, b | e, z | z, b | d, c | f, c | f, a | d, c | e, b | d, z | z, c | z, a | f, a | z, c | z, z | f, z | e, c | d, z | d, a | z, b | z, a | e, c | d, b | f, a | d, b | z, c | e, a | f, b | f, z | d, a | z, c | e, c | f, z | f, c | z, c | f, a | e, z | z, b | e, c | z, z | f, a | d, b | d, z | e, z | z, b | e, a | f, b | d];\n  a = 1 << 22;\n  b = 1 << 29;\n  c = a | b;\n  d = 1 << 4;\n  e = 1 << 14;\n  f = d | e;\n  const SP6 = [b | d, c | z, z | e, c | f, c | z, z | d, c | f, a | z, b | e, a | f, a | z, b | d, a | d, b | e, b | z, z | f, z | z, a | d, b | f, z | e, a | e, b | f, z | d, c | d, c | d, z | z, a | f, c | e, z | f, a | e, c | e, b | z, b | e, z | d, c | d, a | e, c | f, a | z, z | f, b | d, a | z, b | e, b | z, z | f, b | d, c | f, a | e, c | z, a | f, c | e, z | z, c | d, z | d, z | e, c | z, a | f, z | e, a | d, b | f, z | z, c | e, b | z, a | d, b | f];\n  a = 1 << 21;\n  b = 1 << 26;\n  c = a | b;\n  d = 1 << 1;\n  e = 1 << 11;\n  f = d | e;\n  const SP7 = [a | z, c | d, b | f, z | z, z | e, b | f, a | f, c | e, c | f, a | z, z | z, b | d, z | d, b | z, c | d, z | f, b | e, a | f, a | d, b | e, b | d, c | z, c | e, a | d, c | z, z | e, z | f, c | f, a | e, z | d, b | z, a | e, b | z, a | e, a | z, b | f, b | f, c | d, c | d, z | d, a | d, b | z, b | e, a | z, c | e, z | f, a | f, c | e, z | f, b | d, c | f, c | z, a | e, z | z, z | d, c | f, z | z, a | f, c | z, z | e, b | d, b | e, z | e, a | d];\n  a = 1 << 18;\n  b = 1 << 28;\n  c = a | b;\n  d = 1 << 6;\n  e = 1 << 12;\n  f = d | e;\n  const SP8 = [b | f, z | e, a | z, c | f, b | z, b | f, z | d, b | z, a | d, c | z, c | f, a | e, c | e, a | f, z | e, z | d, c | z, b | d, b | e, z | f, a | e, a | d, c | d, c | e, z | f, z | z, z | z, c | d, b | d, b | e, a | f, a | z, a | f, a | z, c | e, z | e, z | d, c | d, z | e, a | f, b | e, z | d, b | d, c | z, c | d, b | z, a | z, b | f, z | z, c | f, a | d, b | d, c | z, b | e, b | f, z | z, c | f, a | e, a | e, z | f, z | f, a | d, b | z, c | e];\n\n  /* eslint-enable comma-spacing */\n\n  class DES {\n    constructor(password) {\n      this.keys = [];\n\n      // Set the key.\n      const pc1m = [],\n        pcr = [],\n        kn = [];\n      for (let j = 0, l = 56; j < 56; ++j, l -= 8) {\n        l += l < -5 ? 65 : l < -3 ? 31 : l < -1 ? 63 : l === 27 ? 35 : 0; // PC1\n        const m = l & 0x7;\n        pc1m[j] = (password[l >>> 3] & 1 << m) !== 0 ? 1 : 0;\n      }\n      for (let i = 0; i < 16; ++i) {\n        const m = i << 1;\n        const n = m + 1;\n        kn[m] = kn[n] = 0;\n        for (let o = 28; o < 59; o += 28) {\n          for (let j = o - 28; j < o; ++j) {\n            const l = j + totrot[i];\n            pcr[j] = l < o ? pc1m[l] : pc1m[l - 28];\n          }\n        }\n        for (let j = 0; j < 24; ++j) {\n          if (pcr[PC2[j]] !== 0) {\n            kn[m] |= 1 << 23 - j;\n          }\n          if (pcr[PC2[j + 24]] !== 0) {\n            kn[n] |= 1 << 23 - j;\n          }\n        }\n      }\n\n      // cookey\n      for (let i = 0, rawi = 0, KnLi = 0; i < 16; ++i) {\n        const raw0 = kn[rawi++];\n        const raw1 = kn[rawi++];\n        this.keys[KnLi] = (raw0 & 0x00fc0000) << 6;\n        this.keys[KnLi] |= (raw0 & 0x00000fc0) << 10;\n        this.keys[KnLi] |= (raw1 & 0x00fc0000) >>> 10;\n        this.keys[KnLi] |= (raw1 & 0x00000fc0) >>> 6;\n        ++KnLi;\n        this.keys[KnLi] = (raw0 & 0x0003f000) << 12;\n        this.keys[KnLi] |= (raw0 & 0x0000003f) << 16;\n        this.keys[KnLi] |= (raw1 & 0x0003f000) >>> 4;\n        this.keys[KnLi] |= raw1 & 0x0000003f;\n        ++KnLi;\n      }\n    }\n\n    // Encrypt 8 bytes of text\n    enc8(text) {\n      const b = text.slice();\n      let i = 0,\n        l,\n        r,\n        x; // left, right, accumulator\n\n      // Squash 8 bytes to 2 ints\n      l = b[i++] << 24 | b[i++] << 16 | b[i++] << 8 | b[i++];\n      r = b[i++] << 24 | b[i++] << 16 | b[i++] << 8 | b[i++];\n      x = (l >>> 4 ^ r) & 0x0f0f0f0f;\n      r ^= x;\n      l ^= x << 4;\n      x = (l >>> 16 ^ r) & 0x0000ffff;\n      r ^= x;\n      l ^= x << 16;\n      x = (r >>> 2 ^ l) & 0x33333333;\n      l ^= x;\n      r ^= x << 2;\n      x = (r >>> 8 ^ l) & 0x00ff00ff;\n      l ^= x;\n      r ^= x << 8;\n      r = r << 1 | r >>> 31 & 1;\n      x = (l ^ r) & 0xaaaaaaaa;\n      l ^= x;\n      r ^= x;\n      l = l << 1 | l >>> 31 & 1;\n      for (let i = 0, keysi = 0; i < 8; ++i) {\n        x = r << 28 | r >>> 4;\n        x ^= this.keys[keysi++];\n        let fval = SP7[x & 0x3f];\n        fval |= SP5[x >>> 8 & 0x3f];\n        fval |= SP3[x >>> 16 & 0x3f];\n        fval |= SP1[x >>> 24 & 0x3f];\n        x = r ^ this.keys[keysi++];\n        fval |= SP8[x & 0x3f];\n        fval |= SP6[x >>> 8 & 0x3f];\n        fval |= SP4[x >>> 16 & 0x3f];\n        fval |= SP2[x >>> 24 & 0x3f];\n        l ^= fval;\n        x = l << 28 | l >>> 4;\n        x ^= this.keys[keysi++];\n        fval = SP7[x & 0x3f];\n        fval |= SP5[x >>> 8 & 0x3f];\n        fval |= SP3[x >>> 16 & 0x3f];\n        fval |= SP1[x >>> 24 & 0x3f];\n        x = l ^ this.keys[keysi++];\n        fval |= SP8[x & 0x0000003f];\n        fval |= SP6[x >>> 8 & 0x3f];\n        fval |= SP4[x >>> 16 & 0x3f];\n        fval |= SP2[x >>> 24 & 0x3f];\n        r ^= fval;\n      }\n      r = r << 31 | r >>> 1;\n      x = (l ^ r) & 0xaaaaaaaa;\n      l ^= x;\n      r ^= x;\n      l = l << 31 | l >>> 1;\n      x = (l >>> 8 ^ r) & 0x00ff00ff;\n      r ^= x;\n      l ^= x << 8;\n      x = (l >>> 2 ^ r) & 0x33333333;\n      r ^= x;\n      l ^= x << 2;\n      x = (r >>> 16 ^ l) & 0x0000ffff;\n      l ^= x;\n      r ^= x << 16;\n      x = (r >>> 4 ^ l) & 0x0f0f0f0f;\n      l ^= x;\n      r ^= x << 4;\n\n      // Spread ints to bytes\n      x = [r, l];\n      for (i = 0; i < 8; i++) {\n        b[i] = (x[i >>> 2] >>> 8 * (3 - i % 4)) % 256;\n        if (b[i] < 0) {\n          b[i] += 256;\n        } // unsigned\n      }\n      return b;\n    }\n\n    // Encrypt 16 bytes of text using passwd as key\n    encrypt(t) {\n      return this.enc8(t.slice(0, 8)).concat(this.enc8(t.slice(8, 16)));\n    }\n  }\n  _exports.default = DES;\n});","define(\"novnc-sockjs/core/display\", [\"exports\", \"novnc-sockjs/core/util/logging\", \"novnc-sockjs/core/base64\", \"novnc-sockjs/core/util/int\"], function (_exports, Log, _base, _int) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  class Display {\n    constructor(target) {\n      this._drawCtx = null;\n      this._renderQ = []; // queue drawing actions for in-oder rendering\n      this._flushing = false;\n\n      // the full frame buffer (logical canvas) size\n      this._fbWidth = 0;\n      this._fbHeight = 0;\n      this._prevDrawStyle = \"\";\n      Log.Debug(\">> Display.constructor\");\n\n      // The visible canvas\n      this._target = target;\n      if (!this._target) {\n        throw new Error(\"Target must be set\");\n      }\n      if (typeof this._target === 'string') {\n        throw new Error('target must be a DOM element');\n      }\n      if (!this._target.getContext) {\n        throw new Error(\"no getContext method\");\n      }\n      this._targetCtx = this._target.getContext('2d');\n\n      // the visible canvas viewport (i.e. what actually gets seen)\n      this._viewportLoc = {\n        'x': 0,\n        'y': 0,\n        'w': this._target.width,\n        'h': this._target.height\n      };\n\n      // The hidden canvas, where we do the actual rendering\n      this._backbuffer = document.createElement('canvas');\n      this._drawCtx = this._backbuffer.getContext('2d');\n      this._damageBounds = {\n        left: 0,\n        top: 0,\n        right: this._backbuffer.width,\n        bottom: this._backbuffer.height\n      };\n      Log.Debug(\"User Agent: \" + navigator.userAgent);\n      Log.Debug(\"<< Display.constructor\");\n\n      // ===== PROPERTIES =====\n\n      this._scale = 1.0;\n      this._clipViewport = false;\n\n      // ===== EVENT HANDLERS =====\n\n      this.onflush = () => {}; // A flush request has finished\n    }\n\n    // ===== PROPERTIES =====\n\n    get scale() {\n      return this._scale;\n    }\n    set scale(scale) {\n      this._rescale(scale);\n    }\n    get clipViewport() {\n      return this._clipViewport;\n    }\n    set clipViewport(viewport) {\n      this._clipViewport = viewport;\n      // May need to readjust the viewport dimensions\n      const vp = this._viewportLoc;\n      this.viewportChangeSize(vp.w, vp.h);\n      this.viewportChangePos(0, 0);\n    }\n    get width() {\n      return this._fbWidth;\n    }\n    get height() {\n      return this._fbHeight;\n    }\n\n    // ===== PUBLIC METHODS =====\n\n    viewportChangePos(deltaX, deltaY) {\n      const vp = this._viewportLoc;\n      deltaX = Math.floor(deltaX);\n      deltaY = Math.floor(deltaY);\n      if (!this._clipViewport) {\n        deltaX = -vp.w; // clamped later of out of bounds\n        deltaY = -vp.h;\n      }\n      const vx2 = vp.x + vp.w - 1;\n      const vy2 = vp.y + vp.h - 1;\n\n      // Position change\n\n      if (deltaX < 0 && vp.x + deltaX < 0) {\n        deltaX = -vp.x;\n      }\n      if (vx2 + deltaX >= this._fbWidth) {\n        deltaX -= vx2 + deltaX - this._fbWidth + 1;\n      }\n      if (vp.y + deltaY < 0) {\n        deltaY = -vp.y;\n      }\n      if (vy2 + deltaY >= this._fbHeight) {\n        deltaY -= vy2 + deltaY - this._fbHeight + 1;\n      }\n      if (deltaX === 0 && deltaY === 0) {\n        return;\n      }\n      Log.Debug(\"viewportChange deltaX: \" + deltaX + \", deltaY: \" + deltaY);\n      vp.x += deltaX;\n      vp.y += deltaY;\n      this._damage(vp.x, vp.y, vp.w, vp.h);\n      this.flip();\n    }\n    viewportChangeSize(width, height) {\n      if (!this._clipViewport || typeof width === \"undefined\" || typeof height === \"undefined\") {\n        Log.Debug(\"Setting viewport to full display region\");\n        width = this._fbWidth;\n        height = this._fbHeight;\n      }\n      width = Math.floor(width);\n      height = Math.floor(height);\n      if (width > this._fbWidth) {\n        width = this._fbWidth;\n      }\n      if (height > this._fbHeight) {\n        height = this._fbHeight;\n      }\n      const vp = this._viewportLoc;\n      if (vp.w !== width || vp.h !== height) {\n        vp.w = width;\n        vp.h = height;\n        const canvas = this._target;\n        canvas.width = width;\n        canvas.height = height;\n\n        // The position might need to be updated if we've grown\n        this.viewportChangePos(0, 0);\n        this._damage(vp.x, vp.y, vp.w, vp.h);\n        this.flip();\n\n        // Update the visible size of the target canvas\n        this._rescale(this._scale);\n      }\n    }\n    absX(x) {\n      if (this._scale === 0) {\n        return 0;\n      }\n      return (0, _int.toSigned32bit)(x / this._scale + this._viewportLoc.x);\n    }\n    absY(y) {\n      if (this._scale === 0) {\n        return 0;\n      }\n      return (0, _int.toSigned32bit)(y / this._scale + this._viewportLoc.y);\n    }\n    resize(width, height) {\n      this._prevDrawStyle = \"\";\n      this._fbWidth = width;\n      this._fbHeight = height;\n      const canvas = this._backbuffer;\n      if (canvas.width !== width || canvas.height !== height) {\n        // We have to save the canvas data since changing the size will clear it\n        let saveImg = null;\n        if (canvas.width > 0 && canvas.height > 0) {\n          saveImg = this._drawCtx.getImageData(0, 0, canvas.width, canvas.height);\n        }\n        if (canvas.width !== width) {\n          canvas.width = width;\n        }\n        if (canvas.height !== height) {\n          canvas.height = height;\n        }\n        if (saveImg) {\n          this._drawCtx.putImageData(saveImg, 0, 0);\n        }\n      }\n\n      // Readjust the viewport as it may be incorrectly sized\n      // and positioned\n      const vp = this._viewportLoc;\n      this.viewportChangeSize(vp.w, vp.h);\n      this.viewportChangePos(0, 0);\n    }\n\n    // Track what parts of the visible canvas that need updating\n    _damage(x, y, w, h) {\n      if (x < this._damageBounds.left) {\n        this._damageBounds.left = x;\n      }\n      if (y < this._damageBounds.top) {\n        this._damageBounds.top = y;\n      }\n      if (x + w > this._damageBounds.right) {\n        this._damageBounds.right = x + w;\n      }\n      if (y + h > this._damageBounds.bottom) {\n        this._damageBounds.bottom = y + h;\n      }\n    }\n\n    // Update the visible canvas with the contents of the\n    // rendering canvas\n    flip(fromQueue) {\n      if (this._renderQ.length !== 0 && !fromQueue) {\n        this._renderQPush({\n          'type': 'flip'\n        });\n      } else {\n        let x = this._damageBounds.left;\n        let y = this._damageBounds.top;\n        let w = this._damageBounds.right - x;\n        let h = this._damageBounds.bottom - y;\n        let vx = x - this._viewportLoc.x;\n        let vy = y - this._viewportLoc.y;\n        if (vx < 0) {\n          w += vx;\n          x -= vx;\n          vx = 0;\n        }\n        if (vy < 0) {\n          h += vy;\n          y -= vy;\n          vy = 0;\n        }\n        if (vx + w > this._viewportLoc.w) {\n          w = this._viewportLoc.w - vx;\n        }\n        if (vy + h > this._viewportLoc.h) {\n          h = this._viewportLoc.h - vy;\n        }\n        if (w > 0 && h > 0) {\n          // FIXME: We may need to disable image smoothing here\n          //        as well (see copyImage()), but we haven't\n          //        noticed any problem yet.\n          this._targetCtx.drawImage(this._backbuffer, x, y, w, h, vx, vy, w, h);\n        }\n        this._damageBounds.left = this._damageBounds.top = 65535;\n        this._damageBounds.right = this._damageBounds.bottom = 0;\n      }\n    }\n    pending() {\n      return this._renderQ.length > 0;\n    }\n    flush() {\n      if (this._renderQ.length === 0) {\n        this.onflush();\n      } else {\n        this._flushing = true;\n      }\n    }\n    fillRect(x, y, width, height, color, fromQueue) {\n      if (this._renderQ.length !== 0 && !fromQueue) {\n        this._renderQPush({\n          'type': 'fill',\n          'x': x,\n          'y': y,\n          'width': width,\n          'height': height,\n          'color': color\n        });\n      } else {\n        this._setFillColor(color);\n        this._drawCtx.fillRect(x, y, width, height);\n        this._damage(x, y, width, height);\n      }\n    }\n    copyImage(oldX, oldY, newX, newY, w, h, fromQueue) {\n      if (this._renderQ.length !== 0 && !fromQueue) {\n        this._renderQPush({\n          'type': 'copy',\n          'oldX': oldX,\n          'oldY': oldY,\n          'x': newX,\n          'y': newY,\n          'width': w,\n          'height': h\n        });\n      } else {\n        // Due to this bug among others [1] we need to disable the image-smoothing to\n        // avoid getting a blur effect when copying data.\n        //\n        // 1. https://bugzilla.mozilla.org/show_bug.cgi?id=1194719\n        //\n        // We need to set these every time since all properties are reset\n        // when the the size is changed\n        this._drawCtx.mozImageSmoothingEnabled = false;\n        this._drawCtx.webkitImageSmoothingEnabled = false;\n        this._drawCtx.msImageSmoothingEnabled = false;\n        this._drawCtx.imageSmoothingEnabled = false;\n        this._drawCtx.drawImage(this._backbuffer, oldX, oldY, w, h, newX, newY, w, h);\n        this._damage(newX, newY, w, h);\n      }\n    }\n    imageRect(x, y, width, height, mime, arr) {\n      /* The internal logic cannot handle empty images, so bail early */\n      if (width === 0 || height === 0) {\n        return;\n      }\n      const img = new Image();\n      img.src = \"data: \" + mime + \";base64,\" + _base.default.encode(arr);\n      this._renderQPush({\n        'type': 'img',\n        'img': img,\n        'x': x,\n        'y': y,\n        'width': width,\n        'height': height\n      });\n    }\n    blitImage(x, y, width, height, arr, offset, fromQueue) {\n      if (this._renderQ.length !== 0 && !fromQueue) {\n        // NB(directxman12): it's technically more performant here to use preallocated arrays,\n        // but it's a lot of extra work for not a lot of payoff -- if we're using the render queue,\n        // this probably isn't getting called *nearly* as much\n        const newArr = new Uint8Array(width * height * 4);\n        newArr.set(new Uint8Array(arr.buffer, 0, newArr.length));\n        this._renderQPush({\n          'type': 'blit',\n          'data': newArr,\n          'x': x,\n          'y': y,\n          'width': width,\n          'height': height\n        });\n      } else {\n        // NB(directxman12): arr must be an Type Array view\n        let data = new Uint8ClampedArray(arr.buffer, arr.byteOffset + offset, width * height * 4);\n        let img = new ImageData(data, width, height);\n        this._drawCtx.putImageData(img, x, y);\n        this._damage(x, y, width, height);\n      }\n    }\n    drawImage(img, x, y) {\n      this._drawCtx.drawImage(img, x, y);\n      this._damage(x, y, img.width, img.height);\n    }\n    autoscale(containerWidth, containerHeight) {\n      let scaleRatio;\n      if (containerWidth === 0 || containerHeight === 0) {\n        scaleRatio = 0;\n      } else {\n        const vp = this._viewportLoc;\n        const targetAspectRatio = containerWidth / containerHeight;\n        const fbAspectRatio = vp.w / vp.h;\n        if (fbAspectRatio >= targetAspectRatio) {\n          scaleRatio = containerWidth / vp.w;\n        } else {\n          scaleRatio = containerHeight / vp.h;\n        }\n      }\n      this._rescale(scaleRatio);\n    }\n\n    // ===== PRIVATE METHODS =====\n\n    _rescale(factor) {\n      this._scale = factor;\n      const vp = this._viewportLoc;\n\n      // NB(directxman12): If you set the width directly, or set the\n      //                   style width to a number, the canvas is cleared.\n      //                   However, if you set the style width to a string\n      //                   ('NNNpx'), the canvas is scaled without clearing.\n      const width = factor * vp.w + 'px';\n      const height = factor * vp.h + 'px';\n      if (this._target.style.width !== width || this._target.style.height !== height) {\n        this._target.style.width = width;\n        this._target.style.height = height;\n      }\n    }\n    _setFillColor(color) {\n      const newStyle = 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] + ')';\n      if (newStyle !== this._prevDrawStyle) {\n        this._drawCtx.fillStyle = newStyle;\n        this._prevDrawStyle = newStyle;\n      }\n    }\n    _renderQPush(action) {\n      this._renderQ.push(action);\n      if (this._renderQ.length === 1) {\n        // If this can be rendered immediately it will be, otherwise\n        // the scanner will wait for the relevant event\n        this._scanRenderQ();\n      }\n    }\n    _resumeRenderQ() {\n      // \"this\" is the object that is ready, not the\n      // display object\n      this.removeEventListener('load', this._noVNCDisplay._resumeRenderQ);\n      this._noVNCDisplay._scanRenderQ();\n    }\n    _scanRenderQ() {\n      let ready = true;\n      while (ready && this._renderQ.length > 0) {\n        const a = this._renderQ[0];\n        switch (a.type) {\n          case 'flip':\n            this.flip(true);\n            break;\n          case 'copy':\n            this.copyImage(a.oldX, a.oldY, a.x, a.y, a.width, a.height, true);\n            break;\n          case 'fill':\n            this.fillRect(a.x, a.y, a.width, a.height, a.color, true);\n            break;\n          case 'blit':\n            this.blitImage(a.x, a.y, a.width, a.height, a.data, 0, true);\n            break;\n          case 'img':\n            if (a.img.complete) {\n              if (a.img.width !== a.width || a.img.height !== a.height) {\n                Log.Error(\"Decoded image has incorrect dimensions. Got \" + a.img.width + \"x\" + a.img.height + \". Expected \" + a.width + \"x\" + a.height + \".\");\n                return;\n              }\n              this.drawImage(a.img, a.x, a.y);\n            } else {\n              a.img._noVNCDisplay = this;\n              a.img.addEventListener('load', this._resumeRenderQ);\n              // We need to wait for this image to 'load'\n              // to keep things in-order\n              ready = false;\n            }\n            break;\n        }\n        if (ready) {\n          this._renderQ.shift();\n        }\n      }\n      if (this._renderQ.length === 0 && this._flushing) {\n        this._flushing = false;\n        this.onflush();\n      }\n    }\n  }\n  _exports.default = Display;\n});","define(\"novnc-sockjs/core/encodings\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.encodingName = encodingName;\n  _exports.encodings = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  const encodings = _exports.encodings = {\n    encodingRaw: 0,\n    encodingCopyRect: 1,\n    encodingRRE: 2,\n    encodingHextile: 5,\n    encodingTight: 7,\n    encodingTightPNG: -260,\n    pseudoEncodingQualityLevel9: -23,\n    pseudoEncodingQualityLevel0: -32,\n    pseudoEncodingDesktopSize: -223,\n    pseudoEncodingLastRect: -224,\n    pseudoEncodingCursor: -239,\n    pseudoEncodingQEMUExtendedKeyEvent: -258,\n    pseudoEncodingDesktopName: -307,\n    pseudoEncodingExtendedDesktopSize: -308,\n    pseudoEncodingXvp: -309,\n    pseudoEncodingFence: -312,\n    pseudoEncodingContinuousUpdates: -313,\n    pseudoEncodingCompressLevel9: -247,\n    pseudoEncodingCompressLevel0: -256,\n    pseudoEncodingVMwareCursor: 0x574d5664,\n    pseudoEncodingExtendedClipboard: 0xc0a1e5ce\n  };\n  function encodingName(num) {\n    switch (num) {\n      case encodings.encodingRaw:\n        return \"Raw\";\n      case encodings.encodingCopyRect:\n        return \"CopyRect\";\n      case encodings.encodingRRE:\n        return \"RRE\";\n      case encodings.encodingHextile:\n        return \"Hextile\";\n      case encodings.encodingTight:\n        return \"Tight\";\n      case encodings.encodingTightPNG:\n        return \"TightPNG\";\n      default:\n        return \"[unknown encoding \" + num + \"]\";\n    }\n  }\n});","define(\"novnc-sockjs/core/inflator\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/zlib/inflate\", \"novnc-sockjs/vendor/pako/lib/zlib/zstream\"], function (_exports, _inflate, _zstream) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  class Inflate {\n    constructor() {\n      this.strm = new _zstream.default();\n      this.chunkSize = 1024 * 10 * 10;\n      this.strm.output = new Uint8Array(this.chunkSize);\n      this.windowBits = 5;\n      (0, _inflate.inflateInit)(this.strm, this.windowBits);\n    }\n    setInput(data) {\n      if (!data) {\n        //FIXME: flush remaining data.\n        /* eslint-disable camelcase */\n        this.strm.input = null;\n        this.strm.avail_in = 0;\n        this.strm.next_in = 0;\n      } else {\n        this.strm.input = data;\n        this.strm.avail_in = this.strm.input.length;\n        this.strm.next_in = 0;\n        /* eslint-enable camelcase */\n      }\n    }\n    inflate(expected) {\n      // resize our output buffer if it's too small\n      // (we could just use multiple chunks, but that would cause an extra\n      // allocation each time to flatten the chunks)\n      if (expected > this.chunkSize) {\n        this.chunkSize = expected;\n        this.strm.output = new Uint8Array(this.chunkSize);\n      }\n\n      /* eslint-disable camelcase */\n      this.strm.next_out = 0;\n      this.strm.avail_out = expected;\n      /* eslint-enable camelcase */\n\n      let ret = (0, _inflate.inflate)(this.strm, 0); // Flush argument not used.\n      if (ret < 0) {\n        throw new Error(\"zlib inflate failed\");\n      }\n      if (this.strm.next_out != expected) {\n        throw new Error(\"Incomplete zlib block\");\n      }\n      return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out);\n    }\n    reset() {\n      (0, _inflate.inflateReset)(this.strm);\n    }\n  }\n  _exports.default = Inflate;\n});","define(\"novnc-sockjs/core/input/domkeytable\", [\"exports\", \"novnc-sockjs/core/input/keysym\"], function (_exports, _keysym) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2018 The noVNC Authors\n   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)\n   */\n\n  /*\n   * Mapping between HTML key values and VNC/X11 keysyms for \"special\"\n   * keys that cannot be handled via their Unicode codepoint.\n   *\n   * See https://www.w3.org/TR/uievents-key/ for possible values.\n   */\n\n  const DOMKeyTable = {};\n  function addStandard(key, standard) {\n    if (standard === undefined) throw new Error(\"Undefined keysym for key \\\"\" + key + \"\\\"\");\n    if (key in DOMKeyTable) throw new Error(\"Duplicate entry for key \\\"\" + key + \"\\\"\");\n    DOMKeyTable[key] = [standard, standard, standard, standard];\n  }\n  function addLeftRight(key, left, right) {\n    if (left === undefined) throw new Error(\"Undefined keysym for key \\\"\" + key + \"\\\"\");\n    if (right === undefined) throw new Error(\"Undefined keysym for key \\\"\" + key + \"\\\"\");\n    if (key in DOMKeyTable) throw new Error(\"Duplicate entry for key \\\"\" + key + \"\\\"\");\n    DOMKeyTable[key] = [left, left, right, left];\n  }\n  function addNumpad(key, standard, numpad) {\n    if (standard === undefined) throw new Error(\"Undefined keysym for key \\\"\" + key + \"\\\"\");\n    if (numpad === undefined) throw new Error(\"Undefined keysym for key \\\"\" + key + \"\\\"\");\n    if (key in DOMKeyTable) throw new Error(\"Duplicate entry for key \\\"\" + key + \"\\\"\");\n    DOMKeyTable[key] = [standard, standard, standard, numpad];\n  }\n\n  // 3.2. Modifier Keys\n\n  addLeftRight(\"Alt\", _keysym.default.XK_Alt_L, _keysym.default.XK_Alt_R);\n  addStandard(\"AltGraph\", _keysym.default.XK_ISO_Level3_Shift);\n  addStandard(\"CapsLock\", _keysym.default.XK_Caps_Lock);\n  addLeftRight(\"Control\", _keysym.default.XK_Control_L, _keysym.default.XK_Control_R);\n  // - Fn\n  // - FnLock\n  addLeftRight(\"Meta\", _keysym.default.XK_Super_L, _keysym.default.XK_Super_R);\n  addStandard(\"NumLock\", _keysym.default.XK_Num_Lock);\n  addStandard(\"ScrollLock\", _keysym.default.XK_Scroll_Lock);\n  addLeftRight(\"Shift\", _keysym.default.XK_Shift_L, _keysym.default.XK_Shift_R);\n  // - Symbol\n  // - SymbolLock\n  // - Hyper\n  // - Super\n\n  // 3.3. Whitespace Keys\n\n  addNumpad(\"Enter\", _keysym.default.XK_Return, _keysym.default.XK_KP_Enter);\n  addStandard(\"Tab\", _keysym.default.XK_Tab);\n  addNumpad(\" \", _keysym.default.XK_space, _keysym.default.XK_KP_Space);\n\n  // 3.4. Navigation Keys\n\n  addNumpad(\"ArrowDown\", _keysym.default.XK_Down, _keysym.default.XK_KP_Down);\n  addNumpad(\"ArrowLeft\", _keysym.default.XK_Left, _keysym.default.XK_KP_Left);\n  addNumpad(\"ArrowRight\", _keysym.default.XK_Right, _keysym.default.XK_KP_Right);\n  addNumpad(\"ArrowUp\", _keysym.default.XK_Up, _keysym.default.XK_KP_Up);\n  addNumpad(\"End\", _keysym.default.XK_End, _keysym.default.XK_KP_End);\n  addNumpad(\"Home\", _keysym.default.XK_Home, _keysym.default.XK_KP_Home);\n  addNumpad(\"PageDown\", _keysym.default.XK_Next, _keysym.default.XK_KP_Next);\n  addNumpad(\"PageUp\", _keysym.default.XK_Prior, _keysym.default.XK_KP_Prior);\n\n  // 3.5. Editing Keys\n\n  addStandard(\"Backspace\", _keysym.default.XK_BackSpace);\n  // Browsers send \"Clear\" for the numpad 5 without NumLock because\n  // Windows uses VK_Clear for that key. But Unix expects KP_Begin for\n  // that scenario.\n  addNumpad(\"Clear\", _keysym.default.XK_Clear, _keysym.default.XK_KP_Begin);\n  addStandard(\"Copy\", _keysym.default.XF86XK_Copy);\n  // - CrSel\n  addStandard(\"Cut\", _keysym.default.XF86XK_Cut);\n  addNumpad(\"Delete\", _keysym.default.XK_Delete, _keysym.default.XK_KP_Delete);\n  // - EraseEof\n  // - ExSel\n  addNumpad(\"Insert\", _keysym.default.XK_Insert, _keysym.default.XK_KP_Insert);\n  addStandard(\"Paste\", _keysym.default.XF86XK_Paste);\n  addStandard(\"Redo\", _keysym.default.XK_Redo);\n  addStandard(\"Undo\", _keysym.default.XK_Undo);\n\n  // 3.6. UI Keys\n\n  // - Accept\n  // - Again (could just be XK_Redo)\n  // - Attn\n  addStandard(\"Cancel\", _keysym.default.XK_Cancel);\n  addStandard(\"ContextMenu\", _keysym.default.XK_Menu);\n  addStandard(\"Escape\", _keysym.default.XK_Escape);\n  addStandard(\"Execute\", _keysym.default.XK_Execute);\n  addStandard(\"Find\", _keysym.default.XK_Find);\n  addStandard(\"Help\", _keysym.default.XK_Help);\n  addStandard(\"Pause\", _keysym.default.XK_Pause);\n  // - Play\n  // - Props\n  addStandard(\"Select\", _keysym.default.XK_Select);\n  addStandard(\"ZoomIn\", _keysym.default.XF86XK_ZoomIn);\n  addStandard(\"ZoomOut\", _keysym.default.XF86XK_ZoomOut);\n\n  // 3.7. Device Keys\n\n  addStandard(\"BrightnessDown\", _keysym.default.XF86XK_MonBrightnessDown);\n  addStandard(\"BrightnessUp\", _keysym.default.XF86XK_MonBrightnessUp);\n  addStandard(\"Eject\", _keysym.default.XF86XK_Eject);\n  addStandard(\"LogOff\", _keysym.default.XF86XK_LogOff);\n  addStandard(\"Power\", _keysym.default.XF86XK_PowerOff);\n  addStandard(\"PowerOff\", _keysym.default.XF86XK_PowerDown);\n  addStandard(\"PrintScreen\", _keysym.default.XK_Print);\n  addStandard(\"Hibernate\", _keysym.default.XF86XK_Hibernate);\n  addStandard(\"Standby\", _keysym.default.XF86XK_Standby);\n  addStandard(\"WakeUp\", _keysym.default.XF86XK_WakeUp);\n\n  // 3.8. IME and Composition Keys\n\n  addStandard(\"AllCandidates\", _keysym.default.XK_MultipleCandidate);\n  addStandard(\"Alphanumeric\", _keysym.default.XK_Eisu_toggle);\n  addStandard(\"CodeInput\", _keysym.default.XK_Codeinput);\n  addStandard(\"Compose\", _keysym.default.XK_Multi_key);\n  addStandard(\"Convert\", _keysym.default.XK_Henkan);\n  // - Dead\n  // - FinalMode\n  addStandard(\"GroupFirst\", _keysym.default.XK_ISO_First_Group);\n  addStandard(\"GroupLast\", _keysym.default.XK_ISO_Last_Group);\n  addStandard(\"GroupNext\", _keysym.default.XK_ISO_Next_Group);\n  addStandard(\"GroupPrevious\", _keysym.default.XK_ISO_Prev_Group);\n  // - ModeChange (XK_Mode_switch is often used for AltGr)\n  // - NextCandidate\n  addStandard(\"NonConvert\", _keysym.default.XK_Muhenkan);\n  addStandard(\"PreviousCandidate\", _keysym.default.XK_PreviousCandidate);\n  // - Process\n  addStandard(\"SingleCandidate\", _keysym.default.XK_SingleCandidate);\n  addStandard(\"HangulMode\", _keysym.default.XK_Hangul);\n  addStandard(\"HanjaMode\", _keysym.default.XK_Hangul_Hanja);\n  addStandard(\"JunjaMode\", _keysym.default.XK_Hangul_Jeonja);\n  addStandard(\"Eisu\", _keysym.default.XK_Eisu_toggle);\n  addStandard(\"Hankaku\", _keysym.default.XK_Hankaku);\n  addStandard(\"Hiragana\", _keysym.default.XK_Hiragana);\n  addStandard(\"HiraganaKatakana\", _keysym.default.XK_Hiragana_Katakana);\n  addStandard(\"KanaMode\", _keysym.default.XK_Kana_Shift); // could also be _Kana_Lock\n  addStandard(\"KanjiMode\", _keysym.default.XK_Kanji);\n  addStandard(\"Katakana\", _keysym.default.XK_Katakana);\n  addStandard(\"Romaji\", _keysym.default.XK_Romaji);\n  addStandard(\"Zenkaku\", _keysym.default.XK_Zenkaku);\n  addStandard(\"ZenkakuHankaku\", _keysym.default.XK_Zenkaku_Hankaku);\n\n  // 3.9. General-Purpose Function Keys\n\n  addStandard(\"F1\", _keysym.default.XK_F1);\n  addStandard(\"F2\", _keysym.default.XK_F2);\n  addStandard(\"F3\", _keysym.default.XK_F3);\n  addStandard(\"F4\", _keysym.default.XK_F4);\n  addStandard(\"F5\", _keysym.default.XK_F5);\n  addStandard(\"F6\", _keysym.default.XK_F6);\n  addStandard(\"F7\", _keysym.default.XK_F7);\n  addStandard(\"F8\", _keysym.default.XK_F8);\n  addStandard(\"F9\", _keysym.default.XK_F9);\n  addStandard(\"F10\", _keysym.default.XK_F10);\n  addStandard(\"F11\", _keysym.default.XK_F11);\n  addStandard(\"F12\", _keysym.default.XK_F12);\n  addStandard(\"F13\", _keysym.default.XK_F13);\n  addStandard(\"F14\", _keysym.default.XK_F14);\n  addStandard(\"F15\", _keysym.default.XK_F15);\n  addStandard(\"F16\", _keysym.default.XK_F16);\n  addStandard(\"F17\", _keysym.default.XK_F17);\n  addStandard(\"F18\", _keysym.default.XK_F18);\n  addStandard(\"F19\", _keysym.default.XK_F19);\n  addStandard(\"F20\", _keysym.default.XK_F20);\n  addStandard(\"F21\", _keysym.default.XK_F21);\n  addStandard(\"F22\", _keysym.default.XK_F22);\n  addStandard(\"F23\", _keysym.default.XK_F23);\n  addStandard(\"F24\", _keysym.default.XK_F24);\n  addStandard(\"F25\", _keysym.default.XK_F25);\n  addStandard(\"F26\", _keysym.default.XK_F26);\n  addStandard(\"F27\", _keysym.default.XK_F27);\n  addStandard(\"F28\", _keysym.default.XK_F28);\n  addStandard(\"F29\", _keysym.default.XK_F29);\n  addStandard(\"F30\", _keysym.default.XK_F30);\n  addStandard(\"F31\", _keysym.default.XK_F31);\n  addStandard(\"F32\", _keysym.default.XK_F32);\n  addStandard(\"F33\", _keysym.default.XK_F33);\n  addStandard(\"F34\", _keysym.default.XK_F34);\n  addStandard(\"F35\", _keysym.default.XK_F35);\n  // - Soft1...\n\n  // 3.10. Multimedia Keys\n\n  // - ChannelDown\n  // - ChannelUp\n  addStandard(\"Close\", _keysym.default.XF86XK_Close);\n  addStandard(\"MailForward\", _keysym.default.XF86XK_MailForward);\n  addStandard(\"MailReply\", _keysym.default.XF86XK_Reply);\n  addStandard(\"MailSend\", _keysym.default.XF86XK_Send);\n  // - MediaClose\n  addStandard(\"MediaFastForward\", _keysym.default.XF86XK_AudioForward);\n  addStandard(\"MediaPause\", _keysym.default.XF86XK_AudioPause);\n  addStandard(\"MediaPlay\", _keysym.default.XF86XK_AudioPlay);\n  // - MediaPlayPause\n  addStandard(\"MediaRecord\", _keysym.default.XF86XK_AudioRecord);\n  addStandard(\"MediaRewind\", _keysym.default.XF86XK_AudioRewind);\n  addStandard(\"MediaStop\", _keysym.default.XF86XK_AudioStop);\n  addStandard(\"MediaTrackNext\", _keysym.default.XF86XK_AudioNext);\n  addStandard(\"MediaTrackPrevious\", _keysym.default.XF86XK_AudioPrev);\n  addStandard(\"New\", _keysym.default.XF86XK_New);\n  addStandard(\"Open\", _keysym.default.XF86XK_Open);\n  addStandard(\"Print\", _keysym.default.XK_Print);\n  addStandard(\"Save\", _keysym.default.XF86XK_Save);\n  addStandard(\"SpellCheck\", _keysym.default.XF86XK_Spell);\n\n  // 3.11. Multimedia Numpad Keys\n\n  // - Key11\n  // - Key12\n\n  // 3.12. Audio Keys\n\n  // - AudioBalanceLeft\n  // - AudioBalanceRight\n  // - AudioBassBoostDown\n  // - AudioBassBoostToggle\n  // - AudioBassBoostUp\n  // - AudioFaderFront\n  // - AudioFaderRear\n  // - AudioSurroundModeNext\n  // - AudioTrebleDown\n  // - AudioTrebleUp\n  addStandard(\"AudioVolumeDown\", _keysym.default.XF86XK_AudioLowerVolume);\n  addStandard(\"AudioVolumeUp\", _keysym.default.XF86XK_AudioRaiseVolume);\n  addStandard(\"AudioVolumeMute\", _keysym.default.XF86XK_AudioMute);\n  // - MicrophoneToggle\n  // - MicrophoneVolumeDown\n  // - MicrophoneVolumeUp\n  addStandard(\"MicrophoneVolumeMute\", _keysym.default.XF86XK_AudioMicMute);\n\n  // 3.13. Speech Keys\n\n  // - SpeechCorrectionList\n  // - SpeechInputToggle\n\n  // 3.14. Application Keys\n\n  addStandard(\"LaunchApplication1\", _keysym.default.XF86XK_MyComputer);\n  addStandard(\"LaunchApplication2\", _keysym.default.XF86XK_Calculator);\n  addStandard(\"LaunchCalendar\", _keysym.default.XF86XK_Calendar);\n  // - LaunchContacts\n  addStandard(\"LaunchMail\", _keysym.default.XF86XK_Mail);\n  addStandard(\"LaunchMediaPlayer\", _keysym.default.XF86XK_AudioMedia);\n  addStandard(\"LaunchMusicPlayer\", _keysym.default.XF86XK_Music);\n  addStandard(\"LaunchPhone\", _keysym.default.XF86XK_Phone);\n  addStandard(\"LaunchScreenSaver\", _keysym.default.XF86XK_ScreenSaver);\n  addStandard(\"LaunchSpreadsheet\", _keysym.default.XF86XK_Excel);\n  addStandard(\"LaunchWebBrowser\", _keysym.default.XF86XK_WWW);\n  addStandard(\"LaunchWebCam\", _keysym.default.XF86XK_WebCam);\n  addStandard(\"LaunchWordProcessor\", _keysym.default.XF86XK_Word);\n\n  // 3.15. Browser Keys\n\n  addStandard(\"BrowserBack\", _keysym.default.XF86XK_Back);\n  addStandard(\"BrowserFavorites\", _keysym.default.XF86XK_Favorites);\n  addStandard(\"BrowserForward\", _keysym.default.XF86XK_Forward);\n  addStandard(\"BrowserHome\", _keysym.default.XF86XK_HomePage);\n  addStandard(\"BrowserRefresh\", _keysym.default.XF86XK_Refresh);\n  addStandard(\"BrowserSearch\", _keysym.default.XF86XK_Search);\n  addStandard(\"BrowserStop\", _keysym.default.XF86XK_Stop);\n\n  // 3.16. Mobile Phone Keys\n\n  // - A whole bunch...\n\n  // 3.17. TV Keys\n\n  // - A whole bunch...\n\n  // 3.18. Media Controller Keys\n\n  // - A whole bunch...\n  addStandard(\"Dimmer\", _keysym.default.XF86XK_BrightnessAdjust);\n  addStandard(\"MediaAudioTrack\", _keysym.default.XF86XK_AudioCycleTrack);\n  addStandard(\"RandomToggle\", _keysym.default.XF86XK_AudioRandomPlay);\n  addStandard(\"SplitScreenToggle\", _keysym.default.XF86XK_SplitScreen);\n  addStandard(\"Subtitle\", _keysym.default.XF86XK_Subtitle);\n  addStandard(\"VideoModeNext\", _keysym.default.XF86XK_Next_VMode);\n\n  // Extra: Numpad\n\n  addNumpad(\"=\", _keysym.default.XK_equal, _keysym.default.XK_KP_Equal);\n  addNumpad(\"+\", _keysym.default.XK_plus, _keysym.default.XK_KP_Add);\n  addNumpad(\"-\", _keysym.default.XK_minus, _keysym.default.XK_KP_Subtract);\n  addNumpad(\"*\", _keysym.default.XK_asterisk, _keysym.default.XK_KP_Multiply);\n  addNumpad(\"/\", _keysym.default.XK_slash, _keysym.default.XK_KP_Divide);\n  addNumpad(\".\", _keysym.default.XK_period, _keysym.default.XK_KP_Decimal);\n  addNumpad(\",\", _keysym.default.XK_comma, _keysym.default.XK_KP_Separator);\n  addNumpad(\"0\", _keysym.default.XK_0, _keysym.default.XK_KP_0);\n  addNumpad(\"1\", _keysym.default.XK_1, _keysym.default.XK_KP_1);\n  addNumpad(\"2\", _keysym.default.XK_2, _keysym.default.XK_KP_2);\n  addNumpad(\"3\", _keysym.default.XK_3, _keysym.default.XK_KP_3);\n  addNumpad(\"4\", _keysym.default.XK_4, _keysym.default.XK_KP_4);\n  addNumpad(\"5\", _keysym.default.XK_5, _keysym.default.XK_KP_5);\n  addNumpad(\"6\", _keysym.default.XK_6, _keysym.default.XK_KP_6);\n  addNumpad(\"7\", _keysym.default.XK_7, _keysym.default.XK_KP_7);\n  addNumpad(\"8\", _keysym.default.XK_8, _keysym.default.XK_KP_8);\n  addNumpad(\"9\", _keysym.default.XK_9, _keysym.default.XK_KP_9);\n  var _default = _exports.default = DOMKeyTable;\n});","define(\"novnc-sockjs/core/input/fixedkeys\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2018 The noVNC Authors\n   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)\n   */\n  /*\n   * Fallback mapping between HTML key codes (physical keys) and\n   * HTML key values. This only works for keys that don't vary\n   * between layouts. We also omit those who manage fine by mapping the\n   * Unicode representation.\n   *\n   * See https://www.w3.org/TR/uievents-code/ for possible codes.\n   * See https://www.w3.org/TR/uievents-key/ for possible values.\n   */\n  /* eslint-disable key-spacing */\n  var _default = _exports.default = {\n    // 3.1.1.1. Writing System Keys\n\n    'Backspace': 'Backspace',\n    // 3.1.1.2. Functional Keys\n\n    'AltLeft': 'Alt',\n    'AltRight': 'Alt',\n    // This could also be 'AltGraph'\n    'CapsLock': 'CapsLock',\n    'ContextMenu': 'ContextMenu',\n    'ControlLeft': 'Control',\n    'ControlRight': 'Control',\n    'Enter': 'Enter',\n    'MetaLeft': 'Meta',\n    'MetaRight': 'Meta',\n    'ShiftLeft': 'Shift',\n    'ShiftRight': 'Shift',\n    'Tab': 'Tab',\n    // FIXME: Japanese/Korean keys\n\n    // 3.1.2. Control Pad Section\n\n    'Delete': 'Delete',\n    'End': 'End',\n    'Help': 'Help',\n    'Home': 'Home',\n    'Insert': 'Insert',\n    'PageDown': 'PageDown',\n    'PageUp': 'PageUp',\n    // 3.1.3. Arrow Pad Section\n\n    'ArrowDown': 'ArrowDown',\n    'ArrowLeft': 'ArrowLeft',\n    'ArrowRight': 'ArrowRight',\n    'ArrowUp': 'ArrowUp',\n    // 3.1.4. Numpad Section\n\n    'NumLock': 'NumLock',\n    'NumpadBackspace': 'Backspace',\n    'NumpadClear': 'Clear',\n    // 3.1.5. Function Section\n\n    'Escape': 'Escape',\n    'F1': 'F1',\n    'F2': 'F2',\n    'F3': 'F3',\n    'F4': 'F4',\n    'F5': 'F5',\n    'F6': 'F6',\n    'F7': 'F7',\n    'F8': 'F8',\n    'F9': 'F9',\n    'F10': 'F10',\n    'F11': 'F11',\n    'F12': 'F12',\n    'F13': 'F13',\n    'F14': 'F14',\n    'F15': 'F15',\n    'F16': 'F16',\n    'F17': 'F17',\n    'F18': 'F18',\n    'F19': 'F19',\n    'F20': 'F20',\n    'F21': 'F21',\n    'F22': 'F22',\n    'F23': 'F23',\n    'F24': 'F24',\n    'F25': 'F25',\n    'F26': 'F26',\n    'F27': 'F27',\n    'F28': 'F28',\n    'F29': 'F29',\n    'F30': 'F30',\n    'F31': 'F31',\n    'F32': 'F32',\n    'F33': 'F33',\n    'F34': 'F34',\n    'F35': 'F35',\n    'PrintScreen': 'PrintScreen',\n    'ScrollLock': 'ScrollLock',\n    'Pause': 'Pause',\n    // 3.1.6. Media Keys\n\n    'BrowserBack': 'BrowserBack',\n    'BrowserFavorites': 'BrowserFavorites',\n    'BrowserForward': 'BrowserForward',\n    'BrowserHome': 'BrowserHome',\n    'BrowserRefresh': 'BrowserRefresh',\n    'BrowserSearch': 'BrowserSearch',\n    'BrowserStop': 'BrowserStop',\n    'Eject': 'Eject',\n    'LaunchApp1': 'LaunchMyComputer',\n    'LaunchApp2': 'LaunchCalendar',\n    'LaunchMail': 'LaunchMail',\n    'MediaPlayPause': 'MediaPlay',\n    'MediaStop': 'MediaStop',\n    'MediaTrackNext': 'MediaTrackNext',\n    'MediaTrackPrevious': 'MediaTrackPrevious',\n    'Power': 'Power',\n    'Sleep': 'Sleep',\n    'AudioVolumeDown': 'AudioVolumeDown',\n    'AudioVolumeMute': 'AudioVolumeMute',\n    'AudioVolumeUp': 'AudioVolumeUp',\n    'WakeUp': 'WakeUp'\n  };\n});","define(\"novnc-sockjs/core/input/gesturehandler\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  const GH_NOGESTURE = 0;\n  const GH_ONETAP = 1;\n  const GH_TWOTAP = 2;\n  const GH_THREETAP = 4;\n  const GH_DRAG = 8;\n  const GH_LONGPRESS = 16;\n  const GH_TWODRAG = 32;\n  const GH_PINCH = 64;\n  const GH_INITSTATE = 127;\n  const GH_MOVE_THRESHOLD = 50;\n  const GH_ANGLE_THRESHOLD = 90; // Degrees\n\n  // Timeout when waiting for gestures (ms)\n  const GH_MULTITOUCH_TIMEOUT = 250;\n\n  // Maximum time between press and release for a tap (ms)\n  const GH_TAP_TIMEOUT = 1000;\n\n  // Timeout when waiting for longpress (ms)\n  const GH_LONGPRESS_TIMEOUT = 1000;\n\n  // Timeout when waiting to decide between PINCH and TWODRAG (ms)\n  const GH_TWOTOUCH_TIMEOUT = 50;\n  class GestureHandler {\n    constructor() {\n      this._target = null;\n      this._state = GH_INITSTATE;\n      this._tracked = [];\n      this._ignored = [];\n      this._waitingRelease = false;\n      this._releaseStart = 0.0;\n      this._longpressTimeoutId = null;\n      this._twoTouchTimeoutId = null;\n      this._boundEventHandler = this._eventHandler.bind(this);\n    }\n    attach(target) {\n      this.detach();\n      this._target = target;\n      this._target.addEventListener('touchstart', this._boundEventHandler);\n      this._target.addEventListener('touchmove', this._boundEventHandler);\n      this._target.addEventListener('touchend', this._boundEventHandler);\n      this._target.addEventListener('touchcancel', this._boundEventHandler);\n    }\n    detach() {\n      if (!this._target) {\n        return;\n      }\n      this._stopLongpressTimeout();\n      this._stopTwoTouchTimeout();\n      this._target.removeEventListener('touchstart', this._boundEventHandler);\n      this._target.removeEventListener('touchmove', this._boundEventHandler);\n      this._target.removeEventListener('touchend', this._boundEventHandler);\n      this._target.removeEventListener('touchcancel', this._boundEventHandler);\n      this._target = null;\n    }\n    _eventHandler(e) {\n      let fn;\n      e.stopPropagation();\n      e.preventDefault();\n      switch (e.type) {\n        case 'touchstart':\n          fn = this._touchStart;\n          break;\n        case 'touchmove':\n          fn = this._touchMove;\n          break;\n        case 'touchend':\n        case 'touchcancel':\n          fn = this._touchEnd;\n          break;\n      }\n      for (let i = 0; i < e.changedTouches.length; i++) {\n        let touch = e.changedTouches[i];\n        fn.call(this, touch.identifier, touch.clientX, touch.clientY);\n      }\n    }\n    _touchStart(id, x, y) {\n      // Ignore any new touches if there is already an active gesture,\n      // or we're in a cleanup state\n      if (this._hasDetectedGesture() || this._state === GH_NOGESTURE) {\n        this._ignored.push(id);\n        return;\n      }\n\n      // Did it take too long between touches that we should no longer\n      // consider this a single gesture?\n      if (this._tracked.length > 0 && Date.now() - this._tracked[0].started > GH_MULTITOUCH_TIMEOUT) {\n        this._state = GH_NOGESTURE;\n        this._ignored.push(id);\n        return;\n      }\n\n      // If we're waiting for fingers to release then we should no longer\n      // recognize new touches\n      if (this._waitingRelease) {\n        this._state = GH_NOGESTURE;\n        this._ignored.push(id);\n        return;\n      }\n      this._tracked.push({\n        id: id,\n        started: Date.now(),\n        active: true,\n        firstX: x,\n        firstY: y,\n        lastX: x,\n        lastY: y,\n        angle: 0\n      });\n      switch (this._tracked.length) {\n        case 1:\n          this._startLongpressTimeout();\n          break;\n        case 2:\n          this._state &= ~(GH_ONETAP | GH_DRAG | GH_LONGPRESS);\n          this._stopLongpressTimeout();\n          break;\n        case 3:\n          this._state &= ~(GH_TWOTAP | GH_TWODRAG | GH_PINCH);\n          break;\n        default:\n          this._state = GH_NOGESTURE;\n      }\n    }\n    _touchMove(id, x, y) {\n      let touch = this._tracked.find(t => t.id === id);\n\n      // If this is an update for a touch we're not tracking, ignore it\n      if (touch === undefined) {\n        return;\n      }\n\n      // Update the touches last position with the event coordinates\n      touch.lastX = x;\n      touch.lastY = y;\n      let deltaX = x - touch.firstX;\n      let deltaY = y - touch.firstY;\n\n      // Update angle when the touch has moved\n      if (touch.firstX !== touch.lastX || touch.firstY !== touch.lastY) {\n        touch.angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;\n      }\n      if (!this._hasDetectedGesture()) {\n        // Ignore moves smaller than the minimum threshold\n        if (Math.hypot(deltaX, deltaY) < GH_MOVE_THRESHOLD) {\n          return;\n        }\n\n        // Can't be a tap or long press as we've seen movement\n        this._state &= ~(GH_ONETAP | GH_TWOTAP | GH_THREETAP | GH_LONGPRESS);\n        this._stopLongpressTimeout();\n        if (this._tracked.length !== 1) {\n          this._state &= ~GH_DRAG;\n        }\n        if (this._tracked.length !== 2) {\n          this._state &= ~(GH_TWODRAG | GH_PINCH);\n        }\n\n        // We need to figure out which of our different two touch gestures\n        // this might be\n        if (this._tracked.length === 2) {\n          // The other touch is the one where the id doesn't match\n          let prevTouch = this._tracked.find(t => t.id !== id);\n\n          // How far the previous touch point has moved since start\n          let prevDeltaMove = Math.hypot(prevTouch.firstX - prevTouch.lastX, prevTouch.firstY - prevTouch.lastY);\n\n          // We know that the current touch moved far enough,\n          // but unless both touches moved further than their\n          // threshold we don't want to disqualify any gestures\n          if (prevDeltaMove > GH_MOVE_THRESHOLD) {\n            // The angle difference between the direction of the touch points\n            let deltaAngle = Math.abs(touch.angle - prevTouch.angle);\n            deltaAngle = Math.abs((deltaAngle + 180) % 360 - 180);\n\n            // PINCH or TWODRAG can be eliminated depending on the angle\n            if (deltaAngle > GH_ANGLE_THRESHOLD) {\n              this._state &= ~GH_TWODRAG;\n            } else {\n              this._state &= ~GH_PINCH;\n            }\n            if (this._isTwoTouchTimeoutRunning()) {\n              this._stopTwoTouchTimeout();\n            }\n          } else if (!this._isTwoTouchTimeoutRunning()) {\n            // We can't determine the gesture right now, let's\n            // wait and see if more events are on their way\n            this._startTwoTouchTimeout();\n          }\n        }\n        if (!this._hasDetectedGesture()) {\n          return;\n        }\n        this._pushEvent('gesturestart');\n      }\n      this._pushEvent('gesturemove');\n    }\n    _touchEnd(id, x, y) {\n      // Check if this is an ignored touch\n      if (this._ignored.indexOf(id) !== -1) {\n        // Remove this touch from ignored\n        this._ignored.splice(this._ignored.indexOf(id), 1);\n\n        // And reset the state if there are no more touches\n        if (this._ignored.length === 0 && this._tracked.length === 0) {\n          this._state = GH_INITSTATE;\n          this._waitingRelease = false;\n        }\n        return;\n      }\n\n      // We got a touchend before the timer triggered,\n      // this cannot result in a gesture anymore.\n      if (!this._hasDetectedGesture() && this._isTwoTouchTimeoutRunning()) {\n        this._stopTwoTouchTimeout();\n        this._state = GH_NOGESTURE;\n      }\n\n      // Some gestures don't trigger until a touch is released\n      if (!this._hasDetectedGesture()) {\n        // Can't be a gesture that relies on movement\n        this._state &= ~(GH_DRAG | GH_TWODRAG | GH_PINCH);\n        // Or something that relies on more time\n        this._state &= ~GH_LONGPRESS;\n        this._stopLongpressTimeout();\n        if (!this._waitingRelease) {\n          this._releaseStart = Date.now();\n          this._waitingRelease = true;\n\n          // Can't be a tap that requires more touches than we current have\n          switch (this._tracked.length) {\n            case 1:\n              this._state &= ~(GH_TWOTAP | GH_THREETAP);\n              break;\n            case 2:\n              this._state &= ~(GH_ONETAP | GH_THREETAP);\n              break;\n          }\n        }\n      }\n\n      // Waiting for all touches to release? (i.e. some tap)\n      if (this._waitingRelease) {\n        // Were all touches released at roughly the same time?\n        if (Date.now() - this._releaseStart > GH_MULTITOUCH_TIMEOUT) {\n          this._state = GH_NOGESTURE;\n        }\n\n        // Did too long time pass between press and release?\n        if (this._tracked.some(t => Date.now() - t.started > GH_TAP_TIMEOUT)) {\n          this._state = GH_NOGESTURE;\n        }\n        let touch = this._tracked.find(t => t.id === id);\n        touch.active = false;\n\n        // Are we still waiting for more releases?\n        if (this._hasDetectedGesture()) {\n          this._pushEvent('gesturestart');\n        } else {\n          // Have we reached a dead end?\n          if (this._state !== GH_NOGESTURE) {\n            return;\n          }\n        }\n      }\n      if (this._hasDetectedGesture()) {\n        this._pushEvent('gestureend');\n      }\n\n      // Ignore any remaining touches until they are ended\n      for (let i = 0; i < this._tracked.length; i++) {\n        if (this._tracked[i].active) {\n          this._ignored.push(this._tracked[i].id);\n        }\n      }\n      this._tracked = [];\n      this._state = GH_NOGESTURE;\n\n      // Remove this touch from ignored if it's in there\n      if (this._ignored.indexOf(id) !== -1) {\n        this._ignored.splice(this._ignored.indexOf(id), 1);\n      }\n\n      // We reset the state if ignored is empty\n      if (this._ignored.length === 0) {\n        this._state = GH_INITSTATE;\n        this._waitingRelease = false;\n      }\n    }\n    _hasDetectedGesture() {\n      if (this._state === GH_NOGESTURE) {\n        return false;\n      }\n      // Check to see if the bitmask value is a power of 2\n      // (i.e. only one bit set). If it is, we have a state.\n      if (this._state & this._state - 1) {\n        return false;\n      }\n\n      // For taps we also need to have all touches released\n      // before we've fully detected the gesture\n      if (this._state & (GH_ONETAP | GH_TWOTAP | GH_THREETAP)) {\n        if (this._tracked.some(t => t.active)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    _startLongpressTimeout() {\n      this._stopLongpressTimeout();\n      this._longpressTimeoutId = setTimeout(() => this._longpressTimeout(), GH_LONGPRESS_TIMEOUT);\n    }\n    _stopLongpressTimeout() {\n      clearTimeout(this._longpressTimeoutId);\n      this._longpressTimeoutId = null;\n    }\n    _longpressTimeout() {\n      if (this._hasDetectedGesture()) {\n        throw new Error(\"A longpress gesture failed, conflict with a different gesture\");\n      }\n      this._state = GH_LONGPRESS;\n      this._pushEvent('gesturestart');\n    }\n    _startTwoTouchTimeout() {\n      this._stopTwoTouchTimeout();\n      this._twoTouchTimeoutId = setTimeout(() => this._twoTouchTimeout(), GH_TWOTOUCH_TIMEOUT);\n    }\n    _stopTwoTouchTimeout() {\n      clearTimeout(this._twoTouchTimeoutId);\n      this._twoTouchTimeoutId = null;\n    }\n    _isTwoTouchTimeoutRunning() {\n      return this._twoTouchTimeoutId !== null;\n    }\n    _twoTouchTimeout() {\n      if (this._tracked.length === 0) {\n        throw new Error(\"A pinch or two drag gesture failed, no tracked touches\");\n      }\n\n      // How far each touch point has moved since start\n      let avgM = this._getAverageMovement();\n      let avgMoveH = Math.abs(avgM.x);\n      let avgMoveV = Math.abs(avgM.y);\n\n      // The difference in the distance between where\n      // the touch points started and where they are now\n      let avgD = this._getAverageDistance();\n      let deltaTouchDistance = Math.abs(Math.hypot(avgD.first.x, avgD.first.y) - Math.hypot(avgD.last.x, avgD.last.y));\n      if (avgMoveV < deltaTouchDistance && avgMoveH < deltaTouchDistance) {\n        this._state = GH_PINCH;\n      } else {\n        this._state = GH_TWODRAG;\n      }\n      this._pushEvent('gesturestart');\n      this._pushEvent('gesturemove');\n    }\n    _pushEvent(type) {\n      let detail = {\n        type: this._stateToGesture(this._state)\n      };\n\n      // For most gesture events the current (average) position is the\n      // most useful\n      let avg = this._getPosition();\n      let pos = avg.last;\n\n      // However we have a slight distance to detect gestures, so for the\n      // first gesture event we want to use the first positions we saw\n      if (type === 'gesturestart') {\n        pos = avg.first;\n      }\n\n      // For these gestures, we always want the event coordinates\n      // to be where the gesture began, not the current touch location.\n      switch (this._state) {\n        case GH_TWODRAG:\n        case GH_PINCH:\n          pos = avg.first;\n          break;\n      }\n      detail['clientX'] = pos.x;\n      detail['clientY'] = pos.y;\n\n      // FIXME: other coordinates?\n\n      // Some gestures also have a magnitude\n      if (this._state === GH_PINCH) {\n        let distance = this._getAverageDistance();\n        if (type === 'gesturestart') {\n          detail['magnitudeX'] = distance.first.x;\n          detail['magnitudeY'] = distance.first.y;\n        } else {\n          detail['magnitudeX'] = distance.last.x;\n          detail['magnitudeY'] = distance.last.y;\n        }\n      } else if (this._state === GH_TWODRAG) {\n        if (type === 'gesturestart') {\n          detail['magnitudeX'] = 0.0;\n          detail['magnitudeY'] = 0.0;\n        } else {\n          let movement = this._getAverageMovement();\n          detail['magnitudeX'] = movement.x;\n          detail['magnitudeY'] = movement.y;\n        }\n      }\n      let gev = new CustomEvent(type, {\n        detail: detail\n      });\n      this._target.dispatchEvent(gev);\n    }\n    _stateToGesture(state) {\n      switch (state) {\n        case GH_ONETAP:\n          return 'onetap';\n        case GH_TWOTAP:\n          return 'twotap';\n        case GH_THREETAP:\n          return 'threetap';\n        case GH_DRAG:\n          return 'drag';\n        case GH_LONGPRESS:\n          return 'longpress';\n        case GH_TWODRAG:\n          return 'twodrag';\n        case GH_PINCH:\n          return 'pinch';\n      }\n      throw new Error(\"Unknown gesture state: \" + state);\n    }\n    _getPosition() {\n      if (this._tracked.length === 0) {\n        throw new Error(\"Failed to get gesture position, no tracked touches\");\n      }\n      let size = this._tracked.length;\n      let fx = 0,\n        fy = 0,\n        lx = 0,\n        ly = 0;\n      for (let i = 0; i < this._tracked.length; i++) {\n        fx += this._tracked[i].firstX;\n        fy += this._tracked[i].firstY;\n        lx += this._tracked[i].lastX;\n        ly += this._tracked[i].lastY;\n      }\n      return {\n        first: {\n          x: fx / size,\n          y: fy / size\n        },\n        last: {\n          x: lx / size,\n          y: ly / size\n        }\n      };\n    }\n    _getAverageMovement() {\n      if (this._tracked.length === 0) {\n        throw new Error(\"Failed to get gesture movement, no tracked touches\");\n      }\n      let totalH, totalV;\n      totalH = totalV = 0;\n      let size = this._tracked.length;\n      for (let i = 0; i < this._tracked.length; i++) {\n        totalH += this._tracked[i].lastX - this._tracked[i].firstX;\n        totalV += this._tracked[i].lastY - this._tracked[i].firstY;\n      }\n      return {\n        x: totalH / size,\n        y: totalV / size\n      };\n    }\n    _getAverageDistance() {\n      if (this._tracked.length === 0) {\n        throw new Error(\"Failed to get gesture distance, no tracked touches\");\n      }\n\n      // Distance between the first and last tracked touches\n\n      let first = this._tracked[0];\n      let last = this._tracked[this._tracked.length - 1];\n      let fdx = Math.abs(last.firstX - first.firstX);\n      let fdy = Math.abs(last.firstY - first.firstY);\n      let ldx = Math.abs(last.lastX - first.lastX);\n      let ldy = Math.abs(last.lastY - first.lastY);\n      return {\n        first: {\n          x: fdx,\n          y: fdy\n        },\n        last: {\n          x: ldx,\n          y: ldy\n        }\n      };\n    }\n  }\n  _exports.default = GestureHandler;\n});","define(\"novnc-sockjs/core/input/keyboard\", [\"exports\", \"novnc-sockjs/core/util/logging\", \"novnc-sockjs/core/util/events\", \"novnc-sockjs/core/input/util\", \"novnc-sockjs/core/input/keysym\", \"novnc-sockjs/core/util/browser\"], function (_exports, Log, _events, KeyboardUtil, _keysym, browser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)\n   */\n\n  //\n  // Keyboard event handler\n  //\n\n  class Keyboard {\n    constructor(target) {\n      this._target = target || null;\n      this._keyDownList = {}; // List of depressed keys\n      // (even if they are happy)\n      this._altGrArmed = false; // Windows AltGr detection\n\n      // keep these here so we can refer to them later\n      this._eventHandlers = {\n        'keyup': this._handleKeyUp.bind(this),\n        'keydown': this._handleKeyDown.bind(this),\n        'blur': this._allKeysUp.bind(this)\n      };\n\n      // ===== EVENT HANDLERS =====\n\n      this.onkeyevent = () => {}; // Handler for key press/release\n    }\n\n    // ===== PRIVATE METHODS =====\n\n    _sendKeyEvent(keysym, code, down) {\n      if (down) {\n        this._keyDownList[code] = keysym;\n      } else {\n        // Do we really think this key is down?\n        if (!(code in this._keyDownList)) {\n          return;\n        }\n        delete this._keyDownList[code];\n      }\n      Log.Debug(\"onkeyevent \" + (down ? \"down\" : \"up\") + \", keysym: \" + keysym, \", code: \" + code);\n      this.onkeyevent(keysym, code, down);\n    }\n    _getKeyCode(e) {\n      const code = KeyboardUtil.getKeycode(e);\n      if (code !== 'Unidentified') {\n        return code;\n      }\n\n      // Unstable, but we don't have anything else to go on\n      if (e.keyCode) {\n        // 229 is used for composition events\n        if (e.keyCode !== 229) {\n          return 'Platform' + e.keyCode;\n        }\n      }\n\n      // A precursor to the final DOM3 standard. Unfortunately it\n      // is not layout independent, so it is as bad as using keyCode\n      if (e.keyIdentifier) {\n        // Non-character key?\n        if (e.keyIdentifier.substr(0, 2) !== 'U+') {\n          return e.keyIdentifier;\n        }\n        const codepoint = parseInt(e.keyIdentifier.substr(2), 16);\n        const char = String.fromCharCode(codepoint).toUpperCase();\n        return 'Platform' + char.charCodeAt();\n      }\n      return 'Unidentified';\n    }\n    _handleKeyDown(e) {\n      const code = this._getKeyCode(e);\n      let keysym = KeyboardUtil.getKeysym(e);\n\n      // Windows doesn't have a proper AltGr, but handles it using\n      // fake Ctrl+Alt. However the remote end might not be Windows,\n      // so we need to merge those in to a single AltGr event. We\n      // detect this case by seeing the two key events directly after\n      // each other with a very short time between them (<50ms).\n      if (this._altGrArmed) {\n        this._altGrArmed = false;\n        clearTimeout(this._altGrTimeout);\n        if (code === \"AltRight\" && e.timeStamp - this._altGrCtrlTime < 50) {\n          // FIXME: We fail to detect this if either Ctrl key is\n          //        first manually pressed as Windows then no\n          //        longer sends the fake Ctrl down event. It\n          //        does however happily send real Ctrl events\n          //        even when AltGr is already down. Some\n          //        browsers detect this for us though and set the\n          //        key to \"AltGraph\".\n          keysym = _keysym.default.XK_ISO_Level3_Shift;\n        } else {\n          this._sendKeyEvent(_keysym.default.XK_Control_L, \"ControlLeft\", true);\n        }\n      }\n\n      // We cannot handle keys we cannot track, but we also need\n      // to deal with virtual keyboards which omit key info\n      if (code === 'Unidentified') {\n        if (keysym) {\n          // If it's a virtual keyboard then it should be\n          // sufficient to just send press and release right\n          // after each other\n          this._sendKeyEvent(keysym, code, true);\n          this._sendKeyEvent(keysym, code, false);\n        }\n        (0, _events.stopEvent)(e);\n        return;\n      }\n\n      // Alt behaves more like AltGraph on macOS, so shuffle the\n      // keys around a bit to make things more sane for the remote\n      // server. This method is used by RealVNC and TigerVNC (and\n      // possibly others).\n      if (browser.isMac() || browser.isIOS()) {\n        switch (keysym) {\n          case _keysym.default.XK_Super_L:\n            keysym = _keysym.default.XK_Alt_L;\n            break;\n          case _keysym.default.XK_Super_R:\n            keysym = _keysym.default.XK_Super_L;\n            break;\n          case _keysym.default.XK_Alt_L:\n            keysym = _keysym.default.XK_Mode_switch;\n            break;\n          case _keysym.default.XK_Alt_R:\n            keysym = _keysym.default.XK_ISO_Level3_Shift;\n            break;\n        }\n      }\n\n      // Is this key already pressed? If so, then we must use the\n      // same keysym or we'll confuse the server\n      if (code in this._keyDownList) {\n        keysym = this._keyDownList[code];\n      }\n\n      // macOS doesn't send proper key events for modifiers, only\n      // state change events. That gets extra confusing for CapsLock\n      // which toggles on each press, but not on release. So pretend\n      // it was a quick press and release of the button.\n      if ((browser.isMac() || browser.isIOS()) && code === 'CapsLock') {\n        this._sendKeyEvent(_keysym.default.XK_Caps_Lock, 'CapsLock', true);\n        this._sendKeyEvent(_keysym.default.XK_Caps_Lock, 'CapsLock', false);\n        (0, _events.stopEvent)(e);\n        return;\n      }\n\n      // Windows doesn't send proper key releases for a bunch of\n      // Japanese IM keys so we have to fake the release right away\n      const jpBadKeys = [_keysym.default.XK_Zenkaku_Hankaku, _keysym.default.XK_Eisu_toggle, _keysym.default.XK_Katakana, _keysym.default.XK_Hiragana, _keysym.default.XK_Romaji];\n      if (browser.isWindows() && jpBadKeys.includes(keysym)) {\n        this._sendKeyEvent(keysym, code, true);\n        this._sendKeyEvent(keysym, code, false);\n        (0, _events.stopEvent)(e);\n        return;\n      }\n      (0, _events.stopEvent)(e);\n\n      // Possible start of AltGr sequence? (see above)\n      if (code === \"ControlLeft\" && browser.isWindows() && !(\"ControlLeft\" in this._keyDownList)) {\n        this._altGrArmed = true;\n        this._altGrTimeout = setTimeout(this._handleAltGrTimeout.bind(this), 100);\n        this._altGrCtrlTime = e.timeStamp;\n        return;\n      }\n      this._sendKeyEvent(keysym, code, true);\n    }\n    _handleKeyUp(e) {\n      (0, _events.stopEvent)(e);\n      const code = this._getKeyCode(e);\n\n      // We can't get a release in the middle of an AltGr sequence, so\n      // abort that detection\n      if (this._altGrArmed) {\n        this._altGrArmed = false;\n        clearTimeout(this._altGrTimeout);\n        this._sendKeyEvent(_keysym.default.XK_Control_L, \"ControlLeft\", true);\n      }\n\n      // See comment in _handleKeyDown()\n      if ((browser.isMac() || browser.isIOS()) && code === 'CapsLock') {\n        this._sendKeyEvent(_keysym.default.XK_Caps_Lock, 'CapsLock', true);\n        this._sendKeyEvent(_keysym.default.XK_Caps_Lock, 'CapsLock', false);\n        return;\n      }\n      this._sendKeyEvent(this._keyDownList[code], code, false);\n\n      // Windows has a rather nasty bug where it won't send key\n      // release events for a Shift button if the other Shift is still\n      // pressed\n      if (browser.isWindows() && (code === 'ShiftLeft' || code === 'ShiftRight')) {\n        if ('ShiftRight' in this._keyDownList) {\n          this._sendKeyEvent(this._keyDownList['ShiftRight'], 'ShiftRight', false);\n        }\n        if ('ShiftLeft' in this._keyDownList) {\n          this._sendKeyEvent(this._keyDownList['ShiftLeft'], 'ShiftLeft', false);\n        }\n      }\n    }\n    _handleAltGrTimeout() {\n      this._altGrArmed = false;\n      clearTimeout(this._altGrTimeout);\n      this._sendKeyEvent(_keysym.default.XK_Control_L, \"ControlLeft\", true);\n    }\n    _allKeysUp() {\n      Log.Debug(\">> Keyboard.allKeysUp\");\n      for (let code in this._keyDownList) {\n        this._sendKeyEvent(this._keyDownList[code], code, false);\n      }\n      Log.Debug(\"<< Keyboard.allKeysUp\");\n    }\n\n    // ===== PUBLIC METHODS =====\n\n    grab() {\n      //Log.Debug(\">> Keyboard.grab\");\n\n      this._target.addEventListener('keydown', this._eventHandlers.keydown);\n      this._target.addEventListener('keyup', this._eventHandlers.keyup);\n\n      // Release (key up) if window loses focus\n      window.addEventListener('blur', this._eventHandlers.blur);\n\n      //Log.Debug(\"<< Keyboard.grab\");\n    }\n    ungrab() {\n      //Log.Debug(\">> Keyboard.ungrab\");\n\n      this._target.removeEventListener('keydown', this._eventHandlers.keydown);\n      this._target.removeEventListener('keyup', this._eventHandlers.keyup);\n      window.removeEventListener('blur', this._eventHandlers.blur);\n\n      // Release (key up) all keys that are in a down state\n      this._allKeysUp();\n\n      //Log.Debug(\">> Keyboard.ungrab\");\n    }\n  }\n  _exports.default = Keyboard;\n});","define(\"novnc-sockjs/core/input/keysym\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /* eslint-disable key-spacing */\n  var _default = _exports.default = {\n    XK_VoidSymbol: 0xffffff,\n    /* Void symbol */\n\n    XK_BackSpace: 0xff08,\n    /* Back space, back char */\n    XK_Tab: 0xff09,\n    XK_Linefeed: 0xff0a,\n    /* Linefeed, LF */\n    XK_Clear: 0xff0b,\n    XK_Return: 0xff0d,\n    /* Return, enter */\n    XK_Pause: 0xff13,\n    /* Pause, hold */\n    XK_Scroll_Lock: 0xff14,\n    XK_Sys_Req: 0xff15,\n    XK_Escape: 0xff1b,\n    XK_Delete: 0xffff,\n    /* Delete, rubout */\n\n    /* International & multi-key character composition */\n\n    XK_Multi_key: 0xff20,\n    /* Multi-key character compose */\n    XK_Codeinput: 0xff37,\n    XK_SingleCandidate: 0xff3c,\n    XK_MultipleCandidate: 0xff3d,\n    XK_PreviousCandidate: 0xff3e,\n    /* Japanese keyboard support */\n\n    XK_Kanji: 0xff21,\n    /* Kanji, Kanji convert */\n    XK_Muhenkan: 0xff22,\n    /* Cancel Conversion */\n    XK_Henkan_Mode: 0xff23,\n    /* Start/Stop Conversion */\n    XK_Henkan: 0xff23,\n    /* Alias for Henkan_Mode */\n    XK_Romaji: 0xff24,\n    /* to Romaji */\n    XK_Hiragana: 0xff25,\n    /* to Hiragana */\n    XK_Katakana: 0xff26,\n    /* to Katakana */\n    XK_Hiragana_Katakana: 0xff27,\n    /* Hiragana/Katakana toggle */\n    XK_Zenkaku: 0xff28,\n    /* to Zenkaku */\n    XK_Hankaku: 0xff29,\n    /* to Hankaku */\n    XK_Zenkaku_Hankaku: 0xff2a,\n    /* Zenkaku/Hankaku toggle */\n    XK_Touroku: 0xff2b,\n    /* Add to Dictionary */\n    XK_Massyo: 0xff2c,\n    /* Delete from Dictionary */\n    XK_Kana_Lock: 0xff2d,\n    /* Kana Lock */\n    XK_Kana_Shift: 0xff2e,\n    /* Kana Shift */\n    XK_Eisu_Shift: 0xff2f,\n    /* Alphanumeric Shift */\n    XK_Eisu_toggle: 0xff30,\n    /* Alphanumeric toggle */\n    XK_Kanji_Bangou: 0xff37,\n    /* Codeinput */\n    XK_Zen_Koho: 0xff3d,\n    /* Multiple/All Candidate(s) */\n    XK_Mae_Koho: 0xff3e,\n    /* Previous Candidate */\n\n    /* Cursor control & motion */\n\n    XK_Home: 0xff50,\n    XK_Left: 0xff51,\n    /* Move left, left arrow */\n    XK_Up: 0xff52,\n    /* Move up, up arrow */\n    XK_Right: 0xff53,\n    /* Move right, right arrow */\n    XK_Down: 0xff54,\n    /* Move down, down arrow */\n    XK_Prior: 0xff55,\n    /* Prior, previous */\n    XK_Page_Up: 0xff55,\n    XK_Next: 0xff56,\n    /* Next */\n    XK_Page_Down: 0xff56,\n    XK_End: 0xff57,\n    /* EOL */\n    XK_Begin: 0xff58,\n    /* BOL */\n\n    /* Misc functions */\n\n    XK_Select: 0xff60,\n    /* Select, mark */\n    XK_Print: 0xff61,\n    XK_Execute: 0xff62,\n    /* Execute, run, do */\n    XK_Insert: 0xff63,\n    /* Insert, insert here */\n    XK_Undo: 0xff65,\n    XK_Redo: 0xff66,\n    /* Redo, again */\n    XK_Menu: 0xff67,\n    XK_Find: 0xff68,\n    /* Find, search */\n    XK_Cancel: 0xff69,\n    /* Cancel, stop, abort, exit */\n    XK_Help: 0xff6a,\n    /* Help */\n    XK_Break: 0xff6b,\n    XK_Mode_switch: 0xff7e,\n    /* Character set switch */\n    XK_script_switch: 0xff7e,\n    /* Alias for mode_switch */\n    XK_Num_Lock: 0xff7f,\n    /* Keypad functions, keypad numbers cleverly chosen to map to ASCII */\n\n    XK_KP_Space: 0xff80,\n    /* Space */\n    XK_KP_Tab: 0xff89,\n    XK_KP_Enter: 0xff8d,\n    /* Enter */\n    XK_KP_F1: 0xff91,\n    /* PF1, KP_A, ... */\n    XK_KP_F2: 0xff92,\n    XK_KP_F3: 0xff93,\n    XK_KP_F4: 0xff94,\n    XK_KP_Home: 0xff95,\n    XK_KP_Left: 0xff96,\n    XK_KP_Up: 0xff97,\n    XK_KP_Right: 0xff98,\n    XK_KP_Down: 0xff99,\n    XK_KP_Prior: 0xff9a,\n    XK_KP_Page_Up: 0xff9a,\n    XK_KP_Next: 0xff9b,\n    XK_KP_Page_Down: 0xff9b,\n    XK_KP_End: 0xff9c,\n    XK_KP_Begin: 0xff9d,\n    XK_KP_Insert: 0xff9e,\n    XK_KP_Delete: 0xff9f,\n    XK_KP_Equal: 0xffbd,\n    /* Equals */\n    XK_KP_Multiply: 0xffaa,\n    XK_KP_Add: 0xffab,\n    XK_KP_Separator: 0xffac,\n    /* Separator, often comma */\n    XK_KP_Subtract: 0xffad,\n    XK_KP_Decimal: 0xffae,\n    XK_KP_Divide: 0xffaf,\n    XK_KP_0: 0xffb0,\n    XK_KP_1: 0xffb1,\n    XK_KP_2: 0xffb2,\n    XK_KP_3: 0xffb3,\n    XK_KP_4: 0xffb4,\n    XK_KP_5: 0xffb5,\n    XK_KP_6: 0xffb6,\n    XK_KP_7: 0xffb7,\n    XK_KP_8: 0xffb8,\n    XK_KP_9: 0xffb9,\n    /*\n     * Auxiliary functions; note the duplicate definitions for left and right\n     * function keys;  Sun keyboards and a few other manufacturers have such\n     * function key groups on the left and/or right sides of the keyboard.\n     * We've not found a keyboard with more than 35 function keys total.\n     */\n\n    XK_F1: 0xffbe,\n    XK_F2: 0xffbf,\n    XK_F3: 0xffc0,\n    XK_F4: 0xffc1,\n    XK_F5: 0xffc2,\n    XK_F6: 0xffc3,\n    XK_F7: 0xffc4,\n    XK_F8: 0xffc5,\n    XK_F9: 0xffc6,\n    XK_F10: 0xffc7,\n    XK_F11: 0xffc8,\n    XK_L1: 0xffc8,\n    XK_F12: 0xffc9,\n    XK_L2: 0xffc9,\n    XK_F13: 0xffca,\n    XK_L3: 0xffca,\n    XK_F14: 0xffcb,\n    XK_L4: 0xffcb,\n    XK_F15: 0xffcc,\n    XK_L5: 0xffcc,\n    XK_F16: 0xffcd,\n    XK_L6: 0xffcd,\n    XK_F17: 0xffce,\n    XK_L7: 0xffce,\n    XK_F18: 0xffcf,\n    XK_L8: 0xffcf,\n    XK_F19: 0xffd0,\n    XK_L9: 0xffd0,\n    XK_F20: 0xffd1,\n    XK_L10: 0xffd1,\n    XK_F21: 0xffd2,\n    XK_R1: 0xffd2,\n    XK_F22: 0xffd3,\n    XK_R2: 0xffd3,\n    XK_F23: 0xffd4,\n    XK_R3: 0xffd4,\n    XK_F24: 0xffd5,\n    XK_R4: 0xffd5,\n    XK_F25: 0xffd6,\n    XK_R5: 0xffd6,\n    XK_F26: 0xffd7,\n    XK_R6: 0xffd7,\n    XK_F27: 0xffd8,\n    XK_R7: 0xffd8,\n    XK_F28: 0xffd9,\n    XK_R8: 0xffd9,\n    XK_F29: 0xffda,\n    XK_R9: 0xffda,\n    XK_F30: 0xffdb,\n    XK_R10: 0xffdb,\n    XK_F31: 0xffdc,\n    XK_R11: 0xffdc,\n    XK_F32: 0xffdd,\n    XK_R12: 0xffdd,\n    XK_F33: 0xffde,\n    XK_R13: 0xffde,\n    XK_F34: 0xffdf,\n    XK_R14: 0xffdf,\n    XK_F35: 0xffe0,\n    XK_R15: 0xffe0,\n    /* Modifiers */\n\n    XK_Shift_L: 0xffe1,\n    /* Left shift */\n    XK_Shift_R: 0xffe2,\n    /* Right shift */\n    XK_Control_L: 0xffe3,\n    /* Left control */\n    XK_Control_R: 0xffe4,\n    /* Right control */\n    XK_Caps_Lock: 0xffe5,\n    /* Caps lock */\n    XK_Shift_Lock: 0xffe6,\n    /* Shift lock */\n\n    XK_Meta_L: 0xffe7,\n    /* Left meta */\n    XK_Meta_R: 0xffe8,\n    /* Right meta */\n    XK_Alt_L: 0xffe9,\n    /* Left alt */\n    XK_Alt_R: 0xffea,\n    /* Right alt */\n    XK_Super_L: 0xffeb,\n    /* Left super */\n    XK_Super_R: 0xffec,\n    /* Right super */\n    XK_Hyper_L: 0xffed,\n    /* Left hyper */\n    XK_Hyper_R: 0xffee,\n    /* Right hyper */\n\n    /*\n     * Keyboard (XKB) Extension function and modifier keys\n     * (from Appendix C of \"The X Keyboard Extension: Protocol Specification\")\n     * Byte 3 = 0xfe\n     */\n\n    XK_ISO_Level3_Shift: 0xfe03,\n    /* AltGr */\n    XK_ISO_Next_Group: 0xfe08,\n    XK_ISO_Prev_Group: 0xfe0a,\n    XK_ISO_First_Group: 0xfe0c,\n    XK_ISO_Last_Group: 0xfe0e,\n    /*\n     * Latin 1\n     * (ISO/IEC 8859-1: Unicode U+0020..U+00FF)\n     * Byte 3: 0\n     */\n\n    XK_space: 0x0020,\n    /* U+0020 SPACE */\n    XK_exclam: 0x0021,\n    /* U+0021 EXCLAMATION MARK */\n    XK_quotedbl: 0x0022,\n    /* U+0022 QUOTATION MARK */\n    XK_numbersign: 0x0023,\n    /* U+0023 NUMBER SIGN */\n    XK_dollar: 0x0024,\n    /* U+0024 DOLLAR SIGN */\n    XK_percent: 0x0025,\n    /* U+0025 PERCENT SIGN */\n    XK_ampersand: 0x0026,\n    /* U+0026 AMPERSAND */\n    XK_apostrophe: 0x0027,\n    /* U+0027 APOSTROPHE */\n    XK_quoteright: 0x0027,\n    /* deprecated */\n    XK_parenleft: 0x0028,\n    /* U+0028 LEFT PARENTHESIS */\n    XK_parenright: 0x0029,\n    /* U+0029 RIGHT PARENTHESIS */\n    XK_asterisk: 0x002a,\n    /* U+002A ASTERISK */\n    XK_plus: 0x002b,\n    /* U+002B PLUS SIGN */\n    XK_comma: 0x002c,\n    /* U+002C COMMA */\n    XK_minus: 0x002d,\n    /* U+002D HYPHEN-MINUS */\n    XK_period: 0x002e,\n    /* U+002E FULL STOP */\n    XK_slash: 0x002f,\n    /* U+002F SOLIDUS */\n    XK_0: 0x0030,\n    /* U+0030 DIGIT ZERO */\n    XK_1: 0x0031,\n    /* U+0031 DIGIT ONE */\n    XK_2: 0x0032,\n    /* U+0032 DIGIT TWO */\n    XK_3: 0x0033,\n    /* U+0033 DIGIT THREE */\n    XK_4: 0x0034,\n    /* U+0034 DIGIT FOUR */\n    XK_5: 0x0035,\n    /* U+0035 DIGIT FIVE */\n    XK_6: 0x0036,\n    /* U+0036 DIGIT SIX */\n    XK_7: 0x0037,\n    /* U+0037 DIGIT SEVEN */\n    XK_8: 0x0038,\n    /* U+0038 DIGIT EIGHT */\n    XK_9: 0x0039,\n    /* U+0039 DIGIT NINE */\n    XK_colon: 0x003a,\n    /* U+003A COLON */\n    XK_semicolon: 0x003b,\n    /* U+003B SEMICOLON */\n    XK_less: 0x003c,\n    /* U+003C LESS-THAN SIGN */\n    XK_equal: 0x003d,\n    /* U+003D EQUALS SIGN */\n    XK_greater: 0x003e,\n    /* U+003E GREATER-THAN SIGN */\n    XK_question: 0x003f,\n    /* U+003F QUESTION MARK */\n    XK_at: 0x0040,\n    /* U+0040 COMMERCIAL AT */\n    XK_A: 0x0041,\n    /* U+0041 LATIN CAPITAL LETTER A */\n    XK_B: 0x0042,\n    /* U+0042 LATIN CAPITAL LETTER B */\n    XK_C: 0x0043,\n    /* U+0043 LATIN CAPITAL LETTER C */\n    XK_D: 0x0044,\n    /* U+0044 LATIN CAPITAL LETTER D */\n    XK_E: 0x0045,\n    /* U+0045 LATIN CAPITAL LETTER E */\n    XK_F: 0x0046,\n    /* U+0046 LATIN CAPITAL LETTER F */\n    XK_G: 0x0047,\n    /* U+0047 LATIN CAPITAL LETTER G */\n    XK_H: 0x0048,\n    /* U+0048 LATIN CAPITAL LETTER H */\n    XK_I: 0x0049,\n    /* U+0049 LATIN CAPITAL LETTER I */\n    XK_J: 0x004a,\n    /* U+004A LATIN CAPITAL LETTER J */\n    XK_K: 0x004b,\n    /* U+004B LATIN CAPITAL LETTER K */\n    XK_L: 0x004c,\n    /* U+004C LATIN CAPITAL LETTER L */\n    XK_M: 0x004d,\n    /* U+004D LATIN CAPITAL LETTER M */\n    XK_N: 0x004e,\n    /* U+004E LATIN CAPITAL LETTER N */\n    XK_O: 0x004f,\n    /* U+004F LATIN CAPITAL LETTER O */\n    XK_P: 0x0050,\n    /* U+0050 LATIN CAPITAL LETTER P */\n    XK_Q: 0x0051,\n    /* U+0051 LATIN CAPITAL LETTER Q */\n    XK_R: 0x0052,\n    /* U+0052 LATIN CAPITAL LETTER R */\n    XK_S: 0x0053,\n    /* U+0053 LATIN CAPITAL LETTER S */\n    XK_T: 0x0054,\n    /* U+0054 LATIN CAPITAL LETTER T */\n    XK_U: 0x0055,\n    /* U+0055 LATIN CAPITAL LETTER U */\n    XK_V: 0x0056,\n    /* U+0056 LATIN CAPITAL LETTER V */\n    XK_W: 0x0057,\n    /* U+0057 LATIN CAPITAL LETTER W */\n    XK_X: 0x0058,\n    /* U+0058 LATIN CAPITAL LETTER X */\n    XK_Y: 0x0059,\n    /* U+0059 LATIN CAPITAL LETTER Y */\n    XK_Z: 0x005a,\n    /* U+005A LATIN CAPITAL LETTER Z */\n    XK_bracketleft: 0x005b,\n    /* U+005B LEFT SQUARE BRACKET */\n    XK_backslash: 0x005c,\n    /* U+005C REVERSE SOLIDUS */\n    XK_bracketright: 0x005d,\n    /* U+005D RIGHT SQUARE BRACKET */\n    XK_asciicircum: 0x005e,\n    /* U+005E CIRCUMFLEX ACCENT */\n    XK_underscore: 0x005f,\n    /* U+005F LOW LINE */\n    XK_grave: 0x0060,\n    /* U+0060 GRAVE ACCENT */\n    XK_quoteleft: 0x0060,\n    /* deprecated */\n    XK_a: 0x0061,\n    /* U+0061 LATIN SMALL LETTER A */\n    XK_b: 0x0062,\n    /* U+0062 LATIN SMALL LETTER B */\n    XK_c: 0x0063,\n    /* U+0063 LATIN SMALL LETTER C */\n    XK_d: 0x0064,\n    /* U+0064 LATIN SMALL LETTER D */\n    XK_e: 0x0065,\n    /* U+0065 LATIN SMALL LETTER E */\n    XK_f: 0x0066,\n    /* U+0066 LATIN SMALL LETTER F */\n    XK_g: 0x0067,\n    /* U+0067 LATIN SMALL LETTER G */\n    XK_h: 0x0068,\n    /* U+0068 LATIN SMALL LETTER H */\n    XK_i: 0x0069,\n    /* U+0069 LATIN SMALL LETTER I */\n    XK_j: 0x006a,\n    /* U+006A LATIN SMALL LETTER J */\n    XK_k: 0x006b,\n    /* U+006B LATIN SMALL LETTER K */\n    XK_l: 0x006c,\n    /* U+006C LATIN SMALL LETTER L */\n    XK_m: 0x006d,\n    /* U+006D LATIN SMALL LETTER M */\n    XK_n: 0x006e,\n    /* U+006E LATIN SMALL LETTER N */\n    XK_o: 0x006f,\n    /* U+006F LATIN SMALL LETTER O */\n    XK_p: 0x0070,\n    /* U+0070 LATIN SMALL LETTER P */\n    XK_q: 0x0071,\n    /* U+0071 LATIN SMALL LETTER Q */\n    XK_r: 0x0072,\n    /* U+0072 LATIN SMALL LETTER R */\n    XK_s: 0x0073,\n    /* U+0073 LATIN SMALL LETTER S */\n    XK_t: 0x0074,\n    /* U+0074 LATIN SMALL LETTER T */\n    XK_u: 0x0075,\n    /* U+0075 LATIN SMALL LETTER U */\n    XK_v: 0x0076,\n    /* U+0076 LATIN SMALL LETTER V */\n    XK_w: 0x0077,\n    /* U+0077 LATIN SMALL LETTER W */\n    XK_x: 0x0078,\n    /* U+0078 LATIN SMALL LETTER X */\n    XK_y: 0x0079,\n    /* U+0079 LATIN SMALL LETTER Y */\n    XK_z: 0x007a,\n    /* U+007A LATIN SMALL LETTER Z */\n    XK_braceleft: 0x007b,\n    /* U+007B LEFT CURLY BRACKET */\n    XK_bar: 0x007c,\n    /* U+007C VERTICAL LINE */\n    XK_braceright: 0x007d,\n    /* U+007D RIGHT CURLY BRACKET */\n    XK_asciitilde: 0x007e,\n    /* U+007E TILDE */\n\n    XK_nobreakspace: 0x00a0,\n    /* U+00A0 NO-BREAK SPACE */\n    XK_exclamdown: 0x00a1,\n    /* U+00A1 INVERTED EXCLAMATION MARK */\n    XK_cent: 0x00a2,\n    /* U+00A2 CENT SIGN */\n    XK_sterling: 0x00a3,\n    /* U+00A3 POUND SIGN */\n    XK_currency: 0x00a4,\n    /* U+00A4 CURRENCY SIGN */\n    XK_yen: 0x00a5,\n    /* U+00A5 YEN SIGN */\n    XK_brokenbar: 0x00a6,\n    /* U+00A6 BROKEN BAR */\n    XK_section: 0x00a7,\n    /* U+00A7 SECTION SIGN */\n    XK_diaeresis: 0x00a8,\n    /* U+00A8 DIAERESIS */\n    XK_copyright: 0x00a9,\n    /* U+00A9 COPYRIGHT SIGN */\n    XK_ordfeminine: 0x00aa,\n    /* U+00AA FEMININE ORDINAL INDICATOR */\n    XK_guillemotleft: 0x00ab,\n    /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */\n    XK_notsign: 0x00ac,\n    /* U+00AC NOT SIGN */\n    XK_hyphen: 0x00ad,\n    /* U+00AD SOFT HYPHEN */\n    XK_registered: 0x00ae,\n    /* U+00AE REGISTERED SIGN */\n    XK_macron: 0x00af,\n    /* U+00AF MACRON */\n    XK_degree: 0x00b0,\n    /* U+00B0 DEGREE SIGN */\n    XK_plusminus: 0x00b1,\n    /* U+00B1 PLUS-MINUS SIGN */\n    XK_twosuperior: 0x00b2,\n    /* U+00B2 SUPERSCRIPT TWO */\n    XK_threesuperior: 0x00b3,\n    /* U+00B3 SUPERSCRIPT THREE */\n    XK_acute: 0x00b4,\n    /* U+00B4 ACUTE ACCENT */\n    XK_mu: 0x00b5,\n    /* U+00B5 MICRO SIGN */\n    XK_paragraph: 0x00b6,\n    /* U+00B6 PILCROW SIGN */\n    XK_periodcentered: 0x00b7,\n    /* U+00B7 MIDDLE DOT */\n    XK_cedilla: 0x00b8,\n    /* U+00B8 CEDILLA */\n    XK_onesuperior: 0x00b9,\n    /* U+00B9 SUPERSCRIPT ONE */\n    XK_masculine: 0x00ba,\n    /* U+00BA MASCULINE ORDINAL INDICATOR */\n    XK_guillemotright: 0x00bb,\n    /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */\n    XK_onequarter: 0x00bc,\n    /* U+00BC VULGAR FRACTION ONE QUARTER */\n    XK_onehalf: 0x00bd,\n    /* U+00BD VULGAR FRACTION ONE HALF */\n    XK_threequarters: 0x00be,\n    /* U+00BE VULGAR FRACTION THREE QUARTERS */\n    XK_questiondown: 0x00bf,\n    /* U+00BF INVERTED QUESTION MARK */\n    XK_Agrave: 0x00c0,\n    /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */\n    XK_Aacute: 0x00c1,\n    /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */\n    XK_Acircumflex: 0x00c2,\n    /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */\n    XK_Atilde: 0x00c3,\n    /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */\n    XK_Adiaeresis: 0x00c4,\n    /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */\n    XK_Aring: 0x00c5,\n    /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */\n    XK_AE: 0x00c6,\n    /* U+00C6 LATIN CAPITAL LETTER AE */\n    XK_Ccedilla: 0x00c7,\n    /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */\n    XK_Egrave: 0x00c8,\n    /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */\n    XK_Eacute: 0x00c9,\n    /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */\n    XK_Ecircumflex: 0x00ca,\n    /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */\n    XK_Ediaeresis: 0x00cb,\n    /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */\n    XK_Igrave: 0x00cc,\n    /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */\n    XK_Iacute: 0x00cd,\n    /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */\n    XK_Icircumflex: 0x00ce,\n    /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */\n    XK_Idiaeresis: 0x00cf,\n    /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */\n    XK_ETH: 0x00d0,\n    /* U+00D0 LATIN CAPITAL LETTER ETH */\n    XK_Eth: 0x00d0,\n    /* deprecated */\n    XK_Ntilde: 0x00d1,\n    /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */\n    XK_Ograve: 0x00d2,\n    /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */\n    XK_Oacute: 0x00d3,\n    /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */\n    XK_Ocircumflex: 0x00d4,\n    /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */\n    XK_Otilde: 0x00d5,\n    /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */\n    XK_Odiaeresis: 0x00d6,\n    /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */\n    XK_multiply: 0x00d7,\n    /* U+00D7 MULTIPLICATION SIGN */\n    XK_Oslash: 0x00d8,\n    /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */\n    XK_Ooblique: 0x00d8,\n    /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */\n    XK_Ugrave: 0x00d9,\n    /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */\n    XK_Uacute: 0x00da,\n    /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */\n    XK_Ucircumflex: 0x00db,\n    /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */\n    XK_Udiaeresis: 0x00dc,\n    /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */\n    XK_Yacute: 0x00dd,\n    /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */\n    XK_THORN: 0x00de,\n    /* U+00DE LATIN CAPITAL LETTER THORN */\n    XK_Thorn: 0x00de,\n    /* deprecated */\n    XK_ssharp: 0x00df,\n    /* U+00DF LATIN SMALL LETTER SHARP S */\n    XK_agrave: 0x00e0,\n    /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */\n    XK_aacute: 0x00e1,\n    /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */\n    XK_acircumflex: 0x00e2,\n    /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */\n    XK_atilde: 0x00e3,\n    /* U+00E3 LATIN SMALL LETTER A WITH TILDE */\n    XK_adiaeresis: 0x00e4,\n    /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */\n    XK_aring: 0x00e5,\n    /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */\n    XK_ae: 0x00e6,\n    /* U+00E6 LATIN SMALL LETTER AE */\n    XK_ccedilla: 0x00e7,\n    /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */\n    XK_egrave: 0x00e8,\n    /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */\n    XK_eacute: 0x00e9,\n    /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */\n    XK_ecircumflex: 0x00ea,\n    /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */\n    XK_ediaeresis: 0x00eb,\n    /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */\n    XK_igrave: 0x00ec,\n    /* U+00EC LATIN SMALL LETTER I WITH GRAVE */\n    XK_iacute: 0x00ed,\n    /* U+00ED LATIN SMALL LETTER I WITH ACUTE */\n    XK_icircumflex: 0x00ee,\n    /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */\n    XK_idiaeresis: 0x00ef,\n    /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */\n    XK_eth: 0x00f0,\n    /* U+00F0 LATIN SMALL LETTER ETH */\n    XK_ntilde: 0x00f1,\n    /* U+00F1 LATIN SMALL LETTER N WITH TILDE */\n    XK_ograve: 0x00f2,\n    /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */\n    XK_oacute: 0x00f3,\n    /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */\n    XK_ocircumflex: 0x00f4,\n    /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */\n    XK_otilde: 0x00f5,\n    /* U+00F5 LATIN SMALL LETTER O WITH TILDE */\n    XK_odiaeresis: 0x00f6,\n    /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */\n    XK_division: 0x00f7,\n    /* U+00F7 DIVISION SIGN */\n    XK_oslash: 0x00f8,\n    /* U+00F8 LATIN SMALL LETTER O WITH STROKE */\n    XK_ooblique: 0x00f8,\n    /* U+00F8 LATIN SMALL LETTER O WITH STROKE */\n    XK_ugrave: 0x00f9,\n    /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */\n    XK_uacute: 0x00fa,\n    /* U+00FA LATIN SMALL LETTER U WITH ACUTE */\n    XK_ucircumflex: 0x00fb,\n    /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */\n    XK_udiaeresis: 0x00fc,\n    /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */\n    XK_yacute: 0x00fd,\n    /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */\n    XK_thorn: 0x00fe,\n    /* U+00FE LATIN SMALL LETTER THORN */\n    XK_ydiaeresis: 0x00ff,\n    /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */\n\n    /*\n     * Korean\n     * Byte 3 = 0x0e\n     */\n\n    XK_Hangul: 0xff31,\n    /* Hangul start/stop(toggle) */\n    XK_Hangul_Hanja: 0xff34,\n    /* Start Hangul->Hanja Conversion */\n    XK_Hangul_Jeonja: 0xff38,\n    /* Jeonja mode */\n\n    /*\n     * XFree86 vendor specific keysyms.\n     *\n     * The XFree86 keysym range is 0x10080001 - 0x1008FFFF.\n     */\n\n    XF86XK_ModeLock: 0x1008FF01,\n    XF86XK_MonBrightnessUp: 0x1008FF02,\n    XF86XK_MonBrightnessDown: 0x1008FF03,\n    XF86XK_KbdLightOnOff: 0x1008FF04,\n    XF86XK_KbdBrightnessUp: 0x1008FF05,\n    XF86XK_KbdBrightnessDown: 0x1008FF06,\n    XF86XK_Standby: 0x1008FF10,\n    XF86XK_AudioLowerVolume: 0x1008FF11,\n    XF86XK_AudioMute: 0x1008FF12,\n    XF86XK_AudioRaiseVolume: 0x1008FF13,\n    XF86XK_AudioPlay: 0x1008FF14,\n    XF86XK_AudioStop: 0x1008FF15,\n    XF86XK_AudioPrev: 0x1008FF16,\n    XF86XK_AudioNext: 0x1008FF17,\n    XF86XK_HomePage: 0x1008FF18,\n    XF86XK_Mail: 0x1008FF19,\n    XF86XK_Start: 0x1008FF1A,\n    XF86XK_Search: 0x1008FF1B,\n    XF86XK_AudioRecord: 0x1008FF1C,\n    XF86XK_Calculator: 0x1008FF1D,\n    XF86XK_Memo: 0x1008FF1E,\n    XF86XK_ToDoList: 0x1008FF1F,\n    XF86XK_Calendar: 0x1008FF20,\n    XF86XK_PowerDown: 0x1008FF21,\n    XF86XK_ContrastAdjust: 0x1008FF22,\n    XF86XK_RockerUp: 0x1008FF23,\n    XF86XK_RockerDown: 0x1008FF24,\n    XF86XK_RockerEnter: 0x1008FF25,\n    XF86XK_Back: 0x1008FF26,\n    XF86XK_Forward: 0x1008FF27,\n    XF86XK_Stop: 0x1008FF28,\n    XF86XK_Refresh: 0x1008FF29,\n    XF86XK_PowerOff: 0x1008FF2A,\n    XF86XK_WakeUp: 0x1008FF2B,\n    XF86XK_Eject: 0x1008FF2C,\n    XF86XK_ScreenSaver: 0x1008FF2D,\n    XF86XK_WWW: 0x1008FF2E,\n    XF86XK_Sleep: 0x1008FF2F,\n    XF86XK_Favorites: 0x1008FF30,\n    XF86XK_AudioPause: 0x1008FF31,\n    XF86XK_AudioMedia: 0x1008FF32,\n    XF86XK_MyComputer: 0x1008FF33,\n    XF86XK_VendorHome: 0x1008FF34,\n    XF86XK_LightBulb: 0x1008FF35,\n    XF86XK_Shop: 0x1008FF36,\n    XF86XK_History: 0x1008FF37,\n    XF86XK_OpenURL: 0x1008FF38,\n    XF86XK_AddFavorite: 0x1008FF39,\n    XF86XK_HotLinks: 0x1008FF3A,\n    XF86XK_BrightnessAdjust: 0x1008FF3B,\n    XF86XK_Finance: 0x1008FF3C,\n    XF86XK_Community: 0x1008FF3D,\n    XF86XK_AudioRewind: 0x1008FF3E,\n    XF86XK_BackForward: 0x1008FF3F,\n    XF86XK_Launch0: 0x1008FF40,\n    XF86XK_Launch1: 0x1008FF41,\n    XF86XK_Launch2: 0x1008FF42,\n    XF86XK_Launch3: 0x1008FF43,\n    XF86XK_Launch4: 0x1008FF44,\n    XF86XK_Launch5: 0x1008FF45,\n    XF86XK_Launch6: 0x1008FF46,\n    XF86XK_Launch7: 0x1008FF47,\n    XF86XK_Launch8: 0x1008FF48,\n    XF86XK_Launch9: 0x1008FF49,\n    XF86XK_LaunchA: 0x1008FF4A,\n    XF86XK_LaunchB: 0x1008FF4B,\n    XF86XK_LaunchC: 0x1008FF4C,\n    XF86XK_LaunchD: 0x1008FF4D,\n    XF86XK_LaunchE: 0x1008FF4E,\n    XF86XK_LaunchF: 0x1008FF4F,\n    XF86XK_ApplicationLeft: 0x1008FF50,\n    XF86XK_ApplicationRight: 0x1008FF51,\n    XF86XK_Book: 0x1008FF52,\n    XF86XK_CD: 0x1008FF53,\n    XF86XK_Calculater: 0x1008FF54,\n    XF86XK_Clear: 0x1008FF55,\n    XF86XK_Close: 0x1008FF56,\n    XF86XK_Copy: 0x1008FF57,\n    XF86XK_Cut: 0x1008FF58,\n    XF86XK_Display: 0x1008FF59,\n    XF86XK_DOS: 0x1008FF5A,\n    XF86XK_Documents: 0x1008FF5B,\n    XF86XK_Excel: 0x1008FF5C,\n    XF86XK_Explorer: 0x1008FF5D,\n    XF86XK_Game: 0x1008FF5E,\n    XF86XK_Go: 0x1008FF5F,\n    XF86XK_iTouch: 0x1008FF60,\n    XF86XK_LogOff: 0x1008FF61,\n    XF86XK_Market: 0x1008FF62,\n    XF86XK_Meeting: 0x1008FF63,\n    XF86XK_MenuKB: 0x1008FF65,\n    XF86XK_MenuPB: 0x1008FF66,\n    XF86XK_MySites: 0x1008FF67,\n    XF86XK_New: 0x1008FF68,\n    XF86XK_News: 0x1008FF69,\n    XF86XK_OfficeHome: 0x1008FF6A,\n    XF86XK_Open: 0x1008FF6B,\n    XF86XK_Option: 0x1008FF6C,\n    XF86XK_Paste: 0x1008FF6D,\n    XF86XK_Phone: 0x1008FF6E,\n    XF86XK_Q: 0x1008FF70,\n    XF86XK_Reply: 0x1008FF72,\n    XF86XK_Reload: 0x1008FF73,\n    XF86XK_RotateWindows: 0x1008FF74,\n    XF86XK_RotationPB: 0x1008FF75,\n    XF86XK_RotationKB: 0x1008FF76,\n    XF86XK_Save: 0x1008FF77,\n    XF86XK_ScrollUp: 0x1008FF78,\n    XF86XK_ScrollDown: 0x1008FF79,\n    XF86XK_ScrollClick: 0x1008FF7A,\n    XF86XK_Send: 0x1008FF7B,\n    XF86XK_Spell: 0x1008FF7C,\n    XF86XK_SplitScreen: 0x1008FF7D,\n    XF86XK_Support: 0x1008FF7E,\n    XF86XK_TaskPane: 0x1008FF7F,\n    XF86XK_Terminal: 0x1008FF80,\n    XF86XK_Tools: 0x1008FF81,\n    XF86XK_Travel: 0x1008FF82,\n    XF86XK_UserPB: 0x1008FF84,\n    XF86XK_User1KB: 0x1008FF85,\n    XF86XK_User2KB: 0x1008FF86,\n    XF86XK_Video: 0x1008FF87,\n    XF86XK_WheelButton: 0x1008FF88,\n    XF86XK_Word: 0x1008FF89,\n    XF86XK_Xfer: 0x1008FF8A,\n    XF86XK_ZoomIn: 0x1008FF8B,\n    XF86XK_ZoomOut: 0x1008FF8C,\n    XF86XK_Away: 0x1008FF8D,\n    XF86XK_Messenger: 0x1008FF8E,\n    XF86XK_WebCam: 0x1008FF8F,\n    XF86XK_MailForward: 0x1008FF90,\n    XF86XK_Pictures: 0x1008FF91,\n    XF86XK_Music: 0x1008FF92,\n    XF86XK_Battery: 0x1008FF93,\n    XF86XK_Bluetooth: 0x1008FF94,\n    XF86XK_WLAN: 0x1008FF95,\n    XF86XK_UWB: 0x1008FF96,\n    XF86XK_AudioForward: 0x1008FF97,\n    XF86XK_AudioRepeat: 0x1008FF98,\n    XF86XK_AudioRandomPlay: 0x1008FF99,\n    XF86XK_Subtitle: 0x1008FF9A,\n    XF86XK_AudioCycleTrack: 0x1008FF9B,\n    XF86XK_CycleAngle: 0x1008FF9C,\n    XF86XK_FrameBack: 0x1008FF9D,\n    XF86XK_FrameForward: 0x1008FF9E,\n    XF86XK_Time: 0x1008FF9F,\n    XF86XK_Select: 0x1008FFA0,\n    XF86XK_View: 0x1008FFA1,\n    XF86XK_TopMenu: 0x1008FFA2,\n    XF86XK_Red: 0x1008FFA3,\n    XF86XK_Green: 0x1008FFA4,\n    XF86XK_Yellow: 0x1008FFA5,\n    XF86XK_Blue: 0x1008FFA6,\n    XF86XK_Suspend: 0x1008FFA7,\n    XF86XK_Hibernate: 0x1008FFA8,\n    XF86XK_TouchpadToggle: 0x1008FFA9,\n    XF86XK_TouchpadOn: 0x1008FFB0,\n    XF86XK_TouchpadOff: 0x1008FFB1,\n    XF86XK_AudioMicMute: 0x1008FFB2,\n    XF86XK_Switch_VT_1: 0x1008FE01,\n    XF86XK_Switch_VT_2: 0x1008FE02,\n    XF86XK_Switch_VT_3: 0x1008FE03,\n    XF86XK_Switch_VT_4: 0x1008FE04,\n    XF86XK_Switch_VT_5: 0x1008FE05,\n    XF86XK_Switch_VT_6: 0x1008FE06,\n    XF86XK_Switch_VT_7: 0x1008FE07,\n    XF86XK_Switch_VT_8: 0x1008FE08,\n    XF86XK_Switch_VT_9: 0x1008FE09,\n    XF86XK_Switch_VT_10: 0x1008FE0A,\n    XF86XK_Switch_VT_11: 0x1008FE0B,\n    XF86XK_Switch_VT_12: 0x1008FE0C,\n    XF86XK_Ungrab: 0x1008FE20,\n    XF86XK_ClearGrab: 0x1008FE21,\n    XF86XK_Next_VMode: 0x1008FE22,\n    XF86XK_Prev_VMode: 0x1008FE23,\n    XF86XK_LogWindowTree: 0x1008FE24,\n    XF86XK_LogGrabInfo: 0x1008FE25\n  };\n});","define(\"novnc-sockjs/core/input/keysymdef\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * Mapping from Unicode codepoints to X11/RFB keysyms\n   *\n   * This file was automatically generated from keysymdef.h\n   * DO NOT EDIT!\n   */\n\n  /* Functions at the bottom */\n\n  const codepoints = {\n    0x0100: 0x03c0,\n    // XK_Amacron\n    0x0101: 0x03e0,\n    // XK_amacron\n    0x0102: 0x01c3,\n    // XK_Abreve\n    0x0103: 0x01e3,\n    // XK_abreve\n    0x0104: 0x01a1,\n    // XK_Aogonek\n    0x0105: 0x01b1,\n    // XK_aogonek\n    0x0106: 0x01c6,\n    // XK_Cacute\n    0x0107: 0x01e6,\n    // XK_cacute\n    0x0108: 0x02c6,\n    // XK_Ccircumflex\n    0x0109: 0x02e6,\n    // XK_ccircumflex\n    0x010a: 0x02c5,\n    // XK_Cabovedot\n    0x010b: 0x02e5,\n    // XK_cabovedot\n    0x010c: 0x01c8,\n    // XK_Ccaron\n    0x010d: 0x01e8,\n    // XK_ccaron\n    0x010e: 0x01cf,\n    // XK_Dcaron\n    0x010f: 0x01ef,\n    // XK_dcaron\n    0x0110: 0x01d0,\n    // XK_Dstroke\n    0x0111: 0x01f0,\n    // XK_dstroke\n    0x0112: 0x03aa,\n    // XK_Emacron\n    0x0113: 0x03ba,\n    // XK_emacron\n    0x0116: 0x03cc,\n    // XK_Eabovedot\n    0x0117: 0x03ec,\n    // XK_eabovedot\n    0x0118: 0x01ca,\n    // XK_Eogonek\n    0x0119: 0x01ea,\n    // XK_eogonek\n    0x011a: 0x01cc,\n    // XK_Ecaron\n    0x011b: 0x01ec,\n    // XK_ecaron\n    0x011c: 0x02d8,\n    // XK_Gcircumflex\n    0x011d: 0x02f8,\n    // XK_gcircumflex\n    0x011e: 0x02ab,\n    // XK_Gbreve\n    0x011f: 0x02bb,\n    // XK_gbreve\n    0x0120: 0x02d5,\n    // XK_Gabovedot\n    0x0121: 0x02f5,\n    // XK_gabovedot\n    0x0122: 0x03ab,\n    // XK_Gcedilla\n    0x0123: 0x03bb,\n    // XK_gcedilla\n    0x0124: 0x02a6,\n    // XK_Hcircumflex\n    0x0125: 0x02b6,\n    // XK_hcircumflex\n    0x0126: 0x02a1,\n    // XK_Hstroke\n    0x0127: 0x02b1,\n    // XK_hstroke\n    0x0128: 0x03a5,\n    // XK_Itilde\n    0x0129: 0x03b5,\n    // XK_itilde\n    0x012a: 0x03cf,\n    // XK_Imacron\n    0x012b: 0x03ef,\n    // XK_imacron\n    0x012e: 0x03c7,\n    // XK_Iogonek\n    0x012f: 0x03e7,\n    // XK_iogonek\n    0x0130: 0x02a9,\n    // XK_Iabovedot\n    0x0131: 0x02b9,\n    // XK_idotless\n    0x0134: 0x02ac,\n    // XK_Jcircumflex\n    0x0135: 0x02bc,\n    // XK_jcircumflex\n    0x0136: 0x03d3,\n    // XK_Kcedilla\n    0x0137: 0x03f3,\n    // XK_kcedilla\n    0x0138: 0x03a2,\n    // XK_kra\n    0x0139: 0x01c5,\n    // XK_Lacute\n    0x013a: 0x01e5,\n    // XK_lacute\n    0x013b: 0x03a6,\n    // XK_Lcedilla\n    0x013c: 0x03b6,\n    // XK_lcedilla\n    0x013d: 0x01a5,\n    // XK_Lcaron\n    0x013e: 0x01b5,\n    // XK_lcaron\n    0x0141: 0x01a3,\n    // XK_Lstroke\n    0x0142: 0x01b3,\n    // XK_lstroke\n    0x0143: 0x01d1,\n    // XK_Nacute\n    0x0144: 0x01f1,\n    // XK_nacute\n    0x0145: 0x03d1,\n    // XK_Ncedilla\n    0x0146: 0x03f1,\n    // XK_ncedilla\n    0x0147: 0x01d2,\n    // XK_Ncaron\n    0x0148: 0x01f2,\n    // XK_ncaron\n    0x014a: 0x03bd,\n    // XK_ENG\n    0x014b: 0x03bf,\n    // XK_eng\n    0x014c: 0x03d2,\n    // XK_Omacron\n    0x014d: 0x03f2,\n    // XK_omacron\n    0x0150: 0x01d5,\n    // XK_Odoubleacute\n    0x0151: 0x01f5,\n    // XK_odoubleacute\n    0x0152: 0x13bc,\n    // XK_OE\n    0x0153: 0x13bd,\n    // XK_oe\n    0x0154: 0x01c0,\n    // XK_Racute\n    0x0155: 0x01e0,\n    // XK_racute\n    0x0156: 0x03a3,\n    // XK_Rcedilla\n    0x0157: 0x03b3,\n    // XK_rcedilla\n    0x0158: 0x01d8,\n    // XK_Rcaron\n    0x0159: 0x01f8,\n    // XK_rcaron\n    0x015a: 0x01a6,\n    // XK_Sacute\n    0x015b: 0x01b6,\n    // XK_sacute\n    0x015c: 0x02de,\n    // XK_Scircumflex\n    0x015d: 0x02fe,\n    // XK_scircumflex\n    0x015e: 0x01aa,\n    // XK_Scedilla\n    0x015f: 0x01ba,\n    // XK_scedilla\n    0x0160: 0x01a9,\n    // XK_Scaron\n    0x0161: 0x01b9,\n    // XK_scaron\n    0x0162: 0x01de,\n    // XK_Tcedilla\n    0x0163: 0x01fe,\n    // XK_tcedilla\n    0x0164: 0x01ab,\n    // XK_Tcaron\n    0x0165: 0x01bb,\n    // XK_tcaron\n    0x0166: 0x03ac,\n    // XK_Tslash\n    0x0167: 0x03bc,\n    // XK_tslash\n    0x0168: 0x03dd,\n    // XK_Utilde\n    0x0169: 0x03fd,\n    // XK_utilde\n    0x016a: 0x03de,\n    // XK_Umacron\n    0x016b: 0x03fe,\n    // XK_umacron\n    0x016c: 0x02dd,\n    // XK_Ubreve\n    0x016d: 0x02fd,\n    // XK_ubreve\n    0x016e: 0x01d9,\n    // XK_Uring\n    0x016f: 0x01f9,\n    // XK_uring\n    0x0170: 0x01db,\n    // XK_Udoubleacute\n    0x0171: 0x01fb,\n    // XK_udoubleacute\n    0x0172: 0x03d9,\n    // XK_Uogonek\n    0x0173: 0x03f9,\n    // XK_uogonek\n    0x0178: 0x13be,\n    // XK_Ydiaeresis\n    0x0179: 0x01ac,\n    // XK_Zacute\n    0x017a: 0x01bc,\n    // XK_zacute\n    0x017b: 0x01af,\n    // XK_Zabovedot\n    0x017c: 0x01bf,\n    // XK_zabovedot\n    0x017d: 0x01ae,\n    // XK_Zcaron\n    0x017e: 0x01be,\n    // XK_zcaron\n    0x0192: 0x08f6,\n    // XK_function\n    0x01d2: 0x10001d1,\n    // XK_Ocaron\n    0x02c7: 0x01b7,\n    // XK_caron\n    0x02d8: 0x01a2,\n    // XK_breve\n    0x02d9: 0x01ff,\n    // XK_abovedot\n    0x02db: 0x01b2,\n    // XK_ogonek\n    0x02dd: 0x01bd,\n    // XK_doubleacute\n    0x0385: 0x07ae,\n    // XK_Greek_accentdieresis\n    0x0386: 0x07a1,\n    // XK_Greek_ALPHAaccent\n    0x0388: 0x07a2,\n    // XK_Greek_EPSILONaccent\n    0x0389: 0x07a3,\n    // XK_Greek_ETAaccent\n    0x038a: 0x07a4,\n    // XK_Greek_IOTAaccent\n    0x038c: 0x07a7,\n    // XK_Greek_OMICRONaccent\n    0x038e: 0x07a8,\n    // XK_Greek_UPSILONaccent\n    0x038f: 0x07ab,\n    // XK_Greek_OMEGAaccent\n    0x0390: 0x07b6,\n    // XK_Greek_iotaaccentdieresis\n    0x0391: 0x07c1,\n    // XK_Greek_ALPHA\n    0x0392: 0x07c2,\n    // XK_Greek_BETA\n    0x0393: 0x07c3,\n    // XK_Greek_GAMMA\n    0x0394: 0x07c4,\n    // XK_Greek_DELTA\n    0x0395: 0x07c5,\n    // XK_Greek_EPSILON\n    0x0396: 0x07c6,\n    // XK_Greek_ZETA\n    0x0397: 0x07c7,\n    // XK_Greek_ETA\n    0x0398: 0x07c8,\n    // XK_Greek_THETA\n    0x0399: 0x07c9,\n    // XK_Greek_IOTA\n    0x039a: 0x07ca,\n    // XK_Greek_KAPPA\n    0x039b: 0x07cb,\n    // XK_Greek_LAMDA\n    0x039c: 0x07cc,\n    // XK_Greek_MU\n    0x039d: 0x07cd,\n    // XK_Greek_NU\n    0x039e: 0x07ce,\n    // XK_Greek_XI\n    0x039f: 0x07cf,\n    // XK_Greek_OMICRON\n    0x03a0: 0x07d0,\n    // XK_Greek_PI\n    0x03a1: 0x07d1,\n    // XK_Greek_RHO\n    0x03a3: 0x07d2,\n    // XK_Greek_SIGMA\n    0x03a4: 0x07d4,\n    // XK_Greek_TAU\n    0x03a5: 0x07d5,\n    // XK_Greek_UPSILON\n    0x03a6: 0x07d6,\n    // XK_Greek_PHI\n    0x03a7: 0x07d7,\n    // XK_Greek_CHI\n    0x03a8: 0x07d8,\n    // XK_Greek_PSI\n    0x03a9: 0x07d9,\n    // XK_Greek_OMEGA\n    0x03aa: 0x07a5,\n    // XK_Greek_IOTAdieresis\n    0x03ab: 0x07a9,\n    // XK_Greek_UPSILONdieresis\n    0x03ac: 0x07b1,\n    // XK_Greek_alphaaccent\n    0x03ad: 0x07b2,\n    // XK_Greek_epsilonaccent\n    0x03ae: 0x07b3,\n    // XK_Greek_etaaccent\n    0x03af: 0x07b4,\n    // XK_Greek_iotaaccent\n    0x03b0: 0x07ba,\n    // XK_Greek_upsilonaccentdieresis\n    0x03b1: 0x07e1,\n    // XK_Greek_alpha\n    0x03b2: 0x07e2,\n    // XK_Greek_beta\n    0x03b3: 0x07e3,\n    // XK_Greek_gamma\n    0x03b4: 0x07e4,\n    // XK_Greek_delta\n    0x03b5: 0x07e5,\n    // XK_Greek_epsilon\n    0x03b6: 0x07e6,\n    // XK_Greek_zeta\n    0x03b7: 0x07e7,\n    // XK_Greek_eta\n    0x03b8: 0x07e8,\n    // XK_Greek_theta\n    0x03b9: 0x07e9,\n    // XK_Greek_iota\n    0x03ba: 0x07ea,\n    // XK_Greek_kappa\n    0x03bb: 0x07eb,\n    // XK_Greek_lamda\n    0x03bc: 0x07ec,\n    // XK_Greek_mu\n    0x03bd: 0x07ed,\n    // XK_Greek_nu\n    0x03be: 0x07ee,\n    // XK_Greek_xi\n    0x03bf: 0x07ef,\n    // XK_Greek_omicron\n    0x03c0: 0x07f0,\n    // XK_Greek_pi\n    0x03c1: 0x07f1,\n    // XK_Greek_rho\n    0x03c2: 0x07f3,\n    // XK_Greek_finalsmallsigma\n    0x03c3: 0x07f2,\n    // XK_Greek_sigma\n    0x03c4: 0x07f4,\n    // XK_Greek_tau\n    0x03c5: 0x07f5,\n    // XK_Greek_upsilon\n    0x03c6: 0x07f6,\n    // XK_Greek_phi\n    0x03c7: 0x07f7,\n    // XK_Greek_chi\n    0x03c8: 0x07f8,\n    // XK_Greek_psi\n    0x03c9: 0x07f9,\n    // XK_Greek_omega\n    0x03ca: 0x07b5,\n    // XK_Greek_iotadieresis\n    0x03cb: 0x07b9,\n    // XK_Greek_upsilondieresis\n    0x03cc: 0x07b7,\n    // XK_Greek_omicronaccent\n    0x03cd: 0x07b8,\n    // XK_Greek_upsilonaccent\n    0x03ce: 0x07bb,\n    // XK_Greek_omegaaccent\n    0x0401: 0x06b3,\n    // XK_Cyrillic_IO\n    0x0402: 0x06b1,\n    // XK_Serbian_DJE\n    0x0403: 0x06b2,\n    // XK_Macedonia_GJE\n    0x0404: 0x06b4,\n    // XK_Ukrainian_IE\n    0x0405: 0x06b5,\n    // XK_Macedonia_DSE\n    0x0406: 0x06b6,\n    // XK_Ukrainian_I\n    0x0407: 0x06b7,\n    // XK_Ukrainian_YI\n    0x0408: 0x06b8,\n    // XK_Cyrillic_JE\n    0x0409: 0x06b9,\n    // XK_Cyrillic_LJE\n    0x040a: 0x06ba,\n    // XK_Cyrillic_NJE\n    0x040b: 0x06bb,\n    // XK_Serbian_TSHE\n    0x040c: 0x06bc,\n    // XK_Macedonia_KJE\n    0x040e: 0x06be,\n    // XK_Byelorussian_SHORTU\n    0x040f: 0x06bf,\n    // XK_Cyrillic_DZHE\n    0x0410: 0x06e1,\n    // XK_Cyrillic_A\n    0x0411: 0x06e2,\n    // XK_Cyrillic_BE\n    0x0412: 0x06f7,\n    // XK_Cyrillic_VE\n    0x0413: 0x06e7,\n    // XK_Cyrillic_GHE\n    0x0414: 0x06e4,\n    // XK_Cyrillic_DE\n    0x0415: 0x06e5,\n    // XK_Cyrillic_IE\n    0x0416: 0x06f6,\n    // XK_Cyrillic_ZHE\n    0x0417: 0x06fa,\n    // XK_Cyrillic_ZE\n    0x0418: 0x06e9,\n    // XK_Cyrillic_I\n    0x0419: 0x06ea,\n    // XK_Cyrillic_SHORTI\n    0x041a: 0x06eb,\n    // XK_Cyrillic_KA\n    0x041b: 0x06ec,\n    // XK_Cyrillic_EL\n    0x041c: 0x06ed,\n    // XK_Cyrillic_EM\n    0x041d: 0x06ee,\n    // XK_Cyrillic_EN\n    0x041e: 0x06ef,\n    // XK_Cyrillic_O\n    0x041f: 0x06f0,\n    // XK_Cyrillic_PE\n    0x0420: 0x06f2,\n    // XK_Cyrillic_ER\n    0x0421: 0x06f3,\n    // XK_Cyrillic_ES\n    0x0422: 0x06f4,\n    // XK_Cyrillic_TE\n    0x0423: 0x06f5,\n    // XK_Cyrillic_U\n    0x0424: 0x06e6,\n    // XK_Cyrillic_EF\n    0x0425: 0x06e8,\n    // XK_Cyrillic_HA\n    0x0426: 0x06e3,\n    // XK_Cyrillic_TSE\n    0x0427: 0x06fe,\n    // XK_Cyrillic_CHE\n    0x0428: 0x06fb,\n    // XK_Cyrillic_SHA\n    0x0429: 0x06fd,\n    // XK_Cyrillic_SHCHA\n    0x042a: 0x06ff,\n    // XK_Cyrillic_HARDSIGN\n    0x042b: 0x06f9,\n    // XK_Cyrillic_YERU\n    0x042c: 0x06f8,\n    // XK_Cyrillic_SOFTSIGN\n    0x042d: 0x06fc,\n    // XK_Cyrillic_E\n    0x042e: 0x06e0,\n    // XK_Cyrillic_YU\n    0x042f: 0x06f1,\n    // XK_Cyrillic_YA\n    0x0430: 0x06c1,\n    // XK_Cyrillic_a\n    0x0431: 0x06c2,\n    // XK_Cyrillic_be\n    0x0432: 0x06d7,\n    // XK_Cyrillic_ve\n    0x0433: 0x06c7,\n    // XK_Cyrillic_ghe\n    0x0434: 0x06c4,\n    // XK_Cyrillic_de\n    0x0435: 0x06c5,\n    // XK_Cyrillic_ie\n    0x0436: 0x06d6,\n    // XK_Cyrillic_zhe\n    0x0437: 0x06da,\n    // XK_Cyrillic_ze\n    0x0438: 0x06c9,\n    // XK_Cyrillic_i\n    0x0439: 0x06ca,\n    // XK_Cyrillic_shorti\n    0x043a: 0x06cb,\n    // XK_Cyrillic_ka\n    0x043b: 0x06cc,\n    // XK_Cyrillic_el\n    0x043c: 0x06cd,\n    // XK_Cyrillic_em\n    0x043d: 0x06ce,\n    // XK_Cyrillic_en\n    0x043e: 0x06cf,\n    // XK_Cyrillic_o\n    0x043f: 0x06d0,\n    // XK_Cyrillic_pe\n    0x0440: 0x06d2,\n    // XK_Cyrillic_er\n    0x0441: 0x06d3,\n    // XK_Cyrillic_es\n    0x0442: 0x06d4,\n    // XK_Cyrillic_te\n    0x0443: 0x06d5,\n    // XK_Cyrillic_u\n    0x0444: 0x06c6,\n    // XK_Cyrillic_ef\n    0x0445: 0x06c8,\n    // XK_Cyrillic_ha\n    0x0446: 0x06c3,\n    // XK_Cyrillic_tse\n    0x0447: 0x06de,\n    // XK_Cyrillic_che\n    0x0448: 0x06db,\n    // XK_Cyrillic_sha\n    0x0449: 0x06dd,\n    // XK_Cyrillic_shcha\n    0x044a: 0x06df,\n    // XK_Cyrillic_hardsign\n    0x044b: 0x06d9,\n    // XK_Cyrillic_yeru\n    0x044c: 0x06d8,\n    // XK_Cyrillic_softsign\n    0x044d: 0x06dc,\n    // XK_Cyrillic_e\n    0x044e: 0x06c0,\n    // XK_Cyrillic_yu\n    0x044f: 0x06d1,\n    // XK_Cyrillic_ya\n    0x0451: 0x06a3,\n    // XK_Cyrillic_io\n    0x0452: 0x06a1,\n    // XK_Serbian_dje\n    0x0453: 0x06a2,\n    // XK_Macedonia_gje\n    0x0454: 0x06a4,\n    // XK_Ukrainian_ie\n    0x0455: 0x06a5,\n    // XK_Macedonia_dse\n    0x0456: 0x06a6,\n    // XK_Ukrainian_i\n    0x0457: 0x06a7,\n    // XK_Ukrainian_yi\n    0x0458: 0x06a8,\n    // XK_Cyrillic_je\n    0x0459: 0x06a9,\n    // XK_Cyrillic_lje\n    0x045a: 0x06aa,\n    // XK_Cyrillic_nje\n    0x045b: 0x06ab,\n    // XK_Serbian_tshe\n    0x045c: 0x06ac,\n    // XK_Macedonia_kje\n    0x045e: 0x06ae,\n    // XK_Byelorussian_shortu\n    0x045f: 0x06af,\n    // XK_Cyrillic_dzhe\n    0x0490: 0x06bd,\n    // XK_Ukrainian_GHE_WITH_UPTURN\n    0x0491: 0x06ad,\n    // XK_Ukrainian_ghe_with_upturn\n    0x05d0: 0x0ce0,\n    // XK_hebrew_aleph\n    0x05d1: 0x0ce1,\n    // XK_hebrew_bet\n    0x05d2: 0x0ce2,\n    // XK_hebrew_gimel\n    0x05d3: 0x0ce3,\n    // XK_hebrew_dalet\n    0x05d4: 0x0ce4,\n    // XK_hebrew_he\n    0x05d5: 0x0ce5,\n    // XK_hebrew_waw\n    0x05d6: 0x0ce6,\n    // XK_hebrew_zain\n    0x05d7: 0x0ce7,\n    // XK_hebrew_chet\n    0x05d8: 0x0ce8,\n    // XK_hebrew_tet\n    0x05d9: 0x0ce9,\n    // XK_hebrew_yod\n    0x05da: 0x0cea,\n    // XK_hebrew_finalkaph\n    0x05db: 0x0ceb,\n    // XK_hebrew_kaph\n    0x05dc: 0x0cec,\n    // XK_hebrew_lamed\n    0x05dd: 0x0ced,\n    // XK_hebrew_finalmem\n    0x05de: 0x0cee,\n    // XK_hebrew_mem\n    0x05df: 0x0cef,\n    // XK_hebrew_finalnun\n    0x05e0: 0x0cf0,\n    // XK_hebrew_nun\n    0x05e1: 0x0cf1,\n    // XK_hebrew_samech\n    0x05e2: 0x0cf2,\n    // XK_hebrew_ayin\n    0x05e3: 0x0cf3,\n    // XK_hebrew_finalpe\n    0x05e4: 0x0cf4,\n    // XK_hebrew_pe\n    0x05e5: 0x0cf5,\n    // XK_hebrew_finalzade\n    0x05e6: 0x0cf6,\n    // XK_hebrew_zade\n    0x05e7: 0x0cf7,\n    // XK_hebrew_qoph\n    0x05e8: 0x0cf8,\n    // XK_hebrew_resh\n    0x05e9: 0x0cf9,\n    // XK_hebrew_shin\n    0x05ea: 0x0cfa,\n    // XK_hebrew_taw\n    0x060c: 0x05ac,\n    // XK_Arabic_comma\n    0x061b: 0x05bb,\n    // XK_Arabic_semicolon\n    0x061f: 0x05bf,\n    // XK_Arabic_question_mark\n    0x0621: 0x05c1,\n    // XK_Arabic_hamza\n    0x0622: 0x05c2,\n    // XK_Arabic_maddaonalef\n    0x0623: 0x05c3,\n    // XK_Arabic_hamzaonalef\n    0x0624: 0x05c4,\n    // XK_Arabic_hamzaonwaw\n    0x0625: 0x05c5,\n    // XK_Arabic_hamzaunderalef\n    0x0626: 0x05c6,\n    // XK_Arabic_hamzaonyeh\n    0x0627: 0x05c7,\n    // XK_Arabic_alef\n    0x0628: 0x05c8,\n    // XK_Arabic_beh\n    0x0629: 0x05c9,\n    // XK_Arabic_tehmarbuta\n    0x062a: 0x05ca,\n    // XK_Arabic_teh\n    0x062b: 0x05cb,\n    // XK_Arabic_theh\n    0x062c: 0x05cc,\n    // XK_Arabic_jeem\n    0x062d: 0x05cd,\n    // XK_Arabic_hah\n    0x062e: 0x05ce,\n    // XK_Arabic_khah\n    0x062f: 0x05cf,\n    // XK_Arabic_dal\n    0x0630: 0x05d0,\n    // XK_Arabic_thal\n    0x0631: 0x05d1,\n    // XK_Arabic_ra\n    0x0632: 0x05d2,\n    // XK_Arabic_zain\n    0x0633: 0x05d3,\n    // XK_Arabic_seen\n    0x0634: 0x05d4,\n    // XK_Arabic_sheen\n    0x0635: 0x05d5,\n    // XK_Arabic_sad\n    0x0636: 0x05d6,\n    // XK_Arabic_dad\n    0x0637: 0x05d7,\n    // XK_Arabic_tah\n    0x0638: 0x05d8,\n    // XK_Arabic_zah\n    0x0639: 0x05d9,\n    // XK_Arabic_ain\n    0x063a: 0x05da,\n    // XK_Arabic_ghain\n    0x0640: 0x05e0,\n    // XK_Arabic_tatweel\n    0x0641: 0x05e1,\n    // XK_Arabic_feh\n    0x0642: 0x05e2,\n    // XK_Arabic_qaf\n    0x0643: 0x05e3,\n    // XK_Arabic_kaf\n    0x0644: 0x05e4,\n    // XK_Arabic_lam\n    0x0645: 0x05e5,\n    // XK_Arabic_meem\n    0x0646: 0x05e6,\n    // XK_Arabic_noon\n    0x0647: 0x05e7,\n    // XK_Arabic_ha\n    0x0648: 0x05e8,\n    // XK_Arabic_waw\n    0x0649: 0x05e9,\n    // XK_Arabic_alefmaksura\n    0x064a: 0x05ea,\n    // XK_Arabic_yeh\n    0x064b: 0x05eb,\n    // XK_Arabic_fathatan\n    0x064c: 0x05ec,\n    // XK_Arabic_dammatan\n    0x064d: 0x05ed,\n    // XK_Arabic_kasratan\n    0x064e: 0x05ee,\n    // XK_Arabic_fatha\n    0x064f: 0x05ef,\n    // XK_Arabic_damma\n    0x0650: 0x05f0,\n    // XK_Arabic_kasra\n    0x0651: 0x05f1,\n    // XK_Arabic_shadda\n    0x0652: 0x05f2,\n    // XK_Arabic_sukun\n    0x0e01: 0x0da1,\n    // XK_Thai_kokai\n    0x0e02: 0x0da2,\n    // XK_Thai_khokhai\n    0x0e03: 0x0da3,\n    // XK_Thai_khokhuat\n    0x0e04: 0x0da4,\n    // XK_Thai_khokhwai\n    0x0e05: 0x0da5,\n    // XK_Thai_khokhon\n    0x0e06: 0x0da6,\n    // XK_Thai_khorakhang\n    0x0e07: 0x0da7,\n    // XK_Thai_ngongu\n    0x0e08: 0x0da8,\n    // XK_Thai_chochan\n    0x0e09: 0x0da9,\n    // XK_Thai_choching\n    0x0e0a: 0x0daa,\n    // XK_Thai_chochang\n    0x0e0b: 0x0dab,\n    // XK_Thai_soso\n    0x0e0c: 0x0dac,\n    // XK_Thai_chochoe\n    0x0e0d: 0x0dad,\n    // XK_Thai_yoying\n    0x0e0e: 0x0dae,\n    // XK_Thai_dochada\n    0x0e0f: 0x0daf,\n    // XK_Thai_topatak\n    0x0e10: 0x0db0,\n    // XK_Thai_thothan\n    0x0e11: 0x0db1,\n    // XK_Thai_thonangmontho\n    0x0e12: 0x0db2,\n    // XK_Thai_thophuthao\n    0x0e13: 0x0db3,\n    // XK_Thai_nonen\n    0x0e14: 0x0db4,\n    // XK_Thai_dodek\n    0x0e15: 0x0db5,\n    // XK_Thai_totao\n    0x0e16: 0x0db6,\n    // XK_Thai_thothung\n    0x0e17: 0x0db7,\n    // XK_Thai_thothahan\n    0x0e18: 0x0db8,\n    // XK_Thai_thothong\n    0x0e19: 0x0db9,\n    // XK_Thai_nonu\n    0x0e1a: 0x0dba,\n    // XK_Thai_bobaimai\n    0x0e1b: 0x0dbb,\n    // XK_Thai_popla\n    0x0e1c: 0x0dbc,\n    // XK_Thai_phophung\n    0x0e1d: 0x0dbd,\n    // XK_Thai_fofa\n    0x0e1e: 0x0dbe,\n    // XK_Thai_phophan\n    0x0e1f: 0x0dbf,\n    // XK_Thai_fofan\n    0x0e20: 0x0dc0,\n    // XK_Thai_phosamphao\n    0x0e21: 0x0dc1,\n    // XK_Thai_moma\n    0x0e22: 0x0dc2,\n    // XK_Thai_yoyak\n    0x0e23: 0x0dc3,\n    // XK_Thai_rorua\n    0x0e24: 0x0dc4,\n    // XK_Thai_ru\n    0x0e25: 0x0dc5,\n    // XK_Thai_loling\n    0x0e26: 0x0dc6,\n    // XK_Thai_lu\n    0x0e27: 0x0dc7,\n    // XK_Thai_wowaen\n    0x0e28: 0x0dc8,\n    // XK_Thai_sosala\n    0x0e29: 0x0dc9,\n    // XK_Thai_sorusi\n    0x0e2a: 0x0dca,\n    // XK_Thai_sosua\n    0x0e2b: 0x0dcb,\n    // XK_Thai_hohip\n    0x0e2c: 0x0dcc,\n    // XK_Thai_lochula\n    0x0e2d: 0x0dcd,\n    // XK_Thai_oang\n    0x0e2e: 0x0dce,\n    // XK_Thai_honokhuk\n    0x0e2f: 0x0dcf,\n    // XK_Thai_paiyannoi\n    0x0e30: 0x0dd0,\n    // XK_Thai_saraa\n    0x0e31: 0x0dd1,\n    // XK_Thai_maihanakat\n    0x0e32: 0x0dd2,\n    // XK_Thai_saraaa\n    0x0e33: 0x0dd3,\n    // XK_Thai_saraam\n    0x0e34: 0x0dd4,\n    // XK_Thai_sarai\n    0x0e35: 0x0dd5,\n    // XK_Thai_saraii\n    0x0e36: 0x0dd6,\n    // XK_Thai_saraue\n    0x0e37: 0x0dd7,\n    // XK_Thai_sarauee\n    0x0e38: 0x0dd8,\n    // XK_Thai_sarau\n    0x0e39: 0x0dd9,\n    // XK_Thai_sarauu\n    0x0e3a: 0x0dda,\n    // XK_Thai_phinthu\n    0x0e3f: 0x0ddf,\n    // XK_Thai_baht\n    0x0e40: 0x0de0,\n    // XK_Thai_sarae\n    0x0e41: 0x0de1,\n    // XK_Thai_saraae\n    0x0e42: 0x0de2,\n    // XK_Thai_sarao\n    0x0e43: 0x0de3,\n    // XK_Thai_saraaimaimuan\n    0x0e44: 0x0de4,\n    // XK_Thai_saraaimaimalai\n    0x0e45: 0x0de5,\n    // XK_Thai_lakkhangyao\n    0x0e46: 0x0de6,\n    // XK_Thai_maiyamok\n    0x0e47: 0x0de7,\n    // XK_Thai_maitaikhu\n    0x0e48: 0x0de8,\n    // XK_Thai_maiek\n    0x0e49: 0x0de9,\n    // XK_Thai_maitho\n    0x0e4a: 0x0dea,\n    // XK_Thai_maitri\n    0x0e4b: 0x0deb,\n    // XK_Thai_maichattawa\n    0x0e4c: 0x0dec,\n    // XK_Thai_thanthakhat\n    0x0e4d: 0x0ded,\n    // XK_Thai_nikhahit\n    0x0e50: 0x0df0,\n    // XK_Thai_leksun\n    0x0e51: 0x0df1,\n    // XK_Thai_leknung\n    0x0e52: 0x0df2,\n    // XK_Thai_leksong\n    0x0e53: 0x0df3,\n    // XK_Thai_leksam\n    0x0e54: 0x0df4,\n    // XK_Thai_leksi\n    0x0e55: 0x0df5,\n    // XK_Thai_lekha\n    0x0e56: 0x0df6,\n    // XK_Thai_lekhok\n    0x0e57: 0x0df7,\n    // XK_Thai_lekchet\n    0x0e58: 0x0df8,\n    // XK_Thai_lekpaet\n    0x0e59: 0x0df9,\n    // XK_Thai_lekkao\n    0x2002: 0x0aa2,\n    // XK_enspace\n    0x2003: 0x0aa1,\n    // XK_emspace\n    0x2004: 0x0aa3,\n    // XK_em3space\n    0x2005: 0x0aa4,\n    // XK_em4space\n    0x2007: 0x0aa5,\n    // XK_digitspace\n    0x2008: 0x0aa6,\n    // XK_punctspace\n    0x2009: 0x0aa7,\n    // XK_thinspace\n    0x200a: 0x0aa8,\n    // XK_hairspace\n    0x2012: 0x0abb,\n    // XK_figdash\n    0x2013: 0x0aaa,\n    // XK_endash\n    0x2014: 0x0aa9,\n    // XK_emdash\n    0x2015: 0x07af,\n    // XK_Greek_horizbar\n    0x2017: 0x0cdf,\n    // XK_hebrew_doublelowline\n    0x2018: 0x0ad0,\n    // XK_leftsinglequotemark\n    0x2019: 0x0ad1,\n    // XK_rightsinglequotemark\n    0x201a: 0x0afd,\n    // XK_singlelowquotemark\n    0x201c: 0x0ad2,\n    // XK_leftdoublequotemark\n    0x201d: 0x0ad3,\n    // XK_rightdoublequotemark\n    0x201e: 0x0afe,\n    // XK_doublelowquotemark\n    0x2020: 0x0af1,\n    // XK_dagger\n    0x2021: 0x0af2,\n    // XK_doubledagger\n    0x2022: 0x0ae6,\n    // XK_enfilledcircbullet\n    0x2025: 0x0aaf,\n    // XK_doubbaselinedot\n    0x2026: 0x0aae,\n    // XK_ellipsis\n    0x2030: 0x0ad5,\n    // XK_permille\n    0x2032: 0x0ad6,\n    // XK_minutes\n    0x2033: 0x0ad7,\n    // XK_seconds\n    0x2038: 0x0afc,\n    // XK_caret\n    0x203e: 0x047e,\n    // XK_overline\n    0x20a9: 0x0eff,\n    // XK_Korean_Won\n    0x20ac: 0x20ac,\n    // XK_EuroSign\n    0x2105: 0x0ab8,\n    // XK_careof\n    0x2116: 0x06b0,\n    // XK_numerosign\n    0x2117: 0x0afb,\n    // XK_phonographcopyright\n    0x211e: 0x0ad4,\n    // XK_prescription\n    0x2122: 0x0ac9,\n    // XK_trademark\n    0x2153: 0x0ab0,\n    // XK_onethird\n    0x2154: 0x0ab1,\n    // XK_twothirds\n    0x2155: 0x0ab2,\n    // XK_onefifth\n    0x2156: 0x0ab3,\n    // XK_twofifths\n    0x2157: 0x0ab4,\n    // XK_threefifths\n    0x2158: 0x0ab5,\n    // XK_fourfifths\n    0x2159: 0x0ab6,\n    // XK_onesixth\n    0x215a: 0x0ab7,\n    // XK_fivesixths\n    0x215b: 0x0ac3,\n    // XK_oneeighth\n    0x215c: 0x0ac4,\n    // XK_threeeighths\n    0x215d: 0x0ac5,\n    // XK_fiveeighths\n    0x215e: 0x0ac6,\n    // XK_seveneighths\n    0x2190: 0x08fb,\n    // XK_leftarrow\n    0x2191: 0x08fc,\n    // XK_uparrow\n    0x2192: 0x08fd,\n    // XK_rightarrow\n    0x2193: 0x08fe,\n    // XK_downarrow\n    0x21d2: 0x08ce,\n    // XK_implies\n    0x21d4: 0x08cd,\n    // XK_ifonlyif\n    0x2202: 0x08ef,\n    // XK_partialderivative\n    0x2207: 0x08c5,\n    // XK_nabla\n    0x2218: 0x0bca,\n    // XK_jot\n    0x221a: 0x08d6,\n    // XK_radical\n    0x221d: 0x08c1,\n    // XK_variation\n    0x221e: 0x08c2,\n    // XK_infinity\n    0x2227: 0x08de,\n    // XK_logicaland\n    0x2228: 0x08df,\n    // XK_logicalor\n    0x2229: 0x08dc,\n    // XK_intersection\n    0x222a: 0x08dd,\n    // XK_union\n    0x222b: 0x08bf,\n    // XK_integral\n    0x2234: 0x08c0,\n    // XK_therefore\n    0x223c: 0x08c8,\n    // XK_approximate\n    0x2243: 0x08c9,\n    // XK_similarequal\n    0x2245: 0x1002248,\n    // XK_approxeq\n    0x2260: 0x08bd,\n    // XK_notequal\n    0x2261: 0x08cf,\n    // XK_identical\n    0x2264: 0x08bc,\n    // XK_lessthanequal\n    0x2265: 0x08be,\n    // XK_greaterthanequal\n    0x2282: 0x08da,\n    // XK_includedin\n    0x2283: 0x08db,\n    // XK_includes\n    0x22a2: 0x0bfc,\n    // XK_righttack\n    0x22a3: 0x0bdc,\n    // XK_lefttack\n    0x22a4: 0x0bc2,\n    // XK_downtack\n    0x22a5: 0x0bce,\n    // XK_uptack\n    0x2308: 0x0bd3,\n    // XK_upstile\n    0x230a: 0x0bc4,\n    // XK_downstile\n    0x2315: 0x0afa,\n    // XK_telephonerecorder\n    0x2320: 0x08a4,\n    // XK_topintegral\n    0x2321: 0x08a5,\n    // XK_botintegral\n    0x2395: 0x0bcc,\n    // XK_quad\n    0x239b: 0x08ab,\n    // XK_topleftparens\n    0x239d: 0x08ac,\n    // XK_botleftparens\n    0x239e: 0x08ad,\n    // XK_toprightparens\n    0x23a0: 0x08ae,\n    // XK_botrightparens\n    0x23a1: 0x08a7,\n    // XK_topleftsqbracket\n    0x23a3: 0x08a8,\n    // XK_botleftsqbracket\n    0x23a4: 0x08a9,\n    // XK_toprightsqbracket\n    0x23a6: 0x08aa,\n    // XK_botrightsqbracket\n    0x23a8: 0x08af,\n    // XK_leftmiddlecurlybrace\n    0x23ac: 0x08b0,\n    // XK_rightmiddlecurlybrace\n    0x23b7: 0x08a1,\n    // XK_leftradical\n    0x23ba: 0x09ef,\n    // XK_horizlinescan1\n    0x23bb: 0x09f0,\n    // XK_horizlinescan3\n    0x23bc: 0x09f2,\n    // XK_horizlinescan7\n    0x23bd: 0x09f3,\n    // XK_horizlinescan9\n    0x2409: 0x09e2,\n    // XK_ht\n    0x240a: 0x09e5,\n    // XK_lf\n    0x240b: 0x09e9,\n    // XK_vt\n    0x240c: 0x09e3,\n    // XK_ff\n    0x240d: 0x09e4,\n    // XK_cr\n    0x2423: 0x0aac,\n    // XK_signifblank\n    0x2424: 0x09e8,\n    // XK_nl\n    0x2500: 0x08a3,\n    // XK_horizconnector\n    0x2502: 0x08a6,\n    // XK_vertconnector\n    0x250c: 0x08a2,\n    // XK_topleftradical\n    0x2510: 0x09eb,\n    // XK_uprightcorner\n    0x2514: 0x09ed,\n    // XK_lowleftcorner\n    0x2518: 0x09ea,\n    // XK_lowrightcorner\n    0x251c: 0x09f4,\n    // XK_leftt\n    0x2524: 0x09f5,\n    // XK_rightt\n    0x252c: 0x09f7,\n    // XK_topt\n    0x2534: 0x09f6,\n    // XK_bott\n    0x253c: 0x09ee,\n    // XK_crossinglines\n    0x2592: 0x09e1,\n    // XK_checkerboard\n    0x25aa: 0x0ae7,\n    // XK_enfilledsqbullet\n    0x25ab: 0x0ae1,\n    // XK_enopensquarebullet\n    0x25ac: 0x0adb,\n    // XK_filledrectbullet\n    0x25ad: 0x0ae2,\n    // XK_openrectbullet\n    0x25ae: 0x0adf,\n    // XK_emfilledrect\n    0x25af: 0x0acf,\n    // XK_emopenrectangle\n    0x25b2: 0x0ae8,\n    // XK_filledtribulletup\n    0x25b3: 0x0ae3,\n    // XK_opentribulletup\n    0x25b6: 0x0add,\n    // XK_filledrighttribullet\n    0x25b7: 0x0acd,\n    // XK_rightopentriangle\n    0x25bc: 0x0ae9,\n    // XK_filledtribulletdown\n    0x25bd: 0x0ae4,\n    // XK_opentribulletdown\n    0x25c0: 0x0adc,\n    // XK_filledlefttribullet\n    0x25c1: 0x0acc,\n    // XK_leftopentriangle\n    0x25c6: 0x09e0,\n    // XK_soliddiamond\n    0x25cb: 0x0ace,\n    // XK_emopencircle\n    0x25cf: 0x0ade,\n    // XK_emfilledcircle\n    0x25e6: 0x0ae0,\n    // XK_enopencircbullet\n    0x2606: 0x0ae5,\n    // XK_openstar\n    0x260e: 0x0af9,\n    // XK_telephone\n    0x2613: 0x0aca,\n    // XK_signaturemark\n    0x261c: 0x0aea,\n    // XK_leftpointer\n    0x261e: 0x0aeb,\n    // XK_rightpointer\n    0x2640: 0x0af8,\n    // XK_femalesymbol\n    0x2642: 0x0af7,\n    // XK_malesymbol\n    0x2663: 0x0aec,\n    // XK_club\n    0x2665: 0x0aee,\n    // XK_heart\n    0x2666: 0x0aed,\n    // XK_diamond\n    0x266d: 0x0af6,\n    // XK_musicalflat\n    0x266f: 0x0af5,\n    // XK_musicalsharp\n    0x2713: 0x0af3,\n    // XK_checkmark\n    0x2717: 0x0af4,\n    // XK_ballotcross\n    0x271d: 0x0ad9,\n    // XK_latincross\n    0x2720: 0x0af0,\n    // XK_maltesecross\n    0x27e8: 0x0abc,\n    // XK_leftanglebracket\n    0x27e9: 0x0abe,\n    // XK_rightanglebracket\n    0x3001: 0x04a4,\n    // XK_kana_comma\n    0x3002: 0x04a1,\n    // XK_kana_fullstop\n    0x300c: 0x04a2,\n    // XK_kana_openingbracket\n    0x300d: 0x04a3,\n    // XK_kana_closingbracket\n    0x309b: 0x04de,\n    // XK_voicedsound\n    0x309c: 0x04df,\n    // XK_semivoicedsound\n    0x30a1: 0x04a7,\n    // XK_kana_a\n    0x30a2: 0x04b1,\n    // XK_kana_A\n    0x30a3: 0x04a8,\n    // XK_kana_i\n    0x30a4: 0x04b2,\n    // XK_kana_I\n    0x30a5: 0x04a9,\n    // XK_kana_u\n    0x30a6: 0x04b3,\n    // XK_kana_U\n    0x30a7: 0x04aa,\n    // XK_kana_e\n    0x30a8: 0x04b4,\n    // XK_kana_E\n    0x30a9: 0x04ab,\n    // XK_kana_o\n    0x30aa: 0x04b5,\n    // XK_kana_O\n    0x30ab: 0x04b6,\n    // XK_kana_KA\n    0x30ad: 0x04b7,\n    // XK_kana_KI\n    0x30af: 0x04b8,\n    // XK_kana_KU\n    0x30b1: 0x04b9,\n    // XK_kana_KE\n    0x30b3: 0x04ba,\n    // XK_kana_KO\n    0x30b5: 0x04bb,\n    // XK_kana_SA\n    0x30b7: 0x04bc,\n    // XK_kana_SHI\n    0x30b9: 0x04bd,\n    // XK_kana_SU\n    0x30bb: 0x04be,\n    // XK_kana_SE\n    0x30bd: 0x04bf,\n    // XK_kana_SO\n    0x30bf: 0x04c0,\n    // XK_kana_TA\n    0x30c1: 0x04c1,\n    // XK_kana_CHI\n    0x30c3: 0x04af,\n    // XK_kana_tsu\n    0x30c4: 0x04c2,\n    // XK_kana_TSU\n    0x30c6: 0x04c3,\n    // XK_kana_TE\n    0x30c8: 0x04c4,\n    // XK_kana_TO\n    0x30ca: 0x04c5,\n    // XK_kana_NA\n    0x30cb: 0x04c6,\n    // XK_kana_NI\n    0x30cc: 0x04c7,\n    // XK_kana_NU\n    0x30cd: 0x04c8,\n    // XK_kana_NE\n    0x30ce: 0x04c9,\n    // XK_kana_NO\n    0x30cf: 0x04ca,\n    // XK_kana_HA\n    0x30d2: 0x04cb,\n    // XK_kana_HI\n    0x30d5: 0x04cc,\n    // XK_kana_FU\n    0x30d8: 0x04cd,\n    // XK_kana_HE\n    0x30db: 0x04ce,\n    // XK_kana_HO\n    0x30de: 0x04cf,\n    // XK_kana_MA\n    0x30df: 0x04d0,\n    // XK_kana_MI\n    0x30e0: 0x04d1,\n    // XK_kana_MU\n    0x30e1: 0x04d2,\n    // XK_kana_ME\n    0x30e2: 0x04d3,\n    // XK_kana_MO\n    0x30e3: 0x04ac,\n    // XK_kana_ya\n    0x30e4: 0x04d4,\n    // XK_kana_YA\n    0x30e5: 0x04ad,\n    // XK_kana_yu\n    0x30e6: 0x04d5,\n    // XK_kana_YU\n    0x30e7: 0x04ae,\n    // XK_kana_yo\n    0x30e8: 0x04d6,\n    // XK_kana_YO\n    0x30e9: 0x04d7,\n    // XK_kana_RA\n    0x30ea: 0x04d8,\n    // XK_kana_RI\n    0x30eb: 0x04d9,\n    // XK_kana_RU\n    0x30ec: 0x04da,\n    // XK_kana_RE\n    0x30ed: 0x04db,\n    // XK_kana_RO\n    0x30ef: 0x04dc,\n    // XK_kana_WA\n    0x30f2: 0x04a6,\n    // XK_kana_WO\n    0x30f3: 0x04dd,\n    // XK_kana_N\n    0x30fb: 0x04a5,\n    // XK_kana_conjunctive\n    0x30fc: 0x04b0 // XK_prolongedsound\n  };\n  var _default = _exports.default = {\n    lookup(u) {\n      // Latin-1 is one-to-one mapping\n      if (u >= 0x20 && u <= 0xff) {\n        return u;\n      }\n\n      // Lookup table (fairly random)\n      const keysym = codepoints[u];\n      if (keysym !== undefined) {\n        return keysym;\n      }\n\n      // General mapping as final fallback\n      return 0x01000000 | u;\n    }\n  };\n});","define(\"novnc-sockjs/core/input/util\", [\"exports\", \"novnc-sockjs/core/input/keysym\", \"novnc-sockjs/core/input/keysymdef\", \"novnc-sockjs/core/input/vkeys\", \"novnc-sockjs/core/input/fixedkeys\", \"novnc-sockjs/core/input/domkeytable\", \"novnc-sockjs/core/util/browser\"], function (_exports, _keysym, _keysymdef, _vkeys, _fixedkeys, _domkeytable, browser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.getKey = getKey;\n  _exports.getKeycode = getKeycode;\n  _exports.getKeysym = getKeysym;\n  // Get 'KeyboardEvent.code', handling legacy browsers\n  function getKeycode(evt) {\n    // Are we getting proper key identifiers?\n    // (unfortunately Firefox and Chrome are crappy here and gives\n    // us an empty string on some platforms, rather than leaving it\n    // undefined)\n    if (evt.code) {\n      // Mozilla isn't fully in sync with the spec yet\n      switch (evt.code) {\n        case 'OSLeft':\n          return 'MetaLeft';\n        case 'OSRight':\n          return 'MetaRight';\n      }\n      return evt.code;\n    }\n\n    // The de-facto standard is to use Windows Virtual-Key codes\n    // in the 'keyCode' field for non-printable characters\n    if (evt.keyCode in _vkeys.default) {\n      let code = _vkeys.default[evt.keyCode];\n\n      // macOS has messed up this code for some reason\n      if (browser.isMac() && code === 'ContextMenu') {\n        code = 'MetaRight';\n      }\n\n      // The keyCode doesn't distinguish between left and right\n      // for the standard modifiers\n      if (evt.location === 2) {\n        switch (code) {\n          case 'ShiftLeft':\n            return 'ShiftRight';\n          case 'ControlLeft':\n            return 'ControlRight';\n          case 'AltLeft':\n            return 'AltRight';\n        }\n      }\n\n      // Nor a bunch of the numpad keys\n      if (evt.location === 3) {\n        switch (code) {\n          case 'Delete':\n            return 'NumpadDecimal';\n          case 'Insert':\n            return 'Numpad0';\n          case 'End':\n            return 'Numpad1';\n          case 'ArrowDown':\n            return 'Numpad2';\n          case 'PageDown':\n            return 'Numpad3';\n          case 'ArrowLeft':\n            return 'Numpad4';\n          case 'ArrowRight':\n            return 'Numpad6';\n          case 'Home':\n            return 'Numpad7';\n          case 'ArrowUp':\n            return 'Numpad8';\n          case 'PageUp':\n            return 'Numpad9';\n          case 'Enter':\n            return 'NumpadEnter';\n        }\n      }\n      return code;\n    }\n    return 'Unidentified';\n  }\n\n  // Get 'KeyboardEvent.key', handling legacy browsers\n  function getKey(evt) {\n    // Are we getting a proper key value?\n    if (evt.key !== undefined) {\n      // Mozilla isn't fully in sync with the spec yet\n      switch (evt.key) {\n        case 'OS':\n          return 'Meta';\n        case 'LaunchMyComputer':\n          return 'LaunchApplication1';\n        case 'LaunchCalculator':\n          return 'LaunchApplication2';\n      }\n\n      // iOS leaks some OS names\n      switch (evt.key) {\n        case 'UIKeyInputUpArrow':\n          return 'ArrowUp';\n        case 'UIKeyInputDownArrow':\n          return 'ArrowDown';\n        case 'UIKeyInputLeftArrow':\n          return 'ArrowLeft';\n        case 'UIKeyInputRightArrow':\n          return 'ArrowRight';\n        case 'UIKeyInputEscape':\n          return 'Escape';\n      }\n\n      // Broken behaviour in Chrome\n      if (evt.key === '\\x00' && evt.code === 'NumpadDecimal') {\n        return 'Delete';\n      }\n      return evt.key;\n    }\n\n    // Try to deduce it based on the physical key\n    const code = getKeycode(evt);\n    if (code in _fixedkeys.default) {\n      return _fixedkeys.default[code];\n    }\n\n    // If that failed, then see if we have a printable character\n    if (evt.charCode) {\n      return String.fromCharCode(evt.charCode);\n    }\n\n    // At this point we have nothing left to go on\n    return 'Unidentified';\n  }\n\n  // Get the most reliable keysym value we can get from a key event\n  function getKeysym(evt) {\n    const key = getKey(evt);\n    if (key === 'Unidentified') {\n      return null;\n    }\n\n    // First look up special keys\n    if (key in _domkeytable.default) {\n      let location = evt.location;\n\n      // Safari screws up location for the right cmd key\n      if (key === 'Meta' && location === 0) {\n        location = 2;\n      }\n\n      // And for Clear\n      if (key === 'Clear' && location === 3) {\n        let code = getKeycode(evt);\n        if (code === 'NumLock') {\n          location = 0;\n        }\n      }\n      if (location === undefined || location > 3) {\n        location = 0;\n      }\n\n      // The original Meta key now gets confused with the Windows key\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=1020141\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=1232918\n      if (key === 'Meta') {\n        let code = getKeycode(evt);\n        if (code === 'AltLeft') {\n          return _keysym.default.XK_Meta_L;\n        } else if (code === 'AltRight') {\n          return _keysym.default.XK_Meta_R;\n        }\n      }\n\n      // macOS has Clear instead of NumLock, but the remote system is\n      // probably not macOS, so lying here is probably best...\n      if (key === 'Clear') {\n        let code = getKeycode(evt);\n        if (code === 'NumLock') {\n          return _keysym.default.XK_Num_Lock;\n        }\n      }\n\n      // Windows sends alternating symbols for some keys when using a\n      // Japanese layout. We have no way of synchronising with the IM\n      // running on the remote system, so we send some combined keysym\n      // instead and hope for the best.\n      if (browser.isWindows()) {\n        switch (key) {\n          case 'Zenkaku':\n          case 'Hankaku':\n            return _keysym.default.XK_Zenkaku_Hankaku;\n          case 'Romaji':\n          case 'KanaMode':\n            return _keysym.default.XK_Romaji;\n        }\n      }\n      return _domkeytable.default[key][location];\n    }\n\n    // Now we need to look at the Unicode symbol instead\n\n    // Special key? (FIXME: Should have been caught earlier)\n    if (key.length !== 1) {\n      return null;\n    }\n    const codepoint = key.charCodeAt();\n    if (codepoint) {\n      return _keysymdef.default.lookup(codepoint);\n    }\n    return null;\n  }\n});","define(\"novnc-sockjs/core/input/vkeys\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2018 The noVNC Authors\n   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)\n   */\n  /*\n   * Mapping between Microsoft® Windows® Virtual-Key codes and\n   * HTML key codes.\n   */\n  var _default = _exports.default = {\n    0x08: 'Backspace',\n    0x09: 'Tab',\n    0x0a: 'NumpadClear',\n    0x0d: 'Enter',\n    0x10: 'ShiftLeft',\n    0x11: 'ControlLeft',\n    0x12: 'AltLeft',\n    0x13: 'Pause',\n    0x14: 'CapsLock',\n    0x15: 'Lang1',\n    0x19: 'Lang2',\n    0x1b: 'Escape',\n    0x1c: 'Convert',\n    0x1d: 'NonConvert',\n    0x20: 'Space',\n    0x21: 'PageUp',\n    0x22: 'PageDown',\n    0x23: 'End',\n    0x24: 'Home',\n    0x25: 'ArrowLeft',\n    0x26: 'ArrowUp',\n    0x27: 'ArrowRight',\n    0x28: 'ArrowDown',\n    0x29: 'Select',\n    0x2c: 'PrintScreen',\n    0x2d: 'Insert',\n    0x2e: 'Delete',\n    0x2f: 'Help',\n    0x30: 'Digit0',\n    0x31: 'Digit1',\n    0x32: 'Digit2',\n    0x33: 'Digit3',\n    0x34: 'Digit4',\n    0x35: 'Digit5',\n    0x36: 'Digit6',\n    0x37: 'Digit7',\n    0x38: 'Digit8',\n    0x39: 'Digit9',\n    0x5b: 'MetaLeft',\n    0x5c: 'MetaRight',\n    0x5d: 'ContextMenu',\n    0x5f: 'Sleep',\n    0x60: 'Numpad0',\n    0x61: 'Numpad1',\n    0x62: 'Numpad2',\n    0x63: 'Numpad3',\n    0x64: 'Numpad4',\n    0x65: 'Numpad5',\n    0x66: 'Numpad6',\n    0x67: 'Numpad7',\n    0x68: 'Numpad8',\n    0x69: 'Numpad9',\n    0x6a: 'NumpadMultiply',\n    0x6b: 'NumpadAdd',\n    0x6c: 'NumpadDecimal',\n    0x6d: 'NumpadSubtract',\n    0x6e: 'NumpadDecimal',\n    // Duplicate, because buggy on Windows\n    0x6f: 'NumpadDivide',\n    0x70: 'F1',\n    0x71: 'F2',\n    0x72: 'F3',\n    0x73: 'F4',\n    0x74: 'F5',\n    0x75: 'F6',\n    0x76: 'F7',\n    0x77: 'F8',\n    0x78: 'F9',\n    0x79: 'F10',\n    0x7a: 'F11',\n    0x7b: 'F12',\n    0x7c: 'F13',\n    0x7d: 'F14',\n    0x7e: 'F15',\n    0x7f: 'F16',\n    0x80: 'F17',\n    0x81: 'F18',\n    0x82: 'F19',\n    0x83: 'F20',\n    0x84: 'F21',\n    0x85: 'F22',\n    0x86: 'F23',\n    0x87: 'F24',\n    0x90: 'NumLock',\n    0x91: 'ScrollLock',\n    0xa6: 'BrowserBack',\n    0xa7: 'BrowserForward',\n    0xa8: 'BrowserRefresh',\n    0xa9: 'BrowserStop',\n    0xaa: 'BrowserSearch',\n    0xab: 'BrowserFavorites',\n    0xac: 'BrowserHome',\n    0xad: 'AudioVolumeMute',\n    0xae: 'AudioVolumeDown',\n    0xaf: 'AudioVolumeUp',\n    0xb0: 'MediaTrackNext',\n    0xb1: 'MediaTrackPrevious',\n    0xb2: 'MediaStop',\n    0xb3: 'MediaPlayPause',\n    0xb4: 'LaunchMail',\n    0xb5: 'MediaSelect',\n    0xb6: 'LaunchApp1',\n    0xb7: 'LaunchApp2',\n    0xe1: 'AltRight' // Only when it is AltGraph\n  };\n});","define(\"novnc-sockjs/core/input/xtscancodes\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * This file is auto-generated from keymaps.csv\n   * Database checksum sha256(76d68c10e97d37fe2ea459e210125ae41796253fb217e900bf2983ade13a7920)\n   * To re-generate, run:\n   *   keymap-gen code-map --lang=js keymaps.csv html atset1\n  */\n  var _default = _exports.default = {\n    \"Again\": 0xe005,\n    /* html:Again (Again) -> linux:129 (KEY_AGAIN) -> atset1:57349 */\n    \"AltLeft\": 0x38,\n    /* html:AltLeft (AltLeft) -> linux:56 (KEY_LEFTALT) -> atset1:56 */\n    \"AltRight\": 0xe038,\n    /* html:AltRight (AltRight) -> linux:100 (KEY_RIGHTALT) -> atset1:57400 */\n    \"ArrowDown\": 0xe050,\n    /* html:ArrowDown (ArrowDown) -> linux:108 (KEY_DOWN) -> atset1:57424 */\n    \"ArrowLeft\": 0xe04b,\n    /* html:ArrowLeft (ArrowLeft) -> linux:105 (KEY_LEFT) -> atset1:57419 */\n    \"ArrowRight\": 0xe04d,\n    /* html:ArrowRight (ArrowRight) -> linux:106 (KEY_RIGHT) -> atset1:57421 */\n    \"ArrowUp\": 0xe048,\n    /* html:ArrowUp (ArrowUp) -> linux:103 (KEY_UP) -> atset1:57416 */\n    \"AudioVolumeDown\": 0xe02e,\n    /* html:AudioVolumeDown (AudioVolumeDown) -> linux:114 (KEY_VOLUMEDOWN) -> atset1:57390 */\n    \"AudioVolumeMute\": 0xe020,\n    /* html:AudioVolumeMute (AudioVolumeMute) -> linux:113 (KEY_MUTE) -> atset1:57376 */\n    \"AudioVolumeUp\": 0xe030,\n    /* html:AudioVolumeUp (AudioVolumeUp) -> linux:115 (KEY_VOLUMEUP) -> atset1:57392 */\n    \"Backquote\": 0x29,\n    /* html:Backquote (Backquote) -> linux:41 (KEY_GRAVE) -> atset1:41 */\n    \"Backslash\": 0x2b,\n    /* html:Backslash (Backslash) -> linux:43 (KEY_BACKSLASH) -> atset1:43 */\n    \"Backspace\": 0xe,\n    /* html:Backspace (Backspace) -> linux:14 (KEY_BACKSPACE) -> atset1:14 */\n    \"BracketLeft\": 0x1a,\n    /* html:BracketLeft (BracketLeft) -> linux:26 (KEY_LEFTBRACE) -> atset1:26 */\n    \"BracketRight\": 0x1b,\n    /* html:BracketRight (BracketRight) -> linux:27 (KEY_RIGHTBRACE) -> atset1:27 */\n    \"BrowserBack\": 0xe06a,\n    /* html:BrowserBack (BrowserBack) -> linux:158 (KEY_BACK) -> atset1:57450 */\n    \"BrowserFavorites\": 0xe066,\n    /* html:BrowserFavorites (BrowserFavorites) -> linux:156 (KEY_BOOKMARKS) -> atset1:57446 */\n    \"BrowserForward\": 0xe069,\n    /* html:BrowserForward (BrowserForward) -> linux:159 (KEY_FORWARD) -> atset1:57449 */\n    \"BrowserHome\": 0xe032,\n    /* html:BrowserHome (BrowserHome) -> linux:172 (KEY_HOMEPAGE) -> atset1:57394 */\n    \"BrowserRefresh\": 0xe067,\n    /* html:BrowserRefresh (BrowserRefresh) -> linux:173 (KEY_REFRESH) -> atset1:57447 */\n    \"BrowserSearch\": 0xe065,\n    /* html:BrowserSearch (BrowserSearch) -> linux:217 (KEY_SEARCH) -> atset1:57445 */\n    \"BrowserStop\": 0xe068,\n    /* html:BrowserStop (BrowserStop) -> linux:128 (KEY_STOP) -> atset1:57448 */\n    \"CapsLock\": 0x3a,\n    /* html:CapsLock (CapsLock) -> linux:58 (KEY_CAPSLOCK) -> atset1:58 */\n    \"Comma\": 0x33,\n    /* html:Comma (Comma) -> linux:51 (KEY_COMMA) -> atset1:51 */\n    \"ContextMenu\": 0xe05d,\n    /* html:ContextMenu (ContextMenu) -> linux:127 (KEY_COMPOSE) -> atset1:57437 */\n    \"ControlLeft\": 0x1d,\n    /* html:ControlLeft (ControlLeft) -> linux:29 (KEY_LEFTCTRL) -> atset1:29 */\n    \"ControlRight\": 0xe01d,\n    /* html:ControlRight (ControlRight) -> linux:97 (KEY_RIGHTCTRL) -> atset1:57373 */\n    \"Convert\": 0x79,\n    /* html:Convert (Convert) -> linux:92 (KEY_HENKAN) -> atset1:121 */\n    \"Copy\": 0xe078,\n    /* html:Copy (Copy) -> linux:133 (KEY_COPY) -> atset1:57464 */\n    \"Cut\": 0xe03c,\n    /* html:Cut (Cut) -> linux:137 (KEY_CUT) -> atset1:57404 */\n    \"Delete\": 0xe053,\n    /* html:Delete (Delete) -> linux:111 (KEY_DELETE) -> atset1:57427 */\n    \"Digit0\": 0xb,\n    /* html:Digit0 (Digit0) -> linux:11 (KEY_0) -> atset1:11 */\n    \"Digit1\": 0x2,\n    /* html:Digit1 (Digit1) -> linux:2 (KEY_1) -> atset1:2 */\n    \"Digit2\": 0x3,\n    /* html:Digit2 (Digit2) -> linux:3 (KEY_2) -> atset1:3 */\n    \"Digit3\": 0x4,\n    /* html:Digit3 (Digit3) -> linux:4 (KEY_3) -> atset1:4 */\n    \"Digit4\": 0x5,\n    /* html:Digit4 (Digit4) -> linux:5 (KEY_4) -> atset1:5 */\n    \"Digit5\": 0x6,\n    /* html:Digit5 (Digit5) -> linux:6 (KEY_5) -> atset1:6 */\n    \"Digit6\": 0x7,\n    /* html:Digit6 (Digit6) -> linux:7 (KEY_6) -> atset1:7 */\n    \"Digit7\": 0x8,\n    /* html:Digit7 (Digit7) -> linux:8 (KEY_7) -> atset1:8 */\n    \"Digit8\": 0x9,\n    /* html:Digit8 (Digit8) -> linux:9 (KEY_8) -> atset1:9 */\n    \"Digit9\": 0xa,\n    /* html:Digit9 (Digit9) -> linux:10 (KEY_9) -> atset1:10 */\n    \"Eject\": 0xe07d,\n    /* html:Eject (Eject) -> linux:162 (KEY_EJECTCLOSECD) -> atset1:57469 */\n    \"End\": 0xe04f,\n    /* html:End (End) -> linux:107 (KEY_END) -> atset1:57423 */\n    \"Enter\": 0x1c,\n    /* html:Enter (Enter) -> linux:28 (KEY_ENTER) -> atset1:28 */\n    \"Equal\": 0xd,\n    /* html:Equal (Equal) -> linux:13 (KEY_EQUAL) -> atset1:13 */\n    \"Escape\": 0x1,\n    /* html:Escape (Escape) -> linux:1 (KEY_ESC) -> atset1:1 */\n    \"F1\": 0x3b,\n    /* html:F1 (F1) -> linux:59 (KEY_F1) -> atset1:59 */\n    \"F10\": 0x44,\n    /* html:F10 (F10) -> linux:68 (KEY_F10) -> atset1:68 */\n    \"F11\": 0x57,\n    /* html:F11 (F11) -> linux:87 (KEY_F11) -> atset1:87 */\n    \"F12\": 0x58,\n    /* html:F12 (F12) -> linux:88 (KEY_F12) -> atset1:88 */\n    \"F13\": 0x5d,\n    /* html:F13 (F13) -> linux:183 (KEY_F13) -> atset1:93 */\n    \"F14\": 0x5e,\n    /* html:F14 (F14) -> linux:184 (KEY_F14) -> atset1:94 */\n    \"F15\": 0x5f,\n    /* html:F15 (F15) -> linux:185 (KEY_F15) -> atset1:95 */\n    \"F16\": 0x55,\n    /* html:F16 (F16) -> linux:186 (KEY_F16) -> atset1:85 */\n    \"F17\": 0xe003,\n    /* html:F17 (F17) -> linux:187 (KEY_F17) -> atset1:57347 */\n    \"F18\": 0xe077,\n    /* html:F18 (F18) -> linux:188 (KEY_F18) -> atset1:57463 */\n    \"F19\": 0xe004,\n    /* html:F19 (F19) -> linux:189 (KEY_F19) -> atset1:57348 */\n    \"F2\": 0x3c,\n    /* html:F2 (F2) -> linux:60 (KEY_F2) -> atset1:60 */\n    \"F20\": 0x5a,\n    /* html:F20 (F20) -> linux:190 (KEY_F20) -> atset1:90 */\n    \"F21\": 0x74,\n    /* html:F21 (F21) -> linux:191 (KEY_F21) -> atset1:116 */\n    \"F22\": 0xe079,\n    /* html:F22 (F22) -> linux:192 (KEY_F22) -> atset1:57465 */\n    \"F23\": 0x6d,\n    /* html:F23 (F23) -> linux:193 (KEY_F23) -> atset1:109 */\n    \"F24\": 0x6f,\n    /* html:F24 (F24) -> linux:194 (KEY_F24) -> atset1:111 */\n    \"F3\": 0x3d,\n    /* html:F3 (F3) -> linux:61 (KEY_F3) -> atset1:61 */\n    \"F4\": 0x3e,\n    /* html:F4 (F4) -> linux:62 (KEY_F4) -> atset1:62 */\n    \"F5\": 0x3f,\n    /* html:F5 (F5) -> linux:63 (KEY_F5) -> atset1:63 */\n    \"F6\": 0x40,\n    /* html:F6 (F6) -> linux:64 (KEY_F6) -> atset1:64 */\n    \"F7\": 0x41,\n    /* html:F7 (F7) -> linux:65 (KEY_F7) -> atset1:65 */\n    \"F8\": 0x42,\n    /* html:F8 (F8) -> linux:66 (KEY_F8) -> atset1:66 */\n    \"F9\": 0x43,\n    /* html:F9 (F9) -> linux:67 (KEY_F9) -> atset1:67 */\n    \"Find\": 0xe041,\n    /* html:Find (Find) -> linux:136 (KEY_FIND) -> atset1:57409 */\n    \"Help\": 0xe075,\n    /* html:Help (Help) -> linux:138 (KEY_HELP) -> atset1:57461 */\n    \"Hiragana\": 0x77,\n    /* html:Hiragana (Lang4) -> linux:91 (KEY_HIRAGANA) -> atset1:119 */\n    \"Home\": 0xe047,\n    /* html:Home (Home) -> linux:102 (KEY_HOME) -> atset1:57415 */\n    \"Insert\": 0xe052,\n    /* html:Insert (Insert) -> linux:110 (KEY_INSERT) -> atset1:57426 */\n    \"IntlBackslash\": 0x56,\n    /* html:IntlBackslash (IntlBackslash) -> linux:86 (KEY_102ND) -> atset1:86 */\n    \"IntlRo\": 0x73,\n    /* html:IntlRo (IntlRo) -> linux:89 (KEY_RO) -> atset1:115 */\n    \"IntlYen\": 0x7d,\n    /* html:IntlYen (IntlYen) -> linux:124 (KEY_YEN) -> atset1:125 */\n    \"KanaMode\": 0x70,\n    /* html:KanaMode (KanaMode) -> linux:93 (KEY_KATAKANAHIRAGANA) -> atset1:112 */\n    \"Katakana\": 0x78,\n    /* html:Katakana (Lang3) -> linux:90 (KEY_KATAKANA) -> atset1:120 */\n    \"KeyA\": 0x1e,\n    /* html:KeyA (KeyA) -> linux:30 (KEY_A) -> atset1:30 */\n    \"KeyB\": 0x30,\n    /* html:KeyB (KeyB) -> linux:48 (KEY_B) -> atset1:48 */\n    \"KeyC\": 0x2e,\n    /* html:KeyC (KeyC) -> linux:46 (KEY_C) -> atset1:46 */\n    \"KeyD\": 0x20,\n    /* html:KeyD (KeyD) -> linux:32 (KEY_D) -> atset1:32 */\n    \"KeyE\": 0x12,\n    /* html:KeyE (KeyE) -> linux:18 (KEY_E) -> atset1:18 */\n    \"KeyF\": 0x21,\n    /* html:KeyF (KeyF) -> linux:33 (KEY_F) -> atset1:33 */\n    \"KeyG\": 0x22,\n    /* html:KeyG (KeyG) -> linux:34 (KEY_G) -> atset1:34 */\n    \"KeyH\": 0x23,\n    /* html:KeyH (KeyH) -> linux:35 (KEY_H) -> atset1:35 */\n    \"KeyI\": 0x17,\n    /* html:KeyI (KeyI) -> linux:23 (KEY_I) -> atset1:23 */\n    \"KeyJ\": 0x24,\n    /* html:KeyJ (KeyJ) -> linux:36 (KEY_J) -> atset1:36 */\n    \"KeyK\": 0x25,\n    /* html:KeyK (KeyK) -> linux:37 (KEY_K) -> atset1:37 */\n    \"KeyL\": 0x26,\n    /* html:KeyL (KeyL) -> linux:38 (KEY_L) -> atset1:38 */\n    \"KeyM\": 0x32,\n    /* html:KeyM (KeyM) -> linux:50 (KEY_M) -> atset1:50 */\n    \"KeyN\": 0x31,\n    /* html:KeyN (KeyN) -> linux:49 (KEY_N) -> atset1:49 */\n    \"KeyO\": 0x18,\n    /* html:KeyO (KeyO) -> linux:24 (KEY_O) -> atset1:24 */\n    \"KeyP\": 0x19,\n    /* html:KeyP (KeyP) -> linux:25 (KEY_P) -> atset1:25 */\n    \"KeyQ\": 0x10,\n    /* html:KeyQ (KeyQ) -> linux:16 (KEY_Q) -> atset1:16 */\n    \"KeyR\": 0x13,\n    /* html:KeyR (KeyR) -> linux:19 (KEY_R) -> atset1:19 */\n    \"KeyS\": 0x1f,\n    /* html:KeyS (KeyS) -> linux:31 (KEY_S) -> atset1:31 */\n    \"KeyT\": 0x14,\n    /* html:KeyT (KeyT) -> linux:20 (KEY_T) -> atset1:20 */\n    \"KeyU\": 0x16,\n    /* html:KeyU (KeyU) -> linux:22 (KEY_U) -> atset1:22 */\n    \"KeyV\": 0x2f,\n    /* html:KeyV (KeyV) -> linux:47 (KEY_V) -> atset1:47 */\n    \"KeyW\": 0x11,\n    /* html:KeyW (KeyW) -> linux:17 (KEY_W) -> atset1:17 */\n    \"KeyX\": 0x2d,\n    /* html:KeyX (KeyX) -> linux:45 (KEY_X) -> atset1:45 */\n    \"KeyY\": 0x15,\n    /* html:KeyY (KeyY) -> linux:21 (KEY_Y) -> atset1:21 */\n    \"KeyZ\": 0x2c,\n    /* html:KeyZ (KeyZ) -> linux:44 (KEY_Z) -> atset1:44 */\n    \"Lang1\": 0x72,\n    /* html:Lang1 (Lang1) -> linux:122 (KEY_HANGEUL) -> atset1:114 */\n    \"Lang2\": 0x71,\n    /* html:Lang2 (Lang2) -> linux:123 (KEY_HANJA) -> atset1:113 */\n    \"Lang3\": 0x78,\n    /* html:Lang3 (Lang3) -> linux:90 (KEY_KATAKANA) -> atset1:120 */\n    \"Lang4\": 0x77,\n    /* html:Lang4 (Lang4) -> linux:91 (KEY_HIRAGANA) -> atset1:119 */\n    \"Lang5\": 0x76,\n    /* html:Lang5 (Lang5) -> linux:85 (KEY_ZENKAKUHANKAKU) -> atset1:118 */\n    \"LaunchApp1\": 0xe06b,\n    /* html:LaunchApp1 (LaunchApp1) -> linux:157 (KEY_COMPUTER) -> atset1:57451 */\n    \"LaunchApp2\": 0xe021,\n    /* html:LaunchApp2 (LaunchApp2) -> linux:140 (KEY_CALC) -> atset1:57377 */\n    \"LaunchMail\": 0xe06c,\n    /* html:LaunchMail (LaunchMail) -> linux:155 (KEY_MAIL) -> atset1:57452 */\n    \"MediaPlayPause\": 0xe022,\n    /* html:MediaPlayPause (MediaPlayPause) -> linux:164 (KEY_PLAYPAUSE) -> atset1:57378 */\n    \"MediaSelect\": 0xe06d,\n    /* html:MediaSelect (MediaSelect) -> linux:226 (KEY_MEDIA) -> atset1:57453 */\n    \"MediaStop\": 0xe024,\n    /* html:MediaStop (MediaStop) -> linux:166 (KEY_STOPCD) -> atset1:57380 */\n    \"MediaTrackNext\": 0xe019,\n    /* html:MediaTrackNext (MediaTrackNext) -> linux:163 (KEY_NEXTSONG) -> atset1:57369 */\n    \"MediaTrackPrevious\": 0xe010,\n    /* html:MediaTrackPrevious (MediaTrackPrevious) -> linux:165 (KEY_PREVIOUSSONG) -> atset1:57360 */\n    \"MetaLeft\": 0xe05b,\n    /* html:MetaLeft (MetaLeft) -> linux:125 (KEY_LEFTMETA) -> atset1:57435 */\n    \"MetaRight\": 0xe05c,\n    /* html:MetaRight (MetaRight) -> linux:126 (KEY_RIGHTMETA) -> atset1:57436 */\n    \"Minus\": 0xc,\n    /* html:Minus (Minus) -> linux:12 (KEY_MINUS) -> atset1:12 */\n    \"NonConvert\": 0x7b,\n    /* html:NonConvert (NonConvert) -> linux:94 (KEY_MUHENKAN) -> atset1:123 */\n    \"NumLock\": 0x45,\n    /* html:NumLock (NumLock) -> linux:69 (KEY_NUMLOCK) -> atset1:69 */\n    \"Numpad0\": 0x52,\n    /* html:Numpad0 (Numpad0) -> linux:82 (KEY_KP0) -> atset1:82 */\n    \"Numpad1\": 0x4f,\n    /* html:Numpad1 (Numpad1) -> linux:79 (KEY_KP1) -> atset1:79 */\n    \"Numpad2\": 0x50,\n    /* html:Numpad2 (Numpad2) -> linux:80 (KEY_KP2) -> atset1:80 */\n    \"Numpad3\": 0x51,\n    /* html:Numpad3 (Numpad3) -> linux:81 (KEY_KP3) -> atset1:81 */\n    \"Numpad4\": 0x4b,\n    /* html:Numpad4 (Numpad4) -> linux:75 (KEY_KP4) -> atset1:75 */\n    \"Numpad5\": 0x4c,\n    /* html:Numpad5 (Numpad5) -> linux:76 (KEY_KP5) -> atset1:76 */\n    \"Numpad6\": 0x4d,\n    /* html:Numpad6 (Numpad6) -> linux:77 (KEY_KP6) -> atset1:77 */\n    \"Numpad7\": 0x47,\n    /* html:Numpad7 (Numpad7) -> linux:71 (KEY_KP7) -> atset1:71 */\n    \"Numpad8\": 0x48,\n    /* html:Numpad8 (Numpad8) -> linux:72 (KEY_KP8) -> atset1:72 */\n    \"Numpad9\": 0x49,\n    /* html:Numpad9 (Numpad9) -> linux:73 (KEY_KP9) -> atset1:73 */\n    \"NumpadAdd\": 0x4e,\n    /* html:NumpadAdd (NumpadAdd) -> linux:78 (KEY_KPPLUS) -> atset1:78 */\n    \"NumpadComma\": 0x7e,\n    /* html:NumpadComma (NumpadComma) -> linux:121 (KEY_KPCOMMA) -> atset1:126 */\n    \"NumpadDecimal\": 0x53,\n    /* html:NumpadDecimal (NumpadDecimal) -> linux:83 (KEY_KPDOT) -> atset1:83 */\n    \"NumpadDivide\": 0xe035,\n    /* html:NumpadDivide (NumpadDivide) -> linux:98 (KEY_KPSLASH) -> atset1:57397 */\n    \"NumpadEnter\": 0xe01c,\n    /* html:NumpadEnter (NumpadEnter) -> linux:96 (KEY_KPENTER) -> atset1:57372 */\n    \"NumpadEqual\": 0x59,\n    /* html:NumpadEqual (NumpadEqual) -> linux:117 (KEY_KPEQUAL) -> atset1:89 */\n    \"NumpadMultiply\": 0x37,\n    /* html:NumpadMultiply (NumpadMultiply) -> linux:55 (KEY_KPASTERISK) -> atset1:55 */\n    \"NumpadParenLeft\": 0xe076,\n    /* html:NumpadParenLeft (NumpadParenLeft) -> linux:179 (KEY_KPLEFTPAREN) -> atset1:57462 */\n    \"NumpadParenRight\": 0xe07b,\n    /* html:NumpadParenRight (NumpadParenRight) -> linux:180 (KEY_KPRIGHTPAREN) -> atset1:57467 */\n    \"NumpadSubtract\": 0x4a,\n    /* html:NumpadSubtract (NumpadSubtract) -> linux:74 (KEY_KPMINUS) -> atset1:74 */\n    \"Open\": 0x64,\n    /* html:Open (Open) -> linux:134 (KEY_OPEN) -> atset1:100 */\n    \"PageDown\": 0xe051,\n    /* html:PageDown (PageDown) -> linux:109 (KEY_PAGEDOWN) -> atset1:57425 */\n    \"PageUp\": 0xe049,\n    /* html:PageUp (PageUp) -> linux:104 (KEY_PAGEUP) -> atset1:57417 */\n    \"Paste\": 0x65,\n    /* html:Paste (Paste) -> linux:135 (KEY_PASTE) -> atset1:101 */\n    \"Pause\": 0xe046,\n    /* html:Pause (Pause) -> linux:119 (KEY_PAUSE) -> atset1:57414 */\n    \"Period\": 0x34,\n    /* html:Period (Period) -> linux:52 (KEY_DOT) -> atset1:52 */\n    \"Power\": 0xe05e,\n    /* html:Power (Power) -> linux:116 (KEY_POWER) -> atset1:57438 */\n    \"PrintScreen\": 0x54,\n    /* html:PrintScreen (PrintScreen) -> linux:99 (KEY_SYSRQ) -> atset1:84 */\n    \"Props\": 0xe006,\n    /* html:Props (Props) -> linux:130 (KEY_PROPS) -> atset1:57350 */\n    \"Quote\": 0x28,\n    /* html:Quote (Quote) -> linux:40 (KEY_APOSTROPHE) -> atset1:40 */\n    \"ScrollLock\": 0x46,\n    /* html:ScrollLock (ScrollLock) -> linux:70 (KEY_SCROLLLOCK) -> atset1:70 */\n    \"Semicolon\": 0x27,\n    /* html:Semicolon (Semicolon) -> linux:39 (KEY_SEMICOLON) -> atset1:39 */\n    \"ShiftLeft\": 0x2a,\n    /* html:ShiftLeft (ShiftLeft) -> linux:42 (KEY_LEFTSHIFT) -> atset1:42 */\n    \"ShiftRight\": 0x36,\n    /* html:ShiftRight (ShiftRight) -> linux:54 (KEY_RIGHTSHIFT) -> atset1:54 */\n    \"Slash\": 0x35,\n    /* html:Slash (Slash) -> linux:53 (KEY_SLASH) -> atset1:53 */\n    \"Sleep\": 0xe05f,\n    /* html:Sleep (Sleep) -> linux:142 (KEY_SLEEP) -> atset1:57439 */\n    \"Space\": 0x39,\n    /* html:Space (Space) -> linux:57 (KEY_SPACE) -> atset1:57 */\n    \"Suspend\": 0xe025,\n    /* html:Suspend (Suspend) -> linux:205 (KEY_SUSPEND) -> atset1:57381 */\n    \"Tab\": 0xf,\n    /* html:Tab (Tab) -> linux:15 (KEY_TAB) -> atset1:15 */\n    \"Undo\": 0xe007,\n    /* html:Undo (Undo) -> linux:131 (KEY_UNDO) -> atset1:57351 */\n    \"WakeUp\": 0xe063 /* html:WakeUp (WakeUp) -> linux:143 (KEY_WAKEUP) -> atset1:57443 */\n  };\n});","define(\"novnc-sockjs/core/rfb\", [\"exports\", \"novnc-sockjs/core/util/int\", \"novnc-sockjs/core/util/logging\", \"novnc-sockjs/core/util/strings\", \"novnc-sockjs/core/util/browser\", \"novnc-sockjs/core/util/element\", \"novnc-sockjs/core/util/events\", \"novnc-sockjs/core/util/eventtarget\", \"novnc-sockjs/core/display\", \"novnc-sockjs/core/inflator\", \"novnc-sockjs/core/deflator\", \"novnc-sockjs/core/input/keyboard\", \"novnc-sockjs/core/input/gesturehandler\", \"novnc-sockjs/core/util/cursor\", \"novnc-sockjs/core/websock\", \"novnc-sockjs/core/des\", \"novnc-sockjs/core/input/keysym\", \"novnc-sockjs/core/input/xtscancodes\", \"novnc-sockjs/core/encodings\", \"novnc-sockjs/core/decoders/raw\", \"novnc-sockjs/core/decoders/copyrect\", \"novnc-sockjs/core/decoders/rre\", \"novnc-sockjs/core/decoders/hextile\", \"novnc-sockjs/core/decoders/tight\", \"novnc-sockjs/core/decoders/tightpng\"], function (_exports, _int, Log, _strings, _browser, _element, _events, _eventtarget, _display, _inflator, _deflator, _keyboard, _gesturehandler, _cursor, _websock, _des, _keysym, _xtscancodes, _encodings, _raw, _copyrect, _rre, _hextile, _tight, _tightpng) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   */\n\n  // How many seconds to wait for a disconnect to finish\n  const DISCONNECT_TIMEOUT = 3;\n  const DEFAULT_BACKGROUND = 'rgb(40, 40, 40)';\n\n  // Minimum wait (ms) between two mouse moves\n  const MOUSE_MOVE_DELAY = 17;\n\n  // Wheel thresholds\n  const WHEEL_STEP = 50; // Pixels needed for one step\n  const WHEEL_LINE_HEIGHT = 19; // Assumed pixels for one line step\n\n  // Gesture thresholds\n  const GESTURE_ZOOMSENS = 75;\n  const GESTURE_SCRLSENS = 50;\n  const DOUBLE_TAP_TIMEOUT = 1000;\n  const DOUBLE_TAP_THRESHOLD = 50;\n\n  // Extended clipboard pseudo-encoding formats\n  const extendedClipboardFormatText = 1;\n  /*eslint-disable no-unused-vars */\n  const extendedClipboardFormatRtf = 1 << 1;\n  const extendedClipboardFormatHtml = 1 << 2;\n  const extendedClipboardFormatDib = 1 << 3;\n  const extendedClipboardFormatFiles = 1 << 4;\n  /*eslint-enable */\n\n  // Extended clipboard pseudo-encoding actions\n  const extendedClipboardActionCaps = 1 << 24;\n  const extendedClipboardActionRequest = 1 << 25;\n  const extendedClipboardActionPeek = 1 << 26;\n  const extendedClipboardActionNotify = 1 << 27;\n  const extendedClipboardActionProvide = 1 << 28;\n  class RFB extends _eventtarget.default {\n    constructor(target, urlOrChannel, options) {\n      if (!target) {\n        throw new Error(\"Must specify target\");\n      }\n      if (!urlOrChannel) {\n        throw new Error(\"Must specify URL, WebSocket or RTCDataChannel\");\n      }\n      super();\n      this._target = target;\n      if (typeof urlOrChannel === \"string\") {\n        this._url = urlOrChannel;\n      } else {\n        this._url = null;\n        this._rawChannel = urlOrChannel;\n      }\n\n      // Connection details\n      options = options || {};\n      this._rfbCredentials = options.credentials || {};\n      this._shared = 'shared' in options ? !!options.shared : true;\n      this._repeaterID = options.repeaterID || '';\n      this._wsProtocols = options.wsProtocols || [];\n\n      // Internal state\n      this._rfbConnectionState = '';\n      this._rfbInitState = '';\n      this._rfbAuthScheme = -1;\n      this._rfbCleanDisconnect = true;\n\n      // Server capabilities\n      this._rfbVersion = 0;\n      this._rfbMaxVersion = 3.8;\n      this._rfbTightVNC = false;\n      this._rfbVeNCryptState = 0;\n      this._rfbXvpVer = 0;\n      this._fbWidth = 0;\n      this._fbHeight = 0;\n      this._fbName = \"\";\n      this._capabilities = {\n        power: false\n      };\n      this._supportsFence = false;\n      this._supportsContinuousUpdates = false;\n      this._enabledContinuousUpdates = false;\n      this._supportsSetDesktopSize = false;\n      this._screenID = 0;\n      this._screenFlags = 0;\n      this._qemuExtKeyEventSupported = false;\n      this._clipboardText = null;\n      this._clipboardServerCapabilitiesActions = {};\n      this._clipboardServerCapabilitiesFormats = {};\n\n      // Internal objects\n      this._sock = null; // Websock object\n      this._display = null; // Display object\n      this._flushing = false; // Display flushing state\n      this._keyboard = null; // Keyboard input handler object\n      this._gestures = null; // Gesture input handler object\n\n      // Timers\n      this._disconnTimer = null; // disconnection timer\n      this._resizeTimeout = null; // resize rate limiting\n      this._mouseMoveTimer = null;\n\n      // Decoder states\n      this._decoders = {};\n      this._FBU = {\n        rects: 0,\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0,\n        encoding: null\n      };\n\n      // Mouse state\n      this._mousePos = {};\n      this._mouseButtonMask = 0;\n      this._mouseLastMoveTime = 0;\n      this._viewportDragging = false;\n      this._viewportDragPos = {};\n      this._viewportHasMoved = false;\n      this._accumulatedWheelDeltaX = 0;\n      this._accumulatedWheelDeltaY = 0;\n\n      // Gesture state\n      this._gestureLastTapTime = null;\n      this._gestureFirstDoubleTapEv = null;\n      this._gestureLastMagnitudeX = 0;\n      this._gestureLastMagnitudeY = 0;\n\n      // Bound event handlers\n      this._eventHandlers = {\n        focusCanvas: this._focusCanvas.bind(this),\n        windowResize: this._windowResize.bind(this),\n        handleMouse: this._handleMouse.bind(this),\n        handleWheel: this._handleWheel.bind(this),\n        handleGesture: this._handleGesture.bind(this)\n      };\n\n      // main setup\n      Log.Debug(\">> RFB.constructor\");\n\n      // Create DOM elements\n      this._screen = document.createElement('div');\n      this._screen.style.display = 'flex';\n      this._screen.style.width = '100%';\n      this._screen.style.height = '100%';\n      this._screen.style.overflow = 'auto';\n      this._screen.style.background = DEFAULT_BACKGROUND;\n      this._canvas = document.createElement('canvas');\n      this._canvas.style.margin = 'auto';\n      // Some browsers add an outline on focus\n      this._canvas.style.outline = 'none';\n      this._canvas.width = 0;\n      this._canvas.height = 0;\n      this._canvas.tabIndex = -1;\n      this._screen.appendChild(this._canvas);\n\n      // Cursor\n      this._cursor = new _cursor.default();\n\n      // XXX: TightVNC 2.8.11 sends no cursor at all until Windows changes\n      // it. Result: no cursor at all until a window border or an edit field\n      // is hit blindly. But there are also VNC servers that draw the cursor\n      // in the framebuffer and don't send the empty local cursor. There is\n      // no way to satisfy both sides.\n      //\n      // The spec is unclear on this \"initial cursor\" issue. Many other\n      // viewers (TigerVNC, RealVNC, Remmina) display an arrow as the\n      // initial cursor instead.\n      this._cursorImage = RFB.cursors.none;\n\n      // populate decoder array with objects\n      this._decoders[_encodings.encodings.encodingRaw] = new _raw.default();\n      this._decoders[_encodings.encodings.encodingCopyRect] = new _copyrect.default();\n      this._decoders[_encodings.encodings.encodingRRE] = new _rre.default();\n      this._decoders[_encodings.encodings.encodingHextile] = new _hextile.default();\n      this._decoders[_encodings.encodings.encodingTight] = new _tight.default();\n      this._decoders[_encodings.encodings.encodingTightPNG] = new _tightpng.default();\n\n      // NB: nothing that needs explicit teardown should be done\n      // before this point, since this can throw an exception\n      try {\n        this._display = new _display.default(this._canvas);\n      } catch (exc) {\n        Log.Error(\"Display exception: \" + exc);\n        throw exc;\n      }\n      this._display.onflush = this._onFlush.bind(this);\n      this._keyboard = new _keyboard.default(this._canvas);\n      this._keyboard.onkeyevent = this._handleKeyEvent.bind(this);\n      this._gestures = new _gesturehandler.default();\n      this._sock = new _websock.default();\n      this._sock.on('message', () => {\n        this._handleMessage();\n      });\n      this._sock.on('open', () => {\n        if (this._rfbConnectionState === 'connecting' && this._rfbInitState === '') {\n          this._rfbInitState = 'ProtocolVersion';\n          Log.Debug(\"Starting VNC handshake\");\n        } else {\n          this._fail(\"Unexpected server connection while \" + this._rfbConnectionState);\n        }\n      });\n      this._sock.on('close', e => {\n        Log.Debug(\"WebSocket on-close event\");\n        let msg = \"\";\n        if (e.code) {\n          msg = \"(code: \" + e.code;\n          if (e.reason) {\n            msg += \", reason: \" + e.reason;\n          }\n          msg += \")\";\n        }\n        switch (this._rfbConnectionState) {\n          case 'connecting':\n            this._fail(\"Connection closed \" + msg);\n            break;\n          case 'connected':\n            // Handle disconnects that were initiated server-side\n            this._updateConnectionState('disconnecting');\n            this._updateConnectionState('disconnected');\n            break;\n          case 'disconnecting':\n            // Normal disconnection path\n            this._updateConnectionState('disconnected');\n            break;\n          case 'disconnected':\n            this._fail(\"Unexpected server disconnect \" + \"when already disconnected \" + msg);\n            break;\n          default:\n            this._fail(\"Unexpected server disconnect before connecting \" + msg);\n            break;\n        }\n        this._sock.off('close');\n        // Delete reference to raw channel to allow cleanup.\n        this._rawChannel = null;\n      });\n      this._sock.on('error', e => Log.Warn(\"WebSocket on-error event\"));\n\n      // Slight delay of the actual connection so that the caller has\n      // time to set up callbacks\n      setTimeout(this._updateConnectionState.bind(this, 'connecting'));\n      Log.Debug(\"<< RFB.constructor\");\n\n      // ===== PROPERTIES =====\n\n      this.dragViewport = false;\n      this.focusOnClick = true;\n      this._viewOnly = false;\n      this._clipViewport = false;\n      this._scaleViewport = false;\n      this._resizeSession = false;\n      this._showDotCursor = false;\n      if (options.showDotCursor !== undefined) {\n        Log.Warn(\"Specifying showDotCursor as a RFB constructor argument is deprecated\");\n        this._showDotCursor = options.showDotCursor;\n      }\n      this._qualityLevel = 6;\n      this._compressionLevel = 2;\n    }\n\n    // ===== PROPERTIES =====\n\n    get viewOnly() {\n      return this._viewOnly;\n    }\n    set viewOnly(viewOnly) {\n      this._viewOnly = viewOnly;\n      if (this._rfbConnectionState === \"connecting\" || this._rfbConnectionState === \"connected\") {\n        if (viewOnly) {\n          this._keyboard.ungrab();\n        } else {\n          this._keyboard.grab();\n        }\n      }\n    }\n    get capabilities() {\n      return this._capabilities;\n    }\n    get touchButton() {\n      return 0;\n    }\n    set touchButton(button) {\n      Log.Warn(\"Using old API!\");\n    }\n    get clipViewport() {\n      return this._clipViewport;\n    }\n    set clipViewport(viewport) {\n      this._clipViewport = viewport;\n      this._updateClip();\n    }\n    get scaleViewport() {\n      return this._scaleViewport;\n    }\n    set scaleViewport(scale) {\n      this._scaleViewport = scale;\n      // Scaling trumps clipping, so we may need to adjust\n      // clipping when enabling or disabling scaling\n      if (scale && this._clipViewport) {\n        this._updateClip();\n      }\n      this._updateScale();\n      if (!scale && this._clipViewport) {\n        this._updateClip();\n      }\n    }\n    get resizeSession() {\n      return this._resizeSession;\n    }\n    set resizeSession(resize) {\n      this._resizeSession = resize;\n      if (resize) {\n        this._requestRemoteResize();\n      }\n    }\n    get showDotCursor() {\n      return this._showDotCursor;\n    }\n    set showDotCursor(show) {\n      this._showDotCursor = show;\n      this._refreshCursor();\n    }\n    get background() {\n      return this._screen.style.background;\n    }\n    set background(cssValue) {\n      this._screen.style.background = cssValue;\n    }\n    get qualityLevel() {\n      return this._qualityLevel;\n    }\n    set qualityLevel(qualityLevel) {\n      if (!Number.isInteger(qualityLevel) || qualityLevel < 0 || qualityLevel > 9) {\n        Log.Error(\"qualityLevel must be an integer between 0 and 9\");\n        return;\n      }\n      if (this._qualityLevel === qualityLevel) {\n        return;\n      }\n      this._qualityLevel = qualityLevel;\n      if (this._rfbConnectionState === 'connected') {\n        this._sendEncodings();\n      }\n    }\n    get compressionLevel() {\n      return this._compressionLevel;\n    }\n    set compressionLevel(compressionLevel) {\n      if (!Number.isInteger(compressionLevel) || compressionLevel < 0 || compressionLevel > 9) {\n        Log.Error(\"compressionLevel must be an integer between 0 and 9\");\n        return;\n      }\n      if (this._compressionLevel === compressionLevel) {\n        return;\n      }\n      this._compressionLevel = compressionLevel;\n      if (this._rfbConnectionState === 'connected') {\n        this._sendEncodings();\n      }\n    }\n\n    // ===== PUBLIC METHODS =====\n\n    disconnect() {\n      this._updateConnectionState('disconnecting');\n      this._sock.off('error');\n      this._sock.off('message');\n      this._sock.off('open');\n    }\n    sendCredentials(creds) {\n      this._rfbCredentials = creds;\n      setTimeout(this._initMsg.bind(this), 0);\n    }\n    sendCtrlAltDel() {\n      if (this._rfbConnectionState !== 'connected' || this._viewOnly) {\n        return;\n      }\n      Log.Info(\"Sending Ctrl-Alt-Del\");\n      this.sendKey(_keysym.default.XK_Control_L, \"ControlLeft\", true);\n      this.sendKey(_keysym.default.XK_Alt_L, \"AltLeft\", true);\n      this.sendKey(_keysym.default.XK_Delete, \"Delete\", true);\n      this.sendKey(_keysym.default.XK_Delete, \"Delete\", false);\n      this.sendKey(_keysym.default.XK_Alt_L, \"AltLeft\", false);\n      this.sendKey(_keysym.default.XK_Control_L, \"ControlLeft\", false);\n    }\n    machineShutdown() {\n      this._xvpOp(1, 2);\n    }\n    machineReboot() {\n      this._xvpOp(1, 3);\n    }\n    machineReset() {\n      this._xvpOp(1, 4);\n    }\n\n    // Send a key press. If 'down' is not specified then send a down key\n    // followed by an up key.\n    sendKey(keysym, code, down) {\n      if (this._rfbConnectionState !== 'connected' || this._viewOnly) {\n        return;\n      }\n      if (down === undefined) {\n        this.sendKey(keysym, code, true);\n        this.sendKey(keysym, code, false);\n        return;\n      }\n      const scancode = _xtscancodes.default[code];\n      if (this._qemuExtKeyEventSupported && scancode) {\n        // 0 is NoSymbol\n        keysym = keysym || 0;\n        Log.Info(\"Sending key (\" + (down ? \"down\" : \"up\") + \"): keysym \" + keysym + \", scancode \" + scancode);\n        RFB.messages.QEMUExtendedKeyEvent(this._sock, keysym, down, scancode);\n      } else {\n        if (!keysym) {\n          return;\n        }\n        Log.Info(\"Sending keysym (\" + (down ? \"down\" : \"up\") + \"): \" + keysym);\n        RFB.messages.keyEvent(this._sock, keysym, down ? 1 : 0);\n      }\n    }\n    focus() {\n      this._canvas.focus();\n    }\n    blur() {\n      this._canvas.blur();\n    }\n    clipboardPasteFrom(text) {\n      if (this._rfbConnectionState !== 'connected' || this._viewOnly) {\n        return;\n      }\n      if (this._clipboardServerCapabilitiesFormats[extendedClipboardFormatText] && this._clipboardServerCapabilitiesActions[extendedClipboardActionNotify]) {\n        this._clipboardText = text;\n        RFB.messages.extendedClipboardNotify(this._sock, [extendedClipboardFormatText]);\n      } else {\n        let data = new Uint8Array(text.length);\n        for (let i = 0; i < text.length; i++) {\n          // FIXME: text can have values outside of Latin1/Uint8\n          data[i] = text.charCodeAt(i);\n        }\n        RFB.messages.clientCutText(this._sock, data);\n      }\n    }\n\n    // ===== PRIVATE METHODS =====\n\n    _connect() {\n      Log.Debug(\">> RFB.connect\");\n      if (this._url) {\n        try {\n          Log.Info(`connecting to ${this._url}`);\n          this._sock.open(this._url, this._wsProtocols);\n        } catch (e) {\n          if (e.name === 'SyntaxError') {\n            this._fail(\"Invalid host or port (\" + e + \")\");\n          } else {\n            this._fail(\"Error when opening socket (\" + e + \")\");\n          }\n        }\n      } else {\n        try {\n          Log.Info(`attaching ${this._rawChannel} to Websock`);\n          this._sock.attach(this._rawChannel);\n        } catch (e) {\n          this._fail(\"Error attaching channel (\" + e + \")\");\n        }\n      }\n\n      // Make our elements part of the page\n      this._target.appendChild(this._screen);\n      this._gestures.attach(this._canvas);\n      this._cursor.attach(this._canvas);\n      this._refreshCursor();\n\n      // Monitor size changes of the screen\n      // FIXME: Use ResizeObserver, or hidden overflow\n      window.addEventListener('resize', this._eventHandlers.windowResize);\n\n      // Always grab focus on some kind of click event\n      this._canvas.addEventListener(\"mousedown\", this._eventHandlers.focusCanvas);\n      this._canvas.addEventListener(\"touchstart\", this._eventHandlers.focusCanvas);\n\n      // Mouse events\n      this._canvas.addEventListener('mousedown', this._eventHandlers.handleMouse);\n      this._canvas.addEventListener('mouseup', this._eventHandlers.handleMouse);\n      this._canvas.addEventListener('mousemove', this._eventHandlers.handleMouse);\n      // Prevent middle-click pasting (see handler for why we bind to document)\n      this._canvas.addEventListener('click', this._eventHandlers.handleMouse);\n      // preventDefault() on mousedown doesn't stop this event for some\n      // reason so we have to explicitly block it\n      this._canvas.addEventListener('contextmenu', this._eventHandlers.handleMouse);\n\n      // Wheel events\n      this._canvas.addEventListener(\"wheel\", this._eventHandlers.handleWheel);\n\n      // Gesture events\n      this._canvas.addEventListener(\"gesturestart\", this._eventHandlers.handleGesture);\n      this._canvas.addEventListener(\"gesturemove\", this._eventHandlers.handleGesture);\n      this._canvas.addEventListener(\"gestureend\", this._eventHandlers.handleGesture);\n      Log.Debug(\"<< RFB.connect\");\n    }\n    _disconnect() {\n      Log.Debug(\">> RFB.disconnect\");\n      this._cursor.detach();\n      this._canvas.removeEventListener(\"gesturestart\", this._eventHandlers.handleGesture);\n      this._canvas.removeEventListener(\"gesturemove\", this._eventHandlers.handleGesture);\n      this._canvas.removeEventListener(\"gestureend\", this._eventHandlers.handleGesture);\n      this._canvas.removeEventListener(\"wheel\", this._eventHandlers.handleWheel);\n      this._canvas.removeEventListener('mousedown', this._eventHandlers.handleMouse);\n      this._canvas.removeEventListener('mouseup', this._eventHandlers.handleMouse);\n      this._canvas.removeEventListener('mousemove', this._eventHandlers.handleMouse);\n      this._canvas.removeEventListener('click', this._eventHandlers.handleMouse);\n      this._canvas.removeEventListener('contextmenu', this._eventHandlers.handleMouse);\n      this._canvas.removeEventListener(\"mousedown\", this._eventHandlers.focusCanvas);\n      this._canvas.removeEventListener(\"touchstart\", this._eventHandlers.focusCanvas);\n      window.removeEventListener('resize', this._eventHandlers.windowResize);\n      this._keyboard.ungrab();\n      this._gestures.detach();\n      this._sock.close();\n      try {\n        this._target.removeChild(this._screen);\n      } catch (e) {\n        if (e.name === 'NotFoundError') {\n          // Some cases where the initial connection fails\n          // can disconnect before the _screen is created\n        } else {\n          throw e;\n        }\n      }\n      clearTimeout(this._resizeTimeout);\n      clearTimeout(this._mouseMoveTimer);\n      Log.Debug(\"<< RFB.disconnect\");\n    }\n    _focusCanvas(event) {\n      if (!this.focusOnClick) {\n        return;\n      }\n      this.focus();\n    }\n    _setDesktopName(name) {\n      this._fbName = name;\n      this.dispatchEvent(new CustomEvent(\"desktopname\", {\n        detail: {\n          name: this._fbName\n        }\n      }));\n    }\n    _windowResize(event) {\n      // If the window resized then our screen element might have\n      // as well. Update the viewport dimensions.\n      window.requestAnimationFrame(() => {\n        this._updateClip();\n        this._updateScale();\n      });\n      if (this._resizeSession) {\n        // Request changing the resolution of the remote display to\n        // the size of the local browser viewport.\n\n        // In order to not send multiple requests before the browser-resize\n        // is finished we wait 0.5 seconds before sending the request.\n        clearTimeout(this._resizeTimeout);\n        this._resizeTimeout = setTimeout(this._requestRemoteResize.bind(this), 500);\n      }\n    }\n\n    // Update state of clipping in Display object, and make sure the\n    // configured viewport matches the current screen size\n    _updateClip() {\n      const curClip = this._display.clipViewport;\n      let newClip = this._clipViewport;\n      if (this._scaleViewport) {\n        // Disable viewport clipping if we are scaling\n        newClip = false;\n      }\n      if (curClip !== newClip) {\n        this._display.clipViewport = newClip;\n      }\n      if (newClip) {\n        // When clipping is enabled, the screen is limited to\n        // the size of the container.\n        const size = this._screenSize();\n        this._display.viewportChangeSize(size.w, size.h);\n        this._fixScrollbars();\n      }\n    }\n    _updateScale() {\n      if (!this._scaleViewport) {\n        this._display.scale = 1.0;\n      } else {\n        const size = this._screenSize();\n        this._display.autoscale(size.w, size.h);\n      }\n      this._fixScrollbars();\n    }\n\n    // Requests a change of remote desktop size. This message is an extension\n    // and may only be sent if we have received an ExtendedDesktopSize message\n    _requestRemoteResize() {\n      clearTimeout(this._resizeTimeout);\n      this._resizeTimeout = null;\n      if (!this._resizeSession || this._viewOnly || !this._supportsSetDesktopSize) {\n        return;\n      }\n      const size = this._screenSize();\n      RFB.messages.setDesktopSize(this._sock, Math.floor(size.w), Math.floor(size.h), this._screenID, this._screenFlags);\n      Log.Debug('Requested new desktop size: ' + size.w + 'x' + size.h);\n    }\n\n    // Gets the the size of the available screen\n    _screenSize() {\n      let r = this._screen.getBoundingClientRect();\n      return {\n        w: r.width,\n        h: r.height\n      };\n    }\n    _fixScrollbars() {\n      // This is a hack because Chrome screws up the calculation\n      // for when scrollbars are needed. So to fix it we temporarily\n      // toggle them off and on.\n      const orig = this._screen.style.overflow;\n      this._screen.style.overflow = 'hidden';\n      // Force Chrome to recalculate the layout by asking for\n      // an element's dimensions\n      this._screen.getBoundingClientRect();\n      this._screen.style.overflow = orig;\n    }\n\n    /*\n     * Connection states:\n     *   connecting\n     *   connected\n     *   disconnecting\n     *   disconnected - permanent state\n     */\n    _updateConnectionState(state) {\n      const oldstate = this._rfbConnectionState;\n      if (state === oldstate) {\n        Log.Debug(\"Already in state '\" + state + \"', ignoring\");\n        return;\n      }\n\n      // The 'disconnected' state is permanent for each RFB object\n      if (oldstate === 'disconnected') {\n        Log.Error(\"Tried changing state of a disconnected RFB object\");\n        return;\n      }\n\n      // Ensure proper transitions before doing anything\n      switch (state) {\n        case 'connected':\n          if (oldstate !== 'connecting') {\n            Log.Error(\"Bad transition to connected state, \" + \"previous connection state: \" + oldstate);\n            return;\n          }\n          break;\n        case 'disconnected':\n          if (oldstate !== 'disconnecting') {\n            Log.Error(\"Bad transition to disconnected state, \" + \"previous connection state: \" + oldstate);\n            return;\n          }\n          break;\n        case 'connecting':\n          if (oldstate !== '') {\n            Log.Error(\"Bad transition to connecting state, \" + \"previous connection state: \" + oldstate);\n            return;\n          }\n          break;\n        case 'disconnecting':\n          if (oldstate !== 'connected' && oldstate !== 'connecting') {\n            Log.Error(\"Bad transition to disconnecting state, \" + \"previous connection state: \" + oldstate);\n            return;\n          }\n          break;\n        default:\n          Log.Error(\"Unknown connection state: \" + state);\n          return;\n      }\n\n      // State change actions\n\n      this._rfbConnectionState = state;\n      Log.Debug(\"New state '\" + state + \"', was '\" + oldstate + \"'.\");\n      if (this._disconnTimer && state !== 'disconnecting') {\n        Log.Debug(\"Clearing disconnect timer\");\n        clearTimeout(this._disconnTimer);\n        this._disconnTimer = null;\n\n        // make sure we don't get a double event\n        this._sock.off('close');\n      }\n      switch (state) {\n        case 'connecting':\n          this._connect();\n          break;\n        case 'connected':\n          this.dispatchEvent(new CustomEvent(\"connect\", {\n            detail: {}\n          }));\n          break;\n        case 'disconnecting':\n          this._disconnect();\n          this._disconnTimer = setTimeout(() => {\n            Log.Error(\"Disconnection timed out.\");\n            this._updateConnectionState('disconnected');\n          }, DISCONNECT_TIMEOUT * 1000);\n          break;\n        case 'disconnected':\n          this.dispatchEvent(new CustomEvent(\"disconnect\", {\n            detail: {\n              clean: this._rfbCleanDisconnect\n            }\n          }));\n          break;\n      }\n    }\n\n    /* Print errors and disconnect\n     *\n     * The parameter 'details' is used for information that\n     * should be logged but not sent to the user interface.\n     */\n    _fail(details) {\n      switch (this._rfbConnectionState) {\n        case 'disconnecting':\n          Log.Error(\"Failed when disconnecting: \" + details);\n          break;\n        case 'connected':\n          Log.Error(\"Failed while connected: \" + details);\n          break;\n        case 'connecting':\n          Log.Error(\"Failed when connecting: \" + details);\n          break;\n        default:\n          Log.Error(\"RFB failure: \" + details);\n          break;\n      }\n      this._rfbCleanDisconnect = false; //This is sent to the UI\n\n      // Transition to disconnected without waiting for socket to close\n      this._updateConnectionState('disconnecting');\n      this._updateConnectionState('disconnected');\n      return false;\n    }\n    _setCapability(cap, val) {\n      this._capabilities[cap] = val;\n      this.dispatchEvent(new CustomEvent(\"capabilities\", {\n        detail: {\n          capabilities: this._capabilities\n        }\n      }));\n    }\n    _handleMessage() {\n      if (this._sock.rQlen === 0) {\n        Log.Warn(\"handleMessage called on an empty receive queue\");\n        return;\n      }\n      switch (this._rfbConnectionState) {\n        case 'disconnected':\n          Log.Error(\"Got data while disconnected\");\n          break;\n        case 'connected':\n          while (true) {\n            if (this._flushing) {\n              break;\n            }\n            if (!this._normalMsg()) {\n              break;\n            }\n            if (this._sock.rQlen === 0) {\n              break;\n            }\n          }\n          break;\n        default:\n          this._initMsg();\n          break;\n      }\n    }\n    _handleKeyEvent(keysym, code, down) {\n      this.sendKey(keysym, code, down);\n    }\n    _handleMouse(ev) {\n      /*\n       * We don't check connection status or viewOnly here as the\n       * mouse events might be used to control the viewport\n       */\n\n      if (ev.type === 'click') {\n        /*\n         * Note: This is only needed for the 'click' event as it fails\n         *       to fire properly for the target element so we have\n         *       to listen on the document element instead.\n         */\n        if (ev.target !== this._canvas) {\n          return;\n        }\n      }\n\n      // FIXME: if we're in view-only and not dragging,\n      //        should we stop events?\n      ev.stopPropagation();\n      ev.preventDefault();\n      if (ev.type === 'click' || ev.type === 'contextmenu') {\n        return;\n      }\n      let pos = (0, _element.clientToElement)(ev.clientX, ev.clientY, this._canvas);\n      switch (ev.type) {\n        case 'mousedown':\n          (0, _events.setCapture)(this._canvas);\n          this._handleMouseButton(pos.x, pos.y, true, 1 << ev.button);\n          break;\n        case 'mouseup':\n          this._handleMouseButton(pos.x, pos.y, false, 1 << ev.button);\n          break;\n        case 'mousemove':\n          this._handleMouseMove(pos.x, pos.y);\n          break;\n      }\n    }\n    _handleMouseButton(x, y, down, bmask) {\n      if (this.dragViewport) {\n        if (down && !this._viewportDragging) {\n          this._viewportDragging = true;\n          this._viewportDragPos = {\n            'x': x,\n            'y': y\n          };\n          this._viewportHasMoved = false;\n\n          // Skip sending mouse events\n          return;\n        } else {\n          this._viewportDragging = false;\n\n          // If we actually performed a drag then we are done\n          // here and should not send any mouse events\n          if (this._viewportHasMoved) {\n            return;\n          }\n\n          // Otherwise we treat this as a mouse click event.\n          // Send the button down event here, as the button up\n          // event is sent at the end of this function.\n          this._sendMouse(x, y, bmask);\n        }\n      }\n\n      // Flush waiting move event first\n      if (this._mouseMoveTimer !== null) {\n        clearTimeout(this._mouseMoveTimer);\n        this._mouseMoveTimer = null;\n        this._sendMouse(x, y, this._mouseButtonMask);\n      }\n      if (down) {\n        this._mouseButtonMask |= bmask;\n      } else {\n        this._mouseButtonMask &= ~bmask;\n      }\n      this._sendMouse(x, y, this._mouseButtonMask);\n    }\n    _handleMouseMove(x, y) {\n      if (this._viewportDragging) {\n        const deltaX = this._viewportDragPos.x - x;\n        const deltaY = this._viewportDragPos.y - y;\n        if (this._viewportHasMoved || Math.abs(deltaX) > _browser.dragThreshold || Math.abs(deltaY) > _browser.dragThreshold) {\n          this._viewportHasMoved = true;\n          this._viewportDragPos = {\n            'x': x,\n            'y': y\n          };\n          this._display.viewportChangePos(deltaX, deltaY);\n        }\n\n        // Skip sending mouse events\n        return;\n      }\n      this._mousePos = {\n        'x': x,\n        'y': y\n      };\n\n      // Limit many mouse move events to one every MOUSE_MOVE_DELAY ms\n      if (this._mouseMoveTimer == null) {\n        const timeSinceLastMove = Date.now() - this._mouseLastMoveTime;\n        if (timeSinceLastMove > MOUSE_MOVE_DELAY) {\n          this._sendMouse(x, y, this._mouseButtonMask);\n          this._mouseLastMoveTime = Date.now();\n        } else {\n          // Too soon since the latest move, wait the remaining time\n          this._mouseMoveTimer = setTimeout(() => {\n            this._handleDelayedMouseMove();\n          }, MOUSE_MOVE_DELAY - timeSinceLastMove);\n        }\n      }\n    }\n    _handleDelayedMouseMove() {\n      this._mouseMoveTimer = null;\n      this._sendMouse(this._mousePos.x, this._mousePos.y, this._mouseButtonMask);\n      this._mouseLastMoveTime = Date.now();\n    }\n    _sendMouse(x, y, mask) {\n      if (this._rfbConnectionState !== 'connected') {\n        return;\n      }\n      if (this._viewOnly) {\n        return;\n      } // View only, skip mouse events\n\n      RFB.messages.pointerEvent(this._sock, this._display.absX(x), this._display.absY(y), mask);\n    }\n    _handleWheel(ev) {\n      if (this._rfbConnectionState !== 'connected') {\n        return;\n      }\n      if (this._viewOnly) {\n        return;\n      } // View only, skip mouse events\n\n      ev.stopPropagation();\n      ev.preventDefault();\n      let pos = (0, _element.clientToElement)(ev.clientX, ev.clientY, this._canvas);\n      let dX = ev.deltaX;\n      let dY = ev.deltaY;\n\n      // Pixel units unless it's non-zero.\n      // Note that if deltamode is line or page won't matter since we aren't\n      // sending the mouse wheel delta to the server anyway.\n      // The difference between pixel and line can be important however since\n      // we have a threshold that can be smaller than the line height.\n      if (ev.deltaMode !== 0) {\n        dX *= WHEEL_LINE_HEIGHT;\n        dY *= WHEEL_LINE_HEIGHT;\n      }\n\n      // Mouse wheel events are sent in steps over VNC. This means that the VNC\n      // protocol can't handle a wheel event with specific distance or speed.\n      // Therefor, if we get a lot of small mouse wheel events we combine them.\n      this._accumulatedWheelDeltaX += dX;\n      this._accumulatedWheelDeltaY += dY;\n\n      // Generate a mouse wheel step event when the accumulated delta\n      // for one of the axes is large enough.\n      if (Math.abs(this._accumulatedWheelDeltaX) >= WHEEL_STEP) {\n        if (this._accumulatedWheelDeltaX < 0) {\n          this._handleMouseButton(pos.x, pos.y, true, 1 << 5);\n          this._handleMouseButton(pos.x, pos.y, false, 1 << 5);\n        } else if (this._accumulatedWheelDeltaX > 0) {\n          this._handleMouseButton(pos.x, pos.y, true, 1 << 6);\n          this._handleMouseButton(pos.x, pos.y, false, 1 << 6);\n        }\n        this._accumulatedWheelDeltaX = 0;\n      }\n      if (Math.abs(this._accumulatedWheelDeltaY) >= WHEEL_STEP) {\n        if (this._accumulatedWheelDeltaY < 0) {\n          this._handleMouseButton(pos.x, pos.y, true, 1 << 3);\n          this._handleMouseButton(pos.x, pos.y, false, 1 << 3);\n        } else if (this._accumulatedWheelDeltaY > 0) {\n          this._handleMouseButton(pos.x, pos.y, true, 1 << 4);\n          this._handleMouseButton(pos.x, pos.y, false, 1 << 4);\n        }\n        this._accumulatedWheelDeltaY = 0;\n      }\n    }\n    _fakeMouseMove(ev, elementX, elementY) {\n      this._handleMouseMove(elementX, elementY);\n      this._cursor.move(ev.detail.clientX, ev.detail.clientY);\n    }\n    _handleTapEvent(ev, bmask) {\n      let pos = (0, _element.clientToElement)(ev.detail.clientX, ev.detail.clientY, this._canvas);\n\n      // If the user quickly taps multiple times we assume they meant to\n      // hit the same spot, so slightly adjust coordinates\n\n      if (this._gestureLastTapTime !== null && Date.now() - this._gestureLastTapTime < DOUBLE_TAP_TIMEOUT && this._gestureFirstDoubleTapEv.detail.type === ev.detail.type) {\n        let dx = this._gestureFirstDoubleTapEv.detail.clientX - ev.detail.clientX;\n        let dy = this._gestureFirstDoubleTapEv.detail.clientY - ev.detail.clientY;\n        let distance = Math.hypot(dx, dy);\n        if (distance < DOUBLE_TAP_THRESHOLD) {\n          pos = (0, _element.clientToElement)(this._gestureFirstDoubleTapEv.detail.clientX, this._gestureFirstDoubleTapEv.detail.clientY, this._canvas);\n        } else {\n          this._gestureFirstDoubleTapEv = ev;\n        }\n      } else {\n        this._gestureFirstDoubleTapEv = ev;\n      }\n      this._gestureLastTapTime = Date.now();\n      this._fakeMouseMove(this._gestureFirstDoubleTapEv, pos.x, pos.y);\n      this._handleMouseButton(pos.x, pos.y, true, bmask);\n      this._handleMouseButton(pos.x, pos.y, false, bmask);\n    }\n    _handleGesture(ev) {\n      let magnitude;\n      let pos = (0, _element.clientToElement)(ev.detail.clientX, ev.detail.clientY, this._canvas);\n      switch (ev.type) {\n        case 'gesturestart':\n          switch (ev.detail.type) {\n            case 'onetap':\n              this._handleTapEvent(ev, 0x1);\n              break;\n            case 'twotap':\n              this._handleTapEvent(ev, 0x4);\n              break;\n            case 'threetap':\n              this._handleTapEvent(ev, 0x2);\n              break;\n            case 'drag':\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              this._handleMouseButton(pos.x, pos.y, true, 0x1);\n              break;\n            case 'longpress':\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              this._handleMouseButton(pos.x, pos.y, true, 0x4);\n              break;\n            case 'twodrag':\n              this._gestureLastMagnitudeX = ev.detail.magnitudeX;\n              this._gestureLastMagnitudeY = ev.detail.magnitudeY;\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              break;\n            case 'pinch':\n              this._gestureLastMagnitudeX = Math.hypot(ev.detail.magnitudeX, ev.detail.magnitudeY);\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              break;\n          }\n          break;\n        case 'gesturemove':\n          switch (ev.detail.type) {\n            case 'onetap':\n            case 'twotap':\n            case 'threetap':\n              break;\n            case 'drag':\n            case 'longpress':\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              break;\n            case 'twodrag':\n              // Always scroll in the same position.\n              // We don't know if the mouse was moved so we need to move it\n              // every update.\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              while (ev.detail.magnitudeY - this._gestureLastMagnitudeY > GESTURE_SCRLSENS) {\n                this._handleMouseButton(pos.x, pos.y, true, 0x8);\n                this._handleMouseButton(pos.x, pos.y, false, 0x8);\n                this._gestureLastMagnitudeY += GESTURE_SCRLSENS;\n              }\n              while (ev.detail.magnitudeY - this._gestureLastMagnitudeY < -GESTURE_SCRLSENS) {\n                this._handleMouseButton(pos.x, pos.y, true, 0x10);\n                this._handleMouseButton(pos.x, pos.y, false, 0x10);\n                this._gestureLastMagnitudeY -= GESTURE_SCRLSENS;\n              }\n              while (ev.detail.magnitudeX - this._gestureLastMagnitudeX > GESTURE_SCRLSENS) {\n                this._handleMouseButton(pos.x, pos.y, true, 0x20);\n                this._handleMouseButton(pos.x, pos.y, false, 0x20);\n                this._gestureLastMagnitudeX += GESTURE_SCRLSENS;\n              }\n              while (ev.detail.magnitudeX - this._gestureLastMagnitudeX < -GESTURE_SCRLSENS) {\n                this._handleMouseButton(pos.x, pos.y, true, 0x40);\n                this._handleMouseButton(pos.x, pos.y, false, 0x40);\n                this._gestureLastMagnitudeX -= GESTURE_SCRLSENS;\n              }\n              break;\n            case 'pinch':\n              // Always scroll in the same position.\n              // We don't know if the mouse was moved so we need to move it\n              // every update.\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              magnitude = Math.hypot(ev.detail.magnitudeX, ev.detail.magnitudeY);\n              if (Math.abs(magnitude - this._gestureLastMagnitudeX) > GESTURE_ZOOMSENS) {\n                this._handleKeyEvent(_keysym.default.XK_Control_L, \"ControlLeft\", true);\n                while (magnitude - this._gestureLastMagnitudeX > GESTURE_ZOOMSENS) {\n                  this._handleMouseButton(pos.x, pos.y, true, 0x8);\n                  this._handleMouseButton(pos.x, pos.y, false, 0x8);\n                  this._gestureLastMagnitudeX += GESTURE_ZOOMSENS;\n                }\n                while (magnitude - this._gestureLastMagnitudeX < -GESTURE_ZOOMSENS) {\n                  this._handleMouseButton(pos.x, pos.y, true, 0x10);\n                  this._handleMouseButton(pos.x, pos.y, false, 0x10);\n                  this._gestureLastMagnitudeX -= GESTURE_ZOOMSENS;\n                }\n              }\n              this._handleKeyEvent(_keysym.default.XK_Control_L, \"ControlLeft\", false);\n              break;\n          }\n          break;\n        case 'gestureend':\n          switch (ev.detail.type) {\n            case 'onetap':\n            case 'twotap':\n            case 'threetap':\n            case 'pinch':\n            case 'twodrag':\n              break;\n            case 'drag':\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              this._handleMouseButton(pos.x, pos.y, false, 0x1);\n              break;\n            case 'longpress':\n              this._fakeMouseMove(ev, pos.x, pos.y);\n              this._handleMouseButton(pos.x, pos.y, false, 0x4);\n              break;\n          }\n          break;\n      }\n    }\n\n    // Message Handlers\n\n    _negotiateProtocolVersion() {\n      if (this._sock.rQwait(\"version\", 12)) {\n        return false;\n      }\n      const sversion = this._sock.rQshiftStr(12).substr(4, 7);\n      Log.Info(\"Server ProtocolVersion: \" + sversion);\n      let isRepeater = 0;\n      switch (sversion) {\n        case \"000.000\":\n          // UltraVNC repeater\n          isRepeater = 1;\n          break;\n        case \"003.003\":\n        case \"003.006\": // UltraVNC\n        case \"003.889\":\n          // Apple Remote Desktop\n          this._rfbVersion = 3.3;\n          break;\n        case \"003.007\":\n          this._rfbVersion = 3.7;\n          break;\n        case \"003.008\":\n        case \"004.000\": // Intel AMT KVM\n        case \"004.001\": // RealVNC 4.6\n        case \"005.000\":\n          // RealVNC 5.3\n          this._rfbVersion = 3.8;\n          break;\n        default:\n          return this._fail(\"Invalid server version \" + sversion);\n      }\n      if (isRepeater) {\n        let repeaterID = \"ID:\" + this._repeaterID;\n        while (repeaterID.length < 250) {\n          repeaterID += \"\\0\";\n        }\n        this._sock.sendString(repeaterID);\n        return true;\n      }\n      if (this._rfbVersion > this._rfbMaxVersion) {\n        this._rfbVersion = this._rfbMaxVersion;\n      }\n      const cversion = \"00\" + parseInt(this._rfbVersion, 10) + \".00\" + this._rfbVersion * 10 % 10;\n      this._sock.sendString(\"RFB \" + cversion + \"\\n\");\n      Log.Debug('Sent ProtocolVersion: ' + cversion);\n      this._rfbInitState = 'Security';\n    }\n    _negotiateSecurity() {\n      if (this._rfbVersion >= 3.7) {\n        // Server sends supported list, client decides\n        const numTypes = this._sock.rQshift8();\n        if (this._sock.rQwait(\"security type\", numTypes, 1)) {\n          return false;\n        }\n        if (numTypes === 0) {\n          this._rfbInitState = \"SecurityReason\";\n          this._securityContext = \"no security types\";\n          this._securityStatus = 1;\n          return this._initMsg();\n        }\n        const types = this._sock.rQshiftBytes(numTypes);\n        Log.Debug(\"Server security types: \" + types);\n\n        // Look for each auth in preferred order\n        if (types.includes(1)) {\n          this._rfbAuthScheme = 1; // None\n        } else if (types.includes(22)) {\n          this._rfbAuthScheme = 22; // XVP\n        } else if (types.includes(16)) {\n          this._rfbAuthScheme = 16; // Tight\n        } else if (types.includes(2)) {\n          this._rfbAuthScheme = 2; // VNC Auth\n        } else if (types.includes(19)) {\n          this._rfbAuthScheme = 19; // VeNCrypt Auth\n        } else {\n          return this._fail(\"Unsupported security types (types: \" + types + \")\");\n        }\n        this._sock.send([this._rfbAuthScheme]);\n      } else {\n        // Server decides\n        if (this._sock.rQwait(\"security scheme\", 4)) {\n          return false;\n        }\n        this._rfbAuthScheme = this._sock.rQshift32();\n        if (this._rfbAuthScheme == 0) {\n          this._rfbInitState = \"SecurityReason\";\n          this._securityContext = \"authentication scheme\";\n          this._securityStatus = 1;\n          return this._initMsg();\n        }\n      }\n      this._rfbInitState = 'Authentication';\n      Log.Debug('Authenticating using scheme: ' + this._rfbAuthScheme);\n      return this._initMsg(); // jump to authentication\n    }\n    _handleSecurityReason() {\n      if (this._sock.rQwait(\"reason length\", 4)) {\n        return false;\n      }\n      const strlen = this._sock.rQshift32();\n      let reason = \"\";\n      if (strlen > 0) {\n        if (this._sock.rQwait(\"reason\", strlen, 4)) {\n          return false;\n        }\n        reason = this._sock.rQshiftStr(strlen);\n      }\n      if (reason !== \"\") {\n        this.dispatchEvent(new CustomEvent(\"securityfailure\", {\n          detail: {\n            status: this._securityStatus,\n            reason: reason\n          }\n        }));\n        return this._fail(\"Security negotiation failed on \" + this._securityContext + \" (reason: \" + reason + \")\");\n      } else {\n        this.dispatchEvent(new CustomEvent(\"securityfailure\", {\n          detail: {\n            status: this._securityStatus\n          }\n        }));\n        return this._fail(\"Security negotiation failed on \" + this._securityContext);\n      }\n    }\n\n    // authentication\n    _negotiateXvpAuth() {\n      if (this._rfbCredentials.username === undefined || this._rfbCredentials.password === undefined || this._rfbCredentials.target === undefined) {\n        this.dispatchEvent(new CustomEvent(\"credentialsrequired\", {\n          detail: {\n            types: [\"username\", \"password\", \"target\"]\n          }\n        }));\n        return false;\n      }\n      const xvpAuthStr = String.fromCharCode(this._rfbCredentials.username.length) + String.fromCharCode(this._rfbCredentials.target.length) + this._rfbCredentials.username + this._rfbCredentials.target;\n      this._sock.sendString(xvpAuthStr);\n      this._rfbAuthScheme = 2;\n      return this._negotiateAuthentication();\n    }\n\n    // VeNCrypt authentication, currently only supports version 0.2 and only Plain subtype\n    _negotiateVeNCryptAuth() {\n      // waiting for VeNCrypt version\n      if (this._rfbVeNCryptState == 0) {\n        if (this._sock.rQwait(\"vencrypt version\", 2)) {\n          return false;\n        }\n        const major = this._sock.rQshift8();\n        const minor = this._sock.rQshift8();\n        if (!(major == 0 && minor == 2)) {\n          return this._fail(\"Unsupported VeNCrypt version \" + major + \".\" + minor);\n        }\n        this._sock.send([0, 2]);\n        this._rfbVeNCryptState = 1;\n      }\n\n      // waiting for ACK\n      if (this._rfbVeNCryptState == 1) {\n        if (this._sock.rQwait(\"vencrypt ack\", 1)) {\n          return false;\n        }\n        const res = this._sock.rQshift8();\n        if (res != 0) {\n          return this._fail(\"VeNCrypt failure \" + res);\n        }\n        this._rfbVeNCryptState = 2;\n      }\n      // must fall through here (i.e. no \"else if\"), beacause we may have already received\n      // the subtypes length and won't be called again\n\n      if (this._rfbVeNCryptState == 2) {\n        // waiting for subtypes length\n        if (this._sock.rQwait(\"vencrypt subtypes length\", 1)) {\n          return false;\n        }\n        const subtypesLength = this._sock.rQshift8();\n        if (subtypesLength < 1) {\n          return this._fail(\"VeNCrypt subtypes empty\");\n        }\n        this._rfbVeNCryptSubtypesLength = subtypesLength;\n        this._rfbVeNCryptState = 3;\n      }\n\n      // waiting for subtypes list\n      if (this._rfbVeNCryptState == 3) {\n        if (this._sock.rQwait(\"vencrypt subtypes\", 4 * this._rfbVeNCryptSubtypesLength)) {\n          return false;\n        }\n        const subtypes = [];\n        for (let i = 0; i < this._rfbVeNCryptSubtypesLength; i++) {\n          subtypes.push(this._sock.rQshift32());\n        }\n\n        // 256 = Plain subtype\n        if (subtypes.indexOf(256) != -1) {\n          // 0x100 = 256\n          this._sock.send([0, 0, 1, 0]);\n          this._rfbVeNCryptState = 4;\n        } else {\n          return this._fail(\"VeNCrypt Plain subtype not offered by server\");\n        }\n      }\n\n      // negotiated Plain subtype, server waits for password\n      if (this._rfbVeNCryptState == 4) {\n        if (this._rfbCredentials.username === undefined || this._rfbCredentials.password === undefined) {\n          this.dispatchEvent(new CustomEvent(\"credentialsrequired\", {\n            detail: {\n              types: [\"username\", \"password\"]\n            }\n          }));\n          return false;\n        }\n        const user = (0, _strings.encodeUTF8)(this._rfbCredentials.username);\n        const pass = (0, _strings.encodeUTF8)(this._rfbCredentials.password);\n        this._sock.send([user.length >> 24 & 0xFF, user.length >> 16 & 0xFF, user.legnth >> 8 & 0xFF, user.length & 0xFF]);\n        this._sock.send([pass.length >> 24 & 0xFF, pass.length >> 16 & 0xFF, pass.legnth >> 8 & 0xFF, pass.length & 0xFF]);\n        this._sock.sendString(user);\n        this._sock.sendString(pass);\n        this._rfbInitState = \"SecurityResult\";\n        return true;\n      }\n    }\n    _negotiateStdVNCAuth() {\n      if (this._sock.rQwait(\"auth challenge\", 16)) {\n        return false;\n      }\n      if (this._rfbCredentials.password === undefined) {\n        this.dispatchEvent(new CustomEvent(\"credentialsrequired\", {\n          detail: {\n            types: [\"password\"]\n          }\n        }));\n        return false;\n      }\n\n      // TODO(directxman12): make genDES not require an Array\n      const challenge = Array.prototype.slice.call(this._sock.rQshiftBytes(16));\n      const response = RFB.genDES(this._rfbCredentials.password, challenge);\n      this._sock.send(response);\n      this._rfbInitState = \"SecurityResult\";\n      return true;\n    }\n    _negotiateTightUnixAuth() {\n      if (this._rfbCredentials.username === undefined || this._rfbCredentials.password === undefined) {\n        this.dispatchEvent(new CustomEvent(\"credentialsrequired\", {\n          detail: {\n            types: [\"username\", \"password\"]\n          }\n        }));\n        return false;\n      }\n      this._sock.send([0, 0, 0, this._rfbCredentials.username.length]);\n      this._sock.send([0, 0, 0, this._rfbCredentials.password.length]);\n      this._sock.sendString(this._rfbCredentials.username);\n      this._sock.sendString(this._rfbCredentials.password);\n      this._rfbInitState = \"SecurityResult\";\n      return true;\n    }\n    _negotiateTightTunnels(numTunnels) {\n      const clientSupportedTunnelTypes = {\n        0: {\n          vendor: 'TGHT',\n          signature: 'NOTUNNEL'\n        }\n      };\n      const serverSupportedTunnelTypes = {};\n      // receive tunnel capabilities\n      for (let i = 0; i < numTunnels; i++) {\n        const capCode = this._sock.rQshift32();\n        const capVendor = this._sock.rQshiftStr(4);\n        const capSignature = this._sock.rQshiftStr(8);\n        serverSupportedTunnelTypes[capCode] = {\n          vendor: capVendor,\n          signature: capSignature\n        };\n      }\n      Log.Debug(\"Server Tight tunnel types: \" + serverSupportedTunnelTypes);\n\n      // Siemens touch panels have a VNC server that supports NOTUNNEL,\n      // but forgets to advertise it. Try to detect such servers by\n      // looking for their custom tunnel type.\n      if (serverSupportedTunnelTypes[1] && serverSupportedTunnelTypes[1].vendor === \"SICR\" && serverSupportedTunnelTypes[1].signature === \"SCHANNEL\") {\n        Log.Debug(\"Detected Siemens server. Assuming NOTUNNEL support.\");\n        serverSupportedTunnelTypes[0] = {\n          vendor: 'TGHT',\n          signature: 'NOTUNNEL'\n        };\n      }\n\n      // choose the notunnel type\n      if (serverSupportedTunnelTypes[0]) {\n        if (serverSupportedTunnelTypes[0].vendor != clientSupportedTunnelTypes[0].vendor || serverSupportedTunnelTypes[0].signature != clientSupportedTunnelTypes[0].signature) {\n          return this._fail(\"Client's tunnel type had the incorrect \" + \"vendor or signature\");\n        }\n        Log.Debug(\"Selected tunnel type: \" + clientSupportedTunnelTypes[0]);\n        this._sock.send([0, 0, 0, 0]); // use NOTUNNEL\n        return false; // wait until we receive the sub auth count to continue\n      } else {\n        return this._fail(\"Server wanted tunnels, but doesn't support \" + \"the notunnel type\");\n      }\n    }\n    _negotiateTightAuth() {\n      if (!this._rfbTightVNC) {\n        // first pass, do the tunnel negotiation\n        if (this._sock.rQwait(\"num tunnels\", 4)) {\n          return false;\n        }\n        const numTunnels = this._sock.rQshift32();\n        if (numTunnels > 0 && this._sock.rQwait(\"tunnel capabilities\", 16 * numTunnels, 4)) {\n          return false;\n        }\n        this._rfbTightVNC = true;\n        if (numTunnels > 0) {\n          this._negotiateTightTunnels(numTunnels);\n          return false; // wait until we receive the sub auth to continue\n        }\n      }\n\n      // second pass, do the sub-auth negotiation\n      if (this._sock.rQwait(\"sub auth count\", 4)) {\n        return false;\n      }\n      const subAuthCount = this._sock.rQshift32();\n      if (subAuthCount === 0) {\n        // empty sub-auth list received means 'no auth' subtype selected\n        this._rfbInitState = 'SecurityResult';\n        return true;\n      }\n      if (this._sock.rQwait(\"sub auth capabilities\", 16 * subAuthCount, 4)) {\n        return false;\n      }\n      const clientSupportedTypes = {\n        'STDVNOAUTH__': 1,\n        'STDVVNCAUTH_': 2,\n        'TGHTULGNAUTH': 129\n      };\n      const serverSupportedTypes = [];\n      for (let i = 0; i < subAuthCount; i++) {\n        this._sock.rQshift32(); // capNum\n        const capabilities = this._sock.rQshiftStr(12);\n        serverSupportedTypes.push(capabilities);\n      }\n      Log.Debug(\"Server Tight authentication types: \" + serverSupportedTypes);\n      for (let authType in clientSupportedTypes) {\n        if (serverSupportedTypes.indexOf(authType) != -1) {\n          this._sock.send([0, 0, 0, clientSupportedTypes[authType]]);\n          Log.Debug(\"Selected authentication type: \" + authType);\n          switch (authType) {\n            case 'STDVNOAUTH__':\n              // no auth\n              this._rfbInitState = 'SecurityResult';\n              return true;\n            case 'STDVVNCAUTH_':\n              // VNC auth\n              this._rfbAuthScheme = 2;\n              return this._initMsg();\n            case 'TGHTULGNAUTH':\n              // UNIX auth\n              this._rfbAuthScheme = 129;\n              return this._initMsg();\n            default:\n              return this._fail(\"Unsupported tiny auth scheme \" + \"(scheme: \" + authType + \")\");\n          }\n        }\n      }\n      return this._fail(\"No supported sub-auth types!\");\n    }\n    _negotiateAuthentication() {\n      switch (this._rfbAuthScheme) {\n        case 1:\n          // no auth\n          if (this._rfbVersion >= 3.8) {\n            this._rfbInitState = 'SecurityResult';\n            return true;\n          }\n          this._rfbInitState = 'ClientInitialisation';\n          return this._initMsg();\n        case 22:\n          // XVP auth\n          return this._negotiateXvpAuth();\n        case 2:\n          // VNC authentication\n          return this._negotiateStdVNCAuth();\n        case 16:\n          // TightVNC Security Type\n          return this._negotiateTightAuth();\n        case 19:\n          // VeNCrypt Security Type\n          return this._negotiateVeNCryptAuth();\n        case 129:\n          // TightVNC UNIX Security Type\n          return this._negotiateTightUnixAuth();\n        default:\n          return this._fail(\"Unsupported auth scheme (scheme: \" + this._rfbAuthScheme + \")\");\n      }\n    }\n    _handleSecurityResult() {\n      if (this._sock.rQwait('VNC auth response ', 4)) {\n        return false;\n      }\n      const status = this._sock.rQshift32();\n      if (status === 0) {\n        // OK\n        this._rfbInitState = 'ClientInitialisation';\n        Log.Debug('Authentication OK');\n        return this._initMsg();\n      } else {\n        if (this._rfbVersion >= 3.8) {\n          this._rfbInitState = \"SecurityReason\";\n          this._securityContext = \"security result\";\n          this._securityStatus = status;\n          return this._initMsg();\n        } else {\n          this.dispatchEvent(new CustomEvent(\"securityfailure\", {\n            detail: {\n              status: status\n            }\n          }));\n          return this._fail(\"Security handshake failed\");\n        }\n      }\n    }\n    _negotiateServerInit() {\n      if (this._sock.rQwait(\"server initialization\", 24)) {\n        return false;\n      }\n\n      /* Screen size */\n      const width = this._sock.rQshift16();\n      const height = this._sock.rQshift16();\n\n      /* PIXEL_FORMAT */\n      const bpp = this._sock.rQshift8();\n      const depth = this._sock.rQshift8();\n      const bigEndian = this._sock.rQshift8();\n      const trueColor = this._sock.rQshift8();\n      const redMax = this._sock.rQshift16();\n      const greenMax = this._sock.rQshift16();\n      const blueMax = this._sock.rQshift16();\n      const redShift = this._sock.rQshift8();\n      const greenShift = this._sock.rQshift8();\n      const blueShift = this._sock.rQshift8();\n      this._sock.rQskipBytes(3); // padding\n\n      // NB(directxman12): we don't want to call any callbacks or print messages until\n      //                   *after* we're past the point where we could backtrack\n\n      /* Connection name/title */\n      const nameLength = this._sock.rQshift32();\n      if (this._sock.rQwait('server init name', nameLength, 24)) {\n        return false;\n      }\n      let name = this._sock.rQshiftStr(nameLength);\n      name = (0, _strings.decodeUTF8)(name, true);\n      if (this._rfbTightVNC) {\n        if (this._sock.rQwait('TightVNC extended server init header', 8, 24 + nameLength)) {\n          return false;\n        }\n        // In TightVNC mode, ServerInit message is extended\n        const numServerMessages = this._sock.rQshift16();\n        const numClientMessages = this._sock.rQshift16();\n        const numEncodings = this._sock.rQshift16();\n        this._sock.rQskipBytes(2); // padding\n\n        const totalMessagesLength = (numServerMessages + numClientMessages + numEncodings) * 16;\n        if (this._sock.rQwait('TightVNC extended server init header', totalMessagesLength, 32 + nameLength)) {\n          return false;\n        }\n\n        // we don't actually do anything with the capability information that TIGHT sends,\n        // so we just skip the all of this.\n\n        // TIGHT server message capabilities\n        this._sock.rQskipBytes(16 * numServerMessages);\n\n        // TIGHT client message capabilities\n        this._sock.rQskipBytes(16 * numClientMessages);\n\n        // TIGHT encoding capabilities\n        this._sock.rQskipBytes(16 * numEncodings);\n      }\n\n      // NB(directxman12): these are down here so that we don't run them multiple times\n      //                   if we backtrack\n      Log.Info(\"Screen: \" + width + \"x\" + height + \", bpp: \" + bpp + \", depth: \" + depth + \", bigEndian: \" + bigEndian + \", trueColor: \" + trueColor + \", redMax: \" + redMax + \", greenMax: \" + greenMax + \", blueMax: \" + blueMax + \", redShift: \" + redShift + \", greenShift: \" + greenShift + \", blueShift: \" + blueShift);\n\n      // we're past the point where we could backtrack, so it's safe to call this\n      this._setDesktopName(name);\n      this._resize(width, height);\n      if (!this._viewOnly) {\n        this._keyboard.grab();\n      }\n      this._fbDepth = 24;\n      if (this._fbName === \"Intel(r) AMT KVM\") {\n        Log.Warn(\"Intel AMT KVM only supports 8/16 bit depths. Using low color mode.\");\n        this._fbDepth = 8;\n      }\n      RFB.messages.pixelFormat(this._sock, this._fbDepth, true);\n      this._sendEncodings();\n      RFB.messages.fbUpdateRequest(this._sock, false, 0, 0, this._fbWidth, this._fbHeight);\n      this._updateConnectionState('connected');\n      return true;\n    }\n    _sendEncodings() {\n      const encs = [];\n\n      // In preference order\n      encs.push(_encodings.encodings.encodingCopyRect);\n      // Only supported with full depth support\n      if (this._fbDepth == 24) {\n        encs.push(_encodings.encodings.encodingTight);\n        encs.push(_encodings.encodings.encodingTightPNG);\n        encs.push(_encodings.encodings.encodingHextile);\n        encs.push(_encodings.encodings.encodingRRE);\n      }\n      encs.push(_encodings.encodings.encodingRaw);\n\n      // Psuedo-encoding settings\n      encs.push(_encodings.encodings.pseudoEncodingQualityLevel0 + this._qualityLevel);\n      encs.push(_encodings.encodings.pseudoEncodingCompressLevel0 + this._compressionLevel);\n      encs.push(_encodings.encodings.pseudoEncodingDesktopSize);\n      encs.push(_encodings.encodings.pseudoEncodingLastRect);\n      encs.push(_encodings.encodings.pseudoEncodingQEMUExtendedKeyEvent);\n      encs.push(_encodings.encodings.pseudoEncodingExtendedDesktopSize);\n      encs.push(_encodings.encodings.pseudoEncodingXvp);\n      encs.push(_encodings.encodings.pseudoEncodingFence);\n      encs.push(_encodings.encodings.pseudoEncodingContinuousUpdates);\n      encs.push(_encodings.encodings.pseudoEncodingDesktopName);\n      encs.push(_encodings.encodings.pseudoEncodingExtendedClipboard);\n      if (this._fbDepth == 24) {\n        encs.push(_encodings.encodings.pseudoEncodingVMwareCursor);\n        encs.push(_encodings.encodings.pseudoEncodingCursor);\n      }\n      RFB.messages.clientEncodings(this._sock, encs);\n    }\n\n    /* RFB protocol initialization states:\n     *   ProtocolVersion\n     *   Security\n     *   Authentication\n     *   SecurityResult\n     *   ClientInitialization - not triggered by server message\n     *   ServerInitialization\n     */\n    _initMsg() {\n      switch (this._rfbInitState) {\n        case 'ProtocolVersion':\n          return this._negotiateProtocolVersion();\n        case 'Security':\n          return this._negotiateSecurity();\n        case 'Authentication':\n          return this._negotiateAuthentication();\n        case 'SecurityResult':\n          return this._handleSecurityResult();\n        case 'SecurityReason':\n          return this._handleSecurityReason();\n        case 'ClientInitialisation':\n          this._sock.send([this._shared ? 1 : 0]); // ClientInitialisation\n          this._rfbInitState = 'ServerInitialisation';\n          return true;\n        case 'ServerInitialisation':\n          return this._negotiateServerInit();\n        default:\n          return this._fail(\"Unknown init state (state: \" + this._rfbInitState + \")\");\n      }\n    }\n    _handleSetColourMapMsg() {\n      Log.Debug(\"SetColorMapEntries\");\n      return this._fail(\"Unexpected SetColorMapEntries message\");\n    }\n    _handleServerCutText() {\n      Log.Debug(\"ServerCutText\");\n      if (this._sock.rQwait(\"ServerCutText header\", 7, 1)) {\n        return false;\n      }\n      this._sock.rQskipBytes(3); // Padding\n\n      let length = this._sock.rQshift32();\n      length = (0, _int.toSigned32bit)(length);\n      if (this._sock.rQwait(\"ServerCutText content\", Math.abs(length), 8)) {\n        return false;\n      }\n      if (length >= 0) {\n        //Standard msg\n        const text = this._sock.rQshiftStr(length);\n        if (this._viewOnly) {\n          return true;\n        }\n        this.dispatchEvent(new CustomEvent(\"clipboard\", {\n          detail: {\n            text: text\n          }\n        }));\n      } else {\n        //Extended msg.\n        length = Math.abs(length);\n        const flags = this._sock.rQshift32();\n        let formats = flags & 0x0000FFFF;\n        let actions = flags & 0xFF000000;\n        let isCaps = !!(actions & extendedClipboardActionCaps);\n        if (isCaps) {\n          this._clipboardServerCapabilitiesFormats = {};\n          this._clipboardServerCapabilitiesActions = {};\n\n          // Update our server capabilities for Formats\n          for (let i = 0; i <= 15; i++) {\n            let index = 1 << i;\n\n            // Check if format flag is set.\n            if (formats & index) {\n              this._clipboardServerCapabilitiesFormats[index] = true;\n              // We don't send unsolicited clipboard, so we\n              // ignore the size\n              this._sock.rQshift32();\n            }\n          }\n\n          // Update our server capabilities for Actions\n          for (let i = 24; i <= 31; i++) {\n            let index = 1 << i;\n            this._clipboardServerCapabilitiesActions[index] = !!(actions & index);\n          }\n\n          /*  Caps handling done, send caps with the clients\n              capabilities set as a response */\n          let clientActions = [extendedClipboardActionCaps, extendedClipboardActionRequest, extendedClipboardActionPeek, extendedClipboardActionNotify, extendedClipboardActionProvide];\n          RFB.messages.extendedClipboardCaps(this._sock, clientActions, {\n            extendedClipboardFormatText: 0\n          });\n        } else if (actions === extendedClipboardActionRequest) {\n          if (this._viewOnly) {\n            return true;\n          }\n\n          // Check if server has told us it can handle Provide and there is clipboard data to send.\n          if (this._clipboardText != null && this._clipboardServerCapabilitiesActions[extendedClipboardActionProvide]) {\n            if (formats & extendedClipboardFormatText) {\n              RFB.messages.extendedClipboardProvide(this._sock, [extendedClipboardFormatText], [this._clipboardText]);\n            }\n          }\n        } else if (actions === extendedClipboardActionPeek) {\n          if (this._viewOnly) {\n            return true;\n          }\n          if (this._clipboardServerCapabilitiesActions[extendedClipboardActionNotify]) {\n            if (this._clipboardText != null) {\n              RFB.messages.extendedClipboardNotify(this._sock, [extendedClipboardFormatText]);\n            } else {\n              RFB.messages.extendedClipboardNotify(this._sock, []);\n            }\n          }\n        } else if (actions === extendedClipboardActionNotify) {\n          if (this._viewOnly) {\n            return true;\n          }\n          if (this._clipboardServerCapabilitiesActions[extendedClipboardActionRequest]) {\n            if (formats & extendedClipboardFormatText) {\n              RFB.messages.extendedClipboardRequest(this._sock, [extendedClipboardFormatText]);\n            }\n          }\n        } else if (actions === extendedClipboardActionProvide) {\n          if (this._viewOnly) {\n            return true;\n          }\n          if (!(formats & extendedClipboardFormatText)) {\n            return true;\n          }\n          // Ignore what we had in our clipboard client side.\n          this._clipboardText = null;\n\n          // FIXME: Should probably verify that this data was actually requested\n          let zlibStream = this._sock.rQshiftBytes(length - 4);\n          let streamInflator = new _inflator.default();\n          let textData = null;\n          streamInflator.setInput(zlibStream);\n          for (let i = 0; i <= 15; i++) {\n            let format = 1 << i;\n            if (formats & format) {\n              let size = 0x00;\n              let sizeArray = streamInflator.inflate(4);\n              size |= sizeArray[0] << 24;\n              size |= sizeArray[1] << 16;\n              size |= sizeArray[2] << 8;\n              size |= sizeArray[3];\n              let chunk = streamInflator.inflate(size);\n              if (format === extendedClipboardFormatText) {\n                textData = chunk;\n              }\n            }\n          }\n          streamInflator.setInput(null);\n          if (textData !== null) {\n            let tmpText = \"\";\n            for (let i = 0; i < textData.length; i++) {\n              tmpText += String.fromCharCode(textData[i]);\n            }\n            textData = tmpText;\n            textData = (0, _strings.decodeUTF8)(textData);\n            if (textData.length > 0 && \"\\0\" === textData.charAt(textData.length - 1)) {\n              textData = textData.slice(0, -1);\n            }\n            textData = textData.replace(\"\\r\\n\", \"\\n\");\n            this.dispatchEvent(new CustomEvent(\"clipboard\", {\n              detail: {\n                text: textData\n              }\n            }));\n          }\n        } else {\n          return this._fail(\"Unexpected action in extended clipboard message: \" + actions);\n        }\n      }\n      return true;\n    }\n    _handleServerFenceMsg() {\n      if (this._sock.rQwait(\"ServerFence header\", 8, 1)) {\n        return false;\n      }\n      this._sock.rQskipBytes(3); // Padding\n      let flags = this._sock.rQshift32();\n      let length = this._sock.rQshift8();\n      if (this._sock.rQwait(\"ServerFence payload\", length, 9)) {\n        return false;\n      }\n      if (length > 64) {\n        Log.Warn(\"Bad payload length (\" + length + \") in fence response\");\n        length = 64;\n      }\n      const payload = this._sock.rQshiftStr(length);\n      this._supportsFence = true;\n\n      /*\n       * Fence flags\n       *\n       *  (1<<0)  - BlockBefore\n       *  (1<<1)  - BlockAfter\n       *  (1<<2)  - SyncNext\n       *  (1<<31) - Request\n       */\n\n      if (!(flags & 1 << 31)) {\n        return this._fail(\"Unexpected fence response\");\n      }\n\n      // Filter out unsupported flags\n      // FIXME: support syncNext\n      flags &= 1 << 0 | 1 << 1;\n\n      // BlockBefore and BlockAfter are automatically handled by\n      // the fact that we process each incoming message\n      // synchronuosly.\n      RFB.messages.clientFence(this._sock, flags, payload);\n      return true;\n    }\n    _handleXvpMsg() {\n      if (this._sock.rQwait(\"XVP version and message\", 3, 1)) {\n        return false;\n      }\n      this._sock.rQskipBytes(1); // Padding\n      const xvpVer = this._sock.rQshift8();\n      const xvpMsg = this._sock.rQshift8();\n      switch (xvpMsg) {\n        case 0:\n          // XVP_FAIL\n          Log.Error(\"XVP Operation Failed\");\n          break;\n        case 1:\n          // XVP_INIT\n          this._rfbXvpVer = xvpVer;\n          Log.Info(\"XVP extensions enabled (version \" + this._rfbXvpVer + \")\");\n          this._setCapability(\"power\", true);\n          break;\n        default:\n          this._fail(\"Illegal server XVP message (msg: \" + xvpMsg + \")\");\n          break;\n      }\n      return true;\n    }\n    _normalMsg() {\n      let msgType;\n      if (this._FBU.rects > 0) {\n        msgType = 0;\n      } else {\n        msgType = this._sock.rQshift8();\n      }\n      let first, ret;\n      switch (msgType) {\n        case 0:\n          // FramebufferUpdate\n          ret = this._framebufferUpdate();\n          if (ret && !this._enabledContinuousUpdates) {\n            RFB.messages.fbUpdateRequest(this._sock, true, 0, 0, this._fbWidth, this._fbHeight);\n          }\n          return ret;\n        case 1:\n          // SetColorMapEntries\n          return this._handleSetColourMapMsg();\n        case 2:\n          // Bell\n          Log.Debug(\"Bell\");\n          this.dispatchEvent(new CustomEvent(\"bell\", {\n            detail: {}\n          }));\n          return true;\n        case 3:\n          // ServerCutText\n          return this._handleServerCutText();\n        case 150:\n          // EndOfContinuousUpdates\n          first = !this._supportsContinuousUpdates;\n          this._supportsContinuousUpdates = true;\n          this._enabledContinuousUpdates = false;\n          if (first) {\n            this._enabledContinuousUpdates = true;\n            this._updateContinuousUpdates();\n            Log.Info(\"Enabling continuous updates.\");\n          } else {\n            // FIXME: We need to send a framebufferupdaterequest here\n            // if we add support for turning off continuous updates\n          }\n          return true;\n        case 248:\n          // ServerFence\n          return this._handleServerFenceMsg();\n        case 250:\n          // XVP\n          return this._handleXvpMsg();\n        default:\n          this._fail(\"Unexpected server message (type \" + msgType + \")\");\n          Log.Debug(\"sock.rQslice(0, 30): \" + this._sock.rQslice(0, 30));\n          return true;\n      }\n    }\n    _onFlush() {\n      this._flushing = false;\n      // Resume processing\n      if (this._sock.rQlen > 0) {\n        this._handleMessage();\n      }\n    }\n    _framebufferUpdate() {\n      if (this._FBU.rects === 0) {\n        if (this._sock.rQwait(\"FBU header\", 3, 1)) {\n          return false;\n        }\n        this._sock.rQskipBytes(1); // Padding\n        this._FBU.rects = this._sock.rQshift16();\n\n        // Make sure the previous frame is fully rendered first\n        // to avoid building up an excessive queue\n        if (this._display.pending()) {\n          this._flushing = true;\n          this._display.flush();\n          return false;\n        }\n      }\n      while (this._FBU.rects > 0) {\n        if (this._FBU.encoding === null) {\n          if (this._sock.rQwait(\"rect header\", 12)) {\n            return false;\n          }\n          /* New FramebufferUpdate */\n\n          const hdr = this._sock.rQshiftBytes(12);\n          this._FBU.x = (hdr[0] << 8) + hdr[1];\n          this._FBU.y = (hdr[2] << 8) + hdr[3];\n          this._FBU.width = (hdr[4] << 8) + hdr[5];\n          this._FBU.height = (hdr[6] << 8) + hdr[7];\n          this._FBU.encoding = parseInt((hdr[8] << 24) + (hdr[9] << 16) + (hdr[10] << 8) + hdr[11], 10);\n        }\n        if (!this._handleRect()) {\n          return false;\n        }\n        this._FBU.rects--;\n        this._FBU.encoding = null;\n      }\n      this._display.flip();\n      return true; // We finished this FBU\n    }\n    _handleRect() {\n      switch (this._FBU.encoding) {\n        case _encodings.encodings.pseudoEncodingLastRect:\n          this._FBU.rects = 1; // Will be decreased when we return\n          return true;\n        case _encodings.encodings.pseudoEncodingVMwareCursor:\n          return this._handleVMwareCursor();\n        case _encodings.encodings.pseudoEncodingCursor:\n          return this._handleCursor();\n        case _encodings.encodings.pseudoEncodingQEMUExtendedKeyEvent:\n          this._qemuExtKeyEventSupported = true;\n          return true;\n        case _encodings.encodings.pseudoEncodingDesktopName:\n          return this._handleDesktopName();\n        case _encodings.encodings.pseudoEncodingDesktopSize:\n          this._resize(this._FBU.width, this._FBU.height);\n          return true;\n        case _encodings.encodings.pseudoEncodingExtendedDesktopSize:\n          return this._handleExtendedDesktopSize();\n        default:\n          return this._handleDataRect();\n      }\n    }\n    _handleVMwareCursor() {\n      const hotx = this._FBU.x; // hotspot-x\n      const hoty = this._FBU.y; // hotspot-y\n      const w = this._FBU.width;\n      const h = this._FBU.height;\n      if (this._sock.rQwait(\"VMware cursor encoding\", 1)) {\n        return false;\n      }\n      const cursorType = this._sock.rQshift8();\n      this._sock.rQshift8(); //Padding\n\n      let rgba;\n      const bytesPerPixel = 4;\n\n      //Classic cursor\n      if (cursorType == 0) {\n        //Used to filter away unimportant bits.\n        //OR is used for correct conversion in js.\n        const PIXEL_MASK = 0xffffff00 | 0;\n        rgba = new Array(w * h * bytesPerPixel);\n        if (this._sock.rQwait(\"VMware cursor classic encoding\", w * h * bytesPerPixel * 2, 2)) {\n          return false;\n        }\n        let andMask = new Array(w * h);\n        for (let pixel = 0; pixel < w * h; pixel++) {\n          andMask[pixel] = this._sock.rQshift32();\n        }\n        let xorMask = new Array(w * h);\n        for (let pixel = 0; pixel < w * h; pixel++) {\n          xorMask[pixel] = this._sock.rQshift32();\n        }\n        for (let pixel = 0; pixel < w * h; pixel++) {\n          if (andMask[pixel] == 0) {\n            //Fully opaque pixel\n            let bgr = xorMask[pixel];\n            let r = bgr >> 8 & 0xff;\n            let g = bgr >> 16 & 0xff;\n            let b = bgr >> 24 & 0xff;\n            rgba[pixel * bytesPerPixel] = r; //r\n            rgba[pixel * bytesPerPixel + 1] = g; //g\n            rgba[pixel * bytesPerPixel + 2] = b; //b\n            rgba[pixel * bytesPerPixel + 3] = 0xff; //a\n          } else if ((andMask[pixel] & PIXEL_MASK) == PIXEL_MASK) {\n            //Only screen value matters, no mouse colouring\n            if (xorMask[pixel] == 0) {\n              //Transparent pixel\n              rgba[pixel * bytesPerPixel] = 0x00;\n              rgba[pixel * bytesPerPixel + 1] = 0x00;\n              rgba[pixel * bytesPerPixel + 2] = 0x00;\n              rgba[pixel * bytesPerPixel + 3] = 0x00;\n            } else if ((xorMask[pixel] & PIXEL_MASK) == PIXEL_MASK) {\n              //Inverted pixel, not supported in browsers.\n              //Fully opaque instead.\n              rgba[pixel * bytesPerPixel] = 0x00;\n              rgba[pixel * bytesPerPixel + 1] = 0x00;\n              rgba[pixel * bytesPerPixel + 2] = 0x00;\n              rgba[pixel * bytesPerPixel + 3] = 0xff;\n            } else {\n              //Unhandled xorMask\n              rgba[pixel * bytesPerPixel] = 0x00;\n              rgba[pixel * bytesPerPixel + 1] = 0x00;\n              rgba[pixel * bytesPerPixel + 2] = 0x00;\n              rgba[pixel * bytesPerPixel + 3] = 0xff;\n            }\n          } else {\n            //Unhandled andMask\n            rgba[pixel * bytesPerPixel] = 0x00;\n            rgba[pixel * bytesPerPixel + 1] = 0x00;\n            rgba[pixel * bytesPerPixel + 2] = 0x00;\n            rgba[pixel * bytesPerPixel + 3] = 0xff;\n          }\n        }\n\n        //Alpha cursor.\n      } else if (cursorType == 1) {\n        if (this._sock.rQwait(\"VMware cursor alpha encoding\", w * h * 4, 2)) {\n          return false;\n        }\n        rgba = new Array(w * h * bytesPerPixel);\n        for (let pixel = 0; pixel < w * h; pixel++) {\n          let data = this._sock.rQshift32();\n          rgba[pixel * 4] = data >> 24 & 0xff; //r\n          rgba[pixel * 4 + 1] = data >> 16 & 0xff; //g\n          rgba[pixel * 4 + 2] = data >> 8 & 0xff; //b\n          rgba[pixel * 4 + 3] = data & 0xff; //a\n        }\n      } else {\n        Log.Warn(\"The given cursor type is not supported: \" + cursorType + \" given.\");\n        return false;\n      }\n      this._updateCursor(rgba, hotx, hoty, w, h);\n      return true;\n    }\n    _handleCursor() {\n      const hotx = this._FBU.x; // hotspot-x\n      const hoty = this._FBU.y; // hotspot-y\n      const w = this._FBU.width;\n      const h = this._FBU.height;\n      const pixelslength = w * h * 4;\n      const masklength = Math.ceil(w / 8) * h;\n      let bytes = pixelslength + masklength;\n      if (this._sock.rQwait(\"cursor encoding\", bytes)) {\n        return false;\n      }\n\n      // Decode from BGRX pixels + bit mask to RGBA\n      const pixels = this._sock.rQshiftBytes(pixelslength);\n      const mask = this._sock.rQshiftBytes(masklength);\n      let rgba = new Uint8Array(w * h * 4);\n      let pixIdx = 0;\n      for (let y = 0; y < h; y++) {\n        for (let x = 0; x < w; x++) {\n          let maskIdx = y * Math.ceil(w / 8) + Math.floor(x / 8);\n          let alpha = mask[maskIdx] << x % 8 & 0x80 ? 255 : 0;\n          rgba[pixIdx] = pixels[pixIdx + 2];\n          rgba[pixIdx + 1] = pixels[pixIdx + 1];\n          rgba[pixIdx + 2] = pixels[pixIdx];\n          rgba[pixIdx + 3] = alpha;\n          pixIdx += 4;\n        }\n      }\n      this._updateCursor(rgba, hotx, hoty, w, h);\n      return true;\n    }\n    _handleDesktopName() {\n      if (this._sock.rQwait(\"DesktopName\", 4)) {\n        return false;\n      }\n      let length = this._sock.rQshift32();\n      if (this._sock.rQwait(\"DesktopName\", length, 4)) {\n        return false;\n      }\n      let name = this._sock.rQshiftStr(length);\n      name = (0, _strings.decodeUTF8)(name, true);\n      this._setDesktopName(name);\n      return true;\n    }\n    _handleExtendedDesktopSize() {\n      if (this._sock.rQwait(\"ExtendedDesktopSize\", 4)) {\n        return false;\n      }\n      const numberOfScreens = this._sock.rQpeek8();\n      let bytes = 4 + numberOfScreens * 16;\n      if (this._sock.rQwait(\"ExtendedDesktopSize\", bytes)) {\n        return false;\n      }\n      const firstUpdate = !this._supportsSetDesktopSize;\n      this._supportsSetDesktopSize = true;\n\n      // Normally we only apply the current resize mode after a\n      // window resize event. However there is no such trigger on the\n      // initial connect. And we don't know if the server supports\n      // resizing until we've gotten here.\n      if (firstUpdate) {\n        this._requestRemoteResize();\n      }\n      this._sock.rQskipBytes(1); // number-of-screens\n      this._sock.rQskipBytes(3); // padding\n\n      for (let i = 0; i < numberOfScreens; i += 1) {\n        // Save the id and flags of the first screen\n        if (i === 0) {\n          this._screenID = this._sock.rQshiftBytes(4); // id\n          this._sock.rQskipBytes(2); // x-position\n          this._sock.rQskipBytes(2); // y-position\n          this._sock.rQskipBytes(2); // width\n          this._sock.rQskipBytes(2); // height\n          this._screenFlags = this._sock.rQshiftBytes(4); // flags\n        } else {\n          this._sock.rQskipBytes(16);\n        }\n      }\n\n      /*\n       * The x-position indicates the reason for the change:\n       *\n       *  0 - server resized on its own\n       *  1 - this client requested the resize\n       *  2 - another client requested the resize\n       */\n\n      // We need to handle errors when we requested the resize.\n      if (this._FBU.x === 1 && this._FBU.y !== 0) {\n        let msg = \"\";\n        // The y-position indicates the status code from the server\n        switch (this._FBU.y) {\n          case 1:\n            msg = \"Resize is administratively prohibited\";\n            break;\n          case 2:\n            msg = \"Out of resources\";\n            break;\n          case 3:\n            msg = \"Invalid screen layout\";\n            break;\n          default:\n            msg = \"Unknown reason\";\n            break;\n        }\n        Log.Warn(\"Server did not accept the resize request: \" + msg);\n      } else {\n        this._resize(this._FBU.width, this._FBU.height);\n      }\n      return true;\n    }\n    _handleDataRect() {\n      let decoder = this._decoders[this._FBU.encoding];\n      if (!decoder) {\n        this._fail(\"Unsupported encoding (encoding: \" + this._FBU.encoding + \")\");\n        return false;\n      }\n      try {\n        return decoder.decodeRect(this._FBU.x, this._FBU.y, this._FBU.width, this._FBU.height, this._sock, this._display, this._fbDepth);\n      } catch (err) {\n        this._fail(\"Error decoding rect: \" + err);\n        return false;\n      }\n    }\n    _updateContinuousUpdates() {\n      if (!this._enabledContinuousUpdates) {\n        return;\n      }\n      RFB.messages.enableContinuousUpdates(this._sock, true, 0, 0, this._fbWidth, this._fbHeight);\n    }\n    _resize(width, height) {\n      this._fbWidth = width;\n      this._fbHeight = height;\n      this._display.resize(this._fbWidth, this._fbHeight);\n\n      // Adjust the visible viewport based on the new dimensions\n      this._updateClip();\n      this._updateScale();\n      this._updateContinuousUpdates();\n    }\n    _xvpOp(ver, op) {\n      if (this._rfbXvpVer < ver) {\n        return;\n      }\n      Log.Info(\"Sending XVP operation \" + op + \" (version \" + ver + \")\");\n      RFB.messages.xvpOp(this._sock, ver, op);\n    }\n    _updateCursor(rgba, hotx, hoty, w, h) {\n      this._cursorImage = {\n        rgbaPixels: rgba,\n        hotx: hotx,\n        hoty: hoty,\n        w: w,\n        h: h\n      };\n      this._refreshCursor();\n    }\n    _shouldShowDotCursor() {\n      // Called when this._cursorImage is updated\n      if (!this._showDotCursor) {\n        // User does not want to see the dot, so...\n        return false;\n      }\n\n      // The dot should not be shown if the cursor is already visible,\n      // i.e. contains at least one not-fully-transparent pixel.\n      // So iterate through all alpha bytes in rgba and stop at the\n      // first non-zero.\n      for (let i = 3; i < this._cursorImage.rgbaPixels.length; i += 4) {\n        if (this._cursorImage.rgbaPixels[i]) {\n          return false;\n        }\n      }\n\n      // At this point, we know that the cursor is fully transparent, and\n      // the user wants to see the dot instead of this.\n      return true;\n    }\n    _refreshCursor() {\n      if (this._rfbConnectionState !== \"connecting\" && this._rfbConnectionState !== \"connected\") {\n        return;\n      }\n      const image = this._shouldShowDotCursor() ? RFB.cursors.dot : this._cursorImage;\n      this._cursor.change(image.rgbaPixels, image.hotx, image.hoty, image.w, image.h);\n    }\n    static genDES(password, challenge) {\n      const passwordChars = password.split('').map(c => c.charCodeAt(0));\n      return new _des.default(passwordChars).encrypt(challenge);\n    }\n  }\n\n  // Class Methods\n  _exports.default = RFB;\n  RFB.messages = {\n    keyEvent(sock, keysym, down) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 4; // msg-type\n      buff[offset + 1] = down;\n      buff[offset + 2] = 0;\n      buff[offset + 3] = 0;\n      buff[offset + 4] = keysym >> 24;\n      buff[offset + 5] = keysym >> 16;\n      buff[offset + 6] = keysym >> 8;\n      buff[offset + 7] = keysym;\n      sock._sQlen += 8;\n      sock.flush();\n    },\n    QEMUExtendedKeyEvent(sock, keysym, down, keycode) {\n      function getRFBkeycode(xtScanCode) {\n        const upperByte = keycode >> 8;\n        const lowerByte = keycode & 0x00ff;\n        if (upperByte === 0xe0 && lowerByte < 0x7f) {\n          return lowerByte | 0x80;\n        }\n        return xtScanCode;\n      }\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 255; // msg-type\n      buff[offset + 1] = 0; // sub msg-type\n\n      buff[offset + 2] = down >> 8;\n      buff[offset + 3] = down;\n      buff[offset + 4] = keysym >> 24;\n      buff[offset + 5] = keysym >> 16;\n      buff[offset + 6] = keysym >> 8;\n      buff[offset + 7] = keysym;\n      const RFBkeycode = getRFBkeycode(keycode);\n      buff[offset + 8] = RFBkeycode >> 24;\n      buff[offset + 9] = RFBkeycode >> 16;\n      buff[offset + 10] = RFBkeycode >> 8;\n      buff[offset + 11] = RFBkeycode;\n      sock._sQlen += 12;\n      sock.flush();\n    },\n    pointerEvent(sock, x, y, mask) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 5; // msg-type\n\n      buff[offset + 1] = mask;\n      buff[offset + 2] = x >> 8;\n      buff[offset + 3] = x;\n      buff[offset + 4] = y >> 8;\n      buff[offset + 5] = y;\n      sock._sQlen += 6;\n      sock.flush();\n    },\n    // Used to build Notify and Request data.\n    _buildExtendedClipboardFlags(actions, formats) {\n      let data = new Uint8Array(4);\n      let formatFlag = 0x00000000;\n      let actionFlag = 0x00000000;\n      for (let i = 0; i < actions.length; i++) {\n        actionFlag |= actions[i];\n      }\n      for (let i = 0; i < formats.length; i++) {\n        formatFlag |= formats[i];\n      }\n      data[0] = actionFlag >> 24; // Actions\n      data[1] = 0x00; // Reserved\n      data[2] = 0x00; // Reserved\n      data[3] = formatFlag; // Formats\n\n      return data;\n    },\n    extendedClipboardProvide(sock, formats, inData) {\n      // Deflate incomming data and their sizes\n      let deflator = new _deflator.default();\n      let dataToDeflate = [];\n      for (let i = 0; i < formats.length; i++) {\n        // We only support the format Text at this time\n        if (formats[i] != extendedClipboardFormatText) {\n          throw new Error(\"Unsupported extended clipboard format for Provide message.\");\n        }\n\n        // Change lone \\r or \\n into \\r\\n as defined in rfbproto\n        inData[i] = inData[i].replace(/\\r\\n|\\r|\\n/gm, \"\\r\\n\");\n\n        // Check if it already has \\0\n        let text = (0, _strings.encodeUTF8)(inData[i] + \"\\0\");\n        dataToDeflate.push(text.length >> 24 & 0xFF, text.length >> 16 & 0xFF, text.length >> 8 & 0xFF, text.length & 0xFF);\n        for (let j = 0; j < text.length; j++) {\n          dataToDeflate.push(text.charCodeAt(j));\n        }\n      }\n      let deflatedData = deflator.deflate(new Uint8Array(dataToDeflate));\n\n      // Build data  to send\n      let data = new Uint8Array(4 + deflatedData.length);\n      data.set(RFB.messages._buildExtendedClipboardFlags([extendedClipboardActionProvide], formats));\n      data.set(deflatedData, 4);\n      RFB.messages.clientCutText(sock, data, true);\n    },\n    extendedClipboardNotify(sock, formats) {\n      let flags = RFB.messages._buildExtendedClipboardFlags([extendedClipboardActionNotify], formats);\n      RFB.messages.clientCutText(sock, flags, true);\n    },\n    extendedClipboardRequest(sock, formats) {\n      let flags = RFB.messages._buildExtendedClipboardFlags([extendedClipboardActionRequest], formats);\n      RFB.messages.clientCutText(sock, flags, true);\n    },\n    extendedClipboardCaps(sock, actions, formats) {\n      let formatKeys = Object.keys(formats);\n      let data = new Uint8Array(4 + 4 * formatKeys.length);\n      formatKeys.map(x => parseInt(x));\n      formatKeys.sort((a, b) => a - b);\n      data.set(RFB.messages._buildExtendedClipboardFlags(actions, []));\n      let loopOffset = 4;\n      for (let i = 0; i < formatKeys.length; i++) {\n        data[loopOffset] = formats[formatKeys[i]] >> 24;\n        data[loopOffset + 1] = formats[formatKeys[i]] >> 16;\n        data[loopOffset + 2] = formats[formatKeys[i]] >> 8;\n        data[loopOffset + 3] = formats[formatKeys[i]] >> 0;\n        loopOffset += 4;\n        data[3] |= 1 << formatKeys[i]; // Update our format flags\n      }\n      RFB.messages.clientCutText(sock, data, true);\n    },\n    clientCutText(sock, data, extended = false) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 6; // msg-type\n\n      buff[offset + 1] = 0; // padding\n      buff[offset + 2] = 0; // padding\n      buff[offset + 3] = 0; // padding\n\n      let length;\n      if (extended) {\n        length = (0, _int.toUnsigned32bit)(-data.length);\n      } else {\n        length = data.length;\n      }\n      buff[offset + 4] = length >> 24;\n      buff[offset + 5] = length >> 16;\n      buff[offset + 6] = length >> 8;\n      buff[offset + 7] = length;\n      sock._sQlen += 8;\n\n      // We have to keep track of from where in the data we begin creating the\n      // buffer for the flush in the next iteration.\n      let dataOffset = 0;\n      let remaining = data.length;\n      while (remaining > 0) {\n        let flushSize = Math.min(remaining, sock._sQbufferSize - sock._sQlen);\n        for (let i = 0; i < flushSize; i++) {\n          buff[sock._sQlen + i] = data[dataOffset + i];\n        }\n        sock._sQlen += flushSize;\n        sock.flush();\n        remaining -= flushSize;\n        dataOffset += flushSize;\n      }\n    },\n    setDesktopSize(sock, width, height, id, flags) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 251; // msg-type\n      buff[offset + 1] = 0; // padding\n      buff[offset + 2] = width >> 8; // width\n      buff[offset + 3] = width;\n      buff[offset + 4] = height >> 8; // height\n      buff[offset + 5] = height;\n      buff[offset + 6] = 1; // number-of-screens\n      buff[offset + 7] = 0; // padding\n\n      // screen array\n      buff[offset + 8] = id >> 24; // id\n      buff[offset + 9] = id >> 16;\n      buff[offset + 10] = id >> 8;\n      buff[offset + 11] = id;\n      buff[offset + 12] = 0; // x-position\n      buff[offset + 13] = 0;\n      buff[offset + 14] = 0; // y-position\n      buff[offset + 15] = 0;\n      buff[offset + 16] = width >> 8; // width\n      buff[offset + 17] = width;\n      buff[offset + 18] = height >> 8; // height\n      buff[offset + 19] = height;\n      buff[offset + 20] = flags >> 24; // flags\n      buff[offset + 21] = flags >> 16;\n      buff[offset + 22] = flags >> 8;\n      buff[offset + 23] = flags;\n      sock._sQlen += 24;\n      sock.flush();\n    },\n    clientFence(sock, flags, payload) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 248; // msg-type\n\n      buff[offset + 1] = 0; // padding\n      buff[offset + 2] = 0; // padding\n      buff[offset + 3] = 0; // padding\n\n      buff[offset + 4] = flags >> 24; // flags\n      buff[offset + 5] = flags >> 16;\n      buff[offset + 6] = flags >> 8;\n      buff[offset + 7] = flags;\n      const n = payload.length;\n      buff[offset + 8] = n; // length\n\n      for (let i = 0; i < n; i++) {\n        buff[offset + 9 + i] = payload.charCodeAt(i);\n      }\n      sock._sQlen += 9 + n;\n      sock.flush();\n    },\n    enableContinuousUpdates(sock, enable, x, y, width, height) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 150; // msg-type\n      buff[offset + 1] = enable; // enable-flag\n\n      buff[offset + 2] = x >> 8; // x\n      buff[offset + 3] = x;\n      buff[offset + 4] = y >> 8; // y\n      buff[offset + 5] = y;\n      buff[offset + 6] = width >> 8; // width\n      buff[offset + 7] = width;\n      buff[offset + 8] = height >> 8; // height\n      buff[offset + 9] = height;\n      sock._sQlen += 10;\n      sock.flush();\n    },\n    pixelFormat(sock, depth, trueColor) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      let bpp;\n      if (depth > 16) {\n        bpp = 32;\n      } else if (depth > 8) {\n        bpp = 16;\n      } else {\n        bpp = 8;\n      }\n      const bits = Math.floor(depth / 3);\n      buff[offset] = 0; // msg-type\n\n      buff[offset + 1] = 0; // padding\n      buff[offset + 2] = 0; // padding\n      buff[offset + 3] = 0; // padding\n\n      buff[offset + 4] = bpp; // bits-per-pixel\n      buff[offset + 5] = depth; // depth\n      buff[offset + 6] = 0; // little-endian\n      buff[offset + 7] = trueColor ? 1 : 0; // true-color\n\n      buff[offset + 8] = 0; // red-max\n      buff[offset + 9] = (1 << bits) - 1; // red-max\n\n      buff[offset + 10] = 0; // green-max\n      buff[offset + 11] = (1 << bits) - 1; // green-max\n\n      buff[offset + 12] = 0; // blue-max\n      buff[offset + 13] = (1 << bits) - 1; // blue-max\n\n      buff[offset + 14] = bits * 0; // red-shift\n      buff[offset + 15] = bits * 1; // green-shift\n      buff[offset + 16] = bits * 2; // blue-shift\n\n      buff[offset + 17] = 0; // padding\n      buff[offset + 18] = 0; // padding\n      buff[offset + 19] = 0; // padding\n\n      sock._sQlen += 20;\n      sock.flush();\n    },\n    clientEncodings(sock, encodings) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 2; // msg-type\n      buff[offset + 1] = 0; // padding\n\n      buff[offset + 2] = encodings.length >> 8;\n      buff[offset + 3] = encodings.length;\n      let j = offset + 4;\n      for (let i = 0; i < encodings.length; i++) {\n        const enc = encodings[i];\n        buff[j] = enc >> 24;\n        buff[j + 1] = enc >> 16;\n        buff[j + 2] = enc >> 8;\n        buff[j + 3] = enc;\n        j += 4;\n      }\n      sock._sQlen += j - offset;\n      sock.flush();\n    },\n    fbUpdateRequest(sock, incremental, x, y, w, h) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      if (typeof x === \"undefined\") {\n        x = 0;\n      }\n      if (typeof y === \"undefined\") {\n        y = 0;\n      }\n      buff[offset] = 3; // msg-type\n      buff[offset + 1] = incremental ? 1 : 0;\n      buff[offset + 2] = x >> 8 & 0xFF;\n      buff[offset + 3] = x & 0xFF;\n      buff[offset + 4] = y >> 8 & 0xFF;\n      buff[offset + 5] = y & 0xFF;\n      buff[offset + 6] = w >> 8 & 0xFF;\n      buff[offset + 7] = w & 0xFF;\n      buff[offset + 8] = h >> 8 & 0xFF;\n      buff[offset + 9] = h & 0xFF;\n      sock._sQlen += 10;\n      sock.flush();\n    },\n    xvpOp(sock, ver, op) {\n      const buff = sock._sQ;\n      const offset = sock._sQlen;\n      buff[offset] = 250; // msg-type\n      buff[offset + 1] = 0; // padding\n\n      buff[offset + 2] = ver;\n      buff[offset + 3] = op;\n      sock._sQlen += 4;\n      sock.flush();\n    }\n  };\n  RFB.cursors = {\n    none: {\n      rgbaPixels: new Uint8Array(),\n      w: 0,\n      h: 0,\n      hotx: 0,\n      hoty: 0\n    },\n    dot: {\n      /* eslint-disable indent */\n      rgbaPixels: new Uint8Array([255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255]),\n      /* eslint-enable indent */\n      w: 3,\n      h: 3,\n      hotx: 1,\n      hoty: 1\n    }\n  };\n});","define(\"novnc-sockjs/core/util/browser\", [\"exports\", \"novnc-sockjs/core/util/logging\"], function (_exports, Log) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.hasScrollbarGutter = _exports.dragThreshold = void 0;\n  _exports.isFirefox = isFirefox;\n  _exports.isIOS = isIOS;\n  _exports.isMac = isMac;\n  _exports.isSafari = isSafari;\n  _exports.isTouchDevice = void 0;\n  _exports.isWindows = isWindows;\n  _exports.supportsCursorURIs = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   *\n   * Browser feature support detection\n   */\n\n  // Touch detection\n  let isTouchDevice = _exports.isTouchDevice = 'ontouchstart' in document.documentElement ||\n  // requried for Chrome debugger\n  document.ontouchstart !== undefined ||\n  // required for MS Surface\n  navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n  window.addEventListener('touchstart', function onFirstTouch() {\n    _exports.isTouchDevice = isTouchDevice = true;\n    window.removeEventListener('touchstart', onFirstTouch, false);\n  }, false);\n\n  // The goal is to find a certain physical width, the devicePixelRatio\n  // brings us a bit closer but is not optimal.\n  let dragThreshold = _exports.dragThreshold = 10 * (window.devicePixelRatio || 1);\n  let _supportsCursorURIs = false;\n  try {\n    const target = document.createElement('canvas');\n    target.style.cursor = 'url(\"data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==\") 2 2, default';\n    if (target.style.cursor.indexOf(\"url\") === 0) {\n      Log.Info(\"Data URI scheme cursor supported\");\n      _supportsCursorURIs = true;\n    } else {\n      Log.Warn(\"Data URI scheme cursor not supported\");\n    }\n  } catch (exc) {\n    Log.Error(\"Data URI scheme cursor test exception: \" + exc);\n  }\n  const supportsCursorURIs = _exports.supportsCursorURIs = _supportsCursorURIs;\n  let _hasScrollbarGutter = true;\n  try {\n    // Create invisible container\n    const container = document.createElement('div');\n    container.style.visibility = 'hidden';\n    container.style.overflow = 'scroll'; // forcing scrollbars\n    document.body.appendChild(container);\n\n    // Create a div and place it in the container\n    const child = document.createElement('div');\n    container.appendChild(child);\n\n    // Calculate the difference between the container's full width\n    // and the child's width - the difference is the scrollbars\n    const scrollbarWidth = container.offsetWidth - child.offsetWidth;\n\n    // Clean up\n    container.parentNode.removeChild(container);\n    _hasScrollbarGutter = scrollbarWidth != 0;\n  } catch (exc) {\n    Log.Error(\"Scrollbar test exception: \" + exc);\n  }\n  const hasScrollbarGutter = _exports.hasScrollbarGutter = _hasScrollbarGutter;\n\n  /*\n   * The functions for detection of platforms and browsers below are exported\n   * but the use of these should be minimized as much as possible.\n   *\n   * It's better to use feature detection than platform detection.\n   */\n\n  function isMac() {\n    return navigator && !!/mac/i.exec(navigator.platform);\n  }\n  function isWindows() {\n    return navigator && !!/win/i.exec(navigator.platform);\n  }\n  function isIOS() {\n    return navigator && (!!/ipad/i.exec(navigator.platform) || !!/iphone/i.exec(navigator.platform) || !!/ipod/i.exec(navigator.platform));\n  }\n  function isSafari() {\n    return navigator && navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\n  }\n  function isFirefox() {\n    return navigator && !!/firefox/i.exec(navigator.userAgent);\n  }\n});","define(\"novnc-sockjs/core/util/cursor\", [\"exports\", \"novnc-sockjs/core/util/browser\"], function (_exports, _browser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)\n   */\n\n  const useFallback = !_browser.supportsCursorURIs || _browser.isTouchDevice;\n  class Cursor {\n    constructor() {\n      this._target = null;\n      this._canvas = document.createElement('canvas');\n      if (useFallback) {\n        this._canvas.style.position = 'fixed';\n        this._canvas.style.zIndex = '65535';\n        this._canvas.style.pointerEvents = 'none';\n        // Can't use \"display\" because of Firefox bug #1445997\n        this._canvas.style.visibility = 'hidden';\n      }\n      this._position = {\n        x: 0,\n        y: 0\n      };\n      this._hotSpot = {\n        x: 0,\n        y: 0\n      };\n      this._eventHandlers = {\n        'mouseover': this._handleMouseOver.bind(this),\n        'mouseleave': this._handleMouseLeave.bind(this),\n        'mousemove': this._handleMouseMove.bind(this),\n        'mouseup': this._handleMouseUp.bind(this)\n      };\n    }\n    attach(target) {\n      if (this._target) {\n        this.detach();\n      }\n      this._target = target;\n      if (useFallback) {\n        document.body.appendChild(this._canvas);\n        const options = {\n          capture: true,\n          passive: true\n        };\n        this._target.addEventListener('mouseover', this._eventHandlers.mouseover, options);\n        this._target.addEventListener('mouseleave', this._eventHandlers.mouseleave, options);\n        this._target.addEventListener('mousemove', this._eventHandlers.mousemove, options);\n        this._target.addEventListener('mouseup', this._eventHandlers.mouseup, options);\n      }\n      this.clear();\n    }\n    detach() {\n      if (!this._target) {\n        return;\n      }\n      if (useFallback) {\n        const options = {\n          capture: true,\n          passive: true\n        };\n        this._target.removeEventListener('mouseover', this._eventHandlers.mouseover, options);\n        this._target.removeEventListener('mouseleave', this._eventHandlers.mouseleave, options);\n        this._target.removeEventListener('mousemove', this._eventHandlers.mousemove, options);\n        this._target.removeEventListener('mouseup', this._eventHandlers.mouseup, options);\n        document.body.removeChild(this._canvas);\n      }\n      this._target = null;\n    }\n    change(rgba, hotx, hoty, w, h) {\n      if (w === 0 || h === 0) {\n        this.clear();\n        return;\n      }\n      this._position.x = this._position.x + this._hotSpot.x - hotx;\n      this._position.y = this._position.y + this._hotSpot.y - hoty;\n      this._hotSpot.x = hotx;\n      this._hotSpot.y = hoty;\n      let ctx = this._canvas.getContext('2d');\n      this._canvas.width = w;\n      this._canvas.height = h;\n      let img = new ImageData(new Uint8ClampedArray(rgba), w, h);\n      ctx.clearRect(0, 0, w, h);\n      ctx.putImageData(img, 0, 0);\n      if (useFallback) {\n        this._updatePosition();\n      } else {\n        let url = this._canvas.toDataURL();\n        this._target.style.cursor = 'url(' + url + ')' + hotx + ' ' + hoty + ', default';\n      }\n    }\n    clear() {\n      this._target.style.cursor = 'none';\n      this._canvas.width = 0;\n      this._canvas.height = 0;\n      this._position.x = this._position.x + this._hotSpot.x;\n      this._position.y = this._position.y + this._hotSpot.y;\n      this._hotSpot.x = 0;\n      this._hotSpot.y = 0;\n    }\n\n    // Mouse events might be emulated, this allows\n    // moving the cursor in such cases\n    move(clientX, clientY) {\n      if (!useFallback) {\n        return;\n      }\n      // clientX/clientY are relative the _visual viewport_,\n      // but our position is relative the _layout viewport_,\n      // so try to compensate when we can\n      if (window.visualViewport) {\n        this._position.x = clientX + window.visualViewport.offsetLeft;\n        this._position.y = clientY + window.visualViewport.offsetTop;\n      } else {\n        this._position.x = clientX;\n        this._position.y = clientY;\n      }\n      this._updatePosition();\n      let target = document.elementFromPoint(clientX, clientY);\n      this._updateVisibility(target);\n    }\n    _handleMouseOver(event) {\n      // This event could be because we're entering the target, or\n      // moving around amongst its sub elements. Let the move handler\n      // sort things out.\n      this._handleMouseMove(event);\n    }\n    _handleMouseLeave(event) {\n      // Check if we should show the cursor on the element we are leaving to\n      this._updateVisibility(event.relatedTarget);\n    }\n    _handleMouseMove(event) {\n      this._updateVisibility(event.target);\n      this._position.x = event.clientX - this._hotSpot.x;\n      this._position.y = event.clientY - this._hotSpot.y;\n      this._updatePosition();\n    }\n    _handleMouseUp(event) {\n      // We might get this event because of a drag operation that\n      // moved outside of the target. Check what's under the cursor\n      // now and adjust visibility based on that.\n      let target = document.elementFromPoint(event.clientX, event.clientY);\n      this._updateVisibility(target);\n\n      // Captures end with a mouseup but we can't know the event order of\n      // mouseup vs releaseCapture.\n      //\n      // In the cases when releaseCapture comes first, the code above is\n      // enough.\n      //\n      // In the cases when the mouseup comes first, we need wait for the\n      // browser to flush all events and then check again if the cursor\n      // should be visible.\n      if (this._captureIsActive()) {\n        window.setTimeout(() => {\n          // We might have detached at this point\n          if (!this._target) {\n            return;\n          }\n          // Refresh the target from elementFromPoint since queued events\n          // might have altered the DOM\n          target = document.elementFromPoint(event.clientX, event.clientY);\n          this._updateVisibility(target);\n        }, 0);\n      }\n    }\n    _showCursor() {\n      if (this._canvas.style.visibility === 'hidden') {\n        this._canvas.style.visibility = '';\n      }\n    }\n    _hideCursor() {\n      if (this._canvas.style.visibility !== 'hidden') {\n        this._canvas.style.visibility = 'hidden';\n      }\n    }\n\n    // Should we currently display the cursor?\n    // (i.e. are we over the target, or a child of the target without a\n    // different cursor set)\n    _shouldShowCursor(target) {\n      if (!target) {\n        return false;\n      }\n      // Easy case\n      if (target === this._target) {\n        return true;\n      }\n      // Other part of the DOM?\n      if (!this._target.contains(target)) {\n        return false;\n      }\n      // Has the child its own cursor?\n      // FIXME: How can we tell that a sub element has an\n      //        explicit \"cursor: none;\"?\n      if (window.getComputedStyle(target).cursor !== 'none') {\n        return false;\n      }\n      return true;\n    }\n    _updateVisibility(target) {\n      // When the cursor target has capture we want to show the cursor.\n      // So, if a capture is active - look at the captured element instead.\n      if (this._captureIsActive()) {\n        target = document.captureElement;\n      }\n      if (this._shouldShowCursor(target)) {\n        this._showCursor();\n      } else {\n        this._hideCursor();\n      }\n    }\n    _updatePosition() {\n      this._canvas.style.left = this._position.x + \"px\";\n      this._canvas.style.top = this._position.y + \"px\";\n    }\n    _captureIsActive() {\n      return document.captureElement && document.documentElement.contains(document.captureElement);\n    }\n  }\n  _exports.default = Cursor;\n});","define(\"novnc-sockjs/core/util/element\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.clientToElement = clientToElement;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  /*\n   * HTML element utility functions\n   */\n\n  function clientToElement(x, y, elem) {\n    const bounds = elem.getBoundingClientRect();\n    let pos = {\n      x: 0,\n      y: 0\n    };\n    // Clip to target bounds\n    if (x < bounds.left) {\n      pos.x = 0;\n    } else if (x >= bounds.right) {\n      pos.x = bounds.width - 1;\n    } else {\n      pos.x = x - bounds.left;\n    }\n    if (y < bounds.top) {\n      pos.y = 0;\n    } else if (y >= bounds.bottom) {\n      pos.y = bounds.height - 1;\n    } else {\n      pos.y = y - bounds.top;\n    }\n    return pos;\n  }\n});","define(\"novnc-sockjs/core/util/events\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.getPointerEvent = getPointerEvent;\n  _exports.releaseCapture = releaseCapture;\n  _exports.setCapture = setCapture;\n  _exports.stopEvent = stopEvent;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2018 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  /*\n   * Cross-browser event and position routines\n   */\n\n  function getPointerEvent(e) {\n    return e.changedTouches ? e.changedTouches[0] : e.touches ? e.touches[0] : e;\n  }\n  function stopEvent(e) {\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  // Emulate Element.setCapture() when not supported\n  let _captureRecursion = false;\n  let _elementForUnflushedEvents = null;\n  document.captureElement = null;\n  function _captureProxy(e) {\n    // Recursion protection as we'll see our own event\n    if (_captureRecursion) return;\n\n    // Clone the event as we cannot dispatch an already dispatched event\n    const newEv = new e.constructor(e.type, e);\n    _captureRecursion = true;\n    if (document.captureElement) {\n      document.captureElement.dispatchEvent(newEv);\n    } else {\n      _elementForUnflushedEvents.dispatchEvent(newEv);\n    }\n    _captureRecursion = false;\n\n    // Avoid double events\n    e.stopPropagation();\n\n    // Respect the wishes of the redirected event handlers\n    if (newEv.defaultPrevented) {\n      e.preventDefault();\n    }\n\n    // Implicitly release the capture on button release\n    if (e.type === \"mouseup\") {\n      releaseCapture();\n    }\n  }\n\n  // Follow cursor style of target element\n  function _capturedElemChanged() {\n    const proxyElem = document.getElementById(\"noVNC_mouse_capture_elem\");\n    proxyElem.style.cursor = window.getComputedStyle(document.captureElement).cursor;\n  }\n  const _captureObserver = new MutationObserver(_capturedElemChanged);\n  function setCapture(target) {\n    if (target.setCapture) {\n      target.setCapture();\n      document.captureElement = target;\n    } else {\n      // Release any existing capture in case this method is\n      // called multiple times without coordination\n      releaseCapture();\n      let proxyElem = document.getElementById(\"noVNC_mouse_capture_elem\");\n      if (proxyElem === null) {\n        proxyElem = document.createElement(\"div\");\n        proxyElem.id = \"noVNC_mouse_capture_elem\";\n        proxyElem.style.position = \"fixed\";\n        proxyElem.style.top = \"0px\";\n        proxyElem.style.left = \"0px\";\n        proxyElem.style.width = \"100%\";\n        proxyElem.style.height = \"100%\";\n        proxyElem.style.zIndex = 10000;\n        proxyElem.style.display = \"none\";\n        document.body.appendChild(proxyElem);\n\n        // This is to make sure callers don't get confused by having\n        // our blocking element as the target\n        proxyElem.addEventListener('contextmenu', _captureProxy);\n        proxyElem.addEventListener('mousemove', _captureProxy);\n        proxyElem.addEventListener('mouseup', _captureProxy);\n      }\n      document.captureElement = target;\n\n      // Track cursor and get initial cursor\n      _captureObserver.observe(target, {\n        attributes: true\n      });\n      _capturedElemChanged();\n      proxyElem.style.display = \"\";\n\n      // We listen to events on window in order to keep tracking if it\n      // happens to leave the viewport\n      window.addEventListener('mousemove', _captureProxy);\n      window.addEventListener('mouseup', _captureProxy);\n    }\n  }\n  function releaseCapture() {\n    if (document.releaseCapture) {\n      document.releaseCapture();\n      document.captureElement = null;\n    } else {\n      if (!document.captureElement) {\n        return;\n      }\n\n      // There might be events already queued. The event proxy needs\n      // access to the captured element for these queued events.\n      // E.g. contextmenu (right-click) in Microsoft Edge\n      //\n      // Before removing the capturedElem pointer we save it to a\n      // temporary variable that the unflushed events can use.\n      _elementForUnflushedEvents = document.captureElement;\n      document.captureElement = null;\n      _captureObserver.disconnect();\n      const proxyElem = document.getElementById(\"noVNC_mouse_capture_elem\");\n      proxyElem.style.display = \"none\";\n      window.removeEventListener('mousemove', _captureProxy);\n      window.removeEventListener('mouseup', _captureProxy);\n    }\n  }\n});","define(\"novnc-sockjs/core/util/eventtarget\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  class EventTargetMixin {\n    constructor() {\n      this._listeners = new Map();\n    }\n    addEventListener(type, callback) {\n      if (!this._listeners.has(type)) {\n        this._listeners.set(type, new Set());\n      }\n      this._listeners.get(type).add(callback);\n    }\n    removeEventListener(type, callback) {\n      if (this._listeners.has(type)) {\n        this._listeners.get(type).delete(callback);\n      }\n    }\n    dispatchEvent(event) {\n      if (!this._listeners.has(event.type)) {\n        return true;\n      }\n      this._listeners.get(event.type).forEach(callback => callback.call(this, event));\n      return !event.defaultPrevented;\n    }\n  }\n  _exports.default = EventTargetMixin;\n});","define(\"novnc-sockjs/core/util/int\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.toSigned32bit = toSigned32bit;\n  _exports.toUnsigned32bit = toUnsigned32bit;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2020 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  function toUnsigned32bit(toConvert) {\n    return toConvert >>> 0;\n  }\n  function toSigned32bit(toConvert) {\n    return toConvert | 0;\n  }\n});","define(\"novnc-sockjs/core/util/logging\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Warn = _exports.Info = _exports.Error = _exports.Debug = void 0;\n  _exports.getLogging = getLogging;\n  _exports.initLogging = initLogging;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  /*\n   * Logging/debug routines\n   */\n\n  let _logLevel = 'warn';\n  let Debug = () => {};\n  _exports.Debug = Debug;\n  let Info = () => {};\n  _exports.Info = Info;\n  let Warn = () => {};\n  _exports.Warn = Warn;\n  let Error = () => {};\n  _exports.Error = Error;\n  function initLogging(level) {\n    if (typeof level === 'undefined') {\n      level = _logLevel;\n    } else {\n      _logLevel = level;\n    }\n    _exports.Debug = Debug = _exports.Info = Info = _exports.Warn = Warn = _exports.Error = Error = () => {};\n    if (typeof window.console !== \"undefined\") {\n      /* eslint-disable no-console, no-fallthrough */\n      switch (level) {\n        case 'debug':\n          _exports.Debug = Debug = console.debug.bind(window.console);\n        case 'info':\n          _exports.Info = Info = console.info.bind(window.console);\n        case 'warn':\n          _exports.Warn = Warn = console.warn.bind(window.console);\n        case 'error':\n          _exports.Error = Error = console.error.bind(window.console);\n        case 'none':\n          break;\n        default:\n          throw new window.Error(\"invalid logging type '\" + level + \"'\");\n      }\n      /* eslint-enable no-console, no-fallthrough */\n    }\n  }\n  function getLogging() {\n    return _logLevel;\n  }\n  // Initialize logging level\n  initLogging();\n});","define(\"novnc-sockjs/core/util/strings\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.decodeUTF8 = decodeUTF8;\n  _exports.encodeUTF8 = encodeUTF8;\n  /*\n   * noVNC: HTML5 VNC client\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * See README.md for usage and integration instructions.\n   */\n\n  // Decode from UTF-8\n  function decodeUTF8(utf8string, allowLatin1 = false) {\n    try {\n      return decodeURIComponent(escape(utf8string));\n    } catch (e) {\n      if (e instanceof URIError) {\n        if (allowLatin1) {\n          // If we allow Latin1 we can ignore any decoding fails\n          // and in these cases return the original string\n          return utf8string;\n        }\n      }\n      throw e;\n    }\n  }\n\n  // Encode to UTF-8\n  function encodeUTF8(DOMString) {\n    return unescape(encodeURIComponent(DOMString));\n  }\n});","define(\"novnc-sockjs/core/websock\", [\"exports\", \"novnc-sockjs/core/util/logging\"], function (_exports, Log) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /*\n   * Websock: high-performance buffering wrapper\n   * Copyright (C) 2019 The noVNC Authors\n   * Licensed under MPL 2.0 (see LICENSE.txt)\n   *\n   * Websock is similar to the standard WebSocket / RTCDataChannel object\n   * but with extra buffer handling.\n   *\n   * Websock has built-in receive queue buffering; the message event\n   * does not contain actual data but is simply a notification that\n   * there is new data available. Several rQ* methods are available to\n   * read binary data off of the receive queue.\n   */\n\n  // this has performance issues in some versions Chromium, and\n  // doesn't gain a tremendous amount of performance increase in Firefox\n  // at the moment.  It may be valuable to turn it on in the future.\n  const MAX_RQ_GROW_SIZE = 40 * 1024 * 1024; // 40 MiB\n\n  // Constants pulled from RTCDataChannelState enum\n  // https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/readyState#RTCDataChannelState_enum\n  const DataChannel = {\n    CONNECTING: \"connecting\",\n    OPEN: \"open\",\n    CLOSING: \"closing\",\n    CLOSED: \"closed\"\n  };\n  const ReadyStates = {\n    CONNECTING: [SockJS.CONNECTING, WebSocket.CONNECTING, DataChannel.CONNECTING],\n    OPEN: [SockJS.OPEN, WebSocket.OPEN, DataChannel.OPEN],\n    CLOSING: [SockJS.CLOSING, WebSocket.CLOSING, DataChannel.CLOSING],\n    CLOSED: [SockJS.CLOSED, WebSocket.CLOSED, DataChannel.CLOSED]\n  };\n\n  // Properties a raw channel must have, WebSocket and RTCDataChannel are two examples\n  const rawChannelProps = [\"send\", \"close\",\n  //\"binaryType\",\n  //\"onerror\",\n  //\"onmessage\",\n  //\"onopen\",\n  \"protocol\", \"readyState\"];\n  class Websock {\n    constructor() {\n      this._websocket = null; // WebSocket or RTCDataChannel object\n\n      this._rQi = 0; // Receive queue index\n      this._rQlen = 0; // Next write position in the receive queue\n      this._rQbufferSize = 1024 * 1024 * 4; // Receive queue buffer size (4 MiB)\n      // called in init: this._rQ = new Uint8Array(this._rQbufferSize);\n      this._rQ = null; // Receive queue\n\n      this._sQbufferSize = 1024 * 10; // 10 KiB\n      // called in init: this._sQ = new Uint8Array(this._sQbufferSize);\n      this._sQlen = 0;\n      this._sQ = null; // Send queue\n\n      this._eventHandlers = {\n        message: () => {},\n        open: () => {},\n        close: () => {},\n        error: () => {}\n      };\n    }\n\n    // Getters and Setters\n    get sQ() {\n      return this._sQ;\n    }\n    get rQ() {\n      return this._rQ;\n    }\n    get rQi() {\n      return this._rQi;\n    }\n    set rQi(val) {\n      this._rQi = val;\n    }\n\n    // Receive Queue\n    get rQlen() {\n      return this._rQlen - this._rQi;\n    }\n    rQpeek8() {\n      return this._rQ[this._rQi];\n    }\n    rQskipBytes(bytes) {\n      this._rQi += bytes;\n    }\n    rQshift8() {\n      return this._rQshift(1);\n    }\n    rQshift16() {\n      return this._rQshift(2);\n    }\n    rQshift32() {\n      return this._rQshift(4);\n    }\n\n    // TODO(directxman12): test performance with these vs a DataView\n    _rQshift(bytes) {\n      let res = 0;\n      for (let byte = bytes - 1; byte >= 0; byte--) {\n        res += this._rQ[this._rQi++] << byte * 8;\n      }\n      return res;\n    }\n    rQshiftStr(len) {\n      if (typeof len === 'undefined') {\n        len = this.rQlen;\n      }\n      let str = \"\";\n      // Handle large arrays in steps to avoid long strings on the stack\n      for (let i = 0; i < len; i += 4096) {\n        let part = this.rQshiftBytes(Math.min(4096, len - i));\n        str += String.fromCharCode.apply(null, part);\n      }\n      return str;\n    }\n    rQshiftBytes(len) {\n      if (typeof len === 'undefined') {\n        len = this.rQlen;\n      }\n      this._rQi += len;\n      return new Uint8Array(this._rQ.buffer, this._rQi - len, len);\n    }\n    rQshiftTo(target, len) {\n      if (len === undefined) {\n        len = this.rQlen;\n      }\n      // TODO: make this just use set with views when using a ArrayBuffer to store the rQ\n      target.set(new Uint8Array(this._rQ.buffer, this._rQi, len));\n      this._rQi += len;\n    }\n    rQslice(start, end = this.rQlen) {\n      return new Uint8Array(this._rQ.buffer, this._rQi + start, end - start);\n    }\n\n    // Check to see if we must wait for 'num' bytes (default to FBU.bytes)\n    // to be available in the receive queue. Return true if we need to\n    // wait (and possibly print a debug message), otherwise false.\n    rQwait(msg, num, goback) {\n      if (this.rQlen < num) {\n        if (goback) {\n          if (this._rQi < goback) {\n            throw new Error(\"rQwait cannot backup \" + goback + \" bytes\");\n          }\n          this._rQi -= goback;\n        }\n        return true; // true means need more data\n      }\n      return false;\n    }\n\n    // Send Queue\n\n    flush() {\n      if (this._sQlen > 0 && ReadyStates.OPEN.indexOf(this._websocket.readyState) >= 0) {\n        this._encodeMessage().then(this._websocket.send.bind(this._websocket));\n        this._sQlen = 0;\n      }\n    }\n    send(arr) {\n      this._sQ.set(arr, this._sQlen);\n      this._sQlen += arr.length;\n      this.flush();\n    }\n    sendString(str) {\n      this.send(str.split('').map(chr => chr.charCodeAt(0)));\n    }\n\n    // Event Handlers\n    off(evt) {\n      this._eventHandlers[evt] = () => {};\n    }\n    on(evt, handler) {\n      this._eventHandlers[evt] = handler;\n    }\n    _allocateBuffers() {\n      this._rQ = new Uint8Array(this._rQbufferSize);\n      this._sQ = new Uint8Array(this._sQbufferSize);\n    }\n    init() {\n      this._allocateBuffers();\n      this._rQi = 0;\n      this._websocket = null;\n    }\n    open(uri, protocols) {\n      this.attach(new SockJS(uri, null, {\n        transports: ['websocket', 'xhr-polling', 'xdr-polling']\n      }));\n    }\n    attach(rawChannel) {\n      this.init();\n\n      // Must get object and class methods to be compatible with the tests.\n      const channelProps = [...Object.keys(rawChannel), ...Object.getOwnPropertyNames(Object.getPrototypeOf(rawChannel))];\n      for (let i = 0; i < rawChannelProps.length; i++) {\n        const prop = rawChannelProps[i];\n        if (channelProps.indexOf(prop) < 0) {\n          throw new Error('Raw channel missing property: ' + prop);\n        }\n      }\n      this._websocket = rawChannel;\n      //this._websocket.binaryType = \"arraybuffer\";\n      this._websocket.onmessage = this._recvMessage.bind(this);\n      const onOpen = () => {\n        Log.Debug('>> WebSock.onopen');\n        if (this._websocket.protocol) {\n          Log.Info(\"Server choose sub-protocol: \" + this._websocket.protocol);\n        }\n        this._eventHandlers.open();\n        Log.Debug(\"<< WebSock.onopen\");\n      };\n\n      // If the readyState cannot be found this defaults to assuming it's not open.\n      const isOpen = ReadyStates.OPEN.indexOf(this._websocket.readyState) >= 0;\n      if (isOpen) {\n        onOpen();\n      } else {\n        this._websocket.onopen = onOpen;\n      }\n      this._websocket.onclose = e => {\n        Log.Debug(\">> WebSock.onclose\");\n        this._eventHandlers.close(e);\n        Log.Debug(\"<< WebSock.onclose\");\n      };\n      this._websocket.onerror = e => {\n        Log.Debug(\">> WebSock.onerror: \" + e);\n        this._eventHandlers.error(e);\n        Log.Debug(\"<< WebSock.onerror: \" + e);\n      };\n    }\n    close() {\n      if (this._websocket) {\n        if (ReadyStates.CONNECTING.indexOf(this._websocket.readyState) >= 0 || ReadyStates.OPEN.indexOf(this._websocket.readyState) >= 0) {\n          Log.Info(\"Closing WebSocket connection\");\n          this._websocket.close();\n        }\n        this._websocket.onmessage = () => {};\n      }\n    }\n\n    // private methods\n    _encodeMessage() {\n      // send base64 string on socket\n      return blobUtil.blobToBase64String(blobUtil.arrayBufferToBlob(this._sQ.buffer.slice(0, this._sQlen)));\n    }\n\n    // We want to move all the unread data to the start of the queue,\n    // e.g. compacting.\n    // The function also expands the receive que if needed, and for\n    // performance reasons we combine these two actions to avoid\n    // unneccessary copying.\n    _expandCompactRQ(minFit) {\n      // if we're using less than 1/8th of the buffer even with the incoming bytes, compact in place\n      // instead of resizing\n      const requiredBufferSize = (this._rQlen - this._rQi + minFit) * 8;\n      const resizeNeeded = this._rQbufferSize < requiredBufferSize;\n      if (resizeNeeded) {\n        // Make sure we always *at least* double the buffer size, and have at least space for 8x\n        // the current amount of data\n        this._rQbufferSize = Math.max(this._rQbufferSize * 2, requiredBufferSize);\n      }\n\n      // we don't want to grow unboundedly\n      if (this._rQbufferSize > MAX_RQ_GROW_SIZE) {\n        this._rQbufferSize = MAX_RQ_GROW_SIZE;\n        if (this._rQbufferSize - this.rQlen < minFit) {\n          throw new Error(\"Receive Queue buffer exceeded \" + MAX_RQ_GROW_SIZE + \" bytes, and the new message could not fit\");\n        }\n      }\n      if (resizeNeeded) {\n        const oldRQbuffer = this._rQ.buffer;\n        this._rQ = new Uint8Array(this._rQbufferSize);\n        this._rQ.set(new Uint8Array(oldRQbuffer, this._rQi, this._rQlen - this._rQi));\n      } else {\n        this._rQ.copyWithin(0, this._rQi, this._rQlen);\n      }\n      this._rQlen = this._rQlen - this._rQi;\n      this._rQi = 0;\n    }\n\n    // push arraybuffer values onto the end of the receive que\n    _DecodeMessage(data) {\n      return blobUtil.blobToArrayBuffer(blobUtil.base64StringToBlob(data)).then(buffer => {\n        const u8 = new Uint8Array(buffer);\n        if (u8.length > this._rQbufferSize - this._rQlen) {\n          this._expandCompactRQ(u8.length);\n        }\n        this._rQ.set(u8, this._rQlen);\n        this._rQlen += u8.length;\n      });\n    }\n    _recvMessage(e) {\n      this._DecodeMessage(e.data).then(() => {\n        if (this.rQlen > 0) {\n          this._eventHandlers.message();\n          if (this._rQlen == this._rQi) {\n            // All data has now been processed, this means we\n            // can reset the receive queue.\n            this._rQlen = 0;\n            this._rQi = 0;\n          }\n        } else {\n          Log.Debug(\"Ignoring empty message\");\n        }\n      });\n    }\n  }\n  _exports.default = Websock;\n});","define(\"novnc-sockjs/vendor/pako/lib/utils/common\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Buf8 = _exports.Buf32 = _exports.Buf16 = void 0;\n  _exports.arraySet = arraySet;\n  _exports.flattenChunks = flattenChunks;\n  _exports.shrinkBuf = shrinkBuf;\n  // reduce buffer size, avoiding mem copy\n  function shrinkBuf(buf, size) {\n    if (buf.length === size) {\n      return buf;\n    }\n    if (buf.subarray) {\n      return buf.subarray(0, size);\n    }\n    buf.length = size;\n    return buf;\n  }\n  ;\n  function arraySet(dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  }\n\n  // Join array of chunks to single array.\n  function flattenChunks(chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n    return result;\n  }\n  var Buf8 = _exports.Buf8 = Uint8Array;\n  var Buf16 = _exports.Buf16 = Uint16Array;\n  var Buf32 = _exports.Buf32 = Int32Array;\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/adler32\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = adler32;\n  // Note: adler32 takes 12% for level 0 and 2% for level 6.\n  // It doesn't worth to make additional optimizationa as in original.\n  // Small size is preferable.\n\n  function adler32(adler, buf, len, pos) {\n    var s1 = adler & 0xffff | 0,\n      s2 = adler >>> 16 & 0xffff | 0,\n      n = 0;\n    while (len !== 0) {\n      // Set limit ~ twice less than 5552, to keep\n      // s2 in 31-bits, because we force signed ints.\n      // in other case %= will fail.\n      n = len > 2000 ? 2000 : len;\n      len -= n;\n      do {\n        s1 = s1 + buf[pos++] | 0;\n        s2 = s2 + s1 | 0;\n      } while (--n);\n      s1 %= 65521;\n      s2 %= 65521;\n    }\n    return s1 | s2 << 16 | 0;\n  }\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/constants\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    /* Allowed flush values; see deflate() and inflate() below for details */\n    Z_NO_FLUSH: 0,\n    Z_PARTIAL_FLUSH: 1,\n    Z_SYNC_FLUSH: 2,\n    Z_FULL_FLUSH: 3,\n    Z_FINISH: 4,\n    Z_BLOCK: 5,\n    Z_TREES: 6,\n    /* Return codes for the compression/decompression functions. Negative values\n    * are errors, positive values are used for special but normal events.\n    */\n    Z_OK: 0,\n    Z_STREAM_END: 1,\n    Z_NEED_DICT: 2,\n    Z_ERRNO: -1,\n    Z_STREAM_ERROR: -2,\n    Z_DATA_ERROR: -3,\n    //Z_MEM_ERROR:     -4,\n    Z_BUF_ERROR: -5,\n    //Z_VERSION_ERROR: -6,\n\n    /* compression levels */\n    Z_NO_COMPRESSION: 0,\n    Z_BEST_SPEED: 1,\n    Z_BEST_COMPRESSION: 9,\n    Z_DEFAULT_COMPRESSION: -1,\n    Z_FILTERED: 1,\n    Z_HUFFMAN_ONLY: 2,\n    Z_RLE: 3,\n    Z_FIXED: 4,\n    Z_DEFAULT_STRATEGY: 0,\n    /* Possible values of the data_type field (though see inflate()) */\n    Z_BINARY: 0,\n    Z_TEXT: 1,\n    //Z_ASCII:                1, // = Z_TEXT (deprecated)\n    Z_UNKNOWN: 2,\n    /* The deflate compression method */\n    Z_DEFLATED: 8\n    //Z_NULL:                 null // Use -1 or null inline, depending on var type\n  };\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/crc32\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = makeTable;\n  // Note: we can't get significant speed boost here.\n  // So write code to minimize size - no pregenerated tables\n  // and array tools dependencies.\n\n  // Use ordinary array, since untyped makes no boost here\n  function makeTable() {\n    var c,\n      table = [];\n    for (var n = 0; n < 256; n++) {\n      c = n;\n      for (var k = 0; k < 8; k++) {\n        c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;\n      }\n      table[n] = c;\n    }\n    return table;\n  }\n\n  // Create table on load. Just 255 signed longs. Not a problem.\n  var crcTable = makeTable();\n  function crc32(crc, buf, len, pos) {\n    var t = crcTable,\n      end = pos + len;\n    crc ^= -1;\n    for (var i = pos; i < end; i++) {\n      crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n    return crc ^ -1; // >>> 0;\n  }\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/deflate\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/utils/common\", \"novnc-sockjs/vendor/pako/lib/zlib/trees\", \"novnc-sockjs/vendor/pako/lib/zlib/adler32\", \"novnc-sockjs/vendor/pako/lib/zlib/crc32\", \"novnc-sockjs/vendor/pako/lib/zlib/messages\"], function (_exports, utils, trees, _adler, _crc, _messages) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Z_UNKNOWN = _exports.Z_STREAM_ERROR = _exports.Z_STREAM_END = _exports.Z_RLE = _exports.Z_PARTIAL_FLUSH = _exports.Z_OK = _exports.Z_NO_FLUSH = _exports.Z_HUFFMAN_ONLY = _exports.Z_FULL_FLUSH = _exports.Z_FIXED = _exports.Z_FINISH = _exports.Z_FILTERED = _exports.Z_DEFLATED = _exports.Z_DEFAULT_STRATEGY = _exports.Z_DEFAULT_COMPRESSION = _exports.Z_DATA_ERROR = _exports.Z_BUF_ERROR = _exports.Z_BLOCK = void 0;\n  _exports.deflate = deflate;\n  _exports.deflateEnd = deflateEnd;\n  _exports.deflateInfo = void 0;\n  _exports.deflateInit = deflateInit;\n  _exports.deflateInit2 = deflateInit2;\n  _exports.deflateReset = deflateReset;\n  _exports.deflateResetKeep = deflateResetKeep;\n  _exports.deflateSetDictionary = deflateSetDictionary;\n  _exports.deflateSetHeader = deflateSetHeader;\n  /* Public constants ==========================================================*/\n  /* ===========================================================================*/\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  const Z_NO_FLUSH = _exports.Z_NO_FLUSH = 0;\n  const Z_PARTIAL_FLUSH = _exports.Z_PARTIAL_FLUSH = 1;\n  //export const Z_SYNC_FLUSH    = 2;\n  const Z_FULL_FLUSH = _exports.Z_FULL_FLUSH = 3;\n  const Z_FINISH = _exports.Z_FINISH = 4;\n  const Z_BLOCK = _exports.Z_BLOCK = 5;\n  //export const Z_TREES         = 6;\n\n  /* Return codes for the compression/decompression functions. Negative values\n   * are errors, positive values are used for special but normal events.\n   */\n  const Z_OK = _exports.Z_OK = 0;\n  const Z_STREAM_END = _exports.Z_STREAM_END = 1;\n  //export const Z_NEED_DICT     = 2;\n  //export const Z_ERRNO         = -1;\n  const Z_STREAM_ERROR = _exports.Z_STREAM_ERROR = -2;\n  const Z_DATA_ERROR = _exports.Z_DATA_ERROR = -3;\n  //export const Z_MEM_ERROR     = -4;\n  const Z_BUF_ERROR = _exports.Z_BUF_ERROR = -5;\n  //export const Z_VERSION_ERROR = -6;\n\n  /* compression levels */\n  //export const Z_NO_COMPRESSION      = 0;\n  //export const Z_BEST_SPEED          = 1;\n  //export const Z_BEST_COMPRESSION    = 9;\n  const Z_DEFAULT_COMPRESSION = _exports.Z_DEFAULT_COMPRESSION = -1;\n  const Z_FILTERED = _exports.Z_FILTERED = 1;\n  const Z_HUFFMAN_ONLY = _exports.Z_HUFFMAN_ONLY = 2;\n  const Z_RLE = _exports.Z_RLE = 3;\n  const Z_FIXED = _exports.Z_FIXED = 4;\n  const Z_DEFAULT_STRATEGY = _exports.Z_DEFAULT_STRATEGY = 0;\n\n  /* Possible values of the data_type field (though see inflate()) */\n  //export const Z_BINARY              = 0;\n  //export const Z_TEXT                = 1;\n  //export const Z_ASCII               = 1; // = Z_TEXT\n  const Z_UNKNOWN = _exports.Z_UNKNOWN = 2;\n\n  /* The deflate compression method */\n  const Z_DEFLATED = _exports.Z_DEFLATED = 8;\n\n  /*============================================================================*/\n\n  var MAX_MEM_LEVEL = 9;\n  /* Maximum value for memLevel in deflateInit2 */\n  var MAX_WBITS = 15;\n  /* 32K LZ77 window */\n  var DEF_MEM_LEVEL = 8;\n  var LENGTH_CODES = 29;\n  /* number of length codes, not counting the special END_BLOCK code */\n  var LITERALS = 256;\n  /* number of literal bytes 0..255 */\n  var L_CODES = LITERALS + 1 + LENGTH_CODES;\n  /* number of Literal or Length codes, including the END_BLOCK code */\n  var D_CODES = 30;\n  /* number of distance codes */\n  var BL_CODES = 19;\n  /* number of codes used to transfer the bit lengths */\n  var HEAP_SIZE = 2 * L_CODES + 1;\n  /* maximum heap size */\n  var MAX_BITS = 15;\n  /* All codes must not exceed MAX_BITS bits */\n\n  var MIN_MATCH = 3;\n  var MAX_MATCH = 258;\n  var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;\n  var PRESET_DICT = 0x20;\n  var INIT_STATE = 42;\n  var EXTRA_STATE = 69;\n  var NAME_STATE = 73;\n  var COMMENT_STATE = 91;\n  var HCRC_STATE = 103;\n  var BUSY_STATE = 113;\n  var FINISH_STATE = 666;\n  var BS_NEED_MORE = 1; /* block not completed, need more input or more output */\n  var BS_BLOCK_DONE = 2; /* block flush performed */\n  var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\n  var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\n  var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\n  function err(strm, errorCode) {\n    strm.msg = _messages.default[errorCode];\n    return errorCode;\n  }\n  function rank(f) {\n    return (f << 1) - (f > 4 ? 9 : 0);\n  }\n  function zero(buf) {\n    var len = buf.length;\n    while (--len >= 0) {\n      buf[len] = 0;\n    }\n  }\n\n  /* =========================================================================\n   * Flush as much pending output as possible. All deflate() output goes\n   * through this function so some applications may wish to modify it\n   * to avoid allocating a large strm->output buffer and copying into it.\n   * (See also read_buf()).\n   */\n  function flush_pending(strm) {\n    var s = strm.state;\n\n    //_tr_flush_bits(s);\n    var len = s.pending;\n    if (len > strm.avail_out) {\n      len = strm.avail_out;\n    }\n    if (len === 0) {\n      return;\n    }\n    utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n    strm.next_out += len;\n    s.pending_out += len;\n    strm.total_out += len;\n    strm.avail_out -= len;\n    s.pending -= len;\n    if (s.pending === 0) {\n      s.pending_out = 0;\n    }\n  }\n  function flush_block_only(s, last) {\n    trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);\n    s.block_start = s.strstart;\n    flush_pending(s.strm);\n  }\n  function put_byte(s, b) {\n    s.pending_buf[s.pending++] = b;\n  }\n\n  /* =========================================================================\n   * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n   * IN assertion: the stream state is correct and there is enough room in\n   * pending_buf.\n   */\n  function putShortMSB(s, b) {\n    //  put_byte(s, (Byte)(b >> 8));\n    //  put_byte(s, (Byte)(b & 0xff));\n    s.pending_buf[s.pending++] = b >>> 8 & 0xff;\n    s.pending_buf[s.pending++] = b & 0xff;\n  }\n\n  /* ===========================================================================\n   * Read a new buffer from the current input stream, update the adler32\n   * and total number of bytes read.  All deflate() input goes through\n   * this function so some applications may wish to modify it to avoid\n   * allocating a large strm->input buffer and copying from it.\n   * (See also flush_pending()).\n   */\n  function read_buf(strm, buf, start, size) {\n    var len = strm.avail_in;\n    if (len > size) {\n      len = size;\n    }\n    if (len === 0) {\n      return 0;\n    }\n    strm.avail_in -= len;\n\n    // zmemcpy(buf, strm->next_in, len);\n    utils.arraySet(buf, strm.input, strm.next_in, len, start);\n    if (strm.state.wrap === 1) {\n      strm.adler = (0, _adler.default)(strm.adler, buf, len, start);\n    } else if (strm.state.wrap === 2) {\n      strm.adler = (0, _crc.default)(strm.adler, buf, len, start);\n    }\n    strm.next_in += len;\n    strm.total_in += len;\n    return len;\n  }\n\n  /* ===========================================================================\n   * Set match_start to the longest match starting at the given string and\n   * return its length. Matches shorter or equal to prev_length are discarded,\n   * in which case the result is equal to prev_length and match_start is\n   * garbage.\n   * IN assertions: cur_match is the head of the hash chain for the current\n   *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n   * OUT assertion: the match length is not greater than s->lookahead.\n   */\n  function longest_match(s, cur_match) {\n    var chain_length = s.max_chain_length; /* max hash chain length */\n    var scan = s.strstart; /* current string */\n    var match; /* matched string */\n    var len; /* length of current match */\n    var best_len = s.prev_length; /* best match length so far */\n    var nice_match = s.nice_match; /* stop if match long enough */\n    var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0 /*NIL*/;\n    var _win = s.window; // shortcut\n\n    var wmask = s.w_mask;\n    var prev = s.prev;\n\n    /* Stop when cur_match becomes <= limit. To simplify the code,\n     * we prevent matches with the string of window index 0.\n     */\n\n    var strend = s.strstart + MAX_MATCH;\n    var scan_end1 = _win[scan + best_len - 1];\n    var scan_end = _win[scan + best_len];\n\n    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n     * It is easy to get rid of this optimization if necessary.\n     */\n    // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n    /* Do not waste too much time if we already have a good match: */\n    if (s.prev_length >= s.good_match) {\n      chain_length >>= 2;\n    }\n    /* Do not look for matches beyond the end of the input. This is necessary\n     * to make deflate deterministic.\n     */\n    if (nice_match > s.lookahead) {\n      nice_match = s.lookahead;\n    }\n\n    // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n    do {\n      // Assert(cur_match < s->strstart, \"no future\");\n      match = cur_match;\n\n      /* Skip to next match if the match length cannot increase\n       * or if the match length is less than 2.  Note that the checks below\n       * for insufficient lookahead only occur occasionally for performance\n       * reasons.  Therefore uninitialized memory will be accessed, and\n       * conditional jumps will be made that depend on those values.\n       * However the length of the match is limited to the lookahead, so\n       * the output of deflate is not affected by the uninitialized values.\n       */\n\n      if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {\n        continue;\n      }\n\n      /* The check at best_len-1 can be removed because it will be made\n       * again later. (This heuristic is not always a win.)\n       * It is not necessary to compare scan[2] and match[2] since they\n       * are always equal when the other bytes match, given that\n       * the hash keys are equal and that HASH_BITS >= 8.\n       */\n      scan += 2;\n      match++;\n      // Assert(*scan == *match, \"match[2]?\");\n\n      /* We check for insufficient lookahead only every 8th comparison;\n       * the 256th check will be made at strstart+258.\n       */\n      do {\n        // Do nothing\n      } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);\n\n      // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n      len = MAX_MATCH - (strend - scan);\n      scan = strend - MAX_MATCH;\n      if (len > best_len) {\n        s.match_start = cur_match;\n        best_len = len;\n        if (len >= nice_match) {\n          break;\n        }\n        scan_end1 = _win[scan + best_len - 1];\n        scan_end = _win[scan + best_len];\n      }\n    } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n    if (best_len <= s.lookahead) {\n      return best_len;\n    }\n    return s.lookahead;\n  }\n\n  /* ===========================================================================\n   * Fill the window when the lookahead becomes insufficient.\n   * Updates strstart and lookahead.\n   *\n   * IN assertion: lookahead < MIN_LOOKAHEAD\n   * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n   *    At least one byte has been read, or avail_in == 0; reads are\n   *    performed for at least two bytes (required for the zip translate_eol\n   *    option -- not supported here).\n   */\n  function fill_window(s) {\n    var _w_size = s.w_size;\n    var p, n, m, more, str;\n\n    //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n    do {\n      more = s.window_size - s.lookahead - s.strstart;\n\n      // JS ints have 32 bit, block below not needed\n      /* Deal with !@#$% 64K limit: */\n      //if (sizeof(int) <= 2) {\n      //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n      //        more = wsize;\n      //\n      //  } else if (more == (unsigned)(-1)) {\n      //        /* Very unlikely, but possible on 16 bit machine if\n      //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n      //         */\n      //        more--;\n      //    }\n      //}\n\n      /* If the window is almost full and there is insufficient lookahead,\n       * move the upper half to the lower one to make room in the upper half.\n       */\n      if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n        utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n        s.match_start -= _w_size;\n        s.strstart -= _w_size;\n        /* we now have strstart >= MAX_DIST */\n        s.block_start -= _w_size;\n\n        /* Slide the hash table (could be avoided with 32 bit values\n         at the expense of memory usage). We slide even when level == 0\n         to keep the hash table consistent if we switch back to level > 0\n         later. (Using level 0 permanently is not an optimal usage of\n         zlib, so we don't care about this pathological case.)\n         */\n\n        n = s.hash_size;\n        p = n;\n        do {\n          m = s.head[--p];\n          s.head[p] = m >= _w_size ? m - _w_size : 0;\n        } while (--n);\n        n = _w_size;\n        p = n;\n        do {\n          m = s.prev[--p];\n          s.prev[p] = m >= _w_size ? m - _w_size : 0;\n          /* If n is not on any hash chain, prev[n] is garbage but\n           * its value will never be used.\n           */\n        } while (--n);\n        more += _w_size;\n      }\n      if (s.strm.avail_in === 0) {\n        break;\n      }\n\n      /* If there was no sliding:\n       *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n       *    more == window_size - lookahead - strstart\n       * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n       * => more >= window_size - 2*WSIZE + 2\n       * In the BIG_MEM or MMAP case (not yet supported),\n       *   window_size == input_size + MIN_LOOKAHEAD  &&\n       *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n       * Otherwise, window_size == 2*WSIZE so more >= 2.\n       * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n       */\n      //Assert(more >= 2, \"more < 2\");\n      n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n      s.lookahead += n;\n\n      /* Initialize the hash value now that we have some input: */\n      if (s.lookahead + s.insert >= MIN_MATCH) {\n        str = s.strstart - s.insert;\n        s.ins_h = s.window[str];\n\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask;\n        //#if MIN_MATCH != 3\n        //        Call update_hash() MIN_MATCH-3 more times\n        //#endif\n        while (s.insert) {\n          /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n          s.prev[str & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = str;\n          str++;\n          s.insert--;\n          if (s.lookahead + s.insert < MIN_MATCH) {\n            break;\n          }\n        }\n      }\n      /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n       * but this is not important since only literal bytes will be emitted.\n       */\n    } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n    /* If the WIN_INIT bytes after the end of the current data have never been\n     * written, then zero those bytes in order to avoid memory check reports of\n     * the use of uninitialized (or uninitialised as Julian writes) bytes by\n     * the longest match routines.  Update the high water mark for the next\n     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n     */\n    //  if (s.high_water < s.window_size) {\n    //    var curr = s.strstart + s.lookahead;\n    //    var init = 0;\n    //\n    //    if (s.high_water < curr) {\n    //      /* Previous high water mark below current data -- zero WIN_INIT\n    //       * bytes or up to end of window, whichever is less.\n    //       */\n    //      init = s.window_size - curr;\n    //      if (init > WIN_INIT)\n    //        init = WIN_INIT;\n    //      zmemzero(s->window + curr, (unsigned)init);\n    //      s->high_water = curr + init;\n    //    }\n    //    else if (s->high_water < (ulg)curr + WIN_INIT) {\n    //      /* High water mark at or above current data, but below current data\n    //       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n    //       * to end of window, whichever is less.\n    //       */\n    //      init = (ulg)curr + WIN_INIT - s->high_water;\n    //      if (init > s->window_size - s->high_water)\n    //        init = s->window_size - s->high_water;\n    //      zmemzero(s->window + s->high_water, (unsigned)init);\n    //      s->high_water += init;\n    //    }\n    //  }\n    //\n    //  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n    //    \"not enough room for search\");\n  }\n\n  /* ===========================================================================\n   * Copy without compression as much as possible from the input stream, return\n   * the current block state.\n   * This function does not insert new strings in the dictionary since\n   * uncompressible data is probably not useful. This function is used\n   * only for the level=0 compression option.\n   * NOTE: this function should be optimized to avoid extra copying from\n   * window to pending_buf.\n   */\n  function deflate_stored(s, flush) {\n    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n     * to pending_buf_size, and each stored block has a 5 byte header:\n     */\n    var max_block_size = 0xffff;\n    if (max_block_size > s.pending_buf_size - 5) {\n      max_block_size = s.pending_buf_size - 5;\n    }\n\n    /* Copy as much as possible from input to output: */\n    for (;;) {\n      /* Fill the window as much as possible: */\n      if (s.lookahead <= 1) {\n        //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n        //  s->block_start >= (long)s->w_size, \"slide too late\");\n        //      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n        //        s.block_start >= s.w_size)) {\n        //        throw  new Error(\"slide too late\");\n        //      }\n\n        fill_window(s);\n        if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        if (s.lookahead === 0) {\n          break;\n        }\n        /* flush the current block */\n      }\n      //Assert(s->block_start >= 0L, \"block gone\");\n      //    if (s.block_start < 0) throw new Error(\"block gone\");\n\n      s.strstart += s.lookahead;\n      s.lookahead = 0;\n\n      /* Emit a stored block if pending_buf will be full: */\n      var max_start = s.block_start + max_block_size;\n      if (s.strstart === 0 || s.strstart >= max_start) {\n        /* strstart == 0 is possible when wraparound on 16-bit machine */\n        s.lookahead = s.strstart - max_start;\n        s.strstart = max_start;\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n      /* Flush if we may have to slide, otherwise block_start may become\n       * negative and the data will be gone:\n       */\n      if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n    }\n    s.insert = 0;\n    if (flush === Z_FINISH) {\n      /*** FLUSH_BLOCK(s, 1); ***/\n      flush_block_only(s, true);\n      if (s.strm.avail_out === 0) {\n        return BS_FINISH_STARTED;\n      }\n      /***/\n      return BS_FINISH_DONE;\n    }\n    if (s.strstart > s.block_start) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n    return BS_NEED_MORE;\n  }\n\n  /* ===========================================================================\n   * Compress as much as possible from the input stream, return the current\n   * block state.\n   * This function does not perform lazy evaluation of matches and inserts\n   * new strings in the dictionary only for unmatched strings or for short\n   * matches. It is used only for the fast compression options.\n   */\n  function deflate_fast(s, flush) {\n    var hash_head; /* head of the hash chain */\n    var bflush; /* set if current block must be flushed */\n\n    for (;;) {\n      /* Make sure that we always have enough lookahead, except\n       * at the end of the input file. We need MAX_MATCH bytes\n       * for the next match, plus MIN_MATCH bytes to insert the\n       * string following the next match.\n       */\n      if (s.lookahead < MIN_LOOKAHEAD) {\n        fill_window(s);\n        if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        if (s.lookahead === 0) {\n          break; /* flush the current block */\n        }\n      }\n\n      /* Insert the string window[strstart .. strstart+2] in the\n       * dictionary, and set hash_head to the head of the hash chain:\n       */\n      hash_head = 0 /*NIL*/;\n      if (s.lookahead >= MIN_MATCH) {\n        /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n        hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = s.strstart;\n        /***/\n      }\n\n      /* Find the longest match, discarding those <= prev_length.\n       * At this point we have always match_length < MIN_MATCH\n       */\n      if (hash_head !== 0 /*NIL*/ && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {\n        /* To simplify the code, we prevent matches with the string\n         * of window index 0 (in particular we have to avoid a match\n         * of the string with itself at the start of the input file).\n         */\n        s.match_length = longest_match(s, hash_head);\n        /* longest_match() sets match_start */\n      }\n      if (s.match_length >= MIN_MATCH) {\n        // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n        /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                       s.match_length - MIN_MATCH, bflush); ***/\n        bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n        s.lookahead -= s.match_length;\n\n        /* Insert new strings in the hash table only if the match length\n         * is not too large. This saves time but degrades compression.\n         */\n        if (s.match_length <= s.max_lazy_match /*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n          s.match_length--; /* string at strstart already in table */\n          do {\n            s.strstart++;\n            /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n            hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n            s.head[s.ins_h] = s.strstart;\n            /***/\n            /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n             * always MIN_MATCH bytes ahead.\n             */\n          } while (--s.match_length !== 0);\n          s.strstart++;\n        } else {\n          s.strstart += s.match_length;\n          s.match_length = 0;\n          s.ins_h = s.window[s.strstart];\n          /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n          //#if MIN_MATCH != 3\n          //                Call UPDATE_HASH() MIN_MATCH-3 more times\n          //#endif\n          /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n           * matter since it will be recomputed at next deflate call.\n           */\n        }\n      } else {\n        /* No match, output a literal byte */\n        //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n        /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n        bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n        s.lookahead--;\n        s.strstart++;\n      }\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n    }\n    s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n    if (flush === Z_FINISH) {\n      /*** FLUSH_BLOCK(s, 1); ***/\n      flush_block_only(s, true);\n      if (s.strm.avail_out === 0) {\n        return BS_FINISH_STARTED;\n      }\n      /***/\n      return BS_FINISH_DONE;\n    }\n    if (s.last_lit) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n    return BS_BLOCK_DONE;\n  }\n\n  /* ===========================================================================\n   * Same as above, but achieves better compression. We use a lazy\n   * evaluation for matches: a match is finally adopted only if there is\n   * no better match at the next window position.\n   */\n  function deflate_slow(s, flush) {\n    var hash_head; /* head of hash chain */\n    var bflush; /* set if current block must be flushed */\n\n    var max_insert;\n\n    /* Process the input block. */\n    for (;;) {\n      /* Make sure that we always have enough lookahead, except\n       * at the end of the input file. We need MAX_MATCH bytes\n       * for the next match, plus MIN_MATCH bytes to insert the\n       * string following the next match.\n       */\n      if (s.lookahead < MIN_LOOKAHEAD) {\n        fill_window(s);\n        if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        if (s.lookahead === 0) {\n          break;\n        } /* flush the current block */\n      }\n\n      /* Insert the string window[strstart .. strstart+2] in the\n       * dictionary, and set hash_head to the head of the hash chain:\n       */\n      hash_head = 0 /*NIL*/;\n      if (s.lookahead >= MIN_MATCH) {\n        /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n        hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = s.strstart;\n        /***/\n      }\n\n      /* Find the longest match, discarding those <= prev_length.\n       */\n      s.prev_length = s.match_length;\n      s.prev_match = s.match_start;\n      s.match_length = MIN_MATCH - 1;\n      if (hash_head !== 0 /*NIL*/ && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD /*MAX_DIST(s)*/) {\n        /* To simplify the code, we prevent matches with the string\n         * of window index 0 (in particular we have to avoid a match\n         * of the string with itself at the start of the input file).\n         */\n        s.match_length = longest_match(s, hash_head);\n        /* longest_match() sets match_start */\n\n        if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096 /*TOO_FAR*/)) {\n          /* If prev_match is also MIN_MATCH, match_start is garbage\n           * but we will ignore the current match anyway.\n           */\n          s.match_length = MIN_MATCH - 1;\n        }\n      }\n      /* If there was a match at the previous step and the current\n       * match is not better, output the previous match:\n       */\n      if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n        max_insert = s.strstart + s.lookahead - MIN_MATCH;\n        /* Do not insert strings in hash table beyond this. */\n\n        //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n        /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                       s.prev_length - MIN_MATCH, bflush);***/\n        bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n        /* Insert in hash table all strings up to the end of the match.\n         * strstart-1 and strstart are already inserted. If there is not\n         * enough lookahead, the last two strings are not inserted in\n         * the hash table.\n         */\n        s.lookahead -= s.prev_length - 1;\n        s.prev_length -= 2;\n        do {\n          if (++s.strstart <= max_insert) {\n            /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n            hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n            s.head[s.ins_h] = s.strstart;\n            /***/\n          }\n        } while (--s.prev_length !== 0);\n        s.match_available = 0;\n        s.match_length = MIN_MATCH - 1;\n        s.strstart++;\n        if (bflush) {\n          /*** FLUSH_BLOCK(s, 0); ***/\n          flush_block_only(s, false);\n          if (s.strm.avail_out === 0) {\n            return BS_NEED_MORE;\n          }\n          /***/\n        }\n      } else if (s.match_available) {\n        /* If there was no match at the previous position, output a\n         * single literal. If there was a match but the current match\n         * is longer, truncate the previous match to a single literal.\n         */\n        //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n        /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n        bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n        if (bflush) {\n          /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n          flush_block_only(s, false);\n          /***/\n        }\n        s.strstart++;\n        s.lookahead--;\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n      } else {\n        /* There is no previous match to compare with, wait for\n         * the next step to decide.\n         */\n        s.match_available = 1;\n        s.strstart++;\n        s.lookahead--;\n      }\n    }\n    //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n    if (s.match_available) {\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n      s.match_available = 0;\n    }\n    s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n    if (flush === Z_FINISH) {\n      /*** FLUSH_BLOCK(s, 1); ***/\n      flush_block_only(s, true);\n      if (s.strm.avail_out === 0) {\n        return BS_FINISH_STARTED;\n      }\n      /***/\n      return BS_FINISH_DONE;\n    }\n    if (s.last_lit) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n    return BS_BLOCK_DONE;\n  }\n\n  /* ===========================================================================\n   * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n   * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n   * deflate switches away from Z_RLE.)\n   */\n  function deflate_rle(s, flush) {\n    var bflush; /* set if current block must be flushed */\n    var prev; /* byte at distance one to match */\n    var scan, strend; /* scan goes up to strend for length of run */\n\n    var _win = s.window;\n    for (;;) {\n      /* Make sure that we always have enough lookahead, except\n       * at the end of the input file. We need MAX_MATCH bytes\n       * for the longest run, plus one for the unrolled loop.\n       */\n      if (s.lookahead <= MAX_MATCH) {\n        fill_window(s);\n        if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        if (s.lookahead === 0) {\n          break;\n        } /* flush the current block */\n      }\n\n      /* See how many times the previous byte repeats */\n      s.match_length = 0;\n      if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n        scan = s.strstart - 1;\n        prev = _win[scan];\n        if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n          strend = s.strstart + MAX_MATCH;\n          do {\n            // Do nothing\n          } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);\n          s.match_length = MAX_MATCH - (strend - scan);\n          if (s.match_length > s.lookahead) {\n            s.match_length = s.lookahead;\n          }\n        }\n        //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n      }\n\n      /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n      if (s.match_length >= MIN_MATCH) {\n        //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n        /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n        bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n        s.lookahead -= s.match_length;\n        s.strstart += s.match_length;\n        s.match_length = 0;\n      } else {\n        /* No match, output a literal byte */\n        //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n        /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n        bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n        s.lookahead--;\n        s.strstart++;\n      }\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n    }\n    s.insert = 0;\n    if (flush === Z_FINISH) {\n      /*** FLUSH_BLOCK(s, 1); ***/\n      flush_block_only(s, true);\n      if (s.strm.avail_out === 0) {\n        return BS_FINISH_STARTED;\n      }\n      /***/\n      return BS_FINISH_DONE;\n    }\n    if (s.last_lit) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n    return BS_BLOCK_DONE;\n  }\n\n  /* ===========================================================================\n   * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n   * (It will be regenerated if this run of deflate switches away from Huffman.)\n   */\n  function deflate_huff(s, flush) {\n    var bflush; /* set if current block must be flushed */\n\n    for (;;) {\n      /* Make sure that we have a literal to write. */\n      if (s.lookahead === 0) {\n        fill_window(s);\n        if (s.lookahead === 0) {\n          if (flush === Z_NO_FLUSH) {\n            return BS_NEED_MORE;\n          }\n          break; /* flush the current block */\n        }\n      }\n\n      /* Output a literal byte */\n      s.match_length = 0;\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n      s.lookahead--;\n      s.strstart++;\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n    }\n    s.insert = 0;\n    if (flush === Z_FINISH) {\n      /*** FLUSH_BLOCK(s, 1); ***/\n      flush_block_only(s, true);\n      if (s.strm.avail_out === 0) {\n        return BS_FINISH_STARTED;\n      }\n      /***/\n      return BS_FINISH_DONE;\n    }\n    if (s.last_lit) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n    return BS_BLOCK_DONE;\n  }\n\n  /* Values for max_lazy_match, good_match and max_chain_length, depending on\n   * the desired pack level (0..9). The values given below have been tuned to\n   * exclude worst case performance for pathological files. Better values may be\n   * found for specific files.\n   */\n  function Config(good_length, max_lazy, nice_length, max_chain, func) {\n    this.good_length = good_length;\n    this.max_lazy = max_lazy;\n    this.nice_length = nice_length;\n    this.max_chain = max_chain;\n    this.func = func;\n  }\n  var configuration_table;\n  configuration_table = [/*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */];\n\n  /* ===========================================================================\n   * Initialize the \"longest match\" routines for a new zlib stream\n   */\n  function lm_init(s) {\n    s.window_size = 2 * s.w_size;\n\n    /*** CLEAR_HASH(s); ***/\n    zero(s.head); // Fill with NIL (= 0);\n\n    /* Set the default configuration parameters:\n     */\n    s.max_lazy_match = configuration_table[s.level].max_lazy;\n    s.good_match = configuration_table[s.level].good_length;\n    s.nice_match = configuration_table[s.level].nice_length;\n    s.max_chain_length = configuration_table[s.level].max_chain;\n    s.strstart = 0;\n    s.block_start = 0;\n    s.lookahead = 0;\n    s.insert = 0;\n    s.match_length = s.prev_length = MIN_MATCH - 1;\n    s.match_available = 0;\n    s.ins_h = 0;\n  }\n  function DeflateState() {\n    this.strm = null; /* pointer back to this zlib stream */\n    this.status = 0; /* as the name implies */\n    this.pending_buf = null; /* output still pending */\n    this.pending_buf_size = 0; /* size of pending_buf */\n    this.pending_out = 0; /* next pending byte to output to the stream */\n    this.pending = 0; /* nb of bytes in the pending buffer */\n    this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n    this.gzhead = null; /* gzip header information to write */\n    this.gzindex = 0; /* where in extra, name, or comment */\n    this.method = Z_DEFLATED; /* can only be DEFLATED */\n    this.last_flush = -1; /* value of flush param for previous deflate call */\n\n    this.w_size = 0; /* LZ77 window size (32K by default) */\n    this.w_bits = 0; /* log2(w_size)  (8..16) */\n    this.w_mask = 0; /* w_size - 1 */\n\n    this.window = null;\n    /* Sliding window. Input bytes are read into the second half of the window,\n     * and move to the first half later to keep a dictionary of at least wSize\n     * bytes. With this organization, matches are limited to a distance of\n     * wSize-MAX_MATCH bytes, but this ensures that IO is always\n     * performed with a length multiple of the block size.\n     */\n\n    this.window_size = 0;\n    /* Actual size of window: 2*wSize, except when the user input buffer\n     * is directly used as sliding window.\n     */\n\n    this.prev = null;\n    /* Link to older string with same hash index. To limit the size of this\n     * array to 64K, this link is maintained only for the last 32K strings.\n     * An index in this array is thus a window index modulo 32K.\n     */\n\n    this.head = null; /* Heads of the hash chains or NIL. */\n\n    this.ins_h = 0; /* hash index of string to be inserted */\n    this.hash_size = 0; /* number of elements in hash table */\n    this.hash_bits = 0; /* log2(hash_size) */\n    this.hash_mask = 0; /* hash_size-1 */\n\n    this.hash_shift = 0;\n    /* Number of bits by which ins_h must be shifted at each input\n     * step. It must be such that after MIN_MATCH steps, the oldest\n     * byte no longer takes part in the hash key, that is:\n     *   hash_shift * MIN_MATCH >= hash_bits\n     */\n\n    this.block_start = 0;\n    /* Window position at the beginning of the current output block. Gets\n     * negative when the window is moved backwards.\n     */\n\n    this.match_length = 0; /* length of best match */\n    this.prev_match = 0; /* previous match */\n    this.match_available = 0; /* set if previous match exists */\n    this.strstart = 0; /* start of string to insert */\n    this.match_start = 0; /* start of matching string */\n    this.lookahead = 0; /* number of valid bytes ahead in window */\n\n    this.prev_length = 0;\n    /* Length of the best match at previous step. Matches not greater than this\n     * are discarded. This is used in the lazy match evaluation.\n     */\n\n    this.max_chain_length = 0;\n    /* To speed up deflation, hash chains are never searched beyond this\n     * length.  A higher limit improves compression ratio but degrades the\n     * speed.\n     */\n\n    this.max_lazy_match = 0;\n    /* Attempt to find a better match only when the current match is strictly\n     * smaller than this value. This mechanism is used only for compression\n     * levels >= 4.\n     */\n    // That's alias to max_lazy_match, don't use directly\n    //this.max_insert_length = 0;\n    /* Insert new strings in the hash table only if the match length is not\n     * greater than this length. This saves time but degrades compression.\n     * max_insert_length is used only for compression levels <= 3.\n     */\n\n    this.level = 0; /* compression level (1..9) */\n    this.strategy = 0; /* favor or force Huffman coding*/\n\n    this.good_match = 0;\n    /* Use a faster search when the previous match is longer than this */\n\n    this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n    /* used by trees.c: */\n\n    /* Didn't use ct_data typedef below to suppress compiler warning */\n\n    // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n    // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n    // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n    // Use flat array of DOUBLE size, with interleaved fata,\n    // because JS does not support effective\n    this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n    this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n    this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n    zero(this.dyn_ltree);\n    zero(this.dyn_dtree);\n    zero(this.bl_tree);\n    this.l_desc = null; /* desc. for literal tree */\n    this.d_desc = null; /* desc. for distance tree */\n    this.bl_desc = null; /* desc. for bit length tree */\n\n    //ush bl_count[MAX_BITS+1];\n    this.bl_count = new utils.Buf16(MAX_BITS + 1);\n    /* number of codes at each bit length for an optimal tree */\n\n    //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n    this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n    zero(this.heap);\n    this.heap_len = 0; /* number of elements in the heap */\n    this.heap_max = 0; /* element of largest frequency */\n    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n     * The same heap array is used to build all trees.\n     */\n\n    this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n    zero(this.depth);\n    /* Depth of each subtree used as tie breaker for trees of equal frequency\n     */\n\n    this.l_buf = 0; /* buffer index for literals or lengths */\n\n    this.lit_bufsize = 0;\n    /* Size of match buffer for literals/lengths.  There are 4 reasons for\n     * limiting lit_bufsize to 64K:\n     *   - frequencies can be kept in 16 bit counters\n     *   - if compression is not successful for the first block, all input\n     *     data is still in the window so we can still emit a stored block even\n     *     when input comes from standard input.  (This can also be done for\n     *     all blocks if lit_bufsize is not greater than 32K.)\n     *   - if compression is not successful for a file smaller than 64K, we can\n     *     even emit a stored file instead of a stored block (saving 5 bytes).\n     *     This is applicable only for zip (not gzip or zlib).\n     *   - creating new Huffman trees less frequently may not provide fast\n     *     adaptation to changes in the input data statistics. (Take for\n     *     example a binary file with poorly compressible code followed by\n     *     a highly compressible string table.) Smaller buffer sizes give\n     *     fast adaptation but have of course the overhead of transmitting\n     *     trees more frequently.\n     *   - I can't count above 4\n     */\n\n    this.last_lit = 0; /* running index in l_buf */\n\n    this.d_buf = 0;\n    /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n     * the same number of elements. To use different lengths, an extra flag\n     * array would be necessary.\n     */\n\n    this.opt_len = 0; /* bit length of current block with optimal trees */\n    this.static_len = 0; /* bit length of current block with static trees */\n    this.matches = 0; /* number of string matches in current block */\n    this.insert = 0; /* bytes at end of window left to insert */\n\n    this.bi_buf = 0;\n    /* Output buffer. bits are inserted starting at the bottom (least\n     * significant bits).\n     */\n    this.bi_valid = 0;\n    /* Number of valid bits in bi_buf.  All bits above the last valid bit\n     * are always zero.\n     */\n\n    // Used for window memory init. We safely ignore it for JS. That makes\n    // sense only for pointers and memory check tools.\n    //this.high_water = 0;\n    /* High water mark offset in window for initialized bytes -- bytes above\n     * this are set to zero in order to avoid memory check warnings when\n     * longest match routines access bytes past the input.  This is then\n     * updated to the new high water mark.\n     */\n  }\n  function deflateResetKeep(strm) {\n    var s;\n    if (!strm || !strm.state) {\n      return err(strm, Z_STREAM_ERROR);\n    }\n    strm.total_in = strm.total_out = 0;\n    strm.data_type = Z_UNKNOWN;\n    s = strm.state;\n    s.pending = 0;\n    s.pending_out = 0;\n    if (s.wrap < 0) {\n      s.wrap = -s.wrap;\n      /* was made negative by deflate(..., Z_FINISH); */\n    }\n    s.status = s.wrap ? INIT_STATE : BUSY_STATE;\n    strm.adler = s.wrap === 2 ? 0 // crc32(0, Z_NULL, 0)\n    : 1; // adler32(0, Z_NULL, 0)\n    s.last_flush = Z_NO_FLUSH;\n    trees._tr_init(s);\n    return Z_OK;\n  }\n  function deflateReset(strm) {\n    var ret = deflateResetKeep(strm);\n    if (ret === Z_OK) {\n      lm_init(strm.state);\n    }\n    return ret;\n  }\n  function deflateSetHeader(strm, head) {\n    if (!strm || !strm.state) {\n      return Z_STREAM_ERROR;\n    }\n    if (strm.state.wrap !== 2) {\n      return Z_STREAM_ERROR;\n    }\n    strm.state.gzhead = head;\n    return Z_OK;\n  }\n  function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n    if (!strm) {\n      // === Z_NULL\n      return Z_STREAM_ERROR;\n    }\n    var wrap = 1;\n    if (level === Z_DEFAULT_COMPRESSION) {\n      level = 6;\n    }\n    if (windowBits < 0) {\n      /* suppress zlib wrapper */\n      wrap = 0;\n      windowBits = -windowBits;\n    } else if (windowBits > 15) {\n      wrap = 2; /* write gzip wrapper instead */\n      windowBits -= 16;\n    }\n    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {\n      return err(strm, Z_STREAM_ERROR);\n    }\n    if (windowBits === 8) {\n      windowBits = 9;\n    }\n    /* until 256-byte window bug fixed */\n\n    var s = new DeflateState();\n    strm.state = s;\n    s.strm = strm;\n    s.wrap = wrap;\n    s.gzhead = null;\n    s.w_bits = windowBits;\n    s.w_size = 1 << s.w_bits;\n    s.w_mask = s.w_size - 1;\n    s.hash_bits = memLevel + 7;\n    s.hash_size = 1 << s.hash_bits;\n    s.hash_mask = s.hash_size - 1;\n    s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n    s.window = new utils.Buf8(s.w_size * 2);\n    s.head = new utils.Buf16(s.hash_size);\n    s.prev = new utils.Buf16(s.w_size);\n\n    // Don't need mem init magic for JS.\n    //s.high_water = 0;  /* nothing written to s->window yet */\n\n    s.lit_bufsize = 1 << memLevel + 6; /* 16K elements by default */\n\n    s.pending_buf_size = s.lit_bufsize * 4;\n\n    //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n    //s->pending_buf = (uchf *) overlay;\n    s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n    // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n    //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n    s.d_buf = 1 * s.lit_bufsize;\n\n    //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n    s.l_buf = (1 + 2) * s.lit_bufsize;\n    s.level = level;\n    s.strategy = strategy;\n    s.method = method;\n    return deflateReset(strm);\n  }\n  function deflateInit(strm, level) {\n    return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n  }\n  function deflate(strm, flush) {\n    var old_flush, s;\n    var beg, val; // for gzip header write only\n\n    if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {\n      return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n    }\n    s = strm.state;\n    if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {\n      return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);\n    }\n    s.strm = strm; /* just in case */\n    old_flush = s.last_flush;\n    s.last_flush = flush;\n\n    /* Write the header */\n    if (s.status === INIT_STATE) {\n      if (s.wrap === 2) {\n        // GZIP header\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        put_byte(s, 31);\n        put_byte(s, 139);\n        put_byte(s, 8);\n        if (!s.gzhead) {\n          // s->gzhead == Z_NULL\n          put_byte(s, 0);\n          put_byte(s, 0);\n          put_byte(s, 0);\n          put_byte(s, 0);\n          put_byte(s, 0);\n          put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);\n          put_byte(s, OS_CODE);\n          s.status = BUSY_STATE;\n        } else {\n          put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));\n          put_byte(s, s.gzhead.time & 0xff);\n          put_byte(s, s.gzhead.time >> 8 & 0xff);\n          put_byte(s, s.gzhead.time >> 16 & 0xff);\n          put_byte(s, s.gzhead.time >> 24 & 0xff);\n          put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);\n          put_byte(s, s.gzhead.os & 0xff);\n          if (s.gzhead.extra && s.gzhead.extra.length) {\n            put_byte(s, s.gzhead.extra.length & 0xff);\n            put_byte(s, s.gzhead.extra.length >> 8 & 0xff);\n          }\n          if (s.gzhead.hcrc) {\n            strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending, 0);\n          }\n          s.gzindex = 0;\n          s.status = EXTRA_STATE;\n        }\n      } else\n        // DEFLATE header\n        {\n          var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;\n          var level_flags = -1;\n          if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n            level_flags = 0;\n          } else if (s.level < 6) {\n            level_flags = 1;\n          } else if (s.level === 6) {\n            level_flags = 2;\n          } else {\n            level_flags = 3;\n          }\n          header |= level_flags << 6;\n          if (s.strstart !== 0) {\n            header |= PRESET_DICT;\n          }\n          header += 31 - header % 31;\n          s.status = BUSY_STATE;\n          putShortMSB(s, header);\n\n          /* Save the adler32 of the preset dictionary: */\n          if (s.strstart !== 0) {\n            putShortMSB(s, strm.adler >>> 16);\n            putShortMSB(s, strm.adler & 0xffff);\n          }\n          strm.adler = 1; // adler32(0L, Z_NULL, 0);\n        }\n    }\n\n    //#ifdef GZIP\n    if (s.status === EXTRA_STATE) {\n      if (s.gzhead.extra /* != Z_NULL*/) {\n        beg = s.pending; /* start of bytes to update crc */\n\n        while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n            flush_pending(strm);\n            beg = s.pending;\n            if (s.pending === s.pending_buf_size) {\n              break;\n            }\n          }\n          put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n          s.gzindex++;\n        }\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n        if (s.gzindex === s.gzhead.extra.length) {\n          s.gzindex = 0;\n          s.status = NAME_STATE;\n        }\n      } else {\n        s.status = NAME_STATE;\n      }\n    }\n    if (s.status === NAME_STATE) {\n      if (s.gzhead.name /* != Z_NULL*/) {\n        beg = s.pending; /* start of bytes to update crc */\n        //int val;\n\n        do {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n            flush_pending(strm);\n            beg = s.pending;\n            if (s.pending === s.pending_buf_size) {\n              val = 1;\n              break;\n            }\n          }\n          // JS specific: little magic to add zero terminator to end of string\n          if (s.gzindex < s.gzhead.name.length) {\n            val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n          } else {\n            val = 0;\n          }\n          put_byte(s, val);\n        } while (val !== 0);\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n        if (val === 0) {\n          s.gzindex = 0;\n          s.status = COMMENT_STATE;\n        }\n      } else {\n        s.status = COMMENT_STATE;\n      }\n    }\n    if (s.status === COMMENT_STATE) {\n      if (s.gzhead.comment /* != Z_NULL*/) {\n        beg = s.pending; /* start of bytes to update crc */\n        //int val;\n\n        do {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n            flush_pending(strm);\n            beg = s.pending;\n            if (s.pending === s.pending_buf_size) {\n              val = 1;\n              break;\n            }\n          }\n          // JS specific: little magic to add zero terminator to end of string\n          if (s.gzindex < s.gzhead.comment.length) {\n            val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n          } else {\n            val = 0;\n          }\n          put_byte(s, val);\n        } while (val !== 0);\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = (0, _crc.default)(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n        if (val === 0) {\n          s.status = HCRC_STATE;\n        }\n      } else {\n        s.status = HCRC_STATE;\n      }\n    }\n    if (s.status === HCRC_STATE) {\n      if (s.gzhead.hcrc) {\n        if (s.pending + 2 > s.pending_buf_size) {\n          flush_pending(strm);\n        }\n        if (s.pending + 2 <= s.pending_buf_size) {\n          put_byte(s, strm.adler & 0xff);\n          put_byte(s, strm.adler >> 8 & 0xff);\n          strm.adler = 0; //crc32(0L, Z_NULL, 0);\n          s.status = BUSY_STATE;\n        }\n      } else {\n        s.status = BUSY_STATE;\n      }\n    }\n    //#endif\n\n    /* Flush as much pending output as possible */\n    if (s.pending !== 0) {\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        /* Since avail_out is 0, deflate will be called again with\n         * more output space, but possibly with both pending and\n         * avail_in equal to zero. There won't be anything to do,\n         * but this is not an error situation so make sure we\n         * return OK instead of BUF_ERROR at next call of deflate:\n         */\n        s.last_flush = -1;\n        return Z_OK;\n      }\n\n      /* Make sure there is something to do and avoid duplicate consecutive\n       * flushes. For repeated and useless calls with Z_FINISH, we keep\n       * returning Z_STREAM_END instead of Z_BUF_ERROR.\n       */\n    } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {\n      return err(strm, Z_BUF_ERROR);\n    }\n\n    /* User must not provide more input after the first FINISH: */\n    if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n      return err(strm, Z_BUF_ERROR);\n    }\n\n    /* Start a new block or continue the current one.\n     */\n    if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {\n      var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);\n      if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n        s.status = FINISH_STATE;\n      }\n      if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n        if (strm.avail_out === 0) {\n          s.last_flush = -1;\n          /* avoid BUF_ERROR next call, see above */\n        }\n        return Z_OK;\n        /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n         * of deflate should use the same flush parameter to make sure\n         * that the flush is complete. So we don't have to output an\n         * empty block here, this will be done at next call. This also\n         * ensures that for a very small output buffer, we emit at most\n         * one empty block.\n         */\n      }\n      if (bstate === BS_BLOCK_DONE) {\n        if (flush === Z_PARTIAL_FLUSH) {\n          trees._tr_align(s);\n        } else if (flush !== Z_BLOCK) {\n          /* FULL_FLUSH or SYNC_FLUSH */\n\n          trees._tr_stored_block(s, 0, 0, false);\n          /* For a full flush, this empty block will be recognized\n           * as a special marker by inflate_sync().\n           */\n          if (flush === Z_FULL_FLUSH) {\n            /*** CLEAR_HASH(s); ***/ /* forget history */\n            zero(s.head); // Fill with NIL (= 0);\n\n            if (s.lookahead === 0) {\n              s.strstart = 0;\n              s.block_start = 0;\n              s.insert = 0;\n            }\n          }\n        }\n        flush_pending(strm);\n        if (strm.avail_out === 0) {\n          s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n          return Z_OK;\n        }\n      }\n    }\n    //Assert(strm->avail_out > 0, \"bug2\");\n    //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n    if (flush !== Z_FINISH) {\n      return Z_OK;\n    }\n    if (s.wrap <= 0) {\n      return Z_STREAM_END;\n    }\n\n    /* Write the trailer */\n    if (s.wrap === 2) {\n      put_byte(s, strm.adler & 0xff);\n      put_byte(s, strm.adler >> 8 & 0xff);\n      put_byte(s, strm.adler >> 16 & 0xff);\n      put_byte(s, strm.adler >> 24 & 0xff);\n      put_byte(s, strm.total_in & 0xff);\n      put_byte(s, strm.total_in >> 8 & 0xff);\n      put_byte(s, strm.total_in >> 16 & 0xff);\n      put_byte(s, strm.total_in >> 24 & 0xff);\n    } else {\n      putShortMSB(s, strm.adler >>> 16);\n      putShortMSB(s, strm.adler & 0xffff);\n    }\n    flush_pending(strm);\n    /* If avail_out is zero, the application will call deflate again\n     * to flush the rest.\n     */\n    if (s.wrap > 0) {\n      s.wrap = -s.wrap;\n    }\n    /* write the trailer only once! */\n    return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n  }\n  function deflateEnd(strm) {\n    var status;\n    if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) {\n      return Z_STREAM_ERROR;\n    }\n    status = strm.state.status;\n    if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {\n      return err(strm, Z_STREAM_ERROR);\n    }\n    strm.state = null;\n    return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n  }\n\n  /* =========================================================================\n   * Initializes the compression dictionary from the given byte\n   * sequence without producing any compressed output.\n   */\n  function deflateSetDictionary(strm, dictionary) {\n    var dictLength = dictionary.length;\n    var s;\n    var str, n;\n    var wrap;\n    var avail;\n    var next;\n    var input;\n    var tmpDict;\n    if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) {\n      return Z_STREAM_ERROR;\n    }\n    s = strm.state;\n    wrap = s.wrap;\n    if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {\n      return Z_STREAM_ERROR;\n    }\n\n    /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n    if (wrap === 1) {\n      /* adler32(strm->adler, dictionary, dictLength); */\n      strm.adler = (0, _adler.default)(strm.adler, dictionary, dictLength, 0);\n    }\n    s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n    /* if dictionary would fill window, just replace the history */\n    if (dictLength >= s.w_size) {\n      if (wrap === 0) {\n        /* already empty otherwise */\n        /*** CLEAR_HASH(s); ***/\n        zero(s.head); // Fill with NIL (= 0);\n        s.strstart = 0;\n        s.block_start = 0;\n        s.insert = 0;\n      }\n      /* use the tail */\n      // dictionary = dictionary.slice(dictLength - s.w_size);\n      tmpDict = new utils.Buf8(s.w_size);\n      utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n      dictionary = tmpDict;\n      dictLength = s.w_size;\n    }\n    /* insert dictionary into window and hash */\n    avail = strm.avail_in;\n    next = strm.next_in;\n    input = strm.input;\n    strm.avail_in = dictLength;\n    strm.next_in = 0;\n    strm.input = dictionary;\n    fill_window(s);\n    while (s.lookahead >= MIN_MATCH) {\n      str = s.strstart;\n      n = s.lookahead - (MIN_MATCH - 1);\n      do {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n      } while (--n);\n      s.strstart = str;\n      s.lookahead = MIN_MATCH - 1;\n      fill_window(s);\n    }\n    s.strstart += s.lookahead;\n    s.block_start = s.strstart;\n    s.insert = s.lookahead;\n    s.lookahead = 0;\n    s.match_length = s.prev_length = MIN_MATCH - 1;\n    s.match_available = 0;\n    strm.next_in = next;\n    strm.input = input;\n    strm.avail_in = avail;\n    s.wrap = wrap;\n    return Z_OK;\n  }\n  var deflateInfo = _exports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n  /* Not implemented\n  exports.deflateBound = deflateBound;\n  exports.deflateCopy = deflateCopy;\n  exports.deflateParams = deflateParams;\n  exports.deflatePending = deflatePending;\n  exports.deflatePrime = deflatePrime;\n  exports.deflateTune = deflateTune;\n  */\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/gzheader\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = GZheader;\n  function GZheader() {\n    /* true if compressed data believed to be text */\n    this.text = 0;\n    /* modification time */\n    this.time = 0;\n    /* extra flags (not used when writing a gzip file) */\n    this.xflags = 0;\n    /* operating system */\n    this.os = 0;\n    /* pointer to extra field or Z_NULL if none */\n    this.extra = null;\n    /* extra field length (valid if extra != Z_NULL) */\n    this.extra_len = 0; // Actually, we don't need it in JS,\n    // but leave for few code modifications\n\n    //\n    // Setup limits is not necessary because in js we should not preallocate memory\n    // for inflate use constant limit in 65536 bytes\n    //\n\n    /* space at extra (only when reading header) */\n    // this.extra_max  = 0;\n    /* pointer to zero-terminated file name or Z_NULL */\n    this.name = '';\n    /* space at name (only when reading header) */\n    // this.name_max   = 0;\n    /* pointer to zero-terminated comment or Z_NULL */\n    this.comment = '';\n    /* space at comment (only when reading header) */\n    // this.comm_max   = 0;\n    /* true if there was or will be a header crc */\n    this.hcrc = 0;\n    /* true when done reading gzip header (not used when writing a gzip file) */\n    this.done = false;\n  }\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/inffast\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = inflate_fast;\n  // See state defs from inflate.js\n  var BAD = 30; /* got a data error -- remain here until reset */\n  var TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n  /*\n     Decode literal, length, and distance codes and write out the resulting\n     literal and match bytes until either not enough input or output is\n     available, an end-of-block is encountered, or a data error is encountered.\n     When large enough input and output buffers are supplied to inflate(), for\n     example, a 16K input buffer and a 64K output buffer, more than 95% of the\n     inflate execution time is spent in this routine.\n  \n     Entry assumptions:\n  \n          state.mode === LEN\n          strm.avail_in >= 6\n          strm.avail_out >= 258\n          start >= strm.avail_out\n          state.bits < 8\n  \n     On return, state.mode is one of:\n  \n          LEN -- ran out of enough output space or enough available input\n          TYPE -- reached end of block code, inflate() to interpret next block\n          BAD -- error in block data\n  \n     Notes:\n  \n      - The maximum input bits used by a length/distance pair is 15 bits for the\n        length code, 5 bits for the length extra, 15 bits for the distance code,\n        and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n        Therefore if strm.avail_in >= 6, then there is enough input to avoid\n        checking for available input while decoding.\n  \n      - The maximum bytes that a single length/distance pair can output is 258\n        bytes, which is the maximum length that can be coded.  inflate_fast()\n        requires strm.avail_out >= 258 for each loop to avoid checking for\n        output space.\n   */\n  function inflate_fast(strm, start) {\n    var state;\n    var _in; /* local strm.input */\n    var last; /* have enough input while in < last */\n    var _out; /* local strm.output */\n    var beg; /* inflate()'s initial strm.output */\n    var end; /* while out < end, enough space available */\n    //#ifdef INFLATE_STRICT\n    var dmax; /* maximum distance from zlib header */\n    //#endif\n    var wsize; /* window size or zero if not using window */\n    var whave; /* valid bytes in the window */\n    var wnext; /* window write index */\n    // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n    var s_window; /* allocated sliding window, if wsize != 0 */\n    var hold; /* local strm.hold */\n    var bits; /* local strm.bits */\n    var lcode; /* local strm.lencode */\n    var dcode; /* local strm.distcode */\n    var lmask; /* mask for first level of length codes */\n    var dmask; /* mask for first level of distance codes */\n    var here; /* retrieved table entry */\n    var op; /* code bits, operation, extra bits, or */\n    /*  window position, window bytes to copy */\n    var len; /* match length, unused bytes */\n    var dist; /* match distance */\n    var from; /* where to copy match from */\n    var from_source;\n    var input, output; // JS specific, because we have no pointers\n\n    /* copy state to local variables */\n    state = strm.state;\n    //here = state.here;\n    _in = strm.next_in;\n    input = strm.input;\n    last = _in + (strm.avail_in - 5);\n    _out = strm.next_out;\n    output = strm.output;\n    beg = _out - (start - strm.avail_out);\n    end = _out + (strm.avail_out - 257);\n    //#ifdef INFLATE_STRICT\n    dmax = state.dmax;\n    //#endif\n    wsize = state.wsize;\n    whave = state.whave;\n    wnext = state.wnext;\n    s_window = state.window;\n    hold = state.hold;\n    bits = state.bits;\n    lcode = state.lencode;\n    dcode = state.distcode;\n    lmask = (1 << state.lenbits) - 1;\n    dmask = (1 << state.distbits) - 1;\n\n    /* decode literals and length/distances until end-of-block or not enough\n       input data or output space */\n\n    top: do {\n      if (bits < 15) {\n        hold += input[_in++] << bits;\n        bits += 8;\n        hold += input[_in++] << bits;\n        bits += 8;\n      }\n      here = lcode[hold & lmask];\n      dolen: for (;;) {\n        // Goto emulation\n        op = here >>> 24 /*here.bits*/;\n        hold >>>= op;\n        bits -= op;\n        op = here >>> 16 & 0xff /*here.op*/;\n        if (op === 0) {\n          /* literal */\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          output[_out++] = here & 0xffff /*here.val*/;\n        } else if (op & 16) {\n          /* length base */\n          len = here & 0xffff /*here.val*/;\n          op &= 15; /* number of extra bits */\n          if (op) {\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n            }\n            len += hold & (1 << op) - 1;\n            hold >>>= op;\n            bits -= op;\n          }\n          //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n          if (bits < 15) {\n            hold += input[_in++] << bits;\n            bits += 8;\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          here = dcode[hold & dmask];\n          dodist: for (;;) {\n            // goto emulation\n            op = here >>> 24 /*here.bits*/;\n            hold >>>= op;\n            bits -= op;\n            op = here >>> 16 & 0xff /*here.op*/;\n            if (op & 16) {\n              /* distance base */\n              dist = here & 0xffff /*here.val*/;\n              op &= 15; /* number of extra bits */\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n                if (bits < op) {\n                  hold += input[_in++] << bits;\n                  bits += 8;\n                }\n              }\n              dist += hold & (1 << op) - 1;\n              //#ifdef INFLATE_STRICT\n              if (dist > dmax) {\n                strm.msg = 'invalid distance too far back';\n                state.mode = BAD;\n                break top;\n              }\n              //#endif\n              hold >>>= op;\n              bits -= op;\n              //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n              op = _out - beg; /* max distance in output */\n              if (dist > op) {\n                /* see if copy from window */\n                op = dist - op; /* distance back in window */\n                if (op > whave) {\n                  if (state.sane) {\n                    strm.msg = 'invalid distance too far back';\n                    state.mode = BAD;\n                    break top;\n                  }\n\n                  // (!) This block is disabled in zlib defailts,\n                  // don't enable it for binary compatibility\n                  //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n                  //                if (len <= op - whave) {\n                  //                  do {\n                  //                    output[_out++] = 0;\n                  //                  } while (--len);\n                  //                  continue top;\n                  //                }\n                  //                len -= op - whave;\n                  //                do {\n                  //                  output[_out++] = 0;\n                  //                } while (--op > whave);\n                  //                if (op === 0) {\n                  //                  from = _out - dist;\n                  //                  do {\n                  //                    output[_out++] = output[from++];\n                  //                  } while (--len);\n                  //                  continue top;\n                  //                }\n                  //#endif\n                }\n                from = 0; // window index\n                from_source = s_window;\n                if (wnext === 0) {\n                  /* very common case */\n                  from += wsize - op;\n                  if (op < len) {\n                    /* some from window */\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist; /* rest from output */\n                    from_source = output;\n                  }\n                } else if (wnext < op) {\n                  /* wrap around window */\n                  from += wsize + wnext - op;\n                  op -= wnext;\n                  if (op < len) {\n                    /* some from end of window */\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = 0;\n                    if (wnext < len) {\n                      /* some from start of window */\n                      op = wnext;\n                      len -= op;\n                      do {\n                        output[_out++] = s_window[from++];\n                      } while (--op);\n                      from = _out - dist; /* rest from output */\n                      from_source = output;\n                    }\n                  }\n                } else {\n                  /* contiguous in window */\n                  from += wnext - op;\n                  if (op < len) {\n                    /* some from window */\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist; /* rest from output */\n                    from_source = output;\n                  }\n                }\n                while (len > 2) {\n                  output[_out++] = from_source[from++];\n                  output[_out++] = from_source[from++];\n                  output[_out++] = from_source[from++];\n                  len -= 3;\n                }\n                if (len) {\n                  output[_out++] = from_source[from++];\n                  if (len > 1) {\n                    output[_out++] = from_source[from++];\n                  }\n                }\n              } else {\n                from = _out - dist; /* copy direct from output */\n                do {\n                  /* minimum length is three */\n                  output[_out++] = output[from++];\n                  output[_out++] = output[from++];\n                  output[_out++] = output[from++];\n                  len -= 3;\n                } while (len > 2);\n                if (len) {\n                  output[_out++] = output[from++];\n                  if (len > 1) {\n                    output[_out++] = output[from++];\n                  }\n                }\n              }\n            } else if ((op & 64) === 0) {\n              /* 2nd level distance code */\n              here = dcode[(here & 0xffff /*here.val*/) + (hold & (1 << op) - 1)];\n              continue dodist;\n            } else {\n              strm.msg = 'invalid distance code';\n              state.mode = BAD;\n              break top;\n            }\n            break; // need to emulate goto via \"continue\"\n          }\n        } else if ((op & 64) === 0) {\n          /* 2nd level length code */\n          here = lcode[(here & 0xffff /*here.val*/) + (hold & (1 << op) - 1)];\n          continue dolen;\n        } else if (op & 32) {\n          /* end-of-block */\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.mode = TYPE;\n          break top;\n        } else {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break top;\n        }\n        break; // need to emulate goto via \"continue\"\n      }\n    } while (_in < last && _out < end);\n\n    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n    len = bits >> 3;\n    _in -= len;\n    bits -= len << 3;\n    hold &= (1 << bits) - 1;\n\n    /* update state and return */\n    strm.next_in = _in;\n    strm.next_out = _out;\n    strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);\n    strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);\n    state.hold = hold;\n    state.bits = bits;\n    return;\n  }\n  ;\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/inflate\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/utils/common\", \"novnc-sockjs/vendor/pako/lib/zlib/adler32\", \"novnc-sockjs/vendor/pako/lib/zlib/crc32\", \"novnc-sockjs/vendor/pako/lib/zlib/inffast\", \"novnc-sockjs/vendor/pako/lib/zlib/inftrees\"], function (_exports, utils, _adler, _crc, _inffast, _inftrees) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Z_TREES = _exports.Z_STREAM_ERROR = _exports.Z_STREAM_END = _exports.Z_OK = _exports.Z_NEED_DICT = _exports.Z_MEM_ERROR = _exports.Z_FINISH = _exports.Z_DEFLATED = _exports.Z_DATA_ERROR = _exports.Z_BUF_ERROR = _exports.Z_BLOCK = void 0;\n  _exports.inflate = inflate;\n  _exports.inflateEnd = inflateEnd;\n  _exports.inflateGetHeader = inflateGetHeader;\n  _exports.inflateInfo = void 0;\n  _exports.inflateInit = inflateInit;\n  _exports.inflateInit2 = inflateInit2;\n  _exports.inflateReset = inflateReset;\n  _exports.inflateReset2 = inflateReset2;\n  _exports.inflateResetKeep = inflateResetKeep;\n  _exports.inflateSetDictionary = inflateSetDictionary;\n  var CODES = 0;\n  var LENS = 1;\n  var DISTS = 2;\n\n  /* Public constants ==========================================================*/\n  /* ===========================================================================*/\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  //export const Z_NO_FLUSH      = 0;\n  //export const Z_PARTIAL_FLUSH = 1;\n  //export const Z_SYNC_FLUSH    = 2;\n  //export const Z_FULL_FLUSH    = 3;\n  const Z_FINISH = _exports.Z_FINISH = 4;\n  const Z_BLOCK = _exports.Z_BLOCK = 5;\n  const Z_TREES = _exports.Z_TREES = 6;\n\n  /* Return codes for the compression/decompression functions. Negative values\n   * are errors, positive values are used for special but normal events.\n   */\n  const Z_OK = _exports.Z_OK = 0;\n  const Z_STREAM_END = _exports.Z_STREAM_END = 1;\n  const Z_NEED_DICT = _exports.Z_NEED_DICT = 2;\n  //export const Z_ERRNO         = -1;\n  const Z_STREAM_ERROR = _exports.Z_STREAM_ERROR = -2;\n  const Z_DATA_ERROR = _exports.Z_DATA_ERROR = -3;\n  const Z_MEM_ERROR = _exports.Z_MEM_ERROR = -4;\n  const Z_BUF_ERROR = _exports.Z_BUF_ERROR = -5;\n  //export const Z_VERSION_ERROR = -6;\n\n  /* The deflate compression method */\n  const Z_DEFLATED = _exports.Z_DEFLATED = 8;\n\n  /* STATES ====================================================================*/\n  /* ===========================================================================*/\n\n  var HEAD = 1; /* i: waiting for magic header */\n  var FLAGS = 2; /* i: waiting for method and flags (gzip) */\n  var TIME = 3; /* i: waiting for modification time (gzip) */\n  var OS = 4; /* i: waiting for extra flags and operating system (gzip) */\n  var EXLEN = 5; /* i: waiting for extra length (gzip) */\n  var EXTRA = 6; /* i: waiting for extra bytes (gzip) */\n  var NAME = 7; /* i: waiting for end of file name (gzip) */\n  var COMMENT = 8; /* i: waiting for end of comment (gzip) */\n  var HCRC = 9; /* i: waiting for header crc (gzip) */\n  var DICTID = 10; /* i: waiting for dictionary check value */\n  var DICT = 11; /* waiting for inflateSetDictionary() call */\n  var TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n  var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\n  var STORED = 14; /* i: waiting for stored size (length and complement) */\n  var COPY_ = 15; /* i/o: same as COPY below, but only first time in */\n  var COPY = 16; /* i/o: waiting for input or output to copy stored block */\n  var TABLE = 17; /* i: waiting for dynamic block table lengths */\n  var LENLENS = 18; /* i: waiting for code length code lengths */\n  var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\n  var LEN_ = 20; /* i: same as LEN below, but only first time in */\n  var LEN = 21; /* i: waiting for length/lit/eob code */\n  var LENEXT = 22; /* i: waiting for length extra bits */\n  var DIST = 23; /* i: waiting for distance code */\n  var DISTEXT = 24; /* i: waiting for distance extra bits */\n  var MATCH = 25; /* o: waiting for output space to copy string */\n  var LIT = 26; /* o: waiting for output space to write literal */\n  var CHECK = 27; /* i: waiting for 32-bit check value */\n  var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\n  var DONE = 29; /* finished check, done -- remain here until reset */\n  var BAD = 30; /* got a data error -- remain here until reset */\n  var MEM = 31; /* got an inflate() memory error -- remain here until reset */\n  var SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n  /* ===========================================================================*/\n\n  var ENOUGH_LENS = 852;\n  var ENOUGH_DISTS = 592;\n  //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\n  var MAX_WBITS = 15;\n  /* 32K LZ77 window */\n  var DEF_WBITS = MAX_WBITS;\n  function zswap32(q) {\n    return (q >>> 24 & 0xff) + (q >>> 8 & 0xff00) + ((q & 0xff00) << 8) + ((q & 0xff) << 24);\n  }\n  function InflateState() {\n    this.mode = 0; /* current inflate mode */\n    this.last = false; /* true if processing last block */\n    this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n    this.havedict = false; /* true if dictionary provided */\n    this.flags = 0; /* gzip header method and flags (0 if zlib) */\n    this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n    this.check = 0; /* protected copy of check value */\n    this.total = 0; /* protected copy of output count */\n    // TODO: may be {}\n    this.head = null; /* where to save gzip header information */\n\n    /* sliding window */\n    this.wbits = 0; /* log base 2 of requested window size */\n    this.wsize = 0; /* window size or zero if not using window */\n    this.whave = 0; /* valid bytes in the window */\n    this.wnext = 0; /* window write index */\n    this.window = null; /* allocated sliding window, if needed */\n\n    /* bit accumulator */\n    this.hold = 0; /* input bit accumulator */\n    this.bits = 0; /* number of bits in \"in\" */\n\n    /* for string and stored block copying */\n    this.length = 0; /* literal or length of data to copy */\n    this.offset = 0; /* distance back to copy string from */\n\n    /* for table and code decoding */\n    this.extra = 0; /* extra bits needed */\n\n    /* fixed and dynamic code tables */\n    this.lencode = null; /* starting table for length/literal codes */\n    this.distcode = null; /* starting table for distance codes */\n    this.lenbits = 0; /* index bits for lencode */\n    this.distbits = 0; /* index bits for distcode */\n\n    /* dynamic table building */\n    this.ncode = 0; /* number of code length code lengths */\n    this.nlen = 0; /* number of length code lengths */\n    this.ndist = 0; /* number of distance code lengths */\n    this.have = 0; /* number of code lengths in lens[] */\n    this.next = null; /* next available space in codes[] */\n\n    this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n    this.work = new utils.Buf16(288); /* work area for code table building */\n\n    /*\n     because we don't have pointers in js, we use lencode and distcode directly\n     as buffers so we don't need codes\n    */\n    //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n    this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n    this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n    this.sane = 0; /* if false, allow invalid distance too far */\n    this.back = 0; /* bits back of last unprocessed length/lit */\n    this.was = 0; /* initial length of match */\n  }\n  function inflateResetKeep(strm) {\n    var state;\n    if (!strm || !strm.state) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n    strm.total_in = strm.total_out = state.total = 0;\n    strm.msg = ''; /*Z_NULL*/\n    if (state.wrap) {\n      /* to support ill-conceived Java test suite */\n      strm.adler = state.wrap & 1;\n    }\n    state.mode = HEAD;\n    state.last = 0;\n    state.havedict = 0;\n    state.dmax = 32768;\n    state.head = null /*Z_NULL*/;\n    state.hold = 0;\n    state.bits = 0;\n    //state.lencode = state.distcode = state.next = state.codes;\n    state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n    state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n    state.sane = 1;\n    state.back = -1;\n    //Tracev((stderr, \"inflate: reset\\n\"));\n    return Z_OK;\n  }\n  function inflateReset(strm) {\n    var state;\n    if (!strm || !strm.state) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n    state.wsize = 0;\n    state.whave = 0;\n    state.wnext = 0;\n    return inflateResetKeep(strm);\n  }\n  function inflateReset2(strm, windowBits) {\n    var wrap;\n    var state;\n\n    /* get the state */\n    if (!strm || !strm.state) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n\n    /* extract wrap request from windowBits parameter */\n    if (windowBits < 0) {\n      wrap = 0;\n      windowBits = -windowBits;\n    } else {\n      wrap = (windowBits >> 4) + 1;\n      if (windowBits < 48) {\n        windowBits &= 15;\n      }\n    }\n\n    /* set number of window bits, free window if different */\n    if (windowBits && (windowBits < 8 || windowBits > 15)) {\n      return Z_STREAM_ERROR;\n    }\n    if (state.window !== null && state.wbits !== windowBits) {\n      state.window = null;\n    }\n\n    /* update state and reset the rest of it */\n    state.wrap = wrap;\n    state.wbits = windowBits;\n    return inflateReset(strm);\n  }\n  function inflateInit2(strm, windowBits) {\n    var ret;\n    var state;\n    if (!strm) {\n      return Z_STREAM_ERROR;\n    }\n    //strm.msg = Z_NULL;                 /* in case we return an error */\n\n    state = new InflateState();\n\n    //if (state === Z_NULL) return Z_MEM_ERROR;\n    //Tracev((stderr, \"inflate: allocated\\n\"));\n    strm.state = state;\n    state.window = null /*Z_NULL*/;\n    ret = inflateReset2(strm, windowBits);\n    if (ret !== Z_OK) {\n      strm.state = null /*Z_NULL*/;\n    }\n    return ret;\n  }\n  function inflateInit(strm) {\n    return inflateInit2(strm, DEF_WBITS);\n  }\n\n  /*\n   Return state with length and distance decoding tables and index sizes set to\n   fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n   If BUILDFIXED is defined, then instead this routine builds the tables the\n   first time it's called, and returns those tables the first time and\n   thereafter.  This reduces the size of the code by about 2K bytes, in\n   exchange for a little execution time.  However, BUILDFIXED should not be\n   used for threaded applications, since the rewriting of the tables and virgin\n   may not be thread-safe.\n   */\n  var virgin = true;\n  var lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n  function fixedtables(state) {\n    /* build fixed huffman tables if first call (may not be thread safe) */\n    if (virgin) {\n      var sym;\n      lenfix = new utils.Buf32(512);\n      distfix = new utils.Buf32(32);\n\n      /* literal/length table */\n      sym = 0;\n      while (sym < 144) {\n        state.lens[sym++] = 8;\n      }\n      while (sym < 256) {\n        state.lens[sym++] = 9;\n      }\n      while (sym < 280) {\n        state.lens[sym++] = 7;\n      }\n      while (sym < 288) {\n        state.lens[sym++] = 8;\n      }\n      (0, _inftrees.default)(LENS, state.lens, 0, 288, lenfix, 0, state.work, {\n        bits: 9\n      });\n\n      /* distance table */\n      sym = 0;\n      while (sym < 32) {\n        state.lens[sym++] = 5;\n      }\n      (0, _inftrees.default)(DISTS, state.lens, 0, 32, distfix, 0, state.work, {\n        bits: 5\n      });\n\n      /* do this just once */\n      virgin = false;\n    }\n    state.lencode = lenfix;\n    state.lenbits = 9;\n    state.distcode = distfix;\n    state.distbits = 5;\n  }\n\n  /*\n   Update the window with the last wsize (normally 32K) bytes written before\n   returning.  If window does not exist yet, create it.  This is only called\n   when a window is already in use, or when output has been written during this\n   inflate call, but the end of the deflate stream has not been reached yet.\n   It is also called to create a window for dictionary data when a dictionary\n   is loaded.\n  \n   Providing output buffers larger than 32K to inflate() should provide a speed\n   advantage, since only the last 32K of output is copied to the sliding window\n   upon return from inflate(), and since all distances after the first 32K of\n   output will fall in the output data, making match copies simpler and faster.\n   The advantage may be dependent on the size of the processor's data caches.\n   */\n  function updatewindow(strm, src, end, copy) {\n    var dist;\n    var state = strm.state;\n\n    /* if it hasn't been done already, allocate space for the window */\n    if (state.window === null) {\n      state.wsize = 1 << state.wbits;\n      state.wnext = 0;\n      state.whave = 0;\n      state.window = new utils.Buf8(state.wsize);\n    }\n\n    /* copy state->wsize or less output bytes into the circular window */\n    if (copy >= state.wsize) {\n      utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n      state.wnext = 0;\n      state.whave = state.wsize;\n    } else {\n      dist = state.wsize - state.wnext;\n      if (dist > copy) {\n        dist = copy;\n      }\n      //zmemcpy(state->window + state->wnext, end - copy, dist);\n      utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n      copy -= dist;\n      if (copy) {\n        //zmemcpy(state->window, end - copy, copy);\n        utils.arraySet(state.window, src, end - copy, copy, 0);\n        state.wnext = copy;\n        state.whave = state.wsize;\n      } else {\n        state.wnext += dist;\n        if (state.wnext === state.wsize) {\n          state.wnext = 0;\n        }\n        if (state.whave < state.wsize) {\n          state.whave += dist;\n        }\n      }\n    }\n    return 0;\n  }\n  function inflate(strm, flush) {\n    var state;\n    var input, output; // input/output buffers\n    var next; /* next input INDEX */\n    var put; /* next output INDEX */\n    var have, left; /* available input and output */\n    var hold; /* bit buffer */\n    var bits; /* bits in bit buffer */\n    var _in, _out; /* save starting available input and output */\n    var copy; /* number of stored or match bytes to copy */\n    var from; /* where to copy match bytes from */\n    var from_source;\n    var here = 0; /* current decoding table entry */\n    var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n    //var last;                   /* parent table entry */\n    var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n    var len; /* length to copy for repeats, bits to drop */\n    var ret; /* return code */\n    var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n    var opts;\n    var n; // temporary var for NEED_BITS\n\n    var order = /* permutation of code lengths */\n    [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n    if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n    if (state.mode === TYPE) {\n      state.mode = TYPEDO;\n    } /* skip check */\n\n    //--- LOAD() ---\n    put = strm.next_out;\n    output = strm.output;\n    left = strm.avail_out;\n    next = strm.next_in;\n    input = strm.input;\n    have = strm.avail_in;\n    hold = state.hold;\n    bits = state.bits;\n    //---\n\n    _in = have;\n    _out = left;\n    ret = Z_OK;\n    inf_leave:\n    // goto emulation\n    for (;;) {\n      switch (state.mode) {\n        case HEAD:\n          if (state.wrap === 0) {\n            state.mode = TYPEDO;\n            break;\n          }\n          //=== NEEDBITS(16);\n          while (bits < 16) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (state.wrap & 2 && hold === 0x8b1f) {\n            /* gzip header */\n            state.check = 0 /*crc32(0L, Z_NULL, 0)*/;\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = hold >>> 8 & 0xff;\n            state.check = (0, _crc.default)(state.check, hbuf, 2, 0);\n            //===//\n\n            //=== INITBITS();\n            hold = 0;\n            bits = 0;\n            //===//\n            state.mode = FLAGS;\n            break;\n          }\n          state.flags = 0; /* expect zlib header */\n          if (state.head) {\n            state.head.done = false;\n          }\n          if (!(state.wrap & 1) || /* check if zlib header allowed */\n          (((hold & 0xff /*BITS(8)*/) << 8) + (hold >> 8)) % 31) {\n            strm.msg = 'incorrect header check';\n            state.mode = BAD;\n            break;\n          }\n          if ((hold & 0x0f /*BITS(4)*/) !== Z_DEFLATED) {\n            strm.msg = 'unknown compression method';\n            state.mode = BAD;\n            break;\n          }\n          //--- DROPBITS(4) ---//\n          hold >>>= 4;\n          bits -= 4;\n          //---//\n          len = (hold & 0x0f /*BITS(4)*/) + 8;\n          if (state.wbits === 0) {\n            state.wbits = len;\n          } else if (len > state.wbits) {\n            strm.msg = 'invalid window size';\n            state.mode = BAD;\n            break;\n          }\n          state.dmax = 1 << len;\n          //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n          strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/;\n          state.mode = hold & 0x200 ? DICTID : TYPE;\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          break;\n        case FLAGS:\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.flags = hold;\n          if ((state.flags & 0xff) !== Z_DEFLATED) {\n            strm.msg = 'unknown compression method';\n            state.mode = BAD;\n            break;\n          }\n          if (state.flags & 0xe000) {\n            strm.msg = 'unknown header flags set';\n            state.mode = BAD;\n            break;\n          }\n          if (state.head) {\n            state.head.text = hold >> 8 & 1;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = hold >>> 8 & 0xff;\n            state.check = (0, _crc.default)(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = TIME;\n        /* falls through */\n        case TIME:\n          //=== NEEDBITS(32); */\n          while (bits < 32) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (state.head) {\n            state.head.time = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC4(state.check, hold)\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = hold >>> 8 & 0xff;\n            hbuf[2] = hold >>> 16 & 0xff;\n            hbuf[3] = hold >>> 24 & 0xff;\n            state.check = (0, _crc.default)(state.check, hbuf, 4, 0);\n            //===\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = OS;\n        /* falls through */\n        case OS:\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (state.head) {\n            state.head.xflags = hold & 0xff;\n            state.head.os = hold >> 8;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = hold >>> 8 & 0xff;\n            state.check = (0, _crc.default)(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = EXLEN;\n        /* falls through */\n        case EXLEN:\n          if (state.flags & 0x0400) {\n            //=== NEEDBITS(16); */\n            while (bits < 16) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            state.length = hold;\n            if (state.head) {\n              state.head.extra_len = hold;\n            }\n            if (state.flags & 0x0200) {\n              //=== CRC2(state.check, hold);\n              hbuf[0] = hold & 0xff;\n              hbuf[1] = hold >>> 8 & 0xff;\n              state.check = (0, _crc.default)(state.check, hbuf, 2, 0);\n              //===//\n            }\n            //=== INITBITS();\n            hold = 0;\n            bits = 0;\n            //===//\n          } else if (state.head) {\n            state.head.extra = null /*Z_NULL*/;\n          }\n          state.mode = EXTRA;\n        /* falls through */\n        case EXTRA:\n          if (state.flags & 0x0400) {\n            copy = state.length;\n            if (copy > have) {\n              copy = have;\n            }\n            if (copy) {\n              if (state.head) {\n                len = state.head.extra_len - state.length;\n                if (!state.head.extra) {\n                  // Use untyped array for more conveniend processing later\n                  state.head.extra = new Array(state.head.extra_len);\n                }\n                utils.arraySet(state.head.extra, input, next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy, /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len);\n                //zmemcpy(state.head.extra + len, next,\n                //        len + copy > state.head.extra_max ?\n                //        state.head.extra_max - len : copy);\n              }\n              if (state.flags & 0x0200) {\n                state.check = (0, _crc.default)(state.check, input, copy, next);\n              }\n              have -= copy;\n              next += copy;\n              state.length -= copy;\n            }\n            if (state.length) {\n              break inf_leave;\n            }\n          }\n          state.length = 0;\n          state.mode = NAME;\n        /* falls through */\n        case NAME:\n          if (state.flags & 0x0800) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            copy = 0;\n            do {\n              // TODO: 2 or 1 bytes?\n              len = input[next + copy++];\n              /* use constant limit because in js we should not preallocate memory */\n              if (state.head && len && state.length < 65536 /*state.head.name_max*/) {\n                state.head.name += String.fromCharCode(len);\n              }\n            } while (len && copy < have);\n            if (state.flags & 0x0200) {\n              state.check = (0, _crc.default)(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            if (len) {\n              break inf_leave;\n            }\n          } else if (state.head) {\n            state.head.name = null;\n          }\n          state.length = 0;\n          state.mode = COMMENT;\n        /* falls through */\n        case COMMENT:\n          if (state.flags & 0x1000) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            copy = 0;\n            do {\n              len = input[next + copy++];\n              /* use constant limit because in js we should not preallocate memory */\n              if (state.head && len && state.length < 65536 /*state.head.comm_max*/) {\n                state.head.comment += String.fromCharCode(len);\n              }\n            } while (len && copy < have);\n            if (state.flags & 0x0200) {\n              state.check = (0, _crc.default)(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            if (len) {\n              break inf_leave;\n            }\n          } else if (state.head) {\n            state.head.comment = null;\n          }\n          state.mode = HCRC;\n        /* falls through */\n        case HCRC:\n          if (state.flags & 0x0200) {\n            //=== NEEDBITS(16); */\n            while (bits < 16) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            if (hold !== (state.check & 0xffff)) {\n              strm.msg = 'header crc mismatch';\n              state.mode = BAD;\n              break;\n            }\n            //=== INITBITS();\n            hold = 0;\n            bits = 0;\n            //===//\n          }\n          if (state.head) {\n            state.head.hcrc = state.flags >> 9 & 1;\n            state.head.done = true;\n          }\n          strm.adler = state.check = 0;\n          state.mode = TYPE;\n          break;\n        case DICTID:\n          //=== NEEDBITS(32); */\n          while (bits < 32) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          strm.adler = state.check = zswap32(hold);\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = DICT;\n        /* falls through */\n        case DICT:\n          if (state.havedict === 0) {\n            //--- RESTORE() ---\n            strm.next_out = put;\n            strm.avail_out = left;\n            strm.next_in = next;\n            strm.avail_in = have;\n            state.hold = hold;\n            state.bits = bits;\n            //---\n            return Z_NEED_DICT;\n          }\n          strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/;\n          state.mode = TYPE;\n        /* falls through */\n        case TYPE:\n          if (flush === Z_BLOCK || flush === Z_TREES) {\n            break inf_leave;\n          }\n        /* falls through */\n        case TYPEDO:\n          if (state.last) {\n            //--- BYTEBITS() ---//\n            hold >>>= bits & 7;\n            bits -= bits & 7;\n            //---//\n            state.mode = CHECK;\n            break;\n          }\n          //=== NEEDBITS(3); */\n          while (bits < 3) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.last = hold & 0x01 /*BITS(1)*/;\n          //--- DROPBITS(1) ---//\n          hold >>>= 1;\n          bits -= 1;\n          //---//\n\n          switch (hold & 0x03 /*BITS(2)*/) {\n            case 0:\n              /* stored block */\n              //Tracev((stderr, \"inflate:     stored block%s\\n\",\n              //        state.last ? \" (last)\" : \"\"));\n              state.mode = STORED;\n              break;\n            case 1:\n              /* fixed block */\n              fixedtables(state);\n              //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n              //        state.last ? \" (last)\" : \"\"));\n              state.mode = LEN_; /* decode codes */\n              if (flush === Z_TREES) {\n                //--- DROPBITS(2) ---//\n                hold >>>= 2;\n                bits -= 2;\n                //---//\n                break inf_leave;\n              }\n              break;\n            case 2:\n              /* dynamic block */\n              //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n              //        state.last ? \" (last)\" : \"\"));\n              state.mode = TABLE;\n              break;\n            case 3:\n              strm.msg = 'invalid block type';\n              state.mode = BAD;\n          }\n          //--- DROPBITS(2) ---//\n          hold >>>= 2;\n          bits -= 2;\n          //---//\n          break;\n        case STORED:\n          //--- BYTEBITS() ---// /* go to byte boundary */\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          //=== NEEDBITS(32); */\n          while (bits < 32) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if ((hold & 0xffff) !== (hold >>> 16 ^ 0xffff)) {\n            strm.msg = 'invalid stored block lengths';\n            state.mode = BAD;\n            break;\n          }\n          state.length = hold & 0xffff;\n          //Tracev((stderr, \"inflate:       stored length %u\\n\",\n          //        state.length));\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = COPY_;\n          if (flush === Z_TREES) {\n            break inf_leave;\n          }\n        /* falls through */\n        case COPY_:\n          state.mode = COPY;\n        /* falls through */\n        case COPY:\n          copy = state.length;\n          if (copy) {\n            if (copy > have) {\n              copy = have;\n            }\n            if (copy > left) {\n              copy = left;\n            }\n            if (copy === 0) {\n              break inf_leave;\n            }\n            //--- zmemcpy(put, next, copy); ---\n            utils.arraySet(output, input, next, copy, put);\n            //---//\n            have -= copy;\n            next += copy;\n            left -= copy;\n            put += copy;\n            state.length -= copy;\n            break;\n          }\n          //Tracev((stderr, \"inflate:       stored end\\n\"));\n          state.mode = TYPE;\n          break;\n        case TABLE:\n          //=== NEEDBITS(14); */\n          while (bits < 14) {\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.nlen = (hold & 0x1f /*BITS(5)*/) + 257;\n          //--- DROPBITS(5) ---//\n          hold >>>= 5;\n          bits -= 5;\n          //---//\n          state.ndist = (hold & 0x1f /*BITS(5)*/) + 1;\n          //--- DROPBITS(5) ---//\n          hold >>>= 5;\n          bits -= 5;\n          //---//\n          state.ncode = (hold & 0x0f /*BITS(4)*/) + 4;\n          //--- DROPBITS(4) ---//\n          hold >>>= 4;\n          bits -= 4;\n          //---//\n          //#ifndef PKZIP_BUG_WORKAROUND\n          if (state.nlen > 286 || state.ndist > 30) {\n            strm.msg = 'too many length or distance symbols';\n            state.mode = BAD;\n            break;\n          }\n          //#endif\n          //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n          state.have = 0;\n          state.mode = LENLENS;\n        /* falls through */\n        case LENLENS:\n          while (state.have < state.ncode) {\n            //=== NEEDBITS(3);\n            while (bits < 3) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            state.lens[order[state.have++]] = hold & 0x07; //BITS(3);\n            //--- DROPBITS(3) ---//\n            hold >>>= 3;\n            bits -= 3;\n            //---//\n          }\n          while (state.have < 19) {\n            state.lens[order[state.have++]] = 0;\n          }\n          // We have separate tables & no pointers. 2 commented lines below not needed.\n          //state.next = state.codes;\n          //state.lencode = state.next;\n          // Switch to use dynamic table\n          state.lencode = state.lendyn;\n          state.lenbits = 7;\n          opts = {\n            bits: state.lenbits\n          };\n          ret = (0, _inftrees.default)(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n          state.lenbits = opts.bits;\n          if (ret) {\n            strm.msg = 'invalid code lengths set';\n            state.mode = BAD;\n            break;\n          }\n          //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n          state.have = 0;\n          state.mode = CODELENS;\n        /* falls through */\n        case CODELENS:\n          while (state.have < state.nlen + state.ndist) {\n            for (;;) {\n              here = state.lencode[hold & (1 << state.lenbits) - 1]; /*BITS(state.lenbits)*/\n              here_bits = here >>> 24;\n              here_op = here >>> 16 & 0xff;\n              here_val = here & 0xffff;\n              if (here_bits <= bits) {\n                break;\n              }\n              //--- PULLBYTE() ---//\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n              //---//\n            }\n            if (here_val < 16) {\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              state.lens[state.have++] = here_val;\n            } else {\n              if (here_val === 16) {\n                //=== NEEDBITS(here.bits + 2);\n                n = here_bits + 2;\n                while (bits < n) {\n                  if (have === 0) {\n                    break inf_leave;\n                  }\n                  have--;\n                  hold += input[next++] << bits;\n                  bits += 8;\n                }\n                //===//\n                //--- DROPBITS(here.bits) ---//\n                hold >>>= here_bits;\n                bits -= here_bits;\n                //---//\n                if (state.have === 0) {\n                  strm.msg = 'invalid bit length repeat';\n                  state.mode = BAD;\n                  break;\n                }\n                len = state.lens[state.have - 1];\n                copy = 3 + (hold & 0x03); //BITS(2);\n                //--- DROPBITS(2) ---//\n                hold >>>= 2;\n                bits -= 2;\n                //---//\n              } else if (here_val === 17) {\n                //=== NEEDBITS(here.bits + 3);\n                n = here_bits + 3;\n                while (bits < n) {\n                  if (have === 0) {\n                    break inf_leave;\n                  }\n                  have--;\n                  hold += input[next++] << bits;\n                  bits += 8;\n                }\n                //===//\n                //--- DROPBITS(here.bits) ---//\n                hold >>>= here_bits;\n                bits -= here_bits;\n                //---//\n                len = 0;\n                copy = 3 + (hold & 0x07); //BITS(3);\n                //--- DROPBITS(3) ---//\n                hold >>>= 3;\n                bits -= 3;\n                //---//\n              } else {\n                //=== NEEDBITS(here.bits + 7);\n                n = here_bits + 7;\n                while (bits < n) {\n                  if (have === 0) {\n                    break inf_leave;\n                  }\n                  have--;\n                  hold += input[next++] << bits;\n                  bits += 8;\n                }\n                //===//\n                //--- DROPBITS(here.bits) ---//\n                hold >>>= here_bits;\n                bits -= here_bits;\n                //---//\n                len = 0;\n                copy = 11 + (hold & 0x7f); //BITS(7);\n                //--- DROPBITS(7) ---//\n                hold >>>= 7;\n                bits -= 7;\n                //---//\n              }\n              if (state.have + copy > state.nlen + state.ndist) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              while (copy--) {\n                state.lens[state.have++] = len;\n              }\n            }\n          }\n\n          /* handle error breaks in while */\n          if (state.mode === BAD) {\n            break;\n          }\n\n          /* check for end-of-block code (better have one) */\n          if (state.lens[256] === 0) {\n            strm.msg = 'invalid code -- missing end-of-block';\n            state.mode = BAD;\n            break;\n          }\n\n          /* build code tables -- note: do not change the lenbits or distbits\n             values here (9 and 6) without reading the comments in inftrees.h\n             concerning the ENOUGH constants, which depend on those values */\n          state.lenbits = 9;\n          opts = {\n            bits: state.lenbits\n          };\n          ret = (0, _inftrees.default)(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n          // We have separate tables & no pointers. 2 commented lines below not needed.\n          // state.next_index = opts.table_index;\n          state.lenbits = opts.bits;\n          // state.lencode = state.next;\n\n          if (ret) {\n            strm.msg = 'invalid literal/lengths set';\n            state.mode = BAD;\n            break;\n          }\n          state.distbits = 6;\n          //state.distcode.copy(state.codes);\n          // Switch to use dynamic table\n          state.distcode = state.distdyn;\n          opts = {\n            bits: state.distbits\n          };\n          ret = (0, _inftrees.default)(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n          // We have separate tables & no pointers. 2 commented lines below not needed.\n          // state.next_index = opts.table_index;\n          state.distbits = opts.bits;\n          // state.distcode = state.next;\n\n          if (ret) {\n            strm.msg = 'invalid distances set';\n            state.mode = BAD;\n            break;\n          }\n          //Tracev((stderr, 'inflate:       codes ok\\n'));\n          state.mode = LEN_;\n          if (flush === Z_TREES) {\n            break inf_leave;\n          }\n        /* falls through */\n        case LEN_:\n          state.mode = LEN;\n        /* falls through */\n        case LEN:\n          if (have >= 6 && left >= 258) {\n            //--- RESTORE() ---\n            strm.next_out = put;\n            strm.avail_out = left;\n            strm.next_in = next;\n            strm.avail_in = have;\n            state.hold = hold;\n            state.bits = bits;\n            //---\n            (0, _inffast.default)(strm, _out);\n            //--- LOAD() ---\n            put = strm.next_out;\n            output = strm.output;\n            left = strm.avail_out;\n            next = strm.next_in;\n            input = strm.input;\n            have = strm.avail_in;\n            hold = state.hold;\n            bits = state.bits;\n            //---\n\n            if (state.mode === TYPE) {\n              state.back = -1;\n            }\n            break;\n          }\n          state.back = 0;\n          for (;;) {\n            here = state.lencode[hold & (1 << state.lenbits) - 1]; /*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = here >>> 16 & 0xff;\n            here_val = here & 0xffff;\n            if (here_bits <= bits) {\n              break;\n            }\n            //--- PULLBYTE() ---//\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_op && (here_op & 0xf0) === 0) {\n            last_bits = here_bits;\n            last_op = here_op;\n            last_val = here_val;\n            for (;;) {\n              here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1 /*BITS(last.bits + last.op)*/) >> last_bits)];\n              here_bits = here >>> 24;\n              here_op = here >>> 16 & 0xff;\n              here_val = here & 0xffff;\n              if (last_bits + here_bits <= bits) {\n                break;\n              }\n              //--- PULLBYTE() ---//\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n              //---//\n            }\n            //--- DROPBITS(last.bits) ---//\n            hold >>>= last_bits;\n            bits -= last_bits;\n            //---//\n            state.back += last_bits;\n          }\n          //--- DROPBITS(here.bits) ---//\n          hold >>>= here_bits;\n          bits -= here_bits;\n          //---//\n          state.back += here_bits;\n          state.length = here_val;\n          if (here_op === 0) {\n            //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n            //        \"inflate:         literal '%c'\\n\" :\n            //        \"inflate:         literal 0x%02x\\n\", here.val));\n            state.mode = LIT;\n            break;\n          }\n          if (here_op & 32) {\n            //Tracevv((stderr, \"inflate:         end of block\\n\"));\n            state.back = -1;\n            state.mode = TYPE;\n            break;\n          }\n          if (here_op & 64) {\n            strm.msg = 'invalid literal/length code';\n            state.mode = BAD;\n            break;\n          }\n          state.extra = here_op & 15;\n          state.mode = LENEXT;\n        /* falls through */\n        case LENEXT:\n          if (state.extra) {\n            //=== NEEDBITS(state.extra);\n            n = state.extra;\n            while (bits < n) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            state.length += hold & (1 << state.extra) - 1 /*BITS(state.extra)*/;\n            //--- DROPBITS(state.extra) ---//\n            hold >>>= state.extra;\n            bits -= state.extra;\n            //---//\n            state.back += state.extra;\n          }\n          //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n          state.was = state.length;\n          state.mode = DIST;\n        /* falls through */\n        case DIST:\n          for (;;) {\n            here = state.distcode[hold & (1 << state.distbits) - 1]; /*BITS(state.distbits)*/\n            here_bits = here >>> 24;\n            here_op = here >>> 16 & 0xff;\n            here_val = here & 0xffff;\n            if (here_bits <= bits) {\n              break;\n            }\n            //--- PULLBYTE() ---//\n            if (have === 0) {\n              break inf_leave;\n            }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if ((here_op & 0xf0) === 0) {\n            last_bits = here_bits;\n            last_op = here_op;\n            last_val = here_val;\n            for (;;) {\n              here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1 /*BITS(last.bits + last.op)*/) >> last_bits)];\n              here_bits = here >>> 24;\n              here_op = here >>> 16 & 0xff;\n              here_val = here & 0xffff;\n              if (last_bits + here_bits <= bits) {\n                break;\n              }\n              //--- PULLBYTE() ---//\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n              //---//\n            }\n            //--- DROPBITS(last.bits) ---//\n            hold >>>= last_bits;\n            bits -= last_bits;\n            //---//\n            state.back += last_bits;\n          }\n          //--- DROPBITS(here.bits) ---//\n          hold >>>= here_bits;\n          bits -= here_bits;\n          //---//\n          state.back += here_bits;\n          if (here_op & 64) {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break;\n          }\n          state.offset = here_val;\n          state.extra = here_op & 15;\n          state.mode = DISTEXT;\n        /* falls through */\n        case DISTEXT:\n          if (state.extra) {\n            //=== NEEDBITS(state.extra);\n            n = state.extra;\n            while (bits < n) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            state.offset += hold & (1 << state.extra) - 1 /*BITS(state.extra)*/;\n            //--- DROPBITS(state.extra) ---//\n            hold >>>= state.extra;\n            bits -= state.extra;\n            //---//\n            state.back += state.extra;\n          }\n          //#ifdef INFLATE_STRICT\n          if (state.offset > state.dmax) {\n            strm.msg = 'invalid distance too far back';\n            state.mode = BAD;\n            break;\n          }\n          //#endif\n          //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n          state.mode = MATCH;\n        /* falls through */\n        case MATCH:\n          if (left === 0) {\n            break inf_leave;\n          }\n          copy = _out - left;\n          if (state.offset > copy) {\n            /* copy from window */\n            copy = state.offset - copy;\n            if (copy > state.whave) {\n              if (state.sane) {\n                strm.msg = 'invalid distance too far back';\n                state.mode = BAD;\n                break;\n              }\n              // (!) This block is disabled in zlib defailts,\n              // don't enable it for binary compatibility\n              //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n              //          Trace((stderr, \"inflate.c too far\\n\"));\n              //          copy -= state.whave;\n              //          if (copy > state.length) { copy = state.length; }\n              //          if (copy > left) { copy = left; }\n              //          left -= copy;\n              //          state.length -= copy;\n              //          do {\n              //            output[put++] = 0;\n              //          } while (--copy);\n              //          if (state.length === 0) { state.mode = LEN; }\n              //          break;\n              //#endif\n            }\n            if (copy > state.wnext) {\n              copy -= state.wnext;\n              from = state.wsize - copy;\n            } else {\n              from = state.wnext - copy;\n            }\n            if (copy > state.length) {\n              copy = state.length;\n            }\n            from_source = state.window;\n          } else {\n            /* copy from output */\n            from_source = output;\n            from = put - state.offset;\n            copy = state.length;\n          }\n          if (copy > left) {\n            copy = left;\n          }\n          left -= copy;\n          state.length -= copy;\n          do {\n            output[put++] = from_source[from++];\n          } while (--copy);\n          if (state.length === 0) {\n            state.mode = LEN;\n          }\n          break;\n        case LIT:\n          if (left === 0) {\n            break inf_leave;\n          }\n          output[put++] = state.length;\n          left--;\n          state.mode = LEN;\n          break;\n        case CHECK:\n          if (state.wrap) {\n            //=== NEEDBITS(32);\n            while (bits < 32) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              // Use '|' insdead of '+' to make sure that result is signed\n              hold |= input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            _out -= left;\n            strm.total_out += _out;\n            state.total += _out;\n            if (_out) {\n              strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/\n              state.flags ? (0, _crc.default)(state.check, output, _out, put - _out) : (0, _adler.default)(state.check, output, _out, put - _out);\n            }\n            _out = left;\n            // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n            if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n              strm.msg = 'incorrect data check';\n              state.mode = BAD;\n              break;\n            }\n            //=== INITBITS();\n            hold = 0;\n            bits = 0;\n            //===//\n            //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n          }\n          state.mode = LENGTH;\n        /* falls through */\n        case LENGTH:\n          if (state.wrap && state.flags) {\n            //=== NEEDBITS(32);\n            while (bits < 32) {\n              if (have === 0) {\n                break inf_leave;\n              }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            if (hold !== (state.total & 0xffffffff)) {\n              strm.msg = 'incorrect length check';\n              state.mode = BAD;\n              break;\n            }\n            //=== INITBITS();\n            hold = 0;\n            bits = 0;\n            //===//\n            //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n          }\n          state.mode = DONE;\n        /* falls through */\n        case DONE:\n          ret = Z_STREAM_END;\n          break inf_leave;\n        case BAD:\n          ret = Z_DATA_ERROR;\n          break inf_leave;\n        case MEM:\n          return Z_MEM_ERROR;\n        case SYNC:\n        /* falls through */\n        default:\n          return Z_STREAM_ERROR;\n      }\n    }\n\n    // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n    /*\n       Return from inflate(), updating the total counts and the check value.\n       If there was no progress during the inflate() call, return a buffer\n       error.  Call updatewindow() to create and/or update the window state.\n       Note: a memory error from inflate() is non-recoverable.\n     */\n\n    //--- RESTORE() ---\n    strm.next_out = put;\n    strm.avail_out = left;\n    strm.next_in = next;\n    strm.avail_in = have;\n    state.hold = hold;\n    state.bits = bits;\n    //---\n\n    if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {\n      if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n        state.mode = MEM;\n        return Z_MEM_ERROR;\n      }\n    }\n    _in -= strm.avail_in;\n    _out -= strm.avail_out;\n    strm.total_in += _in;\n    strm.total_out += _out;\n    state.total += _out;\n    if (state.wrap && _out) {\n      strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      state.flags ? (0, _crc.default)(state.check, output, _out, strm.next_out - _out) : (0, _adler.default)(state.check, output, _out, strm.next_out - _out);\n    }\n    strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n    if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {\n      ret = Z_BUF_ERROR;\n    }\n    return ret;\n  }\n  function inflateEnd(strm) {\n    if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n      return Z_STREAM_ERROR;\n    }\n    var state = strm.state;\n    if (state.window) {\n      state.window = null;\n    }\n    strm.state = null;\n    return Z_OK;\n  }\n  function inflateGetHeader(strm, head) {\n    var state;\n\n    /* check state */\n    if (!strm || !strm.state) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n    if ((state.wrap & 2) === 0) {\n      return Z_STREAM_ERROR;\n    }\n\n    /* save header structure */\n    state.head = head;\n    head.done = false;\n    return Z_OK;\n  }\n  function inflateSetDictionary(strm, dictionary) {\n    var dictLength = dictionary.length;\n    var state;\n    var dictid;\n    var ret;\n\n    /* check state */\n    if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) {\n      return Z_STREAM_ERROR;\n    }\n    state = strm.state;\n    if (state.wrap !== 0 && state.mode !== DICT) {\n      return Z_STREAM_ERROR;\n    }\n\n    /* check for correct dictionary identifier */\n    if (state.mode === DICT) {\n      dictid = 1; /* adler32(0, null, 0)*/\n      /* dictid = adler32(dictid, dictionary, dictLength); */\n      dictid = (0, _adler.default)(dictid, dictionary, dictLength, 0);\n      if (dictid !== state.check) {\n        return Z_DATA_ERROR;\n      }\n    }\n    /* copy dictionary to window using updatewindow(), which will amend the\n     existing dictionary if appropriate */\n    ret = updatewindow(strm, dictionary, dictLength, dictLength);\n    if (ret) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n    state.havedict = 1;\n    // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n    return Z_OK;\n  }\n  var inflateInfo = _exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n  /* Not implemented\n  exports.inflateCopy = inflateCopy;\n  exports.inflateGetDictionary = inflateGetDictionary;\n  exports.inflateMark = inflateMark;\n  exports.inflatePrime = inflatePrime;\n  exports.inflateSync = inflateSync;\n  exports.inflateSyncPoint = inflateSyncPoint;\n  exports.inflateUndermine = inflateUndermine;\n  */\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/inftrees\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/utils/common\"], function (_exports, utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = inflate_table;\n  var MAXBITS = 15;\n  var ENOUGH_LENS = 852;\n  var ENOUGH_DISTS = 592;\n  //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\n  var CODES = 0;\n  var LENS = 1;\n  var DISTS = 2;\n  var lbase = [/* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0];\n  var lext = [/* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78];\n  var dbase = [/* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0];\n  var dext = [/* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];\n  function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {\n    var bits = opts.bits;\n    //here = opts.here; /* table entry for duplication */\n\n    var len = 0; /* a code's length in bits */\n    var sym = 0; /* index of code symbols */\n    var min = 0,\n      max = 0; /* minimum and maximum code lengths */\n    var root = 0; /* number of index bits for root table */\n    var curr = 0; /* number of index bits for current table */\n    var drop = 0; /* code bits to drop for sub-table */\n    var left = 0; /* number of prefix codes available */\n    var used = 0; /* code entries in table used */\n    var huff = 0; /* Huffman code */\n    var incr; /* for incrementing code, index */\n    var fill; /* index for replicating entries */\n    var low; /* low bits for current root entry */\n    var mask; /* mask for low root bits */\n    var next; /* next available space in table */\n    var base = null; /* base value table to use */\n    var base_index = 0;\n    //  var shoextra;    /* extra bits table to use */\n    var end; /* use base and extra for symbol > end */\n    var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n    var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n    var extra = null;\n    var extra_index = 0;\n    var here_bits, here_op, here_val;\n\n    /*\n     Process a set of code lengths to create a canonical Huffman code.  The\n     code lengths are lens[0..codes-1].  Each length corresponds to the\n     symbols 0..codes-1.  The Huffman code is generated by first sorting the\n     symbols by length from short to long, and retaining the symbol order\n     for codes with equal lengths.  Then the code starts with all zero bits\n     for the first code of the shortest length, and the codes are integer\n     increments for the same length, and zeros are appended as the length\n     increases.  For the deflate format, these bits are stored backwards\n     from their more natural integer increment ordering, and so when the\n     decoding tables are built in the large loop below, the integer codes\n     are incremented backwards.\n      This routine assumes, but does not check, that all of the entries in\n     lens[] are in the range 0..MAXBITS.  The caller must assure this.\n     1..MAXBITS is interpreted as that code length.  zero means that that\n     symbol does not occur in this code.\n      The codes are sorted by computing a count of codes for each length,\n     creating from that a table of starting indices for each length in the\n     sorted table, and then entering the symbols in order in the sorted\n     table.  The sorted table is work[], with that space being provided by\n     the caller.\n      The length counts are used for other purposes as well, i.e. finding\n     the minimum and maximum length codes, determining if there are any\n     codes at all, checking for a valid set of lengths, and looking ahead\n     at length counts to determine sub-table sizes when building the\n     decoding tables.\n     */\n\n    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n    for (len = 0; len <= MAXBITS; len++) {\n      count[len] = 0;\n    }\n    for (sym = 0; sym < codes; sym++) {\n      count[lens[lens_index + sym]]++;\n    }\n\n    /* bound code lengths, force root to be within code lengths */\n    root = bits;\n    for (max = MAXBITS; max >= 1; max--) {\n      if (count[max] !== 0) {\n        break;\n      }\n    }\n    if (root > max) {\n      root = max;\n    }\n    if (max === 0) {\n      /* no symbols to code at all */\n      //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n      //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n      //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n      table[table_index++] = 1 << 24 | 64 << 16 | 0;\n\n      //table.op[opts.table_index] = 64;\n      //table.bits[opts.table_index] = 1;\n      //table.val[opts.table_index++] = 0;\n      table[table_index++] = 1 << 24 | 64 << 16 | 0;\n      opts.bits = 1;\n      return 0; /* no symbols, but wait for decoding to report error */\n    }\n    for (min = 1; min < max; min++) {\n      if (count[min] !== 0) {\n        break;\n      }\n    }\n    if (root < min) {\n      root = min;\n    }\n\n    /* check for an over-subscribed or incomplete set of lengths */\n    left = 1;\n    for (len = 1; len <= MAXBITS; len++) {\n      left <<= 1;\n      left -= count[len];\n      if (left < 0) {\n        return -1;\n      } /* over-subscribed */\n    }\n    if (left > 0 && (type === CODES || max !== 1)) {\n      return -1; /* incomplete set */\n    }\n\n    /* generate offsets into symbol table for each length for sorting */\n    offs[1] = 0;\n    for (len = 1; len < MAXBITS; len++) {\n      offs[len + 1] = offs[len] + count[len];\n    }\n\n    /* sort symbols by length, by symbol order within each length */\n    for (sym = 0; sym < codes; sym++) {\n      if (lens[lens_index + sym] !== 0) {\n        work[offs[lens[lens_index + sym]]++] = sym;\n      }\n    }\n\n    /*\n     Create and fill in decoding tables.  In this loop, the table being\n     filled is at next and has curr index bits.  The code being used is huff\n     with length len.  That code is converted to an index by dropping drop\n     bits off of the bottom.  For codes where len is less than drop + curr,\n     those top drop + curr - len bits are incremented through all values to\n     fill the table with replicated entries.\n      root is the number of index bits for the root table.  When len exceeds\n     root, sub-tables are created pointed to by the root entry with an index\n     of the low root bits of huff.  This is saved in low to check for when a\n     new sub-table should be started.  drop is zero when the root table is\n     being filled, and drop is root when sub-tables are being filled.\n      When a new sub-table is needed, it is necessary to look ahead in the\n     code lengths to determine what size sub-table is needed.  The length\n     counts are used for this, and so count[] is decremented as codes are\n     entered in the tables.\n      used keeps track of how many table entries have been allocated from the\n     provided *table space.  It is checked for LENS and DIST tables against\n     the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n     the initial root table size constants.  See the comments in inftrees.h\n     for more information.\n      sym increments through all symbols, and the loop terminates when\n     all codes of length max, i.e. all codes, have been processed.  This\n     routine permits incomplete codes, so another loop after this one fills\n     in the rest of the decoding tables with invalid code markers.\n     */\n\n    /* set up for code type */\n    // poor man optimization - use if-else instead of switch,\n    // to avoid deopts in old v8\n    if (type === CODES) {\n      base = extra = work; /* dummy value--not used */\n      end = 19;\n    } else if (type === LENS) {\n      base = lbase;\n      base_index -= 257;\n      extra = lext;\n      extra_index -= 257;\n      end = 256;\n    } else {\n      /* DISTS */\n      base = dbase;\n      extra = dext;\n      end = -1;\n    }\n\n    /* initialize opts for loop */\n    huff = 0; /* starting code */\n    sym = 0; /* starting code symbol */\n    len = min; /* starting code length */\n    next = table_index; /* current table to fill in */\n    curr = root; /* current table index bits */\n    drop = 0; /* current bits to drop from code for index */\n    low = -1; /* trigger new sub-table when len > root */\n    used = 1 << root; /* use root table entries */\n    mask = used - 1; /* mask for comparing low */\n\n    /* check available table space */\n    if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {\n      return 1;\n    }\n\n    /* process all codes and make table entries */\n    for (;;) {\n      /* create table entry */\n      here_bits = len - drop;\n      if (work[sym] < end) {\n        here_op = 0;\n        here_val = work[sym];\n      } else if (work[sym] > end) {\n        here_op = extra[extra_index + work[sym]];\n        here_val = base[base_index + work[sym]];\n      } else {\n        here_op = 32 + 64; /* end of block */\n        here_val = 0;\n      }\n\n      /* replicate for those indices with low len bits equal to huff */\n      incr = 1 << len - drop;\n      fill = 1 << curr;\n      min = fill; /* save offset to next table */\n      do {\n        fill -= incr;\n        table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;\n      } while (fill !== 0);\n\n      /* backwards increment the len-bit code huff */\n      incr = 1 << len - 1;\n      while (huff & incr) {\n        incr >>= 1;\n      }\n      if (incr !== 0) {\n        huff &= incr - 1;\n        huff += incr;\n      } else {\n        huff = 0;\n      }\n\n      /* go to next symbol, update count, len */\n      sym++;\n      if (--count[len] === 0) {\n        if (len === max) {\n          break;\n        }\n        len = lens[lens_index + work[sym]];\n      }\n\n      /* create new sub-table if needed */\n      if (len > root && (huff & mask) !== low) {\n        /* if first time, transition to sub-tables */\n        if (drop === 0) {\n          drop = root;\n        }\n\n        /* increment past last table */\n        next += min; /* here min is 1 << curr */\n\n        /* determine length of next table */\n        curr = len - drop;\n        left = 1 << curr;\n        while (curr + drop < max) {\n          left -= count[curr + drop];\n          if (left <= 0) {\n            break;\n          }\n          curr++;\n          left <<= 1;\n        }\n\n        /* check for enough space */\n        used += 1 << curr;\n        if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {\n          return 1;\n        }\n\n        /* point entry in root table to sub-table */\n        low = huff & mask;\n        /*table.op[low] = curr;\n        table.bits[low] = root;\n        table.val[low] = next - opts.table_index;*/\n        table[low] = root << 24 | curr << 16 | next - table_index | 0;\n      }\n    }\n\n    /* fill in remaining table entry if code is incomplete (guaranteed to have\n     at most one remaining entry, since if the code is incomplete, the\n     maximum code length that was allowed to get this far is one bit) */\n    if (huff !== 0) {\n      //table.op[next + huff] = 64;            /* invalid code marker */\n      //table.bits[next + huff] = len - drop;\n      //table.val[next + huff] = 0;\n      table[next + huff] = len - drop << 24 | 64 << 16 | 0;\n    }\n\n    /* set return parameters */\n    //opts.table_index += used;\n    opts.bits = root;\n    return 0;\n  }\n  ;\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/messages\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    2: 'need dictionary',\n    /* Z_NEED_DICT       2  */\n    1: 'stream end',\n    /* Z_STREAM_END      1  */\n    0: '',\n    /* Z_OK              0  */\n    '-1': 'file error',\n    /* Z_ERRNO         (-1) */\n    '-2': 'stream error',\n    /* Z_STREAM_ERROR  (-2) */\n    '-3': 'data error',\n    /* Z_DATA_ERROR    (-3) */\n    '-4': 'insufficient memory',\n    /* Z_MEM_ERROR     (-4) */\n    '-5': 'buffer error',\n    /* Z_BUF_ERROR     (-5) */\n    '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n  };\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/trees\", [\"exports\", \"novnc-sockjs/vendor/pako/lib/utils/common\"], function (_exports, utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports._tr_align = _tr_align;\n  _exports._tr_flush_block = _tr_flush_block;\n  _exports._tr_init = _tr_init;\n  _exports._tr_stored_block = _tr_stored_block;\n  _exports._tr_tally = _tr_tally;\n  /* Public constants ==========================================================*/\n  /* ===========================================================================*/\n\n  //var Z_FILTERED          = 1;\n  //var Z_HUFFMAN_ONLY      = 2;\n  //var Z_RLE               = 3;\n  var Z_FIXED = 4;\n  //var Z_DEFAULT_STRATEGY  = 0;\n\n  /* Possible values of the data_type field (though see inflate()) */\n  var Z_BINARY = 0;\n  var Z_TEXT = 1;\n  //var Z_ASCII             = 1; // = Z_TEXT\n  var Z_UNKNOWN = 2;\n\n  /*============================================================================*/\n\n  function zero(buf) {\n    var len = buf.length;\n    while (--len >= 0) {\n      buf[len] = 0;\n    }\n  }\n\n  // From zutil.h\n\n  var STORED_BLOCK = 0;\n  var STATIC_TREES = 1;\n  var DYN_TREES = 2;\n  /* The three kinds of block type */\n\n  var MIN_MATCH = 3;\n  var MAX_MATCH = 258;\n  /* The minimum and maximum match lengths */\n\n  // From deflate.h\n  /* ===========================================================================\n   * Internal compression state.\n   */\n\n  var LENGTH_CODES = 29;\n  /* number of length codes, not counting the special END_BLOCK code */\n\n  var LITERALS = 256;\n  /* number of literal bytes 0..255 */\n\n  var L_CODES = LITERALS + 1 + LENGTH_CODES;\n  /* number of Literal or Length codes, including the END_BLOCK code */\n\n  var D_CODES = 30;\n  /* number of distance codes */\n\n  var BL_CODES = 19;\n  /* number of codes used to transfer the bit lengths */\n\n  var HEAP_SIZE = 2 * L_CODES + 1;\n  /* maximum heap size */\n\n  var MAX_BITS = 15;\n  /* All codes must not exceed MAX_BITS bits */\n\n  var Buf_size = 16;\n  /* size of bit buffer in bi_buf */\n\n  /* ===========================================================================\n   * Constants\n   */\n\n  var MAX_BL_BITS = 7;\n  /* Bit length codes must not exceed MAX_BL_BITS bits */\n\n  var END_BLOCK = 256;\n  /* end of block literal code */\n\n  var REP_3_6 = 16;\n  /* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\n  var REPZ_3_10 = 17;\n  /* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\n  var REPZ_11_138 = 18;\n  /* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n  /* eslint-disable comma-spacing,array-bracket-spacing */\n  var extra_lbits = /* extra bits for each length code */\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];\n  var extra_dbits = /* extra bits for each distance code */\n  [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];\n  var extra_blbits = /* extra bits for each bit length code */\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];\n  var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n  /* eslint-enable comma-spacing,array-bracket-spacing */\n\n  /* The lengths of the bit length codes are sent in order of decreasing\n   * probability, to avoid transmitting the lengths for unused bit length codes.\n   */\n\n  /* ===========================================================================\n   * Local data. These are initialized only once.\n   */\n\n  // We pre-fill arrays with 0 to avoid uninitialized gaps\n\n  var DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n  // !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\n  var static_ltree = new Array((L_CODES + 2) * 2);\n  zero(static_ltree);\n  /* The static literal tree. Since the bit lengths are imposed, there is no\n   * need for the L_CODES extra codes used during heap construction. However\n   * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n   * below).\n   */\n\n  var static_dtree = new Array(D_CODES * 2);\n  zero(static_dtree);\n  /* The static distance tree. (Actually a trivial tree since all codes use\n   * 5 bits.)\n   */\n\n  var _dist_code = new Array(DIST_CODE_LEN);\n  zero(_dist_code);\n  /* Distance codes. The first 256 values correspond to the distances\n   * 3 .. 258, the last 256 values correspond to the top 8 bits of\n   * the 15 bit distances.\n   */\n\n  var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\n  zero(_length_code);\n  /* length code for each normalized match length (0 == MIN_MATCH) */\n\n  var base_length = new Array(LENGTH_CODES);\n  zero(base_length);\n  /* First normalized length for each code (0 = MIN_MATCH) */\n\n  var base_dist = new Array(D_CODES);\n  zero(base_dist);\n  /* First normalized distance for each code (0 = distance of 1) */\n\n  function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n    this.static_tree = static_tree; /* static tree or NULL */\n    this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n    this.extra_base = extra_base; /* base index for extra_bits */\n    this.elems = elems; /* max number of elements in the tree */\n    this.max_length = max_length; /* max bit length for the codes */\n\n    // show if `static_tree` has data or dummy - needed for monomorphic objects\n    this.has_stree = static_tree && static_tree.length;\n  }\n  var static_l_desc;\n  var static_d_desc;\n  var static_bl_desc;\n  function TreeDesc(dyn_tree, stat_desc) {\n    this.dyn_tree = dyn_tree; /* the dynamic tree */\n    this.max_code = 0; /* largest code with non zero frequency */\n    this.stat_desc = stat_desc; /* the corresponding static tree */\n  }\n  function d_code(dist) {\n    return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n  }\n\n  /* ===========================================================================\n   * Output a short LSB first on the stream.\n   * IN assertion: there is enough room in pendingBuf.\n   */\n  function put_short(s, w) {\n    //    put_byte(s, (uch)((w) & 0xff));\n    //    put_byte(s, (uch)((ush)(w) >> 8));\n    s.pending_buf[s.pending++] = w & 0xff;\n    s.pending_buf[s.pending++] = w >>> 8 & 0xff;\n  }\n\n  /* ===========================================================================\n   * Send a value on a given number of bits.\n   * IN assertion: length <= 16 and value fits in length bits.\n   */\n  function send_bits(s, value, length) {\n    if (s.bi_valid > Buf_size - length) {\n      s.bi_buf |= value << s.bi_valid & 0xffff;\n      put_short(s, s.bi_buf);\n      s.bi_buf = value >> Buf_size - s.bi_valid;\n      s.bi_valid += length - Buf_size;\n    } else {\n      s.bi_buf |= value << s.bi_valid & 0xffff;\n      s.bi_valid += length;\n    }\n  }\n  function send_code(s, c, tree) {\n    send_bits(s, tree[c * 2] /*.Code*/, tree[c * 2 + 1] /*.Len*/);\n  }\n\n  /* ===========================================================================\n   * Reverse the first len bits of a code, using straightforward code (a faster\n   * method would use a table)\n   * IN assertion: 1 <= len <= 15\n   */\n  function bi_reverse(code, len) {\n    var res = 0;\n    do {\n      res |= code & 1;\n      code >>>= 1;\n      res <<= 1;\n    } while (--len > 0);\n    return res >>> 1;\n  }\n\n  /* ===========================================================================\n   * Flush the bit buffer, keeping at most 7 bits in it.\n   */\n  function bi_flush(s) {\n    if (s.bi_valid === 16) {\n      put_short(s, s.bi_buf);\n      s.bi_buf = 0;\n      s.bi_valid = 0;\n    } else if (s.bi_valid >= 8) {\n      s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n      s.bi_buf >>= 8;\n      s.bi_valid -= 8;\n    }\n  }\n\n  /* ===========================================================================\n   * Compute the optimal bit lengths for a tree and update the total bit length\n   * for the current block.\n   * IN assertion: the fields freq and dad are set, heap[heap_max] and\n   *    above are the tree nodes sorted by increasing frequency.\n   * OUT assertions: the field len is set to the optimal bit length, the\n   *     array bl_count contains the frequencies for each bit length.\n   *     The length opt_len is updated; static_len is also updated if stree is\n   *     not null.\n   */\n  function gen_bitlen(s, desc)\n  //    deflate_state *s;\n  //    tree_desc *desc;    /* the tree descriptor */\n  {\n    var tree = desc.dyn_tree;\n    var max_code = desc.max_code;\n    var stree = desc.stat_desc.static_tree;\n    var has_stree = desc.stat_desc.has_stree;\n    var extra = desc.stat_desc.extra_bits;\n    var base = desc.stat_desc.extra_base;\n    var max_length = desc.stat_desc.max_length;\n    var h; /* heap index */\n    var n, m; /* iterate over the tree elements */\n    var bits; /* bit length */\n    var xbits; /* extra bits */\n    var f; /* frequency */\n    var overflow = 0; /* number of elements with bit length too large */\n\n    for (bits = 0; bits <= MAX_BITS; bits++) {\n      s.bl_count[bits] = 0;\n    }\n\n    /* In a first pass, compute the optimal bit lengths (which may\n     * overflow in the case of the bit length tree).\n     */\n    tree[s.heap[s.heap_max] * 2 + 1] /*.Len*/ = 0; /* root of the heap */\n\n    for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n      n = s.heap[h];\n      bits = tree[tree[n * 2 + 1] /*.Dad*/ * 2 + 1] /*.Len*/ + 1;\n      if (bits > max_length) {\n        bits = max_length;\n        overflow++;\n      }\n      tree[n * 2 + 1] /*.Len*/ = bits;\n      /* We overwrite tree[n].Dad which is no longer needed */\n\n      if (n > max_code) {\n        continue;\n      } /* not a leaf node */\n\n      s.bl_count[bits]++;\n      xbits = 0;\n      if (n >= base) {\n        xbits = extra[n - base];\n      }\n      f = tree[n * 2] /*.Freq*/;\n      s.opt_len += f * (bits + xbits);\n      if (has_stree) {\n        s.static_len += f * (stree[n * 2 + 1] /*.Len*/ + xbits);\n      }\n    }\n    if (overflow === 0) {\n      return;\n    }\n\n    // Trace((stderr,\"\\nbit length overflow\\n\"));\n    /* This happens for example on obj2 and pic of the Calgary corpus */\n\n    /* Find the first bit length which could increase: */\n    do {\n      bits = max_length - 1;\n      while (s.bl_count[bits] === 0) {\n        bits--;\n      }\n      s.bl_count[bits]--; /* move one leaf down the tree */\n      s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n      s.bl_count[max_length]--;\n      /* The brother of the overflow item also moves one step up,\n       * but this does not affect bl_count[max_length]\n       */\n      overflow -= 2;\n    } while (overflow > 0);\n\n    /* Now recompute all bit lengths, scanning in increasing frequency.\n     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n     * lengths instead of fixing only the wrong ones. This idea is taken\n     * from 'ar' written by Haruhiko Okumura.)\n     */\n    for (bits = max_length; bits !== 0; bits--) {\n      n = s.bl_count[bits];\n      while (n !== 0) {\n        m = s.heap[--h];\n        if (m > max_code) {\n          continue;\n        }\n        if (tree[m * 2 + 1] /*.Len*/ !== bits) {\n          // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n          s.opt_len += (bits - tree[m * 2 + 1] /*.Len*/) * tree[m * 2] /*.Freq*/;\n          tree[m * 2 + 1] /*.Len*/ = bits;\n        }\n        n--;\n      }\n    }\n  }\n\n  /* ===========================================================================\n   * Generate the codes for a given tree and bit counts (which need not be\n   * optimal).\n   * IN assertion: the array bl_count contains the bit length statistics for\n   * the given tree and the field len is set for all tree elements.\n   * OUT assertion: the field code is set for all tree elements of non\n   *     zero code length.\n   */\n  function gen_codes(tree, max_code, bl_count)\n  //    ct_data *tree;             /* the tree to decorate */\n  //    int max_code;              /* largest code with non zero frequency */\n  //    ushf *bl_count;            /* number of codes at each bit length */\n  {\n    var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n    var code = 0; /* running code value */\n    var bits; /* bit index */\n    var n; /* code index */\n\n    /* The distribution counts are first used to generate the code values\n     * without bit reversal.\n     */\n    for (bits = 1; bits <= MAX_BITS; bits++) {\n      next_code[bits] = code = code + bl_count[bits - 1] << 1;\n    }\n    /* Check that the bit counts in bl_count are consistent. The last code\n     * must be all ones.\n     */\n    //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n    //        \"inconsistent bit counts\");\n    //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n    for (n = 0; n <= max_code; n++) {\n      var len = tree[n * 2 + 1] /*.Len*/;\n      if (len === 0) {\n        continue;\n      }\n      /* Now reverse the bits */\n      tree[n * 2] /*.Code*/ = bi_reverse(next_code[len]++, len);\n\n      //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n      //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n    }\n  }\n\n  /* ===========================================================================\n   * Initialize the various 'constant' tables.\n   */\n  function tr_static_init() {\n    var n; /* iterates over tree elements */\n    var bits; /* bit counter */\n    var length; /* length value */\n    var code; /* code value */\n    var dist; /* distance index */\n    var bl_count = new Array(MAX_BITS + 1);\n    /* number of codes at each bit length for an optimal tree */\n\n    // do check in _tr_init()\n    //if (static_init_done) return;\n\n    /* For some embedded targets, global variables are not initialized: */\n    /*#ifdef NO_INIT_GLOBAL_POINTERS\n      static_l_desc.static_tree = static_ltree;\n      static_l_desc.extra_bits = extra_lbits;\n      static_d_desc.static_tree = static_dtree;\n      static_d_desc.extra_bits = extra_dbits;\n      static_bl_desc.extra_bits = extra_blbits;\n    #endif*/\n\n    /* Initialize the mapping length (0..255) -> length code (0..28) */\n    length = 0;\n    for (code = 0; code < LENGTH_CODES - 1; code++) {\n      base_length[code] = length;\n      for (n = 0; n < 1 << extra_lbits[code]; n++) {\n        _length_code[length++] = code;\n      }\n    }\n    //Assert (length == 256, \"tr_static_init: length != 256\");\n    /* Note that the length 255 (match length 258) can be represented\n     * in two different ways: code 284 + 5 bits or code 285, so we\n     * overwrite length_code[255] to use the best encoding:\n     */\n    _length_code[length - 1] = code;\n\n    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n    dist = 0;\n    for (code = 0; code < 16; code++) {\n      base_dist[code] = dist;\n      for (n = 0; n < 1 << extra_dbits[code]; n++) {\n        _dist_code[dist++] = code;\n      }\n    }\n    //Assert (dist == 256, \"tr_static_init: dist != 256\");\n    dist >>= 7; /* from now on, all distances are divided by 128 */\n    for (; code < D_CODES; code++) {\n      base_dist[code] = dist << 7;\n      for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {\n        _dist_code[256 + dist++] = code;\n      }\n    }\n    //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n    /* Construct the codes of the static literal tree */\n    for (bits = 0; bits <= MAX_BITS; bits++) {\n      bl_count[bits] = 0;\n    }\n    n = 0;\n    while (n <= 143) {\n      static_ltree[n * 2 + 1] /*.Len*/ = 8;\n      n++;\n      bl_count[8]++;\n    }\n    while (n <= 255) {\n      static_ltree[n * 2 + 1] /*.Len*/ = 9;\n      n++;\n      bl_count[9]++;\n    }\n    while (n <= 279) {\n      static_ltree[n * 2 + 1] /*.Len*/ = 7;\n      n++;\n      bl_count[7]++;\n    }\n    while (n <= 287) {\n      static_ltree[n * 2 + 1] /*.Len*/ = 8;\n      n++;\n      bl_count[8]++;\n    }\n    /* Codes 286 and 287 do not exist, but we must include them in the\n     * tree construction to get a canonical Huffman tree (longest code\n     * all ones)\n     */\n    gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n    /* The static distance tree is trivial: */\n    for (n = 0; n < D_CODES; n++) {\n      static_dtree[n * 2 + 1] /*.Len*/ = 5;\n      static_dtree[n * 2] /*.Code*/ = bi_reverse(n, 5);\n    }\n\n    // Now data ready and we can init static trees\n    static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n    static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n    static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n    //static_init_done = true;\n  }\n\n  /* ===========================================================================\n   * Initialize a new block.\n   */\n  function init_block(s) {\n    var n; /* iterates over tree elements */\n\n    /* Initialize the trees. */\n    for (n = 0; n < L_CODES; n++) {\n      s.dyn_ltree[n * 2] /*.Freq*/ = 0;\n    }\n    for (n = 0; n < D_CODES; n++) {\n      s.dyn_dtree[n * 2] /*.Freq*/ = 0;\n    }\n    for (n = 0; n < BL_CODES; n++) {\n      s.bl_tree[n * 2] /*.Freq*/ = 0;\n    }\n    s.dyn_ltree[END_BLOCK * 2] /*.Freq*/ = 1;\n    s.opt_len = s.static_len = 0;\n    s.last_lit = s.matches = 0;\n  }\n\n  /* ===========================================================================\n   * Flush the bit buffer and align the output on a byte boundary\n   */\n  function bi_windup(s) {\n    if (s.bi_valid > 8) {\n      put_short(s, s.bi_buf);\n    } else if (s.bi_valid > 0) {\n      //put_byte(s, (Byte)s->bi_buf);\n      s.pending_buf[s.pending++] = s.bi_buf;\n    }\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n  }\n\n  /* ===========================================================================\n   * Copy a stored block, storing first the length and its\n   * one's complement if requested.\n   */\n  function copy_block(s, buf, len, header)\n  //DeflateState *s;\n  //charf    *buf;    /* the input data */\n  //unsigned len;     /* its length */\n  //int      header;  /* true if block header must be written */\n  {\n    bi_windup(s); /* align on byte boundary */\n\n    if (header) {\n      put_short(s, len);\n      put_short(s, ~len);\n    }\n    //  while (len--) {\n    //    put_byte(s, *buf++);\n    //  }\n    utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n    s.pending += len;\n  }\n\n  /* ===========================================================================\n   * Compares to subtrees, using the tree depth as tie breaker when\n   * the subtrees have equal frequency. This minimizes the worst case length.\n   */\n  function smaller(tree, n, m, depth) {\n    var _n2 = n * 2;\n    var _m2 = m * 2;\n    return tree[_n2] /*.Freq*/ < tree[_m2] /*.Freq*/ || tree[_n2] /*.Freq*/ === tree[_m2] /*.Freq*/ && depth[n] <= depth[m];\n  }\n\n  /* ===========================================================================\n   * Restore the heap property by moving down the tree starting at node k,\n   * exchanging a node with the smallest of its two sons if necessary, stopping\n   * when the heap property is re-established (each father smaller than its\n   * two sons).\n   */\n  function pqdownheap(s, tree, k)\n  //    deflate_state *s;\n  //    ct_data *tree;  /* the tree to restore */\n  //    int k;               /* node to move down */\n  {\n    var v = s.heap[k];\n    var j = k << 1; /* left son of k */\n    while (j <= s.heap_len) {\n      /* Set j to the smallest of the two sons: */\n      if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n        j++;\n      }\n      /* Exit if v is smaller than both sons */\n      if (smaller(tree, v, s.heap[j], s.depth)) {\n        break;\n      }\n\n      /* Exchange v with the smallest son */\n      s.heap[k] = s.heap[j];\n      k = j;\n\n      /* And continue down the tree, setting j to the left son of k */\n      j <<= 1;\n    }\n    s.heap[k] = v;\n  }\n\n  // inlined manually\n  // var SMALLEST = 1;\n\n  /* ===========================================================================\n   * Send the block data compressed using the given Huffman trees\n   */\n  function compress_block(s, ltree, dtree)\n  //    deflate_state *s;\n  //    const ct_data *ltree; /* literal tree */\n  //    const ct_data *dtree; /* distance tree */\n  {\n    var dist; /* distance of matched string */\n    var lc; /* match length or unmatched char (if dist == 0) */\n    var lx = 0; /* running index in l_buf */\n    var code; /* the code to send */\n    var extra; /* number of extra bits to send */\n\n    if (s.last_lit !== 0) {\n      do {\n        dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];\n        lc = s.pending_buf[s.l_buf + lx];\n        lx++;\n        if (dist === 0) {\n          send_code(s, lc, ltree); /* send a literal byte */\n          //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n        } else {\n          /* Here, lc is the match length - MIN_MATCH */\n          code = _length_code[lc];\n          send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n          extra = extra_lbits[code];\n          if (extra !== 0) {\n            lc -= base_length[code];\n            send_bits(s, lc, extra); /* send the extra length bits */\n          }\n          dist--; /* dist is now the match distance - 1 */\n          code = d_code(dist);\n          //Assert (code < D_CODES, \"bad d_code\");\n\n          send_code(s, code, dtree); /* send the distance code */\n          extra = extra_dbits[code];\n          if (extra !== 0) {\n            dist -= base_dist[code];\n            send_bits(s, dist, extra); /* send the extra distance bits */\n          }\n        } /* literal or match pair ? */\n\n        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n        //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n        //       \"pendingBuf overflow\");\n      } while (lx < s.last_lit);\n    }\n    send_code(s, END_BLOCK, ltree);\n  }\n\n  /* ===========================================================================\n   * Construct one Huffman tree and assigns the code bit strings and lengths.\n   * Update the total bit length for the current block.\n   * IN assertion: the field freq is set for all tree elements.\n   * OUT assertions: the fields len and code are set to the optimal bit length\n   *     and corresponding code. The length opt_len is updated; static_len is\n   *     also updated if stree is not null. The field max_code is set.\n   */\n  function build_tree(s, desc)\n  //    deflate_state *s;\n  //    tree_desc *desc; /* the tree descriptor */\n  {\n    var tree = desc.dyn_tree;\n    var stree = desc.stat_desc.static_tree;\n    var has_stree = desc.stat_desc.has_stree;\n    var elems = desc.stat_desc.elems;\n    var n, m; /* iterate over heap elements */\n    var max_code = -1; /* largest code with non zero frequency */\n    var node; /* new node being created */\n\n    /* Construct the initial heap, with least frequent element in\n     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n     * heap[0] is not used.\n     */\n    s.heap_len = 0;\n    s.heap_max = HEAP_SIZE;\n    for (n = 0; n < elems; n++) {\n      if (tree[n * 2] /*.Freq*/ !== 0) {\n        s.heap[++s.heap_len] = max_code = n;\n        s.depth[n] = 0;\n      } else {\n        tree[n * 2 + 1] /*.Len*/ = 0;\n      }\n    }\n\n    /* The pkzip format requires that at least one distance code exists,\n     * and that at least one bit should be sent even if there is only one\n     * possible code. So to avoid special checks later on we force at least\n     * two codes of non zero frequency.\n     */\n    while (s.heap_len < 2) {\n      node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;\n      tree[node * 2] /*.Freq*/ = 1;\n      s.depth[node] = 0;\n      s.opt_len--;\n      if (has_stree) {\n        s.static_len -= stree[node * 2 + 1] /*.Len*/;\n      }\n      /* node is 0 or 1 so it does not have extra bits */\n    }\n    desc.max_code = max_code;\n\n    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n     * establish sub-heaps of increasing lengths:\n     */\n    for (n = s.heap_len >> 1 /*int /2*/; n >= 1; n--) {\n      pqdownheap(s, tree, n);\n    }\n\n    /* Construct the Huffman tree by repeatedly combining the least two\n     * frequent nodes.\n     */\n    node = elems; /* next internal node of the tree */\n    do {\n      //pqremove(s, tree, n);  /* n = node of least frequency */\n      /*** pqremove ***/\n      n = s.heap[1 /*SMALLEST*/];\n      s.heap[1 /*SMALLEST*/] = s.heap[s.heap_len--];\n      pqdownheap(s, tree, 1 /*SMALLEST*/);\n      /***/\n\n      m = s.heap[1 /*SMALLEST*/]; /* m = node of next least frequency */\n\n      s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n      s.heap[--s.heap_max] = m;\n\n      /* Create a new node father of n and m */\n      tree[node * 2] /*.Freq*/ = tree[n * 2] /*.Freq*/ + tree[m * 2] /*.Freq*/;\n      s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n      tree[n * 2 + 1] /*.Dad*/ = tree[m * 2 + 1] /*.Dad*/ = node;\n\n      /* and insert the new node in the heap */\n      s.heap[1 /*SMALLEST*/] = node++;\n      pqdownheap(s, tree, 1 /*SMALLEST*/);\n    } while (s.heap_len >= 2);\n    s.heap[--s.heap_max] = s.heap[1 /*SMALLEST*/];\n\n    /* At this point, the fields freq and dad are set. We can now\n     * generate the bit lengths.\n     */\n    gen_bitlen(s, desc);\n\n    /* The field len is now set, we can generate the bit codes */\n    gen_codes(tree, max_code, s.bl_count);\n  }\n\n  /* ===========================================================================\n   * Scan a literal or distance tree to determine the frequencies of the codes\n   * in the bit length tree.\n   */\n  function scan_tree(s, tree, max_code)\n  //    deflate_state *s;\n  //    ct_data *tree;   /* the tree to be scanned */\n  //    int max_code;    /* and its largest code of non zero frequency */\n  {\n    var n; /* iterates over all tree elements */\n    var prevlen = -1; /* last emitted length */\n    var curlen; /* length of current code */\n\n    var nextlen = tree[0 * 2 + 1] /*.Len*/; /* length of next code */\n\n    var count = 0; /* repeat count of the current code */\n    var max_count = 7; /* max repeat count */\n    var min_count = 4; /* min repeat count */\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n    }\n    tree[(max_code + 1) * 2 + 1] /*.Len*/ = 0xffff; /* guard */\n\n    for (n = 0; n <= max_code; n++) {\n      curlen = nextlen;\n      nextlen = tree[(n + 1) * 2 + 1] /*.Len*/;\n      if (++count < max_count && curlen === nextlen) {\n        continue;\n      } else if (count < min_count) {\n        s.bl_tree[curlen * 2] /*.Freq*/ += count;\n      } else if (curlen !== 0) {\n        if (curlen !== prevlen) {\n          s.bl_tree[curlen * 2] /*.Freq*/++;\n        }\n        s.bl_tree[REP_3_6 * 2] /*.Freq*/++;\n      } else if (count <= 10) {\n        s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++;\n      } else {\n        s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++;\n      }\n      count = 0;\n      prevlen = curlen;\n      if (nextlen === 0) {\n        max_count = 138;\n        min_count = 3;\n      } else if (curlen === nextlen) {\n        max_count = 6;\n        min_count = 3;\n      } else {\n        max_count = 7;\n        min_count = 4;\n      }\n    }\n  }\n\n  /* ===========================================================================\n   * Send a literal or distance tree in compressed form, using the codes in\n   * bl_tree.\n   */\n  function send_tree(s, tree, max_code)\n  //    deflate_state *s;\n  //    ct_data *tree; /* the tree to be scanned */\n  //    int max_code;       /* and its largest code of non zero frequency */\n  {\n    var n; /* iterates over all tree elements */\n    var prevlen = -1; /* last emitted length */\n    var curlen; /* length of current code */\n\n    var nextlen = tree[0 * 2 + 1] /*.Len*/; /* length of next code */\n\n    var count = 0; /* repeat count of the current code */\n    var max_count = 7; /* max repeat count */\n    var min_count = 4; /* min repeat count */\n\n    /* tree[max_code+1].Len = -1; */ /* guard already set */\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n    }\n    for (n = 0; n <= max_code; n++) {\n      curlen = nextlen;\n      nextlen = tree[(n + 1) * 2 + 1] /*.Len*/;\n      if (++count < max_count && curlen === nextlen) {\n        continue;\n      } else if (count < min_count) {\n        do {\n          send_code(s, curlen, s.bl_tree);\n        } while (--count !== 0);\n      } else if (curlen !== 0) {\n        if (curlen !== prevlen) {\n          send_code(s, curlen, s.bl_tree);\n          count--;\n        }\n        //Assert(count >= 3 && count <= 6, \" 3_6?\");\n        send_code(s, REP_3_6, s.bl_tree);\n        send_bits(s, count - 3, 2);\n      } else if (count <= 10) {\n        send_code(s, REPZ_3_10, s.bl_tree);\n        send_bits(s, count - 3, 3);\n      } else {\n        send_code(s, REPZ_11_138, s.bl_tree);\n        send_bits(s, count - 11, 7);\n      }\n      count = 0;\n      prevlen = curlen;\n      if (nextlen === 0) {\n        max_count = 138;\n        min_count = 3;\n      } else if (curlen === nextlen) {\n        max_count = 6;\n        min_count = 3;\n      } else {\n        max_count = 7;\n        min_count = 4;\n      }\n    }\n  }\n\n  /* ===========================================================================\n   * Construct the Huffman tree for the bit lengths and return the index in\n   * bl_order of the last bit length code to send.\n   */\n  function build_bl_tree(s) {\n    var max_blindex; /* index of last bit length code of non zero freq */\n\n    /* Determine the bit length frequencies for literal and distance trees */\n    scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n    scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n    /* Build the bit length tree: */\n    build_tree(s, s.bl_desc);\n    /* opt_len now includes the length of the tree representations, except\n     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n     */\n\n    /* Determine the number of bit length codes to send. The pkzip format\n     * requires that at least 4 bit length codes be sent. (appnote.txt says\n     * 3 but the actual value used is 4.)\n     */\n    for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n      if (s.bl_tree[bl_order[max_blindex] * 2 + 1] /*.Len*/ !== 0) {\n        break;\n      }\n    }\n    /* Update opt_len to include the bit length tree and counts */\n    s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n    //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n    //        s->opt_len, s->static_len));\n\n    return max_blindex;\n  }\n\n  /* ===========================================================================\n   * Send the header for a block using dynamic Huffman trees: the counts, the\n   * lengths of the bit length codes, the literal tree and the distance tree.\n   * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n   */\n  function send_all_trees(s, lcodes, dcodes, blcodes)\n  //    deflate_state *s;\n  //    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n  {\n    var rank; /* index in bl_order */\n\n    //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n    //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n    //        \"too many codes\");\n    //Tracev((stderr, \"\\nbl counts: \"));\n    send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n    send_bits(s, dcodes - 1, 5);\n    send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n    for (rank = 0; rank < blcodes; rank++) {\n      //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n      send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1] /*.Len*/, 3);\n    }\n    //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n    send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n    //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n    send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n    //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n  }\n\n  /* ===========================================================================\n   * Check if the data type is TEXT or BINARY, using the following algorithm:\n   * - TEXT if the two conditions below are satisfied:\n   *    a) There are no non-portable control characters belonging to the\n   *       \"black list\" (0..6, 14..25, 28..31).\n   *    b) There is at least one printable character belonging to the\n   *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n   * - BINARY otherwise.\n   * - The following partially-portable control characters form a\n   *   \"gray list\" that is ignored in this detection algorithm:\n   *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n   * IN assertion: the fields Freq of dyn_ltree are set.\n   */\n  function detect_data_type(s) {\n    /* black_mask is the bit mask of black-listed bytes\n     * set bits 0..6, 14..25, and 28..31\n     * 0xf3ffc07f = binary 11110011111111111100000001111111\n     */\n    var black_mask = 0xf3ffc07f;\n    var n;\n\n    /* Check for non-textual (\"black-listed\") bytes. */\n    for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n      if (black_mask & 1 && s.dyn_ltree[n * 2] /*.Freq*/ !== 0) {\n        return Z_BINARY;\n      }\n    }\n\n    /* Check for textual (\"white-listed\") bytes. */\n    if (s.dyn_ltree[9 * 2] /*.Freq*/ !== 0 || s.dyn_ltree[10 * 2] /*.Freq*/ !== 0 || s.dyn_ltree[13 * 2] /*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n    for (n = 32; n < LITERALS; n++) {\n      if (s.dyn_ltree[n * 2] /*.Freq*/ !== 0) {\n        return Z_TEXT;\n      }\n    }\n\n    /* There are no \"black-listed\" or \"white-listed\" bytes:\n     * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n     */\n    return Z_BINARY;\n  }\n  var static_init_done = false;\n\n  /* ===========================================================================\n   * Initialize the tree data structures for a new zlib stream.\n   */\n  function _tr_init(s) {\n    if (!static_init_done) {\n      tr_static_init();\n      static_init_done = true;\n    }\n    s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n    s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n    s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n    /* Initialize the first block of the first file: */\n    init_block(s);\n  }\n\n  /* ===========================================================================\n   * Send a stored block\n   */\n  function _tr_stored_block(s, buf, stored_len, last)\n  //DeflateState *s;\n  //charf *buf;       /* input block */\n  //ulg stored_len;   /* length of input block */\n  //int last;         /* one if this is the last block for a file */\n  {\n    send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n    copy_block(s, buf, stored_len, true); /* with header */\n  }\n\n  /* ===========================================================================\n   * Send one empty static block to give enough lookahead for inflate.\n   * This takes 10 bits, of which 7 may remain in the bit buffer.\n   */\n  function _tr_align(s) {\n    send_bits(s, STATIC_TREES << 1, 3);\n    send_code(s, END_BLOCK, static_ltree);\n    bi_flush(s);\n  }\n\n  /* ===========================================================================\n   * Determine the best encoding for the current block: dynamic trees, static\n   * trees or store, and output the encoded block to the zip file.\n   */\n  function _tr_flush_block(s, buf, stored_len, last)\n  //DeflateState *s;\n  //charf *buf;       /* input block, or NULL if too old */\n  //ulg stored_len;   /* length of input block */\n  //int last;         /* one if this is the last block for a file */\n  {\n    var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n    var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n    /* Build the Huffman trees unless a stored block is forced */\n    if (s.level > 0) {\n      /* Check if the file is binary or text */\n      if (s.strm.data_type === Z_UNKNOWN) {\n        s.strm.data_type = detect_data_type(s);\n      }\n\n      /* Construct the literal and distance trees */\n      build_tree(s, s.l_desc);\n      // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n      //        s->static_len));\n\n      build_tree(s, s.d_desc);\n      // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n      //        s->static_len));\n      /* At this point, opt_len and static_len are the total bit lengths of\n       * the compressed block data, excluding the tree representations.\n       */\n\n      /* Build the bit length tree for the above two trees, and get the index\n       * in bl_order of the last bit length code to send.\n       */\n      max_blindex = build_bl_tree(s);\n\n      /* Determine the best encoding. Compute the block lengths in bytes. */\n      opt_lenb = s.opt_len + 3 + 7 >>> 3;\n      static_lenb = s.static_len + 3 + 7 >>> 3;\n\n      // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n      //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n      //        s->last_lit));\n\n      if (static_lenb <= opt_lenb) {\n        opt_lenb = static_lenb;\n      }\n    } else {\n      // Assert(buf != (char*)0, \"lost buf\");\n      opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n    }\n    if (stored_len + 4 <= opt_lenb && buf !== -1) {\n      /* 4: two words for the lengths */\n\n      /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n       * Otherwise we can't have processed more than WSIZE input bytes since\n       * the last block flush, because compression would have been\n       * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n       * transform a block into a stored block.\n       */\n      _tr_stored_block(s, buf, stored_len, last);\n    } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n      send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n      compress_block(s, static_ltree, static_dtree);\n    } else {\n      send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n      send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n      compress_block(s, s.dyn_ltree, s.dyn_dtree);\n    }\n    // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n    /* The above check is made mod 2^32, for files larger than 512 MB\n     * and uLong implemented on 32 bits.\n     */\n    init_block(s);\n    if (last) {\n      bi_windup(s);\n    }\n    // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n    //       s->compressed_len-7*last));\n  }\n\n  /* ===========================================================================\n   * Save the match info and tally the frequency counts. Return true if\n   * the current block must be flushed.\n   */\n  function _tr_tally(s, dist, lc)\n  //    deflate_state *s;\n  //    unsigned dist;  /* distance of matched string */\n  //    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n  {\n    //var out_length, in_length, dcode;\n\n    s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff;\n    s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n    s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n    s.last_lit++;\n    if (dist === 0) {\n      /* lc is the unmatched char */\n      s.dyn_ltree[lc * 2] /*.Freq*/++;\n    } else {\n      s.matches++;\n      /* Here, lc is the match length - MIN_MATCH */\n      dist--; /* dist = match distance - 1 */\n      //Assert((ush)dist < (ush)MAX_DIST(s) &&\n      //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n      //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n      s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++;\n      s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++;\n    }\n\n    // (!) This block is disabled in zlib defailts,\n    // don't enable it for binary compatibility\n\n    //#ifdef TRUNCATE_BLOCK\n    //  /* Try to guess if it is profitable to stop the current block here */\n    //  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n    //    /* Compute an upper bound for the compressed length */\n    //    out_length = s.last_lit*8;\n    //    in_length = s.strstart - s.block_start;\n    //\n    //    for (dcode = 0; dcode < D_CODES; dcode++) {\n    //      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n    //    }\n    //    out_length >>>= 3;\n    //    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n    //    //       s->last_lit, in_length, out_length,\n    //    //       100L - out_length*100L/in_length));\n    //    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n    //      return true;\n    //    }\n    //  }\n    //#endif\n\n    return s.last_lit === s.lit_bufsize - 1;\n    /* We avoid equality with lit_bufsize because of wraparound at 64K\n     * on 16 bit machines and because stored blocks are restricted to\n     * 64K-1 bytes.\n     */\n  }\n});","define(\"novnc-sockjs/vendor/pako/lib/zlib/zstream\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = ZStream;\n  function ZStream() {\n    /* next input byte */\n    this.input = null; // JS specific, because we have no pointers\n    this.next_in = 0;\n    /* number of bytes available at input */\n    this.avail_in = 0;\n    /* total number of input bytes read so far */\n    this.total_in = 0;\n    /* next output byte should be put there */\n    this.output = null; // JS specific, because we have no pointers\n    this.next_out = 0;\n    /* remaining free space at output */\n    this.avail_out = 0;\n    /* total number of bytes output so far */\n    this.total_out = 0;\n    /* last error message, NULL if no error */\n    this.msg = '' /*Z_NULL*/;\n    /* not visible by applications */\n    this.state = null;\n    /* best guess about the data type: binary or text */\n    this.data_type = 2 /*Z_UNKNOWN*/;\n    /* adler32 value of the uncompressed data */\n    this.adler = 0;\n  }\n});","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n\n(function(root, factory)\n{\n\t/* globals define */\n\tif (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t}\n\telse if (typeof module === 'object' && typeof exports !== 'undefined')\n\t{\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t}\n\telse\n\t{\n\t\t// Browser globals (root is window)\n\t\troot.Papa = factory();\n\t}\n\t// in strict mode we cannot access arguments.callee, so we need a named reference to\n\t// stringify the factory method for the blob worker\n\t// eslint-disable-next-line func-name\n}(this, function moduleFactory()\n{\n\t'use strict';\n\n\tvar global = (function() {\n\t\t// alternative method, similar to `Function('return this')()`\n\t\t// but without using `eval` (which is disabled when\n\t\t// using Content Security Policy).\n\n\t\tif (typeof self !== 'undefined') { return self; }\n\t\tif (typeof window !== 'undefined') { return window; }\n\t\tif (typeof global !== 'undefined') { return global; }\n\n\t\t// When running tests none of the above have been defined\n\t\treturn {};\n\t})();\n\n\n\tfunction getWorkerBlob() {\n\t\tvar URL = global.URL || global.webkitURL || null;\n\t\tvar code = moduleFactory.toString();\n\t\treturn Papa.BLOB_URL || (Papa.BLOB_URL = URL.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \", '(', code, ')();'], {type: 'text/javascript'})));\n\t}\n\n\tvar IS_WORKER = !global.document && !!global.postMessage,\n\t\tIS_PAPA_WORKER = global.IS_PAPA_WORKER || false;\n\n\tvar workers = {}, workerIdCounter = 0;\n\n\tvar Papa = {};\n\n\tPapa.parse = CsvToJson;\n\tPapa.unparse = JsonToCsv;\n\n\tPapa.RECORD_SEP = String.fromCharCode(30);\n\tPapa.UNIT_SEP = String.fromCharCode(31);\n\tPapa.BYTE_ORDER_MARK = '\\ufeff';\n\tPapa.BAD_DELIMITERS = ['\\r', '\\n', '\"', Papa.BYTE_ORDER_MARK];\n\tPapa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker;\n\tPapa.NODE_STREAM_INPUT = 1;\n\n\t// Configurable chunk sizes for local and remote files, respectively\n\tPapa.LocalChunkSize = 1024 * 1024 * 10;\t// 10 MB\n\tPapa.RemoteChunkSize = 1024 * 1024 * 5;\t// 5 MB\n\tPapa.DefaultDelimiter = ',';\t\t\t// Used if not specified and detection fails\n\n\t// Exposed for testing and development only\n\tPapa.Parser = Parser;\n\tPapa.ParserHandle = ParserHandle;\n\tPapa.NetworkStreamer = NetworkStreamer;\n\tPapa.FileStreamer = FileStreamer;\n\tPapa.StringStreamer = StringStreamer;\n\tPapa.ReadableStreamStreamer = ReadableStreamStreamer;\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tPapa.DuplexStreamStreamer = DuplexStreamStreamer;\n\t}\n\n\tif (global.jQuery)\n\t{\n\t\tvar $ = global.jQuery;\n\t\t$.fn.parse = function(options)\n\t\t{\n\t\t\tvar config = options.config || {};\n\t\t\tvar queue = [];\n\n\t\t\tthis.each(function(idx)\n\t\t\t{\n\t\t\t\tvar supported = $(this).prop('tagName').toUpperCase() === 'INPUT'\n\t\t\t\t\t\t\t\t&& $(this).attr('type').toLowerCase() === 'file'\n\t\t\t\t\t\t\t\t&& global.FileReader;\n\n\t\t\t\tif (!supported || !this.files || this.files.length === 0)\n\t\t\t\t\treturn true;\t// continue to next input element\n\n\t\t\t\tfor (var i = 0; i < this.files.length; i++)\n\t\t\t\t{\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\tfile: this.files[i],\n\t\t\t\t\t\tinputElem: this,\n\t\t\t\t\t\tinstanceConfig: $.extend({}, config)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tparseNextFile();\t// begin parsing\n\t\t\treturn this;\t\t// maintains chainability\n\n\n\t\t\tfunction parseNextFile()\n\t\t\t{\n\t\t\t\tif (queue.length === 0)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(options.complete))\n\t\t\t\t\t\toptions.complete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar f = queue[0];\n\n\t\t\t\tif (isFunction(options.before))\n\t\t\t\t{\n\t\t\t\t\tvar returned = options.before(f.file, f.inputElem);\n\n\t\t\t\t\tif (typeof returned === 'object')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (returned.action === 'abort')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror('AbortError', f.file, f.inputElem, returned.reason);\n\t\t\t\t\t\t\treturn;\t// Aborts all queued files immediately\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (returned.action === 'skip')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (typeof returned.config === 'object')\n\t\t\t\t\t\t\tf.instanceConfig = $.extend(f.instanceConfig, returned.config);\n\t\t\t\t\t}\n\t\t\t\t\telse if (returned === 'skip')\n\t\t\t\t\t{\n\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Wrap up the user's complete callback, if any, so that ours also gets executed\n\t\t\t\tvar userCompleteFunc = f.instanceConfig.complete;\n\t\t\t\tf.instanceConfig.complete = function(results)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(userCompleteFunc))\n\t\t\t\t\t\tuserCompleteFunc(results, f.file, f.inputElem);\n\t\t\t\t\tfileComplete();\n\t\t\t\t};\n\n\t\t\t\tPapa.parse(f.file, f.instanceConfig);\n\t\t\t}\n\n\t\t\tfunction error(name, file, elem, reason)\n\t\t\t{\n\t\t\t\tif (isFunction(options.error))\n\t\t\t\t\toptions.error({name: name}, file, elem, reason);\n\t\t\t}\n\n\t\t\tfunction fileComplete()\n\t\t\t{\n\t\t\t\tqueue.splice(0, 1);\n\t\t\t\tparseNextFile();\n\t\t\t}\n\t\t};\n\t}\n\n\n\tif (IS_PAPA_WORKER)\n\t{\n\t\tglobal.onmessage = workerThreadReceivedMessage;\n\t}\n\n\n\n\n\tfunction CsvToJson(_input, _config)\n\t{\n\t\t_config = _config || {};\n\t\tvar dynamicTyping = _config.dynamicTyping || false;\n\t\tif (isFunction(dynamicTyping)) {\n\t\t\t_config.dynamicTypingFunction = dynamicTyping;\n\t\t\t// Will be filled on first row call\n\t\t\tdynamicTyping = {};\n\t\t}\n\t\t_config.dynamicTyping = dynamicTyping;\n\n\t\t_config.transform = isFunction(_config.transform) ? _config.transform : false;\n\n\t\tif (_config.worker && Papa.WORKERS_SUPPORTED)\n\t\t{\n\t\t\tvar w = newWorker();\n\n\t\t\tw.userStep = _config.step;\n\t\t\tw.userChunk = _config.chunk;\n\t\t\tw.userComplete = _config.complete;\n\t\t\tw.userError = _config.error;\n\n\t\t\t_config.step = isFunction(_config.step);\n\t\t\t_config.chunk = isFunction(_config.chunk);\n\t\t\t_config.complete = isFunction(_config.complete);\n\t\t\t_config.error = isFunction(_config.error);\n\t\t\tdelete _config.worker;\t// prevent infinite loop\n\n\t\t\tw.postMessage({\n\t\t\t\tinput: _input,\n\t\t\t\tconfig: _config,\n\t\t\t\tworkerId: w.id\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar streamer = null;\n\t\tif (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === 'undefined')\n\t\t{\n\t\t\t// create a node Duplex stream for use\n\t\t\t// with .pipe\n\t\t\tstreamer = new DuplexStreamStreamer(_config);\n\t\t\treturn streamer.getStream();\n\t\t}\n\t\telse if (typeof _input === 'string')\n\t\t{\n\t\t\t_input = stripBom(_input);\n\t\t\tif (_config.download)\n\t\t\t\tstreamer = new NetworkStreamer(_config);\n\t\t\telse\n\t\t\t\tstreamer = new StringStreamer(_config);\n\t\t}\n\t\telse if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on))\n\t\t{\n\t\t\tstreamer = new ReadableStreamStreamer(_config);\n\t\t}\n\t\telse if ((global.File && _input instanceof File) || _input instanceof Object)\t// ...Safari. (see issue #106)\n\t\t\tstreamer = new FileStreamer(_config);\n\n\t\treturn streamer.stream(_input);\n\n\t\t// Strip character from UTF-8 BOM encoded files that cause issue parsing the file\n\t\tfunction stripBom(string) {\n\t\t\tif (string.charCodeAt(0) === 0xfeff) {\n\t\t\t\treturn string.slice(1);\n\t\t\t}\n\t\t\treturn string;\n\t\t}\n\t}\n\n\n\n\n\n\n\tfunction JsonToCsv(_input, _config)\n\t{\n\t\t// Default configuration\n\n\t\t/** whether to surround every datum with quotes */\n\t\tvar _quotes = false;\n\n\t\t/** whether to write headers */\n\t\tvar _writeHeader = true;\n\n\t\t/** delimiting character(s) */\n\t\tvar _delimiter = ',';\n\n\t\t/** newline character(s) */\n\t\tvar _newline = '\\r\\n';\n\n\t\t/** quote character */\n\t\tvar _quoteChar = '\"';\n\n\t\t/** escaped quote character, either \"\" or <config.escapeChar>\" */\n\t\tvar _escapedQuote = _quoteChar + _quoteChar;\n\n\t\t/** whether to skip empty lines */\n\t\tvar _skipEmptyLines = false;\n\n\t\t/** the columns (keys) we expect when we unparse objects */\n\t\tvar _columns = null;\n\n\t\t/** whether to prevent outputting cells that can be parsed as formulae by spreadsheet software (Excel and LibreOffice) */\n\t\tvar _escapeFormulae = false;\n\n\t\tunpackConfig();\n\n\t\tvar quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g');\n\n\t\tif (typeof _input === 'string')\n\t\t\t_input = JSON.parse(_input);\n\n\t\tif (Array.isArray(_input))\n\t\t{\n\t\t\tif (!_input.length || Array.isArray(_input[0]))\n\t\t\t\treturn serialize(null, _input, _skipEmptyLines);\n\t\t\telse if (typeof _input[0] === 'object')\n\t\t\t\treturn serialize(_columns || Object.keys(_input[0]), _input, _skipEmptyLines);\n\t\t}\n\t\telse if (typeof _input === 'object')\n\t\t{\n\t\t\tif (typeof _input.data === 'string')\n\t\t\t\t_input.data = JSON.parse(_input.data);\n\n\t\t\tif (Array.isArray(_input.data))\n\t\t\t{\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = _input.meta && _input.meta.fields || _columns;\n\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields =  Array.isArray(_input.data[0])\n\t\t\t\t\t\t? _input.fields\n\t\t\t\t\t\t: typeof _input.data[0] === 'object'\n\t\t\t\t\t\t\t? Object.keys(_input.data[0])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tif (!(Array.isArray(_input.data[0])) && typeof _input.data[0] !== 'object')\n\t\t\t\t\t_input.data = [_input.data];\t// handles input like [1,2,3] or ['asdf']\n\t\t\t}\n\n\t\t\treturn serialize(_input.fields || [], _input.data || [], _skipEmptyLines);\n\t\t}\n\n\t\t// Default (any valid paths should return before this)\n\t\tthrow new Error('Unable to serialize unrecognized input');\n\n\n\t\tfunction unpackConfig()\n\t\t{\n\t\t\tif (typeof _config !== 'object')\n\t\t\t\treturn;\n\n\t\t\tif (typeof _config.delimiter === 'string'\n                && !Papa.BAD_DELIMITERS.filter(function(value) { return _config.delimiter.indexOf(value) !== -1; }).length)\n\t\t\t{\n\t\t\t\t_delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tif (typeof _config.quotes === 'boolean'\n\t\t\t\t|| typeof _config.quotes === 'function'\n\t\t\t\t|| Array.isArray(_config.quotes))\n\t\t\t\t_quotes = _config.quotes;\n\n\t\t\tif (typeof _config.skipEmptyLines === 'boolean'\n\t\t\t\t|| typeof _config.skipEmptyLines === 'string')\n\t\t\t\t_skipEmptyLines = _config.skipEmptyLines;\n\n\t\t\tif (typeof _config.newline === 'string')\n\t\t\t\t_newline = _config.newline;\n\n\t\t\tif (typeof _config.quoteChar === 'string')\n\t\t\t\t_quoteChar = _config.quoteChar;\n\n\t\t\tif (typeof _config.header === 'boolean')\n\t\t\t\t_writeHeader = _config.header;\n\n\t\t\tif (Array.isArray(_config.columns)) {\n\n\t\t\t\tif (_config.columns.length === 0) throw new Error('Option columns is empty');\n\n\t\t\t\t_columns = _config.columns;\n\t\t\t}\n\n\t\t\tif (_config.escapeChar !== undefined) {\n\t\t\t\t_escapedQuote = _config.escapeChar + _quoteChar;\n\t\t\t}\n\n\t\t\tif (_config.escapeFormulae instanceof RegExp) {\n\t\t\t\t_escapeFormulae = _config.escapeFormulae;\n\t\t\t} else if (typeof _config.escapeFormulae === 'boolean' && _config.escapeFormulae) {\n\t\t\t\t_escapeFormulae =  /^[=+\\-@\\t\\r].*$/;\n\t\t\t}\n\t\t}\n\n\t\t/** The double for loop that iterates the data and writes out a CSV string including header row */\n\t\tfunction serialize(fields, data, skipEmptyLines)\n\t\t{\n\t\t\tvar csv = '';\n\n\t\t\tif (typeof fields === 'string')\n\t\t\t\tfields = JSON.parse(fields);\n\t\t\tif (typeof data === 'string')\n\t\t\t\tdata = JSON.parse(data);\n\n\t\t\tvar hasHeader = Array.isArray(fields) && fields.length > 0;\n\t\t\tvar dataKeyedByField = !(Array.isArray(data[0]));\n\n\t\t\t// If there a header row, write it first\n\t\t\tif (hasHeader && _writeHeader)\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < fields.length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\tcsv += safe(fields[i], i);\n\t\t\t\t}\n\t\t\t\tif (data.length > 0)\n\t\t\t\t\tcsv += _newline;\n\t\t\t}\n\n\t\t\t// Then write out the data\n\t\t\tfor (var row = 0; row < data.length; row++)\n\t\t\t{\n\t\t\t\tvar maxCol = hasHeader ? fields.length : data[row].length;\n\n\t\t\t\tvar emptyLine = false;\n\t\t\t\tvar nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0;\n\t\t\t\tif (skipEmptyLines && !hasHeader)\n\t\t\t\t{\n\t\t\t\t\temptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0;\n\t\t\t\t}\n\t\t\t\tif (skipEmptyLines === 'greedy' && hasHeader) {\n\t\t\t\t\tvar line = [];\n\t\t\t\t\tfor (var c = 0; c < maxCol; c++) {\n\t\t\t\t\t\tvar cx = dataKeyedByField ? fields[c] : c;\n\t\t\t\t\t\tline.push(data[row][cx]);\n\t\t\t\t\t}\n\t\t\t\t\temptyLine = line.join('').trim() === '';\n\t\t\t\t}\n\t\t\t\tif (!emptyLine)\n\t\t\t\t{\n\t\t\t\t\tfor (var col = 0; col < maxCol; col++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (col > 0 && !nullLine)\n\t\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\t\tvar colIdx = hasHeader && dataKeyedByField ? fields[col] : col;\n\t\t\t\t\t\tcsv += safe(data[row][colIdx], col);\n\t\t\t\t\t}\n\t\t\t\t\tif (row < data.length - 1 && (!skipEmptyLines || (maxCol > 0 && !nullLine)))\n\t\t\t\t\t{\n\t\t\t\t\t\tcsv += _newline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn csv;\n\t\t}\n\n\t\t/** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */\n\t\tfunction safe(str, col)\n\t\t{\n\t\t\tif (typeof str === 'undefined' || str === null)\n\t\t\t\treturn '';\n\n\t\t\tif (str.constructor === Date)\n\t\t\t\treturn JSON.stringify(str).slice(1, 25);\n\n\t\t\tvar needsQuotes = false;\n\n\t\t\tif (_escapeFormulae && typeof str === \"string\" && _escapeFormulae.test(str)) {\n\t\t\t\tstr = \"'\" + str;\n\t\t\t\tneedsQuotes = true;\n\t\t\t}\n\n\t\t\tvar escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote);\n\n\t\t\tneedsQuotes = needsQuotes\n\t\t\t\t\t\t\t|| _quotes === true\n\t\t\t\t\t\t\t|| (typeof _quotes === 'function' && _quotes(str, col))\n\t\t\t\t\t\t\t|| (Array.isArray(_quotes) && _quotes[col])\n\t\t\t\t\t\t\t|| hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS)\n\t\t\t\t\t\t\t|| escapedQuoteStr.indexOf(_delimiter) > -1\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(0) === ' '\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === ' ';\n\n\t\t\treturn needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr;\n\t\t}\n\n\t\tfunction hasAny(str, substrings)\n\t\t{\n\t\t\tfor (var i = 0; i < substrings.length; i++)\n\t\t\t\tif (str.indexOf(substrings[i]) > -1)\n\t\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\t/** ChunkStreamer is the base prototype for various streamer implementations. */\n\tfunction ChunkStreamer(config)\n\t{\n\t\tthis._handle = null;\n\t\tthis._finished = false;\n\t\tthis._completed = false;\n\t\tthis._halted = false;\n\t\tthis._input = null;\n\t\tthis._baseIndex = 0;\n\t\tthis._partialLine = '';\n\t\tthis._rowCount = 0;\n\t\tthis._start = 0;\n\t\tthis._nextChunk = null;\n\t\tthis.isFirstChunk = true;\n\t\tthis._completeResults = {\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\t\treplaceConfig.call(this, config);\n\n\t\tthis.parseChunk = function(chunk, isFakeChunk)\n\t\t{\n\t\t\t// First chunk pre-processing\n\t\t\tconst skipFirstNLines = parseInt(this._config.skipFirstNLines) || 0;\n\t\t\tif (this.isFirstChunk && skipFirstNLines > 0) {\n\t\t\t\tlet _newline = this._config.newline;\n\t\t\t\tif (!_newline) {\n\t\t\t\t\tconst quoteChar = this._config.quoteChar || '\"';\n\t\t\t\t\t_newline = this._handle.guessLineEndings(chunk, quoteChar);\n\t\t\t\t}\n\t\t\t\tconst splitChunk = chunk.split(_newline);\n\t\t\t\tchunk = [...splitChunk.slice(skipFirstNLines)].join(_newline);\n\t\t\t}\n\t\t\tif (this.isFirstChunk && isFunction(this._config.beforeFirstChunk))\n\t\t\t{\n\t\t\t\tvar modifiedChunk = this._config.beforeFirstChunk(chunk);\n\t\t\t\tif (modifiedChunk !== undefined)\n\t\t\t\t\tchunk = modifiedChunk;\n\t\t\t}\n\t\t\tthis.isFirstChunk = false;\n\t\t\tthis._halted = false;\n\n\t\t\t// Rejoin the line we likely just split in two by chunking the file\n\t\t\tvar aggregate = this._partialLine + chunk;\n\t\t\tthis._partialLine = '';\n\t\t\tvar results = this._handle.parse(aggregate, this._baseIndex, !this._finished);\n\n\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\tthis._halted = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastIndex = results.meta.cursor;\n\n\t\t\tif (!this._finished)\n\t\t\t{\n\t\t\t\tthis._partialLine = aggregate.substring(lastIndex - this._baseIndex);\n\t\t\t\tthis._baseIndex = lastIndex;\n\t\t\t}\n\n\t\t\tif (results && results.data)\n\t\t\t\tthis._rowCount += results.data.length;\n\n\t\t\tvar finishedIncludingPreview = this._finished || (this._config.preview && this._rowCount >= this._config.preview);\n\n\t\t\tif (IS_PAPA_WORKER)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tresults: results,\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tfinished: finishedIncludingPreview\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (isFunction(this._config.chunk) && !isFakeChunk)\n\t\t\t{\n\t\t\t\tthis._config.chunk(results, this._handle);\n\t\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\t\tthis._halted = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresults = undefined;\n\t\t\t\tthis._completeResults = undefined;\n\t\t\t}\n\n\t\t\tif (!this._config.step && !this._config.chunk) {\n\t\t\t\tthis._completeResults.data = this._completeResults.data.concat(results.data);\n\t\t\t\tthis._completeResults.errors = this._completeResults.errors.concat(results.errors);\n\t\t\t\tthis._completeResults.meta = results.meta;\n\t\t\t}\n\n\t\t\tif (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) {\n\t\t\t\tthis._config.complete(this._completeResults, this._input);\n\t\t\t\tthis._completed = true;\n\t\t\t}\n\n\t\t\tif (!finishedIncludingPreview && (!results || !results.meta.paused))\n\t\t\t\tthis._nextChunk();\n\n\t\t\treturn results;\n\t\t};\n\n\t\tthis._sendError = function(error)\n\t\t{\n\t\t\tif (isFunction(this._config.error))\n\t\t\t\tthis._config.error(error);\n\t\t\telse if (IS_PAPA_WORKER && this._config.error)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\terror: error,\n\t\t\t\t\tfinished: false\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tfunction replaceConfig(config)\n\t\t{\n\t\t\t// Deep-copy the config so we can edit it\n\t\t\tvar configCopy = copy(config);\n\t\t\tconfigCopy.chunkSize = parseInt(configCopy.chunkSize);\t// parseInt VERY important so we don't concatenate strings!\n\t\t\tif (!config.step && !config.chunk)\n\t\t\t\tconfigCopy.chunkSize = null;  // disable Range header if not streaming; bad values break IIS - see issue #196\n\t\t\tthis._handle = new ParserHandle(configCopy);\n\t\t\tthis._handle.streamer = this;\n\t\t\tthis._config = configCopy;\t// persist the copy to the caller\n\t\t}\n\t}\n\n\n\tfunction NetworkStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.RemoteChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar xhr;\n\n\t\tif (IS_WORKER)\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t\tthis._chunkLoaded();\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t};\n\t\t}\n\n\t\tthis.stream = function(url)\n\t\t{\n\t\t\tthis._input = url;\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tif (this._finished)\n\t\t\t{\n\t\t\t\tthis._chunkLoaded();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\txhr = new XMLHttpRequest();\n\n\t\t\tif (this._config.withCredentials)\n\t\t\t{\n\t\t\t\txhr.withCredentials = this._config.withCredentials;\n\t\t\t}\n\n\t\t\tif (!IS_WORKER)\n\t\t\t{\n\t\t\t\txhr.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\txhr.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\n\t\t\txhr.open(this._config.downloadRequestBody ? 'POST' : 'GET', this._input, !IS_WORKER);\n\t\t\t// Headers can only be set when once the request state is OPENED\n\t\t\tif (this._config.downloadRequestHeaders)\n\t\t\t{\n\t\t\t\tvar headers = this._config.downloadRequestHeaders;\n\n\t\t\t\tfor (var headerName in headers)\n\t\t\t\t{\n\t\t\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = this._start + this._config.chunkSize - 1;\t// minus one because byte range is inclusive\n\t\t\t\txhr.setRequestHeader('Range', 'bytes=' + this._start + '-' + end);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\txhr.send(this._config.downloadRequestBody);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis._chunkError(err.message);\n\t\t\t}\n\n\t\t\tif (IS_WORKER && xhr.status === 0)\n\t\t\t\tthis._chunkError();\n\t\t};\n\n\t\tthis._chunkLoaded = function()\n\t\t{\n\t\t\tif (xhr.readyState !== 4)\n\t\t\t\treturn;\n\n\t\t\tif (xhr.status < 200 || xhr.status >= 400)\n\t\t\t{\n\t\t\t\tthis._chunkError();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Use chunckSize as it may be a diference on reponse lentgh due to characters with more than 1 byte\n\t\t\tthis._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= getFileSize(xhr);\n\t\t\tthis.parseChunk(xhr.responseText);\n\t\t};\n\n\t\tthis._chunkError = function(errorMessage)\n\t\t{\n\t\t\tvar errorText = xhr.statusText || errorMessage;\n\t\t\tthis._sendError(new Error(errorText));\n\t\t};\n\n\t\tfunction getFileSize(xhr)\n\t\t{\n\t\t\tvar contentRange = xhr.getResponseHeader('Content-Range');\n\t\t\tif (contentRange === null) { // no content range, then finish!\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn parseInt(contentRange.substring(contentRange.lastIndexOf('/') + 1));\n\t\t}\n\t}\n\tNetworkStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tNetworkStreamer.prototype.constructor = NetworkStreamer;\n\n\n\tfunction FileStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.LocalChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar reader, slice;\n\n\t\t// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862\n\t\t// But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76\n\t\tvar usingAsyncReader = typeof FileReader !== 'undefined';\t// Safari doesn't consider it a function - see issue #105\n\n\t\tthis.stream = function(file)\n\t\t{\n\t\t\tthis._input = file;\n\t\t\tslice = file.slice || file.webkitSlice || file.mozSlice;\n\n\t\t\tif (usingAsyncReader)\n\t\t\t{\n\t\t\t\treader = new FileReader();\t\t// Preferred method of reading files, even in workers\n\t\t\t\treader.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\treader.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\t\t\telse\n\t\t\t\treader = new FileReaderSync();\t// Hack for running in a web worker in Firefox\n\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (!this._finished && (!this._config.preview || this._rowCount < this._config.preview))\n\t\t\t\tthis._readChunk();\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tvar input = this._input;\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = Math.min(this._start + this._config.chunkSize, this._input.size);\n\t\t\t\tinput = slice.call(input, this._start, end);\n\t\t\t}\n\t\t\tvar txt = reader.readAsText(input, this._config.encoding);\n\t\t\tif (!usingAsyncReader)\n\t\t\t\tthis._chunkLoaded({ target: { result: txt } });\t// mimic the async signature\n\t\t};\n\n\t\tthis._chunkLoaded = function(event)\n\t\t{\n\t\t\t// Very important to increment start each time before handling results\n\t\t\tthis._start += this._config.chunkSize;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= this._input.size;\n\t\t\tthis.parseChunk(event.target.result);\n\t\t};\n\n\t\tthis._chunkError = function()\n\t\t{\n\t\t\tthis._sendError(reader.error);\n\t\t};\n\n\t}\n\tFileStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tFileStreamer.prototype.constructor = FileStreamer;\n\n\n\tfunction StringStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar remaining;\n\t\tthis.stream = function(s)\n\t\t{\n\t\t\tremaining = s;\n\t\t\treturn this._nextChunk();\n\t\t};\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (this._finished) return;\n\t\t\tvar size = this._config.chunkSize;\n\t\t\tvar chunk;\n\t\t\tif(size) {\n\t\t\t\tchunk = remaining.substring(0, size);\n\t\t\t\tremaining = remaining.substring(size);\n\t\t\t} else {\n\t\t\t\tchunk = remaining;\n\t\t\t\tremaining = '';\n\t\t\t}\n\t\t\tthis._finished = !remaining;\n\t\t\treturn this.parseChunk(chunk);\n\t\t};\n\t}\n\tStringStreamer.prototype = Object.create(StringStreamer.prototype);\n\tStringStreamer.prototype.constructor = StringStreamer;\n\n\n\tfunction ReadableStreamStreamer(config)\n\t{\n\t\tconfig = config || {};\n\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar queue = [];\n\t\tvar parseOnData = true;\n\t\tvar streamHasEnded = false;\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.pause.apply(this, arguments);\n\t\t\tthis._input.pause();\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.resume.apply(this, arguments);\n\t\t\tthis._input.resume();\n\t\t};\n\n\t\tthis.stream = function(stream)\n\t\t{\n\t\t\tthis._input = stream;\n\n\t\t\tthis._input.on('data', this._streamData);\n\t\t\tthis._input.on('end', this._streamEnd);\n\t\t\tthis._input.on('error', this._streamError);\n\t\t};\n\n\t\tthis._checkIsFinished = function()\n\t\t{\n\t\t\tif (streamHasEnded && queue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tthis._checkIsFinished();\n\t\t\tif (queue.length)\n\t\t\t{\n\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tparseOnData = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._streamData = bindFunction(function(chunk)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tqueue.push(typeof chunk === 'string' ? chunk : chunk.toString(this._config.encoding));\n\n\t\t\t\tif (parseOnData)\n\t\t\t\t{\n\t\t\t\t\tparseOnData = false;\n\t\t\t\t\tthis._checkIsFinished();\n\t\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tthis._streamError(error);\n\t\t\t}\n\t\t}, this);\n\n\t\tthis._streamError = bindFunction(function(error)\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tthis._sendError(error);\n\t\t}, this);\n\n\t\tthis._streamEnd = bindFunction(function()\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tstreamHasEnded = true;\n\t\t\tthis._streamData('');\n\t\t}, this);\n\n\t\tthis._streamCleanUp = bindFunction(function()\n\t\t{\n\t\t\tthis._input.removeListener('data', this._streamData);\n\t\t\tthis._input.removeListener('end', this._streamEnd);\n\t\t\tthis._input.removeListener('error', this._streamError);\n\t\t}, this);\n\t}\n\tReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer;\n\n\n\tfunction DuplexStreamStreamer(_config) {\n\t\tvar Duplex = require('stream').Duplex;\n\t\tvar config = copy(_config);\n\t\tvar parseOnWrite = true;\n\t\tvar writeStreamHasFinished = false;\n\t\tvar parseCallbackQueue = [];\n\t\tvar stream = null;\n\n\t\tthis._onCsvData = function(results)\n\t\t{\n\t\t\tvar data = results.data;\n\t\t\tif (!stream.push(data) && !this._handle.paused()) {\n\t\t\t\t// the writeable consumer buffer has filled up\n\t\t\t\t// so we need to pause until more items\n\t\t\t\t// can be processed\n\t\t\t\tthis._handle.pause();\n\t\t\t}\n\t\t};\n\n\t\tthis._onCsvComplete = function()\n\t\t{\n\t\t\t// node will finish the read stream when\n\t\t\t// null is pushed\n\t\t\tstream.push(null);\n\t\t};\n\n\t\tconfig.step = bindFunction(this._onCsvData, this);\n\t\tconfig.complete = bindFunction(this._onCsvComplete, this);\n\t\tChunkStreamer.call(this, config);\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (writeStreamHasFinished && parseCallbackQueue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t\tif (parseCallbackQueue.length) {\n\t\t\t\tparseCallbackQueue.shift()();\n\t\t\t} else {\n\t\t\t\tparseOnWrite = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._addToParseQueue = function(chunk, callback)\n\t\t{\n\t\t\t// add to queue so that we can indicate\n\t\t\t// completion via callback\n\t\t\t// node will automatically pause the incoming stream\n\t\t\t// when too many items have been added without their\n\t\t\t// callback being invoked\n\t\t\tparseCallbackQueue.push(bindFunction(function() {\n\t\t\t\tthis.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding));\n\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\treturn callback();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tif (parseOnWrite) {\n\t\t\t\tparseOnWrite = false;\n\t\t\t\tthis._nextChunk();\n\t\t\t}\n\t\t};\n\n\t\tthis._onRead = function()\n\t\t{\n\t\t\tif (this._handle.paused()) {\n\t\t\t\t// the writeable consumer can handle more data\n\t\t\t\t// so resume the chunk parsing\n\t\t\t\tthis._handle.resume();\n\t\t\t}\n\t\t};\n\n\t\tthis._onWrite = function(chunk, encoding, callback)\n\t\t{\n\t\t\tthis._addToParseQueue(chunk, callback);\n\t\t};\n\n\t\tthis._onWriteComplete = function()\n\t\t{\n\t\t\twriteStreamHasFinished = true;\n\t\t\t// have to write empty string\n\t\t\t// so parser knows its done\n\t\t\tthis._addToParseQueue('');\n\t\t};\n\n\t\tthis.getStream = function()\n\t\t{\n\t\t\treturn stream;\n\t\t};\n\t\tstream = new Duplex({\n\t\t\treadableObjectMode: true,\n\t\t\tdecodeStrings: false,\n\t\t\tread: bindFunction(this._onRead, this),\n\t\t\twrite: bindFunction(this._onWrite, this)\n\t\t});\n\t\tstream.once('finish', bindFunction(this._onWriteComplete, this));\n\t}\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tDuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\t\tDuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer;\n\t}\n\n\n\t// Use one ParserHandle per entire CSV file or string\n\tfunction ParserHandle(_config)\n\t{\n\t\t// One goal is to minimize the use of regular expressions...\n\t\tvar MAX_FLOAT = Math.pow(2, 53);\n\t\tvar MIN_FLOAT = -MAX_FLOAT;\n\t\tvar FLOAT = /^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/;\n\t\tvar ISO_DATE = /^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/;\n\t\tvar self = this;\n\t\tvar _stepCounter = 0;\t// Number of times step was called (number of rows parsed)\n\t\tvar _rowCounter = 0;\t// Number of rows that have been parsed so far\n\t\tvar _input;\t\t\t\t// The input being parsed\n\t\tvar _parser;\t\t\t// The core parser being used\n\t\tvar _paused = false;\t// Whether we are paused or not\n\t\tvar _aborted = false;\t// Whether the parser has aborted or not\n\t\tvar _delimiterError;\t// Temporary state between delimiter detection and processing results\n\t\tvar _fields = [];\t\t// Fields are from the header row of the input, if there is one\n\t\tvar _results = {\t\t// The last results returned from the parser\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\n\t\tif (isFunction(_config.step))\n\t\t{\n\t\t\tvar userStep = _config.step;\n\t\t\t_config.step = function(results)\n\t\t\t{\n\t\t\t\t_results = results;\n\n\t\t\t\tif (needsHeaderRow())\n\t\t\t\t\tprocessResults();\n\t\t\t\telse\t// only call user's step function after header row\n\t\t\t\t{\n\t\t\t\t\tprocessResults();\n\n\t\t\t\t\t// It's possbile that this line was empty and there's no row here after all\n\t\t\t\t\tif (_results.data.length === 0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t_stepCounter += results.data.length;\n\t\t\t\t\tif (_config.preview && _stepCounter > _config.preview)\n\t\t\t\t\t\t_parser.abort();\n\t\t\t\t\telse {\n\t\t\t\t\t\t_results.data = _results.data[0];\n\t\t\t\t\t\tuserStep(_results, self);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Parses input. Most users won't need, and shouldn't mess with, the baseIndex\n\t\t * and ignoreLastRow parameters. They are used by streamers (wrapper functions)\n\t\t * when an input comes in multiple chunks, like from a file.\n\t\t */\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\tvar quoteChar = _config.quoteChar || '\"';\n\t\t\tif (!_config.newline)\n\t\t\t\t_config.newline = this.guessLineEndings(input, quoteChar);\n\n\t\t\t_delimiterError = false;\n\t\t\tif (!_config.delimiter)\n\t\t\t{\n\t\t\t\tvar delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess);\n\t\t\t\tif (delimGuess.successful)\n\t\t\t\t\t_config.delimiter = delimGuess.bestDelimiter;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_delimiterError = true;\t// add error after parsing (otherwise it would be overwritten)\n\t\t\t\t\t_config.delimiter = Papa.DefaultDelimiter;\n\t\t\t\t}\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\t\t\telse if(isFunction(_config.delimiter))\n\t\t\t{\n\t\t\t\t_config.delimiter = _config.delimiter(input);\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tvar parserConfig = copy(_config);\n\t\t\tif (_config.preview && _config.header)\n\t\t\t\tparserConfig.preview++;\t// to compensate for header row\n\n\t\t\t_input = input;\n\t\t\t_parser = new Parser(parserConfig);\n\t\t\t_results = _parser.parse(_input, baseIndex, ignoreLastRow);\n\t\t\tprocessResults();\n\t\t\treturn _paused ? { meta: { paused: true } } : (_results || { meta: { paused: false } });\n\t\t};\n\n\t\tthis.paused = function()\n\t\t{\n\t\t\treturn _paused;\n\t\t};\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\t_paused = true;\n\t\t\t_parser.abort();\n\n\t\t\t// If it is streaming via \"chunking\", the reader will start appending correctly already so no need to substring,\n\t\t\t// otherwise we can get duplicate content within a row\n\t\t\t_input = isFunction(_config.chunk) ? \"\" : _input.substring(_parser.getCharIndex());\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tif(self.streamer._halted) {\n\t\t\t\t_paused = false;\n\t\t\t\tself.streamer.parseChunk(_input, true);\n\t\t\t} else {\n\t\t\t\t// Bugfix: #636 In case the processing hasn't halted yet\n\t\t\t\t// wait for it to halt in order to resume\n\t\t\t\tsetTimeout(self.resume, 3);\n\t\t\t}\n\t\t};\n\n\t\tthis.aborted = function()\n\t\t{\n\t\t\treturn _aborted;\n\t\t};\n\n\t\tthis.abort = function()\n\t\t{\n\t\t\t_aborted = true;\n\t\t\t_parser.abort();\n\t\t\t_results.meta.aborted = true;\n\t\t\tif (isFunction(_config.complete))\n\t\t\t\t_config.complete(_results);\n\t\t\t_input = '';\n\t\t};\n\n\t\tthis.guessLineEndings = function(input, quoteChar)\n\t\t{\n\t\t\tinput = input.substring(0, 1024 * 1024);\t// max length 1 MB\n\t\t\t// Replace all the text inside quotes\n\t\t\tvar re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm');\n\t\t\tinput = input.replace(re, '');\n\n\t\t\tvar r = input.split('\\r');\n\n\t\t\tvar n = input.split('\\n');\n\n\t\t\tvar nAppearsFirst = (n.length > 1 && n[0].length < r[0].length);\n\n\t\t\tif (r.length === 1 || nAppearsFirst)\n\t\t\t\treturn '\\n';\n\n\t\t\tvar numWithN = 0;\n\t\t\tfor (var i = 0; i < r.length; i++)\n\t\t\t{\n\t\t\t\tif (r[i][0] === '\\n')\n\t\t\t\t\tnumWithN++;\n\t\t\t}\n\n\t\t\treturn numWithN >= r.length / 2 ? '\\r\\n' : '\\r';\n\t\t};\n\n\t\tfunction testEmptyLine(s) {\n\t\t\treturn _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0;\n\t\t}\n\n\t\tfunction testFloat(s) {\n\t\t\tif (FLOAT.test(s)) {\n\t\t\t\tvar floatValue = parseFloat(s);\n\t\t\t\tif (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction processResults()\n\t\t{\n\t\t\tif (_results && _delimiterError)\n\t\t\t{\n\t\t\t\taddError('Delimiter', 'UndetectableDelimiter', 'Unable to auto-detect delimiting character; defaulted to \\'' + Papa.DefaultDelimiter + '\\'');\n\t\t\t\t_delimiterError = false;\n\t\t\t}\n\n\t\t\tif (_config.skipEmptyLines)\n\t\t\t{\n\t\t\t\t_results.data = _results.data.filter(function(d) {\n\t\t\t\t\treturn !testEmptyLine(d);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (needsHeaderRow())\n\t\t\t\tfillHeaderFields();\n\n\t\t\treturn applyHeaderAndDynamicTypingAndTransformation();\n\t\t}\n\n\t\tfunction needsHeaderRow()\n\t\t{\n\t\t\treturn _config.header && _fields.length === 0;\n\t\t}\n\n\t\tfunction fillHeaderFields()\n\t\t{\n\t\t\tif (!_results)\n\t\t\t\treturn;\n\n\t\t\tfunction addHeader(header, i)\n\t\t\t{\n\t\t\t\tif (isFunction(_config.transformHeader))\n\t\t\t\t\theader = _config.transformHeader(header, i);\n\n\t\t\t\t_fields.push(header);\n\t\t\t}\n\n\t\t\tif (Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\tfor (var i = 0; needsHeaderRow() && i < _results.data.length; i++)\n\t\t\t\t\t_results.data[i].forEach(addHeader);\n\n\t\t\t\t_results.data.splice(0, 1);\n\t\t\t}\n\t\t\t// if _results.data[0] is not an array, we are in a step where _results.data is the row.\n\t\t\telse\n\t\t\t\t_results.data.forEach(addHeader);\n\t\t}\n\n\t\tfunction shouldApplyDynamicTyping(field) {\n\t\t\t// Cache function values to avoid calling it for each row\n\t\t\tif (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) {\n\t\t\t\t_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);\n\t\t\t}\n\t\t\treturn (_config.dynamicTyping[field] || _config.dynamicTyping) === true;\n\t\t}\n\n\t\tfunction parseDynamic(field, value)\n\t\t{\n\t\t\tif (shouldApplyDynamicTyping(field))\n\t\t\t{\n\t\t\t\tif (value === 'true' || value === 'TRUE')\n\t\t\t\t\treturn true;\n\t\t\t\telse if (value === 'false' || value === 'FALSE')\n\t\t\t\t\treturn false;\n\t\t\t\telse if (testFloat(value))\n\t\t\t\t\treturn parseFloat(value);\n\t\t\t\telse if (ISO_DATE.test(value))\n\t\t\t\t\treturn new Date(value);\n\t\t\t\telse\n\t\t\t\t\treturn (value === '' ? null : value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tfunction applyHeaderAndDynamicTypingAndTransformation()\n\t\t{\n\t\t\tif (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform))\n\t\t\t\treturn _results;\n\n\t\t\tfunction processRow(rowSource, i)\n\t\t\t{\n\t\t\t\tvar row = _config.header ? {} : [];\n\n\t\t\t\tvar j;\n\t\t\t\tfor (j = 0; j < rowSource.length; j++)\n\t\t\t\t{\n\t\t\t\t\tvar field = j;\n\t\t\t\t\tvar value = rowSource[j];\n\n\t\t\t\t\tif (_config.header)\n\t\t\t\t\t\tfield = j >= _fields.length ? '__parsed_extra' : _fields[j];\n\n\t\t\t\t\tif (_config.transform)\n\t\t\t\t\t\tvalue = _config.transform(value,field);\n\n\t\t\t\t\tvalue = parseDynamic(field, value);\n\n\t\t\t\t\tif (field === '__parsed_extra')\n\t\t\t\t\t{\n\t\t\t\t\t\trow[field] = row[field] || [];\n\t\t\t\t\t\trow[field].push(value);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trow[field] = value;\n\t\t\t\t}\n\n\n\t\t\t\tif (_config.header)\n\t\t\t\t{\n\t\t\t\t\tif (j > _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t\telse if (j < _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t}\n\n\t\t\t\treturn row;\n\t\t\t}\n\n\t\t\tvar incrementBy = 1;\n\t\t\tif (!_results.data.length || Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\t_results.data = _results.data.map(processRow);\n\t\t\t\tincrementBy = _results.data.length;\n\t\t\t}\n\t\t\telse\n\t\t\t\t_results.data = processRow(_results.data, 0);\n\n\n\t\t\tif (_config.header && _results.meta)\n\t\t\t\t_results.meta.fields = _fields;\n\n\t\t\t_rowCounter += incrementBy;\n\t\t\treturn _results;\n\t\t}\n\n\t\tfunction guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) {\n\t\t\tvar bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount;\n\n\t\t\tdelimitersToGuess = delimitersToGuess || [',', '\\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP];\n\n\t\t\tfor (var i = 0; i < delimitersToGuess.length; i++) {\n\t\t\t\tvar delim = delimitersToGuess[i];\n\t\t\t\tvar delta = 0, avgFieldCount = 0, emptyLinesCount = 0;\n\t\t\t\tfieldCountPrevRow = undefined;\n\n\t\t\t\tvar preview = new Parser({\n\t\t\t\t\tcomments: comments,\n\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\tnewline: newline,\n\t\t\t\t\tpreview: 10\n\t\t\t\t}).parse(input);\n\n\t\t\t\tfor (var j = 0; j < preview.data.length; j++) {\n\t\t\t\t\tif (skipEmptyLines && testEmptyLine(preview.data[j])) {\n\t\t\t\t\t\temptyLinesCount++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar fieldCount = preview.data[j].length;\n\t\t\t\t\tavgFieldCount += fieldCount;\n\n\t\t\t\t\tif (typeof fieldCountPrevRow === 'undefined') {\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldCount > 0) {\n\t\t\t\t\t\tdelta += Math.abs(fieldCount - fieldCountPrevRow);\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (preview.data.length > 0)\n\t\t\t\t\tavgFieldCount /= (preview.data.length - emptyLinesCount);\n\n\t\t\t\tif ((typeof bestDelta === 'undefined' || delta <= bestDelta)\n\t\t\t\t\t&& (typeof maxFieldCount === 'undefined' || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) {\n\t\t\t\t\tbestDelta = delta;\n\t\t\t\t\tbestDelim = delim;\n\t\t\t\t\tmaxFieldCount = avgFieldCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_config.delimiter = bestDelim;\n\n\t\t\treturn {\n\t\t\t\tsuccessful: !!bestDelim,\n\t\t\t\tbestDelimiter: bestDelim\n\t\t\t};\n\t\t}\n\n\t\tfunction addError(type, code, msg, row)\n\t\t{\n\t\t\tvar error = {\n\t\t\t\ttype: type,\n\t\t\t\tcode: code,\n\t\t\t\tmessage: msg\n\t\t\t};\n\t\t\tif(row !== undefined) {\n\t\t\t\terror.row = row;\n\t\t\t}\n\t\t\t_results.errors.push(error);\n\t\t}\n\t}\n\n\t/** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */\n\tfunction escapeRegExp(string)\n\t{\n\t\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\t}\n\n\t/** The core parser implements speedy and correct CSV parsing */\n\tfunction Parser(config)\n\t{\n\t\t// Unpack the config object\n\t\tconfig = config || {};\n\t\tvar delim = config.delimiter;\n\t\tvar newline = config.newline;\n\t\tvar comments = config.comments;\n\t\tvar step = config.step;\n\t\tvar preview = config.preview;\n\t\tvar fastMode = config.fastMode;\n\t\tvar quoteChar;\n\t\tvar renamedHeaders = null;\n\t\tvar headerParsed = false;\n\n\t\tif (config.quoteChar === undefined || config.quoteChar === null) {\n\t\t\tquoteChar = '\"';\n\t\t} else {\n\t\t\tquoteChar = config.quoteChar;\n\t\t}\n\t\tvar escapeChar = quoteChar;\n\t\tif (config.escapeChar !== undefined) {\n\t\t\tescapeChar = config.escapeChar;\n\t\t}\n\n\t\t// Delimiter must be valid\n\t\tif (typeof delim !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(delim) > -1)\n\t\t\tdelim = ',';\n\n\t\t// Comment character must be valid\n\t\tif (comments === delim)\n\t\t\tthrow new Error('Comment character same as delimiter');\n\t\telse if (comments === true)\n\t\t\tcomments = '#';\n\t\telse if (typeof comments !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(comments) > -1)\n\t\t\tcomments = false;\n\n\t\t// Newline must be valid: \\r, \\n, or \\r\\n\n\t\tif (newline !== '\\n' && newline !== '\\r' && newline !== '\\r\\n')\n\t\t\tnewline = '\\n';\n\n\t\t// We're gonna need these at the Parser scope\n\t\tvar cursor = 0;\n\t\tvar aborted = false;\n\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\t// For some reason, in Chrome, this speeds things up (!?)\n\t\t\tif (typeof input !== 'string')\n\t\t\t\tthrow new Error('Input must be a string');\n\n\t\t\t// We don't need to compute some of these every time parse() is called,\n\t\t\t// but having them in a more local scope seems to perform better\n\t\t\tvar inputLen = input.length,\n\t\t\t\tdelimLen = delim.length,\n\t\t\t\tnewlineLen = newline.length,\n\t\t\t\tcommentsLen = comments.length;\n\t\t\tvar stepIsFunction = isFunction(step);\n\n\t\t\t// Establish starting state\n\t\t\tcursor = 0;\n\t\t\tvar data = [], errors = [], row = [], lastCursor = 0;\n\n\t\t\tif (!input)\n\t\t\t\treturn returnable();\n\n\t\t\tif (fastMode || (fastMode !== false && input.indexOf(quoteChar) === -1))\n\t\t\t{\n\t\t\t\tvar rows = input.split(newline);\n\t\t\t\tfor (var i = 0; i < rows.length; i++)\n\t\t\t\t{\n\t\t\t\t\trow = rows[i];\n\t\t\t\t\tcursor += row.length;\n\n\t\t\t\t\tif (i !== rows.length - 1)\n\t\t\t\t\t\tcursor += newline.length;\n\t\t\t\t\telse if (ignoreLastRow)\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tif (comments && row.substring(0, commentsLen) === comments)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\tif (preview && i >= preview)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = data.slice(0, preview);\n\t\t\t\t\t\treturn returnable(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\tvar nextDelim = input.indexOf(delim, cursor);\n\t\t\tvar nextNewline = input.indexOf(newline, cursor);\n\t\t\tvar quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g');\n\t\t\tvar quoteSearch = input.indexOf(quoteChar, cursor);\n\n\t\t\t// Parser loop\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\t// Field has opening quote\n\t\t\t\tif (input[cursor] === quoteChar)\n\t\t\t\t{\n\t\t\t\t\t// Start our search for the closing quote where the cursor is\n\t\t\t\t\tquoteSearch = cursor;\n\n\t\t\t\t\t// Skip the opening quote\n\t\t\t\t\tcursor++;\n\n\t\t\t\t\tfor (;;)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Find closing quote\n\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, quoteSearch + 1);\n\n\t\t\t\t\t\t//No other quotes are found - no other delimiters\n\t\t\t\t\t\tif (quoteSearch === -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!ignoreLastRow) {\n\t\t\t\t\t\t\t\t// No closing quote... what a pity\n\t\t\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\t\t\tcode: 'MissingQuotes',\n\t\t\t\t\t\t\t\t\tmessage: 'Quoted field unterminated',\n\t\t\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn finish();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Closing quote at EOF\n\t\t\t\t\t\tif (quoteSearch === inputLen - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar);\n\t\t\t\t\t\t\treturn finish(value);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this quote is escaped, it's part of the data; skip it\n\t\t\t\t\t\t// If the quote character is the escape character, then check if the next character is the escape character\n\t\t\t\t\t\tif (quoteChar === escapeChar &&  input[quoteSearch + 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the quote character is not the escape character, then check if the previous character was the escape character\n\t\t\t\t\t\tif (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(nextDelim !== -1 && nextDelim < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(nextNewline !== -1 && nextNewline < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check up to nextDelim or nextNewline, whichever is closest\n\t\t\t\t\t\tvar checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline);\n\t\t\t\t\t\tvar spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo);\n\n\t\t\t\t\t\t// Closing quote followed by delimiter or 'unnecessary spaces + delimiter'\n\t\t\t\t\t\tif (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndDelimiter, delimLen) === delim)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tcursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen;\n\n\t\t\t\t\t\t\t// If char after following delimiter is not quoteChar, we find next quote char position\n\t\t\t\t\t\t\tif (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline);\n\n\t\t\t\t\t\t// Closing quote followed by newline or 'unnecessary spaces + newLine'\n\t\t\t\t\t\tif (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tsaveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen);\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\t// because we may have skipped the nextDelim in the quoted field\n\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\t// we search for first quote in next line\n\n\t\t\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string\n\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\tcode: 'InvalidQuotes',\n\t\t\t\t\t\t\tmessage: 'Trailing quote on quoted field is malformed',\n\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Comment found at start of new line\n\t\t\t\tif (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments)\n\t\t\t\t{\n\t\t\t\t\tif (nextNewline === -1)\t// Comment ends at EOF\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tcursor = nextNewline + newlineLen;\n\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Next delimiter comes before next newline, so we've reached end of field\n\t\t\t\tif (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1))\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextDelim));\n\t\t\t\t\tcursor = nextDelim + delimLen;\n\t\t\t\t\t// we look for next delimiter char\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// End of row\n\t\t\t\tif (nextNewline !== -1)\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextNewline));\n\t\t\t\t\tsaveRow(nextNewline + newlineLen);\n\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn finish();\n\n\n\t\t\tfunction pushRow(row)\n\t\t\t{\n\t\t\t\tdata.push(row);\n\t\t\t\tlastCursor = cursor;\n\t\t\t}\n\n\t\t\t/**\n             * checks if there are extra spaces after closing quote and given index without any text\n             * if Yes, returns the number of spaces\n             */\n\t\t\tfunction extraSpaces(index) {\n\t\t\t\tvar spaceLength = 0;\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tvar textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index);\n\t\t\t\t\tif (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') {\n\t\t\t\t\t\tspaceLength = textBetweenClosingQuoteAndIndex.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spaceLength;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the remaining input from cursor to the end into\n\t\t\t * row, saves the row, calls step, and returns the results.\n\t\t\t */\n\t\t\tfunction finish(value)\n\t\t\t{\n\t\t\t\tif (ignoreLastRow)\n\t\t\t\t\treturn returnable();\n\t\t\t\tif (typeof value === 'undefined')\n\t\t\t\t\tvalue = input.substring(cursor);\n\t\t\t\trow.push(value);\n\t\t\t\tcursor = inputLen;\t// important in case parsing is paused\n\t\t\t\tpushRow(row);\n\t\t\t\tif (stepIsFunction)\n\t\t\t\t\tdoStep();\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the current row to the results. It sets the cursor\n\t\t\t * to newCursor and finds the nextNewline. The caller should\n\t\t\t * take care to execute user's step function and check for\n\t\t\t * preview and end parsing if necessary.\n\t\t\t */\n\t\t\tfunction saveRow(newCursor)\n\t\t\t{\n\t\t\t\tcursor = newCursor;\n\t\t\t\tpushRow(row);\n\t\t\t\trow = [];\n\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t}\n\n\t\t\t/** Returns an object with the results, errors, and meta. */\n\t\t\tfunction returnable(stopped)\n\t\t\t{\n\t\t\t\tif (config.header && !baseIndex && data.length && !headerParsed)\n\t\t\t\t{\n\t\t\t\t\tconst result = data[0];\n\t\t\t\t\tconst headerCount = Object.create(null); // To track the count of each base header\n\t\t\t\t\tconst usedHeaders = new Set(result); // To track used headers and avoid duplicates\n\t\t\t\t\tlet duplicateHeaders = false;\n\n\t\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t\tlet header = result[i];\n\t\t\t\t\t\tif (isFunction(config.transformHeader))\n\t\t\t\t\t\t\theader = config.transformHeader(header, i);\n\n\t\t\t\t\t\tif (!headerCount[header]) {\n\t\t\t\t\t\t\theaderCount[header] = 1;\n\t\t\t\t\t\t\tresult[i] = header;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet newHeader;\n\t\t\t\t\t\t\tlet suffixCount = headerCount[header];\n\n\t\t\t\t\t\t\t// Find a unique new header\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tnewHeader = `${header}_${suffixCount}`;\n\t\t\t\t\t\t\t\tsuffixCount++;\n\t\t\t\t\t\t\t} while (usedHeaders.has(newHeader));\n\n\t\t\t\t\t\t\tusedHeaders.add(newHeader); // Mark this new Header as used\n\t\t\t\t\t\t\tresult[i] = newHeader;\n\t\t\t\t\t\t\theaderCount[header]++;\n\t\t\t\t\t\t\tduplicateHeaders = true;\n\t\t\t\t\t\t\tif (renamedHeaders === null) {\n\t\t\t\t\t\t\t\trenamedHeaders = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenamedHeaders[newHeader] = header;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tusedHeaders.add(header); // Ensure the original header is marked as used\n\t\t\t\t\t}\n\t\t\t\t\tif (duplicateHeaders) {\n\t\t\t\t\t\tconsole.warn('Duplicate headers found and renamed.');\n\t\t\t\t\t}\n\t\t\t\t\theaderParsed = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: data,\n\t\t\t\t\terrors: errors,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\t\tlinebreak: newline,\n\t\t\t\t\t\taborted: aborted,\n\t\t\t\t\t\ttruncated: !!stopped,\n\t\t\t\t\t\tcursor: lastCursor + (baseIndex || 0),\n\t\t\t\t\t\trenamedHeaders: renamedHeaders\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/** Executes the user's step function and resets data & errors. */\n\t\t\tfunction doStep()\n\t\t\t{\n\t\t\t\tstep(returnable());\n\t\t\t\tdata = [];\n\t\t\t\terrors = [];\n\t\t\t}\n\t\t};\n\n\t\t/** Sets the abort flag */\n\t\tthis.abort = function()\n\t\t{\n\t\t\taborted = true;\n\t\t};\n\n\t\t/** Gets the cursor position */\n\t\tthis.getCharIndex = function()\n\t\t{\n\t\t\treturn cursor;\n\t\t};\n\t}\n\n\n\tfunction newWorker()\n\t{\n\t\tif (!Papa.WORKERS_SUPPORTED)\n\t\t\treturn false;\n\n\t\tvar workerUrl = getWorkerBlob();\n\t\tvar w = new global.Worker(workerUrl);\n\t\tw.onmessage = mainThreadReceivedMessage;\n\t\tw.id = workerIdCounter++;\n\t\tworkers[w.id] = w;\n\t\treturn w;\n\t}\n\n\t/** Callback when main thread receives a message */\n\tfunction mainThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\t\tvar worker = workers[msg.workerId];\n\t\tvar aborted = false;\n\n\t\tif (msg.error)\n\t\t\tworker.userError(msg.error, msg.file);\n\t\telse if (msg.results && msg.results.data)\n\t\t{\n\t\t\tvar abort = function() {\n\t\t\t\taborted = true;\n\t\t\t\tcompleteWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } });\n\t\t\t};\n\n\t\t\tvar handle = {\n\t\t\t\tabort: abort,\n\t\t\t\tpause: notImplemented,\n\t\t\t\tresume: notImplemented\n\t\t\t};\n\n\t\t\tif (isFunction(worker.userStep))\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < msg.results.data.length; i++)\n\t\t\t\t{\n\t\t\t\t\tworker.userStep({\n\t\t\t\t\t\tdata: msg.results.data[i],\n\t\t\t\t\t\terrors: msg.results.errors,\n\t\t\t\t\t\tmeta: msg.results.meta\n\t\t\t\t\t}, handle);\n\t\t\t\t\tif (aborted)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdelete msg.results;\t// free memory ASAP\n\t\t\t}\n\t\t\telse if (isFunction(worker.userChunk))\n\t\t\t{\n\t\t\t\tworker.userChunk(msg.results, handle, msg.file);\n\t\t\t\tdelete msg.results;\n\t\t\t}\n\t\t}\n\n\t\tif (msg.finished && !aborted)\n\t\t\tcompleteWorker(msg.workerId, msg.results);\n\t}\n\n\tfunction completeWorker(workerId, results) {\n\t\tvar worker = workers[workerId];\n\t\tif (isFunction(worker.userComplete))\n\t\t\tworker.userComplete(results);\n\t\tworker.terminate();\n\t\tdelete workers[workerId];\n\t}\n\n\tfunction notImplemented() {\n\t\tthrow new Error('Not implemented.');\n\t}\n\n\t/** Callback when worker thread receives a message */\n\tfunction workerThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\n\t\tif (typeof Papa.WORKER_ID === 'undefined' && msg)\n\t\t\tPapa.WORKER_ID = msg.workerId;\n\n\t\tif (typeof msg.input === 'string')\n\t\t{\n\t\t\tglobal.postMessage({\n\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\tresults: Papa.parse(msg.input, msg.config),\n\t\t\t\tfinished: true\n\t\t\t});\n\t\t}\n\t\telse if ((global.File && msg.input instanceof File) || msg.input instanceof Object)\t// thank you, Safari (see issue #106)\n\t\t{\n\t\t\tvar results = Papa.parse(msg.input, msg.config);\n\t\t\tif (results)\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tresults: results,\n\t\t\t\t\tfinished: true\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Makes a deep copy of an array or object (mostly) */\n\tfunction copy(obj)\n\t{\n\t\tif (typeof obj !== 'object' || obj === null)\n\t\t\treturn obj;\n\t\tvar cpy = Array.isArray(obj) ? [] : {};\n\t\tfor (var key in obj)\n\t\t\tcpy[key] = copy(obj[key]);\n\t\treturn cpy;\n\t}\n\n\tfunction bindFunction(f, self)\n\t{\n\t\treturn function() { f.apply(self, arguments); };\n\t}\n\tfunction isFunction(func)\n\t{\n\t\treturn typeof func === 'function';\n\t}\n\n\treturn Papa;\n}));\n","/* Copyright Notice\r\n * bootstrap5-toggle v4.3.6\r\n * https://palcarazm.github.io/bootstrap5-toggle/\r\n * @author 2011-2014 Min Hur (https://github.com/minhur)\r\n * @author 2018-2019 Brent Ely (https://github.com/gitbrent)\r\n * @author 2022 Pablo Alcaraz Martínez (https://github.com/palcarazm)\r\n * @funding GitHub Sponsors\r\n * @see https://github.com/sponsors/palcarazm\r\n * @license MIT\r\n * @see https://github.com/palcarazm/bootstrap5-toggle/blob/master/LICENSE\r\n */\r\n\r\n\n+(function ($) {\r\n  \"use strict\";\r\n\r\n  // TOGGLE PUBLIC CLASS DEFINITION\r\n  // ==============================\r\n\r\n  let Toggle = function (element, options) {\r\n    // A: Capture ref to HMTL element\r\n    this.$element = $(element);\r\n    // B: Set options\r\n    this.options = $.extend({}, this.defaults(), options);\r\n    // LAST: Render Toggle\r\n    this.render();\r\n  };\r\n\r\n  Toggle.DEFAULTS = {\r\n    on: \"On\",\r\n    off: \"Off\",\r\n    onstyle: \"primary\",\r\n    offstyle: \"secondary\",\r\n    onvalue: null,\r\n    offvalue: null,\r\n    size: \"normal\",\r\n    style: \"\",\r\n    width: null,\r\n    height: null,\r\n    tabindex: 0,\r\n    tristate: false,\r\n    name: null,\r\n  };\r\n\r\n  Toggle.prototype.defaults = function () {\r\n    return {\r\n      on: this.$element.attr(\"data-on\") || Toggle.DEFAULTS.on,\r\n      off: this.$element.attr(\"data-off\") || Toggle.DEFAULTS.off,\r\n      onstyle: this.$element.attr(\"data-onstyle\") || Toggle.DEFAULTS.onstyle,\r\n      offstyle: this.$element.attr(\"data-offstyle\") || Toggle.DEFAULTS.offstyle,\r\n      onvalue:\r\n        this.$element.attr(\"value\") ||\r\n        this.$element.attr(\"data-onvalue\") ||\r\n        Toggle.DEFAULTS.onvalue,\r\n      offvalue: this.$element.attr(\"data-offvalue\") || Toggle.DEFAULTS.offvalue,\r\n      size: this.$element.attr(\"data-size\") || Toggle.DEFAULTS.size,\r\n      style: this.$element.attr(\"data-style\") || Toggle.DEFAULTS.style,\r\n      width: this.$element.attr(\"data-width\") || Toggle.DEFAULTS.width,\r\n      height: this.$element.attr(\"data-height\") || Toggle.DEFAULTS.height,\r\n      tabindex: this.$element.attr(\"tabindex\") || Toggle.DEFAULTS.tabindex,\r\n      tristate: this.$element.is(\"[tristate]\") || Toggle.DEFAULTS.tristate,\r\n      name: this.$element.attr(\"name\") || Toggle.DEFAULTS.name,\r\n    };\r\n  };\r\n\r\n  Toggle.prototype.render = function () {\r\n    // 0: Parse size\r\n    let size;\r\n    switch (this.options.size) {\r\n      case \"large\":\r\n      case \"lg\":\r\n        size = \"btn-lg\";\r\n        break;\r\n      case \"small\":\r\n      case \"sm\":\r\n        size = \"btn-sm\";\r\n        break;\r\n      case \"mini\":\r\n      case \"xs\":\r\n        size = \"btn-xs\";\r\n        break;\r\n      default:\r\n        size = \"\";\r\n        break;\r\n    }\r\n\r\n    // 1: On\r\n    let $toggleOn = $('<label class=\"btn\">')\r\n      .html(this.options.on)\r\n      .addClass(\"btn-\" + this.options.onstyle + \" \" + size);\r\n    if (this.$element.prop(\"id\")) {\r\n      $toggleOn.prop(\"for\", this.$element.prop(\"id\"));\r\n    }\r\n\r\n    // 2: Off\r\n    let $toggleOff = $('<label class=\"btn\">')\r\n      .html(this.options.off)\r\n      .addClass(\"btn-\" + this.options.offstyle + \" \" + size);\r\n    if (this.$element.prop(\"id\")) {\r\n      $toggleOff.prop(\"for\", this.$element.prop(\"id\"));\r\n    }\r\n\r\n    // 3: Handle\r\n    let $toggleHandle = $('<span class=\"toggle-handle btn\">').addClass(size);\r\n\r\n    // 4: Toggle Group\r\n    let $toggleGroup = $('<div class=\"toggle-group\">').append(\r\n      $toggleOn,\r\n      $toggleOff,\r\n      $toggleHandle\r\n    );\r\n\r\n    // 5: Toggle\r\n    let $toggle = $(\r\n      '<div class=\"toggle btn\" data-toggle=\"toggle\" role=\"button\">'\r\n    )\r\n      .addClass(\r\n        this.$element.prop(\"checked\")\r\n          ? \"btn-\" + this.options.onstyle\r\n          : \"btn-\" + this.options.offstyle + \" off\"\r\n      )\r\n      .addClass(size)\r\n      .addClass(this.options.style)\r\n      .attr(\"tabindex\", this.options.tabindex);\r\n    if (this.$element.prop(\"disabled\") || this.$element.prop(\"readonly\")) {\r\n      $toggle.addClass(\"disabled\");\r\n      $toggle.attr(\"disabled\", \"disabled\");\r\n    }\r\n\r\n    // 6: Set form values\r\n    if (this.options.onvalue) this.$element.val(this.options.onvalue);\r\n    let $invElement = null;\r\n    if (this.options.offvalue) {\r\n      $invElement = this.$element.clone();\r\n      $invElement.val(this.options.offvalue);\r\n      $invElement.attr(\"data-toggle\", \"invert-toggle\");\r\n      $invElement.removeAttr(\"id\");\r\n      $invElement.prop(\"checked\", !this.$element.prop(\"checked\"));\r\n    }\r\n\r\n    // 7: Replace HTML checkbox with Toggle-Button\r\n    this.$element.wrap($toggle);\r\n    $.extend(this, {\r\n      $toggle: this.$element.parent(),\r\n      $toggleOn: $toggleOn,\r\n      $toggleOff: $toggleOff,\r\n      $toggleGroup: $toggleGroup,\r\n      $invElement: $invElement,\r\n    });\r\n    this.$toggle.append($invElement, $toggleGroup);\r\n\r\n    // 8: Set button W/H, lineHeight\r\n    {\r\n      // A: Set style W/H\r\n      let width =\r\n        this.options.width ||\r\n        Math.max($toggleOn.outerWidth(), $toggleOff.outerWidth()) +\r\n          $toggleHandle.outerWidth() / 2;\r\n      let height =\r\n        this.options.height ||\r\n        Math.max($toggleOn.outerHeight(), $toggleOff.outerHeight());\r\n      this.$toggle.css({ width: width, height: height });\r\n\r\n      // B: Apply on/off class\r\n      $toggleOn.addClass(\"toggle-on\");\r\n      $toggleOff.addClass(\"toggle-off\");\r\n\r\n      // C: Finally, set lineHeight if needed\r\n      if (this.options.height) {\r\n        $toggleOn.css(\"line-height\", $toggleOn.height() + \"px\");\r\n        $toggleOff.css(\"line-height\", $toggleOff.height() + \"px\");\r\n      }\r\n    }\r\n\r\n    // 9: Add listeners\r\n    this.$toggle.on(\"touchstart\", (e) => {\r\n      toggleActionPerformed(e, this);\r\n    });\r\n    this.$toggle.on(\"click\", (e) => {\r\n      toggleActionPerformed(e, this);\r\n    });\r\n    this.$toggle.on(\"keypress\", (e) => {\r\n      if (e.key == \" \") {\r\n        toggleActionPerformed(e, this);\r\n      }\r\n    });\r\n    // 10: Set elements to bootstrap object (NOT NEEDED)\r\n    // 11: Keep reference to this instance for subsequent calls via `getElementById().bootstrapToggle()` (NOT NEEDED)\r\n  };\r\n\r\n  /**\r\n   * Trigger actions\r\n   * @param {Event} e event\r\n   * @param {Toggle} target Toggle\r\n   */\r\n  function toggleActionPerformed(e, target) {\r\n    if (target.options.tristate) {\r\n      if (target.$toggle.hasClass(\"indeterminate\")) {\r\n        target.determinate(true);\r\n        target.toggle();\r\n      } else {\r\n        target.indeterminate();\r\n      }\r\n    } else {\r\n      target.toggle();\r\n    }\r\n    e.preventDefault();\r\n  }\r\n\r\n  Toggle.prototype.toggle = function (silent = false) {\r\n    if (this.$element.prop(\"checked\")) this.off(silent);\r\n    else this.on(silent);\r\n  };\r\n\r\n  Toggle.prototype.on = function (silent = false) {\r\n    if (this.$element.prop(\"disabled\") || this.$element.prop(\"readonly\"))\r\n      return false;\r\n    this.$toggle\r\n      .removeClass(\"btn-\" + this.options.offstyle + \" off\")\r\n      .addClass(\"btn-\" + this.options.onstyle);\r\n    this.$element.prop(\"checked\", true);\r\n    if (this.$invElement) this.$invElement.prop(\"checked\", false);\r\n    if (!silent) this.trigger();\r\n  };\r\n\r\n  Toggle.prototype.off = function (silent = false) {\r\n    if (this.$element.prop(\"disabled\") || this.$element.prop(\"readonly\"))\r\n      return false;\r\n    this.$toggle\r\n      .removeClass(\"btn-\" + this.options.onstyle)\r\n      .addClass(\"btn-\" + this.options.offstyle + \" off\");\r\n    this.$element.prop(\"checked\", false);\r\n    if (this.$invElement) this.$invElement.prop(\"checked\", true);\r\n    if (!silent) this.trigger();\r\n  };\r\n\r\n  Toggle.prototype.indeterminate = function (silent = false) {\r\n    if (\r\n      !this.options.tristate ||\r\n      this.$element.prop(\"disabled\") ||\r\n      this.$element.prop(\"readonly\")\r\n    )\r\n      return false;\r\n    this.$toggle.addClass(\"indeterminate\");\r\n    this.$element.prop(\"indeterminate\", true);\r\n    this.$element.removeAttr(\"name\");\r\n    if (this.$invElement) this.$invElement.prop(\"indeterminate\", true);\r\n    if (this.$invElement) this.$invElement.removeAttr(\"name\");\r\n    if (!silent) this.trigger();\r\n  };\r\n\r\n  Toggle.prototype.determinate = function (silent = false) {\r\n    if (\r\n      !this.options.tristate ||\r\n      this.$element.prop(\"disabled\") ||\r\n      this.$element.prop(\"readonly\")\r\n    )\r\n      return false;\r\n    this.$toggle.removeClass(\"indeterminate\");\r\n    this.$element.prop(\"indeterminate\", false);\r\n    if (this.options.name) this.$element.attr(\"name\", this.options.name);\r\n    if (this.$invElement) this.$invElement.prop(\"indeterminate\", false);\r\n    if (this.$invElement && this.options.name)\r\n      this.$invElement.attr(\"name\", this.options.name);\r\n    if (!silent) this.trigger();\r\n  };\r\n\r\n  Toggle.prototype.enable = function () {\r\n    this.$toggle.removeClass(\"disabled\");\r\n    this.$toggle.removeAttr(\"disabled\");\r\n    this.$element.prop(\"disabled\", false);\r\n    this.$element.prop(\"readonly\", false);\r\n    if (this.$invElement) {\r\n      this.$invElement.prop(\"disabled\", false);\r\n      this.$invElement.prop(\"readonly\", false);\r\n    }\r\n  };\r\n\r\n  Toggle.prototype.disable = function () {\r\n    this.$toggle.addClass(\"disabled\");\r\n    this.$toggle.attr(\"disabled\", \"disabled\");\r\n    this.$element.prop(\"disabled\", true);\r\n    this.$element.prop(\"readonly\", false);\r\n    if (this.$invElement) {\r\n      this.$invElement.prop(\"disabled\", true);\r\n      this.$invElement.prop(\"readonly\", false);\r\n    }\r\n  };\r\n\r\n  Toggle.prototype.readonly = function () {\r\n    this.$toggle.addClass(\"disabled\");\r\n    this.$toggle.attr(\"disabled\", \"disabled\");\r\n    this.$element.prop(\"disabled\", false);\r\n    this.$element.prop(\"readonly\", true);\r\n    if (this.$invElement) {\r\n      this.$invElement.prop(\"disabled\", false);\r\n      this.$invElement.prop(\"readonly\", true);\r\n    }\r\n  };\r\n\r\n  Toggle.prototype.update = function (silent) {\r\n    if (this.$element.prop(\"disabled\")) this.disable();\r\n    else if (this.$element.prop(\"readonly\")) this.readonly();\r\n    else this.enable();\r\n    if (this.$element.prop(\"checked\")) this.on(silent);\r\n    else this.off(silent);\r\n  };\r\n\r\n  Toggle.prototype.trigger = function (silent) {\r\n    this.$element.off(\"change.bs.toggle\");\r\n    if (!silent) this.$element.change();\r\n    this.$element.on(\r\n      \"change.bs.toggle\",\r\n      $.proxy(function () {\r\n        this.update();\r\n      }, this)\r\n    );\r\n  };\r\n\r\n  Toggle.prototype.destroy = function () {\r\n    // A: Remove button-group from UI, replace checkbox element\r\n    this.$element.off(\"change.bs.toggle\");\r\n    this.$toggleGroup.remove();\r\n    if (this.$invElement) this.$invElement.remove();\r\n\r\n    // B: Delete internal refs\r\n    this.$element.removeData(\"bs.toggle\");\r\n    this.$element.unwrap();\r\n  };\r\n\r\n  // TOGGLE PLUGIN DEFINITION\r\n  // ========================\r\n\r\n  function Plugin(option) {\r\n    let optArg = Array.prototype.slice.call(arguments, 1)[0];\r\n\r\n    return this.each(function () {\r\n      let $this = $(this);\r\n      let data = $this.data(\"bs.toggle\");\r\n      let options = typeof option == \"object\" && option;\r\n\r\n      if (!data) {\r\n        data = new Toggle(this, options);\r\n        $this.data(\"bs.toggle\", data);\r\n      }\r\n      if (\r\n        typeof option === \"string\" &&\r\n        data[option] &&\r\n        typeof optArg === \"boolean\"\r\n      )\r\n        data[option](optArg);\r\n      else if (typeof option === \"string\" && data[option]) data[option]();\r\n      //else if (option && !data[option]) console.log('bootstrap-toggle: error: method `'+ option +'` does not exist!');\r\n    });\r\n  }\r\n\r\n  let old = $.fn.bootstrapToggle;\r\n\r\n  $.fn.bootstrapToggle = Plugin;\r\n  $.fn.bootstrapToggle.Constructor = Toggle;\r\n\r\n  // TOGGLE NO CONFLICT\r\n  // ==================\r\n\r\n  $.fn.toggle.noConflict = function () {\r\n    $.fn.bootstrapToggle = old;\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Replace all `input[type=checkbox][data-toggle=\"toggle\"]` inputs with \"Bootstrap-Toggle\"\r\n   * Executes once page elements have rendered enabling script to be placed in `<head>`\r\n   */\r\n  $(function () {\r\n    $(\"input[type=checkbox][data-toggle^=toggle]\").bootstrapToggle();\r\n  });\r\n})(jQuery);\r\n","/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  let _WINDOW = {};\n  let _DOCUMENT = {};\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n  const {\n    userAgent = ''\n  } = _WINDOW.navigator || {};\n  const WINDOW = _WINDOW;\n  const DOCUMENT = _DOCUMENT;\n  const IS_BROWSER = !!WINDOW.document;\n  const IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  const IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function _defineProperty(e, r, t) {\n    return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n      value: t,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }) : e[r] = t, e;\n  }\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _toPrimitive(t, r) {\n    if (\"object\" != typeof t || !t) return t;\n    var e = t[Symbol.toPrimitive];\n    if (void 0 !== e) {\n      var i = e.call(t, r || \"default\");\n      if (\"object\" != typeof i) return i;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === r ? String : Number)(t);\n  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n\n  var S = {\n      classic: {\n        fa: \"solid\",\n        fas: \"solid\",\n        \"fa-solid\": \"solid\",\n        far: \"regular\",\n        \"fa-regular\": \"regular\",\n        fal: \"light\",\n        \"fa-light\": \"light\",\n        fat: \"thin\",\n        \"fa-thin\": \"thin\",\n        fab: \"brands\",\n        \"fa-brands\": \"brands\"\n      },\n      duotone: {\n        fa: \"solid\",\n        fad: \"solid\",\n        \"fa-solid\": \"solid\",\n        \"fa-duotone\": \"solid\",\n        fadr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fadl: \"light\",\n        \"fa-light\": \"light\",\n        fadt: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      sharp: {\n        fa: \"solid\",\n        fass: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasl: \"light\",\n        \"fa-light\": \"light\",\n        fast: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      \"sharp-duotone\": {\n        fa: \"solid\",\n        fasds: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasdr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasdl: \"light\",\n        \"fa-light\": \"light\",\n        fasdt: \"thin\",\n        \"fa-thin\": \"thin\"\n      }\n    };\n  var s = \"classic\";\n  var G = {\n      classic: {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\",\n        100: \"fat\"\n      },\n      duotone: {\n        900: \"fad\",\n        400: \"fadr\",\n        300: \"fadl\",\n        100: \"fadt\"\n      },\n      sharp: {\n        900: \"fass\",\n        400: \"fasr\",\n        300: \"fasl\",\n        100: \"fast\"\n      },\n      \"sharp-duotone\": {\n        900: \"fasds\",\n        400: \"fasdr\",\n        300: \"fasdl\",\n        100: \"fasdt\"\n      }\n    };\n  var xt = {\n      classic: {\n        solid: \"fas\",\n        regular: \"far\",\n        light: \"fal\",\n        thin: \"fat\",\n        brands: \"fab\"\n      },\n      duotone: {\n        solid: \"fad\",\n        regular: \"fadr\",\n        light: \"fadl\",\n        thin: \"fadt\"\n      },\n      sharp: {\n        solid: \"fass\",\n        regular: \"fasr\",\n        light: \"fasl\",\n        thin: \"fast\"\n      },\n      \"sharp-duotone\": {\n        solid: \"fasds\",\n        regular: \"fasdr\",\n        light: \"fasdl\",\n        thin: \"fasdt\"\n      }\n    };\n  var St = {\n      kit: {\n        fak: \"kit\",\n        \"fa-kit\": \"kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"kit-duotone\",\n        \"fa-kit-duotone\": \"kit-duotone\"\n      }\n    };\n  var Ct = {\n    kit: {\n      \"fa-kit\": \"fak\"\n    },\n    \"kit-duotone\": {\n      \"fa-kit-duotone\": \"fakd\"\n    }\n  };\n  var Wt = {\n      kit: {\n        fak: \"fa-kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"fa-kit-duotone\"\n      }\n    };\n  var Et = {\n      kit: {\n        kit: \"fak\"\n      },\n      \"kit-duotone\": {\n        \"kit-duotone\": \"fakd\"\n      }\n    };\n\n  var ua = {\n      classic: {\n        \"fa-brands\": \"fab\",\n        \"fa-duotone\": \"fad\",\n        \"fa-light\": \"fal\",\n        \"fa-regular\": \"far\",\n        \"fa-solid\": \"fas\",\n        \"fa-thin\": \"fat\"\n      },\n      duotone: {\n        \"fa-regular\": \"fadr\",\n        \"fa-light\": \"fadl\",\n        \"fa-thin\": \"fadt\"\n      },\n      sharp: {\n        \"fa-solid\": \"fass\",\n        \"fa-regular\": \"fasr\",\n        \"fa-light\": \"fasl\",\n        \"fa-thin\": \"fast\"\n      },\n      \"sharp-duotone\": {\n        \"fa-solid\": \"fasds\",\n        \"fa-regular\": \"fasdr\",\n        \"fa-light\": \"fasdl\",\n        \"fa-thin\": \"fasdt\"\n      }\n    },\n    ga = {\n      classic: {\n        fab: \"fa-brands\",\n        fad: \"fa-duotone\",\n        fal: \"fa-light\",\n        far: \"fa-regular\",\n        fas: \"fa-solid\",\n        fat: \"fa-thin\"\n      },\n      duotone: {\n        fadr: \"fa-regular\",\n        fadl: \"fa-light\",\n        fadt: \"fa-thin\"\n      },\n      sharp: {\n        fass: \"fa-solid\",\n        fasr: \"fa-regular\",\n        fasl: \"fa-light\",\n        fast: \"fa-thin\"\n      },\n      \"sharp-duotone\": {\n        fasds: \"fa-solid\",\n        fasdr: \"fa-regular\",\n        fasdl: \"fa-light\",\n        fasdt: \"fa-thin\"\n      }\n    };\n\n  const NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  const PRODUCTION = (() => {\n    try {\n      return \"production\" === 'production';\n    } catch (e$$1) {\n      return false;\n    }\n  })();\n  function familyProxy(obj) {\n    // Defaults to the classic family if family is not available\n    return new Proxy(obj, {\n      get(target, prop) {\n        return prop in target ? target[prop] : target[s];\n      }\n    });\n  }\n  const _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n  // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n  // {'fa-duotone': 'duotone'}\n  _PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    'fa-duotone': 'duotone'\n  }), S[s]), St['kit']), St['kit-duotone']);\n  const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\n  const _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n  // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n  _STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    duotone: 'fad'\n  }), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\n  const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\n  const _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n  _PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\n  const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\n  const _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n  _LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\n  const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\n  const _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\n  const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      fn(...args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  const w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce((acc, iconName) => {\n      const icon = icons[iconName];\n      const expanded = !!icon.icon;\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n      return acc;\n    }, {});\n  }\n  function defineIcons(prefix, icons) {\n    let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const {\n      skipHooks = false\n    } = params;\n    const normalized = normalizeIcons(icons);\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"monero\": [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"],\n    \"hooli\": [640, 512, [], \"f427\", \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"],\n    \"yelp\": [384, 512, [], \"f1e9\", \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"],\n    \"cc-visa\": [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"],\n    \"lastfm\": [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"],\n    \"shopware\": [512, 512, [], \"f5b5\", \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"],\n    \"creative-commons-nc\": [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"],\n    \"aws\": [640, 512, [], \"f375\", \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"],\n    \"redhat\": [512, 512, [], \"f7bc\", \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"],\n    \"yoast\": [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"],\n    \"cloudflare\": [640, 512, [], \"e07d\", \"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\"],\n    \"ups\": [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"],\n    \"pixiv\": [448, 512, [], \"e640\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm171.5 84c41 0 76.3 12.9 101.4 35.2l0 0c25.2 22.2 39.8 54.1 39.8 88.8c.1 35.3-16.6 66.3-42.4 87c-25.9 20.8-60.6 32.4-98.8 32.4c-43.5 0-83.8-16.1-83.8-16.1v51.8c7.4 2.2 19.7 7 11.9 14.8H104.8c-7.7-7.8 3.6-12.4 12.1-14.8V175.5C97.1 190.9 87 204.3 81.8 214.2c6 19.4-5.3 18.5-5.3 18.5L56 199.7s72.7-83.7 179.5-83.7zm-3.6 222.9c30 0 56-11.3 73.9-29.2c17.9-18.1 27.9-41.6 28-70.2c-.1-29.3-9.5-54.6-26.7-73.6c-17.2-18.9-42.7-31.3-75.2-31.4c-26.7-.1-59.8 9-80.2 23.7V323.1c18.6 9.3 46.8 15.9 80.2 15.8z\"],\n    \"wpexplorer\": [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"],\n    \"dyalog\": [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"],\n    \"bity\": [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"],\n    \"stackpath\": [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"],\n    \"buysellads\": [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"],\n    \"first-order\": [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"],\n    \"modx\": [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"],\n    \"guilded\": [448, 512, [], \"e07e\", \"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\"],\n    \"vnv\": [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"],\n    \"square-js\": [448, 512, [\"js-square\"], \"f3b9\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z\"],\n    \"microsoft\": [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"],\n    \"qq\": [448, 512, [], \"f1d6\", \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"],\n    \"orcid\": [512, 512, [], \"f8d2\", \"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\"],\n    \"java\": [384, 512, [], \"f4e4\", \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"],\n    \"invision\": [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"],\n    \"creative-commons-pd-alt\": [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"],\n    \"centercode\": [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"],\n    \"glide-g\": [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"],\n    \"drupal\": [448, 512, [], \"f1a9\", \"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\"],\n    \"jxl\": [448, 512, [], \"e67b\", \"M412.2 32H35.8C16 32 0 48 0 67.8V444.2C0 464 16 480 35.8 480H412.2c19.8 0 35.8-16 35.8-35.8V67.8C448 48 432 32 412.2 32zM378.6 333.7c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6z\"],\n    \"dart-lang\": [512, 512, [], \"e693\", \"M378.6 78.9c-2.8-.1-5.6-.2-8.5-.2l-264.1 0 143.2-72C256.6 2.3 268 0 279.6 0c13.5 0 29.4 9.2 37 16.8l62 62zM107.3 96.5l262.8 0c16 0 25.4 1.4 35.4 9.3L512 212.2 512 421l-79.3 .7L107.3 96.5zM96.5 373l0-262.2L420.3 434.6l.7 77.4-212.2 0-98.1-98.2 0 0C99.4 402.5 96.5 398.5 96.5 373zM78.7 105.3l0 267.7c0 3.3 .1 6.3 .2 9.1l-62-62C6.5 309.3 0 294.3 0 279.6c0-6.8 3.9-17.5 6.7-23.6l72-150.7z\"],\n    \"hire-a-helper\": [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"],\n    \"creative-commons-by\": [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"],\n    \"unity\": [448, 512, [], \"e049\", \"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\"],\n    \"whmcs\": [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"],\n    \"rocketchat\": [576, 512, [], \"f3e8\", \"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\"],\n    \"vk\": [448, 512, [], \"f189\", \"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\"],\n    \"untappd\": [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"],\n    \"mailchimp\": [448, 512, [], \"f59e\", \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"],\n    \"css3-alt\": [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"],\n    \"square-reddit\": [448, 512, [\"reddit-square\"], \"f1a2\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM305.9 166.4c20.6 0 37.3-16.7 37.3-37.3s-16.7-37.3-37.3-37.3c-18 0-33.1 12.8-36.6 29.8c-30.2 3.2-53.8 28.8-53.8 59.9l0 .2c-32.8 1.4-62.8 10.7-86.6 25.5c-8.8-6.8-19.9-10.9-32-10.9c-28.9 0-52.3 23.4-52.3 52.3c0 21 12.3 39 30.1 47.4c1.7 60.7 67.9 109.6 149.3 109.6s147.6-48.9 149.3-109.7c17.7-8.4 29.9-26.4 29.9-47.3c0-28.9-23.4-52.3-52.3-52.3c-12 0-23 4-31.9 10.8c-24-14.9-54.3-24.2-87.5-25.4l0-.1c0-22.2 16.5-40.7 37.9-43.7l0 0c3.9 16.5 18.7 28.7 36.3 28.7zM155 248.1c14.6 0 25.8 15.4 25 34.4s-11.8 25.9-26.5 25.9s-27.5-7.7-26.6-26.7s13.5-33.5 28.1-33.5zm166.4 33.5c.9 19-12 26.7-26.6 26.7s-25.6-6.9-26.5-25.9c-.9-19 10.3-34.4 25-34.4s27.3 14.6 28.1 33.5zm-42.1 49.6c-9 21.5-30.3 36.7-55.1 36.7s-46.1-15.1-55.1-36.7c-1.1-2.6 .7-5.4 3.4-5.7c16.1-1.6 33.5-2.5 51.7-2.5s35.6 .9 51.7 2.5c2.7 .3 4.5 3.1 3.4 5.7z\"],\n    \"vimeo-v\": [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"],\n    \"contao\": [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"],\n    \"square-font-awesome\": [448, 512, [], \"e5ad\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90 122c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.7 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"],\n    \"deskpro\": [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"],\n    \"brave\": [448, 512, [], \"e63c\", \"M145.5 0H224h78.5l44.7 50.8s39.3-10.9 57.8 7.6s33.8 34.9 33.8 34.9l-12 29.5 15.3 43.7s-44.9 170.2-50.1 191c-10.4 40.9-17.4 56.8-46.9 77.5s-82.9 56.8-91.6 62.2c-1.9 1.2-3.9 2.5-5.9 3.9c-7.5 5.1-15.8 10.8-23.5 10.8l0 0 0 0c-7.7 0-16.1-5.7-23.5-10.8c-2-1.4-4-2.8-5.9-3.9c-8.7-5.5-62.1-41.5-91.6-62.2s-36.5-36.6-46.9-77.5c-5.3-20.8-50.1-191-50.1-191l15.3-43.7L9.2 93.3s15.3-16.4 33.8-34.9s57.8-7.6 57.8-7.6L145.5 0zM224 407.6l0 0c3.7 0 8.9-4.7 13-8.4c.6-.5 1.2-1.1 1.7-1.5c4.2-3.7 47.8-37.5 51-39.8s5.4-6.5 1.9-8.7c-2.8-1.7-10-5.5-20.3-10.8c-3-1.6-6.3-3.2-9.7-5c-15.4-8-34.5-14.7-37.5-14.7l0 0 0 0c-3 0-22.1 6.8-37.5 14.7c-3.5 1.8-6.7 3.5-9.7 5c-10.3 5.3-17.6 9.1-20.3 10.8c-3.6 2.2-1.4 6.4 1.9 8.7s46.8 36.1 51 39.8c.5 .5 1.1 1 1.7 1.5c4.1 3.7 9.3 8.4 13 8.4l0 0zm0-165.7l0 0c4.7 0 17.6-3 26.4-5l0 0 2-.5c7.8-1.8 7.3-6.3 6.4-13c-.1-.8-.2-1.6-.3-2.4c-.6-6.1-5.8-33.1-9.1-50.3c-1.1-5.8-2-10.5-2.4-12.9c-1.5-8.1-.6-9.4 .7-11.3c.2-.3 .5-.7 .7-1.1c1.4-2.3 16-6.2 27.9-9.5l0 0c2.5-.7 4.8-1.3 6.9-1.9c10.6-3 32.4-.6 44.2 .6c1.8 .2 3.4 .4 4.7 .5c9.6 .9 10.4 2.3 7.2 3.8c-2.3 1.1-16.2 6.3-28.7 10.9l0 0 0 0c-4.7 1.8-9.2 3.5-12.8 4.8c-1.5 .5-3 1.1-4.5 1.7c-12.5 4.6-27.2 10-28.9 19.4c-1.5 8.3 5.2 19.9 11.3 30.3l0 0c1.6 2.8 3.2 5.5 4.6 8.1c6.3 11.9 6.5 13.3 6.1 18.1c-.4 3.9-14.5 12.7-22.4 17.6l0 0c-1.8 1.1-3.3 2.1-4.2 2.7c-.8 .5-2.1 1.4-3.8 2.4c-8.6 5.2-26.3 16-26.3 22.5c0 7.8 24.6 28.1 32.4 33.2s28.9 16.1 37.9 17.8s23-8.5 31.2-23.8c7.7-14.4 1.7-28.5-3.2-40l-.9-2.2c-4.5-10.6 1.9-17 6.2-21.3l0 0c.5-.5 1-1 1.4-1.4L377.7 194c1.3-1.3 2.5-2.6 3.7-3.8l0 0c5.8-5.7 10.8-10.5 10.8-22.8c0-14.9-57.5-84.5-57.5-84.5s-48.5 9.3-55.1 9.3c-5.2 0-15.3-3.5-25.8-7.1l0 0c-2.7-.9-5.4-1.9-8-2.7C232.8 78.1 224 78 224 78l0 0 0 0s-8.7 0-21.8 4.4c-2.7 .9-5.4 1.8-8 2.7l0 0c-10.5 3.6-20.6 7.1-25.8 7.1c-6.5 0-55.1-9.3-55.1-9.3s-57.5 69.6-57.5 84.5c0 12.3 4.9 17.1 10.8 22.8l0 0c1.2 1.2 2.5 2.4 3.7 3.8l43.1 45.8c.4 .5 .9 .9 1.4 1.4l0 0c4.3 4.3 10.6 10.7 6.2 21.3l-.9 2.2c-4.9 11.5-11 25.6-3.2 40c8.2 15.3 22.2 25.5 31.2 23.8s30.1-12.7 37.9-17.8s32.4-25.4 32.4-33.2c0-6.5-17.7-17.3-26.3-22.5c-1.7-1-3.1-1.9-3.8-2.4c-.9-.6-2.4-1.5-4.2-2.7c-7.9-4.9-22-13.7-22.4-17.6c-.4-4.8-.3-6.2 6.1-18.1c1.3-2.5 2.9-5.3 4.6-8.1c6-10.4 12.8-22 11.3-30.3c-1.7-9.4-16.4-14.8-28.9-19.4c-1.6-.6-3.1-1.1-4.5-1.7c-3.6-1.4-8.1-3.1-12.8-4.8l-.1 0c-12.5-4.7-26.4-9.9-28.7-10.9c-3.2-1.5-2.3-2.8 7.2-3.8c1.3-.1 2.9-.3 4.7-.5c11.8-1.3 33.6-3.6 44.2-.6c2.1 .6 4.4 1.2 6.9 1.9c11.9 3.2 26.5 7.2 27.9 9.5c.2 .4 .5 .7 .7 1.1c1.3 1.9 2.2 3.2 .7 11.3c-.4 2.4-1.3 7.1-2.4 12.9c-3.3 17.2-8.5 44.2-9.1 50.3c-.1 .8-.2 1.7-.3 2.4c-.8 6.7-1.4 11.2 6.4 13l2 .5 0 0c8.8 2 21.8 5 26.4 5l0 0z\"],\n    \"sistrix\": [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"],\n    \"square-instagram\": [448, 512, [\"instagram-square\"], \"e055\", \"M194.4 211.7a53.3 53.3 0 1 0 59.3 88.7 53.3 53.3 0 1 0 -59.3-88.7zm142.3-68.4c-5.2-5.2-11.5-9.3-18.4-12c-18.1-7.1-57.6-6.8-83.1-6.5c-4.1 0-7.9 .1-11.2 .1c-3.3 0-7.2 0-11.4-.1c-25.5-.3-64.8-.7-82.9 6.5c-6.9 2.7-13.1 6.8-18.4 12s-9.3 11.5-12 18.4c-7.1 18.1-6.7 57.7-6.5 83.2c0 4.1 .1 7.9 .1 11.1s0 7-.1 11.1c-.2 25.5-.6 65.1 6.5 83.2c2.7 6.9 6.8 13.1 12 18.4s11.5 9.3 18.4 12c18.1 7.1 57.6 6.8 83.1 6.5c4.1 0 7.9-.1 11.2-.1c3.3 0 7.2 0 11.4 .1c25.5 .3 64.8 .7 82.9-6.5c6.9-2.7 13.1-6.8 18.4-12s9.3-11.5 12-18.4c7.2-18 6.8-57.4 6.5-83c0-4.2-.1-8.1-.1-11.4s0-7.1 .1-11.4c.3-25.5 .7-64.9-6.5-83l0 0c-2.7-6.9-6.8-13.1-12-18.4zm-67.1 44.5A82 82 0 1 1 178.4 324.2a82 82 0 1 1 91.1-136.4zm29.2-1.3c-3.1-2.1-5.6-5.1-7.1-8.6s-1.8-7.3-1.1-11.1s2.6-7.1 5.2-9.8s6.1-4.5 9.8-5.2s7.6-.4 11.1 1.1s6.5 3.9 8.6 7s3.2 6.8 3.2 10.6c0 2.5-.5 5-1.4 7.3s-2.4 4.4-4.1 6.2s-3.9 3.2-6.2 4.2s-4.8 1.5-7.3 1.5l0 0c-3.8 0-7.5-1.1-10.6-3.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM357 389c-18.7 18.7-41.4 24.6-67 25.9c-26.4 1.5-105.6 1.5-132 0c-25.6-1.3-48.3-7.2-67-25.9s-24.6-41.4-25.8-67c-1.5-26.4-1.5-105.6 0-132c1.3-25.6 7.1-48.3 25.8-67s41.5-24.6 67-25.8c26.4-1.5 105.6-1.5 132 0c25.6 1.3 48.3 7.1 67 25.8s24.6 41.4 25.8 67c1.5 26.3 1.5 105.4 0 131.9c-1.3 25.6-7.1 48.3-25.8 67z\"],\n    \"battle-net\": [512, 512, [], \"f835\", \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"],\n    \"the-red-yeti\": [512, 512, [], \"f69d\", \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"],\n    \"square-hacker-news\": [448, 512, [\"hacker-news-square\"], \"f3af\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM21 229.2c0 0 .1-.1 .1-.2s.1-.2 .2-.2c0 .1 0 .3-.1 .4H21zM239.2 384H207.8V281.3L128 128h37.3c41.5 77.7 48.1 95.8 54.1 112c1.6 4.3 3.1 8.5 5.2 13.6c3.2-7 5.1-11.9 7.1-17.3c5.9-15.3 12.8-33.2 53.5-108.3H320L239.2 283.1V384z\"],\n    \"edge\": [512, 512, [], \"f282\", \"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\"],\n    \"threads\": [448, 512, [], \"e618\", \"M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z\"],\n    \"napster\": [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"],\n    \"square-snapchat\": [448, 512, [\"snapchat-square\"], \"f2ad\", \"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\"],\n    \"google-plus-g\": [640, 512, [], \"f0d5\", \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"],\n    \"artstation\": [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"],\n    \"markdown\": [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"],\n    \"sourcetree\": [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"],\n    \"google-plus\": [512, 512, [], \"f2b3\", \"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\"],\n    \"diaspora\": [512, 512, [], \"f791\", \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"],\n    \"foursquare\": [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"],\n    \"stack-overflow\": [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"],\n    \"github-alt\": [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"],\n    \"phoenix-squadron\": [512, 512, [], \"f511\", \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"],\n    \"pagelines\": [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"],\n    \"algolia\": [512, 512, [], \"f36c\", \"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\"],\n    \"red-river\": [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"],\n    \"creative-commons-sa\": [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"],\n    \"safari\": [512, 512, [], \"f267\", \"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\"],\n    \"google\": [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"],\n    \"square-font-awesome-stroke\": [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm154 58c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.8 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"],\n    \"atlassian\": [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"],\n    \"linkedin-in\": [448, 512, [], \"f0e1\", \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"],\n    \"digital-ocean\": [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"],\n    \"nimblr\": [384, 512, [], \"f5a8\", \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"],\n    \"chromecast\": [512, 512, [], \"f838\", \"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\"],\n    \"evernote\": [384, 512, [], \"f839\", \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"],\n    \"hacker-news\": [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\n    \"creative-commons-sampling\": [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"],\n    \"adversal\": [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"],\n    \"creative-commons\": [496, 512, [], \"f25e\", \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"],\n    \"watchman-monitoring\": [512, 512, [], \"e087\", \"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\"],\n    \"fonticons\": [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"],\n    \"weixin\": [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"],\n    \"shirtsinbulk\": [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"],\n    \"codepen\": [512, 512, [], \"f1cb\", \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"],\n    \"git-alt\": [448, 512, [], \"f841\", \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"],\n    \"lyft\": [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"],\n    \"rev\": [448, 512, [], \"f5b2\", \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"],\n    \"windows\": [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"],\n    \"wizards-of-the-coast\": [640, 512, [], \"f730\", \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"],\n    \"square-viadeo\": [448, 512, [\"viadeo-square\"], \"f2aa\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM118.3 381.2c-68-73.6-19.8-196.1 81.2-196.1c13.3 0 26.6 2.1 39.1 6.7c-4.3 8.4-7.3 17.6-8.4 27.1c-9.7-4.1-20.2-6-30.7-6c-48.8 0-84.6 41.7-84.6 88.9c0 43 28.5 78.7 69.5 85.9c61.5-24 72.9-117.6 72.9-175v0c0-7.3 0-14.8-.6-22.1c-11.2-32.9-26.6-64.6-44.2-94.5c27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70c0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2c0-12.2-2.1-24.3-6.9-35.7c9.5-1.9 18.5-5.6 26.4-10.5c15.3 36.6 12.6 87.3-22.8 125.6c-42.4 46.2-120 46.6-162.4 0zM274.6 217.6c21.9-12 49.6-30.7 62.3-53c1.5-3 4.1-8.6 4.5-12c-12.5 27.9-44.2 49.8-73.9 56.7c-4.7-7.3-7.5-15.5-7.5-24.3c0-10.3 5.2-24.1 12.9-31.6c8.3-7.9 18-10.9 27.9-14.1c16-5.1 32.5-10.3 44.5-35.9c32.5 46.2 13.1 130.3-36.3 130.3c-13.3 0-25.1-7.1-34.4-16.1z\"],\n    \"meetup\": [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"],\n    \"centos\": [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"],\n    \"adn\": [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"],\n    \"cloudsmith\": [512, 512, [], \"f384\", \"M512 227.6v56.9L284.4 512H227.6L0 284.4V227.6L227.6 0h56.9L512 227.6zm-256 162a133.6 133.6 0 1 0 0-267.1 133.6 133.6 0 1 0 0 267.1z\"],\n    \"opensuse\": [640, 512, [], \"e62b\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3c-51.9-1.8-122.8-4.3-223 57.3c-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.1 307 7 335.1c3.3 12.8 8.9 24.9 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4c44.4 3.9 78.1-16 90-53.3c8.2-25.8 0-63.6-31.5-82.9c-25.6-15.7-53.3-12.1-69.2-1.6c-13.9 9.2-21.8 23.5-21.6 39.2c.3 27.8 24.3 42.6 41.5 42.6c5.4 0 10.7-.9 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9c0-12.1-11.6-14.8-16.8-13.9c-2.9 .5-4.5 2-11.8 2.4c-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9c32.3 2.8 47.7 40.7 28.5 65.7C135 388.5 76.7 388 53.6 344.4c-26-49.2 12.7-111.2 87-98.4c33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3c56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8c5.6-33.8 39.7-18.4 82.4-17.4c66.5 .4 102.1-27 103.1-28c3.7-3.1 6.5-15.8 7-17.7c1.3-5.1-3.2-2.4-3.2-2.4c-8.7 5.2-30.5 15.2-50.9 15.6c-25.3 .5-76.2-25.4-81.6-28.2c-.3-.4 .1 1.2-11-25.5c88.4 58.3 118.3 40.5 145.2 21.7c.8-.6 4.3-2.9 3.6-5.7c-13.8-48.1-22.4-62.7-34.5-69.6c-37-21.6-125-34.7-129.2-35.3c.1-.1-.9-.3-.9 .7l0 0zm135.6 75.4a37.6 37.6 0 1 1 -75.2-2.6 37.6 37.6 0 1 1 75.2 2.6zm-36.6-27.9a26.3 26.3 0 1 0 -1.7 52.5 26.3 26.3 0 1 0 1.7-52.5zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.6 0 15.6v0z\"],\n    \"pied-piper-alt\": [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"],\n    \"square-dribbble\": [448, 512, [\"dribbble-square\"], \"f397\", \"M165.9 132.5c-38.3 18-66.8 53.3-75.7 95.7c6.1 .1 62.4 .3 126.4-16.7c-22.7-40.2-47.1-74.1-50.7-79zm26.1-9.1c3.8 5.1 28.6 38.9 51 80c48.6-18.3 69.1-45.9 71.6-49.4C281 124.2 235.3 112.9 192 123.4zM277.4 382c-2-12-10-53.8-29.2-103.6c-55.1 18.8-93.8 56.4-108.1 85.6c40.5 31.6 93.3 36.7 137.3 18zM227.8 232.6C159.6 253 93.4 252.2 87.4 252c0 .7 0 1.4 0 2.1s0 1.4 0 2.1c0 35.1 13.3 67.1 35.1 91.4c22.2-37.9 67.1-77.9 116.5-91.8c-3.4-7.8-7.2-15.5-11.1-23.2zm72.5 136.9c30.7-20.7 52.5-53.6 58.6-91.6c-4.6-1.5-42.3-12.7-85.1-5.8c17.9 49.1 25.1 89.1 26.5 97.4zm-34.8-119c45.5-5.7 90.7 3.4 95.2 4.4c-.3-32.3-11.8-61.9-30.9-85.1c-2.9 3.9-25.8 33.2-76.3 53.9c4.8 9.8 8.3 17.8 12 26.8zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 416a160 160 0 1 1 0-320 160 160 0 1 1 0 320z\"],\n    \"codiepie\": [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"],\n    \"node\": [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"],\n    \"mix\": [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"],\n    \"steam\": [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"],\n    \"cc-apple-pay\": [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"],\n    \"scribd\": [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"],\n    \"debian\": [448, 512, [], \"e60b\", \"M380.2 245.6c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4c-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4c-30-13.8-76.1-16.2-97.3-5.8c1.3-1.1 4.2-2 6.8-2.7l.3-.1c3.3-1 6-1.7 4-2.9c-19.2 1.9-24.9 5.5-31.1 9.4l-.1 0c-4.6 2.9-9.5 6-20.3 8.7c-3.5 3.4 1.7 2 5.8 .9l0 0c4.1-1.1 7.2-1.9-.1 2.4c-3.5 1-6.6 1.3-9.6 1.6l-.1 0c-8.3 .8-15.8 1.6-30.7 17c.8 1.3 3.4-.2 5.3-1.3l.1-.1c2.3-1.4 3.4-2-1.7 4.4c-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8c-4.3 8.1-7.9 14.9-8.7 21.3c-.3 5.1-1 11-1.7 17.3l0 0c-.1 1-.2 2-.3 3l-.1 .6c-3 27.3-6.7 60.8 3.9 73l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5c.2 .4 .4 .8 .5 1.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c1 2.1 2 4.2 3.3 6.2l-3 .2c7 22.1 10.8 22.5 15.1 22.9l0 0c4.4 .4 9.3 .9 18.7 24.2c-2.7-.9-5.5-1.9-9.4-7.2c-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c2.1 3.7 4.8 6.2 7.6 8.8l0 0 0 0c1 .9 2.1 1.9 3.1 2.9c-11.9-6.5 3.2 13.7 11.9 25.2c.8 1.1 1.5 2 2.2 2.9l0 0 0 0 0 0 0 0 0 0c1.4 1.9 2.5 3.4 2.9 4.1l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2c2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7l.1 .1c5.2 5.6 9.9 10.6 19.7 15.3c10.7 3.7 16.6 4.7 22.7 5.8c.3 0 .6 .1 .9 .1c5.4 .8 11.2 1.8 20.8 4.5c-1.1-.1-2.2-.1-3.3-.1h0c-2.3-.1-4.7-.1-7-.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c-14.4-.2-29.2-.4-42.7-5.2C107.8 480.5 19.5 367.2 26 250.6c-.6-9.9-.3-20.9 0-30.7c.4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2v-.1c.4 .4 3.4 3.4 8.8-5.8c.8-1.8 1.6-3.7 2.4-5.6c.5-1.1 .9-2.2 1.4-3.2c2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l1.1-1c5.7-5.1 10.7-9.7 13.6-13.1l.7 4.4c17-15.9 44.6-27.5 65.6-36.4l.5-.2c4.8-2 9.3-3.9 13.3-5.7c-3.4 3.8 2.2 2.7 10 1c4.8-1 10.4-2.1 15.3-2.4l-3.9 2.1c-2.7 1.4-5.4 2.8-8 4.6c8.1-2 11.7-1.4 15.7-.8l.3 0c3.5 .6 7.3 1.2 14.6 .2c-5.6 .8-12.3 3-11.2 3.8c7.9 .9 12.8-.1 17.2-1l.2 0c5.5-1.1 10.3-2 19.3 .9l-1-4.8c7.3 2.6 12.7 4.3 17.5 5.8l.5 .1c10 3 17.6 5.3 34.2 14.1c3.2 .2 5.3-.5 7.4-1.2l.1 0c3.6-1.1 7-2.1 15.2 1.2c.3 .5 .5 1 .7 1.4c.1 .2 .2 .5 .3 .7l0 .1c1 2.6 1.8 4.6 14.6 12.1c1.7-.7-2.7-4.7-6.4-8.2c0 0 0 0-.1-.1c-.2-.1-.3-.3-.5-.4c32.2 17.3 67.3 54.1 78 93.5c-6-11.1-5.2-5.5-4.3 .5c.6 4 1.2 8.1-.2 7.5c4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9-.1-.3c-3.3-11.9-9.6-34.3-19.9-49.3c-.4 4.3-2.8 3.9-5.2 3.5l-.1 0 0 0c-3.3-.6-6.2-1.1-1.9 12.6c2.6 3.8 3.1 2.4 3.5 1.1l0 0c.5-1.5 .9-2.7 4.7 5.2c.1 4.1 1 8.2 2.1 12.7l0 0 0 0 .1 .6c.1 .3 .1 .5 .2 .8l.1 .6c.6 2.6 1.3 5.4 1.8 8.4c-1.1-.2-2.3-2.2-3.4-4.2c-1.4-2.4-2.8-4.7-3.7-3.2c2.4 11.5 6.5 17.4 8 18.3c-.3 .6-.6 .7-1.1 .7c-.8 0-1.8 .1-1.9 5.3c.7 13.7 3.3 12.5 5.3 11.6l0 0c.6-.3 1.2-.6 1.7-.4c-.6 2.5-1.6 5.1-2.7 7.9c-2.8 7.1-6 15.4-3.4 26.1c-.8-3-2-6-3.1-8.9l-.1-.4c-.2-.5-.4-1-.6-1.5l0 0c-.3-.8-.6-1.6-.9-2.3c-.6 4.4-.3 7.7-.1 10.6c0 .2 0 .5 0 .7c.4 5.3 .7 10-3 19.9c4.3-14.2 3.8-26.9-.2-20.8c1 10.9-3.7 20.4-8 28.9l-.1 .2c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.5 10.9-7 13.3-6.5 15.5l0 .1c.5 1.9 1 3.8-3.4 10.8c1.7-2.9 1.3-3.6 1-4.2l0 0c-.4-.8-.7-1.5 1.7-5.1c-1.6 .1-5.5 3.9-10.1 8.5c-3.9 3.9-8.5 8.4-12.8 11.8c-37.5 30.1-82.3 34-125.6 17.8c.2-1-.2-2.1-3.1-4.1c-36.8-28.2-58.5-52.1-50.9-107.5c2.1-1.6 3.6-5.8 5.3-10.8l0 0 0 0 .2-.4 .1-.3 0-.1c2.9-8.4 6.5-18.8 14.3-23.8c7.8-17.3 31.3-33.3 56.4-33.7c25.6-1.4 47.2 13.7 58.1 27.9c-19.8-18.4-52.1-24-79.7-10.4c-28.2 12.7-45 43.8-42.5 74.7c.3-.4 .6-.6 .9-.8l0 0s0 0 0 0c0 0 .1-.1 .1-.1l.1-.1c.6-.5 1.1-.9 1.4-3.3c-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7l.1-.1 0 0c2.2-2.1 4.7-4.5 8.9-7.3c-.3 .7-1.3 1.7-2.4 2.7c-2.2 2.1-4.6 4.5-1.6 4.6c5-1.3 18.5-13.4 28.5-22.3l0 0 0 0c.6-.5 1.2-1 1.7-1.5c1.5-1.3 2.8-2.5 4-3.6l0 0 .3-.3c1.9-4.2 1.6-5.6 1.3-7l0-.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c.8-2.1 1.5-4.1 2.2-6c.2-.6 .5-1.2 .7-1.8l-.4-.2zM349.3 34.3l-.2-.1 .2 .1 0 0zM247.8 334.1c-6-3-13.7-8.9-14.8-11.4l-.4 .3c-.3 .6-.5 1.3-.2 2.2c-12.2-5.7-23.4-14.3-32.6-24.9c4.9 7.1 10.1 14.1 17 19.5c-6.9-2.3-15.1-11.8-21.6-19.3l-.1-.1c-4.3-5-7.9-9.1-9.7-9.5c19.8 35.5 80.5 62.3 112.3 49c-14.7 .5-33.4 .3-49.9-5.8zm79.3-119.7l-.1-.2c-.5-1.5-1.1-3.1-1.7-3.4c1.4-5.8 5.4-10.7 4.4 4.6c-1 3.8-1.8 1.5-2.6-1zm-4.2 22.2c-1.3 7.9-5 15.5-10.1 22.5c.2-2-1.2-2.4-2.6-2.8l0 0c-2.9-.8-5.9-1.6 5.6-16.1c-.5 1.9-2.1 4.6-3.7 7.3l0 0 0 0-.3 .4c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8h.1zm-55.6 33.9c7.1 .6 14.1 .6 21-1.1c-2.5 2.4-5.2 4.8-8.3 7.2c-11.1-1.7-21.2-6-12.7-6.1zm-92.6 11.6c3.6 7.1 6.4 11.5 9 15.7l.1 .2c2.3 3.7 4.4 7.1 6.8 11.7c-5.1-4.2-8.7-9.5-12.5-15l-.3-.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9h.1zm7.5-9.6c1.6 3.3 3.2 6.4 5.7 9.1l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l.8 1.6 .2 .4zm238.9-41.6c-2.3 17.4-7.7 34.6-16 50.3c7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.6 110.6c.4 .8 1.4 .5 2.3 .3c1.9-.5 3.6-.9-.1 7.6c-.5 .3-1 .7-1.5 1l0 0 0 0c-1.4 .9-2.8 1.9-3.9 3c1.9-3.8 3.5-7.4 3.2-11.9zM25.3 152.3c-.7 3.7-1.5 7.9-3.4 13.9c.2-1.9 0-3.5-.2-4.9l0-.1c-.4-3.4-.7-6.3 4.3-12.8c-.3 1.2-.5 2.5-.7 3.8v.1z\"],\n    \"openid\": [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"],\n    \"instalod\": [512, 512, [], \"e081\", \"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\"],\n    \"files-pinwheel\": [512, 512, [], \"e69f\", \"M253.2 246.4L136.9 130.2c-.6-.6-1-1.3-1.4-2s-.5-1.6-.5-2.4s.2-1.6 .5-2.4s.8-1.4 1.4-2L253.3 5.1c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5L264 242c0 1.3-.3 2.5-1 3.6s-1.7 1.9-2.9 2.4s-2.5 .6-3.7 .3s-2.4-.9-3.2-1.9zm40.3-4.4l0-134.4c0-.8 .1-1.6 .5-2.4s.8-1.5 1.3-2.1s1.3-1.1 2-1.4s1.6-.5 2.4-.5l134.4 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.9 2.3-1.7 3.2L304 246.4c-.9 .8-2 1.4-3.2 1.6s-2.4 .1-3.5-.4s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.4zm30.6 35c-1.2 0-2.5-.3-3.5-1s-1.9-1.6-2.4-2.8s-.6-2.4-.4-3.6s.8-2.3 1.7-3.2l84.2-84.2c.6-.6 1.3-1 2-1.4s1.6-.5 2.4-.5s1.6 .2 2.4 .5s1.4 .8 2 1.4l84.4 84.2c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1l-168.5 0zM414.8 408l-95.3-95.2c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.7s1.3-2.1 2.4-2.8s2.3-1 3.5-1l95.2 0c1.7 0 3.2 .7 4.4 1.8s1.8 2.8 1.8 4.4l0 95.3c0 1.2-.4 2.5-1.1 3.5s-1.7 1.8-2.8 2.3s-2.4 .6-3.6 .3s-2.3-.9-3.2-1.7zM16.5 302.1l216.9 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.8 2.3-1.7 3.2L129.4 421.2c-.6 .6-1.3 1-2 1.4s-1.6 .5-2.4 .5s-1.6-.2-2.4-.5s-1.4-.8-2-1.4L12 312.8c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.6s1.3-2.1 2.3-2.8s2.3-1 3.5-1zM264 465.3c0 .8-.2 1.6-.5 2.4s-.8 1.5-1.4 2s-1.3 1-2 1.4s-1.6 .5-2.4 .5l-128 0c-1.2 0-2.5-.4-3.5-1.1s-1.8-1.7-2.3-2.8s-.6-2.4-.3-3.6s.8-2.3 1.7-3.2l128-128c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5l0 128zm40-132.5l82.8 82.7c.6 .6 1 1.3 1.4 2s.5 1.6 .5 2.4s-.2 1.6-.5 2.4s-.8 1.4-1.4 2L304 507c-.9 .9-2 1.5-3.2 1.7s-2.5 .1-3.6-.3s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.5l0-165.4c0-1.2 .4-2.5 1.1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.3s2.3 .8 3.2 1.7zM78.7 122.4c0-1.2 .3-2.5 1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.4s2.3 .8 3.2 1.7L237.8 266.4c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1L85 277.1c-1.7 0-3.2-.7-4.4-1.8s-1.8-2.8-1.8-4.4l0-148.4z\"],\n    \"expeditedssl\": [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"],\n    \"sellcast\": [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"],\n    \"square-twitter\": [448, 512, [\"twitter-square\"], \"f081\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z\"],\n    \"r-project\": [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"],\n    \"delicious\": [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"],\n    \"freebsd\": [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"],\n    \"vuejs\": [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"],\n    \"accusoft\": [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"],\n    \"ioxhost\": [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"],\n    \"fonticons-fi\": [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"],\n    \"app-store\": [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"],\n    \"cc-mastercard\": [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"],\n    \"itunes-note\": [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"],\n    \"golang\": [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"],\n    \"kickstarter\": [448, 512, [\"square-kickstarter\"], \"f3bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM320.8 233l-23.3 23.1L320.8 279c24.1 23.9 24.1 63 0 86.9s-63.4 23.9-87.6 0l-8.5-8.4c-11.3 16-29.7 26.5-50.9 26.5c-34.1 0-61.9-27.5-61.9-61.4l0-133.2c0-33.8 27.7-61.4 61.9-61.4c21.1 0 39.6 10.5 50.9 26.5l8.5-8.4c24.1-23.9 63.4-23.9 87.6 0s24.1 63 0 86.9z\"],\n    \"grav\": [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"],\n    \"weibo\": [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"],\n    \"uncharted\": [448, 512, [], \"e084\", \"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\"],\n    \"firstdraft\": [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"],\n    \"square-youtube\": [448, 512, [61798, \"youtube-square\"], \"f431\", \"M282 256.2l-95.2-54.1V310.3L282 256.2zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm14.4 136.1c7.6 28.6 7.6 88.2 7.6 88.2s0 59.6-7.6 88.1c-4.2 15.8-16.5 27.7-32.2 31.9C337.9 384 224 384 224 384s-113.9 0-142.2-7.6c-15.7-4.2-28-16.1-32.2-31.9C42 315.9 42 256.3 42 256.3s0-59.7 7.6-88.2c4.2-15.8 16.5-28.2 32.2-32.4C110.1 128 224 128 224 128s113.9 0 142.2 7.7c15.7 4.2 28 16.6 32.2 32.4z\"],\n    \"wikipedia-w\": [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"],\n    \"wpressr\": [496, 512, [\"rendact\"], \"f3e4\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"],\n    \"angellist\": [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"],\n    \"galactic-republic\": [496, 512, [], \"f50c\", \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"],\n    \"nfc-directional\": [512, 512, [], \"e530\", \"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\"],\n    \"skype\": [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"],\n    \"joget\": [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"],\n    \"fedora\": [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"],\n    \"stripe-s\": [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"],\n    \"meta\": [640, 512, [], \"e49b\", \"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\"],\n    \"laravel\": [512, 512, [], \"f3bd\", \"M107.2 0c2.5 0 4.7 .8 6.7 2l94.3 54.1c2.7 1.5 4.5 3.5 5.4 5.9c.9 2.2 .9 4.3 .9 5.6l0 193.4 69.2-39.7 0-100.3c0-2.6 .6-5 2.2-7.2c1.5-2.1 3.5-3.6 5.7-4.8c0 0 0 0 0 0l94-54c1.6-.9 3.4-1.6 5.5-1.6s4 .7 5.6 1.6l95.8 55.1c2.3 1.3 3.9 3 4.9 5.3c.9 2.1 .9 4.2 .9 5.8l0 107.2c0 2-.2 4.3-1.4 6.4c-1.2 2.2-3 3.7-5.1 4.9l-.1 .1-88 50.5 0 100c0 2.3-.3 4.8-1.6 7c-1.3 2.2-3.3 3.7-5.3 4.9c0 0 0 0-.1 0L208.7 510c-2.2 1.2-4.5 2-7.1 2s-4.9-.9-7.1-2l-.1-.1L7.1 402l-.5-.3c-1.1-.7-2.6-1.7-3.8-2.9C.9 396.9 0 394.6 0 391.6L0 65.9c0-4.8 3-7.9 5.5-9.3L100.5 2c2-1.2 4.3-2 6.8-2zM38.1 67.1l69 39.9 69.2-39.9L107.1 27.4l-69 39.7zm353 93.2l69-39.7-69-39.7-69.1 39.7 69.1 39.7zM189.2 89L120 128.8l0 186.4 69.2-39.9 0-186.4zM94.5 128.9L25.2 89.1l0 294.2 164 94.2 0-79.4-87.3-49.3-.2-.1c-1.3-.8-3.2-1.9-4.6-3.7c-1.7-2.1-2.5-4.7-2.5-7.7l0-208.5zm214.7 92.4l69.3 39.6 0-78.5-69.3-39.9 0 78.8zm94.5 39.6L473 221.2l0-78.8-69.3 39.9 0 78.5zM201.6 376.1l163.8-93.2-69-39.9L133 337.1l68.6 38.9zm12.9 101.5l164-94.2 0-78.8-164 93.6 0 79.4z\"],\n    \"hotjar\": [512, 512, [], \"f3b1\", \"M361.5 0c0 131.6-80.7 176.8-140.2 209.4c-.6 .3-1.1 .6-1.6 .9c-53.8 30.2-88.7 49.8-89.6 122H32C32 200.8 112.7 155.6 172.2 123C227 93.2 262.5 73 262.5 0h98.9zM301 302.6c54.8-29.8 90.3-50 90.3-123h98c0 131.6-80.7 176.7-140.2 209.4c-54.8 29.8-90.3 50-90.3 123h-98c0-131.6 80.7-176.8 140.2-209.4z\"],\n    \"bluetooth-b\": [320, 512, [], \"f294\", \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"],\n    \"square-letterboxd\": [448, 512, [], \"e62e\", \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM105.1 187C66.4 187 35 218.3 35 257s31.4 70 70.1 70c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1c-12.4-19.8-34.4-32.9-59.5-32.9zM224 187c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1C176.9 313.8 198.9 327 224 327c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1C271.1 200.2 249.1 187 224 187zm118.9 0c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1c12.4 19.8 34.4 32.9 59.5 32.9c38.7 0 70.1-31.3 70.1-70s-31.4-70-70.1-70z\"],\n    \"sticker-mule\": [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"],\n    \"creative-commons-zero\": [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"],\n    \"hips\": [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"],\n    \"css\": [448, 512, [], \"e6a2\", \"M376.3 32L0 32 0 408.3c0 19 7.6 37.2 21 50.7s31.7 21 50.7 21l304.6 0c19 0 37.2-7.6 50.7-21s21-31.7 21-50.7l0-304.6c0-19-7.6-37.2-21-50.7s-31.7-21-50.7-21zM332.4 431.4c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.5-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-4-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L351.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.5 12.5c7.5 8.4 11.5 20.3 11.8 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4 27.4-12.3 35.7c-8.2 8.3-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-101 0c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.4-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-3.9-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L250.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.4 12.5c7.6 8.4 11.5 20.3 11.9 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4.1 27.4-12.3 35.7s-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-105.6 1.1c-8.4-7.7-12.5-19.2-12.5-34.5l0-75.4c0-15.2 4.4-26.7 13.2-34.6c8.9-7.8 20.7-11.8 35.2-11.8c14.1 0 25.2 4 33.4 12c8.3 8 12.5 20 12.5 35.9l0 6-33.1 0 0-5.8c0-6.1-1.3-10.7-4-13.6c-1.1-1.5-2.6-2.7-4.3-3.5s-3.5-1.2-5.4-1.1c-5.4 0-9.2 1.8-11.4 5.6c-2.3 5.2-3.3 10.8-3 16.4l0 65.5c0 13.7 4.8 20.6 14.4 20.8c4.5 0 7.9-1.6 10.2-4.8c2.5-4.1 3.7-8.8 3.5-13.6l0-4.9 33.1 0 0 5.1c0 10.6-2.1 19.5-6.2 26.6c-4 6.9-9.9 12.5-17.1 16c-7.7 3.7-16.1 5.5-24.6 5.3c-14.2 0-25.5-3.9-33.8-11.6z\"],\n    \"behance\": [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"],\n    \"reddit\": [512, 512, [], \"f1a1\", \"M0 256C0 114.6 114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256L37.1 512c-13.7 0-20.5-16.5-10.9-26.2L75 437C28.7 390.7 0 326.7 0 256zM349.6 153.6c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6 0-37.8 14.6-41.8 34c-34.5 3.7-61.4 33-61.4 68.4l0 .2c-37.5 1.6-71.8 12.3-99 29.1c-10.1-7.8-22.8-12.5-36.5-12.5c-33 0-59.8 26.8-59.8 59.8c0 24 14.1 44.6 34.4 54.1c2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54c0-33-26.8-59.8-59.8-59.8c-13.7 0-26.3 4.6-36.4 12.4c-27.4-17-62.1-27.7-100-29.1l0-.2c0-25.4 18.9-46.5 43.4-49.9l0 0c4.4 18.8 21.3 32.8 41.5 32.8zM177.1 246.9c16.7 0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6s-31.4-8.8-30.4-30.5s15.4-38.3 32.1-38.3zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6c-1-21.7 11.8-39.3 28.5-39.3s31.2 16.6 32.1 38.3zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9 .8-6.2 3.9-6.5c18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1 .3 5.1 3.6 3.9 6.5z\"],\n    \"discord\": [640, 512, [], \"f392\", \"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\"],\n    \"chrome\": [512, 512, [], \"f268\", \"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\"],\n    \"app-store-ios\": [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"],\n    \"cc-discover\": [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"],\n    \"wpbeginner\": [512, 512, [], \"f297\", \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"],\n    \"confluence\": [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"],\n    \"shoelace\": [512, 512, [], \"e60c\", \"M404.9 331c2.2-1.1 4.4-2.3 6.5-3.7l8.3-4.8c1.5-1.1 4.4-3.4 8.7-6.7l.5-.5c3.4-3.4 7.2-5 11.3-4.9c1.8 0 3.9 .5 6.4 1.5l31-27.5c.9-.7 1.7-1.3 2.6-1.8h.2c3.3-1.9 6-1.8 8.2 .4c3.9 2.1 4.2 5.6 .9 10.6L456.9 322c.2 .5 .4 1 .4 1.5c.5 2.2 .3 4.4-.5 6.6c-.7 1.5-1.8 2.9-3.1 4.2c-1.4 1.4-2.7 2.8-4.2 4.2l-18.8 13.7c-1.7 1.2-3.4 2.3-5.1 3.3c-2.1 1.3-4.3 2.5-6.6 3.6c-1 .4-1.9 .9-2.9 1.3c-5.9 2.5-11.9 4.2-18.2 5c-2.9 24.5-11.3 47.1-25.1 67.8c-17.5 25.7-41.4 45.4-71.8 58.8c-30.2 13.5-63 20.2-98.2 20.2c-48.6-.5-88-11.4-118.2-32.8C49.5 454.4 32 421.5 32 380.3v-5.6c1.2-28.1 9.5-54.6 24.8-79.8c15.1-24.9 37.1-41.7 66.1-50.5c14.9-4.4 29.9-6.6 45-6.6c15.5 0 31.6 2.9 48.1 8.6s35.2 15.5 55.9 29.5L326 312.2c15.1 9.8 28.8 16.5 41.2 20c-2.6-25.1-11.7-46.6-27.3-64.5c-15.7-18.1-35.6-31.3-59.9-39.7l-23.3-8c-21.4-7.5-37.3-14.9-47.7-22.2c-28.2-19.1-43.8-45.2-47-78.5l-.5-9.8c0-32.1 13-58.9 39-80.5C223.5 9.7 251.1 0 283 0c24 0 45.6 6.9 64.7 20.8c19.2 14 30.1 33.8 32.6 59.4l.5 10c0 18.6-4.8 34.5-14.4 47.7c-9.8 13.2-18.5 19.9-26 19.9c-1.6-.1-3.1-.3-4.5-.6l-34 32c-5.5 3-9.2 2.5-11.1-1.6c-1.9-2.2-1.8-4.9 .5-8.2l.2-.2c.5-.7 1.2-1.5 2-2.4l31.6-30c-.4-1.5-.6-3.1-.6-4.8c0-4.1 1.6-7.6 4.9-10.4c13.8-12.4 20.8-26.7 20.8-42.8c0-16-6.1-29.5-18.2-40.4s-28.7-16.5-49.7-16.8c-26.2 0-47.8 7.9-64.7 23.7S192.3 89.9 192.3 112c0 17.8 6.9 33.9 20.6 48.3c13.6 14.2 34.6 25.4 63 33.5c39.8 11.5 70.2 31 91.3 58.3c18.7 24.2 29.1 51.3 31.3 81.4c2.2-.7 4.3-1.5 6.5-2.6zM294.1 178.7c0 1.1 .6 1.6 1.8 1.6c.1 0 9.7-8.9 28.8-26.6c0-2.4-5.1 .9-15.3 10c-10.2 9.2-15.3 14.2-15.3 14.9zm8 6.4c0-1-.5-1.5-1.5-1.5c-1.1 0-2.1 .5-2.9 1.6c-1.9-.1-3.3 .1-4.2 .7c-.4 .2-.5 .5-.5 .7c0 .7 .5 1.3 1.5 1.6h3.3c2.9-1.1 4.4-2.2 4.4-3.3zm22.6-19.9c0-2.8-1.6-2.8-4.9 0c-1.6 1.5-3.6 3.5-6 6.2c-.8 .6-2.6 2.2-5.3 4.9c-2.8 2.9-4.2 4.7-4.2 5.3l.2 1.3c.7 .2 1.2 .4 1.5 .4c.1 0 3.3-2.9 9.5-8.7s9.3-8.9 9.3-9.3zm159.7 120l-30.6 27c1.8 1 3.2 2.4 4 4.2l30.2-27c.2-1.2 .1-2.2-.5-2.9c-.6-.5-1.6-.9-3.1-1.3zm-1.6-.9l-.7-.7-27 21.9 1.6 2 26-23.1zM366.6 363.9c-8-2.1-15.4-4.6-22.2-7.5c-15.3-6.2-34.3-17-57-32.4L250 298.7c-15.8-10.1-30.2-17.6-43.2-22.6c-13.1-4.9-26-7.3-38.6-7.3h-5.5c-32.2 1.7-57.2 13.8-75 36.2c-16.6 20.8-25 45.3-25 73.6c0 31.8 12.8 56.7 38.2 74.7c25.4 18.1 60.2 27.1 104.4 27.1c34.7 0 64-6.2 87.8-18.6c23.7-12.4 42.1-28.8 55.2-49.2c9.8-15.5 15.9-31.8 18.2-48.8z\"],\n    \"mdb\": [576, 512, [], \"f8ca\", \"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"],\n    \"dochub\": [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"],\n    \"accessible-icon\": [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"],\n    \"ebay\": [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"],\n    \"amazon\": [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"],\n    \"unsplash\": [448, 512, [], \"e07c\", \"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\"],\n    \"yarn\": [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"],\n    \"square-steam\": [448, 512, [\"steam-square\"], \"f1b7\", \"M165.6 309.1c18.6 7.7 27.3 28.9 19.6 47.4s-29 27.2-47.6 19.4l-28.5-11.8c5 10.6 13.8 19.4 25.4 24.2c25.2 10.5 54.1-1.4 64.6-26.5c5.1-12.1 5.1-25.5 .1-37.7c-5.1-12.1-14.5-21.6-26.7-26.7c-12.1-5-25-4.8-36.4-.5l29.5 12.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V240.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8c-31.8 0-58.5-22.7-64.5-52.7L0 319.2V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM241.9 196.2a58.4 58.4 0 1 0 116.8 0 58.4 58.4 0 1 0 -116.8 0zm14.6-.1a43.9 43.9 0 1 1 87.8 0 43.9 43.9 0 1 1 -87.8 0z\"],\n    \"500px\": [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"],\n    \"square-vimeo\": [448, 512, [\"vimeo-square\"], \"f194\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM318.5 309.5C275 366 238.2 394.3 208.1 394.3c-18.7 0-34.4-17.2-47.3-51.6c-3.8-13.9-7.3-26.9-10.5-39c-18.2-68.3-28.6-107.4-46.2-107.4c-2.4 0-10.8 5-25.1 15.1L64 192c7-6.1 13.9-12.4 20.6-18.5c29.1-26.3 55.6-50.3 73.5-51.9c24.9-2.4 40.2 14.6 46 51.1c20.5 129.6 29.6 149.2 66.8 90.5c13.4-21.2 20.6-37.2 21.5-48.3c3.4-32.8-25.6-30.6-45.2-22.2c15.7-51.5 45.8-76.5 90.1-75.1c32.9 1 48.4 22.4 46.5 64c-1.4 31.1-23.2 73.8-65.3 127.9z\"],\n    \"asymmetrik\": [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"],\n    \"font-awesome\": [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"],\n    \"gratipay\": [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"],\n    \"apple\": [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"],\n    \"hive\": [512, 512, [], \"e07f\", \"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\"],\n    \"gitkraken\": [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"],\n    \"keybase\": [448, 512, [], \"f4f5\", \"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\"],\n    \"apple-pay\": [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"],\n    \"padlet\": [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"],\n    \"amazon-pay\": [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"],\n    \"square-github\": [448, 512, [\"github-square\"], \"f092\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6c.1-11.4 .1-28.8 .1-43.7c0-15.6-5.2-25.5-11.3-30.7c37-4.1 76-9.2 76-73.1c0-18.2-6.5-27.3-17.1-39c1.7-4.3 7.4-22-1.7-45c-13.9-4.3-45.7 17.9-45.7 17.9c-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9c-9.1 22.9-3.5 40.6-1.7 45c-10.6 11.7-15.6 20.8-15.6 39c0 63.6 37.3 69 74.3 73.1c-4.8 4.3-9.1 11.7-10.6 22.3c-9.5 4.3-33.8 11.7-48.3-13.9c-9.1-15.8-25.5-17.1-25.5-17.1c-16.2-.2-1.1 10.2-1.1 10.2c10.8 5 18.4 24.2 18.4 24.2c9.7 29.7 56.1 19.7 56.1 19.7c0 9 .1 21.7 .1 30.6c0 4.8 .1 8.6 .1 10c0 4.3-3 9.5-11.5 8C106 393.6 59.8 330.8 59.8 257.4c0-91.8 70.2-161.5 162-161.5s166.2 69.7 166.2 161.5c.1 73.4-44.7 136.3-110.7 158.3c-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2c1.9-.2 3.7 .6 3.9 1.9c.3 1.3-1 2.6-3 3c-1.9 .4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2 .2-3.7-.9-3.7-2.4c0-1.3 1.5-2.4 3.5-2.4c1.9-.2 3.7 .9 3.7 2.4c0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4c-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1c.9-1.1 2.8-.9 4.3 .6c1.3 1.3 1.8 3.3 .9 4.1c-.9 1.1-2.8 .9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3c1.1 1.5 1.1 3.3 0 4.1c-.9 .6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5c.9-.9 2.4-.4 3.5 .6c1.1 1.3 1.3 2.8 .4 3.5c-.9 .9-2.4 .4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6c.4-.6 1.5-.9 2.8-.4c1.3 .7 1.9 1.8 1.5 2.6c-.4 .9-1.7 1.1-2.8 .4z\"],\n    \"stumbleupon\": [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"],\n    \"fedex\": [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"],\n    \"phoenix-framework\": [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"],\n    \"shopify\": [448, 512, [], \"e057\", \"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\"],\n    \"neos\": [512, 512, [], \"f612\", \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"],\n    \"square-threads\": [448, 512, [], \"e619\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM294.2 244.3c19.5 9.3 33.7 23.5 41.2 40.9c10.4 24.3 11.4 63.9-20.2 95.4c-24.2 24.1-53.5 35-95.1 35.3h-.2c-46.8-.3-82.8-16.1-106.9-46.8C91.5 341.8 80.4 303.7 80 256v-.1-.1c.4-47.7 11.5-85.7 33-113.1c24.2-30.7 60.2-46.5 106.9-46.8h.2c46.9 .3 83.3 16 108.2 46.6c12.3 15.1 21.3 33.3 27 54.4l-26.9 7.2c-4.7-17.2-11.9-31.9-21.4-43.6c-19.4-23.9-48.7-36.1-87-36.4c-38 .3-66.8 12.5-85.5 36.2c-17.5 22.3-26.6 54.4-26.9 95.5c.3 41.1 9.4 73.3 26.9 95.5c18.7 23.8 47.4 36 85.5 36.2c34.3-.3 56.9-8.4 75.8-27.3c21.5-21.5 21.1-47.9 14.2-64c-4-9.4-11.4-17.3-21.3-23.3c-2.4 18-7.9 32.2-16.5 43.2c-11.4 14.5-27.7 22.4-48.4 23.5c-15.7 .9-30.8-2.9-42.6-10.7c-13.9-9.2-22-23.2-22.9-39.5c-1.7-32.2 23.8-55.3 63.5-57.6c14.1-.8 27.3-.2 39.5 1.9c-1.6-9.9-4.9-17.7-9.8-23.4c-6.7-7.8-17.1-11.8-30.8-11.9h-.4c-11 0-26 3.1-35.6 17.6l-23-15.8c12.8-19.4 33.6-30.1 58.5-30.1h.6c41.8 .3 66.6 26.3 69.1 71.8c1.4 .6 2.8 1.2 4.2 1.9l.1 .5zm-71.8 67.5c17-.9 36.4-7.6 39.7-48.8c-8.8-1.9-18.6-2.9-29-2.9c-3.2 0-6.4 .1-9.6 .3c-28.6 1.6-38.1 15.5-37.4 27.9c.9 16.7 19 24.5 36.4 23.6l-.1-.1z\"],\n    \"hackerrank\": [512, 512, [], \"f5f7\", \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"],\n    \"researchgate\": [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"],\n    \"swift\": [448, 512, [], \"f8e1\", \"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"],\n    \"angular\": [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"],\n    \"speakap\": [448, 512, [], \"f3f3\", \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"],\n    \"angrycreative\": [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"],\n    \"y-combinator\": [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"],\n    \"empire\": [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"],\n    \"envira\": [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"],\n    \"google-scholar\": [512, 512, [], \"e63b\", \"M390.9 298.5c0 0 0 .1 .1 .1c9.2 19.4 14.4 41.1 14.4 64C405.3 445.1 338.5 512 256 512s-149.3-66.9-149.3-149.3c0-22.9 5.2-44.6 14.4-64h0c1.7-3.6 3.6-7.2 5.6-10.7c4.4-7.6 9.4-14.7 15-21.3c27.4-32.6 68.5-53.3 114.4-53.3c33.6 0 64.6 11.1 89.6 29.9c9.1 6.9 17.4 14.7 24.8 23.5c5.6 6.6 10.6 13.8 15 21.3c2 3.4 3.8 7 5.5 10.5zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4L0 202.7 256 0 512 202.7l-94.7 77.1z\"],\n    \"square-gitlab\": [448, 512, [\"gitlab-square\"], \"e5ae\", \"M0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96zm337.5 12.5l44.6 116.4 .4 1.2c5.6 16.8 7.2 35.2 2.3 52.5c-5 17.2-15.4 32.4-29.8 43.3l-.2 .1-68.4 51.2-54.1 40.9c-.5 .2-1.1 .5-1.7 .8c-2 1-4.4 2-6.7 2c-3 0-6.8-1.8-8.3-2.8l-54.2-40.9L93.5 322.3l-.4-.3-.2-.1c-14.3-10.8-24.8-26-29.7-43.3s-4.2-35.7 2.2-52.5l.5-1.2 44.7-116.4c.9-2.3 2.5-4.3 4.5-5.6c1.6-1 3.4-1.6 5.2-1.8c1.3-.7 2.1-.4 3.4 .1c.6 .2 1.2 .5 2 .7c1 .4 1.6 .9 2.4 1.5c.6 .4 1.2 1 2.1 1.5c1.2 1.4 2.2 3 2.7 4.8l29.2 92.2H285l30.2-92.2c.5-1.8 1.4-3.4 2.6-4.8s2.8-2.4 4.5-3.1c1.7-.6 3.6-.9 5.4-.7s3.6 .8 5.2 1.8c2 1.3 3.7 3.3 4.6 5.6z\"],\n    \"studiovinari\": [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"],\n    \"pied-piper\": [480, 512, [], \"f2ae\", \"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\"],\n    \"wordpress\": [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"],\n    \"product-hunt\": [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"],\n    \"firefox\": [512, 512, [], \"f269\", \"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\"],\n    \"linode\": [448, 512, [], \"f2b8\", \"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\"],\n    \"goodreads\": [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"],\n    \"square-odnoklassniki\": [448, 512, [\"odnoklassniki-square\"], \"f264\", \"M224 137.1a39.9 39.9 0 1 0 0 79.7 39.9 39.9 0 1 0 0-79.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 95.9A81 81 0 1 1 224 258a81 81 0 1 1 0-162.1zm59.3 168.3c16.8-13.2 29.5-5.5 34.1 3.6c7.8 16-1.1 23.7-21.5 37c-17.1 10.9-40.7 15.2-56.2 16.8l13 12.9 47.7 47.7c17.4 17.9-11 45.8-28.6 28.6c-12-12.2-29.5-29.7-47.7-47.9l0 0-47.7 47.9c-17.7 17.2-46-11-28.4-28.6c3.7-3.7 7.9-7.9 12.5-12.5c10.4-10.4 22.6-22.7 35.2-35.2l12.9-12.9c-15.4-1.6-39.3-5.7-56.6-16.8c-20.3-13.3-29.3-20.9-21.4-37c4.6-9.1 17.3-16.8 34.1-3.6c0 0 22.7 18 59.3 18s59.3-18 59.3-18z\"],\n    \"jsfiddle\": [576, 512, [], \"f1cc\", \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"],\n    \"sith\": [448, 512, [], \"f512\", \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"],\n    \"themeisle\": [512, 512, [], \"f2b2\", \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"],\n    \"page4\": [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"],\n    \"hashnode\": [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"],\n    \"react\": [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"],\n    \"cc-paypal\": [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"],\n    \"squarespace\": [512, 512, [], \"f5be\", \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"],\n    \"cc-stripe\": [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"],\n    \"creative-commons-share\": [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"],\n    \"bitcoin\": [512, 512, [], \"f379\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"],\n    \"keycdn\": [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"],\n    \"opera\": [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"],\n    \"itch-io\": [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"],\n    \"umbraco\": [510, 512, [], \"f8e8\", \"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\"],\n    \"galactic-senate\": [512, 512, [], \"f50d\", \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"],\n    \"ubuntu\": [576, 512, [], \"f7df\", \"M469.2 75A75.6 75.6 0 1 0 317.9 75a75.6 75.6 0 1 0 151.2 0zM154.2 240.7A75.6 75.6 0 1 0 3 240.7a75.6 75.6 0 1 0 151.2 0zM57 346C75.6 392.9 108 433 150 461.1s91.5 42.6 142 41.7c-14.7-18.6-22.9-41.5-23.2-65.2c-6.8-.9-13.3-2.1-19.5-3.4c-26.8-5.7-51.9-17.3-73.6-34s-39.3-38.1-51.7-62.5c-20.9 9.9-44.5 12.8-67.1 8.2zm395.1 89.8a75.6 75.6 0 1 0 -151.2 0 75.6 75.6 0 1 0 151.2 0zM444 351.6c18.5 14.8 31.6 35.2 37.2 58.2c33.3-41.3 52.6-92.2 54.8-145.2s-12.5-105.4-42.2-149.4c-8.6 21.5-24 39.6-43.8 51.6c15.4 28.6 22.9 60.8 21.9 93.2s-10.7 64-28 91.6zM101.1 135.4c12.4 2.7 24.3 7.5 35.1 14.3c16.6-24.2 38.9-44.1 64.8-58S255.8 70.4 285.2 70c.2-5.9 .9-11.9 2-17.7c3.6-16.7 11.1-32.3 21.8-45.5c-47.7-3.8-95.4 6-137.6 28.5S94.3 91.7 70.8 133.4c2.7-.2 5.3-.3 8-.3c7.5 0 15 .8 22.4 2.3z\"],\n    \"draft2digital\": [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"],\n    \"stripe\": [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"],\n    \"houzz\": [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"],\n    \"gg\": [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"],\n    \"dhl\": [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"],\n    \"square-pinterest\": [448, 512, [\"pinterest-square\"], \"f0d3\", \"M384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h72.6l-2.2-.8c-5.4-48.1-3.1-57.5 15.7-134.7c3.9-16 8.5-35 13.9-57.9c0 0-7.3-14.8-7.3-36.5c0-70.7 75.5-78 75.5-25c0 13.5-5.4 31.1-11.2 49.8c-3.3 10.6-6.6 21.5-9.1 32c-5.7 24.5 12.3 44.4 36.4 44.4c43.7 0 77.2-46 77.2-112.4c0-58.8-42.3-99.9-102.6-99.9C153 139 112 191.4 112 245.6c0 21.1 8.2 43.7 18.3 56c2 2.4 2.3 4.5 1.7 7c-1.1 4.7-3.1 12.9-4.7 19.2c-1 4-1.8 7.3-2.1 8.6c-1.1 4.5-3.5 5.5-8.2 3.3c-30.6-14.3-49.8-59.1-49.8-95.1C67.2 167.1 123.4 96 229.4 96c85.2 0 151.4 60.7 151.4 141.8c0 84.6-53.3 152.7-127.4 152.7c-24.9 0-48.3-12.9-56.3-28.2c0 0-12.3 46.9-15.3 58.4c-5 19.3-17.6 42.9-27.4 59.3H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64z\"],\n    \"xing\": [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"],\n    \"blackberry\": [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"],\n    \"creative-commons-pd\": [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"],\n    \"playstation\": [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"],\n    \"quinscape\": [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"],\n    \"less\": [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"],\n    \"blogger-b\": [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"],\n    \"opencart\": [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"],\n    \"vine\": [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"],\n    \"signal-messenger\": [512, 512, [], \"e663\", \"M256 0c13.3 0 26.3 1 39.1 3l-3.7 23.7C279.9 24.9 268 24 256 24s-23.9 .9-35.4 2.7L216.9 3C229.7 1 242.7 0 256 0zm60.8 7.3l-5.7 23.3c23.4 5.7 45.4 14.9 65.4 27.1l12.5-20.5c-22.1-13.4-46.4-23.6-72.2-29.9zm90.5 42.2L393.1 68.8c19.1 14 36 30.9 50.1 50.1l19.4-14.2C447 83.6 428.4 65 407.3 49.5zm67.5 73.6l-20.5 12.5c12.2 20 21.4 42 27.1 65.4l23.3-5.7c-6.3-25.8-16.5-50.1-29.9-72.2zM509 216.9l-23.7 3.7c1.8 11.5 2.7 23.4 2.7 35.4s-.9 23.9-2.7 35.4l23.7 3.7c1.9-12.7 3-25.8 3-39.1s-1-26.3-3-39.1zM454.3 376.5c12.2-20 21.4-42 27.1-65.4l23.3 5.7c-6.3 25.8-16.5 50.1-29.9 72.2l-20.5-12.5zm-11.1 16.6l19.4 14.2c-15.5 21.1-34.1 39.8-55.2 55.2l-14.2-19.4c19.1-14 36-30.9 50.1-50.1zm-66.7 61.2l12.5 20.5c-22.1 13.4-46.4 23.6-72.2 29.9l-5.7-23.3c23.4-5.7 45.4-14.9 65.4-27.1zm-85.1 31l3.7 23.7c-12.7 1.9-25.8 3-39.1 3s-26.3-1-39.1-3l3.7-23.7c11.5 1.8 23.4 2.7 35.4 2.7s23.9-.9 35.4-2.7zm-90.5-3.9l-5.7 23.3c-19.4-4.7-37.9-11.6-55.3-20.5l-24.3 5.7-5.5-23.4 32.8-7.7 7.8 4c15.7 8 32.5 14.3 50.1 18.6zM90 471.3l5.5 23.4-41.6 9.7C26 510.8 1.2 486 7.6 458.2l9.7-41.6L40.7 422 31 463.7c-2.4 10.4 6.9 19.7 17.3 17.3L90 471.3zM45.5 401.8l-23.4-5.5L27.8 372C18.9 354.7 12 336.1 7.3 316.7l23.3-5.7c4.3 17.6 10.6 34.4 18.6 50.1l4 7.8-7.7 32.8zM26.7 291.4L3 295.1C1 282.3 0 269.3 0 256s1-26.3 3-39.1l23.7 3.7C24.9 232.1 24 244 24 256s.9 23.9 2.7 35.4zm3.9-90.5L7.3 195.2c6.3-25.8 16.5-50.1 29.9-72.2l20.5 12.5c-12.2 20-21.4 42-27.1 65.4zm38.3-82.1L49.5 104.7C65 83.6 83.6 65 104.7 49.5l14.2 19.4c-19.1 14-36 30.9-50.1 50.1zm66.7-61.2L123.1 37.2c22.1-13.4 46.4-23.6 72.2-29.9l5.7 23.3c-23.4 5.7-45.4 14.9-65.4 27.1zM464 256c0 114.9-93.1 208-208 208c-36.4 0-70.7-9.4-100.5-25.8c-2.9-1.6-6.2-2.1-9.4-1.4L53.6 458.4l21.6-92.5c.7-3.2 .2-6.5-1.4-9.4C57.4 326.7 48 292.4 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208z\"],\n    \"paypal\": [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"],\n    \"gitlab\": [512, 512, [], \"f296\", \"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\"],\n    \"typo3\": [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"],\n    \"reddit-alien\": [512, 512, [], \"f281\", \"M373 138.6c-25.2 0-46.3-17.5-51.9-41l0 0c-30.6 4.3-54.2 30.7-54.2 62.4l0 .2c47.4 1.8 90.6 15.1 124.9 36.3c12.6-9.7 28.4-15.5 45.5-15.5c41.3 0 74.7 33.4 74.7 74.7c0 29.8-17.4 55.5-42.7 67.5c-2.4 86.8-97 156.6-213.2 156.6S45.5 410.1 43 323.4C17.6 311.5 0 285.7 0 255.7c0-41.3 33.4-74.7 74.7-74.7c17.2 0 33 5.8 45.7 15.6c34-21.1 76.8-34.4 123.7-36.4l0-.3c0-44.3 33.7-80.9 76.8-85.5C325.8 50.2 347.2 32 373 32c29.4 0 53.3 23.9 53.3 53.3s-23.9 53.3-53.3 53.3zM157.5 255.3c-20.9 0-38.9 20.8-40.2 47.9s17.1 38.1 38 38.1s36.6-9.8 37.8-36.9s-14.7-49.1-35.7-49.1zM395 303.1c-1.2-27.1-19.2-47.9-40.2-47.9s-36.9 22-35.7 49.1c1.2 27.1 16.9 36.9 37.8 36.9s39.3-11 38-38.1zm-60.1 70.8c1.5-3.6-1-7.7-4.9-8.1c-23-2.3-47.9-3.6-73.8-3.6s-50.8 1.3-73.8 3.6c-3.9 .4-6.4 4.5-4.9 8.1c12.9 30.8 43.3 52.4 78.7 52.4s65.8-21.6 78.7-52.4z\"],\n    \"yahoo\": [512, 512, [], \"f19e\", \"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\"],\n    \"dailymotion\": [448, 512, [], \"e052\", \"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\"],\n    \"affiliatetheme\": [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"],\n    \"pied-piper-pp\": [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"],\n    \"bootstrap\": [576, 512, [], \"f836\", \"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\"],\n    \"odnoklassniki\": [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"],\n    \"nfc-symbol\": [576, 512, [], \"e531\", \"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\"],\n    \"mintbit\": [512, 512, [], \"e62f\", \"M73.2 512V438.9H365.7V365.7h73.2V219.4H512V0H292.6V73.1H146.3v73.2H73.2V438.9H0V512H73.2zm73.1-219.4h73.2v73.1H146.3V292.6zm73.2-73.1h73.1v73.1H219.4V219.4zm73.1 0V146.3h73.2v73.1H292.6zM365.7 73.1h73.2v73.2H365.7V73.1z\"],\n    \"ethereum\": [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"],\n    \"speaker-deck\": [512, 512, [], \"f83c\", \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"],\n    \"creative-commons-nc-eu\": [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"],\n    \"patreon\": [512, 512, [], \"f3d9\", \"M489.7 153.8c-.1-65.4-51-119-110.7-138.3C304.8-8.5 207-5 136.1 28.4C50.3 68.9 23.3 157.7 22.3 246.2C21.5 319 28.7 510.6 136.9 512c80.3 1 92.3-102.5 129.5-152.3c26.4-35.5 60.5-45.5 102.4-55.9c72-17.8 121.1-74.7 121-150z\"],\n    \"avianex\": [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"],\n    \"ello\": [496, 512, [], \"f5f1\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"],\n    \"gofore\": [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"],\n    \"bimobject\": [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"],\n    \"brave-reverse\": [448, 512, [], \"e63d\", \"M298 0c3 0 5.8 1.3 7.8 3.6l38.1 44c.5-.1 1-.2 1.5-.3c9.2-1.6 18.6-2.2 27.7-1.2c11.6 1.4 21.5 5.4 28.9 12.9c7.7 7.8 15.4 15.8 22.6 23.6c2.5 2.7 4.9 5.2 6.9 7.4c.7 .8 1.4 1.5 1.9 2c3.4 3.7 4.2 8.1 2.7 11.9l-9.8 24.6 13.1 38.1c.7 2 .8 4.1 .2 6.2c-.1 .4-.1 .4-.5 2.1c-.6 2.3-.6 2.3-1.5 5.8c-1.6 6.3-3.5 13.3-5.4 20.9c-5.6 21.6-11.2 43.2-16.4 63.4c-12.9 49.9-21.4 82.7-23.4 90.9c-11.1 44.5-19.9 60-48.3 80.3c-24.9 17.8-76.8 53.6-86.8 60c-1 .6-2 1.3-3.4 2.3c-.5 .4-3.2 2.2-3.9 2.7c-4.9 3.3-8.3 5.5-12.1 7.3c-4.7 2.2-9.3 3.5-13.9 3.5s-9.1-1.2-13.9-3.5c-3.7-1.8-7.2-3.9-12.1-7.3c-.8-.5-3.4-2.4-3.9-2.7c-1.4-1-2.5-1.7-3.4-2.3c-10-6.4-61.9-42.1-86.8-60c-28.4-20.4-37.2-35.8-48.3-80.3c-2-8.2-10.5-41-23.3-90.5c-5.3-20.6-10.9-42.2-16.5-63.8c-2-7.6-3.8-14.6-5.4-20.9c-.9-3.5-.9-3.5-1.5-5.8c-.4-1.7-.4-1.7-.5-2.1c-.5-2-.4-4.2 .2-6.2l13.1-38.1L11.8 104c-1.5-3.8-.7-8.2 2-11.2c1.2-1.3 1.8-2 2.6-2.8c2-2.2 4.4-4.7 6.9-7.4C30.6 74.9 38.3 66.9 46 59.1c7.4-7.5 17.3-11.6 28.9-12.9c9.1-1.1 18.5-.5 27.7 1.2c.5 .1 1 .2 1.5 .3l38.1-44C144.2 1.3 147 0 150 0H298zm-4.7 21.1H154.7L115.6 66.2c-2.6 3-6.7 4.3-10.6 3.2c-.2-.1-.7-.2-1.5-.4c-1.3-.3-2.9-.6-4.5-.9c-7.4-1.3-14.9-1.8-21.7-1C70 68 64.3 70.3 60.7 74c-7.6 7.7-15.2 15.6-22.3 23.3c-1.7 1.8-3.3 3.5-4.8 5.1l8.8 22c1 2.4 1 5 .2 7.5L29.2 170.6c.4 1.4 .5 1.9 1.2 4.8c1.6 6.3 3.5 13.3 5.4 20.9c5.6 21.6 11.2 43.2 16.4 63.4c12.9 50 21.4 82.8 23.4 91C85.7 390.8 92 402 115.8 419c24.6 17.6 76.3 53.2 85.9 59.3c1.2 .8 2.5 1.6 4 2.7c.6 .4 3.2 2.2 3.9 2.7c4 2.8 6.7 4.4 9.2 5.6c2.2 1 3.9 1.5 5.1 1.5s2.9-.5 5.1-1.5c2.5-1.2 5.2-2.8 9.2-5.6c.7-.5 3.3-2.3 3.9-2.7c1.6-1.1 2.8-1.9 4-2.7c9.6-6.1 61.3-41.7 85.9-59.3c23.8-17.1 30.2-28.2 40.1-68.3c2.1-8.3 10.5-41.1 23.3-90.7c5.3-20.6 10.9-42.2 16.5-63.8c2-7.6 3.8-14.6 5.4-20.9c.7-2.9 .9-3.4 1.2-4.8l-13.3-38.8c-.8-2.4-.8-5.1 .2-7.5l8.8-22c-1.5-1.6-3.1-3.3-4.8-5.1c-7.2-7.6-14.7-15.5-22.3-23.3c-3.7-3.7-9.3-6-16.6-6.9c-6.8-.8-14.4-.3-21.7 1c-1.7 .3-3.2 .6-4.5 .9c-.8 .2-1.3 .3-1.5 .4c-3.8 1.1-7.9-.2-10.6-3.2L293.3 21.1zM224 316c2.8 0 20.9 6.5 35.4 14.1s25 13 28.3 15.2s1.3 6.2-1.7 8.4s-44.1 34.6-48.1 38.2s-9.8 9.5-13.8 9.5s-9.8-5.9-13.8-9.5s-45.1-36-48.1-38.2s-5.1-6.2-1.7-8.4s13.9-7.5 28.3-15.2s32.5-14.1 35.4-14.1zm.1-230.7c.7 0 8.8 .2 20.5 4.2c12.3 4.2 25.7 9.4 31.9 9.4s51.9-8.9 51.9-8.9s54.2 66.7 54.2 81s-6.8 18-13.7 25.4s-36.8 39.8-40.7 43.9s-11.9 10.5-7.1 21.8s11.7 25.8 3.9 40.4s-21 24.4-29.4 22.8s-28.4-12.2-35.7-17.1s-30.5-24.3-30.5-31.8s24-20.8 28.4-23.9s24.7-14.8 25.1-19.4s.3-6-5.7-17.4s-16.7-26.7-14.9-36.8s19.1-15.4 31.5-20.2s36.2-13.7 39.2-15.1s2.2-2.7-6.8-3.6s-34.6-4.3-46.1-1.1s-31.2 8.2-32.8 10.9s-3 2.7-1.4 11.8s10.1 52.8 10.9 60.6s2.4 12.9-5.8 14.8s-22.1 5.2-26.8 5.2s-18.6-3.3-26.8-5.2s-6.6-7-5.8-14.8s9.3-51.5 10.9-60.6s.2-9.2-1.4-11.8s-21.3-7.6-32.8-10.9s-37.1 .2-46.1 1.1s-9.8 2.2-6.8 3.6s26.8 10.4 39.2 15.1s29.7 10 31.5 20.2s-9 25.4-14.9 36.8s-6.1 12.8-5.7 17.4s20.6 16.4 25.1 19.4s28.4 16.4 28.4 23.9s-23.2 27-30.5 31.8s-27.2 15.4-35.7 17.1s-21.7-8.2-29.4-22.8s-.8-29.1 3.9-40.4s-3.3-17.7-7.1-21.8s-33.8-36.5-40.7-43.9s-13.7-11.2-13.7-25.4s54.2-81 54.2-81s45.8 8.9 51.9 8.9s19.5-5.2 31.9-9.4s20.6-4.2 20.6-4.2l.1 0z\"],\n    \"facebook-f\": [320, 512, [], \"f39e\", \"M80 299.3V512H196V299.3h86.5l18-97.8H196V166.9c0-51.7 20.3-71.5 72.7-71.5c16.3 0 29.4 .4 37 1.2V7.9C291.4 4 256.4 0 236.2 0C129.3 0 80 50.5 80 159.4v42.1H14v97.8H80z\"],\n    \"square-google-plus\": [448, 512, [\"google-plus-square\"], \"f0d4\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM64 256c0-55.3 44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4c-34.1 0-61.9 28.2-61.9 63.2c0 34.9 27.8 63.2 61.9 63.2c39.6 0 54.4-28.5 56.8-43.1H164V241.8h94.4c1 5 1.6 10.1 1.6 16.6c0 57.1-38.3 97.6-96 97.6c-55.3 0-100-44.7-100-100zm291 18.2v29H325.8v-29h-29V245h29V216H355v29h29v29.2H355z\"],\n    \"web-awesome\": [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"],\n    \"mandalorian\": [448, 512, [], \"f50f\", \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"],\n    \"first-order-alt\": [496, 512, [], \"f50a\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"],\n    \"osi\": [512, 512, [], \"f41a\", \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"],\n    \"google-wallet\": [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"],\n    \"d-and-d-beyond\": [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"],\n    \"periscope\": [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"],\n    \"fulcrum\": [320, 512, [], \"f50b\", \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"],\n    \"cloudscale\": [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"],\n    \"forumbee\": [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"],\n    \"mizuni\": [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"],\n    \"schlix\": [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"],\n    \"square-xing\": [448, 512, [\"xing-square\"], \"f169\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM93.8 320.2c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2c-3.5 6.2-7.7 9.1-12.6 9.1H93.8zm163.5-33.4v.2l65.5 119c2.8 5.1 .1 10.1-6 10.1H270.2c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c1.8-3.2 22.9-40.4 63.3-111.6c11.7-20.7 25.1-44.3 40.1-70.8c3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10L257.3 286.8z\"],\n    \"bandcamp\": [512, 512, [], \"f2d5\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\"],\n    \"wpforms\": [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"],\n    \"cloudversify\": [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"],\n    \"usps\": [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"],\n    \"megaport\": [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"],\n    \"magento\": [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"],\n    \"spotify\": [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"],\n    \"optin-monster\": [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"],\n    \"fly\": [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"],\n    \"square-bluesky\": [448, 512, [], \"e6a3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 247.4c14.5-30 54-85.8 90.7-113.3c26.5-19.9 69.3-35.2 69.3 13.7c0 9.8-5.6 82.1-8.9 93.8c-11.4 40.8-53 51.2-90 44.9c64.7 11 81.2 47.5 45.6 84c-67.5 69.3-97-17.4-104.6-39.6c0 0 0 0 0 0l-.3-.9c-.9-2.6-1.4-4.1-1.8-4.1s-.9 1.5-1.8 4.1c-.1 .3-.2 .6-.3 .9c0 0 0 0 0 0c-7.6 22.2-37.1 108.8-104.6 39.6c-35.5-36.5-19.1-73 45.6-84c-37 6.3-78.6-4.1-90-44.9c-3.3-11.7-8.9-84-8.9-93.8c0-48.9 42.9-33.5 69.3-13.7c36.7 27.5 76.2 83.4 90.7 113.3z\"],\n    \"aviato\": [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"],\n    \"itunes\": [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"],\n    \"cuttlefish\": [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"],\n    \"blogger\": [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"],\n    \"flickr\": [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"],\n    \"viber\": [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"],\n    \"soundcloud\": [640, 512, [], \"f1be\", \"M639.8 298.6c-1.3 23.1-11.5 44.8-28.4 60.5s-39.2 24.4-62.3 24.1h-218c-4.8 0-9.4-2-12.8-5.4s-5.3-8-5.3-12.8V130.2c-.2-4 .9-8 3.1-11.4s5.3-6.1 9-7.7c0 0 20.1-13.9 62.3-13.9c25.8 0 51.1 6.9 73.3 20.1c17.3 10.2 32.3 23.8 44.1 40.1s20 34.8 24.2 54.4c7.5-2.1 15.3-3.2 23.1-3.2c11.7-.1 23.3 2.2 34.2 6.7S606.8 226.6 615 235s14.6 18.3 18.9 29.3s6.3 22.6 5.9 34.3zm-354-153.5c.1-1 0-2-.3-2.9s-.8-1.8-1.5-2.6s-1.5-1.3-2.4-1.7s-1.9-.6-2.9-.6s-2 .2-2.9 .6s-1.7 1-2.4 1.7s-1.2 1.6-1.5 2.6s-.4 1.9-.3 2.9c-6 78.9-10.6 152.9 0 231.6c.2 1.7 1 3.3 2.3 4.5s3 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.8 2.3-4.5c11.3-79.4 6.6-152 0-231.6zm-44 27.3c-.2-1.8-1.1-3.5-2.4-4.7s-3.1-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.7c-7.9 67.9-7.9 136.5 0 204.4c.3 1.8 1.2 3.4 2.5 4.5s3.1 1.8 4.8 1.8s3.5-.6 4.8-1.8s2.2-2.8 2.5-4.5c8.8-67.8 8.8-136.5 .1-204.4zm-44.3-6.9c-.2-1.8-1-3.4-2.3-4.6s-3-1.8-4.8-1.8s-3.5 .7-4.8 1.8s-2.1 2.8-2.3 4.6c-6.7 72-10.2 139.3 0 211.1c0 1.9 .7 3.7 2.1 5s3.1 2.1 5 2.1s3.7-.7 5-2.1s2.1-3.1 2.1-5c10.5-72.8 7.3-138.2 .1-211.1zm-44 20.6c0-1.9-.8-3.8-2.1-5.2s-3.2-2.1-5.2-2.1s-3.8 .8-5.2 2.1s-2.1 3.2-2.1 5.2c-8.1 63.3-8.1 127.5 0 190.8c.2 1.8 1 3.4 2.4 4.6s3.1 1.9 4.8 1.9s3.5-.7 4.8-1.9s2.2-2.8 2.4-4.6c8.8-63.3 8.9-127.5 .3-190.8zM109 233.7c0-1.9-.8-3.8-2.1-5.1s-3.2-2.1-5.1-2.1s-3.8 .8-5.1 2.1s-2.1 3.2-2.1 5.1c-10.5 49.2-5.5 93.9 .4 143.6c.3 1.6 1.1 3.1 2.3 4.2s2.8 1.7 4.5 1.7s3.2-.6 4.5-1.7s2.1-2.5 2.3-4.2c6.6-50.4 11.6-94.1 .4-143.6zm-44.1-7.5c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.8c-9.3 50.2-6.2 94.4 .3 144.5c.7 7.6 13.6 7.5 14.4 0c7.2-50.9 10.5-93.8 .3-144.5zM20.3 250.8c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.3 2.9-2.4 4.8c-8.5 33.7-5.9 61.6 .6 95.4c.2 1.7 1 3.3 2.3 4.4s2.9 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.7 2.3-4.4c7.5-34.5 11.2-61.8 .4-95.4z\"],\n    \"digg\": [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"],\n    \"tencent-weibo\": [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"],\n    \"letterboxd\": [640, 512, [], \"e62d\", \"M521.3 128C586.9 128 640 181.1 640 246.6s-53.1 118.6-118.7 118.6c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zM320 128c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zm-201.3 0c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0C53.1 365.1 0 312.1 0 246.6S53.1 128 118.7 128z\"],\n    \"symfony\": [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"],\n    \"maxcdn\": [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"],\n    \"etsy\": [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"],\n    \"facebook-messenger\": [512, 512, [], \"f39f\", \"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"],\n    \"audible\": [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"],\n    \"think-peaks\": [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"],\n    \"bilibili\": [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"],\n    \"erlang\": [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"],\n    \"x-twitter\": [512, 512, [], \"e61b\", \"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"],\n    \"cotton-bureau\": [512, 512, [], \"f89e\", \"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"],\n    \"dashcube\": [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"],\n    \"42-group\": [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\"],\n    \"stack-exchange\": [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"],\n    \"elementor\": [512, 512, [], \"f430\", \"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\"],\n    \"square-pied-piper\": [448, 512, [\"pied-piper-square\"], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"],\n    \"creative-commons-nd\": [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"],\n    \"palfed\": [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"],\n    \"superpowers\": [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"],\n    \"resolving\": [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"],\n    \"xbox\": [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"],\n    \"square-web-awesome-stroke\": [448, 512, [], \"e684\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm235 81.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"],\n    \"searchengin\": [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"],\n    \"tiktok\": [448, 512, [], \"e07b\", \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"],\n    \"square-facebook\": [448, 512, [\"facebook-square\"], \"f082\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h98.2V334.2H109.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H255V480H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"],\n    \"renren\": [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"],\n    \"linux\": [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"],\n    \"glide\": [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"],\n    \"linkedin\": [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"],\n    \"hubspot\": [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"],\n    \"deploydog\": [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"],\n    \"twitch\": [512, 512, [], \"f1e8\", \"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\"],\n    \"flutter\": [448, 512, [], \"e694\", \"M429.5 236.3L291.7 374.1 429.5 512H272l-59.1-59.1-78.8-78.8L272 236.3H429.5zM272 0L16 256l78.8 78.8L429.5 0H272z\"],\n    \"ravelry\": [512, 512, [], \"f2d9\", \"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\"],\n    \"mixer\": [512, 512, [], \"e056\", \"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\"],\n    \"square-lastfm\": [448, 512, [\"lastfm-square\"], \"f203\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM210.7 280.8c-1.8-5.5-3.4-10.8-5-15.9c-12.9-41.9-21-68.4-58-68.4c-22.4 0-45.1 16.1-45.1 61.2c0 35.2 18 57.2 43.3 57.2c28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8c0-57.9 28.6-92 82.5-92c67.9 0 79.3 35.3 96.4 88.4c1.4 4.4 2.9 8.9 4.4 13.5c8.8 26.8 24.2 46.2 61.2 46.2c24.9 0 38.1-5.5 38.1-19.1c0-17.5-16.9-21.2-40-26.4c-3.2-.7-6.5-1.4-9.9-2.2c-30.4-7.3-42.5-23.1-42.5-48c0-40 32.3-52.4 65.2-52.4c37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4c-16.1 0-26 7.3-26 19.8c0 11 4.8 17.6 20.9 21.3c2.2 .5 4.5 1 6.7 1.4c31.1 6.5 65.1 13.7 65.1 56.1c.1 36.7-30.7 50.6-76.1 50.6c-63.4 0-85.4-28.6-97.1-64.1z\"],\n    \"vimeo\": [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"],\n    \"mendeley\": [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"],\n    \"uniregistry\": [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"],\n    \"figma\": [384, 512, [], \"f799\", \"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\"],\n    \"creative-commons-remix\": [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"],\n    \"cc-amazon-pay\": [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"],\n    \"dropbox\": [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"],\n    \"instagram\": [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"],\n    \"cmplid\": [640, 512, [], \"e360\", \"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\"],\n    \"upwork\": [641, 512, [], \"e641\", \"M494.7 295.6c-50.3 0-83.5-38.9-92.8-53.9c11.9-95.3 46.8-125.4 92.8-125.4c45.5 0 80.9 36.4 80.9 89.7s-35.4 89.7-80.9 89.7zm0-237.8c-81.9 0-127.8 53.4-141 108.4c-14.9-28-25.9-65.5-34.5-100.3H206v141c0 51.1-23.3 89-68.8 89s-71.6-37.8-71.6-89l.5-141H.8v141c0 41.1 13.3 78.4 37.6 105.1c25 27.5 59.2 41.8 98.8 41.8c78.8 0 133.8-60.4 133.8-146.9V112.1c8.2 31.2 27.8 91.1 65.3 143.6l-35 199.4h66.4l23.1-141.3c7.6 6.3 15.7 12 24.2 17c22.2 14 47.7 21.9 73.9 22.8c0 0 4 .2 6.1 .2c81.2 0 145.9-62.9 145.9-147.8s-64.8-148.1-146-148.1z\"],\n    \"facebook\": [512, 512, [62000], \"f09a\", \"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z\"],\n    \"gripfire\": [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"],\n    \"jedi-order\": [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"],\n    \"uikit\": [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"],\n    \"fort-awesome-alt\": [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"],\n    \"phabricator\": [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"],\n    \"ussunnah\": [482, 512, [], \"f407\", \"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\"],\n    \"earlybirds\": [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"],\n    \"trade-federation\": [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"],\n    \"autoprefixer\": [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"],\n    \"whatsapp\": [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"],\n    \"square-upwork\": [448, 512, [], \"e67c\", \"M56 32l336 0c30.9 0 56 25.1 56 56l0 336c0 30.9-25.1 56-56 56L56 480c-30.9 0-56-25.1-56-56L0 88C0 57.1 25.1 32 56 32zM270.9 274.2c6.6-52.9 25.9-69.5 51.4-69.5c25.3 0 44.9 20.2 44.9 49.7s-19.7 49.7-44.9 49.7c-27.9 0-46.3-21.5-51.4-29.9zm-26.7-41.8c-8.2-15.5-14.3-36.3-19.2-55.6l-29.7 0-33.2 0 0 78.1c0 28.4-12.9 49.4-38.2 49.4s-39.8-20.9-39.8-49.3l.3-78.1-36.2 0 0 78.1c0 22.8 7.4 43.5 20.9 58.2c13.9 15.2 32.8 23.2 54.8 23.2c43.7 0 74.2-33.5 74.2-81.5l0-52.5c4.6 17.3 15.4 50.5 36.2 79.7L215 392.6l36.8 0 12.8-78.4c4.2 3.5 8.7 6.6 13.4 9.4c12.3 7.8 26.4 12.2 40.9 12.6l.1 0c.5 0 1.1 0 1.6 0c.6 0 1.1 0 1.7 0c45.1 0 80.9-34.9 80.9-81.9s-35.9-82.2-80.9-82.2c-45.4 0-70.9 29.7-78.1 60.1z\"],\n    \"slideshare\": [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"],\n    \"google-play\": [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"],\n    \"viadeo\": [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"],\n    \"line\": [512, 512, [], \"f3c0\", \"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\"],\n    \"google-drive\": [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"],\n    \"servicestack\": [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"],\n    \"simplybuilt\": [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"],\n    \"bitbucket\": [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"],\n    \"imdb\": [448, 512, [], \"f2d8\", \"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\"],\n    \"deezer\": [576, 512, [], \"e077\", \"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\"],\n    \"raspberry-pi\": [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"],\n    \"jira\": [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"],\n    \"docker\": [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"],\n    \"screenpal\": [512, 512, [], \"e570\", \"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\"],\n    \"bluetooth\": [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"],\n    \"gitter\": [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"],\n    \"d-and-d\": [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"],\n    \"microblog\": [448, 512, [], \"e01a\", \"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\"],\n    \"cc-diners-club\": [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"],\n    \"gg-circle\": [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"],\n    \"pied-piper-hat\": [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"],\n    \"kickstarter-k\": [448, 512, [], \"f3bc\", \"M356.6 256.2l40.8-40.5c42.2-41.9 42.2-110.3 0-152.1s-111-41.9-153.2 0L229.3 78.4C209.6 50.3 177.1 32 140.2 32C80.5 32 32 80.2 32 139.5V372.5C32 431.9 80.5 480 140.2 480c37.1 0 69.3-18.3 89-46.4l14.9 14.7c42.2 41.9 111 41.9 153.2 0s42.2-110.3 0-152.1l-40.8-40z\"],\n    \"yandex\": [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"],\n    \"readme\": [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"],\n    \"html5\": [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"],\n    \"sellsy\": [640, 512, [], \"f213\", \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"],\n    \"square-web-awesome\": [448, 512, [], \"e683\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM235 177.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"],\n    \"sass\": [640, 512, [], \"f41e\", \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"],\n    \"wirsindhandwerk\": [512, 512, [\"wsh\"], \"e2d0\", \"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\"],\n    \"buromobelexperte\": [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"],\n    \"salesforce\": [640, 512, [], \"f83b\", \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"],\n    \"octopus-deploy\": [512, 512, [], \"e082\", \"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\"],\n    \"medapps\": [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"],\n    \"ns8\": [640, 512, [], \"f3d5\", \"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\"],\n    \"pinterest-p\": [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"],\n    \"apper\": [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"],\n    \"fort-awesome\": [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"],\n    \"waze\": [512, 512, [], \"f83f\", \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"],\n    \"bluesky\": [512, 512, [], \"e671\", \"M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z\"],\n    \"cc-jcb\": [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"],\n    \"snapchat\": [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\"],\n    \"fantasy-flight-games\": [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"],\n    \"rust\": [512, 512, [], \"e07a\", \"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\"],\n    \"wix\": [640, 512, [], \"f5cf\", \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"],\n    \"square-behance\": [448, 512, [\"behance-square\"], \"f1b5\", \"M155.3 318.4c17.2 0 31.2-6.1 31.2-25.4c0-19.7-11.7-27.4-30.3-27.5h-46v52.9h45.1zm-5.4-129.6H110.3v44.8H153c15.1 0 25.8-6.6 25.8-22.9c0-17.7-13.7-21.9-28.9-21.9zm129.5 74.8h62.2c-1.7-18.5-11.3-29.7-30.5-29.7c-18.3 0-30.5 11.4-31.7 29.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM349.5 185H271.7V166.1h77.8V185zM193.7 243.7c23.6 6.7 35 27.5 35 51.6c0 39-32.7 55.7-67.6 55.9H68v-192h90.5c32.9 0 61.4 9.3 61.4 47.5c0 19.3-9 28.8-26.2 37zm118.7-38.6c43.5 0 67.6 34.3 67.6 75.4c0 1.6-.1 3.3-.2 5c0 .8-.1 1.5-.1 2.2H279.5c0 22.2 11.7 35.3 34.1 35.3c11.6 0 26.5-6.2 30.2-18.1h33.7c-10.4 31.9-31.9 46.8-65.1 46.8c-43.8 0-71.1-29.7-71.1-73c0-41.8 28.7-73.6 71.1-73.6z\"],\n    \"supple\": [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"],\n    \"webflow\": [640, 512, [], \"e65c\", \"M640 64L435.8 463.2H244l85.5-165.5h-3.8C255.1 389.3 149.9 449.5 0 463.2V300.1s95.9-5.7 152.3-64.9H0V64H171.1V204.8l3.8 0L244.9 64H374.3V203.9l3.8 0L450.7 64H640z\"],\n    \"rebel\": [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"],\n    \"css3\": [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"],\n    \"staylinked\": [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"],\n    \"kaggle\": [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"],\n    \"space-awesome\": [512, 512, [], \"e5ac\", \"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\"],\n    \"deviantart\": [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"],\n    \"cpanel\": [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"],\n    \"goodreads-g\": [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"],\n    \"square-git\": [448, 512, [\"git-square\"], \"f1d2\", \"M120.8 335.5c-5.9-.4-12.6-.8-20.2-1.3c-3.3 4.1-6.6 8.4-6.6 13.5c0 18.5 65.5 18.5 65.5-1.5c0-8.3-7.4-8.7-38.8-10.7zm7.8-117.9c-32.3 0-33.7 44.5-.7 44.5c32.5 0 31.7-44.5 .7-44.5zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM243.9 172.2c-14.5 0-22.9-8.4-22.9-22.9c0-14.5 8.4-22.3 22.9-22.3c14.7 0 23.1 7.8 23.1 22.3s-8.4 22.9-23.1 22.9zM149.6 195h49.5l0 21.6-23.4 1.8c4.6 5.8 9.4 14 9.4 25.7c0 48.7-57.2 47.2-74.2 42.4l-8.4 13.4c5 .3 9.8 .6 14.3 .8c56.3 3.2 80.5 4.6 80.5 38.5c0 29.2-25.7 45.7-69.9 45.7c-46 0-63.5-11.6-63.5-31.7c0-11.4 5.1-17.5 14-25.9c-8.4-3.5-11.2-9.9-11.2-16.8c0-9.6 7.4-16.3 23-30.6l.2-.2c-12.4-6.1-21.8-19.3-21.8-38.1c0-51.6 56.6-53.3 81.6-46.8zM270.5 303.1l13 1.8 0 20.1H211.1V304.9c2.7-.4 5-.7 6.9-.9c9.9-1.2 10.1-1.3 10.1-6V223.3c0-4.4-.9-4.7-10.1-7.8c-1.9-.7-4.2-1.4-6.9-2.4l2.8-20.6h52.6V298c0 4.1 .2 4.6 4.1 5.1zm106.6-10.4L384 315c-10.9 5.4-26.9 10.2-41.4 10.2c-30.2 0-41.7-12.2-41.7-40.9V217.7c0-.8 0-1.4-.2-1.8c-.8-1.2-4.2-.7-19.6-.7V192.6c22.3-2.5 31.2-13.7 34-41.4h24.2c0 33.3-.6 38 .7 38.6c.3 .1 .7 0 1.3 0h35.8v25.4H339.3v60.7c0 .2 0 .5 0 .9c-.2 6.3-.9 30.4 37.9 15.9z\"],\n    \"square-tumblr\": [448, 512, [\"tumblr-square\"], \"f174\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM256.8 416c-75.5 0-91.9-55.5-91.9-87.9v-90H135.2c-3.4 0-6.2-2.8-6.2-6.2V189.4c0-4.5 2.8-8.5 7.1-10c38.8-13.7 50.9-47.5 52.7-73.2c.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2H249.1V321c0 21.4 14.8 33.5 42.5 22.4c3-1.2 5.6-2 8-1.4c2.2 .5 3.6 2.1 4.6 4.9L318 387.1c1 3.2 2 6.7-.3 9.1c-8.5 9.1-31.2 19.8-60.9 19.8z\"],\n    \"trello\": [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"],\n    \"creative-commons-nc-jp\": [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"],\n    \"get-pocket\": [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"],\n    \"perbyte\": [448, 512, [], \"e083\", \"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\"],\n    \"grunt\": [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"],\n    \"weebly\": [512, 512, [], \"f5cc\", \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"],\n    \"connectdevelop\": [576, 512, [], \"f20e\", \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"],\n    \"leanpub\": [576, 512, [], \"f212\", \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"],\n    \"black-tie\": [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"],\n    \"themeco\": [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"],\n    \"python\": [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"],\n    \"android\": [576, 512, [], \"f17b\", \"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\"],\n    \"bots\": [640, 512, [], \"e340\", \"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\"],\n    \"free-code-camp\": [576, 512, [], \"f2c5\", \"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\"],\n    \"hornbill\": [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"],\n    \"js\": [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\n    \"ideal\": [576, 512, [], \"e013\", \"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\"],\n    \"git\": [512, 512, [], \"f1d3\", \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"],\n    \"dev\": [448, 512, [], \"f6cc\", \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"],\n    \"sketch\": [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"],\n    \"yandex-international\": [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"],\n    \"cc-amex\": [576, 512, [], \"f1f3\", \"M0 432c0 26.5 21.5 48 48 48H528c26.5 0 48-21.5 48-48v-1.1H514.3l-31.9-35.1-31.9 35.1H246.8V267.1H181L262.7 82.4h78.6l28.1 63.2V82.4h97.2L483.5 130l17-47.6H576V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80V432zm440.4-21.7L482.6 364l42 46.3H576l-68-72.1 68-72.1H525.4l-42 46.7-41.5-46.7H390.5L458 338.6l-67.4 71.6V377.1h-83V354.9h80.9V322.6H307.6V300.2h83V267.1h-122V410.3H440.4zm96.3-72L576 380.2V296.9l-39.3 41.4zm-36.3-92l36.9-100.6V246.3H576V103H515.8l-32.2 89.3L451.7 103H390.5V246.1L327.3 103H276.1L213.7 246.3h43l11.9-28.7h65.9l12 28.7h82.7V146L466 246.3h34.4zM282 185.4l19.5-46.9 19.4 46.9H282z\"],\n    \"uber\": [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"],\n    \"github\": [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"],\n    \"php\": [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"],\n    \"alipay\": [448, 512, [], \"f642\", \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"],\n    \"youtube\": [576, 512, [61802], \"f167\", \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"],\n    \"skyatlas\": [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"],\n    \"firefox-browser\": [512, 512, [], \"e007\", \"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\"],\n    \"replyd\": [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"],\n    \"suse\": [640, 512, [], \"f7d6\", \"M593.1 192.6A10.4 10.4 0 1 1 604.5 210a10.4 10.4 0 1 1 -11.4-17.4zm-47.1 12.2a38.5 38.5 0 1 1 75-17.6 38.5 38.5 0 1 1 -75 17.6zM433.7 336.7c3.2 4.6 5.8 9 7.3 13.4c1 3.1 2.4 7.3 5.5 8.9c.2 .1 .3 .2 .5 .2c5.7 2.1 20.3 1.7 20.3 1.7h26.8c2.3 0 22.4 0 21.9-2.3c-2.4-10.8-14.9-12.7-24.4-18.3c-8.7-5.2-17-11.1-20.8-21.3c-2-5.2-.8-17.4 2.6-21.8c2.5-3.2 6.1-5.3 10-6.2c4.3-.9 8.8-.1 13.1 .3c5.3 .5 10.6 1.5 15.9 2.2c10.3 1.3 20.6 1.9 31 1.6c17.1-.5 34.2-3.2 50.4-8.7c11.3-3.8 22.4-8.9 32-16.1c10.9-8.1 8.1-7.4-3-6.2c-13.3 1.4-26.6 1.6-39.9 .8c-12.4-.7-24.7-2.2-35.9-7.9c-8.8-4.6-16.4-9.1-23.4-16.2c-1-1.1-1.7-4.2 .2-6.2c1.9-1.9 5.8-.8 7 .2c12.2 10.2 30.5 18.6 49.3 19.5c10.2 .5 20.1 .7 30.4 .3c5.1-.2 12.8-.2 17.9-.3c2.6 0 9.8 .7 11.2-2.1c.4-.8 .4-1.8 .3-2.7c-1.5-40.9-4.5-86.9-47.3-106.5c-31.9-14.6-79.7-37.2-99.9-46.6c-4.7-2.2-10.2 1.3-10.2 6.5c0 13.6 .7 33.3 .7 51.1c-9.7-9.9-26-16.1-38.4-21.8c-14.1-6.5-28.7-12-43.5-16.6c-29.8-9.2-60.7-14.9-91.7-18c-35.2-3.5-71-1.8-105.7 5.3C147 115.1 90.8 142.6 48.2 182.7C22.1 207.3 1.6 242.4 .2 277.9c-2 50.3 12.1 77.3 38 105.2c41.3 44.4 130.2 50.6 166.2-2c16.2-23.7 19.7-55.8 8-82c-11.8-26.2-38.8-45.1-67.4-46c-22.2-.7-45.9 10.6-54.5 31.1c-6.5 15.7-2.8 35.1 9 47.3c4.6 4.8 10.9 8.7 17.7 7.1c4-.9 7.4-3.9 8-8c.9-6-4.4-9.9-7.6-14.5c-5.8-8.3-4.7-20.9 2.7-27.9c6.2-6 15.3-7.8 23.9-7.7c8 0 16.2 1.4 23.1 5.5c9.7 5.7 16.2 16.2 18.4 27.2c6.7 33-20.2 59.9-56.6 62c-18.6 1.1-37.6-3.8-52.1-15.5C40.1 329.9 31.1 269.4 73.2 237c40-30.7 90.4-22.8 120.2-6.8c23.8 12.8 41.5 33.6 55 56.7c6.7 11.6 12.5 23.7 17.8 36.1c5.1 11.8 9.9 23.8 20.2 32.5c6.8 5.8 15.2 5.6 24.1 5.6h50.8c6.9 0 5.2-4.6 2.2-7.7c-6.7-6.9-16.4-8.4-25.4-10.9c-20.5-5.6-18.4-32.8-12.7-32.8c18.3 0 18.9 .6 34.9 .3c23.2-.3 30.2-1.7 48.3 5c9.7 3.6 19 13.1 25.1 21.7z\"],\n    \"jenkins\": [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"],\n    \"twitter\": [512, 512, [], \"f099\", \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"],\n    \"rockrms\": [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"],\n    \"pinterest\": [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"],\n    \"buffer\": [448, 512, [], \"f837\", \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"],\n    \"npm\": [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"],\n    \"yammer\": [512, 512, [], \"f840\", \"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\"],\n    \"btc\": [384, 512, [], \"f15a\", \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"],\n    \"dribbble\": [512, 512, [], \"f17d\", \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"],\n    \"stumbleupon-circle\": [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"],\n    \"internet-explorer\": [512, 512, [], \"f26b\", \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"],\n    \"stubber\": [448, 512, [], \"e5c7\", \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\"],\n    \"telegram\": [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\"],\n    \"old-republic\": [496, 512, [], \"f510\", \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"],\n    \"odysee\": [512, 512, [], \"e5c6\", \"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\"],\n    \"square-whatsapp\": [448, 512, [\"whatsapp-square\"], \"f40c\", \"M92.1 254.6c0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6L152 365.2l4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8c0-35.2-15.2-68.3-40.1-93.2c-25-25-58-38.7-93.2-38.7c-72.7 0-131.8 59.1-131.9 131.8zM274.8 330c-12.6 1.9-22.4 .9-47.5-9.9c-36.8-15.9-61.8-51.5-66.9-58.7c-.4-.6-.7-.9-.8-1.1c-2-2.6-16.2-21.5-16.2-41c0-18.4 9-27.9 13.2-32.3c.3-.3 .5-.5 .7-.8c3.6-4 7.9-5 10.6-5c2.6 0 5.3 0 7.6 .1c.3 0 .5 0 .8 0c2.3 0 5.2 0 8.1 6.8c1.2 2.9 3 7.3 4.9 11.8c3.3 8 6.7 16.3 7.3 17.6c1 2 1.7 4.3 .3 6.9c-3.4 6.8-6.9 10.4-9.3 13c-3.1 3.2-4.5 4.7-2.3 8.6c15.3 26.3 30.6 35.4 53.9 47.1c4 2 6.3 1.7 8.6-1c2.3-2.6 9.9-11.6 12.5-15.5c2.6-4 5.3-3.3 8.9-2s23.1 10.9 27.1 12.9c.8 .4 1.5 .7 2.1 1c2.8 1.4 4.7 2.3 5.5 3.6c.9 1.9 .9 9.9-2.4 19.1c-3.3 9.3-19.1 17.7-26.7 18.8zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM148.1 393.9L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5c29.9 30 47.9 69.8 47.9 112.2c0 87.4-72.7 158.5-160.1 158.5c-26.6 0-52.7-6.7-75.8-19.3z\"],\n    \"node-js\": [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"],\n    \"edge-legacy\": [512, 512, [], \"e078\", \"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\"],\n    \"slack\": [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"],\n    \"medrt\": [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"],\n    \"usb\": [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"],\n    \"tumblr\": [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"],\n    \"vaadin\": [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"],\n    \"quora\": [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"],\n    \"square-x-twitter\": [448, 512, [], \"e61a\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z\"],\n    \"reacteurope\": [576, 512, [], \"f75d\", \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"],\n    \"medium\": [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\"],\n    \"amilia\": [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"],\n    \"mixcloud\": [640, 512, [], \"f289\", \"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\"],\n    \"flipboard\": [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"],\n    \"viacoin\": [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"],\n    \"critical-role\": [448, 512, [], \"f6c9\", \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"],\n    \"sitrox\": [448, 512, [], \"e44a\", \"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\"],\n    \"discourse\": [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"],\n    \"joomla\": [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"],\n    \"mastodon\": [448, 512, [], \"f4f6\", \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"],\n    \"airbnb\": [448, 512, [], \"f834\", \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"],\n    \"wolf-pack-battalion\": [512, 512, [], \"f514\", \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"],\n    \"buy-n-large\": [576, 512, [], \"f8a6\", \"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\"],\n    \"gulp\": [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"],\n    \"creative-commons-sampling-plus\": [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"],\n    \"strava\": [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"],\n    \"ember\": [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"],\n    \"canadian-maple-leaf\": [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"],\n    \"teamspeak\": [576, 512, [], \"f4f9\", \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\"],\n    \"pushed\": [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"],\n    \"wordpress-simple\": [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"],\n    \"nutritionix\": [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"],\n    \"wodu\": [640, 512, [], \"e088\", \"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\"],\n    \"google-pay\": [640, 512, [], \"e079\", \"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\"],\n    \"intercom\": [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"],\n    \"zhihu\": [640, 512, [], \"f63f\", \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"],\n    \"korvue\": [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"],\n    \"pix\": [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"],\n    \"steam-symbol\": [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"]\n  };\n\n  bunker(() => {\n    defineIcons('fab', icons);\n    defineIcons('fa-brands', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  let _WINDOW = {};\n  let _DOCUMENT = {};\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n  const {\n    userAgent = ''\n  } = _WINDOW.navigator || {};\n  const WINDOW = _WINDOW;\n  const DOCUMENT = _DOCUMENT;\n  const IS_BROWSER = !!WINDOW.document;\n  const IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  const IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function _defineProperty(e, r, t) {\n    return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n      value: t,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }) : e[r] = t, e;\n  }\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _toPrimitive(t, r) {\n    if (\"object\" != typeof t || !t) return t;\n    var e = t[Symbol.toPrimitive];\n    if (void 0 !== e) {\n      var i = e.call(t, r || \"default\");\n      if (\"object\" != typeof i) return i;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === r ? String : Number)(t);\n  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n\n  var S = {\n      classic: {\n        fa: \"solid\",\n        fas: \"solid\",\n        \"fa-solid\": \"solid\",\n        far: \"regular\",\n        \"fa-regular\": \"regular\",\n        fal: \"light\",\n        \"fa-light\": \"light\",\n        fat: \"thin\",\n        \"fa-thin\": \"thin\",\n        fab: \"brands\",\n        \"fa-brands\": \"brands\"\n      },\n      duotone: {\n        fa: \"solid\",\n        fad: \"solid\",\n        \"fa-solid\": \"solid\",\n        \"fa-duotone\": \"solid\",\n        fadr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fadl: \"light\",\n        \"fa-light\": \"light\",\n        fadt: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      sharp: {\n        fa: \"solid\",\n        fass: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasl: \"light\",\n        \"fa-light\": \"light\",\n        fast: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      \"sharp-duotone\": {\n        fa: \"solid\",\n        fasds: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasdr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasdl: \"light\",\n        \"fa-light\": \"light\",\n        fasdt: \"thin\",\n        \"fa-thin\": \"thin\"\n      }\n    };\n  var s = \"classic\";\n  var G = {\n      classic: {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\",\n        100: \"fat\"\n      },\n      duotone: {\n        900: \"fad\",\n        400: \"fadr\",\n        300: \"fadl\",\n        100: \"fadt\"\n      },\n      sharp: {\n        900: \"fass\",\n        400: \"fasr\",\n        300: \"fasl\",\n        100: \"fast\"\n      },\n      \"sharp-duotone\": {\n        900: \"fasds\",\n        400: \"fasdr\",\n        300: \"fasdl\",\n        100: \"fasdt\"\n      }\n    };\n  var xt = {\n      classic: {\n        solid: \"fas\",\n        regular: \"far\",\n        light: \"fal\",\n        thin: \"fat\",\n        brands: \"fab\"\n      },\n      duotone: {\n        solid: \"fad\",\n        regular: \"fadr\",\n        light: \"fadl\",\n        thin: \"fadt\"\n      },\n      sharp: {\n        solid: \"fass\",\n        regular: \"fasr\",\n        light: \"fasl\",\n        thin: \"fast\"\n      },\n      \"sharp-duotone\": {\n        solid: \"fasds\",\n        regular: \"fasdr\",\n        light: \"fasdl\",\n        thin: \"fasdt\"\n      }\n    };\n  var St = {\n      kit: {\n        fak: \"kit\",\n        \"fa-kit\": \"kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"kit-duotone\",\n        \"fa-kit-duotone\": \"kit-duotone\"\n      }\n    };\n  var Ct = {\n    kit: {\n      \"fa-kit\": \"fak\"\n    },\n    \"kit-duotone\": {\n      \"fa-kit-duotone\": \"fakd\"\n    }\n  };\n  var Wt = {\n      kit: {\n        fak: \"fa-kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"fa-kit-duotone\"\n      }\n    };\n  var Et = {\n      kit: {\n        kit: \"fak\"\n      },\n      \"kit-duotone\": {\n        \"kit-duotone\": \"fakd\"\n      }\n    };\n\n  var ua = {\n      classic: {\n        \"fa-brands\": \"fab\",\n        \"fa-duotone\": \"fad\",\n        \"fa-light\": \"fal\",\n        \"fa-regular\": \"far\",\n        \"fa-solid\": \"fas\",\n        \"fa-thin\": \"fat\"\n      },\n      duotone: {\n        \"fa-regular\": \"fadr\",\n        \"fa-light\": \"fadl\",\n        \"fa-thin\": \"fadt\"\n      },\n      sharp: {\n        \"fa-solid\": \"fass\",\n        \"fa-regular\": \"fasr\",\n        \"fa-light\": \"fasl\",\n        \"fa-thin\": \"fast\"\n      },\n      \"sharp-duotone\": {\n        \"fa-solid\": \"fasds\",\n        \"fa-regular\": \"fasdr\",\n        \"fa-light\": \"fasdl\",\n        \"fa-thin\": \"fasdt\"\n      }\n    },\n    ga = {\n      classic: {\n        fab: \"fa-brands\",\n        fad: \"fa-duotone\",\n        fal: \"fa-light\",\n        far: \"fa-regular\",\n        fas: \"fa-solid\",\n        fat: \"fa-thin\"\n      },\n      duotone: {\n        fadr: \"fa-regular\",\n        fadl: \"fa-light\",\n        fadt: \"fa-thin\"\n      },\n      sharp: {\n        fass: \"fa-solid\",\n        fasr: \"fa-regular\",\n        fasl: \"fa-light\",\n        fast: \"fa-thin\"\n      },\n      \"sharp-duotone\": {\n        fasds: \"fa-solid\",\n        fasdr: \"fa-regular\",\n        fasdl: \"fa-light\",\n        fasdt: \"fa-thin\"\n      }\n    };\n\n  const NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  const PRODUCTION = (() => {\n    try {\n      return \"production\" === 'production';\n    } catch (e$$1) {\n      return false;\n    }\n  })();\n  function familyProxy(obj) {\n    // Defaults to the classic family if family is not available\n    return new Proxy(obj, {\n      get(target, prop) {\n        return prop in target ? target[prop] : target[s];\n      }\n    });\n  }\n  const _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n  // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n  // {'fa-duotone': 'duotone'}\n  _PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    'fa-duotone': 'duotone'\n  }), S[s]), St['kit']), St['kit-duotone']);\n  const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\n  const _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n  // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n  _STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    duotone: 'fad'\n  }), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\n  const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\n  const _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n  _PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\n  const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\n  const _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n  _LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\n  const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\n  const _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\n  const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      fn(...args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  const w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce((acc, iconName) => {\n      const icon = icons[iconName];\n      const expanded = !!icon.icon;\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n      return acc;\n    }, {});\n  }\n  function defineIcons(prefix, icons) {\n    let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const {\n      skipHooks = false\n    } = params;\n    const normalized = normalizeIcons(icons);\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M170.5 51.6L151.5 80l145 0-19-28.4c-1.5-2.2-4-3.6-6.7-3.6l-93.7 0c-2.7 0-5.2 1.3-6.7 3.6zm147-26.6L354.2 80 368 80l48 0 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 304c0 44.2-35.8 80-80 80l-224 0c-44.2 0-80-35.8-80-80l0-304-8 0c-13.3 0-24-10.7-24-24S10.7 80 24 80l8 0 48 0 13.8 0 36.7-55.1C140.9 9.4 158.4 0 177.1 0l93.7 0c18.7 0 36.2 9.4 46.6 24.9zM80 128l0 304c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-304L80 128zm80 64l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M160 368c26.5 0 48 21.5 48 48l0 16 72.5-54.4c8.3-6.2 18.4-9.6 28.8-9.6L448 368c8.8 0 16-7.2 16-16l0-288c0-8.8-7.2-16-16-16L64 48c-8.8 0-16 7.2-16 16l0 288c0 8.8 7.2 16 16 16l96 0zm48 124l-.2 .2-5.1 3.8-17.1 12.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3l0-21.3 0-6.4 0-.3 0-4 0-48-48 0-48 0c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0L448 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64l-138.7 0L208 492z\"],\n    \"file-lines\": [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm56 256c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l80 0 0 56-80 0 0-56zm0 104l80 0 0 64-80 0 0-64zm128 0l96 0 0 64-96 0 0-64zm144 0l80 0 0 64-80 0 0-64zm80-48l-80 0 0-56 80 0 0 56zm0 160l0 40c0 8.8-7.2 16-16 16l-64 0 0-56 80 0zm-128 0l0 56-96 0 0-56 96 0zm-144 0l0 56-64 0c-8.8 0-16-7.2-16-16l0-40 80 0zM272 248l-96 0 0-56 96 0 0 56z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M448 128l-177.6 0c1 5.2 1.6 10.5 1.6 16l0 16 32 0 144 0c8.8 0 16-7.2 16-16s-7.2-16-16-16zM224 144c0-17.7-14.3-32-32-32c0 0 0 0 0 0l-24 0c-66.3 0-120 53.7-120 120l0 48c0 52.5 33.7 97.1 80.7 113.4c-.5-3.1-.7-6.2-.7-9.4c0-20 9.2-37.9 23.6-49.7c-4.9-9-7.6-19.4-7.6-30.3c0-15.1 5.3-29 14-40c-8.8-11-14-24.9-14-40l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-40 0-40zM192 64s0 0 0 0c18 0 34.6 6 48 16l208 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-82 0c1.3 5.1 2 10.5 2 16c0 25.3-14.7 47.2-36 57.6c2.6 7 4 14.5 4 22.4c0 20-9.2 37.9-23.6 49.7c4.9 9 7.6 19.4 7.6 30.3c0 35.3-28.7 64-64 64l-64 0-24 0C75.2 448 0 372.8 0 280l0-48C0 139.2 75.2 64 168 64l24 0zm64 336c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0zm16-176c0 5.5-.7 10.9-2 16l2 0 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0 16zm-24 64l-40 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-24 0z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zm40-89.3s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM183.2 132.6c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L176 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L242.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm160 0c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L336 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L402.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm6.3 175.8c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5c10.4-16.1-6.8-32.5-25.5-28.1z\"],\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M384 48c8.8 0 16 7.2 16 16l0 384c0 8.8-7.2 16-16 16L96 464c-8.8 0-16-7.2-16-16L80 64c0-8.8 7.2-16 16-16l288 0zM96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM240 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 192c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64z\"],\n    \"comments\": [640, 512, [128490, 61670], \"f086\", \"M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128s-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6c-10.4-2-21.2-.6-30.7 4.2c-4.1 2.1-8.3 4.1-12.6 6c-16 7.2-32.9 13.5-49.9 18c2.8-4.6 5.4-9.1 7.9-13.6c1.1-1.9 2.2-3.9 3.2-5.9zM208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 41.8 17.2 80.1 45.9 110.3c-.9 1.7-1.9 3.5-2.8 5.1c-10.3 18.4-22.3 36.5-36.6 52.1c-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7c4.8-2.2 9.6-4.5 14.2-6.8c15.1 3 30.9 4.5 47.1 4.5zM432 480c16.2 0 31.9-1.6 47.1-4.5c4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5c3.8-8.8 2-19-4.6-25.9c-14.2-15.6-26.2-33.7-36.6-52.1c-.9-1.7-1.9-3.4-2.8-5.1C622.8 384.1 640 345.8 640 304c0-94.4-87.9-171.5-198.2-175.8c4.1 15.2 6.2 31.2 6.2 47.8l0 .6c87.2 6.7 144 67.5 144 127.4c0 28-11.4 54.9-32.7 77.2c-14.3 15-17.3 37.6-7.5 55.8c1.1 2 2.2 4 3.2 5.9c2.5 4.5 5.2 9 7.9 13.6c-17-4.5-33.9-10.7-49.9-18c-4.3-1.9-8.5-3.9-12.6-6c-9.5-4.8-20.3-6.2-30.7-4.2c-12.1 2.4-24.8 3.6-37.8 3.6c-61.7 0-110-26.5-136.8-62.3c-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M104.6 48L64 48C28.7 48 0 76.7 0 112L0 384c0 35.3 28.7 64 64 64l96 0 0-48-96 0c-8.8 0-16-7.2-16-16l0-272c0-8.8 7.2-16 16-16l16 0c0 17.7 14.3 32 32 32l72.4 0C202 108.4 227.6 96 256 96l62 0c-7.1-27.6-32.2-48-62-48l-40.6 0C211.6 20.9 188.2 0 160 0s-51.6 20.9-55.4 48zM144 56a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM448 464l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l140.1 0L464 243.9 464 448c0 8.8-7.2 16-16 16zM256 512l192 0c35.3 0 64-28.7 64-64l0-204.1c0-12.7-5.1-24.9-14.1-33.9l-67.9-67.9c-9-9-21.2-14.1-33.9-14.1L256 128c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4l0-23.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 22.9c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm116-98.9c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 416l0-37.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 37.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM160.4 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 336c-13.3 0-24 10.7-24 24s10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0zM160 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm144-80a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M400 96c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320zM384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM152 232l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm306.7 69.1L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M384 432c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0zm64-16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 41.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 427.1 257.4 432 240 432c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-68.9s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M297.2 248.9C311.6 228.3 320 203.2 320 176c0-70.7-57.3-128-128-128S64 105.3 64 176c0 27.2 8.4 52.3 22.8 72.9c3.7 5.3 8.1 11.3 12.8 17.7c0 0 0 0 0 0c12.9 17.7 28.3 38.9 39.8 59.8c10.4 19 15.7 38.8 18.3 57.5L109 384c-2.2-12-5.9-23.7-11.8-34.5c-9.9-18-22.2-34.9-34.5-51.8c0 0 0 0 0 0s0 0 0 0c-5.2-7.1-10.4-14.2-15.4-21.4C27.6 247.9 16 213.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176c0 37.3-11.6 71.9-31.4 100.3c-5 7.2-10.2 14.3-15.4 21.4c0 0 0 0 0 0s0 0 0 0c-12.3 16.8-24.6 33.7-34.5 51.8c-5.9 10.8-9.6 22.5-11.8 34.5l-48.6 0c2.6-18.7 7.9-38.6 18.3-57.5c11.5-20.9 26.9-42.1 39.8-59.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0c4.7-6.4 9-12.4 12.7-17.7zM192 128c-26.5 0-48 21.5-48 48c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16s-7.2 16-16 16zm0 384c-44.2 0-80-35.8-80-80l0-16 160 0 0 16c0 44.2-35.8 80-80 80z\"],\n    \"flag\": [448, 512, [127988, 61725], \"f024\", \"M48 24C48 10.7 37.3 0 24 0S0 10.7 0 24L0 64 0 350.5 0 400l0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-100 80.3-20.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30l0-279.7c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L48 52l0-28zm0 77.5l96.6-24.2c27-6.7 55.5-3.6 80.4 8.8c54.9 27.4 118.7 29.7 175 6.8l0 241.8-24.4 9.1c-33.7 12.6-71.2 10.7-103.4-5.4c-48.2-24.1-103.3-30.1-155.6-17.1L48 338.5l0-237z\"],\n    \"square-check\": [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM103 135c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9zm192 0c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M435.4 361.4l-89.7-6c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-22 87.2c-14.4 3.2-29.4 4.8-44.8 4.8s-30.3-1.7-44.8-4.8l-22-87.2c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-89.7 6C61.7 335.9 51.9 307 49 276.2L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15L100.4 118c19.9-22.4 44.6-40.5 72.4-52.7l69.1 57.6c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l69.1-57.6c27.8 12.2 52.5 30.3 72.4 52.7l-33.4 83.4c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9L463 276.2c-3 30.8-12.7 59.7-27.6 85.2zM256 48l.9 0-1.8 0 .9 0zM56.7 196.2c.9-3 1.9-6.1 2.9-9.1l-2.9 9.1zM132 423l3.8 2.7c-1.3-.9-2.5-1.8-3.8-2.7zm248.1-.1c-1.3 1-2.6 2-4 2.9l4-2.9zm75.2-226.7l-3-9.2c1.1 3 2.1 6.1 3 9.2zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M441 58.9L453.1 71c9.4 9.4 9.4 24.6 0 33.9L424 134.1 377.9 88 407 58.9c9.4-9.4 24.6-9.4 33.9 0zM209.8 256.2L344 121.9 390.1 168 255.8 302.2c-2.9 2.9-6.5 5-10.4 6.1l-58.5 16.7 16.7-58.5c1.1-3.9 3.2-7.5 6.1-10.4zM373.1 25L175.8 222.2c-8.7 8.7-15 19.4-18.3 31.1l-28.6 100c-2.4 8.4-.1 17.4 6.1 23.6s15.2 8.5 23.6 6.1l100-28.6c11.8-3.4 22.5-9.7 31.1-18.3L487 138.9c28.1-28.1 28.1-73.7 0-101.8L474.9 25C446.8-3.1 401.2-3.1 373.1 25zM88 64C39.4 64 0 103.4 0 152L0 424c0 48.6 39.4 88 88 88l272 0c48.6 0 88-39.4 88-88l0-112c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 112c0 22.1-17.9 40-40 40L88 464c-22.1 0-40-17.9-40-40l0-272c0-22.1 17.9-40 40-40l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L88 64z\"],\n    \"hourglass-half\": [384, 512, [\"hourglass-2\"], \"f252\", \"M0 24C0 10.7 10.7 0 24 0L360 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 19c0 40.3-16 79-44.5 107.5L225.9 256l81.5 81.5C336 366 352 404.7 352 445l0 19 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-19c0-40.3 16-79 44.5-107.5L158.1 256 76.5 174.5C48 146 32 107.3 32 67l0-19-8 0C10.7 48 0 37.3 0 24zM110.5 371.5c-3.9 3.9-7.5 8.1-10.7 12.5l184.4 0c-3.2-4.4-6.8-8.6-10.7-12.5L192 289.9l-81.5 81.5zM284.2 128C297 110.4 304 89 304 67l0-19L80 48l0 19c0 22.1 7 43.4 19.8 61l184.4 0z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M256 0c-25.3 0-47.2 14.7-57.6 36c-7-2.6-14.5-4-22.4-4c-35.3 0-64 28.7-64 64l0 165.5-2.7-2.7c-25-25-65.5-25-90.5 0s-25 65.5 0 90.5L106.5 437c48 48 113.1 75 181 75l8.5 0 8 0c1.5 0 3-.1 4.5-.4c91.7-6.2 165-79.4 171.1-171.1c.3-1.5 .4-3 .4-4.5l0-176c0-35.3-28.7-64-64-64c-5.5 0-10.9 .7-16 2l0-2c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4C303.2 14.7 281.3 0 256 0zM240 96.1l0-.1 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 31.9 0 .1 0 136c0 13.3 10.7 24 24 24s24-10.7 24-24l0-136c0 0 0 0 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16l0 55.9c0 0 0 .1 0 .1l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-71.9c0 0 0-.1 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16l0 172.9c-.1 .6-.1 1.3-.2 1.9c-3.4 69.7-59.3 125.6-129 129c-.6 0-1.3 .1-1.9 .2l-4.9 0-8.5 0c-55.2 0-108.1-21.9-147.1-60.9L52.7 315.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L119 336.4c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2L160 96c0-8.8 7.2-16 16-16c8.8 0 16 7.1 16 15.9L192 232c0 13.3 10.7 24 24 24s24-10.7 24-24l0-135.9z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M170.2 80.8C161 47 180.8 12 214.6 2.4c34-9.6 69.4 10.2 79 44.2l30.3 107.1L337.1 84c6.6-34.7 40.1-57.5 74.8-50.9c31.4 6 53 33.9 52 64.9c10-2.6 20.8-2.8 31.5-.1c34.3 8.6 55.1 43.3 46.6 77.6L486.7 397.2C469.8 464.7 409.2 512 339.6 512l-33.7 0c-56.9 0-112.2-19-157.2-53.9l-92-71.6c-27.9-21.7-32.9-61.9-11.2-89.8s61.9-32.9 89.8-11.2l17 13.2L100.5 167.5c-13-32.9 3.2-70.1 36-83c11.1-4.4 22.7-5.4 33.7-3.7zm77.1-21.2c-2.4-8.5-11.2-13.4-19.7-11s-13.4 11.2-11 19.7l54.8 182.4c3.5 12.3-3.3 25.2-15.4 29.3s-25.3-2-30-13.9L174.9 138.1c-3.2-8.2-12.5-12.3-20.8-9s-12.3 12.5-9 20.8l73.3 185.6c12 30.3-23.7 57-49.4 37l-63.1-49.1c-7-5.4-17-4.2-22.5 2.8s-4.2 17 2.8 22.5l92 71.6c36.5 28.4 81.4 43.8 127.7 43.8l33.7 0c47.5 0 89-32.4 100.5-78.5l55.4-221.6c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-26 104C435.6 271.8 425 280 413 280c-16.5 0-28.9-15-25.8-31.2L415.7 99c1.7-8.7-4-17.1-12.7-18.7s-17.1 4-18.7 12.7L352.5 260c-2.2 11.6-12.4 20-24.2 20c-11 0-20.7-7.3-23.7-17.9L247.4 59.6z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 25.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 411.1 257.4 416 240 416c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.8-.5-.1-.1-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4l0-52.4c-8.9-8-16.7-17.1-23.1-27.1c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1c-6.4 9.9-14.2 19-23 27l0 52.5c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 416l0-37.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 37.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M104 0C90.7 0 80 10.7 80 24c0 11.2 7.6 20.6 18 23.2c-7.8 8-16.1 17-24.4 27C38.2 116.7 0 178.8 0 250.9c0 44.8 24.6 72.2 48 87.8L48 352l48 0 0-27c0-9-5-17.2-13-21.3c-18-9.3-35-24.7-35-52.7c0-55.5 29.8-106.8 62.4-145.9c16-19.2 32.1-34.8 44.2-45.5c1.9-1.7 3.7-3.2 5.3-4.6c1.7 1.4 3.4 3 5.3 4.6c12.1 10.7 28.2 26.3 44.2 45.5c5.3 6.3 10.5 13 15.5 20L159 191c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57.8-57.8c12.8 25.9 21.2 54.3 21.2 83.8c0 28-17 43.4-35 52.7c-8 4.1-13 12.3-13 21.3l0 27 48 0 0-13.3c23.4-15.6 48-42.9 48-87.8c0-72.1-38.2-134.2-73.6-176.7c-8.3-9.9-16.6-19-24.4-27c10.3-2.7 18-12.1 18-23.2c0-13.3-10.7-24-24-24L160 0 104 0zM52.7 464l16.6-32 181.6 0 16.6 32L52.7 464zm207.9-80l-201 0c-12 0-22.9 6.7-28.4 17.3L4.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C0 493.8 18.2 512 40.8 512l238.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2c-5.5-10.6-16.5-17.3-28.4-17.3z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM224 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm96 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM182.4 382.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"hand-point-up\": [384, 512, [9757], \"f0a6\", \"M64 64l0 177.6c5.2-1 10.5-1.6 16-1.6l16 0 0-32L96 64c0-8.8-7.2-16-16-16s-16 7.2-16 16zM80 288c-17.7 0-32 14.3-32 32c0 0 0 0 0 0l0 24c0 66.3 53.7 120 120 120l48 0c52.5 0 97.1-33.7 113.4-80.7c-3.1 .5-6.2 .7-9.4 .7c-20 0-37.9-9.2-49.7-23.6c-9 4.9-19.4 7.6-30.3 7.6c-15.1 0-29-5.3-40-14c-11 8.8-24.9 14-40 14l-40 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l40 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-40 0-40 0zM0 320s0 0 0 0c0-18 6-34.6 16-48L16 64C16 28.7 44.7 0 80 0s64 28.7 64 64l0 82c5.1-1.3 10.5-2 16-2c25.3 0 47.2 14.7 57.6 36c7-2.6 14.5-4 22.4-4c20 0 37.9 9.2 49.7 23.6c9-4.9 19.4-7.6 30.3-7.6c35.3 0 64 28.7 64 64l0 64 0 24c0 92.8-75.2 168-168 168l-48 0C75.2 512 0 436.8 0 344l0-24zm336-64c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48 0 16c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM160 240c5.5 0 10.9 .7 16 2l0-2 0-32c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 32 16 0zm64 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 0-16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 24z\"],\n    \"bookmark\": [384, 512, [128278, 61591], \"f02e\", \"M0 48C0 21.5 21.5 0 48 0l0 48 0 393.4 130.1-92.9c8.3-6 19.6-6 27.9 0L336 441.4 336 48 48 48 48 0 336 0c26.5 0 48 21.5 48 48l0 440c0 9-5 17.2-13 21.3s-17.6 3.4-24.9-1.8L192 397.5 37.9 507.5c-7.3 5.2-16.9 5.9-24.9 1.8S0 497 0 488L0 48z\"],\n    \"hand-point-down\": [384, 512, [], \"f0a7\", \"M64 448l0-177.6c5.2 1 10.5 1.6 16 1.6l16 0 0 32 0 144c0 8.8-7.2 16-16 16s-16-7.2-16-16zM80 224c-17.7 0-32-14.3-32-32c0 0 0 0 0 0l0-24c0-66.3 53.7-120 120-120l48 0c52.5 0 97.1 33.7 113.4 80.7c-3.1-.5-6.2-.7-9.4-.7c-20 0-37.9 9.2-49.7 23.6c-9-4.9-19.4-7.6-30.3-7.6c-15.1 0-29 5.3-40 14c-11-8.8-24.9-14-40-14l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0-40 0zM0 192s0 0 0 0c0 18 6 34.6 16 48l0 208c0 35.3 28.7 64 64 64s64-28.7 64-64l0-82c5.1 1.3 10.5 2 16 2c25.3 0 47.2-14.7 57.6-36c7 2.6 14.5 4 22.4 4c20 0 37.9-9.2 49.7-23.6c9 4.9 19.4 7.6 30.3 7.6c35.3 0 64-28.7 64-64l0-64 0-24C384 75.2 308.8 0 216 0L168 0C75.2 0 0 75.2 0 168l0 24zm336 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64zM160 272c5.5 0 10.9-.7 16-2l0 2 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 16 0zm64-24l0-40c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-24z\"],\n    \"folder\": [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M0 96C0 60.7 28.7 32 64 32l132.1 0c19.1 0 37.4 7.6 50.9 21.1L289.9 96 448 96c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-256c0-8.8-7.2-16-16-16l-161.4 0c-10.6 0-20.8-4.2-28.3-11.7L213.1 87c-4.5-4.5-10.6-7-17-7L64 80z\"],\n    \"user\": [448, 512, [128100, 62144], \"f007\", \"M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464l349.5 0c-8.9-63.3-63.3-112-129-112l-91.4 0c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zm16 64c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480zm64-224c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"],\n    \"star\": [576, 512, [11088, 61446], \"f005\", \"M287.9 0c9.2 0 17.6 5.2 21.6 13.5l68.6 141.3 153.2 22.6c9 1.3 16.5 7.6 19.3 16.3s.5 18.1-5.9 24.5L433.6 328.4l26.2 155.6c1.5 9-2.2 18.1-9.7 23.5s-17.3 6-25.3 1.7l-137-73.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5C270.4 5.2 278.7 0 287.9 0zm0 79L235.4 187.2c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l105.2-56.2c7.1-3.8 15.6-3.8 22.6 0l105.2 56.2L384.2 324.1c-1.3-7.7 1.2-15.5 6.8-21l85.9-85.1L358.6 200.5c-7.8-1.2-14.6-6.1-18.1-13.3L287.9 79z\"],\n    \"chess-knight\": [448, 512, [9822], \"f441\", \"M226.6 48L117.3 48l17.1 12.8c6 4.5 9.6 11.6 9.6 19.2s-3.6 14.7-9.6 19.2l-6.5 4.9c-10 7.5-16 19.3-16 31.9l-.3 91c0 10.2 4.9 19.9 13.2 25.8l1.9 1.3c9.9 7.1 23.3 7 33.2-.1l49.9-36.3c10.7-7.8 25.7-5.4 33.5 5.3s5.4 25.7-5.3 33.5l-49.9 36.3-53.8 39.1c-7.3 5.3-13 12.2-16.9 20.1l-50.7 0c5.3-22.1 17.8-41.9 35.9-56.3c-1.3-.8-2.6-1.7-3.8-2.6L97 291.8c-21-15-33.4-39.2-33.3-65l.3-91c.1-19.8 6.7-38.7 18.6-53.9l-.4-.3C70.7 73 64 59.6 64 45.3C64 20.3 84.3 0 109.3 0L226.6 0C331.2 0 416 84.8 416 189.4c0 11.1-1 22.2-2.9 33.2L390.1 352l-48.8 0 24.5-137.8c1.5-8.2 2.2-16.5 2.2-24.8C368 111.3 304.7 48 226.6 48zM85.2 432L68.7 464l310.7 0-16.6-32L85.2 432zm315.7-30.7l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L56.8 512C34.2 512 16 493.8 16 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C52.5 390.7 63.5 384 75.5 384l297 0c12 0 22.9 6.7 28.4 17.3zM172 128a20 20 0 1 1 0 40 20 20 0 1 1 0-40z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm2.8-183.3l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 141.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"folder-open\": [576, 512, [128194, 128449, 61717], \"f07c\", \"M384 480l48 0c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224l-400 0c-11.4 0-21.9 6-27.6 15.9L48 357.1 48 96c0-8.8 7.2-16 16-16l117.5 0c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8L416 144c8.8 0 16 7.2 16 16l0 32 48 0 0-32c0-35.3-28.7-64-64-64L298.5 96c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l23.7 0L384 480z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M280 64l40 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64l40 0 9.6 0C121 27.5 153.3 0 192 0s71 27.5 78.4 64l9.6 0zM64 112c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16l-16 0 0 24c0 13.3-10.7 24-24 24l-88 0-88 0c-13.3 0-24-10.7-24-24l0-24-16 0zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-95.2-8c-18.1 0-31.3 12.8-35.6 26.9c-8 26.2-32.4 45.2-61.2 45.2c-10 0-19.4-2.3-27.7-6.3c-7.6-3.7-16.7-3.3-24 1.2C.7 162.1-3.1 177.1 3.7 188.9L97.6 352l55.4 0-83-144.1c40.5-2.2 75.3-25.9 93.1-59.8c22 26.8 55.4 43.9 92.8 43.9s70.8-17.1 92.8-43.9c17.8 34 52.6 57.7 93.1 59.8L359 352l55.4 0 93.9-163.1c6.8-11.7 3-26.7-8.6-33.8c-7.3-4.5-16.4-4.9-24-1.2c-8.4 4-17.7 6.3-27.7 6.3c-28.8 0-53.2-19-61.2-45.2C382.5 100.8 369.3 88 351.2 88c-14.5 0-26.3 8.5-32.4 19.3c-12.4 22-35.9 36.7-62.8 36.7s-50.4-14.8-62.8-36.7C187.1 96.5 175.4 88 160.8 88zM133.2 432l245.6 0 16.6 32-278.7 0 16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3l-265 0c-12 0-22.9 6.7-28.4 17.3L68.6 452.5c-3 5.8-4.6 12.2-4.6 18.7c0 22.5 18.2 40.8 40.8 40.8l302.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16l0 104c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6L304 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-117.8c38-20.1 64-60.1 64-106.2l0-104c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64l0 64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6l0 12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3L128 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-128.1c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4l0-12.8c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6l0 32.3c0 8.8 7.2 16 16 16s16-7.2 16-16l0-65.7 0-14.3 0-64z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm224 64c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M24 32c13.3 0 24 10.7 24 24l0 352c0 13.3 10.7 24 24 24l416 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L72 480c-39.8 0-72-32.2-72-72L0 56C0 42.7 10.7 32 24 32zM128 136c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24zm24 72l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 96l272 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-272 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 48L208 48c-17.7 0-32 14.3-32 32l0 16-48 0 0-16c0-44.2 35.8-80 80-80L432 0c44.2 0 80 35.8 80 80l0 224c0 44.2-35.8 80-80 80l-16 0 0-48 16 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32zM48 448c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-192L48 256l0 192zM64 128l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M448 80c8.8 0 16 7.2 16 16l0 319.8-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3L48 96c0-8.8 7.2-16 16-16l384 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"folder-closed\": [512, 512, [], \"e185\", \"M251.7 127.6s0 0 0 0c10.5 10.5 24.7 16.4 39.6 16.4L448 144c8.8 0 16 7.2 16 16l0 32L48 192l0-96c0-8.8 7.2-16 16-16l133.5 0c4.2 0 8.3 1.7 11.3 4.7l33.9-33.9L208.8 84.7l42.9 42.9zM48 240l416 0 0 176c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-176zM285.7 93.7L242.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L291.3 96c-2.1 0-4.2-.8-5.7-2.3z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M368 80c-3.2 0-6.2 .4-8.9 1.3C340 86.8 313 91.9 284.8 84.6C227.4 69.7 160.2 92 110.1 142.1S37.7 259.4 52.6 316.8c7.3 28.2 2.2 55.2-3.3 74.3c-.8 2.8-1.3 5.8-1.3 8.9c0 17.7 14.3 32 32 32c3.2 0 6.2-.4 8.9-1.3c19.1-5.5 46.1-10.7 74.3-3.3c57.4 14.9 124.6-7.4 174.7-57.5s72.4-117.3 57.5-174.7c-7.3-28.2-2.2-55.2 3.3-74.3c.8-2.8 1.3-5.8 1.3-8.9c0-17.7-14.3-32-32-32zm0-48c44.2 0 80 35.8 80 80c0 7.7-1.1 15.2-3.1 22.3c-4.6 15.8-7.1 32.9-3 48.9c20.1 77.6-10.9 161.5-70 220.7s-143.1 90.2-220.7 70c-16-4.1-33-1.6-48.9 3c-7.1 2-14.6 3.1-22.3 3.1c-44.2 0-80-35.8-80-80c0-7.7 1.1-15.2 3.1-22.3c4.6-15.8 7.1-32.9 3-48.9C-14 251.3 17 167.3 76.2 108.2S219.3 18 296.8 38.1c16 4.1 33 1.6 48.9-3c7.1-2 14.6-3.1 22.3-3.1zM246.7 167c-52 15.2-96.5 59.7-111.7 111.7c-3.7 12.7-17.1 20-29.8 16.3s-20-17.1-16.3-29.8c19.8-67.7 76.6-124.5 144.3-144.3c12.7-3.7 26.1 3.6 29.8 16.3s-3.6 26.1-16.3 29.8z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M272.2 64.6l-51.1 51.1c-15.3 4.2-29.5 11.9-41.5 22.5L153 161.9C142.8 171 129.5 176 115.8 176L96 176l0 128c20.4 .6 39.8 8.9 54.3 23.4l35.6 35.6 7 7c0 0 0 0 0 0L219.9 397c6.2 6.2 16.4 6.2 22.6 0c1.7-1.7 3-3.7 3.7-5.8c2.8-7.7 9.3-13.5 17.3-15.3s16.4 .6 22.2 6.5L296.5 393c11.6 11.6 30.4 11.6 41.9 0c5.4-5.4 8.3-12.3 8.6-19.4c.4-8.8 5.6-16.6 13.6-20.4s17.3-3 24.4 2.1c9.4 6.7 22.5 5.8 30.9-2.6c9.4-9.4 9.4-24.6 0-33.9L340.1 243l-35.8 33c-27.3 25.2-69.2 25.6-97 .9c-31.7-28.2-32.4-77.4-1.6-106.5l70.1-66.2C303.2 78.4 339.4 64 377.1 64c36.1 0 71 13.3 97.9 37.2L505.1 128l38.9 0 40 0 40 0c8.8 0 16 7.2 16 16l0 208c0 17.7-14.3 32-32 32l-32 0c-11.8 0-22.2-6.4-27.7-16l-84.9 0c-3.4 6.7-7.9 13.1-13.5 18.7c-17.1 17.1-40.8 23.8-63 20.1c-3.6 7.3-8.5 14.1-14.6 20.2c-27.3 27.3-70 30-100.4 8.1c-25.1 20.8-62.5 19.5-86-4.1L159 404l-7-7-35.6-35.6c-5.5-5.5-12.7-8.7-20.4-9.3C96 369.7 81.6 384 64 384l-32 0c-17.7 0-32-14.3-32-32L0 144c0-8.8 7.2-16 16-16l40 0 40 0 19.8 0c2 0 3.9-.7 5.3-2l26.5-23.6C175.5 77.7 211.4 64 248.7 64L259 64c4.4 0 8.9 .2 13.2 .6zM544 320l0-144-48 0c-5.9 0-11.6-2.2-15.9-6.1l-36.9-32.8c-18.2-16.2-41.7-25.1-66.1-25.1c-25.4 0-49.8 9.7-68.3 27.1l-70.1 66.2c-10.3 9.8-10.1 26.3 .5 35.7c9.3 8.3 23.4 8.1 32.5-.3l71.9-66.4c9.7-9 24.9-8.4 33.9 1.4s8.4 24.9-1.4 33.9l-.8 .8 74.4 74.4c10 10 16.5 22.3 19.4 35.1l74.8 0zM64 336a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm528 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M168.5 72L256 165l87.5-93-175 0zM383.9 99.1L311.5 176l129 0L383.9 99.1zm50 124.9L256 224 78.1 224 256 420.3 433.9 224zM71.5 176l129 0L128.1 99.1 71.5 176zm434.3 40.1l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9l0-176c0-8.7 4.7-16.7 12.3-20.9z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L369 209z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M256 48l0 16c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-16L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16l0-384c0-8.8-7.2-16-16-16l-64 0zM0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM160 320l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm86.9-85.1s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152l0 112 0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-72 60.9 0 37.2 81.9c5.5 12.1 19.7 17.4 31.8 11.9s17.4-19.7 11.9-31.8L315.7 275c21.8-14.3 36.3-39 36.3-67c0-44.2-35.8-80-80-80l-88 0c-13.3 0-24 10.7-24 24zm48 88l0-64 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M512 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l448 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM208 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0zM376 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.5 64.3C196.1 302.1 223.8 288 256 288s59.9 14.1 79.5 32.3C354.5 338.1 368 362 368 384c0 5.4-2.7 10.4-7.2 13.4s-10.2 3.4-15.2 1.3l-17.2-7.5c-22.8-10-47.5-15.1-72.4-15.1s-49.6 5.2-72.4 15.1l-17.2 7.5c-4.9 2.2-10.7 1.7-15.2-1.3s-7.2-8-7.2-13.4c0-22 13.5-45.9 32.5-63.7zm-43-173.6l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"font-awesome\": [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 48 0 256 0 48 0 64 48 0 0-64 389.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96zM80 400l0-256 356.4 0L388.1 252.5c-5.5 12.4-5.5 26.6 0 39L436.4 400 80 400z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M48 448L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm55 241.1c-3.8-12.7-17.2-19.9-29.9-16.1s-19.9 17.2-16.1 29.9l48 160c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l25-83.4 25 83.4c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l48-160c3.8-12.7-3.4-26.1-16.1-29.9s-26.1 3.4-29.9 16.1l-25 83.4-25-83.4c-3-10.2-12.4-17.1-23-17.1s-19.9 7-23 17.1l-25 83.4-25-83.4z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm72 208c-13.3 0-24 10.7-24 24l0 104 0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-32 44 0c42 0 76-34 76-76s-34-76-76-76l-68 0zm68 104l-44 0 0-56 44 0c15.5 0 28 12.5 28 28s-12.5 28-28 28z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M255.4 48.2c.2-.1 .4-.2 .6-.2s.4 .1 .6 .2L460.6 194c2.1 1.5 3.4 3.9 3.4 6.5l0 13.6L291.5 355.7c-20.7 17-50.4 17-71.1 0L48 214.1l0-13.6c0-2.6 1.2-5 3.4-6.5L255.4 48.2zM48 276.2L190 392.8c38.4 31.5 93.7 31.5 132 0L464 276.2 464 456c0 4.4-3.6 8-8 8L56 464c-4.4 0-8-3.6-8-8l0-179.8zM256 0c-10.2 0-20.2 3.2-28.5 9.1L23.5 154.9C8.7 165.4 0 182.4 0 200.5L0 456c0 30.9 25.1 56 56 56l400 0c30.9 0 56-25.1 56-56l0-255.5c0-18.1-8.7-35.1-23.4-45.6L284.5 9.1C276.2 3.2 266.2 0 256 0z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l48 0c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l48 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm48 112c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm-6.3 71.8L82.1 335.9c-1.4 5.4-2.1 10.9-2.1 16.4c0 35.2 28.8 63.7 64 63.7s64-28.5 64-63.7c0-5.5-.7-11.1-2.1-16.4l-23.5-88.2c-3.7-14-16.4-23.8-30.9-23.8l-14.8 0c-14.5 0-27.2 9.7-30.9 23.8zM128 336l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"square\": [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"],\n    \"snowflake\": [448, 512, [10052, 10054], \"f2dc\", \"M224 0c13.3 0 24 10.7 24 24l0 46.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-57 57 0 76.5 66.2-38.2 20.9-77.8c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4L373 142.2l37.1-21.4c11.5-6.6 26.2-2.7 32.8 8.8s2.7 26.2-8.8 32.8L397 183.8l31.5 8.4c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-77.8-20.9L272 256l66.2 38.2 77.8-20.9c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4L397 328.2l37.1 21.4c11.5 6.6 15.4 21.3 8.8 32.8s-21.3 15.4-32.8 8.8L373 369.8l8.4 31.5c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-20.9-77.8L248 297.6l0 76.5 57 57c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23 0 46.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-46.1-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57 0-76.5-66.2 38.2-20.9 77.8c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4L75 369.8 37.9 391.2c-11.5 6.6-26.2 2.7-32.8-8.8s-2.7-26.2 8.8-32.8L51 328.2l-31.5-8.4c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l77.8 20.9L176 256l-66.2-38.2L31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4L51 183.8 13.9 162.4c-11.5-6.6-15.4-21.3-8.8-32.8s21.3-15.4 32.8-8.8L75 142.2l-8.4-31.5c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l20.9 77.8L200 214.4l0-76.5L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23L200 24c0-13.3 10.7-24 24-24z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M168 80c-13.3 0-24 10.7-24 24l0 304c0 8.4-1.4 16.5-4.1 24L440 432c13.3 0 24-10.7 24-24l0-304c0-13.3-10.7-24-24-24L168 80zM72 480c-39.8 0-72-32.2-72-72L0 112C0 98.7 10.7 88 24 88s24 10.7 24 24l0 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-304c0-39.8 32.2-72 72-72l272 0c39.8 0 72 32.2 72 72l0 304c0 39.8-32.2 72-72 72L72 480zM176 136c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24l0 80c0 13.3-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24l0-80zm200-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM200 272l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M338.9 446.8c-25.4 11-53.4 17.2-82.9 17.2C141.1 464 48 370.9 48 256S141.1 48 256 48s208 93.1 208 208c0 22.4-3.5 43.9-10.1 64.1c3.1 4.5 5.7 9.4 7.8 14.6c12.7-1.6 25.1 .4 36.2 5c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-6.5-25.3zM296 316c0-6.9-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4C258.7 276.9 241.4 272 224 272c-3.6 0-6.8 2.5-7.7 6s.6 7.2 3.8 9c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c-2.5 1.4-4.1 4.1-4.1 7s1.6 5.6 4.1 7c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-3.2 1.8-4.7 5.5-3.8 9s4.1 6 7.7 6c17.4 0 34.7-4.9 47.9-12.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3s-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4c-2.7-1.5-5.7-3-8.7-4.3c3.1-1.3 6-2.7 8.7-4.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm159.3-20c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C375.7 186.8 355 180 335.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M309.5 13.5C305.5 5.2 297.1 0 287.9 0s-17.6 5.2-21.6 13.5L197.7 154.8 44.5 177.5c-9 1.3-16.5 7.6-19.3 16.3s-.5 18.1 5.9 24.5L142.2 328.4 116 483.9c-1.5 9 2.2 18.1 9.7 23.5s17.3 6 25.3 1.7l137-73.2 137 73.2c8.1 4.3 17.9 3.7 25.3-1.7s11.2-14.5 9.7-23.5L433.6 328.4 544.8 218.2c6.5-6.4 8.7-15.9 5.9-24.5s-10.3-14.9-19.3-16.3L378.1 154.8 309.5 13.5zM288 384.7l0-305.6 52.5 108.1c3.5 7.1 10.2 12.1 18.1 13.3l118.3 17.5L391 303c-5.5 5.5-8.1 13.3-6.8 21l20.2 119.6L299.2 387.5c-3.5-1.9-7.4-2.8-11.2-2.8z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M48 448L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm90.9 233.3c-8.1-10.5-23.2-12.3-33.7-4.2s-12.3 23.2-4.2 33.7L161.6 320l-44.5 57.3c-8.1 10.5-6.3 25.5 4.2 33.7s25.5 6.3 33.7-4.2L192 359.1l37.1 47.6c8.1 10.5 23.2 12.3 33.7 4.2s12.3-23.2 4.2-33.7L222.4 320l44.5-57.3c8.1-10.5 6.3-25.5-4.2-33.7s-25.5-6.3-33.7 4.2L192 280.9l-37.1-47.6z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM217.6 228.8s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M48.2 66.8c-.1-.8-.2-1.7-.2-2.5l0-.2c0-8.8 7.2-16 16-16c.9 0 1.9 .1 2.8 .2C74.3 49.5 80 56.1 80 64c0 8.8-7.2 16-16 16c-7.9 0-14.5-5.7-15.8-13.2zM0 64c0 26.9 16.5 49.9 40 59.3l0 105.3C16.5 238.1 0 261.1 0 288c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40l201.3 0c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3l0-105.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40L123.3 40C113.9 16.5 90.9 0 64 0C28.7 0 0 28.7 0 64zm368 0a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM324.7 88c6.5 16 19.3 28.9 35.3 35.3l0 105.3c-16 6.5-28.9 19.3-35.3 35.3l-201.3 0c-6.5-16-19.3-28.9-35.3-35.3l0-105.3c16-6.5 28.9-19.3 35.3-35.3l201.3 0zM384 272a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM80 288c0 7.9-5.7 14.5-13.2 15.8c-.8 .1-1.7 .2-2.5 .2l-.2 0c-8.8 0-16-7.2-16-16c0-.9 .1-1.9 .2-2.8C49.5 277.7 56.1 272 64 272c8.8 0 16 7.2 16 16zm391.3-40l45.4 0c6.5 16 19.3 28.9 35.3 35.3l0 105.3c-16 6.5-28.9 19.3-35.3 35.3l-201.3 0c-6.5-16-19.3-28.9-35.3-35.3l0-36.7-48 0 0 36.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40l201.3 0c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3l0-105.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40L448 200l0 16.4c9.8 8.8 17.8 19.5 23.3 31.6zm88.9-26.7a16 16 0 1 1 31.5 5.5 16 16 0 1 1 -31.5-5.5zM271.8 450.7a16 16 0 1 1 -31.5-5.5 16 16 0 1 1 31.5 5.5zm307-18.5a16 16 0 1 1 -5.5 31.5 16 16 0 1 1 5.5-31.5z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 151.2c-4.2-4.6-10.1-7.2-16.4-7.2C266 144 256 154 256 166.3l0 41.7-96 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l96 0 0 41.7c0 12.3 10 22.3 22.3 22.3c6.2 0 12.1-2.6 16.4-7.2l84-91c3.5-3.8 5.4-8.7 5.4-13.9s-1.9-10.1-5.4-13.9l-84-91z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM168 376c0 13.3 10.7 24 24 24l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0c-13.3 0-24 10.7-24 24zm-8-104c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm192-32c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M48 115.8C38.2 107 32 94.2 32 80c0-26.5 21.5-48 48-48c14.2 0 27 6.2 35.8 16l344.4 0c8.8-9.8 21.6-16 35.8-16c26.5 0 48 21.5 48 48c0 14.2-6.2 27-16 35.8l0 280.4c9.8 8.8 16 21.6 16 35.8c0 26.5-21.5 48-48 48c-14.2 0-27-6.2-35.8-16l-344.4 0c-8.8 9.8-21.6 16-35.8 16c-26.5 0-48-21.5-48-48c0-14.2 6.2-27 16-35.8l0-280.4zM125.3 96c-4.8 13.6-15.6 24.4-29.3 29.3l0 261.5c13.6 4.8 24.4 15.6 29.3 29.3l325.5 0c4.8-13.6 15.6-24.4 29.3-29.3l0-261.5c-13.6-4.8-24.4-15.6-29.3-29.3L125.3 96zm2.7 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-96zM256 320l32 0c35.3 0 64-28.7 64-64l0-32 64 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8l0-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5l0 3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20-.1-.1s0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5l0 3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2l0-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm224-72l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24zm112 0l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM151.2 217.4c-4.6 4.2-7.2 10.1-7.2 16.4c0 12.3 10 22.3 22.3 22.3l41.7 0 0 96c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-96 41.7 0c12.3 0 22.3-10 22.3-22.3c0-6.2-2.6-12.1-7.2-16.4l-91-84c-3.8-3.5-8.7-5.4-13.9-5.4s-10.1 1.9-13.9 5.4l-91 84z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M64 464l256 0c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM192 272l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L129.4 376 112 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l17.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8zm85.8-4c11.6 20 18.2 43.3 18.2 68s-6.6 48-18.2 68c-6.6 11.5-21.3 15.4-32.8 8.8s-15.4-21.3-8.8-32.8c7.5-12.9 11.8-27.9 11.8-44s-4.3-31.1-11.8-44c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm96 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm69.2 46.9c-3-4.3-7.9-6.9-13.2-6.9s-10.2 2.6-13.2 6.9l-41.3 59.7-11.9-19.1c-2.9-4.7-8.1-7.5-13.6-7.5s-10.6 2.8-13.6 7.5l-40 64c-3.1 4.9-3.2 11.1-.4 16.2s8.2 8.2 14 8.2l48 0 32 0 40 0 72 0c6 0 11.4-3.3 14.2-8.6s2.4-11.6-1-16.5l-72-104z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm169.8-90.7c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M400 406.1L400 288c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 152.6c-28.7 15-61.4 23.4-96 23.4s-67.3-8.5-96-23.4L160 288c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 118.1C72.6 368.2 48 315 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 59-24.6 112.2-64 150.1zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm166.6 9.7c5.5-5.8 14.8-9.7 25.4-9.7s19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C391.7 186.8 371 180 351.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9zM208 320l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M64 464c-8.8 0-16-7.2-16-16L48 64c0-8.8 7.2-16 16-16l160 0 0 80c0 17.7 14.3 32 32 32l80 0 0 288c0 8.8-7.2 16-16 16L64 464zM64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-293.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0L64 0zm97 289c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L79 303c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 31-31zM257 255c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9l-48-48z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M.3 89.5C.1 91.6 0 93.8 0 96L0 224 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-192 0-128c0-35.3-28.7-64-64-64L64 32c-2.2 0-4.4 .1-6.5 .3c-9.2 .9-17.8 3.8-25.5 8.2C21.8 46.5 13.4 55.1 7.7 65.5c-3.9 7.3-6.5 15.4-7.4 24zM48 224l416 0 0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM174.6 384.1c-4.5 12.5-18.2 18.9-30.7 14.4s-18.9-18.2-14.4-30.7C146.9 319.4 198.9 288 256 288s109.1 31.4 126.6 79.9c4.5 12.5-2 26.2-14.4 30.7s-26.2-2-30.7-14.4C328.2 358.5 297.2 336 256 336s-72.2 22.5-81.4 48.1zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"floppy-disk\": [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M48 96l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-245.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3L448 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l245.5 0c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8L320 184c0 13.3-10.7 24-24 24l-192 0c-13.3 0-24-10.7-24-24L80 80 64 80c-8.8 0-16 7.2-16 16zm80-16l0 80 144 0 0-80L128 80zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"],\n    \"comment-dots\": [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M168.2 384.9c-15-5.4-31.7-3.1-44.6 6.4c-8.2 6-22.3 14.8-39.4 22.7c5.6-14.7 9.9-31.3 11.3-49.4c1-12.9-3.3-25.7-11.8-35.5C60.4 302.8 48 272 48 240c0-79.5 83.3-160 208-160s208 80.5 208 160s-83.3 160-208 160c-31.6 0-61.3-5.5-87.8-15.1zM26.3 423.8c-1.6 2.7-3.3 5.4-5.1 8.1l-.3 .5c-1.6 2.3-3.2 4.6-4.8 6.9c-3.5 4.7-7.3 9.3-11.3 13.5c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c5.1 0 10.2-.3 15.3-.8l.7-.1c4.4-.5 8.8-1.1 13.2-1.9c.8-.1 1.6-.3 2.4-.5c17.8-3.5 34.9-9.5 50.1-16.1c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9zM144 272a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm80 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zm-216-161.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M160 64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 136c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c8.8 0 16 7.2 16 16c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c7.8 0 14.3 5.6 15.7 13c1.6 8.2 7.3 15.1 15.1 18s16.7 1.6 23.3-3.6c2.7-2.1 6.1-3.4 9.9-3.4c8.8 0 16 7.2 16 16l0 16 0 104c0 39.8-32.2 72-72 72l-56 0-59.8 0-.9 0c-37.4 0-72.4-18.7-93.2-49.9L50.7 312.9c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4L116 353.2c5.9 8.8 16.8 12.7 26.9 9.7s17-12.4 17-23l0-19.9 0-256zM176 0c-35.3 0-64 28.7-64 64l0 197.7C91.2 238 55.5 232.8 28.5 250.7C-.9 270.4-8.9 310.1 10.8 339.5L78.3 440.8c29.7 44.5 79.6 71.2 133.1 71.2l.9 0 59.8 0 56 0c66.3 0 120-53.7 120-120l0-104 0-16c0-35.3-28.7-64-64-64c-4.5 0-8.8 .5-13 1.3c-11.7-15.4-30.2-25.3-51-25.3c-6.9 0-13.5 1.1-19.7 3.1C288.7 170.7 269.6 160 248 160c-2.7 0-5.4 .2-8 .5L240 64c0-35.3-28.7-64-64-64zm48 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M.2 276.3c-1.2-35.3 26.4-65 61.7-66.2l3.3-.1L57 208.1C22.5 200.5 .7 166.3 8.3 131.8S50.2 75.5 84.7 83.2l173 38.3c2.3-2.9 4.7-5.7 7.1-8.5l18.4-20.3C299.9 74.5 323.5 64 348.3 64l10.2 0c54.1 0 104.1 28.7 131.3 75.4l1.5 2.6c13.6 23.2 20.7 49.7 20.7 76.6L512 344c0 66.3-53.7 120-120 120l-8 0-96 0c-35.3 0-64-28.7-64-64c0-2.8 .2-5.6 .5-8.3c-19.4-11-32.5-31.8-32.5-55.7c0-.8 0-1.6 0-2.4L66.4 338c-35.3 1.2-65-26.4-66.2-61.7zm63.4-18.2c-8.8 .3-15.7 7.7-15.4 16.5s7.7 15.7 16.5 15.4l161.5-5.6c9.8-.3 18.7 5.3 22.7 14.2s2.2 19.3-4.5 26.4c-2.8 2.9-4.4 6.7-4.4 11c0 8.8 7.2 16 16 16c9.1 0 17.4 5.1 21.5 13.3s3.2 17.9-2.3 25.1c-2 2.7-3.2 6-3.2 9.6c0 8.8 7.2 16 16 16l96 0 8 0c39.8 0 72-32.2 72-72l0-125.4c0-18.4-4.9-36.5-14.2-52.4l-1.5-2.6c-18.6-32-52.8-51.6-89.8-51.6l-10.2 0c-11.3 0-22 4.8-29.6 13.1l-17.5-15.9 17.5 15.9-18.4 20.3c-.6 .6-1.1 1.3-1.7 1.9l57 13.2c8.6 2 14 10.6 12 19.2s-10.6 14-19.2 12l-85.6-19.7L74.3 130c-8.6-1.9-17.2 3.5-19.1 12.2s3.5 17.2 12.2 19.1l187.5 41.6c10.2 2.3 17.8 10.9 18.7 21.4l.1 1c.6 6.6-1.5 13.1-5.8 18.1s-10.6 7.9-17.2 8.2L63.6 258.1z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M516.1 325.5c1 3 2.1 6 3.3 8.9c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c1.2-2.9 2.3-5.9 3.3-8.9C152.5 406.2 229.5 464 320 464s167.5-57.8 196.1-138.5zM320 48c-101.4 0-185.8 72.5-204.3 168.5c-6.7-3.1-14.3-4.3-22.3-3.1c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-8-1.2-15.7 .1-22.3 3.1C505.8 120.5 421.4 48 320 48zM78.5 341.1C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7zm483 0c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zM439 336.5C414.4 374.6 370.3 400 319.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1zM281.6 228.8c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0zm160 0s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zm-95 89l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M320 464c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM80 288c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 16 44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3l0 103.4c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1L240 368l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96z\"],\n    \"file-pdf\": [512, 512, [], \"f1c1\", \"M64 464l48 0 0 48-48 0c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 304l-48 0 0-144-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16zM176 352l32 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-16 0 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0 48 16 0zm96-80l32 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16l0-128c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 96 16 0zm80-112c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64 0-64z\"],\n    \"comment\": [512, 512, [128489, 61669], \"f075\", \"M123.6 391.3c12.9-9.4 29.6-11.8 44.6-6.4c26.5 9.6 56.2 15.1 87.8 15.1c124.7 0 208-80.5 208-160s-83.3-160-208-160S48 160.5 48 240c0 32 12.4 62.8 35.7 89.2c8.6 9.7 12.8 22.5 11.8 35.5c-1.4 18.1-5.7 34.7-11.3 49.4c17-7.9 31.1-16.7 39.4-22.7zM21.2 431.9c1.8-2.7 3.5-5.4 5.1-8.1c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208s-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6c-15.1 6.6-32.3 12.6-50.1 16.1c-.8 .2-1.6 .3-2.4 .5c-4.4 .8-8.7 1.5-13.2 1.9c-.2 0-.5 .1-.7 .1c-5.1 .5-10.2 .8-15.3 .8c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c4.1-4.2 7.8-8.7 11.3-13.5c1.7-2.3 3.3-4.6 4.8-6.9l.3-.5z\"],\n    \"envelope\": [512, 512, [128386, 9993, 61443], \"f0e0\", \"M64 112c-8.8 0-16 7.2-16 16l0 22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1l0-22.1c0-8.8-7.2-16-16-16L64 112zM48 212.2L48 384c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-171.8L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128z\"],\n    \"hourglass\": [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 19c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445l0 19-8 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-19c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67l0-19 8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 0zM192 289.9l81.5 81.5C293 391 304 417.4 304 445l0 19L80 464l0-19c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67l0-19 224 0 0 19c0 27.6-11 54-30.5 73.5L192 222.1z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zM329 297L217 409c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 95-95c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M64 80c-8.8 0-16 7.2-16 16l0 162c5.1-1.3 10.5-2 16-2l384 0c5.5 0 10.9 .7 16 2l0-162c0-8.8-7.2-16-16-16L64 80zM48 320l0 96c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L64 304c-8.8 0-16 7.2-16 16zM0 320L0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 224 0 96c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-96zm280 48a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-14.8 14.8-65.7 23.6-88.3 26.7c-5.6 .9-10.3-3.9-9.5-9.5C403.3 79.9 412 29 426.8 14.2zM75 75C158.2-8.3 284.5-22.2 382.2 33.2c-1.5 4.8-2.9 9.6-4.1 14.3c-3.1 12.2-5.5 24.6-7.3 35c-80.8-53.6-190.7-44.8-261.9 26.4C37.7 180.1 28.9 290 82.5 370.8c-10.5 1.8-22.9 4.2-35 7.3c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75zm389.6 58.9c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c3.1-12.2 5.5-24.6 7.3-35c80.8 53.6 190.7 44.8 261.9-26.4c71.2-71.2 80-181.1 26.4-261.9c10.5-1.8 22.9-4.2 35-7.3zm-105.4 93c10.1-16.3 33.9-16.9 37.9 1.9c9.5 44.4-3.7 93.5-39.3 129.1s-84.8 48.8-129.1 39.3c-18.7-4-18.2-27.8-1.9-37.9c25.2-15.7 50.2-35.4 73.6-58.8s43.1-48.4 58.8-73.6zM92 265.3l97.4-29.7c11.6-3.5 22.5 7.3 19 19l-29.7 97.4c-2.6 8.6-13.4 11.3-19.8 4.9c-2-2-3.2-4.6-3.4-7.3l-5.1-56.1-56.1-5.1c-2.8-.3-5.4-1.5-7.3-3.4c-6.3-6.3-3.6-17.2 4.9-19.8zm193-178.2c2 2 3.2 4.6 3.4 7.3l5.1 56.1 56.1 5.1c2.8 .3 5.4 1.5 7.3 3.4c6.3 6.3 3.6 17.2-4.9 19.8l-97.4 29.7c-11.6 3.5-22.5-7.3-19-19L265.3 92c2.6-8.6 13.4-11.3 19.8-4.9zM14.9 497.1c-19.6-19.6-20-51-.7-70.3C29 412 79.8 403.2 102.4 400.1c5.6-.9 10.3 3.9 9.5 9.5c-3.2 22.5-11.9 73.5-26.7 88.3C66 517 34.5 516.6 14.9 497.1z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm96 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm104 0c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24l224 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-224 0c-13.3 0-24-10.7-24-24zm-72-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l352 0 0 256c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256zm176 40c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M48 256a208 208 0 1 1 416 0A208 208 0 1 1 48 256zm464 0A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9c4.2 4.5 10.1 7.1 16.3 7.1c12.3 0 22.3-10 22.3-22.3l0-57.7 96 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-96 0 0-57.7c0-12.3-10-22.3-22.3-22.3c-6.2 0-12.1 2.6-16.3 7.1L117.5 242.2c-3.5 3.8-5.5 8.7-5.5 13.8s2 10.1 5.5 13.8l99.9 107.1z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M112 112c0 35.3-28.7 64-64 64l0 160c35.3 0 64 28.7 64 64l352 0c0-35.3 28.7-64 64-64l0-160c-35.3 0-64-28.7-64-64l-352 0zM0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm80-48c0 8.8 7.2 16 16 16l0 64-8 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l24 0 24 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-8 0 0-80c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M64 112c-8.8 0-16 7.2-16 16l0 256c0 8.8 7.2 16 16 16l448 0c8.8 0 16-7.2 16-16l0-256c0-8.8-7.2-16-16-16L64 112zM0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM176 320l224 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm-72-72c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16zm16-96l16 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M512 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l448 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"],\n    \"images\": [576, 512, [], \"f302\", \"M160 80l352 0c8.8 0 16 7.2 16 16l0 224c0 8.8-7.2 16-16 16l-21.2 0L388.1 178.9c-4.4-6.8-12-10.9-20.1-10.9s-15.7 4.1-20.1 10.9l-52.2 79.8-12.4-16.9c-4.5-6.2-11.7-9.8-19.4-9.8s-14.8 3.6-19.4 9.8L175.6 336 160 336c-8.8 0-16-7.2-16-16l0-224c0-8.8 7.2-16 16-16zM96 96l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32c-35.3 0-64 28.7-64 64zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 344c0 75.1 60.9 136 136 136l320 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-320 0c-48.6 0-88-39.4-88-88l0-224zm208 24a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm192-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM184 328c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M528 160l0 256c0 8.8-7.2 16-16 16l-192 0c0-44.2-35.8-80-80-80l-64 0c-44.2 0-80 35.8-80 80l-32 0c-8.8 0-16-7.2-16-16l0-256 480 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM272 256a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm104-48c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M375.7 19.7c-1.5-8-6.9-14.7-14.4-17.8s-16.1-2.2-22.8 2.4L256 61.1 173.5 4.2c-6.7-4.6-15.3-5.5-22.8-2.4s-12.9 9.8-14.4 17.8l-18.1 98.5L19.7 136.3c-8 1.5-14.7 6.9-17.8 14.4s-2.2 16.1 2.4 22.8L61.1 256 4.2 338.5c-4.6 6.7-5.5 15.3-2.4 22.8s9.8 13 17.8 14.4l98.5 18.1 18.1 98.5c1.5 8 6.9 14.7 14.4 17.8s16.1 2.2 22.8-2.4L256 450.9l82.5 56.9c6.7 4.6 15.3 5.5 22.8 2.4s12.9-9.8 14.4-17.8l18.1-98.5 98.5-18.1c8-1.5 14.7-6.9 17.8-14.4s2.2-16.1-2.4-22.8L450.9 256l56.9-82.5c4.6-6.7 5.5-15.3 2.4-22.8s-9.8-12.9-17.8-14.4l-98.5-18.1L375.7 19.7zM269.6 110l65.6-45.2 14.4 78.3c1.8 9.8 9.5 17.5 19.3 19.3l78.3 14.4L402 242.4c-5.7 8.2-5.7 19 0 27.2l45.2 65.6-78.3 14.4c-9.8 1.8-17.5 9.5-19.3 19.3l-14.4 78.3L269.6 402c-8.2-5.7-19-5.7-27.2 0l-65.6 45.2-14.4-78.3c-1.8-9.8-9.5-17.5-19.3-19.3L64.8 335.2 110 269.6c5.7-8.2 5.7-19 0-27.2L64.8 176.8l78.3-14.4c9.8-1.8 17.5-9.5 19.3-19.3l14.4-78.3L242.4 110c8.2 5.7 19 5.7 27.2 0zM256 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM192 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9l212.5 0c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 464a208 208 0 1 1 0-416 208 208 0 1 1 0 416zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6c4.5-4.2 7.1-10.1 7.1-16.3c0-12.3-10-22.3-22.3-22.3L304 256l0-96c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 96-57.7 0C138 256 128 266 128 278.3c0 6.2 2.6 12.1 7.1 16.3l107.1 99.9c3.8 3.5 8.7 5.5 13.8 5.5s10.1-2 13.8-5.5l107.1-99.9z\"],\n    \"thumbs-down\": [512, 512, [128078, 61576], \"f165\", \"M323.8 477.2c-38.2 10.9-78.1-11.2-89-49.4l-5.7-20c-3.7-13-10.4-25-19.5-35l-51.3-56.4c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l51.3 56.4c14.1 15.5 24.4 34 30.1 54.1l5.7 20c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7l-5.7-20c-5.7-19.9-14.7-38.7-26.6-55.5c-5.2-7.3-5.8-16.9-1.7-24.9s12.3-13 21.3-13L448 288c8.8 0 16-7.2 16-16c0-6.8-4.3-12.7-10.4-15c-7.4-2.8-13-9-14.9-16.7s.1-15.8 5.3-21.7c2.5-2.8 4-6.5 4-10.6c0-7.8-5.6-14.3-13-15.7c-8.2-1.6-15.1-7.3-18-15.2s-1.6-16.7 3.6-23.3c2.1-2.7 3.4-6.1 3.4-9.9c0-6.7-4.2-12.6-10.2-14.9c-11.5-4.5-17.7-16.9-14.4-28.8c.4-1.3 .6-2.8 .6-4.3c0-8.8-7.2-16-16-16l-97.5 0c-12.6 0-25 3.7-35.5 10.7l-61.7 41.1c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l61.7-41.1c18.4-12.3 40-18.8 62.1-18.8L384 32c34.7 0 62.9 27.6 64 62c14.6 11.7 24 29.7 24 50c0 4.5-.5 8.8-1.3 13c15.4 11.7 25.3 30.2 25.3 51c0 6.5-1 12.8-2.8 18.7C504.8 238.3 512 254.3 512 272c0 35.3-28.6 64-64 64l-92.3 0c4.7 10.4 8.7 21.2 11.8 32.2l5.7 20c10.9 38.2-11.2 78.1-49.4 89zM32 384c-17.7 0-32-14.3-32-32L0 128c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M232 152A72 72 0 1 0 88 152a72 72 0 1 0 144 0zm24 120l-12.6 0 10.7 80-48.4 0L195 272l-35 0-35 0-10.7 80-48.4 0 10.7-80L64 272c-13.3 0-24-10.7-24-24s10.7-24 24-24c-15.1-20.1-24-45-24-72C40 85.7 93.7 32 160 32s120 53.7 120 120c0 27-8.9 51.9-24 72c13.3 0 24 10.7 24 24s-10.7 24-24 24zM52.7 464l214.7 0-16.6-32L69.2 432 52.7 464zm207.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L40.8 512C18.2 512 0 493.8 0 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C36.5 390.7 47.5 384 59.5 384l201 0z\"],\n    \"credit-card\": [576, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M512 80c8.8 0 16 7.2 16 16l0 32L48 128l0-32c0-8.8 7.2-16 16-16l448 0zm16 144l0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192 480 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm56 304c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm128 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0z\"],\n    \"bell\": [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416l400 0c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6C399.5 322.9 384 278.8 384 233.4l0-25.4c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm0 96c61.9 0 112 50.1 112 112l0 25.4c0 47.9 13.9 94.6 39.7 134.6L72.3 368C98.1 328 112 281.3 112 233.4l0-25.4c0-61.9 50.1-112 112-112zm64 352l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"],\n    \"file\": [384, 512, [128196, 128459, 61462], \"f15b\", \"M320 464c8.8 0 16-7.2 16-16l0-288-80 0c-17.7 0-32-14.3-32-32l0-80L64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l256 0zM0 64C0 28.7 28.7 0 64 0L229.5 0c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M232 0c-39.8 0-72 32.2-72 72l0 8L72 80C32.2 80 0 112.2 0 152L0 440c0 39.8 32.2 72 72 72l.2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0s0 0 0 0l272 0 8 0s0 0 0 0l104 0c39.8 0 72-32.2 72-72l0-288c0-39.8-32.2-72-72-72l-88 0 0-8c0-39.8-32.2-72-72-72L232 0zM480 128l88 0c13.3 0 24 10.7 24 24l0 40-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 48-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0 0 104c0 13.3-10.7 24-24 24l-88 0 0-128 0-208zM72 128l88 0 0 336c0 0 0 0-.1 0l-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0c-13.2 0-24-10.7-24-24l0-104 56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0 0-48 56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0 0-40c0-13.3 10.7-24 24-24zM208 72c0-13.3 10.7-24 24-24l176 0c13.3 0 24 10.7 24 24l0 264 0 128-64 0 0-64c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 64-64 0 0-392zm88 24l0 24-24 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l24 0 0 24c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-24 24 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-24 0 0-24c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"],\n    \"chess-rook\": [448, 512, [9820], \"f447\", \"M80 80l0 112c0 2.5 1.2 4.9 3.2 6.4l51.2 38.4c6.8 5.1 10.4 13.4 9.5 21.9L133.5 352l-48.3 0 9.4-85L54.4 236.8C40.3 226.2 32 209.6 32 192L32 72c0-22.1 17.9-40 40-40l304 0c22.1 0 40 17.9 40 40l0 120c0 17.6-8.3 34.2-22.4 44.8L353.4 267l9.4 85-48.3 0-10.4-93.3c-.9-8.4 2.7-16.8 9.5-21.9l51.2-38.4c2-1.5 3.2-3.9 3.2-6.4l0-112-64 0 0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-24-64 0 0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-24L80 80zm4.7 384l278.7 0-16.6-32-245.6 0L84.7 464zm271.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8L72.8 512C50.2 512 32 493.8 32 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C68.5 390.7 79.5 384 91.5 384l265 0zM208 288c-8.8 0-16-7.2-16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 8.8-7.2 16-16 16l-32 0z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M293.3 .6c10.9 2.5 18.6 12.2 18.6 23.4l0 384.7c0 8.9-4.9 17-12.7 21.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.3c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5c4.9-10.1 16.1-15.4 27-12.9zM263.9 128.4l-28.6 58.8c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l92.5-49.4 0-265.9z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M248 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 32-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 40L59.6 144C26.7 144 0 170.7 0 203.6c0 8.2 1.7 16.3 4.9 23.8L59.1 352l52.3 0L49 208.2c-.6-1.5-1-3-1-4.6c0-6.4 5.2-11.6 11.6-11.6L224 192l164.4 0c6.4 0 11.6 5.2 11.6 11.6c0 1.6-.3 3.2-1 4.6L336.5 352l52.3 0 54.2-124.6c3.3-7.5 4.9-15.6 4.9-23.8c0-32.9-26.7-59.6-59.6-59.6L248 144l0-40 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-32zM101.2 432l245.6 0 16.6 32L84.7 464l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3l-265 0c-12 0-22.9 6.7-28.4 17.3L36.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C32 493.8 50.2 512 72.8 512l302.5 0c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M406.5 399.6C387.4 352.9 341.5 320 288 320l-64 0c-53.5 0-99.4 32.9-118.5 79.6C69.9 362.2 48 311.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 55.7-21.9 106.2-57.5 143.6zm-40.1 32.7C334.4 452.4 296.6 464 256 464s-78.4-11.6-110.5-31.7c7.3-36.7 39.7-64.3 78.5-64.3l64 0c38.8 0 71.2 27.6 78.5 64.3zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-272a40 40 0 1 1 0-80 40 40 0 1 1 0 80zm-88-40a88 88 0 1 0 176 0 88 88 0 1 0 -176 0z\"],\n    \"copy\": [448, 512, [], \"f0c5\", \"M384 336l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l140.1 0L400 115.9 400 320c0 8.8-7.2 16-16 16zM192 384l192 0c35.3 0 64-28.7 64-64l0-204.1c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1L192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-32-48 0 0 32c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l32 0 0-48-32 0z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M400 255.4l0-15.4 0-32c0-8.8-7.2-16-16-16l-32 0-16 0-46.5 0c-50.9 0-93.9 33.5-108.3 79.6c-3.3-9.4-5.2-19.8-5.2-31.6c0-61.9 50.1-112 112-112l48 0 16 0 32 0c8.8 0 16-7.2 16-16l0-32 0-15.4L506 160 400 255.4zM336 240l16 0 0 48c0 17.7 14.3 32 32 32l3.7 0c7.9 0 15.5-2.9 21.4-8.2l139-125.1c7.6-6.8 11.9-16.5 11.9-26.7s-4.3-19.9-11.9-26.7L409.9 8.9C403.5 3.2 395.3 0 386.7 0C367.5 0 352 15.5 352 34.7L352 80l-16 0-32 0-16 0c-88.4 0-160 71.6-160 160c0 60.4 34.6 99.1 63.9 120.9c5.9 4.4 11.5 8.1 16.7 11.2c4.4 2.7 8.5 4.9 11.9 6.6c3.4 1.7 6.2 3 8.2 3.9c2.2 1 4.6 1.4 7.1 1.4l2.5 0c9.8 0 17.8-8 17.8-17.8c0-7.8-5.3-14.7-11.6-19.5c0 0 0 0 0 0c-.4-.3-.7-.5-1.1-.8c-1.7-1.1-3.4-2.5-5-4.1c-.8-.8-1.7-1.6-2.5-2.6s-1.6-1.9-2.4-2.9c-1.8-2.5-3.5-5.3-5-8.5c-2.6-6-4.3-13.3-4.3-22.4c0-36.1 29.3-65.5 65.5-65.5l14.5 0 32 0zM72 32C32.2 32 0 64.2 0 104L0 440c0 39.8 32.2 72 72 72l336 0c39.8 0 72-32.2 72-72l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64c0 13.3-10.7 24-24 24L72 464c-13.3 0-24-10.7-24-24l0-336c0-13.3 10.7-24 24-24l64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L72 32z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c-31.2-31.2-31.2-81.9 0-113.1s81.9-31.2 113.1 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-50-50-131-50-181 0s-50 131 0 181s131 50 181 0c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-31.2 31.2-81.9 31.2-113.1 0z\"],\n    \"map\": [576, 512, [128506, 62072], \"f279\", \"M565.6 36.2C572.1 40.7 576 48.1 576 56l0 336c0 10-6.2 18.9-15.5 22.4l-168 64c-5.2 2-10.9 2.1-16.1 .3L192.5 417.5l-160 61c-7.4 2.8-15.7 1.8-22.2-2.7S0 463.9 0 456L0 120c0-10 6.1-18.9 15.5-22.4l168-64c5.2-2 10.9-2.1 16.1-.3L383.5 94.5l160-61c7.4-2.8 15.7-1.8 22.2 2.7zM48 136.5l0 284.6 120-45.7 0-284.6L48 136.5zM360 422.7l0-285.4-144-48 0 285.4 144 48zm48-1.5l120-45.7 0-284.6L408 136.5l0 284.6z\"],\n    \"bell-slash\": [640, 512, [128277, 61943], \"f1f6\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L542.6 400c2.7-7.8 1.3-16.5-3.9-23l-14.9-18.6C495.5 322.9 480 278.8 480 233.4l0-33.4c0-75.8-55.5-138.6-128-150.1L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 17.9c-43.9 7-81.5 32.7-104.4 68.7L38.8 5.1zM221.7 148.4C239.6 117.1 273.3 96 312 96l8 0 8 0c57.4 0 104 46.6 104 104l0 33.4c0 32.7 6.4 64.8 18.7 94.5L221.7 148.4zM406.2 416l-60.9-48-176.9 0c21.2-32.8 34.4-70.3 38.4-109.1L160 222.1l0 11.4c0 45.4-15.5 89.5-43.8 124.9L101.3 377c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l286.2 0zM384 448l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M72 112c-13.3 0-24 10.7-24 24s10.7 24 24 24l168 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-104 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l152 0c4.5 0 8.9 1.3 12.7 3.6l64 40c7 4.4 11.3 12.1 11.3 20.4l0 24c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-10.7L281.1 384 136 384c-39.8 0-72-32.2-72-72s32.2-72 72-72l104 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L72 208c-39.8 0-72-32.2-72-72S32.2 64 72 64l209.6 0c46.7 0 90.9 21.5 119.7 58.3l78.4 100.1c20.9 26.7 32.3 59.7 32.3 93.7L512 424c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-107.9c0-23.2-7.8-45.8-22.1-64.1L363.5 151.9c-19.7-25.2-49.9-39.9-81.9-39.9L72 112z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M250.8 1.4c-35.2-3.7-66.6 21.8-70.3 57L174 119 156.7 69.6C145 36.3 108.4 18.8 75.1 30.5S24.2 78.8 35.9 112.1L88.7 262.2C73.5 276.7 64 297.3 64 320c0 0 0 0 0 0l0 24c0 92.8 75.2 168 168 168l48 0c92.8 0 168-75.2 168-168l0-72 0-16 0-32c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4c-10.4-21.3-32.3-36-57.6-36c-.7 0-1.5 0-2.2 0l5.9-56.3c3.7-35.2-21.8-66.6-57-70.3zm-.2 155.4C243.9 166.9 240 179 240 192l0 48c0 .7 0 1.4 0 2c-5.1-1.3-10.5-2-16-2l-7.4 0-5.4-15.3 17-161.3c.9-8.8 8.8-15.2 17.6-14.2s15.2 8.8 14.2 17.6l-9.5 90.1zM111.4 85.6L165.7 240 144 240c-4 0-8 .3-11.9 .9L81.2 96.2c-2.9-8.3 1.5-17.5 9.8-20.4s17.5 1.5 20.4 9.8zM288 192c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48zm38.4 108c10.4 21.3 32.3 36 57.6 36c5.5 0 10.9-.7 16-2l0 10c0 66.3-53.7 120-120 120l-48 0c-66.3 0-120-53.7-120-120l0-24s0 0 0 0c0-17.7 14.3-32 32-32l80 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c35.3 0 64-28.7 64-64c0-.7 0-1.4 0-2c5.1 1.3 10.5 2 16 2c7.9 0 15.4-1.4 22.4-4zM400 272c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 0 16z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM215.3 137.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm122.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"],\n    \"building\": [384, 512, [127970, 61687], \"f1ad\", \"M64 48c-8.8 0-16 7.2-16 16l0 384c0 8.8 7.2 16 16 16l80 0 0-64c0-26.5 21.5-48 48-48s48 21.5 48 48l0 64 80 0c8.8 0 16-7.2 16-16l0-384c0-8.8-7.2-16-16-16L64 48zM0 64C0 28.7 28.7 0 64 0L320 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm88 40c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48zM232 88l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16zM88 232c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48zm144-16l48 0c8.8 0 16 7.2 16 16l0 48c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M476.8 126.3C497.1 120.8 512 102.7 512 81c0-20-28.6-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0c-9.5 12.6-27.1 37.2-36 57.5c-.3 .7-.6 1.4-.9 2.1C417.8 69.7 416 76 416 81c0 26 21.5 47 48 47c4.4 0 8.7-.6 12.8-1.7zM395.4 41.2C355.3 15.2 307.4 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512s256-114.6 256-256c0-35.8-7.3-69.9-20.6-100.8c-8.6 3.1-17.8 4.8-27.4 4.8c-8.9 0-17.6-1.5-25.7-4.2C454.7 185.5 464 219.7 464 256c0 114.9-93.1 208-208 208S48 370.9 48 256S141.1 48 256 48c48.7 0 93.4 16.7 128.9 44.7c-.6-3.8-.9-7.7-.9-11.7c0-11.4 3.8-22.4 7.1-30.5c1.3-3.1 2.7-6.2 4.3-9.3zM375 336.5c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5zM217.6 228.8s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0z\"],\n    \"moon\": [384, 512, [127769, 9214], \"f186\", \"M144.7 98.7c-21 34.1-33.1 74.3-33.1 117.3c0 98 62.8 181.4 150.4 211.7c-12.4 2.8-25.3 4.3-38.6 4.3C126.6 432 48 353.3 48 256c0-68.9 39.4-128.4 96.8-157.3zm62.1-66C91.1 41.2 0 137.9 0 256C0 379.7 100 480 223.5 480c47.8 0 92-15 128.4-40.6c1.9-1.3 3.7-2.7 5.5-4c4.8-3.6 9.4-7.4 13.9-11.4c2.7-2.4 5.3-4.8 7.9-7.3c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-3.7 .6-7.4 1.2-11.1 1.6c-5 .5-10.1 .9-15.3 1c-1.2 0-2.5 0-3.7 0l-.3 0c-96.8-.2-175.2-78.9-175.2-176c0-54.8 24.9-103.7 64.1-136c1-.9 2.1-1.7 3.2-2.6c4-3.2 8.2-6.2 12.5-9c3.1-2 6.3-4 9.6-5.8c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-3.6-.3-7.1-.5-10.7-.6c-2.7-.1-5.5-.1-8.2-.1c-3.3 0-6.5 .1-9.8 .2c-2.3 .1-4.6 .2-6.9 .4z\"],\n    \"calendar\": [448, 512, [128197, 128198], \"f133\", \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l352 0 0 256c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M348.3 442.4c2.4-8.4 3.7-17.3 3.7-26.4l0-52.5c8.8-8 16.6-17.1 23-27c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c6.5 10 14.3 19.1 23.1 27.1l0 52.4c0 9.2 1.3 18 3.7 26.4C95.1 408.4 48 337.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 81.7-47.1 152.4-115.7 186.4zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm176.7 12a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-.4-72a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM320 416c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-37.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6l0 37.4z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M64 464l224 0c8.8 0 16-7.2 16-16l0-64 48 0 0 64c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l64 0 0 48-64 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16zM224 304l224 0c8.8 0 16-7.2 16-16l0-224c0-8.8-7.2-16-16-16L224 48c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16zm-64-16l0-224c0-35.3 28.7-64 64-64L448 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-224 0c-35.3 0-64-28.7-64-64z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm72.4-118.5c9.7-9 10.2-24.2 1.2-33.9C315.3 344.3 290.6 328 256 328s-59.3 16.3-73.5 31.6c-9 9.7-8.5 24.9 1.2 33.9s24.9 8.5 33.9-1.2c7.4-7.9 20-16.4 38.5-16.4s31.1 8.5 38.5 16.4c9 9.7 24.2 10.2 33.9 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M16.1 260.2c-22.6 12.9-20.5 47.3 3.6 57.3L160 376l0 103.3c0 18.1 14.6 32.7 32.7 32.7c9.7 0 18.9-4.3 25.1-11.8l62-74.3 123.9 51.6c18.9 7.9 40.8-4.5 43.9-24.7l64-416c1.9-12.1-3.4-24.3-13.5-31.2s-23.3-7.5-34-1.4l-448 256zm52.1 25.5L409.7 90.6 190.1 336l1.2 1L68.2 285.7zM403.3 425.4L236.7 355.9 450.8 116.6 403.3 425.4z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M385.1 419.1C349.7 447.2 304.8 464 256 464s-93.7-16.8-129.1-44.9l80.4-80.4c14.3 8.4 31 13.3 48.8 13.3s34.5-4.8 48.8-13.3l80.4 80.4zm68.1 .2C489.9 374.9 512 318.1 512 256s-22.1-118.9-58.8-163.3L465 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L419.3 58.8C374.9 22.1 318.1 0 256 0S137.1 22.1 92.7 58.8L81 47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L58.8 92.7C22.1 137.1 0 193.9 0 256s22.1 118.9 58.8 163.3L47 431c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l11.8-11.8C137.1 489.9 193.9 512 256 512s118.9-22.1 163.3-58.8L431 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-11.8-11.8zm-34.1-34.1l-80.4-80.4c8.4-14.3 13.3-31 13.3-48.8s-4.8-34.5-13.3-48.8l80.4-80.4C447.2 162.3 464 207.2 464 256s-16.8 93.7-44.9 129.1zM385.1 92.9l-80.4 80.4c-14.3-8.4-31-13.3-48.8-13.3s-34.5 4.8-48.8 13.3L126.9 92.9C162.3 64.8 207.2 48 256 48s93.7 16.8 129.1 44.9zM173.3 304.8L92.9 385.1C64.8 349.7 48 304.8 48 256s16.8-93.7 44.9-129.1l80.4 80.4c-8.4 14.3-13.3 31-13.3 48.8s4.8 34.5 13.3 48.8zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM168 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l8 0 0-48-8 0zm40 48l32 0 0-48-32 0 0 48zm96 0l0-48-32 0 0 48 32 0zm32 0l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0 48zM168 288l176 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-176 0c-30.9 0-56-25.1-56-56s25.1-56 56-56zm-23.6-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M128 0c13.3 0 24 10.7 24 24l0 40 144 0 0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40 40 0c35.3 0 64 28.7 64 64l0 16 0 48 0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192l0-48 0-16C0 92.7 28.7 64 64 64l40 0 0-40c0-13.3 10.7-24 24-24zM400 192L48 192l0 256c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-256zM296 352l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z\"],\n    \"thumbs-up\": [512, 512, [128077, 61575], \"f164\", \"M323.8 34.8c-38.2-10.9-78.1 11.2-89 49.4l-5.7 20c-3.7 13-10.4 25-19.5 35l-51.3 56.4c-8.9 9.8-8.2 25 1.6 33.9s25 8.2 33.9-1.6l51.3-56.4c14.1-15.5 24.4-34 30.1-54.1l5.7-20c3.6-12.7 16.9-20.1 29.7-16.5s20.1 16.9 16.5 29.7l-5.7 20c-5.7 19.9-14.7 38.7-26.6 55.5c-5.2 7.3-5.8 16.9-1.7 24.9s12.3 13 21.3 13L448 224c8.8 0 16 7.2 16 16c0 6.8-4.3 12.7-10.4 15c-7.4 2.8-13 9-14.9 16.7s.1 15.8 5.3 21.7c2.5 2.8 4 6.5 4 10.6c0 7.8-5.6 14.3-13 15.7c-8.2 1.6-15.1 7.3-18 15.2s-1.6 16.7 3.6 23.3c2.1 2.7 3.4 6.1 3.4 9.9c0 6.7-4.2 12.6-10.2 14.9c-11.5 4.5-17.7 16.9-14.4 28.8c.4 1.3 .6 2.8 .6 4.3c0 8.8-7.2 16-16 16l-97.5 0c-12.6 0-25-3.7-35.5-10.7l-61.7-41.1c-11-7.4-25.9-4.4-33.3 6.7s-4.4 25.9 6.7 33.3l61.7 41.1c18.4 12.3 40 18.8 62.1 18.8l97.5 0c34.7 0 62.9-27.6 64-62c14.6-11.7 24-29.7 24-50c0-4.5-.5-8.8-1.3-13c15.4-11.7 25.3-30.2 25.3-51c0-6.5-1-12.8-2.8-18.7C504.8 273.7 512 257.7 512 240c0-35.3-28.6-64-64-64l-92.3 0c4.7-10.4 8.7-21.2 11.8-32.2l5.7-20c10.9-38.2-11.2-78.1-49.4-89zM32 192c-17.7 0-32 14.3-32 32L0 448c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32l-64 0z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M24 432c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 432z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M464 48l0 416L48 464 48 48l416 0zM48 0L0 0 0 48 0 464l0 48 48 0 416 0 48 0 0-48 0-416 0-48L464 0 48 0z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l224 0 0-80c0-17.7 14.3-32 32-32l80 0 0-224c0-8.8-7.2-16-16-16L64 80zM288 480L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 224 0 5.5c0 17-6.7 33.3-18.7 45.3l-90.5 90.5c-12 12-28.3 18.7-45.3 18.7l-5.5 0z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M175.9 448c-35-.1-65.5-22.6-76-54.6C67.6 356.8 48 308.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208s-93.1 208-208 208c-28.4 0-55.5-5.7-80.1-16zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM128 369c0 26 21.5 47 48 47s48-21 48-47c0-20-28.4-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0C156.6 308.6 128 349 128 369zm128-65c-13.3 0-24 10.7-24 24s10.7 24 24 24c30.7 0 58.7 11.5 80 30.6c9.9 8.8 25 8 33.9-1.9s8-25-1.9-33.9C338.3 320.2 299 304 256 304zm47.6-96a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm-128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M64 128l177.6 0c-1 5.2-1.6 10.5-1.6 16l0 16-32 0L64 160c-8.8 0-16-7.2-16-16s7.2-16 16-16zm224 16c0-17.7 14.3-32 32-32c0 0 0 0 0 0l24 0c66.3 0 120 53.7 120 120l0 48c0 52.5-33.7 97.1-80.7 113.4c.5-3.1 .7-6.2 .7-9.4c0-20-9.2-37.9-23.6-49.7c4.9-9 7.6-19.4 7.6-30.3c0-15.1-5.3-29-14-40c8.8-11 14-24.9 14-40l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-40 0-40zm32-80s0 0 0 0c-18 0-34.6 6-48 16L64 80C28.7 80 0 108.7 0 144s28.7 64 64 64l82 0c-1.3 5.1-2 10.5-2 16c0 25.3 14.7 47.2 36 57.6c-2.6 7-4 14.5-4 22.4c0 20 9.2 37.9 23.6 49.7c-4.9 9-7.6 19.4-7.6 30.3c0 35.3 28.7 64 64 64l64 0 24 0c92.8 0 168-75.2 168-168l0-48c0-92.8-75.2-168-168-168l-24 0zM256 400c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0zM240 224c0 5.5 .7 10.9 2 16l-2 0-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0 16zm24 64l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l24 0z\"]\n  };\n\n  bunker(() => {\n    defineIcons('far', icons);\n    defineIcons('fa-regular', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  let _WINDOW = {};\n  let _DOCUMENT = {};\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n  const {\n    userAgent = ''\n  } = _WINDOW.navigator || {};\n  const WINDOW = _WINDOW;\n  const DOCUMENT = _DOCUMENT;\n  const IS_BROWSER = !!WINDOW.document;\n  const IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  const IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function _defineProperty(e, r, t) {\n    return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n      value: t,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }) : e[r] = t, e;\n  }\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _toPrimitive(t, r) {\n    if (\"object\" != typeof t || !t) return t;\n    var e = t[Symbol.toPrimitive];\n    if (void 0 !== e) {\n      var i = e.call(t, r || \"default\");\n      if (\"object\" != typeof i) return i;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === r ? String : Number)(t);\n  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n\n  var S = {\n      classic: {\n        fa: \"solid\",\n        fas: \"solid\",\n        \"fa-solid\": \"solid\",\n        far: \"regular\",\n        \"fa-regular\": \"regular\",\n        fal: \"light\",\n        \"fa-light\": \"light\",\n        fat: \"thin\",\n        \"fa-thin\": \"thin\",\n        fab: \"brands\",\n        \"fa-brands\": \"brands\"\n      },\n      duotone: {\n        fa: \"solid\",\n        fad: \"solid\",\n        \"fa-solid\": \"solid\",\n        \"fa-duotone\": \"solid\",\n        fadr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fadl: \"light\",\n        \"fa-light\": \"light\",\n        fadt: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      sharp: {\n        fa: \"solid\",\n        fass: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasl: \"light\",\n        \"fa-light\": \"light\",\n        fast: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      \"sharp-duotone\": {\n        fa: \"solid\",\n        fasds: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasdr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasdl: \"light\",\n        \"fa-light\": \"light\",\n        fasdt: \"thin\",\n        \"fa-thin\": \"thin\"\n      }\n    };\n  var s = \"classic\";\n  var G = {\n      classic: {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\",\n        100: \"fat\"\n      },\n      duotone: {\n        900: \"fad\",\n        400: \"fadr\",\n        300: \"fadl\",\n        100: \"fadt\"\n      },\n      sharp: {\n        900: \"fass\",\n        400: \"fasr\",\n        300: \"fasl\",\n        100: \"fast\"\n      },\n      \"sharp-duotone\": {\n        900: \"fasds\",\n        400: \"fasdr\",\n        300: \"fasdl\",\n        100: \"fasdt\"\n      }\n    };\n  var xt = {\n      classic: {\n        solid: \"fas\",\n        regular: \"far\",\n        light: \"fal\",\n        thin: \"fat\",\n        brands: \"fab\"\n      },\n      duotone: {\n        solid: \"fad\",\n        regular: \"fadr\",\n        light: \"fadl\",\n        thin: \"fadt\"\n      },\n      sharp: {\n        solid: \"fass\",\n        regular: \"fasr\",\n        light: \"fasl\",\n        thin: \"fast\"\n      },\n      \"sharp-duotone\": {\n        solid: \"fasds\",\n        regular: \"fasdr\",\n        light: \"fasdl\",\n        thin: \"fasdt\"\n      }\n    };\n  var St = {\n      kit: {\n        fak: \"kit\",\n        \"fa-kit\": \"kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"kit-duotone\",\n        \"fa-kit-duotone\": \"kit-duotone\"\n      }\n    };\n  var Ct = {\n    kit: {\n      \"fa-kit\": \"fak\"\n    },\n    \"kit-duotone\": {\n      \"fa-kit-duotone\": \"fakd\"\n    }\n  };\n  var Wt = {\n      kit: {\n        fak: \"fa-kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"fa-kit-duotone\"\n      }\n    };\n  var Et = {\n      kit: {\n        kit: \"fak\"\n      },\n      \"kit-duotone\": {\n        \"kit-duotone\": \"fakd\"\n      }\n    };\n\n  var ua = {\n      classic: {\n        \"fa-brands\": \"fab\",\n        \"fa-duotone\": \"fad\",\n        \"fa-light\": \"fal\",\n        \"fa-regular\": \"far\",\n        \"fa-solid\": \"fas\",\n        \"fa-thin\": \"fat\"\n      },\n      duotone: {\n        \"fa-regular\": \"fadr\",\n        \"fa-light\": \"fadl\",\n        \"fa-thin\": \"fadt\"\n      },\n      sharp: {\n        \"fa-solid\": \"fass\",\n        \"fa-regular\": \"fasr\",\n        \"fa-light\": \"fasl\",\n        \"fa-thin\": \"fast\"\n      },\n      \"sharp-duotone\": {\n        \"fa-solid\": \"fasds\",\n        \"fa-regular\": \"fasdr\",\n        \"fa-light\": \"fasdl\",\n        \"fa-thin\": \"fasdt\"\n      }\n    },\n    ga = {\n      classic: {\n        fab: \"fa-brands\",\n        fad: \"fa-duotone\",\n        fal: \"fa-light\",\n        far: \"fa-regular\",\n        fas: \"fa-solid\",\n        fat: \"fa-thin\"\n      },\n      duotone: {\n        fadr: \"fa-regular\",\n        fadl: \"fa-light\",\n        fadt: \"fa-thin\"\n      },\n      sharp: {\n        fass: \"fa-solid\",\n        fasr: \"fa-regular\",\n        fasl: \"fa-light\",\n        fast: \"fa-thin\"\n      },\n      \"sharp-duotone\": {\n        fasds: \"fa-solid\",\n        fasdr: \"fa-regular\",\n        fasdl: \"fa-light\",\n        fasdt: \"fa-thin\"\n      }\n    };\n\n  const NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  const PRODUCTION = (() => {\n    try {\n      return \"production\" === 'production';\n    } catch (e$$1) {\n      return false;\n    }\n  })();\n  function familyProxy(obj) {\n    // Defaults to the classic family if family is not available\n    return new Proxy(obj, {\n      get(target, prop) {\n        return prop in target ? target[prop] : target[s];\n      }\n    });\n  }\n  const _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n  // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n  // {'fa-duotone': 'duotone'}\n  _PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    'fa-duotone': 'duotone'\n  }), S[s]), St['kit']), St['kit-duotone']);\n  const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\n  const _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n  // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n  _STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    duotone: 'fad'\n  }), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\n  const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\n  const _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n  _PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\n  const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\n  const _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n  _LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\n  const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\n  const _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\n  const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      fn(...args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  const w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce((acc, iconName) => {\n      const icon = icons[iconName];\n      const expanded = !!icon.icon;\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n      return acc;\n    }, {});\n  }\n  function defineIcons(prefix, icons) {\n    let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const {\n      skipHooks = false\n    } = params;\n    const normalized = normalizeIcons(icons);\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"0\": [320, 512, [], \"30\", \"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160l0 128c0 88.4-71.6 160-160 160S0 408.4 0 320L0 192zM160 96c-53 0-96 43-96 96l0 128c0 53 43 96 96 96s96-43 96-96l0-128c0-53-43-96-96-96z\"],\n    \"1\": [256, 512, [], \"31\", \"M160 64c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.8 1.6l-96 64C-.5 111.2-4.4 131 5.4 145.8s29.7 18.7 44.4 8.9L96 123.8 96 416l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-352z\"],\n    \"2\": [320, 512, [], \"32\", \"M142.9 96c-21.5 0-42.2 8.5-57.4 23.8L54.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L40.2 74.5C67.5 47.3 104.4 32 142.9 32C223 32 288 97 288 177.1c0 38.5-15.3 75.4-42.5 102.6L109.3 416 288 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L200.2 234.5c15.2-15.2 23.8-35.9 23.8-57.4c0-44.8-36.3-81.1-81.1-81.1z\"],\n    \"3\": [320, 512, [], \"33\", \"M0 64C0 46.3 14.3 32 32 32l240 0c13.2 0 25 8.1 29.8 20.4s1.5 26.3-8.2 35.2L162.3 208l21.7 0c75.1 0 136 60.9 136 136s-60.9 136-136 136l-78.6 0C63 480 24.2 456 5.3 418.1l-1.9-3.8c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l1.9 3.8c8.1 16.3 24.8 26.5 42.9 26.5l78.6 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L80 272c-13.2 0-25-8.1-29.8-20.4s-1.5-26.3 8.2-35.2L189.7 96 32 96C14.3 96 0 81.7 0 64z\"],\n    \"4\": [384, 512, [], \"34\", \"M189 77.6c7.5-16 .7-35.1-15.3-42.6s-35.1-.7-42.6 15.3L3 322.4c-4.7 9.9-3.9 21.5 1.9 30.8S21 368 32 368l224 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L82.4 304 189 77.6z\"],\n    \"5\": [320, 512, [], \"35\", \"M32.5 58.3C35.3 43.1 48.5 32 64 32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L90.7 96 70.3 208 184 208c75.1 0 136 60.9 136 136s-60.9 136-136 136l-83.5 0c-39.4 0-75.4-22.3-93-57.5l-4.1-8.2c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l4.1 8.2c6.8 13.6 20.6 22.1 35.8 22.1l83.5 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L32 272c-9.5 0-18.5-4.2-24.6-11.5s-8.6-16.9-6.9-26.2l32-176z\"],\n    \"6\": [320, 512, [], \"36\", \"M232.4 84.7c11.4-13.5 9.7-33.7-3.8-45.1s-33.7-9.7-45.1 3.8L38.6 214.7C14.7 242.9 1.1 278.4 .1 315.2c0 1.4-.1 2.9-.1 4.3l0 .5c0 88.4 71.6 160 160 160s160-71.6 160-160c0-85.5-67.1-155.4-151.5-159.8l63.9-75.6zM256 320A96 96 0 1 1 64 320a96 96 0 1 1 192 0z\"],\n    \"7\": [320, 512, [], \"37\", \"M0 64C0 46.3 14.3 32 32 32l256 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96 32 96C14.3 96 0 81.7 0 64z\"],\n    \"8\": [320, 512, [], \"38\", \"M304 160c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 34.6 13.7 66 36 89C20.5 272.3 0 309.8 0 352c0 70.7 57.3 128 128 128l64 0c70.7 0 128-57.3 128-128c0-42.2-20.5-79.7-52-103c22.3-23 36-54.4 36-89zM176.1 288l15.9 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64s28.7-64 64-64l15.9 0c0 0 .1 0 .1 0l32 0c0 0 .1 0 .1 0zm0-64c0 0 0 0 0 0l-32 0c0 0 0 0 0 0c-35.3 0-64-28.7-64-64c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64c0 35.3-28.6 64-64 64z\"],\n    \"9\": [320, 512, [], \"39\", \"M64 192a96 96 0 1 0 192 0A96 96 0 1 0 64 192zm87.5 159.8C67.1 347.4 0 277.5 0 192C0 103.6 71.6 32 160 32s160 71.6 160 160c0 2.6-.1 5.3-.2 7.9c-1.7 35.7-15.2 70-38.4 97.4l-145 171.4c-11.4 13.5-31.6 15.2-45.1 3.8s-15.2-31.6-3.8-45.1l63.9-75.6z\"],\n    \"fill-drip\": [576, 512, [], \"f576\", \"M41.4 9.4C53.9-3.1 74.1-3.1 86.6 9.4L168 90.7l53.1-53.1c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L122.7 136 41.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm176 221.3L168 181.3 75.9 273.4c-4.2 4.2-7 9.3-8.4 14.6l319.2 0 42.3-42.3c3.1-3.1 3.1-8.2 0-11.3L277.7 82.9c-3.1-3.1-8.2-3.1-11.3 0L213.3 136l49.4 49.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM512 512c-35.3 0-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448c0 35.3-28.7 64-64 64z\"],\n    \"arrows-to-circle\": [640, 512, [], \"e4bd\", \"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L160 114.7 160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 4.3-.9 8.5-2.4 12.2c-1.6 3.7-3.8 7.3-6.9 10.3l-.1 .1c-3.1 3-6.6 5.3-10.3 6.9c-3.8 1.6-7.9 2.4-12.2 2.4l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.7 0L9.4 54.6C-3.1 42.1-3.1 21.9 9.4 9.4zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM114.7 352L96 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0l.1 0c8.8 0 16.7 3.6 22.5 9.3l.1 .1c3 3.1 5.3 6.6 6.9 10.3c1.6 3.8 2.4 7.9 2.4 12.2l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L114.7 352zM416 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 18.7L585.4 9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 160l18.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-8.8 0-16.8-3.6-22.6-9.3l-.1-.1c-3-3.1-5.3-6.6-6.9-10.3s-2.4-7.8-2.4-12.2l0-.1s0 0 0 0l0-96zM525.3 352L630.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 397.3l0 18.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96s0 0 0 0l0-.1c0-4.3 .9-8.4 2.4-12.2c1.6-3.8 3.9-7.3 6.9-10.4c5.8-5.8 13.7-9.3 22.5-9.4l.1 0s0 0 0 0l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.7 0z\"],\n    \"circle-chevron-right\": [512, 512, [\"chevron-circle-right\"], \"f138\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\"],\n    \"at\": [512, 512, [61946], \"40\", \"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256l0 32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32l0 80 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M135.2 17.7C140.6 6.8 151.7 0 163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm96 64c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16z\"],\n    \"text-height\": [576, 512, [], \"f034\", \"M64 128l0-32 64 0 0 320-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320 64 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L160 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 192-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-192 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"],\n    \"user-xmark\": [640, 512, [\"user-times\"], \"f235\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM471 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"stethoscope\": [576, 512, [129658], \"f0f1\", \"M142.4 21.9c5.6 16.8-3.5 34.9-20.2 40.5L96 71.1 96 192c0 53 43 96 96 96s96-43 96-96l0-120.9-26.1-8.7c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l26.1 8.7C334.4 19.1 352 43.5 352 71.1L352 192c0 77.2-54.6 141.6-127.3 156.7C231 404.6 278.4 448 336 448c61.9 0 112-50.1 112-112l0-70.7c-28.3-12.3-48-40.5-48-73.3c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 70.7c0 97.2-78.8 176-176 176c-92.9 0-168.9-71.9-175.5-163.1C87.2 334.2 32 269.6 32 192L32 71.1c0-27.5 17.6-52 43.8-60.7l26.1-8.7c16.8-5.6 34.9 3.5 40.5 20.2zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l96 0 0 80c0 6.1 3.4 11.6 8.8 14.3s11.9 2.1 16.8-1.5L309.3 416 448 416c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0z\"],\n    \"info\": [192, 512, [], \"f129\", \"M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z\"],\n    \"down-left-and-up-right-to-center\": [512, 512, [\"compress-alt\"], \"f422\", \"M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z\"],\n    \"explosion\": [576, 512, [], \"e4e9\", \"M499.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L404.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87-71.4 0c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64l-79.6 0L42.3 363.7c-9.7-6.7-13.1-19.6-7.9-30.3s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.7 9.4-11.3L107.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L246 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7s22.7 9.4 23.9 21.7l13.5 141.9L499.6 11.3zM64 448s0 0 0 0l448 0s0 0 0 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zM288 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"],\n    \"file-lines\": [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"wave-square\": [640, 512, [], \"f83e\", \"M128 64c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 352 96 0 0-160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 160c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-352-96 0 0 160c0 17.7-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-160z\"],\n    \"ring\": [512, 512, [], \"f70b\", \"M64 208c0 7.8 4.4 18.7 17.1 30.3C126.5 214.1 188.9 200 256 200s129.5 14.1 174.9 38.3C443.6 226.7 448 215.8 448 208c0-12.3-10.8-32-47.9-50.6C364.9 139.8 314 128 256 128s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7C166.3 280.2 208.8 288 256 288s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208c0-49.6 39.4-85.8 83.3-107.8C129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8l0 96c0 49.6-39.4 85.8-83.3 107.8C382.9 434.7 321.7 448 256 448s-126.9-13.3-172.7-36.2C39.4 389.8 0 353.6 0 304l0-96z\"],\n    \"building-un\": [384, 512, [], \"e4d9\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM237.3 71.1l34.7 52L272 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM112 80l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"dice-three\": [448, 512, [9858], \"f527\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm64 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm128 0l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 400l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"],\n    \"anchor-circle-check\": [640, 512, [], \"e4aa\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"building-circle-arrow-right\": [640, 512, [], \"e4d1\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 184.2c-39.1 32.3-64 81.1-64 135.8c0 49.5 20.4 94.2 53.3 126.2C364.5 505.1 351.1 512 336 512l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm96 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6L521.4 352 432 352c-8.8 0-16 7.2-16 16s7.2 16 16 16l89.4 0-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\"],\n    \"volleyball\": [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M511.8 267.4c-26.1 8.7-53.4 13.8-81 15.1c9.2-105.3-31.5-204.2-103.2-272.4C434.1 41.1 512 139.5 512 256c0 3.8-.1 7.6-.2 11.4zm-3.9 34.7c-5.8 32-17.6 62-34.2 88.7c-97.5 48.5-217.7 42.6-311.9-24.5c23.7-36.2 55.4-67.7 94.5-91.8c79.9 43.2 170.1 50.8 251.6 27.6zm-236-55.5c-2.5-90.9-41.1-172.7-101.9-231.7C196.8 5.2 225.8 0 256 0c2.7 0 5.3 0 7.9 .1c90.8 60.2 145.7 167.2 134.7 282.3c-43.1-2.4-86.4-14.1-126.8-35.9zM138 28.8c20.6 18.3 38.7 39.4 53.7 62.6C95.9 136.1 30.6 220.8 7.3 316.9C2.5 297.4 0 277 0 256C0 157.2 56 71.5 138 28.8zm69.6 90.5c19.5 38.6 31 81.9 32.3 127.7C162.5 294.6 110.9 368.9 90.2 451C66 430.4 45.6 405.4 30.4 377.2c6.7-108.7 71.9-209.9 177.1-257.9zM256 512c-50.7 0-98-14.7-137.8-40.2c5.6-27 14.8-53.1 27.4-77.7C232.2 454.6 338.1 468.8 433 441c-46 44-108.3 71-177 71z\"],\n    \"arrows-up-to-line\": [576, 512, [], \"e4c2\", \"M32 96l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96zM9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 237.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96zm320 45.3c12.5 12.5 32.8 12.5 45.3 0L416 237.3 416 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3z\"],\n    \"sort-down\": [320, 512, [\"sort-desc\"], \"f0dd\", \"M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z\"],\n    \"circle-minus\": [512, 512, [\"minus-circle\"], \"f056\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM184 232l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"door-open\": [576, 512, [], \"f52b\", \"M320 32c0-9.9-4.5-19.2-12.3-25.2S289.8-1.4 280.2 1l-179.9 45C79 51.3 64 70.5 64 92.5L64 448l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 192 0 32 0 0-32 0-448zM256 256c0 17.7-10.7 32-24 32s-24-14.3-24-32s10.7-32 24-32s24 14.3 24 32zm96-128l96 0 0 352c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320c0-35.3-28.7-64-64-64l-96 0 0 64z\"],\n    \"right-from-bracket\": [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"],\n    \"atom\": [512, 512, [9883], \"f5d2\", \"M256 398.8c-11.8 5.1-23.4 9.7-34.9 13.5c16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM446 256c33 45.2 44.3 90.9 23.6 128c-20.2 36.3-62.5 49.3-115.2 43.2c-22 52.1-55.6 84.8-98.4 84.8s-76.4-32.7-98.4-84.8c-52.7 6.1-95-6.8-115.2-43.2C21.7 346.9 33 301.2 66 256c-33-45.2-44.3-90.9-23.6-128c20.2-36.3 62.5-49.3 115.2-43.2C179.6 32.7 213.2 0 256 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2c20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2c31.8 1.4 38.6-8.7 40.2-11.7c2.3-4.2 7-17.9-11.9-48.1c-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2c7.6 6.1 14.8 12.3 21.6 18.6c18.9-30.2 14.2-44 11.9-48.1c-1.6-2.9-8.4-13-40.2-11.7zM290.9 99.7C274.1 65.9 259.9 64 256 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5c11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2c-31.8-1.4-38.6 8.7-40.2 11.7c-2.3 4.2-7 17.9 11.9 48.1c6.8-6.3 14-12.5 21.6-18.6zM110.2 304.8C91.4 335 96 348.7 98.3 352.9c1.6 2.9 8.4 13 40.2 11.7c-2.8-13.1-5-26.9-6.7-41.2c-7.6-6.1-14.8-12.3-21.6-18.6zM336 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"soap\": [512, 512, [129532], \"e06e\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM416 32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 160c0 27.6-11.7 52.5-30.4 70.1C422.1 275.7 448 310.8 448 352c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96s43-96 96-96l88.4 0c-15.2-17-24.4-39.4-24.4-64L96 192c-53 0-96 43-96 96L0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96l0-128c0-53-43-96-96-96zM160 288c-35.3 0-64 28.7-64 64s28.7 64 64 64l192 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-160 0z\"],\n    \"icons\": [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 144c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-57L352 90.2 352 208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-96c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM74.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2l61.7 0c10.7 0 20.7 5.3 26.6 14.2L213.3 304l26.7 0c26.5 0 48 21.5 48 48l0 112c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 352c0-26.5 21.5-48 48-48l26.7 0zM192 408a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM478.7 278.3L440.3 368l55.7 0c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L391.7 400 336 400c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L19.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\"],\n    \"microphone-lines-slash\": [640, 512, [\"microphone-alt-slash\"], \"f539\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24 0 16c0 21.2-5.1 41.1-14.2 58.7L416 300.8l0-44.8-57.1 0-34.5-27c2.9-3.1 7-5 11.6-5l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zm362.5 407l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2z\"],\n    \"bridge-circle-check\": [640, 512, [], \"e4c9\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"pump-medical\": [448, 512, [], \"e06a\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM216 280l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"fingerprint\": [512, 512, [], \"f577\", \"M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256l0 24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32c0 13.2 4 25.4 10.8 35.6C177.9 364.3 160 388.1 160 416c0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\"],\n    \"magnifying-glass-location\": [512, 512, [\"search-location\"], \"f689\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"forward-step\": [320, 512, [\"step-forward\"], \"f051\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241l0-145c0-17.7 14.3-32 32-32s32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-145-11.5 9.6-192 160z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"flag-checkered\": [448, 512, [127937], \"f11e\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 279.7c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80 0-66L0 64 0 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9 0 65.5L64 252.6 64 318l48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3l0-63.9 38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9 0 66.7-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8l0 71.4c21.8 1.9 43.3 6.7 64 14.4l0-69.8 22.7 6.7c13.5 4 27.3 6.4 41.3 7.4l0-64.2c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12 0-62c-13-3.8-25.8-8.8-38.2-15c-8.2-4.1-16.9-7-25.8-8.8l0 72.4c-13-.4-26 .8-38.7 3.6L128 173.2 128 98 64 114l0 73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2 0-71.7-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5l0 77.4zm64-149.4l0-70.8c-20.9 6.1-42.4 9.1-64 9.1l0 69.4c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\"],\n    \"football\": [512, 512, [127944, \"football-ball\"], \"f44e\", \"M247.5 25.4c-13.5 3.3-26.4 7.2-38.6 11.7C142.9 61.6 96.7 103.6 66 153.6C47.8 183.4 35.1 215.9 26.9 249L264.5 486.6c13.5-3.3 26.4-7.2 38.6-11.7c66-24.5 112.2-66.5 142.9-116.5c18.3-29.8 30.9-62.3 39.1-95.3L247.5 25.4zM495.2 205.3c6.1-56.8 1.4-112.2-7.7-156.4c-2.7-12.9-13-22.9-26.1-25.1c-58.2-9.7-109.9-12-155.6-7.9L495.2 205.3zM206.1 496L16.8 306.7c-6.1 56.8-1.4 112.2 7.7 156.4c2.7 12.9 13 22.9 26.1 25.1c58.2 9.7 109.9 12 155.6 7.9zm54.6-331.3c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6z\"],\n    \"school-circle-exclamation\": [640, 512, [], \"e56c\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"crop\": [512, 512, [], \"f125\", \"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 160 64l0 64 178.7 0L128 338.7 128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-178.7 0L384 173.3 384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-274.7z\"],\n    \"angles-down\": [448, 512, [\"angle-double-down\"], \"f103\", \"M246.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 402.7 361.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 210.7 361.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"],\n    \"users-rectangle\": [640, 512, [], \"e594\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l448 0c53 0 96-43 96-96l0-320c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l448 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32L64 96zm159.8 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0C119.9 256 96 279.9 96 309.3zM461.2 336l56.1 0c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6zM372 289c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-8.6-24.3-29.9-42.6-55.9-47zM512 176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"],\n    \"people-roof\": [640, 512, [], \"e537\", \"M335.5 4l288 160c15.4 8.6 21 28.1 12.4 43.5s-28.1 21-43.5 12.4L320 68.6 47.5 220c-15.4 8.6-34.9 3-43.5-12.4s-3-34.9 12.4-43.5L304.5 4c9.7-5.4 21.4-5.4 31.1 0zM320 160a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM144 256a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm312 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM226.9 491.4L200 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5L61.1 491.4c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l37.9-70.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c16.3 0 31.9 4.5 45.4 12.6l33.6-62.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c32.4 0 62.1 17.8 77.5 46.3l33.6 62.3c13.5-8.1 29.1-12.6 45.4-12.6l19.5 0c32.4 0 62.1 17.8 77.5 46.3l37.9 70.3c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8L552 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5-26.9 49.9c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l36.3-67.5c-1.7-1.7-3.2-3.6-4.3-5.8L376 345.5l0 54.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-54.5-26.9 49.9c-1.2 2.2-2.6 4.1-4.3 5.8l36.3 67.5c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8z\"],\n    \"people-line\": [640, 512, [], \"e534\", \"M360 72a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM144 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM496 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 217.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 313.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 340.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 313.5 88 352c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5z\"],\n    \"beer-mug-empty\": [512, 512, [\"beer\"], \"f0fc\", \"M32 64c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32 51.2 0c42.4 0 76.8 34.4 76.8 76.8l0 102.1c0 30.4-17.9 57.9-45.6 70.2L384 381.7l0 34.3c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64L32 64zM384 311.6l56.4-25.1c4.6-2.1 7.6-6.6 7.6-11.7l0-102.1c0-7.1-5.7-12.8-12.8-12.8L384 160l0 151.6zM160 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224z\"],\n    \"diagram-predecessor\": [512, 512, [], \"e477\", \"M448 416l0-64L64 352l0 64 384 0zm0 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM288 160c0 35.3-28.7 64-64 64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l144 0 16 0 144 0c44.2 0 80 35.8 80 80l0 16 38.1 0c21.4 0 32.1 25.9 17 41L433 239c-9.4 9.4-24.6 9.4-33.9 0L329 169c-15.1-15.1-4.4-41 17-41l38.1 0 0-16c0-8.8-7.2-16-16-16l-80 0 0 64z\"],\n    \"arrow-up-long\": [384, 512, [\"long-arrow-up\"], \"f176\", \"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\"],\n    \"fire-flame-simple\": [384, 512, [\"burn\"], \"f46a\", \"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6C0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5c0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\"],\n    \"person\": [320, 512, [129485, \"male\"], \"f183\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z\"],\n    \"laptop\": [640, 512, [128187], \"f109\", \"M128 32C92.7 32 64 60.7 64 96l0 256 64 0 0-256 384 0 0 256 64 0 0-256c0-35.3-28.7-64-64-64L128 32zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480l486.4 0c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2L19.2 384z\"],\n    \"file-csv\": [512, 512, [], \"f6dd\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM200 352l16 0c22.1 0 40 17.9 40 40l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8l0 80c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-8c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8c0 22.1-17.9 40-40 40l-16 0c-22.1 0-40-17.9-40-40l0-80c0-22.1 17.9-40 40-40zm133.1 0l34.9 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-34.9 0c-7.2 0-13.1 5.9-13.1 13.1c0 5.2 3 9.9 7.8 12l37.4 16.6c16.3 7.2 26.8 23.4 26.8 41.2c0 24.9-20.2 45.1-45.1 45.1L304 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l42.9 0c7.2 0 13.1-5.9 13.1-13.1c0-5.2-3-9.9-7.8-12l-37.4-16.6c-16.3-7.2-26.8-23.4-26.8-41.2c0-24.9 20.2-45.1 45.1-45.1zm98.9 0c8.8 0 16 7.2 16 16l0 31.6c0 23 5.5 45.6 16 66c10.5-20.3 16-42.9 16-66l0-31.6c0-8.8 7.2-16 16-16s16 7.2 16 16l0 31.6c0 34.7-10.3 68.7-29.6 97.6l-5.1 7.7c-3 4.5-8 7.1-13.3 7.1s-10.3-2.7-13.3-7.1l-5.1-7.7c-19.3-28.9-29.6-62.9-29.6-97.6l0-31.6c0-8.8 7.2-16 16-16z\"],\n    \"menorah\": [640, 512, [], \"f676\", \"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1L64 64c0 17.7-14.3 32-32 32S0 81.7 0 64l0-1.2c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32l0 128c0 17.7 14.3 32 32 32l192 0 0-160c0-17.7 14.3-32 32-32s32 14.3 32 32l0 160 192 0c17.7 0 32-14.3 32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 53-43 96-96 96l-192 0 0 64 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0 0-64L96 384c-53 0-96-43-96-96L0 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32z\"],\n    \"truck-plane\": [640, 512, [], \"e58f\", \"M200 0c-30.6 0-56 54.7-56 86.1l0 106.5L7.8 274.3C2.9 277.2 0 282.4 0 288l0 64c0 5.1 2.4 9.8 6.4 12.8s9.3 3.9 14.1 2.5l123.4-37 0 81.2-50 40c-3.8 3-6 7.6-6 12.5l0 32c0 5.1 2.5 10 6.6 13s9.5 3.8 14.4 2.2L200 480.9 290.4 511c-1.6-4.7-2.4-9.8-2.4-15l0-32.6c-18.2-10.5-30.7-29.7-31.9-51.8l-.1-.1 0-3.5 0-82.5L256 184l0-1.1s0 0 0 0l0-96.9C256 54.7 231.5 0 200 0zm88 176l0 224c0 20.9 13.4 38.7 32 45.3l0 42.7c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-40 160 0 0 40c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-42.7c18.6-6.6 32-24.4 32-45.3l0-224c0-26.5-21.5-48-48-48l-256 0c-26.5 0-48 21.5-48 48zm79.8 78.7c3.3-8.7 11.2-14.7 20.5-14.7l151.4 0c9.2 0 17.2 6 20.5 14.7L576 304l-224 0 15.8-49.3zM568 352a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM336 376a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"record-vinyl\": [512, 512, [], \"f8d9\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224a128 128 0 1 0 0-256 128 128 0 1 0 0 256zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z\"],\n    \"bong\": [448, 512, [], \"f55c\", \"M160 208.5c0 29.1-15.6 53.9-37.2 67.8c-17.2 11.1-31.5 26.1-41.7 43.7l221.8 0c-10.2-17.6-24.5-32.6-41.7-43.7c-21.6-13.9-37.2-38.7-37.2-67.8L224 64l-64 0 0 144.5zM288 64l0 144.5c0 5.7 3.1 10.9 7.9 14c11.2 7.2 21.5 15.5 30.9 24.8L366.1 208l-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l24 24 24 24c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3C374 314.1 384 347.9 384 384c0 39.4-11.9 76.1-32.2 106.5c-9.6 14.4-26.5 21.5-43.8 21.5L76.1 512c-17.3 0-34.2-7.1-43.8-21.5C11.9 460.1 0 423.4 0 384c0-67.8 35.1-127.3 88.1-161.5c4.8-3.1 7.9-8.3 7.9-14L96 64C78.3 64 64 49.7 64 32S78.3 0 96 0l16 0L272 0l16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"],\n    \"spaghetti-monster-flying\": [640, 512, [\"pastafarianism\"], \"f67b\", \"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3C390 95.1 384 80.2 384 64c0-35.3 28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4c7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4C527.3 262.3 532.7 264 536 264c2.5 0 4.3-.6 7.1-3.3c3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7c9.7-9.3 22.9-16.7 40.4-16.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3c-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7c-9.7 9.3-22.9 16.7-40.4 16.7c-18.5 0-32.9-8.5-44.3-18.6c-3.1 4-6.6 8.3-10.5 12.7c1.4 4.3 2.8 8.5 4 12.5c.9 3 1.8 5.8 2.6 8.6c3 9.8 5.5 18.2 8.6 25.9c3.9 9.8 7.4 15.4 10.8 18.5c2.6 2.4 5.9 4.3 12.8 4.3c8.7 0 16.9-4.2 33.7-13.2c15-8 35.7-18.8 62.3-18.8c13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2c-1 .6-2.1 1.1-3.2 1.7C559.9 414 541.4 424 520 424c-18.4 0-33.6-6.1-45.5-17.2c-11.1-10.3-17.9-23.7-22.7-36c-3.6-9-6.7-19.1-9.5-28.5c-16.4 12.3-36.1 23.6-58.9 31.3c3.6 10.8 8.4 23.5 14.4 36.2c7.5 15.9 16.2 30.4 25.8 40.5C433 460.5 441.2 464 448 464c13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8c-14.5-15.4-25.7-34.9-34.2-53c-8-17-14.1-33.8-18.3-46.9c-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9c-8.5 18.1-19.8 37.6-34.2 53C237 498.5 217.2 512 192 512c-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7c9.5-10.1 18.3-24.6 25.8-40.5c5.9-12.6 10.7-25.4 14.4-36.2c-22.8-7.7-42.5-19-58.9-31.3c-2.9 9.4-6 19.5-9.5 28.5c-4.8 12.2-11.6 25.6-22.7 36C153.6 417.9 138.4 424 120 424c-21.4 0-39.9-10-53.1-17.1c0 0 0 0 0 0c-1.1-.6-2.2-1.2-3.2-1.7c-15-8-26.3-13.2-39.7-13.2c-13.3 0-24-10.7-24-24s10.7-24 24-24c26.6 0 47.3 10.8 62.3 18.8c16.8 9 25 13.2 33.7 13.2c6.8 0 10.2-1.9 12.8-4.3c3.4-3.2 7-8.8 10.8-18.5c3-7.7 5.6-16.1 8.6-25.9c.8-2.7 1.7-5.6 2.6-8.6c1.2-4 2.6-8.2 4-12.5c-3.9-4.5-7.4-8.8-10.5-12.7C136.9 303.5 122.5 312 104 312c-17.5 0-30.7-7.4-40.4-16.7c-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4c-2.8-2.7-4.6-3.3-7.1-3.3c-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7c8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4c2.8 2.7 4.6 3.3 7.1 3.3c3.3 0 8.7-1.7 19.4-13.4c5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24c13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"arrow-down-up-across-line\": [576, 512, [], \"e4af\", \"M137.4 502.6c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7 192 288l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 109.3 384 224l-192 0-64 0-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 114.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96zM128 192l64 0 0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128zM448 320l-64 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128z\"],\n    \"spoon\": [512, 512, [129348, 61873, \"utensil-spoon\"], \"f2e5\", \"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8C224 80 320 0 416 0c53 0 96 43 96 96c0 96-80 192-160.2 192c-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\"],\n    \"jar-wheat\": [320, 512, [], \"e517\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm112 0l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 198 90 224 122.2 224l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 160c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 294 90 320 122.2 320l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 256c-19.1 0-36.3 8.4-48 21.7zM112 352l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 390 90 416 122.2 416l21.8 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 352c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7z\"],\n    \"envelopes-bulk\": [640, 512, [\"mail-bulk\"], \"f674\", \"M128 0C110.3 0 96 14.3 96 32l0 192 96 0 0-32c0-35.3 28.7-64 64-64l224 0 0-96c0-17.7-14.3-32-32-32L128 0zM256 160c-17.7 0-32 14.3-32 32l0 32 96 0c35.3 0 64 28.7 64 64l0 128 192 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-320 0zm240 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 256c-17.7 0-32 14.3-32 32l0 13L187.1 415.9c1.4 1 3.1 1.6 4.9 1.6s3.5-.6 4.9-1.6L352 301l0-13c0-17.7-14.3-32-32-32L64 256zm288 84.8L216 441.6c-6.9 5.1-15.3 7.9-24 7.9s-17-2.8-24-7.9L32 340.8 32 480c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-139.2z\"],\n    \"file-circle-exclamation\": [576, 512, [], \"e4eb\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"],\n    \"circle-h\": [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM368 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"pager\": [512, 512, [128223], \"f815\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm64 32l0 64c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0zm136 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0z\"],\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM208 288l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 192c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64z\"],\n    \"strikethrough\": [512, 512, [], \"f0cc\", \"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-209.9 0-.4-.1-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3c0 0 0 0 0 0s0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6c0 0 0 0 0 0l.2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1l-75.7 0c7 5.6 11.4 11.2 13.9 17.2z\"],\n    \"k\": [320, 512, [107], \"4b\", \"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7l-155.2 160L64 249 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 328 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-107 64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\"],\n    \"landmark-flag\": [512, 512, [], \"e51c\", \"M272 0l80 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-80 0 0 32 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0 0-112c0-8.8 7.2-16 16-16l16 0zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"],\n    \"pencil\": [512, 512, [9999, 61504, \"pencil-alt\"], \"f303\", \"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1 0 32c0 8.8 7.2 16 16 16l32 0zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"backward\": [512, 512, [9194], \"f04a\", \"M459.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4L288 214.3l0 41.7 0 41.7L459.5 440.6zM256 352l0-96 0-128 0-32c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160C4.2 237.5 0 246.5 0 256s4.2 18.5 11.5 24.6l192 160c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-64z\"],\n    \"caret-right\": [256, 512, [], \"f0da\", \"M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z\"],\n    \"comments\": [640, 512, [128490, 61670], \"f086\", \"M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2s0 0 0 0s0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.2-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9c0 0 0 0 0 0s0 0 0 0l-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M160 0c-23.7 0-44.4 12.9-55.4 32L48 32C21.5 32 0 53.5 0 80L0 400c0 26.5 21.5 48 48 48l144 0 0-272c0-44.2 35.8-80 80-80l48 0 0-16c0-26.5-21.5-48-48-48l-56.6 0C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48l0 272 0 16c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-220.1c0-12.7-5.1-24.9-14.1-33.9l-67.9-67.9c-9-9-21.2-14.1-33.9-14.1L320 128l-48 0zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"code-pull-request\": [512, 512, [], \"e13c\", \"M305.8 2.1C314.4 5.9 320 14.5 320 24l0 40 16 0c70.7 0 128 57.3 128 128l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L400 192c0-35.3-28.7-64-64-64l-16 0 0 40c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1zM104 80A24 24 0 1 0 56 80a24 24 0 1 0 48 0zm8 73.3l0 205.3c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-205.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80c0 32.8-19.7 61-48 73.3zM104 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm328 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"clipboard-list\": [384, 512, [], \"f46d\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"],\n    \"truck-ramp-box\": [640, 512, [\"truck-loading\"], \"f4de\", \"M640 0l0 400c0 61.9-50.1 112-112 112c-61 0-110.5-48.7-112-109.3L48.4 502.9c-17.1 4.6-34.6-5.4-39.3-22.5s5.4-34.6 22.5-39.3L352 353.8 352 64c0-35.3 28.7-64 64-64L640 0zM576 400a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM23.1 207.7c-4.6-17.1 5.6-34.6 22.6-39.2l46.4-12.4 20.7 77.3c2.3 8.5 11.1 13.6 19.6 11.3l30.9-8.3c8.5-2.3 13.6-11.1 11.3-19.6l-20.7-77.3 46.4-12.4c17.1-4.6 34.6 5.6 39.2 22.6l41.4 154.5c4.6 17.1-5.6 34.6-22.6 39.2L103.7 384.9c-17.1 4.6-34.6-5.6-39.2-22.6L23.1 207.7z\"],\n    \"user-check\": [640, 512, [], \"f4fc\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"vial-virus\": [512, 512, [], \"e597\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 288c0 53 43 96 96 96c28.6 0 54.2-12.5 71.8-32.3c.1-14.2 5.6-28.3 16.4-39.1c.2-.2 .1-.6-.2-.6c-30.9 0-56-25.1-56-56s25.1-56 56-56c.3 0 .4-.4 .2-.6c-21.9-21.9-21.9-57.3 0-79.2c2.4-2.4 5-4.6 7.8-6.5L224 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0L96 32 32 32zM96 192l0-96 64 0 0 96-64 0zM216 376c28.8 0 43.2 34.8 22.9 55.2c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9c0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9C444.8 410.8 459.2 376 488 376c13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0C410.8 259.2 376 244.8 376 216c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2c-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-88a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm40 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"sheet-plastic\": [384, 512, [], \"e571\", \"M0 448c0 35.3 28.7 64 64 64l160 0 0-128c0-17.7 14.3-32 32-32l128 0 0-288c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448zM171.3 75.3l-96 96c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l96-96c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zm96 32l-160 160c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l160-160c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM384 384l-128 0 0 128L384 384z\"],\n    \"blog\": [512, 512, [], \"f781\", \"M192 32c0 17.7 14.3 32 32 32c123.7 0 224 100.3 224 224c0 17.7 14.3 32 32 32s32-14.3 32-32C512 128.9 383.1 0 224 0c-17.7 0-32 14.3-32 32zm0 96c0 17.7 14.3 32 32 32c70.7 0 128 57.3 128 128c0 17.7 14.3 32 32 32s32-14.3 32-32c0-106-86-192-192-192c-17.7 0-32 14.3-32 32zM96 144c0-26.5-21.5-48-48-48S0 117.5 0 144L0 368c0 79.5 64.5 144 144 144s144-64.5 144-144s-64.5-144-144-144l-16 0 0 96 16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48s-48-21.5-48-48l0-224z\"],\n    \"user-ninja\": [448, 512, [129399], \"f504\", \"M224 256c-57.2 0-105.6-37.5-122-89.3c-1.1 1.3-2.2 2.6-3.5 3.8c-15.8 15.8-38.8 20.7-53.6 22.1c-8.1 .8-14.6-5.7-13.8-13.8c1.4-14.7 6.3-37.8 22.1-53.6c5.8-5.8 12.6-10.1 19.6-13.4c-7-3.2-13.8-7.6-19.6-13.4C37.4 82.7 32.6 59.7 31.1 44.9c-.8-8.1 5.7-14.6 13.8-13.8c14.7 1.4 37.8 6.3 53.6 22.1c4.8 4.8 8.7 10.4 11.7 16.1C131.4 28.2 174.4 0 224 0c70.7 0 128 57.3 128 128s-57.3 128-128 128zM0 482.3C0 399.5 56.4 330 132.8 309.9c6-1.6 12.2 .9 15.9 5.8l62.5 83.3c6.4 8.5 19.2 8.5 25.6 0l62.5-83.3c3.7-4.9 9.9-7.4 15.9-5.8C391.6 330 448 399.5 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM160 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L160 96z\"],\n    \"person-arrow-up-from-line\": [640, 512, [], \"e539\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM598.6 121.4l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L464 141.3 464 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-242.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"],\n    \"scroll-torah\": [640, 512, [\"torah\"], \"f6a0\", \"M96 480L96 32C96 14.3 74.5 0 48 0S0 14.3 0 32L0 480c0 17.7 21.5 32 48 32s48-14.3 48-32zM512 32L128 32l0 448 384 0 0-448zM592 0c-26.5 0-48 14.3-48 32l0 448c0 17.7 21.5 32 48 32s48-14.3 48-32l0-448c0-17.7-21.5-32-48-32zM196 313.7c0-3.2 .9-6.4 2.5-9.2L226.7 256l-28.3-48.5c-1.6-2.8-2.5-6-2.5-9.2c0-10.1 8.2-18.3 18.3-18.3l56.7 0 31.4-53.9c3.6-6.3 10.3-10.1 17.6-10.1s13.9 3.8 17.6 10.1L369 180l56.7 0c10.1 0 18.3 8.2 18.3 18.3c0 3.2-.9 6.4-2.5 9.2L413.3 256l28.3 48.5c1.6 2.8 2.5 6 2.5 9.2c0 10.1-8.2 18.3-18.3 18.3L369 332l-31.4 53.9c-3.6 6.3-10.3 10.1-17.6 10.1s-13.9-3.8-17.6-10.1L271 332l-56.7 0c-10.1 0-18.3-8.2-18.3-18.3zm124 54.7L341.2 332l-42.4 0L320 368.4zM254.5 256l30.3 52 70.4 0 30.3-52-30.3-52-70.4 0-30.3 52zm144.9 23.8L383 308l32.8 0-16.4-28.2zM415.8 204L383 204l16.4 28.2L415.8 204zM320 143.6L298.8 180l42.4 0L320 143.6zM224.2 204l16.4 28.2L257 204l-32.8 0zM257 308l-16.4-28.2L224.2 308l32.8 0z\"],\n    \"broom-ball\": [576, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M566.6 9.4c12.5 12.5 12.5 32.8 0 45.3l-192 192 34.7 34.7c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6l-29.1 0L256 211.7l0-29.1c0-12.5 10.1-22.6 22.6-22.6c6 0 11.8 2.4 16 6.6l34.7 34.7 192-192c12.5-12.5 32.8-12.5 45.3 0zm-344 225.5L341.1 353.4c3.7 42.7-11.7 85.2-42.3 115.8C271.4 496.6 234.2 512 195.5 512L22.1 512C9.9 512 0 502.1 0 489.9c0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2c0-31.5 12.5-61.7 34.8-84l8-8c30.6-30.6 73.1-45.9 115.8-42.3zM464 352a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"toggle-off\": [576, 512, [], \"f204\", \"M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128l-192 0c-70.7 0-128-57.3-128-128s57.3-128 128-128l192 0zM576 256c0-106-86-192-192-192L192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"],\n    \"box-archive\": [512, 512, [\"archive\"], \"f187\", \"M32 32l448 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96L0 64C0 46.3 14.3 32 32 32zm0 128l448 0 0 256c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-256zm128 80c0 8.8 7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0c-8.8 0-16 7.2-16 16z\"],\n    \"person-drowning\": [576, 512, [], \"e545\", \"M192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32.2c0 54.1 23.5 104 62.2 138.3l-21 146.7c7.8 2.1 15.5 3.3 22.8 3.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c12.4 8.5 26.1 14.8 39.7 18l17.7-97.6c10.7-1.2 21.3-3.1 31.9-5.5l105-23.9c17.2-3.9 28-21.1 24.1-38.3s-21.1-28-38.3-24.1L400 216.6c-41 9.3-83.7 7.5-123.7-5.2c-50.2-16-84.3-62.6-84.3-115.3L192 64zM320 192a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM306.5 389.9c-11.1-7.9-25.9-7.9-37 0C247 405.4 219.5 416 192 416c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 469.7 159 480 192 480c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 405.2 410.9 416 384 416c-27.5 0-55-10.6-77.5-26.1z\"],\n    \"arrow-down-9-1\": [576, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM450.7 294c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM418.3 91a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 91zM405.1 203.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zM116 141.1c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"spray-can\": [512, 512, [], \"f5bd\", \"M128 0l64 0c17.7 0 32 14.3 32 32l0 96L96 128l0-96c0-17.7 14.3-32 32-32zM0 256c0-53 43-96 96-96l128 0c53 0 96 43 96 96l0 208c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 256zm240 80A80 80 0 1 0 80 336a80 80 0 1 0 160 0zM256 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM448 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"truck-monster\": [640, 512, [], \"f63b\", \"M288 64l0 64 128 0L368 64l-80 0zM419.2 25.6L496 128l80 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64l-64 0c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l160 0 0-80c0-26.5 21.5-48 48-48l96 0c20.1 0 39.1 9.5 51.2 25.6zM152 256l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.7 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.3 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.3 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.8 3.7-14.1 6.8-21.7 9C190.1 503.1 180.1 512 168 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2L63.8 468.9c-8.6-8.6-9.3-21.9-2.3-31.3c-3.7-6.9-6.8-14.1-9-21.8C40.9 414.1 32 404.1 32 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.3-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9c1.7-11.6 11.7-20.6 23.8-20.6zm8 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM448.2 276.6c1.7-11.6 11.7-20.6 23.8-20.6l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.8 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.2 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.2 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.9 3.7-14.1 6.8-21.8 9C510.1 503.1 500.1 512 488 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2l-11.3-11.3c-8.6-8.6-9.3-21.9-2.2-31.3c-3.7-6.9-6.8-14.1-9-21.8C360.9 414.1 352 404.1 352 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.2-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9zM528 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"w\": [576, 512, [119], \"57\", \"M20.8 34c16.5-6.2 35 2.2 41.2 18.7l110.2 294L257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23l85.1 291.7L514 52.8c6.2-16.5 24.6-24.9 41.2-18.7s24.9 24.7 18.7 41.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\"],\n    \"earth-africa\": [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M177.8 63.2l10 17.4c2.8 4.8 4.2 10.3 4.2 15.9l0 41.4c0 3.9 1.6 7.7 4.3 10.4c6.2 6.2 16.5 5.7 22-1.2l13.6-17c4.7-5.9 12.9-7.7 19.6-4.3l15.2 7.6c3.4 1.7 7.2 2.6 11 2.6c6.5 0 12.8-2.6 17.4-7.2l3.9-3.9c2.9-2.9 7.3-3.6 11-1.8l29.2 14.6c7.8 3.9 12.6 11.8 12.6 20.5c0 10.5-7.1 19.6-17.3 22.2l-35.4 8.8c-7.4 1.8-15.1 1.5-22.4-.9l-32-10.7c-3.3-1.1-6.7-1.7-10.2-1.7c-7 0-13.8 2.3-19.4 6.5L176 212c-10.1 7.6-16 19.4-16 32l0 28c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16l0 48c0 17.7 14.3 32 32 32c10.1 0 19.6-4.7 25.6-12.8l25.6-34.1c8.3-11.1 12.8-24.6 12.8-38.4l0-12.1c0-3.9 2.6-7.3 6.4-8.2l5.3-1.3c11.9-3 20.3-13.7 20.3-26c0-7.1-2.8-13.9-7.8-18.9l-33.5-33.5c-3.7-3.7-3.7-9.7 0-13.4c5.7-5.7 14.1-7.7 21.8-5.1l14.1 4.7c12.3 4.1 25.7-1.5 31.5-13c3.5-7 11.2-10.8 18.9-9.2l27.4 5.5C432 112.4 351.5 48 256 48c-27.7 0-54 5.4-78.2 15.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"rainbow\": [640, 512, [127752], \"f75b\", \"M320 96C178.6 96 64 210.6 64 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C0 175.3 143.3 32 320 32s320 143.3 320 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C576 210.6 461.4 96 320 96zm0 192c-35.3 0-64 28.7-64 64l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-70.7 57.3-128 128-128s128 57.3 128 128l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-35.3-28.7-64-64-64zM160 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-123.7 100.3-224 224-224s224 100.3 224 224l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-88.4-71.6-160-160-160s-160 71.6-160 160z\"],\n    \"circle-notch\": [512, 512, [], \"f1ce\", \"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z\"],\n    \"tablet-screen-button\": [448, 512, [\"tablet-alt\"], \"f3fa\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM256 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64L64 64l0 320 320 0 0-320z\"],\n    \"paw\": [512, 512, [], \"f1b0\", \"M226.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5s.3-86.2 32.6-96.8s70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3S-2.7 179.3 21.8 165.3s59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5l0 1.6c0 25.8-20.9 46.7-46.7 46.7c-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2C84.9 480 64 459.1 64 433.3l0-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3s29.1 51.7 10.2 84.1s-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5s46.9 53.9 32.6 96.8s-52.1 69.1-84.4 58.5z\"],\n    \"cloud\": [640, 512, [9729], \"f0c2\", \"M0 336c0 79.5 64.5 144 144 144l368 0c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z\"],\n    \"trowel-bricks\": [512, 512, [], \"e58a\", \"M240.8 4.8C250.3 10.6 256 20.9 256 32l0 72 89 0c3.6-13.8 16.1-24 31-24l88 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-88 0c-14.9 0-27.4-10.2-31-24l-89 0 0 72c0 11.1-5.7 21.4-15.2 27.2s-21.2 6.4-31.1 1.4l-192-96C6.8 151.2 0 140.1 0 128s6.8-23.2 17.7-28.6l192-96c9.9-5 21.7-4.4 31.1 1.4zM288 256c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM32 384l96 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm192 0l256 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM176 384c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16zm-16-88a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"hospital-user\": [576, 512, [], \"f80d\", \"M48 0C21.5 0 0 21.5 0 48L0 256l144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 288l0 64 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 384l0 80c0 26.5 21.5 48 48 48l217.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L320 48c0-26.5-21.5-48-48-48L48 0zM152 64l16 0c8.8 0 16 7.2 16 16l0 24 24 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-24 0 0 24c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-24-24 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16l24 0 0-24c0-8.8 7.2-16 16-16zM512 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM288 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"],\n    \"tent-arrow-left-right\": [576, 512, [], \"e57f\", \"M488.1 6.2c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9L489.5 72 86.5 72l33.5-30.2c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120l402.9 0-33.5 30.2c-9.9 8.9-10.7 24-1.8 33.9s24 10.7 33.9 1.8l80-72c5.1-4.6 7.9-11 7.9-17.8s-2.9-13.3-7.9-17.8l-80-72zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"],\n    \"gavel\": [512, 512, [\"legal\"], \"f0e3\", \"M318.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-120 120c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l4-4L325.4 293.4l-4 4c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l120-120c12.5-12.5 12.5-32.8 0-45.3l-16-16c-12.5-12.5-32.8-12.5-45.3 0l-4 4L330.6 74.6l4-4c12.5-12.5 12.5-32.8 0-45.3l-16-16zm-152 288c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l48 48c12.5 12.5 32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-1.4-1.4L272 285.3 226.7 240 168 298.7l-1.4-1.4z\"],\n    \"binoculars\": [512, 512, [], \"f1e5\", \"M128 32l32 0c17.7 0 32 14.3 32 32l0 32L96 96l0-32c0-17.7 14.3-32 32-32zm64 96l0 320c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32l0-59.1c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28l99.8 0zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3l0 59.1c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-320 99.8 0zM320 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 32-96 0 0-32zm-32 64l0 160-64 0 0-160 64 0z\"],\n    \"microphone-slash\": [640, 512, [], \"f131\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 21.2-5.1 41.1-14.2 58.7L416 300.8 416 96c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6z\"],\n    \"box-tissue\": [512, 512, [], \"e05b\", \"M92.5 0L208 0c40 0 52 24 64 48s24 48 64 48l85.2 0C436 96 448 108 448 122.8c0 3.4-.7 6.8-1.9 10L409.6 224 384 288l-256 0-16-64L64.9 35.4c-.6-2.3-.9-4.6-.9-6.9C64 12.8 76.8 0 92.5 0zM79 224l16 64-15 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 256 0 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-13.5 0 25.6-64 19.9 0c26.5 0 48 21.5 48 48l0 112L0 384 0 272c0-26.5 21.5-48 48-48l31 0zM0 416l512 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-48z\"],\n    \"motorcycle\": [640, 512, [127949], \"f21c\", \"M280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l57.7 0 16.4 30.3L256 192l-45.3-45.3c-12-12-28.3-18.7-45.3-18.7L64 128c-17.7 0-32 14.3-32 32l0 32 96 0c88.4 0 160 71.6 160 160c0 11-1.1 21.7-3.2 32l70.4 0c-2.1-10.3-3.2-21-3.2-32c0-52.2 25-98.6 63.7-127.8l15.4 28.6C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L418.2 128l61.8 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-20.4 0c-7.5 0-14.7 2.6-20.5 7.4L391.7 78.9l-14-26c-7-12.9-20.5-21-35.2-21L280 32zM462.7 311.2l28.2 52.2c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-28.2-52.2c2.3-.3 4.7-.4 7.1-.4c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-15.5 5.5-29.7 14.7-40.8zM187.3 376c-9.5 23.5-32.5 40-59.3 40c-35.3 0-64-28.7-64-64s28.7-64 64-64c26.9 0 49.9 16.5 59.3 40l66.4 0C242.5 268.8 190.5 224 128 224C57.3 224 0 281.3 0 352s57.3 128 128 128c62.5 0 114.5-44.8 125.8-104l-66.4 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"bell-concierge\": [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.3C119.6 157.2 32 252.4 32 368l448 0c0-115.6-87.6-210.8-200-222.7l0-33.3 16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0-40 0zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 400z\"],\n    \"pen-ruler\": [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M469.3 19.3l23.4 23.4c25 25 25 65.5 0 90.5l-56.4 56.4L322.3 75.7l56.4-56.4c25-25 65.5-25 90.5 0zM44.9 353.2L299.7 98.3 413.7 212.3 158.8 467.1c-6.7 6.7-15.1 11.6-24.2 14.2l-104 29.7c-8.4 2.4-17.4 .1-23.6-6.1s-8.5-15.2-6.1-23.6l29.7-104c2.6-9.2 7.5-17.5 14.2-24.2zM249.4 103.4L103.4 249.4 16 161.9c-18.7-18.7-18.7-49.1 0-67.9L94.1 16c18.7-18.7 49.1-18.7 67.9 0l19.8 19.8c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1l45.1 45.1zM408.6 262.6l45.1 45.1c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1L496 350.1c18.7 18.7 18.7 49.1 0 67.9L417.9 496c-18.7 18.7-49.1 18.7-67.9 0l-87.4-87.4L408.6 262.6z\"],\n    \"people-arrows\": [640, 512, [\"people-arrows-left-right\"], \"e068\", \"M64 64a64 64 0 1 1 128 0A64 64 0 1 1 64 64zM25.9 233.4C29.3 191.9 64 160 105.6 160l44.8 0c27 0 51 13.4 65.5 34.1c-2.7 1.9-5.2 4-7.5 6.3l-64 64c-21.9 21.9-21.9 57.3 0 79.2L192 391.2l0 72.8c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-115.7c-26.5-9.5-44.7-35.8-42.2-65.6l4.1-49.3zM448 64a64 64 0 1 1 128 0A64 64 0 1 1 448 64zM431.6 200.4c-2.3-2.3-4.9-4.4-7.5-6.3c14.5-20.7 38.6-34.1 65.5-34.1l44.8 0c41.6 0 76.3 31.9 79.7 73.4l4.1 49.3c2.5 29.8-15.7 56.1-42.2 65.6L576 464c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-72.8 47.6-47.6c21.9-21.9 21.9-57.3 0-79.2l-64-64zM272 240l0 32 96 0 0-32c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-32-96 0 0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2z\"],\n    \"mars-and-venus-burst\": [640, 512, [], \"e523\", \"M504 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l39 39-22.2 22.2C475.9 78.4 439.6 64 400 64c-88.4 0-160 71.6-160 160c0 80.2 59.1 146.7 136.1 158.2c0 .6-.1 1.2-.1 1.8l0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .3 0 .4 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1c0 0 0 .1 0 .1s0 .1 0 .1l0 .1c0 0 0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l24 0-24 0c0 13.3 10.7 24 24 24s24-10.7 24-24l-24 0 24 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1l0-.1c0 0 0-.1 0-.1s0-.1 0-.1l0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 24 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-24 0 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.4 0-.3 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4c0-.6 0-1.2-.1-1.8c77-11.6 136.1-78 136.1-158.2c0-31.4-9-60.7-24.7-85.4L560 113.9l39 39c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 0zM400 128a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.1 3.8 9.9 5.1 15.2 3.6C223.6 310.8 208 269.2 208 224c0-60.8 28.3-115 72.4-150.2L220.3 92.1l-29.4-74z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"],\n    \"scissors\": [512, 512, [9984, 9986, 9988, \"cut\"], \"f0c4\", \"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"sun-plant-wilt\": [640, 512, [], \"e57a\", \"M160 0c-6.3 0-12 3.7-14.6 9.5L120.6 64.9 63.9 43.2c-5.9-2.3-12.6-.8-17 3.6s-5.9 11.1-3.6 17l21.7 56.7L9.5 145.4C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8L43.2 256.1c-2.3 5.9-.8 12.6 3.6 17s11.1 5.9 17 3.6l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.7 21.7c5.9 2.3 12.6 .8 17-3.6s5.9-11.1 3.6-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7c2.3-5.9 .8-12.6-3.6-17s-11.1-5.9-17-3.6L199.4 64.9 174.6 9.5C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm312 16c0-17.7 14.3-32 32-32s32 14.3 32 32l0 53.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C624 318 640 290.7 640 274c0-21.5-9.2-37-24-44.6l0-53.4c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 22.7c-9.8-4.3-20.6-6.7-32-6.7c-44.2 0-80 35.8-80 80l0 21.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C400 382 416 354.7 416 338c0-21.5-9.2-37-24-44.6l0-21.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 8 0 168L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-104 0 0-168 0-8 0-96z\"],\n    \"toilets-portable\": [576, 512, [], \"e584\", \"M32 0L224 0c17.7 0 32 14.3 32 32l0 32L0 64 0 32C0 14.3 14.3 0 32 0zM0 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8L48 480l0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 120 0 96zM192 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zM352 0L544 0c17.7 0 32 14.3 32 32l0 32L320 64l0-32c0-17.7 14.3-32 32-32zM320 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-160 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-368 0-24zM512 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16z\"],\n    \"hockey-puck\": [512, 512, [], \"f453\", \"M256 256C114.6 256 0 213 0 160s114.6-96 256-96s256 43 256 96s-114.6 96-256 96zm192.3 1.8c24.7-9.3 46.9-21 63.7-35.6L512 352c0 53-114.6 96-256 96S0 405 0 352L0 222.3c16.8 14.6 39 26.3 63.7 35.6C114.5 276.9 182.5 288 256 288s141.5-11.1 192.3-30.2z\"],\n    \"table\": [512, 512, [], \"f0ce\", \"M64 256l0-96 160 0 0 96L64 256zm0 64l160 0 0 96L64 416l0-96zm224 96l0-96 160 0 0 96-160 0zM448 256l-160 0 0-96 160 0 0 96zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"],\n    \"magnifying-glass-arrow-right\": [512, 512, [], \"e521\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM241 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31L120 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l118.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72z\"],\n    \"tachograph-digital\": [640, 512, [\"digital-tachograph\"], \"f566\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l512 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm32 64l224 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 256c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 368c0-8.8 7.2-16 16-16l256 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16zm320 0c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16zM80 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"users-slash\": [640, 512, [], \"e073\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L440.6 320l178.1 0c11.8 0 21.3-9.6 21.3-21.3C640 239.8 592.2 192 533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 30.2-10.5 58-28 79.9l-25.2-19.7C408.1 267.7 416 246.8 416 224c0-53-43-96-96-96c-31.1 0-58.7 14.8-76.3 37.7l-40.6-31.8c13-14.2 20.9-33.1 20.9-53.9c0-44.2-35.8-80-80-80C116.3 0 91.9 14.1 77.5 35.5L38.8 5.1zM106.7 192C47.8 192 0 239.8 0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-20.6-18.2-35.2-42.8-40.8-70.8L121.8 192l-15.2 0zM261.3 352C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l330.7 0c10.5 0 19.5-6 23.9-14.8L324.9 352l-63.6 0zM512 160A80 80 0 1 0 512 0a80 80 0 1 0 0 160z\"],\n    \"clover\": [448, 512, [], \"e139\", \"M216.6 49.9C205.1 38.5 189.5 32 173.3 32C139.4 32 112 59.4 112 93.3l0 4.9c0 12 3.3 23.7 9.4 34l18.8 31.3c1.1 1.8 1.2 3.1 1 4.2c-.2 1.2-.8 2.5-2 3.6s-2.4 1.8-3.6 2c-1 .2-2.4 .1-4.2-1l-31.3-18.8c-10.3-6.2-22-9.4-34-9.4l-4.9 0C27.4 144 0 171.4 0 205.3c0 16.2 6.5 31.8 17.9 43.3l1.2 1.2c3.4 3.4 3.4 9 0 12.4l-1.2 1.2C6.5 274.9 0 290.5 0 306.7C0 340.6 27.4 368 61.3 368l4.9 0c12 0 23.7-3.3 34-9.4l31.3-18.8c1.8-1.1 3.1-1.2 4.2-1c1.2 .2 2.5 .8 3.6 2s1.8 2.4 2 3.6c.2 1 .1 2.4-1 4.2l-18.8 31.3c-6.2 10.3-9.4 22-9.4 34l0 4.9c0 33.8 27.4 61.3 61.3 61.3c16.2 0 31.8-6.5 43.3-17.9l1.2-1.2c3.4-3.4 9-3.4 12.4 0l1.2 1.2c11.5 11.5 27.1 17.9 43.3 17.9c33.8 0 61.3-27.4 61.3-61.3l0-4.9c0-12-3.3-23.7-9.4-34l-18.8-31.3c-1.1-1.8-1.2-3.1-1-4.2c.2-1.2 .8-2.5 2-3.6s2.4-1.8 3.6-2c1-.2 2.4-.1 4.2 1l31.3 18.8c10.3 6.2 22 9.4 34 9.4l4.9 0c33.8 0 61.3-27.4 61.3-61.3c0-16.2-6.5-31.8-17.9-43.3l-1.2-1.2c-3.4-3.4-3.4-9 0-12.4l1.2-1.2c11.5-11.5 17.9-27.1 17.9-43.3c0-33.8-27.4-61.3-61.3-61.3l-4.9 0c-12 0-23.7 3.3-34 9.4l-31.3 18.8c-1.8 1.1-3.1 1.2-4.2 1c-1.2-.2-2.5-.8-3.6-2s-1.8-2.4-2-3.6c-.2-1-.1-2.4 1-4.2l18.8-31.3c6.2-10.3 9.4-22 9.4-34l0-4.9C336 59.4 308.6 32 274.7 32c-16.2 0-31.8 6.5-43.3 17.9l-1.2 1.2c-3.4 3.4-9 3.4-12.4 0l-1.2-1.2z\"],\n    \"reply\": [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M205 34.8c11.5 5.1 19 16.6 19 29.2l0 64 112 0c97.2 0 176 78.8 176 176c0 113.3-81.5 163.9-100.2 174.1c-2.5 1.4-5.3 1.9-8.1 1.9c-10.9 0-19.7-8.9-19.7-19.7c0-7.5 4.3-14.4 9.8-19.5c9.4-8.8 22.2-26.4 22.2-56.7c0-53-43-96-96-96l-96 0 0 64c0 12.6-7.4 24.1-19 29.2s-25 3-34.4-5.4l-160-144C3.9 225.7 0 217.1 0 208s3.9-17.7 10.6-23.8l160-144c9.4-8.5 22.9-10.6 34.4-5.4z\"],\n    \"star-and-crescent\": [512, 512, [9770], \"f699\", \"M0 256C0 114.6 114.6 0 256 0c33 0 64.6 6.3 93.6 17.7c7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5c-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5c7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512C114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\"],\n    \"house-fire\": [640, 512, [], \"e50c\", \"M288 350.1l0 1.9-32 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L447.3 128.1c-12.3-1-25 3-34.8 11.7c-35.4 31.6-65.6 67.7-87.3 102.8C304.3 276.5 288 314.9 288 350.1zM480 512c-88.4 0-160-71.6-160-160c0-76.7 62.5-144.7 107.2-179.4c5-3.9 10.9-5.8 16.8-5.8c7.9-.1 16 3.1 22 9.2l46 46 11.3-11.3c11.7-11.7 30.6-12.7 42.3-1C624.5 268 640 320.2 640 352c0 88.4-71.6 160-160 160zm64-111.8c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 327.1 416 363.6 416 400.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"helicopter\": [640, 512, [128641], \"f533\", \"M128 32c0-17.7 14.3-32 32-32L544 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L384 64l0 64 32 0c88.4 0 160 71.6 160 160l0 64c0 17.7-14.3 32-32 32l-160 0-64 0c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64L48 64c10.1 0 19.6 4.7 25.6 12.8L112 128l208 0 0-64L160 64c-17.7 0-32-14.3-32-32zM384 320l128 0 0-32c0-53-43-96-96-96l-32 0 0 128zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5L256 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l280.2 0c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"],\n    \"file-circle-question\": [576, 512, [], \"e4ef\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"],\n    \"laptop-code\": [640, 512, [], \"f5fc\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"],\n    \"swatchbook\": [512, 512, [], \"f5c3\", \"M0 32C0 14.3 14.3 0 32 0L160 0c17.7 0 32 14.3 32 32l0 384c0 53-43 96-96 96s-96-43-96-96L0 32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9l0-262 75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192L480 320c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-297.2 0zM128 64L64 64l0 64 64 0 0-64zM64 192l0 64 64 0 0-64-64 0zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"prescription-bottle\": [384, 512, [], \"f485\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-32 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 384l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 288l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 192l0-64z\"],\n    \"bars\": [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"],\n    \"people-group\": [640, 512, [], \"e533\", \"M72 88a56 56 0 1 1 112 0A56 56 0 1 1 72 88zM64 245.7C54 256.9 48 271.8 48 288s6 31.1 16 42.3l0-84.7zm144.4-49.3C178.7 222.7 160 261.2 160 304c0 34.3 12 65.8 32 90.5l0 21.5c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-26.8C26.2 371.2 0 332.7 0 288c0-61.9 50.1-112 112-112l32 0c24 0 46.2 7.5 64.4 20.3zM448 416l0-21.5c20-24.7 32-56.2 32-90.5c0-42.8-18.7-81.3-48.4-107.7C449.8 183.5 472 176 496 176l32 0c61.9 0 112 50.1 112 112c0 44.7-26.2 83.2-64 101.2l0 26.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32zm8-328a56 56 0 1 1 112 0A56 56 0 1 1 456 88zM576 245.7l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM320 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM240 304c0 16.2 6 31 16 42.3l0-84.7c-10 11.3-16 26.1-16 42.3zm144-42.3l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM448 304c0 44.7-26.2 83.2-64 101.2l0 42.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-42.8c-37.8-18-64-56.5-64-101.2c0-61.9 50.1-112 112-112l32 0c61.9 0 112 50.1 112 112z\"],\n    \"hourglass-end\": [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 25.5-10.1 49.9-28.1 67.9L192 210.7l-67.9-67.9C106.1 124.9 96 100.4 96 75z\"],\n    \"heart-crack\": [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M119.4 44.1c23.3-3.9 46.8-1.9 68.6 5.3l49.8 77.5-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.8 61.8c28.5-16.7 62.4-23.2 95.7-17.6C461.5 55.6 512 115.2 512 185.1l0 5.8c0 41.5-17.2 81.2-47.6 109.5L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9L47.6 300.4C17.2 272.1 0 232.4 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141z\"],\n    \"square-up-right\": [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 160c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l40 40-71 71C114 302 112 306.9 112 312s2 10 5.7 13.7l36.7 36.7c3.6 3.6 8.5 5.7 13.7 5.7s10-2 13.7-5.7l71-71 40 40c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-144c0-8.8-7.2-16-16-16l-144 0z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-84.9s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"film\": [512, 512, [127902], \"f008\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM48 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L64 96c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM160 128l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L192 96c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0z\"],\n    \"ruler-horizontal\": [640, 512, [], \"f547\", \"M0 336c0 26.5 21.5 48 48 48l544 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0c-26.5 0-48 21.5-48 48L0 336z\"],\n    \"people-robbery\": [576, 512, [], \"e536\", \"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6L328 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-305.7c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64l0 96 0 .6L8 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-227.3 13 20.5c5.9 9.2 16.1 14.9 27 14.9l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-30.4 0-37.4-58.9C157.6 142 132.1 128 104.7 128L72 128z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z\"],\n    \"caret-left\": [256, 512, [], \"f0d9\", \"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\"],\n    \"circle-exclamation\": [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"school-circle-xmark\": [640, 512, [], \"e56d\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 368z\"],\n    \"arrow-right-from-bracket\": [512, 512, [\"sign-out\"], \"f08b\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\"],\n    \"circle-chevron-down\": [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\"],\n    \"unlock-keyhole\": [448, 512, [\"unlock-alt\"], \"f13e\", \"M224 64c-44.2 0-80 35.8-80 80l0 48 240 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0 0-48C80 64.5 144.5 0 224 0c57.5 0 107 33.7 130.1 82.3c7.6 16 .8 35.1-15.2 42.6s-35.1 .8-42.6-15.2C283.4 82.6 255.9 64 224 64zm32 320c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0z\"],\n    \"cloud-showers-heavy\": [512, 512, [], \"f740\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zM81.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6S-3.3 490.7 1.9 478.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm120 0c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm244.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6s17.8 19.3 12.6 31.5zM313.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6z\"],\n    \"headphones-simple\": [512, 512, [\"headphones-alt\"], \"f58f\", \"M256 80C141.1 80 48 173.1 48 288l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 288C0 146.6 114.6 32 256 32s256 114.6 256 256l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-114.9-93.1-208-208-208zM80 352c0-35.3 28.7-64 64-64l16 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-64zm288-64c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l16 0z\"],\n    \"sitemap\": [576, 512, [], \"f0e8\", \"M208 80c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-8 0 0 40 152 0c30.9 0 56 25.1 56 56l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-4.4-3.6-8-8-8l-152 0 0 40 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-40-152 0c-4.4 0-8 3.6-8 8l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-30.9 25.1-56 56-56l152 0 0-40-8 0c-26.5 0-48-21.5-48-48l0-64z\"],\n    \"circle-dollar-to-slot\": [512, 512, [\"donate\"], \"f4b9\", \"M326.7 403.7c-22.1 8-45.9 12.3-70.7 12.3s-48.7-4.4-70.7-12.3l-.8-.3c-30-11-56.8-28.7-78.6-51.4C70 314.6 48 263.9 48 208C48 93.1 141.1 0 256 0S464 93.1 464 208c0 55.9-22 106.6-57.9 144c-1 1-2 2.1-3 3.1c-21.4 21.4-47.4 38.1-76.3 48.6zM256 91.9c-11.1 0-20.1 9-20.1 20.1l0 6c-5.6 1.2-10.9 2.9-15.9 5.1c-15 6.8-27.9 19.4-31.1 37.7c-1.8 10.2-.8 20 3.4 29c4.2 8.8 10.7 15 17.3 19.5c11.6 7.9 26.9 12.5 38.6 16l2.2 .7c13.9 4.2 23.4 7.4 29.3 11.7c2.5 1.8 3.4 3.2 3.7 4c.3 .8 .9 2.6 .2 6.7c-.6 3.5-2.5 6.4-8 8.8c-6.1 2.6-16 3.9-28.8 1.9c-6-1-16.7-4.6-26.2-7.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-2.2-.7-4.3-1.5-6.4-2.1c-10.5-3.5-21.8 2.2-25.3 12.7s2.2 21.8 12.7 25.3c1.2 .4 2.7 .9 4.4 1.5c7.9 2.7 20.3 6.9 29.8 9.1l0 6.4c0 11.1 9 20.1 20.1 20.1s20.1-9 20.1-20.1l0-5.5c5.3-1 10.5-2.5 15.4-4.6c15.7-6.7 28.4-19.7 31.6-38.7c1.8-10.4 1-20.3-3-29.4c-3.9-9-10.2-15.6-16.9-20.5c-12.2-8.8-28.3-13.7-40.4-17.4l-.8-.2c-14.2-4.3-23.8-7.3-29.9-11.4c-2.6-1.8-3.4-3-3.6-3.5c-.2-.3-.7-1.6-.1-5c.3-1.9 1.9-5.2 8.2-8.1c6.4-2.9 16.4-4.5 28.6-2.6c4.3 .7 17.9 3.3 21.7 4.3c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-4.4-1.2-14.4-3.2-21-4.4l0-6.3c0-11.1-9-20.1-20.1-20.1zM48 352l16 0c19.5 25.9 44 47.7 72.2 64L64 416l0 32 192 0 192 0 0-32-72.2 0c28.2-16.3 52.8-38.1 72.2-64l16 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48z\"],\n    \"memory\": [576, 512, [], \"f538\", \"M64 64C28.7 64 0 92.7 0 128l0 7.4c0 6.8 4.4 12.6 10.1 16.3C23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6L0 320l576 0 0-71.4c0-6.8-4.4-12.6-10.1-16.3C552.7 223.7 544 208.9 544 192s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3l0-7.4c0-35.3-28.7-64-64-64L64 64zM576 352L0 352l0 64c0 17.7 14.3 32 32 32l48 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 48 0c17.7 0 32-14.3 32-32l0-64zM192 160l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"road-spikes\": [640, 512, [], \"e568\", \"M64 116.8c0-15.8 20.5-22 29.3-8.9L192 256l0-139.2c0-15.8 20.5-22 29.3-8.9L320 256l0-139.2c0-15.8 20.5-22 29.3-8.9L448 256l0-139.2c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.7-26.6 49.7L512 352l-64 0-64 0-64 0-64 0-64 0L64 352l0-235.2zM32 384l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"fire-burner\": [640, 512, [], \"e4f1\", \"M345.7 48.3L358 34.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C469 131.2 480 162.2 480 192.2C480 280.8 408.7 352 320 352c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2C273.4 2.3 280.7-.2 288 0c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM384 240.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C293 167.1 256 203.6 256 240.2c0 35.3 28.7 64 64 64s64-28.7 64-64zM32 288c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64 448 0 0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l0-96zM320 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm160-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"flag\": [448, 512, [127988, 61725], \"f024\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 64 0 368 0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30l0-247.7c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48l0-16z\"],\n    \"hanukiah\": [640, 512, [128334], \"f6e6\", \"M314.2 3.3C309.1 12.1 296 36.6 296 56c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C324.6 1.2 322.4 0 320 0s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C36.6 49.2 34.4 48 32 48s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7C165.1 60.1 152 84.6 152 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3C389.1 60.1 376 84.6 376 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7C517.1 60.1 504 84.6 504 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176L96 320c-17.7 0-32-14.3-32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 53 43 96 96 96l192 0 0 64-128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-64 192 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32l-192 0 0-176z\"],\n    \"feather\": [512, 512, [129718], \"f52d\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57 68 0c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330l0 55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"],\n    \"volume-low\": [448, 512, [128264, \"volume-down\"], \"f027\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM412.6 181.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"],\n    \"comment-slash\": [640, 512, [], \"f4b3\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L512.9 376.7C552.2 340.2 576 292.3 576 240C576 125.1 461.4 32 320 32c-67.7 0-129.3 21.4-175.1 56.3L38.8 5.1zm385.2 425L82.9 161.3C70.7 185.6 64 212.2 64 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c37 0 72.3-6.4 104.1-17.9z\"],\n    \"cloud-sun-rain\": [640, 512, [127782], \"f743\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l10.4 62.4c-23.3 10.8-42.9 28.4-56 50.3c-14.6-9-31.8-14.1-50.2-14.1c-53 0-96 43-96 96c0 35.5 19.3 66.6 48 83.2c.8 31.8 13.2 60.7 33.1 82.7l-56 39.2c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM208 144c13.8 0 26.7 4.4 37.1 11.9c-1.2 4.1-2.2 8.3-3 12.6c-37.9 14.6-67.2 46.6-77.8 86.4C151.8 243.1 144 226.5 144 208c0-35.3 28.7-64 64-64zm69.4 276c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm74.5-116.1c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"],\n    \"compress\": [448, 512, [], \"f066\", \"M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z\"],\n    \"wheat-awn\": [512, 512, [\"wheat-alt\"], \"e2cd\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0L486.5 231c6.2-6.2 6.2-16.4 0-22.6L475.2 197c-5.2-5.2-10.6-9.8-16.4-13.9L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3z\"],\n    \"ankh\": [320, 512, [9765], \"f644\", \"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1c-5.9 6.2-11.8 11.8-17.4 16.7c-5.6-4.9-11.5-10.5-17.4-16.7C116.7 204.6 96 169.6 96 128zM160 0C89.3 0 32 57.3 32 128c0 52.4 21.5 95.5 46.8 128L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-46.8 0c25.4-32.5 46.8-75.6 46.8-128C288 57.3 230.7 0 160 0z\"],\n    \"hands-holding-child\": [640, 512, [], \"e4fa\", \"M320 0a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm44.7 164.3L375.8 253c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35-7.6 0-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8L255.5 181c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 104.8 295.3 96 320 96s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8l-19.8-16.7zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"],\n    \"asterisk\": [384, 512, [10033, 61545], \"2a\", \"M192 32c17.7 0 32 14.3 32 32l0 135.5 111.5-66.9c15.2-9.1 34.8-4.2 43.9 11s4.2 34.8-11 43.9L254.2 256l114.3 68.6c15.2 9.1 20.1 28.7 11 43.9s-28.7 20.1-43.9 11L224 312.5 224 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-135.5L48.5 379.4c-15.2 9.1-34.8 4.2-43.9-11s-4.2-34.8 11-43.9L129.8 256 15.5 187.4c-15.2-9.1-20.1-28.7-11-43.9s28.7-20.1 43.9-11L160 199.5 160 64c0-17.7 14.3-32 32-32z\"],\n    \"square-check\": [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"peseta-sign\": [384, 512, [], \"e221\", \"M64 32C46.3 32 32 46.3 32 64l0 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 96 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 96 0c77.4 0 142-55 156.8-128l3.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-3.2 0C334 87 269.4 32 192 32L64 32zM282.5 160L96 160l0-64 96 0c41.8 0 77.4 26.7 90.5 64zM96 224l186.5 0c-13.2 37.3-48.7 64-90.5 64l-96 0 0-64z\"],\n    \"heading\": [448, 512, [\"header\"], \"f1dc\", \"M0 64C0 46.3 14.3 32 32 32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 112 224 0 0-112-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 144 0 176 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-144-224 0 0 144 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-176L48 96 32 96C14.3 96 0 81.7 0 64z\"],\n    \"ghost\": [384, 512, [128123], \"f6e2\", \"M40.1 467.1l-11.2 9c-3.2 2.5-7.1 3.9-11.1 3.9C8 480 0 472 0 462.2L0 192C0 86 86 0 192 0S384 86 384 192l0 270.2c0 9.8-8 17.8-17.8 17.8c-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"list\": [512, 512, [\"list-squares\"], \"f03a\", \"M40 48C26.7 48 16 58.7 16 72l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24L40 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM16 232l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z\"],\n    \"square-phone-flip\": [448, 512, [\"phone-square-alt\"], \"f87b\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zm-90.7 96.7c-9.7-2.6-19.9 2.3-23.7 11.6l-20 48c-3.4 8.2-1 17.6 5.8 23.2L280 231.7c-16.6 35.2-45.1 63.7-80.3 80.3l-20.2-24.7c-5.6-6.8-15-9.2-23.2-5.8l-48 20c-9.3 3.9-14.2 14-11.6 23.7l12 44C111.1 378 119 384 128 384c123.7 0 224-100.3 224-224c0-9-6-16.9-14.7-19.3l-44-12z\"],\n    \"cart-plus\": [576, 512, [], \"f217\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20l44 0 0 44c0 11 9 20 20 20s20-9 20-20l0-44 44 0c11 0 20-9 20-20s-9-20-20-20l-44 0 0-44c0-11-9-20-20-20s-20 9-20 20l0 44-44 0c-11 0-20 9-20 20z\"],\n    \"gamepad\": [640, 512, [], \"f11b\", \"M192 64C86 64 0 150 0 256S86 448 192 448l256 0c106 0 192-86 192-192s-86-192-192-192L192 64zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-224a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM100.7 132.7c6.2-6.2 16.4-6.2 22.6 0L160 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L182.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L160 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L137.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6zm192 0c6.2-6.2 16.4-6.2 22.6 0L352 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L374.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L352 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L329.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6z\"],\n    \"egg\": [384, 512, [129370], \"f7fb\", \"M192 496C86 496 0 394 0 288C0 176 64 16 192 16s192 160 192 272c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2C69.7 226.1 64 259.7 64 288c0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8c10.1-28.5 25-54.1 43.7-71.2z\"],\n    \"house-medical-circle-xmark\": [640, 512, [], \"e513\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"],\n    \"campground\": [576, 512, [9978], \"f6bb\", \"M377 52c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5L288 60.8 249 12c-11-13.8-31.2-16-45-5s-16 31.2-5 45l48 60L12.3 405.4C4.3 415.4 0 427.7 0 440.4L0 464c0 26.5 21.5 48 48 48l240 0 240 0c26.5 0 48-21.5 48-48l0-23.6c0-12.7-4.3-25.1-12.3-35L329 112l48-60zM288 448l-119.5 0L288 291.7 407.5 448 288 448z\"],\n    \"folder-plus\": [512, 512, [], \"f65e\", \"M512 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256zM232 376c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"],\n    \"paintbrush\": [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448L64 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z\"],\n    \"lock\": [448, 512, [128274], \"f023\", \"M144 144l0 48 160 0 0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192l0-48C80 64.5 144.5 0 224 0s144 64.5 144 144l0 48 16 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0z\"],\n    \"gas-pump\": [512, 512, [9981], \"f52f\", \"M32 64C32 28.7 60.7 0 96 0L256 0c35.3 0 64 28.7 64 64l0 192 8 0c48.6 0 88 39.4 88 88l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-154c-27.6-7.1-48-32.2-48-62l0-64L384 64c-8.8-8.8-8.8-23.2 0-32s23.2-8.8 32 0l77.3 77.3c12 12 18.7 28.3 18.7 45.3l0 13.5 0 24 0 32 0 152c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-32c0-22.1-17.9-40-40-40l-8 0 0 144c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64zM96 80l0 96c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L112 64c-8.8 0-16 7.2-16 16z\"],\n    \"hot-tub-person\": [512, 512, [\"hot-tub\"], \"f593\", \"M272 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L295.8 82.8C280.7 69.1 272 49.7 272 29.2l0-5.2zM0 320l0 16L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-170.7 0c-13.8 0-27.3-4.5-38.4-12.8l-85.3-64C137 166.7 116.8 160 96 160c-53 0-96 43-96 96l0 64zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm112 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zM360 0c-13.3 0-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L407.8 82.8C392.7 69.1 384 49.7 384 29.2l0-5.2c0-13.3-10.7-24-24-24zM64 128A64 64 0 1 0 64 0a64 64 0 1 0 0 128z\"],\n    \"map-location\": [576, 512, [\"map-marked\"], \"f59f\", \"M302.8 312C334.9 271.9 408 174.6 408 120C408 53.7 354.3 0 288 0S168 53.7 168 120c0 54.6 73.1 151.9 105.2 192c7.7 9.6 22 9.6 29.6 0zM416 503l144.9-58c9.1-3.6 15.1-12.5 15.1-22.3L576 152c0-17-17.1-28.6-32.9-22.3l-116 46.4c-.5 1.2-1 2.5-1.5 3.7c-2.9 6.8-6.1 13.7-9.6 20.6L416 503zM15.1 187.3C6 191 0 199.8 0 209.6L0 480.4c0 17 17.1 28.6 32.9 22.3L160 451.8l0-251.4c-3.5-6.9-6.7-13.8-9.6-20.6c-5.6-13.2-10.4-27.4-12.8-41.5l-122.6 49zM384 255c-20.5 31.3-42.3 59.6-56.2 77c-20.5 25.6-59.1 25.6-79.6 0c-13.9-17.4-35.7-45.7-56.2-77l0 194.4 192 54.9L384 255z\"],\n    \"house-flood-water\": [576, 512, [], \"e50e\", \"M306.8 6.1C295.6-2 280.4-2 269.2 6.1l-176 128c-11.2 8.2-15.9 22.6-11.6 35.8S98.1 192 112 192l16 0 0 73c1.7 1 3.3 2 4.9 3.1c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c1.5-1 3-2 4.5-2.9l-.3-73.2 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128zM269.5 309.9C247 325.4 219.5 336 192 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 389.7 159 400 192 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"],\n    \"tree\": [448, 512, [127794], \"f1bb\", \"M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208l24.9 0L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320L80 320 5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5L192 448l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 168.5 0c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320l33.4 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208l24.9 0c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z\"],\n    \"bridge-lock\": [640, 512, [], \"e4cc\", \"M32 64c0-17.7 14.3-32 32-32l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-40 0 0 64-8 0c-61.9 0-112 50.1-112 112l0 24.6c-9.9 5.8-18.2 14.1-23.8 24.1c-17.6-20-43.4-32.7-72.2-32.7c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-128 72 0 0-64L64 96C46.3 96 32 81.7 32 64zM408 96l0 64 80 0 0-64-80 0zm-48 64l0-64-80 0 0 64 80 0zM152 96l0 64 80 0 0-64-80 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"sack-dollar\": [512, 512, [128176], \"f81d\", \"M320 96L192 96 144.6 24.9C137.5 14.2 145.1 0 157.9 0L354.1 0c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128l128 0c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96L96 512c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4c0 0 0 0 0 0s0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15c0 0 0 0 0 0l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z\"],\n    \"car-side\": [640, 512, [128663], \"f5e4\", \"M171.3 96L224 96l0 96-112.7 0 30.4-75.9C146.5 104 158.2 96 171.3 96zM272 192l0-96 81.2 0c9.7 0 18.9 4.4 25 12l67.2 84L272 192zm256.2 1L428.2 68c-18.2-22.8-45.8-36-75-36L171.3 32c-39.3 0-74.6 23.9-89.1 60.3L40.6 196.4C16.8 205.8 0 228.9 0 256L0 368c0 17.7 14.3 32 32 32l33.3 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l130.7 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l33.3 0c17.7 0 32-14.3 32-32l0-48c0-65.2-48.8-119-111.8-127zM434.7 368a48 48 0 1 1 90.5 32 48 48 0 1 1 -90.5-32zM160 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"share-nodes\": [448, 512, [\"share-alt\"], \"f1e0\", \"M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z\"],\n    \"heart-circle-minus\": [576, 512, [], \"e4ff\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"],\n    \"hourglass-half\": [384, 512, [\"hourglass-2\"], \"f252\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 19-5.6 37.4-16 53L112 128c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9L112 384z\"],\n    \"microscope\": [512, 512, [128300], \"f610\", \"M160 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32zM32 448l288 0c70.7 0 128-57.3 128-128s-57.3-128-128-128l0-64c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128l16.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"sink\": [512, 512, [], \"e06d\", \"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32s14.3 32 32 32s32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96l0 192-64 0 0-24c0-30.9-25.1-56-56-56l-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c4.4 0 8 3.6 8 8l0 24-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-24c0-4.4 3.6-8 8-8l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0c-30.9 0-56 25.1-56 56l0 24-64 0 0-192zM480 416l0-32L32 384l0 32c0 53 43 96 96 96l256 0c53 0 96-43 96-96z\"],\n    \"bag-shopping\": [448, 512, [\"shopping-bag\"], \"f290\", \"M160 112c0-35.3 28.7-64 64-64s64 28.7 64 64l0 48-128 0 0-48zm-48 48l-64 0c-26.5 0-48 21.5-48 48L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-208c0-26.5-21.5-48-48-48l-64 0 0-48C336 50.1 285.9 0 224 0S112 50.1 112 112l0 48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"arrow-down-z-a\": [576, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 64c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 160l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 96 352 96c-17.7 0-32-14.3-32-32zm96 192c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 448l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128c5.4-10.8 16.5-17.7 28.6-17.7zM395.8 400l40.4 0L416 359.6 395.8 400z\"],\n    \"mitten\": [448, 512, [], \"f7b5\", \"M352 384L64 384 5.4 178.9C1.8 166.4 0 153.4 0 140.3C0 62.8 62.8 0 140.3 0l3.4 0c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192l2.8 0c34.9 0 63.3 28.3 63.3 63.3c0 15.9-6 31.2-16.8 42.9L352 384zM32 448c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-32z\"],\n    \"person-rays\": [512, 512, [], \"e54d\", \"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1-28.6 47.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L328 256.9 328 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM7 7C16.4-2.3 31.6-2.3 41 7l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 41C-2.3 31.6-2.3 16.4 7 7zM471 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L471 7zM7 505c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-9.4 9.4-24.6 9.4-33.9 0zm464 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"],\n    \"users\": [640, 512, [], \"f0c0\", \"M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192l42.7 0c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0L21.3 320C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7l42.7 0C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3l-213.3 0zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352l117.3 0C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7l-330.7 0c-14.7 0-26.7-11.9-26.7-26.7z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\"],\n    \"flask-vial\": [640, 512, [], \"e4f3\", \"M175 389.4c-9.8 16-15 34.3-15 53.1c-10 3.5-20.8 5.5-32 5.5c-53 0-96-43-96-96L32 64C14.3 64 0 49.7 0 32S14.3 0 32 0L96 0l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 245.9-49 79.6zM96 64l0 96 64 0 0-96L96 64zM352 0L480 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 150.9L629.7 406.2c6.7 10.9 10.3 23.5 10.3 36.4c0 38.3-31.1 69.4-69.4 69.4l-309.2 0c-38.3 0-69.4-31.1-69.4-69.4c0-12.8 3.6-25.4 10.3-36.4L320 214.9 320 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zm32 64l0 160c0 5.9-1.6 11.7-4.7 16.8L330.5 320l171 0-48.8-79.2c-3.1-5-4.7-10.8-4.7-16.8l0-160-64 0z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208z\"],\n    \"om\": [512, 512, [128329], \"f679\", \"M379.3 4.7c-6.2-6.2-16.4-6.2-22.6 0l-16 16c-6.2 6.2-6.2 16.4 0 22.6l16 16c6.2 6.2 16.4 6.2 22.6 0l16-16c6.2-6.2 6.2-16.4 0-22.6l-16-16zM281 66.7c-2.2-1.5-4.9-2.5-7.7-2.7c-.6 0-1.3-.1-1.9 0c-3.9 .2-7.4 1.7-10.1 4.2c-.9 .8-1.6 1.7-2.3 2.6c-1.7 2.4-2.7 5.3-2.9 8.5c0 .7 0 1.4 0 2.1c.2 2.2 .9 4.3 1.9 6.2l.3 .6c.3 .6 .8 1.4 1.4 2.4c1.2 2 2.9 4.8 5.1 8.2c4.4 6.7 11.1 15.5 20 24.4C302.4 141.1 330.3 160 368 160c31.2 0 56.6-10.4 73.9-20.2c8.7-5 15.6-9.9 20.4-13.8c2.4-1.9 4.3-3.6 5.7-4.9c.7-.6 1.3-1.2 1.7-1.6l.6-.5 .1-.1 .1-.1s0 0 0 0s0 0 0 0c5.9-5.8 9.5-13.9 9.5-22.8c0-17.7-14.3-32-32-32c-8.7 0-16.7 3.5-22.4 9.2c-.1 .1-.2 .2-.5 .4c-.5 .5-1.5 1.3-2.8 2.4c-2.7 2.2-6.8 5.2-12.1 8.2C399.4 90.4 384.8 96 368 96c-20.8 0-42.4-7-59.5-14.6c-8.4-3.7-15.4-7.5-20.3-10.3c-2.4-1.4-4.3-2.5-5.6-3.3c-.6-.4-1.1-.7-1.4-.9l-.3-.2zM115.2 169.6c8-6 17.9-9.6 28.8-9.6c26.5 0 48 21.5 48 48s-21.5 48-48 48l-34.2 0c-7.6 0-13.8 6.2-13.8 13.8c0 1.5 .2 2.9 .7 4.4l8 24c4.4 13.1 16.6 21.9 30.4 21.9l8.9 0 16 0c35.3 0 64 28.7 64 64s-28.7 64-64 64c-50.8 0-82.7-21.5-102.2-42.8c-9.9-10.8-16.6-21.6-20.9-29.7c-2.1-4-3.6-7.3-4.5-9.6c-.5-1.1-.8-2-1-2.5l-.2-.5c-.3-.9-.7-1.8-1.1-2.6c-1.2-2.2-2.8-4-4.7-5.4c-1.9-1.4-4.1-2.3-6.5-2.8c-1.4-.3-2.9-.3-4.4-.2c-2.5 .2-4.8 1-6.8 2.3c-1.1 .7-2.2 1.5-3.1 2.5c-2.4 2.5-4.1 5.8-4.5 9.5c-.1 .6-.1 1.1-.1 1.7c0 0 0 0 0 0c0 .8 .1 1.7 .2 2.5l0 .1c0 .3 .1 .8 .2 1.3c.2 1.1 .4 2.7 .8 4.6c.8 3.9 2 9.4 3.9 15.9c3.8 13 10.3 30.4 21.3 48C48.7 476.2 89.4 512 160 512c70.7 0 128-57.3 128-128c0-23.3-6.2-45.2-17.1-64l22.6 0c25.5 0 49.9-10.1 67.9-28.1l26.5-26.5c6-6 14.1-9.4 22.6-9.4l5.5 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32c-25.7 0-41.4-12.5-51.2-25.6c-5-6.7-8.4-13.4-10.5-18.6c-1.1-2.5-1.8-4.6-2.2-6c-.2-.7-.4-1.2-.5-1.5l-.1-.2c-.3-1.3-.8-2.6-1.5-3.8c-1.1-2-2.6-3.8-4.4-5.1c-2.7-2-6-3.2-9.6-3.2l-.2 0c-8 .1-14.6 6.1-15.6 13.9c0 0 0 0 0 0c0 .3-.1 .6-.2 1.1c-.1 .9-.3 2.1-.4 3.6c-.3 3-.6 7.3-.6 12.4c0 10.1 1.1 23.9 5.8 38.1c4.8 14.3 13.4 29.3 28.6 40.7C368.7 473.3 389.3 480 416 480c53 0 96-43 96-96l0-96c0-53-43-96-96-96l-5.5 0c-25.5 0-49.9 10.1-67.9 28.1l-26.5 26.5c-6 6-14.1 9.4-22.6 9.4l-48.3 0c6.9-14.5 10.8-30.8 10.8-48c0-61.9-50.1-112-112-112c-25.2 0-48.5 8.3-67.2 22.4c-14.1 10.6-17 30.7-6.4 44.8s30.7 17 44.8 6.4z\"],\n    \"worm\": [512, 512, [], \"e599\", \"M256 96c0-53 43-96 96-96l38.4 0C439.9 0 480 40.1 480 89.6l0 86.4 0 16 0 184c0 75.1-60.9 136-136 136s-136-60.9-136-136l0-80c0-22.1-17.9-40-40-40s-40 17.9-40 40l0 168c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-168c0-75.1 60.9-136 136-136s136 60.9 136 136l0 80c0 22.1 17.9 40 40 40s40-17.9 40-40l0-184-32 0c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"],\n    \"house-circle-xmark\": [640, 512, [], \"e50b\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"plug\": [384, 512, [128268], \"f1e6\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2C297 398 352 333.4 352 256l0-32c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"],\n    \"chevron-up\": [512, 512, [], \"f077\", \"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64l10.9 0 8.2 0c.1 0 .1-.1 .1-.1s.1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L355.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9c-11.9 0-22.4-8-25.4-19.5l-57-212.8z\"],\n    \"stopwatch\": [448, 512, [9201], \"f2f2\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L224 0 176 0zm72 192l0 128c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-128c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"bridge-circle-xmark\": [640, 512, [], \"e4cb\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M128 0C110.3 0 96 14.3 96 32c0 16.1 11.9 29.4 27.4 31.7C78.4 106.8 8 190 8 288c0 47.4 30.8 72.3 56 84.7L64 400l192 0 0-27.3c25.2-12.5 56-37.4 56-84.7c0-37.3-10.2-72.4-25.3-104.1l-99.4 99.4c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L270.8 154.6c-23.2-38.1-51.8-69.5-74.2-90.9C212.1 61.4 224 48.1 224 32c0-17.7-14.3-32-32-32L128 0zM48 432L6.6 473.4c-4.2 4.2-6.6 10-6.6 16C0 501.9 10.1 512 22.6 512l274.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L272 432 48 432z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-16.9-79.2c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"ear-deaf\": [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5c-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3C74.8 132.5 149.4 64 240 64c97.2 0 176 78.8 176 176c0 46-17.7 87.9-46.6 119.3c-12 13-17.4 24.8-17.4 34.7l0 6.1c0 61.9-50.1 112-112 112c-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48l0-6.1c0-32.9 17.4-59.6 34.4-78c18.4-20 29.6-46.6 29.6-75.9c0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"],\n    \"road-circle-check\": [640, 512, [], \"e564\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"dice-five\": [448, 512, [9860], \"f523\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"square-rss\": [448, 512, [\"rss-square\"], \"f143\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"land-mine-on\": [640, 512, [], \"e51b\", \"M344 24l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24zM192 320c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 32-256 0 0-32zm-77.3 90.5c8.1-16.3 24.8-26.5 42.9-26.5l324.7 0c18.2 0 34.8 10.3 42.9 26.5l27.6 55.2C563.5 487 548 512 524.2 512l-408.4 0c-23.8 0-39.3-25-28.6-46.3l27.6-55.2zM36.3 138.3c7.5-10.9 22.5-13.6 33.4-6.1l104 72c10.9 7.5 13.6 22.5 6.1 33.4s-22.5 13.6-33.4 6.1l-104-72c-10.9-7.5-13.6-22.5-6.1-33.4zm534.1-6.1c10.9-7.5 25.8-4.8 33.4 6.1s4.8 25.8-6.1 33.4l-104 72c-10.9 7.5-25.8 4.8-33.4-6.1s-4.8-25.8 6.1-33.4l104-72z\"],\n    \"i-cursor\": [256, 512, [], \"f246\", \"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3L96 224l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7l0-95.7 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-95.7c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\"],\n    \"stamp\": [512, 512, [], \"f5bf\", \"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2L112 256C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3L32 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-50.7c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112l-33.8 0c-29.9 0-54.2-24.3-54.2-54.2zM416 416l0 32L96 448l0-32 320 0z\"],\n    \"stairs\": [576, 512, [], \"e289\", \"M384 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96z\"],\n    \"i\": [320, 512, [105], \"49\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l96 0 0 320-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-320 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L160 32 32 32z\"],\n    \"hryvnia-sign\": [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M121.9 116.2C138.3 103.1 158.7 96 179.6 96L223 96c27.1 0 49 21.9 49 49c0 11.5-4 22.4-11.1 31L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l123.5 0-50.6 28.9c-1.7 1-3.4 2-5.1 3.1L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l20.3 0c-2.8 9.9-4.3 20.4-4.3 31c0 62.4 50.6 113 113 113l43.4 0c35.5 0 70-12.1 97.7-34.3L308 441c13.8-11 16-31.2 5-45s-31.2-16-45-5l-5.9 4.7c-16.4 13.1-36.7 20.2-57.7 20.2L161 416c-27.1 0-49-21.9-49-49c0-11.5 4-22.4 11.1-31L352 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-123.5 0 50.6-28.9c1.7-1 3.4-2 5.1-3.1l67.8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-20.3 0c2.8-10 4.3-20.4 4.3-31c0-62.4-50.6-113-113-113l-43.4 0c-35.5 0-70 12.1-97.7 34.3L76 71c-13.8 11-16 31.2-5 45s31.2 16 45 5l5.9-4.7z\"],\n    \"pills\": [576, 512, [], \"f484\", \"M112 96c-26.5 0-48 21.5-48 48l0 112 96 0 0-112c0-26.5-21.5-48-48-48zM0 144C0 82.1 50.1 32 112 32s112 50.1 112 112l0 224c0 61.9-50.1 112-112 112S0 429.9 0 368L0 144zM554.9 399.4c-7.1 12.3-23.7 13.1-33.8 3.1L333.5 214.9c-10-10-9.3-26.7 3.1-33.8C360 167.7 387.1 160 416 160c88.4 0 160 71.6 160 160c0 28.9-7.7 56-21.1 79.4zm-59.5 59.5C472 472.3 444.9 480 416 480c-88.4 0-160-71.6-160-160c0-28.9 7.7-56 21.1-79.4c7.1-12.3 23.7-13.1 33.8-3.1L498.5 425.1c10 10 9.3 26.7-3.1 33.8z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"],\n    \"tooth\": [448, 512, [129463], \"f5c9\", \"M186.1 52.1C169.3 39.1 148.7 32 127.5 32C74.7 32 32 74.7 32 127.5l0 6.2c0 15.8 3.7 31.3 10.7 45.5l23.5 47.1c4.5 8.9 7.6 18.4 9.4 28.2l36.7 205.8c2 11.2 11.6 19.4 22.9 19.8s21.4-7.4 24-18.4l28.9-121.3C192.2 323.7 207 312 224 312s31.8 11.7 35.8 28.3l28.9 121.3c2.6 11.1 12.7 18.8 24 18.4s20.9-8.6 22.9-19.8l36.7-205.8c1.8-9.8 4.9-19.3 9.4-28.2l23.5-47.1c7.1-14.1 10.7-29.7 10.7-45.5l0-2.1c0-55-44.6-99.6-99.6-99.6c-24.1 0-47.4 8.8-65.6 24.6l-3.2 2.8 19.5 15.2c7 5.4 8.2 15.5 2.8 22.5s-15.5 8.2-22.5 2.8l-24.4-19-37-28.8z\"],\n    \"v\": [384, 512, [118], \"56\", \"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\"],\n    \"bangladeshi-taka-sign\": [384, 512, [], \"e2e6\", \"M36 32.3C18.4 30.1 2.4 42.5 .2 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8L64 160l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 53 43 96 96 96l32 0c106 0 192-86 192-192l0-32c0-53-43-96-96-96l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0c17.7 0 32 14.3 32 32l0 32c0 70.7-57.3 128-128 128l-32 0c-17.7 0-32-14.3-32-32l0-160 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-31.5c0-48.4-36.1-89.3-84.1-95.3l-7.9-1z\"],\n    \"bicycle\": [640, 512, [128690], \"f206\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l25.7 0 34.6 64-149.4 0-27.4-38C191 99.7 183.7 96 176 96l-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l43.7 0 22.1 30.7-26.6 53.1c-10-2.5-20.5-3.8-31.2-3.8C57.3 224 0 281.3 0 352s57.3 128 128 128c65.3 0 119.1-48.9 127-112l49 0c8.5 0 16.3-4.5 20.7-11.8l84.8-143.5 21.7 40.1C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L375.4 48.8C369.8 38.4 359 32 347.2 32L312 32zM458.6 303.7l32.3 59.7c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-32.3-59.7c3.6-.6 7.4-.9 11.2-.9c39.8 0 72 32.2 72 72s-32.2 72-72 72s-72-32.2-72-72c0-18.6 7-35.5 18.6-48.3zM133.2 368l65 0c-7.3 32.1-36 56-70.2 56c-39.8 0-72-32.2-72-72s32.2-72 72-72c1.7 0 3.4 .1 5.1 .2l-24.2 48.5c-9 18.1 4.1 39.4 24.3 39.4zm33.7-48l50.7-101.3 72.9 101.2-.1 .1-123.5 0zm90.6-128l108.5 0L317 274.8 257.4 192z\"],\n    \"staff-snake\": [384, 512, [\"rod-asclepius\", \"rod-snake\", \"staff-aesculapius\"], \"e579\", \"M222.6 43.2l-.1 4.8L288 48c53 0 96 43 96 96s-43 96-96 96l-40 0 0-80 40 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-40 0-28 0-4.5 144 40.5 0c53 0 96 43 96 96s-43 96-96 96l-16 0 0-80 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-43 0-3.1 99.5L208.5 495l0 1c-.3 8.9-7.6 16-16.5 16s-16.2-7.1-16.5-16l0-1-1-31L136 464c-22.1 0-40-17.9-40-40s17.9-40 40-40l36 0-1-32-19 0c-53 0-96-43-96-96c0-47.6 34.6-87.1 80-94.7l0 94.7c0 8.8 7.2 16 16 16l16.5 0L164 128l-28 0-13.4 0c-9 18.9-28.3 32-50.6 32l-16 0c-30.9 0-56-25.1-56-56S25.1 48 56 48l8 0 8 0 89.5 0-.1-4.8L161 32c0-.7 0-1.3 0-1.9c.5-16.6 14.1-30 31-30s30.5 13.4 31 30c0 .6 0 1.3 0 1.9l-.4 11.2zM64 112a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"head-side-cough-slash\": [640, 512, [], \"e062\", \"M448 325.8l44 34.5c8.1 1.4 14.8 6.8 18 14.1L552.9 408c10.6 .4 19.5 7.6 22.2 17.4l39.1 30.6c.6 0 1.2-.1 1.8-.1c11.1 0 20.4 7.5 23.2 17.8l-3.9 0c6.2 8.5 6.4 20.4-.4 29c-8.2 10.4-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L89.6 44.9C127 16.7 173.5 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 5.8zM0 224.2c0-38.7 9.8-75.1 27.1-106.9L341.8 365.3l-2.5 .3c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9l62 3.9 43 33.9C439.3 466.2 421.2 480 400 480l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM616 360a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-64-48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"truck-medical\": [640, 512, [128657, \"ambulance\"], \"f0f9\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM176 80l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"],\n    \"wheat-awn-circle-exclamation\": [640, 512, [], \"e598\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c22.5 22.5 53.3 31.5 82.4 27c0-1 0-2.1 0-3.1c0-33.1 9.1-64.1 25-90.6c-15.5-8.7-32.5-13.8-49.8-15.5l31.9-31.9 12.2 12.2c6 6 12.6 11.1 19.7 15.2c27.5-34 67.3-57.5 112.6-63.8c-4.1-3.8-8.4-7.3-12.9-10.5L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"snowman\": [512, 512, [9731, 9924], \"f7d0\", \"M341.1 140.6c-2 3.9-1.6 8.6 1.2 12c7 8.5 12.9 18.1 17.2 28.4L408 160.2l0-40.2c0-13.3 10.7-24 24-24s24 10.7 24 24l0 19.6 22.5-9.7c12.2-5.2 26.3 .4 31.5 12.6s-.4 26.3-12.6 31.5l-56 24-73.6 31.5c-.5 9.5-2.1 18.6-4.8 27.3c-1.2 3.8-.1 8 2.8 10.8C396.7 296.9 416 338.2 416 384c0 44.7-18.3 85-47.8 114.1c-9.9 9.7-23.7 13.9-37.5 13.9l-149.3 0c-13.9 0-27.7-4.2-37.5-13.9C114.3 469 96 428.7 96 384c0-45.8 19.3-87.1 50.1-116.3c2.9-2.8 4-6.9 2.8-10.8c-2.7-8.7-4.3-17.9-4.8-27.3L70.5 198.1l-56-24C2.4 168.8-3.3 154.7 1.9 142.5s19.3-17.8 31.5-12.6L56 139.6 56 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40.2L152.6 181c4.3-10.3 10.1-19.9 17.2-28.4c2.8-3.4 3.3-8.1 1.2-12C164 127.2 160 112.1 160 96c0-53 43-96 96-96s96 43 96 96c0 16.1-4 31.2-10.9 44.6zM224 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm48 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-16 80a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm16 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM288 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48 24l0 3.2c0 3.2 .8 6.3 2.3 9l9 16.9c.9 1.7 2.7 2.8 4.7 2.8s3.8-1.1 4.7-2.8l9-16.9c1.5-2.8 2.3-5.9 2.3-9l0-3.2c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"],\n    \"mortar-pestle\": [512, 512, [], \"f5a7\", \"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160l144.9 0L502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2c-11.1 13.9-19.4 30.3-23.9 48.1C127.6 497.4 142.3 512 160 512l192 0c17.7 0 32.4-14.6 28.1-31.7c-4.5-17.8-12.8-34.1-23.9-48.1C436.6 403.7 480 338.5 480 256c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 192z\"],\n    \"road-barrier\": [640, 512, [], \"e562\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-181.7L149.2 96 64 96l0-32c0-17.7-14.3-32-32-32zM405.2 96l-74.3 0-5.4 10.7L234.8 288l74.3 0 5.4-10.7L405.2 96zM362.8 288l74.3 0 5.4-10.7L533.2 96l-74.3 0-5.4 10.7L362.8 288zM202.8 96l-5.4 10.7L106.8 288l74.3 0 5.4-10.7L277.2 96l-74.3 0zm288 192l85.2 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.7L490.8 288z\"],\n    \"school\": [640, 512, [127979], \"f549\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l208 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 208 0c26.5 0 48-21.5 48-48l0-320c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM96 320l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM232 176a88 88 0 1 1 176 0 88 88 0 1 1 -176 0zm88-48c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16z\"],\n    \"igloo\": [576, 512, [], \"f7ae\", \"M320 33.8L320 160 48.5 160C100.2 82.8 188.1 32 288 32c10.8 0 21.5 .6 32 1.8zM352 160l0-120.9C424.9 55.7 487.2 99.8 527.5 160L352 160zM29.9 192L96 192l0 128L0 320c0-46 10.8-89.4 29.9-128zM192 320l-64 0 0-128 320 0 0 128-64 0 0 32 192 0 0 80c0 26.5-21.5 48-48 48l-176 0 0-128c0-35.3-28.7-64-64-64s-64 28.7-64 64l0 128L48 480c-26.5 0-48-21.5-48-48l0-80 192 0 0-32zm288 0l0-128 66.1 0c19.2 38.6 29.9 82 29.9 128l-96 0z\"],\n    \"joint\": [640, 512, [], \"f595\", \"M448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 55.2 21.9 108.1 60.9 147.1l21 21c9 9 14.1 21.2 14.1 33.9l0 11c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-29.7-11.8-58.2-32.8-79.2l-21-21C463.2 117.8 448 81.2 448 43l0-11zM576 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-55.2-21.9-108.1-60.9-147.1l-21-21c-9-9-14.1-21.2-14.1-33.9l0-11c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 29.7 11.8 58.2 32.8 79.2l21 21c27 27 42.2 63.6 42.2 101.8l0 11zM229.8 360c-4.7-2.3-10-2.7-15.2-2c-37.8 5.6-75.2 14.3-106.9 22.8C81.3 388 58.3 395.1 42 400.4c-8.2 2.7-14.7 4.9-19.2 6.5c-2.3 .8-4 1.4-5.2 1.8l-1.3 .5C6.8 412.5 0 421.4 0 432s6.8 19.5 16.3 22.7l1.3 .5c1.2 .4 3 1.1 5.2 1.8c4.5 1.6 11 3.8 19.2 6.5c16.3 5.4 39.2 12.5 65.7 19.6C160.3 497.3 228.8 512 288 512l67.3 0c4.1 0 6.3-5.1 3.6-8.3L256.5 380.8c-7.4-8.9-16.5-15.9-26.7-20.8zM445 512l19 0 51.3 0c4.1 0 6.3-5.1 3.6-8.3L416.5 380.8C401.3 362.5 378.8 352 355 352l-19 0-48 0c-1.1 0-2.3 0-3.4 0c-4.1 0-6.2 5.1-3.5 8.3L383.5 483.2C398.7 501.5 421.2 512 445 512zm-3.9-151.7L543.5 483.2c14.6 17.5 35.9 27.9 58.6 28.7c21.1-1.1 37.9-18.6 37.9-39.9l0-80c0-22.1-17.9-40-40-40l-155.3 0c-4.1 0-6.3 5.1-3.6 8.3z\"],\n    \"angle-right\": [320, 512, [8250], \"f105\", \"M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\"],\n    \"horse\": [576, 512, [128014], \"f6f0\", \"M448 238.1l0-78.1 16 0 9.8 19.6c12.5 25.1 42.2 36.4 68.3 26c20.5-8.2 33.9-28 33.9-50.1L576 80c0-19.1-8.4-36.3-21.7-48l5.7 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L480 0 448 0C377.3 0 320 57.3 320 128l-96 0-20.8 0-54.4 0c-30.7 0-57.6 16.3-72.5 40.8C33.2 174.5 0 211.4 0 256l0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-56c0-13.4 6.6-25.2 16.7-32.5c1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6c-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9l33.7 0c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7c0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8L320 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-164.3c19.2-19.2 31.5-45.7 32-75.7c0 0 0 0 0 0l0-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"q\": [448, 512, [113], \"51\", \"M64 256c0 88.4 71.6 160 160 160c28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1C371.9 325.8 384 292.3 384 256c0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32s224 100.3 224 224c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\"],\n    \"g\": [448, 512, [103], \"47\", \"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128L256 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l144 0c25.8 0 49.6 21.4 47.2 50.6C437.8 389.6 341.4 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57c13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\"],\n    \"notes-medical\": [512, 512, [], \"f481\", \"M96 352L96 96c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 197.5c0 17-6.7 33.3-18.7 45.3l-58.5 58.5c-12 12-28.3 18.7-45.3 18.7L160 416c-35.3 0-64-28.7-64-64zM272 128c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0zm24 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-160 0C60.9 512 0 451.1 0 376L0 152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88l160 0z\"],\n    \"temperature-half\": [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 208c0-8.8 7.2-16 16-16s16 7.2 16 16l0 114.7c18.6 6.6 32 24.4 32 45.3z\"],\n    \"dong-sign\": [384, 512, [], \"e169\", \"M288 32c-17.7 0-32 14.3-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 49.1c-18.8-10.9-40.7-17.1-64-17.1c-70.7 0-128 57.3-128 128s57.3 128 128 128c24.5 0 47.4-6.9 66.8-18.8c5 11.1 16.2 18.8 29.2 18.8c17.7 0 32-14.3 32-32l0-96 0-160c17.7 0 32-14.3 32-32s-14.3-32-32-32c0-17.7-14.3-32-32-32zM128 288a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448z\"],\n    \"capsules\": [576, 512, [], \"f46b\", \"M64 144c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112-96 0 0-112zM0 144L0 368c0 61.9 50.1 112 112 112s112-50.1 112-112l0-178.4c1.8 19.1 8.2 38 19.8 54.8L372.3 431.7c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 113.3C391.8 61.5 321.9 49 271.3 85.2c-28 20-44.3 50.8-47.3 83l0-24.2c0-61.9-50.1-112-112-112S0 82.1 0 144zm296.6 64.2c-16-23.3-10-55.3 11.9-71c21.2-15.1 50.5-10.3 66 12.2l67 97.6L361.6 303l-65-94.8zM491 407.7c-.8 .6-1.6 1.1-2.4 1.6l4-2.8c-.5 .4-1 .8-1.6 1.2z\"],\n    \"poo-storm\": [448, 512, [\"poo-bolt\"], \"f75a\", \"M236.9 .2c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1c0 21.7-8.5 37.2-21.9 47.6c-13.8 10.8-34 17-57.8 17L128 112c-35.3 0-64 28.7-64 64c0 12.2 3.4 23.5 9.3 33.2C31.7 216.2 0 252.4 0 296c0 40.9 28 75.4 65.8 85.2c-5.3-18.5 1-38.5 16.2-50.7l160-128c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L285.7 320l18.3 0c20.4 0 38.5 12.9 45.3 32.1c3.7 10.6 3.5 21.8 0 31.9l10.7 0c48.6 0 88-39.4 88-88c0-43.6-31.7-79.8-73.3-86.8c5.9-9.7 9.3-21.1 9.3-33.2c0-35.3-28.7-64-64-64l-1.4 0c.9-5.4 1.4-10.9 1.4-16.6c0-48.7-36.1-88.9-83.1-95.2zm45.1 227.4c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L129.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.3-19.6z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\"],\n    \"hand-point-up\": [384, 512, [9757], \"f0a6\", \"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32l0 208-64 0L32 32zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-64-64c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"],\n    \"money-bill\": [576, 512, [], \"f0d6\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM288 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"bookmark\": [384, 512, [128278, 61591], \"f02e\", \"M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z\"],\n    \"align-justify\": [448, 512, [], \"f039\", \"M448 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32L32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32z\"],\n    \"umbrella-beach\": [576, 512, [127958], \"f5ca\", \"M346.3 271.8l-60.1-21.9L214 448 32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-261.9 0 64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z\"],\n    \"helmet-un\": [512, 512, [], \"e503\", \"M479.5 224C471.2 98.9 367.2 0 240 0C107.5 0 0 107.5 0 240l0 56.3C0 344.8 39.2 384 87.7 384L200 384l14.9 0L343.5 505.4c4.5 4.2 10.4 6.6 16.5 6.6l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.5 0-1.5-1.5L368 288l80 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.5 0zM320 417.2l-78-73.7L274.4 288l45.6 0 0 129.2zM285.3 103.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"bullseye\": [512, 512, [], \"f140\", \"M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"bacon\": [576, 512, [129363], \"f7e5\", \"M439.2 1.2c11.2-3.2 23.2-.1 31.4 8.1L518 56.7l-26.5 7.9c-58 16.6-98.1 39.6-129.6 67.4c-31.2 27.5-53.2 59.1-75.1 90.9l-2.3 3.3C241.6 288.7 195 356.6 72.8 417.7L37.9 435.2 9.4 406.6c-7.3-7.3-10.6-17.6-9-27.8s8.1-18.9 17.3-23.5C136.1 296.2 180.9 231 223.3 169.3l2.3-3.4c21.8-31.8 44.9-64.9 77.7-93.9c33.4-29.5 75.8-53.6 135.9-70.8zM61.8 459l25.4-12.7c129.5-64.7 179.9-138.1 223.8-202l2.2-3.3c22.1-32.1 42.1-60.5 69.9-85.1c27.5-24.3 63.4-45.2 117.3-60.6c0 0 0 0 0 0l.2-.1 43.1-12.9 23 23c8 8 11.2 19.7 8.3 30.7s-11.3 19.6-22.2 22.7c-51.9 14.8-85.6 34.7-111.1 57.2c-26.1 23-45.1 49.9-67.3 82.1l-2.2 3.2C327.8 365.9 275.5 442 142.3 508.6c-12.3 6.2-27.2 3.7-36.9-6L61.8 459z\"],\n    \"hand-point-down\": [384, 512, [], \"f0a7\", \"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208-64 0 0 208zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-64 64c17.7 0 32-14.3 32-32l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6c13.2 0 25.4 4 35.6 10.8c8.7-24.9 32.5-42.8 60.4-42.8c11.7 0 22.6 3.1 32 8.6l0-8.6C384 71.6 312.4 0 224 0L162.3 0C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149l0 27c0 35.3 28.7 64 64 64l88 0c22.1 0 40-17.9 40-40s-17.9-40-40-40l-56 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l56 0c39.8 0 72 32.2 72 72z\"],\n    \"arrow-up-from-bracket\": [448, 512, [], \"e09a\", \"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3 192 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-64z\"],\n    \"folder\": [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M64 480H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H288c-10.1 0-19.6-4.7-25.6-12.8L243.2 57.6C231.1 41.5 212.1 32 192 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64z\"],\n    \"file-waveform\": [448, 512, [\"file-medical-alt\"], \"f478\", \"M96 0C60.7 0 32 28.7 32 64l0 224 112 0c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288l70.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-80 0c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320 32 320l0 128c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L256 0 96 0zM288 0l0 128 128 0L288 0z\"],\n    \"radiation\": [512, 512, [], \"f7b9\", \"M216 186.7c-23.9 13.8-40 39.7-40 69.3L32 256C14.3 256-.2 241.6 2 224.1C10.7 154 47.8 92.7 101.3 52c14.1-10.7 33.8-5.3 42.7 10l72 124.7zM256 336c14.6 0 28.2-3.9 40-10.7l72 124.8c8.8 15.3 3.7 35.1-12.6 41.9c-30.6 12.9-64.2 20-99.4 20s-68.9-7.1-99.4-20c-16.3-6.9-21.4-26.6-12.6-41.9l72-124.8c11.8 6.8 25.4 10.7 40 10.7zm224-80l-144 0c0-29.6-16.1-55.5-40-69.3L368 62c8.8-15.3 28.6-20.7 42.7-10c53.6 40.7 90.6 102 99.4 172.1c2.2 17.5-12.4 31.9-30 31.9zM256 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"chart-simple\": [448, 512, [], \"e473\", \"M160 80c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-352zM0 272c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48L0 272zM368 96l32 0c26.5 0 48 21.5 48 48l0 288c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48z\"],\n    \"mars-stroke\": [512, 512, [9894], \"f229\", \"M376 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L370.3 96.4 345 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l25.4 25.4L307.8 159c-28.4-19.5-62.7-31-99.8-31c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l28.6-28.6L407 201c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-25.4-25.4 22.1-22.1L471 153c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L376 0zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM96 304a112 112 0 1 1 224 0A112 112 0 1 1 96 304z\"],\n    \"vial\": [512, 512, [129514], \"f492\", \"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L28.1 342.6C10.1 360.6 0 385 0 410.5L0 416c0 53 43 96 96 96l5.5 0c25.5 0 49.9-10.1 67.9-28.1L448 205.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-32-32-96-96-32-32zM205.3 256L352 109.3 402.7 160l-96 96-101.5 0z\"],\n    \"gauge\": [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"wand-magic-sparkles\": [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z\"],\n    \"e\": [320, 512, [101], \"45\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 416l0-128 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"],\n    \"pen-clip\": [512, 512, [\"pen-alt\"], \"f305\", \"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1s0 0 0 0l-1-1s0 0 0 0l-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z\"],\n    \"bridge-circle-exclamation\": [640, 512, [], \"e4ca\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"user\": [448, 512, [128100, 62144], \"f007\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z\"],\n    \"school-circle-check\": [640, 512, [], \"e56b\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-99.3-43.3c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7z\"],\n    \"dumpster\": [576, 512, [], \"f793\", \"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160l94 0L140.5 32 49.7 32zM272 160l0-128-98.9 0L147.5 160 272 160zm32 0l124.5 0L402.9 32 304 32l0 128zm157.1 0l94 0c11.5 0 20.9-9.3 20.9-20.9c0-2.1-.3-4.1-.9-6.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32l-90.8 0 25.6 128zM32 192l4 32-4 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l12 0L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32l320 0c0 17.7 14.3 32 32 32s32-14.3 32-32l20-160 12 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-4 0 4-32L32 192z\"],\n    \"van-shuttle\": [640, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M64 104l0 88 96 0 0-96L72 96c-4.4 0-8 3.6-8 8zm482 88L465.1 96 384 96l0 96 162 0zm-226 0l0-96-96 0 0 96 96 0zM592 384l-16 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 104C0 64.2 32.2 32 72 32l120 0 160 0 113.1 0c18.9 0 36.8 8.3 49 22.8L625 186.5c9.7 11.5 15 26.1 15 41.2L640 336c0 26.5-21.5 48-48 48zm-64 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"building-user\": [640, 512, [], \"e4da\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 89.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM576 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM352 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"],\n    \"highlighter\": [576, 512, [], \"f591\", \"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5s0 0 0 0l0-71.7c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5L224 416l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7L24 512c-13.3 0-24-10.7-24-24l0-4.7c0-6.4 2.5-12.5 7-17z\"],\n    \"key\": [512, 512, [128273], \"f084\", \"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-40 40 0c13.3 0 24-10.7 24-24l0-40 40 0c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"],\n    \"bullhorn\": [512, 512, [128226, 128363], \"f0a1\", \"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75l-8.7 0-32 0-96 0c-35.3 0-64 28.7-64 64l0 96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-128 8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-147.6c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4L480 32zm-64 76.7L416 240l0 131.3C357.2 317.8 280.5 288 200.7 288l-8.7 0 0-96 8.7 0c79.8 0 156.5-29.8 215.3-83.3z\"],\n    \"globe\": [512, 512, [127760], \"f0ac\", \"M352 256c0 22.2-1.2 43.6-3.3 64l-185.3 0c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64l185.3 0c2.2 20.4 3.3 41.8 3.3 64zm28.8-64l123.1 0c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64l-123.1 0c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32l-116.7 0c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0l-176.6 0c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0L18.6 160C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192l123.1 0c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64L8.1 320C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6l176.6 0c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352l116.7 0zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6l116.7 0z\"],\n    \"synagogue\": [640, 512, [128333], \"f69b\", \"M309.8 3.7c5.9-4.9 14.6-4.9 20.5 0l121 100.8C469.5 119.7 480 142.2 480 166l0 114.1L480 512l-16 0-112 0 0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96-112 0-16 0 0-231.9L160 166c0-23.7 10.5-46.3 28.8-61.5L309.8 3.7zM512 512l0-267.5 28.1-31.2c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3l63.8 70.9c7.9 8.8 12.3 20.3 12.3 32.1L640 448c0 35.3-28.7 64-64 64l-64 0zM128 244.5L128 512l-64 0c-35.3 0-64-28.7-64-64L0 316.3c0-11.9 4.4-23.3 12.3-32.1l63.8-70.9c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3L128 244.5zM327 124.3c-3.1-5.4-10.9-5.4-13.9 0l-15.9 28.1-32.3-.3c-6.2-.1-10.1 6.7-7 12.1L274.3 192l-16.4 27.8c-3.2 5.4 .7 12.1 7 12.1l32.3-.3L313 259.7c3.1 5.4 10.9 5.4 13.9 0l15.9-28.1 32.3 .3c6.2 .1 10.1-6.7 7-12.1L365.7 192l16.4-27.8c3.2-5.4-.7-12.1-7-12.1l-32.3 .3L327 124.3z\"],\n    \"person-half-dress\": [320, 512, [], \"e548\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm8 352l0-224 6.9 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128s0 0 0 0zM58.2 182.3c19.9-33.1 55.3-53.5 93.8-54.3l0 256s0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2z\"],\n    \"road-bridge\": [640, 512, [], \"e563\", \"M352 0L608 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM480 200c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zm24 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64zM480 40c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zM32 96l256 0 0 64-40 0 0 64 40 0 0 96c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-96 72 0 0-64-40 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm168 64l-80 0 0 64 80 0 0-64z\"],\n    \"location-arrow\": [448, 512, [], \"f124\", \"M429.6 92.1c4.9-11.9 2.1-25.6-7-34.7s-22.8-11.9-34.7-7l-352 144c-14.2 5.8-22.2 20.8-19.3 35.8s16.1 25.8 31.4 25.8l176 0 0 176c0 15.3 10.8 28.4 25.8 31.4s30-5.1 35.8-19.3l144-352z\"],\n    \"c\": [384, 512, [99], \"43\", \"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3s155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8s221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"],\n    \"tablet-button\": [448, 512, [], \"f10a\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"building-lock\": [576, 512, [], \"e4d6\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 88.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-30.5 12.2-58.2 32-78.4L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM464 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"pizza-slice\": [512, 512, [], \"f818\", \"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L110.4 80c.5 0 1.1 0 1.6 0c176.7 0 320 143.3 320 320c0 .5 0 1.1 0 1.6l44.4-11.8c20.8-5.5 36.3-24.7 34.7-47.5C498.5 159.5 352.5 13.5 169.7 .9zM399.8 410.2c.1-3.4 .2-6.8 .2-10.2c0-159.1-128.9-288-288-288c-3.4 0-6.8 .1-10.2 .2L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1L399.8 410.2zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"money-bill-wave\": [576, 512, [], \"f53a\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM288 352c-44.2 0-80-43-80-96s35.8-96 80-96s80 43 80 96s-35.8 96-80 96zM64 352c35.3 0 64 28.7 64 64l-64 0 0-64zm64-208c0 35.3-28.7 64-64 64l0-64 64 0zM512 304l0 64-64 0c0-35.3 28.7-64 64-64zM448 96l64 0 0 64c-35.3 0-64-28.7-64-64z\"],\n    \"chart-area\": [512, 512, [\"area-chart\"], \"f1fe\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm96 288l288 0c17.7 0 32-14.3 32-32l0-68.2c0-7.6-2.7-15-7.7-20.8l-65.8-76.8c-12.1-14.2-33.7-15-46.9-1.8l-21 21c-10 10-26.4 9.2-35.4-1.6l-39.2-47c-12.6-15.1-35.7-15.4-48.7-.6L135.9 215c-5.1 5.8-7.9 13.3-7.9 21.1l0 84c0 17.7 14.3 32 32 32z\"],\n    \"house-flag\": [640, 512, [], \"e50d\", \"M480 0c-17.7 0-32 14.3-32 32l0 160 0 320 64 0 0-320 112 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L512 32c0-17.7-14.3-32-32-32zM416 159L276.8 39.7c-12-10.3-29.7-10.3-41.7 0l-224 192C1 240.4-2.7 254.5 2 267.1S18.6 288 32 288l32 0 0 192c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 96c0 17.7 14.3 32 32 32l64.7 0 .2 0-1 0 0-353z\"],\n    \"person-circle-minus\": [576, 512, [], \"e540\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"],\n    \"ban\": [512, 512, [128683, \"cancel\"], \"f05e\", \"M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"camera-rotate\": [640, 512, [], \"e0d8\", \"M213.1 64.8L202.7 96 128 96c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L426.9 64.8C420.4 45.2 402.1 32 381.4 32L258.6 32c-20.7 0-39 13.2-45.5 32.8zM448 256c0 8.8-7.2 16-16 16l-76.7 0c-6.2 0-11.3-5.1-11.3-11.3c0-3 1.2-5.9 3.3-8L371 229c-13.6-13.4-31.9-21-51-21c-19.2 0-37.7 7.6-51.3 21.3L249 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l19.7-19.7C257.4 172.7 288 160 320 160c31.8 0 62.4 12.6 85 35l23.7-23.7c2.1-2.1 5-3.3 8-3.3c6.2 0 11.3 5.1 11.3 11.3l0 76.7zM192 320c0-8.8 7.2-16 16-16l76.7 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8L269 347c13.6 13.4 31.9 21 51 21c19.2 0 37.7-7.6 51.3-21.3L391 327c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-19.7 19.7C382.6 403.3 352 416 320 416c-31.8 0-62.4-12.6-85-35l-23.7 23.7c-2.1 2.1-5 3.3-8 3.3c-6.2 0-11.3-5.1-11.3-11.3l0-76.7z\"],\n    \"spray-can-sparkles\": [512, 512, [\"air-freshener\"], \"f5d0\", \"M96 32l0 96 128 0 0-96c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32zm0 128c-53 0-96 43-96 96L0 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-208c0-53-43-96-96-96L96 160zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM384 48c0-1.4-1-3-2.2-3.6L352 32 339.6 2.2C339 1 337.4 0 336 0s-3 1-3.6 2.2L320 32 290.2 44.4C289 45 288 46.6 288 48c0 1.4 1 3 2.2 3.6L320 64l12.4 29.8C333 95 334.6 96 336 96s3-1 3.6-2.2L352 64l29.8-12.4C383 51 384 49.4 384 48zm76.4 45.8C461 95 462.6 96 464 96s3-1 3.6-2.2L480 64l29.8-12.4C511 51 512 49.4 512 48c0-1.4-1-3-2.2-3.6L480 32 467.6 2.2C467 1 465.4 0 464 0s-3 1-3.6 2.2L448 32 418.2 44.4C417 45 416 46.6 416 48c0 1.4 1 3 2.2 3.6L448 64l12.4 29.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L448 224l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L448 256l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 256l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6c0-1.4-1-3-2.2-3.6L480 224l-12.4-29.8zM448 144c0-1.4-1-3-2.2-3.6L416 128 403.6 98.2C403 97 401.4 96 400 96s-3 1-3.6 2.2L384 128l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L384 160l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L416 160l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6z\"],\n    \"star\": [576, 512, [11088, 61446], \"f005\", \"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"],\n    \"repeat\": [512, 512, [128257], \"f363\", \"M0 224c0 17.7 14.3 32 32 32s32-14.3 32-32c0-53 43-96 96-96l160 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S320 19.1 320 32l0 32L160 64C71.6 64 0 135.6 0 224zm512 64c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 53-43 96-96 96l-160 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 160 0c88.4 0 160-71.6 160-160z\"],\n    \"cross\": [384, 512, [128327, 10013], \"f654\", \"M176 0c-26.5 0-48 21.5-48 48l0 80-80 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l80 0 0 208c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-208 80 0c26.5 0 48-21.5 48-48l0-32c0-26.5-21.5-48-48-48l-80 0 0-80c0-26.5-21.5-48-48-48L176 0z\"],\n    \"box\": [448, 512, [128230], \"f466\", \"M50.7 58.5L0 160l208 0 0-128L93.7 32C75.5 32 58.9 42.3 50.7 58.5zM240 160l208 0L397.3 58.5C389.1 42.3 372.5 32 354.3 32L240 32l0 128zm208 32L0 192 0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-224z\"],\n    \"venus-mars\": [640, 512, [9892], \"f228\", \"M176 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM352 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C62.1 334.1 0 262.3 0 176C0 78.8 78.8 0 176 0s176 78.8 176 176zM271.9 360.6c19.3-10.1 36.9-23.1 52.1-38.4c20 18.5 46.7 29.8 76.1 29.8c61.9 0 112-50.1 112-112s-50.1-112-112-112c-7.2 0-14.3 .7-21.1 2c-4.9-21.5-13-41.7-24-60.2C369.3 66 384.4 64 400 64c37 0 71.4 11.4 99.8 31l20.6-20.6L487 41c-6.9-6.9-8.9-17.2-5.2-26.2S494.3 0 504 0L616 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L545 140.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176c-50.5 0-96-21.3-128.1-55.4z\"],\n    \"arrow-pointer\": [320, 512, [\"mouse-pointer\"], \"f245\", \"M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"],\n    \"maximize\": [512, 512, [\"expand-arrows-alt\"], \"f31e\", \"M200 32L56 32C42.7 32 32 42.7 32 56l0 144c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79-79 79L73 295c-6.9-6.9-17.2-8.9-26.2-5.2S32 302.3 32 312l0 144c0 13.3 10.7 24 24 24l144 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l144 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-144c0-13.3-10.7-24-24-24L312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S209.7 32 200 32z\"],\n    \"charging-station\": [576, 512, [], \"f5e7\", \"M96 0C60.7 0 32 28.7 32 64l0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-144 16 0c22.1 0 40 17.9 40 40l0 32c0 39.8 32.2 72 72 72s72-32.2 72-72l0-123.7c32.5-10.2 56-40.5 56-76.3l0-32c0-8.8-7.2-16-16-16l-16 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-32 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-16 0c-8.8 0-16 7.2-16 16l0 32c0 35.8 23.5 66.1 56 76.3L472 376c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-48.6-39.4-88-88-88l-16 0 0-192c0-35.3-28.7-64-64-64L96 0zM216.9 82.7c6 4 8.5 11.5 6.3 18.3l-25 74.9 57.8 0c6.7 0 12.7 4.2 15 10.4s.5 13.3-4.6 17.7l-112 96c-5.5 4.7-13.4 5.1-19.3 1.1s-8.5-11.5-6.3-18.3l25-74.9L96 208c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7l112-96c5.5-4.7 13.4-5.1 19.3-1.1z\"],\n    \"shapes\": [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M315.4 15.5C309.7 5.9 299.2 0 288 0s-21.7 5.9-27.4 15.5l-96 160c-5.9 9.9-6.1 22.2-.4 32.2s16.3 16.2 27.8 16.2l192 0c11.5 0 22.2-6.2 27.8-16.2s5.5-22.3-.4-32.2l-96-160zM288 312l0 144c0 22.1 17.9 40 40 40l144 0c22.1 0 40-17.9 40-40l0-144c0-22.1-17.9-40-40-40l-144 0c-22.1 0-40 17.9-40 40zM128 512a128 128 0 1 0 0-256 128 128 0 1 0 0 256z\"],\n    \"shuffle\": [512, 512, [128256, \"random\"], \"f074\", \"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\"],\n    \"person-running\": [448, 512, [127939, \"running\"], \"f70c\", \"M320 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM125.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L137.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L238 299l30.9-82.4 5.1 12.3C289 264.7 323.9 288 362.7 288l21.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3L57.4 153.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM91.2 352L32 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l69.6 0c19 0 36.2-11.2 43.9-28.5L157 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L91.2 352z\"],\n    \"mobile-retro\": [320, 512, [], \"e527\", \"M0 64C0 28.7 28.7 0 64 0L256 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm64 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 352a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 48c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"],\n    \"grip-lines-vertical\": [192, 512, [], \"f7a5\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384z\"],\n    \"spider\": [512, 512, [128375], \"f717\", \"M158.4 32.6c4.8-12.4-1.4-26.3-13.8-31s-26.3 1.4-31 13.8L81.1 100c-7.9 20.7-3 44.1 12.7 59.7l57.4 57.4L70.8 190.3c-2.4-.8-4.3-2.7-5.1-5.1L46.8 128.4C42.6 115.8 29 109 16.4 113.2S-3 131 1.2 143.6l18.9 56.8c5.6 16.7 18.7 29.8 35.4 35.4L116.1 256 55.6 276.2c-16.7 5.6-29.8 18.7-35.4 35.4L1.2 368.4C-3 381 3.8 394.6 16.4 398.8s26.2-2.6 30.4-15.2l18.9-56.8c.8-2.4 2.7-4.3 5.1-5.1l80.4-26.8L93.7 352.3C78.1 368 73.1 391.4 81.1 412l32.5 84.6c4.8 12.4 18.6 18.5 31 13.8s18.5-18.6 13.8-31l-32.5-84.6c-1.1-3-.4-6.3 1.8-8.5L160 353.9c1 52.1 43.6 94.1 96 94.1s95-41.9 96-94.1l32.3 32.3c2.2 2.2 2.9 5.6 1.8 8.5l-32.5 84.6c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8L430.9 412c7.9-20.7 3-44.1-12.7-59.7l-57.4-57.4 80.4 26.8c2.4 .8 4.3 2.7 5.1 5.1l18.9 56.8c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-18.9-56.8c-5.6-16.7-18.7-29.8-35.4-35.4L395.9 256l60.5-20.2c16.7-5.6 29.8-18.7 35.4-35.4l18.9-56.8c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-18.9 56.8c-.8 2.4-2.7 4.3-5.1 5.1l-80.4 26.8 57.4-57.4c15.6-15.6 20.6-39 12.7-59.7L398.4 15.4C393.6 3 379.8-3.2 367.4 1.6s-18.5 18.6-13.8 31l32.5 84.6c1.1 3 .4 6.3-1.8 8.5L336 174.1l0-14.1c0-31.8-18.6-59.3-45.5-72.2c-9.1-4.4-18.5 3.3-18.5 13.4l0 10.8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-10.8c0-10.1-9.4-17.7-18.5-13.4C194.6 100.7 176 128.2 176 160l0 14.1-48.3-48.3c-2.2-2.2-2.9-5.6-1.8-8.5l32.5-84.6z\"],\n    \"hands-bound\": [640, 512, [], \"e4f9\", \"M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32l0 64 0 59.1 0 .7L32 192l0 21.9c0 14.2 5.1 27.9 14.3 38.7L131.6 352l-3.6 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 128 0 64 0 128 0 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-3.6 0 85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7l0-21.9 0-36.2 0-.7L608 96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64 0 48.8-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8c-9.7-5.7-12.1-18.7-5.1-27.5L473 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C361 209.7 352 233.4 352 258.1l0 61.9 0 32-64 0 0-32 0-61.9c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2s-15.2 30.9-4.4 44.5l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5c-8.1 4.8-18.6 2.7-24.2-4.8L96 144.8 96 96l0-64zm64 448l0 32 128 0 0-32 64 0 0 32 128 0 0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0-128 0-64 0-128 0-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0z\"],\n    \"file-invoice-dollar\": [384, 512, [], \"f571\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 80c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16zm128 72c8.8 0 16 7.2 16 16l0 17.3c8.5 1.2 16.7 3.1 24.1 5.1c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-11.1-3-22-5.2-32.1-5.3c-8.4-.1-17.4 1.8-23.6 5.5c-5.7 3.4-8.1 7.3-8.1 12.8c0 3.7 1.3 6.5 7.3 10.1c6.9 4.1 16.6 7.1 29.2 10.9l.5 .1s0 0 0 0s0 0 0 0c11.3 3.4 25.3 7.6 36.3 14.6c12.1 7.6 22.4 19.7 22.7 38.2c.3 19.3-9.6 33.3-22.9 41.6c-7.7 4.8-16.4 7.6-25.1 9.1l0 17.1c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-17.8c-11.2-2.1-21.7-5.7-30.9-8.9c0 0 0 0 0 0c-2.1-.7-4.2-1.4-6.2-2.1c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c2.5 .8 4.8 1.6 7.1 2.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c13.6 4.6 24.6 8.4 36.3 8.7c9.1 .3 17.9-1.7 23.7-5.3c5.1-3.2 7.9-7.3 7.8-14c-.1-4.6-1.8-7.8-7.7-11.6c-6.8-4.3-16.5-7.4-29-11.2l-1.6-.5s0 0 0 0c-11-3.3-24.3-7.3-34.8-13.7c-12-7.2-22.6-18.9-22.7-37.3c-.1-19.4 10.8-32.8 23.8-40.5c7.5-4.4 15.8-7.2 24.1-8.7l0-17.3c0-8.8 7.2-16 16-16z\"],\n    \"plane-circle-exclamation\": [640, 512, [], \"e556\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"x-ray\": [512, 512, [], \"f497\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 320c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 96C14.3 96 0 81.7 0 64zM256 96c-8.8 0-16 7.2-16 16l0 32-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48-112 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l112 0 0 70.6L189.1 307c-5.2-2-10.6-3-16.2-3l-2.1 0c-23.6 0-42.8 19.2-42.8 42.8c0 9.6 3.2 18.9 9.1 26.4l18.2 23.2c9.7 12.4 24.6 19.6 40.3 19.6l120.8 0c15.7 0 30.6-7.2 40.3-19.6l18.2-23.2c5.9-7.5 9.1-16.8 9.1-26.4c0-23.6-19.2-42.8-42.8-42.8l-2.2 0c-5.5 0-11 1-16.2 3L272 326.6l0-70.6 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-112 0 0-48 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-80 0 0-32c0-8.8-7.2-16-16-16zM208 352a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm80 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"],\n    \"spell-check\": [576, 512, [], \"f891\", \"M112 0C99.1 0 87.4 7.8 82.5 19.7l-66.7 160-13.3 32c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L66.7 224l90.7 0 5.1 12.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-13.3-32-66.7-160C136.6 7.8 124.9 0 112 0zm18.7 160l-37.3 0L112 115.2 130.7 160zM256 32l0 96 0 96c0 17.7 14.3 32 32 32l80 0c44.2 0 80-35.8 80-80c0-23.1-9.8-43.8-25.4-58.4c6-11.2 9.4-24 9.4-37.6c0-44.2-35.8-80-80-80L288 0c-17.7 0-32 14.3-32 32zm96 64l-32 0 0-32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-32 64l32 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0-32zM566.6 310.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L352 434.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l192-192z\"],\n    \"slash\": [640, 512, [], \"f715\", \"M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z\"],\n    \"computer-mouse\": [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 192l176 0L176 0 160 0C71.6 0 0 71.6 0 160l0 32zm0 32L0 352c0 88.4 71.6 160 160 160l64 0c88.4 0 160-71.6 160-160l0-128-192 0L0 224zm384-32l0-32C384 71.6 312.4 0 224 0L208 0l0 192 176 0z\"],\n    \"arrow-right-to-bracket\": [512, 512, [\"sign-in\"], \"f090\", \"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"],\n    \"shop-slash\": [640, 512, [\"store-alt-slash\"], \"e070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-54.8-43L576 224l-64 0 0 152L384 275.7l0-51.7-64 0 0 1.5L277.2 192l325.9 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L74.1 32.8 38.8 5.1zM36.8 192l85 0L21 112.5 6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM320 384l-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-65.5-64-50.4 0 35.9z\"],\n    \"server\": [512, 512, [], \"f233\", \"M64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 288zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"virus-covid-slash\": [640, 512, [], \"e4a9\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c11.4-19.5 19.1-41.4 22.3-64.7l33.6 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-33.6 0c-4.2-30.7-16.3-58.8-34.1-82.3L484 125.9l11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L472.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L450.1 92l-23.8 23.8C402.8 97.9 374.7 85.8 344 81.6L344 48l16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L280 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.6c-30.7 4.2-58.8 16.3-82.3 34.1L189.9 92l11.3-11.3c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L134.1 79.8 38.8 5.1zM149.2 213.5c-1.5 6-2.7 12.2-3.5 18.5L112 232l0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 33.6 0c4.2 30.7 16.3 58.8 34.1 82.3L156 386.1l-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L189.9 420l23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1l0 33.6-16 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2L149.2 213.5z\"],\n    \"shop-lock\": [640, 512, [], \"e4a5\", \"M36.8 192l412.8 0c20.2-19.8 47.9-32 78.4-32c30.5 0 58.1 12.2 78.3 31.9c18.9-1.6 33.7-17.4 33.7-36.7c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM384 224l-64 0 0 160-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-32 0-128zm144 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"hourglass-start\": [384, 512, [\"hourglass-1\"], \"f251\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM288 437l0 11L96 448l0-11c0-25.5 10.1-49.9 28.1-67.9L192 301.3l67.9 67.9c18 18 28.1 42.4 28.1 67.9z\"],\n    \"blender-phone\": [576, 512, [], \"f6b6\", \"M224 352L196.8 52.3C194.2 24.2 216.3 0 244.6 0L534.1 0c21.1 0 36.4 20.1 30.9 40.4L558.5 64 400 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L400 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L400 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L480 352l-256 0zm-16 32l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM147.5 30.7c10.8 6.7 15.3 21 10.6 33.4l-22 57.8c-4.2 10.9-14.5 17.6-25.3 16.4l-33.3-3.6c-13.6 42.2-13.6 88.4 0 130.7l33.3-3.6c10.9-1.2 21.2 5.5 25.3 16.4l22 57.8c4.7 12.4 .2 26.7-10.6 33.4l-44 27.2c-9.7 6-21.9 4.2-29.8-4.3C-24.6 286-24.6 114 73.7 7.8C81.6-.7 93.8-2.5 103.5 3.5l44 27.2z\"],\n    \"building-wheat\": [640, 512, [], \"e4db\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm384 80l0 16c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0zm0 128c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zm0 112c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zM512 496l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zm0-96l-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80l0 16zm0-128l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zM528 32c13.3 0 24 10.7 24 24l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-13.3 10.7-24 24-24zm96 64l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24s24 10.7 24 24zM456 72c13.3 0 24 10.7 24 24l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24z\"],\n    \"person-breastfeeding\": [448, 512, [], \"e53a\", \"M224 0a80 80 0 1 1 0 160A80 80 0 1 1 224 0zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5c-17.6-14.1-22.7-38.1-13.5-57.7l-.8-.1c-38.9-5.6-74.3-25.1-99.7-54.8l0-36.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7c-4.9-2.8-9.2-6.4-12.6-10.6c-4.6-5.4-7.8-11.7-9.6-18.4c-3.3-12-1.9-25.2 4.8-36.6c.6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1l75.2 0c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4c2.9 6.7 4.3 13.8 4 20.8c-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\"],\n    \"right-to-bracket\": [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M217.9 105.9L340.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L217.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1L32 320c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM352 416l64 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"venus\": [384, 512, [9792], \"f221\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9z\"],\n    \"passport\": [448, 512, [], \"f5ab\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM183 278.8c-27.9-13.2-48.4-39.4-53.7-70.8l39.1 0c1.6 30.4 7.7 53.8 14.6 70.8zm41.3 9.2l-.3 0-.3 0c-2.4-3.5-5.7-8.9-9.1-16.5c-6-13.6-12.4-34.3-14.2-63.5l47.1 0c-1.8 29.2-8.1 49.9-14.2 63.5c-3.4 7.6-6.7 13-9.1 16.5zm40.7-9.2c6.8-17.1 12.9-40.4 14.6-70.8l39.1 0c-5.3 31.4-25.8 57.6-53.7 70.8zM279.6 176c-1.6-30.4-7.7-53.8-14.6-70.8c27.9 13.2 48.4 39.4 53.7 70.8l-39.1 0zM223.7 96l.3 0 .3 0c2.4 3.5 5.7 8.9 9.1 16.5c6 13.6 12.4 34.3 14.2 63.5l-47.1 0c1.8-29.2 8.1-49.9 14.2-63.5c3.4-7.6 6.7-13 9.1-16.5zM183 105.2c-6.8 17.1-12.9 40.4-14.6 70.8l-39.1 0c5.3-31.4 25.8-57.6 53.7-70.8zM352 192A128 128 0 1 0 96 192a128 128 0 1 0 256 0zM112 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l224 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-224 0z\"],\n    \"thumbtack-slash\": [640, 512, [\"thumb-tack-slash\"], \"e68f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L481.4 352c9.8-.4 18.9-5.3 24.6-13.3c6-8.3 7.7-19.1 4.4-28.8l-1-3c-13.8-41.5-42.8-74.8-79.5-94.7L418.5 64 448 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l29.5 0-6.1 79.5L38.8 5.1zM324.9 352L177.1 235.6c-20.9 18.9-37.2 43.3-46.5 71.3l-1 3c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l164.9 0zM288 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96-64 0z\"],\n    \"heart-pulse\": [512, 512, [\"heartbeat\"], \"f21e\", \"M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4l87 0c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31l104.5 0c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240l-132 0c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9L16 240c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1l0 5.8c0 16.9-2.8 33.5-8.3 49.1z\"],\n    \"people-carry-box\": [640, 512, [\"people-carry\"], \"f4ce\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm64 193.7l0 65.1 51 51c7.1 7.1 11.8 16.2 13.4 26.1l15.2 90.9c2.9 17.4-8.9 33.9-26.3 36.8s-33.9-8.9-36.8-26.3l-14.3-85.9L66.8 320C54.8 308 48 291.7 48 274.7l0-88.1c0-32.4 26.2-58.6 58.6-58.6c24.1 0 46.5 12 59.9 32l47.4 71.1 10.1 5 0-76.2c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 76.2 10.1-5L473.5 160c13.3-20 35.8-32 59.9-32c32.4 0 58.6 26.2 58.6 58.6l0 88.1c0 17-6.7 33.3-18.7 45.3l-79.4 79.4-14.3 85.9c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l15.2-90.9c1.6-9.9 6.3-19 13.4-26.1l51-51 0-65.1-19 28.5c-4.6 7-11 12.6-18.5 16.3l-59.6 29.8c-2.4 1.3-4.9 2.2-7.6 2.8c-2.6 .6-5.3 .9-7.9 .8l-126.7 0c-2.5 .1-5-.2-7.5-.7c-2.9-.6-5.6-1.6-8.1-3l-59.5-29.8c-7.5-3.7-13.8-9.4-18.5-16.3l-19-28.5zM2.3 468.1L50.1 348.6l49.2 49.2-37.6 94c-6.6 16.4-25.2 24.4-41.6 17.8S-4.3 484.5 2.3 468.1zM512 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm77.9 348.6l47.8 119.5c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8l-37.6-94 49.2-49.2z\"],\n    \"temperature-high\": [512, 512, [], \"f769\", \"M416 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 128A96 96 0 1 0 416 0a96 96 0 1 0 0 192zM96 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C217.8 332.6 224 349.5 224 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9C88.9 308.4 96 293.8 96 276.5L96 112zM144 0C82.1 0 32 50.2 32 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C11.2 304.2 0 334.8 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L256 112C256 50.2 205.9 0 144 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L160 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48z\"],\n    \"microchip\": [512, 512, [], \"f2db\", \"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c-35.3 0-64 28.7-64 64l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c0 35.3 28.7 64 64 64l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c35.3 0 64-28.7 64-64l40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0c0-35.3-28.7-64-64-64l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40zM160 128l192 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32l0-192c0-17.7 14.3-32 32-32zm192 32l-192 0 0 192 192 0 0-192z\"],\n    \"crown\": [576, 512, [128081], \"f521\", \"M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6l277.2 0c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z\"],\n    \"weight-hanging\": [512, 512, [], \"f5cd\", \"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32c0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32L120 128c-22 0-41.2 15-46.6 36.4l-72 288c-3.6 14.3-.4 29.5 8.7 41.2S33.2 512 48 512l416 0c14.8 0 28.7-6.8 37.8-18.5s12.3-26.8 8.7-41.2l-72-288C433.2 143 414 128 392 128l-45.5 0z\"],\n    \"xmarks-lines\": [640, 512, [], \"e59a\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55L7 311c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55L41 167c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\"],\n    \"file-prescription\": [384, 512, [], \"f572\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM104 196l72 0c33.1 0 60 26.9 60 60c0 25.5-15.9 47.2-38.3 55.9l43 40.3 33.8-31c8.1-7.5 20.8-6.9 28.3 1.2s6.9 20.8-1.2 28.3L270 379.7l31.7 29.7c8.1 7.6 8.5 20.2 .9 28.3s-20.2 8.5-28.3 .9l-33.9-31.8-34.9 32c-8.1 7.5-20.8 6.9-28.3-1.2s-6.9-20.8 1.2-28.3l32.6-29.9-64.8-60.8c-.9-.8-1.6-1.7-2.3-2.6l-20 0 0 44c0 11-9 20-20 20s-20-9-20-20l0-64 0-80c0-11 9-20 20-20zm72 80c11 0 20-9 20-20s-9-20-20-20l-52 0 0 40 52 0z\"],\n    \"weight-scale\": [512, 512, [\"weight\"], \"f496\", \"M128 176a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zM391.8 64C359.5 24.9 310.7 0 256 0S152.5 24.9 120.2 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-56.2 0zM296 224c0-10.6-4.1-20.2-10.9-27.4l33.6-78.3c3.5-8.1-.3-17.5-8.4-21s-17.5 .3-21 8.4L255.7 184c-22 .1-39.7 18-39.7 40c0 22.1 17.9 40 40 40s40-17.9 40-40z\"],\n    \"user-group\": [640, 512, [128101, \"user-friends\"], \"f500\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM609.3 512l-137.8 0c5.4-9.4 8.6-20.3 8.6-32l0-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2l61.4 0C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z\"],\n    \"arrow-up-a-z\": [576, 512, [\"sort-alpha-up\"], \"f15e\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 320c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-128 0c-17.7 0-32 14.3-32 32zM416 32c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 38.8 428.1 32 416 32zM395.8 176L416 135.6 436.2 176l-40.4 0z\"],\n    \"chess-knight\": [448, 512, [9822], \"f441\", \"M96 48L82.7 61.3C70.7 73.3 64 89.5 64 106.5l0 132.4c0 10.7 5.3 20.7 14.2 26.6l10.6 7c14.3 9.6 32.7 10.7 48.1 3l3.2-1.6c2.6-1.3 5-2.8 7.3-4.5l49.4-37c6.6-5 15.7-5 22.3 0c10.2 7.7 9.9 23.1-.7 30.3L90.4 350C73.9 361.3 64 380 64 400l320 0 28.9-159c2.1-11.3 3.1-22.8 3.1-34.3l0-14.7C416 86 330 0 224 0L83.8 0C72.9 0 64 8.9 64 19.8c0 7.5 4.2 14.3 10.9 17.7L96 48zm24 68a20 20 0 1 1 40 0 20 20 0 1 1 -40 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l370.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L384 432 64 432 22.6 473.4z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zm36.7-199.4l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 125.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"wheelchair\": [512, 512, [], \"f193\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM120.5 247.2c12.4-4.7 18.7-18.5 14-30.9s-18.5-18.7-30.9-14C43.1 225.1 0 283.5 0 352c0 88.4 71.6 160 160 160c61.2 0 114.3-34.3 141.2-84.7c6.2-11.7 1.8-26.2-9.9-32.5s-26.2-1.8-32.5 9.9C240 440 202.8 464 160 464C98.1 464 48 413.9 48 352c0-47.9 30.1-88.8 72.5-104.8zM259.8 176l-1.9-9.7c-4.5-22.3-24-38.3-46.8-38.3c-30.1 0-52.7 27.5-46.8 57l23.1 115.5c6 29.9 32.2 51.4 62.8 51.4l5.1 0c.4 0 .8 0 1.3 0l94.1 0c6.7 0 12.6 4.1 15 10.4L402 459.2c6 16.1 23.8 24.6 40.1 19.1l48-16c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-18.7 6.2-25.5-68c-11.7-31.2-41.6-51.9-74.9-51.9l-68.5 0-9.6-48 63.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-76.2 0z\"],\n    \"circle-arrow-up\": [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 215c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71L280 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-214.1-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 103c9.4-9.4 24.6-9.4 33.9 0L385 215z\"],\n    \"toggle-on\": [576, 512, [], \"f205\", \"M192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192s-86-192-192-192L192 64zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"person-walking\": [320, 512, [128694, \"walking\"], \"f554\", \"M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z\"],\n    \"l\": [320, 512, [108], \"4c\", \"M64 32c17.7 0 32 14.3 32 32l0 352 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32L32 64c0-17.7 14.3-32 32-32z\"],\n    \"fire\": [448, 512, [128293], \"f06d\", \"M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5c-16.5-21-46-58.5-62.8-79.8c-6.3-8-18.3-8.1-24.7-.1c-33.8 42.5-50.8 69.3-50.8 99.4C112 375.4 162.6 416 225.7 416z\"],\n    \"bed-pulse\": [640, 512, [\"procedures\"], \"f487\", \"M483.2 9.6L524 64l92 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-104 0c-7.6 0-14.7-3.6-19.2-9.6L468.7 70.3l-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L339.2 112 216 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5C445.9 6.2 453.2 1 461.6 .1s16.6 2.7 21.6 9.5zM320 160l12.7 0 20.7 31.1c11.2 16.8 30.6 26.3 50.7 24.8s37.9-13.7 46.5-32L461.9 160l82.1 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 448l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32zm-144 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"shuttle-space\": [640, 512, [\"space-shuttle\"], \"f197\", \"M130 480c40.6 0 80.4-11 115.2-31.9L352 384l-224 0 0 96 2 0zM352 128L245.2 63.9C210.4 43 170.6 32 130 32l-2 0 0 96 224 0zM96 128l0-96L80 32C53.5 32 32 53.5 32 80l0 48 8 0c-22.1 0-40 17.9-40 40l0 16L0 328l0 16c0 22.1 17.9 40 40 40l-8 0 0 48c0 26.5 21.5 48 48 48l16 0 0-96 8 0c26.2 0 49.4-12.6 64-32l288 0c69.3 0 135-22.7 179.2-81.6c6.4-8.5 6.4-20.3 0-28.8C591 182.7 525.3 160 456 160l-288 0c-14.6-19.4-37.8-32-64-32l-8 0zM512 243.6l0 24.9c0 19.6-15.9 35.6-35.6 35.6c-2.5 0-4.4-2-4.4-4.4l0-87.1c0-2.5 2-4.4 4.4-4.4c19.6 0 35.6 15.9 35.6 35.6z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"folder-open\": [576, 512, [128194, 128449, 61717], \"f07c\", \"M88.7 223.8L0 375.8 0 96C0 60.7 28.7 32 64 32l117.5 0c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7L416 96c35.3 0 64 28.7 64 64l0 32-336 0c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224l400 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480L32 480c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z\"],\n    \"heart-circle-plus\": [576, 512, [], \"e500\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"code-fork\": [448, 512, [], \"e13b\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 38.7c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-38.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 38.7c0 53-43 96-96 96l-48 0 0 70.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-70.7-48 0c-53 0-96-43-96-96l0-38.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"],\n    \"city\": [640, 512, [127961], \"f64f\", \"M480 48c0-26.5-21.5-48-48-48L336 0c-26.5 0-48 21.5-48 48l0 48-64 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-72c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144l0 96L0 464c0 26.5 21.5 48 48 48l256 0 32 0 96 0 160 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-112 0 0-144zm96 320l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM240 416l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM128 400c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM560 256c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 176l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM112 160c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 304c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 320l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zm304-48l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM400 64c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zm16 112l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16z\"],\n    \"microphone-lines\": [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M96 96l0 160c0 53 43 96 96 96s96-43 96-96l-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96S96 43 96 96zM320 240l0 16c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24z\"],\n    \"pepper-hot\": [512, 512, [127798], \"f816\", \"M428.3 3c11.6-6.4 26.2-2.3 32.6 9.3l4.8 8.7c19.3 34.7 19.8 75.7 3.4 110C495.8 159.6 512 197.9 512 240c0 18.5-3.1 36.3-8.9 52.8c-6.1 17.3-28.5 16.3-36.8-.1l-11.7-23.4c-4.1-8.1-12.4-13.3-21.5-13.3L360 256c-13.3 0-24-10.7-24-24l0-80c0-13.3-10.7-24-24-24l-17.1 0c-21.3 0-30-23.9-10.8-32.9C304.7 85.4 327.7 80 352 80c28.3 0 54.8 7.3 77.8 20.2c5.5-18.2 3.7-38.4-6-55.8L419 35.7c-6.4-11.6-2.3-26.2 9.3-32.6zM171.2 345.5L264 160l40 0 0 80c0 26.5 21.5 48 48 48l76.2 0 23.9 47.8C372.3 443.9 244.3 512 103.2 512l-58.8 0C19.9 512 0 492.1 0 467.6c0-20.8 14.5-38.8 34.8-43.3l49.8-11.1c37.6-8.4 69.5-33.2 86.7-67.7z\"],\n    \"unlock\": [448, 512, [128275], \"f09c\", \"M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144l0 48-16 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-240 0 0-48z\"],\n    \"colon-sign\": [384, 512, [], \"e140\", \"M255 39.8c4.3-17.1-6.1-34.5-23.3-38.8S197.2 7.1 193 24.2L181.9 68.6C96.1 87.8 32 164.4 32 256c0 58.1 25.8 110.2 66.7 145.4L81 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l13-52.1c9 3.4 18.4 6.2 28 8.2L177 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l10.4-41.4c33.4-4.4 64.1-17.4 89.8-36.7c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-10.2 7.7-21.7 13.9-34 18.3L321 160c9.4-.3 18.5-4.7 24.6-12.8c10.6-14.1 7.8-34.2-6.4-44.8c-1.1-.8-2.2-1.6-3.3-2.4L351 39.8c4.3-17.1-6.1-34.5-23.3-38.8S293.2 7.1 289 24.2L277.2 71.5c-9.3-2.7-18.8-4.6-28.6-5.9L255 39.8zM163.2 143.3L117.3 326.8C103.9 306.5 96 282.2 96 256c0-48.7 27.2-91 67.2-112.7zm8.6 229.5l61.1-244.6c9.9 .7 19.5 2.5 28.7 5.3l-62 248.1c-9.7-1.9-19-4.8-27.8-8.8z\"],\n    \"headset\": [512, 512, [], \"f590\", \"M256 48C141.1 48 48 141.1 48 256l0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40C0 114.6 114.6 0 256 0S512 114.6 512 256l0 144.1c0 48.6-39.4 88-88.1 88L313.6 488c-8.3 14.3-23.8 24-41.6 24l-32 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l32 0c17.8 0 33.3 9.7 41.6 24l110.4 .1c22.1 0 40-17.9 40-40L464 256c0-114.9-93.1-208-208-208zM144 208l16 0c17.7 0 32 14.3 32 32l0 112c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-48c0-35.3 28.7-64 64-64zm224 0c35.3 0 64 28.7 64 64l0 48c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-112c0-17.7 14.3-32 32-32l16 0z\"],\n    \"store-slash\": [640, 512, [], \"e071\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.8-68 0-17.1 0-131.4c-4 1-8 1.8-12.3 2.3c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3l0 100.3L301.2 210.7c7-4.4 13.3-9.7 18.8-15.7c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4L522.3 13.1C517.2 5 508.1 0 498.4 0L141.6 0c-9.7 0-18.8 5-23.9 13.1l-22.7 36L38.8 5.1zm73.4 218.1c4 .5 8.1 .8 12.1 .8c11 0 21.4-2 31-5.6L48.9 134.5c-6.1 40.6 19.5 82.8 63.3 88.7zM160 384l0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L96 384l0 64c0 35.3 28.7 64 64 64l320 0c12.9 0 24.8-3.8 34.9-10.3L365.5 384 160 384z\"],\n    \"road-circle-xmark\": [640, 512, [], \"e566\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"],\n    \"user-minus\": [640, 512, [], \"f503\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM472 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"mars-stroke-up\": [320, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M148.7 4.7c6.2-6.2 16.4-6.2 22.6 0l64 64c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-40 0 0 24 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 24c0 .6 0 1.2-.1 1.8c77 11.6 136.1 78 136.1 158.2c0 88.4-71.6 160-160 160S0 440.4 0 352c0-80.2 59.1-146.7 136.1-158.2c0-.6-.1-1.2-.1-1.8l0-24-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-24L96 96c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l64-64zM256 352A96 96 0 1 0 64 352a96 96 0 1 0 192 0z\"],\n    \"champagne-glasses\": [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M155.6 17.3C163 3 179.9-3.6 195 1.9L320 47.5l125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6L556.1 413l41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41l-71.1 25.9L476.8 510c-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-34-130-95.2L320 188.8l-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6 25.2 24.4 19.1 41s-24.4 25.2-41 19.1L92.2 484.1 21.1 458.2c-16.6-6.1-25.2-24.4-19.1-41s24.4-25.2 41-19.1l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8L261.6 157l13.1-57.9L199.6 71.7zm240.9 0L365.4 99.1 378.5 157l89.2-32.5L440.5 71.7z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM112 192l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"house-circle-exclamation\": [640, 512, [], \"e50a\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"file-arrow-up\": [384, 512, [\"file-upload\"], \"f574\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 408c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-102.1-31 31c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-31-31L216 408z\"],\n    \"wifi\": [640, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"bath\": [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M96 77.3c0-7.3 5.9-13.3 13.3-13.3c3.5 0 6.9 1.4 9.4 3.9l14.9 14.9C130 91.8 128 101.7 128 112c0 19.9 7.2 38 19.2 52c-5.3 9.2-4 21.1 3.8 29c9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9c-7.9-7.9-19.8-9.1-29-3.8C246 39.2 227.9 32 208 32c-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0C66.6 0 32 34.6 32 77.3L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 256 96 77.3zM32 352l0 16c0 28.4 12.4 54 32 71.6L64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16 256 0 0 16c0 17.7 14.3 32 32 32s32-14.3 32-32l0-40.4c19.6-17.6 32-43.1 32-71.6l0-16L32 352z\"],\n    \"underline\": [448, 512, [], \"f0cd\", \"M16 64c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 53 43 96 96 96s96-43 96-96l0-128-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 88.4-71.6 160-160 160s-160-71.6-160-160L64 96 48 96C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32z\"],\n    \"user-pen\": [640, 512, [\"user-edit\"], \"f4ff\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l293.1 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7l40.3-40.3c-32.1-31-75.7-50.1-123.9-50.1l-91.4 0zm435.5-68.3c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM375.9 417c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L576.1 358.7l-71-71L375.9 417z\"],\n    \"signature\": [640, 512, [], \"f5b7\", \"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92l0 71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-83.6 0 18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3l0-7.8c0-53-43-96-96-96s-96 43-96 96l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5l0-71.9c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l40.3 0c-.2-2.8-.3-5.6-.3-8.5L64 368l-40 0zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24l-310.1 0c-6.7 16.3-14.2 32.3-22.3 48L616 416z\"],\n    \"stroopwafel\": [512, 512, [], \"f551\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3L86.3 199.4c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L256 414.4l33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L414.4 256l33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3L233.4 256l-45.3 45.3L142.9 256zm67.9 67.9L256 278.6l45.3 45.3L256 369.1l-45.3-45.3zM278.6 256l45.3-45.3L369.1 256l-45.3 45.3L278.6 256zm22.6-67.9L256 233.4l-45.3-45.3L256 142.9l45.3 45.3z\"],\n    \"bold\": [384, 512, [], \"f032\", \"M0 64C0 46.3 14.3 32 32 32l48 0 16 0 128 0c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128L96 480l-16 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-160L48 96 32 96C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64L112 96l0 128 112 0zM112 288l0 128 144 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-112 0z\"],\n    \"anchor-lock\": [640, 512, [], \"e4ad\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8 0 15.9-.6 23.6-1.7c-4.8-9-7.6-19.3-7.6-30.3l0-33.3c-5.2 .9-10.5 1.3-16 1.3l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"building-ngo\": [384, 512, [], \"e4d7\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM168 64l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 64 16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 24c0 13.3-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24l0-88c0-8.8 7.2-16 16-16zM304 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32c0-8.8-7.2-16-16-16zm-48 16c0-26.5 21.5-48 48-48s48 21.5 48 48l0 32c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-32zM61.3 71.1l34.7 52L96 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4L64 132.8 64 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4z\"],\n    \"manat-sign\": [384, 512, [], \"e1d5\", \"M192 32c-17.7 0-32 14.3-32 32l0 34.7C69.2 113.9 0 192.9 0 288L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-59.6 40.8-109.8 96-124l0 284c0 17.7 14.3 32 32 32s32-14.3 32-32l0-284c55.2 14.2 96 64.3 96 124l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-95.1-69.2-174.1-160-189.3L224 64c0-17.7-14.3-32-32-32z\"],\n    \"not-equal\": [448, 512, [], \"f53e\", \"M369.8 37.4c14.7 9.8 18.7 29.7 8.9 44.4L337.1 144l62.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-105.5 0-64 96L400 304c17.7 0 32 14.3 32 32s-14.3 32-32 32l-212.2 0-65.2 97.7c-9.8 14.7-29.7 18.7-44.4 8.9s-18.7-29.7-8.9-44.4L110.9 368 48 368c-17.7 0-32-14.3-32-32s14.3-32 32-32l105.5 0 64-96L48 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l212.2 0 65.2-97.7c9.8-14.7 29.7-18.7 44.4-8.9z\"],\n    \"border-top-left\": [448, 512, [\"border-style\"], \"f853\", \"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"map-location-dot\": [576, 512, [\"map-marked-alt\"], \"f5a0\", \"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152l0 270.8c0 9.8-6 18.6-15.1 22.3L416 503l0-302.6zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6l0 251.4L32.9 502.7C17.1 509 0 497.4 0 480.4L0 209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77l0 249.3L192 449.4 192 255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"],\n    \"jedi\": [576, 512, [], \"f669\", \"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9 0 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5C370.6 435.2 416 382.9 416 320c0-37-15.7-70.4-40.8-93.7c-7-6.5-6.5-18.6 1-24.4C410.1 175.5 432 134.3 432 88c0-16.8-2.9-33-8.2-48c-4.6-13 10.2-30 21.4-22c53.5 38 92.7 94.8 107.8 160.7c.5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9l26 0c3.4 0 6.2 2.6 6.3 6c.1 3.3 .2 6.6 .2 10c0 17.5-1.7 34.7-4.8 51.3c-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9l14.6 0c4.6 0 7.7 4.8 5.7 9C487.2 450.5 394.8 512 288 512S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9l14.6 0c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3C17.7 274.7 16 257.5 16 240c0-3.3 .1-6.7 .2-10c.1-3.4 2.9-6 6.3-6l26 0c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9C38.1 112.8 77.3 56 130.8 18c11.3-8 26 8.9 21.4 22c-5.3 15-8.2 31.2-8.2 48c0 46.3 21.9 87.5 55.8 113.9c7.5 5.8 8 17.9 1 24.4C175.7 249.6 160 283 160 320c0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\"],\n    \"square-poll-vertical\": [448, 512, [\"poll\"], \"f681\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 192c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192zM320 288c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32z\"],\n    \"mug-hot\": [512, 512, [9749], \"f7b6\", \"M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32L0 416c0 53 43 96 96 96l192 0c53 0 96-43 96-96l16 0c61.9 0 112-50.1 112-112s-50.1-112-112-112l-48 0L32 192zm352 64l16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0 0-96zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z\"],\n    \"car-battery\": [512, 512, [\"battery-car\"], \"f5df\", \"M80 96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l16 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64l16 0zm304 96c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 32-32 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-32zM80 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16z\"],\n    \"gift\": [512, 512, [127873], \"f06b\", \"M190.5 68.8L225.3 128l-1.3 0-72 0c-22.1 0-40-17.9-40-40s17.9-40 40-40l2.2 0c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40L32 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l448 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-41.6 0c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88l-2.2 0c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0L152 0C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40l-72 0-1.3 0 34.8-59.2C329.1 55.9 342.9 48 357.8 48l2.2 0c22.1 0 40 17.9 40 40zM32 288l0 176c0 26.5 21.5 48 48 48l144 0 0-224L32 288zM288 512l144 0c26.5 0 48-21.5 48-48l0-176-192 0 0 224z\"],\n    \"dice-two\": [448, 512, [9857], \"f528\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 0a56 56 0 1 1 0 112A56 56 0 1 1 256 0zM134.1 143.8c3.3-13 15-23.8 30.2-23.8c12.3 0 22.6 7.2 27.7 17c12 23.2 36.2 39 64 39s52-15.8 64-39c5.1-9.8 15.4-17 27.7-17c15.3 0 27 10.8 30.2 23.8c7 27.8 32.2 48.3 62.1 48.3c10.8 0 21-2.7 29.8-7.4c8.4-4.4 18.9-4.5 27.6 .9c13 8 17.1 25 9.2 38L399.7 400 384 400l-40.4 0-175.1 0L128 400l-15.7 0L5.4 223.6c-7.9-13-3.8-30 9.2-38c8.7-5.3 19.2-5.3 27.6-.9c8.9 4.7 19 7.4 29.8 7.4c29.9 0 55.1-20.5 62.1-48.3zM256 224s0 0 0 0s0 0 0 0s0 0 0 0zM112 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L86.6 512C74.1 512 64 501.9 64 489.4c0-6 2.4-11.8 6.6-16L112 432z\"],\n    \"glasses\": [576, 512, [], \"f530\", \"M118.6 80c-11.5 0-21.4 7.9-24 19.1L57 260.3c20.5-6.2 48.3-12.3 78.7-12.3c32.3 0 61.8 6.9 82.8 13.5c10.6 3.3 19.3 6.7 25.4 9.2c3.1 1.3 5.5 2.4 7.3 3.2c.9 .4 1.6 .7 2.1 1l.6 .3 .2 .1c0 0 .1 0 .1 0c0 0 0 0 0 0s0 0 0 0L247.9 288s0 0 0 0l6.3-12.7c5.8 2.9 10.4 7.3 13.5 12.7l40.6 0c3.1-5.3 7.7-9.8 13.5-12.7l6.3 12.7s0 0 0 0c-6.3-12.7-6.3-12.7-6.3-12.7s0 0 0 0s0 0 0 0c0 0 .1 0 .1 0l.2-.1 .6-.3c.5-.2 1.2-.6 2.1-1c1.8-.8 4.2-1.9 7.3-3.2c6.1-2.6 14.8-5.9 25.4-9.2c21-6.6 50.4-13.5 82.8-13.5c30.4 0 58.2 6.1 78.7 12.3L481.4 99.1c-2.6-11.2-12.6-19.1-24-19.1c-3.1 0-6.2 .6-9.2 1.8L416.9 94.3c-12.3 4.9-26.3-1.1-31.2-13.4s1.1-26.3 13.4-31.2l31.3-12.5c8.6-3.4 17.7-5.2 27-5.2c33.8 0 63.1 23.3 70.8 56.2l43.9 188c1.7 7.3 2.9 14.7 3.5 22.1c.3 1.9 .5 3.8 .5 5.7l0 6.7 0 41.3 0 16c0 61.9-50.1 112-112 112l-44.3 0c-59.4 0-108.5-46.4-111.8-105.8L306.6 352l-37.2 0-1.2 22.2C264.9 433.6 215.8 480 156.3 480L112 480C50.1 480 0 429.9 0 368l0-16 0-41.3L0 304c0-1.9 .2-3.8 .5-5.7c.6-7.4 1.8-14.8 3.5-22.1l43.9-188C55.5 55.3 84.8 32 118.6 32c9.2 0 18.4 1.8 27 5.2l31.3 12.5c12.3 4.9 18.3 18.9 13.4 31.2s-18.9 18.3-31.2 13.4L127.8 81.8c-2.9-1.2-6-1.8-9.2-1.8zM64 325.4L64 368c0 26.5 21.5 48 48 48l44.3 0c25.5 0 46.5-19.9 47.9-45.3l2.5-45.6c-2.3-.8-4.9-1.7-7.5-2.5c-17.2-5.4-39.9-10.5-63.6-10.5c-23.7 0-46.2 5.1-63.2 10.5c-3.1 1-5.9 1.9-8.5 2.9zM512 368l0-42.6c-2.6-.9-5.5-1.9-8.5-2.9c-17-5.4-39.5-10.5-63.2-10.5c-23.7 0-46.4 5.1-63.6 10.5c-2.7 .8-5.2 1.7-7.5 2.5l2.5 45.6c1.4 25.4 22.5 45.3 47.9 45.3l44.3 0c26.5 0 48-21.5 48-48z\"],\n    \"chess-board\": [448, 512, [], \"f43c\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 64l0 64 64 0 0-64 64 0 0 64 64 0 0-64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64 64 0 0-64-64 0 0-64 64 0 0-64-64 0 0-64 64 0zm64 128l64 0 0-64-64 0 0 64zm0 64l0-64-64 0 0 64 64 0zm64 0l-64 0 0 64 64 0 0-64zm0 0l64 0 0-64-64 0 0 64z\"],\n    \"building-circle-check\": [640, 512, [], \"e4d2\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"person-chalkboard\": [640, 512, [], \"e53d\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288 56 0 64 0 16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-64 192 0 0 192-192 0 0-32-64 0 0 48c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 80-76.9 0-65.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32z\"],\n    \"mars-stroke-right\": [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M208 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm174.4-88C370.7 365.8 297.1 432 208 432c-97.2 0-176-78.8-176-176s78.8-176 176-176c89.1 0 162.7 66.2 174.4 152l33.6 0 0-56c0-13.3 10.7-24 24-24s24 10.7 24 24l0 56 32 0 0-56c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-56-32 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-33.6 0z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M144 0C117.5 0 96 21.5 96 48l0 48 0 28.5L96 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-26.7-9 7.5C40.4 169 32 187 32 206L32 244c0 38 16.9 74 46.1 98.3L128 384l0 96c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-105.3c46.9-19 80-65 80-118.7l0-80 0-16 0-16c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 83.5 329.3 64 304 64c-12.4 0-23.6 4.7-32.1 12.3C270 51.5 249.3 32 224 32c-12.4 0-23.6 4.7-32.1 12.3C190 19.5 169.3 0 144 0z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"],\n    \"cloud-showers-water\": [576, 512, [], \"e4e4\", \"M224 0c38.6 0 71.9 22.8 87.2 55.7C325.7 41.1 345.8 32 368 32c38.7 0 71 27.5 78.4 64l1.6 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64s28.7-64 64-64c0-53 43-96 96-96zM140.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm327.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM252.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm103.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"hands-bubbles\": [576, 512, [\"hands-wash\"], \"e05e\", \"M416 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM32 160l.1 72.6c.1 52.2 24 101 64 133.1c-.1-1.9-.1-3.8-.1-5.7l0-8c0-71.8 37-138.6 97.9-176.7l60.2-37.6c8.6-5.4 17.9-8.4 27.3-9.4l45.9-79.5c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-78 135.1c-3.3 5.7-10.7 7.7-16.4 4.4s-7.7-10.7-4.4-16.4l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S214 5 207.4 16.5l-68 117.8s0 0 0 0s0 0 0 0l-43.3 75L96 160c0-17.7-14.4-32-32-32s-32 14.4-32 32zM332.1 88.5L307.5 131c13.9 4.5 26.4 13.7 34.7 27c.9 1.5 1.8 2.9 2.5 4.4l28.9-50c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-26.8 46.4c-.6 6-2.1 11.8-4.3 17.4l4.7 0 13.3 0s0 0 0 0l31.8 0 23-39.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM315.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C159.3 234.7 128 291.2 128 352l0 8c0 8.9 .8 17.6 2.2 26.1c35.4 8.2 61.8 40 61.8 77.9c0 6.3-.7 12.5-2.1 18.4C215.1 501 246.3 512 280 512l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-92 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-124 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l156 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-156 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-136 0s0 0 0 0s0 0 0 0l-93.2 0L305 219.1c15-9.4 19.5-29.1 10.2-44.1z\"],\n    \"less-than-equal\": [448, 512, [], \"f537\", \"M395.9 93.7c16.4-6.6 24.4-25.2 17.8-41.6s-25.2-24.4-41.6-17.8l-320 128C40 167.1 32 178.9 32 192s8 24.9 20.1 29.7l320 128c16.4 6.6 35-1.4 41.6-17.8s-1.4-35-17.8-41.6L150.2 192 395.9 93.7zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"],\n    \"train\": [448, 512, [128646], \"f238\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l256 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-96zM224 288a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"eye-low-vision\": [640, 512, [\"low-vision\"], \"f2a8\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223 149.5c48.6-44.3 123-50.8 179.3-11.7c60.8 42.4 78.9 123.2 44.2 186.9L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3L223 149.5zm223.1 298L83.1 161.5c-11 14.4-20.5 28.7-28.4 42.2l339 265.7c18.7-5.5 36.2-13 52.6-21.8zM34.5 268.3c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c3.1 0 6.1-.1 9.2-.2L33.1 247.8c-1.8 6.8-1.3 14 1.4 20.5z\"],\n    \"crow\": [640, 512, [], \"f520\", \"M456 0c-48.6 0-88 39.4-88 88l0 29.2L12.5 390.6c-14 10.8-16.6 30.9-5.9 44.9s30.9 16.6 44.9 5.9L126.1 384l133.1 0 46.6 113.1c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3L311.1 384l40.9 0c1.1 0 2.1 0 3.2 0l46.6 113.2c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3l-42-102C484.9 354.1 544 280 544 192l0-64 0-8 80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4C629 52 603.4 32 574 32l-50.1 0C507.7 12.5 483.3 0 456 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"sailboat\": [576, 512, [], \"e445\", \"M256 16c0-7 4.5-13.2 11.2-15.3s13.9 .4 17.9 6.1l224 320c3.4 4.9 3.8 11.3 1.1 16.6s-8.2 8.6-14.2 8.6l-224 0c-8.8 0-16-7.2-16-16l0-320zM212.1 96.5c7 1.9 11.9 8.2 11.9 15.5l0 224c0 8.8-7.2 16-16 16L80 352c-5.7 0-11-3-13.8-8s-2.9-11-.1-16l128-224c3.6-6.3 11-9.4 18-7.5zM5.7 404.3C2.8 394.1 10.5 384 21.1 384l533.8 0c10.6 0 18.3 10.1 15.4 20.3l-4 14.3C550.7 473.9 500.4 512 443 512L133 512C75.6 512 25.3 473.9 9.7 418.7l-4-14.3z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 64L208 64c-8.8 0-16 7.2-16 16l0 16-64 0 0-16c0-44.2 35.8-80 80-80L432 0c44.2 0 80 35.8 80 80l0 224c0 44.2-35.8 80-80 80l-16 0 0-64 16 0c8.8 0 16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zM0 192c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192zm64 32c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 192c-17.7 0-32 14.3-32 32z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"],\n    \"torii-gate\": [512, 512, [9961], \"f6a1\", \"M0 80c0 26.5 21.5 48 48 48l16 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 16 0c26.5 0 48-21.5 48-48l0-66.6C512 6 506 0 498.6 0c-1.7 0-3.4 .3-5 1l-49 19.6C425.7 28.1 405.5 32 385.2 32L126.8 32c-20.4 0-40.5-3.9-59.4-11.4L18.4 1c-1.6-.6-3.3-1-5-1C6 0 0 6 0 13.4L0 80zM64 288l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0 0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0z\"],\n    \"frog\": [576, 512, [], \"f52e\", \"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9c0 21.8-11.7 41.9-30.7 52.7L400.8 323.5 493.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7c-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2c27.9-18.5 65.9-15.4 90.5 9.2c24.7 24.7 27.7 62.9 9 90.9c-2.6 3.8-5.6 7.5-9 10.9L261.8 416l90.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-35.3 0-64-28.7-64-64C0 249.6 127 112.9 289.3 97.5C296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"bucket\": [448, 512, [], \"e4cf\", \"M96 152l0 8-48 0 0-8C48 68.1 116.1 0 200 0l48 0c83.9 0 152 68.1 152 152l0 8-48 0 0-8c0-57.4-46.6-104-104-104l-48 0C142.6 48 96 94.6 96 152zM0 224c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-5.1 0L388.5 469c-2.6 24.4-23.2 43-47.7 43l-233.6 0c-24.6 0-45.2-18.5-47.7-43L37.1 256 32 256c-17.7 0-32-14.3-32-32z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l96 0 32 0 208 0c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"microphone\": [384, 512, [], \"f130\", \"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40z\"],\n    \"cow\": [640, 512, [128004], \"f6c8\", \"M96 224l0 32 0 160c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-88.2c9.9 6.6 20.6 12 32 16.1l0 24.2c0 8.8 7.2 16 16 16s16-7.2 16-16l0-16.9c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9l0 16.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-24.2c11.4-4 22.1-9.4 32-16.1l0 88.2c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-160 32 32 0 49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21c22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5 0-81.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 14.4-52.9-74.1C496 86.5 452.4 64 405.9 64L272 64l-16 0-64 0-48 0C77.7 64 24 117.7 24 184l0 54C9.4 249.8 0 267.8 0 288l0 17.6c0 8 6.4 14.4 14.4 14.4C46.2 320 72 294.2 72 262.4l0-6.4 0-32 0-40c0-24.3 12.1-45.8 30.5-58.9C98.3 135.9 96 147.7 96 160l0 64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16c0-12.5 10.1-22.6 22.6-22.6l178.7 0c12.5 0 22.6 10.1 22.6 22.6c0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\"],\n    \"caret-up\": [320, 512, [], \"f0d8\", \"M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"],\n    \"screwdriver\": [512, 512, [129691], \"f54a\", \"M465 7c-8.5-8.5-22-9.4-31.6-2.1l-104 80c-5.9 4.5-9.4 11.6-9.4 19l0 54.1-85.6 85.6c6.7 4.2 13 9.3 18.8 15.1s10.9 12.2 15.1 18.8L353.9 192l54.1 0c7.5 0 14.5-3.5 19-9.4l80-104c7.4-9.6 6.5-23.1-2.1-31.6L465 7zM121.4 281.4l-112 112c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l112-112c30.2-30.2 30.2-79.1 0-109.3s-79.1-30.2-109.3 0z\"],\n    \"folder-closed\": [512, 512, [], \"e185\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 192l512 0 0 224c0 35.3-28.7 64-64 64zm64-320L0 160 0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64z\"],\n    \"house-tsunami\": [576, 512, [], \"e515\", \"M80.8 136.5C104.9 93.8 152.6 64 209 64c16.9 0 33.1 2.7 48.2 7.7c16.8 5.5 34.9-3.6 40.4-20.4s-3.6-34.9-20.4-40.4C255.8 3.8 232.8 0 209 0C95.2 0 0 88 0 200c0 91.6 53.5 172.1 142.2 194.1c13.4 3.8 27.5 5.9 42.2 5.9c.7 0 1.4 0 2.1-.1c1.8 0 3.7 .1 5.5 .1c0 0 0 0 0 0c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0c-22.4 15.5-49.9 26.1-77.4 26.1c0 0-.1 0-.1 0c-12.4 0-24-1.5-34.9-4.3C121.6 320.2 96 287 96 248c0-48.5 39.5-88 88.4-88c13.5 0 26.1 3 37.5 8.3c16 7.5 35.1 .6 42.5-15.5s.6-35.1-15.5-42.5C229.3 101.1 207.4 96 184.4 96c-40 0-76.4 15.4-103.6 40.5zm252-18.1c-8.1 6-12.8 15.5-12.8 25.6l0 121c1.6 1 3.3 2 4.8 3.1c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c5.8 1.4 11.2 3.4 16.2 6.2c.7-2.7 1.1-5.5 1.1-8.4l-.4-144c0-10-4.7-19.4-12.7-25.5l-95.5-72c-11.4-8.6-27.1-8.6-38.5 0l-96 72zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"],\n    \"square-nfi\": [448, 512, [], \"e576\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm75.7 64.6C68.8 162.5 64 168.8 64 176l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-102.2 66.3 110.5c3.7 6.2 11.1 9.1 18 7.2s11.7-8.2 11.7-15.4l0-160c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 102.2L93.7 167.8c-3.7-6.2-11.1-9.1-18-7.2zM224 176l0 64 0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-32 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm160 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-160z\"],\n    \"arrow-up-from-ground-water\": [576, 512, [], \"e4b5\", \"M288 352c17.7 0 32-14.3 32-32l0-210.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3 256 320c0 17.7 14.3 32 32 32zm-18.5 69.9C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM192 192L48 192c-26.5 0-48 21.5-48 48L0 425c5.3-3.1 11.2-5.4 17.5-6.9c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.1 20.3L192 192zm384 48c0-26.5-21.5-48-48-48l-144 0 0 224.5s0 0 0 0c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c6.3 1.5 12.1 3.8 17.5 6.9l0-185z\"],\n    \"martini-glass\": [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM173.3 128l-64-64 293.5 0-64 64-165.5 0z\"],\n    \"square-binary\": [448, 512, [], \"e69b\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm144 4c-24.3 0-44 19.7-44 44l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0zm-4 44c0-2.2 1.8-4 4-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48zm140-44c-11 0-20 9-20 20c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0zM132 296c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20zm96 24l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0c-24.3 0-44 19.7-44 44zm44-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48c0-2.2 1.8-4 4-4z\"],\n    \"rotate-left\": [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z\"],\n    \"table-columns\": [512, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 64l0 256 160 0 0-256L64 160zm384 0l-160 0 0 256 160 0 0-256z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M448 96c0-35.3-28.7-64-64-64c-6.6 0-13 1-19 2.9c-22.5 7-48.1 14.9-71 9c-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71C1 403 0 409.4 0 416c0 35.3 28.7 64 64 64c6.6 0 13-1 19.1-2.9c22.5-7 48.1-14.9 71-9c75.2 19.1 156.4-11 213.7-68.3s87.5-138.5 68.3-213.7c-5.8-22.9 2-48.4 9-71c1.9-6 2.9-12.4 2.9-19.1zM212.5 127.4c-54.6 16-101.1 62.5-117.1 117.1C92.9 253 84 257.8 75.5 255.4S62.2 244 64.6 235.5c19.1-65.1 73.7-119.8 138.9-138.9c8.5-2.5 17.4 2.4 19.9 10.9s-2.4 17.4-10.9 19.9z\"],\n    \"head-side-mask\": [576, 512, [], \"e063\", \"M32 224.2c0-22.2 3.2-43.6 9.2-63.9L262.2 321c-4 9.5-6.2 20-6.2 31l0 160-128 0c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C48.6 322.4 32 274.1 32 224.2zm248.3 70.4L53 129.3C88.7 53 166.2 0 256 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c5.4 6.7 8.6 14.8 9.4 23.2L336 272c-21.7 0-41.3 8.6-55.7 22.6zM336 304l198 0s0 0 0 0l10 0-19.7 64L368 368c-8.8 0-16 7.2-16 16s7.2 16 16 16l146.5 0-9.8 32L368 432c-8.8 0-16 7.2-16 16s7.2 16 16 16l126.8 0-.9 2.8c-8.3 26.9-33.1 45.2-61.2 45.2L288 512l0-160c0-14 6-26.7 15.6-35.4c0 0 0 0 0 0c8.5-7.8 19.9-12.6 32.4-12.6zm48-80a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48 0 224 28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123zM16 128c-8.8 0-16 7.2-16 16L0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-80 0zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-208c0-8.8-7.2-16-16-16l-80 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\"],\n    \"dolly\": [576, 512, [\"dolly-box\"], \"f472\", \"M0 32C0 14.3 14.3 0 32 0l72.9 0c27.5 0 52 17.6 60.7 43.8L257.7 320c30.1 .5 56.8 14.9 74 37l202.1-67.4c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L352 417.7c-.9 52.2-43.5 94.3-96 94.3c-53 0-96-43-96-96c0-30.8 14.5-58.2 37-75.8L104.9 64 32 64C14.3 64 0 49.7 0 32zM244.8 134.5c-5.5-16.8 3.7-34.9 20.5-40.3L311 79.4l19.8 60.9 60.9-19.8L371.8 59.6l45.7-14.8c16.8-5.5 34.9 3.7 40.3 20.5l49.4 152.2c5.5 16.8-3.7 34.9-20.5 40.3L334.5 307.2c-16.8 5.5-34.9-3.7-40.3-20.5L244.8 134.5z\"],\n    \"smoking\": [640, 512, [128684], \"f48d\", \"M448 32l0 11c0 38.2 15.2 74.8 42.2 101.8l21 21c21 21 32.8 49.5 32.8 79.2l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-11c0-12.7-5.1-24.9-14.1-33.9l-21-21C405.9 151.1 384 98.1 384 43l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32zM576 256l0-11c0-38.2-15.2-74.8-42.2-101.8l-21-21c-21-21-32.8-49.5-32.8-79.2l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32l0 11c0 12.7 5.1 24.9 14.1 33.9l21 21c39 39 60.9 91.9 60.9 147.1l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32zM0 416c0-35.3 28.7-64 64-64l352 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L64 512c-35.3 0-64-28.7-64-64l0-32zm224 0l0 32 160 0 0-32-160 0zm288-64c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"],\n    \"minimize\": [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M456 224l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l40 40L442.3 5.7C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143l40 40c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433l-40 40c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-144c0-13.3 10.7-24 24-24l144 0zm-256 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40L69.7 506.3C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8l144 0zM56 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l40-40L5.7 69.7C2 66 0 61.1 0 56s2-10 5.7-13.7L42.3 5.7C46 2 50.9 0 56 0s10 2 13.7 5.7L143 79l40-40c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 144c0 13.3-10.7 24-24 24L56 224z\"],\n    \"monument\": [384, 512, [], \"f5a6\", \"M180.7 4.7c6.2-6.2 16.4-6.2 22.6 0l80 80c2.5 2.5 4.1 5.8 4.6 9.3l40.2 322L55.9 416 96.1 94c.4-3.5 2-6.8 4.6-9.3l80-80zM152 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zM32 448l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"snowplow\": [640, 512, [], \"f7d2\", \"M298.9 64l68.6 160L256 224l-64-64 0-96 106.9 0zM445.1 242.7l-87.4-204C347.6 15.3 324.5 0 298.9 0L176 0c-26.5 0-48 21.5-48 48l0 112-32 0c-17.7 0-32 14.3-32 32l0 106.8C26.2 316.8 0 355.3 0 400c0 61.9 50.1 112 112 112l256 0c61.9 0 112-50.1 112-112c0-17.2-3.9-33.5-10.8-48l42.8 0 0 50.7c0 17 6.7 33.3 18.7 45.3l54.6 54.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L576 402.7l0-82.7 0-84.8L633 164c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-57 71.2c-9.1 11.3-14 25.4-14 40l0 52.8-64 0 0-31.3c.1-2.4-.2-4.8-.6-7.1s-1.2-4.7-2.2-6.8zM368 352c26.5 0 48 21.5 48 48s-21.5 48-48 48l-256 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l256 0zM144 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm216 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-56-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM200 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"angles-right\": [512, 512, [187, \"angle-double-right\"], \"f101\", \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"],\n    \"cannabis\": [512, 512, [], \"f55f\", \"M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2l0 70.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-70.8-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\"],\n    \"tablets\": [640, 512, [], \"f490\", \"M614.3 247c-5.2 7.9-16.2 8.5-22.9 1.8L391.2 48.6c-6.7-6.7-6.2-17.8 1.8-22.9C418.1 9.4 447.9 0 480 0c88.4 0 160 71.6 160 160c0 32.1-9.4 61.9-25.7 87zM567 294.3c-25 16.3-54.9 25.7-87 25.7c-88.4 0-160-71.6-160-160c0-32.1 9.4-61.9 25.7-87c5.2-7.9 16.2-8.5 22.9-1.8L568.8 271.4c6.7 6.7 6.2 17.8-1.8 22.9zM301.5 368c9.5 0 16.9 8.2 15 17.5C301.1 457.8 236.9 512 160 512S18.9 457.8 3.5 385.5c-2-9.3 5.5-17.5 15-17.5l283.1 0zm0-32L18.5 336c-9.5 0-16.9-8.2-15-17.5C18.9 246.2 83.1 192 160 192s141.1 54.2 156.5 126.5c2 9.3-5.5 17.5-15 17.5z\"],\n    \"ethernet\": [512, 512, [], \"f796\", \"M0 224L0 416c0 17.7 14.3 32 32 32l64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32L160 64c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32z\"],\n    \"euro-sign\": [320, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M48.1 240c-.1 2.7-.1 5.3-.1 8l0 16c0 2.7 0 5.3 .1 8L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l28.3 0C89.9 419.9 170 480 264 480l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0c-57.9 0-108.2-32.4-133.9-80L256 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-143.8 0c-.1-2.6-.2-5.3-.2-8l0-16c0-2.7 .1-5.4 .2-8L256 240c17.7 0 32-14.3 32-32s-14.3-32-32-32l-125.9 0c25.7-47.6 76-80 133.9-80l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0C170 32 89.9 92.1 60.3 176L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l16.1 0z\"],\n    \"chair\": [448, 512, [129681], \"f6c0\", \"M248 48l0 208 48 0 0-197.3c23.9 13.8 40 39.7 40 69.3l0 128 48 0 0-128C384 57.3 326.7 0 256 0L192 0C121.3 0 64 57.3 64 128l0 128 48 0 0-128c0-29.6 16.1-55.5 40-69.3L152 256l48 0 0-208 48 0zM48 288c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S20.9 384 32 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 256 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C423.2 294.8 412.1 288 400 288L48 288z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 160l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"],\n    \"compass-drafting\": [512, 512, [\"drafting-compass\"], \"f568\", \"M352 96c0 14.3-3.1 27.9-8.8 40.2L396 227.4c-23.7 25.3-54.2 44.1-88.5 53.6L256 192c0 0 0 0 0 0s0 0 0 0l-68 117.5c21.5 6.8 44.3 10.5 68.1 10.5c70.7 0 133.8-32.7 174.9-84c11.1-13.8 31.2-16 45-5s16 31.2 5 45C428.1 341.8 347 384 256 384c-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496l0-55.4c0-8.4 2.2-16.7 6.5-24.1l60-103.7C53.7 301.6 41.8 289.3 31.2 276c-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2c0-53 43-96 96-96s96 43 96 96zm21 297.9c32.6-12.8 62.5-30.8 88.9-52.9l43.7 75.5c4.2 7.3 6.5 15.6 6.5 24.1l0 55.4c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9L373 393.9zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"plate-wheat\": [512, 512, [], \"e55a\", \"M176 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zM56 64l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16zM400 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zm80 160l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80zm-96 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320l456.4 0c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446l0 2c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-2c-48.2-9-86.3-48.2-92.5-98.4z\"],\n    \"icicles\": [512, 512, [], \"f7ad\", \"M75.8 304.8L1 35.7c-.7-2.5-1-5-1-7.5C0 12.6 12.6 0 28.2 0H482.4C498.8 0 512 13.2 512 29.6c0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9c-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1c-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7c-9.3 0-17.5-6.2-20-15.2z\"],\n    \"person-shelter\": [512, 512, [], \"e54f\", \"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.4L256 68.9 448 178.6 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280l0-88 16 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-174.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5 200 488c0 13.3 10.7 24 24 24s24-10.7 24-24z\"],\n    \"neuter\": [384, 512, [9906], \"f22c\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1L160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-130.9z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zm96 320l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM144 64l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"marker\": [512, 512, [], \"f5a1\", \"M481 31C445.1-4.8 386.9-4.8 351 31l-15 15L322.9 33C294.8 4.9 249.2 4.9 221.1 33L135 119c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L255 66.9c9.4-9.4 24.6-9.4 33.9 0L302.1 80 186.3 195.7 316.3 325.7 481 161c35.9-35.9 35.9-94.1 0-129.9zM293.7 348.3L163.7 218.3 99.5 282.5c-48 48-80.8 109.2-94.1 175.8l-5 25c-1.6 7.9 .9 16 6.6 21.7s13.8 8.1 21.7 6.6l25-5c66.6-13.3 127.8-46.1 175.8-94.1l64.2-64.2z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM217.6 212.8s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"helicopter-symbol\": [512, 512, [], \"e502\", \"M445.3 224l64.7 0C495.6 108.2 403.8 16.4 288 2l0 64.7C368.4 80.1 431.9 143.6 445.3 224zM510 288l-64.7 0C431.9 368.4 368.4 431.9 288 445.3l0 64.7c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510l0-64.7C143.6 431.9 80.1 368.4 66.7 288L2 288zm0-64l64.7 0C80.1 143.6 143.6 80.1 224 66.7L224 2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 96 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-96 0 0-64z\"],\n    \"universal-access\": [512, 512, [], \"f29a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3l0 50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6l0-50.1c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"],\n    \"circle-chevron-up\": [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\"],\n    \"lari-sign\": [384, 512, [], \"e1c8\", \"M144 32c17.7 0 32 14.3 32 32l0 32.7c5.3-.4 10.6-.7 16-.7s10.7 .2 16 .7L208 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49.4c54.9 25.2 95.8 75.5 108.2 136.2c3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.1-29.9-22.5-55.9-45.4-74.3l0 67.9c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-95c-5.2-.7-10.6-1-16-1s-10.8 .3-16 1l0 95c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-67.9C82.7 211.5 64 247.6 64 288c0 70.7 57.3 128 128 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l16.9 0C18.5 382 0 337.2 0 288c0-77.5 45.9-144.3 112-174.6L112 64c0-17.7 14.3-32 32-32z\"],\n    \"volcano\": [512, 512, [127755], \"f770\", \"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15C212.4 12.4 232.7 0 256 0s43.6 12.4 54.8 31C322 21.6 336.3 16 352 16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8c19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9c11.3 0 21.8-5.6 28-15l9.7-14.6-58.9-66.3c-9.1-10.2-22.2-16.1-35.9-16.1l-41.8 0c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4L144 352zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2l41.8 0c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7c0 28.8-23.4 52.2-52.2 52.2L52.2 512C23.4 512 0 488.6 0 459.8c0-12.8 4.7-25.1 13.2-34.7l150.2-169z\"],\n    \"person-walking-dashed-line-arrow-right\": [640, 512, [], \"e553\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80zM392 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16zM392 320c-13.3 0-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-13.3-10.7-24-24-24zm24 120c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48z\"],\n    \"sterling-sign\": [320, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 224l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 44.5c0 17.4-4.7 34.5-13.7 49.4L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1C104.1 390 112 361.5 112 332.5l0-44.5 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-63.6z\"],\n    \"viruses\": [640, 512, [], \"e076\", \"M192 0c13.3 0 24 10.7 24 24l0 13.5c0 35.6 43.1 53.5 68.3 28.3l9.5-9.5c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-9.5 9.5C293 124.9 310.9 168 346.5 168l13.5 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-13.5 0c-35.6 0-53.5 43.1-28.3 68.3l9.5 9.5c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-9.5-9.5C259.1 293 216 310.9 216 346.5l0 13.5c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-13.5c0-35.6-43.1-53.5-68.3-28.3l-9.5 9.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l9.5-9.5C91 259.1 73.1 216 37.5 216L24 216c-13.3 0-24-10.7-24-24s10.7-24 24-24l13.5 0c35.6 0 53.5-43.1 28.3-68.3l-9.5-9.5c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l9.5 9.5C124.9 91 168 73.1 168 37.5L168 24c0-13.3 10.7-24 24-24zm48 224a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48-64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm320 80c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C574.5 312.1 591 352 624 352c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C551.9 446.5 512 463 512 496c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C417.5 423.9 401 384 368 384c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C440.1 289.5 480 273 480 240c0-8.8 7.2-16 16-16s16 7.2 16 16zm0 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"square-person-confined\": [448, 512, [], \"e577\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56l0 102.1c0 36.4-29.5 65.9-65.9 65.9c-17.5 0-34.3-6.9-46.6-19.3L184.8 342l-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9L240 306.7l0-58.7z\"],\n    \"user-tie\": [448, 512, [], \"f508\", \"M96 128a128 128 0 1 0 256 0A128 128 0 1 0 96 128zm94.5 200.2l18.6 31L175.8 483.1l-36-146.9c-2-8.1-9.8-13.4-17.9-11.3C51.9 342.4 0 405.8 0 481.3c0 17 13.8 30.7 30.7 30.7l131.7 0c0 0 0 0 .1 0l5.5 0 112 0 5.5 0c0 0 0 0 .1 0l131.7 0c17 0 30.7-13.8 30.7-30.7c0-75.5-51.9-138.9-121.9-156.4c-8.1-2-15.9 3.3-17.9 11.3l-36 146.9L238.9 359.2l18.6-31c6.4-10.7-1.3-24.2-13.7-24.2L224 304l-19.7 0c-12.4 0-20.1 13.6-13.7 24.2z\"],\n    \"arrow-down-long\": [384, 512, [\"long-arrow-down\"], \"f175\", \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7L86.6 329.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\"],\n    \"tent-arrow-down-to-line\": [640, 512, [], \"e57e\", \"M241.8 111.9c8.9 9.9 8.1 25-1.8 33.9l-80 72c-9.1 8.2-23 8.2-32.1 0l-80-72c-9.9-8.9-10.7-24-1.8-33.9s24-10.7 33.9-1.8l39.9 36L120 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 122.1 39.9-36c9.9-8.9 25-8.1 33.9 1.8zm122.8 22.6c11.5-8.7 27.3-8.7 38.8 0l168 128c6.6 5 11 12.5 12.3 20.7l24 160 .7 4.7c17.5 .2 31.6 14.4 31.6 32c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l127.6 0 .7-4.7 24-160c1.2-8.2 5.6-15.7 12.3-20.7l168-128zM384 448l80 0L402.7 325.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L384 448z\"],\n    \"certificate\": [512, 512, [], \"f0a3\", \"M211 7.3C205 1 196-1.4 187.6 .8s-14.9 8.9-17.1 17.3L154.7 80.6l-62-17.5c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l17.5 62L18.1 170.6c-8.4 2.1-15 8.7-17.3 17.1S1 205 7.3 211l46.2 45L7.3 301C1 307-1.4 316 .8 324.4s8.9 14.9 17.3 17.1l62.5 15.8-17.5 62c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l62-17.5 15.8 62.5c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l45-46.2 45 46.2c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3l15.8-62.5 62 17.5c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-17.5-62 62.5-15.8c8.4-2.1 15-8.7 17.3-17.1s-.2-17.4-6.4-23.4l-46.2-45 46.2-45c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-62.5-15.8 17.5-62c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1l-62 17.5L341.4 18.1c-2.1-8.4-8.7-15-17.1-17.3S307 1 301 7.3L256 53.5 211 7.3z\"],\n    \"reply-all\": [576, 512, [\"mail-reply-all\"], \"f122\", \"M209.4 39.5c-9.1-9.6-24.3-10-33.9-.9L33.8 173.2c-19.9 18.9-19.9 50.7 0 69.6L175.5 377.4c9.6 9.1 24.8 8.7 33.9-.9s8.7-24.8-.9-33.9L66.8 208 208.5 73.4c9.6-9.1 10-24.3 .9-33.9zM352 64c0-12.6-7.4-24.1-19-29.2s-25-3-34.4 5.4l-160 144c-6.7 6.1-10.6 14.7-10.6 23.8s3.9 17.7 10.6 23.8l160 144c9.4 8.5 22.9 10.6 34.4 5.4s19-16.6 19-29.2l0-64 32 0c53 0 96 43 96 96c0 30.4-12.8 47.9-22.2 56.7c-5.5 5.1-9.8 12-9.8 19.5c0 10.9 8.8 19.7 19.7 19.7c2.8 0 5.6-.6 8.1-1.9C494.5 467.9 576 417.3 576 304c0-97.2-78.8-176-176-176l-48 0 0-64z\"],\n    \"suitcase\": [512, 512, [129523], \"f0f2\", \"M176 56l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 48c-4.4 0-8 3.6-8 8zM128 96l0-40c0-30.9 25.1-56 56-56L328 0c30.9 0 56 25.1 56 56l0 40 0 32 0 352-256 0 0-352 0-32zM64 96l32 0 0 384-32 0c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64zM448 480l-32 0 0-384 32 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64z\"],\n    \"person-skating\": [448, 512, [\"skating\"], \"f7c5\", \"M352 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM128 128c0-17.7 14.3-32 32-32l159.4 0c43.6 0 64.6 53.4 32.8 83.1l-74.4 69.4 60.2 60.2c9 9 14.1 21.2 14.1 33.9l0 73.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7-77.9-77.8c-26.6-26.6-24.6-70.3 4.3-94.4l20.4-17L160 160c-17.7 0-32-14.3-32-32zM81.4 353.4l86.9-86.9c4.6 10 11 19.3 19.3 27.5l21.8 21.8-82.7 82.7c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm322.5 95.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4L272 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l88.8 0c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM135.2 478.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L4.7 411.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\"],\n    \"filter-circle-dollar\": [576, 512, [\"funnel-dollar\"], \"f662\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm120.8-32.6c.6-.9 1.8-2.1 4.2-3.4c5.1-2.7 12.5-4.1 18.7-4c8.2 .1 17.1 1.8 26.4 4.1c8.6 2.1 17.3-3.1 19.4-11.7s-3.1-17.3-11.7-19.4c-5.6-1.4-11.6-2.7-17.9-3.7l0-9.4c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 9.5c-6.1 1.2-12.3 3.2-18 6.3c-11.8 6.3-23 18.4-21.8 37.2c1 16 11.7 25.3 21.6 30.7c8.8 4.7 19.7 7.8 28.6 10.3l1.8 .5c10.3 2.9 17.9 5.2 23.2 8.3c4.5 2.7 4.7 4.2 4.7 5.6c.1 2.4-.5 3.7-1 4.5c-.6 1-1.8 2.2-4 3.3c-4.7 2.5-11.8 3.8-18.5 3.6c-9.5-.3-18.5-3.1-29.9-6.8c-1.9-.6-3.8-1.2-5.8-1.8c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20c1.6 .5 3.3 1 5 1.6c0 0 0 0 0 0s0 0 0 0c7 2.3 15.1 4.8 23.7 6.6l0 11.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-10.8c6.2-1.1 12.5-3.1 18.3-6.2c12.1-6.5 22.3-18.7 21.7-36.9c-.5-16.2-10.3-26.3-20.5-32.3c-9.4-5.6-21.2-8.9-30.5-11.5l-.2 0c-10.4-2.9-18.3-5.2-23.9-8.2c-4.8-2.6-4.8-4-4.8-4.5c0 0 0 0 0-.1c-.1-1.9 .3-2.9 .8-3.6z\"],\n    \"camera-retro\": [512, 512, [128247], \"f083\", \"M220.6 121.2L271.1 96 448 96l0 96-114.8 0c-21.9-15.1-48.5-24-77.2-24s-55.2 8.9-77.2 24L64 192l0-64 128 0c9.9 0 19.7-2.3 28.6-6.8zM0 128L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L271.1 32c-9.9 0-19.7 2.3-28.6 6.8L192 64l-32 0 0-16c0-8.8-7.2-16-16-16L80 32c-8.8 0-16 7.2-16 16l0 16C28.7 64 0 92.7 0 128zM168 304a88 88 0 1 1 176 0 88 88 0 1 1 -176 0z\"],\n    \"circle-arrow-down\": [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 214.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 409c-9.4 9.4-24.6 9.4-33.9 0L127 297z\"],\n    \"file-import\": [512, 512, [\"arrow-right-to-file\"], \"f56f\", \"M128 64c0-35.3 28.7-64 64-64L352 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64l0-112 174.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L128 288l0-224zm0 224l0 48L24 336c-13.3 0-24-10.7-24-24s10.7-24 24-24l104 0zM512 128l-128 0L384 0 512 128z\"],\n    \"square-arrow-up-right\": [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l94.1 0L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135L288 328c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24l-152 0z\"],\n    \"box-open\": [640, 512, [], \"f49e\", \"M58.9 42.1c3-6.1 9.6-9.6 16.3-8.7L320 64 564.8 33.4c6.7-.8 13.3 2.7 16.3 8.7l41.7 83.4c9 17.9-.6 39.6-19.8 45.1L439.6 217.3c-13.9 4-28.8-1.9-36.2-14.3L320 64 236.6 203c-7.4 12.4-22.3 18.3-36.2 14.3L37.1 170.6c-19.3-5.5-28.8-27.2-19.8-45.1L58.9 42.1zM321.1 128l54.9 91.4c14.9 24.8 44.6 36.6 72.5 28.6L576 211.6l0 167c0 22-15 41.2-36.4 46.6l-204.1 51c-10.2 2.6-20.9 2.6-31 0l-204.1-51C79 419.7 64 400.5 64 378.5l0-167L191.6 248c27.8 8 57.6-3.8 72.5-28.6L318.9 128l2.2 0z\"],\n    \"scroll\": [576, 512, [128220], \"f70e\", \"M0 80l0 48c0 17.7 14.3 32 32 32l16 0 48 0 0-80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48l0 304c0 35.3 28.7 64 64 64s64-28.7 64-64l0-5.3c0-32.4 26.3-58.7 58.7-58.7L480 320l0-192c0-53-43-96-96-96L112 32zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16l-245.3 0c-14.7 0-26.7 11.9-26.7 26.7l0 5.3c0 53-43 96-96 96l176 0 96 0z\"],\n    \"spa\": [576, 512, [], \"f5bb\", \"M183.1 235.3c33.7 20.7 62.9 48.1 85.8 80.5c7 9.9 13.4 20.3 19.1 31c5.7-10.8 12.1-21.1 19.1-31c22.9-32.4 52.1-59.8 85.8-80.5C437.6 207.8 490.1 192 546 192l9.9 0c11.1 0 20.1 9 20.1 20.1C576 360.1 456.1 480 308.1 480L288 480l-20.1 0C119.9 480 0 360.1 0 212.1C0 201 9 192 20.1 192l9.9 0c55.9 0 108.4 15.8 153.1 43.3zM301.5 37.6c15.7 16.9 61.1 71.8 84.4 164.6c-38 21.6-71.4 50.8-97.9 85.6c-26.5-34.8-59.9-63.9-97.9-85.6c23.2-92.8 68.6-147.7 84.4-164.6C278 33.9 282.9 32 288 32s10 1.9 13.5 5.6z\"],\n    \"location-pin-lock\": [512, 512, [], \"e51f\", \"M215.7 499.2c11-13.8 25.1-31.7 40.3-52.3l0-94.8c0-23.7 12.9-44.4 32-55.4l0-24.6c0-55.6 40.5-101.7 93.6-110.5C367 70 287.7 0 192 0C86 0 0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"pause\": [320, 512, [9208], \"f04c\", \"M48 64C21.5 64 0 85.5 0 112L0 400c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48L48 64zm192 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-32 0z\"],\n    \"hill-avalanche\": [576, 512, [], \"e507\", \"M439.7 401.9c34.2 23.1 81.1 19.5 111.4-10.8c34.4-34.4 34.4-90.1 0-124.4c-27.8-27.8-69.5-33.1-102.6-16c-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7C401.2 261.3 416 236.4 416 208c0-33.9-21.1-62.9-50.9-74.5c1.9-6.8 2.9-14 2.9-21.5c0-44.2-35.8-80-80-80c-27.3 0-51.5 13.7-65.9 34.6C216.3 46.6 197.9 32 176 32c-26.5 0-48 21.5-48 48c0 4 .5 7.9 1.4 11.6L439.7 401.9zM480 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87z\"],\n    \"temperature-empty\": [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M112 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C233.8 332.6 240 349.5 240 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L112 112zM160 0C98.1 0 48 50.2 48 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C27.2 304.2 16 334.8 16 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L272 112C272 50.2 221.9 0 160 0zm0 416a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"bomb\": [512, 512, [128163], \"f1e2\", \"M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-75.1 60.9-136 136-136l8 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-8 0z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24l88 0c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288 208 288l0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96 0-112zm48 88l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0 64z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 256l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"scale-unbalanced-flip\": [640, 512, [\"balance-scale-right\"], \"f516\", \"M117.9 62.4c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l113 37.7C265 15.8 290.7 0 320 0c44.2 0 80 35.8 80 80c0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.4 145.2c-4.5 3.2-9.3 5.9-14.4 8.2L352 480c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.4 288L128 163.8 55.6 288l144.9 0zM128 384C65.1 384 12.8 350 2 305.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C243.2 350 190.9 384 128 384zm382.8-92.2L438.4 416l144.9 0L510.8 291.8zm126 141.3C626 478 573.7 512 510.8 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\"],\n    \"subscript\": [512, 512, [], \"f12c\", \"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128z\"],\n    \"diamond-turn-right\": [512, 512, [\"directions\"], \"f5eb\", \"M227.7 11.7c15.6-15.6 40.9-15.6 56.6 0l216 216c15.6 15.6 15.6 40.9 0 56.6l-216 216c-15.6 15.6-40.9 15.6-56.6 0l-216-216c-15.6-15.6-15.6-40.9 0-56.6l216-216zm87.6 137c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 56-64 0c-35.3 0-64 28.7-64 64l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-8.8 7.2-16 16-16l64 0 0 56c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l80-80c6.2-6.2 6.2-16.4 0-22.6l-80-80z\"],\n    \"burst\": [512, 512, [], \"e4dc\", \"M37.6 4.2C28-2.3 15.2-1.1 7 7s-9.4 21-2.8 30.5l112 163.3L16.6 233.2C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4L66.8 412.8c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1L392.3 312.2l103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8L388.9 198.7l25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7L278.8 16.6C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6l-32.3 99.6L37.6 4.2z\"],\n    \"house-laptop\": [640, 512, [\"laptop-house\"], \"e066\", \"M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5l-144 0c-19.1 0-36.3 8.4-48 21.7l0-37.7c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0 0 128-160 0c-26.5 0-48-21.5-48-48l0-112-32 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304l0 144 192 0 0-144-192 0zm-48-16c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32l0 160 32 0c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48l-48 0-192 0-48 0c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16l32 0 0-160z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4c6.2 11.7 10.3 24.4 10.3 35.9c0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3l-3.2 0c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8s-6.9-7.9-6.9-13.2c0-11.6 4.2-24.2 10.3-35.9c6.3-12 15.3-24.3 26.4-35.4zm-31.2-182l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"money-bills\": [640, 512, [], \"e1f3\", \"M96 96l0 224c0 35.3 28.7 64 64 64l416 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32c-35.3 0-64 28.7-64 64zm64 160c35.3 0 64 28.7 64 64l-64 0 0-64zM224 96c0 35.3-28.7 64-64 64l0-64 64 0zM576 256l0 64-64 0c0-35.3 28.7-64 64-64zM512 96l64 0 0 64c-35.3 0-64-28.7-64-64zM288 208a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 360c0 66.3 53.7 120 120 120l400 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-400 0c-39.8 0-72-32.2-72-72l0-240z\"],\n    \"smog\": [640, 512, [], \"f75f\", \"M32 144c0 79.5 64.5 144 144 144l123.3 0c22.6 19.9 52.2 32 84.7 32s62.1-12.1 84.7-32l27.3 0c61.9 0 112-50.1 112-112s-50.1-112-112-112c-10.7 0-21 1.5-30.8 4.3C443.8 27.7 401.1 0 352 0c-32.6 0-62.4 12.2-85.1 32.3C242.1 12.1 210.5 0 176 0C96.5 0 32 64.5 32 144zM616 368l-336 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-64 96l-112 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-192 0L24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zM224 392c0-13.3-10.7-24-24-24L96 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c13.3 0 24-10.7 24-24z\"],\n    \"crutch\": [512, 512, [], \"f7f7\", \"M297.4 9.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0zm-96 144l-34.8 34.8c-12.9 12.9-21.9 29.2-25.8 47.1L116.8 342.9c-1.3 5.9-4.3 11.4-8.6 15.7L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l98.8-98.8c4.3-4.3 9.7-7.3 15.7-8.6l107.6-23.9c17.8-4 34.1-12.9 47.1-25.8l34.7-34.7c0 0 .1-.1 .1-.1s.1-.1 .1-.1l74.6-74.6-45.3-45.3L336 242.7 269.3 176l52.1-52.1L276.1 78.6l-74.7 74.7zM224 221.3L290.7 288l-12.2 12.2c-4.3 4.3-9.7 7.3-15.7 8.6l-76.7 17 17-76.7c1.3-5.9 4.3-11.4 8.6-15.7L224 221.3z\"],\n    \"font-awesome\": [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"],\n    \"cloud-arrow-up\": [640, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L296 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\"],\n    \"palette\": [512, 512, [127912], \"f53f\", \"M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3L344 320c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"arrows-turn-right\": [448, 512, [], \"e4c0\", \"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 160 128 160c-35.3 0-64 28.7-64 64l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32C0 153.3 57.3 96 128 96l210.7 0L297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"],\n    \"vest\": [448, 512, [], \"e085\", \"M207.1 237.4L151.2 69.7C168.6 79.7 192.6 88 224 88s55.4-8.3 72.8-18.3L226.5 280.6c-1.6 4.9-2.5 10-2.5 15.2L224 464c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-193.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6l0-17.5 0-73.7 0-6.3c0-26.5-21.5-48-48-48l-4.5 0c-.2 0-.4 0-.6 0c-.4 0-.8 0-1.2 0C311 0 295.7 9.7 285.7 18.8C276.4 27.2 257.2 40 224 40s-52.4-12.8-61.7-21.2C152.3 9.7 137 0 118.3 0c-.4 0-.8 0-1.2 0c-.2 0-.4 0-.6 0L112 0C85.5 0 64 21.5 64 48l0 6.3L64 128l0 17.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5L0 464c0 26.5 21.5 48 48 48l128 0c9.9 0 19-3 26.7-8.1C195.9 492.2 192 478.5 192 464l0-168.2c0-8.6 1.4-17.1 4.1-25.3l11-33.1zM347.3 356.7l48 48c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-48-48c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0zm-294.6 48l48-48c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-48 48c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6z\"],\n    \"ferry\": [576, 512, [], \"e4ea\", \"M224 0L352 0c17.7 0 32 14.3 32 32l75.1 0c20.6 0 31.6 24.3 18.1 39.8L456 96 120 96 98.8 71.8C85.3 56.3 96.3 32 116.9 32L192 32c0-17.7 14.3-32 32-32zM96 128l384 0c17.7 0 32 14.3 32 32l0 123.5c0 13.3-4.2 26.3-11.9 37.2l-51.4 71.9c-1.9 1.1-3.7 2.2-5.5 3.5c-15.5 10.7-34 18-51 19.9l-16.5 0c-17.1-1.8-35-9-50.8-19.9c-22.1-15.5-51.6-15.5-73.7 0c-14.8 10.2-32.5 18-50.6 19.9l-16.6 0c-17-1.8-35.6-9.2-51-19.9c-1.8-1.3-3.7-2.4-5.6-3.5L75.9 320.7C68.2 309.8 64 296.8 64 283.5L64 160c0-17.7 14.3-32 32-32zm32 64l0 96 320 0 0-96-320 0zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.3-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"arrows-down-to-people\": [640, 512, [], \"e4b9\", \"M144 0c-13.3 0-24 10.7-24 24l0 118.1L97 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L168 24c0-13.3-10.7-24-24-24zM360 200a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM184 296a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm312 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 345.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 441.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 468.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 441.5 88 480c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5zM415 153l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L520 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 118.1-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"],\n    \"seedling\": [512, 512, [127793, \"sprout\"], \"f4d8\", \"M512 32c0 113.6-84.6 207.5-194.2 222c-7.1-53.4-30.6-101.6-65.3-139.3C290.8 46.3 364 0 448 0l32 0c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64l32 0c123.7 0 224 100.3 224 224l0 32 0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160C100.3 320 0 219.7 0 96z\"],\n    \"left-right\": [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M504.3 273.6c4.9-4.5 7.7-10.9 7.7-17.6s-2.8-13-7.7-17.6l-112-104c-7-6.5-17.2-8.2-25.9-4.4s-14.4 12.5-14.4 22l0 56-192 0 0-56c0-9.5-5.7-18.2-14.4-22s-18.9-2.1-25.9 4.4l-112 104C2.8 243 0 249.3 0 256s2.8 13 7.7 17.6l112 104c7 6.5 17.2 8.2 25.9 4.4s14.4-12.5 14.4-22l0-56 192 0 0 56c0 9.5 5.7 18.2 14.4 22s18.9 2.1 25.9-4.4l112-104z\"],\n    \"boxes-packing\": [640, 512, [], \"e4c7\", \"M256 48c0-26.5 21.5-48 48-48L592 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-210.7 0c1.8-5 2.7-10.4 2.7-16l0-242.7c18.6-6.6 32-24.4 32-45.3l0-32c0-26.5-21.5-48-48-48l-112 0 0-80zM571.3 347.3c6.2-6.2 6.2-16.4 0-22.6l-64-64c-6.2-6.2-16.4-6.2-22.6 0l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L480 310.6 480 432c0 8.8 7.2 16 16 16s16-7.2 16-16l0-121.4 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0zM0 176c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16L16 224c-8.8 0-16-7.2-16-16l0-32zm352 80l0 224c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-224 320 0zM144 320c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"],\n    \"circle-arrow-left\": [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM215 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L392 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-214.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L103 273c-9.4-9.4-9.4-24.6 0-33.9L215 127z\"],\n    \"group-arrows-rotate\": [512, 512, [], \"e4f6\", \"M201.1 71.9c16.9-5 26.6-22.9 21.5-39.8s-22.9-26.6-39.8-21.5c-21.5 6.4-41.8 15.5-60.6 27C114.3 34 105.4 32 96 32C60.7 32 32 60.7 32 96c0 9.4 2 18.3 5.6 26.3c-11.5 18.7-20.6 39-27 60.6c-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c4.3-14.6 10.4-28.5 17.9-41.4c2 .2 4.1 .3 6.1 .3c35.3 0 64-28.7 64-64c0-2.1-.1-4.1-.3-6.1c12.9-7.5 26.8-13.6 41.4-17.9zm128-61.3c-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c14.6 4.3 28.5 10.4 41.4 17.9c-.2 2-.3 4.1-.3 6.1c0 35.3 28.7 64 64 64c2.1 0 4.1-.1 6.2-.3c7.5 12.9 13.6 26.8 17.9 41.4c5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.6c3.6-8 5.6-16.9 5.6-26.3c0-35.3-28.7-64-64-64c-9.4 0-18.3 2-26.3 5.6c-18.7-11.5-39-20.6-60.6-27zM71.9 310.9c-5-16.9-22.9-26.6-39.8-21.5s-26.6 22.9-21.5 39.8c6.4 21.5 15.5 41.8 27 60.6C34 397.7 32 406.6 32 416c0 35.3 28.7 64 64 64c9.4 0 18.3-2 26.3-5.6c18.7 11.5 39 20.6 60.6 27c16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-14.6-4.3-28.5-10.4-41.4-17.9c.2-2 .3-4.1 .3-6.2c0-35.3-28.7-64-64-64c-2.1 0-4.1 .1-6.2 .3c-7.5-12.9-13.6-26.8-17.9-41.4zm429.4 18.3c5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-4.3 14.6-10.4 28.5-17.9 41.4c-2-.2-4.1-.3-6.2-.3c-35.3 0-64 28.7-64 64c0 2.1 .1 4.1 .3 6.2c-12.9 7.5-26.8 13.6-41.4 17.9c-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.6-27c8 3.6 16.9 5.6 26.3 5.6c35.3 0 64-28.7 64-64c0-9.4-2-18.3-5.6-26.3c11.5-18.7 20.6-39 27-60.6zM192.8 256.8c0-15.6 5.6-29.9 14.9-41.1L223 231c6.6 6.6 17.8 1.9 17.8-7.4l0-60.5c0-5.7-4.7-10.4-10.4-10.4l-60.5 0c-9.3 0-13.9 11.2-7.4 17.8l11.2 11.2c-17.9 19.8-28.9 46.2-28.9 75.1c0 43.6 24.9 81.3 61.1 99.8c11.8 6 26.3 1.4 32.3-10.4s1.4-26.3-10.4-32.3c-20.8-10.6-34.9-32.2-34.9-57zm93.1-58.6c20.8 10.6 34.9 32.2 34.9 57c0 15.6-5.6 29.9-14.9 41.1L290.6 281c-6.6-6.6-17.8-1.9-17.8 7.4l0 60.5c0 5.7 4.7 10.4 10.4 10.4l60.5 0c9.3 0 13.9-11.2 7.4-17.8l-11.2-11.2c17.9-19.8 28.9-46.2 28.9-75.1c0-43.6-24.9-81.3-61.1-99.8c-11.8-6-26.3-1.4-32.3 10.4s-1.4 26.3 10.4 32.3z\"],\n    \"bowl-food\": [512, 512, [], \"e4c6\", \"M0 192c0-35.3 28.7-64 64-64c.5 0 1.1 0 1.6 0C73 91.5 105.3 64 144 64c15 0 29 4.1 40.9 11.2C198.2 49.6 225.1 32 256 32s57.8 17.6 71.1 43.2C339 68.1 353 64 368 64c38.7 0 71 27.5 78.4 64c.5 0 1.1 0 1.6 0c35.3 0 64 28.7 64 64c0 11.7-3.1 22.6-8.6 32L8.6 224C3.1 214.6 0 203.7 0 192zm0 91.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\"],\n    \"candy-cane\": [512, 512, [], \"f786\", \"M348.8 131.5c3.7-2.3 7.9-3.5 12.2-3.5c12.7 0 23 10.3 23 23l0 5.6c0 9.9-5.1 19.1-13.5 24.3L30.1 393.7C.1 412.5-9 451.9 9.7 481.9s58.2 39.1 88.2 20.4L438.4 289.5c45.8-28.6 73.6-78.8 73.6-132.8l0-5.6C512 67.6 444.4 0 361 0c-28.3 0-56 8-80.1 23L254.1 39.7c-30 18.7-39.1 58.2-20.4 88.2s58.2 39.1 88.2 20.4l26.8-16.8zM298.4 49.8c9.2-5.7 19.1-10.1 29.4-13.1L348 97.5c-5.7 1.4-11.2 3.7-16.3 6.8l-12.6 7.9L298.4 49.8zm88.5 52.7l46.2-46.2c8.5 6.5 16.1 14.1 22.6 22.6l-46.2 46.2c-5.1-9.6-13-17.5-22.6-22.6zm28.9 59.3l61.6 20.5c-2.2 10.5-5.8 20.7-10.5 30.2l-62-20.7c6.2-8.8 10.1-19.1 11-30.1zm-86.1 82.5l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zm-107.2 67l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zM119.3 375.7l60.4 37.7-30.2 18.9L89.1 394.6l30.2-18.9z\"],\n    \"arrow-down-wide-short\": [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L320 96z\"],\n    \"cloud-bolt\": [512, 512, [127785, \"thunderstorm\"], \"f76c\", \"M0 224c0 53 43 96 96 96l47.2 0L290 202.5c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L333.7 320l18.3 0 64 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm330.1 3.6c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L177.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.2-19.6z\"],\n    \"text-slash\": [640, 512, [\"remove-format\"], \"f87d\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L355.7 253.5 400.2 96 503 96 497 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C577.6 61.3 554.7 32 523.5 32L376.1 32l-.3 0L204.5 32c-22 0-41.2 15-46.6 36.4l-6.3 25.2L38.8 5.1zm168 131.7c.1-.3 .2-.7 .3-1L217 96l116.7 0L301.3 210.8l-94.5-74.1zM243.3 416L192 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-42.2 0 17.6-62.1L272.9 311 243.3 416z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM111 257.1l26.8 89.2 31.6-90.3c3.4-9.6 12.5-16.1 22.7-16.1s19.3 6.4 22.7 16.1l31.6 90.3L273 257.1c3.8-12.7 17.2-19.9 29.9-16.1s19.9 17.2 16.1 29.9l-48 160c-3 10-12 16.9-22.4 17.1s-19.8-6.2-23.2-16.1L192 336.6l-33.3 95.3c-3.4 9.8-12.8 16.3-23.2 16.1s-19.5-7.1-22.4-17.1l-48-160c-3.8-12.7 3.4-26.1 16.1-29.9s26.1 3.4 29.9 16.1z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM136 240l68 0c42 0 76 34 76 76s-34 76-76 76l-44 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56 0-104c0-13.3 10.7-24 24-24zm68 104c15.5 0 28-12.5 28-28s-12.5-28-28-28l-44 0 0 56 44 0z\"],\n    \"arrows-left-right\": [512, 512, [\"arrows-h\"], \"f07e\", \"M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"],\n    \"house-lock\": [640, 512, [], \"e510\", \"M384 480c0 11.7 3.1 22.6 8.6 32l-.6 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L490.7 166.3C447.2 181.7 416 223.2 416 272l0 24.6c-19.1 11.1-32 31.7-32 55.4l0 128zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"cloud-arrow-down\": [640, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-167l80 80c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-39 39L344 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 134.1-39-39c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"],\n    \"children\": [640, 512, [], \"e4e1\", \"M160 0a64 64 0 1 1 0 128A64 64 0 1 1 160 0zM88 480l0-80-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l31.1-93.4L57.5 323.3c-10.7 14.1-30.8 16.8-44.8 6.2s-16.8-30.7-6.2-44.8L65.4 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47l58.9 77.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.6-37.8L265 378.9c3.5 10.4-4.3 21.1-15.2 21.1L232 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80-16 0 0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480 0a64 64 0 1 1 0 128A64 64 0 1 1 480 0zm-8 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-179.5L395.1 321c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9l12.3 0c33 0 63.7 16.9 81.2 44.9L619.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L552 300.5 552 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0z\"],\n    \"chalkboard\": [576, 512, [\"blackboard\"], \"f51b\", \"M96 32C60.7 32 32 60.7 32 96l0 288 64 0L96 96l384 0 0 288 64 0 0-288c0-35.3-28.7-64-64-64L96 32zM224 384l0 32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-32c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"],\n    \"user-large-slash\": [640, 512, [\"user-alt-slash\"], \"f4fa\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L381.9 274c48.5-23.2 82.1-72.7 82.1-130C464 64.5 399.5 0 320 0C250.4 0 192.4 49.3 178.9 114.9L38.8 5.1zM545.5 512L528 512 284.3 320l-59 0C136.2 320 64 392.2 64 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0 .3 0z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M64 208.1L256 65.9 448 208.1l0 47.4L289.5 373c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64 255.5l0-47.4zM256 0c-12.1 0-23.8 3.9-33.5 11L25.9 156.7C9.6 168.8 0 187.8 0 208.1L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-239.9c0-20.3-9.6-39.4-25.9-51.4L289.5 11C279.8 3.9 268.1 0 256 0z\"],\n    \"handshake-simple-slash\": [640, 512, [\"handshake-alt-slash\"], \"e05f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM0 176L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6L41.2 128.5C17.9 131.8 0 151.8 0 176z\"],\n    \"mattress-pillow\": [640, 512, [], \"e525\", \"M256 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l192 0 0-384zm32 384l288 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L288 64l0 384zM64 160c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-192z\"],\n    \"guarani-sign\": [384, 512, [], \"e19a\", \"M192 0c-17.7 0-32 14.3-32 32l0 34.7C69.2 81.9 0 160.9 0 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c90.8-15.2 160-94.2 160-189.3c0-17.7-14.3-32-32-32l-128 0 0-92c22.1 5.7 41.8 17.1 57.6 32.6c12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C299 92 263.5 73.3 224 66.7L224 32c0-17.7-14.3-32-32-32zM160 132L160 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124zM224 380l0-92 92 0c-11.6 45-47 80.4-92 92z\"],\n    \"arrows-rotate\": [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160 352 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l111.5 0c0 0 0 0 0 0l.4 0c17.7 0 32-14.3 32-32l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1L16 432c0 17.7 14.3 32 32 32s32-14.3 32-32l0-35.1 17.6 17.5c0 0 0 0 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.8c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352l34.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48.4 288c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z\"],\n    \"fire-extinguisher\": [512, 512, [129519], \"f134\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 96c0 9.6-4.3 18.7-11.7 24.7s-17.2 8.5-26.6 6.6l-160-32C301.5 124.9 292 115.7 289 104l-65 0 0 34.8c37.8 18 64 56.5 64 101.2l0 144L64 384l0-144c0-44.7 26.2-83.2 64-101.2l0-28.8c-36.2 11.1-66 36.9-82.3 70.5c-5.8 11.9-20.2 16.9-32.1 11.1S-3.3 171.4 2.5 159.5C26.7 109.8 72.7 72.6 128 60.4L128 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 24 65 0c3-11.7 12.5-20.9 24.7-23.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM288 416l0 32c0 35.3-28.7 64-64 64l-96 0c-35.3 0-64-28.7-64-64l0-32 224 0zM176 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"cruzeiro-sign\": [448, 512, [], \"e152\", \"M96 256c0-88.4 71.6-160 160-160c41 0 78.3 15.4 106.7 40.7c13.2 11.8 33.4 10.7 45.2-2.5s10.7-33.4-2.5-45.2c-39.6-35.5-92-57-149.3-57C132.3 32 32 132.3 32 256s100.3 224 224 224c57.4 0 109.7-21.6 149.3-57c13.2-11.8 14.3-32 2.5-45.2s-32-14.3-45.2-2.5C334.3 400.6 297 416 256 416l0-96 0-8.7c0-12.8 10.4-23.3 23.3-23.3c4.6 0 9.1 1.4 12.9 3.9l10.1 6.7c14.7 9.8 34.6 5.8 44.4-8.9s5.8-34.6-8.9-44.4l-10.1-6.7c-14.3-9.6-31.2-14.7-48.4-14.7c-12.4 0-24.2 2.6-34.9 7.3c-5.5-4.5-12.6-7.3-20.3-7.3c-17.7 0-32 14.3-32 32l0 55.3 0 8.7 0 82.7C135.5 378 96 321.6 96 256z\"],\n    \"greater-than-equal\": [448, 512, [], \"f532\", \"M52.1 93.7C35.7 87.1 27.7 68.5 34.3 52.1s25.2-24.4 41.6-17.8l320 128C408 167.1 416 178.9 416 192s-8 24.9-20.1 29.7l-320 128c-16.4 6.6-35-1.4-41.6-17.8s1.4-35 17.8-41.6L297.8 192 52.1 93.7zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0z\"],\n    \"shield-halved\": [512, 512, [\"shield-alt\"], \"f3ed\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z\"],\n    \"book-atlas\": [448, 512, [\"atlas\"], \"f558\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM247.4 283.8c-3.7 3.7-6.2 4.2-7.4 4.2s-3.7-.5-7.4-4.2c-3.8-3.7-8-10-11.8-18.9c-6.2-14.5-10.8-34.3-12.2-56.9l63 0c-1.5 22.6-6 42.4-12.2 56.9c-3.8 8.9-8 15.2-11.8 18.9zm42.7-9.9c7.3-18.3 12-41.1 13.4-65.9l31.1 0c-4.7 27.9-21.4 51.7-44.5 65.9zm0-163.8c23.2 14.2 39.9 38 44.5 65.9l-31.1 0c-1.4-24.7-6.1-47.5-13.4-65.9zM368 192a128 128 0 1 0 -256 0 128 128 0 1 0 256 0zM145.3 208l31.1 0c1.4 24.7 6.1 47.5 13.4 65.9c-23.2-14.2-39.9-38-44.5-65.9zm31.1-32l-31.1 0c4.7-27.9 21.4-51.7 44.5-65.9c-7.3 18.3-12 41.1-13.4 65.9zm56.1-75.8c3.7-3.7 6.2-4.2 7.4-4.2s3.7 .5 7.4 4.2c3.8 3.7 8 10 11.8 18.9c6.2 14.5 10.8 34.3 12.2 56.9l-63 0c1.5-22.6 6-42.4 12.2-56.9c3.8-8.9 8-15.2 11.8-18.9z\"],\n    \"virus\": [512, 512, [], \"e074\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L120.2 75C107.7 62.5 87.5 62.5 75 75s-12.5 32.8 0 45.3l8.2 8.2C118.4 163.7 93.4 224 43.5 224L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6L75 391.8c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-49.9 60.3-74.9 95.6-39.6l8.2 8.2c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-8.2-8.2c-35.3-35.3-10.3-95.6 39.6-95.6l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C348.3 118.4 288 93.4 288 43.5L288 32zM176 224a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"envelope-circle-check\": [640, 512, [], \"e4e8\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0l57.4-43c23.9-59.8 79.7-103.3 146.3-109.8l13.9-10.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176 0 384c0 35.3 28.7 64 64 64l296.2 0C335.1 417.6 320 378.5 320 336c0-5.6 .3-11.1 .8-16.6l-26.4 19.8zM640 336a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 353.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"layer-group\": [576, 512, [], \"f5fd\", \"M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z\"],\n    \"arrows-to-dot\": [512, 512, [], \"e4be\", \"M256 0c17.7 0 32 14.3 32 32l0 32 32 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l32 0 0-32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 32 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"archway\": [512, 512, [], \"f557\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 64 0 0-128c0-53 43-96 96-96s96 43 96 96l0 128 64 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-288L32 128l0 288z\"],\n    \"heart-circle-check\": [576, 512, [], \"e4fd\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"house-chimney-crack\": [576, 512, [\"house-damage\"], \"f6f1\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-122.1 0L288 448l80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L250.6 263.2c-14.6-11.5-33.8 7-22.8 22L288 368l-85.5 71.2c-6.1 5-7.5 13.8-3.5 20.5L230.4 512l-102.3 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM96 48c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8l14.8 0c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0z\"],\n    \"square\": [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z\"],\n    \"martini-glass-empty\": [512, 512, [\"glass-martini\"], \"f000\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM256 210.7L109.3 64l293.5 0L256 210.7z\"],\n    \"couch\": [640, 512, [], \"f4b8\", \"M64 160C64 89.3 121.3 32 192 32l256 0c70.7 0 128 57.3 128 128l0 33.6c-36.5 7.4-64 39.7-64 78.4l0 48-384 0 0-48c0-38.7-27.5-71-64-78.4L64 160zM544 272c0-20.9 13.4-38.7 32-45.3c5-1.8 10.4-2.7 16-2.7c26.5 0 48 21.5 48 48l0 176c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L96 448c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L0 272c0-26.5 21.5-48 48-48c5.6 0 11 1 16 2.7c18.6 6.6 32 24.4 32 45.3l0 48 0 32 32 0 384 0 32 0 0-32 0-48z\"],\n    \"cedi-sign\": [384, 512, [], \"e0df\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 34.7C101.2 81.9 32 160.9 32 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c30.9-5.2 59.2-17.7 83.2-35.8c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-13.2 9.9-28.3 17.3-44.8 21.6L256 132c16.4 4.2 31.6 11.6 44.8 21.6c14.1 10.6 34.2 7.8 44.8-6.4s7.8-34.2-6.4-44.8c-24-18-52.4-30.6-83.2-35.8L256 32zM192 132L192 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124z\"],\n    \"italic\": [384, 512, [], \"f033\", \"M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0L160 416l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0L224 96l-64 0c-17.7 0-32-14.3-32-32z\"],\n    \"table-cells-column-lock\": [640, 512, [], \"e678\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zm208 0l0 64 88 0 0-64-88 0zm240 0l-88 0 0 64 88 0 0-64zM208 224l0 64 88 0 0-64-88 0zm0 128l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"church\": [640, 512, [9962], \"f51d\", \"M344 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 46.4L183.3 210c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-260.8c0-16.9-8.8-32.5-23.3-41.2L344 142.4 344 96l32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-24zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"],\n    \"comments-dollar\": [640, 512, [], \"f653\", \"M416 176c0 97.2-93.1 176-208 176c-38.2 0-73.9-8.7-104.7-23.9c-7.5 4-16 7.9-25.2 11.4C59.8 346.4 37.8 352 16 352c-6.9 0-13.1-4.5-15.2-11.1s.2-13.8 5.8-17.9c0 0 0 0 0 0s0 0 0 0l.2-.2c.2-.2 .6-.4 1.1-.8c1-.8 2.5-2 4.3-3.7c3.6-3.3 8.5-8.1 13.3-14.3c5.5-7 10.7-15.4 14.2-24.7C14.7 250.3 0 214.6 0 176C0 78.8 93.1 0 208 0S416 78.8 416 176zM231.5 383C348.9 372.9 448 288.3 448 176c0-5.2-.2-10.4-.6-15.5C555.1 167.1 640 243.2 640 336c0 38.6-14.7 74.3-39.6 103.4c3.5 9.4 8.7 17.7 14.2 24.7c4.8 6.2 9.7 11 13.3 14.3c1.8 1.6 3.3 2.9 4.3 3.7c.5 .4 .9 .7 1.1 .8l.2 .2s0 0 0 0s0 0 0 0c5.6 4.1 7.9 11.3 5.8 17.9c-2.1 6.6-8.3 11.1-15.2 11.1c-21.8 0-43.8-5.6-62.1-12.5c-9.2-3.5-17.8-7.4-25.2-11.4C505.9 503.3 470.2 512 432 512c-95.6 0-176.2-54.6-200.5-129zM228 72c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7L228 72z\"],\n    \"democrat\": [640, 512, [], \"f747\", \"M64 32c0-8.9 3.8-20.9 6.2-27.3C71.2 1.8 74 0 77 0c1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1C175.2 .7 177.1 0 179 0c3 0 5.8 1.8 6.8 4.7c2.4 6.5 6.2 18.4 6.2 27.3c0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8L480 160l32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17l0 87.4-352 0-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3l-2 0C23.9 256 0 232.1 0 202.7c0-12.1 4.1-23.8 11.7-33.3L87.6 74.6C78.1 67.4 64 53.2 64 32zM448 352l96 0 0 64 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-160 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64 0-64 96 0 160 0zM260.9 210.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.3-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5zM368.1 208c-2 0-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5c-.9-1.8-2.8-2.9-4.8-2.9zm116.8 2.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5z\"],\n    \"z\": [384, 512, [122], \"5a\", \"M0 64C0 46.3 14.3 32 32 32l320 0c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416 352 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96 32 96C14.3 96 0 81.7 0 64z\"],\n    \"person-skiing\": [512, 512, [9975, \"skiing\"], \"f7c9\", \"M380.7 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM2.7 268.9c6.1-11.8 20.6-16.3 32.4-10.2L232.7 361.3l46.2-69.2-75.1-75.1c-14.6-14.6-20.4-33.9-18.4-52.1l108.8 52 39.3 39.3c16.2 16.2 18.7 41.5 6 60.6L289.8 391l128.7 66.8c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 301.3C1.2 295.2-3.4 280.7 2.7 268.9zM118.9 65.6L137 74.2l8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 16.9 54.7 26.2c1.5-.7 3.1-1.4 4.7-2.1l83.4-33.4c34.2-13.7 72.8 4.2 84.5 39.2l17.1 51.2 52.1 26.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-58.1-29c-11.4-5.7-20-15.7-24.1-27.8l-5.8-17.3-27.3 12.1-6.8 3-6.7-3.2L151.5 116.7l-9.2 18.4c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-18-17.6-8.4c-8-3.8-11.3-13.4-7.5-21.3s13.4-11.3 21.3-7.5z\"],\n    \"road-lock\": [640, 512, [], \"e567\", \"M288 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L35.1 407.2c-2.1 5.9-3.1 12-3.1 18.2C32 455.5 56.5 480 86.6 480L288 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 32 0 0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-58.3 44.6-106.2 101.5-111.5L487.1 74.6C478 49.1 453.9 32 426.8 32L352 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"a\": [384, 512, [97], \"41\", \"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7l-120 288-40 96c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L93.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-40-96-120-288zM264 320l-144 0 72-172.8L264 320z\"],\n    \"temperature-arrow-down\": [576, 512, [\"temperature-down\"], \"e03f\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3l0-50.7c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 50.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zm336-64l-32 0 0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8z\"],\n    \"feather-pointed\": [512, 512, [\"feather-alt\"], \"f56b\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l74.8-74.8c7.4 4.6 15.3 8.2 23.8 10.5C200.3 452.8 270 454.5 338 409.4c12.2-8.1 5.8-25.4-8.8-25.4l-16.1 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l97.7-29.3c3.4-1 6.4-3.1 8.4-6.1c4.4-6.4 8.6-12.9 12.6-19.6c6.2-10.3-1.5-23-13.5-23l-38.6 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l80.9-24.3c4.6-1.4 8.4-4.8 10.2-9.3C494.5 163 507.8 86.1 511.9 36.8c.8-9.9-3-19.6-10-26.6s-16.7-10.8-26.6-10C391.5 7 228.5 40.5 137.4 131.6C57.3 211.7 56.7 302.3 71.3 356.4c2.1 7.9 12 9.6 17.8 3.8L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"],\n    \"p\": [320, 512, [112], \"50\", \"M0 96C0 60.7 28.7 32 64 32l96 0c88.4 0 160 71.6 160 160s-71.6 160-160 160l-96 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 320 0 96zM64 288l96 0c53 0 96-43 96-96s-43-96-96-96L64 96l0 192z\"],\n    \"snowflake\": [448, 512, [10052, 10054], \"f2dc\", \"M224 0c17.7 0 32 14.3 32 32l0 30.1 15-15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-49 49 0 70.3 61.4-35.8 17.7-66.1c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4l-5.2 19.3 23.6-13.8c15.3-8.9 34.9-3.7 43.8 11.5s3.8 34.9-11.5 43.8l-25.3 14.8 21.7 5.8c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-67.7-18.1L287.5 256l60.9 35.5 67.7-18.1c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4l-21.7 5.8 25.3 14.8c15.3 8.9 20.4 28.5 11.5 43.8s-28.5 20.4-43.8 11.5l-23.6-13.8 5.2 19.3c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-17.7-66.1L256 311.7l0 70.3 49 49c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15 0 30.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-30.1-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l49-49 0-70.3-61.4 35.8-17.7 66.1c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4l5.2-19.3L48.1 395.6c-15.3 8.9-34.9 3.7-43.8-11.5s-3.7-34.9 11.5-43.8l25.3-14.8-21.7-5.8c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l67.7 18.1L160.5 256 99.6 220.5 31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4l21.7-5.8L15.9 171.6C.6 162.7-4.5 143.1 4.4 127.9s28.5-20.4 43.8-11.5l23.6 13.8-5.2-19.3c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l17.7 66.1L192 200.3l0-70.3L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l15 15L192 32c0-17.7 14.3-32 32-32z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M96 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L80 480c-44.2 0-80-35.8-80-80L0 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16L96 96zm64 24l0 80c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24L184 96c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16z\"],\n    \"rectangle-ad\": [576, 512, [\"ad\"], \"f641\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM229.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7L253.2 328l-90.3 0-5.4 10.7c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zM208 237.7L186.8 280l42.3 0L208 237.7zM392 256a24 24 0 1 0 0 48 24 24 0 1 0 0-48zm24-43.9l0-28.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96 0 48c0 13.3-10.7 24-24 24c-6.6 0-12.6-2.7-17-7c-9.4 4.5-19.9 7-31 7c-39.8 0-72-32.2-72-72s32.2-72 72-72c8.4 0 16.5 1.4 24 4.1z\"],\n    \"circle-arrow-right\": [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z\"],\n    \"filter-circle-xmark\": [576, 512, [], \"e17b\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"],\n    \"locust\": [576, 512, [], \"e520\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0c98.7 0 180.6 71.4 197 165.4c-9-3.5-18.8-5.4-29-5.4l-64.2 0-41.8-97.5c-3.4-7.9-10.8-13.4-19.3-14.4s-17 2.7-22.1 9.6l-40.9 55.5-21.7-50.7c-3.3-7.8-10.5-13.2-18.9-14.3s-16.7 2.3-22 8.9l-240 304c-8.2 10.4-6.4 25.5 4 33.7s25.5 6.4 33.7-4l79.4-100.5 43 16.4-40.5 55c-7.9 10.7-5.6 25.7 5.1 33.6s25.7 5.6 33.6-5.1L215.1 400l74.5 0-29.3 42.3c-7.5 10.9-4.8 25.8 6.1 33.4s25.8 4.8 33.4-6.1L348 400l80.4 0 38.8 67.9c6.6 11.5 21.2 15.5 32.7 8.9s15.5-21.2 8.9-32.7L483.6 400l12.4 0c44.1 0 79.8-35.7 80-79.7c0-.1 0-.2 0-.3l0-40C576 143 465 32 328 32l-16 0zm50.5 168l17.1 40L333 240l29.5-40zm-87.7 38.1l-1.4 1.9-48.2 0 32.7-41.5 16.9 39.5zM88.8 240C57.4 240 32 265.4 32 296.8c0 15.5 6.3 30 16.9 40.4L126.7 240l-37.9 0zM496 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"sort\": [320, 512, [\"unsorted\"], \"f0dc\", \"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8L32 224c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z\"],\n    \"list-ol\": [512, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M24 56c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24l0 120 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-96-8 0C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432l33.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"person-dress-burst\": [640, 512, [], \"e544\", \"M528 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM390.2 384l17.8 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 16 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 17.8 0c10.9 0 18.6-10.7 15.2-21.1L546.7 248.1l33.9 56.3c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-53.6-89.2c-20.2-33.7-56.7-54.3-96-54.3l-11.6 0c-39.3 0-75.7 20.6-96 54.3l-53.6 89.2c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9l33.9-56.3L375 362.9c-3.5 10.4 4.3 21.1 15.2 21.1zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"],\n    \"money-check-dollar\": [576, 512, [\"money-check-alt\"], \"f53d\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM272 192l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zM164 152l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"],\n    \"vector-square\": [448, 512, [], \"f5cb\", \"M368 80l32 0 0 32-32 0 0-32zM352 32c-17.7 0-32 14.3-32 32L128 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-192c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM96 160c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l-192 0c0-17.7-14.3-32-32-32l0-192zM48 400l32 0 0 32-32 0 0-32zm320 32l0-32 32 0 0 32-32 0zM48 112l0-32 32 0 0 32-32 0z\"],\n    \"bread-slice\": [512, 512, [], \"f7ec\", \"M256 32C192 32 0 64 0 192c0 35.3 28.7 64 64 64V432c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V256c35.3 0 64-28.7 64-64C512 64 320 32 256 32z\"],\n    \"language\": [640, 512, [], \"f1ab\", \"M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M498 339.7c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-22.9-89.3c-10-39 11.8-80.9 51.8-92.1c37.2-10.4 73.8 10.1 87.5 44c12.7-1.6 25.1 .4 36.2 5zM296 332c0 6.9-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C258.7 443.1 241.4 448 224 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.6-.4-.3-.2-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm194.8 57.6c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"],\n    \"filter\": [512, 512, [], \"f0b0\", \"M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\"],\n    \"question\": [320, 512, [10067, 10068, 61736], \"3f\", \"M80 160c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64l0 3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74l0 1.4c0 17.7 14.3 32 32 32s32-14.3 32-32l0-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7l0-3.6c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"],\n    \"file-signature\": [576, 512, [], \"f573\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-19.3c-2.7 1.1-5.4 2-8.2 2.7l-60.1 15c-3 .7-6 1.2-9 1.4c-.9 .1-1.8 .2-2.7 .2l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 381l-9.8 32.8c-6.1 20.3-24.8 34.2-46 34.2L80 448c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.8 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 8.9 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7L384 203.6l0-43.6-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM549.8 139.7c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM311.9 321c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L512.1 262.7l-71-71L311.9 321z\"],\n    \"up-down-left-right\": [512, 512, [\"arrows-alt\"], \"f0b2\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 96-96 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 96 0 0 96-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-96 96 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-96 0 0-96 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"],\n    \"house-chimney-user\": [576, 512, [], \"e065\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM288 160a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM176 400c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16z\"],\n    \"hand-holding-heart\": [576, 512, [], \"f4be\", \"M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"],\n    \"puzzle-piece\": [512, 512, [129513], \"f12e\", \"M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8c0 12.8 10.4 23.2 23.2 23.2l56.8 0c26.5 0 48 21.5 48 48l0 56.8c0 12.8 10.4 23.2 23.2 23.2c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2c-12.8 0-23.2 10.4-23.2 23.2L384 464c0 26.5-21.5 48-48 48l-56.8 0c-12.8 0-23.2-10.4-23.2-23.2c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8c0 12.8-10.4 23.2-23.2 23.2L48 512c-26.5 0-48-21.5-48-48L0 343.2C0 330.4 10.4 320 23.2 320c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256C10.4 256 0 245.6 0 232.8L0 176c0-26.5 21.5-48 48-48l120.8 0c12.8 0 23.2-10.4 23.2-23.2z\"],\n    \"money-check\": [576, 512, [], \"f53c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm48 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM96 336c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-352 0c-8.8 0-16-7.2-16-16zM376 160l80 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M288 376.4l.1-.1 26.4 14.1 85.2 45.5-16.5-97.6-4.8-28.7 20.7-20.5 70.1-69.3-96.1-14.2-29.3-4.3-12.9-26.6L288.1 86.9l-.1 .3 0 289.2zm175.1 98.3c2 12-3 24.2-12.9 31.3s-23 8-33.8 2.3L288.1 439.8 159.8 508.3C149 514 135.9 513.1 126 506s-14.9-19.3-12.9-31.3L137.8 329 33.6 225.9c-8.6-8.5-11.7-21.2-7.9-32.7s13.7-19.9 25.7-21.7L195 150.3 259.4 18c5.4-11 16.5-18 28.8-18s23.4 7 28.8 18l64.3 132.3 143.6 21.2c12 1.8 22 10.2 25.7 21.7s.7 24.2-7.9 32.7L438.5 329l24.6 145.7z\"],\n    \"code\": [640, 512, [], \"f121\", \"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\"],\n    \"whiskey-glass\": [512, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M32 32c-9.3 0-18.1 4-24.2 11.1S-1 59.4 .3 68.6l50 342.9c5.7 39.3 39.4 68.5 79.2 68.5l253 0c39.7 0 73.4-29.1 79.2-68.5l50-342.9c1.3-9.2-1.4-18.5-7.5-25.5S489.3 32 480 32L32 32zM87.7 224L69 96l374 0L424.3 224 87.7 224z\"],\n    \"building-circle-exclamation\": [640, 512, [], \"e4d3\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"magnifying-glass-chart\": [512, 512, [], \"e522\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zm-312 8l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64l0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-96c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"],\n    \"arrow-up-right-from-square\": [512, 512, [\"external-link\"], \"f08e\", \"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"],\n    \"cubes-stacked\": [448, 512, [], \"e4e6\", \"M192 64l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM82.7 207c-15.3 8.8-20.5 28.4-11.7 43.7l32 55.4c8.8 15.3 28.4 20.5 43.7 11.7l55.4-32c15.3-8.8 20.5-28.4 11.7-43.7l-32-55.4c-8.8-15.3-28.4-20.5-43.7-11.7L82.7 207zM288 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zm64 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM160 384l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM32 352c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0z\"],\n    \"won-sign\": [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M62.4 53.9C56.8 37.1 38.6 28.1 21.9 33.6S-3.9 57.4 1.6 74.1L51.6 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l40.9 0 56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288l46 0L321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288l40.9 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.6 0 50-149.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2L392.9 224l-64 0L287 56.2C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L183 224l-64 0L62.4 53.9zm78 234.1l26.6 0-11.4 45.6L140.4 288zM249 224l7-28.1 7 28.1-14 0zm96 64l26.6 0-15.2 45.6L345 288z\"],\n    \"virus-covid\": [512, 512, [], \"e4a8\", \"M192 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 33.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L420 125.9l-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3l33.6 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-33.6 0c-4.2 30.7-16.3 58.8-34.1 82.3L420 386.1l11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L386.1 420l-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1l0 33.6 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-33.6c-30.7-4.2-58.8-16.3-82.3-34.1L125.9 420l11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L92 386.1l23.8-23.8C97.9 338.8 85.8 310.7 81.6 280L48 280l0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 33.6 0c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92l23.8 23.8c23.5-17.9 51.7-29.9 82.3-34.1L232 48l-16 0c-13.3 0-24-10.7-24-24zm48 200a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm64 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"austral-sign\": [448, 512, [], \"e0a9\", \"M253.5 51.7C248.6 39.8 236.9 32 224 32s-24.6 7.8-29.5 19.7L122.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0L82.7 320 32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l24 0L34.5 435.7c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L125.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8L392 384l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0L352 288l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-90.7 0L253.5 51.7zM256 224l-64 0 32-76.8L256 224zm-90.7 64l117.3 0L296 320l-144 0 13.3-32z\"],\n    \"f\": [320, 512, [102], \"46\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"],\n    \"leaf\": [512, 512, [], \"f06c\", \"M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5l88 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0-72 0s0 0 0 0c-16.6 0-32.7 1.9-48.3 5.4c-25.9 5.9-49.9 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z\"],\n    \"road\": [576, 512, [128739], \"f018\", \"M256 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L3.1 407.2C1.1 413 0 419.2 0 425.4C0 455.5 24.5 480 54.6 480L256 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 201.4 0c30.2 0 54.6-24.5 54.6-54.6c0-6.2-1.1-12.4-3.1-18.2L455.1 74.6C446 49.1 421.9 32 394.8 32L320 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"taxi\": [512, 512, [128662, \"cab\"], \"f1ba\", \"M192 0c-17.7 0-32 14.3-32 32l0 32 0 .2c-38.6 2.2-72.3 27.3-85.2 64.1L39.6 228.8C16.4 238.4 0 261.3 0 288L0 432l0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 320 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 0-144c0-26.7-16.4-49.6-39.6-59.2L437.2 128.3c-12.9-36.8-46.6-62-85.2-64.1l0-.2 0-32c0-17.7-14.3-32-32-32L192 0zM165.4 128l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 224l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zM96 288a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"person-circle-plus\": [576, 512, [], \"e541\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"],\n    \"chart-pie\": [576, 512, [\"pie-chart\"], \"f200\", \"M304 240l0-223.4c0-9 7-16.6 16-16.6C443.7 0 544 100.3 544 224c0 9-7.6 16-16.6 16L304 240zM32 272C32 150.7 122.1 50.3 239 34.3c9.2-1.3 17 6.1 17 15.4L256 288 412.5 444.5c6.7 6.7 6.2 17.7-1.5 23.1C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zm526.4 16c9.3 0 16.6 7.8 15.4 17c-7.7 55.9-34.6 105.6-73.9 142.3c-6 5.6-15.4 5.2-21.2-.7L320 288l238.4 0z\"],\n    \"bolt-lightning\": [384, 512, [], \"e0b7\", \"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z\"],\n    \"sack-xmark\": [512, 512, [], \"e56a\", \"M192 96l128 0 47.4-71.1C374.5 14.2 366.9 0 354.1 0L157.9 0c-12.8 0-20.4 14.2-13.3 24.9L192 96zm128 32l-128 0c-3.8 2.5-8.1 5.3-13 8.4c0 0 0 0 0 0s0 0 0 0C122.3 172.7 0 250.9 0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96c0-165.1-122.3-243.3-179-279.6c-4.8-3.1-9.2-5.9-13-8.4zM289.9 336l47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM155.7 250.2L192 302.1l36.3-51.9c7.6-10.9 22.6-13.5 33.4-5.9s13.5 22.6 5.9 33.4L221.3 344l46.4 66.2c7.6 10.9 5 25.8-5.9 33.4s-25.8 5-33.4-5.9L192 385.8l-36.3 51.9c-7.6 10.9-22.6 13.5-33.4 5.9s-13.5-22.6-5.9-33.4L162.7 344l-46.4-66.2c-7.6-10.9-5-25.8 5.9-33.4s25.8-5 33.4 5.9z\"],\n    \"file-contract\": [384, 512, [], \"f56c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2L80 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 54.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z\"],\n    \"fish-fins\": [576, 512, [], \"e4f2\", \"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5c-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.6 4.9S-3 163.3 4.2 175.9L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.6 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3c15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8c39.2-29.4 67.2-64.7 81.6-89.5c5.8-9.9 5.8-22.2 0-32.1c-14.4-24.8-42.5-60.1-81.6-89.5c-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"building-flag\": [640, 512, [], \"e4d5\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 0c-17.7 0-32 14.3-32 32l0 480 64 0 0-320 144 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L480 32c0-17.7-14.3-32-32-32z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-170.5-84s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l209.1 0C339.6 12.9 360.3 0 384 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-113.1zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 113.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96zm192 384c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-40.6 64 0 0 40.6c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4l-46 0c-5.4-15.4-14.6-28.9-26.5-39.6l0-24.4 72.6 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0z\"],\n    \"poop\": [512, 512, [], \"f619\", \"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7C315.8 7.2 352 47.4 352 96c0 11.2-1.9 22-5.5 32l5.5 0c35.3 0 64 28.7 64 64c0 19.1-8.4 36.3-21.7 48l13.7 0c39.8 0 72 32.2 72 72c0 23.2-11 43.8-28 57c34.1 5.7 60 35.3 60 71c0 39.8-32.2 72-72 72L72 512c-39.8 0-72-32.2-72-72c0-35.7 25.9-65.3 60-71c-17-13.2-28-33.8-28-57c0-39.8 32.2-72 72-72l13.7 0C104.4 228.3 96 211.1 96 192c0-35.3 28.7-64 64-64l16.2 0c44.1-.1 79.8-35.9 79.8-80c0-9.2-1.5-17.9-4.3-26.1c-1.8-5.2-.8-11.1 2.8-15.4z\"],\n    \"location-pin\": [384, 512, [\"map-marker\"], \"f041\", \"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"],\n    \"kaaba\": [576, 512, [128331], \"f66b\", \"M60 120l228 71.2L516 120 288 48.8 60 120zM278.5 1.5c6.2-1.9 12.9-1.9 19.1 0l256 80C566.9 85.6 576 98 576 112l0 16s0 0 0 0l0 21.2L292.8 237.7c-3.1 1-6.4 1-9.5 0L0 149.2 0 128l0-16C0 98 9.1 85.6 22.5 81.5l256-80zm23.9 266.8L576 182.8l0 46.5-52.8 16.5c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5L576 262.8 576 400c0 14-9.1 26.4-22.5 30.5l-256 80c-6.2 1.9-12.9 1.9-19.1 0l-256-80C9.1 426.4 0 414 0 400L0 262.8l43.2 13.5c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20L0 229.2l0-46.5 273.7 85.5c9.3 2.9 19.3 2.9 28.6 0zm-185.5-2.6c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l64 20c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20l-64-20zm352 30.5c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-64 20c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5l64-20zm-224 9.5c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l38.5 12c9.3 2.9 19.3 2.9 28.6 0l38.5-12c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-38.5 12c-3.1 1-6.4 1-9.5 0l-38.5-12z\"],\n    \"toilet-paper\": [640, 512, [129531], \"f71e\", \"M444.2 0C397.2 49.6 384 126.5 384 192c0 158.8-27.3 247-42.7 283.9c-10 24-33.2 36.1-55.4 36.1L48 512c-11.5 0-22.2-6.2-27.8-16.2s-5.6-22.3 .4-32.2c9.8-17.7 15.4-38.2 20.5-57.7C52.3 362.8 64 293.5 64 192C64 86 107 0 160 0L444.2 0zM512 384c-53 0-96-86-96-192S459 0 512 0s96 86 96 192s-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64s-32 28.7-32 64s14.3 64 32 64zM144 208a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm64 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm80-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"helmet-safety\": [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M256 32c-17.7 0-32 14.3-32 32l0 2.3 0 99.6c0 5.6-4.5 10.1-10.1 10.1c-3.6 0-7-1.9-8.8-5.1L157.1 87C83 123.5 32 199.8 32 288l0 64 512 0 0-66.4c-.9-87.2-51.7-162.4-125.1-198.6l-48 83.9c-1.8 3.2-5.2 5.1-8.8 5.1c-5.6 0-10.1-4.5-10.1-10.1l0-99.6 0-2.3c0-17.7-14.3-32-32-32l-64 0zM16.6 384C7.4 384 0 391.4 0 400.6c0 4.7 2 9.2 5.8 11.9C27.5 428.4 111.8 480 288 480s260.5-51.6 282.2-67.5c3.8-2.8 5.8-7.2 5.8-11.9c0-9.2-7.4-16.6-16.6-16.6L16.6 384z\"],\n    \"eject\": [448, 512, [9167], \"f052\", \"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320L48 320c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48l352 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm395.3 11.3l-112 112c-4.6 4.6-11.5 5.9-17.4 3.5s-9.9-8.3-9.9-14.8l0-64-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-64c0-6.5 3.9-12.3 9.9-14.8s12.9-1.1 17.4 3.5l112 112c6.2 6.2 6.2 16.4 0 22.6z\"],\n    \"plane-circle-check\": [640, 512, [], \"e555\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l337.1 0C467.6 12.9 488.3 0 512 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-337.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-273.1zM456.6 96L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l337.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4zM128 160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-96zM256 320l32 0c35.3 0 64-28.7 64-64l0-32 64 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32z\"],\n    \"chart-line\": [512, 512, [\"line-chart\"], \"f201\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\"],\n    \"mask-ventilator\": [640, 512, [], \"e524\", \"M159.1 176C139.4 219.2 128 264.7 128 300.8c0 15.9 2.2 31.4 6.3 46l-31.8-7.9C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l103.1 0zm26-48L56 128c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l71.3 17.8c22.7 30.5 55.4 54.1 93.8 66.6l0-76.6c-19.7-16.4-32-40.3-32-66.9c0-49.5 43-134.4 96-134.4c52.5 0 96 84.9 96 134.4c0 26.7-12.4 50.4-32 66.8l0 76.6c38-12.6 70.6-36 93.5-66.4l71.6-17.9C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-129.5 0C419.7 73.8 372.1 32 320 32c-52.6 0-100.2 41.8-134.9 96zm295.6 48L584 176c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9l-31.8 8c4.2-14.7 6.4-30.1 6.4-46.1c0-36.1-11.6-81.6-31.3-124.8zM288 320l0 192 64 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"],\n    \"arrow-right\": [448, 512, [8594], \"f061\", \"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"],\n    \"signs-post\": [512, 512, [\"map-signs\"], \"f277\", \"M224 32L64 32C46.3 32 32 46.3 32 64l0 64c0 17.7 14.3 32 32 32l377.4 0c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7L288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 256c0-17.7-14.3-32-32-32l-160 0 0-32-64 0 0 32L70.6 224c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7L448 352c17.7 0 32-14.3 32-32l0-64zM288 480l0-96-64 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32z\"],\n    \"cash-register\": [512, 512, [], \"f788\", \"M64 0C46.3 0 32 14.3 32 32l0 64c0 17.7 14.3 32 32 32l80 0 0 32-57 0c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-69.6c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160l-217 0 0-32 80 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L64 0zM96 48l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L96 80c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 432c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16zm48-168a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\"],\n    \"person-circle-question\": [576, 512, [], \"e542\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"],\n    \"h\": [384, 512, [104], \"48\", \"M320 256l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128L64 192 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0z\"],\n    \"tarp\": [576, 512, [], \"e57b\", \"M576 128c0-35.3-28.7-64-64-64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l352 0 0-128c0-17.7 14.3-32 32-32l128 0 0-160zM448 448L576 320l-128 0 0 128zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"screwdriver-wrench\": [512, 512, [\"tools\"], \"f7d9\", \"M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4l54.1 0 109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109 0-54.1c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7L352 176c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"arrows-to-eye\": [640, 512, [], \"e4bf\", \"M15 15C24.4 5.7 39.6 5.7 49 15l63 63L112 40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96c0 13.3-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l38.1 0L15 49C5.7 39.6 5.7 24.4 15 15zM133.5 243.9C158.6 193.6 222.7 112 320 112s161.4 81.6 186.5 131.9c3.8 7.6 3.8 16.5 0 24.2C481.4 318.4 417.3 400 320 400s-161.4-81.6-186.5-131.9c-3.8-7.6-3.8-16.5 0-24.2zM320 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM591 15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-63 63 38.1 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24s24 10.7 24 24l0 38.1 63-63zM15 497c-9.4-9.4-9.4-24.6 0-33.9l63-63L40 400c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0c13.3 0 24 10.7 24 24l0 96c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-38.1L49 497c-9.4 9.4-24.6 9.4-33.9 0zm576 0l-63-63 0 38.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-38.1 0 63 63c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"],\n    \"plug-circle-bolt\": [576, 512, [], \"e55b\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\"],\n    \"mars-and-venus\": [512, 512, [9893], \"f224\", \"M337.8 14.8C341.5 5.8 350.3 0 360 0L472 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-24.7 24.7C407 163.3 416 192.6 416 224c0 80.2-59 146.6-136 158.2l0 25.8 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-25.8C155 370.6 96 304.2 96 224c0-88.4 71.6-160 160-160c39.6 0 75.9 14.4 103.8 38.2L382.1 80 343 41c-6.9-6.9-8.9-17.2-5.2-26.2zM448 48s0 0 0 0s0 0 0 0s0 0 0 0zM352 224a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"],\n    \"house-user\": [576, 512, [\"home-user\"], \"e1b0\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24zM352 224a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm-96 96c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0z\"],\n    \"dumpster-fire\": [640, 512, [], \"f794\", \"M49.7 32l90.8 0L114.9 160l-94 0C9.3 160 0 150.7 0 139.1c0-2.1 .3-4.1 .9-6.1L26.8 48.9C29.9 38.9 39.2 32 49.7 32zM272 160l-124.5 0L173.1 32 272 32l0 128zm32 0l0-128 98.9 0 14.4 72.1c-1.7 1.1-3.3 2.4-4.8 3.8c-18.4 16.4-35.4 34-50.5 52.1l-58 0zm209.9-23.7c-1.7 1.6-3.4 3.2-5 4.8C498 129.6 486.7 118.6 475 108c-7.6-6.9-17-10.8-26.6-11.8L435.5 32l90.8 0c10.5 0 19.8 6.9 22.9 16.9L575.1 133c.2 .7 .4 1.4 .5 2.1c-17.8-15-44.3-14.6-61.7 1.2zM325.2 210.7C304.3 244.5 288 282.9 288 318.1c0 49.3 18.6 95.2 49.6 129.9L128 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L44 288l-12 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l4 0-4-32 305.5 0c-4.4 6.2-8.5 12.5-12.3 18.7zm180.6-34.5L518 162.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C629 259.2 640 290.2 640 320.2C640 408.8 568.7 480 480 480c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2c5.7-5.2 13.1-7.7 20.3-7.5c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM544 368.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 295.1 416 331.6 416 368.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"house-crack\": [576, 512, [], \"e3b1\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l102.3 0-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L288 368l-60.2-82.8c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L288 448l38.4 64 122.1 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0z\"],\n    \"martini-glass-citrus\": [576, 512, [\"cocktail\"], \"f561\", \"M432 240c53 0 96-43 96-96s-43-96-96-96c-35.5 0-66.6 19.3-83.2 48l-52.6 0C316 40.1 369.3 0 432 0c79.5 0 144 64.5 144 144s-64.5 144-144 144c-27.7 0-53.5-7.8-75.5-21.3l35.4-35.4c12.2 5.6 25.8 8.7 40.1 8.7zM1.8 142.8C5.5 133.8 14.3 128 24 128l368 0c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-177 177L232 464l64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0-88 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-118.1L7 169c-6.9-6.9-8.9-17.2-5.2-26.2z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"bottle-water\": [320, 512, [], \"e4c5\", \"M120 0l80 0c13.3 0 24 10.7 24 24l0 40L96 64l0-40c0-13.3 10.7-24 24-24zM32 167.5c0-19.5 10-37.6 26.6-47.9l15.8-9.9C88.7 100.7 105.2 96 122.1 96l75.8 0c16.9 0 33.4 4.7 47.7 13.7l15.8 9.9C278 129.9 288 148 288 167.5c0 17-7.5 32.3-19.4 42.6C280.6 221.7 288 238 288 256c0 19.1-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48s-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64c0-19.1 8.4-36.3 21.7-48C40.4 388.3 32 371.1 32 352s8.4-36.3 21.7-48C40.4 292.3 32 275.1 32 256c0-18 7.4-34.3 19.4-45.9C39.5 199.7 32 184.5 32 167.5zM96 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16zm16 112c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM224 192l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"toilet-paper-slash\": [640, 512, [], \"e072\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-109.7-86C569.9 374 608 291.9 608 192C608 86 565 0 512 0s-96 86-96 192c0 49.1 9.2 93.9 24.4 127.9l-59-46.2c1.6-24.8 2.6-52 2.6-81.6c0-65.5 13.2-142.4 60.2-192L160 0c-24.8 0-47.4 18.8-64.4 49.6L38.8 5.1zM367.3 385.4L66.5 148.4C64.9 162.4 64 177 64 192c0 101.5-11.7 170.8-23 213.9c-5.1 19.4-10.7 39.9-20.5 57.7c-5.9 9.9-6.1 22.1-.4 32.2S36.5 512 48 512l237.9 0c22.3 0 45.4-12.1 55.4-36.1c7.4-17.7 17.5-47.2 26-90.6zM544 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64z\"],\n    \"apple-whole\": [448, 512, [127822, 127823, \"apple-alt\"], \"f5d1\", \"M224 112c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80l16 0c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80l-16 0zM0 288c0-76.3 35.7-160 112-160c27.3 0 59.7 10.3 82.7 19.3c18.8 7.3 39.9 7.3 58.7 0c22.9-8.9 55.4-19.3 82.7-19.3c76.3 0 112 83.7 112 160c0 128-80 224-160 224c-16.5 0-38.1-6.6-51.5-11.3c-8.1-2.8-16.9-2.8-25 0c-13.4 4.7-35 11.3-51.5 11.3C80 512 0 416 0 288z\"],\n    \"kitchen-set\": [576, 512, [], \"e51a\", \"M240 144A96 96 0 1 0 48 144a96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288C64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112l71.8 0c8.8-9.8 21.6-16 35.8-16l104 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-104 0c-14.2 0-27-6.2-35.8-16l-71.8 0zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24l0 8 96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-240 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0 0-8c0-13.3 10.7-24 24-24zM288 464l0-112 224 0 0 112c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48zM48 320l80 0 16 0 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-80c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0 32 16 0zM24 464l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"r\": [320, 512, [114], \"52\", \"M64 32C28.7 32 0 60.7 0 96L0 288 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 95.3 0L261.8 466.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176c0-79.5-64.5-144-144-144L64 32zM176 256L64 256 64 96l112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"],\n    \"temperature-quarter\": [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"],\n    \"cube\": [512, 512, [], \"f1b2\", \"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6l0 242.9c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4L0 134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1 0-188L288 246.6l0 188z\"],\n    \"bitcoin-sign\": [320, 512, [], \"e0b4\", \"M48 32C48 14.3 62.3 0 80 0s32 14.3 32 32l0 32 32 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 1.5-.1 3.1-.3 4.5C254.1 82.2 288 125.1 288 176c0 24.2-7.7 46.6-20.7 64.9c31.7 19.8 52.7 55 52.7 95.1c0 61.9-50.1 112-112 112l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-6.3 0C18.7 448 0 429.3 0 406.3L0 288l0-22.3L0 224 0 101.6C0 80.8 16.8 64 37.6 64L48 64l0-32zM64 224l112 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L64 128l0 96zm112 64L64 288l0 96 144 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"],\n    \"shield-dog\": [512, 512, [], \"e573\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8c35.3 0 64-28.7 64-64l0-64 44.2 0c12.1 0 23.2 6.8 28.6 17.7L320 192l64 0c8.8 0 16 7.2 16 16l0 32c0 44.2-35.8 80-80 80l-48 0 0 50.7c0 7.3-5.9 13.3-13.3 13.3c-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4c0-2.8 .6-5.5 1.9-8l15-30zM160 160l40 0 8 0 0 32 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"solar-panel\": [640, 512, [], \"f5ba\", \"M122.2 0C91.7 0 65.5 21.5 59.5 51.4L8.3 307.4C.4 347 30.6 384 71 384l217 0 0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64 217 0c40.4 0 70.7-36.9 62.8-76.6l-51.2-256C574.5 21.5 548.3 0 517.8 0L122.2 0zM260.9 64l118.2 0 10.4 104-139 0L260.9 64zM202.3 168l-100.8 0L122.2 64l90.4 0L202.3 168zM91.8 216l105.6 0L187.1 320 71 320 91.8 216zm153.9 0l148.6 0 10.4 104-169.4 0 10.4-104zm196.8 0l105.6 0L569 320l-116 0L442.5 216zm96-48l-100.8 0L427.3 64l90.4 0 31.4-6.3L517.8 64l20.8 104z\"],\n    \"lock-open\": [576, 512, [], \"f3c1\", \"M352 144c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48C576 64.5 511.5 0 432 0S288 64.5 288 144l0 48L64 192c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-32 0 0-48z\"],\n    \"elevator\": [512, 512, [], \"e16d\", \"M132.7 4.7l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l128 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm192 0c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM356.7 91.3c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5 0 432 0L304 0c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64z\"],\n    \"money-bill-transfer\": [640, 512, [], \"e528\", \"M535 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17s-2.5 12.5-7 17l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23L384 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l174.1 0L535 41zM105 377l-23 23L256 400c13.3 0 24 10.7 24 24s-10.7 24-24 24L81.9 448l23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 441c-4.5-4.5-7-10.6-7-17s2.5-12.5 7-17l64-64c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM96 64l241.9 0c-3.7 7.2-5.9 15.3-5.9 24c0 28.7 23.3 52 52 52l117.4 0c-4 17 .6 35.5 13.8 48.8c20.3 20.3 53.2 20.3 73.5 0L608 169.5 608 384c0 35.3-28.7 64-64 64l-241.9 0c3.7-7.2 5.9-15.3 5.9-24c0-28.7-23.3-52-52-52l-117.4 0c4-17-.6-35.5-13.8-48.8c-20.3-20.3-53.2-20.3-73.5 0L32 342.5 32 128c0-35.3 28.7-64 64-64zm64 64l-64 0 0 64c35.3 0 64-28.7 64-64zM544 320c-35.3 0-64 28.7-64 64l64 0 0-64zM320 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"],\n    \"money-bill-trend-up\": [512, 512, [], \"e529\", \"M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2c0 0 0 .1 0 .1c0 0 0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64 352 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"house-flood-water-circle-arrow-right\": [640, 512, [], \"e50f\", \"M288 144A144 144 0 1 0 0 144a144 144 0 1 0 288 0zM140.7 76.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L169.4 160 80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16l89.4 0L140.7 99.3c-6.2-6.2-6.2-16.4 0-22.6zM320 144c0 57.3-27.4 108.2-69.8 140.3c11.8-3.6 23-9.4 33-16.2c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c2.1 1.7 4.2 3.3 6.5 4.9l-.3-84.4 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128C407.6-2 392.4-2 381.2 6.1L301 64.4c12.1 23.9 19 50.9 19 79.6zm18.5 165.9c-11.1-7.9-25.9-7.9-37 0C279 325.4 251.5 336 224 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 389.7 191 400 224 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 325.2 442.9 336 416 336c-27.5 0-55-10.6-77.5-26.1zm0 112c-11.1-7.9-25.9-7.9-37 0C279 437.4 251.5 448 224 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 501.7 191 512 224 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 437.2 442.9 448 416 448c-27.5 0-55-10.6-77.5-26.1z\"],\n    \"square-poll-horizontal\": [448, 512, [\"poll-h\"], \"f682\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 160c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32zm64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0zM192 352c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z\"],\n    \"backward-fast\": [512, 512, [9198, \"fast-backward\"], \"f049\", \"M493.6 445c-11.2 5.3-24.5 3.6-34.1-4.4L288 297.7 288 416c0 12.4-7.2 23.7-18.4 29s-24.5 3.6-34.1-4.4L64 297.7 64 416c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 118.3L235.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S288 83.6 288 96l0 118.3L459.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S512 83.6 512 96l0 320c0 12.4-7.2 23.7-18.4 29z\"],\n    \"recycle\": [512, 512, [9842, 9850, 9851], \"f1b8\", \"M174.7 45.1C192.2 17 223 0 256 0s63.8 17 81.3 45.1l38.6 61.7 27-15.6c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3l-23.4 87.4c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l28.4-16.4L283 79c-5.8-9.3-16-15-27-15s-21.2 5.7-27 15l-17.5 28c-9.2 14.8-28.6 19.5-43.6 10.5c-15.3-9.2-20.2-29.2-10.7-44.4l17.5-28zM429.5 251.9c15-9 34.4-4.3 43.6 10.5l24.4 39.1c9.4 15.1 14.4 32.4 14.6 50.2c.3 53.1-42.7 96.4-95.8 96.4L320 448l0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 32 96.2 0c17.6 0 31.9-14.4 31.8-32c0-5.9-1.7-11.7-4.8-16.7l-24.4-39.1c-9.5-15.2-4.7-35.2 10.7-44.4zm-364.6-31L36 204.2c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20l87.4-23.4c12.8-3.4 26 4.2 29.4 17L182 241.2c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-26.5-15.3L68.8 335.3c-3.1 5-4.8 10.8-4.8 16.7c-.1 17.6 14.2 32 31.8 32l32.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.2 0C42.7 448-.3 404.8 0 351.6c.1-17.8 5.1-35.1 14.6-50.2l50.3-80.5z\"],\n    \"user-astronaut\": [448, 512, [], \"f4fb\", \"M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128l0 64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9l0-64c0-16.8-12.9-30.5-29.3-31.9zM336 144l0 16c0 53-43 96-96 96l-32 0c-53 0-96-43-96-96l0-16c0-26.5 21.5-48 48-48l128 0c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512l98.3 0 0-64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 64 98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16l0 48 32 0 0-48c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"plane-slash\": [640, 512, [], \"e069\", \"M514.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-73.8 0L630.8 469.1c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L238.1 161.3 197.8 20.4C194.9 10.2 202.6 0 213.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L397.7 192l116.6 0zM41.5 128.7l321 252.9L297.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L144 320l-43.2 57.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L64 256 32.5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-6.2 4-11.4 9.5-13.3z\"],\n    \"trademark\": [640, 512, [8482], \"f25c\", \"M345.6 108.8c-8.3-11-22.7-15.5-35.7-11.2S288 114.2 288 128l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 86.4 115.2c6 8.1 15.5 12.8 25.6 12.8s19.6-4.7 25.6-12.8L576 224l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256c0-13.8-8.8-26-21.9-30.4s-27.5 .1-35.7 11.2L464 266.7 345.6 108.8zM0 128c0 17.7 14.3 32 32 32l64 0 0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128z\"],\n    \"basketball\": [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M86.6 64l85.2 85.2C194.5 121.7 208 86.4 208 48c0-14.7-2-28.9-5.7-42.4C158.6 15 119 35.5 86.6 64zM64 86.6C35.5 119 15 158.6 5.6 202.3C19.1 206 33.3 208 48 208c38.4 0 73.7-13.5 101.3-36.1L64 86.6zM256 0c-7.3 0-14.6 .3-21.8 .9C238 16 240 31.8 240 48c0 47.3-17.1 90.5-45.4 124L256 233.4 425.4 64C380.2 24.2 320.9 0 256 0zM48 240c-16.2 0-32-2-47.1-5.8C.3 241.4 0 248.7 0 256c0 64.9 24.2 124.2 64 169.4L233.4 256 172 194.6C138.5 222.9 95.3 240 48 240zm463.1 37.8c.6-7.2 .9-14.5 .9-21.8c0-64.9-24.2-124.2-64-169.4L278.6 256 340 317.4c33.4-28.3 76.7-45.4 124-45.4c16.2 0 32 2 47.1 5.8zm-4.7 31.9C492.9 306 478.7 304 464 304c-38.4 0-73.7 13.5-101.3 36.1L448 425.4c28.5-32.3 49.1-71.9 58.4-115.7zM340.1 362.7C317.5 390.3 304 425.6 304 464c0 14.7 2 28.9 5.7 42.4C353.4 497 393 476.5 425.4 448l-85.2-85.2zM317.4 340L256 278.6 86.6 448c45.1 39.8 104.4 64 169.4 64c7.3 0 14.6-.3 21.8-.9C274 496 272 480.2 272 464c0-47.3 17.1-90.5 45.4-124z\"],\n    \"satellite-dish\": [512, 512, [128225], \"f7c0\", \"M192 32c0-17.7 14.3-32 32-32C383.1 0 512 128.9 512 288c0 17.7-14.3 32-32 32s-32-14.3-32-32C448 164.3 347.7 64 224 64c-17.7 0-32-14.3-32-32zM60.6 220.6L164.7 324.7l28.4-28.4c-.7-2.6-1.1-5.4-1.1-8.3c0-17.7 14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32c-2.9 0-5.6-.4-8.3-1.1l-28.4 28.4L291.4 451.4c14.5 14.5 11.8 38.8-7.3 46.3C260.5 506.9 234.9 512 208 512C93.1 512 0 418.9 0 304c0-26.9 5.1-52.5 14.4-76.1c7.5-19 31.8-21.8 46.3-7.3zM224 96c106 0 192 86 192 192c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-70.7-57.3-128-128-128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm11.3-395.3l112 112c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-64 0 0 96c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96-64 0c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l112-112c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"mobile-screen-button\": [384, 512, [\"mobile-alt\"], \"f3cd\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM224 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM304 64L80 64l0 320 224 0 0-320z\"],\n    \"volume-high\": [640, 512, [128266, \"volume-up\"], \"f028\", \"M533.6 32.5C598.5 85.2 640 165.8 640 256s-41.5 170.7-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\"],\n    \"users-rays\": [640, 512, [], \"e593\", \"M41 7C31.6-2.3 16.4-2.3 7 7S-2.3 31.6 7 41l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41 7zM599 7L527 79c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7 505c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 471c-9.4 9.4-9.4 24.6 0 33.9zm592 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM212.1 336c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-.5-1.4-1-2.7-1.6-4c-9.4-22.3-29.8-38.9-54.3-43c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-.8 .1-1.7 .3-2.5 .5c-24.9 5.1-45.1 23-53.4 46.5zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"wallet\": [512, 512, [], \"f555\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L80 128c-8.8 0-16-7.2-16-16s7.2-16 16-16l368 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM416 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"clipboard-check\": [384, 512, [], \"f46c\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376 80 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l33.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z\"],\n    \"burger\": [512, 512, [\"hamburger\"], \"f805\", \"M61.1 224C45 224 32 211 32 194.9c0-1.9 .2-3.7 .6-5.6C37.9 168.3 78.8 32 256 32s218.1 136.3 223.4 157.3c.5 1.9 .6 3.7 .6 5.6c0 16.1-13 29.1-29.1 29.1L61.1 224zM144 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm240 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zM272 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM16 304c0-26.5 21.5-48 48-48l384 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L64 352c-26.5 0-48-21.5-48-48zm16 96c0-8.8 7.2-16 16-16l416 0c8.8 0 16 7.2 16 16l0 16c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-16z\"],\n    \"wrench\": [512, 512, [128295], \"f0ad\", \"M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"bugs\": [576, 512, [], \"e4d0\", \"M164.5 107.4l33.4-73.5c5.5-12.1 .1-26.3-11.9-31.8s-26.3-.1-31.8 11.9L128 71.7 101.9 14.1C96.4 2 82.1-3.3 70.1 2.1S52.7 21.9 58.1 33.9l33.4 73.5c-10.2 7.1-18.2 17-22.9 28.6l-17 0-4.1-20.7c-2.6-13-15.2-21.4-28.2-18.8S-2.1 111.7 .5 124.7l8 40C10.7 175.9 20.6 184 32 184l32 0 0 23.3-37.8 9.5c-9.5 2.4-16.6 10.2-17.9 19.9l-8 56c-1.9 13.1 7.2 25.3 20.4 27.2s25.3-7.2 27.2-20.4l5.7-40 18.4-4.6C82.7 274.6 103.8 288 128 288s45.3-13.4 56.1-33.2l18.4 4.6 5.7 40c1.9 13.1 14 22.2 27.2 20.4s22.2-14 20.4-27.2l-8-56c-1.4-9.7-8.5-17.5-17.9-19.9L192 207.3l0-23.3 32 0c11.4 0 21.3-8.1 23.5-19.3l8-40c2.6-13-5.8-25.6-18.8-28.2s-25.6 5.8-28.2 18.8L204.3 136l-17 0c-4.7-11.6-12.7-21.5-22.9-28.6zM496 286.5l65.6-47c10.8-7.7 13.3-22.7 5.6-33.5s-22.7-13.3-33.5-5.6l-51.4 36.8 6.1-62.9c1.3-13.2-8.4-24.9-21.6-26.2s-24.9 8.4-26.2 21.6L432.8 250c-12.3 1-24.2 5.6-34.1 13.3L384 254.8l6.8-20c4.2-12.6-2.5-26.2-15-30.4s-26.2 2.5-30.4 15l-13.1 38.6c-3.7 10.8 .8 22.8 10.7 28.5l27.7 16L359 322.7 321.5 312c-9.4-2.7-19.5 .6-25.5 8.3l-34.9 44.5c-8.2 10.4-6.4 25.5 4.1 33.7s25.5 6.4 33.7-4.1l25-31.8 18.2 5.2c-.5 22.6 11 44.7 32 56.8s45.9 11 65.2-.7l13.6 13.2-15.1 37.5c-4.9 12.3 1 26.3 13.3 31.2s26.3-1 31.2-13.3L503.5 440c3.6-9.1 1.4-19.4-5.6-26.2l-28-27.1 11.6-20.1 27.7 16c9.9 5.7 22.5 3.7 30-4.9L566.2 347c8.7-10 7.8-25.1-2.2-33.9s-25.1-7.8-33.9 2.2l-13.9 15.9-14.7-8.5c1.7-12.4-.2-25-5.5-36.2z\"],\n    \"rupee-sign\": [448, 512, [8360, \"rupee\"], \"f156\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256.5 16.4c-.9 6 0 8.7 .4 9.8c.4 1.1 1.4 2.6 4.2 4.9c7.2 5.7 18.7 10 37.9 16.8l1.3 .5c16 5.6 38.7 13.6 55.7 28.1c9.5 8.1 17.9 18.6 23.1 32.3c5.1 13.7 6.1 28.5 3.8 44c-4.2 28.1-20.5 49.3-43.8 60.9c-22.1 11-48.1 12.5-73.2 8l-.2 0s0 0 0 0c-9.3-1.8-20.5-5.7-29.3-9c-6-2.3-12.6-4.9-17.7-6.9c0 0 0 0 0 0c-2.5-1-4.6-1.8-6.3-2.5c-16.5-6.4-24.6-25-18.2-41.4s24.9-24.6 41.4-18.2c2.6 1 5.2 2 7.9 3.1c0 0 0 0 0 0c4.8 1.9 9.8 3.9 15.4 6c8.8 3.3 15.3 5.4 18.7 6c15.7 2.8 26.7 .8 32.9-2.3c5-2.5 8-6 9.1-13c1-6.9 .2-10.5-.5-12.3c-.6-1.7-1.8-3.6-4.5-5.9c-6.9-5.8-18.2-10.4-36.9-17l-3-1.1c-15.5-5.4-37-13-53.3-25.9c-9.5-7.5-18.3-17.6-23.7-31c-5.5-13.4-6.6-28-4.4-43.2c8.4-57.1 67-78 116.9-68.9c6.9 1.3 27.3 5.8 35.4 8.4c16.9 5.2 26.3 23.2 21.1 40.1s-23.2 26.3-40.1 21.1c-4.7-1.4-22.3-5.5-27.9-6.5c-14.6-2.7-25.8-.4-32.6 3.2c-6.3 3.3-8.9 7.6-9.5 12z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm152 32c5.3 0 10.2 2.6 13.2 6.9l88 128c3.4 4.9 3.7 11.3 1 16.5s-8.2 8.6-14.2 8.6l-88 0-40 0-48 0-48 0c-5.8 0-11.1-3.1-13.9-8.1s-2.8-11.2 .2-16.1l48-80c2.9-4.8 8.1-7.8 13.7-7.8s10.8 2.9 13.7 7.8l12.8 21.4 48.3-70.2c3-4.3 7.9-6.9 13.2-6.9z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"plane-departure\": [640, 512, [128747], \"f5b0\", \"M381 114.9L186.1 41.8c-16.7-6.2-35.2-5.3-51.1 2.7L89.1 67.4C78 73 77.2 88.5 87.6 95.2l146.9 94.5L136 240 77.8 214.1c-8.7-3.9-18.8-3.7-27.3 .6L18.3 230.8c-9.3 4.7-11.8 16.8-5 24.7l73.1 85.3c6.1 7.1 15 11.2 24.3 11.2l137.7 0c5 0 9.9-1.2 14.3-3.4L535.6 212.2c46.5-23.3 82.5-63.3 100.8-112C645.9 75 627.2 48 600.2 48l-57.4 0c-20.2 0-40.2 4.8-58.2 14L381 114.9zM0 480c0 17.7 14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"],\n    \"handshake-slash\": [640, 512, [], \"e060\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM96 171.6L40.6 128 0 128 0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-180.4zM413.6 421.9L128 196.9 128 352l28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-96 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"],\n    \"book-bookmark\": [448, 512, [], \"e0bb\", \"M0 96C0 43 43 0 96 0l96 0 0 190.7c0 13.4 15.5 20.9 26 12.5L272 160l54 43.2c10.5 8.4 26 .9 26-12.5L352 0l32 0 32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32z\"],\n    \"code-branch\": [448, 512, [], \"f126\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 87.8c18.8-10.9 40.7-17.1 64-17.1l96 0c35.3 0 64-28.7 64-64l0-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 6.7c0 70.7-57.3 128-128 128l-96 0c-35.3 0-64 28.7-64 64l0 6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-6.7 0-198.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"hat-cowboy\": [640, 512, [], \"f8c0\", \"M320 64c14.4 0 22.3-7 30.8-14.4C360.4 41.1 370.7 32 392 32c49.3 0 84.4 152.2 97.9 221.9C447.8 272.1 390.9 288 320 288s-127.8-15.9-169.9-34.1C163.6 184.2 198.7 32 248 32c21.3 0 31.6 9.1 41.2 17.6C297.7 57 305.6 64 320 64zM111.1 270.7c47.2 24.5 117.5 49.3 209 49.3s161.8-24.8 208.9-49.3c24.8-12.9 49.8-28.3 70.1-47.7c7.9-7.9 20.2-9.2 29.6-3.3c9.5 5.9 13.5 17.9 9.9 28.5c-13.5 37.7-38.4 72.3-66.1 100.6C523.7 398.9 443.6 448 320 448s-203.6-49.1-252.5-99.2C39.8 320.4 14.9 285.8 1.4 248.1c-3.6-10.6 .4-22.6 9.9-28.5c9.5-5.9 21.7-4.5 29.6 3.3c20.4 19.4 45.3 34.8 70.1 47.7z\"],\n    \"bridge\": [576, 512, [], \"e4c8\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l40 0 0 64L0 160 0 288c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96s96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96l0-128-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM456 96l0 64-80 0 0-64 80 0zM328 96l0 64-80 0 0-64 80 0zM200 96l0 64-80 0 0-64 80 0z\"],\n    \"phone-flip\": [512, 512, [128381, \"phone-alt\"], \"f879\", \"M347.1 24.6c7.7-18.6 28-28.5 47.4-23.2l88 24C499.9 30.2 512 46 512 64c0 247.4-200.6 448-448 448c-18 0-33.8-12.1-38.6-29.5l-24-88c-5.3-19.4 4.6-39.7 23.2-47.4l96-40c16.3-6.8 35.2-2.1 46.3 11.6L207.3 368c70.4-33.3 127.4-90.3 160.7-160.7L318.7 167c-13.7-11.2-18.4-30-11.6-46.3l40-96z\"],\n    \"truck-front\": [512, 512, [], \"e2b7\", \"M0 80C0 35.8 35.8 0 80 0L432 0c44.2 0 80 35.8 80 80l0 288c0 26.2-12.6 49.4-32 64l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-256 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48C12.6 417.4 0 394.2 0 368L0 80zm129.9 72.2L112 224l288 0-17.9-71.8C378.5 138 365.7 128 351 128l-190 0c-14.7 0-27.5 10-31 24.2zM128 320a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"cat\": [576, 512, [128008], \"f6be\", \"M320 192l17.1 0c22.1 38.3 63.5 64 110.9 64c11 0 21.8-1.4 32-4l0 4 0 32 0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-140.8L280 448l56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-144 0c-53 0-96-43-96-96l0-223.5c0-16.1-12-29.8-28-31.8l-7.9-1c-17.5-2.2-30-18.2-27.8-35.7s18.2-30 35.7-27.8l7.9 1c48 6 84.1 46.8 84.1 95.3l0 85.3c34.4-51.7 93.2-85.8 160-85.8zm160 26.5s0 0 0 0c-10 3.5-20.8 5.5-32 5.5c-28.4 0-54-12.4-71.6-32c0 0 0 0 0 0c-3.7-4.1-7-8.5-9.9-13.2C357.3 164 352 146.6 352 128c0 0 0 0 0 0l0-96 0-20 0-1.3C352 4.8 356.7 .1 362.6 0l.2 0c3.3 0 6.4 1.6 8.4 4.2c0 0 0 0 0 .1L384 21.3l27.2 36.3L416 64l64 0 4.8-6.4L512 21.3 524.8 4.3c0 0 0 0 0-.1c2-2.6 5.1-4.2 8.4-4.2l.2 0C539.3 .1 544 4.8 544 10.7l0 1.3 0 20 0 96c0 17.3-4.6 33.6-12.6 47.6c-11.3 19.8-29.6 35.2-51.4 42.9zM432 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"anchor-circle-exclamation\": [640, 512, [], \"e4ab\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"truck-field\": [640, 512, [], \"e58d\", \"M32 96c0-35.3 28.7-64 64-64l224 0c23.7 0 44.4 12.9 55.4 32l51.8 0c25.3 0 48.2 14.9 58.5 38l52.8 118.8c.5 1.1 .9 2.1 1.3 3.2l4.2 0c35.3 0 64 28.7 64 64l0 32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-32c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-32zM384 224l85.9 0-42.7-96L384 128l0 96zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"route\": [512, 512, [], \"f4d7\", \"M512 96c0 50.2-59.1 125.1-84.6 155c-3.8 4.4-9.4 6.1-14.5 5L320 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96 43 96 96s-43 96-96 96l-276.4 0c8.7-9.9 19.3-22.6 30-36.8c6.3-8.4 12.8-17.6 19-27.2L416 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-53 0-96-43-96-96s43-96 96-96l39.8 0c-21-31.5-39.8-67.7-39.8-96c0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8C59.8 473 0 402.5 0 352c0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9c-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"clipboard-question\": [384, 512, [], \"e4e3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM105.8 229.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L216 328.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM160 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"panorama\": [640, 512, [], \"e209\", \"M45.6 32C20.4 32 0 52.4 0 77.6L0 434.4C0 459.6 20.4 480 45.6 480c5.1 0 10-.8 14.7-2.4C74.6 472.8 177.6 440 320 440s245.4 32.8 259.6 37.6c4.7 1.6 9.7 2.4 14.7 2.4c25.2 0 45.6-20.4 45.6-45.6l0-356.7C640 52.4 619.6 32 594.4 32c-5 0-10 .8-14.7 2.4C565.4 39.2 462.4 72 320 72S74.6 39.2 60.4 34.4C55.6 32.8 50.7 32 45.6 32zM96 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm272 0c7.9 0 15.4 3.9 19.8 10.5L512.3 353c5.4 8 5.6 18.4 .4 26.5s-14.7 12.3-24.2 10.7C442.7 382.4 385.2 376 320 376c-65.6 0-123.4 6.5-169.3 14.4c-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L197.3 265c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l26.4 33.1 87-127.6c4.5-6.6 11.9-10.5 19.8-10.5z\"],\n    \"comment-medical\": [512, 512, [], \"f7f5\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM224 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"teeth-open\": [576, 512, [], \"f62f\", \"M96 32C43 32 0 75 0 128l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-53-43-96-96-96L96 32zM224 96c26.5 0 48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56c0-26.5 21.5-48 48-48zm80 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56zM96 128c26.5 0 48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24c0-26.5 21.5-48 48-48zm336 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24zM96 480l384 0c53 0 96-43 96-96l0-32c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 32c0 53 43 96 96 96zm0-64c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48zm176 48c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48z\"],\n    \"file-circle-minus\": [576, 512, [], \"e4ed\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"],\n    \"tags\": [512, 512, [], \"f02c\", \"M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5L0 80C0 53.5 21.5 32 48 32l149.5 0c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"wine-glass\": [320, 512, [127863], \"f4e3\", \"M32.1 29.3C33.5 12.8 47.4 0 64 0L256 0c16.6 0 30.5 12.8 31.9 29.3l14 168.4c6 72-42.5 135.2-109.9 150.6l0 99.6 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-80 0-80 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 0-99.6C60.6 333 12.1 269.8 18.1 197.8l14-168.4zm56 98.7l143.8 0-5.3-64L93.4 64l-5.3 64z\"],\n    \"forward-fast\": [512, 512, [9197, \"fast-forward\"], \"f050\", \"M18.4 445c11.2 5.3 24.5 3.6 34.1-4.4L224 297.7 224 416c0 12.4 7.2 23.7 18.4 29s24.5 3.6 34.1-4.4L448 297.7 448 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 118.3L276.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S224 83.6 224 96l0 118.3L52.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S0 83.6 0 96L0 416c0 12.4 7.2 23.7 18.4 29z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm208.4-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"square-parking\": [448, 512, [127359, \"parking\"], \"f540\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM192 256l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0 64zm48 64l-48 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-120c0-22.1 17.9-40 40-40l72 0c53 0 96 43 96 96s-43 96-96 96z\"],\n    \"house-signal\": [576, 512, [], \"e012\", \"M357.7 8.5c-12.3-11.3-31.2-11.3-43.4 0l-208 192c-9.4 8.6-12.7 22-8.5 34c87.1 25.3 155.6 94.2 180.3 181.6L464 416c26.5 0 48-21.5 48-48l0-112 32 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8.1-35.2l-208-192zM288 208c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16l0-64zM24 256c-13.3 0-24 10.7-24 24s10.7 24 24 24c101.6 0 184 82.4 184 184c0 13.3 10.7 24 24 24s24-10.7 24-24c0-128.1-103.9-232-232-232zm8 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM0 376c0 13.3 10.7 24 24 24c48.6 0 88 39.4 88 88c0 13.3 10.7 24 24 24s24-10.7 24-24c0-75.1-60.9-136-136-136c-13.3 0-24 10.7-24 24z\"],\n    \"bars-progress\": [512, 512, [\"tasks-alt\"], \"f828\", \"M448 160l-128 0 0-32 128 0 0 32zM48 64C21.5 64 0 85.5 0 112l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 64zM448 352l0 32-256 0 0-32 256 0zM48 288c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 288z\"],\n    \"faucet-drip\": [512, 512, [128688], \"e006\", \"M224 0c17.7 0 32 14.3 32 32l0 12 96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12 0-12c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32l96 0 22.6-22.6c6-6 14.1-9.4 22.6-9.4l18.7 0 0-43.8 32-4 32 4 0 43.8 18.7 0c8.5 0 16.6 3.4 22.6 9.4L320 192l32 0c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s-14.3-32-32-32l-36.1 0c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48L32 320c-17.7 0-32-14.3-32-32l0-64zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z\"],\n    \"cart-flatbed\": [640, 512, [\"dolly-flatbed\"], \"f474\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l16 0c8.8 0 16 7.2 16 16l0 288c0 44.2 35.8 80 80 80l18.7 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l197.5 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l66.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-464 0c-8.8 0-16-7.2-16-16l0-288C128 35.8 92.2 0 48 0L32 0zM192 80l0 192c0 26.5 21.5 48 48 48l320 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-96 0 0 144c0 5.9-3.2 11.3-8.5 14.1s-11.5 2.5-16.4-.8L400 163.2l-39.1 26.1c-4.9 3.3-11.2 3.6-16.4 .8s-8.5-8.2-8.5-14.1l0-144-96 0c-26.5 0-48 21.5-48 48z\"],\n    \"ban-smoking\": [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M99.5 144.8L178.7 224l96 96 92.5 92.5C335.9 434.9 297.5 448 256 448C150 448 64 362 64 256c0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32 82.7 0 0 32-50.7 0zm32 32l34.7 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-130.7 0L144.8 99.5C176.1 77.1 214.5 64 256 64c106 0 192 86 192 192c0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16s7.2 16 16 16s16-7.2 16-16c0-26.5-21.5-48-48-48l-32 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16zM229.5 320l-96-96L112 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l117.5 0z\"],\n    \"terminal\": [576, 512, [], \"f120\", \"M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"mobile-button\": [384, 512, [], \"f10b\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zM192 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"house-medical-flag\": [640, 512, [], \"e514\", \"M480 0c17.7 0 32 14.3 32 32l112 0c8.8 0 16 7.2 16 16l0 128c0 8.8-7.2 16-16 16l-112 0 0 320-64 0 0-320 0-160c0-17.7 14.3-32 32-32zM276.8 39.7L416 159l0 353 1 0-.2 0L96 512c-17.7 0-32-14.3-32-32l0-192-32 0c-13.4 0-25.4-8.3-30-20.9s-1-26.7 9.2-35.4l224-192c12-10.3 29.7-10.3 41.7 0zM224 208l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"],\n    \"basket-shopping\": [576, 512, [\"shopping-basket\"], \"f291\", \"M253.3 35.1c6.1-11.8 1.5-26.3-10.2-32.4s-26.3-1.5-32.4 10.2L117.6 192 32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32L83.9 463.5C91 492 116.6 512 146 512L430 512c29.4 0 55-20 62.1-48.5L544 256c17.7 0 32-14.3 32-32s-14.3-32-32-32l-85.6 0L365.3 12.9C359.2 1.2 344.7-3.4 332.9 2.7s-16.3 20.6-10.2 32.4L404.3 192l-232.6 0L253.3 35.1zM192 304l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm96-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"tape\": [576, 512, [], \"f4db\", \"M380.8 416c41.5-40.7 67.2-97.3 67.2-160C448 132.3 347.7 32 224 32S0 132.3 0 256S100.3 480 224 480l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-163.2 0zM224 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm64 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"bus-simple\": [448, 512, [\"bus-alt\"], \"f55e\", \"M224 0C348.8 0 448 35.2 448 80l0 16 0 320c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32L0 96 0 80C0 35.2 99.2 0 224 0zM64 128l0 128c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L96 96c-17.7 0-32 14.3-32 32zM80 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6L160 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 189.8C51.5 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 94.8-51.5 177.5-128 221.8L384 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 205.4zM195.2 233.6c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zm121.6 0c17.6-23.5 52.8-23.5 70.4 0c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2zM208 336l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"],\n    \"audio-description\": [576, 512, [], \"f29e\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM213.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7l-9.4-18.9-82.2 0-9.4 18.9c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zm-.4 106.6L192 237.7l-21.1 42.2 42.2 0zM304 184c0-13.3 10.7-24 24-24l56 0c53 0 96 43 96 96s-43 96-96 96l-56 0c-13.3 0-24-10.7-24-24l0-144zm48 24l0 96 32 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"],\n    \"person-military-to-person\": [512, 512, [], \"e54c\", \"M71 12.5c-8.6 1-15 8.2-15 16.8c0 9.3 7.5 16.8 16.7 16.9l111.4 0c8.8-.1 15.9-7.2 15.9-16L200 16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1l-122.9 0C64.9 83.8 64 89.8 64 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256l0 32c0 17.7 14.3 32 32 32l128 0c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5l0-32c0-35.3-28.7-64-64-64l-64 0c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-35.3-28.7-64-64-64l-64 0zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376l0 32-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0 0 32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 2.9 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9s14.1-12.4 14.1-21.9l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\"],\n    \"file-shield\": [576, 512, [], \"e4f0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 47-92.8 37.1c-21.3 8.5-35.2 29.1-35.2 52c0 56.6 18.9 148 94.2 208.3c-9 4.8-19.3 7.6-30.2 7.6L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm39.1 97.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"],\n    \"user-slash\": [640, 512, [], \"f506\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L353.3 251.6C407.9 237 448 187.2 448 128C448 57.3 390.7 0 320 0C250.2 0 193.5 55.8 192 125.2L38.8 5.1zM264.3 304.3C170.5 309.4 96 387.2 96 482.3c0 16.4 13.3 29.7 29.7 29.7l388.6 0c3.9 0 7.6-.7 11-2.1l-261-205.6z\"],\n    \"pen\": [512, 512, [128394], \"f304\", \"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\"],\n    \"tower-observation\": [512, 512, [], \"e586\", \"M241.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9C439 137.5 427.7 144 416 144l0 80c0 17.7-14.3 32-32 32l-4.9 0 32 192 68.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-95.5 0c-.4 0-.8 0-1.1 0l-254.8 0c-.4 0-.8 0-1.1 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 32-192-4.9 0c-17.7 0-32-14.3-32-32l0-80c-11.7 0-23-6.5-28.6-17.7c-7.9-15.8-1.5-35 14.3-42.9l160-80zM314.5 448L256 399.2 197.5 448l117 0zM197.8 256l-4.7 28.3L256 336.8l62.9-52.5L314.2 256l-116.5 0zm-13.9 83.2l-11.2 67L218.5 368l-34.6-28.8zM293.5 368l45.8 38.1-11.2-67L293.5 368zM176 128c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM153 289l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L71 337c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM265 255l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"],\n    \"signal\": [640, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M576 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM448 96c17.7 0 32 14.3 32 32l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352c0-17.7 14.3-32 32-32zM352 224l0 256c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32s32 14.3 32 32zM192 288c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32zM96 416l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"bus\": [576, 512, [128653], \"f207\", \"M288 0C422.4 0 512 35.2 512 80l0 16 0 32c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 160c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32l0-160c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32c0 0 0 0 0 0l0-32s0 0 0 0l0-16C64 35.2 153.6 0 288 0zM128 160l0 96c0 17.7 14.3 32 32 32l112 0 0-160-112 0c-17.7 0-32 14.3-32 32zM304 288l112 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-112 0 0 160zM144 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM384 80c0-8.8-7.2-16-16-16L208 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16z\"],\n    \"heart-circle-xmark\": [576, 512, [], \"e501\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"house-chimney\": [576, 512, [63499, \"home-lg\"], \"e3af\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 64 0 24c0 22.1 17.9 40 40 40l24 0 32.5 0c1.4 0 2.8 0 4.2-.1c1.1 .1 2.2 .1 3.3 .1l16 0c22.1 0 40-17.9 40-40l0-16.2c.3-2.6 .5-5.3 .5-8.1l-.7-160.2 32 0z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 96l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"prescription\": [448, 512, [], \"f5b1\", \"M32 0C14.3 0 0 14.3 0 32L0 192l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 50.7 0 128 128L137.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7l-85.8-85.8C251.4 209.1 288 164.8 288 112C288 50.1 237.9 0 176 0L32 0zM176 160L64 160l0-96 112 0c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"],\n    \"shop\": [640, 512, [\"store-alt\"], \"f54f\", \"M36.8 192l566.3 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM64 224l0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-160-64 0 0 160-192 0 0-160-64 0zm448 0l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256-64 0z\"],\n    \"floppy-disk\": [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm0 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"vihara\": [640, 512, [], \"f6a7\", \"M281 22L305.8 4.7c1.3-.9 2.7-1.8 4.1-2.4C313.1 .7 316.6 0 320 0s6.9 .7 10.1 2.2c1.4 .7 2.8 1.5 4.1 2.4L359 22C393 45.8 430.8 63.5 470.8 74.4l23 6.3c1.8 .5 3.6 1.1 5.2 2c3.2 1.7 5.9 4 8.1 6.8c3.8 4.9 5.6 11.3 4.7 17.8c-.4 2.8-1.2 5.4-2.5 7.8c-1.7 3.2-4 5.9-6.8 8.1c-4.3 3.2-9.6 5.1-15.1 4.9l-7.5 0 0 56.1 6.4 5.1 5.2 4.1c21.1 16.7 45 29.6 70.5 38.1l28.9 9.6c1.6 .5 3.2 1.2 4.6 2c3.1 1.7 5.8 4.1 7.8 6.9s3.5 6.1 4.1 9.6c.5 2.7 .6 5.5 .1 8.3s-1.4 5.4-2.7 7.8c-1.7 3.1-4.1 5.8-6.9 7.8s-6.1 3.5-9.6 4.1c-1.6 .3-3.3 .4-5 .4L544 288l0 65.9c20.5 22.8 47.4 39.2 77.4 46.7C632 403 640 412.6 640 424c0 13.3-10.7 24-24 24l-40 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-40 0c-13.3 0-24-10.7-24-24c0-11.4 8-21 18.6-23.4c30-7.6 56.9-23.9 77.4-46.7L96 288l-39.4 0c-1.7 0-3.4-.1-5-.4c-3.5-.7-6.8-2.1-9.6-4.1s-5.2-4.7-7-7.8c-1.3-2.4-2.3-5-2.7-7.8s-.4-5.6 .1-8.3c.7-3.5 2.1-6.8 4.1-9.6s4.7-5.2 7.8-6.9c1.4-.8 3-1.5 4.6-2l28.9-9.6c25.5-8.5 49.4-21.4 70.5-38.1l5.2-4.1 6.4-5.1 0-8.1 0-48-7.5 0c-5.5 .1-10.8-1.7-15.1-4.9c-2.8-2.1-5.1-4.8-6.8-8.1c-1.2-2.4-2.1-5-2.5-7.8c-.9-6.5 .9-12.8 4.7-17.8c2.1-2.8 4.8-5.1 8.1-6.8c1.6-.8 3.4-1.5 5.2-2l23-6.3C209.2 63.5 247 45.8 281 22zM416 128l-96 0-96 0 0 64 72 0 48 0 72 0 0-64zM160 288l0 64 136 0 24 0 24 0 136 0 0-64-136 0-24 0s0 0 0 0l-24 0-136 0z\"],\n    \"scale-unbalanced\": [640, 512, [\"balance-scale-left\"], \"f515\", \"M522.1 62.4c16.8-5.6 25.8-23.7 20.2-40.5S518.6-3.9 501.9 1.6l-113 37.7C375 15.8 349.3 0 320 0c-44.2 0-80 35.8-80 80c0 3 .2 5.9 .5 8.8L117.9 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2L288 480c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-294.7c21-9.2 37.2-27 44.2-49l125.9-42zM439.6 288L512 163.8 584.4 288l-144.9 0zM512 384c62.9 0 115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L536.1 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L392.7 273.1c-5.7 9.8-9.3 21.1-6.7 32.1C396.8 350 449.1 384 512 384zM129.2 291.8L201.6 416 56.7 416l72.4-124.2zM3.2 433.1C14 478 66.3 512 129.2 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L153.2 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L9.9 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\"],\n    \"sort-up\": [320, 512, [\"sort-asc\"], \"f0de\", \"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"],\n    \"comment-dots\": [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"plant-wilt\": [512, 512, [], \"e5aa\", \"M288 120c0-30.9 25.1-56 56-56s56 25.1 56 56l0 13c-29.3 10-48 34.5-48 70.1c0 27.9 25.3 74.8 66 111.6c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13C464 53.7 410.3 0 344 0S224 53.7 224 120l0 21.8C207.3 133 188.2 128 168 128c-66.3 0-120 53.7-120 120l0 13c-29.3 10-48 34.5-48 70.1C0 359 25.3 405.9 66 442.7c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13c0-30.9 25.1-56 56-56s56 25.1 56 56l0 32 0 200c0 17.7 14.3 32 32 32s32-14.3 32-32l0-200 0-32 0-128z\"],\n    \"diamond\": [512, 512, [9830], \"f219\", \"M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM133.5 146.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"],\n    \"hand-holding-dollar\": [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M312 24l0 10.5c6.4 1.2 12.6 2.7 18.2 4.2c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17c-10.9-2.9-21.1-4.9-30.2-5c-7.3-.1-14.7 1.7-19.4 4.4c-2.1 1.3-3.1 2.4-3.5 3c-.3 .5-.7 1.2-.7 2.8c0 .3 0 .5 0 .6c.2 .2 .9 1.2 3.3 2.6c5.8 3.5 14.4 6.2 27.4 10.1l.9 .3s0 0 0 0c11.1 3.3 25.9 7.8 37.9 15.3c13.7 8.6 26.1 22.9 26.4 44.9c.3 22.5-11.4 38.9-26.7 48.5c-6.7 4.1-13.9 7-21.3 8.8l0 10.6c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-11.4c-9.5-2.3-18.2-5.3-25.6-7.8c-2.1-.7-4.1-1.4-6-2c-12.6-4.2-19.4-17.8-15.2-30.4s17.8-19.4 30.4-15.2c2.6 .9 5 1.7 7.3 2.5c13.6 4.6 23.4 7.9 33.9 8.3c8 .3 15.1-1.6 19.2-4.1c1.9-1.2 2.8-2.2 3.2-2.9c.4-.6 .9-1.8 .8-4.1l0-.2c0-1 0-2.1-4-4.6c-5.7-3.6-14.3-6.4-27.1-10.3l-1.9-.6c-10.8-3.2-25-7.5-36.4-14.4c-13.5-8.1-26.5-22-26.6-44.1c-.1-22.9 12.9-38.6 27.7-47.4c6.4-3.8 13.3-6.4 20.2-8.2L264 24c0-13.3 10.7-24 24-24s24 10.7 24 24zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"],\n    \"chart-diagram\": [512, 512, [], \"e695\", \"M80 32C53.5 32 32 53.5 32 80s21.5 48 48 48l152 0 0 40-48 48-56 0c-48.6 0-88 39.4-88 88l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-22.1 17.9-40 40-40l56 0 48 48 0 40-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-40 48-48 56 0c22.1 0 40 17.9 40 40l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-48.6-39.4-88-88-88l-56 0-48-48 0-40 152 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L80 32z\"],\n    \"bacterium\": [512, 512, [], \"e05a\", \"M423.1 30.6c3.6-12.7-3.7-26-16.5-29.7s-26 3.7-29.7 16.5l-4.2 14.7c-9.8-.4-19.9 .5-29.9 2.8c-12.1 2.8-23.7 5.9-34.9 9.4l-5.9-13.7c-5.2-12.2-19.3-17.8-31.5-12.6s-17.8 19.3-12.6 31.5l4.9 11.3c-22 9.4-42 20.1-60.2 31.8L196 82.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3l7.8 11.6c-18 15-33.7 30.8-47.3 47.1L103 157.3c-10.4-8.3-25.5-6.6-33.7 3.7s-6.6 25.5 3.7 33.7l15 12c-2.1 3.2-4.1 6.5-6 9.7c-9.4 15.7-17 31-23.2 45.3l-9.9-3.9c-12.3-4.9-26.3 1.1-31.2 13.4s1.1 26.3 13.4 31.2l11.6 4.6c-.3 1.1-.6 2.1-.9 3.1c-3.5 12.5-5.7 23.2-7.1 31.3c-.7 4.1-1.2 7.5-1.6 10.3c-.2 1.4-.3 2.6-.4 3.6l-.1 1.4-.1 .6 0 .3 0 .1c0 0 0 .1 39.2 3.7c0 0 0 0 0 0l-39.2-3.6c-.5 5-.6 10-.4 14.9l-14.7 4.2C4.7 380.6-2.7 393.8 .9 406.6s16.9 20.1 29.7 16.5l13.8-3.9c10.6 20.7 27.6 37.8 48.5 48.5l-3.9 13.7c-3.6 12.7 3.7 26 16.5 29.7s26-3.7 29.7-16.5l4.2-14.7c23.8 1 46.3-5.5 65.1-17.6L215 473c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c9.1-14.1 15.1-30.5 17-48.3l.1-.8c.3-1.7 1-5.1 2.3-9.8l.2-.8 12.6 5.4c12.2 5.2 26.3-.4 31.5-12.6s-.4-26.3-12.6-31.5l-11.3-4.8c9.9-14.9 24.9-31.6 48.6-46l2.1 7.5c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7L371 259.2c6.9-2.2 14.3-4.3 22.2-6.1c12.9-3 24.7-8 35.2-14.8L439 249c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c12.2-19 18.6-41.6 17.6-65.1l14.7-4.2c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5l-13.7 3.9c-10.8-21.2-28-38-48.5-48.5l3.9-13.8zM92.1 363.3s0 0 0 0L144 368l-51.9-4.7zM112 320a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM240 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40l0 148.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48l0 48 0 16 0 48c0 70.7-57.3 128-128 128l-16 0-64 0-.1 0-5.2 0c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7L128 40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"],\n    \"drum-steelpan\": [576, 512, [], \"f56a\", \"M288 32c159.1 0 288 48 288 128l0 192c0 80-128.9 128-288 128S0 432 0 352L0 160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8c-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4c0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5c47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4C56 130.1 48 150.1 48 160s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5c0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8C224.5 87 224 91.5 224 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2C330.8 81 309.8 80 288 80s-42.8 1-62.6 2.8z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9c0 0 0 .1 0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\"],\n    \"hands-praying\": [640, 512, [\"praying-hands\"], \"f684\", \"M351.2 4.8c3.2-2 6.6-3.3 10-4.1c4.7-1 9.6-.9 14.1 .1c7.7 1.8 14.8 6.5 19.4 13.6L514.6 194.2c8.8 13.1 13.4 28.6 13.4 44.4l0 73.5c0 6.9 4.4 13 10.9 15.2l79.2 26.4C631.2 358 640 370.2 640 384l0 96c0 9.9-4.6 19.3-12.5 25.4s-18.1 8.1-27.7 5.5L431 465.9c-56-14.9-95-65.7-95-123.7L336 224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-84.9c0-7-1.8-13.8-5.3-19.8L340.3 48.1c-1.7-3-2.9-6.1-3.6-9.3c-1-4.7-1-9.6 .1-14.1c1.9-8 6.8-15.2 14.3-19.9zm-62.4 0c7.5 4.6 12.4 11.9 14.3 19.9c1.1 4.6 1.2 9.4 .1 14.1c-.7 3.2-1.9 6.3-3.6 9.3L213.3 199.3c-3.5 6-5.3 12.9-5.3 19.8l0 84.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-17.7 14.3-32 32-32s32 14.3 32 32l0 118.2c0 58-39 108.7-95 123.7l-168.7 45c-9.6 2.6-19.9 .5-27.7-5.5S0 490 0 480l0-96c0-13.8 8.8-26 21.9-30.4l79.2-26.4c6.5-2.2 10.9-8.3 10.9-15.2l0-73.5c0-15.8 4.7-31.2 13.4-44.4L245.2 14.5c4.6-7.1 11.7-11.8 19.4-13.6c4.6-1.1 9.4-1.2 14.1-.1c3.5 .8 6.9 2.1 10 4.1z\"],\n    \"arrow-rotate-right\": [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M386.3 160L336 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\"],\n    \"web-awesome\": [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"],\n    \"biohazard\": [576, 512, [9763], \"f780\", \"M173.2 0c-1.8 0-3.5 .7-4.8 2C138.5 32.3 120 74 120 120c0 26.2 6 50.9 16.6 73c-22 2.4-43.8 9.1-64.2 20.5C37.9 232.8 13.3 262.4 .4 296c-.7 1.7-.5 3.7 .5 5.2c2.2 3.7 7.4 4.3 10.6 1.3C64.2 254.3 158 245.1 205 324s-8.1 153.1-77.6 173.2c-4.2 1.2-6.3 5.9-4.1 9.6c1 1.6 2.6 2.7 4.5 3c36.5 5.9 75.2 .1 109.7-19.2c20.4-11.4 37.4-26.5 50.5-43.8c13.1 17.3 30.1 32.4 50.5 43.8c34.5 19.3 73.3 25.2 109.7 19.2c1.9-.3 3.5-1.4 4.5-3c2.2-3.7 .1-8.4-4.1-9.6C379.1 477.1 324 403 371 324s140.7-69.8 193.5-21.4c3.2 2.9 8.4 2.3 10.6-1.3c1-1.6 1.1-3.5 .5-5.2c-12.9-33.6-37.5-63.2-72.1-82.5c-20.4-11.4-42.2-18.1-64.2-20.5C450 170.9 456 146.2 456 120c0-46-18.5-87.7-48.4-118c-1.3-1.3-3-2-4.8-2c-5 0-8.4 5.2-6.7 9.9C421.7 80.5 385.6 176 288 176S154.3 80.5 179.9 9.9c1.7-4.7-1.6-9.9-6.7-9.9zM240 272a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM181.7 417.6c6.3-11.8 9.8-25.1 8.6-39.8c-19.5-18-34-41.4-41.2-67.8c-12.5-8.1-26.2-11.8-40-12.4c-9-.4-18.1 .6-27.1 2.7c7.8 57.1 38.7 106.8 82.9 139.4c6.8-6.7 12.6-14.1 16.8-22.1zM288 64c-28.8 0-56.3 5.9-81.2 16.5c2 8.3 5 16.2 9 23.5c6.8 12.4 16.7 23.1 30.1 30.3c13.3-4.1 27.5-6.3 42.2-6.3s28.8 2.2 42.2 6.3c13.4-7.2 23.3-17.9 30.1-30.3c4-7.3 7-15.2 9-23.5C344.3 69.9 316.8 64 288 64zM426.9 310c-7.2 26.4-21.7 49.7-41.2 67.8c-1.2 14.7 2.2 28.1 8.6 39.8c4.3 8 10 15.4 16.8 22.1c44.3-32.6 75.2-82.3 82.9-139.4c-9-2.2-18.1-3.1-27.1-2.7c-13.8 .6-27.5 4.4-40 12.4z\"],\n    \"location-crosshairs\": [512, 512, [\"location\"], \"f601\", \"M256 0c17.7 0 32 14.3 32 32l0 34.7C368.4 80.1 431.9 143.6 445.3 224l34.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-34.7 0C431.9 368.4 368.4 431.9 288 445.3l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C143.6 431.9 80.1 368.4 66.7 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l34.7 0C80.1 143.6 143.6 80.1 224 66.7L224 32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"mars-double\": [640, 512, [9891], \"f227\", \"M312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L275.8 159c-28.4-19.5-62.7-31-99.8-31C78.8 128 0 206.8 0 304s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L407 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L312 32zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM64 304a112 112 0 1 1 224 0A112 112 0 1 1 64 304zM368 480c97.2 0 176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L599 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 32c-9.7 0-18.5 5.8-22.2 14.8c-1.2 2.9-1.8 6-1.8 9l0 .2 0 .2c0 6.2 2.5 12.2 7 16.8l33.4 33.4L480 146.7l0 21.3c0 22.6-13.6 43.1-34.6 51.7c-.8 .3-1.7 .7-2.5 1C465.7 241.2 480 270.9 480 304c0 61.9-50.1 112-112 112c-5.4 0-10.8-.4-16-1.1c-12.9 20.4-29.1 38.3-48.1 53.1c19.8 7.8 41.4 12 64 12z\"],\n    \"child-dress\": [320, 512, [], \"e59c\", \"M224 64A64 64 0 1 0 96 64a64 64 0 1 0 128 0zM88 400l0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 16 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 17.8 0c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.6 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2l28.7-37.8L55 378.9C51.6 389.3 59.3 400 70.2 400L88 400z\"],\n    \"users-between-lines\": [640, 512, [], \"e591\", \"M0 24C0 10.7 10.7 0 24 0L616 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 48C10.7 48 0 37.3 0 24zM0 488c0-13.3 10.7-24 24-24l592 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24zM83.2 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 320c0-35.3 28.7-64 64-64l96 0c12.2 0 23.7 3.4 33.4 9.4c-37.2 15.1-65.6 47.2-75.8 86.6L64 352c-17.7 0-32-14.3-32-32zm461.6 32c-10.3-40.1-39.6-72.6-77.7-87.4c9.4-5.5 20.4-8.6 32.1-8.6l96 0c35.3 0 64 28.7 64 64c0 17.7-14.3 32-32 32l-82.4 0zM391.2 290.4c32.1 7.4 58.1 30.9 68.9 61.6c3.5 10 5.5 20.8 5.5 32c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32c0-11.2 1.9-22 5.5-32c10.5-29.7 35.3-52.8 66.1-60.9c7.8-2.1 16-3.1 24.5-3.1l96 0c7.4 0 14.7 .8 21.6 2.4zm44-130.4a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM321.6 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"lungs-virus\": [640, 512, [], \"e067\", \"M320 0c17.7 0 32 14.3 32 32l0 124.2c-8.5-7.6-19.7-12.2-32-12.2s-23.5 4.6-32 12.2L288 32c0-17.7 14.3-32 32-32zM444.5 195.5c-16.4-16.4-41.8-18.5-60.5-6.1l0-24.1C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2c-20.9-5.2-38.7-17.1-51.5-32.9c14 1.5 28.5-3 39.2-13.8l-22.6-22.6 22.6 22.6c18.7-18.7 18.7-49.1 0-67.9c-1.1-1.1-1.4-2-1.5-2.5c-.1-.8-.1-1.8 .4-2.9s1.2-1.9 1.8-2.3c.5-.3 1.3-.8 2.9-.8c26.5 0 48-21.5 48-48s-21.5-48-48-48c-1.6 0-2.4-.4-2.9-.8c-.6-.4-1.3-1.2-1.8-2.3s-.5-2.2-.4-2.9c.1-.6 .4-1.4 1.5-2.5c18.7-18.7 18.7-49.1 0-67.9zM421.8 421.8c-6.2 6.2-16.4 6.2-22.6 0C375.9 398.5 336 415 336 448c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C241.5 375.9 225 336 192 336c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C264.1 241.5 304 225 304 192c0-8.8 7.2-16 16-16s16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C398.5 264.1 415 304 448 304c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6zM183.3 491.2l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 24.1c-18.6-12.4-44-10.3-60.5 6.1c-18.7 18.7-18.7 49.1 0 67.9c1.1 1.1 1.4 2 1.5 2.5c.1 .8 .1 1.8-.4 2.9s-1.2 1.9-1.8 2.3c-.5 .3-1.3 .8-2.9 .8c-26.5 0-48 21.5-48 48s21.5 48 48 48c1.6 0 2.4 .4 2.9 .8c.6 .4 1.3 1.2 1.8 2.3s.5 2.2 .4 2.9c-.1 .6-.4 1.4-1.5 2.5c-18.7 18.7-18.7 49.1 0 67.9c10.7 10.7 25.3 15.3 39.2 13.8c-12.8 15.9-30.6 27.7-51.5 32.9zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M548.6 371.4C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c3.6-8.8 6.5-18.4 8.8-27.5c4.6-18.2 7.7-37 9.3-48.2c3.9-26.5-18.8-49.2-45.2-45.4c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-26.5-3.9-49.2 18.8-45.2 45.4c1.6 11.3 4.6 30 9.3 48.2c2.3 9.1 5.2 18.8 8.8 27.5c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3zM107 254.1c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9zm454.5 87.1c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zm-90.1-9.7c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM281.6 228.8s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C190.7 188.4 184 206.1 184 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C350.7 188.4 344 206.1 344 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0z\"],\n    \"phone\": [512, 512, [128222, 128379], \"f095\", \"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM305 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47z\"],\n    \"child-reaching\": [384, 512, [], \"e59d\", \"M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z\"],\n    \"head-side-virus\": [512, 512, [], \"e064\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320l0 64c0 35.3-28.7 64-64 64l-64 0 0 32c0 17.7-14.3 32-32 32L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"],\n    \"user-gear\": [640, 512, [\"user-cog\"], \"f4fe\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c11.8 0 23.4 1.2 34.5 3.3c-2.1 18.5 7.4 35.6 21.8 44.8c-16.6 10.6-26.7 31.6-20 53.3c4 12.9 9.4 25.5 16.4 37.6s15.2 23.1 24.4 33c15.7 16.9 39.6 18.4 57.2 8.7l0 .9c0 9.2 2.7 18.5 7.9 26.3L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM436 218.2c0-7 4.5-13.3 11.3-14.8c10.5-2.4 21.5-3.7 32.7-3.7s22.2 1.3 32.7 3.7c6.8 1.5 11.3 7.8 11.3 14.8l0 30.6c7.9 3.4 15.4 7.7 22.3 12.8l24.9-14.3c6.1-3.5 13.7-2.7 18.5 2.4c7.6 8.1 14.3 17.2 20.1 27.2s10.3 20.4 13.5 31c2.1 6.7-1.1 13.7-7.2 17.2l-25 14.4c.4 4 .7 8.1 .7 12.3s-.2 8.2-.7 12.3l25 14.4c6.1 3.5 9.2 10.5 7.2 17.2c-3.3 10.6-7.8 21-13.5 31s-12.5 19.1-20.1 27.2c-4.8 5.1-12.5 5.9-18.5 2.4l-24.9-14.3c-6.9 5.1-14.3 9.4-22.3 12.8l0 30.6c0 7-4.5 13.3-11.3 14.8c-10.5 2.4-21.5 3.7-32.7 3.7s-22.2-1.3-32.7-3.7c-6.8-1.5-11.3-7.8-11.3-14.8l0-30.5c-8-3.4-15.6-7.7-22.5-12.9l-24.7 14.3c-6.1 3.5-13.7 2.7-18.5-2.4c-7.6-8.1-14.3-17.2-20.1-27.2s-10.3-20.4-13.5-31c-2.1-6.7 1.1-13.7 7.2-17.2l24.8-14.3c-.4-4.1-.7-8.2-.7-12.4s.2-8.3 .7-12.4L343.8 325c-6.1-3.5-9.2-10.5-7.2-17.2c3.3-10.6 7.7-21 13.5-31s12.5-19.1 20.1-27.2c4.8-5.1 12.4-5.9 18.5-2.4l24.8 14.3c6.9-5.1 14.5-9.4 22.5-12.9l0-30.5zm92.1 133.5a48.1 48.1 0 1 0 -96.1 0 48.1 48.1 0 1 0 96.1 0z\"],\n    \"arrow-up-1-9\": [576, 512, [\"sort-numeric-up\"], \"f163\", \"M450.7 38c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM445.7 364.9A32 32 0 1 0 418.3 307a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 408.4 344 375.2 344 336c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 467c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"],\n    \"door-closed\": [576, 512, [128682], \"f52a\", \"M96 64c0-35.3 28.7-64 64-64L416 0c35.3 0 64 28.7 64 64l0 384 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-112 0-288 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0L96 64zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"shield-virus\": [512, 512, [], \"e06c\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM256 112c8.8 0 16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C334.5 200.1 351 240 384 240c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C311.9 334.5 272 351 272 384c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C177.5 311.9 161 272 128 272c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C200.1 177.5 240 161 240 128c0-8.8 7.2-16 16-16zM232 256a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"dice-six\": [448, 512, [9861], \"f526\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"mosquito-net\": [640, 512, [], \"e52c\", \"M168.8 462.3c-7.9-4-11.1-13.6-7.2-21.5L192 380.2l0-44.2c0-4.2 1.7-8.3 4.7-11.3L256 265.4l0-23.1L139.2 344C87.8 395.3 0 358.9 0 286.3c0-41.1 30.6-75.8 71.4-80.9l159.9-23.9-49.6-41.3c-5.1-4.2-7-11.1-4.9-17.4l13.9-41.7-29-58.1c-4-7.9-.7-17.5 7.2-21.5s17.5-.7 21.5 7.2l32 64c1.9 3.8 2.2 8.2 .9 12.2l-12.5 37.6L256 160.5l0-22.6c0-14.9 10.1-27.3 23.8-31l0-43.3c0-4.5 3.7-8.2 8.2-8.2s8.2 3.7 8.2 8.2l0 43.3c13.7 3.6 23.8 16.1 23.8 31l0 22.6 45.4-37.8L352.8 85.1c-1.3-4-1-8.4 .9-12.2l32-64c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-29 58.1 13.9 41.7c2.1 6.2 .1 13.1-4.9 17.4l-49.6 41.3 159.9 23.9c22.5 2.8 41.8 14.6 54.7 31.4c-2.7 2.6-5.2 5.4-7.3 8.6c-8.6-12.9-23.3-21.5-40-21.5s-31.4 8.5-40 21.5c-8.6-12.9-23.3-21.5-40-21.5c-21.7 0-40 14.3-45.9 34.1c-10.7 3.2-19.8 10.1-25.9 19.2l-40.2-35 0 23.1 32.4 32.4c-.3 2-.4 4.1-.4 6.2c0 16.7 8.5 31.4 21.5 40c-4 2.6-7.5 5.9-10.6 9.5L320 310.6l0 50c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50-32 32 0 41.4c0 2.5-.6 4.9-1.7 7.2l-32 64c-4 7.9-13.6 11.1-21.5 7.2zM512 256c8.8 0 16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16zm16 112l48 0 0-48-48 0 0 48zm0 80l48 0 0-48-48 0 0 48zM448 320l0 48 48 0 0-48-48 0zm0 80l0 48 48 0 0-48-48 0z\"],\n    \"file-fragment\": [384, 512, [], \"e697\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-128 0 0-128c0-35.3-28.7-64-64-64L0 320 0 64zm384 64l-128 0L256 0 384 128zM32 352l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"],\n    \"bridge-water\": [576, 512, [], \"e4ce\", \"M0 96C0 78.3 14.3 64 32 64l512 0c17.7 0 32 14.3 32 32l0 35.6c0 15.7-12.7 28.4-28.4 28.4c-37.3 0-67.6 30.2-67.6 67.6l0 124.9c-12.9 0-25.8 3.9-36.8 11.7c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-.5 0-128c0-53-43-96-96-96s-96 43-96 96l0 128 0 .5c-19 0-41.2-7.9-59.1-20.3c-11.1-7.8-24-11.7-36.9-11.7l0-124.9C96 190.2 65.8 160 28.4 160C12.7 160 0 147.3 0 131.6L0 96zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"person-booth\": [576, 512, [], \"f756\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160 64 0 0-160zm320 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-448zM224 512c17.7 0 32-14.3 32-32l0-160-64 0 0 160c0 17.7 14.3 32 32 32zM320 0c-9.3 0-18.1 4-24.2 11s-8.8 16.3-7.5 25.5l31.2 218.6L288.6 409.7c-3.5 17.3 7.8 34.2 25.1 37.7s34.2-7.8 37.7-25.1l.7-3.6c1.3 16.4 15.1 29.4 31.9 29.4c17.7 0 32-14.3 32-32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32L320 0zM112 80A48 48 0 1 0 16 80a48 48 0 1 0 96 0zm0 261.3l0-72.1 4.7 4.7c9 9 21.2 14.1 33.9 14.1l73.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-66.7 0-41.6-41.6c-14.3-14.3-33.8-22.4-54-22.4C27.6 160 0 187.6 0 221.6l0 55.7 0 .9L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 42.7L96 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-58.7c0-10.4-3.4-20.5-9.6-28.8L112 341.3z\"],\n    \"text-width\": [448, 512, [], \"f035\", \"M64 128l0-32 128 0 0 128-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-128 128 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L224 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 192 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-192 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\"],\n    \"hat-wizard\": [512, 512, [], \"f6e8\", \"M64 416L168.6 180.7c15.3-34.4 40.3-63.5 72-83.7l146.9-94c3-1.9 6.5-2.9 10-2.9C407.7 0 416 8.3 416 18.6l0 1.6c0 2.6-.5 5.1-1.4 7.5L354.8 176.9c-1.9 4.7-2.8 9.7-2.8 14.7c0 5.5 1.2 11 3.4 16.1L448 416l-207.1 0 11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 276.4 230.9 272 224 272s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 339 144 345.1 144 352s4.4 13 10.9 15.2l40.4 13.5L207.1 416 64 416zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"pen-fancy\": [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.1C388.5 9.9 410.2 0 433 0c43.6 0 79 35.4 79 79c0 22.8-9.9 44.6-27.1 59.6L277.7 319l-10.3-10.3-64-64L193 234.3 373.5 27.1zM170.3 256.9l10.4 10.4 64 64 10.4 10.4-19.2 83.4c-3.9 17.1-16.9 30.7-33.8 35.4L24.3 510.3l95.4-95.4c2.6 .7 5.4 1.1 8.3 1.1c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 32c0 2.9 .4 5.6 1.1 8.3L1.7 487.6 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8l83.4-19.2z\"],\n    \"person-digging\": [576, 512, [\"digging\"], \"f85e\", \"M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2l-256 0c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7l32 0 22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-74.9-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z\"],\n    \"trash\": [448, 512, [], \"f1f8\", \"M135.2 17.7L128 32 32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0-7.2-14.3C307.4 6.8 296.3 0 284.2 0L163.8 0c-12.1 0-23.2 6.8-28.6 17.7zM416 128L32 128 53.2 467c1.6 25.3 22.6 45 47.9 45l245.8 0c25.3 0 46.3-19.7 47.9-45L416 128z\"],\n    \"gauge-simple\": [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64z\"],\n    \"book-medical\": [448, 512, [], \"f7e6\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM208 112l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"],\n    \"poo\": [512, 512, [128169], \"f2fe\", \"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1c0 44.1-35.7 79.9-79.8 80L160 128c-35.3 0-64 28.7-64 64c0 19.1 8.4 36.3 21.7 48L104 240c-39.8 0-72 32.2-72 72c0 23.2 11 43.8 28 57c-34.1 5.7-60 35.3-60 71c0 39.8 32.2 72 72 72l368 0c39.8 0 72-32.2 72-72c0-35.7-25.9-65.3-60-71c17-13.2 28-33.8 28-57c0-39.8-32.2-72-72-72l-13.7 0c13.3-11.7 21.7-28.9 21.7-48c0-35.3-28.7-64-64-64l-5.5 0c3.5-10 5.5-20.8 5.5-32c0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7c-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7c0-6.8 5.5-12.3 12.3-12.3l167.4 0c6.8 0 12.3 5.5 12.3 12.3z\"],\n    \"quote-right\": [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z\"],\n    \"shirt\": [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0l12.6 0c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7 480 448c0 35.3-28.7 64-64 64l-192 0c-35.3 0-64-28.7-64-64l0-250.3-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0l12.6 0z\"],\n    \"cubes\": [576, 512, [], \"f1b3\", \"M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5l0 112.2c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7L0 413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3l0-119.1c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3l0-112.2c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2 0-89.2L392 121l0 89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4l0-100.5L256 323.2l0 95.9-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1 0-100.5L528 323.2l0 90.7c0 3.2-1.9 6-4.8 7.3z\"],\n    \"divide\": [448, 512, [10135, 247], \"f529\", \"M272 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 320a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 288c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0z\"],\n    \"tenge-sign\": [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 64C0 46.3 14.3 32 32 32l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM0 192c0-17.7 14.3-32 32-32l160 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0 0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224L32 224c-17.7 0-32-14.3-32-32z\"],\n    \"headphones\": [512, 512, [127911], \"f025\", \"M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80l0-16 0-48 0-48C0 146.6 114.6 32 256 32s256 114.6 256 256l0 48 0 48 0 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z\"],\n    \"hands-holding\": [640, 512, [], \"f4c2\", \"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104l0 56 0 64L0 325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7l66.7 0c26.5 0 48-21.5 48-48l0-78.9c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3c0 0 0 0 0 0l-15.2-15.2-32-32c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l32 32 15.2 15.2c11 11 9.2 29.2-3.7 37.8c-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3L80 224l0-80 0-40zm480 0l0 40 0 80 0 40.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1c-12.9-8.6-14.7-26.9-3.7-37.8l15.2-15.2 32-32c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-32 32-15.2 15.2c0 0 0 0 0 0l-25.3 25.3c-21 21-32.8 49.5-32.8 79.2l0 78.9c0 26.5 21.5 48 48 48l66.7 0c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9L640 224l0-64 0-56c0-22.1-17.9-40-40-40s-40 17.9-40 40z\"],\n    \"hands-clapping\": [512, 512, [], \"e1a8\", \"M336 16l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16zm-98.7 7.1l32 48c4.9 7.4 2.9 17.3-4.4 22.2s-17.3 2.9-22.2-4.4l-32-48c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4c-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1c48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4zM424.9 18.7c7.4 4.9 9.3 14.8 4.4 22.2l-32 48c-4.9 7.4-14.8 9.3-22.2 4.4s-9.3-14.8-4.4-22.2l32-48c4.9-7.4 14.8-9.3 22.2-4.4z\"],\n    \"republican\": [640, 512, [], \"f75e\", \"M0 192C0 103.6 71.6 32 160 32l224 0c88.4 0 160 71.6 160 160l0 64L0 256l0-64zm415.9-64c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L466 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm-138.3 3.4c-1.1-2.1-3.3-3.4-5.7-3.4s-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L322 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6zM127.9 128c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L178 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm.1 160l192 0 96 0 32 0 64 0 32 0 0 32 0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-48-32 0 0 32 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64-192 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64 0-96 128 0z\"],\n    \"arrow-left\": [448, 512, [8592], \"f060\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"],\n    \"person-circle-xmark\": [576, 512, [], \"e543\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"],\n    \"ruler\": [512, 512, [128207], \"f545\", \"M177.9 494.1c-18.7 18.7-49.1 18.7-67.9 0L17.9 401.9c-18.7-18.7-18.7-49.1 0-67.9l50.7-50.7 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 50.7-50.7c18.7-18.7 49.1-18.7 67.9 0l92.1 92.1c18.7 18.7 18.7 49.1 0 67.9L177.9 494.1z\"],\n    \"align-left\": [448, 512, [], \"f036\", \"M288 64c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32L32 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"],\n    \"dice-d6\": [448, 512, [], \"f6d1\", \"M201 10.3c14.3-7.8 31.6-7.8 46 0L422.3 106c5.1 2.8 8.3 8.2 8.3 14s-3.2 11.2-8.3 14L231.7 238c-4.8 2.6-10.5 2.6-15.3 0L25.7 134c-5.1-2.8-8.3-8.2-8.3-14s3.2-11.2 8.3-14L201 10.3zM23.7 170l176 96c5.1 2.8 8.3 8.2 8.3 14l0 216c0 5.6-3 10.9-7.8 13.8s-10.9 3-15.8 .3L25 423.1C9.6 414.7 0 398.6 0 381L0 184c0-5.6 3-10.9 7.8-13.8s10.9-3 15.8-.3zm400.7 0c5-2.7 11-2.6 15.8 .3s7.8 8.1 7.8 13.8l0 197c0 17.6-9.6 33.7-25 42.1L263.7 510c-5 2.7-11 2.6-15.8-.3s-7.8-8.1-7.8-13.8l0-216c0-5.9 3.2-11.2 8.3-14l176-96z\"],\n    \"restroom\": [640, 512, [], \"f7bd\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-154.8c-8.1 9.2-21.1 13.2-33.5 9.4c-16.9-5.3-26.3-23.2-21-40.1l30.9-99.1C44.9 155.3 82 128 124 128l8 0c42 0 79.1 27.3 91.6 67.4l30.9 99.1c5.3 16.9-4.1 34.8-21 40.1c-12.4 3.9-25.4-.2-33.5-9.4L200 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM320 0c13.3 0 24 10.7 24 24l0 464c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-464c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5c-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1c-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1L584 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"],\n    \"j\": [320, 512, [106], \"4a\", \"M288 32c17.7 0 32 14.3 32 32l0 256c0 88.4-71.6 160-160 160S0 408.4 0 320l0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 53 43 96 96 96s96-43 96-96l0-256c0-17.7 14.3-32 32-32z\"],\n    \"users-viewfinder\": [640, 512, [], \"e595\", \"M48 48l88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L32 0C14.3 0 0 14.3 0 32L0 136c0 13.3 10.7 24 24 24s24-10.7 24-24l0-88zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zm-89.4 0c-8.6-24.3-29.9-42.6-55.9-47c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-32a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM504 48l88 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104c0-17.7-14.3-32-32-32L504 0c-13.3 0-24 10.7-24 24s10.7 24 24 24zM48 464l0-88c0-13.3-10.7-24-24-24s-24 10.7-24 24L0 480c0 17.7 14.3 32 32 32l104 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0zm456 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c17.7 0 32-14.3 32-32l0-104c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 88-88 0z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 288c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96zM300.9 397.9L256 368l0-64 44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3l0 103.4c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1z\"],\n    \"up-right-from-square\": [512, 512, [\"external-link-alt\"], \"f35d\", \"M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-128c0-17.7-14.3-32-32-32L352 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"],\n    \"table-cells\": [512, 512, [\"th\"], \"f00a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 64l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0zM64 224l88 0 0 64-88 0 0-64zm232 0l0 64-88 0 0-64 88 0zm64 0l88 0 0 64-88 0 0-64zM152 352l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0z\"],\n    \"file-pdf\": [512, 512, [], \"f1c1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM176 352l32 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-16 0 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0 48 16 0zm96-80l32 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16l0-128c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 96 16 0zm80-112c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64 0-64z\"],\n    \"book-bible\": [448, 512, [\"bible\"], \"f647\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zM208 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 112c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-112-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"o\": [448, 512, [111], \"4f\", \"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256A224 224 0 1 1 0 256a224 224 0 1 1 448 0z\"],\n    \"suitcase-medical\": [512, 512, [\"medkit\"], \"f0fa\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40 0 32 0 352 256 0 0-352 0-32 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM96 96L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l32 0L96 96zM416 480l32 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-32 0 0 384zM224 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"user-secret\": [448, 512, [128373], \"f21b\", \"M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48l-59.9 0C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4l-59.9 0c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208l-12.4 0c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2L168 224c-22.1 0-40-17.9-40-40l0-14.4c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4l0 14.4c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z\"],\n    \"otter\": [640, 512, [129446], \"f700\", \"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5c23.5 0 42.6-19.1 42.6-42.6l0-21.4c0-35.3-28.7-64-64-64l-64 0c-35.3 0-64 28.7-64 64l0 21.4c0 23.5 19.1 42.6 42.6 42.6c6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2L135.1 185c-4.5-3-7.1-8-7.1-13.3l0-3.7c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24l0 3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6c-3.6 0-7.1-.2-10.6-.6l0 .6c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l160 0 0-48 0-16c0-23.7 12.9-44.4 32-55.4c9.4-5.4 20.3-8.6 32-8.6l0-16c0-26.5 21.5-48 48-48c8.8 0 16 7.2 16 16l0 32 0 16 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-99.7c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1s0 0 0 0c0 123.7-100.3 224-224 224l-1.1 0L256 480l-.6 0C132 480 32 380 32 256.6l0-.6 0-39.2c-10.1-14.6-16-32.3-16-51.4L16 144l0-1.4C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24l2.8 0C44.8 58.2 83.3 32 128 32l64 0c44.7 0 83.2 26.2 101.2 64l2.8 0c13.3 0 24 10.7 24 24c0 10.5-6.7 19.3-16 22.6l0 1.4 0 21.4c0 1.4 0 2.8-.1 4.3c12-6.2 25.7-9.6 40.1-9.6l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-13.3 0-24 10.7-24 24l0 8 56.4 0c-15.2 17-24.4 39.4-24.4 64l-32 0c-42.3 0-78.2-27.4-91-65.3c-5.1 .9-10.3 1.3-15.6 1.3c-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"],\n    \"person-dress\": [320, 512, [\"female\"], \"f182\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM88 384l-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2c20.3-33.7 56.7-54.3 96-54.3l11.6 0c39.3 0 75.7 20.6 96 54.3l53.6 89.2c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9l-33.9-56.3L265 362.9c3.5 10.4-4.3 21.1-15.2 21.1L232 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"],\n    \"comment-dollar\": [512, 512, [], \"f651\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm20-312l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c0 0 0 0 0 0c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"],\n    \"business-time\": [640, 512, [\"briefcase-clock\"], \"f64a\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 160 0 8.2 0c32.3-39.1 81.1-64 135.8-64c5.4 0 10.7 .2 16 .7l0-32.7c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM320 352l-96 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l296.2 0C335.1 449.6 320 410.5 320 368c0-5.4 .2-10.7 .7-16l-.7 0zm320 16a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 288c8.8 0 16 7.2 16 16l0 48 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16z\"],\n    \"table-cells-large\": [512, 512, [\"th-large\"], \"f009\", \"M448 96l0 128-160 0 0-128 160 0zm0 192l0 128-160 0 0-128 160 0zM224 224L64 224 64 96l160 0 0 128zM64 288l160 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"],\n    \"book-tanakh\": [448, 512, [\"tanakh\"], \"f827\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM138.7 208l13.9 24-27.7 0 13.9-24zm-13.9-24L97.1 232c-6.2 10.7 1.5 24 13.9 24l55.4 0 27.7 48c6.2 10.7 21.6 10.7 27.7 0l27.7-48 55.4 0c12.3 0 20-13.3 13.9-24l-27.7-48 27.7-48c6.2-10.7-1.5-24-13.9-24l-55.4 0L221.9 64c-6.2-10.7-21.6-10.7-27.7 0l-27.7 48L111 112c-12.3 0-20 13.3-13.9 24l27.7 48zm27.7 0l27.7-48 55.4 0 27.7 48-27.7 48-55.4 0-27.7-48zm0-48l-13.9 24-13.9-24 27.7 0zm41.6-24L208 88l13.9 24-27.7 0zm69.3 24l27.7 0-13.9 24-13.9-24zm13.9 72l13.9 24-27.7 0 13.9-24zm-55.4 48L208 280l-13.9-24 27.7 0z\"],\n    \"phone-volume\": [512, 512, [\"volume-control-phone\"], \"f2a0\", \"M280 0C408.1 0 512 103.9 512 232c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32-72c0-13.3 10.7-24 24-24c75.1 0 136 60.9 136 136c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88c-13.3 0-24-10.7-24-24zM117.5 1.4c19.4-5.3 39.7 4.6 47.4 23.2l40 96c6.8 16.3 2.1 35.2-11.6 46.3L144 207.3c33.3 70.4 90.3 127.4 160.7 160.7L345 318.7c11.2-13.7 30-18.4 46.3-11.6l96 40c18.6 7.7 28.5 28 23.2 47.4l-24 88C481.8 499.9 466 512 448 512C200.6 512 0 311.4 0 64C0 46 12.1 30.2 29.5 25.4l88-24z\"],\n    \"hat-cowboy-side\": [640, 512, [], \"f8c1\", \"M152.7 135.9l-10.4 57.2c6.8-.7 13.6-1.1 20.5-1.1l10.7 0c39.4 0 77.8 12.1 110.1 34.7L562.4 421.8l35.1 24.6c24.4-6 42.5-28.1 42.5-54.4c0-75.8-94.7-126.6-134.6-144.7L474 83.9C468.2 53.8 441.8 32 411.1 32l-2.7 0c-5.6 0-11.1 .7-16.5 2.2L199.2 85.5c-23.9 6.4-42 26-46.5 50.4zM0 384c0 35.3 28.7 64 64 64l480 0L265.3 252.9c-26.9-18.8-58.9-28.9-91.8-28.9l-10.7 0c-60.6 0-116 34.2-143.1 88.4L13.5 325C4.6 342.7 0 362.3 0 382.2L0 384z\"],\n    \"clipboard-user\": [384, 512, [], \"f7f3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 448c-8.8 0-16-7.2-16-16z\"],\n    \"child\": [320, 512, [], \"f1ae\", \"M96 64a64 64 0 1 1 128 0A64 64 0 1 1 96 64zm48 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192.2L59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8 240 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0z\"],\n    \"lira-sign\": [320, 512, [8356], \"f195\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 192l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 32-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l14 0c-2.2 10.5-6.1 20.6-11.7 29.9L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1c11.6-19.3 18.9-40.7 21.6-62.9L224 352c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-32 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-31.6z\"],\n    \"satellite\": [512, 512, [128752], \"f7bf\", \"M233 7c-9.4-9.4-24.6-9.4-33.9 0l-96 96c-9.4 9.4-9.4 24.6 0 33.9l89.4 89.4-15.5 15.5C152.3 230.4 124.9 224 96 224c-31.7 0-61.5 7.7-87.8 21.2c-9 4.7-10.3 16.7-3.1 23.8L112.7 376.7 96.3 393.1c-2.6-.7-5.4-1.1-8.3-1.1c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32c0-2.9-.4-5.6-1.1-8.3l16.4-16.4L242.9 506.9c7.2 7.2 19.2 5.9 23.8-3.1C280.3 477.5 288 447.7 288 416c0-28.9-6.4-56.3-17.8-80.9l15.5-15.5L375 409c9.4 9.4 24.6 9.4 33.9 0l96-96c9.4-9.4 9.4-24.6 0-33.9l-89.4-89.4 55-55c12.5-12.5 12.5-32.8 0-45.3l-48-48c-12.5-12.5-32.8-12.5-45.3 0l-55 55L233 7zm159 351l-72.4-72.4 62.1-62.1L454.1 296 392 358.1zM226.3 192.4L153.9 120 216 57.9l72.4 72.4-62.1 62.1z\"],\n    \"plane-lock\": [640, 512, [], \"e558\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 84.6 101.8 58.2C418 247.6 416 259.6 416 272l0 24.6c-17.9 10.4-30.3 29.1-31.8 50.9L320 329.1l0 70.9 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 24 0 18c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-70.9-171.6 49C10.2 381.1 0 373.4 0 362.8l0-65.5c0-5.7 3.1-11 8.1-13.9L192 178.3l0-84.6zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"tag\": [448, 512, [127991], \"f02b\", \"M0 80L0 229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"comment\": [512, 512, [128489, 61669], \"f075\", \"M512 240c0 114.9-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6C73.6 471.1 44.7 480 16 480c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.3-.3c.3-.3 .7-.7 1.3-1.4c1.1-1.2 2.8-3.1 4.9-5.7c4.1-5 9.6-12.4 15.2-21.6c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208z\"],\n    \"cake-candles\": [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M86.4 5.5L61.8 47.6C58 54.1 56 61.6 56 69.2L56 72c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L105.6 5.5C103.6 2.1 100 0 96 0s-7.6 2.1-9.6 5.5zm128 0L189.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L233.6 5.5C231.6 2.1 228 0 224 0s-7.6 2.1-9.6 5.5zM317.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L361.6 5.5C359.6 2.1 356 0 352 0s-7.6 2.1-9.6 5.5L317.8 47.6zM128 176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c-35.3 0-64 28.7-64 64l0 71c8.3 5.2 18.1 9 28.8 9c13.5 0 27.2-6.1 38.4-13.4c5.4-3.5 9.9-7.1 13-9.7c1.5-1.3 2.7-2.4 3.5-3.1c.4-.4 .7-.6 .8-.8l.1-.1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c3.1-3.2 7.4-4.9 11.9-4.8s8.6 2.1 11.6 5.4c0 0 0 0 0 0s0 0 0 0l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c3-3.5 7.4-5.4 12-5.4s9 2 12 5.4l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c2.9-3.4 7.1-5.3 11.6-5.4s8.7 1.6 11.9 4.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1 .1c.2 .2 .4 .4 .8 .8c.8 .7 1.9 1.8 3.5 3.1c3.1 2.6 7.5 6.2 13 9.7c11.2 7.3 24.9 13.4 38.4 13.4c10.7 0 20.5-3.9 28.8-9l0-71c0-35.3-28.7-64-64-64l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48zM448 394.6c-8.5 3.3-18.2 5.4-28.8 5.4c-22.5 0-42.4-9.9-55.8-18.6c-4.1-2.7-7.8-5.4-10.9-7.8c-2.8 2.4-6.1 5-9.8 7.5C329.8 390 310.6 400 288 400s-41.8-10-54.6-18.9c-3.5-2.4-6.7-4.9-9.4-7.2c-2.7 2.3-5.9 4.7-9.4 7.2C201.8 390 182.6 400 160 400s-41.8-10-54.6-18.9c-3.7-2.6-7-5.2-9.8-7.5c-3.1 2.4-6.8 5.1-10.9 7.8C71.2 390.1 51.3 400 28.8 400c-10.6 0-20.3-2.2-28.8-5.4L0 480c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32l0-85.4z\"],\n    \"envelope\": [512, 512, [128386, 9993, 61443], \"f0e0\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"],\n    \"angles-up\": [448, 512, [\"angle-double-up\"], \"f102\", \"M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"],\n    \"paperclip\": [448, 512, [128206], \"f0c6\", \"M364.2 83.8c-24.4-24.4-64-24.4-88.4 0l-184 184c-42.1 42.1-42.1 110.3 0 152.4s110.3 42.1 152.4 0l152-152c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-152 152c-64 64-167.6 64-231.6 0s-64-167.6 0-231.6l184-184c46.3-46.3 121.3-46.3 167.6 0s46.3 121.3 0 167.6l-176 176c-28.6 28.6-75 28.6-103.6 0s-28.6-75 0-103.6l144-144c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-144 144c-6.7 6.7-6.7 17.7 0 24.4s17.7 6.7 24.4 0l176-176c24.4-24.4 24.4-64 0-88.4z\"],\n    \"arrow-right-to-city\": [640, 512, [], \"e4b3\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM166.6 153.4l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l114.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z\"],\n    \"ribbon\": [448, 512, [127895], \"f4d6\", \"M333.2 322.8s0 0 0 0l-133.9-146s0 0 0 0L146 118.6c7.8-5.1 37-22.6 78-22.6s70.2 17.4 78 22.6L245.7 180l85.6 93.4 27.4-29.8c16.3-17.7 25.3-40.9 25.3-65l0-29.5c0-19-5.6-37.5-16.1-53.3L327.8 35.6C312.9 13.4 287.9 0 261.2 0l-76 0c-25.8 0-50.1 12.5-65.1 33.5L81.9 87C70.3 103.2 64 122.8 64 142.8L64 164c0 23.2 8.4 45.6 23.6 63.1l56 64.2s0 0 0 0l83.3 95.6s0 0 0 0l91.8 105.3c10 11.5 26.8 14.3 40 6.8l54.5-31.1c17.8-10.2 21.6-34.3 7.7-49.4l-87.7-95.7zM205.2 410.6l-83.3-95.6L27.1 418.5c-13.9 15.1-10.1 39.2 7.7 49.4l55.1 31.5c13 7.4 29.3 4.9 39.4-6.1l75.9-82.6z\"],\n    \"lungs\": [640, 512, [129729], \"f604\", \"M320 0c17.7 0 32 14.3 32 32l0 132.1c0 16.4 8.4 31.7 22.2 40.5l9.8 6.2 0-45.5C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2C414 480.5 384 442.1 384 398l0-73 90.5 57.6c7.5 4.7 17.3 2.5 22.1-4.9s2.5-17.3-4.9-22.1L384 287.1l0-.4-44.1-28.1c-7.3-4.6-13.9-10.1-19.9-16.1c-5.9 6-12.6 11.5-19.9 16.1L256 286.7 161.2 347l-13.5 8.6c0 0 0 0-.1 0c-7.4 4.8-9.6 14.6-4.8 22.1c4.7 7.5 14.6 9.7 22.1 4.9l91.1-58 0 73.4c0 44.1-30 82.5-72.7 93.1l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 45.5 9.8-6.2c13.8-8.8 22.2-24.1 22.2-40.5L288 32c0-17.7 14.3-32 32-32z\"],\n    \"arrow-up-9-1\": [576, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM450.7 294c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zm-5-145.1A32 32 0 1 0 418.3 91a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 192.4 344 159.2 344 120c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 251c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"],\n    \"litecoin-sign\": [384, 512, [], \"e1d3\", \"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 149.6L23.2 225.2c-17 4.9-26.8 22.6-22 39.6s22.6 26.8 39.6 22L64 280.1 64 448c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-154.1 136.8-39.1c17-4.9 26.8-22.6 22-39.6s-22.6-26.8-39.6-22L128 195.3 128 64z\"],\n    \"border-none\": [448, 512, [], \"f850\", \"M32 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm96-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM320 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-320a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-448a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 288a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm192 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"],\n    \"circle-nodes\": [512, 512, [], \"e4e2\", \"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\"],\n    \"parachute-box\": [512, 512, [], \"f4cd\", \"M383.5 192c.3-5.3 .5-10.6 .5-16c0-51-15.9-96-40.2-127.6C319.5 16.9 288.2 0 256 0s-63.5 16.9-87.8 48.4C143.9 80 128 125 128 176c0 5.4 .2 10.7 .5 16L240 192l0 128-32 0c-7 0-13.7 1.5-19.7 4.2L68.2 192l28.3 0c-.3-5.3-.5-10.6-.5-16c0-64 22.2-121.2 57.1-159.3C62 49.3 18.6 122.6 4.2 173.6C1.5 183.1 9 192 18.9 192l6 0L165.2 346.3c-3.3 6.5-5.2 13.9-5.2 21.7l0 96c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-96c0-7.8-1.9-15.2-5.2-21.7L487.1 192l6 0c9.9 0 17.4-8.9 14.7-18.4C493.4 122.6 450 49.3 358.9 16.7C393.8 54.8 416 112.1 416 176c0 5.4-.2 10.7-.5 16l28.3 0L323.7 324.2c-6-2.7-12.7-4.2-19.7-4.2l-32 0 0-128 111.5 0z\"],\n    \"indent\": [448, 512, [], \"f03c\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\"],\n    \"truck-field-un\": [640, 512, [], \"e58e\", \"M96 32C60.7 32 32 60.7 32 96l0 32c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-32c0-35.3-28.7-64-64-64l-4.2 0c-.4-1.1-.9-2.1-1.3-3.2L485.7 102c-10.3-23.1-33.2-38-58.5-38l-51.8 0C364.4 44.9 343.7 32 320 32L96 32zm288 96l43.2 0 42.7 96L384 224l0-96zM112 384a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM253.3 135.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM128 144l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"hourglass\": [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M0 32C0 14.3 14.3 0 32 0L64 0 320 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 11c0 42.4-16.9 83.1-46.9 113.1L237.3 256l67.9 67.9c30 30 46.9 70.7 46.9 113.1l0 11c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-11c0-42.4 16.9-83.1 46.9-113.1L146.7 256 78.9 188.1C48.9 158.1 32 117.4 32 75l0-11C14.3 64 0 49.7 0 32zM96 64l0 11c0 25.5 10.1 49.9 28.1 67.9L192 210.7l67.9-67.9c18-18 28.1-42.4 28.1-67.9l0-11L96 64zm0 384l192 0 0-11c0-25.5-10.1-49.9-28.1-67.9L192 301.3l-67.9 67.9c-18 18-28.1 42.4-28.1 67.9l0 11z\"],\n    \"mountain\": [512, 512, [127956], \"f6fc\", \"M256 32c12.5 0 24.1 6.4 30.8 17L503.4 394.4c5.6 8.9 8.6 19.2 8.6 29.7c0 30.9-25 55.9-55.9 55.9L55.9 480C25 480 0 455 0 424.1c0-10.5 3-20.8 8.6-29.7L225.2 49c6.6-10.6 18.3-17 30.8-17zm65 192L256 120.4 176.9 246.5l18.3 24.4c6.4 8.5 19.2 8.5 25.6 0l25.6-34.1c6-8.1 15.5-12.8 25.6-12.8l49 0z\"],\n    \"user-doctor\": [448, 512, [\"user-md\"], \"f0f0\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-96 55.2C54 332.9 0 401.3 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-81-54-149.4-128-171.1l0 50.8c27.6 7.1 48 32.2 48 62l0 40c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l0-24c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 24c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-40c0-29.8 20.4-54.9 48-62l0-57.1c-6-.6-12.1-.9-18.3-.9l-91.4 0c-6.2 0-12.3 .3-18.3 .9l0 65.4c23.1 6.9 40 28.3 40 53.7c0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.4 16.9-46.8 40-53.7l0-59.1zM144 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"circle-info\": [512, 512, [\"info-circle\"], \"f05a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"cloud-meatball\": [512, 512, [], \"f73b\", \"M0 224c0 53 43 96 96 96l44.7 0c9.5-23.5 32.5-40 59.3-40c2 0 3.9 .1 5.8 .3C217.6 265.5 235.7 256 256 256s38.4 9.5 50.2 24.3c1.9-.2 3.9-.3 5.8-.3c26.9 0 49.9 16.5 59.3 40l44.7 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm288 96c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 1 .1 2.1 .1 3.1c-.7-.8-1.4-1.6-2.1-2.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c.7 .7 1.5 1.4 2.3 2.1c-1-.1-2.1-.1-3.1-.1c-17.7 0-32 14.3-32 32s14.3 32 32 32c1 0 2.1-.1 3.1-.1c-.8 .7-1.6 1.3-2.3 2.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0c.7-.7 1.4-1.5 2.1-2.3c-.1 1-.1 2.1-.1 3.1c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1-.1-2.1-.1-3.1c.7 .8 1.3 1.6 2.1 2.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3c-.7-.7-1.5-1.4-2.3-2.1c1 .1 2.1 .1 3.1 .1c17.7 0 32-14.3 32-32s-14.3-32-32-32c-1 0-2.1 .1-3.1 .1c.8-.7 1.6-1.3 2.3-2.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-.7 .7-1.4 1.5-2.1 2.3c.1-1 .1-2.1 .1-3.1zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"camera\": [512, 512, [62258, \"camera-alt\"], \"f030\", \"M149.1 64.8L138.7 96 64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L362.9 64.8C356.4 45.2 338.1 32 317.4 32L194.6 32c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"square-virus\": [448, 512, [], \"e578\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM223.8 93.7c13.3 0 24 10.7 24 24c0 29.3 35.4 43.9 56.1 23.2c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.7 20.7-6 56.1 23.2 56.1c13.3 0 24 10.7 24 24s-10.7 24-24 24c-29.3 0-43.9 35.4-23.2 56.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.7-20.7-56.1-6-56.1 23.2c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-29.3-35.4-43.9-56.1-23.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.7-20.7 6-56.1-23.2-56.1c-13.3 0-24-10.7-24-24s10.7-24 24-24c29.3 0 43.9-35.4 23.2-56.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.7 20.7 56.1 6 56.1-23.2c0-13.3 10.7-24 24-24zM192 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm88 32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"],\n    \"meteor\": [512, 512, [9732], \"f753\", \"M493.7 .9L299.4 75.6l2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309C0 421.1 90.9 512 203 512c72.4 0 139.4-38.6 175.7-101.3L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3L511.1 18.3c.6-1.5 .9-3.2 .9-4.8C512 6 506 0 498.5 0c-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"car-on\": [512, 512, [], \"e4dd\", \"M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80zM185.8 224l140.3 0c6.8 0 12.8 4.3 15.1 10.6L360.3 288l-208.6 0 19.1-53.4c2.3-6.4 8.3-10.6 15.1-10.6zm-75.3-10.9L82.2 292.4C62.1 300.9 48 320.8 48 344l0 40 0 64 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 256 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 0-64 0-40c0-23.2-14.1-43.1-34.2-51.6l-28.3-79.3C390.1 181.3 360 160 326.2 160l-140.3 0c-33.8 0-64 21.3-75.3 53.1zM128 344a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm232 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM39 39c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L73 39c-9.4-9.4-24.6-9.4-33.9 0zm400 0L391 87c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0z\"],\n    \"sleigh\": [640, 512, [], \"f7cc\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 160c0 53 43 96 96 96l0 32 64 0 0-32 192 0 0 32 64 0 0-32c53 0 96-43 96-96l0-96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0-32 0c-17.7 0-32 14.3-32 32l0 41.3c0 30.2-24.5 54.7-54.7 54.7c-75.5 0-145.6-38.9-185.6-102.9l-4.3-6.9C174.2 67.6 125 37.6 70.7 32.7c-2.2-.5-4.4-.7-6.7-.7l-9 0L32 32zM640 384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 8c0 13.3-10.7 24-24 24L64 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l488 0c48.6 0 88-39.4 88-88l0-8z\"],\n    \"arrow-down-1-9\": [576, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M450.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM418.3 307a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 307zM405.1 419.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"],\n    \"hand-holding-droplet\": [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M275.5 6.6C278.3 2.5 283 0 288 0s9.7 2.5 12.5 6.6L366.8 103C378 119.3 384 138.6 384 158.3l0 1.7c0 53-43 96-96 96s-96-43-96-96l0-1.7c0-19.8 6-39 17.2-55.3L275.5 6.6zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"],\n    \"water\": [576, 512, [], \"f773\", \"M269.5 69.9c11.1-7.9 25.9-7.9 37 0C329 85.4 356.5 96 384 96c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 149.7 417 160 384 160c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4C42.8 92.6 61 83.5 75.3 71.6c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 85.2 165.1 96 192 96c27.5 0 55-10.6 77.5-26.1zm37 288C329 373.4 356.5 384 384 384c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 437.7 417 448 384 448c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 373.2 165.1 384 192 384c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0zm0-144C329 229.4 356.5 240 384 240c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 293.7 417 304 384 304c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 229.2 165.1 240 192 240c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM329 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L329 305z\"],\n    \"braille\": [640, 512, [], \"f2a1\", \"M0 96a64 64 0 1 1 128 0A64 64 0 1 1 0 96zM224 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM80 416a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 96a64 64 0 1 1 128 0A64 64 0 1 1 352 96zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0A64 64 0 1 1 512 96zm64 176a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM416 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"],\n    \"prescription-bottle-medical\": [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zM160 240l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"],\n    \"landmark\": [512, 512, [127963], \"f66f\", \"M240.1 4.2c9.8-5.6 21.9-5.6 31.8 0l171.8 98.1L448 104l0 .9 47.9 27.4c12.6 7.2 18.8 22 15.1 36s-16.4 23.8-30.9 23.8L32 192c-14.5 0-27.2-9.8-30.9-23.8s2.5-28.8 15.1-36L64 104.9l0-.9 4.4-1.6L240.1 4.2zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"],\n    \"truck\": [640, 512, [128666, 9951], \"f0d1\", \"M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"crosshairs\": [512, 512, [], \"f05b\", \"M256 0c17.7 0 32 14.3 32 32l0 10.4c93.7 13.9 167.7 88 181.6 181.6l10.4 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.4 0c-13.9 93.7-88 167.7-181.6 181.6l0 10.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-10.4C130.3 455.7 56.3 381.7 42.4 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l10.4 0C56.3 130.3 130.3 56.3 224 42.4L224 32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6l0-20.6c0-17.7 14.3-32 32-32s32 14.3 32 32l0 20.6c58.3-12.5 104.1-58.4 116.6-116.6L384 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l20.6 0C392.1 165.7 346.3 119.9 288 107.4l0 20.6c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-20.6C165.7 119.9 119.9 165.7 107.4 224l20.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-20.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"person-cane\": [448, 512, [], \"e53c\", \"M272 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-8 187.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7zM352 376c0-4.4 3.6-8 8-8s8 3.6 8 8l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8z\"],\n    \"tent\": [576, 512, [], \"e57d\", \"M269.4 6C280.5-2 295.5-2 306.6 6l224 160c7.4 5.3 12.2 13.5 13.2 22.5l32 288c1 9-1.9 18.1-8 24.9s-14.7 10.7-23.8 10.7l-80 0-28.2 0c-12.1 0-23.2-6.8-28.6-17.7L306.7 293.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L288 480c0 17.7-14.3 32-32 32l-16 0L32 512c-9.1 0-17.8-3.9-23.8-10.7s-9-15.8-8-24.9l32-288c1-9 5.8-17.2 13.2-22.5L269.4 6z\"],\n    \"vest-patches\": [448, 512, [], \"e086\", \"M151.2 69.7l55.9 167.7-11 33.1c-2.7 8.2-4.1 16.7-4.1 25.3L192 464c0 14.5 3.9 28.2 10.7 39.9C195 509 185.9 512 176 512L48 512c-26.5 0-48-21.5-48-48L0 270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6L64 128l0-73.7L64 48C64 21.5 85.5 0 112 0l4.5 0c.2 0 .4 0 .6 0c.4 0 .8 0 1.2 0c18.8 0 34.1 9.7 44.1 18.8C171.6 27.2 190.8 40 224 40s52.4-12.8 61.7-21.2C295.7 9.7 311 0 329.7 0c.4 0 .8 0 1.2 0c.2 0 .4 0 .6 0L336 0c26.5 0 48 21.5 48 48l0 6.3 0 73.7 0 17.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6L448 464c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-168.2c0-5.2 .8-10.3 2.5-15.2L296.8 69.7C279.4 79.7 255.4 88 224 88s-55.4-8.3-72.8-18.3zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305l15.5 15.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288l15.5-15.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280l0 8 0 32c0 8.8 7.2 16 16 16l32 0 8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"],\n    \"check-double\": [448, 512, [], \"f560\", \"M342.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 178.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l160-160zm96 128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 54.6 297.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l256-256z\"],\n    \"arrow-down-a-z\": [576, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 320c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 352 352 352c-17.7 0-32-14.3-32-32zM416 32c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 224l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128C392.8 38.8 403.9 32 416 32zM395.8 176l40.4 0L416 135.6 395.8 176z\"],\n    \"money-bill-wheat\": [512, 512, [], \"e52a\", \"M176 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zM56 16l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 64C42.7 64 32 53.3 32 40s10.7-24 24-24zM24 88l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 136c-13.3 0-24-10.7-24-24S10.7 88 24 88zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 16c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80zM400 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 128c8.8 0 16 7.2 16 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"cookie\": [512, 512, [127850], \"f563\", \"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"arrow-rotate-left\": [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M125.7 160l50.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 224c-17.7 0-32-14.3-32-32L16 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 184.4c-17-15.2-39.4-24.4-64-24.4L64 256c-24.6 0-47 9.2-64 24.4L0 96zM64 288l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-6.8 6.8-21.4 12.4-37.4 16.7c-16.3 4.4-34.1 7.5-46.3 9.3c-1.6 .2-3.1 .5-4.6 .6c-4.9 .8-9.1-2.8-9.5-7.4c-.1-.7 0-1.4 .1-2.1c1.6-11.2 4.6-29.6 9-47c.3-1.3 .7-2.6 1-3.9c4.3-15.9 9.8-30.5 16.7-37.4zm-44.7 19c-1.5 4.8-2.9 9.6-4.1 14.3c-4.8 18.9-8 38.5-9.7 50.3c-4 26.8 18.9 49.7 45.7 45.8c11.9-1.6 31.5-4.8 50.4-9.7c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c4.8-18.9 8-38.5 9.7-50.3c4-26.8-18.9-49.7-45.7-45.8c-11.9 1.6-31.5 4.8-50.4 9.7c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75C158.2-8.3 284.5-22.2 382.2 33.2zM51.5 410.1c18.5-5 38.8-8.3 50.9-10c.4-.1 .7-.1 1-.1c5.1-.2 9.2 4.3 8.4 9.6c-1.7 12.1-5 32.4-10 50.9C97.6 476.4 92 491 85.2 497.8C66 517 34.5 516.6 14.9 497.1s-20-51-.7-70.3c6.8-6.8 21.4-12.4 37.4-16.7zM416.9 209c-4.7-11.9-20.8-11-26.8 .3c-19 35.5-45 70.8-77.5 103.3S244.8 371.1 209.3 390c-11.3 6-12.2 22.1-.3 26.8c57.6 22.9 125.8 11 172.3-35.5s58.4-114.8 35.5-172.3zM87.1 285.1c2 2 4.6 3.2 7.3 3.4l56.1 5.1 5.1 56.1c.3 2.8 1.5 5.4 3.4 7.3c6.3 6.3 17.2 3.6 19.8-4.9l29.7-97.4c3.5-11.6-7.3-22.5-19-19L92 265.3c-8.6 2.6-11.3 13.4-4.9 19.8zM265.3 92l-29.7 97.4c-3.5 11.6 7.3 22.5 19 19l97.4-29.7c8.6-2.6 11.3-13.4 4.9-19.8c-2-2-4.6-3.2-7.3-3.4l-56.1-5.1-5.1-56.1c-.3-2.8-1.5-5.4-3.4-7.3c-6.3-6.3-17.2-3.6-19.8 4.9z\"],\n    \"dumbbell\": [640, 512, [], \"f44b\", \"M96 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 160 0 64 0 160c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-32 0c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l32 0 0-64zm448 0l0 64 32 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64c0 17.7-14.3 32-32 32l-32 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-160 0-64 0-160c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32zM416 224l0 64-192 0 0-64 192 0z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0z\"],\n    \"tarp-droplet\": [576, 512, [], \"e57c\", \"M288 160c-35.3 0-64-26.9-64-60c0-24 33.7-70.1 52.2-93.5c6.1-7.7 17.5-7.7 23.6 0C318.3 29.9 352 76 352 100c0 33.1-28.7 60-64 60zM64 128l133.5 0c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64L512 128c35.3 0 64 28.7 64 64l0 160-128 0c-17.7 0-32 14.3-32 32l0 128L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zM448 512l0-128 128 0L448 512zM96 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"house-medical-circle-check\": [640, 512, [], \"e511\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zm32 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"person-skiing-nordic\": [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M336 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM227.2 160c1.9 0 3.8 .1 5.6 .3L201.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9L291.3 464l-88.5 0 41.1-88.1-32.4-20.3c-7.8-4.9-14.7-10.7-20.6-17.3L132.2 464l-32.4 0 54.2-257.6c4.6-1.5 9-4.1 12.7-7.8l23.1-23.1c9.9-9.9 23.4-15.5 37.5-15.5zM121.4 198.6c.4 .4 .8 .8 1.3 1.2L67 464l-43 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l135.3 0c.5 0 .9 0 1.4 0l158.6 0c.5 0 1 0 1.4 0L504 512c39.8 0 72-32.2 72-72l0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8c0 13.3-10.7 24-24 24l-69.4 0 27.6-179.3c10.5-5.2 17.8-16.1 17.8-28.7c0-17.7-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3zm308 89.4L402.3 464l-44.4 0 21.6-75.6c5.9-20.6-2.6-42.6-20.7-53.9L302 299l30.9-82.4 5.1 12.3C353 264.7 387.9 288 426.7 288l2.7 0z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272zM224 248c13.3 0 24 10.7 24 24l0 56 56 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-56 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l56 0 0-56c0-13.3 10.7-24 24-24z\"],\n    \"plane-arrival\": [640, 512, [128748], \"f5af\", \"M.3 166.9L0 68C0 57.7 9.5 50.1 19.5 52.3l35.6 7.9c10.6 2.3 19.2 9.9 23 20L96 128l127.3 37.6L181.8 20.4C178.9 10.2 186.6 0 197.2 0l40.1 0c11.6 0 22.2 6.2 27.9 16.3l109 193.8 107.2 31.7c15.9 4.7 30.8 12.5 43.7 22.8l34.4 27.6c24 19.2 18.1 57.3-10.7 68.2c-41.2 15.6-86.2 18.1-128.8 7L121.7 289.8c-11.1-2.9-21.2-8.7-29.3-16.9L9.5 189.4c-5.9-6-9.3-14.1-9.3-22.5zM32 448l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM116.7 244.7l112-112c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8l0 64 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 64c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-112-112c-6.2-6.2-6.2-16.4 0-22.6z\"],\n    \"train-subway\": [448, 512, [\"subway\"], \"f239\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 128c0-17.7 14.3-32 32-32l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96zM272 96l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"chart-gantt\": [512, 512, [], \"e0e4\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zm96 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm160 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"indian-rupee-sign\": [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M0 64C0 46.3 14.3 32 32 32l64 0 16 0 176 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-56.2 0c9.6 14.4 16.7 30.6 20.7 48l35.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-35.6 0c-13.2 58.3-61.9 103.2-122.2 110.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256l80 0c32.8 0 61-19.7 73.3-48L32 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l153.3 0C173 115.7 144.8 96 112 96L96 96 32 96C14.3 96 0 81.7 0 64z\"],\n    \"crop-simple\": [512, 512, [\"crop-alt\"], \"f565\", \"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-224 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64L160 64l0 64 224 0 0 352z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm76-48c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"],\n    \"left-long\": [512, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M177.5 414c-8.8 3.8-19 2-26-4.6l-144-136C2.7 268.9 0 262.6 0 256s2.7-12.9 7.5-17.4l144-136c7-6.6 17.2-8.4 26-4.6s14.5 12.5 14.5 22l0 72 288 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-288 0 0 72c0 9.6-5.7 18.2-14.5 22z\"],\n    \"dna\": [448, 512, [129516], \"f471\", \"M416 0c17.7 0 32 14.3 32 32c0 59.8-30.3 107.5-69.4 146.6c-28 28-62.5 53.5-97.3 77.4l-2.5 1.7c-11.9 8.1-23.8 16.1-35.5 23.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l-1.6 1c-6 4-11.9 7.9-17.8 11.9c-20.9 14-40.8 27.7-59.3 41.5l118.5 0c-9.8-7.4-20.1-14.7-30.7-22.1l7-4.7 3-2c15.1-10.1 30.9-20.6 46.7-31.6c25 18.1 48.9 37.3 69.4 57.7C417.7 372.5 448 420.2 448 480c0 17.7-14.3 32-32 32s-32-14.3-32-32L64 480c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-59.8 30.3-107.5 69.4-146.6c28-28 62.5-53.5 97.3-77.4c-34.8-23.9-69.3-49.3-97.3-77.4C30.3 139.5 0 91.8 0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l320 0c0-17.7 14.3-32 32-32zM338.6 384l-229.2 0c-10.1 10.6-18.6 21.3-25.5 32l280.2 0c-6.8-10.7-15.3-21.4-25.5-32zM109.4 128l229.2 0c10.1-10.7 18.6-21.3 25.5-32L83.9 96c6.8 10.7 15.3 21.3 25.5 32zm55.4 48c18.4 13.8 38.4 27.5 59.3 41.5c20.9-14 40.8-27.7 59.3-41.5l-118.5 0z\"],\n    \"virus-slash\": [640, 512, [], \"e075\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-154.3-121c-2-30.1 20.8-60.1 56-60.1l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C412.3 118.4 352 93.4 352 43.5L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L184.2 75c-12.5-12.5-32.8-12.5-45.3 0c-1.6 1.6-3.1 3.4-4.3 5.3L38.8 5.1zm225.8 177c6.9-3.9 14.9-6.1 23.4-6.1c26.5 0 48 21.5 48 48c0 4.4-.6 8.7-1.7 12.7l-69.7-54.6zM402 412.7L144.7 210c-9.5 8.5-22.2 14-37.2 14L96 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6l-8.2 8.2c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-31.2 23.6-52.7 50-55.7z\"],\n    \"minus\": [448, 512, [8211, 8722, 10134, \"subtract\"], \"f068\", \"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"],\n    \"chess\": [512, 512, [], \"f439\", \"M144 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 16L96 32c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 0 32L60.2 96C49.1 96 40 105.1 40 116.2c0 2.5 .5 4.9 1.3 7.3L73.8 208 72 208c-13.3 0-24 10.7-24 24s10.7 24 24 24l4 0L60 384l136 0L180 256l4 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-1.8 0 32.5-84.5c.9-2.3 1.3-4.8 1.3-7.3c0-11.2-9.1-20.2-20.2-20.2L144 96l0-32 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16zM48 416L4.8 473.6C1.7 477.8 0 482.8 0 488c0 13.3 10.7 24 24 24l208 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L208 416 48 416zm288 0l-43.2 57.6c-3.1 4.2-4.8 9.2-4.8 14.4c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L464 416l-128 0zM304 208l0 51.9c0 7.8 2.8 15.3 8 21.1L339.2 312 337 384l125.5 0-3.3-72 28.3-30.8c5.4-5.9 8.5-13.6 8.5-21.7l0-51.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16zm80 96c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32-32 0 0-32z\"],\n    \"arrow-left-long\": [512, 512, [\"long-arrow-left\"], \"f177\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"],\n    \"plug-circle-check\": [576, 512, [], \"e55c\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"street-view\": [512, 512, [], \"f21d\", \"M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64l0 48c0 17.7 14.3 32 32 32l1.8 0 11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5l38.7 0c16.3 0 30-12.3 31.8-28.5L318.2 304l1.8 0c17.7 0 32-14.3 32-32l0-48c0-35.3-28.7-64-64-64l-64 0zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z\"],\n    \"franc-sign\": [320, 512, [], \"e18f\", \"M80 32C62.3 32 48 46.3 48 64l0 160 0 96-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-64 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-96 176 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"],\n    \"volume-off\": [320, 512, [], \"f026\", \"M320 64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L131.8 160 64 160c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l67.8 0L266.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S320 460.6 320 448l0-384z\"],\n    \"hands-asl-interpreting\": [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7L0 256c0 70.7 57.3 128 128 128l72 0 8 0 0-.3c35.2-2.7 65.4-22.8 82.1-51.7c8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20c-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20c8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5L194.9 124.6l81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4L133.6 92.3l23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2l0-9.3c0-70.7-57.3-128-128-128l-72 0-8 0 0 .3c-35.2 2.7-65.4 22.8-82.1 51.7c-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20c22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20c-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.7-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\"],\n    \"gear\": [512, 512, [9881, \"cog\"], \"f013\", \"M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"],\n    \"droplet-slash\": [640, 512, [\"tint-slash\"], \"f5c7\", \"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"mosque\": [640, 512, [128332], \"f678\", \"M400 0c5 0 9.8 2.4 12.8 6.4c34.7 46.3 78.1 74.9 133.5 111.5c0 0 0 0 0 0s0 0 0 0c5.2 3.4 10.5 7 16 10.6c28.9 19.2 45.7 51.7 45.7 86.1c0 28.6-11.3 54.5-29.8 73.4l-356.4 0c-18.4-19-29.8-44.9-29.8-73.4c0-34.4 16.7-66.9 45.7-86.1c5.4-3.6 10.8-7.1 16-10.6c0 0 0 0 0 0s0 0 0 0C309.1 81.3 352.5 52.7 387.2 6.4c3-4 7.8-6.4 12.8-6.4zM288 512l0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-48 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l416 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-48 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-58c0-19-8.4-37-23-49.2L400 384l-25 20.8C360.4 417 352 435 352 454l0 58-64 0zM70.4 5.2c5.7-4.3 13.5-4.3 19.2 0l16 12C139.8 42.9 160 83.2 160 126l0 2L0 128l0-2C0 83.2 20.2 42.9 54.4 17.2l16-12zM0 160l160 0 0 136.6c-19.1 11.1-32 31.7-32 55.4l0 128c0 9.6 2.1 18.6 5.8 26.8c-6.6 3.4-14 5.2-21.8 5.2l-64 0c-26.5 0-48-21.5-48-48L0 176l0-16z\"],\n    \"mosquito\": [640, 512, [], \"e52b\", \"M463.7 505.9c9.8-8.9 10.7-24.3 2.1-34.3l-42.1-49 0-54.7c0-5.5-1.8-10.8-5.1-15.1L352 266.3l0-.3L485.4 387.8C542.4 447.6 640 405.2 640 320.6c0-47.9-34-88.3-79.4-94.2l-153-23.9 40.8-40.9c7.8-7.8 9.4-20.1 3.9-29.8L428.5 90.1l38.2-50.9c8-10.6 6.1-25.9-4.3-34.1s-25.2-6.3-33.2 4.4l-48 63.9c-5.9 7.9-6.6 18.6-1.7 27.2L402.2 140 352 190.3l0-38.2c0-14.9-10.2-27.4-24-31l0-57.2c0-4.4-3.6-8-8-8s-8 3.6-8 8l0 57.2c-13.8 3.6-24 16.1-24 31l0 38.1L237.8 140l22.6-39.5c4.9-8.6 4.2-19.3-1.7-27.2l-48-63.9c-8-10.6-22.8-12.6-33.2-4.4s-12.2 23.5-4.3 34.1l38.2 50.9-23.9 41.7c-5.5 9.7-3.9 22 3.9 29.8l40.8 40.9-153 23.9C34 232.3 0 272.7 0 320.6c0 84.6 97.6 127 154.6 67.1L288 266l0 .3-66.5 86.4c-3.3 4.3-5.1 9.6-5.1 15.1l0 54.7-42.1 49c-8.6 10.1-7.7 25.5 2.1 34.3s24.7 7.9 33.4-2.1l48-55.9c3.8-4.4 5.9-10.2 5.9-16.1l0-55.4L288 344.7l0 63.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-63.1 24.3 31.6 0 55.4c0 5.9 2.1 11.7 5.9 16.1l48 55.9c8.6 10.1 23.6 11 33.4 2.1z\"],\n    \"star-of-david\": [512, 512, [10017], \"f69a\", \"M404.2 309.5L383.1 344l42.3 0-21.1-34.5zM371.4 256l-54-88-122.8 0-54 88 54 88 122.8 0 54-88zm65.7 0l53.4 87c3.6 5.9 5.5 12.7 5.5 19.6c0 20.7-16.8 37.4-37.4 37.4l-109.8 0-56.2 91.5C284.8 504.3 270.9 512 256 512s-28.8-7.7-36.6-20.5L163.3 400 53.4 400C32.8 400 16 383.2 16 362.6c0-6.9 1.9-13.7 5.5-19.6l53.4-87L21.5 169c-3.6-5.9-5.5-12.7-5.5-19.6C16 128.8 32.8 112 53.4 112l109.8 0 56.2-91.5C227.2 7.7 241.1 0 256 0s28.8 7.7 36.6 20.5L348.7 112l109.8 0c20.7 0 37.4 16.8 37.4 37.4c0 6.9-1.9 13.7-5.5 19.6l-53.4 87zm-54-88l21.1 34.5L425.4 168l-42.3 0zM283 112L256 68l-27 44 54 0zM128.9 168l-42.3 0 21.1 34.5L128.9 168zM107.8 309.5L86.6 344l42.3 0-21.1-34.5zM229 400l27 44 27-44-54 0z\"],\n    \"person-military-rifle\": [512, 512, [], \"e54b\", \"M160 39c0-13 10-23.8 22.9-24.9L334.7 1.4C344 .7 352 8 352 17.4L352 48c0 8.8-7.2 16-16 16L185 64c-13.8 0-25-11.2-25-25zm17.6 57l156.8 0c1 5.2 1.6 10.5 1.6 16c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L352 369.7 352 480c0 1.3-.1 2.5-.2 3.8L177.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9l50.4 0c15.9 0 31.3 2.8 45.8 7.9L421.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l13.9 8 13.9 8c7.7 4.4 10.3 14.2 5.9 21.9L416 173.9l1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L392.6 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM320 512l-128 0c-17.7 0-32-14.3-32-32l0-110.3-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8l76.1-128.8c9.4-15.8 21.7-29.3 36-40L331.1 510c-3.5 1.3-7.2 2-11.1 2zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"cart-shopping\": [576, 512, [128722, \"shopping-cart\"], \"f07a\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"vials\": [512, 512, [], \"f493\", \"M0 64C0 46.3 14.3 32 32 32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80L32 96C14.3 96 0 81.7 0 64zM136 96L88 96l0 160 48 0 0-160zM288 64c0-17.7 14.3-32 32-32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-304c-17.7 0-32-14.3-32-32zM424 96l-48 0 0 160 48 0 0-160z\"],\n    \"plug-circle-plus\": [576, 512, [], \"e55f\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"place-of-worship\": [640, 512, [], \"f67f\", \"M224 109.3l0 108.3L183.3 242c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-228.8c0-16.9-8.8-32.5-23.3-41.2L416 217.6l0-108.3c0-8.5-3.4-16.6-9.4-22.6L331.3 11.3c-6.2-6.2-16.4-6.2-22.6 0L233.4 86.6c-6 6-9.4 14.1-9.4 22.6zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"],\n    \"grip-vertical\": [320, 512, [], \"f58e\", \"M40 352l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm192 0l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 320c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 192l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 160c-22.1 0-40-17.9-40-40L0 72C0 49.9 17.9 32 40 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40z\"],\n    \"hexagon-nodes\": [448, 512, [], \"e699\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56s56-25.1 56-56c0-22.3-13.1-41.6-32-50.6l0-98.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-1.6 20.8 8.6 41.6 27.8 52.8c26.8 15.5 61 6.3 76.5-20.5s6.3-61-20.5-76.5c-1.3-.8-2.7-1.5-4-2.1l0-90.8c1.4-.6 2.7-1.3 4-2.1c26.8-15.5 36-49.7 20.5-76.5S390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c2.6 1.8 5.2 3.3 8 4.7l0 90.8c-2.8 1.3-5.5 2.9-8 4.6l-80.1-45.8c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8z\"],\n    \"arrow-turn-up\": [384, 512, [\"level-up\"], \"f148\", \"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\"],\n    \"u\": [384, 512, [117], \"55\", \"M32 32c17.7 0 32 14.3 32 32l0 224c0 70.7 57.3 128 128 128s128-57.3 128-128l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 224c0 106-86 192-192 192S0 394 0 288L0 64C0 46.3 14.3 32 32 32z\"],\n    \"square-root-variable\": [576, 512, [\"square-root-alt\"], \"f698\", \"M282.6 78.1c8-27.3 33-46.1 61.4-46.1l200 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L344 96 238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l45.6 0c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8L282.6 78.1zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0L480 274.7l41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 320l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 365.3l-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 320l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"],\n    \"backward-step\": [320, 512, [\"step-backward\"], \"f048\", \"M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241 64 96c0-17.7-14.3-32-32-32S0 78.3 0 96L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-145 11.5 9.6 192 160z\"],\n    \"pallet\": [640, 512, [], \"f482\", \"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 64-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 224 0 224 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-64 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-224 0L96 320l-64 0zm96 64l160 0 0 64-160 0 0-64zm224 0l160 0 0 64-160 0 0-64z\"],\n    \"faucet\": [512, 512, [], \"e005\", \"M192 96l0 12L96 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l96-12 31-3.9 1-.1 1 .1 31 3.9 96 12c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 12 0-12c0-17.7-14.3-32-32-32s-32 14.3-32 32zM32 256c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l100.1 0c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48l36.1 0c17.7 0 32 14.3 32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32c0-88.4-71.6-160-160-160l-32 0-22.6-22.6c-6-6-14.1-9.4-22.6-9.4L256 224l0-43.8-32-4-32 4 0 43.8-18.7 0c-8.5 0-16.6 3.4-22.6 9.4L128 256l-96 0z\"],\n    \"baseball-bat-ball\": [512, 512, [], \"f432\", \"M424 0c-12.4 0-24.2 4.9-33 13.7L233.5 171.2c-10.5 10.5-19.8 22.1-27.7 34.6L132.7 321.6c-7.3 11.5-15.8 22.2-25.5 31.9L69.9 390.7l51.3 51.3 37.3-37.3c9.6-9.6 20.3-18.2 31.9-25.5l115.8-73.1c12.5-7.9 24.1-17.2 34.6-27.7L498.3 121c8.7-8.7 13.7-20.6 13.7-33s-4.9-24.2-13.7-33L457 13.7C448.2 4.9 436.4 0 424 0zm88 432a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM15 399c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L49 399c-9.4-9.4-24.6-9.4-33.9 0z\"],\n    \"s\": [320, 512, [115], \"53\", \"M99.1 105.4C79 114 68.2 127.2 65.2 144.8c-2.4 14.1-.7 23.2 2 29.4c2.8 6.3 7.9 12.4 16.7 18.6c19.2 13.4 48.3 22.1 84.9 32.5c1 .3 1.9 .6 2.9 .8c32.7 9.3 72 20.6 100.9 40.7c15.7 10.9 29.9 25.5 38.6 45.1c8.8 19.8 10.8 42 6.6 66.3c-7.3 42.5-35.3 71.7-71.8 87.3c-35.4 15.2-79.1 17.9-123.7 10.9l-.2 0s0 0 0 0c-24-3.9-62.7-17.1-87.6-25.6c-4.8-1.7-9.2-3.1-12.8-4.3C5.1 440.8-3.9 422.7 1.6 405.9s23.7-25.8 40.5-20.3c4.9 1.6 10.2 3.4 15.9 5.4c25.4 8.6 56.4 19.2 74.4 22.1c36.8 5.7 67.5 2.5 88.5-6.5c20.1-8.6 30.8-21.8 33.9-39.4c2.4-14.1 .7-23.2-2-29.4c-2.8-6.3-7.9-12.4-16.7-18.6c-19.2-13.4-48.3-22.1-84.9-32.5c-1-.3-1.9-.6-2.9-.8c-32.7-9.3-72-20.6-100.9-40.7c-15.7-10.9-29.9-25.5-38.6-45.1c-8.8-19.8-10.8-42-6.6-66.3l31.5 5.5L2.1 133.9C9.4 91.4 37.4 62.2 73.9 46.6c35.4-15.2 79.1-17.9 123.7-10.9c13 2 52.4 9.6 66.6 13.4c17.1 4.5 27.2 22.1 22.7 39.2s-22.1 27.2-39.2 22.7c-11.2-3-48.1-10.2-60.1-12l4.9-31.5-4.9 31.5c-36.9-5.8-67.5-2.5-88.6 6.5z\"],\n    \"timeline\": [640, 512, [], \"e29c\", \"M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32 97.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3L96 224l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0 54.7c-28.3 12.3-48 40.5-48 73.3c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-54.7 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-54.7c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3l0 54.7-320 0 0-54.7zM488 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM320 392a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm16 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM160 336c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32zM272 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM256 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM368 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM464 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"],\n    \"caret-down\": [320, 512, [], \"f0d7\", \"M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\"],\n    \"house-chimney-medical\": [576, 512, [\"clinic-medical\"], \"f7f2\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM272 192c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0z\"],\n    \"temperature-three-quarters\": [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 144c0-8.8 7.2-16 16-16s16 7.2 16 16l0 178.7c18.6 6.6 32 24.4 32 45.3z\"],\n    \"mobile-screen\": [384, 512, [\"mobile-android-alt\"], \"f3cf\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM144 448c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zM304 64L80 64l0 320 224 0 0-320z\"],\n    \"plane-up\": [512, 512, [], \"e22d\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 66.3L497.8 278.5c8.9 5.9 14.2 15.9 14.2 26.6l0 56.7c0 10.9-10.7 18.6-21.1 15.2L320 320l0 80 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 42c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-80L21.1 377C10.7 380.4 0 372.7 0 361.8l0-56.7c0-10.7 5.3-20.7 14.2-26.6L192 160l0-66.3z\"],\n    \"piggy-bank\": [576, 512, [], \"f4d3\", \"M400 96l0 .7c-5.3-.4-10.6-.7-16-.7L256 96c-16.5 0-32.5 2.1-47.8 6c-.1-2-.2-4-.2-6c0-53 43-96 96-96s96 43 96 96zm-16 32c3.5 0 7 .1 10.4 .3c4.2 .3 8.4 .7 12.6 1.3C424.6 109.1 450.8 96 480 96l11.5 0c10.4 0 18 9.8 15.5 19.9l-13.8 55.2c15.8 14.8 28.7 32.8 37.5 52.9l13.3 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-32 0c-9.1 12.1-19.9 22.9-32 32l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-128 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c-34.9-26.2-58.7-66.3-63.2-112L68 304c-37.6 0-68-30.4-68-68s30.4-68 68-68l4 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-4 0c-11 0-20 9-20 20s9 20 20 20l31.2 0c12.1-59.8 57.7-107.5 116.3-122.8c12.9-3.4 26.5-5.2 40.5-5.2l128 0zm64 136a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"],\n    \"battery-half\": [576, 512, [\"battery-3\"], \"f242\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm208 96L96 192l0 128 192 0 0-128z\"],\n    \"mountain-city\": [640, 512, [], \"e52e\", \"M336 0c-26.5 0-48 21.5-48 48l0 92.1 71.4 118.4c2.5-1.6 5.4-2.5 8.6-2.5l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-3.5 0 73.8 122.4c12.4 20.6 12.9 46.3 1.2 67.3c-.4 .8-.9 1.6-1.4 2.3L592 512c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-24 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-40 0 0-144c0-26.5-21.5-48-48-48L336 0zm32 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm160 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM224 188.9L283.8 288 223 288l-48 64-24.6-41.2L224 188.9zm29.4-44.2C247.1 134.3 236 128 224 128s-23.1 6.3-29.4 16.7L5.1 458.9c-6.5 10.8-6.7 24.3-.7 35.3S22 512 34.5 512l379.1 0c12.5 0 24-6.8 30.1-17.8s5.8-24.5-.7-35.3L253.4 144.7z\"],\n    \"coins\": [512, 512, [], \"f51e\", \"M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2c0 0 0 0 0 0s0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4l0 3.4 0 5.7 0 26.3zm32 0l0-32 0-25.9c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 44.2-86 80-192 80S0 476.2 0 432l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z\"],\n    \"khanda\": [512, 512, [9772], \"f66d\", \"M245.8 3.7c5.9-4.9 14.6-4.9 20.5 0l48 40c5.9 4.9 7.5 13.2 3.8 19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l-.1 .1-.3 .6c-.3 .5-.7 1.3-1.2 2.3c-1 2-2.6 5-4.4 8.6c-.5 .9-.9 1.9-1.4 2.9C344.9 97.4 368 134 368 176s-23.1 78.6-57.3 97.8c.5 1 1 2 1.4 2.9c1.8 3.7 3.3 6.6 4.4 8.6c.5 1 .9 1.8 1.2 2.3l.3 .6 .1 .1s0 0 0 0s0 0 0 0c3.6 6.7 2 15-3.8 19.9L272 343.5l0 19.8 35.6-24.5 41.1-28.2c42.8-29.4 68.4-78 68.4-130c0-31.1-9.2-61.6-26.5-87.5l-2.8-4.2c-4-6-3.5-14 1.3-19.5s12.7-7 19.2-3.7L401.1 80c7.2-14.3 7.2-14.3 7.2-14.3s0 0 0 0s0 0 0 0l.1 0 .3 .2 1 .5c.8 .4 2 1.1 3.5 1.9c2.9 1.7 7 4.1 11.8 7.3c9.6 6.4 22.5 16.1 35.4 29c25.7 25.7 52.7 65.6 52.7 119.3c0 53.1-26.4 100.5-51.2 133.6c-12.6 16.7-25.1 30.3-34.5 39.7c-4.7 4.7-8.7 8.4-11.5 10.9c-1.4 1.3-2.5 2.2-3.3 2.9l-.9 .8-.3 .2-.1 .1c0 0 0 0 0 0s0 0 0 0L401.1 400l10.2 12.3c-5.1 4.3-12.4 4.9-18.2 1.6l-75.6-43-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21L272 423.4l0 28.9c9.6 5.5 16 15.9 16 27.7c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7l0-28.1-40.3 27.7C197.8 463.3 187.9 472 176 472c-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-75.6 43c-5.8 3.3-13 2.7-18.2-1.6L112 400c-10.2 12.3-10.2 12.3-10.3 12.3s0 0 0 0s0 0 0 0l-.1-.1-.3-.2-.9-.8c-.8-.7-1.9-1.7-3.3-2.9c-2.8-2.5-6.7-6.2-11.5-10.9c-9.4-9.4-21.9-23-34.5-39.7C26.4 324.5 0 277.1 0 224c0-53.7 26.9-93.6 52.7-119.3c12.9-12.9 25.8-22.6 35.4-29C93 72.5 97 70 99.9 68.4c1.5-.8 2.6-1.5 3.5-1.9l1-.5 .3-.2 .1 0c0 0 0 0 0 0s0 0 0 0L112 80l-7.2-14.3c6.5-3.2 14.3-1.7 19.2 3.7s5.3 13.4 1.3 19.5l-2.8 4.2C105.2 119 96 149.5 96 180.6c0 51.9 25.6 100.6 68.4 130l41.1 28.2L240 362.6l0-19.1-42.2-35.2c-5.9-4.9-7.5-13.2-3.8-19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1-.1 .3-.6c.3-.5 .7-1.3 1.2-2.3c1-2 2.6-5 4.4-8.6c.5-.9 .9-1.9 1.4-2.9C167.1 254.6 144 218 144 176s23.1-78.6 57.3-97.8c-.5-1-1-2-1.4-2.9c-1.8-3.7-3.3-6.6-4.4-8.6c-.5-1-.9-1.8-1.2-2.3l-.3-.6-.1-.1s0 0 0 0s0 0 0 0s0 0 0 0c-3.6-6.7-2-15 3.8-19.9l48-40zM220.2 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1C227 210.2 232 190.9 232 176s-5-34.2-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1C285 141.8 280 161.1 280 176s5 34.2 11.8 53.1z\"],\n    \"sliders\": [512, 512, [\"sliders-h\"], \"f1de\", \"M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z\"],\n    \"folder-tree\": [576, 512, [], \"f802\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32l0 96L0 384c0 35.3 28.7 64 64 64l192 0 0-64L64 384l0-224 192 0 0-64L64 96l0-64zM288 192c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4L320 0c-17.7 0-32 14.3-32 32l0 160zm0 288c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4L320 288c-17.7 0-32 14.3-32 32l0 160z\"],\n    \"network-wired\": [640, 512, [], \"f6ff\", \"M256 64l128 0 0 64-128 0 0-64zM240 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l48 0 0 32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 256 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-256 0 0-32 48 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48L240 0zM96 448l0-64 128 0 0 64L96 448zm320-64l128 0 0 64-128 0 0-64z\"],\n    \"map-pin\": [320, 512, [128205], \"f276\", \"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480l0-162.9c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9L192 480c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"],\n    \"hamsa\": [512, 512, [], \"f665\", \"M34.6 288L80 288c8.8 0 16-7.2 16-16L96 72c0-22.1 17.9-40 40-40s40 17.9 40 40l0 132c0 11 9 20 20 20s20-9 20-20l0-164c0-22.1 17.9-40 40-40s40 17.9 40 40l0 164c0 11 9 20 20 20s20-9 20-20l0-132c0-22.1 17.9-40 40-40s40 17.9 40 40l0 200c0 8.8 7.2 16 16 16l45.4 0c19.1 0 34.6 15.5 34.6 34.6c0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71s-119.4-25.8-160.6-71L9 345.9c-5.8-6.4-9-14.7-9-23.3C0 303.5 15.5 288 34.6 288zM256 288c-38.4 0-76.8 35.8-90.6 50.2c-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"cent-sign\": [384, 512, [], \"e3f5\", \"M224 0c17.7 0 32 14.3 32 32l0 34.7c30.9 5.2 59.2 17.7 83.2 35.8c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4C279.4 137.5 252.9 128 224 128c-70.7 0-128 57.3-128 128s57.3 128 128 128c28.9 0 55.4-9.5 76.8-25.6c14.1-10.6 34.2-7.8 44.8 6.4s7.8 34.2-6.4 44.8c-24 18-52.4 30.6-83.2 35.8l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C101.2 430.1 32 351.1 32 256s69.2-174.1 160-189.3L192 32c0-17.7 14.3-32 32-32z\"],\n    \"flask\": [448, 512, [], \"f0c3\", \"M288 0L160 0 128 0C110.3 0 96 14.3 96 32s14.3 32 32 32l0 132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512l309.2 0c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5L320 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L288 0zM192 196.8L192 64l64 0 0 132.8c0 23.7 6.6 46.9 19 67.1L309.5 320l-171 0L173 263.9c12.4-20.2 19-43.4 19-67.1z\"],\n    \"person-pregnant\": [384, 512, [], \"e31e\", \"M192 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM120 383c-13.8-3.6-24-16.1-24-31l0-55.1-4.6 7.6c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c15-24.9 40.3-41.5 68.7-45.6c4.1-.6 8.2-1 12.5-1l1.1 0 12.5 0 2.4 0c1.4 0 2.8 .1 4.1 .3c35.7 2.9 65.4 29.3 72.1 65l6.1 32.5c44.3 8.6 77.7 47.5 77.7 94.3l0 32c0 17.7-14.3 32-32 32l-16 0-40 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-8 0-8 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-97z\"],\n    \"wand-sparkles\": [512, 512, [], \"f72b\", \"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7l0 21.4c0 8.8-7.2 16-16 16l-15.8 0c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9C94.3 508 85.3 512 75.8 512c-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7C3.5 453.4 0 445 0 436.2c0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9l0-27.6c0-8.8 7.2-16 16-16l34.6 0c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8L87.7 218.2c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8L72.3 69.8c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\"],\n    \"ellipsis-vertical\": [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z\"],\n    \"ticket\": [576, 512, [127903], \"f145\", \"M64 64C28.7 64 0 92.7 0 128l0 64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zm64 112l0 160c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16l-288 0c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32l320 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-320 0c-17.7 0-32-14.3-32-32l0-192z\"],\n    \"power-off\": [512, 512, [9211], \"f011\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224zM143.5 120.6c13.6-11.3 15.4-31.5 4.1-45.1s-31.5-15.4-45.1-4.1C49.7 115.4 16 181.8 16 256c0 132.5 107.5 240 240 240s240-107.5 240-240c0-74.2-33.8-140.6-86.6-184.6c-13.6-11.3-33.8-9.4-45.1 4.1s-9.4 33.8 4.1 45.1c38.9 32.3 63.5 81 63.5 135.4c0 97.2-78.8 176-176 176s-176-78.8-176-176c0-54.4 24.7-103.1 63.5-135.4z\"],\n    \"right-long\": [512, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M334.5 414c8.8 3.8 19 2 26-4.6l144-136c4.8-4.5 7.5-10.8 7.5-17.4s-2.7-12.9-7.5-17.4l-144-136c-7-6.6-17.2-8.4-26-4.6s-14.5 12.5-14.5 22l0 72L32 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l288 0 0 72c0 9.6 5.7 18.2 14.5 22z\"],\n    \"flag-usa\": [448, 512, [], \"f74d\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 36.1-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9l0 32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 136.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 203.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 232.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 299.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 328.3l0 33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-70.5 0-32.7 0-63.3 0-32.7 0-63.3 0-32.7L0 64 0 32C0 14.3 14.3 0 32 0zm80 96A16 16 0 1 0 80 96a16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"laptop-file\": [640, 512, [], \"e51d\", \"M128 0C92.7 0 64 28.7 64 64l0 224-44.8 0C8.6 288 0 296.6 0 307.2C0 349.6 34.4 384 76.8 384L320 384l0-96-192 0 0-224 320 0 0 32 64 0 0-32c0-35.3-28.7-64-64-64L128 0zM512 128l-112 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-208-96 0c-17.7 0-32-14.3-32-32l0-96zm32 0l0 96 96 0-96-96z\"],\n    \"tty\": [512, 512, [\"teletype\"], \"f1e4\", \"M38.3 241.3L15.1 200.6c-9.2-16.2-8.4-36.5 4.5-50C61.4 106.8 144.7 48 256 48s194.6 58.8 236.4 102.6c12.9 13.5 13.7 33.8 4.5 50l-23.1 40.7c-7.5 13.2-23.3 19.3-37.8 14.6l-81.1-26.6c-13.1-4.3-22-16.6-22-30.4l0-54.8c-49.6-18.1-104-18.1-153.6 0l0 54.8c0 13.8-8.9 26.1-22 30.4L76.1 255.8c-14.5 4.7-30.3-1.4-37.8-14.6zM32 336c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm0 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM144 320l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 432c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32z\"],\n    \"diagram-next\": [512, 512, [], \"e476\", \"M512 160c0 35.3-28.7 64-64 64l-168 0 0 64 46.1 0c21.4 0 32.1 25.9 17 41L273 399c-9.4 9.4-24.6 9.4-33.9 0L169 329c-15.1-15.1-4.4-41 17-41l46.1 0 0-64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 64zM448 416l0-64-82.7 0 .4-.4c18.4-18.4 20.4-43.7 11-63.6l71.3 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l71.3 0c-9.4 19.9-7.4 45.2 11 63.6l.4 .4L64 352l0 64 146.7 0 5.7 5.7c21.9 21.9 57.3 21.9 79.2 0l5.7-5.7L448 416z\"],\n    \"person-rifle\": [576, 512, [], \"e54e\", \"M265.2 192c25.4 0 49.8 7.1 70.8 19.9L336 512l-192 0 0-174.3L90.4 428.3c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8L97.7 258.8c24.5-41.4 69-66.8 117.1-66.8l50.4 0zM160 80a80 80 0 1 1 160 0A80 80 0 1 1 160 80zM448 0c8.8 0 16 7.2 16 16l0 116.3c9.6 5.5 16 15.9 16 27.7l0 109.3 16-5.3 0-56c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 84.5c0 6.9-4.4 13-10.9 15.2L480 325.3l0 26.7 48 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-44 0 23 92.1c2.5 10.1-5.1 19.9-15.5 19.9L432 512c-8.8 0-16-7.2-16-16l0-96-16 0c-17.7 0-32-14.3-32-32l0-144c0-17.7 14.3-32 32-32l0-32c0-11.8 6.4-22.2 16-27.7L416 32c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 16 0z\"],\n    \"house-medical-circle-exclamation\": [640, 512, [], \"e512\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"],\n    \"person-hiking\": [384, 512, [\"hiking\"], \"f6ec\", \"M192 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm51.3 182.7L224.2 307l49.7 49.7c9 9 14.1 21.2 14.1 33.9l0 89.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7-73.9-73.9c-15.8-15.8-22.2-38.6-16.9-60.3l20.4-84c8.3-34.1 42.7-54.9 76.7-46.4c19 4.8 35.6 16.4 46.4 32.7L305.1 208l30.9 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 55.8c0 .1 0 .2 0 .2s0 .2 0 .2L384 488c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-216-39.4 0c-16 0-31-8-39.9-21.4l-13.3-20zM81.1 471.9L117.3 334c3 4.2 6.4 8.2 10.1 11.9l41.9 41.9L142.9 488.1c-4.5 17.1-22 27.3-39.1 22.8s-27.3-22-22.8-39.1zm55.5-346L101.4 266.5c-3 12.1-14.9 19.9-27.2 17.9l-47.9-8c-14-2.3-22.9-16.3-19.2-30L31.9 155c9.5-34.8 41.1-59 77.2-59l4.2 0c15.6 0 27.1 14.7 23.3 29.8z\"],\n    \"venus-double\": [640, 512, [9890], \"f226\", \"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C78.1 334.1 16 262.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176zM344 318c14.6-15.6 26.8-33.4 36-53c18.8 14.4 42.4 23 68 23c61.9 0 112-50.1 112-112s-50.1-112-112-112c-25.6 0-49.1 8.6-68 23c-9.3-19.5-21.5-37.4-36-53C373.1 12.6 409.1 0 448 0c97.2 0 176 78.8 176 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9c-26.6-4.9-51.1-15.7-72-31.1z\"],\n    \"images\": [576, 512, [], \"f302\", \"M160 32c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32zM396 138.7l96 144c4.9 7.4 5.4 16.8 1.2 24.6S480.9 320 472 320l-144 0-48 0-80 0c-9.2 0-17.6-5.3-21.6-13.6s-2.9-18.2 2.9-25.4l64-80c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l17.3 21.6 56-84C360.5 132 368 128 376 128s15.5 4 20 10.7zM192 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 344c0 75.1 60.9 136 136 136l320 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-320 0c-48.6 0-88-39.4-88-88l0-224z\"],\n    \"calculator\": [384, 512, [128425], \"f1ec\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM96 64l192 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32zm32 160a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM96 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM64 416c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zM192 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm64-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 448a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"],\n    \"people-pulling\": [576, 512, [], \"e535\", \"M80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64L0 320c0 17.7 14.3 32 32 32c9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8L123.1 352l15.7 0 30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7c8.6 3.6 18 3.1 25.9-.7c3.4-1.6 6.6-3.9 9.3-6.7c3.1-3.2 5.5-7 7.1-11.4c.1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L537 232.7l-15.3-36.8C504.5 154.8 464.3 128 419.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128l-53 0zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\"],\n    \"n\": [384, 512, [110], \"4e\", \"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6 320 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 384c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 50.5 8.4 38.5 21.1 33.9z\"],\n    \"cable-car\": [512, 512, [128673, 57551, \"tram\"], \"f7da\", \"M288 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 56a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64l136 0 0-66.5-203.1 42c-13 2.7-25.7-5.7-28.4-18.6s5.7-25.7 18.6-28.4l232-48 232-48c13-2.7 25.7 5.7 28.4 18.6s-5.7 25.7-18.6 28.4L280 147.5l0 76.5 136 0c35.3 0 64 28.7 64 64l0 160c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-160zm64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0zm112 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0z\"],\n    \"cloud-rain\": [512, 512, [127783, 9926], \"f73d\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zm-6.8 52c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L89.2 372zm160 0c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L249.2 372zm124.9 64.6L409.2 372c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3z\"],\n    \"building-circle-xmark\": [640, 512, [], \"e4d4\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"ship\": [576, 512, [128674], \"f21a\", \"M192 32c0-17.7 14.3-32 32-32L352 0c17.7 0 32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 128 44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240l0-128c0-26.5 21.5-48 48-48l48 0 0-32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7l0-90.7-256 0 0 90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"arrows-down-to-line\": [576, 512, [], \"e4b8\", \"M544 416L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zm22.6-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L480 274.7 480 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96zm-320-45.3c-12.5-12.5-32.8-12.5-45.3 0L160 274.7 160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7L54.6 233.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3z\"],\n    \"download\": [512, 512, [], \"f019\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 242.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7 288 32zM64 352c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-101.5 0-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352 64 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"delete-left\": [576, 512, [9003, \"backspace\"], \"f55a\", \"M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"eye-dropper\": [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480l42.4 0c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7L96 416l0-36.1c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z\"],\n    \"file-circle-check\": [576, 512, [], \"e5a0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"forward\": [512, 512, [9193], \"f04e\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3l0 41.7 0 41.7L52.5 440.6zM256 352l0-96 0-128 0-32c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29l0-64z\"],\n    \"mobile\": [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zm80 432l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"align-center\": [448, 512, [], \"f037\", \"M352 64c0-17.7-14.3-32-32-32L128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32z\"],\n    \"book-skull\": [448, 512, [\"book-dead\"], \"f6b7\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM320 112c0-35.3-35.8-64-80-64s-80 28.7-80 64c0 20.9 12.6 39.5 32 51.2l0 12.8c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-12.8c19.4-11.7 32-30.3 32-51.2zM208 96a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM134.3 209.3c-8.1-3.5-17.5 .3-21 8.4s.3 17.5 8.4 21L199.4 272l-77.7 33.3c-8.1 3.5-11.9 12.9-8.4 21s12.9 11.9 21 8.4L240 289.4l105.7 45.3c8.1 3.5 17.5-.3 21-8.4s-.3-17.5-8.4-21L280.6 272l77.7-33.3c8.1-3.5 11.9-12.9 8.4-21s-12.9-11.9-21-8.4L240 254.6 134.3 209.3z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M0 96l576 0c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96zm0 32L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-288L0 128zM64 405.3c0-29.5 23.9-53.3 53.3-53.3l117.3 0c29.5 0 53.3 23.9 53.3 53.3c0 5.9-4.8 10.7-10.7 10.7L74.7 416c-5.9 0-10.7-4.8-10.7-10.7zM176 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm176 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"],\n    \"outdent\": [448, 512, [\"dedent\"], \"f03b\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM.2 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6l0 158.6c0 13.3-15.3 20.8-25.8 12.6L.2 268.6z\"],\n    \"heart-circle-exclamation\": [576, 512, [], \"e4fe\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"house\": [576, 512, [127968, 63498, 63500, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z\"],\n    \"calendar-week\": [448, 512, [], \"f784\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16L80 256z\"],\n    \"laptop-medical\": [640, 512, [], \"f812\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"b\": [320, 512, [98], \"42\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l128 0c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128L64 32zm96 192l-96 0L64 96l96 0c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288l96 0 32 0c35.3 0 64 28.7 64 64s-28.7 64-64 64L64 416l0-128z\"],\n    \"file-medical\": [384, 512, [], \"f477\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM160 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"dice-one\": [448, 512, [9856], \"f525\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"kiwi-bird\": [576, 512, [], \"f535\", \"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4l55.7 0c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1s11.2-8.3 11.2-15.3l0-240c0-70.7-57.3-128-128-128l-55.7 0c-36.4 0-69.9-17.6-101.1-36.4C262.3 42.1 228.3 32 192 32C86 32 0 118 0 224c0 71.1 38.6 133.1 96 166.3L96 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-46c15.3 3.9 31.4 6 48 6c5.4 0 10.7-.2 16-.7l0 40.7c0 13.3 10.7 24 24 24s24-10.7 24-24l0-50.9c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"arrow-right-arrow-left\": [448, 512, [8644, \"exchange\"], \"f0ec\", \"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\"],\n    \"rotate-right\": [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z\"],\n    \"utensils\": [448, 512, [127860, 61685, \"cutlery\"], \"f2e7\", \"M416 0C400 0 288 32 288 176l0 112c0 35.3 28.7 64 64 64l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 0-112 0-208c0-17.7-14.3-32-32-32zM64 16C64 7.8 57.9 1 49.7 .1S34.2 4.6 32.4 12.5L2.1 148.8C.7 155.1 0 161.5 0 167.9c0 45.9 35.1 83.6 80 87.7L80 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224.4c44.9-4.1 80-41.8 80-87.7c0-6.4-.7-12.8-2.1-19.1L191.6 12.5c-1.8-8-9.3-13.3-17.4-12.4S160 7.8 160 16l0 134.2c0 5.4-4.4 9.8-9.8 9.8c-5.1 0-9.3-3.9-9.8-9L127.9 14.6C127.2 6.3 120.3 0 112 0s-15.2 6.3-15.9 14.6L83.7 151c-.5 5.1-4.7 9-9.8 9c-5.4 0-9.8-4.4-9.8-9.8L64 16zm48.3 152l-.3 0-.3 0 .3-.7 .3 .7z\"],\n    \"arrow-up-wide-short\": [576, 512, [\"sort-amount-up\"], \"f161\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"],\n    \"mill-sign\": [384, 512, [], \"e1ed\", \"M302.1 42.8c5.9-16.6-2.7-35-19.4-40.9s-35 2.7-40.9 19.4L208 116.1c-5.7 4-11.1 8.5-16 13.5C171.7 108.9 143.3 96 112 96c-19.5 0-37.8 5-53.7 13.7C52.5 101.4 42.9 96 32 96C14.3 96 0 110.3 0 128l0 80L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-26.5 21.5-48 48-48s48 21.5 48 48l0 42.5L81.9 469.2c-5.9 16.6 2.7 35 19.4 40.9s35-2.7 40.9-19.4l21.4-60C168.9 441 179.6 448 192 448c17.7 0 32-14.3 32-32l0-154.5 35.7-100c3.9-1 8.1-1.6 12.3-1.6c26.5 0 48 21.5 48 48l0 208c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-58.2-44.3-106-101.1-111.5l19.2-53.8z\"],\n    \"bowl-rice\": [512, 512, [], \"e2eb\", \"M176 56c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm24 48l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"skull\": [512, 512, [128128], \"f54c\", \"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1l0 64c0 26.5 21.5 48 48 48l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 64 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 48 0c26.5 0 48-21.5 48-48l0-64c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"tower-broadcast\": [576, 512, [\"broadcast-tower\"], \"f519\", \"M80.3 44C69.8 69.9 64 98.2 64 128s5.8 58.1 16.3 84c6.6 16.4-1.3 35-17.7 41.7s-35-1.3-41.7-17.7C7.4 202.6 0 166.1 0 128S7.4 53.4 20.9 20C27.6 3.6 46.2-4.3 62.6 2.3S86.9 27.6 80.3 44zM555.1 20C568.6 53.4 576 89.9 576 128s-7.4 74.6-20.9 108c-6.6 16.4-25.3 24.3-41.7 17.7S489.1 228.4 495.7 212c10.5-25.9 16.3-54.2 16.3-84s-5.8-58.1-16.3-84C489.1 27.6 497 9 513.4 2.3s35 1.3 41.7 17.7zM352 128c0 23.7-12.9 44.4-32 55.4L320 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-296.6c-19.1-11.1-32-31.7-32-55.4c0-35.3 28.7-64 64-64s64 28.7 64 64zM170.6 76.8C163.8 92.4 160 109.7 160 128s3.8 35.6 10.6 51.2c7.1 16.2-.3 35.1-16.5 42.1s-35.1-.3-42.1-16.5c-10.3-23.6-16-49.6-16-76.8s5.7-53.2 16-76.8c7.1-16.2 25.9-23.6 42.1-16.5s23.6 25.9 16.5 42.1zM464 51.2c10.3 23.6 16 49.6 16 76.8s-5.7 53.2-16 76.8c-7.1 16.2-25.9 23.6-42.1 16.5s-23.6-25.9-16.5-42.1c6.8-15.6 10.6-32.9 10.6-51.2s-3.8-35.6-10.6-51.2c-7.1-16.2 .3-35.1 16.5-42.1s35.1 .3 42.1 16.5z\"],\n    \"truck-pickup\": [640, 512, [128763], \"f63c\", \"M368.6 96l76.8 96L288 192l0-96 80.6 0zM224 80l0 112L64 192c-17.7 0-32 14.3-32 32l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l33.1 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l66.3 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l33.1 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c0-17.7-14.3-32-32-32l-48.6 0L418.6 56c-12.1-15.2-30.5-24-50-24L272 32c-26.5 0-48 21.5-48 48zm0 288a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm288 0a48 48 0 1 1 -96 0 48 48 0 1 1 96 0z\"],\n    \"up-long\": [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192l72 0 0 288c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-288 72 0c9.6 0 18.2-5.7 22-14.5z\"],\n    \"stop\": [384, 512, [9209], \"f04d\", \"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\"],\n    \"code-merge\": [448, 512, [], \"f387\", \"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2c0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3l0 205.3C19.7 371 0 399.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-86.6c26.7 20.1 60 32 96 32l86.7 0c12.3 28.3 40.5 48 73.3 48c44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48L208 240c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"upload\": [512, 512, [], \"f093\", \"M288 109.3L288 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-242.7-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352l128 0c0 35.3 28.7 64 64 64s64-28.7 64-64l128 0c35.3 0 64 28.7 64 64l0 32c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64l0-32c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"hurricane\": [384, 512, [], \"f751\", \"M0 208C0 104.4 75.7 18.5 174.9 2.6C184 1.2 192 8.6 192 17.9l0 63.3c0 8.4 6.5 15.3 14.7 16.5C307 112.5 384 199 384 303.4c0 103.6-75.7 189.5-174.9 205.4c-9.2 1.5-17.1-5.9-17.1-15.2l0-63.3c0-8.4-6.5-15.3-14.7-16.5C77 398.9 0 312.4 0 208zm288 48A96 96 0 1 0 96 256a96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"mound\": [576, 512, [], \"e52d\", \"M144.1 179.2C173.8 127.7 228.6 96 288 96s114.2 31.7 143.9 83.2L540.4 368c12.3 21.3-3.1 48-27.7 48H63.3c-24.6 0-40-26.6-27.7-48L144.1 179.2z\"],\n    \"toilet-portable\": [320, 512, [], \"e583\", \"M0 32L0 64l320 0 0-32c0-17.7-14.3-32-32-32L32 0C14.3 0 0 14.3 0 32zM24 96L0 96l0 24L0 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 224 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-368 0-24-24 0L24 96zM256 240l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"],\n    \"compact-disc\": [512, 512, [128191, 128192, 128440], \"f51f\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zM96 240c0-35 17.5-71.1 45.2-98.8S205 96 240 96c8.8 0 16-7.2 16-16s-7.2-16-16-16c-45.4 0-89.2 22.3-121.5 54.5S64 194.6 64 240c0 8.8 7.2 16 16 16s16-7.2 16-16z\"],\n    \"file-arrow-down\": [384, 512, [\"file-download\"], \"f56d\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 232l0 102.1 31-31c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0l-72-72c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l31 31L168 232c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"caravan\": [640, 512, [], \"f8ff\", \"M0 112C0 67.8 35.8 32 80 32l336 0c88.4 0 160 71.6 160 160l0 160 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0-288 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-44.2 0-80-35.8-80-80L0 112zM320 352l128 0 0-96-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 192zM96 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128zm96 336a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"shield-cat\": [512, 512, [], \"e572\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4l.2 0c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4l48 0c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3l.2 0c5.8 0 10.4 4.7 10.4 10.4L352 272c0 53-43 96-96 96s-96-43-96-96l0-117.6zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"bolt\": [448, 512, [9889, \"zap\"], \"f0e7\", \"M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288l111.5 0L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7l-111.5 0L349.4 44.6z\"],\n    \"glass-water\": [384, 512, [], \"e4f4\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM73 156.5L66.4 64l251.3 0L311 156.5l-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0c-20.9-10.4-45.5-10.4-66.4 0c-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\"],\n    \"oil-well\": [576, 512, [], \"e532\", \"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4L308.5 167.5l-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39L96 222.6 96 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 264-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-137.3 0L340 257.5l-62.2 16.1L305.3 352l-66.6 0L265 277l-74.6 19.3L137.3 448 96 448l0-159.2 337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l11.2-32 111.4 0 11.2 32-133.8 0z\"],\n    \"vault\": [576, 512, [], \"e2c5\", \"M64 0C28.7 0 0 28.7 0 64L0 416c0 35.3 28.7 64 64 64l16 0 16 32 64 0 16-32 224 0 16 32 64 0 16-32 16 0c35.3 0 64-28.7 64-64l0-352c0-35.3-28.7-64-64-64L64 0zM224 320a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-240a160 160 0 1 1 0 320 160 160 0 1 1 0-320zM480 221.3L480 336c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-114.7c-18.6-6.6-32-24.4-32-45.3c0-26.5 21.5-48 48-48s48 21.5 48 48c0 20.9-13.4 38.7-32 45.3z\"],\n    \"mars\": [448, 512, [9794], \"f222\", \"M289.8 46.8c3.7-9 12.5-14.8 22.2-14.8l112 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L321 204.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176S0 401.2 0 304s78.8-176 176-176c37 0 71.4 11.4 99.8 31l52.6-52.6L295 73c-6.9-6.9-8.9-17.2-5.2-26.2zM400 80s0 0 0 0s0 0 0 0s0 0 0 0zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"],\n    \"toilet\": [448, 512, [128701], \"f7d8\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 148.9c-1.9 1.4-3.8 2.9-5.6 4.4C10.9 214.5 0 232.9 0 256c0 46.9 14.3 84.1 37 112.5c14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l256 0c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8c22.7-28.4 37-65.5 37-112.5c0-23.1-10.9-41.5-26.4-54.6c-1.8-1.5-3.7-3-5.6-4.4L416 48l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 0zM384 256.3c0 1-.3 2.6-3.8 5.6c-4.8 4.1-14 9-29.3 13.4C320.5 284 276.1 288 224 288s-96.5-4-126.9-12.8c-15.3-4.4-24.5-9.3-29.3-13.4c-3.5-3-3.8-4.6-3.8-5.6l0-.3c0 0 0-.1 0-.1c0-1 0-2.5 3.8-5.8c4.8-4.1 14-9 29.3-13.4C127.5 228 171.9 224 224 224s96.5 4 126.9 12.8c15.3 4.4 24.5 9.3 29.3 13.4c3.8 3.2 3.8 4.8 3.8 5.8c0 0 0 .1 0 .1l0 .3zM328.2 384l-.2 .5 0-.5 .2 0zM112 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"plane-circle-xmark\": [640, 512, [], \"e557\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"yen-sign\": [320, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M58.6 46.3C48.8 31.5 29 27.6 14.2 37.4S-4.4 67 5.4 81.8L100.2 224 48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 32-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-32 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.2 0L314.6 81.8c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L160 198.3 58.6 46.3z\"],\n    \"ruble-sign\": [384, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M96 32C78.3 32 64 46.3 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-32 112 0c79.5 0 144-64.5 144-144s-64.5-144-144-144L96 32zM240 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"],\n    \"guitar\": [512, 512, [], \"f7a6\", \"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6c-11 11-18 24.6-21.4 39.6c-3.7 16.6-19.1 30.7-36.1 31.6c-25.6 1.3-49.3 10.7-67.3 28.6C-16 328.4-7.6 409.4 47.5 464.5s136.1 63.5 180.9 18.7c17.9-17.9 27.4-41.7 28.6-67.3c.9-17 15-32.3 31.6-36.1c15-3.4 28.6-10.5 39.6-21.4c31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"],\n    \"horse-head\": [640, 512, [], \"f7ab\", \"M64 464l0-147.1c0-108.4 68.3-205.1 170.5-241.3L404.2 15.5C425.6 7.9 448 23.8 448 46.4c0 11-5.5 21.2-14.6 27.3L400 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5c-16 16-37.8 25.1-60.5 25.1l-3.4 0c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4c0 0 0 0-.1 0c0 0 0 0 0 0c-6.3 0-12.5-.5-18.6-1.5c-3.6-.6-7.2-1.4-10.7-2.3c0 0 0 0 0 0c-28.9-7.8-53.1-26.8-67.8-52.2c-4.4-7.6-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4c0 20.3-16.5 36.8-36.8 36.8L112 512c-26.5 0-48-21.5-48-48zM392 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"],\n    \"bore-hole\": [512, 512, [], \"e4c3\", \"M256 0c-17.7 0-32 14.3-32 32l0 264.6c-19.1 11.1-32 31.7-32 55.4c0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4L288 32c0-17.7-14.3-32-32-32zM48 128c-26.5 0-48 21.5-48 48L0 464c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-80 0c-17.7 0-32 14.3-32 32l0 192c0 53-43 96-96 96s-96-43-96-96l0-192c0-17.7-14.3-32-32-32l-80 0z\"],\n    \"industry\": [576, 512, [], \"f275\", \"M64 32C46.3 32 32 46.3 32 64l0 240 0 48 0 80c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-128 0-151.8c0-18.2-19.4-29.7-35.4-21.1L352 215.4l0-63.2c0-18.2-19.4-29.7-35.4-21.1L160 215.4 160 64c0-17.7-14.3-32-32-32L64 32z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM244.7 395.3l-112-112c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l64 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 64 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-112 112c-6.2 6.2-16.4 6.2-22.6 0z\"],\n    \"arrows-turn-to-dots\": [512, 512, [], \"e4c1\", \"M249.4 25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L269.3 96 416 96c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7-14.3-32-32-32l-146.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm13.3 256l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM384 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192A64 64 0 1 1 64 64a64 64 0 1 1 0 128z\"],\n    \"florin-sign\": [384, 512, [], \"e184\", \"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224 64 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0L98.9 396.3c-5 11.9-16.6 19.7-29.5 19.7L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l37.3 0c38.8 0 73.7-23.3 88.6-59.1L213.3 288 320 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 45.1-108.3c5-11.9 16.6-19.7 29.5-19.7L352 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-37.3 0z\"],\n    \"arrow-down-short-wide\": [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"less-than\": [384, 512, [62774], \"3c\", \"M380.6 81.7c7.9 15.8 1.5 35-14.3 42.9L103.6 256 366.3 387.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-320-160C6.8 279.2 0 268.1 0 256s6.8-23.2 17.7-28.6l320-160c15.8-7.9 35-1.5 42.9 14.3z\"],\n    \"angle-down\": [448, 512, [8964], \"f107\", \"M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"],\n    \"car-tunnel\": [512, 512, [], \"e4de\", \"M256 0C114.6 0 0 114.6 0 256L0 448c0 35.3 28.7 64 64 64l42.8 0c-6.6-5.9-10.8-14.4-10.8-24l0-112c0-20.8 11.3-38.9 28.1-48.6l21-64.7c7.5-23.1 29-38.7 53.3-38.7l115.2 0c24.3 0 45.8 15.6 53.3 38.7l21 64.7c16.8 9.7 28.2 27.8 28.2 48.6l0 112c0 9.6-4.2 18.1-10.8 24l42.8 0c35.3 0 64-28.7 64-64l0-192C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24l0-40-192 0 0 40c0 9.6-4.2 18.1-10.8 24l213.7 0zM190.8 277.5L177 320l158 0-13.8-42.5c-1.1-3.3-4.1-5.5-7.6-5.5l-115.2 0c-3.5 0-6.5 2.2-7.6 5.5zM168 408a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm200-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"],\n    \"head-side-cough\": [640, 512, [], \"e061\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 32L339.2 365.6c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9L448 416l0 16c0 26.5-21.5 48-48 48l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zm352-.2a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM464 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm152-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM592 480a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 312a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"grip-lines\": [448, 512, [], \"f7a4\", \"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"],\n    \"thumbs-down\": [512, 512, [128078, 61576], \"f165\", \"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2l144 0c26.5 0 48-21.5 48-48c0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1c4.4-7.3 6.9-15.8 6.9-24.9c0-21.3-13.9-39.4-33.1-45.6c.7-3.3 1.1-6.8 1.1-10.4c0-26.5-21.5-48-48-48l-97.5 0c-19 0-37.5 5.6-53.3 16.1L202.7 73.8C176 91.6 160 121.6 160 153.7l0 38.3 0 48 0 24.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128L0 352c0 17.7 14.3 32 32 32z\"],\n    \"user-lock\": [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l362.8 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-2.1 .1-4.2 .3-6.3c-31-26-71-41.7-114.6-41.7l-91.4 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"arrow-right-long\": [512, 512, [\"long-arrow-right\"], \"f178\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"],\n    \"anchor-circle-xmark\": [640, 512, [], \"e4ac\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"ellipsis\": [448, 512, [\"ellipsis-h\"], \"f141\", \"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M215.5 224c29.2-18.4 48.5-50.9 48.5-88c0-57.4-46.6-104-104-104S56 78.6 56 136c0 37.1 19.4 69.6 48.5 88L96 224c-17.7 0-32 14.3-32 32c0 16.5 12.5 30 28.5 31.8L80 400l160 0L227.5 287.8c16-1.8 28.5-15.3 28.5-31.8c0-17.7-14.3-32-32-32l-8.5 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l242.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L256 432 64 432 22.6 473.4z\"],\n    \"kit-medical\": [576, 512, [\"first-aid\"], \"f479\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l32 0L96 32 64 32zm64 0l0 448 320 0 0-448L128 32zM512 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-32 0 0 448 32 0zM256 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"person-through-window\": [640, 512, [], \"e5a9\", \"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4C167.6 186.5 128 245 128 310.2l0 73.8s0 0 0 0l-64 0L64 64zm288 0l224 0 0 320-67.7 0-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4c44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320l-45.8 0 42.7 64L592 448c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 400c0 26.5 21.5 48 48 48l260.2 0 33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4L310.5 336l74.6 0 40 48zm-159.5 0L192 384s0 0 0 0l0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"toolbox\": [512, 512, [129520], \"f552\", \"M176 88l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 80c-4.4 0-8 3.6-8 8zm-48 40l0-40c0-30.9 25.1-56 56-56l144 0c30.9 0 56 25.1 56 56l0 40 28.1 0c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9l0 92.1-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L0 320l0-92.1c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1l28.1 0zM0 416l0-64 128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0 0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64z\"],\n    \"hands-holding-circle\": [640, 512, [], \"e4fb\", \"M320 0a128 128 0 1 1 0 256A128 128 0 1 1 320 0zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"],\n    \"bug\": [512, 512, [], \"f188\", \"M256 0c53 0 96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4l112 0c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5l64.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6L272 240c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 239.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.3 0c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z\"],\n    \"credit-card\": [576, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M64 32C28.7 32 0 60.7 0 96l0 32 576 0 0-32c0-35.3-28.7-64-64-64L64 32zM576 224L0 224 0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-192zM112 352l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"],\n    \"car\": [512, 512, [128664, \"automobile\"], \"f1b9\", \"M135.2 117.4L109.1 192l293.8 0-26.1-74.6C372.3 104.6 360.2 96 346.6 96L165.4 96c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32l181.2 0c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2l0 144 0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L96 400l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L0 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"hand-holding-hand\": [576, 512, [], \"e4f7\", \"M7.8 207.7c-13.1-17.8-9.3-42.8 8.5-55.9L142.9 58.5C166.2 41.3 194.5 32 223.5 32L384 32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-36.8 0-44.9 36c-22.7 18.2-50.9 28-80 28L304 224l-16 0-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-120.6 0L63.7 216.2c-17.8 13.1-42.8 9.3-55.9-8.5zM382.4 160c0 0 0 0 0 0l.9 0c-.3 0-.6 0-.9 0zM568.2 304.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 453.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 480 32 480c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 352c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"],\n    \"book-open-reader\": [512, 512, [\"book-reader\"], \"f5da\", \"M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152l0 264-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427L0 224c0-17.7 14.3-32 32-32l30.3 0c63.6 0 125.6 19.6 177.7 56zm32 264l0-264c52.1-36.4 114.1-56 177.7-56l30.3 0c17.7 0 32 14.3 32 32l0 203c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z\"],\n    \"mountain-sun\": [640, 512, [], \"e52f\", \"M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512l325.2 0 75 0 122.8 0c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z\"],\n    \"arrows-left-right-to-line\": [640, 512, [], \"e4ba\", \"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-320c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"dice-d20\": [512, 512, [], \"f6cf\", \"M48.7 125.8l53.2 31.9c7.8 4.7 17.8 2 22.2-5.9L201.6 12.1c3-5.4-.9-12.1-7.1-12.1c-1.6 0-3.2 .5-4.6 1.4L47.9 98.8c-9.6 6.6-9.2 20.9 .8 26.9zM16 171.7l0 123.5c0 8 10.4 11 14.7 4.4l60-92c5-7.6 2.6-17.8-5.2-22.5L40.2 158C29.6 151.6 16 159.3 16 171.7zM310.4 12.1l77.6 139.6c4.4 7.9 14.5 10.6 22.2 5.9l53.2-31.9c10-6 10.4-20.3 .8-26.9L322.1 1.4c-1.4-.9-3-1.4-4.6-1.4c-6.2 0-10.1 6.7-7.1 12.1zM496 171.7c0-12.4-13.6-20.1-24.2-13.7l-45.3 27.2c-7.8 4.7-10.1 14.9-5.2 22.5l60 92c4.3 6.7 14.7 3.6 14.7-4.4l0-123.5zm-49.3 246L286.1 436.6c-8.1 .9-14.1 7.8-14.1 15.9l0 52.8c0 3.7 3 6.8 6.8 6.8c.8 0 1.6-.1 2.4-.4l172.7-64c6.1-2.2 10.1-8 10.1-14.5c0-9.3-8.1-16.5-17.3-15.4zM233.2 512c3.7 0 6.8-3 6.8-6.8l0-52.6c0-8.1-6.1-14.9-14.1-15.9l-160.6-19c-9.2-1.1-17.3 6.1-17.3 15.4c0 6.5 4 12.3 10.1 14.5l172.7 64c.8 .3 1.6 .4 2.4 .4zM41.7 382.9l170.9 20.2c7.8 .9 13.4-7.5 9.5-14.3l-85.7-150c-5.9-10.4-20.7-10.8-27.3-.8L30.2 358.2c-6.5 9.9-.3 23.3 11.5 24.7zm439.6-24.8L402.9 238.1c-6.5-10-21.4-9.6-27.3 .8L290.2 388.5c-3.9 6.8 1.6 15.2 9.5 14.3l170.1-20c11.8-1.4 18-14.7 11.5-24.6zm-216.9 11l78.4-137.2c6.1-10.7-1.6-23.9-13.9-23.9l-145.7 0c-12.3 0-20 13.3-13.9 23.9l78.4 137.2c3.7 6.4 13 6.4 16.7 0zM174.4 176l163.2 0c12.2 0 19.9-13.1 14-23.8l-80-144c-2.8-5.1-8.2-8.2-14-8.2l-3.2 0c-5.8 0-11.2 3.2-14 8.2l-80 144c-5.9 10.7 1.8 23.8 14 23.8z\"],\n    \"truck-droplet\": [640, 512, [], \"e58c\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM208 272c39.8 0 72-29.6 72-66c0-27-39.4-82.9-59.9-110.3c-6.1-8.2-18.1-8.2-24.2 0C175.4 123 136 179 136 206c0 36.5 32.2 66 72 66z\"],\n    \"file-circle-xmark\": [576, 512, [], \"e5a1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"],\n    \"temperature-arrow-up\": [576, 512, [\"temperature-up\"], \"e040\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L192 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zM480 160l32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288z\"],\n    \"medal\": [512, 512, [127941], \"f5a2\", \"M4.1 38.2C1.4 34.2 0 29.4 0 24.6C0 11 11 0 24.6 0L133.9 0c11.2 0 21.7 5.9 27.4 15.5l68.5 114.1c-48.2 6.1-91.3 28.6-123.4 61.9L4.1 38.2zm503.7 0L405.6 191.5c-32.1-33.3-75.2-55.8-123.4-61.9L350.7 15.5C356.5 5.9 366.9 0 378.1 0L487.4 0C501 0 512 11 512 24.6c0 4.8-1.4 9.6-4.1 13.6zM80 336a176 176 0 1 1 352 0A176 176 0 1 1 80 336zm184.4-94.9c-3.4-7-13.3-7-16.8 0l-22.4 45.4c-1.4 2.8-4 4.7-7 5.1L168 298.9c-7.7 1.1-10.7 10.5-5.2 16l36.3 35.4c2.2 2.2 3.2 5.2 2.7 8.3l-8.6 49.9c-1.3 7.6 6.7 13.5 13.6 9.9l44.8-23.6c2.7-1.4 6-1.4 8.7 0l44.8 23.6c6.9 3.6 14.9-2.2 13.6-9.9l-8.6-49.9c-.5-3 .5-6.1 2.7-8.3l36.3-35.4c5.6-5.4 2.5-14.8-5.2-16l-50.1-7.3c-3-.4-5.7-2.4-7-5.1l-22.4-45.4z\"],\n    \"bed\": [640, 512, [128716], \"f236\", \"M32 32c17.7 0 32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32l224 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 416l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 46.3 14.3 32 32 32zm144 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"square-h\": [448, 512, [\"h-square\"], \"f0fd\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM336 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"podcast\": [448, 512, [], \"f2ce\", \"M319.4 372c48.5-31.3 80.6-85.9 80.6-148c0-97.2-78.8-176-176-176S48 126.8 48 224c0 62.1 32.1 116.6 80.6 148c1.2 17.3 4 38 7.2 57.1l.2 1C56 395.8 0 316.5 0 224C0 100.3 100.3 0 224 0S448 100.3 448 224c0 92.5-56 171.9-136 206.1l.2-1.1c3.1-19.2 6-39.8 7.2-57zm-2.3-38.1c-1.6-5.7-3.9-11.1-7-16.2c-5.8-9.7-13.5-17-21.9-22.4c19.5-17.6 31.8-43 31.8-71.3c0-53-43-96-96-96s-96 43-96 96c0 28.3 12.3 53.8 31.8 71.3c-8.4 5.4-16.1 12.7-21.9 22.4c-3.1 5.1-5.4 10.5-7 16.2C99.8 307.5 80 268 80 224c0-79.5 64.5-144 144-144s144 64.5 144 144c0 44-19.8 83.5-50.9 109.9zM224 312c32.9 0 64 8.6 64 43.8c0 33-12.9 104.1-20.6 132.9c-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8c0-35.1 31.1-43.8 64-43.8zm0-144a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"],\n    \"temperature-full\": [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 210.7c18.6 6.6 32 24.4 32 45.3z\"],\n    \"bell\": [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416l384 0c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8l0-18.8c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"],\n    \"superscript\": [512, 512, [], \"f12b\", \"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64z\"],\n    \"plug-circle-xmark\": [576, 512, [], \"e560\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"star-of-life\": [512, 512, [], \"f621\", \"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\"],\n    \"phone-slash\": [640, 512, [], \"f3dd\", \"M228.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C76.1 30.2 64 46 64 64c0 107.4 37.8 206 100.8 283.1L9.2 469.1c-10.4 8.2-12.3 23.3-4.1 33.7s23.3 12.3 33.7 4.1l592-464c10.4-8.2 12.3-23.3 4.1-33.7s-23.3-12.3-33.7-4.1L253 278c-17.8-21.5-32.9-45.2-45-70.7L257.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96zm96.8 319l-91.3 72C310.7 476 407.1 512 512 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L368.7 368c-15-7.1-29.3-15.2-43-24.3z\"],\n    \"paint-roller\": [512, 512, [], \"f5aa\", \"M0 64C0 28.7 28.7 0 64 0L352 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 192c-35.3 0-64-28.7-64-64L0 64zM160 352c0-17.7 14.3-32 32-32l0-16c0-44.2 35.8-80 80-80l144 0c17.7 0 32-14.3 32-32l0-32 0-90.5c37.3 13.2 64 48.7 64 90.5l0 32c0 53-43 96-96 96l-144 0c-8.8 0-16 7.2-16 16l0 16c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-128z\"],\n    \"handshake-angle\": [640, 512, [\"hands-helping\"], \"f4c4\", \"M544 248l0 3.3 69.7-69.7c21.9-21.9 21.9-57.3 0-79.2L535.6 24.4c-21.9-21.9-57.3-21.9-79.2 0L416.3 64.5c-2.7-.3-5.5-.5-8.3-.5L296 64c-37.1 0-67.6 28-71.6 64l-.4 0 0 120c0 22.1 17.9 40 40 40s40-17.9 40-40l0-72c0 0 0-.1 0-.1l0-15.9 16 0 136 0c0 0 0 0 .1 0l7.9 0c44.2 0 80 35.8 80 80l0 8zM336 192l0 56c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-118.6c-35.9 6.2-65.8 32.3-76 68.2L99.5 255.2 26.3 328.4c-21.9 21.9-21.9 57.3 0 79.2l78.1 78.1c21.9 21.9 57.3 21.9 79.2 0l37.7-37.7c.9 0 1.8 .1 2.7 .1l160 0c26.5 0 48-21.5 48-48c0-5.6-1-11-2.7-16l2.7 0c26.5 0 48-21.5 48-48c0-12.8-5-24.4-13.2-33c25.7-5 45.1-27.6 45.2-54.8l0-.4c-.1-30.8-25.1-55.8-56-55.8c0 0 0 0 0 0l-120 0z\"],\n    \"location-dot\": [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"file\": [384, 512, [128196, 128459, 61462], \"f15b\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128z\"],\n    \"greater-than\": [384, 512, [62769], \"3e\", \"M3.4 81.7c-7.9 15.8-1.5 35 14.3 42.9L280.5 256 17.7 387.4C1.9 395.3-4.5 414.5 3.4 430.3s27.1 22.2 42.9 14.3l320-160c10.8-5.4 17.7-16.5 17.7-28.6s-6.8-23.2-17.7-28.6l-320-160c-15.8-7.9-35-1.5-42.9 14.3z\"],\n    \"person-swimming\": [576, 512, [127946, \"swimmer\"], \"f5c4\", \"M309.5 178.4L447.9 297.1c-1.6 .9-3.2 2-4.8 3c-18 12.4-40.1 20.3-59.2 20.3c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-10.1 0-21.1-2.2-31.9-6.2C163.1 193.2 262.2 96 384 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-26.9 0-52.3 6.6-74.5 18.4zM160 160A64 64 0 1 1 32 160a64 64 0 1 1 128 0zM306.5 325.9C329 341.4 356.5 352 384 352c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 405.7 417 416 384 416c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 341.2 165.1 352 192 352c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"arrow-down\": [384, 512, [8595], \"f063\", \"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"],\n    \"droplet\": [384, 512, [128167, \"tint\"], \"f043\", \"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0l1.8 0c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\"],\n    \"eraser\": [576, 512, [], \"f12d\", \"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7L288 480l9.4 0L512 480c17.7 0 32-14.3 32-32s-14.3-32-32-32l-124.1 0L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416l-9.4 0-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\"],\n    \"earth-americas\": [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5l0 39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9l0 39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7l0-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1L257 256c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"person-burst\": [640, 512, [], \"e53b\", \"M480 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-223.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L408 256.9 408 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.3-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"],\n    \"dove\": [512, 512, [128330], \"f4ba\", \"M160.8 96.5c14 17 31 30.9 49.5 42.2c25.9 15.8 53.7 25.9 77.7 31.6l0-31.5C265.8 108.5 250 71.5 248.6 28c-.4-11.3-7.5-21.5-18.4-24.4c-7.6-2-15.8-.2-21 5.8c-13.3 15.4-32.7 44.6-48.4 87.2zM320 144l0 30.6s0 0 0 0l0 1.3s0 0 0 0l0 32.1c-60.8-5.1-185-43.8-219.3-157.2C97.4 40 87.9 32 76.6 32c-7.9 0-15.3 3.9-18.8 11C46.8 65.9 32 112.1 32 176c0 116.9 80.1 180.5 118.4 202.8L11.8 416.6C6.7 418 2.6 421.8 .9 426.8s-.8 10.6 2.3 14.8C21.7 466.2 77.3 512 160 512c3.6 0 7.2-1.2 10-3.5L245.6 448l74.4 0c88.4 0 160-71.6 160-160l0-160 29.9-44.9c1.3-2 2.1-4.4 2.1-6.8c0-6.8-5.5-12.3-12.3-12.3L400 64c-44.2 0-80 35.8-80 80zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"battery-empty\": [576, 512, [\"battery-0\"], \"f244\", \"M80 160c-8.8 0-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16L80 160zM0 176c0-44.2 35.8-80 80-80l384 0c44.2 0 80 35.8 80 80l0 16c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 16c0 44.2-35.8 80-80 80L80 416c-44.2 0-80-35.8-80-80L0 176z\"],\n    \"socks\": [512, 512, [129510], \"f696\", \"M175.2 476.6c-9.7-18-15.2-38.7-15.2-60.6c0-40.3 19-78.2 51.2-102.4l64-48c8.1-6 12.8-15.5 12.8-25.6l0-144L128 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C14.2 357.3 0 385.8 0 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l21.6-16.2zM128 64l160 0 0-16c0-14.5 3.9-28.2 10.7-39.9C291 3 281.9 0 272 0L176 0c-26.5 0-48 21.5-48 48l0 16zM320 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C206.2 357.3 192 385.8 192 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l115.2-86.4C493 382.2 512 344.3 512 304l0-208L320 96zM512 64l0-16c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 16 192 0z\"],\n    \"inbox\": [512, 512, [], \"f01c\", \"M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-92.1c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32L121 32zm0 64l270 0 48 192-51.2 0c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7l-120.4 0c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7L73 288 121 96z\"],\n    \"section\": [256, 512, [], \"e447\", \"M64.9 96C67.1 84.4 73.7 76.2 86 70.6c13.8-6.2 34.8-8.9 61.2-4.5c8.8 1.4 36.1 7.1 44.1 9.3c17 4.8 34.7-5.1 39.5-22.2s-5.1-34.7-22.2-39.5c-11.1-3.1-41-9.2-50.9-10.8C123-2.7 88.3-.6 59.7 12.3C29.9 25.8 7.5 50.9 1.6 86.5c-.1 .5-.2 1.1-.2 1.6c-2.2 19.7 .3 37.9 8.1 54.1c7.7 16.1 19.4 28 32 36.9c.6 .5 1.3 .9 2 1.4C22.3 194.2 6.5 215.1 1.7 243c-.1 .6-.2 1.1-.2 1.7c-2.3 19.3 .4 37.1 8.4 53c7.9 15.6 19.8 27 32.3 35.5c22.4 15.2 51.9 24 75.4 31c0 0 0 0 0 0l3.7 1.1c27.2 8.2 46.9 14.6 59.4 23.8c5.5 4 8.2 7.6 9.5 10.9c1.3 3.2 2.6 8.6 .9 18.1c-1.7 10.1-7.7 18-20.7 23.5c-14 6-35.4 8.5-62 4.4c-12.8-2.1-35.1-9.7-54.1-16.2c0 0 0 0 0 0c-4.3-1.5-8.5-2.9-12.3-4.2C25.3 420 7.2 429.1 1.6 445.8s3.5 34.9 20.3 40.5c2.6 .8 5.7 1.9 9.2 3.1c18.6 6.3 48.5 16.6 67.3 19.6c0 0 0 0 0 0l.2 0c34.5 5.4 68.8 3.4 97.2-8.7c29.4-12.6 52.5-36.5 58.5-71.5c3.3-19.3 1.9-37.4-5-53.9c-6.3-15-16.4-26.4-27.6-35.2c16.5-13.9 28.5-33.2 32.6-58.2c3.2-19.8 1.9-38.3-4.8-55.1c-6.7-16.8-17.8-29.4-30.2-39c-22.8-17.6-53.6-27.4-77.7-35l-1.4-.5c-27.4-8.7-47.8-15.3-61.5-25c-6.1-4.4-9.5-8.5-11.4-12.4c-1.8-3.7-3.2-9.3-2.3-18.5zm76.7 208.5l-.6-.2-1.4-.4c-27.4-8.2-47.9-14.5-61.7-23.8c-6.2-4.2-9.3-7.9-11-11.3c-1.5-3-2.9-7.7-2.1-15.7c1.9-9.7 7.9-17.3 20.5-22.7c14-6 35.4-8.5 62.1-4.3l16.4 2.6c6.3 2.9 11.7 6 16.2 9.5c5.5 4.2 8.4 8.2 10 12.2c1.6 4 2.8 10.4 1.1 20.9c-2.4 14.7-12.8 26.4-37.1 31l-12.4 2.3z\"],\n    \"gauge-high\": [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"envelope-open-text\": [512, 512, [], \"f658\", \"M215.4 96L144 96l-36.2 0L96 96l0 8.8L96 144l0 40.4 0 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3 48 96c0-26.5 21.5-48 48-48l76.6 0 49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48 416 48c26.5 0 48 21.5 48 48l0 44.3 22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4l0-89 0-40.4 0-39.2 0-8.8-11.8 0L368 96l-71.4 0-81.3 0zM0 448L0 242.1 217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1 512 448s0 0 0 0c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64c0 0 0 0 0 0zM176 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M192 48c0-26.5 21.5-48 48-48L400 0c26.5 0 48 21.5 48 48l0 464-80 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-80 0 0-464zM48 96l112 0 0 416L48 512c-26.5 0-48-21.5-48-48L0 320l80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 288l0-64 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 192l0-48c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 144c0 26.5-21.5 48-48 48l-112 0 0-416 112 0zM312 64c-8.8 0-16 7.2-16 16l0 24-24 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l24 0 0 24c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-24 24 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-24 0 0-24c0-8.8-7.2-16-16-16l-16 0z\"],\n    \"wine-bottle\": [512, 512, [], \"f72f\", \"M393.4 9.4c12.5-12.5 32.8-12.5 45.3 0l64 64c12.5 12.5 12.5 32.8 0 45.3c-11.8 11.8-30.7 12.5-43.2 1.9l-9.5 9.5-48.8 48.8c-9.2 9.2-11.5 22.9-8.6 35.6c9.4 40.9-1.9 85.6-33.8 117.5L197.3 493.3c-25 25-65.5 25-90.5 0l-88-88c-25-25-25-65.5 0-90.5L180.2 153.3c31.9-31.9 76.6-43.1 117.5-33.8c12.6 2.9 26.4 .5 35.5-8.6l48.8-48.8 9.5-9.5c-10.6-12.6-10-31.4 1.9-43.2zM99.3 347.3l65.4 65.4c6.2 6.2 16.4 6.2 22.6 0l97.4-97.4c6.2-6.2 6.2-16.4 0-22.6l-65.4-65.4c-6.2-6.2-16.4-6.2-22.6 0L99.3 324.7c-6.2 6.2-6.2 16.4 0 22.6z\"],\n    \"chess-rook\": [448, 512, [9820], \"f447\", \"M32 192L32 48c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 144c0 10.1-4.7 19.6-12.8 25.6L352 256l16 144L80 400 96 256 44.8 217.6C36.7 211.6 32 202.1 32 192zm176 96l32 0c8.8 0 16-7.2 16-16l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 8.8 7.2 16 16 16zM22.6 473.4L64 432l320 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L38.6 512C26.1 512 16 501.9 16 489.4c0-6 2.4-11.8 6.6-16z\"],\n    \"bars-staggered\": [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"],\n    \"dharmachakra\": [512, 512, [9784], \"f655\", \"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.5 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.5-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"hotdog\": [512, 512, [127789], \"f80f\", \"M488.6 23.4c31.2 31.2 31.2 81.9 0 113.1l-352 352c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1l352-352c31.2-31.2 81.9-31.2 113.1 0zM443.3 92.7c-6.2-6.2-16.4-6.2-22.6 0c-12.5 12.5-23.8 15.1-37.5 17.6l-2.5 .4c-13.8 2.5-31.6 5.6-48 22c-16.7 16.7-20.9 36-24.1 50.9c0 0 0 0 0 0s0 0 0 0l-.2 1c-3.4 15.6-6 26.4-15.7 36.1s-20.5 12.3-36.1 15.7l-1 .2c-14.9 3.2-34.2 7.4-50.9 24.1s-20.9 36-24.1 50.9l-.2 1c-3.4 15.6-6 26.4-15.7 36.1c-9.2 9.2-18 10.8-32.7 13.4c0 0 0 0 0 0l-.9 .2c-15.6 2.8-34.9 6.9-54.4 26.4c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0c12.5-12.5 23.8-15.1 37.5-17.6l2.5-.4c13.8-2.5 31.6-5.6 48-22c16.7-16.7 20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1s20.5-12.3 36.1-15.7l1-.2c14.9-3.2 34.2-7.4 50.9-24.1s20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1c9.2-9.2 18-10.8 32.7-13.4l.9-.2c15.6-2.8 34.9-6.9 54.4-26.4c6.2-6.2 6.2-16.4 0-22.6zM191.2 479.2l288-288L495 207c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L289 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17l-15.8-15.8zM17 305C6.1 294.1 0 279.4 0 264s6.1-30.1 17-41L223 17C233.9 6.1 248.6 0 264 0s30.1 6.1 41 17l15.8 15.8-288 288L17 305z\"],\n    \"person-walking-with-cane\": [512, 512, [\"blind\"], \"f29d\", \"M176 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8.4 32c-36.4 0-69.6 20.5-85.9 53.1L35.4 273.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L128 231.6l0 43.2c0 17 6.7 33.3 18.7 45.3L224 397.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-89.4c0-12.7-5.1-24.9-14.1-33.9L224 306.7l0-93.4 70.4 93.9c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8L268.8 166.4C250.7 142.2 222.2 128 192 128l-24.4 0zM128.3 346.8L97 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l22-88.2-52.8-52.8zM450.8 505.1c5 7.3 15 9.1 22.3 4s9.1-15 4-22.3L358.9 316.1c-2.8 3.8-6.1 7.3-10.1 10.3c-5 3.8-10.5 6.4-16.2 7.9L450.8 505.1z\"],\n    \"drum\": [512, 512, [129345], \"f569\", \"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96C114.6 96 0 128 0 208L0 368c0 31.3 27.4 58.8 72 78.7L72 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 119.4c33 8.9 71.1 14.5 112 16.1L232 376c0-13.3 10.7-24 24-24s24 10.7 24 24l0 103.5c40.9-1.6 79-7.2 112-16.1L392 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 102.7c44.6-19.9 72-47.4 72-78.7l0-160c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5C458.4 181.8 464 197.4 464 208c0 .8-2.7 17.2-46 35.9C379.1 260.7 322 272 256 272s-123.1-11.3-162-28.1C50.7 225.2 48 208.8 48 208c0-10.6 5.6-26.2 44.4-41.3C130.6 151.9 187.8 144 256 144c18 0 35.1 .5 51.4 1.6z\"],\n    \"ice-cream\": [448, 512, [127848], \"f810\", \"M367.1 160c.6-5.3 .9-10.6 .9-16C368 64.5 303.5 0 224 0S80 64.5 80 144c0 5.4 .3 10.7 .9 16l-.9 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l53.5 0 181 0 53.5 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-.9 0zM96 288L200.8 497.7c4.4 8.8 13.3 14.3 23.2 14.3s18.8-5.5 23.2-14.3L352 288 96 288z\"],\n    \"heart-circle-bolt\": [576, 512, [], \"e4fc\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"],\n    \"fax\": [512, 512, [128224, 128439], \"f1ac\", \"M128 64l0 96 64 0 0-96 194.7 0L416 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L432 18.7C420 6.7 403.7 0 386.7 0L192 0c-35.3 0-64 28.7-64 64zM0 160L0 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32zm480 32l-352 0 0 288c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32zM256 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"paragraph\": [448, 512, [182], \"f1dd\", \"M192 32l64 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0c-88.4 0-160-71.6-160-160s71.6-160 160-160z\"],\n    \"check-to-slot\": [576, 512, [\"vote-yea\"], \"f772\", \"M96 80c0-26.5 21.5-48 48-48l288 0c26.5 0 48 21.5 48 48l0 304L96 384 96 80zm313 47c-9.4-9.4-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L409 161c9.4-9.4 9.4-24.6 0-33.9zM0 336c0-26.5 21.5-48 48-48l16 0 0 128 448 0 0-128 16 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-96z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M288 0c-12.2 .1-23.3 7-28.6 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3L288 439.8 288 0zM429.9 512c1.1 .1 2.1 .1 3.2 0l-3.2 0z\"],\n    \"boxes-stacked\": [576, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M248 0L208 0c-26.5 0-48 21.5-48 48l0 112c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-112c0-26.5-21.5-48-48-48L328 0l0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80zM64 256c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0zM352 512l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0c-15 0-28.8 5.1-39.7 13.8c4.9 10.4 7.7 22 7.7 34.2l0 160c0 12.2-2.8 23.8-7.7 34.2C323.2 506.9 337 512 352 512z\"],\n    \"link\": [640, 512, [128279, \"chain\"], \"f0c1\", \"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"],\n    \"ear-listen\": [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M398.3 3.4c-15.8-7.9-35-1.5-42.9 14.3c-7.9 15.8-1.5 34.9 14.2 42.9l.4 .2c.4 .2 1.1 .6 2.1 1.2c2 1.2 5 3 8.7 5.6c7.5 5.2 17.6 13.2 27.7 24.2C428.5 113.4 448 146 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7C441.6 33.2 427.7 22.2 417.3 15c-5.3-3.7-9.7-6.4-13-8.3c-1.6-1-3-1.7-4-2.2c-.5-.3-.9-.5-1.2-.7l-.4-.2-.2-.1c0 0 0 0-.1 0c0 0 0 0 0 0L384 32 398.3 3.4zM128.7 227.5c6.2-56 53.7-99.5 111.3-99.5c61.9 0 112 50.1 112 112c0 29.3-11.2 55.9-29.6 75.9c-17 18.4-34.4 45.1-34.4 78l0 6.1c0 26.5-21.5 48-48 48c-17.7 0-32 14.3-32 32s14.3 32 32 32c61.9 0 112-50.1 112-112l0-6.1c0-9.8 5.4-21.7 17.4-34.7C398.3 327.9 416 286 416 240c0-97.2-78.8-176-176-176C149.4 64 74.8 132.5 65.1 220.5c-1.9 17.6 10.7 33.4 28.3 35.3s33.4-10.7 35.3-28.3zM32 512a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM192 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0zM208 240c0-17.7 14.3-32 32-32s32 14.3 32 32c0 13.3 10.7 24 24 24s24-10.7 24-24c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 13.3 10.7 24 24 24s24-10.7 24-24z\"],\n    \"tree-city\": [640, 512, [], \"e587\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM224 160c0 6-1 11-2 16c20 14 34 38 34 64c0 45-36 80-80 80l-16 0 0 160c0 18-15 32-32 32c-18 0-32-14-32-32l0-160-16 0c-45 0-80-35-80-80c0-26 13-50 33-64c-1-5-1-10-1-16c0-53 42-96 96-96c53 0 96 43 96 96z\"],\n    \"play\": [384, 512, [9654], \"f04b\", \"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80L0 432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\"],\n    \"font\": [448, 512, [], \"f031\", \"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416 32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-1.8 0 18-48 159.6 0 18 48-1.8 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-25.8 0L254 52.8zM279.8 304l-111.6 0L224 155.1 279.8 304z\"],\n    \"table-cells-row-lock\": [640, 512, [], \"e67a\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"rupiah-sign\": [512, 512, [], \"e23d\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256-96l80 0c61.9 0 112 50.1 112 112s-50.1 112-112 112l-48 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128 0-160c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48l-48 0 0 96 48 0z\"],\n    \"magnifying-glass\": [512, 512, [128269, \"search\"], \"f002\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\"],\n    \"table-tennis-paddle-ball\": [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M416 288c-50.1 0-93.6 28.8-114.6 70.8L68.9 126.3l.6-.6 60.1-60.1c87.5-87.5 229.3-87.5 316.8 0c67.1 67.1 82.7 166.3 46.8 248.3C471.8 297.6 445 288 416 288zM49.3 151.9L290.1 392.7c-1.4 7.5-2.1 15.3-2.1 23.3c0 23.2 6.2 44.9 16.9 63.7c-3 .2-6.1 .3-9.2 .3l-2.7 0c-33.9 0-66.5-13.5-90.5-37.5l-9.8-9.8c-13.1-13.1-34.6-12.4-46.8 1.7L88.2 501c-5.8 6.7-14.2 10.7-23 11s-17.5-3.1-23.8-9.4l-32-32C3.1 464.3-.3 455.7 0 446.9s4.3-17.2 11-23l66.6-57.7c14-12.2 14.8-33.7 1.7-46.8l-9.8-9.8C45.5 285.5 32 252.9 32 219l0-2.7c0-22.8 6.1-44.9 17.3-64.3zM416 320a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"],\n    \"person-dots-from-line\": [576, 512, [\"diagnoses\"], \"f470\", \"M288 176A88 88 0 1 0 288 0a88 88 0 1 0 0 176zM78.7 372.9c15-12.5 50-34.4 97.3-50.1L176 432l224 0 0-109.3c47.3 15.8 82.3 37.7 97.3 50.1c20.4 17 50.6 14.2 67.6-6.1s14.2-50.6-6.1-67.6c-12-10-30.1-22.5-53.2-35C497.2 278.4 481.7 288 464 288c-26.5 0-48-21.5-48-48c0-4.3 .6-8.4 1.6-12.4C379.1 215.9 335.3 208 288 208c-60.2 0-114.9 12.9-160 29.9c0 .7 0 1.4 0 2.1c0 26.5-21.5 48-48 48c-11.8 0-22.7-4.3-31-11.4c-13.1 8.1-23.7 15.9-31.7 22.5c-20.4 17-23.1 47.2-6.1 67.6s47.2 23.1 67.6 6.1zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l528 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 464zM224 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM96 240a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm368 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"trash-can-arrow-up\": [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"],\n    \"naira-sign\": [448, 512, [], \"e1f6\", \"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 100.2 0 97.2 145.8c7.8 11.7 22.4 17 35.9 12.9s22.7-16.5 22.7-30.6l0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192-57.5 0L122.6 46.3zM305.1 320l14.9 0 0 22.3L305.1 320zM185.5 256L128 256l0-86.3L185.5 256z\"],\n    \"cart-arrow-down\": [576, 512, [], \"f218\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l45.5 0c3.8 0 7.1 2.7 7.9 6.5l51.6 271c6.5 34 36.2 58.5 70.7 58.5L488 384c13.3 0 24-10.7 24-24s-10.7-24-24-24l-288.3 0c-11.5 0-21.4-8.2-23.6-19.5L170.7 288l288.5 0c32.6 0 61.1-21.8 69.5-53.3l41-152.3C576.6 57 557.4 32 531.1 32L360 32l0 102.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23L312 32 120.1 32C111 12.8 91.6 0 69.5 0L24 0zM176 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm336-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"walkie-talkie\": [384, 512, [], \"f8ef\", \"M112 24c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144L0 300.1c0 12.7 5.1 24.9 14.1 33.9l3.9 3.9c9 9 14.1 21.2 14.1 33.9L32 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-92.1c0-12.7 5.1-24.9 14.1-33.9l3.9-3.9c9-9 14.1-21.2 14.1-33.9L384 144c0-26.5-21.5-48-48-48l-16 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-32 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-48 0 0-72zm0 136l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"file-pen\": [576, 512, [128221, \"file-edit\"], \"f31c\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"],\n    \"receipt\": [384, 512, [129534], \"f543\", \"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.3-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6s14 12.4 14 21.8l0 464c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6L304 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L192 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488L0 24C0 14.6 5.5 6.1 14 2.2zM96 144c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 144zM80 352c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 336c-8.8 0-16 7.2-16 16zM96 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 240z\"],\n    \"square-pen\": [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-21.4 21.4-71-71 21.4-21.4c15.6-15.6 40.9-15.6 56.6 0zM119.9 289L225.1 183.8l71 71L190.9 359.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"],\n    \"suitcase-rolling\": [384, 512, [], \"f5c1\", \"M144 56c0-4.4 3.6-8 8-8l80 0c4.4 0 8 3.6 8 8l0 72-96 0 0-72zm176 72l-32 0 0-72c0-30.9-25.1-56-56-56L152 0C121.1 0 96 25.1 96 56l0 72-32 0c-35.3 0-64 28.7-64 64L0 416c0 35.3 28.7 64 64 64c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64zM112 224l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 128l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"person-circle-exclamation\": [576, 512, [], \"e53f\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"],\n    \"chevron-down\": [512, 512, [], \"f078\", \"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"],\n    \"battery-full\": [576, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm368 96L96 192l0 128 352 0 0-128z\"],\n    \"skull-crossbones\": [448, 512, [128369, 9760], \"f714\", \"M368 128c0 44.4-25.4 83.5-64 106.4l0 21.6c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-21.6c-38.6-23-64-62.1-64-106.4C80 57.3 144.5 0 224 0s144 57.3 144 128zM168 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM3.4 273.7c7.9-15.8 27.1-22.2 42.9-14.3L224 348.2l177.7-88.8c15.8-7.9 35-1.5 42.9 14.3s1.5 35-14.3 42.9L295.6 384l134.8 67.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L224 419.8 46.3 508.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9L152.4 384 17.7 316.6C1.9 308.7-4.5 289.5 3.4 273.7z\"],\n    \"code-compare\": [512, 512, [], \"e13a\", \"M320 488c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1s14.2 12.4 14.2 21.9l0 40 16 0c35.3 0 64-28.7 64-64l0-166.7C371.7 141 352 112.8 352 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3L464 320c0 70.7-57.3 128-128 128l-16 0 0 40zM456 80a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 24c0-9.5 5.6-18.1 14.2-21.9s18.8-2.3 25.8 4.1l80 72c5.1 4.6 7.9 11 7.9 17.8s-2.9 13.3-7.9 17.8l-80 72c-7 6.3-17.2 7.9-25.8 4.1s-14.2-12.4-14.2-21.9l0-40-16 0c-35.3 0-64 28.7-64 64l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L48 192c0-70.7 57.3-128 128-128l16 0 0-40zM56 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\"],\n    \"list-ul\": [512, 512, [\"list-dots\"], \"f0ca\", \"M64 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM64 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"school-lock\": [640, 512, [], \"e56f\", \"M302.2 5.4c10.7-7.2 24.8-7.2 35.5 0L473.7 96 592 96c26.5 0 48 21.5 48 48l0 128c0-61.9-50.1-112-112-112s-112 50.1-112 112l0 24.6c-19.1 11.1-32 31.7-32 55.4l-63.7 0-.3 0c-35.3 0-64 28.7-64 64l0 96 64 0s0 0 0 0L48 512c-26.5 0-48-21.5-48-48L0 144c0-26.5 21.5-48 48-48l118.3 0L302.2 5.4zM80 208l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm0 128l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm240-72a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm16-120l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16s16 7.2 16 16zm192 96c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"],\n    \"tower-cell\": [576, 512, [], \"e585\", \"M62.6 2.3C46.2-4.3 27.6 3.6 20.9 20C7.4 53.4 0 89.9 0 128s7.4 74.6 20.9 108c6.6 16.4 25.3 24.3 41.7 17.7S86.9 228.4 80.3 212C69.8 186.1 64 157.8 64 128s5.8-58.1 16.3-84C86.9 27.6 79 9 62.6 2.3zm450.8 0C497 9 489.1 27.6 495.7 44C506.2 69.9 512 98.2 512 128s-5.8 58.1-16.3 84c-6.6 16.4 1.3 35 17.7 41.7s35-1.3 41.7-17.7c13.5-33.4 20.9-69.9 20.9-108s-7.4-74.6-20.9-108C548.4 3.6 529.8-4.3 513.4 2.3zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2c0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9L177.7 448l220.6 0 20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM369.2 384l-162.4 0 14.5-32 133.3 0 14.5 32zM288 205.3L325.6 288l-75.2 0L288 205.3zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\"],\n    \"down-long\": [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M2 334.5c-3.8 8.8-2 19 4.6 26l136 144c4.5 4.8 10.8 7.5 17.4 7.5s12.9-2.7 17.4-7.5l136-144c6.6-7 8.4-17.2 4.6-26s-12.5-14.5-22-14.5l-72 0 0-288c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32l0 288-72 0c-9.6 0-18.2 5.7-22 14.5z\"],\n    \"ranking-star\": [640, 512, [], \"e561\", \"M353.8 54.1L330.2 6.3c-3.9-8.3-16.1-8.6-20.4 0L286.2 54.1l-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-17.7 0-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-128 0zM32 320c-17.7 0-32 14.3-32 32L0 480c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L32 320zm416 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M224 0c17.7 0 32 14.3 32 32l0 16 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 48 152 0c22.1 0 40 17.9 40 40c0 5.3-1 10.5-3.1 15.4L368 400 80 400 3.1 215.4C1 210.5 0 205.3 0 200c0-22.1 17.9-40 40-40l152 0 0-48-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-16c0-17.7 14.3-32 32-32zM38.6 473.4L80 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L54.6 512C42.1 512 32 501.9 32 489.4c0-6 2.4-11.8 6.6-16z\"],\n    \"person-harassing\": [576, 512, [], \"e549\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9 88 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7 47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344l0 58.7-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L408.8 438l54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3c36.4 0 65.9-29.5 65.9-65.9L576 344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16l56 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-56 0c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\"],\n    \"brazilian-real-sign\": [512, 512, [], \"e46c\", \"M400 0c17.7 0 32 14.3 32 32l0 18.2c12.5 2.3 24.7 6.4 36.2 12.1l10.1 5.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-10.2-5.1c-9.9-5-20.9-7.5-32-7.5l-1.7 0c-29.8 0-53.9 24.1-53.9 53.9c0 22 13.4 41.8 33.9 50l52 20.8c44.7 17.9 74.1 61.2 74.1 109.4l0 3.4c0 51.2-33.6 94.6-80 109.2l0 21.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-19.4c-15-3.5-29.4-9.7-42.3-18.3l-23.4-15.6c-14.7-9.8-18.7-29.7-8.9-44.4s29.7-18.7 44.4-8.9L361.2 389c10.8 7.2 23.4 11 36.3 11c27.9 0 50.5-22.6 50.5-50.5l0-3.4c0-22-13.4-41.8-33.9-50l-52-20.8C317.3 257.4 288 214.1 288 165.9C288 114 321.5 70 368 54.2L368 32c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160z\"],\n    \"landmark-dome\": [512, 512, [\"landmark-alt\"], \"f752\", \"M248 0l16 0c13.3 0 24 10.7 24 24l0 10.7C368.4 48.1 431.9 111.6 445.3 192l2.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 256c-17.7 0-32-14.3-32-32s14.3-32 32-32l2.7 0C80.1 111.6 143.6 48.1 224 34.7L224 24c0-13.3 10.7-24 24-24zM64 288l64 0 0 128 40 0 0-128 64 0 0 128 48 0 0-128 64 0 0 128 40 0 0-128 64 0 0 132.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 288z\"],\n    \"arrow-up\": [384, 512, [8593], \"f062\", \"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"],\n    \"tv\": [640, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M64 64l0 288 512 0 0-288L64 64zM0 64C0 28.7 28.7 0 64 0L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 416c-35.3 0-64-28.7-64-64L0 64zM128 448l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"shrimp\": [512, 512, [129424], \"e448\", \"M64 32C28.7 32 0 60.7 0 96s28.7 64 64 64l1 0c3.7 88.9 77 160 167 160l56 0 0-192-24 0L88.8 128 64 128c-17.7 0-32-14.3-32-32s14.3-32 32-32l400 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L64 32zM224 456c0 13.3 10.7 24 24 24l72 0 0-72.2-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3l0 69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111c0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6c0 4.6-.7 9-1.9 13.1L472.6 415zM336 128l-16 0 0 192 18.3 0c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"list-check\": [512, 512, [\"tasks\"], \"f0ae\", \"M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"jug-detergent\": [384, 512, [], \"e519\", \"M96 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24l0 24 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 96C74.7 96 64 85.3 64 72s10.7-24 24-24l8 0 0-24zM0 256c0-70.7 57.3-128 128-128l128 0c70.7 0 128 57.3 128 128l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256zm256 0l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M399 384.2C376.9 345.8 335.4 320 288 320l-64 0c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\"],\n    \"user-shield\": [640, 512, [], \"f505\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c1.8 0 3.5-.2 5.3-.5c-76.3-55.1-99.8-141-103.1-200.2c-16.1-4.8-33.1-7.3-50.7-7.3l-91.4 0zm308.8-78.3l-120 48C358 277.4 352 286.2 352 296c0 63.3 25.9 168.8 134.8 214.2c5.9 2.5 12.6 2.5 18.5 0C614.1 464.8 640 359.3 640 296c0-9.8-6-18.6-15.1-22.3l-120-48c-5.7-2.3-12.1-2.3-17.8 0zM591.4 312c-3.9 50.7-27.2 116.7-95.4 149.7l0-187.8L591.4 312z\"],\n    \"wind\": [512, 512, [], \"f72e\", \"M288 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c53 0 96-43 96-96s-43-96-96-96L320 0c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32l32 0c53 0 96-43 96-96s-43-96-96-96L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32zM128 512l32 0c53 0 96-43 96-96s-43-96-96-96L32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"],\n    \"car-burst\": [640, 512, [\"car-crash\"], \"f5e1\", \"M176 8c-6.6 0-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6l35.3-32.5 9.5-35.4 10.4-38.6c8-29.9 30.5-52.1 57.9-60.9l41-59.2c11.3-16.3 26.4-28.9 43.5-37.2c-.4-.6-.8-1.2-1.3-1.8c-4.1-5.1-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74C188.4 12 182.6 8 176 8zM367.7 161.5l135.6 36.3c6.5 1.8 11.3 7.4 11.8 14.2l4.6 56.5-201.5-54 32.2-46.6c3.8-5.6 10.8-8.1 17.3-6.4zm-69.9-30l-47.9 69.3c-21.6 3-40.3 18.6-46.3 41l-10.4 38.6-16.6 61.8-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 247.3 66.3-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9L595 388l10.4-38.6c6-22.4-2.5-45.2-19.6-58.7l-6.8-84c-2.7-33.7-26.4-62-59-70.8L384.2 99.7c-32.7-8.8-67.3 4-86.5 31.8zm-17 131a24 24 0 1 1 -12.4 46.4 24 24 0 1 1 12.4-46.4zm217.9 83.2A24 24 0 1 1 545 358.1a24 24 0 1 1 -46.4-12.4z\"],\n    \"y\": [384, 512, [121], \"59\", \"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-149.7L378 82.6c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\"],\n    \"person-snowboarding\": [512, 512, [127938, \"snowboarding\"], \"f7ce\", \"M209.7 3.4c15.8-7.9 35-1.5 42.9 14.3l25 50 42.4 8.5c19.5 3.9 37.8 12.3 53.5 24.5l126.1 98.1c14 10.9 16.5 31 5.6 44.9s-31 16.5-44.9 5.6l-72.1-56.1-71.5 31.8 33.1 27.6c23.2 19.3 33.5 50 26.7 79.4l-17.4 75.2c-2.2 9.4-8.2 16.8-16.1 21l86.5 33.1c4.6 1.8 9.4 2.6 14.3 2.6l28.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-28.2 0c-10.8 0-21.4-2-31.5-5.8L60.1 371.3c-11.5-4.4-22-11.2-30.8-20L7 329c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.4 22.4c4 4 8.7 7.1 14 9.1l22.4 8.6c-.8-1.6-1.5-3.2-2.1-4.9c-5.6-16.8 3.5-34.9 20.2-40.5L192 264.9l0-53.2c0-24.2 13.7-46.4 35.4-57.2l45.2-22.6-7.5-1.5c-19.4-3.9-35.9-16.5-44.7-34.1l-25-50c-7.9-15.8-1.5-35 14.3-42.9zM139 350.1l159 60.9c-2.1-5.6-2.6-11.9-1.1-18.2l17.4-75.2c1.4-5.9-.7-12-5.3-15.9l-52.8-44 0 18.8c0 20.7-13.2 39-32.8 45.5L139 350.1zM432 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"truck-fast\": [640, 512, [\"shipping-fast\"], \"f48b\", \"M112 0C85.5 0 64 21.5 64 48l0 48L16 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 208 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 160l-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 176 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 224l-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 288l0 128c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L112 0zM544 237.3l0 18.7-128 0 0-96 50.7 0L544 237.3zM160 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"],\n    \"fish\": [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8c4.7 9.2 4.7 20.1 0 29.3c-14.1 27.4-41.9 66.8-81 99.8C452.3 403.5 399.4 432 336 432s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"user-graduate\": [448, 512, [], \"f501\", \"M219.3 .5c3.1-.6 6.3-.6 9.4 0l200 40C439.9 42.7 448 52.6 448 64s-8.1 21.3-19.3 23.5L352 102.9l0 57.1c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-57.1L48 93.3l0 65.1 15.7 78.4c.9 4.7-.3 9.6-3.3 13.3s-7.6 5.9-12.4 5.9l-32 0c-4.8 0-9.3-2.1-12.4-5.9s-4.3-8.6-3.3-13.3L16 158.4l0-71.8C6.5 83.3 0 74.3 0 64C0 52.6 8.1 42.7 19.3 40.5l200-40zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6z\"],\n    \"circle-half-stroke\": [512, 512, [9680, \"adjust\"], \"f042\", \"M448 256c0-106-86-192-192-192l0 384c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"clapperboard\": [512, 512, [], \"e131\", \"M448 32l-86.1 0-1 1-127 127 92.1 0 1-1L453.8 32.3c-1.9-.2-3.8-.3-5.8-.3zm64 128l0-64c0-15.1-5.3-29.1-14-40l-104 104L512 160zM294.1 32l-92.1 0-1 1L73.9 160l92.1 0 1-1 127-127zM64 32C28.7 32 0 60.7 0 96l0 64 6.1 0 1-1 127-127L64 32zM512 192L0 192 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224z\"],\n    \"circle-radiation\": [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M256 64a192 192 0 1 1 0 384 192 192 0 1 1 0-384zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM200 256c0-20.7 11.3-38.8 28-48.5l-36-62.3c-8.8-15.3-28.7-20.8-42-9c-25.6 22.6-43.9 53.3-50.9 88.1C95.7 241.5 110.3 256 128 256l72 0zm28 48.5l-36 62.4c-8.8 15.3-3.6 35.2 13.1 40.8c16 5.4 33.1 8.3 50.9 8.3s34.9-2.9 50.9-8.3c16.7-5.6 21.9-25.5 13.1-40.8l-36-62.4c-8.2 4.8-17.8 7.5-28 7.5s-19.8-2.7-28-7.5zM312 256l72 0c17.7 0 32.3-14.5 28.8-31.8c-7-34.8-25.3-65.5-50.9-88.1c-13.2-11.7-33.1-6.3-42 9l-36 62.3c16.7 9.7 28 27.8 28 48.5zm-56 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"baseball\": [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M62.7 223.4c-4.8 .4-9.7 .6-14.7 .6c-15.6 0-30.8-2-45.2-5.9C19.2 107.1 107.1 19.2 218.1 2.8C222 17.2 224 32.4 224 48c0 4.9-.2 9.8-.6 14.7c-.7 8.8 5.8 16.5 14.6 17.3s16.5-5.8 17.3-14.6c.5-5.7 .7-11.5 .7-17.3c0-16.5-1.9-32.6-5.6-47.9c1.8 0 3.7-.1 5.6-.1C397.4 0 512 114.6 512 256c0 1.9 0 3.7-.1 5.6c-15.4-3.6-31.4-5.6-47.9-5.6c-5.8 0-11.6 .2-17.3 .7c-8.8 .7-15.4 8.5-14.6 17.3s8.5 15.4 17.3 14.6c4.8-.4 9.7-.6 14.7-.6c15.6 0 30.8 2 45.2 5.9C492.8 404.9 404.9 492.8 293.9 509.2C290 494.8 288 479.6 288 464c0-4.9 .2-9.8 .6-14.7c.7-8.8-5.8-16.5-14.6-17.3s-16.5 5.8-17.3 14.6c-.5 5.7-.7 11.5-.7 17.3c0 16.5 1.9 32.6 5.6 47.9c-1.8 0-3.7 .1-5.6 .1C114.6 512 0 397.4 0 256c0-1.9 0-3.7 .1-5.6C15.4 254.1 31.5 256 48 256c5.8 0 11.6-.2 17.3-.7c8.8-.7 15.4-8.5 14.6-17.3s-8.5-15.4-17.3-14.6zM121.3 208c-8 3.7-11.6 13.2-7.9 21.2s13.2 11.6 21.2 7.9c45.2-20.8 81.7-57.2 102.5-102.5c3.7-8 .2-17.5-7.9-21.2s-17.5-.2-21.2 7.9c-17.6 38.3-48.5 69.2-86.7 86.7zm277.2 74.7c-3.7-8-13.2-11.6-21.2-7.9c-45.2 20.8-81.7 57.2-102.5 102.5c-3.7 8-.2 17.5 7.9 21.2s17.5 .2 21.2-7.9c17.6-38.3 48.5-69.2 86.7-86.7c8-3.7 11.6-13.2 7.9-21.2z\"],\n    \"jet-fighter-up\": [512, 512, [], \"e518\", \"M270.7 9.7C268.2 3.8 262.4 0 256 0s-12.2 3.8-14.7 9.7L197.2 112.6c-3.4 8-5.2 16.5-5.2 25.2l0 77-144 84L48 280c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 56 0 32 0 24c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 144 0 0 32.7L133.5 468c-3.5 3-5.5 7.4-5.5 12l0 16c0 8.8 7.2 16 16 16l96 0 0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64 96 0c8.8 0 16-7.2 16-16l0-16c0-4.6-2-9-5.5-12L320 416.7l0-32.7 144 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24 0-32 0-56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 18.8-144-84 0-77c0-8.7-1.8-17.2-5.2-25.2L270.7 9.7z\"],\n    \"diagram-project\": [576, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 16 192 0 0-16c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-16-192 0 0 16c0 1.7-.1 3.4-.3 5L272 288l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-1.7 .1-3.4 .3-5L144 224l-96 0c-26.5 0-48-21.5-48-48L0 80z\"],\n    \"copy\": [448, 512, [], \"f0c5\", \"M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z\"],\n    \"volume-xmark\": [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"],\n    \"hand-sparkles\": [640, 512, [], \"e05d\", \"M320 0c17.7 0 32 14.3 32 32l0 208c0 8.8 7.2 16 16 16s16-7.2 16-16l0-176c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-112c0-17.7 14.3-32 32-32s32 14.3 32 32l0 195.1c-11.9 4.8-21.3 14.9-25 27.8l-8.9 31.2L478.9 391C460.6 396.3 448 413 448 432c0 18.9 12.5 35.6 30.6 40.9C448.4 497.4 409.9 512 368 512l-19.2 0c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6l0-272c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-208c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6L288 352l-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7L288 384l7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6L320 384l25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7L320 352l-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456l-13.8 48.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456l-48.3-13.8c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408l13.8-48.3c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\"],\n    \"grip\": [448, 512, [\"grip-horizontal\"], \"f58d\", \"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M352 224l-46.5 0c-45 0-81.5 36.5-81.5 81.5c0 22.3 10.3 34.3 19.2 40.5c6.8 4.7 12.8 12 12.8 20.3c0 9.8-8 17.8-17.8 17.8l-2.5 0c-2.4 0-4.8-.4-7.1-1.4C210.8 374.8 128 333.4 128 240c0-79.5 64.5-144 144-144l80 0 0-61.3C352 15.5 367.5 0 386.7 0c8.6 0 16.8 3.2 23.2 8.9L548.1 133.3c7.6 6.8 11.9 16.5 11.9 26.7s-4.3 19.9-11.9 26.7l-139 125.1c-5.9 5.3-13.5 8.2-21.4 8.2l-3.7 0c-17.7 0-32-14.3-32-32l0-64zM80 96c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80L80 512c-44.2 0-80-35.8-80-80L0 112C0 67.8 35.8 32 80 32l48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 96z\"],\n    \"child-combatant\": [576, 512, [\"child-rifle\"], \"e4e0\", \"M176 128A64 64 0 1 0 176 0a64 64 0 1 0 0 128zm-8 352l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-179.5L260.9 321c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-51.7-82.1c-17.6-27.9-48.3-44.9-81.2-44.9l-12.3 0c-33 0-63.7 16.9-81.2 44.9L36.9 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10L104 300.5 104 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM448 0L432 0 416 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l0 100.3c-9.6 5.5-16 15.9-16 27.7l0 32c-17.7 0-32 14.3-32 32l0 144c0 17.7 14.3 32 32 32l16 0 0 96c0 8.8 7.2 16 16 16l59.5 0c10.4 0 18-9.8 15.5-19.9L484 400l44 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-48 0 0-26.7 53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2l0-84.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 56-16 5.3L480 160c0-11.8-6.4-22.2-16-27.7L464 16c0-8.8-7.2-16-16-16z\"],\n    \"gun\": [576, 512, [], \"e19b\", \"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8L32 64C14.3 64 0 78.3 0 96L0 208c0 17.7 14.3 32 32 32l10 0c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480l96 0c14.7 0 27.5-10 31-24.2L217 352l104.5 0c23.7 0 44.8-14.9 52.7-37.2L400.9 240l31.1 0c8.5 0 16.6-3.4 22.6-9.4L477.3 208l66.7 0c17.7 0 32-14.3 32-32l0-80c0-17.7-14.3-32-32-32l-16 0 0-8zM321.4 304L229 304l16-64 105 0-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128l384 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"square-phone\": [448, 512, [\"phone-square\"], \"f098\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90.7 96.7c9.7-2.6 19.9 2.3 23.7 11.6l20 48c3.4 8.2 1 17.6-5.8 23.2L168 231.7c16.6 35.2 45.1 63.7 80.3 80.3l20.2-24.7c5.6-6.8 15-9.2 23.2-5.8l48 20c9.3 3.9 14.2 14 11.6 23.7l-12 44C336.9 378 329 384 320 384C196.3 384 96 283.7 96 160c0-9 6-16.9 14.7-19.3l44-12z\"],\n    \"plus\": [448, 512, [10133, 61543, \"add\"], \"2b\", \"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z\"],\n    \"expand\": [448, 512, [], \"f065\", \"M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z\"],\n    \"computer\": [640, 512, [], \"e4e5\", \"M384 96l0 224L64 320 64 96l320 0zM64 32C28.7 32 0 60.7 0 96L0 320c0 35.3 28.7 64 64 64l117.3 0-10.7 32L96 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-74.7 0-10.7-32L384 384c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L64 32zm464 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0zm16 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-16 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"xmark\": [384, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"],\n    \"arrows-up-down-left-right\": [512, 512, [\"arrows\"], \"f047\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4L224 224l-114.7 0 9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L224 288l0 114.7-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4L288 288l114.7 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L288 224l0-114.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"],\n    \"chalkboard-user\": [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M160 64c0-35.3 28.7-64 64-64L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64l-239.2 0c-11.8-25.5-29.9-47.5-52.4-64l99.6 0 0-32c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 32 64 0 0-288L224 64l0 49.1C205.2 102.2 183.3 96 160 96l0-32zm0 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM133.3 352l53.3 0C260.3 352 320 411.7 320 485.3c0 14.7-11.9 26.7-26.7 26.7L26.7 512C11.9 512 0 500.1 0 485.3C0 411.7 59.7 352 133.3 352z\"],\n    \"peso-sign\": [384, 512, [], \"e222\", \"M64 32C46.3 32 32 46.3 32 64l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c68.4 0 127.7-39 156.8-96l19.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.7 0c.5-5.3 .7-10.6 .7-16s-.2-10.7-.7-16l.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.2 0C303.7 71 244.4 32 176 32L64 32zm190.4 96L96 128l0-32 80 0c30.5 0 58.2 12.2 78.4 32zM96 192l190.9 0c.7 5.2 1.1 10.6 1.1 16s-.4 10.8-1.1 16L96 224l0-32zm158.4 96c-20.2 19.8-47.9 32-78.4 32l-80 0 0-32 158.4 0z\"],\n    \"building-shield\": [576, 512, [], \"e4d8\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 159-42.4 17L304 224l-32 0c-8.8 0-16 7.2-16 16l0 32 0 24.2 0 7.8c0 .9 .1 1.7 .2 2.6c2.3 58.1 24.1 144.8 98.7 201.5c-5.8 2.5-12.2 3.9-18.9 3.9l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM423.1 225.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"],\n    \"baby\": [448, 512, [], \"f77c\", \"M152 88a72 72 0 1 1 144 0A72 72 0 1 1 152 88zM39.7 144.5c13-17.9 38-21.8 55.9-8.8L131.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25l0 36.3-192 0 0-36.3c-15.2-6.7-29.7-15.1-43.3-25L48.5 200.3c-17.9-13-21.8-38-8.8-55.9zm89.8 184.8l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C70 438.6 68.1 417 79.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L284 419.4l-26-37.2z\"],\n    \"users-line\": [640, 512, [], \"e592\", \"M211.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM32 256c0 17.7 14.3 32 32 32l85.6 0c10.1-39.4 38.6-71.5 75.8-86.6c-9.7-6-21.2-9.4-33.4-9.4l-96 0c-35.3 0-64 28.7-64 64zm461.6 32l82.4 0c17.7 0 32-14.3 32-32c0-35.3-28.7-64-64-64l-96 0c-11.7 0-22.7 3.1-32.1 8.6c38.1 14.8 67.4 47.3 77.7 87.4zM391.2 226.4c-6.9-1.6-14.2-2.4-21.6-2.4l-96 0c-8.5 0-16.7 1.1-24.5 3.1c-30.8 8.1-55.6 31.1-66.1 60.9c-3.5 10-5.5 20.8-5.5 32c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32c0-11.2-1.9-22-5.5-32c-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM321.6 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"],\n    \"quote-left\": [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M0 216C0 149.7 53.7 96 120 96l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72zm256 0c0-66.3 53.7-120 120-120l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72z\"],\n    \"tractor\": [640, 512, [128668], \"f722\", \"M96 64c0-35.3 28.7-64 64-64L266.3 0c26.2 0 49.7 15.9 59.4 40.2L373.7 160 480 160l0-33.8c0-24.8 5.8-49.3 16.9-71.6l2.5-5c7.9-15.8 27.1-22.2 42.9-14.3s22.2 27.1 14.3 42.9l-2.5 5c-6.7 13.3-10.1 28-10.1 42.9l0 33.8 56 0c22.1 0 40 17.9 40 40l0 45.4c0 16.5-8.5 31.9-22.6 40.7l-43.3 27.1c-14.2-5.9-29.8-9.2-46.1-9.2c-39.3 0-74.1 18.9-96 48l-80 0c0 17.7-14.3 32-32 32l-8.2 0c-1.7 4.8-3.7 9.5-5.8 14.1l5.8 5.8c12.5 12.5 12.5 32.8 0 45.3l-22.6 22.6c-12.5 12.5-32.8 12.5-45.3 0l-5.8-5.8c-4.6 2.2-9.3 4.1-14.1 5.8l0 8.2c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-8.2c-4.8-1.7-9.5-3.7-14.1-5.8l-5.8 5.8c-12.5 12.5-32.8 12.5-45.3 0L40.2 449.1c-12.5-12.5-12.5-32.8 0-45.3l5.8-5.8c-2.2-4.6-4.1-9.3-5.8-14.1L32 384c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l8.2 0c1.7-4.8 3.7-9.5 5.8-14.1l-5.8-5.8c-12.5-12.5-12.5-32.8 0-45.3l22.6-22.6c9-9 21.9-11.5 33.1-7.6l0-.6 0-32 0-96zm170.3 0L160 64l0 96 32 0 112.7 0L266.3 64zM176 256a80 80 0 1 0 0 160 80 80 0 1 0 0-160zM528 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0 64c-48.6 0-88-39.4-88-88c0-29.8 14.8-56.1 37.4-72c14.3-10.1 31.8-16 50.6-16c2.7 0 5.3 .1 7.9 .3c44.9 4 80.1 41.7 80.1 87.7c0 48.6-39.4 88-88 88z\"],\n    \"trash-arrow-up\": [448, 512, [\"trash-restore\"], \"f829\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0L394.8 467c-1.6 25.3-22.6 45-47.9 45l-245.8 0c-25.3 0-46.3-19.7-47.9-45L32 128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"],\n    \"arrow-down-up-lock\": [640, 512, [], \"e4b0\", \"M150.6 502.6l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 160 288l256 0 0-16c0-17.2 3.9-33.5 10.8-48L352 224l0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 109.3 288 224l-128 0-64 0-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 114.7L54.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0zM160 192l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128 64 0zM288 320l0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128-64 0zm240-80c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"],\n    \"lines-leaning\": [384, 512, [], \"e51e\", \"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32z\"],\n    \"ruler-combined\": [512, 512, [], \"f546\", \"M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c31.2 31.2 81.9 31.2 113.1 0c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-50 50-131 50-181 0s-50-131 0-181s131-50 181 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-31.2-31.2-81.9-31.2-113.1 0s-31.2 81.9 0 113.1z\"],\n    \"equals\": [448, 512, [62764], \"3d\", \"M48 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 128zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 320z\"],\n    \"blender\": [512, 512, [], \"f517\", \"M0 64C0 28.7 28.7 0 64 0l64 0 32 0L470.1 0c21.1 0 36.4 20.1 30.9 40.4L494.5 64 336 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L336 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L336 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L416 352l-256 0-8.7-96L64 256c-35.3 0-64-28.7-64-64L0 64zM145.5 192L133.8 64 64 64l0 128 81.5 0zM144 384l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"teeth\": [576, 512, [], \"f62e\", \"M0 128C0 75 43 32 96 32l384 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96L96 480c-53 0-96-43-96-96L0 128zm176 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48s-48 21.5-48 48zm176-48c-26.5 0-48 21.5-48 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48zM48 208l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zM96 384c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-48c0 26.5 21.5 48 48 48s48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24zm176 48c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-176l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zm48 176c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48z\"],\n    \"shekel-sign\": [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 96l128 0c35.3 0 64 28.7 64 64l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-70.7-57.3-128-128-128L32 32zM320 480c70.7 0 128-57.3 128-128l0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288c0 35.3-28.7 64-64 64l-128 0 0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l160 0z\"],\n    \"map\": [576, 512, [128506, 62072], \"f279\", \"M384 476.1L192 421.2l0-385.3L384 90.8l0 385.3zm32-1.2l0-386.5L543.1 37.5c15.8-6.3 32.9 5.3 32.9 22.3l0 334.8c0 9.8-6 18.6-15.1 22.3L416 474.8zM15.1 95.1L160 37.2l0 386.5L32.9 474.5C17.1 480.8 0 469.2 0 452.2L0 117.4c0-9.8 6-18.6 15.1-22.3z\"],\n    \"rocket\": [512, 512, [], \"f135\", \"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8L24 288c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7 .2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3l82.3 0c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2l0 82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1 .2s-12.1-12.2-12.1-20.9l0-107.2c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4 .5-31.8-7.8zM384 168a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"],\n    \"photo-film\": [640, 512, [\"photo-video\"], \"f87c\", \"M256 0L576 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64l0-224c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l80 0 48 0 144 0c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128l96 0 0 256 0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32 160 0 0 64c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm336 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"],\n    \"folder-minus\": [512, 512, [], \"f65d\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64zM184 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"],\n    \"hexagon-nodes-bolt\": [576, 512, [], \"e69a\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56c30.7 0 55.6-24.7 56-55.2c-7.5-12.9-13.5-26.8-17.6-41.5c-4.2-4-9.1-7.3-14.4-9.9l0-98.8c2.8-1.3 5.5-2.9 8-4.7l10.5 6c5.5-15.3 13.1-29.5 22.4-42.5l-9.1-5.2c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8zM440.5 132C425 105.2 390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c.4 .3 .8 .6 1.3 .9c21.7-9.5 45.6-14.8 70.8-14.8c2 0 4 0 5.9 .1c12.1-17.3 13.8-40.6 2.6-60.1zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"],\n    \"store\": [576, 512, [], \"f54e\", \"M547.6 103.8L490.3 13.1C485.2 5 476.1 0 466.4 0L109.6 0C99.9 0 90.8 5 85.7 13.1L28.3 103.8c-29.6 46.8-3.4 111.9 51.9 119.4c4 .5 8.1 .8 12.1 .8c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4zM499.7 254.9c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3L448 384l-320 0 0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L64 384l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64 0-131.4c-4 1-8 1.8-12.3 2.3z\"],\n    \"arrow-trend-up\": [576, 512, [], \"e098\", \"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7L342.6 374.6c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160 384 160z\"],\n    \"plug-circle-minus\": [576, 512, [], \"e55e\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"],\n    \"sign-hanging\": [512, 512, [\"sign\"], \"f4d9\", \"M96 0c17.7 0 32 14.3 32 32l0 32 352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0C14.3 128 0 113.7 0 96S14.3 64 32 64l32 0 0-32C64 14.3 78.3 0 96 0zm96 160l256 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32z\"],\n    \"bezier-curve\": [640, 512, [], \"f55b\", \"M296 136l0-48 48 0 0 48-48 0zM288 32c-26.5 0-48 21.5-48 48l0 4L121.6 84C111.2 62.7 89.3 48 64 48C28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36l66.9 0c-58.9 39.6-98.9 105-104 180L80 320c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-3.3 0c5.9-67 48.5-123.4 107.5-149.1c8.6 12.7 23.2 21.1 39.8 21.1l64 0c16.6 0 31.1-8.4 39.8-21.1c59 25.7 101.6 82.1 107.5 149.1l-3.3 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-4.5 0c-5-75-45.1-140.4-104-180l66.9 0c10.4 21.3 32.3 36 57.6 36c35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36L400 84l0-4c0-26.5-21.5-48-48-48l-64 0zM88 376l48 0 0 48-48 0 0-48zm416 48l0-48 48 0 0 48-48 0z\"],\n    \"bell-slash\": [640, 512, [128277, 61943], \"f1f6\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-90.2-70.7c.2-.4 .4-.9 .6-1.3c5.2-11.5 3.1-25-5.3-34.4l-7.4-8.3C497.3 319.2 480 273.9 480 226.8l0-18.8c0-77.4-55-142-128-156.8L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 19.2c-42.6 8.6-79 34.2-102 69.3L38.8 5.1zM406.2 416L160 222.1l0 4.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S115.4 416 128 416l278.2 0zm-40.9 77.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"],\n    \"tablet\": [448, 512, [\"tablet-android\"], \"f3fb\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM176 432l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"school-flag\": [576, 512, [], \"e56e\", \"M288 0L400 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-79.3 0 89.6 64L512 160c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-176 0 0-112c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 112L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l101.7 0L256 95.5 256 32c0-17.7 14.3-32 32-32zm48 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM80 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm368 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM80 352c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm384 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0z\"],\n    \"fill\": [512, 512, [], \"f575\", \"M86.6 9.4C74.1-3.1 53.9-3.1 41.4 9.4s-12.5 32.8 0 45.3L122.7 136 30.6 228.1c-37.5 37.5-37.5 98.3 0 135.8L148.1 481.4c37.5 37.5 98.3 37.5 135.8 0L474.3 290.9c28.1-28.1 28.1-73.7 0-101.8L322.9 37.7c-28.1-28.1-73.7-28.1-101.8 0L168 90.7 86.6 9.4zM168 181.3l49.4 49.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136l53.1-53.1c3.1-3.1 8.2-3.1 11.3 0L429.1 234.3c3.1 3.1 3.1 8.2 0 11.3L386.7 288 67.5 288c1.4-5.4 4.2-10.4 8.4-14.6L168 181.3z\"],\n    \"angle-up\": [448, 512, [8963], \"f106\", \"M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\"],\n    \"drumstick-bite\": [512, 512, [], \"f6d7\", \"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2C69.8 320.6 65 320 60 320c-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12c0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5c-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4l89.2 0c6.3 0 12.4-.3 18.5-1c11.9-1.2 16.4-15.5 10.8-26c-8.5-15.8-13.3-33.8-13.3-53c0-61.9 50.1-112 112-112c8 0 15.7 .8 23.2 2.4c11.7 2.5 24.1-5.9 22-17.6C494.5 62.5 422.5 0 336 0C238.8 0 160 78.8 160 176l0 89.2z\"],\n    \"holly-berry\": [512, 512, [], \"f7aa\", \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM276.8 383.8c1 .1 2.1 .2 3.2 .2c39.8 0 72 32.2 72 72l0 22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.6 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6c-34.6 0-62.7-28.1-62.7-62.7l0-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7c4.2 9.7 5.8 20.8 3.7 32.3L275 298.7c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.6 234.5c-15.5-5.2-31.6 6.4-31.6 22.8l0 32C96 323.9 67.9 352 33.3 352c-16.4 0-27.9 16-22.8 31.6l4.3 12.8c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.2 489.4 22.6 505.8 40.5 501L60 495.6c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8l0-32c0-34.6 28.1-62.7 62.7-62.7c16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5L196 240.4c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"],\n    \"chevron-left\": [320, 512, [9001], \"f053\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"],\n    \"bacteria\": [640, 512, [], \"e059\", \"M304.9 .7c-9.6-2.7-19.5 2.8-22.3 12.4l-4.3 15.2c-8.3-.6-16.8 0-25.2 1.9c-7.3 1.7-14.3 3.5-21.1 5.5l-5.5-12.7c-3.9-9.1-14.5-13.4-23.6-9.5s-13.4 14.5-9.5 23.6l4.4 10.4c-16.6 6.7-31.7 14.4-45.4 22.8L147 62c-5.5-8.3-16.7-10.5-25-5s-10.5 16.7-5 25l6 9c-13.7 11-25.5 22.8-35.8 34.9l-10-8c-7.8-6.2-19.1-5-25.3 2.8s-5 19.1 2.8 25.3L65.9 155c-1.8 2.8-3.5 5.7-5.1 8.5c-6.6 11.4-11.8 22.6-16 33l-8-3.2c-9.2-3.7-19.7 .8-23.4 10s.8 19.7 10 23.4l10.4 4.2c-.2 .8-.4 1.5-.5 2.3c-2.2 9.3-3.4 17.3-4.1 23.4c-.4 3.1-.6 5.7-.8 7.8c-.1 1.1-.1 2-.2 2.8l-.1 1.1 0 .5 0 .2 0 .1c0 0 0 .1 29.1 1c0 0 0 0-.1 0L28 269.3c-.1 3.1 0 6.1 .2 9.1l-15.2 4.3C3.5 285.4-2 295.4 .7 304.9s12.7 15.1 22.3 12.4l15.6-4.5c7.6 13.6 18.9 25 32.6 32.6L66.7 361c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.3-12.4l4.3-15.2c1.2 .1 2.4 .2 3.6 .2c15.6 .5 30.3-3.3 43-10.2l9 9c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-7.2-7.2c9.3-12.6 15.2-27.8 16.3-44.5l7.1 3c9.1 3.9 19.7-.3 23.6-9.5s-.3-19.7-9.5-23.6l-8.6-3.7c6.4-9.9 17.3-22.4 36.9-33.3l1.3 4.4c2.7 9.6 12.7 15.1 22.3 12.4s15.1-12.7 12.4-22.3l-2.3-8.1c3.8-1.1 7.7-2.1 11.9-3.1c11.6-2.7 22.1-7.7 31.1-14.4l7.2 7.2c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-9-9c7.6-13.9 11.3-30.1 10.1-46.6l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3S370.6 64 361 66.7l-15.6 4.5c-7.7-13.9-19.1-25.1-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3zM112 272l-48-1.5c0 0 0 0 0 0c11.7 .4 27.3 .9 48 1.6zm16-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-48a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM322.7 489c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.2-12.4l4.3-15.2c8.3 .6 16.8 0 25.2-1.9c7.3-1.7 14.3-3.5 21.1-5.5l5.5 12.7c3.9 9.1 14.5 13.4 23.6 9.5s13.4-14.5 9.5-23.6l-4.4-10.4c16.6-6.7 31.7-14.4 45.4-22.8L493 450c5.5 8.3 16.7 10.5 25 5s10.5-16.7 5-25l-6-9c13.7-11 25.5-22.8 35.8-34.9l10 8c7.8 6.2 19.1 5 25.3-2.8s5-19.1-2.8-25.3L574.1 357c1.8-2.8 3.5-5.7 5.1-8.5c6.6-11.4 11.8-22.6 16-33l8 3.2c9.2 3.7 19.7-.8 23.4-10s-.8-19.7-10-23.4l-10.4-4.2c.2-.8 .4-1.5 .5-2.3c2.2-9.3 3.4-17.3 4.1-23.4c.4-3.1 .6-5.7 .8-7.8c.1-1.1 .1-2 .2-2.8l.1-1.1 0-.5 0-.2 0-.1c0 0 0-.1-29.1-1c0 0 0 0 .1 0l29.1 .9c.1-3.1 0-6.1-.2-9.1l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3s-12.7-15.1-22.3-12.4l-15.6 4.5c-7.6-13.6-18.9-25-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3s-19.5 2.8-22.3 12.4l-4.3 15.2c-1.2-.1-2.4-.2-3.6-.2c-15.6-.5-30.3 3.3-43 10.2l-9-9c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l7.2 7.2c-9.3 12.6-15.2 27.8-16.3 44.5l-7.1-3c-9.1-3.9-19.7 .3-23.6 9.5s.3 19.7 9.5 23.6l8.6 3.7c-6.4 9.9-17.3 22.4-36.9 33.3l-1.3-4.4c-2.7-9.6-12.7-15.1-22.3-12.4s-15.1 12.7-12.4 22.3l2.3 8.1c-3.8 1.1-7.7 2.1-11.9 3.1c-11.6 2.7-22.1 7.7-31.1 14.4l-7.2-7.2c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l9 9c-7.6 13.9-11.3 30.1-10.1 46.6l-15.2 4.3c-9.6 2.7-15.1 12.7-12.4 22.2s12.7 15.1 22.3 12.4l15.6-4.5c7.7 13.9 19.1 25.1 32.6 32.6L322.7 489zM576 241.5c0 0 0 0 0 0c-11.7-.4-27.3-.9-48-1.6l48 1.5zM448 384a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M0 112C0 85.5 21.5 64 48 64l112 0 80 0 46.5 0c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8l0 12 0 16 0 48c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-13.8L273.9 352 240 352l-80 0-48 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l48 0 80 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-80 0L48 160c-26.5 0-48-21.5-48-48z\"],\n    \"notdef\": [384, 512, [], \"e1fe\", \"M64 390.3L153.5 256 64 121.7l0 268.6zM102.5 448l179.1 0L192 313.7 102.5 448zm128-192L320 390.3l0-268.6L230.5 256zM281.5 64L102.5 64 192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"],\n    \"disease\": [512, 512, [], \"f7fa\", \"M236.4 61.4L227 75.5c-21.3 32-59.4 48.5-97.3 42.1l-59.6-9.9C33.4 101.6 0 129.9 .1 167.1c0 15.9 6.4 31.2 17.6 42.5l29.2 29.2c11 11 17.2 25.9 17.2 41.5c0 15.8-6.4 30.9-17.7 42L33.3 335.1C22.2 345.9 16 360.7 16 376.2c0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6l10 0c27.2 0 53.7 9.3 75 26.3L287.8 467c10.5 8.4 23.6 13 37 13c32.7 0 59.3-26.5 59.3-59.3l0-25.2c0-34.9 21.4-66.2 53.9-78.8l36.9-14.3c22.4-8.7 37.2-30.3 37.2-54.3c0-28.1-20.1-52.3-47.8-57.3l-28-5.1c-36.5-6.7-65.4-34.5-73.6-70.7l-7.1-31.5C348.9 53.4 322.1 32 291.3 32c-22 0-42.6 11-54.9 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm0 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"briefcase-medical\": [512, 512, [], \"f469\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zm96 152c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"genderless\": [384, 512, [], \"f22d\", \"M192 144a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm0 288a176 176 0 1 0 0-352 176 176 0 1 0 0 352z\"],\n    \"chevron-right\": [320, 512, [9002], \"f054\", \"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"],\n    \"retweet\": [576, 512, [], \"f079\", \"M272 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0c-17.7 0-32-14.3-32-32l0-128 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 128c0 53 43 96 96 96l112 0zM304 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32 14.3 32 32l0 128-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-128c0-53-43-96-96-96L304 96z\"],\n    \"car-rear\": [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 96l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 192l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256l0 80c0 23.7 12.9 44.4 32 55.4L32 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 256 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-56.6c19.1-11.1 32-31.7 32-55.4l0-80c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32L165.4 32c-40.8 0-77.1 25.8-90.6 64.3zM208 272l96 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm360-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"],\n    \"pump-soap\": [448, 512, [], \"e06b\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM256 360c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9c3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C219 279.1 256 327.5 256 360z\"],\n    \"video-slash\": [640, 512, [], \"f4e2\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.4-67.7 13.8 9.2c9.8 6.5 22.4 7.2 32.9 1.6s16.9-16.4 16.9-28.2l0-256c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.9 1.6l-96 64L448 174.9l0 17.1 0 128 0 5.8-32-25.1L416 128c0-35.3-28.7-64-64-64L113.9 64 38.8 5.1zM407 416.7L32.3 121.5c-.2 2.1-.3 4.3-.3 6.5l0 256c0 35.3 28.7 64 64 64l256 0c23.4 0 43.9-12.6 55-31.3z\"],\n    \"battery-quarter\": [576, 512, [\"battery-2\"], \"f243\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm112 96l-96 0 0 128 96 0 0-128z\"],\n    \"radio\": [512, 512, [128251], \"f8d7\", \"M494.8 47c12.7-3.7 20-17.1 16.3-29.8S494-2.8 481.2 1L51.7 126.9c-9.4 2.7-17.9 7.3-25.1 13.2C10.5 151.7 0 170.6 0 192l0 4L0 304 0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-229.5 0L494.8 47zM368 240a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM80 256c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16zM64 320c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 336c-8.8 0-16-7.2-16-16zm16 64c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16z\"],\n    \"baby-carriage\": [512, 512, [\"carriage-baby\"], \"f77d\", \"M256 192L.1 192C2.7 117.9 41.3 52.9 99 14.1c13.3-8.9 30.8-4.3 39.9 8.8L256 192zm128-32c0-35.3 28.7-64 64-64l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 64c0 25.2-5.8 50.2-17 73.5s-27.8 44.5-48.6 62.3s-45.5 32-72.7 41.6S253.4 416 224 416s-58.5-5-85.7-14.6s-51.9-23.8-72.7-41.6s-37.3-39-48.6-62.3S0 249.2 0 224l224 0 160 0 0-64zM80 416a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm240 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"],\n    \"traffic-light\": [320, 512, [128678], \"f637\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 88.4 71.6 160 160 160s160-71.6 160-160l0-288c0-35.3-28.7-64-64-64L64 0zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z\"],\n    \"thermometer\": [512, 512, [], \"f491\", \"M96 382.1l0-88.8c0-14.9 5.9-29.1 16.4-39.6l27.3-27.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 45.5-45.5C355.2 10.9 381.4 0 408.8 0C465.8 0 512 46.2 512 103.2c0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l89-89z\"],\n    \"vr-cardboard\": [640, 512, [], \"f729\", \"M576 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l120.4 0c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4L576 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"hand-middle-finger\": [448, 512, [128405], \"f806\", \"M232 0c-22.1 0-40 17.9-40 40l0 164.2c-8.5-7.6-19.7-12.2-32-12.2c-26.5 0-48 21.5-48 48l0 7 0 73c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-55.7c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334L32 372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1L304 512c70.7 0 128-57.3 128-128l0-64 0-32c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 227.5 329.3 208 304 208c-12.3 0-23.5 4.6-32 12.2L272 40c0-22.1-17.9-40-40-40z\"],\n    \"percent\": [384, 512, [62101, 62785, \"percentage\"], \"25\", \"M374.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-320 320c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l320-320zM128 128A64 64 0 1 0 0 128a64 64 0 1 0 128 0zM384 384a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"],\n    \"truck-moving\": [640, 512, [], \"f4df\", \"M64 32C28.7 32 0 60.7 0 96L0 304l0 80 0 16c0 44.2 35.8 80 80 80c26.2 0 49.4-12.6 64-32c14.6 19.4 37.8 32 64 32c44.2 0 80-35.8 80-80c0-5.5-.6-10.8-1.6-16L416 384l33.6 0c-1 5.2-1.6 10.5-1.6 16c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16l1.6 0c17.7 0 32-14.3 32-32l0-64 0-16 0-10.3c0-9.2-3.2-18.2-9-25.3l-58.8-71.8c-10.6-13-26.5-20.5-43.3-20.5L480 144l0-48c0-35.3-28.7-64-64-64L64 32zM585 256l-105 0 0-64 48.8 0c2.4 0 4.7 1.1 6.2 2.9L585 256zM528 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM176 400a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM80 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"glass-water-droplet\": [384, 512, [], \"e4f5\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM83 297.5L66.4 64l251.3 0L301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0s-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5c-6.1-7.7-17.5-7.7-23.6 0C161.7 125.9 128 172 128 196c0 33.1 28.7 60 64 60s64-26.9 64-60z\"],\n    \"display\": [576, 512, [], \"e163\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 288L64 352 64 64l448 0z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"thumbtack\": [384, 512, [128204, 128392, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.3 46.3 0 64 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-29.5 0 11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3L32 352c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64 64 64C46.3 64 32 49.7 32 32zM160 384l64 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"],\n    \"trophy\": [576, 512, [127942], \"f091\", \"M400 0L176 0c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8L24 64C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9L192 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-26.1 0C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24L446.4 64c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112l84.4 0c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6l84.4 0c-5.1 66.3-31.1 111.2-63 142.3z\"],\n    \"person-praying\": [448, 512, [128720, \"pray\"], \"f683\", \"M352 64A64 64 0 1 0 224 64a64 64 0 1 0 128 0zM232.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36C253.6 156.7 228.6 144 202 144c-30.9 0-59.2 17.1-73.6 44.4L79.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L158.6 432 72 432c-22.1 0-40 17.9-40 40s17.9 40 40 40l208 0c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7L187.7 354l45-90z\"],\n    \"hammer\": [576, 512, [128296], \"f6e3\", \"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6l0-12.1L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0l18.1 0c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M224 0c17.7 0 32 14.3 32 32l0 208-64 0 0-208c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM93.3 51.2L175.9 240l-69.9 0L34.7 76.8C27.6 60.6 35 41.8 51.2 34.7s35.1 .3 42.1 16.5zm27 221.3l-.2-.5 69.9 0 26.1 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9l-11.6-11.6C77.5 429.5 64 396.9 64 363l0-27c0-32.7 24.6-59.7 56.3-63.5z\"],\n    \"rotate\": [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M142.9 142.9c-17.5 17.5-30.1 38-37.8 59.8c-5.9 16.7-24.2 25.4-40.8 19.5s-25.4-24.2-19.5-40.8C55.6 150.7 73.2 122 97.6 97.6c87.2-87.2 228.3-87.5 315.8-1L455 55c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 128c0 13.3-10.7 24-24 24l-8.4 0c0 0 0 0 0 0L344 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l41.1-41.1c-62.6-61.5-163.1-61.2-225.3 1zM16 312c0-13.3 10.7-24 24-24l7.6 0 .7 0L168 288c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-41.1 41.1c62.6 61.5 163.1 61.2 225.3-1c17.5-17.5 30.1-38 37.8-59.8c5.9-16.7 24.2-25.4 40.8-19.5s25.4 24.2 19.5 40.8c-10.8 30.6-28.4 59.3-52.9 83.8c-87.2 87.2-228.3 87.5-315.8 1L57 457c-6.9 6.9-17.2 8.9-26.2 5.2S16 449.7 16 440l0-119.6 0-.7 0-7.6z\"],\n    \"spinner\": [512, 512, [], \"f110\", \"M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z\"],\n    \"robot\": [640, 512, [129302], \"f544\", \"M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z\"],\n    \"peace\": [512, 512, [9774], \"f67c\", \"M224 445.3l0-121.8-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8l0-174.2C133.2 81.9 64 160.9 64 256c0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5L288 323.5l0 121.8c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1c0-95.1-69.2-174.1-160-189.3l0 174.2L422.8 351.1zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"],\n    \"gears\": [640, 512, [\"cogs\"], \"f085\", \"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8l-.7 0c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"warehouse\": [640, 512, [], \"f494\", \"M0 488L0 171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4L640 488c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-264c0-17.7-14.3-32-32-32l-384 0c-17.7 0-32 14.3-32 32l0 264c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24l0-56 384 0 0 56c0 13.3-10.7 24-24 24zM128 400l0-64 384 0 0 64-384 0zm0-96l0-80 384 0 0 80-384 0z\"],\n    \"arrow-up-right-dots\": [576, 512, [], \"e4b7\", \"M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l50.7 0L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3l0 50.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L160 0zM576 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM448 208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm128 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM144 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM576 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-48-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"],\n    \"splotch\": [512, 512, [], \"f5bc\", \"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0c28.5 0 53.6 18.7 61.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2c0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6c-14.8 0-29.3-5.1-40.8-14.3l-55.4-44.3c-4.5-3.6-9.3-6.7-14.5-9.2c-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9C47.8 458.2 16 431.6 16 396.5c0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1c0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9c0-33.4 30.1-58.8 63-53.2l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM199.3 129.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm154.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"],\n    \"dice-four\": [448, 512, [9859], \"f524\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"sim-card\": [384, 512, [], \"f7c4\", \"M64 0L242.7 0c17 0 33.3 6.7 45.3 18.7L365.3 96c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0zM96 192c-17.7 0-32 14.3-32 32l0 32 64 0 0-64-32 0zM64 352l80 0 96 0 80 0 0-64-80 0-96 0-80 0 0 64zM320 224c0-17.7-14.3-32-32-32l-32 0 0 64 64 0 0-32zM160 192l0 64 64 0 0-64-64 0zM288 448c17.7 0 32-14.3 32-32l0-32-64 0 0 64 32 0zM160 384l0 64 64 0 0-64-64 0zM64 416c0 17.7 14.3 32 32 32l32 0 0-64-64 0 0 32z\"],\n    \"transgender\": [512, 512, [9895, \"transgender-alt\"], \"f225\", \"M112 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-31 31L112 78.1l7-7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-7 7 15.2 15.2C187.7 107.6 220.5 96 256 96s68.3 11.6 94.9 31.2l68.8-68.8-31-31c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l96 0c8.8 0 16 7.2 16 16l0 96c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-31-31-68.8 68.8C404.4 187.7 416 220.5 416 256c0 80.2-59 146.6-136 158.2l0 17.8 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-17.8C155 402.6 96 336.2 96 256c0-35.5 11.6-68.3 31.2-94.9L112 145.9l-7 7c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l7-7L58.3 92.3l-31 31c-4.6 4.6-11.5 5.9-17.4 3.5S0 118.5 0 112L0 16C0 7.2 7.2 0 16 0l96 0zM352 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"],\n    \"mercury\": [384, 512, [9791], \"f223\", \"M72.1 7C85.8-4 106-1.8 117 12c17.6 22 44.7 36 75 36s57.3-14 75-36c11.1-13.8 31.2-16 45-5s16 31.2 5 45c-7.8 9.7-16.6 18.4-26.4 26.1C337.3 109.7 368 163.3 368 224c0 89.1-66.2 162.7-152 174.4l0 25.6 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-25.6C82.2 386.7 16 313.1 16 224c0-60.7 30.7-114.3 77.5-145.9C83.7 70.5 74.9 61.7 67.1 52c-11.1-13.8-8.8-33.9 5-45zM80 224a112 112 0 1 0 224 0A112 112 0 1 0 80 224z\"],\n    \"arrow-turn-down\": [384, 512, [\"level-down\"], \"f149\", \"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\"],\n    \"person-falling-burst\": [640, 512, [], \"e547\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 9.8c0 39-23.7 74-59.9 88.4C71.6 154.5 32 213 32 278.2L32 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-73.8c0-10 1.6-19.8 4.5-29L261.1 497.4c9.6 14.8 29.4 19.1 44.3 9.5s19.1-29.4 9.5-44.3L222.6 320l1.4 0 80 0 38.4 51.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C341.3 263.1 327.1 256 312 256l-71.5 0-56.8-80.2-.2-.3c44.7-29 72.5-79 72.5-133.6l0-9.8zM96 80A48 48 0 1 0 0 80a48 48 0 1 0 96 0zM464 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 78.7-12.2c6.5-1 11.7-5.9 13.1-12.2s-1.1-13-6.5-16.7l-65.6-45.1L603 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L508.3 92.1l-29.4-74C476.4 12 470.6 8 464 8s-12.4 4-14.9 10.1l-29.4 74L343.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7c.1 .3 .1 .6 .2 .8l19.4 0c20.1 0 39.2 7.5 53.8 20.8l18.4 2.9L383 265.3l36.2 48.3c2.1 2.8 3.9 5.7 5.5 8.6L464 286.1z\"],\n    \"award\": [384, 512, [], \"f559\", \"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z\"],\n    \"ticket-simple\": [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 64c0 8.8-7.4 15.7-15.7 18.6C541.5 217.1 528 235 528 256s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6l0 64c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64l0-64c0-8.8 7.4-15.7 15.7-18.6C34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192l0-64z\"],\n    \"building\": [384, 512, [127970, 61687], \"f1ad\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"],\n    \"angles-left\": [512, 512, [171, \"angle-double-left\"], \"f100\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"],\n    \"qrcode\": [448, 512, [], \"f029\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48L0 80zM64 96l0 64 64 0 0-64L64 96zM0 336c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96zm64 16l0 64 64 0 0-64-64 0zM304 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm80 64l-64 0 0 64 64 0 0-64zM256 304c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16l0 96c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-160zM368 480a16 16 0 1 1 0-32 16 16 0 1 1 0 32zm64 0a16 16 0 1 1 0-32 16 16 0 1 1 0 32z\"],\n    \"clock-rotate-left\": [512, 512, [\"history\"], \"f1da\", \"M75 75L41 41C25.9 25.9 0 36.6 0 57.9L0 168c0 13.3 10.7 24 24 24l110.1 0c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65 0-94.1c0-13.3-10.7-24-24-24z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M476.8 126.3c-4.1 1.1-8.4 1.7-12.8 1.7c-26.5 0-48-21-48-47c0-5 1.8-11.3 4.6-18.1c.3-.7 .6-1.4 .9-2.1c9-20.2 26.5-44.9 36-57.5c3.2-4.4 9.6-4.4 12.8 0C483.4 20.6 512 61 512 81c0 21.7-14.9 39.8-35.2 45.3zM256 0c51.4 0 99.3 15.2 139.4 41.2c-1.5 3.1-3 6.2-4.3 9.3c-3.4 8-7.1 19-7.1 30.5c0 44.3 36.6 79 80 79c9.6 0 18.8-1.7 27.4-4.8c13.3 30.9 20.6 65 20.6 100.8c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0zM383.8 317.8C345.3 329.4 301.9 336 256 336s-89.3-6.6-127.8-18.2c-12.3-3.7-24.3 7-19.2 18.7c24.5 56.9 81.1 96.7 147 96.7s122.5-39.8 147-96.7c5.1-11.8-6.9-22.4-19.2-18.7zm-166.2-89s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0z\"],\n    \"file-export\": [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 128-168 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l168 0 0 112c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM384 336l0-48 110.1 0-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39L384 336zm0-208l-128 0L256 0 384 128z\"],\n    \"shield\": [512, 512, [128737, \"shield-blank\"], \"f132\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z\"],\n    \"arrow-up-short-wide\": [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0z\"],\n    \"comment-nodes\": [640, 512, [], \"e696\", \"M256 448c10.8 0 21.5-.5 32-1.6c.3-15.8 4.4-31.7 12.9-46.4c16-27.7 43.7-44.4 73.2-47.5l16.7-29.2c-4.3-11-6.7-22.9-6.7-35.4c0-53 43-96 96-96c9.1 0 17.8 1.3 26.2 3.6C481.1 102.1 378.6 32 256 32C114.6 32 0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.2 .3-.4 .5-.6 .7c-.3 .3-.5 .5-.6 .7l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm72.6-32c-17.7 30.6-7.2 69.7 23.4 87.4s69.7 7.2 87.4-23.4c1.5-2.6 2.8-5.3 3.9-8l73.3 0c1.1 2.7 2.4 5.4 3.9 8c17.7 30.6 56.8 41.1 87.4 23.4s41.1-56.8 23.4-87.4c-13.4-23.2-39.1-34.8-64-31.4l-17.6-30.7c-11 11.7-25 20.6-40.6 25.6l16.5 28.9c-3.8 4.8-6.8 10-9 15.6l-73.4 0c-2.2-5.6-5.3-10.8-9-15.6l33-57.7c4.1 .8 8.4 1.3 12.8 1.3c35.3 0 64-28.7 64-64s-28.7-64-64-64s-64 28.7-64 64c0 13.4 4.1 25.8 11.2 36.1l-34.6 60.5c-25-3.4-50.6 8.3-64 31.4z\"],\n    \"house-medical\": [576, 512, [], \"e3b2\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM256 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"],\n    \"golf-ball-tee\": [384, 512, [\"golf-ball\"], \"f450\", \"M384 192c0 66.8-34.1 125.6-85.8 160L85.8 352C34.1 317.6 0 258.8 0 192C0 86 86 0 192 0S384 86 384 192zM242.1 256.6c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zm-52.3-49.3c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4c0 18.5-15 33.5-33.5 33.5zm113.5-17.5c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zM96 416c0-17.7 14.3-32 32-32l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0c-8.8 0-16 7.2-16 16l0 16c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-16c0-8.8-7.2-16-16-16l-16 0c-17.7 0-32-14.3-32-32z\"],\n    \"circle-chevron-left\": [512, 512, [\"chevron-circle-left\"], \"f137\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\"],\n    \"house-chimney-window\": [576, 512, [], \"e00d\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM248 192c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24l-80 0z\"],\n    \"pen-nib\": [512, 512, [10001], \"f5ad\", \"M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.7-9.2L288 94.6z\"],\n    \"tent-arrow-turn-left\": [576, 512, [], \"e580\", \"M120.1 41.8c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120 456 120c39.8 0 72 32.2 72 72l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-66.3-53.7-120-120-120L86.5 72l33.5-30.2zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"],\n    \"tents\": [640, 512, [], \"e582\", \"M396.6 6.5L235.8 129.1c9.6 1.8 18.9 5.8 27 12l168 128c13.2 10.1 22 24.9 24.5 41.4l6.2 41.5L608 352c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128c-11.5-8.7-27.3-8.7-38.8 0zm-153.2 160c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S22.7 512 32 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"],\n    \"wand-magic\": [512, 512, [\"magic\"], \"f0d0\", \"M14.1 463.3c-18.7-18.7-18.7-49.1 0-67.9L395.4 14.1c18.7-18.7 49.1-18.7 67.9 0l34.6 34.6c18.7 18.7 18.7 49.1 0 67.9L116.5 497.9c-18.7 18.7-49.1 18.7-67.9 0L14.1 463.3zM347.6 187.6l105-105L429.4 59.3l-105 105 23.3 23.3z\"],\n    \"dog\": [576, 512, [128021], \"f6d3\", \"M309.6 158.5L332.7 19.8C334.6 8.4 344.5 0 356.1 0c7.5 0 14.5 3.5 19 9.5L392 32l52.1 0c12.7 0 24.9 5.1 33.9 14.1L496 64l56 0c13.3 0 24 10.7 24 24l0 24c0 44.2-35.8 80-80 80l-32 0-16 0-21.3 0-5.1 30.5-112-64zM416 256.1L416 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-115.2c-24 12.3-51.2 19.2-80 19.2s-56-6.9-80-19.2L160 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-230.2c-28.8-10.9-51.4-35.3-59.2-66.5L1 167.8c-4.3-17.1 6.1-34.5 23.3-38.8s34.5 6.1 38.8 23.3l3.9 15.5C70.5 182 83.3 192 98 192l30 0 16 0 159.8 0L416 256.1zM464 80a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"],\n    \"carrot\": [512, 512, [129365], \"f787\", \"M346.7 6C337.6 17 320 42.3 320 72c0 40 15.3 55.3 40 80s40 40 80 40c29.7 0 55-17.6 66-26.7c4-3.3 6-8.2 6-13.3s-2-10-6-13.2c-11.4-9.1-38.3-26.8-74-26.8c-32 0-40 8-40 8s8-8 8-40c0-35.7-17.7-62.6-26.8-74C370 2 365.1 0 360 0s-10 2-13.3 6zM244.6 136c-40 0-77.1 18.1-101.7 48.2l60.5 60.5c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-55.3-55.3 0 .1L2.2 477.9C-2 487-.1 497.8 7 505s17.9 9 27.1 4.8l134.7-62.4-52.1-52.1c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L199.7 433l100.2-46.4c46.4-21.5 76.2-68 76.2-119.2C376 194.8 317.2 136 244.6 136z\"],\n    \"moon\": [384, 512, [127769, 9214], \"f186\", \"M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z\"],\n    \"wine-glass-empty\": [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M64 0C47.4 0 33.5 12.8 32.1 29.3l-14 168.4c-6 72 42.5 135.2 109.9 150.6l0 99.6-48 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0-99.6c67.4-15.4 115.9-78.6 109.9-150.6l-14-168.4C286.5 12.8 272.6 0 256 0L64 0zM81.9 203.1L93.4 64l133.1 0 11.6 139.1C242 248.8 205.9 288 160 288s-82-39.2-78.1-84.9z\"],\n    \"cheese\": [512, 512, [], \"f7ef\", \"M512 240.2l0 15.8L0 256c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7C418.8 32 512 125.2 512 240.2zm0 47.8l0 128c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 288l512 0z\"],\n    \"yin-yang\": [512, 512, [9775], \"f6ad\", \"M256 64c53 0 96 43 96 96s-43 96-96 96s-96 43-96 96s43 96 96 96C150 448 64 362 64 256S150 64 256 64zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm32-352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"],\n    \"music\": [512, 512, [127925], \"f001\", \"M499.1 6.3c8.1 6 12.9 15.6 12.9 25.7l0 72 0 264c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L448 147 192 223.8 192 432c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L128 200l0-72c0-14.1 9.3-26.6 22.8-30.7l320-96c9.7-2.9 20.2-1.1 28.3 5z\"],\n    \"code-commit\": [640, 512, [], \"f386\", \"M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l131.2 0C178 151 242.6 96 320 96s142 55 156.8 128L608 224c17.7 0 32 14.3 32 32s-14.3 32-32 32l-131.2 0z\"],\n    \"temperature-low\": [512, 512, [], \"f76b\", \"M448 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 96a96 96 0 1 1 192 0A96 96 0 1 1 320 96zM144 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C70.2 332.6 64 349.5 64 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L192 112c0-26.5-21.5-48-48-48zM32 112C32 50.2 82.1 0 144 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S0 447.5 0 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L32 112zM192 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"],\n    \"person-biking\": [640, 512, [128692, \"biking\"], \"f84a\", \"M400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L288 305.1 288 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-10.7-5.3-20.7-14.2-26.6L295 232.9l60.3-48.5L396 217c5.7 4.5 12.7 7 20 7l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.8 0zM56 384a72 72 0 1 1 144 0A72 72 0 1 1 56 384zm200 0A128 128 0 1 0 0 384a128 128 0 1 0 256 0zm184 0a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zm200 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"],\n    \"broom\": [576, 512, [129529], \"f51a\", \"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6l0 29.1L364.3 320l29.1 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\"],\n    \"shield-heart\": [512, 512, [], \"e574\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z\"],\n    \"gopuram\": [512, 512, [], \"f664\", \"M120 0c13.3 0 24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 48 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 0 32 0 64c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-64 0 0-160-32 0 0-128-32 0 0-96-32 0 0 96 32 0 0 128 32 0 0 160-80 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48-80 0 0-160 32 0 0-128 32 0 0-96-32 0 0 96-32 0 0 128-32 0 0 160-64 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-96c0-17.7 14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l0-64 0-32 0-8c0-13.3 10.7-24 24-24zM256 272c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-32-80l0 32 64 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"],\n    \"earth-oceania\": [512, 512, [\"globe-oceania\"], \"e47b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM208.6 357.3l-39-13.5c-6.5-2.2-13.6-2.3-20.1-.3l-15.3 4.9c-18.5 5.9-38.5-2.4-47.5-19.5l-3.3-6.2c-10.6-20.1-2.3-45 18.2-54.7l35.3-16.8c2.3-1.1 4.4-2.8 5.9-4.8l5.3-7c7.2-9.6 18.6-15.3 30.6-15.3s23.4 5.7 30.6 15.3l4.6 6.1c2 2.6 4.9 4.5 8.1 5.1c7.8 1.6 15.7-1.5 20.4-7.9l10.4-14.2c2-2.8 5.3-4.4 8.7-4.4c4.4 0 8.4 2.7 10 6.8l10.1 25.9c2.8 7.2 6.7 14 11.5 20.2L311 299.8c5.8 7.4 9 16.6 9 26s-3.2 18.6-9 26L299 367.2c-8.3 10.6-21 16.8-34.4 16.8c-8.4 0-16.6-2.4-23.7-7l-25.4-16.4c-2.2-1.4-4.5-2.5-6.9-3.4zm65.2-214.8L296 164.7c10.1 10.1 2.9 27.3-11.3 27.3l-29.9 0c-5.6 0-11.1-1.2-16.2-3.4l-42.8-19c-14.3-6.3-11.9-27.3 3.4-30.3l38.5-7.7c13.1-2.6 26.7 1.5 36.1 10.9zM248 432c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16zM431.2 298.9l8 24c2.8 8.4-1.7 17.4-10.1 20.2s-17.4-1.7-20.2-10.1l-8-24c-2.8-8.4 1.7-17.4 10.1-20.2s17.4 1.7 20.2 10.1zm-19.9 80.4l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"],\n    \"square-xmark\": [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm79 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"hashtag\": [448, 512, [62098], \"23\", \"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\"],\n    \"up-right-and-down-left-from-center\": [512, 512, [\"expand-alt\"], \"f424\", \"M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z\"],\n    \"oil-can\": [640, 512, [], \"f613\", \"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-80 0-48 0-48 0c-26.5 0-48 21.5-48 48l0 64.8c0 19 11.2 36.2 28.5 43.9l67.5 30L96 368c0 26.5 21.5 48 48 48l259.1 0c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192l-50.5-25.2c-8.9-4.4-18.7-6.8-28.6-6.8L288 160l0-32 32 0zM96 208l0 86.1L48 272.8 48 208l48 0z\"],\n    \"t\": [384, 512, [116], \"54\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l128 0 0 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 32 32 32z\"],\n    \"hippo\": [640, 512, [129435], \"f6ed\", \"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2l32 0c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1c0 10.2 7.4 18.8 16.7 23c27.9 12.5 47.3 40.5 47.3 73c0 26.2-12.6 49.4-32 64l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-16-64 0 0 16c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-17.6c-11.8-2.4-22.7-7.4-32-14.4c-1.5-1.1-2.9-2.3-4.3-3.5c-17-14.7-27.7-36.4-27.7-60.5c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2l0 10.8c0 17.7 14.3 32 32 32l32 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-76c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12l0 76c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-118.9L45.9 369.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7C32 155.7 117.2 68 223.8 64.1l.2-.1 7.2 0L256 64l32 0c41.7 0 83.4 12.1 117.2 25.7c1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"],\n    \"chart-column\": [512, 512, [], \"e0e3\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zM160 224c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm128-64l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32s32 14.3 32 32zm64 32c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM480 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32z\"],\n    \"infinity\": [640, 512, [8734, 9854], \"f534\", \"M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1l0 29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9l0-29.7zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1l0 29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1l0-29.7c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z\"],\n    \"vial-circle-check\": [512, 512, [], \"e596\", \"M0 64C0 46.3 14.3 32 32 32l64 0 64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 170.8c-20.2 28.6-32 63.5-32 101.2c0 25.2 5.3 49.1 14.8 70.8C189.5 463.7 160.6 480 128 480c-53 0-96-43-96-96L32 96C14.3 96 0 81.7 0 64zM96 96l0 96 64 0 0-96L96 96zM224 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L352 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"person-arrow-down-to-line\": [640, 512, [], \"e538\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM464 64l0 242.7-25.4-25.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L528 306.7 528 64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"],\n    \"voicemail\": [640, 512, [], \"f897\", \"M144 320a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm119.8 0c15.3-22.9 24.2-50.4 24.2-80c0-79.5-64.5-144-144-144S0 160.5 0 240s64.5 144 144 144l352 0c79.5 0 144-64.5 144-144s-64.5-144-144-144s-144 64.5-144 144c0 29.6 8.9 57.1 24.2 80l-112.5 0zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"],\n    \"fan\": [512, 512, [], \"f863\", \"M258.6 0c-1.7 0-3.4 .1-5.1 .5C168 17 115.6 102.3 130.5 189.3c2.9 17 8.4 32.9 15.9 47.4L32 224l-2.6 0C13.2 224 0 237.2 0 253.4c0 1.7 .1 3.4 .5 5.1C17 344 102.3 396.4 189.3 381.5c17-2.9 32.9-8.4 47.4-15.9L224 480l0 2.6c0 16.2 13.2 29.4 29.4 29.4c1.7 0 3.4-.1 5.1-.5C344 495 396.4 409.7 381.5 322.7c-2.9-17-8.4-32.9-15.9-47.4L480 288l2.6 0c16.2 0 29.4-13.2 29.4-29.4c0-1.7-.1-3.4-.5-5.1C495 168 409.7 115.6 322.7 130.5c-17 2.9-32.9 8.4-47.4 15.9L288 32l0-2.6C288 13.2 274.8 0 258.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"person-walking-luggage\": [576, 512, [], \"e554\", \"M432 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM347.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L505 232.7l-15.3-36.8C472.5 154.8 432.3 128 387.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L340.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM256 274.1c-7.7-4.4-17.4-1.8-21.9 5.9l-32 55.4L147.7 304c-15.3-8.8-34.9-3.6-43.7 11.7L40 426.6c-8.8 15.3-3.6 34.9 11.7 43.7l55.4 32c15.3 8.8 34.9 3.6 43.7-11.7l64-110.9c1.5-2.6 2.6-5.2 3.3-8L261.9 296c4.4-7.7 1.8-17.4-5.9-21.9z\"],\n    \"up-down\": [256, 512, [8597, 11021, \"arrows-alt-v\"], \"f338\", \"M145.6 7.7C141 2.8 134.7 0 128 0s-13 2.8-17.6 7.7l-104 112c-6.5 7-8.2 17.2-4.4 25.9S14.5 160 24 160l56 0 0 192-56 0c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7s13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4l-56 0 0-192 56 0c9.5 0 18.2-5.7 22-14.4s2.1-18.9-4.4-25.9l-104-112z\"],\n    \"cloud-moon-rain\": [576, 512, [], \"f73c\", \"M481.2 0C417 0 363.5 46.5 353.7 107.6c35.4 17.6 60.2 53.3 62.1 95.1c23.2 11 42 29.7 53.1 52.7c4 .4 8.1 .6 12.3 .6c34.9 0 66.7-13.8 89.9-36.1c5.1-4.9 6.4-12.5 3.2-18.7s-10.1-9.7-17-8.6c-4.9 .8-10 1.3-15.2 1.3c-49 0-88.4-39.3-88.4-87.4c0-32.6 18-61.1 44.9-76.1c6.1-3.4 9.3-10.5 7.8-17.4s-7.3-12-14.3-12.6c-3.6-.3-7.3-.5-10.9-.5zM367.9 383.9c44.2 0 80-35.8 80-80c0-39.3-28.4-72.1-65.8-78.7c1.2-5.6 1.9-11.3 1.9-17.2c0-44.2-35.8-80-80-80c-17 0-32.8 5.3-45.8 14.4C241.3 114.6 210.8 96 176 96c-53 0-96 43-96 96l0 1.3c-45.4 7.6-80 47.1-80 94.6c0 53 43 96 96 96l271.9 0zM85.4 420.1c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3z\"],\n    \"calendar\": [448, 512, [128197, 128198], \"f133\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272z\"],\n    \"trailer\": [640, 512, [], \"e041\", \"M48 32C21.5 32 0 53.5 0 80L0 336c0 26.5 21.5 48 48 48l17.1 0c7.8-54.3 54.4-96 110.9-96s103.1 41.7 110.9 96L488 384l8 0 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-240c0-26.5-21.5-48-48-48L48 32zM80 96c8.8 0 16 7.2 16 16l0 131.2c-11.4 5.9-22.2 12.9-32 21L64 112c0-8.8 7.2-16 16-16zm96 128c-5.4 0-10.7 .2-16 .7L160 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112.7c-5.3-.5-10.6-.7-16-.7zm80 19.2L256 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 152.2c-9.8-8.1-20.6-15.2-32-21zM368 96c8.8 0 16 7.2 16 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16zm112 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16s16 7.2 16 16zM176 480a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"bahai\": [576, 512, [\"haykal\"], \"f666\", \"M288 0c14.5 0 27.2 9.7 30.9 23.8l23.9 89.6 75.9-53.3c11.9-8.3 27.8-7.6 39 1.7s14.6 24.9 8.4 38.1l-39.3 84 92.4 8c14.4 1.2 26.2 12 28.8 26.3s-4.9 28.5-18 34.6l-84.1 39.1 65.7 65.5c10.3 10.2 12.4 26.1 5.1 38.7s-22 18.7-36 14.9L391 386.8l8.2 92.4c1.3 14.4-7.3 27.9-20.9 32.9s-28.9 .1-37.2-11.7l-53.1-76-53.1 76c-8.3 11.9-23.6 16.7-37.2 11.7s-22.2-18.5-20.9-32.9l8.2-92.4L95.4 410.9c-14 3.8-28.8-2.3-36-14.9s-5.2-28.4 5.1-38.7l65.7-65.5L46 252.7c-13.1-6.1-20.5-20.3-18-34.6s14.3-25.1 28.8-26.3l92.4-8-39.3-84c-6.1-13.1-2.7-28.8 8.4-38.1s27.1-10 39-1.7l75.9 53.3 23.9-89.6C260.8 9.7 273.5 0 288 0zm0 156.2l-4.8 18c-2.7 10.1-10.2 18.2-20 21.8s-20.8 2.1-29.3-3.9l-15.2-10.7 7.9 16.8c4.4 9.5 4 20.5-1.3 29.6s-14.5 15-25 15.9l-18.5 1.6 16.8 7.8c9.5 4.4 16.2 13.2 18 23.5s-1.5 20.8-8.9 28.2l-13.2 13.1 17.9-4.8c10.1-2.7 20.9-.3 28.9 6.4s12.2 16.9 11.3 27.3l-1.6 18.5 10.6-15.2c6-8.6 15.8-13.7 26.2-13.7s20.2 5.1 26.2 13.7l10.6 15.2-1.6-18.5c-.9-10.4 3.3-20.6 11.3-27.3s18.8-9.1 28.9-6.4l17.9 4.8-13.2-13.1c-7.4-7.4-10.7-17.9-8.9-28.2s8.5-19.1 18-23.5l16.8-7.8-18.5-1.6c-10.4-.9-19.7-6.8-25-15.9s-5.7-20.1-1.3-29.6l7.9-16.8-15.2 10.7c-8.6 6-19.5 7.5-29.3 3.9s-17.3-11.7-20-21.8l-4.8-18z\"],\n    \"sd-card\": [384, 512, [], \"f7c2\", \"M320 0L141.3 0C124.3 0 108 6.7 96 18.7L18.7 96C6.7 108 0 124.3 0 141.3L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64zM160 88l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24z\"],\n    \"dragon\": [640, 512, [128009], \"f6d5\", \"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0L416 0l32 0 16 0c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48l-21.5 0c-17 0-33.3-6.7-45.3-18.7L480 160l-32 0 0 21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512L496 512l-64 0L32.3 512c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1l0-45.5 0-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3l0 .6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87 0 27.5c0 32.8 8.4 64.8 24 93l-232 0c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z\"],\n    \"shoe-prints\": [640, 512, [], \"f54b\", \"M416 0C352.3 0 256 32 256 32l0 128c48 0 76 16 104 32s56 32 104 32c56.4 0 176-16 176-96S512 0 416 0zM128 96c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64zM288 512c96 0 224-48 224-128s-119.6-96-176-96c-48 0-76 16-104 32s-56 32-104 32l0 128s96.3 32 160 32zM0 416c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64z\"],\n    \"circle-plus\": [512, 512, [\"plus-circle\"], \"f055\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M174.5 498.8C73.1 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 112.9-73.1 208.7-174.5 242.8C346.7 484 352 466.6 352 448l0-46.9c24.3-17.5 43.6-41.6 55.4-69.6c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c11.7 27.8 30.8 51.7 54.8 69.2l0 47.3c0 18.6 5.3 36 14.5 50.8zm20.7-265.2c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zM336 272a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6l0 45.4c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-45.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"hand-holding\": [576, 512, [], \"f4bd\", \"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2c.3 0 .6 0 .9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"],\n    \"plug-circle-exclamation\": [576, 512, [], \"e55d\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"],\n    \"link-slash\": [640, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L489.3 358.2l90.5-90.5c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114l-96 96-31.9-25C430.9 239.6 420.1 175.1 377 132c-52.2-52.3-134.5-56.2-191.3-11.7L38.8 5.1zM239 162c30.1-14.9 67.7-9.9 92.8 15.3c20 20 27.5 48.3 21.7 74.5L239 162zM406.6 416.4L220.9 270c-2.1 39.8 12.2 80.1 42.2 110c38.9 38.9 94.4 51 143.6 36.3zm-290-228.5L60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l61.8-61.8-50.6-39.9z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M288 448L64 448l0-224 64 0 0-64-64 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-64-64 0 0 64zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z\"],\n    \"person-walking-arrow-loop-left\": [640, 512, [], \"e551\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zm347.7 119c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L461.3 384l18.7 0c88.4 0 160-71.6 160-160s-71.6-160-160-160L352 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c53 0 96 43 96 96s-43 96-96 96l-18.7 0 25.4-25.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3l80 80z\"],\n    \"arrow-up-z-a\": [576, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 64c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L352 32c-17.7 0-32 14.3-32 32zm96 192c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 262.8 428.1 256 416 256zM395.8 400L416 359.6 436.2 400l-40.4 0z\"],\n    \"fire-flame-curved\": [384, 512, [\"fire-alt\"], \"f7e4\", \"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0C198.4 0 208 9.6 208 21.3V43.5c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7C384 434 306 512 209.7 512H192C86 512 0 426 0 320v-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6C85.9 176 96 186.1 96 198.6V288c0 35.3 28.7 64 64 64s64-28.7 64-64v-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7c0-27.7 9-54.8 25.6-76.9z\"],\n    \"tornado\": [448, 512, [127786], \"f76f\", \"M0 32L0 45.6C0 62.7 1.7 79.6 5 96l352.8 0c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16C416 10.1 405.9 0 393.4 0L32 0C14.3 0 0 14.3 0 32zm352.2 96L13.6 128c12.2 35.9 32.3 68.7 58.8 96L412 224l-47.2-62.9c-7.3-9.7-11.6-21.2-12.6-33.1zm-226 138.2l116.4 68.5c8.2 4.8 15.8 10.7 22.5 17.3L445 352c2-9.8 3-19.9 3-30.1c0-23-5.3-45.5-15.3-65.9l-322.5 0c5.2 3.6 10.5 7 16 10.2zM288 384c10.3 21.4 13.8 45.5 9.9 69l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4c5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c12.8-12.8 23.1-27.7 30.4-43.9L288 384z\"],\n    \"file-circle-plus\": [576, 512, [58606], \"e494\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"],\n    \"book-quran\": [448, 512, [\"quran\"], \"f687\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM274.1 150.2l-8.9 21.4-23.1 1.9c-5.7 .5-8 7.5-3.7 11.2L256 199.8l-5.4 22.6c-1.3 5.5 4.7 9.9 9.6 6.9L280 217.2l19.8 12.1c4.9 3 10.9-1.4 9.6-6.9L304 199.8l17.6-15.1c4.3-3.7 2-10.8-3.7-11.2l-23.1-1.9-8.9-21.4c-2.2-5.3-9.6-5.3-11.8 0zM96 192c0 70.7 57.3 128 128 128c25.6 0 49.5-7.5 69.5-20.5c3.2-2.1 4.5-6.2 3.1-9.7s-5.2-5.6-9-4.8c-6.1 1.2-12.5 1.9-19 1.9c-52.4 0-94.9-42.5-94.9-94.9s42.5-94.9 94.9-94.9c6.5 0 12.8 .7 19 1.9c3.8 .8 7.5-1.3 9-4.8s.2-7.6-3.1-9.7C273.5 71.5 249.6 64 224 64C153.3 64 96 121.3 96 192z\"],\n    \"anchor\": [576, 512, [9875], \"f13d\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c88.4 0 160-71.6 160-160l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0l-56 56c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 53-43 96-96 96l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0z\"],\n    \"border-all\": [448, 512, [], \"f84c\", \"M384 96l0 128-128 0 0-128 128 0zm0 192l0 128-128 0 0-128 128 0zM192 224L64 224 64 96l128 0 0 128zM64 288l128 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"],\n    \"cookie-bite\": [512, 512, [], \"f564\", \"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9c-.9-5.3-5.3-9.3-10.6-10.1c-51.5-8.2-92.8-47.1-104.5-97.4c-1.8-7.6-8-13.4-15.7-14.6c-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"arrow-trend-down\": [576, 512, [], \"e097\", \"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 82.7L342.6 137.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352 384 352z\"],\n    \"rss\": [448, 512, [\"feed\"], \"f09e\", \"M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"draw-polygon\": [448, 512, [], \"f5ee\", \"M96 151.4l0 209.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56s0 0 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1c0 0 0 0 0 0l32-56 4.5-7.9-.1-.3-209.1 0c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-209.1C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32l209.1 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z\"],\n    \"scale-balanced\": [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M384 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L398.4 96c-5.2 25.8-22.9 47.1-46.4 57.3L352 448l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-23.5-10.3-41.2-31.6-46.4-57.3L128 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288l144.9 0L512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C627.2 382 574.9 416 512 416zM126.8 195.8L54.4 320l144.9 0L126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C242 382 189.7 416 126.8 416S11.7 382 .9 337.1z\"],\n    \"gauge-simple-high\": [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-15.9-5.8-30.4-15.3-41.6l76.6-147.4c6.1-11.8 1.5-26.3-10.2-32.4s-26.2-1.5-32.4 10.2L262.1 288.3c-2-.2-4-.3-6.1-.3c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z\"],\n    \"shower\": [512, 512, [128703], \"f2cc\", \"M64 131.9C64 112.1 80.1 96 99.9 96c9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.2-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32C44.7 32 0 76.7 0 131.9L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-316.1zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"desktop\": [576, 512, [128421, 61704, \"desktop-alt\"], \"f390\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 224L64 288 64 64l448 0z\"],\n    \"m\": [448, 512, [109], \"4d\", \"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.3c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64l0 384c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-278.3L250.6 369.8c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 49.9 9.2 37.5 22.7 33.4z\"],\n    \"table-list\": [512, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 0l0 64 64 0 0-64L64 96zm384 0L192 96l0 64 256 0 0-64zM64 224l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64zM64 352l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64z\"],\n    \"comment-sms\": [512, 512, [\"sms\"], \"f7cd\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM96 212.8c0-20.3 16.5-36.8 36.8-36.8l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.3 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L112 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6C102.2 236.7 96 225.2 96 212.8zM372.8 176l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.2 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L352 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6c-10.2-6.8-16.4-18.3-16.4-30.7c0-20.3 16.5-36.8 36.8-36.8zm-152 6.4L256 229.3l35.2-46.9c4.1-5.5 11.3-7.8 17.9-5.6s10.9 8.3 10.9 15.2l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-19.2 25.6c-3 4-7.8 6.4-12.8 6.4s-9.8-2.4-12.8-6.4L224 240l0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-6.9 4.4-13 10.9-15.2s13.7 .1 17.9 5.6z\"],\n    \"book\": [448, 512, [128212], \"f02d\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16zm16 48l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"user-plus\": [640, 512, [], \"f234\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM504 312l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"],\n    \"check\": [448, 512, [10003, 10004], \"f00c\", \"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"],\n    \"battery-three-quarters\": [576, 512, [\"battery-4\"], \"f241\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm272 96L96 192l0 128 256 0 0-128z\"],\n    \"house-circle-check\": [640, 512, [], \"e509\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"],\n    \"angle-left\": [320, 512, [8249], \"f104\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"],\n    \"diagram-successor\": [512, 512, [], \"e47a\", \"M512 416l0-64c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64zM64 160l0-64 144 0 16 0 0 64L64 160zm224 0l0-64 80 0c8.8 0 16 7.2 16 16l0 16-38.1 0c-21.4 0-32.1 25.9-17 41L399 239c9.4 9.4 24.6 9.4 33.9 0L503 169c15.1-15.1 4.4-41-17-41L448 128l0-16c0-44.2-35.8-80-80-80L224 32l-16 0L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64z\"],\n    \"truck-arrow-right\": [640, 512, [], \"e58b\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM257 95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L96 168c-13.3 0-24 10.7-24 24s10.7 24 24 24l166.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9L257 95z\"],\n    \"arrows-split-up-and-left\": [512, 512, [], \"e4bc\", \"M246.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L352 109.3 352 384c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-70.7 0-128-57.3-128-128c0-35.3-28.7-64-64-64l-114.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 256 224 256c23.3 0 45.2 6.2 64 17.1l0-163.9-41.4 41.4z\"],\n    \"hand-fist\": [448, 512, [9994, \"fist-raised\"], \"f6de\", \"M192 0c17.7 0 32 14.3 32 32l0 112-64 0 0-112c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80-64 0 0-80zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 52.3-25.1 98.8-64 128l0 96c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-78.4c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"],\n    \"cloud-moon\": [640, 512, [], \"f6c3\", \"M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80L96 511.9c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"],\n    \"briefcase\": [512, 512, [128188], \"f0b1\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 128 0 192 0 0-96c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM512 288l-192 0 0 32c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128z\"],\n    \"person-falling\": [512, 512, [], \"e546\", \"M288 0c17.7 0 32 14.3 32 32l0 9.8c0 54.6-27.9 104.6-72.5 133.6l.2 .3L304.5 256l87.5 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L384 320l-96 0-1.4 0 92.3 142.6c9.6 14.8 5.4 34.6-9.5 44.3s-34.6 5.4-44.3-9.5L164.5 249.2c-2.9 9.2-4.5 19-4.5 29l0 73.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-73.8c0-65.1 39.6-123.7 100.1-147.9C232.3 115.8 256 80.8 256 41.8l0-9.8c0-17.7 14.3-32 32-32zM112 32a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"],\n    \"image-portrait\": [384, 512, [\"portrait\"], \"f3e0\", \"M384 64c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384zM128 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 356.6c0-37.9 30.7-68.6 68.6-68.6l86.9 0c37.9 0 68.6 30.7 68.6 68.6c0 15.1-12.3 27.4-27.4 27.4l-169.1 0C92.3 384 80 371.7 80 356.6z\"],\n    \"user-tag\": [640, 512, [], \"f507\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c10 0 18.8-4.9 24.2-12.5l-99.2-99.2c-14.9-14.9-23.3-35.1-23.3-56.1l0-33c-15.9-4.7-32.8-7.2-50.3-7.2l-91.4 0zM384 224c-17.7 0-32 14.3-32 32l0 82.7c0 17 6.7 33.3 18.7 45.3L478.1 491.3c18.7 18.7 49.1 18.7 67.9 0l73.4-73.4c18.7-18.7 18.7-49.1 0-67.9L512 242.7c-12-12-28.3-18.7-45.3-18.7L384 224zm24 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"],\n    \"rug\": [640, 512, [], \"e569\", \"M24 64l32 0 24 0 0 24 0 88 0 80 0 80 0 88 0 24-24 0-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0l416 0 0 384-416 0 0-384zM640 88c0 13.3-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0-24 0 0-24 0-88 0-80 0-80 0-88 0-24 24 0 32 0c13.3 0 24 10.7 24 24z\"],\n    \"earth-europe\": [512, 512, [\"globe-europe\"], \"f7a2\", \"M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1l0 9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1l1 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24l0 4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6l29.4 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-20.7 0c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3l11.3 0c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16l7.3 0c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.7-15.4l-20.9 0c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3l0 3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3l21.3 0c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"cart-flatbed-suitcase\": [640, 512, [\"luggage-cart\"], \"f59d\", \"M0 32C0 14.3 14.3 0 32 0L48 0c44.2 0 80 35.8 80 80l0 288c0 8.8 7.2 16 16 16l464 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-66.7 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16l-197.5 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16L144 448c-44.2 0-80-35.8-80-80L64 80c0-8.8-7.2-16-16-16L32 64C14.3 64 0 49.7 0 32zM432 96l0-40c0-4.4-3.6-8-8-8l-80 0c-4.4 0-8 3.6-8 8l0 40 96 0zM288 96l0-40c0-30.9 25.1-56 56-56l80 0c30.9 0 56 25.1 56 56l0 40 0 224-192 0 0-224zM512 320l0-224 16 0c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-16 0zM240 96l16 0 0 224-16 0c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"baht-sign\": [320, 512, [], \"e0ac\", \"M144 0c-17.7 0-32 14.3-32 32l0 32L37.6 64C16.8 64 0 80.8 0 101.6L0 224l0 41.7L0 288 0 406.3c0 23 18.7 41.7 41.7 41.7l70.3 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c61.9 0 112-50.1 112-112c0-40.1-21.1-75.3-52.7-95.1C280.3 222.6 288 200.2 288 176c0-61.9-50.1-112-112-112l0-32c0-17.7-14.3-32-32-32zM112 128l0 96-48 0 0-96 48 0zm64 96l0-96c26.5 0 48 21.5 48 48s-21.5 48-48 48zm-64 64l0 96-48 0 0-96 48 0zm64 96l0-96 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-32 0z\"],\n    \"book-open\": [576, 512, [128214, 128366], \"f518\", \"M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5l0-377.4c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8L0 454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5l0-370.3c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11L304 456c0 11.4 11.7 19.3 22.4 15.5z\"],\n    \"book-journal-whills\": [448, 512, [\"journal-whills\"], \"f66a\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zm90.4-234.4l-21.2-21.2c-3 10.1-5.1 20.6-5.1 31.6c0 .2 0 .5 .1 .8s.1 .5 .1 .8L165.2 226c2.5 2.1 3.4 5.8 2.3 8.9c-1.3 3-4.1 5.1-7.5 5.1c-1.9-.1-3.8-.8-5.2-2l-23.6-20.6C142.8 267 186.9 304 240 304s97.3-37 108.9-86.6L325.3 238c-1.4 1.2-3.3 2-5.3 2c-2.2-.1-4.4-1.1-6-2.8c-1.2-1.5-1.9-3.4-2-5.2c.1-2.2 1.1-4.4 2.8-6l37.1-32.5c0-.3 0-.5 .1-.8s.1-.5 .1-.8c0-11-2.1-21.5-5.1-31.6l-21.2 21.2c-3.1 3.1-8.1 3.1-11.3 0s-3.1-8.1 0-11.2l26.4-26.5c-8.2-17-20.5-31.7-35.9-42.6c-2.7-1.9-6.2 1.4-5 4.5c8.5 22.4 3.6 48-13 65.6c-3.2 3.4-3.6 8.9-.9 12.7c9.8 14 12.7 31.9 7.5 48.5c-5.9 19.4-22 34.1-41.9 38.3l-1.4-34.3 12.6 8.6c.6 .4 1.5 .6 2.3 .6c1.5 0 2.7-.8 3.5-2s.6-2.8-.1-4L260 225.4l18-3.6c1.8-.4 3.1-2.1 3.1-4s-1.4-3.5-3.1-3.9l-18-3.7 8.5-14.3c.8-1.2 .9-2.9 .1-4.1s-2-2-3.5-2l-.1 0c-.7 .1-1.5 .3-2.1 .7l-14.1 9.6L244 87.9c-.1-2.2-1.9-3.9-4-3.9s-3.9 1.6-4 3.9l-4.6 110.8-12-8.1c-1.5-1.1-3.6-.9-5 .4s-1.6 3.4-.8 5l8.6 14.3-18 3.7c-1.8 .4-3.1 2-3.1 3.9s1.4 3.6 3.1 4l18 3.8-8.6 14.2c-.2 .6-.5 1.4-.5 2c0 1.1 .5 2.1 1.2 3c.8 .6 1.8 1 2.8 1c.7 0 1.6-.2 2.2-.6l10.4-7.1-1.4 32.8c-19.9-4.1-36-18.9-41.9-38.3c-5.1-16.6-2.2-34.4 7.6-48.5c2.7-3.9 2.3-9.3-.9-12.7c-16.6-17.5-21.6-43.1-13.1-65.5c1.2-3.1-2.3-6.4-5-4.5c-15.3 10.9-27.6 25.6-35.8 42.6l26.4 26.5c3.1 3.1 3.1 8.1 0 11.2s-8.1 3.1-11.2 0z\"],\n    \"handcuffs\": [640, 512, [], \"e4f8\", \"M240 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM192 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32 80c17.7 0 32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C280.3 229.6 320 286.2 320 352c0 88.4-71.6 160-160 160S0 440.4 0 352c0-65.8 39.7-122.4 96.5-146.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32zm0 320a96 96 0 1 0 0-192 96 96 0 1 0 0 192zm192-96c0-25.9-5.1-50.5-14.4-73.1c16.9-32.9 44.8-59.1 78.9-73.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32s32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C600.3 229.6 640 286.2 640 352c0 88.4-71.6 160-160 160c-62 0-115.8-35.3-142.4-86.9c9.3-22.5 14.4-47.2 14.4-73.1zm224 0a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM368 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm80 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"triangle-exclamation\": [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"],\n    \"database\": [448, 512, [], \"f1c0\", \"M448 80l0 48c0 44.2-100.3 80-224 80S0 172.2 0 128L0 80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6L448 288c0 44.2-100.3 80-224 80S0 332.2 0 288L0 186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6l0 85.9c0 44.2-100.3 80-224 80S0 476.2 0 432l0-85.9z\"],\n    \"share\": [512, 512, [\"mail-forward\"], \"f064\", \"M307 34.8c-11.5 5.1-19 16.6-19 29.2l0 64-112 0C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96l96 0 0 64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z\"],\n    \"bottle-droplet\": [320, 512, [], \"e4c4\", \"M96 0C82.7 0 72 10.7 72 24s10.7 24 24 24c4.4 0 8 3.6 8 8l0 64.9c0 12.2-7.2 23.1-17.2 30.1C53.7 174.1 32 212.5 32 256l0 192c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-192c0-43.5-21.7-81.9-54.8-105c-10-7-17.2-17.9-17.2-30.1L216 56c0-4.4 3.6-8 8-8c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0s0 0 0 0s0 0 0 0L104 0s0 0 0 0s0 0 0 0L96 0zm64 382c-26.5 0-48-20.1-48-45c0-16.8 22.1-48.1 36.3-66.4c6-7.8 17.5-7.8 23.5 0C185.9 288.9 208 320.2 208 337c0 24.9-21.5 45-48 45z\"],\n    \"mask-face\": [640, 512, [], \"e1d7\", \"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1l-9.2 0-16 0-72 0c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l108 27C233.8 435 275.4 448 320 448s86.2-13 121.1-35.5l108-27C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-72 0-16 0-9.2 0c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM132.3 346.3l-29.8-7.4C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l40 0 0 48c0 45.1 13.4 87.2 36.3 122.3zm405.1-7.4l-29.8 7.4c23-35.2 36.3-77.2 36.3-122.3l0-48 40 0c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9zM192 208c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zm16 48l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 80c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16z\"],\n    \"hill-rockslide\": [576, 512, [], \"e508\", \"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2l-53.3 0c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9l0-53.3c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9l0 53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"right-left\": [512, 512, [\"exchange-alt\"], \"f362\", \"M32 96l320 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-64L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64 320 0z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480l0-83.6c0-4 1.5-7.8 4.2-10.8L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"],\n    \"road-circle-exclamation\": [640, 512, [], \"e565\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"],\n    \"dungeon\": [512, 512, [], \"f6d9\", \"M336.6 156.5c1.3 1.1 2.7 2.2 3.9 3.3c9.3 8.2 23 10.5 33.4 3.6l67.6-45.1c11.4-7.6 14.2-23.2 5.1-33.4C430 66.6 410.9 50.6 389.7 37.6c-11.9-7.3-26.9-1.4-32.1 11.6l-30.5 76.2c-4.5 11.1 .2 23.6 9.5 31.2zM328 36.8c5.1-12.8-1.6-27.4-15-30.5C294.7 2.2 275.6 0 256 0s-38.7 2.2-57 6.4C185.5 9.4 178.8 24 184 36.8l30.3 75.8c4.5 11.3 16.8 17.2 29 16c4.2-.4 8.4-.6 12.7-.6s8.6 .2 12.7 .6c12.1 1.2 24.4-4.7 29-16L328 36.8zM65.5 85c-9.1 10.2-6.3 25.8 5.1 33.4l67.6 45.1c10.3 6.9 24.1 4.6 33.4-3.6c1.3-1.1 2.6-2.3 4-3.3c9.3-7.5 13.9-20.1 9.5-31.2L154.4 49.2c-5.2-12.9-20.3-18.8-32.1-11.6C101.1 50.6 82 66.6 65.5 85zm314 137.1c.9 3.3 1.7 6.6 2.3 10c2.5 13 13 23.9 26.2 23.9l80 0c13.3 0 24.1-10.8 22.9-24c-2.5-27.2-9.3-53.2-19.7-77.3c-5.5-12.9-21.4-16.6-33.1-8.9l-68.6 45.7c-9.8 6.5-13.2 19.2-10 30.5zM53.9 145.8c-11.6-7.8-27.6-4-33.1 8.9C10.4 178.8 3.6 204.8 1.1 232c-1.2 13.2 9.6 24 22.9 24l80 0c13.3 0 23.8-10.8 26.2-23.9c.6-3.4 1.4-6.7 2.3-10c3.1-11.4-.2-24-10-30.5L53.9 145.8zM104 288l-80 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm304 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM24 416c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zm384 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM272 192c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16l0-272zm-64 32c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240zm128 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240z\"],\n    \"align-right\": [448, 512, [], \"f038\", \"M448 64c0 17.7-14.3 32-32 32L192 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"],\n    \"money-bill-1-wave\": [576, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM128 416l-64 0 0-64c35.3 0 64 28.7 64 64zM64 224l0-64 64 0c0 35.3-28.7 64-64 64zM448 352c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM384 256c0 61.9-43 112-96 112s-96-50.1-96-112s43-112 96-112s96 50.1 96 112zM252 208c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3s-20.2-113.9-54-157.3c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256s20.2 113.9 54 157.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"],\n    \"hands\": [576, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M544 160l-.1 72.6c-.1 52.2-24 101-64 133.1c.1-1.9 .1-3.8 .1-5.7l0-8c0-71.8-37-138.6-97.9-176.7l-60.2-37.6c-8.6-5.4-17.9-8.4-27.3-9.4L248.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l78 135.1c3.3 5.7 10.7 7.7 16.4 4.4s7.7-10.7 4.4-16.4l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S362 5 368.6 16.5l68 117.8s0 0 0 0s0 0 0 0l43.3 75L480 160c0-17.7 14.4-32 32-32s32 14.4 32 32zM243.9 88.5L268.5 131c-13.9 4.5-26.4 13.7-34.7 27c-.9 1.4-1.7 2.9-2.5 4.4l-28.9-50c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l26.8 46.4c.6 6 2.1 11.8 4.3 17.4l-4.7 0-13.3 0s0 0 0 0L179 216l-23-39.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM260.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C416.7 234.7 448 291.2 448 352l0 8c0 83.9-68.1 152-152 152l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l92 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 440c-13.3 0-24-10.7-24-24s10.7-24 24-24l124 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L56 368c-13.3 0-24-10.7-24-24s10.7-24 24-24l156 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 296c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0s0 0 0 0s0 0 0 0l93.2 0L271 219.1c-15-9.4-19.5-29.1-10.2-44.1z\"],\n    \"calendar-day\": [448, 512, [], \"f783\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16l-96 0z\"],\n    \"water-ladder\": [576, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M128 127.7C128 74.9 170.9 32 223.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7l0 96.3 192 0 0-96.3C384 74.9 426.9 32 479.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7L448 361c-1.6 1-3.3 2-4.8 3.1c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-96.5-192 0 0 96.5c-19 0-41.2-7.9-59.1-20.3c-1.6-1.1-3.2-2.2-4.9-3.1l0-233.3zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"],\n    \"arrows-up-down\": [320, 512, [\"arrows-v\"], \"f07d\", \"M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 109.3l0 293.5L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7l0-293.5 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-112l-8 0 0-40 55.3 0c-3.8 22.7-23.6 40-47.3 40zm47.3-56L344 344l0-40 8 0c23.8 0 43.5 17.3 47.3 40zM328 344l-64 0 0-40 64 0 0 40zm0 56l-64 0 0-40 64 0 0 40zm-80-96l0 40-64 0 0-40 64 0zm0 56l0 40-64 0 0-40 64 0zm-80-16l-55.3 0c3.8-22.7 23.6-40 47.3-40l8 0 0 40zm0 56l-8 0c-23.8 0-43.5-17.3-47.3-40l55.3 0 0 40zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"wheelchair-move\": [448, 512, [\"wheelchair-alt\"], \"e2ce\", \"M320 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM204.5 121.3c-5.4-2.5-11.7-1.9-16.4 1.7l-40.9 30.7c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l40.9-30.7c23.7-17.8 55.3-21 82.1-8.4l90.4 42.5c29.1 13.7 36.8 51.6 15.2 75.5L299.1 224l97.4 0c30.3 0 53 27.7 47.1 57.4L415.4 422.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L377 288l-70.3 0c8.6 19.6 13.3 41.2 13.3 64c0 88.4-71.6 160-160 160S0 440.4 0 352s71.6-160 160-160c11.1 0 22 1.1 32.4 3.3l54.2-54.2-42.1-19.8zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"],\n    \"turn-down\": [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M350 334.5c3.8 8.8 2 19-4.6 26l-136 144c-4.5 4.8-10.8 7.5-17.4 7.5s-12.9-2.7-17.4-7.5l-136-144c-6.6-7-8.4-17.2-4.6-26s12.5-14.5 22-14.5l88 0 0-192c0-17.7-14.3-32-32-32L32 96C14.3 96 0 81.7 0 64L0 32C0 14.3 14.3 0 32 0l80 0c70.7 0 128 57.3 128 128l0 192 88 0c9.6 0 18.2 5.7 22 14.5z\"],\n    \"person-walking-arrow-right\": [640, 512, [], \"e552\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80z\"],\n    \"square-envelope\": [448, 512, [\"envelope-square\"], \"f199\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144l256 0c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4 384 336c0 17.7-14.3 32-32 32L96 368c-17.7 0-32-14.3-32-32l0-125.6 136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z\"],\n    \"dice\": [640, 512, [127922], \"f522\", \"M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-114.3 0c11.6 36 3.1 77-25.4 105.5L320 413.8l0 34.2zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"bowling-ball\": [512, 512, [], \"f436\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"brain\": [512, 512, [129504], \"f5dc\", \"M184 0c30.9 0 56 25.1 56 56l0 400c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56l0-400c0-30.9 25.1-56 56-56z\"],\n    \"bandage\": [640, 512, [129657, \"band-aid\"], \"f462\", \"M480 416l96 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-96 0 0 320zM448 96L192 96l0 320 256 0 0-320zM64 96C28.7 96 0 124.7 0 160L0 352c0 35.3 28.7 64 64 64l96 0 0-320L64 96zM248 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM312 376c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"],\n    \"gifts\": [640, 512, [], \"f79c\", \"M200.6 32C205 19.5 198.5 5.8 186 1.4S159.8 3.5 155.4 16L144.7 46.2l-9.9-29.8C130.6 3.8 117-3 104.4 1.2S85 19 89.2 31.6l8.3 25-27.4-20c-10.7-7.8-25.7-5.4-33.5 5.3s-5.4 25.7 5.3 33.5L70.2 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l152.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-224c0-29.9 20.5-55 48.2-62c1.8-31 17.1-58.2 40.1-76.1C271.7 104.7 256.9 96 240 96l-22.2 0 28.3-20.6c10.7-7.8 13.1-22.8 5.3-33.5s-22.8-13.1-33.5-5.3L192.5 55.1 200.6 32zM363.5 185.5L393.1 224 344 224c-13.3 0-24-10.7-24-24c0-13.1 10.8-24 24.2-24c7.6 0 14.7 3.5 19.3 9.5zM272 200c0 8.4 1.4 16.5 4.1 24l-4.1 0c-26.5 0-48 21.5-48 48l0 80 192 0 0-96 32 0 0 96 192 0 0-80c0-26.5-21.5-48-48-48l-4.1 0c2.7-7.5 4.1-15.6 4.1-24c0-39.9-32.5-72-72.2-72c-22.4 0-43.6 10.4-57.3 28.2L432 195.8l-30.5-39.6c-13.7-17.8-35-28.2-57.3-28.2c-39.7 0-72.2 32.1-72.2 72zM224 464c0 26.5 21.5 48 48 48l144 0 0-128-192 0 0 80zm224 48l144 0c26.5 0 48-21.5 48-48l0-80-192 0 0 128zm96-312c0 13.3-10.7 24-24 24l-49.1 0 29.6-38.5c4.6-5.9 11.7-9.5 19.3-9.5c13.4 0 24.2 10.9 24.2 24z\"],\n    \"hotel\": [512, 512, [127976], \"f594\", \"M0 32C0 14.3 14.3 0 32 0L480 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-176 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64C14.3 64 0 49.7 0 32zm96 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM240 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM112 192c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM328 384c13.3 0 24.3-10.9 21-23.8c-10.6-41.5-48.2-72.2-93-72.2s-82.5 30.7-93 72.2c-3.3 12.8 7.8 23.8 21 23.8l144 0z\"],\n    \"earth-asia\": [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M51.7 295.1l31.7 6.3c7.9 1.6 16-.9 21.7-6.6l15.4-15.4c11.6-11.6 31.1-8.4 38.4 6.2l9.3 18.5c4.8 9.6 14.6 15.7 25.4 15.7c15.2 0 26.1-14.6 21.7-29.2l-6-19.9c-4.6-15.4 6.9-30.9 23-30.9l2.3 0c13.4 0 25.9-6.7 33.3-17.8l10.7-16.1c5.6-8.5 5.3-19.6-.8-27.7l-16.1-21.5c-10.3-13.7-3.3-33.5 13.4-37.7l17-4.3c7.5-1.9 13.6-7.2 16.5-14.4l16.4-40.9C303.4 52.1 280.2 48 256 48C141.1 48 48 141.1 48 256c0 13.4 1.3 26.5 3.7 39.1zm407.7 4.6c-3-.3-6-.1-9 .8l-15.8 4.4c-6.7 1.9-13.8-.9-17.5-6.7l-2-3.1c-6-9.4-16.4-15.1-27.6-15.1s-21.6 5.7-27.6 15.1l-6.1 9.5c-1.4 2.2-3.4 4.1-5.7 5.3L312 330.1c-18.1 10.1-25.5 32.4-17 51.3l5.5 12.4c8.6 19.2 30.7 28.5 50.5 21.1l2.6-1c10-3.7 21.3-2.2 29.9 4.1l1.5 1.1c37.2-29.5 64.1-71.4 74.4-119.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm144.5 92.1c-2.1 8.6 3.1 17.3 11.6 19.4l32 8c8.6 2.1 17.3-3.1 19.4-11.6s-3.1-17.3-11.6-19.4l-32-8c-8.6-2.1-17.3 3.1-19.4 11.6zm92-20c-2.1 8.6 3.1 17.3 11.6 19.4s17.3-3.1 19.4-11.6l8-32c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-8 32zM343.2 113.7c-7.9-4-17.5-.7-21.5 7.2l-16 32c-4 7.9-.7 17.5 7.2 21.5s17.5 .7 21.5-7.2l16-32c4-7.9 .7-17.5-7.2-21.5z\"],\n    \"id-card-clip\": [576, 512, [\"id-card-alt\"], \"f47f\", \"M256 0l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 64l128 0 0 48c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-48 128 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64zM176 437.3c0 5.9 4.8 10.7 10.7 10.7l202.7 0c5.9 0 10.7-4.8 10.7-10.7c0-29.5-23.9-53.3-53.3-53.3l-117.3 0c-29.5 0-53.3 23.9-53.3 53.3zM288 352a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"],\n    \"magnifying-glass-plus\": [512, 512, [\"search-plus\"], \"f00e\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"],\n    \"thumbs-up\": [512, 512, [128077, 61575], \"f164\", \"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2l144 0c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48l-97.5 0c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3l0-38.3 0-48 0-24.9c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32L0 224c0-17.7 14.3-32 32-32z\"],\n    \"user-clock\": [640, 512, [], \"f4fd\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c20.6 0 40.4 3.5 58.8 9.9C323 331 320 349.1 320 368c0 59.5 29.5 112.1 74.8 144L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-48c0-8.8-7.2-16-16-16z\"],\n    \"hand-dots\": [512, 512, [\"allergies\"], \"f461\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208zM240 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80 16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48-16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-16 80a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM240 432a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-48-48a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"file-invoice\": [384, 512, [], \"f570\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 352c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm0 32l0 64 192 0 0-64L96 256zM240 416l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"],\n    \"mug-saucer\": [640, 512, [\"coffee\"], \"f0f4\", \"M96 64c0-17.7 14.3-32 32-32l320 0 64 0c70.7 0 128 57.3 128 128s-57.3 128-128 128l-32 0c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L96 64zM480 224l32 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0 0 128zM32 416l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"],\n    \"brush\": [384, 512, [], \"f55d\", \"M162.4 6c-1.5-3.6-5-6-8.9-6l-19 0c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6L48 0C21.5 0 0 21.5 0 48L0 224l0 22.4L0 256l9.6 0 364.8 0 9.6 0 0-9.6 0-22.4 0-176c0-26.5-21.5-48-48-48L230.5 0c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288l0 32c0 35.3 28.7 64 64 64l64 0 0 64c0 35.3 28.7 64 64 64s64-28.7 64-64l0-64 64 0c35.3 0 64-28.7 64-64l0-32L0 288zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"],\n    \"file-half-dashed\": [384, 512, [], \"e698\", \"M64 0C28.7 0 0 28.7 0 64L0 320l384 0 0-160-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM0 416l64 0 0-64L0 352l0 64zm288 32l-80 0 0 64 80 0 0-64zm-112 0l-80 0 0 64 80 0 0-64zM64 448L0 448c0 35.3 28.7 64 64 64l0-64zm256 0l0 64c35.3 0 64-28.7 64-64l-64 0zm64-32l0-64-64 0 0 64 64 0z\"],\n    \"mask\": [576, 512, [], \"f6fa\", \"M288 64C64 64 0 160 0 272S80 448 176 448l8.4 0c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4l8.4 0c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"],\n    \"magnifying-glass-minus\": [512, 512, [\"search-minus\"], \"f010\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"],\n    \"ruler-vertical\": [256, 512, [], \"f548\", \"M0 48C0 21.5 21.5 0 48 0L208 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"],\n    \"user-large\": [512, 512, [\"user-alt\"], \"f406\", \"M256 288A144 144 0 1 0 256 0a144 144 0 1 0 0 288zm-94.7 32C72.2 320 0 392.2 0 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0c17 0 30.7-13.8 30.7-30.7C512 392.2 439.8 320 350.7 320l-189.4 0z\"],\n    \"train-tram\": [448, 512, [128650], \"e5b4\", \"M86.8 48c-12.2 0-23.6 5.5-31.2 15L42.7 79C34.5 89.3 19.4 91 9 82.7S-3 59.4 5.3 49L18 33C34.7 12.2 60 0 86.8 0L361.2 0c26.7 0 52 12.2 68.7 33l12.8 16c8.3 10.4 6.6 25.5-3.8 33.7s-25.5 6.6-33.7-3.7L392.5 63c-7.6-9.5-19.1-15-31.2-15L248 48l0 48 40 0c53 0 96 43 96 96l0 160c0 30.6-14.3 57.8-36.6 75.4l65.5 65.5c7.1 7.1 2.1 19.1-7.9 19.1l-39.7 0c-8.5 0-16.6-3.4-22.6-9.4L288 448l-128 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L43 512c-10 0-15-12.1-7.9-19.1l65.5-65.5C78.3 409.8 64 382.6 64 352l0-160c0-53 43-96 96-96l40 0 0-48L86.8 48zM160 160c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-128 0zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"],\n    \"user-nurse\": [448, 512, [], \"f82f\", \"M96 128l0-57.8c0-13.3 8.3-25.3 20.8-30l96-36c7.2-2.7 15.2-2.7 22.5 0l96 36c12.5 4.7 20.8 16.6 20.8 30l0 57.8-.3 0c.2 2.6 .3 5.3 .3 8l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-2.7 .1-5.4 .3-8l-.3 0zm48 48c0 44.2 35.8 80 80 80s80-35.8 80-80l0-16-160 0 0 16zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6zM208 48l0 16-16 0c-4.4 0-8 3.6-8 8l0 16c0 4.4 3.6 8 8 8l16 0 0 16c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-16 16 0c4.4 0 8-3.6 8-8l0-16c0-4.4-3.6-8-8-8l-16 0 0-16c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8z\"],\n    \"syringe\": [512, 512, [128137], \"f48e\", \"M441 7l32 32 32 32c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15L417.9 128l55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72L295 73c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l55 55L422.1 56 407 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0zM210.3 155.7l61.1-61.1c.3 .3 .6 .7 1 1l16 16 56 56 56 56 16 16c.3 .3 .6 .6 1 1l-191 191c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57 0-88.8c0-14.9 5.9-29.1 16.4-39.6l43.3-43.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57z\"],\n    \"cloud-sun\": [640, 512, [9925], \"f6c4\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l14.1 84.7 84.7 14.1c5.4 .9 10 4.5 12.1 9.6s1.5 10.9-1.6 15.4l-38.5 55c-2.2-.1-4.4-.2-6.7-.2c-23.3 0-45.1 6.2-64 17.1l0-1.1c0-53-43-96-96-96s-96 43-96 96s43 96 96 96c8.1 0 15.9-1 23.4-2.9c-36.6 18.1-63.3 53.1-69.8 94.9l-24.4 17c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM144 208a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM639.9 431.9c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"],\n    \"stopwatch-20\": [448, 512, [], \"e06f\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L176 0zM288 204c28.7 0 52 23.3 52 52l0 96c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-96c0-28.7 23.3-52 52-52zm-12 52l0 96c0 6.6 5.4 12 12 12s12-5.4 12-12l0-96c0-6.6-5.4-12-12-12s-12 5.4-12 12zM159.5 244c-5.4 0-10.2 3.5-11.9 8.6l-.6 1.7c-3.5 10.5-14.8 16.1-25.3 12.6s-16.1-14.8-12.6-25.3l.6-1.7c7.2-21.5 27.2-35.9 49.8-35.9c29 0 52.5 23.5 52.5 52.5l0 2.2c0 13.4-4.9 26.4-13.8 36.4l-39 43.9c-6.2 7-10 15.7-10.9 24.9l43.8 0c11 0 20 9 20 20s-9 20-20 20l-64 0c-11 0-20-9-20-20l0-15.7c0-20.6 7.5-40.4 21.2-55.8l39-43.9c2.4-2.7 3.7-6.2 3.7-9.8l0-2.2c0-6.9-5.6-12.5-12.5-12.5z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M0 0H512V512H0V0z\"],\n    \"magnet\": [448, 512, [129522], \"f076\", \"M0 160l0 96C0 379.7 100.3 480 224 480s224-100.3 224-224l0-96-128 0 0 96c0 53-43 96-96 96s-96-43-96-96l0-96L0 160zm0-32l128 0 0-64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64zm320 0l128 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64z\"],\n    \"jar\": [320, 512, [], \"e516\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm96 64c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L96 224z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z\"],\n    \"bug-slash\": [640, 512, [], \"e490\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L477.4 348.9c1.7-9.4 2.6-19 2.6-28.9l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64.3 0c-1.1-14.1-5-27.5-11.1-39.5c.7-.6 1.4-1.2 2.1-1.9l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-.7 .7-1.3 1.4-1.9 2.1C409.2 164.1 393.1 160 376 160l-112 0c-8.3 0-16.3 1-24 2.8L38.8 5.1zM320 0c-53 0-96 43-96 96l0 3.6c0 15.7 12.7 28.4 28.4 28.4l135.1 0c15.7 0 28.4-12.7 28.4-28.4l0-3.6c0-53-43-96-96-96zM160.3 256L96 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c0 24.6 5.5 47.8 15.4 68.6c-2.2 1.3-4.2 2.9-6 4.8l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l63.1-63.1c24.5 21.8 55.8 36.2 90.3 39.6l0-143.7L166.7 227.3c-3.4 9-5.6 18.7-6.4 28.7zM336 479.2c36.6-3.6 69.7-19.6 94.8-43.8L336 360.7l0 118.5z\"],\n    \"arrow-up-from-water-pump\": [576, 512, [], \"e4b6\", \"M112 0C85.5 0 64 21.5 64 48l0 208-16 0c-26.5 0-48 21.5-48 48l0 96c0 8 2 15.6 5.4 22.2c3.8-1.7 7.8-3.1 12-4.1c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c4.2 1 8.2 2.4 12 4.1C574 415.6 576 408 576 400l0-96c0-26.5-21.5-48-48-48l-48 0 0-146.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 109.3 416 256l-128 0 0-208c0-26.5-21.5-48-48-48L112 0zM306.5 421.9c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1z\"],\n    \"bone\": [576, 512, [129460], \"f5d7\", \"M153.7 144.8c6.9 16.3 20.6 31.2 38.3 31.2l192 0c17.7 0 31.4-14.9 38.3-31.2C434.4 116.1 462.9 96 496 96c44.2 0 80 35.8 80 80c0 30.4-17 56.9-42 70.4c-3.6 1.9-6 5.5-6 9.6s2.4 7.7 6 9.6c25 13.5 42 40 42 70.4c0 44.2-35.8 80-80 80c-33.1 0-61.6-20.1-73.7-48.8C415.4 350.9 401.7 336 384 336l-192 0c-17.7 0-31.4 14.9-38.3 31.2C141.6 395.9 113.1 416 80 416c-44.2 0-80-35.8-80-80c0-30.4 17-56.9 42-70.4c3.6-1.9 6-5.5 6-9.6s-2.4-7.7-6-9.6C17 232.9 0 206.4 0 176c0-44.2 35.8-80 80-80c33.1 0 61.6 20.1 73.7 48.8z\"],\n    \"table-cells-row-unlock\": [640, 512, [], \"e691\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zm288-80l0 48 32 0 32 0 48 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48c0-44.2 35.8-80 80-80s80 35.8 80 80l-48 0c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"],\n    \"user-injured\": [448, 512, [], \"f728\", \"M240 80l102.7 0c-7.9-19.5-20.4-36.5-36.2-49.9L240 80zm37.7-68.2C261.3 4.2 243.2 0 224 0c-53.7 0-99.7 33.1-118.7 80l81.4 0 91-68.2zM224 256c70.7 0 128-57.3 128-128c0-5.4-.3-10.8-1-16L97 112c-.7 5.2-1 10.6-1 16c0 70.7 57.3 128 128 128zM124 312.4c-9.7 3.1-19.1 7-28 11.7L96 512l147.7 0L181.5 408.2 124 312.4zm33-7.2L204.3 384l67.7 0c44.2 0 80 35.8 80 80c0 18-6 34.6-16 48l82.3 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0c-7.2 0-14.3 .4-21.3 1.3zM0 482.3C0 498.7 13.3 512 29.7 512L64 512l0-166.6C24.9 378.1 0 427.3 0 482.3zM320 464c0-26.5-21.5-48-48-48l-48.5 0 57.1 95.2C303 507.2 320 487.6 320 464z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"plane\": [576, 512, [], \"f072\", \"M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L112 320 68.8 377.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L32 256 .5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-7.8 6.3-14 14-14l42 0c5 0 9.8 2.4 12.8 6.4L112 192l102.9 0-49-171.6C162.9 10.2 170.6 0 181.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L365.7 192l116.6 0z\"],\n    \"tent-arrows-down\": [576, 512, [], \"e581\", \"M209.8 111.9c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L136 24c0-13.3-10.7-24-24-24S88 10.7 88 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zm352 0c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L488 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"],\n    \"exclamation\": [128, 512, [10069, 10071, 61738], \"21\", \"M96 64c0-17.7-14.3-32-32-32S32 46.3 32 64l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32L96 64zM64 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"],\n    \"arrows-spin\": [512, 512, [], \"e4bb\", \"M256 96c38.4 0 73.7 13.5 101.3 36.1l-32.6 32.6c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l112 0c8.8 0 16-7.2 16-16l0-112c0-6.5-3.9-12.3-9.9-14.8s-12.9-1.1-17.4 3.5l-34 34C363.4 52.6 312.1 32 256 32c-10.9 0-21.5 .8-32 2.3l0 64.9c10.3-2.1 21-3.2 32-3.2zM132.1 154.7l32.6 32.6c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-112c0-8.8-7.2-16-16-16L64 48c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l34 34C52.6 148.6 32 199.9 32 256c0 10.9 .8 21.5 2.3 32l64.9 0c-2.1-10.3-3.2-21-3.2-32c0-38.4 13.5-73.7 36.1-101.3zM477.7 224l-64.9 0c2.1 10.3 3.2 21 3.2 32c0 38.4-13.5 73.7-36.1 101.3l-32.6-32.6c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 112c0 8.8 7.2 16 16 16l112 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-34-34C459.4 363.4 480 312.1 480 256c0-10.9-.8-21.5-2.3-32zM256 416c-38.4 0-73.7-13.5-101.3-36.1l32.6-32.6c4.6-4.6 5.9-11.5 3.5-17.4s-8.3-9.9-14.8-9.9L64 320c-8.8 0-16 7.2-16 16l0 112c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l34-34C148.6 459.4 199.9 480 256 480c10.9 0 21.5-.8 32-2.3l0-64.9c-10.3 2.1-21 3.2-32 3.2z\"],\n    \"print\": [512, 512, [128424, 128438, 9113], \"f02f\", \"M128 0C92.7 0 64 28.7 64 64l0 96 64 0 0-96 226.7 0L384 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0L128 0zM384 352l0 32 0 64-256 0 0-64 0-16 0-16 256 0zm64 32l32 0c17.7 0 32-14.3 32-32l0-96c0-35.3-28.7-64-64-64L64 192c-35.3 0-64 28.7-64 64l0 96c0 17.7 14.3 32 32 32l32 0 0 64c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-64zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"],\n    \"turkish-lira-sign\": [384, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M96 32c17.7 0 32 14.3 32 32l0 35.3L247.2 65.2c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 165.9l0 29.4 119.2-34.1c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 261.9 128 416l63.8 0c68.2 0 124.4-53.5 127.8-121.6l.4-8c.9-17.7 15.9-31.2 33.6-30.4s31.2 15.9 30.4 33.6l-.4 8C378.5 399.8 294.1 480 191.8 480L96 480c-17.7 0-32-14.3-32-32l0-167.9-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 213.6l0-29.4-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 117.6 64 64c0-17.7 14.3-32 32-32z\"],\n    \"dollar-sign\": [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M160 0c17.7 0 32 14.3 32 32l0 35.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11l0 33.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.9c-.4-.1-.9-.1-1.3-.2l-.2 0s0 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7s0 0 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11L128 32c0-17.7 14.3-32 32-32z\"],\n    \"x\": [384, 512, [120], \"58\", \"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\"],\n    \"magnifying-glass-dollar\": [512, 512, [\"search-dollar\"], \"f688\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM228 104c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"],\n    \"users-gear\": [640, 512, [\"users-cog\"], \"f509\", \"M144 160A80 80 0 1 0 144 0a80 80 0 1 0 0 160zm368 0A80 80 0 1 0 512 0a80 80 0 1 0 0 160zM0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-26.6-23.5-43.3-57.8-43.3-96c0-7.6 .7-15 1.9-22.3c-13.6-6.3-28.7-9.7-44.6-9.7l-42.7 0C47.8 192 0 239.8 0 298.7zM320 320c24 0 45.9-8.8 62.7-23.3c2.5-3.7 5.2-7.3 8-10.7c2.7-3.3 5.7-6.1 9-8.3C410 262.3 416 243.9 416 224c0-53-43-96-96-96s-96 43-96 96s43 96 96 96zm65.4 60.2c-10.3-5.9-18.1-16.2-20.8-28.2l-103.2 0C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l300.6 0c-2.1-5.2-3.2-10.9-3.2-16.4l0-3c-1.3-.7-2.7-1.5-4-2.3l-2.6 1.5c-16.8 9.7-40.5 8-54.7-9.7c-4.5-5.6-8.6-11.5-12.4-17.6l-.1-.2-.1-.2-2.4-4.1-.1-.2-.1-.2c-3.4-6.2-6.4-12.6-9-19.3c-8.2-21.2 2.2-42.6 19-52.3l2.7-1.5c0-.8 0-1.5 0-2.3s0-1.5 0-2.3l-2.7-1.5zM533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 17.4-3.5 33.9-9.7 49c2.5 .9 4.9 2 7.1 3.3l2.6 1.5c1.3-.8 2.6-1.6 4-2.3l0-3c0-19.4 13.3-39.1 35.8-42.6c7.9-1.2 16-1.9 24.2-1.9s16.3 .6 24.2 1.9c22.5 3.5 35.8 23.2 35.8 42.6l0 3c1.3 .7 2.7 1.5 4 2.3l2.6-1.5c16.8-9.7 40.5-8 54.7 9.7c2.3 2.8 4.5 5.8 6.6 8.7c-2.1-57.1-49-102.7-106.6-102.7zm91.3 163.9c6.3-3.6 9.5-11.1 6.8-18c-2.1-5.5-4.6-10.8-7.4-15.9l-2.3-4c-3.1-5.1-6.5-9.9-10.2-14.5c-4.6-5.7-12.7-6.7-19-3l-2.9 1.7c-9.2 5.3-20.4 4-29.6-1.3s-16.1-14.5-16.1-25.1l0-3.4c0-7.3-4.9-13.8-12.1-14.9c-6.5-1-13.1-1.5-19.9-1.5s-13.4 .5-19.9 1.5c-7.2 1.1-12.1 7.6-12.1 14.9l0 3.4c0 10.6-6.9 19.8-16.1 25.1s-20.4 6.6-29.6 1.3l-2.9-1.7c-6.3-3.6-14.4-2.6-19 3c-3.7 4.6-7.1 9.5-10.2 14.6l-2.3 3.9c-2.8 5.1-5.3 10.4-7.4 15.9c-2.6 6.8 .5 14.3 6.8 17.9l2.9 1.7c9.2 5.3 13.7 15.8 13.7 26.4s-4.5 21.1-13.7 26.4l-3 1.7c-6.3 3.6-9.5 11.1-6.8 17.9c2.1 5.5 4.6 10.7 7.4 15.8l2.4 4.1c3 5.1 6.4 9.9 10.1 14.5c4.6 5.7 12.7 6.7 19 3l2.9-1.7c9.2-5.3 20.4-4 29.6 1.3s16.1 14.5 16.1 25.1l0 3.4c0 7.3 4.9 13.8 12.1 14.9c6.5 1 13.1 1.5 19.9 1.5s13.4-.5 19.9-1.5c7.2-1.1 12.1-7.6 12.1-14.9l0-3.4c0-10.6 6.9-19.8 16.1-25.1s20.4-6.6 29.6-1.3l2.9 1.7c6.3 3.6 14.4 2.6 19-3c3.7-4.6 7.1-9.4 10.1-14.5l2.4-4.2c2.8-5.1 5.3-10.3 7.4-15.8c2.6-6.8-.5-14.3-6.8-17.9l-3-1.7c-9.2-5.3-13.7-15.8-13.7-26.4s4.5-21.1 13.7-26.4l3-1.7zM472 384a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"],\n    \"person-military-pointing\": [576, 512, [], \"e54a\", \"M246.9 14.1C234 15.2 224 26 224 39c0 13.8 11.2 25 25 25l151 0c8.8 0 16-7.2 16-16l0-30.6C416 8 408 .7 398.7 1.4L246.9 14.1zM240 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16L241.6 96c-1 5.2-1.6 10.5-1.6 16zM72 224c-22.1 0-40 17.9-40 40s17.9 40 40 40l152 0 0 89.4L386.8 230.5c-13.3-4.3-27.3-6.5-41.6-6.5L240 224 72 224zm345.7 20.9L246.6 416 416 416l0-46.3 53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L462.3 290.8c-11.2-18.9-26.6-34.5-44.6-45.9zM224 448l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32-192 0z\"],\n    \"building-columns\": [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M243.4 2.6l-224 96c-14 6-21.8 21-18.7 35.8S16.8 160 32 160l0 8c0 13.3 10.7 24 24 24l400 0c13.3 0 24-10.7 24-24l0-8c15.2 0 28.3-10.7 31.3-25.6s-4.8-29.9-18.7-35.8l-224-96c-8-3.4-17.2-3.4-25.2 0zM128 224l-64 0 0 196.3c-.6 .3-1.2 .7-1.8 1.1l-48 32c-11.7 7.8-17 22.4-12.9 35.9S17.9 512 32 512l448 0c14.1 0 26.5-9.2 30.6-22.7s-1.1-28.1-12.9-35.9l-48-32c-.6-.4-1.2-.7-1.8-1.1L448 224l-64 0 0 192-40 0 0-192-64 0 0 192-48 0 0-192-64 0 0 192-40 0 0-192zM256 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"],\n    \"umbrella\": [576, 512, [], \"f0e9\", \"M288 0c17.7 0 32 14.3 32 32l0 17.7C451.8 63.4 557.7 161 573.9 285.9c2 15.6-17.3 24.4-27.8 12.7C532.1 283 504.8 272 480 272c-38.7 0-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C359 299.5 326.7 272 288 272s-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C167 299.5 134.7 272 96 272c-24.8 0-52.1 11-66.1 26.7C19.4 310.4 .1 301.5 2.1 285.9C18.3 161 124.2 63.4 256 49.7L256 32c0-17.7 14.3-32 32-32zm0 304c12.3 0 23.5 4.6 32 12.2l0 114.3c0 45-36.5 81.4-81.4 81.4c-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6c9.6 0 17.4-7.8 17.4-17.4l0-114.3c8.5-7.6 19.7-12.2 32-12.2z\"],\n    \"trowel\": [512, 512, [], \"e589\", \"M343.9 213.4L245.3 312l65.4 65.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9S-2.1 481.8 1.5 470.5l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L200 266.7l98.6-98.6c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\"],\n    \"d\": [384, 512, [100], \"44\", \"M0 96C0 60.7 28.7 32 64 32l96 0c123.7 0 224 100.3 224 224s-100.3 224-224 224l-96 0c-35.3 0-64-28.7-64-64L0 96zm160 0L64 96l0 320 96 0c88.4 0 160-71.6 160-160s-71.6-160-160-160z\"],\n    \"stapler\": [640, 512, [], \"e5af\", \"M640 299.3l0 4.7 0 128c0 26.5-21.5 48-48 48l-80 0-64 0L64 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0 0-48L96 368c-17.7 0-32-14.3-32-32l0-116.6L33.8 214C14.2 210.5 0 193.5 0 173.7c0-8.9 2.9-17.5 8.2-24.6l35.6-47.5C76.7 57.8 128.2 32 182.9 32c27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304l0-16L128 230.9l0 73.1 320 0z\"],\n    \"masks-theater\": [640, 512, [127917, \"theater-masks\"], \"f630\", \"M74.6 373.2c41.7 36.1 108 82.5 166.1 73.7c6.1-.9 12.1-2.5 18-4.5c-9.2-12.3-17.3-24.4-24.2-35.4c-21.9-35-28.8-75.2-25.9-113.6c-20.6 4.1-39.2 13-54.7 25.4c-6.5 5.2-16.3 1.3-14.8-7c6.4-33.5 33-60.9 68.2-66.3c2.6-.4 5.3-.7 7.9-.8l19.4-131.3c2-13.8 8-32.7 25-45.9C278.2 53.2 310.5 37 363.2 32.2c-.8-.7-1.6-1.4-2.4-2.1C340.6 14.5 288.4-11.5 175.7 5.6S20.5 63 5.7 83.9C0 91.9-.8 102 .6 111.8L24.8 276.1c5.5 37.3 21.5 72.6 49.8 97.2zm87.7-219.6c4.4-3.1 10.8-2 11.8 3.3c.1 .5 .2 1.1 .3 1.6c3.2 21.8-11.6 42-33.1 45.3s-41.5-11.8-44.7-33.5c-.1-.5-.1-1.1-.2-1.6c-.6-5.4 5.2-8.4 10.3-6.7c9 3 18.8 3.9 28.7 2.4s19.1-5.3 26.8-10.8zM261.6 390c29.4 46.9 79.5 110.9 137.6 119.7s124.5-37.5 166.1-73.7c28.3-24.5 44.3-59.8 49.8-97.2l24.2-164.3c1.4-9.8 .6-19.9-5.1-27.9c-14.8-20.9-57.3-61.2-170-78.3S299.4 77.2 279.2 92.8c-7.8 6-11.5 15.4-12.9 25.2L242.1 282.3c-5.5 37.3-.4 75.8 19.6 107.7zM404.5 235.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6c-1 5.3-7.4 6.4-11.8 3.3zm136.2 15.5c-1 5.3-7.4 6.4-11.8 3.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6zM530 350.2c-19.6 44.7-66.8 72.5-116.8 64.9s-87.1-48.2-93-96.7c-1-8.3 8.9-12.1 15.2-6.7c23.9 20.8 53.6 35.3 87 40.3s66.1 .1 94.9-12.8c7.6-3.4 16 3.2 12.6 10.9z\"],\n    \"kip-sign\": [384, 512, [], \"e1c4\", \"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4 128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 160-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-122.4L299.2 472.3c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L182.5 288 352 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-169.5 0L340.8 88.3z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64L32 96zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32c0 13.2-4 25.4-10.8 35.6c24.9 8.7 42.8 32.5 42.8 60.4c0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\"],\n    \"handshake-simple\": [640, 512, [129309, \"handshake-alt\"], \"f4c6\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48-80 0c-26.5 0-48 21.5-48 48L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123z\"],\n    \"jet-fighter\": [640, 512, [\"fighter-jet\"], \"f0fb\", \"M160 24c0-13.3 10.7-24 24-24L296 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0L384 192l116.4 0c7.7 0 15.3 1.4 22.5 4.1L625 234.4c9 3.4 15 12 15 21.6s-6 18.2-15 21.6L522.9 315.9c-7.2 2.7-14.8 4.1-22.5 4.1L384 320 280 464l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-144-32 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L64 384c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l18.7 0c8.5 0 16.6 3.4 22.6 9.4L160 192l32 0 0-144-8 0c-13.3 0-24-10.7-24-24zM80 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"],\n    \"square-share-nodes\": [448, 512, [\"share-alt-square\"], \"f1e1\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM384 160c0 35.3-28.7 64-64 64c-15.4 0-29.5-5.4-40.6-14.5L194.1 256l85.3 46.5c11-9.1 25.2-14.5 40.6-14.5c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L174.5 300c-11.7 12.3-28.2 20-46.5 20c-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3c0-35.3 28.7-64 64-64s64 28.7 64 64z\"],\n    \"barcode\": [512, 512, [], \"f02a\", \"M24 32C10.7 32 0 42.7 0 56L0 456c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24L64 56c0-13.3-10.7-24-24-24L24 32zm88 0c-8.8 0-16 7.2-16 16l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zm96 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zM448 56l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0c-13.3 0-24 10.7-24 24zm-64-8l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"],\n    \"plus-minus\": [384, 512, [], \"e43c\", \"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112L48 144c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0 0 112c0 17.7 14.3 32 32 32s32-14.3 32-32l0-112 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-112zM0 480c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"],\n    \"video\": [576, 512, [\"video-camera\"], \"f03d\", \"M0 128C0 92.7 28.7 64 64 64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2l0 256c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1l0-17.1 0-128 0-17.1 14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z\"],\n    \"graduation-cap\": [640, 512, [127891, \"mortar-board\"], \"f19d\", \"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9l0 28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5l0-24.6c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"],\n    \"hand-holding-medical\": [576, 512, [], \"e05c\", \"M224 24l0 56-56 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l56 0 0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56 56 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-56 0 0-56c0-13.3-10.7-24-24-24L248 0c-13.3 0-24 10.7-24 24zM559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2l.9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"],\n    \"person-circle-check\": [576, 512, [], \"e53e\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"],\n    \"turn-up\": [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M350 177.5c3.8-8.8 2-19-4.6-26l-136-144C204.9 2.7 198.6 0 192 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26s12.5 14.5 22 14.5l88 0 0 192c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l80 0c70.7 0 128-57.3 128-128l0-192 88 0c9.6 0 18.2-5.7 22-14.5z\"]\n  };\n\n  bunker(() => {\n    defineIcons('fas', icons);\n    defineIcons('fa-solid', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  function _defineProperty(e, r, t) {\n    return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n      value: t,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }) : e[r] = t, e;\n  }\n  function _inherits(t, e) {\n    if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n    t.prototype = Object.create(e && e.prototype, {\n      constructor: {\n        value: t,\n        writable: !0,\n        configurable: !0\n      }\n    }), Object.defineProperty(t, \"prototype\", {\n      writable: !1\n    }), e && _setPrototypeOf(t, e);\n  }\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _setPrototypeOf(t, e) {\n    return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n      return t.__proto__ = e, t;\n    }, _setPrototypeOf(t, e);\n  }\n  function _toPrimitive(t, r) {\n    if (\"object\" != typeof t || !t) return t;\n    var e = t[Symbol.toPrimitive];\n    if (void 0 !== e) {\n      var i = e.call(t, r || \"default\");\n      if (\"object\" != typeof i) return i;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === r ? String : Number)(t);\n  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n  function _wrapRegExp() {\n    _wrapRegExp = function (e, r) {\n      return new BabelRegExp(e, void 0, r);\n    };\n    var e = RegExp.prototype,\n      r = new WeakMap();\n    function BabelRegExp(e, t, p) {\n      var o = RegExp(e, t);\n      return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);\n    }\n    function buildGroups(e, t) {\n      var p = r.get(t);\n      return Object.keys(p).reduce(function (r, t) {\n        var o = p[t];\n        if (\"number\" == typeof o) r[t] = e[o];else {\n          for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;\n          r[t] = e[o[i]];\n        }\n        return r;\n      }, Object.create(null));\n    }\n    return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {\n      var t = e.exec.call(this, r);\n      if (t) {\n        t.groups = buildGroups(t, this);\n        var p = t.indices;\n        p && (p.groups = buildGroups(p, this));\n      }\n      return t;\n    }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {\n      if (\"string\" == typeof p) {\n        var o = r.get(this);\n        return e[Symbol.replace].call(this, t, p.replace(/\\$<([^>]+)>/g, function (e, r) {\n          var t = o[r];\n          return \"$\" + (Array.isArray(t) ? t.join(\"$\") : t);\n        }));\n      }\n      if (\"function\" == typeof p) {\n        var i = this;\n        return e[Symbol.replace].call(this, t, function () {\n          var e = arguments;\n          return \"object\" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);\n        });\n      }\n      return e[Symbol.replace].call(this, t, p);\n    }, _wrapRegExp.apply(this, arguments);\n  }\n\n  const noop = () => {};\n  let _WINDOW = {};\n  let _DOCUMENT = {};\n  let _MUTATION_OBSERVER = null;\n  let _PERFORMANCE = {\n    mark: noop,\n    measure: noop\n  };\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n    if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n    if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n  } catch (e) {}\n  const {\n    userAgent = ''\n  } = _WINDOW.navigator || {};\n  const WINDOW = _WINDOW;\n  const DOCUMENT = _DOCUMENT;\n  const MUTATION_OBSERVER = _MUTATION_OBSERVER;\n  const PERFORMANCE = _PERFORMANCE;\n  const IS_BROWSER = !!WINDOW.document;\n  const IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  const IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  var p = /fa(s|r|l|t|d|dr|dl|dt|b|k|kd|ss|sr|sl|st|sds|sdr|sdl|sdt)?[\\-\\ ]/,\n    g = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i;\n  var S = {\n      classic: {\n        fa: \"solid\",\n        fas: \"solid\",\n        \"fa-solid\": \"solid\",\n        far: \"regular\",\n        \"fa-regular\": \"regular\",\n        fal: \"light\",\n        \"fa-light\": \"light\",\n        fat: \"thin\",\n        \"fa-thin\": \"thin\",\n        fab: \"brands\",\n        \"fa-brands\": \"brands\"\n      },\n      duotone: {\n        fa: \"solid\",\n        fad: \"solid\",\n        \"fa-solid\": \"solid\",\n        \"fa-duotone\": \"solid\",\n        fadr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fadl: \"light\",\n        \"fa-light\": \"light\",\n        fadt: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      sharp: {\n        fa: \"solid\",\n        fass: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasl: \"light\",\n        \"fa-light\": \"light\",\n        fast: \"thin\",\n        \"fa-thin\": \"thin\"\n      },\n      \"sharp-duotone\": {\n        fa: \"solid\",\n        fasds: \"solid\",\n        \"fa-solid\": \"solid\",\n        fasdr: \"regular\",\n        \"fa-regular\": \"regular\",\n        fasdl: \"light\",\n        \"fa-light\": \"light\",\n        fasdt: \"thin\",\n        \"fa-thin\": \"thin\"\n      }\n    },\n    A = {\n      GROUP: \"duotone-group\",\n      SWAP_OPACITY: \"swap-opacity\",\n      PRIMARY: \"primary\",\n      SECONDARY: \"secondary\"\n    },\n    P = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\n  var s = \"classic\",\n    t = \"duotone\",\n    r = \"sharp\",\n    o = \"sharp-duotone\",\n    L = [s, t, r, o];\n  var G = {\n      classic: {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\",\n        100: \"fat\"\n      },\n      duotone: {\n        900: \"fad\",\n        400: \"fadr\",\n        300: \"fadl\",\n        100: \"fadt\"\n      },\n      sharp: {\n        900: \"fass\",\n        400: \"fasr\",\n        300: \"fasl\",\n        100: \"fast\"\n      },\n      \"sharp-duotone\": {\n        900: \"fasds\",\n        400: \"fasdr\",\n        300: \"fasdl\",\n        100: \"fasdt\"\n      }\n    };\n  var lt = {\n      \"Font Awesome 6 Free\": {\n        900: \"fas\",\n        400: \"far\"\n      },\n      \"Font Awesome 6 Pro\": {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\",\n        100: \"fat\"\n      },\n      \"Font Awesome 6 Brands\": {\n        400: \"fab\",\n        normal: \"fab\"\n      },\n      \"Font Awesome 6 Duotone\": {\n        900: \"fad\",\n        400: \"fadr\",\n        normal: \"fadr\",\n        300: \"fadl\",\n        100: \"fadt\"\n      },\n      \"Font Awesome 6 Sharp\": {\n        900: \"fass\",\n        400: \"fasr\",\n        normal: \"fasr\",\n        300: \"fasl\",\n        100: \"fast\"\n      },\n      \"Font Awesome 6 Sharp Duotone\": {\n        900: \"fasds\",\n        400: \"fasdr\",\n        normal: \"fasdr\",\n        300: \"fasdl\",\n        100: \"fasdt\"\n      }\n    };\n  var pt = new Map([[\"classic\", {\n      defaultShortPrefixId: \"fas\",\n      defaultStyleId: \"solid\",\n      styleIds: [\"solid\", \"regular\", \"light\", \"thin\", \"brands\"],\n      futureStyleIds: [],\n      defaultFontWeight: 900\n    }], [\"sharp\", {\n      defaultShortPrefixId: \"fass\",\n      defaultStyleId: \"solid\",\n      styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n      futureStyleIds: [],\n      defaultFontWeight: 900\n    }], [\"duotone\", {\n      defaultShortPrefixId: \"fad\",\n      defaultStyleId: \"solid\",\n      styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n      futureStyleIds: [],\n      defaultFontWeight: 900\n    }], [\"sharp-duotone\", {\n      defaultShortPrefixId: \"fasds\",\n      defaultStyleId: \"solid\",\n      styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n      futureStyleIds: [],\n      defaultFontWeight: 900\n    }]]),\n    xt = {\n      classic: {\n        solid: \"fas\",\n        regular: \"far\",\n        light: \"fal\",\n        thin: \"fat\",\n        brands: \"fab\"\n      },\n      duotone: {\n        solid: \"fad\",\n        regular: \"fadr\",\n        light: \"fadl\",\n        thin: \"fadt\"\n      },\n      sharp: {\n        solid: \"fass\",\n        regular: \"fasr\",\n        light: \"fasl\",\n        thin: \"fast\"\n      },\n      \"sharp-duotone\": {\n        solid: \"fasds\",\n        regular: \"fasdr\",\n        light: \"fasdl\",\n        thin: \"fasdt\"\n      }\n    };\n  var Ft = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"],\n    St = {\n      kit: {\n        fak: \"kit\",\n        \"fa-kit\": \"kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"kit-duotone\",\n        \"fa-kit-duotone\": \"kit-duotone\"\n      }\n    },\n    At = [\"kit\"];\n  var Ct = {\n    kit: {\n      \"fa-kit\": \"fak\"\n    },\n    \"kit-duotone\": {\n      \"fa-kit-duotone\": \"fakd\"\n    }\n  };\n  var Lt = [\"fak\", \"fakd\"],\n    Wt = {\n      kit: {\n        fak: \"fa-kit\"\n      },\n      \"kit-duotone\": {\n        fakd: \"fa-kit-duotone\"\n      }\n    };\n  var Et = {\n      kit: {\n        kit: \"fak\"\n      },\n      \"kit-duotone\": {\n        \"kit-duotone\": \"fakd\"\n      }\n    };\n\n  var t$1 = {\n      GROUP: \"duotone-group\",\n      SWAP_OPACITY: \"swap-opacity\",\n      PRIMARY: \"primary\",\n      SECONDARY: \"secondary\"\n    },\n    r$1 = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\n  var bt$1 = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"];\n  var Yt = {\n      \"Font Awesome Kit\": {\n        400: \"fak\",\n        normal: \"fak\"\n      },\n      \"Font Awesome Kit Duotone\": {\n        400: \"fakd\",\n        normal: \"fakd\"\n      }\n    };\n  var ua = {\n      classic: {\n        \"fa-brands\": \"fab\",\n        \"fa-duotone\": \"fad\",\n        \"fa-light\": \"fal\",\n        \"fa-regular\": \"far\",\n        \"fa-solid\": \"fas\",\n        \"fa-thin\": \"fat\"\n      },\n      duotone: {\n        \"fa-regular\": \"fadr\",\n        \"fa-light\": \"fadl\",\n        \"fa-thin\": \"fadt\"\n      },\n      sharp: {\n        \"fa-solid\": \"fass\",\n        \"fa-regular\": \"fasr\",\n        \"fa-light\": \"fasl\",\n        \"fa-thin\": \"fast\"\n      },\n      \"sharp-duotone\": {\n        \"fa-solid\": \"fasds\",\n        \"fa-regular\": \"fasdr\",\n        \"fa-light\": \"fasdl\",\n        \"fa-thin\": \"fasdt\"\n      }\n    },\n    I$1 = {\n      classic: [\"fas\", \"far\", \"fal\", \"fat\", \"fad\"],\n      duotone: [\"fadr\", \"fadl\", \"fadt\"],\n      sharp: [\"fass\", \"fasr\", \"fasl\", \"fast\"],\n      \"sharp-duotone\": [\"fasds\", \"fasdr\", \"fasdl\", \"fasdt\"]\n    },\n    ga = {\n      classic: {\n        fab: \"fa-brands\",\n        fad: \"fa-duotone\",\n        fal: \"fa-light\",\n        far: \"fa-regular\",\n        fas: \"fa-solid\",\n        fat: \"fa-thin\"\n      },\n      duotone: {\n        fadr: \"fa-regular\",\n        fadl: \"fa-light\",\n        fadt: \"fa-thin\"\n      },\n      sharp: {\n        fass: \"fa-solid\",\n        fasr: \"fa-regular\",\n        fasl: \"fa-light\",\n        fast: \"fa-thin\"\n      },\n      \"sharp-duotone\": {\n        fasds: \"fa-solid\",\n        fasdr: \"fa-regular\",\n        fasdl: \"fa-light\",\n        fasdt: \"fa-thin\"\n      }\n    },\n    x = [\"fa-solid\", \"fa-regular\", \"fa-light\", \"fa-thin\", \"fa-duotone\", \"fa-brands\"],\n    Ia = [\"fa\", \"fas\", \"far\", \"fal\", \"fat\", \"fad\", \"fadr\", \"fadl\", \"fadt\", \"fab\", \"fass\", \"fasr\", \"fasl\", \"fast\", \"fasds\", \"fasdr\", \"fasdl\", \"fasdt\", ...r$1, ...x],\n    m$1 = [\"solid\", \"regular\", \"light\", \"thin\", \"duotone\", \"brands\"],\n    c$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n    F$1 = c$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),\n    ma = [...Object.keys(I$1), ...m$1, \"2xs\", \"xs\", \"sm\", \"lg\", \"xl\", \"2xl\", \"beat\", \"border\", \"fade\", \"beat-fade\", \"bounce\", \"flip-both\", \"flip-horizontal\", \"flip-vertical\", \"flip\", \"fw\", \"inverse\", \"layers-counter\", \"layers-text\", \"layers\", \"li\", \"pull-left\", \"pull-right\", \"pulse\", \"rotate-180\", \"rotate-270\", \"rotate-90\", \"rotate-by\", \"shake\", \"spin-pulse\", \"spin-reverse\", \"spin\", \"stack-1x\", \"stack-2x\", \"stack\", \"ul\", t$1.GROUP, t$1.SWAP_OPACITY, t$1.PRIMARY, t$1.SECONDARY].concat(c$1.map(a => \"\".concat(a, \"x\"))).concat(F$1.map(a => \"w-\".concat(a)));\n  var wa = {\n      \"Font Awesome 5 Free\": {\n        900: \"fas\",\n        400: \"far\"\n      },\n      \"Font Awesome 5 Pro\": {\n        900: \"fas\",\n        400: \"far\",\n        normal: \"far\",\n        300: \"fal\"\n      },\n      \"Font Awesome 5 Brands\": {\n        400: \"fab\",\n        normal: \"fab\"\n      },\n      \"Font Awesome 5 Duotone\": {\n        900: \"fad\"\n      }\n    };\n\n  const NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  const UNITS_IN_GRID = 16;\n  const DEFAULT_CSS_PREFIX = 'fa';\n  const DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\n  const DATA_FA_I2SVG = 'data-fa-i2svg';\n  const DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\n  const DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\n  const DATA_PREFIX = 'data-prefix';\n  const DATA_ICON = 'data-icon';\n  const HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\n  const MUTATION_APPROACH_ASYNC = 'async';\n  const TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\n  const PRODUCTION = (() => {\n    try {\n      return \"production\" === 'production';\n    } catch (e$$1) {\n      return false;\n    }\n  })();\n  function familyProxy(obj) {\n    // Defaults to the classic family if family is not available\n    return new Proxy(obj, {\n      get(target, prop) {\n        return prop in target ? target[prop] : target[s];\n      }\n    });\n  }\n  const _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n  // We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n  // {'fa-duotone': 'duotone'}\n  _PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    'fa-duotone': 'duotone'\n  }), S[s]), St['kit']), St['kit-duotone']);\n  const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\n  const _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n  // We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n  // duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n  _STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    duotone: 'fad'\n  }), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\n  const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\n  const _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n  _PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\n  const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\n  const _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n  _LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\n  const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\n  const ICON_SELECTION_SYNTAX_PATTERN = p; // eslint-disable-line no-useless-escape\n\n  const LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\n  const FONT_FAMILY_PATTERN = g;\n  const _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\n  const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\n  const ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\n  const DUOTONE_CLASSES = A;\n  const RESERVED_CLASSES = [...At, ...ma];\n\n  const initial = WINDOW.FontAwesomeConfig || {};\n  function getAttrConfig(attr) {\n    var element = DOCUMENT.querySelector('script[' + attr + ']');\n    if (element) {\n      return element.getAttribute(attr);\n    }\n  }\n  function coerce(val) {\n    // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n    // We'll assume that this is an indication that it should be toggled to true\n    if (val === '') return true;\n    if (val === 'false') return false;\n    if (val === 'true') return true;\n    return val;\n  }\n  if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n    const attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n    attrs.forEach(_ref => {\n      let [attr, key] = _ref;\n      const val = coerce(getAttrConfig(attr));\n      if (val !== undefined && val !== null) {\n        initial[key] = val;\n      }\n    });\n  }\n  const _default = {\n    styleDefault: 'solid',\n    familyDefault: s,\n    cssPrefix: DEFAULT_CSS_PREFIX,\n    replacementClass: DEFAULT_REPLACEMENT_CLASS,\n    autoReplaceSvg: true,\n    autoAddCss: true,\n    autoA11y: true,\n    searchPseudoElements: false,\n    observeMutations: true,\n    mutateApproach: 'async',\n    keepOriginalSource: true,\n    measurePerformance: false,\n    showMissingIcons: true\n  };\n\n  // familyPrefix is deprecated but we must still support it if present\n  if (initial.familyPrefix) {\n    initial.cssPrefix = initial.familyPrefix;\n  }\n  const _config = _objectSpread2(_objectSpread2({}, _default), initial);\n  if (!_config.autoReplaceSvg) _config.observeMutations = false;\n  const config = {};\n  Object.keys(_default).forEach(key => {\n    Object.defineProperty(config, key, {\n      enumerable: true,\n      set: function (val) {\n        _config[key] = val;\n        _onChangeCb.forEach(cb => cb(config));\n      },\n      get: function () {\n        return _config[key];\n      }\n    });\n  });\n\n  // familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\n  Object.defineProperty(config, 'familyPrefix', {\n    enumerable: true,\n    set: function (val) {\n      _config.cssPrefix = val;\n      _onChangeCb.forEach(cb => cb(config));\n    },\n    get: function () {\n      return _config.cssPrefix;\n    }\n  });\n  WINDOW.FontAwesomeConfig = config;\n  const _onChangeCb = [];\n  function onChange(cb) {\n    _onChangeCb.push(cb);\n    return () => {\n      _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n    };\n  }\n\n  const d$2 = UNITS_IN_GRID;\n  const meaninglessTransform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    rotate: 0,\n    flipX: false,\n    flipY: false\n  };\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      fn(...args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n  function insertCss(css) {\n    if (!css || !IS_DOM) {\n      return;\n    }\n    const style = DOCUMENT.createElement('style');\n    style.setAttribute('type', 'text/css');\n    style.innerHTML = css;\n    const headChildren = DOCUMENT.head.childNodes;\n    let beforeChild = null;\n    for (let i = headChildren.length - 1; i > -1; i--) {\n      const child = headChildren[i];\n      const tagName = (child.tagName || '').toUpperCase();\n      if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n        beforeChild = child;\n      }\n    }\n    DOCUMENT.head.insertBefore(style, beforeChild);\n    return css;\n  }\n  const idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  function nextUniqueId() {\n    let size = 12;\n    let id = '';\n    while (size-- > 0) {\n      id += idPool[Math.random() * 62 | 0];\n    }\n    return id;\n  }\n  function toArray(obj) {\n    const array = [];\n    for (let i = (obj || []).length >>> 0; i--;) {\n      array[i] = obj[i];\n    }\n    return array;\n  }\n  function classArray(node) {\n    if (node.classList) {\n      return toArray(node.classList);\n    } else {\n      return (node.getAttribute('class') || '').split(' ').filter(i => i);\n    }\n  }\n  function htmlEscape(str) {\n    return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  }\n  function joinAttributes(attributes) {\n    return Object.keys(attributes || {}).reduce((acc, attributeName) => {\n      return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n    }, '').trim();\n  }\n  function joinStyles(styles) {\n    return Object.keys(styles || {}).reduce((acc, styleName) => {\n      return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n    }, '');\n  }\n  function transformIsMeaningful(transform) {\n    return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n  }\n  function transformForSvg(_ref) {\n    let {\n      transform,\n      containerWidth,\n      iconWidth\n    } = _ref;\n    const outer = {\n      transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n    };\n    const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n    const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n    const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n    const inner = {\n      transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n    };\n    const path = {\n      transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n    };\n    return {\n      outer,\n      inner,\n      path\n    };\n  }\n  function transformForCss(_ref2) {\n    let {\n      transform,\n      width = UNITS_IN_GRID,\n      height = UNITS_IN_GRID,\n      startCentered = false\n    } = _ref2;\n    let val = '';\n    if (startCentered && IS_IE) {\n      val += \"translate(\".concat(transform.x / d$2 - width / 2, \"em, \").concat(transform.y / d$2 - height / 2, \"em) \");\n    } else if (startCentered) {\n      val += \"translate(calc(-50% + \".concat(transform.x / d$2, \"em), calc(-50% + \").concat(transform.y / d$2, \"em)) \");\n    } else {\n      val += \"translate(\".concat(transform.x / d$2, \"em, \").concat(transform.y / d$2, \"em) \");\n    }\n    val += \"scale(\".concat(transform.size / d$2 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d$2 * (transform.flipY ? -1 : 1), \") \");\n    val += \"rotate(\".concat(transform.rotate, \"deg) \");\n    return val;\n  }\n\n  var baseStyles = \":host,:root{--fa-font-solid:normal 900 1em/1 \\\"Font Awesome 6 Free\\\";--fa-font-regular:normal 400 1em/1 \\\"Font Awesome 6 Free\\\";--fa-font-light:normal 300 1em/1 \\\"Font Awesome 6 Pro\\\";--fa-font-thin:normal 100 1em/1 \\\"Font Awesome 6 Pro\\\";--fa-font-duotone:normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-duotone-regular:normal 400 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-duotone-light:normal 300 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-duotone-thin:normal 100 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-brands:normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";--fa-font-sharp-solid:normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";--fa-font-sharp-regular:normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";--fa-font-sharp-light:normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";--fa-font-sharp-thin:normal 100 1em/1 \\\"Font Awesome 6 Sharp\\\";--fa-font-sharp-duotone-solid:normal 900 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";--fa-font-sharp-duotone-regular:normal 400 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";--fa-font-sharp-duotone-light:normal 300 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";--fa-font-sharp-duotone-thin:normal 100 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{transform-origin:center center}.fa-layers-text{left:50%;top:50%;transform:translate(-50%,-50%);transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);transform:scale(var(--fa-counter-scale,.25));transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;transform:scale(var(--fa-layers-scale,.25));transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;transform:scale(var(--fa-layers-scale,.25));transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width,2em));position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1,1) translateY(0)}100%{transform:scale(1,1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}24%,8%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}100%,40%{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}\";\n\n  function css() {\n    const dcp = DEFAULT_CSS_PREFIX;\n    const drc = DEFAULT_REPLACEMENT_CLASS;\n    const fp = config.cssPrefix;\n    const rc = config.replacementClass;\n    let s = baseStyles;\n    if (fp !== dcp || rc !== drc) {\n      const dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n      const customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n      const rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n      s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n    }\n    return s;\n  }\n  let _cssInserted = false;\n  function ensureCss() {\n    if (config.autoAddCss && !_cssInserted) {\n      insertCss(css());\n      _cssInserted = true;\n    }\n  }\n  var InjectCSS = {\n    mixout() {\n      return {\n        dom: {\n          css,\n          insertCss: ensureCss\n        }\n      };\n    },\n    hooks() {\n      return {\n        beforeDOMElementCreation() {\n          ensureCss();\n        },\n        beforeI2svg() {\n          ensureCss();\n        }\n      };\n    }\n  };\n\n  const w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  const functions = [];\n  const listener = function () {\n    DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n    loaded = 1;\n    functions.map(fn => fn());\n  };\n  let loaded = false;\n  if (IS_DOM) {\n    loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n    if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n  }\n  function domready (fn) {\n    if (!IS_DOM) return;\n    loaded ? setTimeout(fn, 0) : functions.push(fn);\n  }\n\n  function toHtml(abstractNodes) {\n    const {\n      tag,\n      attributes = {},\n      children = []\n    } = abstractNodes;\n    if (typeof abstractNodes === 'string') {\n      return htmlEscape(abstractNodes);\n    } else {\n      return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n    }\n  }\n\n  function iconFromMapping(mapping, prefix, iconName) {\n    if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n      return {\n        prefix,\n        iconName,\n        icon: mapping[prefix][iconName]\n      };\n    }\n  }\n\n  /**\n   * Internal helper to bind a function known to have 4 arguments\n   * to a given context.\n   */\n  var bindInternal4 = function bindInternal4(func, thisContext) {\n    return function (a, b, c, d) {\n      return func.call(thisContext, a, b, c, d);\n    };\n  };\n\n  /**\n   * # Reduce\n   *\n   * A fast object `.reduce()` implementation.\n   *\n   * @param  {Object}   subject      The object to reduce over.\n   * @param  {Function} fn           The reducer function.\n   * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n   * @param  {Object}   thisContext  The context for the reducer.\n   * @return {mixed}                 The final result.\n   */\n  var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n    var keys = Object.keys(subject),\n      length = keys.length,\n      iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n      i,\n      key,\n      result;\n    if (initialValue === undefined) {\n      i = 1;\n      result = subject[keys[0]];\n    } else {\n      i = 0;\n      result = initialValue;\n    }\n    for (; i < length; i++) {\n      key = keys[i];\n      result = iterator(result, subject[key], key, subject);\n    }\n    return result;\n  };\n\n  /**\n   * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n   *\n   * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n   * Permission is hereby granted, free of charge, to any person obtaining\n   * a copy of this software and associated documentation files (the\n   * \"Software\"), to deal in the Software without restriction, including\n   * without limitation the rights to use, copy, modify, merge, publish,\n   * distribute, sublicense, and/or sell copies of the Software, and to\n   * permit persons to whom the Software is furnished to do so, subject to\n   * the following conditions:\n\n   * The above copyright notice and this permission notice shall be\n   * included in all copies or substantial portions of the Software.\n\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   */\n\n  function ucs2decode(string) {\n    const output = [];\n    let counter = 0;\n    const length = string.length;\n    while (counter < length) {\n      const value = string.charCodeAt(counter++);\n      if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n        const extra = string.charCodeAt(counter++);\n        if ((extra & 0xFC00) == 0xDC00) {\n          // eslint-disable-line eqeqeq\n          output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n        } else {\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n    return output;\n  }\n  function toHex(unicode) {\n    const decoded = ucs2decode(unicode);\n    return decoded.length === 1 ? decoded[0].toString(16) : null;\n  }\n  function codePointAt(string, index) {\n    const size = string.length;\n    let first = string.charCodeAt(index);\n    let second;\n    if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n      second = string.charCodeAt(index + 1);\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      }\n    }\n    return first;\n  }\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce((acc, iconName) => {\n      const icon = icons[iconName];\n      const expanded = !!icon.icon;\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n      return acc;\n    }, {});\n  }\n  function defineIcons(prefix, icons) {\n    let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const {\n      skipHooks = false\n    } = params;\n    const normalized = normalizeIcons(icons);\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  const duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*path d=\"([^\"]+)\"/, {\n    d1: 1,\n    d2: 2\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\".*path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n    cls1: 1,\n    d1: 2,\n    cls2: 3,\n    d2: 4\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n    cls1: 1,\n    d1: 2\n  })];\n\n  const {\n    styles,\n    shims\n  } = namespace;\n  const FAMILY_NAMES = Object.keys(PREFIX_TO_LONG_STYLE);\n  const PREFIXES_FOR_FAMILY = FAMILY_NAMES.reduce((acc, familyId) => {\n    acc[familyId] = Object.keys(PREFIX_TO_LONG_STYLE[familyId]);\n    return acc;\n  }, {});\n  let _defaultUsablePrefix = null;\n  let _byUnicode = {};\n  let _byLigature = {};\n  let _byOldName = {};\n  let _byOldUnicode = {};\n  let _byAlias = {};\n  function isReserved(name) {\n    return ~RESERVED_CLASSES.indexOf(name);\n  }\n  function getIconName(cssPrefix, cls) {\n    const parts = cls.split('-');\n    const prefix = parts[0];\n    const iconName = parts.slice(1).join('-');\n    if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n      return iconName;\n    } else {\n      return null;\n    }\n  }\n  const build = () => {\n    const lookup = reducer => {\n      return reduce(styles, (o$$1, style, prefix) => {\n        o$$1[prefix] = reduce(style, reducer, {});\n        return o$$1;\n      }, {});\n    };\n    _byUnicode = lookup((acc, icon, iconName) => {\n      if (icon[3]) {\n        acc[icon[3]] = iconName;\n      }\n      if (icon[2]) {\n        const aliases = icon[2].filter(a$$1 => {\n          return typeof a$$1 === 'number';\n        });\n        aliases.forEach(alias => {\n          acc[alias.toString(16)] = iconName;\n        });\n      }\n      return acc;\n    });\n    _byLigature = lookup((acc, icon, iconName) => {\n      acc[iconName] = iconName;\n      if (icon[2]) {\n        const aliases = icon[2].filter(a$$1 => {\n          return typeof a$$1 === 'string';\n        });\n        aliases.forEach(alias => {\n          acc[alias] = iconName;\n        });\n      }\n      return acc;\n    });\n    _byAlias = lookup((acc, icon, iconName) => {\n      const aliases = icon[2];\n      acc[iconName] = iconName;\n      aliases.forEach(alias => {\n        acc[alias] = iconName;\n      });\n      return acc;\n    });\n\n    // If we have a Kit, we can't determine if regular is available since we\n    // could be auto-fetching it. We'll have to assume that it is available.\n    const hasRegular = 'far' in styles || config.autoFetchSvg;\n    const shimLookups = reduce(shims, (acc, shim) => {\n      const maybeNameMaybeUnicode = shim[0];\n      let prefix = shim[1];\n      const iconName = shim[2];\n      if (prefix === 'far' && !hasRegular) {\n        prefix = 'fas';\n      }\n      if (typeof maybeNameMaybeUnicode === 'string') {\n        acc.names[maybeNameMaybeUnicode] = {\n          prefix,\n          iconName\n        };\n      }\n      if (typeof maybeNameMaybeUnicode === 'number') {\n        acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n          prefix,\n          iconName\n        };\n      }\n      return acc;\n    }, {\n      names: {},\n      unicodes: {}\n    });\n    _byOldName = shimLookups.names;\n    _byOldUnicode = shimLookups.unicodes;\n    _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n      family: config.familyDefault\n    });\n  };\n  onChange(c$$1 => {\n    _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, {\n      family: config.familyDefault\n    });\n  });\n  build();\n  function byUnicode(prefix, unicode) {\n    return (_byUnicode[prefix] || {})[unicode];\n  }\n  function byLigature(prefix, ligature) {\n    return (_byLigature[prefix] || {})[ligature];\n  }\n  function byAlias(prefix, alias) {\n    return (_byAlias[prefix] || {})[alias];\n  }\n  function byOldName(name) {\n    return _byOldName[name] || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function byOldUnicode(unicode) {\n    const oldUnicode = _byOldUnicode[unicode];\n    const newUnicode = byUnicode('fas', unicode);\n    return oldUnicode || (newUnicode ? {\n      prefix: 'fas',\n      iconName: newUnicode\n    } : null) || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function getDefaultUsablePrefix() {\n    return _defaultUsablePrefix;\n  }\n  const emptyCanonicalIcon = () => {\n    return {\n      prefix: null,\n      iconName: null,\n      rest: []\n    };\n  };\n  function getFamilyId(values) {\n    let family = s;\n    const famProps = FAMILY_NAMES.reduce((acc, familyId) => {\n      acc[familyId] = \"\".concat(config.cssPrefix, \"-\").concat(familyId);\n      return acc;\n    }, {});\n    L.forEach(familyId => {\n      if (values.includes(famProps[familyId]) || values.some(v$$1 => PREFIXES_FOR_FAMILY[familyId].includes(v$$1))) {\n        family = familyId;\n      }\n    });\n    return family;\n  }\n  function getCanonicalPrefix(styleOrPrefix) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const {\n      family = s\n    } = params;\n    const style = PREFIX_TO_STYLE[family][styleOrPrefix];\n\n    // handles the exception of passing in only a family of 'duotone' with no style\n    if (family === t && !styleOrPrefix) {\n      return 'fad';\n    }\n    const prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n    const defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n    const result = prefix || defined || null;\n    return result;\n  }\n  function moveNonFaClassesToRest(classNames) {\n    let rest = [];\n    let iconName = null;\n    classNames.forEach(cls => {\n      const result = getIconName(config.cssPrefix, cls);\n      if (result) {\n        iconName = result;\n      } else if (cls) {\n        rest.push(cls);\n      }\n    });\n    return {\n      iconName,\n      rest\n    };\n  }\n  function sortedUniqueValues(arr) {\n    return arr.sort().filter((value, index, arr) => {\n      return arr.indexOf(value) === index;\n    });\n  }\n  function getCanonicalIcon(values) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const {\n      skipLookups = false\n    } = params;\n    let givenPrefix = null;\n    const faCombinedClasses = Ia.concat(bt$1);\n    const faStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => faCombinedClasses.includes(cls)));\n    const nonStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => !Ia.includes(cls)));\n    const faStyles = faStyleOrFamilyClasses.filter(cls => {\n      givenPrefix = cls;\n      return !P.includes(cls);\n    });\n    const [styleFromValues = null] = faStyles;\n    const family = getFamilyId(faStyleOrFamilyClasses);\n    const canonical = _objectSpread2(_objectSpread2({}, moveNonFaClassesToRest(nonStyleOrFamilyClasses)), {}, {\n      prefix: getCanonicalPrefix(styleFromValues, {\n        family\n      })\n    });\n    return _objectSpread2(_objectSpread2(_objectSpread2({}, canonical), getDefaultCanonicalPrefix({\n      values,\n      family,\n      styles,\n      config,\n      canonical,\n      givenPrefix\n    })), applyShimAndAlias(skipLookups, givenPrefix, canonical));\n  }\n  function applyShimAndAlias(skipLookups, givenPrefix, canonical) {\n    let {\n      prefix,\n      iconName\n    } = canonical;\n    if (skipLookups || !prefix || !iconName) {\n      return {\n        prefix,\n        iconName\n      };\n    }\n    const shim = givenPrefix === 'fa' ? byOldName(iconName) : {};\n    const aliasIconName = byAlias(prefix, iconName);\n    iconName = shim.iconName || aliasIconName || iconName;\n    prefix = shim.prefix || prefix;\n    if (prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n      // Allow a fallback from the regular style to solid if regular is not available\n      // but only if we aren't auto-fetching SVGs\n      prefix = 'fas';\n    }\n    return {\n      prefix,\n      iconName\n    };\n  }\n  const newCanonicalFamilies = L.filter(familyId => {\n    return familyId !== s || familyId !== t;\n  });\n  const newCanonicalStyles = Object.keys(ga).filter(key => key !== s).map(key => Object.keys(ga[key])).flat();\n  function getDefaultCanonicalPrefix(prefixOptions) {\n    const {\n      values,\n      family,\n      canonical,\n      givenPrefix = '',\n      styles = {},\n      config: config$$1 = {}\n    } = prefixOptions;\n    const isDuotoneFamily = family === t;\n    const valuesHasDuotone = values.includes('fa-duotone') || values.includes('fad');\n    const defaultFamilyIsDuotone = config$$1.familyDefault === 'duotone';\n    const canonicalPrefixIsDuotone = canonical.prefix === 'fad' || canonical.prefix === 'fa-duotone';\n    if (!isDuotoneFamily && (valuesHasDuotone || defaultFamilyIsDuotone || canonicalPrefixIsDuotone)) {\n      canonical.prefix = 'fad';\n    }\n    if (values.includes('fa-brands') || values.includes('fab')) {\n      canonical.prefix = 'fab';\n    }\n    if (!canonical.prefix && newCanonicalFamilies.includes(family)) {\n      const validPrefix = Object.keys(styles).find(key => newCanonicalStyles.includes(key));\n      if (validPrefix || config$$1.autoFetchSvg) {\n        const defaultPrefix = pt.get(family).defaultShortPrefixId;\n        canonical.prefix = defaultPrefix;\n        canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n      }\n    }\n    if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n      // The fa prefix is not canonical. So if it has made it through until this point\n      // we will shift it to the correct prefix.\n      canonical.prefix = getDefaultUsablePrefix() || 'fas';\n    }\n    return canonical;\n  }\n\n  class Library {\n    constructor() {\n      this.definitions = {};\n    }\n    add() {\n      for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n        definitions[_key] = arguments[_key];\n      }\n      const additions = definitions.reduce(this._pullDefinitions, {});\n      Object.keys(additions).forEach(key => {\n        this.definitions[key] = _objectSpread2(_objectSpread2({}, this.definitions[key] || {}), additions[key]);\n        defineIcons(key, additions[key]);\n\n        // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n        const longPrefix = PREFIX_TO_LONG_STYLE[s][key];\n        if (longPrefix) defineIcons(longPrefix, additions[key]);\n        build();\n      });\n    }\n    reset() {\n      this.definitions = {};\n    }\n    _pullDefinitions(additions, definition) {\n      const normalized = definition.prefix && definition.iconName && definition.icon ? {\n        0: definition\n      } : definition;\n      Object.keys(normalized).map(key => {\n        const {\n          prefix,\n          iconName,\n          icon\n        } = normalized[key];\n        const aliases = icon[2];\n        if (!additions[prefix]) additions[prefix] = {};\n        if (aliases.length > 0) {\n          aliases.forEach(alias => {\n            if (typeof alias === 'string') {\n              additions[prefix][alias] = icon;\n            }\n          });\n        }\n        additions[prefix][iconName] = icon;\n      });\n      return additions;\n    }\n  }\n\n  let _plugins = [];\n  let _hooks = {};\n  const providers = {};\n  const defaultProviderKeys = Object.keys(providers);\n  function registerPlugins(nextPlugins, _ref) {\n    let {\n      mixoutsTo: obj\n    } = _ref;\n    _plugins = nextPlugins;\n    _hooks = {};\n    Object.keys(providers).forEach(k => {\n      if (defaultProviderKeys.indexOf(k) === -1) {\n        delete providers[k];\n      }\n    });\n    _plugins.forEach(plugin => {\n      const mixout = plugin.mixout ? plugin.mixout() : {};\n      Object.keys(mixout).forEach(tk => {\n        if (typeof mixout[tk] === 'function') {\n          obj[tk] = mixout[tk];\n        }\n        if (typeof mixout[tk] === 'object') {\n          Object.keys(mixout[tk]).forEach(sk => {\n            if (!obj[tk]) {\n              obj[tk] = {};\n            }\n            obj[tk][sk] = mixout[tk][sk];\n          });\n        }\n      });\n      if (plugin.hooks) {\n        const hooks = plugin.hooks();\n        Object.keys(hooks).forEach(hook => {\n          if (!_hooks[hook]) {\n            _hooks[hook] = [];\n          }\n          _hooks[hook].push(hooks[hook]);\n        });\n      }\n      if (plugin.provides) {\n        plugin.provides(providers);\n      }\n    });\n    return obj;\n  }\n  function chainHooks(hook, accumulator) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n    const hookFns = _hooks[hook] || [];\n    hookFns.forEach(hookFn => {\n      accumulator = hookFn.apply(null, [accumulator, ...args]); // eslint-disable-line no-useless-call\n    });\n    return accumulator;\n  }\n  function callHooks(hook) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    const hookFns = _hooks[hook] || [];\n    hookFns.forEach(hookFn => {\n      hookFn.apply(null, args);\n    });\n    return undefined;\n  }\n  function callProvided() {\n    const hook = arguments[0];\n    const args = Array.prototype.slice.call(arguments, 1);\n    return providers[hook] ? providers[hook].apply(null, args) : undefined;\n  }\n\n  function findIconDefinition(iconLookup) {\n    if (iconLookup.prefix === 'fa') {\n      iconLookup.prefix = 'fas';\n    }\n    let {\n      iconName\n    } = iconLookup;\n    const prefix = iconLookup.prefix || getDefaultUsablePrefix();\n    if (!iconName) return;\n    iconName = byAlias(prefix, iconName) || iconName;\n    return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n  }\n  const library = new Library();\n  const noAuto = () => {\n    config.autoReplaceSvg = false;\n    config.observeMutations = false;\n    callHooks('noAuto');\n  };\n  const dom = {\n    i2svg: function () {\n      let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (IS_DOM) {\n        callHooks('beforeI2svg', params);\n        callProvided('pseudoElements2svg', params);\n        return callProvided('i2svg', params);\n      } else {\n        return Promise.reject(new Error('Operation requires a DOM of some kind.'));\n      }\n    },\n    watch: function () {\n      let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const {\n        autoReplaceSvgRoot\n      } = params;\n      if (config.autoReplaceSvg === false) {\n        config.autoReplaceSvg = true;\n      }\n      config.observeMutations = true;\n      domready(() => {\n        autoReplace({\n          autoReplaceSvgRoot\n        });\n        callHooks('watch', params);\n      });\n    }\n  };\n  const parse = {\n    icon: icon => {\n      if (icon === null) {\n        return null;\n      }\n      if (typeof icon === 'object' && icon.prefix && icon.iconName) {\n        return {\n          prefix: icon.prefix,\n          iconName: byAlias(icon.prefix, icon.iconName) || icon.iconName\n        };\n      }\n      if (Array.isArray(icon) && icon.length === 2) {\n        const iconName = icon[1].indexOf('fa-') === 0 ? icon[1].slice(3) : icon[1];\n        const prefix = getCanonicalPrefix(icon[0]);\n        return {\n          prefix,\n          iconName: byAlias(prefix, iconName) || iconName\n        };\n      }\n      if (typeof icon === 'string' && (icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n        const canonicalIcon = getCanonicalIcon(icon.split(' '), {\n          skipLookups: true\n        });\n        return {\n          prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n          iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n        };\n      }\n      if (typeof icon === 'string') {\n        const prefix = getDefaultUsablePrefix();\n        return {\n          prefix,\n          iconName: byAlias(prefix, icon) || icon\n        };\n      }\n    }\n  };\n  const api = {\n    noAuto,\n    config,\n    dom,\n    parse,\n    library,\n    findIconDefinition,\n    toHtml\n  };\n  const autoReplace = function () {\n    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const {\n      autoReplaceSvgRoot = DOCUMENT\n    } = params;\n    if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n      node: autoReplaceSvgRoot\n    });\n  };\n  function bootstrap(plugins) {\n    if (IS_BROWSER) {\n      if (!WINDOW.FontAwesome) {\n        WINDOW.FontAwesome = api;\n      }\n      domready(() => {\n        autoReplace();\n        callHooks('bootstrap');\n      });\n    }\n    namespace.hooks = _objectSpread2(_objectSpread2({}, namespace.hooks), {}, {\n      addPack: (prefix, icons) => {\n        namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        build();\n        autoReplace();\n      },\n      addPacks: packs => {\n        packs.forEach(_ref => {\n          let [prefix, icons] = _ref;\n          namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        });\n        build();\n        autoReplace();\n      },\n      addShims: shims => {\n        namespace.shims.push(...shims);\n        build();\n        autoReplace();\n      }\n    });\n  }\n\n  function domVariants(val, abstractCreator) {\n    Object.defineProperty(val, 'abstract', {\n      get: abstractCreator\n    });\n    Object.defineProperty(val, 'html', {\n      get: function () {\n        return val.abstract.map(a => toHtml(a));\n      }\n    });\n    Object.defineProperty(val, 'node', {\n      get: function () {\n        if (!IS_DOM) return;\n        const container = DOCUMENT.createElement('div');\n        container.innerHTML = val.html;\n        return container.children;\n      }\n    });\n    return val;\n  }\n\n  function asIcon (_ref) {\n    let {\n      children,\n      main,\n      mask,\n      attributes,\n      styles,\n      transform\n    } = _ref;\n    if (transformIsMeaningful(transform) && main.found && !mask.found) {\n      const {\n        width,\n        height\n      } = main;\n      const offset = {\n        x: width / height / 2,\n        y: 0.5\n      };\n      attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n        'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n      }));\n    }\n    return [{\n      tag: 'svg',\n      attributes,\n      children\n    }];\n  }\n\n  function asSymbol (_ref) {\n    let {\n      prefix,\n      iconName,\n      children,\n      attributes,\n      symbol\n    } = _ref;\n    const id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n    return [{\n      tag: 'svg',\n      attributes: {\n        style: 'display: none;'\n      },\n      children: [{\n        tag: 'symbol',\n        attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n          id\n        }),\n        children\n      }]\n    }];\n  }\n\n  function makeInlineSvgAbstract(params) {\n    const {\n      icons: {\n        main,\n        mask\n      },\n      prefix,\n      iconName,\n      transform,\n      symbol,\n      title,\n      maskId,\n      titleId,\n      extra,\n      watchable = false\n    } = params;\n    const {\n      width,\n      height\n    } = mask.found ? mask : main;\n    const isUploadedIcon = Lt.includes(prefix);\n    const attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(c$$1 => extra.classes.indexOf(c$$1) === -1).filter(c$$1 => c$$1 !== '' || !!c$$1).concat(extra.classes).join(' ');\n    let content = {\n      children: [],\n      attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n        'data-prefix': prefix,\n        'data-icon': iconName,\n        'class': attrClass,\n        'role': extra.attributes.role || 'img',\n        'xmlns': 'http://www.w3.org/2000/svg',\n        'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n      })\n    };\n    const uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n      width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n    } : {};\n    if (watchable) {\n      content.attributes[DATA_FA_I2SVG] = '';\n    }\n    if (title) {\n      content.children.push({\n        tag: 'title',\n        attributes: {\n          id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n        },\n        children: [title]\n      });\n      delete content.attributes.title;\n    }\n    const args = _objectSpread2(_objectSpread2({}, content), {}, {\n      prefix,\n      iconName,\n      main,\n      mask,\n      maskId,\n      transform,\n      symbol,\n      styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n    });\n    const {\n      children,\n      attributes\n    } = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n      children: [],\n      attributes: {}\n    } : callProvided('generateAbstractIcon', args) || {\n      children: [],\n      attributes: {}\n    };\n    args.children = children;\n    args.attributes = attributes;\n    if (symbol) {\n      return asSymbol(args);\n    } else {\n      return asIcon(args);\n    }\n  }\n  function makeLayersTextAbstract(params) {\n    const {\n      content,\n      width,\n      height,\n      transform,\n      title,\n      extra,\n      watchable = false\n    } = params;\n    const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n    if (watchable) {\n      attributes[DATA_FA_I2SVG] = '';\n    }\n    const styles = _objectSpread2({}, extra.styles);\n    if (transformIsMeaningful(transform)) {\n      styles['transform'] = transformForCss({\n        transform,\n        startCentered: true,\n        width,\n        height\n      });\n      styles['-webkit-transform'] = styles['transform'];\n    }\n    const styleString = joinStyles(styles);\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n    const val = [];\n    val.push({\n      tag: 'span',\n      attributes,\n      children: [content]\n    });\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n    return val;\n  }\n  function makeLayersCounterAbstract(params) {\n    const {\n      content,\n      title,\n      extra\n    } = params;\n    const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n    const styleString = joinStyles(extra.styles);\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n    const val = [];\n    val.push({\n      tag: 'span',\n      attributes,\n      children: [content]\n    });\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n    return val;\n  }\n\n  const {\n    styles: styles$1\n  } = namespace;\n  function asFoundIcon(icon) {\n    const width = icon[0];\n    const height = icon[1];\n    const [vectorData] = icon.slice(4);\n    let element = null;\n    if (Array.isArray(vectorData)) {\n      element = {\n        tag: 'g',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n        },\n        children: [{\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n            fill: 'currentColor',\n            d: vectorData[0]\n          }\n        }, {\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n            fill: 'currentColor',\n            d: vectorData[1]\n          }\n        }]\n      };\n    } else {\n      element = {\n        tag: 'path',\n        attributes: {\n          fill: 'currentColor',\n          d: vectorData\n        }\n      };\n    }\n    return {\n      found: true,\n      width,\n      height,\n      icon: element\n    };\n  }\n  const missingIconResolutionMixin = {\n    found: false,\n    width: 512,\n    height: 512\n  };\n  function maybeNotifyMissing(iconName, prefix) {\n    if (!PRODUCTION && !config.showMissingIcons && iconName) {\n      console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n    }\n  }\n  function findIcon(iconName, prefix) {\n    let givenPrefix = prefix;\n    if (prefix === 'fa' && config.styleDefault !== null) {\n      prefix = getDefaultUsablePrefix();\n    }\n    return new Promise((resolve, reject) => {\n      if (givenPrefix === 'fa') {\n        const shim = byOldName(iconName) || {};\n        iconName = shim.iconName || iconName;\n        prefix = shim.prefix || prefix;\n      }\n      if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n        const icon = styles$1[prefix][iconName];\n        return resolve(asFoundIcon(icon));\n      }\n      maybeNotifyMissing(iconName, prefix);\n      resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n        icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n      }));\n    });\n  }\n\n  const noop$1 = () => {};\n  const p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n    mark: noop$1,\n    measure: noop$1\n  };\n  const preamble = \"FA \\\"6.7.2\\\"\";\n  const begin = name => {\n    p$2.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n    return () => end(name);\n  };\n  const end = name => {\n    p$2.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n    p$2.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n  };\n  var perf = {\n    begin,\n    end\n  };\n\n  const noop$2 = () => {};\n  function isWatched(node) {\n    const i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n    return typeof i2svg === 'string';\n  }\n  function hasPrefixAndIcon(node) {\n    const prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n    const icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n    return prefix && icon;\n  }\n  function hasBeenReplaced(node) {\n    return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n  }\n  function getMutator() {\n    if (config.autoReplaceSvg === true) {\n      return mutators.replace;\n    }\n    const mutator = mutators[config.autoReplaceSvg];\n    return mutator || mutators.replace;\n  }\n  function createElementNS(tag) {\n    return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n  }\n  function createElement(tag) {\n    return DOCUMENT.createElement(tag);\n  }\n  function convertSVG(abstractObj) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const {\n      ceFn = abstractObj.tag === 'svg' ? createElementNS : createElement\n    } = params;\n    if (typeof abstractObj === 'string') {\n      return DOCUMENT.createTextNode(abstractObj);\n    }\n    const tag = ceFn(abstractObj.tag);\n    Object.keys(abstractObj.attributes || []).forEach(function (key) {\n      tag.setAttribute(key, abstractObj.attributes[key]);\n    });\n    const children = abstractObj.children || [];\n    children.forEach(function (child) {\n      tag.appendChild(convertSVG(child, {\n        ceFn\n      }));\n    });\n    return tag;\n  }\n  function nodeAsComment(node) {\n    let comment = \" \".concat(node.outerHTML, \" \");\n    /* BEGIN.ATTRIBUTION */\n    comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n    /* END.ATTRIBUTION */\n    return comment;\n  }\n  const mutators = {\n    replace: function (mutation) {\n      const node = mutation[0];\n      if (node.parentNode) {\n        mutation[1].forEach(abstract => {\n          node.parentNode.insertBefore(convertSVG(abstract), node);\n        });\n        if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n          let comment = DOCUMENT.createComment(nodeAsComment(node));\n          node.parentNode.replaceChild(comment, node);\n        } else {\n          node.remove();\n        }\n      }\n    },\n    nest: function (mutation) {\n      const node = mutation[0];\n      const abstract = mutation[1];\n\n      // If we already have a replaced node we do not want to continue nesting within it.\n      // Short-circuit to the standard replacement\n      if (~classArray(node).indexOf(config.replacementClass)) {\n        return mutators.replace(mutation);\n      }\n      const forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n      delete abstract[0].attributes.id;\n      if (abstract[0].attributes.class) {\n        const splitClasses = abstract[0].attributes.class.split(' ').reduce((acc, cls) => {\n          if (cls === config.replacementClass || cls.match(forSvg)) {\n            acc.toSvg.push(cls);\n          } else {\n            acc.toNode.push(cls);\n          }\n          return acc;\n        }, {\n          toNode: [],\n          toSvg: []\n        });\n        abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n        if (splitClasses.toNode.length === 0) {\n          node.removeAttribute('class');\n        } else {\n          node.setAttribute('class', splitClasses.toNode.join(' '));\n        }\n      }\n      const newInnerHTML = abstract.map(a => toHtml(a)).join('\\n');\n      node.setAttribute(DATA_FA_I2SVG, '');\n      node.innerHTML = newInnerHTML;\n    }\n  };\n  function performOperationSync(op) {\n    op();\n  }\n  function perform(mutations, callback) {\n    const callbackFunction = typeof callback === 'function' ? callback : noop$2;\n    if (mutations.length === 0) {\n      callbackFunction();\n    } else {\n      let frame = performOperationSync;\n      if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n        frame = WINDOW.requestAnimationFrame || performOperationSync;\n      }\n      frame(() => {\n        const mutator = getMutator();\n        const mark = perf.begin('mutate');\n        mutations.map(mutator);\n        mark();\n        callbackFunction();\n      });\n    }\n  }\n  let disabled = false;\n  function disableObservation() {\n    disabled = true;\n  }\n  function enableObservation() {\n    disabled = false;\n  }\n  let mo = null;\n  function observe(options) {\n    if (!MUTATION_OBSERVER) {\n      return;\n    }\n    if (!config.observeMutations) {\n      return;\n    }\n    const {\n      treeCallback = noop$2,\n      nodeCallback = noop$2,\n      pseudoElementsCallback = noop$2,\n      observeMutationsRoot = DOCUMENT\n    } = options;\n    mo = new MUTATION_OBSERVER(objects => {\n      if (disabled) return;\n      const defaultPrefix = getDefaultUsablePrefix();\n      toArray(objects).forEach(mutationRecord => {\n        if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n          if (config.searchPseudoElements) {\n            pseudoElementsCallback(mutationRecord.target);\n          }\n          treeCallback(mutationRecord.target);\n        }\n        if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target.parentNode);\n        }\n        if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n          if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n            const {\n              prefix,\n              iconName\n            } = getCanonicalIcon(classArray(mutationRecord.target));\n            mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n            if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n          } else if (hasBeenReplaced(mutationRecord.target)) {\n            nodeCallback(mutationRecord.target);\n          }\n        }\n      });\n    });\n    if (!IS_DOM) return;\n    mo.observe(observeMutationsRoot, {\n      childList: true,\n      attributes: true,\n      characterData: true,\n      subtree: true\n    });\n  }\n  function disconnect() {\n    if (!mo) return;\n    mo.disconnect();\n  }\n\n  function styleParser (node) {\n    const style = node.getAttribute('style');\n    let val = [];\n    if (style) {\n      val = style.split(';').reduce((acc, style) => {\n        const styles = style.split(':');\n        const prop = styles[0];\n        const value = styles.slice(1);\n        if (prop && value.length > 0) {\n          acc[prop] = value.join(':').trim();\n        }\n        return acc;\n      }, {});\n    }\n    return val;\n  }\n\n  function classParser (node) {\n    const existingPrefix = node.getAttribute('data-prefix');\n    const existingIconName = node.getAttribute('data-icon');\n    const innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n    let val = getCanonicalIcon(classArray(node));\n    if (!val.prefix) {\n      val.prefix = getDefaultUsablePrefix();\n    }\n    if (existingPrefix && existingIconName) {\n      val.prefix = existingPrefix;\n      val.iconName = existingIconName;\n    }\n    if (val.iconName && val.prefix) {\n      return val;\n    }\n    if (val.prefix && innerText.length > 0) {\n      val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n    }\n    if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n      val.iconName = node.firstChild.data;\n    }\n    return val;\n  }\n\n  function attributesParser (node) {\n    const extraAttributes = toArray(node.attributes).reduce((acc, attr) => {\n      if (acc.name !== 'class' && acc.name !== 'style') {\n        acc[attr.name] = attr.value;\n      }\n      return acc;\n    }, {});\n    const title = node.getAttribute('title');\n    const titleId = node.getAttribute('data-fa-title-id');\n    if (config.autoA11y) {\n      if (title) {\n        extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        extraAttributes['aria-hidden'] = 'true';\n        extraAttributes['focusable'] = 'false';\n      }\n    }\n    return extraAttributes;\n  }\n\n  function blankMeta() {\n    return {\n      iconName: null,\n      title: null,\n      titleId: null,\n      prefix: null,\n      transform: meaninglessTransform,\n      symbol: false,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      extra: {\n        classes: [],\n        styles: {},\n        attributes: {}\n      }\n    };\n  }\n  function parseMeta(node) {\n    let parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      styleParser: true\n    };\n    const {\n      iconName,\n      prefix,\n      rest: extraClasses\n    } = classParser(node);\n    const extraAttributes = attributesParser(node);\n    const pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n    let extraStyles = parser.styleParser ? styleParser(node) : [];\n    return _objectSpread2({\n      iconName,\n      title: node.getAttribute('title'),\n      titleId: node.getAttribute('data-fa-title-id'),\n      prefix,\n      transform: meaninglessTransform,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      symbol: false,\n      extra: {\n        classes: extraClasses,\n        styles: extraStyles,\n        attributes: extraAttributes\n      }\n    }, pluginMeta);\n  }\n\n  const {\n    styles: styles$2\n  } = namespace;\n  function generateMutation(node) {\n    const nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n      styleParser: false\n    }) : parseMeta(node);\n    if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n      return callProvided('generateLayersText', node, nodeMeta);\n    } else {\n      return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n    }\n  }\n  function getKnownPrefixes() {\n    return [...Ft, ...Ia];\n  }\n  function onTree(root) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    if (!IS_DOM) return Promise.resolve();\n    const htmlClassList = DOCUMENT.documentElement.classList;\n    const hclAdd = suffix => htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    const hclRemove = suffix => htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    const prefixes = config.autoFetchSvg ? getKnownPrefixes() : P.concat(Object.keys(styles$2));\n    if (!prefixes.includes('fa')) {\n      prefixes.push('fa');\n    }\n    const prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(p$$1 => \".\".concat(p$$1, \":not([\").concat(DATA_FA_I2SVG, \"])\"))).join(', ');\n    if (prefixesDomQuery.length === 0) {\n      return Promise.resolve();\n    }\n    let candidates = [];\n    try {\n      candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n    } catch (e$$1) {\n      // noop\n    }\n    if (candidates.length > 0) {\n      hclAdd('pending');\n      hclRemove('complete');\n    } else {\n      return Promise.resolve();\n    }\n    const mark = perf.begin('onTree');\n    const mutations = candidates.reduce((acc, node) => {\n      try {\n        const mutation = generateMutation(node);\n        if (mutation) {\n          acc.push(mutation);\n        }\n      } catch (e$$1) {\n        if (!PRODUCTION) {\n          if (e$$1.name === 'MissingIcon') {\n            console.error(e$$1);\n          }\n        }\n      }\n      return acc;\n    }, []);\n    return new Promise((resolve, reject) => {\n      Promise.all(mutations).then(resolvedMutations => {\n        perform(resolvedMutations, () => {\n          hclAdd('active');\n          hclAdd('complete');\n          hclRemove('pending');\n          if (typeof callback === 'function') callback();\n          mark();\n          resolve();\n        });\n      }).catch(e$$1 => {\n        mark();\n        reject(e$$1);\n      });\n    });\n  }\n  function onNode(node) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    generateMutation(node).then(mutation => {\n      if (mutation) {\n        perform([mutation], callback);\n      }\n    });\n  }\n  function resolveIcons(next) {\n    return function (maybeIconDefinition) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n      let {\n        mask\n      } = params;\n      if (mask) {\n        mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n      }\n      return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n        mask\n      }));\n    };\n  }\n  const render = function (iconDefinition) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const {\n      transform = meaninglessTransform,\n      symbol = false,\n      mask = null,\n      maskId = null,\n      title = null,\n      titleId = null,\n      classes = [],\n      attributes = {},\n      styles = {}\n    } = params;\n    if (!iconDefinition) return;\n    const {\n      prefix,\n      iconName,\n      icon\n    } = iconDefinition;\n    return domVariants(_objectSpread2({\n      type: 'icon'\n    }, iconDefinition), () => {\n      callHooks('beforeDOMElementCreation', {\n        iconDefinition,\n        params\n      });\n      if (config.autoA11y) {\n        if (title) {\n          attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n        } else {\n          attributes['aria-hidden'] = 'true';\n          attributes['focusable'] = 'false';\n        }\n      }\n      return makeInlineSvgAbstract({\n        icons: {\n          main: asFoundIcon(icon),\n          mask: mask ? asFoundIcon(mask.icon) : {\n            found: false,\n            width: null,\n            height: null,\n            icon: {}\n          }\n        },\n        prefix,\n        iconName,\n        transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n        symbol,\n        title,\n        maskId,\n        titleId,\n        extra: {\n          attributes,\n          styles,\n          classes\n        }\n      });\n    });\n  };\n  var ReplaceElements = {\n    mixout() {\n      return {\n        icon: resolveIcons(render)\n      };\n    },\n    hooks() {\n      return {\n        mutationObserverCallbacks(accumulator) {\n          accumulator.treeCallback = onTree;\n          accumulator.nodeCallback = onNode;\n          return accumulator;\n        }\n      };\n    },\n    provides(providers$$1) {\n      providers$$1.i2svg = function (params) {\n        const {\n          node = DOCUMENT,\n          callback = () => {}\n        } = params;\n        return onTree(node, callback);\n      };\n      providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n        const {\n          iconName,\n          title,\n          titleId,\n          prefix,\n          transform,\n          symbol,\n          mask,\n          maskId,\n          extra\n        } = nodeMeta;\n        return new Promise((resolve, reject) => {\n          Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n            found: false,\n            width: 512,\n            height: 512,\n            icon: {}\n          })]).then(_ref => {\n            let [main, mask] = _ref;\n            resolve([node, makeInlineSvgAbstract({\n              icons: {\n                main,\n                mask\n              },\n              prefix,\n              iconName,\n              transform,\n              symbol,\n              maskId,\n              title,\n              titleId,\n              extra,\n              watchable: true\n            })]);\n          }).catch(reject);\n        });\n      };\n      providers$$1.generateAbstractIcon = function (_ref2) {\n        let {\n          children,\n          attributes,\n          main,\n          transform,\n          styles\n        } = _ref2;\n        const styleString = joinStyles(styles);\n        if (styleString.length > 0) {\n          attributes['style'] = styleString;\n        }\n        let nextChild;\n        if (transformIsMeaningful(transform)) {\n          nextChild = callProvided('generateAbstractTransformGrouping', {\n            main,\n            transform,\n            containerWidth: main.width,\n            iconWidth: main.width\n          });\n        }\n        children.push(nextChild || main.icon);\n        return {\n          children,\n          attributes\n        };\n      };\n    }\n  };\n\n  var Layers = {\n    mixout() {\n      return {\n        layer(assembler) {\n          let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          const {\n            classes = []\n          } = params;\n          return domVariants({\n            type: 'layer'\n          }, () => {\n            callHooks('beforeDOMElementCreation', {\n              assembler,\n              params\n            });\n            let children = [];\n            assembler(args => {\n              Array.isArray(args) ? args.map(a => {\n                children = children.concat(a.abstract);\n              }) : children = children.concat(args.abstract);\n            });\n            return [{\n              tag: 'span',\n              attributes: {\n                class: [\"\".concat(config.cssPrefix, \"-layers\"), ...classes].join(' ')\n              },\n              children\n            }];\n          });\n        }\n      };\n    }\n  };\n\n  var LayersCounter = {\n    mixout() {\n      return {\n        counter(content) {\n          let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          const {\n            title = null,\n            classes = [],\n            attributes = {},\n            styles = {}\n          } = params;\n          return domVariants({\n            type: 'counter',\n            content\n          }, () => {\n            callHooks('beforeDOMElementCreation', {\n              content,\n              params\n            });\n            return makeLayersCounterAbstract({\n              content: content.toString(),\n              title,\n              extra: {\n                attributes,\n                styles,\n                classes: [\"\".concat(config.cssPrefix, \"-layers-counter\"), ...classes]\n              }\n            });\n          });\n        }\n      };\n    }\n  };\n\n  var LayersText = {\n    mixout() {\n      return {\n        text(content) {\n          let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          const {\n            transform = meaninglessTransform,\n            title = null,\n            classes = [],\n            attributes = {},\n            styles = {}\n          } = params;\n          return domVariants({\n            type: 'text',\n            content\n          }, () => {\n            callHooks('beforeDOMElementCreation', {\n              content,\n              params\n            });\n            return makeLayersTextAbstract({\n              content,\n              transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n              title,\n              extra: {\n                attributes,\n                styles,\n                classes: [\"\".concat(config.cssPrefix, \"-layers-text\"), ...classes]\n              }\n            });\n          });\n        }\n      };\n    },\n    provides(providers$$1) {\n      providers$$1.generateLayersText = function (node, nodeMeta) {\n        const {\n          title,\n          transform,\n          extra\n        } = nodeMeta;\n        let width = null;\n        let height = null;\n        if (IS_IE) {\n          const computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n          const boundingClientRect = node.getBoundingClientRect();\n          width = boundingClientRect.width / computedFontSize;\n          height = boundingClientRect.height / computedFontSize;\n        }\n        if (config.autoA11y && !title) {\n          extra.attributes['aria-hidden'] = 'true';\n        }\n        return Promise.resolve([node, makeLayersTextAbstract({\n          content: node.innerHTML,\n          width,\n          height,\n          transform,\n          title,\n          extra,\n          watchable: true\n        })]);\n      };\n    }\n  };\n\n  const CLEAN_CONTENT_PATTERN = new RegExp('\\u{22}', 'ug');\n  const SECONDARY_UNICODE_RANGE = [1105920, 1112319];\n  const _FONT_FAMILY_WEIGHT_TO_PREFIX = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n    FontAwesome: {\n      normal: 'fas',\n      400: 'fas'\n    }\n  }), lt), wa), Yt);\n  const FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, key) => {\n    acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key];\n    return acc;\n  }, {});\n  const FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, fontFamily) => {\n    const weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily];\n    acc[fontFamily] = weights[900] || [...Object.entries(weights)][0][1];\n    return acc;\n  }, {});\n  function hexValueFromContent(content) {\n    const cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n    const codePoint = codePointAt(cleaned, 0);\n    const isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n    const isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n    return {\n      value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n      isSecondary: isPrependTen || isDoubled\n    };\n  }\n  function getPrefix(fontFamily, fontWeight) {\n    const fontFamilySanitized = fontFamily.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n    const fontWeightInteger = parseInt(fontWeight);\n    const fontWeightSanitized = isNaN(fontWeightInteger) ? 'normal' : fontWeightInteger;\n    return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized];\n  }\n  function replaceForPosition(node, position) {\n    const pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n    return new Promise((resolve, reject) => {\n      if (node.getAttribute(pendingAttribute) !== null) {\n        // This node is already being processed\n        return resolve();\n      }\n      const children = toArray(node.children);\n      const alreadyProcessedPseudoElement = children.filter(c$$1 => c$$1.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position)[0];\n      const styles = WINDOW.getComputedStyle(node, position);\n      const fontFamily = styles.getPropertyValue('font-family');\n      const fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN);\n      const fontWeight = styles.getPropertyValue('font-weight');\n      const content = styles.getPropertyValue('content');\n      if (alreadyProcessedPseudoElement && !fontFamilyMatch) {\n        // If we've already processed it but the current computed style does not result in a font-family,\n        // that probably means that a class name that was previously present to make the icon has been\n        // removed. So we now should delete the icon.\n        node.removeChild(alreadyProcessedPseudoElement);\n        return resolve();\n      } else if (fontFamilyMatch && content !== 'none' && content !== '') {\n        const content = styles.getPropertyValue('content');\n        let prefix = getPrefix(fontFamily, fontWeight);\n        const {\n          value: hexValue,\n          isSecondary\n        } = hexValueFromContent(content);\n        const isV4 = fontFamilyMatch[0].startsWith('FontAwesome');\n        let iconName = byUnicode(prefix, hexValue);\n        let iconIdentifier = iconName;\n        if (isV4) {\n          const iconName4 = byOldUnicode(hexValue);\n          if (iconName4.iconName && iconName4.prefix) {\n            iconName = iconName4.iconName;\n            prefix = iconName4.prefix;\n          }\n        }\n\n        // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n        // already done so with the same prefix and iconName\n        if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n          node.setAttribute(pendingAttribute, iconIdentifier);\n          if (alreadyProcessedPseudoElement) {\n            // Delete the old one, since we're replacing it with a new one\n            node.removeChild(alreadyProcessedPseudoElement);\n          }\n          const meta = blankMeta();\n          const {\n            extra\n          } = meta;\n          extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n          findIcon(iconName, prefix).then(main => {\n            const abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n              icons: {\n                main,\n                mask: emptyCanonicalIcon()\n              },\n              prefix,\n              iconName: iconIdentifier,\n              extra,\n              watchable: true\n            }));\n            const element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n            if (position === '::before') {\n              node.insertBefore(element, node.firstChild);\n            } else {\n              node.appendChild(element);\n            }\n            element.outerHTML = abstract.map(a$$1 => toHtml(a$$1)).join('\\n');\n            node.removeAttribute(pendingAttribute);\n            resolve();\n          }).catch(reject);\n        } else {\n          resolve();\n        }\n      } else {\n        resolve();\n      }\n    });\n  }\n  function replace(node) {\n    return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n  }\n  function processable(node) {\n    return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n  }\n  function searchPseudoElements(root) {\n    if (!IS_DOM) return;\n    return new Promise((resolve, reject) => {\n      const operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n      const end = perf.begin('searchPseudoElements');\n      disableObservation();\n      Promise.all(operations).then(() => {\n        end();\n        enableObservation();\n        resolve();\n      }).catch(() => {\n        end();\n        enableObservation();\n        reject();\n      });\n    });\n  }\n  var PseudoElements = {\n    hooks() {\n      return {\n        mutationObserverCallbacks(accumulator) {\n          accumulator.pseudoElementsCallback = searchPseudoElements;\n          return accumulator;\n        }\n      };\n    },\n    provides(providers) {\n      providers.pseudoElements2svg = function (params) {\n        const {\n          node = DOCUMENT\n        } = params;\n        if (config.searchPseudoElements) {\n          searchPseudoElements(node);\n        }\n      };\n    }\n  };\n\n  let _unwatched = false;\n  var MutationObserver$1 = {\n    mixout() {\n      return {\n        dom: {\n          unwatch() {\n            disableObservation();\n            _unwatched = true;\n          }\n        }\n      };\n    },\n    hooks() {\n      return {\n        bootstrap() {\n          observe(chainHooks('mutationObserverCallbacks', {}));\n        },\n        noAuto() {\n          disconnect();\n        },\n        watch(params) {\n          const {\n            observeMutationsRoot\n          } = params;\n          if (_unwatched) {\n            enableObservation();\n          } else {\n            observe(chainHooks('mutationObserverCallbacks', {\n              observeMutationsRoot\n            }));\n          }\n        }\n      };\n    }\n  };\n\n  const parseTransformString = transformString => {\n    let transform = {\n      size: 16,\n      x: 0,\n      y: 0,\n      flipX: false,\n      flipY: false,\n      rotate: 0\n    };\n    return transformString.toLowerCase().split(' ').reduce((acc, n) => {\n      const parts = n.toLowerCase().split('-');\n      const first = parts[0];\n      let rest = parts.slice(1).join('-');\n      if (first && rest === 'h') {\n        acc.flipX = true;\n        return acc;\n      }\n      if (first && rest === 'v') {\n        acc.flipY = true;\n        return acc;\n      }\n      rest = parseFloat(rest);\n      if (isNaN(rest)) {\n        return acc;\n      }\n      switch (first) {\n        case 'grow':\n          acc.size = acc.size + rest;\n          break;\n        case 'shrink':\n          acc.size = acc.size - rest;\n          break;\n        case 'left':\n          acc.x = acc.x - rest;\n          break;\n        case 'right':\n          acc.x = acc.x + rest;\n          break;\n        case 'up':\n          acc.y = acc.y - rest;\n          break;\n        case 'down':\n          acc.y = acc.y + rest;\n          break;\n        case 'rotate':\n          acc.rotate = acc.rotate + rest;\n          break;\n      }\n      return acc;\n    }, transform);\n  };\n  var PowerTransforms = {\n    mixout() {\n      return {\n        parse: {\n          transform: transformString => {\n            return parseTransformString(transformString);\n          }\n        }\n      };\n    },\n    hooks() {\n      return {\n        parseNodeAttributes(accumulator, node) {\n          const transformString = node.getAttribute('data-fa-transform');\n          if (transformString) {\n            accumulator.transform = parseTransformString(transformString);\n          }\n          return accumulator;\n        }\n      };\n    },\n    provides(providers) {\n      providers.generateAbstractTransformGrouping = function (_ref) {\n        let {\n          main,\n          transform,\n          containerWidth,\n          iconWidth\n        } = _ref;\n        const outer = {\n          transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n        };\n        const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n        const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n        const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n        const inner = {\n          transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n        };\n        const path = {\n          transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n        };\n        const operations = {\n          outer,\n          inner,\n          path\n        };\n        return {\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.outer),\n          children: [{\n            tag: 'g',\n            attributes: _objectSpread2({}, operations.inner),\n            children: [{\n              tag: main.icon.tag,\n              children: main.icon.children,\n              attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n            }]\n          }]\n        };\n      };\n    }\n  };\n\n  const ALL_SPACE = {\n    x: 0,\n    y: 0,\n    width: '100%',\n    height: '100%'\n  };\n  function fillBlack(abstract) {\n    let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    if (abstract.attributes && (abstract.attributes.fill || force)) {\n      abstract.attributes.fill = 'black';\n    }\n    return abstract;\n  }\n  function deGroup(abstract) {\n    if (abstract.tag === 'g') {\n      return abstract.children;\n    } else {\n      return [abstract];\n    }\n  }\n  var Masks = {\n    hooks() {\n      return {\n        parseNodeAttributes(accumulator, node) {\n          const maskData = node.getAttribute('data-fa-mask');\n          const mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(i => i.trim()));\n          if (!mask.prefix) {\n            mask.prefix = getDefaultUsablePrefix();\n          }\n          accumulator.mask = mask;\n          accumulator.maskId = node.getAttribute('data-fa-mask-id');\n          return accumulator;\n        }\n      };\n    },\n    provides(providers) {\n      providers.generateAbstractMask = function (_ref) {\n        let {\n          children,\n          attributes,\n          main,\n          mask,\n          maskId: explicitMaskId,\n          transform\n        } = _ref;\n        const {\n          width: mainWidth,\n          icon: mainPath\n        } = main;\n        const {\n          width: maskWidth,\n          icon: maskPath\n        } = mask;\n        const trans = transformForSvg({\n          transform,\n          containerWidth: maskWidth,\n          iconWidth: mainWidth\n        });\n        const maskRect = {\n          tag: 'rect',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            fill: 'white'\n          })\n        };\n        const maskInnerGroupChildrenMixin = mainPath.children ? {\n          children: mainPath.children.map(fillBlack)\n        } : {};\n        const maskInnerGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.inner),\n          children: [fillBlack(_objectSpread2({\n            tag: mainPath.tag,\n            attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n          }, maskInnerGroupChildrenMixin))]\n        };\n        const maskOuterGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.outer),\n          children: [maskInnerGroup]\n        };\n        const maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n        const clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n        const maskTag = {\n          tag: 'mask',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            id: maskId,\n            maskUnits: 'userSpaceOnUse',\n            maskContentUnits: 'userSpaceOnUse'\n          }),\n          children: [maskRect, maskOuterGroup]\n        };\n        const defs = {\n          tag: 'defs',\n          children: [{\n            tag: 'clipPath',\n            attributes: {\n              id: clipId\n            },\n            children: deGroup(maskPath)\n          }, maskTag]\n        };\n        children.push(defs, {\n          tag: 'rect',\n          attributes: _objectSpread2({\n            fill: 'currentColor',\n            'clip-path': \"url(#\".concat(clipId, \")\"),\n            mask: \"url(#\".concat(maskId, \")\")\n          }, ALL_SPACE)\n        });\n        return {\n          children,\n          attributes\n        };\n      };\n    }\n  };\n\n  var MissingIconIndicator = {\n    provides(providers) {\n      let reduceMotion = false;\n      if (WINDOW.matchMedia) {\n        reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      }\n      providers.missingIconAbstract = function () {\n        const gChildren = [];\n        const FILL = {\n          fill: 'currentColor'\n        };\n        const ANIMATION_BASE = {\n          attributeType: 'XML',\n          repeatCount: 'indefinite',\n          dur: '2s'\n        };\n\n        // Ring\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n          })\n        });\n        const OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n          attributeName: 'opacity'\n        });\n        const dot = {\n          tag: 'circle',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            cx: '256',\n            cy: '364',\n            r: '28'\n          }),\n          children: []\n        };\n        if (!reduceMotion) {\n          dot.children.push({\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n              attributeName: 'r',\n              values: '28;14;28;28;14;28;'\n            })\n          }, {\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;1;1;0;1;'\n            })\n          });\n        }\n        gChildren.push(dot);\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '1',\n            d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n          }),\n          children: reduceMotion ? [] : [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;0;0;0;1;'\n            })\n          }]\n        });\n        if (!reduceMotion) {\n          // Exclamation\n          gChildren.push({\n            tag: 'path',\n            attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n              opacity: '0',\n              d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n            }),\n            children: [{\n              tag: 'animate',\n              attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n                values: '0;0;1;1;0;0;'\n              })\n            }]\n          });\n        }\n        return {\n          tag: 'g',\n          attributes: {\n            'class': 'missing'\n          },\n          children: gChildren\n        };\n      };\n    }\n  };\n\n  var SvgSymbols = {\n    hooks() {\n      return {\n        parseNodeAttributes(accumulator, node) {\n          const symbolData = node.getAttribute('data-fa-symbol');\n          const symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n          accumulator['symbol'] = symbol;\n          return accumulator;\n        }\n      };\n    }\n  };\n\n  var plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\n  registerPlugins(plugins, {\n    mixoutsTo: api\n  });\n  bunker(bootstrap);\n\n}());\n","// Spectrum Colorpicker v1.8.1\n// https://github.com/bgrins/spectrum\n// Author: Brian Grinstead\n// License: MIT\n\n(function (factory) {\n    \"use strict\";\n\n    if (typeof define === 'function' && define.amd) { // AMD\n        define(['jquery'], factory);\n    }\n    else if (typeof exports == \"object\" && typeof module == \"object\") { // CommonJS\n        module.exports = factory(require('jquery'));\n    }\n    else { // Browser\n        factory(jQuery);\n    }\n})(function($, undefined) {\n    \"use strict\";\n\n    var defaultOpts = {\n\n        // Callbacks\n        beforeShow: noop,\n        move: noop,\n        change: noop,\n        show: noop,\n        hide: noop,\n\n        // Options\n        color: false,\n        flat: false,\n        showInput: false,\n        allowEmpty: false,\n        showButtons: true,\n        clickoutFiresChange: true,\n        showInitial: false,\n        showPalette: false,\n        showPaletteOnly: false,\n        hideAfterPaletteSelect: false,\n        togglePaletteOnly: false,\n        showSelectionPalette: true,\n        localStorageKey: false,\n        appendTo: \"body\",\n        maxSelectionSize: 7,\n        cancelText: \"cancel\",\n        chooseText: \"choose\",\n        togglePaletteMoreText: \"more\",\n        togglePaletteLessText: \"less\",\n        clearText: \"Clear Color Selection\",\n        noColorSelectedText: \"No Color Selected\",\n        preferredFormat: false,\n        className: \"\", // Deprecated - use containerClassName and replacerClassName instead.\n        containerClassName: \"\",\n        replacerClassName: \"\",\n        showAlpha: false,\n        theme: \"sp-light\",\n        palette: [[\"#ffffff\", \"#000000\", \"#ff0000\", \"#ff8000\", \"#ffff00\", \"#008000\", \"#0000ff\", \"#4b0082\", \"#9400d3\"]],\n        selectionPalette: [],\n        disabled: false,\n        offset: null\n    },\n    spectrums = [],\n    IE = !!/msie/i.exec( window.navigator.userAgent ),\n    rgbaSupport = (function() {\n        function contains( str, substr ) {\n            return !!~('' + str).indexOf(substr);\n        }\n\n        var elem = document.createElement('div');\n        var style = elem.style;\n        style.cssText = 'background-color:rgba(0,0,0,.5)';\n        return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');\n    })(),\n    replaceInput = [\n        \"<div class='sp-replacer'>\",\n            \"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\n            \"<div class='sp-dd'>&#9660;</div>\",\n        \"</div>\"\n    ].join(''),\n    markup = (function () {\n\n        // IE does not support gradients with multiple stops, so we need to simulate\n        //  that for the rainbow slider with 8 divs that each have a single gradient\n        var gradientFix = \"\";\n        if (IE) {\n            for (var i = 1; i <= 6; i++) {\n                gradientFix += \"<div class='sp-\" + i + \"'></div>\";\n            }\n        }\n\n        return [\n            \"<div class='sp-container sp-hidden'>\",\n                \"<div class='sp-palette-container'>\",\n                    \"<div class='sp-palette sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-palette-button-container sp-cf'>\",\n                        \"<button type='button' class='sp-palette-toggle'></button>\",\n                    \"</div>\",\n                \"</div>\",\n                \"<div class='sp-picker-container'>\",\n                    \"<div class='sp-top sp-cf'>\",\n                        \"<div class='sp-fill'></div>\",\n                        \"<div class='sp-top-inner'>\",\n                            \"<div class='sp-color'>\",\n                                \"<div class='sp-sat'>\",\n                                    \"<div class='sp-val'>\",\n                                        \"<div class='sp-dragger'></div>\",\n                                    \"</div>\",\n                                \"</div>\",\n                            \"</div>\",\n                            \"<div class='sp-clear sp-clear-display'>\",\n                            \"</div>\",\n                            \"<div class='sp-hue'>\",\n                                \"<div class='sp-slider'></div>\",\n                                gradientFix,\n                            \"</div>\",\n                        \"</div>\",\n                        \"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\n                    \"</div>\",\n                    \"<div class='sp-input-container sp-cf'>\",\n                        \"<input class='sp-input' type='text' spellcheck='false'  />\",\n                    \"</div>\",\n                    \"<div class='sp-initial sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-button-container sp-cf'>\",\n                        \"<a class='sp-cancel' href='#'></a>\",\n                        \"<button type='button' class='sp-choose'></button>\",\n                    \"</div>\",\n                \"</div>\",\n            \"</div>\"\n        ].join(\"\");\n    })();\n\n    function paletteTemplate (p, color, className, opts) {\n        var html = [];\n        for (var i = 0; i < p.length; i++) {\n            var current = p[i];\n            if(current) {\n                var tiny = tinycolor(current);\n                var c = tiny.toHsl().l < 0.5 ? \"sp-thumb-el sp-thumb-dark\" : \"sp-thumb-el sp-thumb-light\";\n                c += (tinycolor.equals(color, current)) ? \" sp-thumb-active\" : \"\";\n                var formattedString = tiny.toString(opts.preferredFormat || \"rgb\");\n                var swatchStyle = rgbaSupport ? (\"background-color:\" + tiny.toRgbString()) : \"filter:\" + tiny.toFilter();\n                html.push('<span title=\"' + formattedString + '\" data-color=\"' + tiny.toRgbString() + '\" class=\"' + c + '\"><span class=\"sp-thumb-inner\" style=\"' + swatchStyle + ';\"></span></span>');\n            } else {\n                var cls = 'sp-clear-display';\n                html.push($('<div />')\n                    .append($('<span data-color=\"\" style=\"background-color:transparent;\" class=\"' + cls + '\"></span>')\n                        .attr('title', opts.noColorSelectedText)\n                    )\n                    .html()\n                );\n            }\n        }\n        return \"<div class='sp-cf \" + className + \"'>\" + html.join('') + \"</div>\";\n    }\n\n    function hideAll() {\n        for (var i = 0; i < spectrums.length; i++) {\n            if (spectrums[i]) {\n                spectrums[i].hide();\n            }\n        }\n    }\n\n    function instanceOptions(o, callbackContext) {\n        var opts = $.extend({}, defaultOpts, o);\n        opts.callbacks = {\n            'move': bind(opts.move, callbackContext),\n            'change': bind(opts.change, callbackContext),\n            'show': bind(opts.show, callbackContext),\n            'hide': bind(opts.hide, callbackContext),\n            'beforeShow': bind(opts.beforeShow, callbackContext)\n        };\n\n        return opts;\n    }\n\n    function spectrum(element, o) {\n\n        var opts = instanceOptions(o, element),\n            flat = opts.flat,\n            showSelectionPalette = opts.showSelectionPalette,\n            localStorageKey = opts.localStorageKey,\n            theme = opts.theme,\n            callbacks = opts.callbacks,\n            resize = throttle(reflow, 10),\n            visible = false,\n            isDragging = false,\n            dragWidth = 0,\n            dragHeight = 0,\n            dragHelperHeight = 0,\n            slideHeight = 0,\n            slideWidth = 0,\n            alphaWidth = 0,\n            alphaSlideHelperWidth = 0,\n            slideHelperHeight = 0,\n            currentHue = 0,\n            currentSaturation = 0,\n            currentValue = 0,\n            currentAlpha = 1,\n            palette = [],\n            paletteArray = [],\n            paletteLookup = {},\n            selectionPalette = opts.selectionPalette.slice(0),\n            maxSelectionSize = opts.maxSelectionSize,\n            draggingClass = \"sp-dragging\",\n            shiftMovementDirection = null;\n\n        var doc = element.ownerDocument,\n            body = doc.body,\n            boundElement = $(element),\n            disabled = false,\n            container = $(markup, doc).addClass(theme),\n            pickerContainer = container.find(\".sp-picker-container\"),\n            dragger = container.find(\".sp-color\"),\n            dragHelper = container.find(\".sp-dragger\"),\n            slider = container.find(\".sp-hue\"),\n            slideHelper = container.find(\".sp-slider\"),\n            alphaSliderInner = container.find(\".sp-alpha-inner\"),\n            alphaSlider = container.find(\".sp-alpha\"),\n            alphaSlideHelper = container.find(\".sp-alpha-handle\"),\n            textInput = container.find(\".sp-input\"),\n            paletteContainer = container.find(\".sp-palette\"),\n            initialColorContainer = container.find(\".sp-initial\"),\n            cancelButton = container.find(\".sp-cancel\"),\n            clearButton = container.find(\".sp-clear\"),\n            chooseButton = container.find(\".sp-choose\"),\n            toggleButton = container.find(\".sp-palette-toggle\"),\n            isInput = boundElement.is(\"input\"),\n            isInputTypeColor = isInput && boundElement.attr(\"type\") === \"color\" && inputTypeColorSupport(),\n            shouldReplace = isInput && !flat,\n            replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),\n            offsetElement = (shouldReplace) ? replacer : boundElement,\n            previewElement = replacer.find(\".sp-preview-inner\"),\n            initialColor = opts.color || (isInput && boundElement.val()),\n            colorOnShow = false,\n            currentPreferredFormat = opts.preferredFormat,\n            clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,\n            isEmpty = !initialColor,\n            allowEmpty = opts.allowEmpty && !isInputTypeColor;\n\n        function applyOptions() {\n\n            if (opts.showPaletteOnly) {\n                opts.showPalette = true;\n            }\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n\n            if (opts.palette) {\n                palette = opts.palette.slice(0);\n                paletteArray = $.isArray(palette[0]) ? palette : [palette];\n                paletteLookup = {};\n                for (var i = 0; i < paletteArray.length; i++) {\n                    for (var j = 0; j < paletteArray[i].length; j++) {\n                        var rgb = tinycolor(paletteArray[i][j]).toRgbString();\n                        paletteLookup[rgb] = true;\n                    }\n                }\n            }\n\n            container.toggleClass(\"sp-flat\", flat);\n            container.toggleClass(\"sp-input-disabled\", !opts.showInput);\n            container.toggleClass(\"sp-alpha-enabled\", opts.showAlpha);\n            container.toggleClass(\"sp-clear-enabled\", allowEmpty);\n            container.toggleClass(\"sp-buttons-disabled\", !opts.showButtons);\n            container.toggleClass(\"sp-palette-buttons-disabled\", !opts.togglePaletteOnly);\n            container.toggleClass(\"sp-palette-disabled\", !opts.showPalette);\n            container.toggleClass(\"sp-palette-only\", opts.showPaletteOnly);\n            container.toggleClass(\"sp-initial-disabled\", !opts.showInitial);\n            container.addClass(opts.className).addClass(opts.containerClassName);\n\n            reflow();\n        }\n\n        function initialize() {\n\n            if (IE) {\n                container.find(\"*:not(input)\").attr(\"unselectable\", \"on\");\n            }\n\n            applyOptions();\n\n            if (shouldReplace) {\n                boundElement.after(replacer).hide();\n            }\n\n            if (!allowEmpty) {\n                clearButton.hide();\n            }\n\n            if (flat) {\n                boundElement.after(container).hide();\n            }\n            else {\n\n                var appendTo = opts.appendTo === \"parent\" ? boundElement.parent() : $(opts.appendTo);\n                if (appendTo.length !== 1) {\n                    appendTo = $(\"body\");\n                }\n\n                appendTo.append(container);\n            }\n\n            updateSelectionPaletteFromStorage();\n\n            offsetElement.on(\"click.spectrum touchstart.spectrum\", function (e) {\n                if (!disabled) {\n                    toggle();\n                }\n\n                e.stopPropagation();\n\n                if (!$(e.target).is(\"input\")) {\n                    e.preventDefault();\n                }\n            });\n\n            if(boundElement.is(\":disabled\") || (opts.disabled === true)) {\n                disable();\n            }\n\n            // Prevent clicks from bubbling up to document.  This would cause it to be hidden.\n            container.click(stopPropagation);\n\n            // Handle user typed input\n            textInput.change(setFromTextInput);\n            textInput.on(\"paste\", function () {\n                setTimeout(setFromTextInput, 1);\n            });\n            textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });\n\n            cancelButton.text(opts.cancelText);\n            cancelButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                revert();\n                hide();\n            });\n\n            clearButton.attr(\"title\", opts.clearText);\n            clearButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                isEmpty = true;\n                move();\n\n                if(flat) {\n                    //for the flat style, this is a change event\n                    updateOriginalInput(true);\n                }\n            });\n\n            chooseButton.text(opts.chooseText);\n            chooseButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                if (IE && textInput.is(\":focus\")) {\n                    textInput.trigger('change');\n                }\n\n                if (isValid()) {\n                    updateOriginalInput(true);\n                    hide();\n                }\n            });\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n            toggleButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                opts.showPaletteOnly = !opts.showPaletteOnly;\n\n                // To make sure the Picker area is drawn on the right, next to the\n                // Palette area (and not below the palette), first move the Palette\n                // to the left to make space for the picker, plus 5px extra.\n                // The 'applyOptions' function puts the whole container back into place\n                // and takes care of the button-text and the sp-palette-only CSS class.\n                if (!opts.showPaletteOnly && !flat) {\n                    container.css('left', '-=' + (pickerContainer.outerWidth(true) + 5));\n                }\n                applyOptions();\n            });\n\n            draggable(alphaSlider, function (dragX, dragY, e) {\n                currentAlpha = (dragX / alphaWidth);\n                isEmpty = false;\n                if (e.shiftKey) {\n                    currentAlpha = Math.round(currentAlpha * 10) / 10;\n                }\n\n                move();\n            }, dragStart, dragStop);\n\n            draggable(slider, function (dragX, dragY) {\n                currentHue = parseFloat(dragY / slideHeight);\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n                move();\n            }, dragStart, dragStop);\n\n            draggable(dragger, function (dragX, dragY, e) {\n\n                // shift+drag should snap the movement to either the x or y axis.\n                if (!e.shiftKey) {\n                    shiftMovementDirection = null;\n                }\n                else if (!shiftMovementDirection) {\n                    var oldDragX = currentSaturation * dragWidth;\n                    var oldDragY = dragHeight - (currentValue * dragHeight);\n                    var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY);\n\n                    shiftMovementDirection = furtherFromX ? \"x\" : \"y\";\n                }\n\n                var setSaturation = !shiftMovementDirection || shiftMovementDirection === \"x\";\n                var setValue = !shiftMovementDirection || shiftMovementDirection === \"y\";\n\n                if (setSaturation) {\n                    currentSaturation = parseFloat(dragX / dragWidth);\n                }\n                if (setValue) {\n                    currentValue = parseFloat((dragHeight - dragY) / dragHeight);\n                }\n\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n\n                move();\n\n            }, dragStart, dragStop);\n\n            if (!!initialColor) {\n                set(initialColor);\n\n                // In case color was black - update the preview UI and set the format\n                // since the set function will not run (default color is black).\n                updateUI();\n                currentPreferredFormat = opts.preferredFormat || tinycolor(initialColor).format;\n\n                addColorToSelectionPalette(initialColor);\n            }\n            else {\n                updateUI();\n            }\n\n            if (flat) {\n                show();\n            }\n\n            function paletteElementClick(e) {\n                if (e.data && e.data.ignore) {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n                }\n                else {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n\n                    // If the picker is going to close immediately, a palette selection\n                    // is a change.  Otherwise, it's a move only.\n                    if (opts.hideAfterPaletteSelect) {\n                        updateOriginalInput(true);\n                        hide();\n                    } else {\n                        updateOriginalInput();\n                    }\n                }\n\n                return false;\n            }\n\n            var paletteEvent = IE ? \"mousedown.spectrum\" : \"click.spectrum touchstart.spectrum\";\n            paletteContainer.on(paletteEvent, \".sp-thumb-el\", paletteElementClick);\n            initialColorContainer.on(paletteEvent, \".sp-thumb-el:nth-child(1)\", { ignore: true }, paletteElementClick);\n        }\n\n        function updateSelectionPaletteFromStorage() {\n\n            if (localStorageKey && window.localStorage) {\n\n                // Migrate old palettes over to new format.  May want to remove this eventually.\n                try {\n                    var oldPalette = window.localStorage[localStorageKey].split(\",#\");\n                    if (oldPalette.length > 1) {\n                        delete window.localStorage[localStorageKey];\n                        $.each(oldPalette, function(i, c) {\n                             addColorToSelectionPalette(c);\n                        });\n                    }\n                }\n                catch(e) { }\n\n                try {\n                    selectionPalette = window.localStorage[localStorageKey].split(\";\");\n                }\n                catch (e) { }\n            }\n        }\n\n        function addColorToSelectionPalette(color) {\n            if (showSelectionPalette) {\n                var rgb = tinycolor(color).toRgbString();\n                if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) {\n                    selectionPalette.push(rgb);\n                    while(selectionPalette.length > maxSelectionSize) {\n                        selectionPalette.shift();\n                    }\n                }\n\n                if (localStorageKey && window.localStorage) {\n                    try {\n                        window.localStorage[localStorageKey] = selectionPalette.join(\";\");\n                    }\n                    catch(e) { }\n                }\n            }\n        }\n\n        function getUniqueSelectionPalette() {\n            var unique = [];\n            if (opts.showPalette) {\n                for (var i = 0; i < selectionPalette.length; i++) {\n                    var rgb = tinycolor(selectionPalette[i]).toRgbString();\n\n                    if (!paletteLookup[rgb]) {\n                        unique.push(selectionPalette[i]);\n                    }\n                }\n            }\n\n            return unique.reverse().slice(0, opts.maxSelectionSize);\n        }\n\n        function drawPalette() {\n\n            var currentColor = get();\n\n            var html = $.map(paletteArray, function (palette, i) {\n                return paletteTemplate(palette, currentColor, \"sp-palette-row sp-palette-row-\" + i, opts);\n            });\n\n            updateSelectionPaletteFromStorage();\n\n            if (selectionPalette) {\n                html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, \"sp-palette-row sp-palette-row-selection\", opts));\n            }\n\n            paletteContainer.html(html.join(\"\"));\n        }\n\n        function drawInitial() {\n            if (opts.showInitial) {\n                var initial = colorOnShow;\n                var current = get();\n                initialColorContainer.html(paletteTemplate([initial, current], current, \"sp-palette-row-initial\", opts));\n            }\n        }\n\n        function dragStart() {\n            if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) {\n                reflow();\n            }\n            isDragging = true;\n            container.addClass(draggingClass);\n            shiftMovementDirection = null;\n            boundElement.trigger('dragstart.spectrum', [ get() ]);\n        }\n\n        function dragStop() {\n            isDragging = false;\n            container.removeClass(draggingClass);\n            boundElement.trigger('dragstop.spectrum', [ get() ]);\n        }\n\n        function setFromTextInput() {\n\n            var value = textInput.val();\n\n            if ((value === null || value === \"\") && allowEmpty) {\n                set(null);\n                move();\n                updateOriginalInput();\n            }\n            else {\n                var tiny = tinycolor(value);\n                if (tiny.isValid()) {\n                    set(tiny);\n                    move();\n                    updateOriginalInput();\n                }\n                else {\n                    textInput.addClass(\"sp-validation-error\");\n                }\n            }\n        }\n\n        function toggle() {\n            if (visible) {\n                hide();\n            }\n            else {\n                show();\n            }\n        }\n\n        function show() {\n            var event = $.Event('beforeShow.spectrum');\n\n            if (visible) {\n                reflow();\n                return;\n            }\n\n            boundElement.trigger(event, [ get() ]);\n\n            if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {\n                return;\n            }\n\n            hideAll();\n            visible = true;\n\n            $(doc).on(\"keydown.spectrum\", onkeydown);\n            $(doc).on(\"click.spectrum\", clickout);\n            $(window).on(\"resize.spectrum\", resize);\n            replacer.addClass(\"sp-active\");\n            container.removeClass(\"sp-hidden\");\n\n            reflow();\n            updateUI();\n\n            colorOnShow = get();\n\n            drawInitial();\n            callbacks.show(colorOnShow);\n            boundElement.trigger('show.spectrum', [ colorOnShow ]);\n        }\n\n        function onkeydown(e) {\n            // Close on ESC\n            if (e.keyCode === 27) {\n                hide();\n            }\n        }\n\n        function clickout(e) {\n            // Return on right click.\n            if (e.button == 2) { return; }\n\n            // If a drag event was happening during the mouseup, don't hide\n            // on click.\n            if (isDragging) { return; }\n\n            if (clickoutFiresChange) {\n                updateOriginalInput(true);\n            }\n            else {\n                revert();\n            }\n            hide();\n        }\n\n        function hide() {\n            // Return if hiding is unnecessary\n            if (!visible || flat) { return; }\n            visible = false;\n\n            $(doc).off(\"keydown.spectrum\", onkeydown);\n            $(doc).off(\"click.spectrum\", clickout);\n            $(window).off(\"resize.spectrum\", resize);\n\n            replacer.removeClass(\"sp-active\");\n            container.addClass(\"sp-hidden\");\n\n            callbacks.hide(get());\n            boundElement.trigger('hide.spectrum', [ get() ]);\n        }\n\n        function revert() {\n            set(colorOnShow, true);\n            updateOriginalInput(true);\n        }\n\n        function set(color, ignoreFormatChange) {\n            if (tinycolor.equals(color, get())) {\n                // Update UI just in case a validation error needs\n                // to be cleared.\n                updateUI();\n                return;\n            }\n\n            var newColor, newHsv;\n            if (!color && allowEmpty) {\n                isEmpty = true;\n            } else {\n                isEmpty = false;\n                newColor = tinycolor(color);\n                newHsv = newColor.toHsv();\n\n                currentHue = (newHsv.h % 360) / 360;\n                currentSaturation = newHsv.s;\n                currentValue = newHsv.v;\n                currentAlpha = newHsv.a;\n            }\n            updateUI();\n\n            if (newColor && newColor.isValid() && !ignoreFormatChange) {\n                currentPreferredFormat = opts.preferredFormat || newColor.getFormat();\n            }\n        }\n\n        function get(opts) {\n            opts = opts || { };\n\n            if (allowEmpty && isEmpty) {\n                return null;\n            }\n\n            return tinycolor.fromRatio({\n                h: currentHue,\n                s: currentSaturation,\n                v: currentValue,\n                a: Math.round(currentAlpha * 1000) / 1000\n            }, { format: opts.format || currentPreferredFormat });\n        }\n\n        function isValid() {\n            return !textInput.hasClass(\"sp-validation-error\");\n        }\n\n        function move() {\n            updateUI();\n\n            callbacks.move(get());\n            boundElement.trigger('move.spectrum', [ get() ]);\n        }\n\n        function updateUI() {\n\n            textInput.removeClass(\"sp-validation-error\");\n\n            updateHelperLocations();\n\n            // Update dragger background color (gradients take care of saturation and value).\n            var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });\n            dragger.css(\"background-color\", flatColor.toHexString());\n\n            // Get a format that alpha will be included in (hex and names ignore alpha)\n            var format = currentPreferredFormat;\n            if (currentAlpha < 1 && !(currentAlpha === 0 && format === \"name\")) {\n                if (format === \"hex\" || format === \"hex3\" || format === \"hex6\" || format === \"name\") {\n                    format = \"rgb\";\n                }\n            }\n\n            var realColor = get({ format: format }),\n                displayColor = '';\n\n             //reset background info for preview element\n            previewElement.removeClass(\"sp-clear-display\");\n            previewElement.css('background-color', 'transparent');\n\n            if (!realColor && allowEmpty) {\n                // Update the replaced elements background with icon indicating no color selection\n                previewElement.addClass(\"sp-clear-display\");\n            }\n            else {\n                var realHex = realColor.toHexString(),\n                    realRgb = realColor.toRgbString();\n\n                // Update the replaced elements background color (with actual selected color)\n                if (rgbaSupport || realColor.alpha === 1) {\n                    previewElement.css(\"background-color\", realRgb);\n                }\n                else {\n                    previewElement.css(\"background-color\", \"transparent\");\n                    previewElement.css(\"filter\", realColor.toFilter());\n                }\n\n                if (opts.showAlpha) {\n                    var rgb = realColor.toRgb();\n                    rgb.a = 0;\n                    var realAlpha = tinycolor(rgb).toRgbString();\n                    var gradient = \"linear-gradient(left, \" + realAlpha + \", \" + realHex + \")\";\n\n                    if (IE) {\n                        alphaSliderInner.css(\"filter\", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));\n                    }\n                    else {\n                        alphaSliderInner.css(\"background\", \"-webkit-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-moz-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-ms-\" + gradient);\n                        // Use current syntax gradient on unprefixed property.\n                        alphaSliderInner.css(\"background\",\n                            \"linear-gradient(to right, \" + realAlpha + \", \" + realHex + \")\");\n                    }\n                }\n\n                displayColor = realColor.toString(format);\n            }\n\n            // Update the text entry input as it changes happen\n            if (opts.showInput) {\n                textInput.val(displayColor);\n            }\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            drawInitial();\n        }\n\n        function updateHelperLocations() {\n            var s = currentSaturation;\n            var v = currentValue;\n\n            if(allowEmpty && isEmpty) {\n                //if selected color is empty, hide the helpers\n                alphaSlideHelper.hide();\n                slideHelper.hide();\n                dragHelper.hide();\n            }\n            else {\n                //make sure helpers are visible\n                alphaSlideHelper.show();\n                slideHelper.show();\n                dragHelper.show();\n\n                // Where to show the little circle in that displays your current selected color\n                var dragX = s * dragWidth;\n                var dragY = dragHeight - (v * dragHeight);\n                dragX = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)\n                );\n                dragY = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)\n                );\n                dragHelper.css({\n                    \"top\": dragY + \"px\",\n                    \"left\": dragX + \"px\"\n                });\n\n                var alphaX = currentAlpha * alphaWidth;\n                alphaSlideHelper.css({\n                    \"left\": (alphaX - (alphaSlideHelperWidth / 2)) + \"px\"\n                });\n\n                // Where to show the bar that displays your current selected hue\n                var slideY = (currentHue) * slideHeight;\n                slideHelper.css({\n                    \"top\": (slideY - slideHelperHeight) + \"px\"\n                });\n            }\n        }\n\n        function updateOriginalInput(fireCallback) {\n            var color = get(),\n                displayColor = '',\n                hasChanged = !tinycolor.equals(color, colorOnShow);\n\n            if (color) {\n                displayColor = color.toString(currentPreferredFormat);\n                // Update the selection palette with the current color\n                addColorToSelectionPalette(color);\n            }\n\n            if (isInput) {\n                boundElement.val(displayColor);\n            }\n\n            if (fireCallback && hasChanged) {\n                callbacks.change(color);\n                boundElement.trigger('change', [ color ]);\n            }\n        }\n\n        function reflow() {\n            if (!visible) {\n                return; // Calculations would be useless and wouldn't be reliable anyways\n            }\n            dragWidth = dragger.width();\n            dragHeight = dragger.height();\n            dragHelperHeight = dragHelper.height();\n            slideWidth = slider.width();\n            slideHeight = slider.height();\n            slideHelperHeight = slideHelper.height();\n            alphaWidth = alphaSlider.width();\n            alphaSlideHelperWidth = alphaSlideHelper.width();\n\n            if (!flat) {\n                container.css(\"position\", \"absolute\");\n                if (opts.offset) {\n                    container.offset(opts.offset);\n                } else {\n                    container.offset(getOffset(container, offsetElement));\n                }\n            }\n\n            updateHelperLocations();\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            boundElement.trigger('reflow.spectrum');\n        }\n\n        function destroy() {\n            boundElement.show();\n            offsetElement.off(\"click.spectrum touchstart.spectrum\");\n            container.remove();\n            replacer.remove();\n            spectrums[spect.id] = null;\n        }\n\n        function option(optionName, optionValue) {\n            if (optionName === undefined) {\n                return $.extend({}, opts);\n            }\n            if (optionValue === undefined) {\n                return opts[optionName];\n            }\n\n            opts[optionName] = optionValue;\n\n            if (optionName === \"preferredFormat\") {\n                currentPreferredFormat = opts.preferredFormat;\n            }\n            applyOptions();\n        }\n\n        function enable() {\n            disabled = false;\n            boundElement.attr(\"disabled\", false);\n            offsetElement.removeClass(\"sp-disabled\");\n        }\n\n        function disable() {\n            hide();\n            disabled = true;\n            boundElement.attr(\"disabled\", true);\n            offsetElement.addClass(\"sp-disabled\");\n        }\n\n        function setOffset(coord) {\n            opts.offset = coord;\n            reflow();\n        }\n\n        initialize();\n\n        var spect = {\n            show: show,\n            hide: hide,\n            toggle: toggle,\n            reflow: reflow,\n            option: option,\n            enable: enable,\n            disable: disable,\n            offset: setOffset,\n            set: function (c) {\n                set(c);\n                updateOriginalInput();\n            },\n            get: get,\n            destroy: destroy,\n            container: container\n        };\n\n        spect.id = spectrums.push(spect) - 1;\n\n        return spect;\n    }\n\n    /**\n    * checkOffset - get the offset below/above and left/right element depending on screen position\n    * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js\n    */\n    function getOffset(picker, input) {\n        var extraY = 0;\n        var dpWidth = picker.outerWidth();\n        var dpHeight = picker.outerHeight();\n        var inputHeight = input.outerHeight();\n        var doc = picker[0].ownerDocument;\n        var docElem = doc.documentElement;\n        var viewWidth = docElem.clientWidth + $(doc).scrollLeft();\n        var viewHeight = docElem.clientHeight + $(doc).scrollTop();\n        var offset = input.offset();\n        var offsetLeft = offset.left;\n        var offsetTop = offset.top;\n\n        offsetTop += inputHeight;\n\n        offsetLeft -=\n            Math.min(offsetLeft, (offsetLeft + dpWidth > viewWidth && viewWidth > dpWidth) ?\n            Math.abs(offsetLeft + dpWidth - viewWidth) : 0);\n\n        offsetTop -=\n            Math.min(offsetTop, ((offsetTop + dpHeight > viewHeight && viewHeight > dpHeight) ?\n            Math.abs(dpHeight + inputHeight - extraY) : extraY));\n\n        return {\n            top: offsetTop,\n            bottom: offset.bottom,\n            left: offsetLeft,\n            right: offset.right,\n            width: offset.width,\n            height: offset.height\n        };\n    }\n\n    /**\n    * noop - do nothing\n    */\n    function noop() {\n\n    }\n\n    /**\n    * stopPropagation - makes the code only doing this a little easier to read in line\n    */\n    function stopPropagation(e) {\n        e.stopPropagation();\n    }\n\n    /**\n    * Create a function bound to a given object\n    * Thanks to underscore.js\n    */\n    function bind(func, obj) {\n        var slice = Array.prototype.slice;\n        var args = slice.call(arguments, 2);\n        return function () {\n            return func.apply(obj, args.concat(slice.call(arguments)));\n        };\n    }\n\n    /**\n    * Lightweight drag helper.  Handles containment within the element, so that\n    * when dragging, the x is within [0,element.width] and y is within [0,element.height]\n    */\n    function draggable(element, onmove, onstart, onstop) {\n        onmove = onmove || function () { };\n        onstart = onstart || function () { };\n        onstop = onstop || function () { };\n        var doc = document;\n        var dragging = false;\n        var offset = {};\n        var maxHeight = 0;\n        var maxWidth = 0;\n        var hasTouch = ('ontouchstart' in window);\n\n        var duringDragEvents = {};\n        duringDragEvents[\"selectstart\"] = prevent;\n        duringDragEvents[\"dragstart\"] = prevent;\n        duringDragEvents[\"touchmove mousemove\"] = move;\n        duringDragEvents[\"touchend mouseup\"] = stop;\n\n        function prevent(e) {\n            if (e.stopPropagation) {\n                e.stopPropagation();\n            }\n            if (e.preventDefault) {\n                e.preventDefault();\n            }\n            e.returnValue = false;\n        }\n\n        function move(e) {\n            if (dragging) {\n                // Mouseup happened outside of window\n                if (IE && doc.documentMode < 9 && !e.button) {\n                    return stop();\n                }\n\n                var t0 = e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0];\n                var pageX = t0 && t0.pageX || e.pageX;\n                var pageY = t0 && t0.pageY || e.pageY;\n\n                var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));\n                var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));\n\n                if (hasTouch) {\n                    // Stop scrolling in iOS\n                    prevent(e);\n                }\n\n                onmove.apply(element, [dragX, dragY, e]);\n            }\n        }\n\n        function start(e) {\n            var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);\n\n            if (!rightclick && !dragging) {\n                if (onstart.apply(element, arguments) !== false) {\n                    dragging = true;\n                    maxHeight = $(element).height();\n                    maxWidth = $(element).width();\n                    offset = $(element).offset();\n\n                    $(doc).on(duringDragEvents);\n                    $(doc.body).addClass(\"sp-dragging\");\n\n                    move(e);\n\n                    prevent(e);\n                }\n            }\n        }\n\n        function stop() {\n            if (dragging) {\n                $(doc).off(duringDragEvents);\n                $(doc.body).removeClass(\"sp-dragging\");\n\n                // Wait a tick before notifying observers to allow the click event\n                // to fire in Chrome.\n                setTimeout(function() {\n                    onstop.apply(element, arguments);\n                }, 0);\n            }\n            dragging = false;\n        }\n\n        $(element).on(\"touchstart mousedown\", start);\n    }\n\n    function throttle(func, wait, debounce) {\n        var timeout;\n        return function () {\n            var context = this, args = arguments;\n            var throttler = function () {\n                timeout = null;\n                func.apply(context, args);\n            };\n            if (debounce) clearTimeout(timeout);\n            if (debounce || !timeout) timeout = setTimeout(throttler, wait);\n        };\n    }\n\n    function inputTypeColorSupport() {\n        return $.fn.spectrum.inputTypeColorSupport();\n    }\n\n    /**\n    * Define a jQuery plugin\n    */\n    var dataID = \"spectrum.id\";\n    $.fn.spectrum = function (opts, extra) {\n\n        if (typeof opts == \"string\") {\n\n            var returnValue = this;\n            var args = Array.prototype.slice.call( arguments, 1 );\n\n            this.each(function () {\n                var spect = spectrums[$(this).data(dataID)];\n                if (spect) {\n                    var method = spect[opts];\n                    if (!method) {\n                        throw new Error( \"Spectrum: no such method: '\" + opts + \"'\" );\n                    }\n\n                    if (opts == \"get\") {\n                        returnValue = spect.get();\n                    }\n                    else if (opts == \"container\") {\n                        returnValue = spect.container;\n                    }\n                    else if (opts == \"option\") {\n                        returnValue = spect.option.apply(spect, args);\n                    }\n                    else if (opts == \"destroy\") {\n                        spect.destroy();\n                        $(this).removeData(dataID);\n                    }\n                    else {\n                        method.apply(spect, args);\n                    }\n                }\n            });\n\n            return returnValue;\n        }\n\n        // Initializing a new instance of spectrum\n        return this.spectrum(\"destroy\").each(function () {\n            var options = $.extend({}, $(this).data(), opts);\n            var spect = spectrum(this, options);\n            $(this).data(dataID, spect.id);\n        });\n    };\n\n    $.fn.spectrum.load = true;\n    $.fn.spectrum.loadOpts = {};\n    $.fn.spectrum.draggable = draggable;\n    $.fn.spectrum.defaults = defaultOpts;\n    $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {\n        if (typeof inputTypeColorSupport._cachedResult === \"undefined\") {\n            var colorInput = $(\"<input type='color'/>\")[0]; // if color element is supported, value will default to not null\n            inputTypeColorSupport._cachedResult = colorInput.type === \"color\" && colorInput.value !== \"\";\n        }\n        return inputTypeColorSupport._cachedResult;\n    };\n\n    $.spectrum = { };\n    $.spectrum.localization = { };\n    $.spectrum.palettes = { };\n\n    $.fn.spectrum.processNativeColorInputs = function () {\n        var colorInputs = $(\"input[type=color]\");\n        if (colorInputs.length && !inputTypeColorSupport()) {\n            colorInputs.spectrum({\n                preferredFormat: \"hex6\"\n            });\n        }\n    };\n\n    // TinyColor v1.1.2\n    // https://github.com/bgrins/TinyColor\n    // Brian Grinstead, MIT License\n\n    (function() {\n\n    var trimLeft = /^[\\s,#]+/,\n        trimRight = /\\s+$/,\n        tinyCounter = 0,\n        math = Math,\n        mathRound = math.round,\n        mathMin = math.min,\n        mathMax = math.max,\n        mathRandom = math.random;\n\n    var tinycolor = function(color, opts) {\n\n        color = (color) ? color : '';\n        opts = opts || { };\n\n        // If input is already a tinycolor, return itself\n        if (color instanceof tinycolor) {\n           return color;\n        }\n        // If we are called as a function, call using new instead\n        if (!(this instanceof tinycolor)) {\n            return new tinycolor(color, opts);\n        }\n\n        var rgb = inputToRGB(color);\n        this._originalInput = color;\n        this._r = rgb.r;\n        this._g = rgb.g;\n        this._b = rgb.b;\n        this._a = rgb.a;\n        this._roundA = mathRound(1000 * this._a) / 1000;\n        this._format = opts.format || rgb.format;\n        this._gradientType = opts.gradientType;\n\n        // Don't let the range of [0,255] come back in [0,1].\n        // Potentially lose a little bit of precision here, but will fix issues where\n        // .5 gets interpreted as half of the total, instead of half of 1\n        // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n        if (this._r < 1) { this._r = mathRound(this._r); }\n        if (this._g < 1) { this._g = mathRound(this._g); }\n        if (this._b < 1) { this._b = mathRound(this._b); }\n\n        this._ok = rgb.ok;\n        this._tc_id = tinyCounter++;\n    };\n\n    tinycolor.prototype = {\n        isDark: function() {\n            return this.getBrightness() < 128;\n        },\n        isLight: function() {\n            return !this.isDark();\n        },\n        isValid: function() {\n            return this._ok;\n        },\n        getOriginalInput: function() {\n          return this._originalInput;\n        },\n        getFormat: function() {\n            return this._format;\n        },\n        getAlpha: function() {\n            return this._a;\n        },\n        getBrightness: function() {\n            var rgb = this.toRgb();\n            return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n        },\n        setAlpha: function(value) {\n            this._a = boundAlpha(value);\n            this._roundA = mathRound(1000 * this._a) / 1000;\n            return this;\n        },\n        toHsv: function() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n        },\n        toHsvString: function() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n            return (this._a == 1) ?\n              \"hsv(\"  + h + \", \" + s + \"%, \" + v + \"%)\" :\n              \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n        },\n        toHsl: function() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n        },\n        toHslString: function() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n            return (this._a == 1) ?\n              \"hsl(\"  + h + \", \" + s + \"%, \" + l + \"%)\" :\n              \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n        },\n        toHex: function(allow3Char) {\n            return rgbToHex(this._r, this._g, this._b, allow3Char);\n        },\n        toHexString: function(allow3Char) {\n            return '#' + this.toHex(allow3Char);\n        },\n        toHex8: function() {\n            return rgbaToHex(this._r, this._g, this._b, this._a);\n        },\n        toHex8String: function() {\n            return '#' + this.toHex8();\n        },\n        toRgb: function() {\n            return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n        },\n        toRgbString: function() {\n            return (this._a == 1) ?\n              \"rgb(\"  + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n              \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n        },\n        toPercentageRgb: function() {\n            return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n        },\n        toPercentageRgbString: function() {\n            return (this._a == 1) ?\n              \"rgb(\"  + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n              \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n        },\n        toName: function() {\n            if (this._a === 0) {\n                return \"transparent\";\n            }\n\n            if (this._a < 1) {\n                return false;\n            }\n\n            return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n        },\n        toFilter: function(secondColor) {\n            var hex8String = '#' + rgbaToHex(this._r, this._g, this._b, this._a);\n            var secondHex8String = hex8String;\n            var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n            if (secondColor) {\n                var s = tinycolor(secondColor);\n                secondHex8String = s.toHex8String();\n            }\n\n            return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n        },\n        toString: function(format) {\n            var formatSet = !!format;\n            format = format || this._format;\n\n            var formattedString = false;\n            var hasAlpha = this._a < 1 && this._a >= 0;\n            var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"name\");\n\n            if (needsAlphaFormat) {\n                // Special case for \"transparent\", all other non-alpha formats\n                // will return rgba when there is transparency.\n                if (format === \"name\" && this._a === 0) {\n                    return this.toName();\n                }\n                return this.toRgbString();\n            }\n            if (format === \"rgb\") {\n                formattedString = this.toRgbString();\n            }\n            if (format === \"prgb\") {\n                formattedString = this.toPercentageRgbString();\n            }\n            if (format === \"hex\" || format === \"hex6\") {\n                formattedString = this.toHexString();\n            }\n            if (format === \"hex3\") {\n                formattedString = this.toHexString(true);\n            }\n            if (format === \"hex8\") {\n                formattedString = this.toHex8String();\n            }\n            if (format === \"name\") {\n                formattedString = this.toName();\n            }\n            if (format === \"hsl\") {\n                formattedString = this.toHslString();\n            }\n            if (format === \"hsv\") {\n                formattedString = this.toHsvString();\n            }\n\n            return formattedString || this.toHexString();\n        },\n\n        _applyModification: function(fn, args) {\n            var color = fn.apply(null, [this].concat([].slice.call(args)));\n            this._r = color._r;\n            this._g = color._g;\n            this._b = color._b;\n            this.setAlpha(color._a);\n            return this;\n        },\n        lighten: function() {\n            return this._applyModification(lighten, arguments);\n        },\n        brighten: function() {\n            return this._applyModification(brighten, arguments);\n        },\n        darken: function() {\n            return this._applyModification(darken, arguments);\n        },\n        desaturate: function() {\n            return this._applyModification(desaturate, arguments);\n        },\n        saturate: function() {\n            return this._applyModification(saturate, arguments);\n        },\n        greyscale: function() {\n            return this._applyModification(greyscale, arguments);\n        },\n        spin: function() {\n            return this._applyModification(spin, arguments);\n        },\n\n        _applyCombination: function(fn, args) {\n            return fn.apply(null, [this].concat([].slice.call(args)));\n        },\n        analogous: function() {\n            return this._applyCombination(analogous, arguments);\n        },\n        complement: function() {\n            return this._applyCombination(complement, arguments);\n        },\n        monochromatic: function() {\n            return this._applyCombination(monochromatic, arguments);\n        },\n        splitcomplement: function() {\n            return this._applyCombination(splitcomplement, arguments);\n        },\n        triad: function() {\n            return this._applyCombination(triad, arguments);\n        },\n        tetrad: function() {\n            return this._applyCombination(tetrad, arguments);\n        }\n    };\n\n    // If input is an object, force 1 into \"1.0\" to handle ratios properly\n    // String input requires \"1.0\" as input, so 1 will be treated as 1\n    tinycolor.fromRatio = function(color, opts) {\n        if (typeof color == \"object\") {\n            var newColor = {};\n            for (var i in color) {\n                if (color.hasOwnProperty(i)) {\n                    if (i === \"a\") {\n                        newColor[i] = color[i];\n                    }\n                    else {\n                        newColor[i] = convertToPercentage(color[i]);\n                    }\n                }\n            }\n            color = newColor;\n        }\n\n        return tinycolor(color, opts);\n    };\n\n    // Given a string or object, convert that input to RGB\n    // Possible string inputs:\n    //\n    //     \"red\"\n    //     \"#f00\" or \"f00\"\n    //     \"#ff0000\" or \"ff0000\"\n    //     \"#ff000000\" or \"ff000000\"\n    //     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n    //     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n    //     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n    //     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n    //     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n    //     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n    //     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n    //\n    function inputToRGB(color) {\n\n        var rgb = { r: 0, g: 0, b: 0 };\n        var a = 1;\n        var ok = false;\n        var format = false;\n\n        if (typeof color == \"string\") {\n            color = stringInputToObject(color);\n        }\n\n        if (typeof color == \"object\") {\n            if (color.hasOwnProperty(\"r\") && color.hasOwnProperty(\"g\") && color.hasOwnProperty(\"b\")) {\n                rgb = rgbToRgb(color.r, color.g, color.b);\n                ok = true;\n                format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n            }\n            else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"v\")) {\n                color.s = convertToPercentage(color.s);\n                color.v = convertToPercentage(color.v);\n                rgb = hsvToRgb(color.h, color.s, color.v);\n                ok = true;\n                format = \"hsv\";\n            }\n            else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"l\")) {\n                color.s = convertToPercentage(color.s);\n                color.l = convertToPercentage(color.l);\n                rgb = hslToRgb(color.h, color.s, color.l);\n                ok = true;\n                format = \"hsl\";\n            }\n\n            if (color.hasOwnProperty(\"a\")) {\n                a = color.a;\n            }\n        }\n\n        a = boundAlpha(a);\n\n        return {\n            ok: ok,\n            format: color.format || format,\n            r: mathMin(255, mathMax(rgb.r, 0)),\n            g: mathMin(255, mathMax(rgb.g, 0)),\n            b: mathMin(255, mathMax(rgb.b, 0)),\n            a: a\n        };\n    }\n\n\n    // Conversion Functions\n    // --------------------\n\n    // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n    // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n    // `rgbToRgb`\n    // Handle bounds / percentage checking to conform to CSS color spec\n    // <http://www.w3.org/TR/css3-color/>\n    // *Assumes:* r, g, b in [0, 255] or [0, 1]\n    // *Returns:* { r, g, b } in [0, 255]\n    function rgbToRgb(r, g, b){\n        return {\n            r: bound01(r, 255) * 255,\n            g: bound01(g, 255) * 255,\n            b: bound01(b, 255) * 255\n        };\n    }\n\n    // `rgbToHsl`\n    // Converts an RGB color value to HSL.\n    // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n    // *Returns:* { h, s, l } in [0,1]\n    function rgbToHsl(r, g, b) {\n\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n\n        var max = mathMax(r, g, b), min = mathMin(r, g, b);\n        var h, s, l = (max + min) / 2;\n\n        if(max == min) {\n            h = s = 0; // achromatic\n        }\n        else {\n            var d = max - min;\n            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n            switch(max) {\n                case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n                case g: h = (b - r) / d + 2; break;\n                case b: h = (r - g) / d + 4; break;\n            }\n\n            h /= 6;\n        }\n\n        return { h: h, s: s, l: l };\n    }\n\n    // `hslToRgb`\n    // Converts an HSL color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n    function hslToRgb(h, s, l) {\n        var r, g, b;\n\n        h = bound01(h, 360);\n        s = bound01(s, 100);\n        l = bound01(l, 100);\n\n        function hue2rgb(p, q, t) {\n            if(t < 0) t += 1;\n            if(t > 1) t -= 1;\n            if(t < 1/6) return p + (q - p) * 6 * t;\n            if(t < 1/2) return q;\n            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n            return p;\n        }\n\n        if(s === 0) {\n            r = g = b = l; // achromatic\n        }\n        else {\n            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n            var p = 2 * l - q;\n            r = hue2rgb(p, q, h + 1/3);\n            g = hue2rgb(p, q, h);\n            b = hue2rgb(p, q, h - 1/3);\n        }\n\n        return { r: r * 255, g: g * 255, b: b * 255 };\n    }\n\n    // `rgbToHsv`\n    // Converts an RGB color value to HSV\n    // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n    // *Returns:* { h, s, v } in [0,1]\n    function rgbToHsv(r, g, b) {\n\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n\n        var max = mathMax(r, g, b), min = mathMin(r, g, b);\n        var h, s, v = max;\n\n        var d = max - min;\n        s = max === 0 ? 0 : d / max;\n\n        if(max == min) {\n            h = 0; // achromatic\n        }\n        else {\n            switch(max) {\n                case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n                case g: h = (b - r) / d + 2; break;\n                case b: h = (r - g) / d + 4; break;\n            }\n            h /= 6;\n        }\n        return { h: h, s: s, v: v };\n    }\n\n    // `hsvToRgb`\n    // Converts an HSV color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n     function hsvToRgb(h, s, v) {\n\n        h = bound01(h, 360) * 6;\n        s = bound01(s, 100);\n        v = bound01(v, 100);\n\n        var i = math.floor(h),\n            f = h - i,\n            p = v * (1 - s),\n            q = v * (1 - f * s),\n            t = v * (1 - (1 - f) * s),\n            mod = i % 6,\n            r = [v, q, p, p, t, v][mod],\n            g = [t, v, v, q, p, p][mod],\n            b = [p, p, t, v, v, q][mod];\n\n        return { r: r * 255, g: g * 255, b: b * 255 };\n    }\n\n    // `rgbToHex`\n    // Converts an RGB color to hex\n    // Assumes r, g, and b are contained in the set [0, 255]\n    // Returns a 3 or 6 character hex\n    function rgbToHex(r, g, b, allow3Char) {\n\n        var hex = [\n            pad2(mathRound(r).toString(16)),\n            pad2(mathRound(g).toString(16)),\n            pad2(mathRound(b).toString(16))\n        ];\n\n        // Return a 3 character hex if possible\n        if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n            return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n        }\n\n        return hex.join(\"\");\n    }\n        // `rgbaToHex`\n        // Converts an RGBA color plus alpha transparency to hex\n        // Assumes r, g, b and a are contained in the set [0, 255]\n        // Returns an 8 character hex\n        function rgbaToHex(r, g, b, a) {\n\n            var hex = [\n                pad2(convertDecimalToHex(a)),\n                pad2(mathRound(r).toString(16)),\n                pad2(mathRound(g).toString(16)),\n                pad2(mathRound(b).toString(16))\n            ];\n\n            return hex.join(\"\");\n        }\n\n    // `equals`\n    // Can be called with any tinycolor input\n    tinycolor.equals = function (color1, color2) {\n        if (!color1 || !color2) { return false; }\n        return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n    };\n    tinycolor.random = function() {\n        return tinycolor.fromRatio({\n            r: mathRandom(),\n            g: mathRandom(),\n            b: mathRandom()\n        });\n    };\n\n\n    // Modification Functions\n    // ----------------------\n    // Thanks to less.js for some of the basics here\n    // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n    function desaturate(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.s -= amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n\n    function saturate(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.s += amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n\n    function greyscale(color) {\n        return tinycolor(color).desaturate(100);\n    }\n\n    function lighten (color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.l += amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n\n    function brighten(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var rgb = tinycolor(color).toRgb();\n        rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n        rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n        rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n        return tinycolor(rgb);\n    }\n\n    function darken (color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.l -= amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n\n    // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n    // Values outside of this range will be wrapped into this range.\n    function spin(color, amount) {\n        var hsl = tinycolor(color).toHsl();\n        var hue = (mathRound(hsl.h) + amount) % 360;\n        hsl.h = hue < 0 ? 360 + hue : hue;\n        return tinycolor(hsl);\n    }\n\n    // Combination Functions\n    // ---------------------\n    // Thanks to jQuery xColor for some of the ideas behind these\n    // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n    function complement(color) {\n        var hsl = tinycolor(color).toHsl();\n        hsl.h = (hsl.h + 180) % 360;\n        return tinycolor(hsl);\n    }\n\n    function triad(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n        ];\n    }\n\n    function tetrad(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n        ];\n    }\n\n    function splitcomplement(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n            tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n        ];\n    }\n\n    function analogous(color, results, slices) {\n        results = results || 6;\n        slices = slices || 30;\n\n        var hsl = tinycolor(color).toHsl();\n        var part = 360 / slices;\n        var ret = [tinycolor(color)];\n\n        for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n            hsl.h = (hsl.h + part) % 360;\n            ret.push(tinycolor(hsl));\n        }\n        return ret;\n    }\n\n    function monochromatic(color, results) {\n        results = results || 6;\n        var hsv = tinycolor(color).toHsv();\n        var h = hsv.h, s = hsv.s, v = hsv.v;\n        var ret = [];\n        var modification = 1 / results;\n\n        while (results--) {\n            ret.push(tinycolor({ h: h, s: s, v: v}));\n            v = (v + modification) % 1;\n        }\n\n        return ret;\n    }\n\n    // Utility Functions\n    // ---------------------\n\n    tinycolor.mix = function(color1, color2, amount) {\n        amount = (amount === 0) ? 0 : (amount || 50);\n\n        var rgb1 = tinycolor(color1).toRgb();\n        var rgb2 = tinycolor(color2).toRgb();\n\n        var p = amount / 100;\n        var w = p * 2 - 1;\n        var a = rgb2.a - rgb1.a;\n\n        var w1;\n\n        if (w * a == -1) {\n            w1 = w;\n        } else {\n            w1 = (w + a) / (1 + w * a);\n        }\n\n        w1 = (w1 + 1) / 2;\n\n        var w2 = 1 - w1;\n\n        var rgba = {\n            r: rgb2.r * w1 + rgb1.r * w2,\n            g: rgb2.g * w1 + rgb1.g * w2,\n            b: rgb2.b * w1 + rgb1.b * w2,\n            a: rgb2.a * p  + rgb1.a * (1 - p)\n        };\n\n        return tinycolor(rgba);\n    };\n\n\n    // Readability Functions\n    // ---------------------\n    // <http://www.w3.org/TR/AERT#color-contrast>\n\n    // `readability`\n    // Analyze the 2 colors and returns an object with the following properties:\n    //    `brightness`: difference in brightness between the two colors\n    //    `color`: difference in color/hue between the two colors\n    tinycolor.readability = function(color1, color2) {\n        var c1 = tinycolor(color1);\n        var c2 = tinycolor(color2);\n        var rgb1 = c1.toRgb();\n        var rgb2 = c2.toRgb();\n        var brightnessA = c1.getBrightness();\n        var brightnessB = c2.getBrightness();\n        var colorDiff = (\n            Math.max(rgb1.r, rgb2.r) - Math.min(rgb1.r, rgb2.r) +\n            Math.max(rgb1.g, rgb2.g) - Math.min(rgb1.g, rgb2.g) +\n            Math.max(rgb1.b, rgb2.b) - Math.min(rgb1.b, rgb2.b)\n        );\n\n        return {\n            brightness: Math.abs(brightnessA - brightnessB),\n            color: colorDiff\n        };\n    };\n\n    // `readable`\n    // http://www.w3.org/TR/AERT#color-contrast\n    // Ensure that foreground and background color combinations provide sufficient contrast.\n    // *Example*\n    //    tinycolor.isReadable(\"#000\", \"#111\") => false\n    tinycolor.isReadable = function(color1, color2) {\n        var readability = tinycolor.readability(color1, color2);\n        return readability.brightness > 125 && readability.color > 500;\n    };\n\n    // `mostReadable`\n    // Given a base color and a list of possible foreground or background\n    // colors for that base, returns the most readable color.\n    // *Example*\n    //    tinycolor.mostReadable(\"#123\", [\"#fff\", \"#000\"]) => \"#000\"\n    tinycolor.mostReadable = function(baseColor, colorList) {\n        var bestColor = null;\n        var bestScore = 0;\n        var bestIsReadable = false;\n        for (var i=0; i < colorList.length; i++) {\n\n            // We normalize both around the \"acceptable\" breaking point,\n            // but rank brightness constrast higher than hue.\n\n            var readability = tinycolor.readability(baseColor, colorList[i]);\n            var readable = readability.brightness > 125 && readability.color > 500;\n            var score = 3 * (readability.brightness / 125) + (readability.color / 500);\n\n            if ((readable && ! bestIsReadable) ||\n                (readable && bestIsReadable && score > bestScore) ||\n                ((! readable) && (! bestIsReadable) && score > bestScore)) {\n                bestIsReadable = readable;\n                bestScore = score;\n                bestColor = tinycolor(colorList[i]);\n            }\n        }\n        return bestColor;\n    };\n\n\n    // Big List of Colors\n    // ------------------\n    // <http://www.w3.org/TR/css3-color/#svg-color>\n    var names = tinycolor.names = {\n        aliceblue: \"f0f8ff\",\n        antiquewhite: \"faebd7\",\n        aqua: \"0ff\",\n        aquamarine: \"7fffd4\",\n        azure: \"f0ffff\",\n        beige: \"f5f5dc\",\n        bisque: \"ffe4c4\",\n        black: \"000\",\n        blanchedalmond: \"ffebcd\",\n        blue: \"00f\",\n        blueviolet: \"8a2be2\",\n        brown: \"a52a2a\",\n        burlywood: \"deb887\",\n        burntsienna: \"ea7e5d\",\n        cadetblue: \"5f9ea0\",\n        chartreuse: \"7fff00\",\n        chocolate: \"d2691e\",\n        coral: \"ff7f50\",\n        cornflowerblue: \"6495ed\",\n        cornsilk: \"fff8dc\",\n        crimson: \"dc143c\",\n        cyan: \"0ff\",\n        darkblue: \"00008b\",\n        darkcyan: \"008b8b\",\n        darkgoldenrod: \"b8860b\",\n        darkgray: \"a9a9a9\",\n        darkgreen: \"006400\",\n        darkgrey: \"a9a9a9\",\n        darkkhaki: \"bdb76b\",\n        darkmagenta: \"8b008b\",\n        darkolivegreen: \"556b2f\",\n        darkorange: \"ff8c00\",\n        darkorchid: \"9932cc\",\n        darkred: \"8b0000\",\n        darksalmon: \"e9967a\",\n        darkseagreen: \"8fbc8f\",\n        darkslateblue: \"483d8b\",\n        darkslategray: \"2f4f4f\",\n        darkslategrey: \"2f4f4f\",\n        darkturquoise: \"00ced1\",\n        darkviolet: \"9400d3\",\n        deeppink: \"ff1493\",\n        deepskyblue: \"00bfff\",\n        dimgray: \"696969\",\n        dimgrey: \"696969\",\n        dodgerblue: \"1e90ff\",\n        firebrick: \"b22222\",\n        floralwhite: \"fffaf0\",\n        forestgreen: \"228b22\",\n        fuchsia: \"f0f\",\n        gainsboro: \"dcdcdc\",\n        ghostwhite: \"f8f8ff\",\n        gold: \"ffd700\",\n        goldenrod: \"daa520\",\n        gray: \"808080\",\n        green: \"008000\",\n        greenyellow: \"adff2f\",\n        grey: \"808080\",\n        honeydew: \"f0fff0\",\n        hotpink: \"ff69b4\",\n        indianred: \"cd5c5c\",\n        indigo: \"4b0082\",\n        ivory: \"fffff0\",\n        khaki: \"f0e68c\",\n        lavender: \"e6e6fa\",\n        lavenderblush: \"fff0f5\",\n        lawngreen: \"7cfc00\",\n        lemonchiffon: \"fffacd\",\n        lightblue: \"add8e6\",\n        lightcoral: \"f08080\",\n        lightcyan: \"e0ffff\",\n        lightgoldenrodyellow: \"fafad2\",\n        lightgray: \"d3d3d3\",\n        lightgreen: \"90ee90\",\n        lightgrey: \"d3d3d3\",\n        lightpink: \"ffb6c1\",\n        lightsalmon: \"ffa07a\",\n        lightseagreen: \"20b2aa\",\n        lightskyblue: \"87cefa\",\n        lightslategray: \"789\",\n        lightslategrey: \"789\",\n        lightsteelblue: \"b0c4de\",\n        lightyellow: \"ffffe0\",\n        lime: \"0f0\",\n        limegreen: \"32cd32\",\n        linen: \"faf0e6\",\n        magenta: \"f0f\",\n        maroon: \"800000\",\n        mediumaquamarine: \"66cdaa\",\n        mediumblue: \"0000cd\",\n        mediumorchid: \"ba55d3\",\n        mediumpurple: \"9370db\",\n        mediumseagreen: \"3cb371\",\n        mediumslateblue: \"7b68ee\",\n        mediumspringgreen: \"00fa9a\",\n        mediumturquoise: \"48d1cc\",\n        mediumvioletred: \"c71585\",\n        midnightblue: \"191970\",\n        mintcream: \"f5fffa\",\n        mistyrose: \"ffe4e1\",\n        moccasin: \"ffe4b5\",\n        navajowhite: \"ffdead\",\n        navy: \"000080\",\n        oldlace: \"fdf5e6\",\n        olive: \"808000\",\n        olivedrab: \"6b8e23\",\n        orange: \"ffa500\",\n        orangered: \"ff4500\",\n        orchid: \"da70d6\",\n        palegoldenrod: \"eee8aa\",\n        palegreen: \"98fb98\",\n        paleturquoise: \"afeeee\",\n        palevioletred: \"db7093\",\n        papayawhip: \"ffefd5\",\n        peachpuff: \"ffdab9\",\n        peru: \"cd853f\",\n        pink: \"ffc0cb\",\n        plum: \"dda0dd\",\n        powderblue: \"b0e0e6\",\n        purple: \"800080\",\n        rebeccapurple: \"663399\",\n        red: \"f00\",\n        rosybrown: \"bc8f8f\",\n        royalblue: \"4169e1\",\n        saddlebrown: \"8b4513\",\n        salmon: \"fa8072\",\n        sandybrown: \"f4a460\",\n        seagreen: \"2e8b57\",\n        seashell: \"fff5ee\",\n        sienna: \"a0522d\",\n        silver: \"c0c0c0\",\n        skyblue: \"87ceeb\",\n        slateblue: \"6a5acd\",\n        slategray: \"708090\",\n        slategrey: \"708090\",\n        snow: \"fffafa\",\n        springgreen: \"00ff7f\",\n        steelblue: \"4682b4\",\n        tan: \"d2b48c\",\n        teal: \"008080\",\n        thistle: \"d8bfd8\",\n        tomato: \"ff6347\",\n        turquoise: \"40e0d0\",\n        violet: \"ee82ee\",\n        wheat: \"f5deb3\",\n        white: \"fff\",\n        whitesmoke: \"f5f5f5\",\n        yellow: \"ff0\",\n        yellowgreen: \"9acd32\"\n    };\n\n    // Make it easy to access colors via `hexNames[hex]`\n    var hexNames = tinycolor.hexNames = flip(names);\n\n\n    // Utilities\n    // ---------\n\n    // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n    function flip(o) {\n        var flipped = { };\n        for (var i in o) {\n            if (o.hasOwnProperty(i)) {\n                flipped[o[i]] = i;\n            }\n        }\n        return flipped;\n    }\n\n    // Return a valid alpha value [0,1] with all invalid values being set to 1\n    function boundAlpha(a) {\n        a = parseFloat(a);\n\n        if (isNaN(a) || a < 0 || a > 1) {\n            a = 1;\n        }\n\n        return a;\n    }\n\n    // Take input from [0, n] and return it as [0, 1]\n    function bound01(n, max) {\n        if (isOnePointZero(n)) { n = \"100%\"; }\n\n        var processPercent = isPercentage(n);\n        n = mathMin(max, mathMax(0, parseFloat(n)));\n\n        // Automatically convert percentage into number\n        if (processPercent) {\n            n = parseInt(n * max, 10) / 100;\n        }\n\n        // Handle floating point rounding errors\n        if ((math.abs(n - max) < 0.000001)) {\n            return 1;\n        }\n\n        // Convert into [0, 1] range if it isn't already\n        return (n % max) / parseFloat(max);\n    }\n\n    // Force a number between 0 and 1\n    function clamp01(val) {\n        return mathMin(1, mathMax(0, val));\n    }\n\n    // Parse a base-16 hex value into a base-10 integer\n    function parseIntFromHex(val) {\n        return parseInt(val, 16);\n    }\n\n    // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n    function isOnePointZero(n) {\n        return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n    }\n\n    // Check to see if string passed in is a percentage\n    function isPercentage(n) {\n        return typeof n === \"string\" && n.indexOf('%') != -1;\n    }\n\n    // Force a hex value to have 2 characters\n    function pad2(c) {\n        return c.length == 1 ? '0' + c : '' + c;\n    }\n\n    // Replace a decimal with it's percentage value\n    function convertToPercentage(n) {\n        if (n <= 1) {\n            n = (n * 100) + \"%\";\n        }\n\n        return n;\n    }\n\n    // Converts a decimal to a hex value\n    function convertDecimalToHex(d) {\n        return Math.round(parseFloat(d) * 255).toString(16);\n    }\n    // Converts a hex value to a decimal\n    function convertHexToDecimal(h) {\n        return (parseIntFromHex(h) / 255);\n    }\n\n    var matchers = (function() {\n\n        // <http://www.w3.org/TR/css3-values/#integers>\n        var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n        // <http://www.w3.org/TR/css3-values/#number-value>\n        var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n        // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n        var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n        // Actual matching.\n        // Parentheses and commas are optional, but not required.\n        // Whitespace can take the place of commas or opening paren\n        var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n        var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n        return {\n            rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n            rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n            hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n            hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n            hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n            hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n            hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n            hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n            hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n        };\n    })();\n\n    // `stringInputToObject`\n    // Permissive string parsing.  Take in a number of formats, and output an object\n    // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n    function stringInputToObject(color) {\n\n        color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n        var named = false;\n        if (names[color]) {\n            color = names[color];\n            named = true;\n        }\n        else if (color == 'transparent') {\n            return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n        }\n\n        // Try to match string input using regular expressions.\n        // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n        // Just return an object and let the conversion functions handle that.\n        // This way the result will be the same whether the tinycolor is initialized with string or object.\n        var match;\n        if ((match = matchers.rgb.exec(color))) {\n            return { r: match[1], g: match[2], b: match[3] };\n        }\n        if ((match = matchers.rgba.exec(color))) {\n            return { r: match[1], g: match[2], b: match[3], a: match[4] };\n        }\n        if ((match = matchers.hsl.exec(color))) {\n            return { h: match[1], s: match[2], l: match[3] };\n        }\n        if ((match = matchers.hsla.exec(color))) {\n            return { h: match[1], s: match[2], l: match[3], a: match[4] };\n        }\n        if ((match = matchers.hsv.exec(color))) {\n            return { h: match[1], s: match[2], v: match[3] };\n        }\n        if ((match = matchers.hsva.exec(color))) {\n            return { h: match[1], s: match[2], v: match[3], a: match[4] };\n        }\n        if ((match = matchers.hex8.exec(color))) {\n            return {\n                a: convertHexToDecimal(match[1]),\n                r: parseIntFromHex(match[2]),\n                g: parseIntFromHex(match[3]),\n                b: parseIntFromHex(match[4]),\n                format: named ? \"name\" : \"hex8\"\n            };\n        }\n        if ((match = matchers.hex6.exec(color))) {\n            return {\n                r: parseIntFromHex(match[1]),\n                g: parseIntFromHex(match[2]),\n                b: parseIntFromHex(match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n        if ((match = matchers.hex3.exec(color))) {\n            return {\n                r: parseIntFromHex(match[1] + '' + match[1]),\n                g: parseIntFromHex(match[2] + '' + match[2]),\n                b: parseIntFromHex(match[3] + '' + match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n\n        return false;\n    }\n\n    window.tinycolor = tinycolor;\n    })();\n\n    $(function () {\n        if ($.fn.spectrum.load) {\n            $.fn.spectrum.processNativeColorInputs();\n        }\n    });\n\n});\n","/*! jQuery UI - v1.13.3 - 2024-04-26\n* https://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright OpenJS Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\t\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.13.3\";\n\n\n/*!\n * jQuery UI Widget 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n\n// Create a local jQuery because jQuery Color relies on it and the\n// global may not exist with AMD and a custom build (#10199).\n// This module is a noop if used as a regular AMD module.\n// eslint-disable-next-line no-unused-vars\nvar jQuery = $;\n\n\n/*!\n * jQuery Color Animations v2.2.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * Date: Sun May 10 09:02:36 2020 +0200\n */\n\n\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( getType( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n\n/*!\n * jQuery UI Effects 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/category/effects-core/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\";\n\n$.effects = {\n\teffect: {}\n};\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([\\da-z])/gi, function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {\n\t$.expr.pseudos.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.pseudos.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.13.3\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( typeof options === \"function\" ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( typeof speed === \"function\" ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( typeof option === \"function\" ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated pseudo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( typeof complete === \"function\" ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" );\n\n\t\ttransfer\n\t\t\t.appendTo( \"body\" )\n\t\t\t.addClass( options.className )\n\t\t\t.css( {\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: element.innerHeight(),\n\t\t\t\twidth: element.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t} )\n\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tif ( typeof done === \"function\" ) {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: https://api.jqueryui.com/blind-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/bounce-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: https://api.jqueryui.com/clip-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: https://api.jqueryui.com/drop-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/explode-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: https://api.jqueryui.com/fade-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: https://api.jqueryui.com/fold-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: https://api.jqueryui.com/highlight-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: https://api.jqueryui.com/size-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\tdelete from.outerHeight;\n\tdelete from.outerWidth;\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: https://api.jqueryui.com/scale-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: https://api.jqueryui.com/puff-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: https://api.jqueryui.com/pulsate-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/shake-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: https://api.jqueryui.com/slide-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: https://api.jqueryui.com/transfer-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n/*!\n * jQuery UI Focusable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility === \"visible\";\n}\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn._form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element._form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.8.x and newer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.8+ Support\n//>>group: Core\n//>>description: Support version 1.8.x and newer of jQuery core\n\n\n// Support: jQuery 1.9.x or older\n// $.expr[ \":\" ] is deprecated.\nif ( !$.expr.pseudos ) {\n\t$.expr.pseudos = $.expr[ \":\" ];\n}\n\n// Support: jQuery 1.11.x or older\n// $.unique has been renamed to $.uniqueSort\nif ( !$.uniqueSort ) {\n\t$.uniqueSort = $.unique;\n}\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tvar fcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t};\n\n\t$.escapeSelector = function( sel ) {\n\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Labels 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n\nvar tabbable = $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Accordion 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/accordion/\n//>>demos: https://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: function( elem ) {\n\t\t\treturn elem.find( \"> li > :first-child\" ).add( elem.find( \"> :not(li)\" ).even() );\n\t\t},\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tif ( typeof this.options.header === \"function\" ) {\n\t\t\tthis.headers = this.options.header( this.element );\n\t\t} else {\n\t\t\tthis.headers = this.element.find( this.options.header );\n\t\t}\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n/*!\n * jQuery UI Menu 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: https://api.jqueryui.com/menu/\n//>>demos: https://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.lastMousePosition = { x: null, y: null };\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tthis._activateItem( event );\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": \"_activateItem\",\n\t\t\t\"mousemove .ui-menu-item\": \"_activateItem\",\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this._menuItems().first();\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event, true );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_activateItem: function( event ) {\n\n\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t// is over an item in the menu\n\t\tif ( this.previousFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)\n\t\tif ( event.clientX === this.lastMousePosition.x &&\n\t\t\t\tevent.clientY === this.lastMousePosition.y ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastMousePosition = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t};\n\n\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\ttarget = $( event.currentTarget );\n\n\t\t// Ignore bubbled events on parent items, see #11641\n\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the item is already active, there's nothing to do\n\t\tif ( target.is( \".ui-state-active\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\tnull, \"ui-state-active\" );\n\t\tthis.focus( event, target );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, all ? 0 : this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active && this._menuItems( this.active.children( \".ui-menu\" ) ).first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_menuItems: function( menu ) {\n\t\treturn ( menu || this.element )\n\t\t\t.find( this.options.items )\n\t\t\t.filter( \".ui-menu-item\" );\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.last();\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.first();\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this._menuItems( this.activeMenu )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\tString.prototype.trim.call(\n\t\t\t\t\t\t\t\t$( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: https://api.jqueryui.com/autocomplete/\n//>>demos: https://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\tliveRegionTimer: null,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\n\t\t\t// Support: IE 11 only, Edge <= 14\n\t\t\t// For other browsers, we preventDefault() on the mousedown event\n\t\t\t// to keep the dropdown from taking focus from the input. This doesn't\n\t\t\t// work for IE/Edge, causing problems with selection and scrolling (#9638)\n\t\t\t// Happily, IE and Edge support an \"unselectable\" attribute that\n\t\t\t// prevents an element from receiving focus, exactly what we want here.\n\t\t\t.attr( {\n\t\t\t\t\"unselectable\": \"on\"\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && String.prototype.trim.call( label ).length ) {\n\t\t\t\t\tclearTimeout( this.liveRegionTimer );\n\t\t\t\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\t\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( label ) );\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( Array.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}.bind( this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t\treturn this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tclearTimeout( this.liveRegionTimer );\n\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( message ) );\n\t\t}, 100 );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: https://api.jqueryui.com/controlgroup/\n//>>demos: https://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.uniqueSort( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = String.prototype.trim.call( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: https://api.jqueryui.com/checkboxradio/\n//>>demos: https://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels, labelContents;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\t// The label contents could be text, html, or a mix. We wrap all elements\n\t\t// and read the wrapper's `innerHTML` to get a string representation of\n\t\t// the label, without the input as part of it.\n\t\tlabelContents = this.label.contents().not( this.element[ 0 ] );\n\n\t\tif ( labelContents.length ) {\n\t\t\tthis.originalLabel += labelContents\n\t\t\t\t.clone()\n\t\t\t\t.wrapAll( \"<div></div>\" )\n\t\t\t\t.parent()\n\t\t\t\t.html();\n\t\t}\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + $.escapeSelector( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this )._form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: https://api.jqueryui.com/button/\n//>>demos: https://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.trigger( \"blur\" );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function( options ) {\n\t\t\tvar isMethodCall = typeof options === \"string\";\n\t\t\tvar args = Array.prototype.slice.call( arguments, 1 );\n\t\t\tvar returnValue = this;\n\n\t\t\tif ( isMethodCall ) {\n\n\t\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t\t// return undefined instead of the jQuery instance\n\t\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\t\treturnValue = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthis.each( function() {\n\t\t\t\t\t\tvar methodValue;\n\t\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ?\n\t\t\t\t\t\t\t\"button\" :\n\t\t\t\t\t\t\t\"checkboxradio\";\n\t\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\t\treturn $.error( \"cannot call methods on button\" +\n\t\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for button\" +\n\t\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Allow multiple hashes to be passed on init\n\t\t\t\tif ( args.length ) {\n\t\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t\t}\n\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ? \"button\" : \"checkboxradio\";\n\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( name === \"button\" ) {\n\t\t\t\t\t\t\torig.call( $( this ), options );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$( this ).checkboxradio( $.extend( { icon: false }, options ) );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n/* eslint-disable max-len, camelcase */\n/*!\n * jQuery UI Datepicker 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: https://api.jqueryui.com/datepicker/\n//>>demos: https://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.extend( $.ui, { datepicker: { version: \"1.13.3\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n\t\t\t\"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\", // Additional text to append to the year in the month headers,\n\t\tselectMonthLabel: \"Select month\", // Invisible label for month selector\n\t\tselectYearLabel: \"Select year\" // Invisible label for year selector\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tonUpdateDatepicker: null, // Define a callback function when the datepicker is updated\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span>\" )\n\t\t\t\t.addClass( this._appendClass )\n\t\t\t\t.text( appendText );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\n\t\t\tif ( this._get( inst, \"buttonImageOnly\" ) ) {\n\t\t\t\tinst.trigger = $( \"<img>\" )\n\t\t\t\t\t.addClass( this._triggerClass )\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tinst.trigger = $( \"<button type='button'>\" )\n\t\t\t\t\t.addClass( this._triggerClass );\n\t\t\t\tif ( buttonImage ) {\n\t\t\t\t\tinst.trigger.html(\n\t\t\t\t\t\t$( \"<img>\" )\n\t\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinst.trigger.text( buttonText );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// https://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t\tthis._curInst = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = false;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = true;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t} catch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t} catch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" ),\n\t\t\tonUpdateDatepicker = $.datepicker._get( inst, \"onUpdateDatepicker\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year\" ).first().replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\n\t\tif ( onUpdateDatepicker ) {\n\t\t\tonUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset, period );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = parseInt( $( \"a\", td ).attr( \"data-date\" ) );\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( document ).find( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"prev\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tprev = \"\";\n\t\t} else {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"next\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tnext = \"\";\n\t\t} else {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.attr( \"class\", \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = \"\";\n\t\tif ( !inst.inline ) {\n\t\t\tcontrols = $( \"<button>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"class\": \"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"hide\",\n\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t} )\n\t\t\t\t.text( this._get( inst, \"closeText\" ) )[ 0 ].outerHTML;\n\t\t}\n\n\t\tbuttonPanel = \"\";\n\t\tif ( showButtonPanel ) {\n\t\t\tbuttonPanel = $( \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" )\n\t\t\t\t.append( isRTL ? controls : \"\" )\n\t\t\t\t.append( this._isInRange( inst, gotoDate ) ?\n\t\t\t\t\t$( \"<button>\" )\n\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\"class\": \"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\",\n\t\t\t\t\t\t\t\"data-handler\": \"today\",\n\t\t\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.text( currentText ) :\n\t\t\t\t\t\"\" )\n\t\t\t\t.append( isRTL ? \"\" : controls )[ 0 ].outerHTML;\n\t\t}\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#' aria-current='\" + ( printDate.getTime() === currentDate.getTime() ? \"true\" : \"false\" ) + // mark date as selected for screen reader\n\t\t\t\t\t\t\t\"' data-date='\" + printDate.getDate() + // store date as data\n\t\t\t\t\t\t\t\"'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\tselectMonthLabel = this._get( inst, \"selectMonthLabel\" ),\n\t\t\tselectYearLabel = this._get( inst, \"selectYearLabel\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' aria-label='\" + selectMonthLabel + \"' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' aria-label='\" + selectYearLabel + \"' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ]\n\t\t\t\t.apply( $.datepicker, [ this ].concat( otherArgs ) );\n\t\t} else {\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t\t}\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.13.3\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: https://api.jqueryui.com/resizable/\n//>>demos: https://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\ttry {\n\t\t\tel[ scroll ] = 1;\n\t\t\thas = ( el[ scroll ] > 0 );\n\t\t\tel[ scroll ] = 0;\n\t\t} catch ( e ) {\n\n\t\t\t// `el` might be a string, then setting `scroll` will throw\n\t\t\t// an error in strict mode; ignore it.\n\t\t}\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper'></div>\" ).css( {\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\t\tthis._addedHandles.remove();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" );\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tcase \"aspectRatio\":\n\t\t\tthis._aspectRatio = !!value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tthis._addedHandles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = String.prototype.trim.call( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tif ( !this.element.children( this.handles[ handle ] ).length ) {\n\t\t\t\t\tthis.element.append( axis );\n\t\t\t\t\tthis._addedHandles = this._addedHandles.add( axis );\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._addedHandles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t\tthis.helper.width( props.width );\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t\tthis.helper.height( props.height );\n\t\t}\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div></div>\" ).css( { overflow: \"hidden\" } );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\tif ( n !== \"resize\" ) {\n\t\t\tthis._trigger( n, event, this.ui() );\n\t\t}\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll( ce ) ? ce.scrollHeight : ch );\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.css( \"width\" ) ), height: parseFloat( el.css( \"height\" ) ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: https://api.jqueryui.com/dialog/\n//>>demos: https://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon opening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_restoreTabbableFocus: function() {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\tif ( !isActive ) {\n\t\t\tthis._focusTabbable();\n\t\t}\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tevent.preventDefault();\n\t\tthis._restoreTabbableFocus();\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( this._restoreTabbableFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.first(),\n\t\t\t\t\tlast = tabbables.last();\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( \"<span>\" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = typeof props === \"function\" ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar jqMinor = $.fn.jquery.substring( 0, 4 );\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// This doesn't use `_on()` because it is a shared event handler\n\t\t\t// across all open modal dialogs.\n\t\t\tthis.document.on( \"focusin.ui-dialog\", function( event ) {\n\t\t\t\tif ( isOpening ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar instance = this._trackingInstances()[ 0 ];\n\t\t\t\tif ( !instance._allowInteraction( event ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tinstance._focusTabbable();\n\n\t\t\t\t\t// Support: jQuery >=3.4 <3.7 only\n\t\t\t\t\t// In jQuery 3.4-3.6, there are multiple issues with focus/blur\n\t\t\t\t\t// trigger chains or when triggering is done on a hidden element\n\t\t\t\t\t// at least once.\n\t\t\t\t\t// Trigger focus in a delay in addition if needed to avoid the issues.\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4382\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4856\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4950\n\t\t\t\t\tif ( jqMinor === \"3.4.\" || jqMinor === \"3.5.\" || jqMinor === \"3.6.\" ) {\n\t\t\t\t\t\tinstance._delay( instance._restoreTabbableFocus );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind( this ) );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document.off( \"focusin.ui-dialog\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Droppable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: https://api.jqueryui.com/droppable/\n//>>demos: https://jqueryui.com/droppable/\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = typeof accept === \"function\" ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\tif ( o.addClasses ) {\n\t\t\tthis._addClass( \"ui-droppable\" );\n\t\t}\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = typeof value === \"function\" ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\t$.ui.intersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.14 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\n$.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\t$.ui.intersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Progressbar 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/progressbar/\n//>>demos: https://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: https://api.jqueryui.com/selectable/\n//>>demos: https://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) {\n\t\t\ttmp = x2; x2 = x1; x1 = tmp;\n\t\t}\n\t\tif ( y1 > y2 ) {\n\t\t\ttmp = y2; y2 = y1; y1 = tmp;\n\t\t}\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/selectmenu/\n//>>demos: https://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.trigger( \"focus\" );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\n\t\tif ( item.hidden ) {\n\t\t\tli.prop( \"hidden\", true );\n\t\t} else {\n\t\t\tthis._setText( wrapper, item.label );\n\t\t}\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.trigger( \"focus\" );\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\t$.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\thidden: optgroup.prop( \"hidden\" ) || option.prop( \"hidden\" ),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: https://api.jqueryui.com/slider/\n//>>demos: https://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( Array.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( Array.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( Array.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Sortable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: https://api.jqueryui.com/sortable/\n//>>demos: https://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Spinner 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: https://api.jqueryui.com/spinner/\n//>>demos: https://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nfunction spinnerModifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\tvar isActive = this.element[ 0 ] === activeElement;\n\n\t\t\tif ( !isActive || !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn typeof incremental === \"function\" ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifier( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifier( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifier( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifier( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifier( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: https://api.jqueryui.com/tabs/\n//>>demos: https://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.13.3\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// Decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( Array.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.uniqueSort( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( \"focus\" + this.eventNamespace, \".ui-tabs-anchor\", function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( Array.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\t$.escapeSelector( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// https://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// https://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( \"href\" ).replace( /#.*$/, \"\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: https://api.jqueryui.com/tooltip/\n//>>demos: https://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\t\t\tvar title = $( this ).attr( \"title\" );\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", String.prototype.trim.call( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = String.prototype.trim.call( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, 13 );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tvar targetElement = this._find( target );\n\t\t\t\tif ( targetElement ) {\n\t\t\t\t\tthis._removeTooltip( targetElement.tooltip );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n\n\n} );","/*\n * Gritter for jQuery\n * http://www.boedesign.com/\n *\n * Copyright (c) 2012 Jordan Boesch\n * Dual licensed under the MIT and GPL licenses.\n *\n * Date: February 24, 2012\n * Version: 1.7.4\n */\n\n(function($){\n \t\n\t/**\n\t* Set it up as an object under the jQuery namespace\n\t*/\n\t$.gritter = {};\n\t\n\t/**\n\t* Set up global options that the user can over-ride\n\t*/\n\t$.gritter.options = {\n\t\tposition: '',\n\t\tclass_name: '', // could be set to 'gritter-light' to use white notifications\n\t\tfade_in_speed: 'medium', // how fast notifications fade in\n\t\tfade_out_speed: 1000, // how fast the notices fade out\n\t\ttime: 6000 // hang on the screen for...\n\t}\n\t\n\t/**\n\t* Add a gritter notification to the screen\n\t* @see Gritter#add();\n\t*/\n\t$.gritter.add = function(params){\n\n\t\ttry {\n\t\t\treturn Gritter.add(params || {});\n\t\t} catch(e) {\n\t\t\n\t\t\tvar err = 'Gritter Error: ' + e;\n\t\t\t(typeof(console) != 'undefined' && console.error) ? \n\t\t\t\tconsole.error(err, params) : \n\t\t\t\talert(err);\n\t\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\t/**\n\t* Remove a gritter notification from the screen\n\t* @see Gritter#removeSpecific();\n\t*/\n\t$.gritter.remove = function(id, params){\n\t\tGritter.removeSpecific(id, params || {});\n\t}\n\t\n\t/**\n\t* Remove all notifications\n\t* @see Gritter#stop();\n\t*/\n\t$.gritter.removeAll = function(params){\n\t\tGritter.stop(params || {});\n\t}\n\t\n\t/**\n\t* Big fat Gritter object\n\t* @constructor (not really since its object literal)\n\t*/\n\tvar Gritter = {\n\t\t\n\t\t// Public - options to over-ride with $.gritter.options in \"add\"\n\t\tposition: '',\n\t\tfade_in_speed: '',\n\t\tfade_out_speed: '',\n\t\ttime: '',\n\t\t\n\t\t// Private - no touchy the private parts\n\t\t_custom_timer: 0,\n\t\t_item_count: 0,\n\t\t_is_setup: 0,\n\t\t_tpl_close: '<a class=\"gritter-close\" href=\"#\" tabindex=\"1\">Close Notification</a>',\n\t\t_tpl_title: '<span class=\"gritter-title\">[[title]]</span>',\n\t\t_tpl_item: '<div id=\"gritter-item-[[number]]\" class=\"gritter-item-wrapper [[item_class]]\" style=\"display:none\" role=\"alert\"><div class=\"gritter-top\"></div><div class=\"gritter-item\">[[close]][[image]]<div class=\"[[class_name]]\">[[title]]<p>[[text]]</p></div><div style=\"clear:both\"></div></div><div class=\"gritter-bottom\"></div></div>',\n\t\t_tpl_wrap: '<div id=\"gritter-notice-wrapper\"></div>',\n\t\t\n\t\t/**\n\t\t* Add a gritter notification to the screen\n\t\t* @param {Object} params The object that contains all the options for drawing the notification\n\t\t* @return {Integer} The specific numeric id to that gritter notification\n\t\t*/\n\t\tadd: function(params){\n\t\t\t// Handle straight text\n\t\t\tif(typeof(params) == 'string'){\n\t\t\t\tparams = {text:params};\n\t\t\t}\n\n\t\t\t// We might have some issues if we don't have a title or text!\n\t\t\tif(params.text === null){\n\t\t\t\tthrow 'You must supply \"text\" parameter.'; \n\t\t\t}\n\t\t\t\n\t\t\t// Check the options and set them once\n\t\t\tif(!this._is_setup){\n\t\t\t\tthis._runSetup();\n\t\t\t}\n\t\t\t\n\t\t\t// Basics\n\t\t\tvar title = params.title, \n\t\t\t\ttext = params.text,\n\t\t\t\timage = params.image || '',\n\t\t\t\tsticky = params.sticky || false,\n\t\t\t\titem_class = params.class_name || $.gritter.options.class_name,\n\t\t\t\tposition = $.gritter.options.position,\n\t\t\t\ttime_alive = params.time || '';\n\n\t\t\tthis._verifyWrapper();\n\t\t\t\n\t\t\tthis._item_count++;\n\t\t\tvar number = this._item_count, \n\t\t\t\ttmp = this._tpl_item;\n\t\t\t\n\t\t\t// Assign callbacks\n\t\t\t$(['before_open', 'after_open', 'before_close', 'after_close']).each(function(i, val){\n\t\t\t\tGritter['_' + val + '_' + number] = ($.isFunction(params[val])) ? params[val] : function(){}\n\t\t\t});\n\n\t\t\t// Reset\n\t\t\tthis._custom_timer = 0;\n\t\t\t\n\t\t\t// A custom fade time set\n\t\t\tif(time_alive){\n\t\t\t\tthis._custom_timer = time_alive;\n\t\t\t}\n\t\t\t\n\t\t\tvar image_str = (image != '') ? '<img src=\"' + image + '\" class=\"gritter-image\" />' : '',\n\t\t\t\tclass_name = (image != '') ? 'gritter-with-image' : 'gritter-without-image';\n\t\t\t\n\t\t\t// String replacements on the template\n\t\t\tif(title){\n\t\t\t\ttitle = this._str_replace('[[title]]',title,this._tpl_title);\n\t\t\t}else{\n\t\t\t\ttitle = '';\n\t\t\t}\n\t\t\t\n\t\t\ttmp = this._str_replace(\n\t\t\t\t['[[title]]', '[[text]]', '[[close]]', '[[image]]', '[[number]]', '[[class_name]]', '[[item_class]]'],\n\t\t\t\t[title, text, this._tpl_close, image_str, this._item_count, class_name, item_class], tmp\n\t\t\t);\n\n\t\t\t// If it's false, don't show another gritter message\n\t\t\tif(this['_before_open_' + number]() === false){\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$('#gritter-notice-wrapper').addClass(position).append(tmp);\n\t\t\t\n\t\t\tvar item = $('#gritter-item-' + this._item_count);\n\t\t\t\n\t\t\titem.fadeIn(this.fade_in_speed, function(){\n\t\t\t\tGritter['_after_open_' + number]($(this));\n\t\t\t});\n\t\t\t\n\t\t\tif(!sticky){\n\t\t\t\tthis._setFadeTimer(item, number);\n\t\t\t}\n\t\t\t\n\t\t\t// Bind the hover/unhover states\n\t\t\t$(item).bind('mouseenter mouseleave', function(event){\n\t\t\t\tif(event.type == 'mouseenter'){\n\t\t\t\t\tif(!sticky){ \n\t\t\t\t\t\tGritter._restoreItemIfFading($(this), number);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(!sticky){\n\t\t\t\t\t\tGritter._setFadeTimer($(this), number);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tGritter._hoverState($(this), event.type);\n\t\t\t});\n\t\t\t\n\t\t\t// Clicking (X) makes the perdy thing close\n\t\t\t$(item).find('.gritter-close').click(function(){\n\t\t\t\tGritter.removeSpecific(number, {}, null, true);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t\n\t\t\treturn number;\n\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* If we don't have any more gritter notifications, get rid of the wrapper using this check\n\t\t* @private\n\t\t* @param {Integer} unique_id The ID of the element that was just deleted, use it for a callback\n\t\t* @param {Object} e The jQuery element that we're going to perform the remove() action on\n\t\t* @param {Boolean} manual_close Did we close the gritter dialog with the (X) button\n\t\t*/\n\t\t_countRemoveWrapper: function(unique_id, e, manual_close){\n\t\t\t\n\t\t\t// Remove it then run the callback function\n\t\t\te.remove();\n\t\t\tthis['_after_close_' + unique_id](e, manual_close);\n\t\t\t\n\t\t\t// Check if the wrapper is empty, if it is.. remove the wrapper\n\t\t\tif($('.gritter-item-wrapper').length == 0){\n\t\t\t\t$('#gritter-notice-wrapper').remove();\n\t\t\t}\n\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Fade out an element after it's been on the screen for x amount of time\n\t\t* @private\n\t\t* @param {Object} e The jQuery element to get rid of\n\t\t* @param {Integer} unique_id The id of the element to remove\n\t\t* @param {Object} params An optional list of params to set fade speeds etc.\n\t\t* @param {Boolean} unbind_events Unbind the mouseenter/mouseleave events if they click (X)\n\t\t*/\n\t\t_fade: function(e, unique_id, params, unbind_events){\n\n\t\t\tvar params = params || {},\n\t\t\t\tfade = (typeof(params.fade) != 'undefined') ? params.fade : true,\n\t\t\t\tfade_out_speed = params.speed || this.fade_out_speed,\n\t\t\t\tmanual_close = unbind_events;\n\n\t\t\tthis['_before_close_' + unique_id](e, manual_close);\n\t\t\t\n\t\t\t// If this is true, then we are coming from clicking the (X)\n\t\t\tif(unbind_events){\n\t\t\t\te.unbind('mouseenter mouseleave');\n\t\t\t}\n\t\t\t\n\t\t\t// Fade it out or remove it\n\t\t\tif(fade){\n\t\t\t\n\t\t\t\te.animate({\n\t\t\t\t\topacity: 0\n\t\t\t\t}, fade_out_speed, function(){\n\t\t\t\t\te.animate({ height: 0 }, 300, function(){\n\t\t\t\t\t\tGritter._countRemoveWrapper(unique_id, e, manual_close);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\tthis._countRemoveWrapper(unique_id, e);\n\t\t\t\t\n\t\t\t}\n\t\t\t\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Perform actions based on the type of bind (mouseenter, mouseleave) \n\t\t* @private\n\t\t* @param {Object} e The jQuery element\n\t\t* @param {String} type The type of action we're performing: mouseenter or mouseleave\n\t\t*/\n\t\t_hoverState: function(e, type){\n\t\t\t\n\t\t\t// Change the border styles and add the (X) close button when you hover\n\t\t\tif(type == 'mouseenter'){\n\t\t\t\t\n\t\t\t\te.addClass('hover');\n\t\t\t\t\n\t\t\t\t// Show close button\n\t\t\t\te.find('.gritter-close').show();\n\t\t\t\t\t\t\n\t\t\t}\n\t\t\t// Remove the border styles and hide (X) close button when you mouse out\n\t\t\telse {\n\t\t\t\t\n\t\t\t\te.removeClass('hover');\n\t\t\t\t\n\t\t\t\t// Hide close button\n\t\t\t\te.find('.gritter-close').hide();\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Remove a specific notification based on an ID\n\t\t* @param {Integer} unique_id The ID used to delete a specific notification\n\t\t* @param {Object} params A set of options passed in to determine how to get rid of it\n\t\t* @param {Object} e The jQuery element that we're \"fading\" then removing\n\t\t* @param {Boolean} unbind_events If we clicked on the (X) we set this to true to unbind mouseenter/mouseleave\n\t\t*/\n\t\tremoveSpecific: function(unique_id, params, e, unbind_events){\n\t\t\t\n\t\t\tif(!e){\n\t\t\t\tvar e = $('#gritter-item-' + unique_id);\n\t\t\t}\n\n\t\t\t// We set the fourth param to let the _fade function know to \n\t\t\t// unbind the \"mouseleave\" event.  Once you click (X) there's no going back!\n\t\t\tthis._fade(e, unique_id, params || {}, unbind_events);\n\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* If the item is fading out and we hover over it, restore it!\n\t\t* @private\n\t\t* @param {Object} e The HTML element to remove\n\t\t* @param {Integer} unique_id The ID of the element\n\t\t*/\n\t\t_restoreItemIfFading: function(e, unique_id){\n\t\t\t\n\t\t\tclearTimeout(this['_int_id_' + unique_id]);\n\t\t\te.stop().css({ opacity: '', height: '' });\n\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Setup the global options - only once\n\t\t* @private\n\t\t*/\n\t\t_runSetup: function(){\n\t\t\n\t\t\tfor(opt in $.gritter.options){\n\t\t\t\tthis[opt] = $.gritter.options[opt];\n\t\t\t}\n\t\t\tthis._is_setup = 1;\n\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Set the notification to fade out after a certain amount of time\n\t\t* @private\n\t\t* @param {Object} item The HTML element we're dealing with\n\t\t* @param {Integer} unique_id The ID of the element\n\t\t*/\n\t\t_setFadeTimer: function(e, unique_id){\n\t\t\t\n\t\t\tvar timer_str = (this._custom_timer) ? this._custom_timer : this.time;\n\t\t\tthis['_int_id_' + unique_id] = setTimeout(function(){ \n\t\t\t\tGritter._fade(e, unique_id);\n\t\t\t}, timer_str);\n\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* Bring everything to a halt\n\t\t* @param {Object} params A list of callback functions to pass when all notifications are removed\n\t\t*/  \n\t\tstop: function(params){\n\t\t\t\n\t\t\t// callbacks (if passed)\n\t\t\tvar before_close = ($.isFunction(params.before_close)) ? params.before_close : function(){};\n\t\t\tvar after_close = ($.isFunction(params.after_close)) ? params.after_close : function(){};\n\t\t\t\n\t\t\tvar wrap = $('#gritter-notice-wrapper');\n\t\t\tbefore_close(wrap);\n\t\t\twrap.fadeOut(function(){\n\t\t\t\t$(this).remove();\n\t\t\t\tafter_close();\n\t\t\t});\n\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* An extremely handy PHP function ported to JS, works well for templating\n\t\t* @private\n\t\t* @param {String/Array} search A list of things to search for\n\t\t* @param {String/Array} replace A list of things to replace the searches with\n\t\t* @return {String} sa The output\n\t\t*/  \n\t\t_str_replace: function(search, replace, subject, count){\n\t\t\n\t\t\tvar i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,\n\t\t\t\tf = [].concat(search),\n\t\t\t\tr = [].concat(replace),\n\t\t\t\ts = subject,\n\t\t\t\tra = r instanceof Array, sa = s instanceof Array;\n\t\t\ts = [].concat(s);\n\t\t\t\n\t\t\tif(count){\n\t\t\t\tthis.window[count] = 0;\n\t\t\t}\n\t\t\n\t\t\tfor(i = 0, sl = s.length; i < sl; i++){\n\t\t\t\t\n\t\t\t\tif(s[i] === ''){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (j = 0, fl = f.length; j < fl; j++){\n\t\t\t\t\t\n\t\t\t\t\ttemp = s[i] + '';\n\t\t\t\t\trepl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];\n\t\t\t\t\ts[i] = (temp).split(f[j]).join(repl);\n\t\t\t\t\t\n\t\t\t\t\tif(count && s[i] !== temp){\n\t\t\t\t\t\tthis.window[count] += (temp.length-s[i].length) / f[j].length;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn sa ? s : s[0];\n\t\t\t\n\t\t},\n\t\t\n\t\t/**\n\t\t* A check to make sure we have something to wrap our notices with\n\t\t* @private\n\t\t*/  \n\t\t_verifyWrapper: function(){\n\t\t  \n\t\t\tif($('#gritter-notice-wrapper').length == 0){\n\t\t\t\t$('body').append(this._tpl_wrap);\n\t\t\t}\n\t\t\n\t\t}\n\t\t\n\t}\n\t\n})(jQuery);\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.7'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._deltaX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n    activeIndicator.removeAttribute('aria-current')\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n\n    // Explicitly return focus to the trigger element\n    this._element.focus()\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert.js'\nimport Button from './src/button.js'\nimport Carousel from './src/carousel.js'\nimport Collapse from './src/collapse.js'\nimport Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\nimport Offcanvas from './src/offcanvas.js'\nimport Popover from './src/popover.js'\nimport ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\nimport Toast from './src/toast.js'\nimport Tooltip from './src/tooltip.js'\n\nexport default {\n  Alert,\n  Button,\n  Carousel,\n  Collapse,\n  Dropdown,\n  Modal,\n  Offcanvas,\n  Popover,\n  ScrollSpy,\n  Tab,\n  Toast,\n  Tooltip\n}\n","/*! jQuery & Zepto Lazy v1.7.10 - http://jquery.eisbehr.de/lazy - MIT&GPL-2.0 license - Copyright 2012-2018 Daniel 'Eisbehr' Kern */\r\n!function(t,e){\"use strict\";function r(r,a,i,u,l){function f(){L=t.devicePixelRatio>1,i=c(i),a.delay>=0&&setTimeout(function(){s(!0)},a.delay),(a.delay<0||a.combined)&&(u.e=v(a.throttle,function(t){\"resize\"===t.type&&(w=B=-1),s(t.all)}),u.a=function(t){t=c(t),i.push.apply(i,t)},u.g=function(){return i=n(i).filter(function(){return!n(this).data(a.loadedName)})},u.f=function(t){for(var e=0;e<t.length;e++){var r=i.filter(function(){return this===t[e]});r.length&&s(!1,r)}},s(),n(a.appendScroll).on(\"scroll.\"+l+\" resize.\"+l,u.e))}function c(t){var i=a.defaultImage,o=a.placeholder,u=a.imageBase,l=a.srcsetAttribute,f=a.loaderAttribute,c=a._f||{};t=n(t).filter(function(){var t=n(this),r=m(this);return!t.data(a.handledName)&&(t.attr(a.attribute)||t.attr(l)||t.attr(f)||c[r]!==e)}).data(\"plugin_\"+a.name,r);for(var s=0,d=t.length;s<d;s++){var A=n(t[s]),g=m(t[s]),h=A.attr(a.imageBaseAttribute)||u;g===N&&h&&A.attr(l)&&A.attr(l,b(A.attr(l),h)),c[g]===e||A.attr(f)||A.attr(f,c[g]),g===N&&i&&!A.attr(E)?A.attr(E,i):g===N||!o||A.css(O)&&\"none\"!==A.css(O)||A.css(O,\"url('\"+o+\"')\")}return t}function s(t,e){if(!i.length)return void(a.autoDestroy&&r.destroy());for(var o=e||i,u=!1,l=a.imageBase||\"\",f=a.srcsetAttribute,c=a.handledName,s=0;s<o.length;s++)if(t||e||A(o[s])){var g=n(o[s]),h=m(o[s]),b=g.attr(a.attribute),v=g.attr(a.imageBaseAttribute)||l,p=g.attr(a.loaderAttribute);g.data(c)||a.visibleOnly&&!g.is(\":visible\")||!((b||g.attr(f))&&(h===N&&(v+b!==g.attr(E)||g.attr(f)!==g.attr(F))||h!==N&&v+b!==g.css(O))||p)||(u=!0,g.data(c,!0),d(g,h,v,p))}u&&(i=n(i).filter(function(){return!n(this).data(c)}))}function d(t,e,r,i){++z;var o=function(){y(\"onError\",t),p(),o=n.noop};y(\"beforeLoad\",t);var u=a.attribute,l=a.srcsetAttribute,f=a.sizesAttribute,c=a.retinaAttribute,s=a.removeAttribute,d=a.loadedName,A=t.attr(c);if(i){var g=function(){s&&t.removeAttr(a.loaderAttribute),t.data(d,!0),y(T,t),setTimeout(p,1),g=n.noop};t.off(I).one(I,o).one(D,g),y(i,t,function(e){e?(t.off(D),g()):(t.off(I),o())})||t.trigger(I)}else{var h=n(new Image);h.one(I,o).one(D,function(){t.hide(),e===N?t.attr(C,h.attr(C)).attr(F,h.attr(F)).attr(E,h.attr(E)):t.css(O,\"url('\"+h.attr(E)+\"')\"),t[a.effect](a.effectTime),s&&(t.removeAttr(u+\" \"+l+\" \"+c+\" \"+a.imageBaseAttribute),f!==C&&t.removeAttr(f)),t.data(d,!0),y(T,t),h.remove(),p()});var m=(L&&A?A:t.attr(u))||\"\";h.attr(C,t.attr(f)).attr(F,t.attr(l)).attr(E,m?r+m:null),h.complete&&h.trigger(D)}}function A(t){var e=t.getBoundingClientRect(),r=a.scrollDirection,n=a.threshold,i=h()+n>e.top&&-n<e.bottom,o=g()+n>e.left&&-n<e.right;return\"vertical\"===r?i:\"horizontal\"===r?o:i&&o}function g(){return w>=0?w:w=n(t).width()}function h(){return B>=0?B:B=n(t).height()}function m(t){return t.tagName.toLowerCase()}function b(t,e){if(e){var r=t.split(\",\");t=\"\";for(var a=0,n=r.length;a<n;a++)t+=e+r[a].trim()+(a!==n-1?\",\":\"\")}return t}function v(t,e){var n,i=0;return function(o,u){function l(){i=+new Date,e.call(r,o)}var f=+new Date-i;n&&clearTimeout(n),f>t||!a.enableThrottle||u?l():n=setTimeout(l,t-f)}}function p(){--z,i.length||z||y(\"onFinishedAll\")}function y(t,e,n){return!!(t=a[t])&&(t.apply(r,[].slice.call(arguments,1)),!0)}var z=0,w=-1,B=-1,L=!1,T=\"afterLoad\",D=\"load\",I=\"error\",N=\"img\",E=\"src\",F=\"srcset\",C=\"sizes\",O=\"background-image\";\"event\"===a.bind||o?f():n(t).on(D+\".\"+l,f)}function a(a,o){var u=this,l=n.extend({},u.config,o),f={},c=l.name+\"-\"+ ++i;return u.config=function(t,r){return r===e?l[t]:(l[t]=r,u)},u.addItems=function(t){return f.a&&f.a(\"string\"===n.type(t)?n(t):t),u},u.getItems=function(){return f.g?f.g():{}},u.update=function(t){return f.e&&f.e({},!t),u},u.force=function(t){return f.f&&f.f(\"string\"===n.type(t)?n(t):t),u},u.loadAll=function(){return f.e&&f.e({all:!0},!0),u},u.destroy=function(){return n(l.appendScroll).off(\".\"+c,f.e),n(t).off(\".\"+c),f={},e},r(u,l,a,f,c),l.chainable?a:u}var n=t.jQuery||t.Zepto,i=0,o=!1;n.fn.Lazy=n.fn.lazy=function(t){return new a(this,t)},n.Lazy=n.lazy=function(t,r,i){if(n.isFunction(r)&&(i=r,r=[]),n.isFunction(i)){t=n.isArray(t)?t:[t],r=n.isArray(r)?r:[r];for(var o=a.prototype.config,u=o._f||(o._f={}),l=0,f=t.length;l<f;l++)(o[t[l]]===e||n.isFunction(o[t[l]]))&&(o[t[l]]=i);for(var c=0,s=r.length;c<s;c++)u[r[c]]=t[0]}},a.prototype.config={name:\"lazy\",chainable:!0,autoDestroy:!0,bind:\"load\",threshold:500,visibleOnly:!1,appendScroll:t,scrollDirection:\"both\",imageBase:null,defaultImage:\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\",placeholder:null,delay:-1,combined:!1,attribute:\"data-src\",srcsetAttribute:\"data-srcset\",sizesAttribute:\"data-sizes\",retinaAttribute:\"data-retina\",loaderAttribute:\"data-loader\",imageBaseAttribute:\"data-imagebase\",removeAttribute:!0,handledName:\"handled\",loadedName:\"loaded\",effect:\"show\",effectTime:0,enableThrottle:!0,throttle:250,beforeLoad:e,afterLoad:e,onError:e,onFinishedAll:e},n(t).on(\"load\",function(){o=!0})}(window);","/*! jQuery & Zepto Lazy - All Plugins v1.7.10 - http://jquery.eisbehr.de/lazy - MIT&GPL-2.0 license - Copyright 2012-2018 Daniel 'Eisbehr' Kern */\r\n!function(t){function a(a,e,r,o){o=o?o.toUpperCase():\"GET\";var i;\"POST\"!==o&&\"PUT\"!==o||!a.config(\"ajaxCreateData\")||(i=a.config(\"ajaxCreateData\").apply(a,[e])),t.ajax({url:e.attr(\"data-src\"),type:\"POST\"===o||\"PUT\"===o?o:\"GET\",data:i,dataType:e.attr(\"data-type\")||\"html\",success:function(t){e.html(t),r(!0),a.config(\"removeAttribute\")&&e.removeAttr(\"data-src data-method data-type\")},error:function(){r(!1)}})}t.lazy(\"ajax\",function(t,e){a(this,t,e,t.attr(\"data-method\"))}),t.lazy(\"get\",function(t,e){a(this,t,e,\"GET\")}),t.lazy(\"post\",function(t,e){a(this,t,e,\"POST\")}),t.lazy(\"put\",function(t,e){a(this,t,e,\"PUT\")})}(window.jQuery||window.Zepto),function(t){t.lazy([\"av\",\"audio\",\"video\"],[\"audio\",\"video\"],function(a,e){var r=a[0].tagName.toLowerCase();if(\"audio\"===r||\"video\"===r){var o=a.find(\"data-src\"),i=a.find(\"data-track\"),n=0,c=function(){++n===o.length&&e(!1)},s=function(){var a=t(this),e=a[0].tagName.toLowerCase(),r=a.prop(\"attributes\"),o=t(\"data-src\"===e?\"<source>\":\"<track>\");\"data-src\"===e&&o.one(\"error\",c),t.each(r,function(t,a){o.attr(a.name,a.value)}),a.replaceWith(o)};a.one(\"loadedmetadata\",function(){e(!0)}).off(\"load error\").attr(\"poster\",a.attr(\"data-poster\")),o.length?o.each(s):a.attr(\"data-src\")?(t.each(a.attr(\"data-src\").split(\",\"),function(e,r){var o=r.split(\"|\");a.append(t(\"<source>\").one(\"error\",c).attr({src:o[0].trim(),type:o[1].trim()}))}),this.config(\"removeAttribute\")&&a.removeAttr(\"data-src\")):e(!1),i.length&&i.each(s)}else e(!1)})}(window.jQuery||window.Zepto),function(t){t.lazy([\"frame\",\"iframe\"],\"iframe\",function(a,e){var r=this;if(\"iframe\"===a[0].tagName.toLowerCase()){var o=a.attr(\"data-error-detect\");\"true\"!==o&&\"1\"!==o?(a.attr(\"src\",a.attr(\"data-src\")),r.config(\"removeAttribute\")&&a.removeAttr(\"data-src data-error-detect\")):t.ajax({url:a.attr(\"data-src\"),dataType:\"html\",crossDomain:!0,xhrFields:{withCredentials:!0},success:function(t){a.html(t).attr(\"src\",a.attr(\"data-src\")),r.config(\"removeAttribute\")&&a.removeAttr(\"data-src data-error-detect\")},error:function(){e(!1)}})}else e(!1)})}(window.jQuery||window.Zepto),function(t){t.lazy(\"noop\",function(){}),t.lazy(\"noop-success\",function(t,a){a(!0)}),t.lazy(\"noop-error\",function(t,a){a(!1)})}(window.jQuery||window.Zepto),function(t){function a(a,e,i){var n=a.prop(\"attributes\"),c=t(\"<\"+e+\">\");return t.each(n,function(t,a){\"srcset\"!==a.name&&a.name!==o||(a.value=r(a.value,i)),c.attr(a.name,a.value)}),a.replaceWith(c),c}function e(a,e,r){var o=t(\"<img>\").one(\"load\",function(){r(!0)}).one(\"error\",function(){r(!1)}).appendTo(a).attr(\"src\",e);o.complete&&o.load()}function r(t,a){if(a){var e=t.split(\",\");t=\"\";for(var r=0,o=e.length;r<o;r++)t+=a+e[r].trim()+(r!==o-1?\",\":\"\")}return t}var o=\"data-src\";t.lazy([\"pic\",\"picture\"],[\"picture\"],function(i,n){if(\"picture\"===i[0].tagName.toLowerCase()){var c=i.find(o),s=i.find(\"data-img\"),d=this.config(\"imageBase\")||\"\";c.length?(c.each(function(){a(t(this),\"source\",d)}),1===s.length?(s=a(s,\"img\",d),s.on(\"load\",function(){n(!0)}).on(\"error\",function(){n(!1)}),s.attr(\"src\",s.attr(o)),this.config(\"removeAttribute\")&&s.removeAttr(o)):i.attr(o)?(e(i,d+i.attr(o),n),this.config(\"removeAttribute\")&&i.removeAttr(o)):n(!1)):i.attr(\"data-srcset\")?(t(\"<source>\").attr({media:i.attr(\"data-media\"),sizes:i.attr(\"data-sizes\"),type:i.attr(\"data-type\"),srcset:r(i.attr(\"data-srcset\"),d)}).appendTo(i),e(i,d+i.attr(o),n),this.config(\"removeAttribute\")&&i.removeAttr(o+\" data-srcset data-media data-sizes data-type\")):n(!1)}else n(!1)})}(window.jQuery||window.Zepto),function(t){t.lazy([\"js\",\"javascript\",\"script\"],\"script\",function(t,a){\"script\"===t[0].tagName.toLowerCase()?(t.attr(\"src\",t.attr(\"data-src\")),this.config(\"removeAttribute\")&&t.removeAttr(\"data-src\")):a(!1)})}(window.jQuery||window.Zepto),function(t){t.lazy(\"vimeo\",function(t,a){\"iframe\"===t[0].tagName.toLowerCase()?(t.attr(\"src\",\"https://player.vimeo.com/video/\"+t.attr(\"data-src\")),this.config(\"removeAttribute\")&&t.removeAttr(\"data-src\")):a(!1)})}(window.jQuery||window.Zepto),function(t){t.lazy([\"yt\",\"youtube\"],function(t,a){if(\"iframe\"===t[0].tagName.toLowerCase()){var e=/1|true/.test(t.attr(\"data-nocookie\"));t.attr(\"src\",\"https://www.youtube\"+(e?\"-nocookie\":\"\")+\".com/embed/\"+t.attr(\"data-src\")+\"?rel=0&amp;showinfo=0\"),this.config(\"removeAttribute\")&&t.removeAttr(\"data-src\")}else a(!1)})}(window.jQuery||window.Zepto);","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","/*! js-cookie v3.0.5 | MIT */\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n    var current = global.Cookies;\n    var exports = global.Cookies = factory();\n    exports.noConflict = function () { global.Cookies = current; return exports; };\n  })());\n})(this, (function () { 'use strict';\n\n  /* eslint-disable no-var */\n  function assign (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        target[key] = source[key];\n      }\n    }\n    return target\n  }\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n  var defaultConverter = {\n    read: function (value) {\n      if (value[0] === '\"') {\n        value = value.slice(1, -1);\n      }\n      return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n    },\n    write: function (value) {\n      return encodeURIComponent(value).replace(\n        /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n        decodeURIComponent\n      )\n    }\n  };\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n\n  function init (converter, defaultAttributes) {\n    function set (name, value, attributes) {\n      if (typeof document === 'undefined') {\n        return\n      }\n\n      attributes = assign({}, defaultAttributes, attributes);\n\n      if (typeof attributes.expires === 'number') {\n        attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n      }\n      if (attributes.expires) {\n        attributes.expires = attributes.expires.toUTCString();\n      }\n\n      name = encodeURIComponent(name)\n        .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n        .replace(/[()]/g, escape);\n\n      var stringifiedAttributes = '';\n      for (var attributeName in attributes) {\n        if (!attributes[attributeName]) {\n          continue\n        }\n\n        stringifiedAttributes += '; ' + attributeName;\n\n        if (attributes[attributeName] === true) {\n          continue\n        }\n\n        // Considers RFC 6265 section 5.2:\n        // ...\n        // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n        //     character:\n        // Consume the characters of the unparsed-attributes up to,\n        // not including, the first %x3B (\";\") character.\n        // ...\n        stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n      }\n\n      return (document.cookie =\n        name + '=' + converter.write(value, name) + stringifiedAttributes)\n    }\n\n    function get (name) {\n      if (typeof document === 'undefined' || (arguments.length && !name)) {\n        return\n      }\n\n      // To prevent the for loop in the first place assign an empty array\n      // in case there are no cookies at all.\n      var cookies = document.cookie ? document.cookie.split('; ') : [];\n      var jar = {};\n      for (var i = 0; i < cookies.length; i++) {\n        var parts = cookies[i].split('=');\n        var value = parts.slice(1).join('=');\n\n        try {\n          var found = decodeURIComponent(parts[0]);\n          jar[found] = converter.read(value, found);\n\n          if (name === found) {\n            break\n          }\n        } catch (e) {}\n      }\n\n      return name ? jar[name] : jar\n    }\n\n    return Object.create(\n      {\n        set,\n        get,\n        remove: function (name, attributes) {\n          set(\n            name,\n            '',\n            assign({}, attributes, {\n              expires: -1\n            })\n          );\n        },\n        withAttributes: function (attributes) {\n          return init(this.converter, assign({}, this.attributes, attributes))\n        },\n        withConverter: function (converter) {\n          return init(assign({}, this.converter, converter), this.attributes)\n        }\n      },\n      {\n        attributes: { value: Object.freeze(defaultAttributes) },\n        converter: { value: Object.freeze(converter) }\n      }\n    )\n  }\n\n  var api = init(defaultConverter, { path: '/' });\n  /* eslint-enable no-var */\n\n  return api;\n\n}));\n","(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","'use strict';\n\nvar transportList = require('./transport-list');\n\nmodule.exports = require('./main')(transportList);\n\n// TODO can't get rid of this until all servers do\nif ('_sockjs_onload' in global) {\n  setTimeout(global._sockjs_onload, 1);\n}\n","'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction CloseEvent() {\n  Event.call(this);\n  this.initEvent('close', false, false);\n  this.wasClean = false;\n  this.code = 0;\n  this.reason = '';\n}\n\ninherits(CloseEvent, Event);\n\nmodule.exports = CloseEvent;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventTarget = require('./eventtarget')\n  ;\n\nfunction EventEmitter() {\n  EventTarget.call(this);\n}\n\ninherits(EventEmitter, EventTarget);\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  if (type) {\n    delete this._listeners[type];\n  } else {\n    this._listeners = {};\n  }\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n  var self = this\n    , fired = false;\n\n  function g() {\n    self.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  this.on(type, g);\n};\n\nEventEmitter.prototype.emit = function() {\n  var type = arguments[0];\n  var listeners = this._listeners[type];\n  if (!listeners) {\n    return;\n  }\n  // equivalent of Array.prototype.slice.call(arguments, 1);\n  var l = arguments.length;\n  var args = new Array(l - 1);\n  for (var ai = 1; ai < l; ai++) {\n    args[ai - 1] = arguments[ai];\n  }\n  for (var i = 0; i < listeners.length; i++) {\n    listeners[i].apply(this, args);\n  }\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;\nEventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;\n\nmodule.exports.EventEmitter = EventEmitter;\n","'use strict';\n\nfunction Event(eventType) {\n  this.type = eventType;\n}\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n  this.type = eventType;\n  this.bubbles = canBubble;\n  this.cancelable = cancelable;\n  this.timeStamp = +new Date();\n  return this;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n","'use strict';\n\n/* Simplified implementation of DOM2 EventTarget.\n *   http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget\n */\n\nfunction EventTarget() {\n  this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function(eventType, listener) {\n  if (!(eventType in this._listeners)) {\n    this._listeners[eventType] = [];\n  }\n  var arr = this._listeners[eventType];\n  // #4\n  if (arr.indexOf(listener) === -1) {\n    // Make a copy so as not to interfere with a current dispatchEvent.\n    arr = arr.concat([listener]);\n  }\n  this._listeners[eventType] = arr;\n};\n\nEventTarget.prototype.removeEventListener = function(eventType, listener) {\n  var arr = this._listeners[eventType];\n  if (!arr) {\n    return;\n  }\n  var idx = arr.indexOf(listener);\n  if (idx !== -1) {\n    if (arr.length > 1) {\n      // Make a copy so as not to interfere with a current dispatchEvent.\n      this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));\n    } else {\n      delete this._listeners[eventType];\n    }\n    return;\n  }\n};\n\nEventTarget.prototype.dispatchEvent = function() {\n  var event = arguments[0];\n  var t = event.type;\n  // equivalent of Array.prototype.slice.call(arguments, 0);\n  var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);\n  // TODO: This doesn't match the real behavior; per spec, onfoo get\n  // their place in line from the /first/ time they're set from\n  // non-null. Although WebKit bumps it to the end every time it's\n  // set.\n  if (this['on' + t]) {\n    this['on' + t].apply(this, args);\n  }\n  if (t in this._listeners) {\n    // Grab a reference to the listeners list. removeEventListener may alter the list.\n    var listeners = this._listeners[t];\n    for (var i = 0; i < listeners.length; i++) {\n      listeners[i].apply(this, args);\n    }\n  }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction TransportMessageEvent(data) {\n  Event.call(this);\n  this.initEvent('message', false, false);\n  this.data = data;\n}\n\ninherits(TransportMessageEvent, Event);\n\nmodule.exports = TransportMessageEvent;\n","'use strict';\n\nvar iframeUtils = require('./utils/iframe')\n  ;\n\nfunction FacadeJS(transport) {\n  this._transport = transport;\n  transport.on('message', this._transportMessage.bind(this));\n  transport.on('close', this._transportClose.bind(this));\n}\n\nFacadeJS.prototype._transportClose = function(code, reason) {\n  iframeUtils.postMessage('c', JSON.stringify([code, reason]));\n};\nFacadeJS.prototype._transportMessage = function(frame) {\n  iframeUtils.postMessage('t', frame);\n};\nFacadeJS.prototype._send = function(data) {\n  this._transport.send(data);\n};\nFacadeJS.prototype._close = function() {\n  this._transport.close();\n  this._transport.removeAllListeners();\n};\n\nmodule.exports = FacadeJS;\n","'use strict';\n\nvar urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , FacadeJS = require('./facade')\n  , InfoIframeReceiver = require('./info-iframe-receiver')\n  , iframeUtils = require('./utils/iframe')\n  , loc = require('./location')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:iframe-bootstrap');\n}\n\nmodule.exports = function(SockJS, availableTransports) {\n  var transportMap = {};\n  availableTransports.forEach(function(at) {\n    if (at.facadeTransport) {\n      transportMap[at.facadeTransport.transportName] = at.facadeTransport;\n    }\n  });\n\n  // hard-coded for the info iframe\n  // TODO see if we can make this more dynamic\n  transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver;\n  var parentOrigin;\n\n  /* eslint-disable camelcase */\n  SockJS.bootstrap_iframe = function() {\n    /* eslint-enable camelcase */\n    var facade;\n    iframeUtils.currentWindowId = loc.hash.slice(1);\n    var onMessage = function(e) {\n      if (e.source !== parent) {\n        return;\n      }\n      if (typeof parentOrigin === 'undefined') {\n        parentOrigin = e.origin;\n      }\n      if (e.origin !== parentOrigin) {\n        return;\n      }\n\n      var iframeMessage;\n      try {\n        iframeMessage = JSON.parse(e.data);\n      } catch (ignored) {\n        debug('bad json', e.data);\n        return;\n      }\n\n      if (iframeMessage.windowId !== iframeUtils.currentWindowId) {\n        return;\n      }\n      switch (iframeMessage.type) {\n      case 's':\n        var p;\n        try {\n          p = JSON.parse(iframeMessage.data);\n        } catch (ignored) {\n          debug('bad json', iframeMessage.data);\n          break;\n        }\n        var version = p[0];\n        var transport = p[1];\n        var transUrl = p[2];\n        var baseUrl = p[3];\n        debug(version, transport, transUrl, baseUrl);\n        // change this to semver logic\n        if (version !== SockJS.version) {\n          throw new Error('Incompatible SockJS! Main site uses:' +\n                    ' \"' + version + '\", the iframe:' +\n                    ' \"' + SockJS.version + '\".');\n        }\n\n        if (!urlUtils.isOriginEqual(transUrl, loc.href) ||\n            !urlUtils.isOriginEqual(baseUrl, loc.href)) {\n          throw new Error('Can\\'t connect to different domain from within an ' +\n                    'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')');\n        }\n        facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl));\n        break;\n      case 'm':\n        facade._send(iframeMessage.data);\n        break;\n      case 'c':\n        if (facade) {\n          facade._close();\n        }\n        facade = null;\n        break;\n      }\n    };\n\n    eventUtils.attachEvent('message', onMessage);\n\n    // Start\n    iframeUtils.postMessage('s');\n  };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , objectUtils = require('./utils/object')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-ajax');\n}\n\nfunction InfoAjax(url, AjaxObject) {\n  EventEmitter.call(this);\n\n  var self = this;\n  var t0 = +new Date();\n  this.xo = new AjaxObject('GET', url);\n\n  this.xo.once('finish', function(status, text) {\n    var info, rtt;\n    if (status === 200) {\n      rtt = (+new Date()) - t0;\n      if (text) {\n        try {\n          info = JSON.parse(text);\n        } catch (e) {\n          debug('bad json', text);\n        }\n      }\n\n      if (!objectUtils.isObject(info)) {\n        info = {};\n      }\n    }\n    self.emit('finish', info, rtt);\n    self.removeAllListeners();\n  });\n}\n\ninherits(InfoAjax, EventEmitter);\n\nInfoAjax.prototype.close = function() {\n  this.removeAllListeners();\n  this.xo.close();\n};\n\nmodule.exports = InfoAjax;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , XHRLocalObject = require('./transport/sender/xhr-local')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nfunction InfoReceiverIframe(transUrl) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.ir = new InfoAjax(transUrl, XHRLocalObject);\n  this.ir.once('finish', function(info, rtt) {\n    self.ir = null;\n    self.emit('message', JSON.stringify([info, rtt]));\n  });\n}\n\ninherits(InfoReceiverIframe, EventEmitter);\n\nInfoReceiverIframe.transportName = 'iframe-info-receiver';\n\nInfoReceiverIframe.prototype.close = function() {\n  if (this.ir) {\n    this.ir.close();\n    this.ir = null;\n  }\n  this.removeAllListeners();\n};\n\nmodule.exports = InfoReceiverIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , utils = require('./utils/event')\n  , IframeTransport = require('./transport/iframe')\n  , InfoReceiverIframe = require('./info-iframe-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-iframe');\n}\n\nfunction InfoIframe(baseUrl, url) {\n  var self = this;\n  EventEmitter.call(this);\n\n  var go = function() {\n    var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);\n\n    ifr.once('message', function(msg) {\n      if (msg) {\n        var d;\n        try {\n          d = JSON.parse(msg);\n        } catch (e) {\n          debug('bad json', msg);\n          self.emit('finish');\n          self.close();\n          return;\n        }\n\n        var info = d[0], rtt = d[1];\n        self.emit('finish', info, rtt);\n      }\n      self.close();\n    });\n\n    ifr.once('close', function() {\n      self.emit('finish');\n      self.close();\n    });\n  };\n\n  // TODO this seems the same as the 'needBody' from transports\n  if (!global.document.body) {\n    utils.attachEvent('load', go);\n  } else {\n    go();\n  }\n}\n\ninherits(InfoIframe, EventEmitter);\n\nInfoIframe.enabled = function() {\n  return IframeTransport.enabled();\n};\n\nInfoIframe.prototype.close = function() {\n  if (this.ifr) {\n    this.ifr.close();\n  }\n  this.removeAllListeners();\n  this.ifr = null;\n};\n\nmodule.exports = InfoIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , urlUtils = require('./utils/url')\n  , XDR = require('./transport/sender/xdr')\n  , XHRCors = require('./transport/sender/xhr-cors')\n  , XHRLocal = require('./transport/sender/xhr-local')\n  , XHRFake = require('./transport/sender/xhr-fake')\n  , InfoIframe = require('./info-iframe')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:info-receiver');\n}\n\nfunction InfoReceiver(baseUrl, urlInfo) {\n  debug(baseUrl);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self.doXhr(baseUrl, urlInfo);\n  }, 0);\n}\n\ninherits(InfoReceiver, EventEmitter);\n\n// TODO this is currently ignoring the list of available transports and the whitelist\n\nInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {\n  // determine method of CORS support (if needed)\n  if (urlInfo.sameOrigin) {\n    return new InfoAjax(url, XHRLocal);\n  }\n  if (XHRCors.enabled) {\n    return new InfoAjax(url, XHRCors);\n  }\n  if (XDR.enabled && urlInfo.sameScheme) {\n    return new InfoAjax(url, XDR);\n  }\n  if (InfoIframe.enabled()) {\n    return new InfoIframe(baseUrl, url);\n  }\n  return new InfoAjax(url, XHRFake);\n};\n\nInfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {\n  var self = this\n    , url = urlUtils.addPath(baseUrl, '/info')\n    ;\n  debug('doXhr', url);\n\n  this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);\n\n  this.timeoutRef = setTimeout(function() {\n    debug('timeout');\n    self._cleanup(false);\n    self.emit('finish');\n  }, InfoReceiver.timeout);\n\n  this.xo.once('finish', function(info, rtt) {\n    debug('finish', info, rtt);\n    self._cleanup(true);\n    self.emit('finish', info, rtt);\n  });\n};\n\nInfoReceiver.prototype._cleanup = function(wasClean) {\n  debug('_cleanup');\n  clearTimeout(this.timeoutRef);\n  this.timeoutRef = null;\n  if (!wasClean && this.xo) {\n    this.xo.close();\n  }\n  this.xo = null;\n};\n\nInfoReceiver.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  this._cleanup(false);\n};\n\nInfoReceiver.timeout = 8000;\n\nmodule.exports = InfoReceiver;\n","'use strict';\n\nmodule.exports = global.location || {\n  origin: 'http://localhost:80'\n, protocol: 'http:'\n, host: 'localhost'\n, port: 80\n, href: 'http://localhost/'\n, hash: ''\n};\n","'use strict';\n\nrequire('./shims');\n\nvar URL = require('url-parse')\n  , inherits = require('inherits')\n  , random = require('./utils/random')\n  , escape = require('./utils/escape')\n  , urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , transport = require('./utils/transport')\n  , objectUtils = require('./utils/object')\n  , browser = require('./utils/browser')\n  , log = require('./utils/log')\n  , Event = require('./event/event')\n  , EventTarget = require('./event/eventtarget')\n  , loc = require('./location')\n  , CloseEvent = require('./event/close')\n  , TransportMessageEvent = require('./event/trans-message')\n  , InfoReceiver = require('./info-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:main');\n}\n\nvar transports;\n\n// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface\nfunction SockJS(url, protocols, options) {\n  if (!(this instanceof SockJS)) {\n    return new SockJS(url, protocols, options);\n  }\n  if (arguments.length < 1) {\n    throw new TypeError(\"Failed to construct 'SockJS: 1 argument required, but only 0 present\");\n  }\n  EventTarget.call(this);\n\n  this.readyState = SockJS.CONNECTING;\n  this.extensions = '';\n  this.protocol = '';\n\n  // non-standard extension\n  options = options || {};\n  if (options.protocols_whitelist) {\n    log.warn(\"'protocols_whitelist' is DEPRECATED. Use 'transports' instead.\");\n  }\n  this._transportsWhitelist = options.transports;\n  this._transportOptions = options.transportOptions || {};\n  this._timeout = options.timeout || 0;\n\n  var sessionId = options.sessionId || 8;\n  if (typeof sessionId === 'function') {\n    this._generateSessionId = sessionId;\n  } else if (typeof sessionId === 'number') {\n    this._generateSessionId = function() {\n      return random.string(sessionId);\n    };\n  } else {\n    throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.');\n  }\n\n  this._server = options.server || random.numberString(1000);\n\n  // Step 1 of WS spec - parse and validate the url. Issue #8\n  var parsedUrl = new URL(url);\n  if (!parsedUrl.host || !parsedUrl.protocol) {\n    throw new SyntaxError(\"The URL '\" + url + \"' is invalid\");\n  } else if (parsedUrl.hash) {\n    throw new SyntaxError('The URL must not contain a fragment');\n  } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n    throw new SyntaxError(\"The URL's scheme must be either 'http:' or 'https:'. '\" + parsedUrl.protocol + \"' is not allowed.\");\n  }\n\n  var secure = parsedUrl.protocol === 'https:';\n  // Step 2 - don't allow secure origin with an insecure protocol\n  if (loc.protocol === 'https:' && !secure) {\n    // exception is 127.0.0.0/8 and ::1 urls\n    if (!urlUtils.isLoopbackAddr(parsedUrl.hostname)) {\n      throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS');\n    }\n  }\n\n  // Step 3 - check port access - no need here\n  // Step 4 - parse protocols argument\n  if (!protocols) {\n    protocols = [];\n  } else if (!Array.isArray(protocols)) {\n    protocols = [protocols];\n  }\n\n  // Step 5 - check protocols argument\n  var sortedProtocols = protocols.sort();\n  sortedProtocols.forEach(function(proto, i) {\n    if (!proto) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is invalid.\");\n    }\n    if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is duplicated.\");\n    }\n  });\n\n  // Step 6 - convert origin\n  var o = urlUtils.getOrigin(loc.href);\n  this._origin = o ? o.toLowerCase() : null;\n\n  // remove the trailing slash\n  parsedUrl.set('pathname', parsedUrl.pathname.replace(/\\/+$/, ''));\n\n  // store the sanitized url\n  this.url = parsedUrl.href;\n  debug('using url', this.url);\n\n  // Step 7 - start connection in background\n  // obtain server info\n  // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26\n  this._urlInfo = {\n    nullOrigin: !browser.hasDomain()\n  , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href)\n  , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)\n  };\n\n  this._ir = new InfoReceiver(this.url, this._urlInfo);\n  this._ir.once('finish', this._receiveInfo.bind(this));\n}\n\ninherits(SockJS, EventTarget);\n\nfunction userSetCode(code) {\n  return code === 1000 || (code >= 3000 && code <= 4999);\n}\n\nSockJS.prototype.close = function(code, reason) {\n  // Step 1\n  if (code && !userSetCode(code)) {\n    throw new Error('InvalidAccessError: Invalid code');\n  }\n  // Step 2.4 states the max is 123 bytes, but we are just checking length\n  if (reason && reason.length > 123) {\n    throw new SyntaxError('reason argument has an invalid length');\n  }\n\n  // Step 3.1\n  if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) {\n    return;\n  }\n\n  // TODO look at docs to determine how to set this\n  var wasClean = true;\n  this._close(code || 1000, reason || 'Normal closure', wasClean);\n};\n\nSockJS.prototype.send = function(data) {\n  // #13 - convert anything non-string to string\n  // TODO this currently turns objects into [object Object]\n  if (typeof data !== 'string') {\n    data = '' + data;\n  }\n  if (this.readyState === SockJS.CONNECTING) {\n    throw new Error('InvalidStateError: The connection has not been established yet');\n  }\n  if (this.readyState !== SockJS.OPEN) {\n    return;\n  }\n  this._transport.send(escape.quote(data));\n};\n\nSockJS.version = require('./version');\n\nSockJS.CONNECTING = 0;\nSockJS.OPEN = 1;\nSockJS.CLOSING = 2;\nSockJS.CLOSED = 3;\n\nSockJS.prototype._receiveInfo = function(info, rtt) {\n  debug('_receiveInfo', rtt);\n  this._ir = null;\n  if (!info) {\n    this._close(1002, 'Cannot connect to server');\n    return;\n  }\n\n  // establish a round-trip timeout (RTO) based on the\n  // round-trip time (RTT)\n  this._rto = this.countRTO(rtt);\n  // allow server to override url used for the actual transport\n  this._transUrl = info.base_url ? info.base_url : this.url;\n  info = objectUtils.extend(info, this._urlInfo);\n  debug('info', info);\n  // determine list of desired and supported transports\n  var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info);\n  this._transports = enabledTransports.main;\n  debug(this._transports.length + ' enabled transports');\n\n  this._connect();\n};\n\nSockJS.prototype._connect = function() {\n  for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) {\n    debug('attempt', Transport.transportName);\n    if (Transport.needBody) {\n      if (!global.document.body ||\n          (typeof global.document.readyState !== 'undefined' &&\n            global.document.readyState !== 'complete' &&\n            global.document.readyState !== 'interactive')) {\n        debug('waiting for body');\n        this._transports.unshift(Transport);\n        eventUtils.attachEvent('load', this._connect.bind(this));\n        return;\n      }\n    }\n\n    // calculate timeout based on RTO and round trips. Default to 5s\n    var timeoutMs = Math.max(this._timeout, (this._rto * Transport.roundTrips) || 5000);\n    this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs);\n    debug('using timeout', timeoutMs);\n\n    var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId());\n    var options = this._transportOptions[Transport.transportName];\n    debug('transport url', transportUrl);\n    var transportObj = new Transport(transportUrl, this._transUrl, options);\n    transportObj.on('message', this._transportMessage.bind(this));\n    transportObj.once('close', this._transportClose.bind(this));\n    transportObj.transportName = Transport.transportName;\n    this._transport = transportObj;\n\n    return;\n  }\n  this._close(2000, 'All transports failed', false);\n};\n\nSockJS.prototype._transportTimeout = function() {\n  debug('_transportTimeout');\n  if (this.readyState === SockJS.CONNECTING) {\n    if (this._transport) {\n      this._transport.close();\n    }\n\n    this._transportClose(2007, 'Transport timed out');\n  }\n};\n\nSockJS.prototype._transportMessage = function(msg) {\n  debug('_transportMessage', msg);\n  var self = this\n    , type = msg.slice(0, 1)\n    , content = msg.slice(1)\n    , payload\n    ;\n\n  // first check for messages that don't need a payload\n  switch (type) {\n    case 'o':\n      this._open();\n      return;\n    case 'h':\n      this.dispatchEvent(new Event('heartbeat'));\n      debug('heartbeat', this.transport);\n      return;\n  }\n\n  if (content) {\n    try {\n      payload = JSON.parse(content);\n    } catch (e) {\n      debug('bad json', content);\n    }\n  }\n\n  if (typeof payload === 'undefined') {\n    debug('empty payload', content);\n    return;\n  }\n\n  switch (type) {\n    case 'a':\n      if (Array.isArray(payload)) {\n        payload.forEach(function(p) {\n          debug('message', self.transport, p);\n          self.dispatchEvent(new TransportMessageEvent(p));\n        });\n      }\n      break;\n    case 'm':\n      debug('message', this.transport, payload);\n      this.dispatchEvent(new TransportMessageEvent(payload));\n      break;\n    case 'c':\n      if (Array.isArray(payload) && payload.length === 2) {\n        this._close(payload[0], payload[1], true);\n      }\n      break;\n  }\n};\n\nSockJS.prototype._transportClose = function(code, reason) {\n  debug('_transportClose', this.transport, code, reason);\n  if (this._transport) {\n    this._transport.removeAllListeners();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) {\n    this._connect();\n    return;\n  }\n\n  this._close(code, reason);\n};\n\nSockJS.prototype._open = function() {\n  debug('_open', this._transport && this._transport.transportName, this.readyState);\n  if (this.readyState === SockJS.CONNECTING) {\n    if (this._transportTimeoutId) {\n      clearTimeout(this._transportTimeoutId);\n      this._transportTimeoutId = null;\n    }\n    this.readyState = SockJS.OPEN;\n    this.transport = this._transport.transportName;\n    this.dispatchEvent(new Event('open'));\n    debug('connected', this.transport);\n  } else {\n    // The server might have been restarted, and lost track of our\n    // connection.\n    this._close(1006, 'Server lost session');\n  }\n};\n\nSockJS.prototype._close = function(code, reason, wasClean) {\n  debug('_close', this.transport, code, reason, wasClean, this.readyState);\n  var forceFail = false;\n\n  if (this._ir) {\n    forceFail = true;\n    this._ir.close();\n    this._ir = null;\n  }\n  if (this._transport) {\n    this._transport.close();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (this.readyState === SockJS.CLOSED) {\n    throw new Error('InvalidStateError: SockJS has already been closed');\n  }\n\n  this.readyState = SockJS.CLOSING;\n  setTimeout(function() {\n    this.readyState = SockJS.CLOSED;\n\n    if (forceFail) {\n      this.dispatchEvent(new Event('error'));\n    }\n\n    var e = new CloseEvent('close');\n    e.wasClean = wasClean || false;\n    e.code = code || 1000;\n    e.reason = reason;\n\n    this.dispatchEvent(e);\n    this.onmessage = this.onclose = this.onerror = null;\n    debug('disconnected');\n  }.bind(this), 0);\n};\n\n// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/\n// and RFC 2988.\nSockJS.prototype.countRTO = function(rtt) {\n  // In a local environment, when using IE8/9 and the `jsonp-polling`\n  // transport the time needed to establish a connection (the time that pass\n  // from the opening of the transport to the call of `_dispatchOpen`) is\n  // around 200msec (the lower bound used in the article above) and this\n  // causes spurious timeouts. For this reason we calculate a value slightly\n  // larger than that used in the article.\n  if (rtt > 100) {\n    return 4 * rtt; // rto > 400msec\n  }\n  return 300 + rtt; // 300msec < rto <= 400msec\n};\n\nmodule.exports = function(availableTransports) {\n  transports = transport(availableTransports);\n  require('./iframe-bootstrap')(SockJS, availableTransports);\n  return SockJS;\n};\n","/* eslint-disable */\n/* jscs: disable */\n'use strict';\n\n// pulled specific shims from https://github.com/es-shims/es5-shim\n\nvar ArrayPrototype = Array.prototype;\nvar ObjectPrototype = Object.prototype;\nvar FunctionPrototype = Function.prototype;\nvar StringPrototype = String.prototype;\nvar array_slice = ArrayPrototype.slice;\n\nvar _toString = ObjectPrototype.toString;\nvar isFunction = function (val) {\n    return ObjectPrototype.toString.call(val) === '[object Function]';\n};\nvar isArray = function isArray(obj) {\n    return _toString.call(obj) === '[object Array]';\n};\nvar isString = function isString(obj) {\n    return _toString.call(obj) === '[object String]';\n};\n\nvar supportsDescriptors = Object.defineProperty && (function () {\n    try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n    } catch (e) { /* this is ES3 */\n        return false;\n    }\n}());\n\n// Define configurable, writable and non-enumerable props\n// if they don't exist.\nvar defineProperty;\nif (supportsDescriptors) {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        Object.defineProperty(object, name, {\n            configurable: true,\n            enumerable: false,\n            writable: true,\n            value: method\n        });\n    };\n} else {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        object[name] = method;\n    };\n}\nvar defineProperties = function (object, map, forceAssign) {\n    for (var name in map) {\n        if (ObjectPrototype.hasOwnProperty.call(map, name)) {\n          defineProperty(object, name, map[name], forceAssign);\n        }\n    }\n};\n\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \" + o + ' to object');\n    }\n    return Object(o);\n};\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(num) {\n    var n = +num;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction ToUint32(x) {\n    return x >>> 0;\n}\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\ndefineProperties(FunctionPrototype, {\n    bind: function bind(that) { // .length is 1\n        // 1. Let Target be the this value.\n        var target = this;\n        // 2. If IsCallable(Target) is false, throw a TypeError exception.\n        if (!isFunction(target)) {\n            throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n        }\n        // 3. Let A be a new (possibly empty) internal list of all of the\n        //   argument values provided after thisArg (arg1, arg2 etc), in order.\n        // XXX slicedArgs will stand in for \"A\" if used\n        var args = array_slice.call(arguments, 1); // for normal call\n        // 4. Let F be a new native ECMAScript object.\n        // 11. Set the [[Prototype]] internal property of F to the standard\n        //   built-in Function prototype object as specified in 15.3.3.1.\n        // 12. Set the [[Call]] internal property of F as described in\n        //   15.3.4.5.1.\n        // 13. Set the [[Construct]] internal property of F as described in\n        //   15.3.4.5.2.\n        // 14. Set the [[HasInstance]] internal property of F as described in\n        //   15.3.4.5.3.\n        var binder = function () {\n\n            if (this instanceof bound) {\n                // 15.3.4.5.2 [[Construct]]\n                // When the [[Construct]] internal method of a function object,\n                // F that was created using the bind function is called with a\n                // list of arguments ExtraArgs, the following steps are taken:\n                // 1. Let target be the value of F's [[TargetFunction]]\n                //   internal property.\n                // 2. If target has no [[Construct]] internal method, a\n                //   TypeError exception is thrown.\n                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Construct]] internal\n                //   method of target providing args as the arguments.\n\n                var result = target.apply(\n                    this,\n                    args.concat(array_slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                // 15.3.4.5.1 [[Call]]\n                // When the [[Call]] internal method of a function object, F,\n                // which was created using the bind function is called with a\n                // this value and a list of arguments ExtraArgs, the following\n                // steps are taken:\n                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 2. Let boundThis be the value of F's [[BoundThis]] internal\n                //   property.\n                // 3. Let target be the value of F's [[TargetFunction]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Call]] internal method\n                //   of target providing boundThis as the this value and\n                //   providing args as the arguments.\n\n                // equiv: target.call(this, ...boundArgs, ...args)\n                return target.apply(\n                    that,\n                    args.concat(array_slice.call(arguments))\n                );\n\n            }\n\n        };\n\n        // 15. If the [[Class]] internal property of Target is \"Function\", then\n        //     a. Let L be the length property of Target minus the length of A.\n        //     b. Set the length own property of F to either 0 or L, whichever is\n        //       larger.\n        // 16. Else set the length own property of F to 0.\n\n        var boundLength = Math.max(0, target.length - args.length);\n\n        // 17. Set the attributes of the length own property of F to the values\n        //   specified in 15.3.5.1.\n        var boundArgs = [];\n        for (var i = 0; i < boundLength; i++) {\n            boundArgs.push('$' + i);\n        }\n\n        // XXX Build a dynamic function with desired amount of arguments is the only\n        // way to set the length property of a function.\n        // In environments where Content Security Policies enabled (Chrome extensions,\n        // for ex.) all use of eval or Function costructor throws an exception.\n        // However in all of these environments Function.prototype.bind exists\n        // and so this code will never be executed.\n        var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);\n\n        if (target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            // Clean up dangling references.\n            Empty.prototype = null;\n        }\n\n        // TODO\n        // 18. Set the [[Extensible]] internal property of F to true.\n\n        // TODO\n        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n        // 20. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n        //   false.\n        // 21. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n        //   and false.\n\n        // TODO\n        // NOTE Function objects created using Function.prototype.bind do not\n        // have a prototype property or the [[Code]], [[FormalParameters]], and\n        // [[Scope]] internal properties.\n        // XXX can't delete prototype in pure-js.\n\n        // 22. Return F.\n        return bound;\n    }\n});\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\ndefineProperties(Array, { isArray: isArray });\n\n\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar properlyBoxesContext = function properlyBoxed(method) {\n    // Check node 0.6.21 bug where third parameter is not boxed\n    var properlyBoxesNonStrict = true;\n    var properlyBoxesStrict = true;\n    if (method) {\n        method.call('foo', function (_, __, context) {\n            if (typeof context !== 'object') { properlyBoxesNonStrict = false; }\n        });\n\n        method.call([1], function () {\n            'use strict';\n            properlyBoxesStrict = typeof this === 'string';\n        }, 'x');\n    }\n    return !!method && properlyBoxesNonStrict && properlyBoxesStrict;\n};\n\ndefineProperties(ArrayPrototype, {\n    forEach: function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && isString(this) ? this.split('') : object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (!isFunction(fun)) {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                // Invoke the callback function with call, passing arguments:\n                // context, property value, property key, thisArg object\n                // context\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    }\n}, !properlyBoxesContext(ArrayPrototype.forEach));\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nvar hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\ndefineProperties(ArrayPrototype, {\n    indexOf: function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && isString(this) ? this.split('') : toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n\n        // handle negative indices\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    }\n}, hasFirefox2IndexOfBug);\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.14\n// http://es5.github.com/#x15.5.4.14\n\n// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n// Many browsers do not split properly with regular expressions or they\n// do not perform the split correctly under obscure conditions.\n// See http://blog.stevenlevithan.com/archives/cross-browser-split\n// I've tested in many browsers and this seems to cover the deviant ones:\n//    'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n//    '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n//    'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n//       [undefined, \"t\", undefined, \"e\", ...]\n//    ''.split(/.?/) should be [], not [\"\"]\n//    '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\nvar string_split = StringPrototype.split;\nif (\n    'ab'.split(/(?:ab)*/).length !== 2 ||\n    '.'.split(/(.?)(.?)/).length !== 4 ||\n    'tesst'.split(/(s)*/)[1] === 't' ||\n    'test'.split(/(?:)/, -1).length !== 4 ||\n    ''.split(/.?/).length ||\n    '.'.split(/()()/).length > 1\n) {\n    (function () {\n        var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group\n\n        StringPrototype.split = function (separator, limit) {\n            var string = this;\n            if (separator === void 0 && limit === 0) {\n                return [];\n            }\n\n            // If `separator` is not a regex, use native split\n            if (_toString.call(separator) !== '[object RegExp]') {\n                return string_split.call(this, separator, limit);\n            }\n\n            var output = [],\n                flags = (separator.ignoreCase ? 'i' : '') +\n                        (separator.multiline  ? 'm' : '') +\n                        (separator.extended   ? 'x' : '') + // Proposed for ES6\n                        (separator.sticky     ? 'y' : ''), // Firefox 3+\n                lastLastIndex = 0,\n                // Make `global` and avoid `lastIndex` issues by working with a copy\n                separator2, match, lastIndex, lastLength;\n            separator = new RegExp(separator.source, flags + 'g');\n            string += ''; // Type-convert\n            if (!compliantExecNpcg) {\n                // Doesn't need flags gy, but they don't hurt\n                separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags);\n            }\n            /* Values for `limit`, per the spec:\n             * If undefined: 4294967295 // Math.pow(2, 32) - 1\n             * If 0, Infinity, or NaN: 0\n             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n             * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n             * If other: Type-convert, then use the above rules\n             */\n            limit = limit === void 0 ?\n                -1 >>> 0 : // Math.pow(2, 32) - 1\n                ToUint32(limit);\n            while (match = separator.exec(string)) {\n                // `separator.lastIndex` is not reliable cross-browser\n                lastIndex = match.index + match[0].length;\n                if (lastIndex > lastLastIndex) {\n                    output.push(string.slice(lastLastIndex, match.index));\n                    // Fix browsers whose `exec` methods don't consistently return `undefined` for\n                    // nonparticipating capturing groups\n                    if (!compliantExecNpcg && match.length > 1) {\n                        match[0].replace(separator2, function () {\n                            for (var i = 1; i < arguments.length - 2; i++) {\n                                if (arguments[i] === void 0) {\n                                    match[i] = void 0;\n                                }\n                            }\n                        });\n                    }\n                    if (match.length > 1 && match.index < string.length) {\n                        ArrayPrototype.push.apply(output, match.slice(1));\n                    }\n                    lastLength = match[0].length;\n                    lastLastIndex = lastIndex;\n                    if (output.length >= limit) {\n                        break;\n                    }\n                }\n                if (separator.lastIndex === match.index) {\n                    separator.lastIndex++; // Avoid an infinite loop\n                }\n            }\n            if (lastLastIndex === string.length) {\n                if (lastLength || !separator.test('')) {\n                    output.push('');\n                }\n            } else {\n                output.push(string.slice(lastLastIndex));\n            }\n            return output.length > limit ? output.slice(0, limit) : output;\n        };\n    }());\n\n// [bugfix, chrome]\n// If separator is undefined, then the result array contains just one String,\n// which is the this value (converted to a String). If limit is not undefined,\n// then the output array is truncated so that it contains no more than limit\n// elements.\n// \"0\".split(undefined, 0) -> []\n} else if ('0'.split(void 0, 0).length) {\n    StringPrototype.split = function split(separator, limit) {\n        if (separator === void 0 && limit === 0) { return []; }\n        return string_split.call(this, separator, limit);\n    };\n}\n\n// ECMA-262, 3rd B.2.3\n// Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n// non-normative section suggesting uniform semantics and it should be\n// normalized across all browsers\n// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\nvar string_substr = StringPrototype.substr;\nvar hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\ndefineProperties(StringPrototype, {\n    substr: function substr(start, length) {\n        return string_substr.call(\n            this,\n            start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,\n            length\n        );\n    }\n}, hasNegativeSubstrBug);\n","'use strict';\n\nmodule.exports = [\n  // streaming transports\n  require('./transport/websocket')\n, require('./transport/xhr-streaming')\n, require('./transport/xdr-streaming')\n, require('./transport/eventsource')\n, require('./transport/lib/iframe-wrap')(require('./transport/eventsource'))\n\n  // polling transports\n, require('./transport/htmlfile')\n, require('./transport/lib/iframe-wrap')(require('./transport/htmlfile'))\n, require('./transport/xhr-polling')\n, require('./transport/xdr-polling')\n, require('./transport/lib/iframe-wrap')(require('./transport/xhr-polling'))\n, require('./transport/jsonp-polling')\n];\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , utils = require('../../utils/event')\n  , urlUtils = require('../../utils/url')\n  , XHR = global.XMLHttpRequest\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:browser:xhr');\n}\n\nfunction AbstractXHRObject(method, url, payload, opts) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function () {\n    self._start(method, url, payload, opts);\n  }, 0);\n}\n\ninherits(AbstractXHRObject, EventEmitter);\n\nAbstractXHRObject.prototype._start = function(method, url, payload, opts) {\n  var self = this;\n\n  try {\n    this.xhr = new XHR();\n  } catch (x) {\n    // intentionally empty\n  }\n\n  if (!this.xhr) {\n    debug('no xhr');\n    this.emit('finish', 0, 'no xhr support');\n    this._cleanup();\n    return;\n  }\n\n  // several browsers cache POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  // Explorer tends to keep connection open, even after the\n  // tab gets closed: http://bugs.jquery.com/ticket/5280\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload cleanup');\n    self._cleanup(true);\n  });\n  try {\n    this.xhr.open(method, url, true);\n    if (this.timeout && 'timeout' in this.xhr) {\n      this.xhr.timeout = this.timeout;\n      this.xhr.ontimeout = function() {\n        debug('xhr timeout');\n        self.emit('finish', 0, '');\n        self._cleanup(false);\n      };\n    }\n  } catch (e) {\n    debug('exception', e);\n    // IE raises an exception on wrong port.\n    this.emit('finish', 0, '');\n    this._cleanup(false);\n    return;\n  }\n\n  if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {\n    debug('withCredentials');\n    // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :\n    // \"This never affects same-site requests.\"\n\n    this.xhr.withCredentials = true;\n  }\n  if (opts && opts.headers) {\n    for (var key in opts.headers) {\n      this.xhr.setRequestHeader(key, opts.headers[key]);\n    }\n  }\n\n  this.xhr.onreadystatechange = function() {\n    if (self.xhr) {\n      var x = self.xhr;\n      var text, status;\n      debug('readyState', x.readyState);\n      switch (x.readyState) {\n      case 3:\n        // IE doesn't like peeking into responseText or status\n        // on Microsoft.XMLHTTP and readystate=3\n        try {\n          status = x.status;\n          text = x.responseText;\n        } catch (e) {\n          // intentionally empty\n        }\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n\n        // IE does return readystate == 3 for 404 answers.\n        if (status === 200 && text && text.length > 0) {\n          debug('chunk');\n          self.emit('chunk', status, text);\n        }\n        break;\n      case 4:\n        status = x.status;\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n        // IE returns this for a bad port\n        // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx\n        if (status === 12005 || status === 12029) {\n          status = 0;\n        }\n\n        debug('finish', status, x.responseText);\n        self.emit('finish', status, x.responseText);\n        self._cleanup(false);\n        break;\n      }\n    }\n  };\n\n  try {\n    self.xhr.send(payload);\n  } catch (e) {\n    self.emit('finish', 0, '');\n    self._cleanup(false);\n  }\n};\n\nAbstractXHRObject.prototype._cleanup = function(abort) {\n  debug('cleanup');\n  if (!this.xhr) {\n    return;\n  }\n  this.removeAllListeners();\n  utils.unloadDel(this.unloadRef);\n\n  // IE needs this field to be a function\n  this.xhr.onreadystatechange = function() {};\n  if (this.xhr.ontimeout) {\n    this.xhr.ontimeout = null;\n  }\n\n  if (abort) {\n    try {\n      this.xhr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xhr = null;\n};\n\nAbstractXHRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\nAbstractXHRObject.enabled = !!XHR;\n// override XMLHttpRequest for IE6/7\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (!AbstractXHRObject.enabled && (axo in global)) {\n  debug('overriding xmlhttprequest');\n  XHR = function() {\n    try {\n      return new global[axo]('Microsoft.XMLHTTP');\n    } catch (e) {\n      return null;\n    }\n  };\n  AbstractXHRObject.enabled = !!new XHR();\n}\n\nvar cors = false;\ntry {\n  cors = 'withCredentials' in new XHR();\n} catch (ignored) {\n  // intentionally empty\n}\n\nAbstractXHRObject.supportsCORS = cors;\n\nmodule.exports = AbstractXHRObject;\n","module.exports = global.EventSource;\n","'use strict';\n\nvar Driver = global.WebSocket || global.MozWebSocket;\nif (Driver) {\n\tmodule.exports = function WebSocketBrowserDriver(url) {\n\t\treturn new Driver(url);\n\t};\n} else {\n\tmodule.exports = undefined;\n}\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , EventSourceReceiver = require('./receiver/eventsource')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , EventSourceDriver = require('eventsource')\n  ;\n\nfunction EventSourceTransport(transUrl) {\n  if (!EventSourceTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);\n}\n\ninherits(EventSourceTransport, AjaxBasedTransport);\n\nEventSourceTransport.enabled = function() {\n  return !!EventSourceDriver;\n};\n\nEventSourceTransport.transportName = 'eventsource';\nEventSourceTransport.roundTrips = 2;\n\nmodule.exports = EventSourceTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , HtmlfileReceiver = require('./receiver/htmlfile')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  ;\n\nfunction HtmlFileTransport(transUrl) {\n  if (!HtmlfileReceiver.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);\n}\n\ninherits(HtmlFileTransport, AjaxBasedTransport);\n\nHtmlFileTransport.enabled = function(info) {\n  return HtmlfileReceiver.enabled && info.sameOrigin;\n};\n\nHtmlFileTransport.transportName = 'htmlfile';\nHtmlFileTransport.roundTrips = 2;\n\nmodule.exports = HtmlFileTransport;\n","'use strict';\n\n// Few cool transports do work only for same-origin. In order to make\n// them work cross-domain we shall use iframe, served from the\n// remote domain. New browsers have capabilities to communicate with\n// cross domain iframe using postMessage(). In IE it was implemented\n// from IE 8+, but of course, IE got some details wrong:\n//    http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx\n//    http://stevesouders.com/misc/test-postmessage.php\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , version = require('../version')\n  , urlUtils = require('../utils/url')\n  , iframeUtils = require('../utils/iframe')\n  , eventUtils = require('../utils/event')\n  , random = require('../utils/random')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:transport:iframe');\n}\n\nfunction IframeTransport(transport, transUrl, baseUrl) {\n  if (!IframeTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  EventEmitter.call(this);\n\n  var self = this;\n  this.origin = urlUtils.getOrigin(baseUrl);\n  this.baseUrl = baseUrl;\n  this.transUrl = transUrl;\n  this.transport = transport;\n  this.windowId = random.string(8);\n\n  var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId;\n  debug(transport, transUrl, iframeUrl);\n\n  this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) {\n    debug('err callback');\n    self.emit('close', 1006, 'Unable to load an iframe (' + r + ')');\n    self.close();\n  });\n\n  this.onmessageCallback = this._message.bind(this);\n  eventUtils.attachEvent('message', this.onmessageCallback);\n}\n\ninherits(IframeTransport, EventEmitter);\n\nIframeTransport.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  if (this.iframeObj) {\n    eventUtils.detachEvent('message', this.onmessageCallback);\n    try {\n      // When the iframe is not loaded, IE raises an exception\n      // on 'contentWindow'.\n      this.postMessage('c');\n    } catch (x) {\n      // intentionally empty\n    }\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n    this.onmessageCallback = this.iframeObj = null;\n  }\n};\n\nIframeTransport.prototype._message = function(e) {\n  debug('message', e.data);\n  if (!urlUtils.isOriginEqual(e.origin, this.origin)) {\n    debug('not same origin', e.origin, this.origin);\n    return;\n  }\n\n  var iframeMessage;\n  try {\n    iframeMessage = JSON.parse(e.data);\n  } catch (ignored) {\n    debug('bad json', e.data);\n    return;\n  }\n\n  if (iframeMessage.windowId !== this.windowId) {\n    debug('mismatched window id', iframeMessage.windowId, this.windowId);\n    return;\n  }\n\n  switch (iframeMessage.type) {\n  case 's':\n    this.iframeObj.loaded();\n    // window global dependency\n    this.postMessage('s', JSON.stringify([\n      version\n    , this.transport\n    , this.transUrl\n    , this.baseUrl\n    ]));\n    break;\n  case 't':\n    this.emit('message', iframeMessage.data);\n    break;\n  case 'c':\n    var cdata;\n    try {\n      cdata = JSON.parse(iframeMessage.data);\n    } catch (ignored) {\n      debug('bad json', iframeMessage.data);\n      return;\n    }\n    this.emit('close', cdata[0], cdata[1]);\n    this.close();\n    break;\n  }\n};\n\nIframeTransport.prototype.postMessage = function(type, data) {\n  debug('postMessage', type, data);\n  this.iframeObj.post(JSON.stringify({\n    windowId: this.windowId\n  , type: type\n  , data: data || ''\n  }), this.origin);\n};\n\nIframeTransport.prototype.send = function(message) {\n  debug('send', message);\n  this.postMessage('m', message);\n};\n\nIframeTransport.enabled = function() {\n  return iframeUtils.iframeEnabled;\n};\n\nIframeTransport.transportName = 'iframe';\nIframeTransport.roundTrips = 2;\n\nmodule.exports = IframeTransport;\n","'use strict';\n\n// The simplest and most robust transport, using the well-know cross\n// domain hack - JSONP. This transport is quite inefficient - one\n// message could use up to one http request. But at least it works almost\n// everywhere.\n// Known limitations:\n//   o you will get a spinning cursor\n//   o for Konqueror a dumb timer is needed to detect errors\n\nvar inherits = require('inherits')\n  , SenderReceiver = require('./lib/sender-receiver')\n  , JsonpReceiver = require('./receiver/jsonp')\n  , jsonpSender = require('./sender/jsonp')\n  ;\n\nfunction JsonPTransport(transUrl) {\n  if (!JsonPTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver);\n}\n\ninherits(JsonPTransport, SenderReceiver);\n\nJsonPTransport.enabled = function() {\n  return !!global.document;\n};\n\nJsonPTransport.transportName = 'jsonp-polling';\nJsonPTransport.roundTrips = 1;\nJsonPTransport.needBody = true;\n\nmodule.exports = JsonPTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , SenderReceiver = require('./sender-receiver')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:ajax-based');\n}\n\nfunction createAjaxSender(AjaxObject) {\n  return function(url, payload, callback) {\n    debug('create ajax sender', url, payload);\n    var opt = {};\n    if (typeof payload === 'string') {\n      opt.headers = {'Content-type': 'text/plain'};\n    }\n    var ajaxUrl = urlUtils.addPath(url, '/xhr_send');\n    var xo = new AjaxObject('POST', ajaxUrl, payload, opt);\n    xo.once('finish', function(status) {\n      debug('finish', status);\n      xo = null;\n\n      if (status !== 200 && status !== 204) {\n        return callback(new Error('http status ' + status));\n      }\n      callback();\n    });\n    return function() {\n      debug('abort');\n      xo.close();\n      xo = null;\n\n      var err = new Error('Aborted');\n      err.code = 1000;\n      callback(err);\n    };\n  };\n}\n\nfunction AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {\n  SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);\n}\n\ninherits(AjaxBasedTransport, SenderReceiver);\n\nmodule.exports = AjaxBasedTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:buffered-sender');\n}\n\nfunction BufferedSender(url, sender) {\n  debug(url);\n  EventEmitter.call(this);\n  this.sendBuffer = [];\n  this.sender = sender;\n  this.url = url;\n}\n\ninherits(BufferedSender, EventEmitter);\n\nBufferedSender.prototype.send = function(message) {\n  debug('send', message);\n  this.sendBuffer.push(message);\n  if (!this.sendStop) {\n    this.sendSchedule();\n  }\n};\n\n// For polling transports in a situation when in the message callback,\n// new message is being send. If the sending connection was started\n// before receiving one, it is possible to saturate the network and\n// timeout due to the lack of receiving socket. To avoid that we delay\n// sending messages by some small time, in order to let receiving\n// connection be started beforehand. This is only a halfmeasure and\n// does not fix the big problem, but it does make the tests go more\n// stable on slow networks.\nBufferedSender.prototype.sendScheduleWait = function() {\n  debug('sendScheduleWait');\n  var self = this;\n  var tref;\n  this.sendStop = function() {\n    debug('sendStop');\n    self.sendStop = null;\n    clearTimeout(tref);\n  };\n  tref = setTimeout(function() {\n    debug('timeout');\n    self.sendStop = null;\n    self.sendSchedule();\n  }, 25);\n};\n\nBufferedSender.prototype.sendSchedule = function() {\n  debug('sendSchedule', this.sendBuffer.length);\n  var self = this;\n  if (this.sendBuffer.length > 0) {\n    var payload = '[' + this.sendBuffer.join(',') + ']';\n    this.sendStop = this.sender(this.url, payload, function(err) {\n      self.sendStop = null;\n      if (err) {\n        debug('error', err);\n        self.emit('close', err.code || 1006, 'Sending error: ' + err);\n        self.close();\n      } else {\n        self.sendScheduleWait();\n      }\n    });\n    this.sendBuffer = [];\n  }\n};\n\nBufferedSender.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nBufferedSender.prototype.close = function() {\n  debug('close');\n  this._cleanup();\n  if (this.sendStop) {\n    this.sendStop();\n    this.sendStop = null;\n  }\n};\n\nmodule.exports = BufferedSender;\n","'use strict';\n\nvar inherits = require('inherits')\n  , IframeTransport = require('../iframe')\n  , objectUtils = require('../../utils/object')\n  ;\n\nmodule.exports = function(transport) {\n\n  function IframeWrapTransport(transUrl, baseUrl) {\n    IframeTransport.call(this, transport.transportName, transUrl, baseUrl);\n  }\n\n  inherits(IframeWrapTransport, IframeTransport);\n\n  IframeWrapTransport.enabled = function(url, info) {\n    if (!global.document) {\n      return false;\n    }\n\n    var iframeInfo = objectUtils.extend({}, info);\n    iframeInfo.sameOrigin = true;\n    return transport.enabled(iframeInfo) && IframeTransport.enabled();\n  };\n\n  IframeWrapTransport.transportName = 'iframe-' + transport.transportName;\n  IframeWrapTransport.needBody = true;\n  IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1)\n\n  IframeWrapTransport.facadeTransport = transport;\n\n  return IframeWrapTransport;\n};\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:polling');\n}\n\nfunction Polling(Receiver, receiveUrl, AjaxObject) {\n  debug(receiveUrl);\n  EventEmitter.call(this);\n  this.Receiver = Receiver;\n  this.receiveUrl = receiveUrl;\n  this.AjaxObject = AjaxObject;\n  this._scheduleReceiver();\n}\n\ninherits(Polling, EventEmitter);\n\nPolling.prototype._scheduleReceiver = function() {\n  debug('_scheduleReceiver');\n  var self = this;\n  var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);\n\n  poll.on('message', function(msg) {\n    debug('message', msg);\n    self.emit('message', msg);\n  });\n\n  poll.once('close', function(code, reason) {\n    debug('close', code, reason, self.pollIsClosing);\n    self.poll = poll = null;\n\n    if (!self.pollIsClosing) {\n      if (reason === 'network') {\n        self._scheduleReceiver();\n      } else {\n        self.emit('close', code || 1006, reason);\n        self.removeAllListeners();\n      }\n    }\n  });\n};\n\nPolling.prototype.abort = function() {\n  debug('abort');\n  this.removeAllListeners();\n  this.pollIsClosing = true;\n  if (this.poll) {\n    this.poll.abort();\n  }\n};\n\nmodule.exports = Polling;\n","'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , BufferedSender = require('./buffered-sender')\n  , Polling = require('./polling')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender-receiver');\n}\n\nfunction SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {\n  var pollUrl = urlUtils.addPath(transUrl, urlSuffix);\n  debug(pollUrl);\n  var self = this;\n  BufferedSender.call(this, transUrl, senderFunc);\n\n  this.poll = new Polling(Receiver, pollUrl, AjaxObject);\n  this.poll.on('message', function(msg) {\n    debug('poll message', msg);\n    self.emit('message', msg);\n  });\n  this.poll.once('close', function(code, reason) {\n    debug('poll close', code, reason);\n    self.poll = null;\n    self.emit('close', code, reason);\n    self.close();\n  });\n}\n\ninherits(SenderReceiver, BufferedSender);\n\nSenderReceiver.prototype.close = function() {\n  BufferedSender.prototype.close.call(this);\n  debug('close');\n  this.removeAllListeners();\n  if (this.poll) {\n    this.poll.abort();\n    this.poll = null;\n  }\n};\n\nmodule.exports = SenderReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , EventSourceDriver = require('eventsource')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:eventsource');\n}\n\nfunction EventSourceReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n\n  var self = this;\n  var es = this.es = new EventSourceDriver(url);\n  es.onmessage = function(e) {\n    debug('message', e.data);\n    self.emit('message', decodeURI(e.data));\n  };\n  es.onerror = function(e) {\n    debug('error', es.readyState, e);\n    // ES on reconnection has readyState = 0 or 1.\n    // on network error it's CLOSED = 2\n    var reason = (es.readyState !== 2 ? 'network' : 'permanent');\n    self._cleanup();\n    self._close(reason);\n  };\n}\n\ninherits(EventSourceReceiver, EventEmitter);\n\nEventSourceReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nEventSourceReceiver.prototype._cleanup = function() {\n  debug('cleanup');\n  var es = this.es;\n  if (es) {\n    es.onmessage = es.onerror = null;\n    es.close();\n    this.es = null;\n  }\n};\n\nEventSourceReceiver.prototype._close = function(reason) {\n  debug('close', reason);\n  var self = this;\n  // Safari and chrome < 15 crash if we close window before\n  // waiting for ES cleanup. See:\n  // https://code.google.com/p/chromium/issues/detail?id=89155\n  setTimeout(function() {\n    self.emit('close', null, reason);\n    self.removeAllListeners();\n  }, 200);\n};\n\nmodule.exports = EventSourceReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , iframeUtils = require('../../utils/iframe')\n  , urlUtils = require('../../utils/url')\n  , EventEmitter = require('events').EventEmitter\n  , random = require('../../utils/random')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:htmlfile');\n}\n\nfunction HtmlfileReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n  iframeUtils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));\n\n  debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);\n  var constructFunc = HtmlfileReceiver.htmlfileEnabled ?\n      iframeUtils.createHtmlfile : iframeUtils.createIframe;\n\n  global[iframeUtils.WPrefix][this.id] = {\n    start: function() {\n      debug('start');\n      self.iframeObj.loaded();\n    }\n  , message: function(data) {\n      debug('message', data);\n      self.emit('message', data);\n    }\n  , stop: function() {\n      debug('stop');\n      self._cleanup();\n      self._close('network');\n    }\n  };\n  this.iframeObj = constructFunc(url, function() {\n    debug('callback');\n    self._cleanup();\n    self._close('permanent');\n  });\n}\n\ninherits(HtmlfileReceiver, EventEmitter);\n\nHtmlfileReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nHtmlfileReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  if (this.iframeObj) {\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n  }\n  delete global[iframeUtils.WPrefix][this.id];\n};\n\nHtmlfileReceiver.prototype._close = function(reason) {\n  debug('_close', reason);\n  this.emit('close', null, reason);\n  this.removeAllListeners();\n};\n\nHtmlfileReceiver.htmlfileEnabled = false;\n\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (axo in global) {\n  try {\n    HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');\n  } catch (x) {\n    // intentionally empty\n  }\n}\n\nHtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;\n\nmodule.exports = HtmlfileReceiver;\n","'use strict';\n\nvar utils = require('../../utils/iframe')\n  , random = require('../../utils/random')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:jsonp');\n}\n\nfunction JsonpReceiver(url) {\n  debug(url);\n  var self = this;\n  EventEmitter.call(this);\n\n  utils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id));\n\n  global[utils.WPrefix][this.id] = this._callback.bind(this);\n  this._createScript(urlWithId);\n\n  // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty.\n  this.timeoutId = setTimeout(function() {\n    debug('timeout');\n    self._abort(new Error('JSONP script loaded abnormally (timeout)'));\n  }, JsonpReceiver.timeout);\n}\n\ninherits(JsonpReceiver, EventEmitter);\n\nJsonpReceiver.prototype.abort = function() {\n  debug('abort');\n  if (global[utils.WPrefix][this.id]) {\n    var err = new Error('JSONP user aborted read');\n    err.code = 1000;\n    this._abort(err);\n  }\n};\n\nJsonpReceiver.timeout = 35000;\nJsonpReceiver.scriptErrorTimeout = 1000;\n\nJsonpReceiver.prototype._callback = function(data) {\n  debug('_callback', data);\n  this._cleanup();\n\n  if (this.aborting) {\n    return;\n  }\n\n  if (data) {\n    debug('message', data);\n    this.emit('message', data);\n  }\n  this.emit('close', null, 'network');\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._abort = function(err) {\n  debug('_abort', err);\n  this._cleanup();\n  this.aborting = true;\n  this.emit('close', err.code, err.message);\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  clearTimeout(this.timeoutId);\n  if (this.script2) {\n    this.script2.parentNode.removeChild(this.script2);\n    this.script2 = null;\n  }\n  if (this.script) {\n    var script = this.script;\n    // Unfortunately, you can't really abort script loading of\n    // the script.\n    script.parentNode.removeChild(script);\n    script.onreadystatechange = script.onerror =\n        script.onload = script.onclick = null;\n    this.script = null;\n  }\n  delete global[utils.WPrefix][this.id];\n};\n\nJsonpReceiver.prototype._scriptError = function() {\n  debug('_scriptError');\n  var self = this;\n  if (this.errorTimer) {\n    return;\n  }\n\n  this.errorTimer = setTimeout(function() {\n    if (!self.loadedOkay) {\n      self._abort(new Error('JSONP script loaded abnormally (onerror)'));\n    }\n  }, JsonpReceiver.scriptErrorTimeout);\n};\n\nJsonpReceiver.prototype._createScript = function(url) {\n  debug('_createScript', url);\n  var self = this;\n  var script = this.script = global.document.createElement('script');\n  var script2;  // Opera synchronous load trick.\n\n  script.id = 'a' + random.string(8);\n  script.src = url;\n  script.type = 'text/javascript';\n  script.charset = 'UTF-8';\n  script.onerror = this._scriptError.bind(this);\n  script.onload = function() {\n    debug('onload');\n    self._abort(new Error('JSONP script loaded abnormally (onload)'));\n  };\n\n  // IE9 fires 'error' event after onreadystatechange or before, in random order.\n  // Use loadedOkay to determine if actually errored\n  script.onreadystatechange = function() {\n    debug('onreadystatechange', script.readyState);\n    if (/loaded|closed/.test(script.readyState)) {\n      if (script && script.htmlFor && script.onclick) {\n        self.loadedOkay = true;\n        try {\n          // In IE, actually execute the script.\n          script.onclick();\n        } catch (x) {\n          // intentionally empty\n        }\n      }\n      if (script) {\n        self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)'));\n      }\n    }\n  };\n  // IE: event/htmlFor/onclick trick.\n  // One can't rely on proper order for onreadystatechange. In order to\n  // make sure, set a 'htmlFor' and 'event' properties, so that\n  // script code will be installed as 'onclick' handler for the\n  // script object. Later, onreadystatechange, manually execute this\n  // code. FF and Chrome doesn't work with 'event' and 'htmlFor'\n  // set. For reference see:\n  //   http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n  // Also, read on that about script ordering:\n  //   http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n  if (typeof script.async === 'undefined' && global.document.attachEvent) {\n    // According to mozilla docs, in recent browsers script.async defaults\n    // to 'true', so we may use it to detect a good browser:\n    // https://developer.mozilla.org/en/HTML/Element/script\n    if (!browser.isOpera()) {\n      // Naively assume we're in IE\n      try {\n        script.htmlFor = script.id;\n        script.event = 'onclick';\n      } catch (x) {\n        // intentionally empty\n      }\n      script.async = true;\n    } else {\n      // Opera, second sync script hack\n      script2 = this.script2 = global.document.createElement('script');\n      script2.text = \"try{var a = document.getElementById('\" + script.id + \"'); if(a)a.onerror();}catch(x){};\";\n      script.async = script2.async = false;\n    }\n  }\n  if (typeof script.async !== 'undefined') {\n    script.async = true;\n  }\n\n  var head = global.document.getElementsByTagName('head')[0];\n  head.insertBefore(script, head.firstChild);\n  if (script2) {\n    head.insertBefore(script2, head.firstChild);\n  }\n};\n\nmodule.exports = JsonpReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:xhr');\n}\n\nfunction XhrReceiver(url, AjaxObject) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n\n  this.bufferPosition = 0;\n\n  this.xo = new AjaxObject('POST', url, null);\n  this.xo.on('chunk', this._chunkHandler.bind(this));\n  this.xo.once('finish', function(status, text) {\n    debug('finish', status, text);\n    self._chunkHandler(status, text);\n    self.xo = null;\n    var reason = status === 200 ? 'network' : 'permanent';\n    debug('close', reason);\n    self.emit('close', null, reason);\n    self._cleanup();\n  });\n}\n\ninherits(XhrReceiver, EventEmitter);\n\nXhrReceiver.prototype._chunkHandler = function(status, text) {\n  debug('_chunkHandler', status);\n  if (status !== 200 || !text) {\n    return;\n  }\n\n  for (var idx = -1; ; this.bufferPosition += idx + 1) {\n    var buf = text.slice(this.bufferPosition);\n    idx = buf.indexOf('\\n');\n    if (idx === -1) {\n      break;\n    }\n    var msg = buf.slice(0, idx);\n    if (msg) {\n      debug('message', msg);\n      this.emit('message', msg);\n    }\n  }\n};\n\nXhrReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nXhrReceiver.prototype.abort = function() {\n  debug('abort');\n  if (this.xo) {\n    this.xo.close();\n    debug('close');\n    this.emit('close', null, 'user');\n    this.xo = null;\n  }\n  this._cleanup();\n};\n\nmodule.exports = XhrReceiver;\n","'use strict';\n\nvar random = require('../../utils/random')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender:jsonp');\n}\n\nvar form, area;\n\nfunction createIframe(id) {\n  debug('createIframe', id);\n  try {\n    // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n    return global.document.createElement('<iframe name=\"' + id + '\">');\n  } catch (x) {\n    var iframe = global.document.createElement('iframe');\n    iframe.name = id;\n    return iframe;\n  }\n}\n\nfunction createForm() {\n  debug('createForm');\n  form = global.document.createElement('form');\n  form.style.display = 'none';\n  form.style.position = 'absolute';\n  form.method = 'POST';\n  form.enctype = 'application/x-www-form-urlencoded';\n  form.acceptCharset = 'UTF-8';\n\n  area = global.document.createElement('textarea');\n  area.name = 'd';\n  form.appendChild(area);\n\n  global.document.body.appendChild(form);\n}\n\nmodule.exports = function(url, payload, callback) {\n  debug(url, payload);\n  if (!form) {\n    createForm();\n  }\n  var id = 'a' + random.string(8);\n  form.target = id;\n  form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);\n\n  var iframe = createIframe(id);\n  iframe.id = id;\n  iframe.style.display = 'none';\n  form.appendChild(iframe);\n\n  try {\n    area.value = payload;\n  } catch (e) {\n    // seriously broken browsers get here\n  }\n  form.submit();\n\n  var completed = function(err) {\n    debug('completed', id, err);\n    if (!iframe.onerror) {\n      return;\n    }\n    iframe.onreadystatechange = iframe.onerror = iframe.onload = null;\n    // Opera mini doesn't like if we GC iframe\n    // immediately, thus this timeout.\n    setTimeout(function() {\n      debug('cleaning up', id);\n      iframe.parentNode.removeChild(iframe);\n      iframe = null;\n    }, 500);\n    area.value = '';\n    // It is not possible to detect if the iframe succeeded or\n    // failed to submit our form.\n    callback(err);\n  };\n  iframe.onerror = function() {\n    debug('onerror', id);\n    completed();\n  };\n  iframe.onload = function() {\n    debug('onload', id);\n    completed();\n  };\n  iframe.onreadystatechange = function(e) {\n    debug('onreadystatechange', id, iframe.readyState, e);\n    if (iframe.readyState === 'complete') {\n      completed();\n    }\n  };\n  return function() {\n    debug('aborted', id);\n    completed(new Error('Aborted'));\n  };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , eventUtils = require('../../utils/event')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:sender:xdr');\n}\n\n// References:\n//   http://ajaxian.com/archives/100-line-ajax-wrapper\n//   http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx\n\nfunction XDRObject(method, url, payload) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self._start(method, url, payload);\n  }, 0);\n}\n\ninherits(XDRObject, EventEmitter);\n\nXDRObject.prototype._start = function(method, url, payload) {\n  debug('_start');\n  var self = this;\n  var xdr = new global.XDomainRequest();\n  // IE caches even POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  xdr.onerror = function() {\n    debug('onerror');\n    self._error();\n  };\n  xdr.ontimeout = function() {\n    debug('ontimeout');\n    self._error();\n  };\n  xdr.onprogress = function() {\n    debug('progress', xdr.responseText);\n    self.emit('chunk', 200, xdr.responseText);\n  };\n  xdr.onload = function() {\n    debug('load');\n    self.emit('finish', 200, xdr.responseText);\n    self._cleanup(false);\n  };\n  this.xdr = xdr;\n  this.unloadRef = eventUtils.unloadAdd(function() {\n    self._cleanup(true);\n  });\n  try {\n    // Fails with AccessDenied if port number is bogus\n    this.xdr.open(method, url);\n    if (this.timeout) {\n      this.xdr.timeout = this.timeout;\n    }\n    this.xdr.send(payload);\n  } catch (x) {\n    this._error();\n  }\n};\n\nXDRObject.prototype._error = function() {\n  this.emit('finish', 0, '');\n  this._cleanup(false);\n};\n\nXDRObject.prototype._cleanup = function(abort) {\n  debug('cleanup', abort);\n  if (!this.xdr) {\n    return;\n  }\n  this.removeAllListeners();\n  eventUtils.unloadDel(this.unloadRef);\n\n  this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;\n  if (abort) {\n    try {\n      this.xdr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xdr = null;\n};\n\nXDRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\n// IE 8/9 if the request target uses the same scheme - #79\nXDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());\n\nmodule.exports = XDRObject;\n","'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRCorsObject(method, url, payload, opts) {\n  XhrDriver.call(this, method, url, payload, opts);\n}\n\ninherits(XHRCorsObject, XhrDriver);\n\nXHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS;\n\nmodule.exports = XHRCorsObject;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  ;\n\nfunction XHRFake(/* method, url, payload, opts */) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.to = setTimeout(function() {\n    self.emit('finish', 200, '{}');\n  }, XHRFake.timeout);\n}\n\ninherits(XHRFake, EventEmitter);\n\nXHRFake.prototype.close = function() {\n  clearTimeout(this.to);\n};\n\nXHRFake.timeout = 2000;\n\nmodule.exports = XHRFake;\n","'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRLocalObject(method, url, payload /*, opts */) {\n  XhrDriver.call(this, method, url, payload, {\n    noCredentials: true\n  });\n}\n\ninherits(XHRLocalObject, XhrDriver);\n\nXHRLocalObject.enabled = XhrDriver.enabled;\n\nmodule.exports = XHRLocalObject;\n","'use strict';\n\nvar utils = require('../utils/event')\n  , urlUtils = require('../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , WebsocketDriver = require('./driver/websocket')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:websocket');\n}\n\nfunction WebSocketTransport(transUrl, ignore, options) {\n  if (!WebSocketTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  EventEmitter.call(this);\n  debug('constructor', transUrl);\n\n  var self = this;\n  var url = urlUtils.addPath(transUrl, '/websocket');\n  if (url.slice(0, 5) === 'https') {\n    url = 'wss' + url.slice(5);\n  } else {\n    url = 'ws' + url.slice(4);\n  }\n  this.url = url;\n\n  this.ws = new WebsocketDriver(this.url, [], options);\n  this.ws.onmessage = function(e) {\n    debug('message event', e.data);\n    self.emit('message', e.data);\n  };\n  // Firefox has an interesting bug. If a websocket connection is\n  // created after onunload, it stays alive even when user\n  // navigates away from the page. In such situation let's lie -\n  // let's not open the ws connection at all. See:\n  // https://github.com/sockjs/sockjs-client/issues/28\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=696085\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload');\n    self.ws.close();\n  });\n  this.ws.onclose = function(e) {\n    debug('close event', e.code, e.reason);\n    self.emit('close', e.code, e.reason);\n    self._cleanup();\n  };\n  this.ws.onerror = function(e) {\n    debug('error event', e);\n    self.emit('close', 1006, 'WebSocket connection broken');\n    self._cleanup();\n  };\n}\n\ninherits(WebSocketTransport, EventEmitter);\n\nWebSocketTransport.prototype.send = function(data) {\n  var msg = '[' + data + ']';\n  debug('send', msg);\n  this.ws.send(msg);\n};\n\nWebSocketTransport.prototype.close = function() {\n  debug('close');\n  var ws = this.ws;\n  this._cleanup();\n  if (ws) {\n    ws.close();\n  }\n};\n\nWebSocketTransport.prototype._cleanup = function() {\n  debug('_cleanup');\n  var ws = this.ws;\n  if (ws) {\n    ws.onmessage = ws.onclose = ws.onerror = null;\n  }\n  utils.unloadDel(this.unloadRef);\n  this.unloadRef = this.ws = null;\n  this.removeAllListeners();\n};\n\nWebSocketTransport.enabled = function() {\n  debug('enabled');\n  return !!WebsocketDriver;\n};\nWebSocketTransport.transportName = 'websocket';\n\n// In theory, ws should require 1 round trip. But in chrome, this is\n// not very stable over SSL. Most likely a ws connection requires a\n// separate SSL connection, in which case 2 round trips are an\n// absolute minumum.\nWebSocketTransport.roundTrips = 2;\n\nmodule.exports = WebSocketTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XdrStreamingTransport = require('./xdr-streaming')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\nfunction XdrPollingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject);\n}\n\ninherits(XdrPollingTransport, AjaxBasedTransport);\n\nXdrPollingTransport.enabled = XdrStreamingTransport.enabled;\nXdrPollingTransport.transportName = 'xdr-polling';\nXdrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\n// According to:\n//   http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests\n//   http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n\nfunction XdrStreamingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject);\n}\n\ninherits(XdrStreamingTransport, AjaxBasedTransport);\n\nXdrStreamingTransport.enabled = function(info) {\n  if (info.cookie_needed || info.nullOrigin) {\n    return false;\n  }\n  return XDRObject.enabled && info.sameScheme;\n};\n\nXdrStreamingTransport.transportName = 'xdr-streaming';\nXdrStreamingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrStreamingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  ;\n\nfunction XhrPollingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrPollingTransport, AjaxBasedTransport);\n\nXhrPollingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n\n  if (XHRLocalObject.enabled && info.sameOrigin) {\n    return true;\n  }\n  return XHRCorsObject.enabled;\n};\n\nXhrPollingTransport.transportName = 'xhr-polling';\nXhrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XhrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , browser = require('../utils/browser')\n  ;\n\nfunction XhrStreamingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrStreamingTransport, AjaxBasedTransport);\n\nXhrStreamingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n  // Opera doesn't support xhr-streaming #60\n  // But it might be able to #92\n  if (browser.isOpera()) {\n    return false;\n  }\n\n  return XHRCorsObject.enabled;\n};\n\nXhrStreamingTransport.transportName = 'xhr-streaming';\nXhrStreamingTransport.roundTrips = 2; // preflight, ajax\n\n// Safari gets confused when a streaming ajax request is started\n// before onload. This causes the load indicator to spin indefinetely.\n// Only require body when used in a browser\nXhrStreamingTransport.needBody = !!global.document;\n\nmodule.exports = XhrStreamingTransport;\n","'use strict';\n\nif (global.crypto && global.crypto.getRandomValues) {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Uint8Array(length);\n    global.crypto.getRandomValues(bytes);\n    return bytes;\n  };\n} else {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Array(length);\n    for (var i = 0; i < length; i++) {\n      bytes[i] = Math.floor(Math.random() * 256);\n    }\n    return bytes;\n  };\n}\n","'use strict';\n\nmodule.exports = {\n  isOpera: function() {\n    return global.navigator &&\n      /opera/i.test(global.navigator.userAgent);\n  }\n\n, isKonqueror: function() {\n    return global.navigator &&\n      /konqueror/i.test(global.navigator.userAgent);\n  }\n\n  // #187 wrap document.domain in try/catch because of WP8 from file:///\n, hasDomain: function () {\n    // non-browser client always has a domain\n    if (!global.document) {\n      return true;\n    }\n\n    try {\n      return !!global.document.domain;\n    } catch (e) {\n      return false;\n    }\n  }\n};\n","'use strict';\n\n// Some extra characters that Chrome gets wrong, and substitutes with\n// something else on the wire.\n// eslint-disable-next-line no-control-regex, no-misleading-character-class\nvar extraEscapable = /[\\x00-\\x1f\\ud800-\\udfff\\ufffe\\uffff\\u0300-\\u0333\\u033d-\\u0346\\u034a-\\u034c\\u0350-\\u0352\\u0357-\\u0358\\u035c-\\u0362\\u0374\\u037e\\u0387\\u0591-\\u05af\\u05c4\\u0610-\\u0617\\u0653-\\u0654\\u0657-\\u065b\\u065d-\\u065e\\u06df-\\u06e2\\u06eb-\\u06ec\\u0730\\u0732-\\u0733\\u0735-\\u0736\\u073a\\u073d\\u073f-\\u0741\\u0743\\u0745\\u0747\\u07eb-\\u07f1\\u0951\\u0958-\\u095f\\u09dc-\\u09dd\\u09df\\u0a33\\u0a36\\u0a59-\\u0a5b\\u0a5e\\u0b5c-\\u0b5d\\u0e38-\\u0e39\\u0f43\\u0f4d\\u0f52\\u0f57\\u0f5c\\u0f69\\u0f72-\\u0f76\\u0f78\\u0f80-\\u0f83\\u0f93\\u0f9d\\u0fa2\\u0fa7\\u0fac\\u0fb9\\u1939-\\u193a\\u1a17\\u1b6b\\u1cda-\\u1cdb\\u1dc0-\\u1dcf\\u1dfc\\u1dfe\\u1f71\\u1f73\\u1f75\\u1f77\\u1f79\\u1f7b\\u1f7d\\u1fbb\\u1fbe\\u1fc9\\u1fcb\\u1fd3\\u1fdb\\u1fe3\\u1feb\\u1fee-\\u1fef\\u1ff9\\u1ffb\\u1ffd\\u2000-\\u2001\\u20d0-\\u20d1\\u20d4-\\u20d7\\u20e7-\\u20e9\\u2126\\u212a-\\u212b\\u2329-\\u232a\\u2adc\\u302b-\\u302c\\uaab2-\\uaab3\\uf900-\\ufa0d\\ufa10\\ufa12\\ufa15-\\ufa1e\\ufa20\\ufa22\\ufa25-\\ufa26\\ufa2a-\\ufa2d\\ufa30-\\ufa6d\\ufa70-\\ufad9\\ufb1d\\ufb1f\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4e\\ufff0-\\uffff]/g\n  , extraLookup;\n\n// This may be quite slow, so let's delay until user actually uses bad\n// characters.\nvar unrollLookup = function(escapable) {\n  var i;\n  var unrolled = {};\n  var c = [];\n  for (i = 0; i < 65536; i++) {\n    c.push( String.fromCharCode(i) );\n  }\n  escapable.lastIndex = 0;\n  c.join('').replace(escapable, function(a) {\n    unrolled[ a ] = '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n    return '';\n  });\n  escapable.lastIndex = 0;\n  return unrolled;\n};\n\n// Quote string, also taking care of unicode characters that browsers\n// often break. Especially, take care of unicode surrogates:\n// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates\nmodule.exports = {\n  quote: function(string) {\n    var quoted = JSON.stringify(string);\n\n    // In most cases this should be very fast and good enough.\n    extraEscapable.lastIndex = 0;\n    if (!extraEscapable.test(quoted)) {\n      return quoted;\n    }\n\n    if (!extraLookup) {\n      extraLookup = unrollLookup(extraEscapable);\n    }\n\n    return quoted.replace(extraEscapable, function(a) {\n      return extraLookup[a];\n    });\n  }\n};\n","'use strict';\n\nvar random = require('./random');\n\nvar onUnload = {}\n  , afterUnload = false\n    // detect google chrome packaged apps because they don't allow the 'unload' event\n  , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime\n  ;\n\nmodule.exports = {\n  attachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.addEventListener(event, listener, false);\n    } else if (global.document && global.attachEvent) {\n      // IE quirks.\n      // According to: http://stevesouders.com/misc/test-postmessage.php\n      // the message gets delivered only to 'document', not 'window'.\n      global.document.attachEvent('on' + event, listener);\n      // I get 'window' for ie8.\n      global.attachEvent('on' + event, listener);\n    }\n  }\n\n, detachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.removeEventListener(event, listener, false);\n    } else if (global.document && global.detachEvent) {\n      global.document.detachEvent('on' + event, listener);\n      global.detachEvent('on' + event, listener);\n    }\n  }\n\n, unloadAdd: function(listener) {\n    if (isChromePackagedApp) {\n      return null;\n    }\n\n    var ref = random.string(8);\n    onUnload[ref] = listener;\n    if (afterUnload) {\n      setTimeout(this.triggerUnloadCallbacks, 0);\n    }\n    return ref;\n  }\n\n, unloadDel: function(ref) {\n    if (ref in onUnload) {\n      delete onUnload[ref];\n    }\n  }\n\n, triggerUnloadCallbacks: function() {\n    for (var ref in onUnload) {\n      onUnload[ref]();\n      delete onUnload[ref];\n    }\n  }\n};\n\nvar unloadTriggered = function() {\n  if (afterUnload) {\n    return;\n  }\n  afterUnload = true;\n  module.exports.triggerUnloadCallbacks();\n};\n\n// 'unload' alone is not reliable in opera within an iframe, but we\n// can't use `beforeunload` as IE fires it on javascript: links.\nif (!isChromePackagedApp) {\n  module.exports.attachEvent('unload', unloadTriggered);\n}\n","'use strict';\n\nvar eventUtils = require('./event')\n  , browser = require('./browser')\n  ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:iframe');\n}\n\nmodule.exports = {\n  WPrefix: '_jp'\n, currentWindowId: null\n\n, polluteGlobalNamespace: function() {\n    if (!(module.exports.WPrefix in global)) {\n      global[module.exports.WPrefix] = {};\n    }\n  }\n\n, postMessage: function(type, data) {\n    if (global.parent !== global) {\n      global.parent.postMessage(JSON.stringify({\n        windowId: module.exports.currentWindowId\n      , type: type\n      , data: data || ''\n      }), '*');\n    } else {\n      debug('Cannot postMessage, no parent window.', type, data);\n    }\n  }\n\n, createIframe: function(iframeUrl, errorCallback) {\n    var iframe = global.document.createElement('iframe');\n    var tref, unloadRef;\n    var unattach = function() {\n      debug('unattach');\n      clearTimeout(tref);\n      // Explorer had problems with that.\n      try {\n        iframe.onload = null;\n      } catch (x) {\n        // intentionally empty\n      }\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      debug('cleanup');\n      if (iframe) {\n        unattach();\n        // This timeout makes chrome fire onbeforeunload event\n        // within iframe. Without the timeout it goes straight to\n        // onunload.\n        setTimeout(function() {\n          if (iframe) {\n            iframe.parentNode.removeChild(iframe);\n          }\n          iframe = null;\n        }, 0);\n        eventUtils.unloadDel(unloadRef);\n      }\n    };\n    var onerror = function(err) {\n      debug('onerror', err);\n      if (iframe) {\n        cleanup();\n        errorCallback(err);\n      }\n    };\n    var post = function(msg, origin) {\n      debug('post', msg, origin);\n      setTimeout(function() {\n        try {\n          // When the iframe is not loaded, IE raises an exception\n          // on 'contentWindow'.\n          if (iframe && iframe.contentWindow) {\n            iframe.contentWindow.postMessage(msg, origin);\n          }\n        } catch (x) {\n          // intentionally empty\n        }\n      }, 0);\n    };\n\n    iframe.src = iframeUrl;\n    iframe.style.display = 'none';\n    iframe.style.position = 'absolute';\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    iframe.onload = function() {\n      debug('onload');\n      // `onload` is triggered before scripts on the iframe are\n      // executed. Give it few seconds to actually load stuff.\n      clearTimeout(tref);\n      tref = setTimeout(function() {\n        onerror('onload timeout');\n      }, 2000);\n    };\n    global.document.body.appendChild(iframe);\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n\n/* eslint no-undef: \"off\", new-cap: \"off\" */\n, createHtmlfile: function(iframeUrl, errorCallback) {\n    var axo = ['Active'].concat('Object').join('X');\n    var doc = new global[axo]('htmlfile');\n    var tref, unloadRef;\n    var iframe;\n    var unattach = function() {\n      clearTimeout(tref);\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      if (doc) {\n        unattach();\n        eventUtils.unloadDel(unloadRef);\n        iframe.parentNode.removeChild(iframe);\n        iframe = doc = null;\n        CollectGarbage();\n      }\n    };\n    var onerror = function(r) {\n      debug('onerror', r);\n      if (doc) {\n        cleanup();\n        errorCallback(r);\n      }\n    };\n    var post = function(msg, origin) {\n      try {\n        // When the iframe is not loaded, IE raises an exception\n        // on 'contentWindow'.\n        setTimeout(function() {\n          if (iframe && iframe.contentWindow) {\n              iframe.contentWindow.postMessage(msg, origin);\n          }\n        }, 0);\n      } catch (x) {\n        // intentionally empty\n      }\n    };\n\n    doc.open();\n    doc.write('<html><s' + 'cript>' +\n              'document.domain=\"' + global.document.domain + '\";' +\n              '</s' + 'cript></html>');\n    doc.close();\n    doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix];\n    var c = doc.createElement('div');\n    doc.body.appendChild(c);\n    iframe = doc.createElement('iframe');\n    c.appendChild(iframe);\n    iframe.src = iframeUrl;\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n};\n\nmodule.exports.iframeEnabled = false;\nif (global.document) {\n  // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with\n  // huge delay, or not at all.\n  module.exports.iframeEnabled = (typeof global.postMessage === 'function' ||\n    typeof global.postMessage === 'object') && (!browser.isKonqueror());\n}\n","'use strict';\n\nvar logObject = {};\n['log', 'debug', 'warn'].forEach(function (level) {\n  var levelExists;\n\n  try {\n    levelExists = global.console && global.console[level] && global.console[level].apply;\n  } catch(e) {\n    // do nothing\n  }\n\n  logObject[level] = levelExists ? function () {\n    return global.console[level].apply(global.console, arguments);\n  } : (level === 'log' ? function () {} : logObject.log);\n});\n\nmodule.exports = logObject;\n","'use strict';\n\nmodule.exports = {\n  isObject: function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  }\n\n, extend: function(obj) {\n    if (!this.isObject(obj)) {\n      return obj;\n    }\n    var source, prop;\n    for (var i = 1, length = arguments.length; i < length; i++) {\n      source = arguments[i];\n      for (prop in source) {\n        if (Object.prototype.hasOwnProperty.call(source, prop)) {\n          obj[prop] = source[prop];\n        }\n      }\n    }\n    return obj;\n  }\n};\n","'use strict';\n\nvar crypto = require('crypto');\n\n// This string has length 32, a power of 2, so the modulus doesn't introduce a\n// bias.\nvar _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345';\nmodule.exports = {\n  string: function(length) {\n    var max = _randomStringChars.length;\n    var bytes = crypto.randomBytes(length);\n    var ret = [];\n    for (var i = 0; i < length; i++) {\n      ret.push(_randomStringChars.substr(bytes[i] % max, 1));\n    }\n    return ret.join('');\n  }\n\n, number: function(max) {\n    return Math.floor(Math.random() * max);\n  }\n\n, numberString: function(max) {\n    var t = ('' + (max - 1)).length;\n    var p = new Array(t + 1).join('0');\n    return (p + this.number(max)).slice(-t);\n  }\n};\n","'use strict';\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:transport');\n}\n\nmodule.exports = function(availableTransports) {\n  return {\n    filterToEnabled: function(transportsWhitelist, info) {\n      var transports = {\n        main: []\n      , facade: []\n      };\n      if (!transportsWhitelist) {\n        transportsWhitelist = [];\n      } else if (typeof transportsWhitelist === 'string') {\n        transportsWhitelist = [transportsWhitelist];\n      }\n\n      availableTransports.forEach(function(trans) {\n        if (!trans) {\n          return;\n        }\n\n        if (trans.transportName === 'websocket' && info.websocket === false) {\n          debug('disabled from server', 'websocket');\n          return;\n        }\n\n        if (transportsWhitelist.length &&\n            transportsWhitelist.indexOf(trans.transportName) === -1) {\n          debug('not in whitelist', trans.transportName);\n          return;\n        }\n\n        if (trans.enabled(info)) {\n          debug('enabled', trans.transportName);\n          transports.main.push(trans);\n          if (trans.facadeTransport) {\n            transports.facade.push(trans.facadeTransport);\n          }\n        } else {\n          debug('disabled', trans.transportName);\n        }\n      });\n      return transports;\n    }\n  };\n};\n","'use strict';\n\nvar URL = require('url-parse');\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n  debug = require('debug')('sockjs-client:utils:url');\n}\n\nmodule.exports = {\n  getOrigin: function(url) {\n    if (!url) {\n      return null;\n    }\n\n    var p = new URL(url);\n    if (p.protocol === 'file:') {\n      return null;\n    }\n\n    var port = p.port;\n    if (!port) {\n      port = (p.protocol === 'https:') ? '443' : '80';\n    }\n\n    return p.protocol + '//' + p.hostname + ':' + port;\n  }\n\n, isOriginEqual: function(a, b) {\n    var res = this.getOrigin(a) === this.getOrigin(b);\n    debug('same', a, b, res);\n    return res;\n  }\n\n, isSchemeEqual: function(a, b) {\n    return (a.split(':')[0] === b.split(':')[0]);\n  }\n\n, addPath: function (url, path) {\n    var qs = url.split('?');\n    return qs[0] + path + (qs[1] ? '?' + qs[1] : '');\n  }\n\n, addQuery: function (url, q) {\n    return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q));\n  }\n\n, isLoopbackAddr: function (addr) {\n    return /^127\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(addr) || /^\\[::1\\]$/.test(addr);\n  }\n};\n","module.exports = '1.6.1';\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encodeURIComponent(key);\n      value = encodeURIComponent(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/*!\r\n * numeral.js\r\n * version : 1.5.6\r\n * author : Adam Draper\r\n * license : MIT\r\n * http://adamwdraper.github.com/Numeral-js/\r\n */\r\n\r\n(function () {\r\n\r\n    /************************************\r\n        Constants\r\n    ************************************/\r\n\r\n    var numeral,\r\n        VERSION = '1.5.6',\r\n        // internal storage for language config files\r\n        languages = {},\r\n        currentLanguage = 'en',\r\n        zeroFormat = null,\r\n        defaultFormat = '0,0',\r\n        // check for nodeJS\r\n        hasModule = (typeof module !== 'undefined' && module.exports);\r\n\r\n\r\n    /************************************\r\n        Constructors\r\n    ************************************/\r\n\r\n\r\n    // Numeral prototype object\r\n    function Numeral (number) {\r\n        this._value = number;\r\n    }\r\n\r\n    /**\r\n     * Implementation of toFixed() that treats floats more like decimals\r\n     *\r\n     * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\r\n     * problems for accounting- and finance-related software.\r\n     */\r\n    function toFixed (value, precision, roundingFunction, optionals) {\r\n        var power = Math.pow(10, precision),\r\n            optionalsRegExp,\r\n            output;\r\n            \r\n        //roundingFunction = (roundingFunction !== undefined ? roundingFunction : Math.round);\r\n        // Multiply up by precision, round accurately, then divide and use native toFixed():\r\n        output = (roundingFunction(value * power) / power).toFixed(precision);\r\n\r\n        if (optionals) {\r\n            optionalsRegExp = new RegExp('0{1,' + optionals + '}$');\r\n            output = output.replace(optionalsRegExp, '');\r\n        }\r\n\r\n        return output;\r\n    }\r\n\r\n    /************************************\r\n        Formatting\r\n    ************************************/\r\n\r\n    // determine what type of formatting we need to do\r\n    function formatNumeral (n, format, roundingFunction) {\r\n        var output;\r\n\r\n        // figure out what kind of format we are dealing with\r\n        if (format.indexOf('$') > -1) { // currency!!!!!\r\n            output = formatCurrency(n, format, roundingFunction);\r\n        } else if (format.indexOf('%') > -1) { // percentage\r\n            output = formatPercentage(n, format, roundingFunction);\r\n        } else if (format.indexOf(':') > -1) { // time\r\n            output = formatTime(n, format);\r\n        } else { // plain ol' numbers or bytes\r\n            output = formatNumber(n._value, format, roundingFunction);\r\n        }\r\n\r\n        // return string\r\n        return output;\r\n    }\r\n\r\n    // revert to number\r\n    function unformatNumeral (n, string) {\r\n        var stringOriginal = string,\r\n            thousandRegExp,\r\n            millionRegExp,\r\n            billionRegExp,\r\n            trillionRegExp,\r\n            suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\r\n            bytesMultiplier = false,\r\n            power;\r\n\r\n        if (string.indexOf(':') > -1) {\r\n            n._value = unformatTime(string);\r\n        } else {\r\n            if (string === zeroFormat) {\r\n                n._value = 0;\r\n            } else {\r\n                if (languages[currentLanguage].delimiters.decimal !== '.') {\r\n                    string = string.replace(/\\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.');\r\n                }\r\n\r\n                // see if abbreviations are there so that we can multiply to the correct number\r\n                thousandRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.thousand + '(?:\\\\)|(\\\\' + languages[currentLanguage].currency.symbol + ')?(?:\\\\))?)?$');\r\n                millionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.million + '(?:\\\\)|(\\\\' + languages[currentLanguage].currency.symbol + ')?(?:\\\\))?)?$');\r\n                billionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.billion + '(?:\\\\)|(\\\\' + languages[currentLanguage].currency.symbol + ')?(?:\\\\))?)?$');\r\n                trillionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.trillion + '(?:\\\\)|(\\\\' + languages[currentLanguage].currency.symbol + ')?(?:\\\\))?)?$');\r\n\r\n                // see if bytes are there so that we can multiply to the correct number\r\n                for (power = 0; power <= suffixes.length; power++) {\r\n                    bytesMultiplier = (string.indexOf(suffixes[power]) > -1) ? Math.pow(1024, power + 1) : false;\r\n\r\n                    if (bytesMultiplier) {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                // do some math to create our number\r\n                n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * (((string.split('-').length + Math.min(string.split('(').length-1, string.split(')').length-1)) % 2)? 1: -1) * Number(string.replace(/[^0-9\\.]+/g, ''));\r\n\r\n                // round if we are talking about bytes\r\n                n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value;\r\n            }\r\n        }\r\n        return n._value;\r\n    }\r\n\r\n    function formatCurrency (n, format, roundingFunction) {\r\n        var symbolIndex = format.indexOf('$'),\r\n            openParenIndex = format.indexOf('('),\r\n            minusSignIndex = format.indexOf('-'),\r\n            space = '',\r\n            spliceIndex,\r\n            output;\r\n\r\n        // check for space before or after currency\r\n        if (format.indexOf(' $') > -1) {\r\n            space = ' ';\r\n            format = format.replace(' $', '');\r\n        } else if (format.indexOf('$ ') > -1) {\r\n            space = ' ';\r\n            format = format.replace('$ ', '');\r\n        } else {\r\n            format = format.replace('$', '');\r\n        }\r\n\r\n        // format the number\r\n        output = formatNumber(n._value, format, roundingFunction);\r\n\r\n        // position the symbol\r\n        if (symbolIndex <= 1) {\r\n            if (output.indexOf('(') > -1 || output.indexOf('-') > -1) {\r\n                output = output.split('');\r\n                spliceIndex = 1;\r\n                if (symbolIndex < openParenIndex || symbolIndex < minusSignIndex){\r\n                    // the symbol appears before the \"(\" or \"-\"\r\n                    spliceIndex = 0;\r\n                }\r\n                output.splice(spliceIndex, 0, languages[currentLanguage].currency.symbol + space);\r\n                output = output.join('');\r\n            } else {\r\n                output = languages[currentLanguage].currency.symbol + space + output;\r\n            }\r\n        } else {\r\n            if (output.indexOf(')') > -1) {\r\n                output = output.split('');\r\n                output.splice(-1, 0, space + languages[currentLanguage].currency.symbol);\r\n                output = output.join('');\r\n            } else {\r\n                output = output + space + languages[currentLanguage].currency.symbol;\r\n            }\r\n        }\r\n\r\n        return output;\r\n    }\r\n\r\n    function formatPercentage (n, format, roundingFunction) {\r\n        var space = '',\r\n            output,\r\n            value = n._value * 100;\r\n\r\n        // check for space before %\r\n        if (format.indexOf(' %') > -1) {\r\n            space = ' ';\r\n            format = format.replace(' %', '');\r\n        } else {\r\n            format = format.replace('%', '');\r\n        }\r\n\r\n        output = formatNumber(value, format, roundingFunction);\r\n        \r\n        if (output.indexOf(')') > -1 ) {\r\n            output = output.split('');\r\n            output.splice(-1, 0, space + '%');\r\n            output = output.join('');\r\n        } else {\r\n            output = output + space + '%';\r\n        }\r\n\r\n        return output;\r\n    }\r\n\r\n    function formatTime (n) {\r\n        var hours = Math.floor(n._value/60/60),\r\n            minutes = Math.floor((n._value - (hours * 60 * 60))/60),\r\n            seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60));\r\n        return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds);\r\n    }\r\n\r\n    function unformatTime (string) {\r\n        var timeArray = string.split(':'),\r\n            seconds = 0;\r\n        // turn hours and minutes into seconds and add them all up\r\n        if (timeArray.length === 3) {\r\n            // hours\r\n            seconds = seconds + (Number(timeArray[0]) * 60 * 60);\r\n            // minutes\r\n            seconds = seconds + (Number(timeArray[1]) * 60);\r\n            // seconds\r\n            seconds = seconds + Number(timeArray[2]);\r\n        } else if (timeArray.length === 2) {\r\n            // minutes\r\n            seconds = seconds + (Number(timeArray[0]) * 60);\r\n            // seconds\r\n            seconds = seconds + Number(timeArray[1]);\r\n        }\r\n        return Number(seconds);\r\n    }\r\n\r\n    function formatNumber (value, format, roundingFunction) {\r\n        var negP = false,\r\n            signed = false,\r\n            optDec = false,\r\n            abbr = '',\r\n            abbrK = false, // force abbreviation to thousands\r\n            abbrM = false, // force abbreviation to millions\r\n            abbrB = false, // force abbreviation to billions\r\n            abbrT = false, // force abbreviation to trillions\r\n            abbrForce = false, // force abbreviation\r\n            bytes = '',\r\n            ord = '',\r\n            abs = Math.abs(value),\r\n            suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\r\n            min,\r\n            max,\r\n            power,\r\n            w,\r\n            precision,\r\n            thousands,\r\n            d = '',\r\n            neg = false;\r\n\r\n        // check if number is zero and a custom zero format has been set\r\n        if (value === 0 && zeroFormat !== null) {\r\n            return zeroFormat;\r\n        } else {\r\n            // see if we should use parentheses for negative number or if we should prefix with a sign\r\n            // if both are present we default to parentheses\r\n            if (format.indexOf('(') > -1) {\r\n                negP = true;\r\n                format = format.slice(1, -1);\r\n            } else if (format.indexOf('+') > -1) {\r\n                signed = true;\r\n                format = format.replace(/\\+/g, '');\r\n            }\r\n\r\n            // see if abbreviation is wanted\r\n            if (format.indexOf('a') > -1) {\r\n                // check if abbreviation is specified\r\n                abbrK = format.indexOf('aK') >= 0;\r\n                abbrM = format.indexOf('aM') >= 0;\r\n                abbrB = format.indexOf('aB') >= 0;\r\n                abbrT = format.indexOf('aT') >= 0;\r\n                abbrForce = abbrK || abbrM || abbrB || abbrT;\r\n\r\n                // check for space before abbreviation\r\n                if (format.indexOf(' a') > -1) {\r\n                    abbr = ' ';\r\n                    format = format.replace(' a', '');\r\n                } else {\r\n                    format = format.replace('a', '');\r\n                }\r\n\r\n                if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) {\r\n                    // trillion\r\n                    abbr = abbr + languages[currentLanguage].abbreviations.trillion;\r\n                    value = value / Math.pow(10, 12);\r\n                } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) {\r\n                    // billion\r\n                    abbr = abbr + languages[currentLanguage].abbreviations.billion;\r\n                    value = value / Math.pow(10, 9);\r\n                } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) {\r\n                    // million\r\n                    abbr = abbr + languages[currentLanguage].abbreviations.million;\r\n                    value = value / Math.pow(10, 6);\r\n                } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) {\r\n                    // thousand\r\n                    abbr = abbr + languages[currentLanguage].abbreviations.thousand;\r\n                    value = value / Math.pow(10, 3);\r\n                }\r\n            }\r\n\r\n            // see if we are formatting bytes\r\n            if (format.indexOf('b') > -1) {\r\n                // check for space before\r\n                if (format.indexOf(' b') > -1) {\r\n                    bytes = ' ';\r\n                    format = format.replace(' b', '');\r\n                } else {\r\n                    format = format.replace('b', '');\r\n                }\r\n\r\n                for (power = 0; power <= suffixes.length; power++) {\r\n                    min = Math.pow(1024, power);\r\n                    max = Math.pow(1024, power+1);\r\n\r\n                    if (value >= min && value < max) {\r\n                        bytes = bytes + suffixes[power];\r\n                        if (min > 0) {\r\n                            value = value / min;\r\n                        }\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // see if ordinal is wanted\r\n            if (format.indexOf('o') > -1) {\r\n                // check for space before\r\n                if (format.indexOf(' o') > -1) {\r\n                    ord = ' ';\r\n                    format = format.replace(' o', '');\r\n                } else {\r\n                    format = format.replace('o', '');\r\n                }\r\n\r\n                ord = ord + languages[currentLanguage].ordinal(value);\r\n            }\r\n\r\n            if (format.indexOf('[.]') > -1) {\r\n                optDec = true;\r\n                format = format.replace('[.]', '.');\r\n            }\r\n\r\n            w = value.toString().split('.')[0];\r\n            precision = format.split('.')[1];\r\n            thousands = format.indexOf(',');\r\n\r\n            if (precision) {\r\n                if (precision.indexOf('[') > -1) {\r\n                    precision = precision.replace(']', '');\r\n                    precision = precision.split('[');\r\n                    d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);\r\n                } else {\r\n                    d = toFixed(value, precision.length, roundingFunction);\r\n                }\r\n\r\n                w = d.split('.')[0];\r\n\r\n                if (d.split('.')[1].length) {\r\n                    d = languages[currentLanguage].delimiters.decimal + d.split('.')[1];\r\n                } else {\r\n                    d = '';\r\n                }\r\n\r\n                if (optDec && Number(d.slice(1)) === 0) {\r\n                    d = '';\r\n                }\r\n            } else {\r\n                w = toFixed(value, null, roundingFunction);\r\n            }\r\n\r\n            // format number\r\n            if (w.indexOf('-') > -1) {\r\n                w = w.slice(1);\r\n                neg = true;\r\n            }\r\n\r\n            if (thousands > -1) {\r\n                w = w.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1' + languages[currentLanguage].delimiters.thousands);\r\n            }\r\n\r\n            if (format.indexOf('.') === 0) {\r\n                w = '';\r\n            }\r\n\r\n            return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + ((!neg && signed) ? '+' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : '');\r\n        }\r\n    }\r\n\r\n    /************************************\r\n        Top Level Functions\r\n    ************************************/\r\n\r\n    numeral = function (input) {\r\n        if (numeral.isNumeral(input)) {\r\n            input = input.value();\r\n        } else if (input === 0 || typeof input === 'undefined') {\r\n            input = 0;\r\n        } else if (!Number(input)) {\r\n            input = numeral.fn.unformat(input);\r\n        }\r\n\r\n        return new Numeral(Number(input));\r\n    };\r\n\r\n    // version number\r\n    numeral.version = VERSION;\r\n\r\n    // compare numeral object\r\n    numeral.isNumeral = function (obj) {\r\n        return obj instanceof Numeral;\r\n    };\r\n\r\n    // This function will load languages and then set the global language.  If\r\n    // no arguments are passed in, it will simply return the current global\r\n    // language key.\r\n    numeral.language = function (key, values) {\r\n        if (!key) {\r\n            return currentLanguage;\r\n        }\r\n\r\n        if (key && !values) {\r\n            if(!languages[key]) {\r\n                throw new Error('Unknown language : ' + key);\r\n            }\r\n            currentLanguage = key;\r\n        }\r\n\r\n        if (values || !languages[key]) {\r\n            loadLanguage(key, values);\r\n        }\r\n\r\n        return numeral;\r\n    };\r\n    \r\n    // This function provides access to the loaded language data.  If\r\n    // no arguments are passed in, it will simply return the current\r\n    // global language object.\r\n    numeral.languageData = function (key) {\r\n        if (!key) {\r\n            return languages[currentLanguage];\r\n        }\r\n        \r\n        if (!languages[key]) {\r\n            throw new Error('Unknown language : ' + key);\r\n        }\r\n        \r\n        return languages[key];\r\n    };\r\n\r\n    numeral.language('en', {\r\n        delimiters: {\r\n            thousands: ',',\r\n            decimal: '.'\r\n        },\r\n        abbreviations: {\r\n            thousand: 'k',\r\n            million: 'm',\r\n            billion: 'b',\r\n            trillion: 't'\r\n        },\r\n        ordinal: function (number) {\r\n            var b = number % 10;\r\n            return (~~ (number % 100 / 10) === 1) ? 'th' :\r\n                (b === 1) ? 'st' :\r\n                (b === 2) ? 'nd' :\r\n                (b === 3) ? 'rd' : 'th';\r\n        },\r\n        currency: {\r\n            symbol: '$'\r\n        }\r\n    });\r\n\r\n    numeral.zeroFormat = function (format) {\r\n        zeroFormat = typeof(format) === 'string' ? format : null;\r\n    };\r\n\r\n    numeral.defaultFormat = function (format) {\r\n        defaultFormat = typeof(format) === 'string' ? format : '0.0';\r\n    };\r\n\r\n    /************************************\r\n        Helpers\r\n    ************************************/\r\n\r\n    function loadLanguage(key, values) {\r\n        languages[key] = values;\r\n    }\r\n\r\n    /************************************\r\n        Floating-point helpers\r\n    ************************************/\r\n\r\n    // The floating-point helper functions and implementation\r\n    // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/\r\n\r\n    /**\r\n     * Array.prototype.reduce for browsers that don't support it\r\n     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility\r\n     */\r\n    if ('function' !== typeof Array.prototype.reduce) {\r\n        Array.prototype.reduce = function (callback, opt_initialValue) {\r\n            'use strict';\r\n            \r\n            if (null === this || 'undefined' === typeof this) {\r\n                // At the moment all modern browsers, that support strict mode, have\r\n                // native implementation of Array.prototype.reduce. For instance, IE8\r\n                // does not support strict mode, so this check is actually useless.\r\n                throw new TypeError('Array.prototype.reduce called on null or undefined');\r\n            }\r\n            \r\n            if ('function' !== typeof callback) {\r\n                throw new TypeError(callback + ' is not a function');\r\n            }\r\n\r\n            var index,\r\n                value,\r\n                length = this.length >>> 0,\r\n                isValueSet = false;\r\n\r\n            if (1 < arguments.length) {\r\n                value = opt_initialValue;\r\n                isValueSet = true;\r\n            }\r\n\r\n            for (index = 0; length > index; ++index) {\r\n                if (this.hasOwnProperty(index)) {\r\n                    if (isValueSet) {\r\n                        value = callback(value, this[index], index, this);\r\n                    } else {\r\n                        value = this[index];\r\n                        isValueSet = true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!isValueSet) {\r\n                throw new TypeError('Reduce of empty array with no initial value');\r\n            }\r\n\r\n            return value;\r\n        };\r\n    }\r\n\r\n    \r\n    /**\r\n     * Computes the multiplier necessary to make x >= 1,\r\n     * effectively eliminating miscalculations caused by\r\n     * finite precision.\r\n     */\r\n    function multiplier(x) {\r\n        var parts = x.toString().split('.');\r\n        if (parts.length < 2) {\r\n            return 1;\r\n        }\r\n        return Math.pow(10, parts[1].length);\r\n    }\r\n\r\n    /**\r\n     * Given a variable number of arguments, returns the maximum\r\n     * multiplier that must be used to normalize an operation involving\r\n     * all of them.\r\n     */\r\n    function correctionFactor() {\r\n        var args = Array.prototype.slice.call(arguments);\r\n        return args.reduce(function (prev, next) {\r\n            var mp = multiplier(prev),\r\n                mn = multiplier(next);\r\n        return mp > mn ? mp : mn;\r\n        }, -Infinity);\r\n    }        \r\n\r\n\r\n    /************************************\r\n        Numeral Prototype\r\n    ************************************/\r\n\r\n\r\n    numeral.fn = Numeral.prototype = {\r\n\r\n        clone : function () {\r\n            return numeral(this);\r\n        },\r\n\r\n        format : function (inputString, roundingFunction) {\r\n            return formatNumeral(this, \r\n                  inputString ? inputString : defaultFormat, \r\n                  (roundingFunction !== undefined) ? roundingFunction : Math.round\r\n              );\r\n        },\r\n\r\n        unformat : function (inputString) {\r\n            if (Object.prototype.toString.call(inputString) === '[object Number]') { \r\n                return inputString; \r\n            }\r\n            return unformatNumeral(this, inputString ? inputString : defaultFormat);\r\n        },\r\n\r\n        value : function () {\r\n            return this._value;\r\n        },\r\n\r\n        valueOf : function () {\r\n            return this._value;\r\n        },\r\n\r\n        set : function (value) {\r\n            this._value = Number(value);\r\n            return this;\r\n        },\r\n\r\n        add : function (value) {\r\n            var corrFactor = correctionFactor.call(null, this._value, value);\r\n            function cback(accum, curr, currI, O) {\r\n                return accum + corrFactor * curr;\r\n            }\r\n            this._value = [this._value, value].reduce(cback, 0) / corrFactor;\r\n            return this;\r\n        },\r\n\r\n        subtract : function (value) {\r\n            var corrFactor = correctionFactor.call(null, this._value, value);\r\n            function cback(accum, curr, currI, O) {\r\n                return accum - corrFactor * curr;\r\n            }\r\n            this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor;            \r\n            return this;\r\n        },\r\n\r\n        multiply : function (value) {\r\n            function cback(accum, curr, currI, O) {\r\n                var corrFactor = correctionFactor(accum, curr);\r\n                return (accum * corrFactor) * (curr * corrFactor) /\r\n                    (corrFactor * corrFactor);\r\n            }\r\n            this._value = [this._value, value].reduce(cback, 1);\r\n            return this;\r\n        },\r\n\r\n        divide : function (value) {\r\n            function cback(accum, curr, currI, O) {\r\n                var corrFactor = correctionFactor(accum, curr);\r\n                return (accum * corrFactor) / (curr * corrFactor);\r\n            }\r\n            this._value = [this._value, value].reduce(cback);            \r\n            return this;\r\n        },\r\n\r\n        difference : function (value) {\r\n            return Math.abs(numeral(this._value).subtract(value).value());\r\n        }\r\n\r\n    };\r\n\r\n    /************************************\r\n        Exposing Numeral\r\n    ************************************/\r\n\r\n    // CommonJS module is defined\r\n    if (hasModule) {\r\n        module.exports = numeral;\r\n    }\r\n\r\n    /*global ender:false */\r\n    if (typeof ender === 'undefined') {\r\n        // here, `this` means `window` in the browser, or `global` on the server\r\n        // add `numeral` as a global object via a string identifier,\r\n        // for Closure Compiler 'advanced' mode\r\n        this['numeral'] = numeral;\r\n    }\r\n\r\n    /*global define:false */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define([], function () {\r\n            return numeral;\r\n        });\r\n    }\r\n}).call(this);\r\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n\n(function(root, factory)\n{\n\t/* globals define */\n\tif (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t}\n\telse if (typeof module === 'object' && typeof exports !== 'undefined')\n\t{\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t}\n\telse\n\t{\n\t\t// Browser globals (root is window)\n\t\troot.Papa = factory();\n\t}\n\t// in strict mode we cannot access arguments.callee, so we need a named reference to\n\t// stringify the factory method for the blob worker\n\t// eslint-disable-next-line func-name\n}(this, function moduleFactory()\n{\n\t'use strict';\n\n\tvar global = (function() {\n\t\t// alternative method, similar to `Function('return this')()`\n\t\t// but without using `eval` (which is disabled when\n\t\t// using Content Security Policy).\n\n\t\tif (typeof self !== 'undefined') { return self; }\n\t\tif (typeof window !== 'undefined') { return window; }\n\t\tif (typeof global !== 'undefined') { return global; }\n\n\t\t// When running tests none of the above have been defined\n\t\treturn {};\n\t})();\n\n\n\tfunction getWorkerBlob() {\n\t\tvar URL = global.URL || global.webkitURL || null;\n\t\tvar code = moduleFactory.toString();\n\t\treturn Papa.BLOB_URL || (Papa.BLOB_URL = URL.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \", '(', code, ')();'], {type: 'text/javascript'})));\n\t}\n\n\tvar IS_WORKER = !global.document && !!global.postMessage,\n\t\tIS_PAPA_WORKER = global.IS_PAPA_WORKER || false;\n\n\tvar workers = {}, workerIdCounter = 0;\n\n\tvar Papa = {};\n\n\tPapa.parse = CsvToJson;\n\tPapa.unparse = JsonToCsv;\n\n\tPapa.RECORD_SEP = String.fromCharCode(30);\n\tPapa.UNIT_SEP = String.fromCharCode(31);\n\tPapa.BYTE_ORDER_MARK = '\\ufeff';\n\tPapa.BAD_DELIMITERS = ['\\r', '\\n', '\"', Papa.BYTE_ORDER_MARK];\n\tPapa.WORKERS_SUPPORTED = !IS_WORKER && !!global.Worker;\n\tPapa.NODE_STREAM_INPUT = 1;\n\n\t// Configurable chunk sizes for local and remote files, respectively\n\tPapa.LocalChunkSize = 1024 * 1024 * 10;\t// 10 MB\n\tPapa.RemoteChunkSize = 1024 * 1024 * 5;\t// 5 MB\n\tPapa.DefaultDelimiter = ',';\t\t\t// Used if not specified and detection fails\n\n\t// Exposed for testing and development only\n\tPapa.Parser = Parser;\n\tPapa.ParserHandle = ParserHandle;\n\tPapa.NetworkStreamer = NetworkStreamer;\n\tPapa.FileStreamer = FileStreamer;\n\tPapa.StringStreamer = StringStreamer;\n\tPapa.ReadableStreamStreamer = ReadableStreamStreamer;\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tPapa.DuplexStreamStreamer = DuplexStreamStreamer;\n\t}\n\n\tif (global.jQuery)\n\t{\n\t\tvar $ = global.jQuery;\n\t\t$.fn.parse = function(options)\n\t\t{\n\t\t\tvar config = options.config || {};\n\t\t\tvar queue = [];\n\n\t\t\tthis.each(function(idx)\n\t\t\t{\n\t\t\t\tvar supported = $(this).prop('tagName').toUpperCase() === 'INPUT'\n\t\t\t\t\t\t\t\t&& $(this).attr('type').toLowerCase() === 'file'\n\t\t\t\t\t\t\t\t&& global.FileReader;\n\n\t\t\t\tif (!supported || !this.files || this.files.length === 0)\n\t\t\t\t\treturn true;\t// continue to next input element\n\n\t\t\t\tfor (var i = 0; i < this.files.length; i++)\n\t\t\t\t{\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\tfile: this.files[i],\n\t\t\t\t\t\tinputElem: this,\n\t\t\t\t\t\tinstanceConfig: $.extend({}, config)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tparseNextFile();\t// begin parsing\n\t\t\treturn this;\t\t// maintains chainability\n\n\n\t\t\tfunction parseNextFile()\n\t\t\t{\n\t\t\t\tif (queue.length === 0)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(options.complete))\n\t\t\t\t\t\toptions.complete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar f = queue[0];\n\n\t\t\t\tif (isFunction(options.before))\n\t\t\t\t{\n\t\t\t\t\tvar returned = options.before(f.file, f.inputElem);\n\n\t\t\t\t\tif (typeof returned === 'object')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (returned.action === 'abort')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror('AbortError', f.file, f.inputElem, returned.reason);\n\t\t\t\t\t\t\treturn;\t// Aborts all queued files immediately\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (returned.action === 'skip')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (typeof returned.config === 'object')\n\t\t\t\t\t\t\tf.instanceConfig = $.extend(f.instanceConfig, returned.config);\n\t\t\t\t\t}\n\t\t\t\t\telse if (returned === 'skip')\n\t\t\t\t\t{\n\t\t\t\t\t\tfileComplete();\t// parse the next file in the queue, if any\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Wrap up the user's complete callback, if any, so that ours also gets executed\n\t\t\t\tvar userCompleteFunc = f.instanceConfig.complete;\n\t\t\t\tf.instanceConfig.complete = function(results)\n\t\t\t\t{\n\t\t\t\t\tif (isFunction(userCompleteFunc))\n\t\t\t\t\t\tuserCompleteFunc(results, f.file, f.inputElem);\n\t\t\t\t\tfileComplete();\n\t\t\t\t};\n\n\t\t\t\tPapa.parse(f.file, f.instanceConfig);\n\t\t\t}\n\n\t\t\tfunction error(name, file, elem, reason)\n\t\t\t{\n\t\t\t\tif (isFunction(options.error))\n\t\t\t\t\toptions.error({name: name}, file, elem, reason);\n\t\t\t}\n\n\t\t\tfunction fileComplete()\n\t\t\t{\n\t\t\t\tqueue.splice(0, 1);\n\t\t\t\tparseNextFile();\n\t\t\t}\n\t\t};\n\t}\n\n\n\tif (IS_PAPA_WORKER)\n\t{\n\t\tglobal.onmessage = workerThreadReceivedMessage;\n\t}\n\n\n\n\n\tfunction CsvToJson(_input, _config)\n\t{\n\t\t_config = _config || {};\n\t\tvar dynamicTyping = _config.dynamicTyping || false;\n\t\tif (isFunction(dynamicTyping)) {\n\t\t\t_config.dynamicTypingFunction = dynamicTyping;\n\t\t\t// Will be filled on first row call\n\t\t\tdynamicTyping = {};\n\t\t}\n\t\t_config.dynamicTyping = dynamicTyping;\n\n\t\t_config.transform = isFunction(_config.transform) ? _config.transform : false;\n\n\t\tif (_config.worker && Papa.WORKERS_SUPPORTED)\n\t\t{\n\t\t\tvar w = newWorker();\n\n\t\t\tw.userStep = _config.step;\n\t\t\tw.userChunk = _config.chunk;\n\t\t\tw.userComplete = _config.complete;\n\t\t\tw.userError = _config.error;\n\n\t\t\t_config.step = isFunction(_config.step);\n\t\t\t_config.chunk = isFunction(_config.chunk);\n\t\t\t_config.complete = isFunction(_config.complete);\n\t\t\t_config.error = isFunction(_config.error);\n\t\t\tdelete _config.worker;\t// prevent infinite loop\n\n\t\t\tw.postMessage({\n\t\t\t\tinput: _input,\n\t\t\t\tconfig: _config,\n\t\t\t\tworkerId: w.id\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar streamer = null;\n\t\tif (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === 'undefined')\n\t\t{\n\t\t\t// create a node Duplex stream for use\n\t\t\t// with .pipe\n\t\t\tstreamer = new DuplexStreamStreamer(_config);\n\t\t\treturn streamer.getStream();\n\t\t}\n\t\telse if (typeof _input === 'string')\n\t\t{\n\t\t\t_input = stripBom(_input);\n\t\t\tif (_config.download)\n\t\t\t\tstreamer = new NetworkStreamer(_config);\n\t\t\telse\n\t\t\t\tstreamer = new StringStreamer(_config);\n\t\t}\n\t\telse if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on))\n\t\t{\n\t\t\tstreamer = new ReadableStreamStreamer(_config);\n\t\t}\n\t\telse if ((global.File && _input instanceof File) || _input instanceof Object)\t// ...Safari. (see issue #106)\n\t\t\tstreamer = new FileStreamer(_config);\n\n\t\treturn streamer.stream(_input);\n\n\t\t// Strip character from UTF-8 BOM encoded files that cause issue parsing the file\n\t\tfunction stripBom(string) {\n\t\t\tif (string.charCodeAt(0) === 0xfeff) {\n\t\t\t\treturn string.slice(1);\n\t\t\t}\n\t\t\treturn string;\n\t\t}\n\t}\n\n\n\n\n\n\n\tfunction JsonToCsv(_input, _config)\n\t{\n\t\t// Default configuration\n\n\t\t/** whether to surround every datum with quotes */\n\t\tvar _quotes = false;\n\n\t\t/** whether to write headers */\n\t\tvar _writeHeader = true;\n\n\t\t/** delimiting character(s) */\n\t\tvar _delimiter = ',';\n\n\t\t/** newline character(s) */\n\t\tvar _newline = '\\r\\n';\n\n\t\t/** quote character */\n\t\tvar _quoteChar = '\"';\n\n\t\t/** escaped quote character, either \"\" or <config.escapeChar>\" */\n\t\tvar _escapedQuote = _quoteChar + _quoteChar;\n\n\t\t/** whether to skip empty lines */\n\t\tvar _skipEmptyLines = false;\n\n\t\t/** the columns (keys) we expect when we unparse objects */\n\t\tvar _columns = null;\n\n\t\t/** whether to prevent outputting cells that can be parsed as formulae by spreadsheet software (Excel and LibreOffice) */\n\t\tvar _escapeFormulae = false;\n\n\t\tunpackConfig();\n\n\t\tvar quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g');\n\n\t\tif (typeof _input === 'string')\n\t\t\t_input = JSON.parse(_input);\n\n\t\tif (Array.isArray(_input))\n\t\t{\n\t\t\tif (!_input.length || Array.isArray(_input[0]))\n\t\t\t\treturn serialize(null, _input, _skipEmptyLines);\n\t\t\telse if (typeof _input[0] === 'object')\n\t\t\t\treturn serialize(_columns || Object.keys(_input[0]), _input, _skipEmptyLines);\n\t\t}\n\t\telse if (typeof _input === 'object')\n\t\t{\n\t\t\tif (typeof _input.data === 'string')\n\t\t\t\t_input.data = JSON.parse(_input.data);\n\n\t\t\tif (Array.isArray(_input.data))\n\t\t\t{\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields = _input.meta && _input.meta.fields || _columns;\n\n\t\t\t\tif (!_input.fields)\n\t\t\t\t\t_input.fields =  Array.isArray(_input.data[0])\n\t\t\t\t\t\t? _input.fields\n\t\t\t\t\t\t: typeof _input.data[0] === 'object'\n\t\t\t\t\t\t\t? Object.keys(_input.data[0])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tif (!(Array.isArray(_input.data[0])) && typeof _input.data[0] !== 'object')\n\t\t\t\t\t_input.data = [_input.data];\t// handles input like [1,2,3] or ['asdf']\n\t\t\t}\n\n\t\t\treturn serialize(_input.fields || [], _input.data || [], _skipEmptyLines);\n\t\t}\n\n\t\t// Default (any valid paths should return before this)\n\t\tthrow new Error('Unable to serialize unrecognized input');\n\n\n\t\tfunction unpackConfig()\n\t\t{\n\t\t\tif (typeof _config !== 'object')\n\t\t\t\treturn;\n\n\t\t\tif (typeof _config.delimiter === 'string'\n                && !Papa.BAD_DELIMITERS.filter(function(value) { return _config.delimiter.indexOf(value) !== -1; }).length)\n\t\t\t{\n\t\t\t\t_delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tif (typeof _config.quotes === 'boolean'\n\t\t\t\t|| typeof _config.quotes === 'function'\n\t\t\t\t|| Array.isArray(_config.quotes))\n\t\t\t\t_quotes = _config.quotes;\n\n\t\t\tif (typeof _config.skipEmptyLines === 'boolean'\n\t\t\t\t|| typeof _config.skipEmptyLines === 'string')\n\t\t\t\t_skipEmptyLines = _config.skipEmptyLines;\n\n\t\t\tif (typeof _config.newline === 'string')\n\t\t\t\t_newline = _config.newline;\n\n\t\t\tif (typeof _config.quoteChar === 'string')\n\t\t\t\t_quoteChar = _config.quoteChar;\n\n\t\t\tif (typeof _config.header === 'boolean')\n\t\t\t\t_writeHeader = _config.header;\n\n\t\t\tif (Array.isArray(_config.columns)) {\n\n\t\t\t\tif (_config.columns.length === 0) throw new Error('Option columns is empty');\n\n\t\t\t\t_columns = _config.columns;\n\t\t\t}\n\n\t\t\tif (_config.escapeChar !== undefined) {\n\t\t\t\t_escapedQuote = _config.escapeChar + _quoteChar;\n\t\t\t}\n\n\t\t\tif (_config.escapeFormulae instanceof RegExp) {\n\t\t\t\t_escapeFormulae = _config.escapeFormulae;\n\t\t\t} else if (typeof _config.escapeFormulae === 'boolean' && _config.escapeFormulae) {\n\t\t\t\t_escapeFormulae =  /^[=+\\-@\\t\\r].*$/;\n\t\t\t}\n\t\t}\n\n\t\t/** The double for loop that iterates the data and writes out a CSV string including header row */\n\t\tfunction serialize(fields, data, skipEmptyLines)\n\t\t{\n\t\t\tvar csv = '';\n\n\t\t\tif (typeof fields === 'string')\n\t\t\t\tfields = JSON.parse(fields);\n\t\t\tif (typeof data === 'string')\n\t\t\t\tdata = JSON.parse(data);\n\n\t\t\tvar hasHeader = Array.isArray(fields) && fields.length > 0;\n\t\t\tvar dataKeyedByField = !(Array.isArray(data[0]));\n\n\t\t\t// If there a header row, write it first\n\t\t\tif (hasHeader && _writeHeader)\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < fields.length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\tcsv += safe(fields[i], i);\n\t\t\t\t}\n\t\t\t\tif (data.length > 0)\n\t\t\t\t\tcsv += _newline;\n\t\t\t}\n\n\t\t\t// Then write out the data\n\t\t\tfor (var row = 0; row < data.length; row++)\n\t\t\t{\n\t\t\t\tvar maxCol = hasHeader ? fields.length : data[row].length;\n\n\t\t\t\tvar emptyLine = false;\n\t\t\t\tvar nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0;\n\t\t\t\tif (skipEmptyLines && !hasHeader)\n\t\t\t\t{\n\t\t\t\t\temptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0;\n\t\t\t\t}\n\t\t\t\tif (skipEmptyLines === 'greedy' && hasHeader) {\n\t\t\t\t\tvar line = [];\n\t\t\t\t\tfor (var c = 0; c < maxCol; c++) {\n\t\t\t\t\t\tvar cx = dataKeyedByField ? fields[c] : c;\n\t\t\t\t\t\tline.push(data[row][cx]);\n\t\t\t\t\t}\n\t\t\t\t\temptyLine = line.join('').trim() === '';\n\t\t\t\t}\n\t\t\t\tif (!emptyLine)\n\t\t\t\t{\n\t\t\t\t\tfor (var col = 0; col < maxCol; col++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (col > 0 && !nullLine)\n\t\t\t\t\t\t\tcsv += _delimiter;\n\t\t\t\t\t\tvar colIdx = hasHeader && dataKeyedByField ? fields[col] : col;\n\t\t\t\t\t\tcsv += safe(data[row][colIdx], col);\n\t\t\t\t\t}\n\t\t\t\t\tif (row < data.length - 1 && (!skipEmptyLines || (maxCol > 0 && !nullLine)))\n\t\t\t\t\t{\n\t\t\t\t\t\tcsv += _newline;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn csv;\n\t\t}\n\n\t\t/** Encloses a value around quotes if needed (makes a value safe for CSV insertion) */\n\t\tfunction safe(str, col)\n\t\t{\n\t\t\tif (typeof str === 'undefined' || str === null)\n\t\t\t\treturn '';\n\n\t\t\tif (str.constructor === Date)\n\t\t\t\treturn JSON.stringify(str).slice(1, 25);\n\n\t\t\tvar needsQuotes = false;\n\n\t\t\tif (_escapeFormulae && typeof str === \"string\" && _escapeFormulae.test(str)) {\n\t\t\t\tstr = \"'\" + str;\n\t\t\t\tneedsQuotes = true;\n\t\t\t}\n\n\t\t\tvar escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote);\n\n\t\t\tneedsQuotes = needsQuotes\n\t\t\t\t\t\t\t|| _quotes === true\n\t\t\t\t\t\t\t|| (typeof _quotes === 'function' && _quotes(str, col))\n\t\t\t\t\t\t\t|| (Array.isArray(_quotes) && _quotes[col])\n\t\t\t\t\t\t\t|| hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS)\n\t\t\t\t\t\t\t|| escapedQuoteStr.indexOf(_delimiter) > -1\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(0) === ' '\n\t\t\t\t\t\t\t|| escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === ' ';\n\n\t\t\treturn needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr;\n\t\t}\n\n\t\tfunction hasAny(str, substrings)\n\t\t{\n\t\t\tfor (var i = 0; i < substrings.length; i++)\n\t\t\t\tif (str.indexOf(substrings[i]) > -1)\n\t\t\t\t\treturn true;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\t/** ChunkStreamer is the base prototype for various streamer implementations. */\n\tfunction ChunkStreamer(config)\n\t{\n\t\tthis._handle = null;\n\t\tthis._finished = false;\n\t\tthis._completed = false;\n\t\tthis._halted = false;\n\t\tthis._input = null;\n\t\tthis._baseIndex = 0;\n\t\tthis._partialLine = '';\n\t\tthis._rowCount = 0;\n\t\tthis._start = 0;\n\t\tthis._nextChunk = null;\n\t\tthis.isFirstChunk = true;\n\t\tthis._completeResults = {\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\t\treplaceConfig.call(this, config);\n\n\t\tthis.parseChunk = function(chunk, isFakeChunk)\n\t\t{\n\t\t\t// First chunk pre-processing\n\t\t\tconst skipFirstNLines = parseInt(this._config.skipFirstNLines) || 0;\n\t\t\tif (this.isFirstChunk && skipFirstNLines > 0) {\n\t\t\t\tlet _newline = this._config.newline;\n\t\t\t\tif (!_newline) {\n\t\t\t\t\tconst quoteChar = this._config.quoteChar || '\"';\n\t\t\t\t\t_newline = this._handle.guessLineEndings(chunk, quoteChar);\n\t\t\t\t}\n\t\t\t\tconst splitChunk = chunk.split(_newline);\n\t\t\t\tchunk = [...splitChunk.slice(skipFirstNLines)].join(_newline);\n\t\t\t}\n\t\t\tif (this.isFirstChunk && isFunction(this._config.beforeFirstChunk))\n\t\t\t{\n\t\t\t\tvar modifiedChunk = this._config.beforeFirstChunk(chunk);\n\t\t\t\tif (modifiedChunk !== undefined)\n\t\t\t\t\tchunk = modifiedChunk;\n\t\t\t}\n\t\t\tthis.isFirstChunk = false;\n\t\t\tthis._halted = false;\n\n\t\t\t// Rejoin the line we likely just split in two by chunking the file\n\t\t\tvar aggregate = this._partialLine + chunk;\n\t\t\tthis._partialLine = '';\n\t\t\tvar results = this._handle.parse(aggregate, this._baseIndex, !this._finished);\n\n\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\tthis._halted = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastIndex = results.meta.cursor;\n\n\t\t\tif (!this._finished)\n\t\t\t{\n\t\t\t\tthis._partialLine = aggregate.substring(lastIndex - this._baseIndex);\n\t\t\t\tthis._baseIndex = lastIndex;\n\t\t\t}\n\n\t\t\tif (results && results.data)\n\t\t\t\tthis._rowCount += results.data.length;\n\n\t\t\tvar finishedIncludingPreview = this._finished || (this._config.preview && this._rowCount >= this._config.preview);\n\n\t\t\tif (IS_PAPA_WORKER)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tresults: results,\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tfinished: finishedIncludingPreview\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (isFunction(this._config.chunk) && !isFakeChunk)\n\t\t\t{\n\t\t\t\tthis._config.chunk(results, this._handle);\n\t\t\t\tif (this._handle.paused() || this._handle.aborted()) {\n\t\t\t\t\tthis._halted = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresults = undefined;\n\t\t\t\tthis._completeResults = undefined;\n\t\t\t}\n\n\t\t\tif (!this._config.step && !this._config.chunk) {\n\t\t\t\tthis._completeResults.data = this._completeResults.data.concat(results.data);\n\t\t\t\tthis._completeResults.errors = this._completeResults.errors.concat(results.errors);\n\t\t\t\tthis._completeResults.meta = results.meta;\n\t\t\t}\n\n\t\t\tif (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) {\n\t\t\t\tthis._config.complete(this._completeResults, this._input);\n\t\t\t\tthis._completed = true;\n\t\t\t}\n\n\t\t\tif (!finishedIncludingPreview && (!results || !results.meta.paused))\n\t\t\t\tthis._nextChunk();\n\n\t\t\treturn results;\n\t\t};\n\n\t\tthis._sendError = function(error)\n\t\t{\n\t\t\tif (isFunction(this._config.error))\n\t\t\t\tthis._config.error(error);\n\t\t\telse if (IS_PAPA_WORKER && this._config.error)\n\t\t\t{\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\terror: error,\n\t\t\t\t\tfinished: false\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tfunction replaceConfig(config)\n\t\t{\n\t\t\t// Deep-copy the config so we can edit it\n\t\t\tvar configCopy = copy(config);\n\t\t\tconfigCopy.chunkSize = parseInt(configCopy.chunkSize);\t// parseInt VERY important so we don't concatenate strings!\n\t\t\tif (!config.step && !config.chunk)\n\t\t\t\tconfigCopy.chunkSize = null;  // disable Range header if not streaming; bad values break IIS - see issue #196\n\t\t\tthis._handle = new ParserHandle(configCopy);\n\t\t\tthis._handle.streamer = this;\n\t\t\tthis._config = configCopy;\t// persist the copy to the caller\n\t\t}\n\t}\n\n\n\tfunction NetworkStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.RemoteChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar xhr;\n\n\t\tif (IS_WORKER)\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t\tthis._chunkLoaded();\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._nextChunk = function()\n\t\t\t{\n\t\t\t\tthis._readChunk();\n\t\t\t};\n\t\t}\n\n\t\tthis.stream = function(url)\n\t\t{\n\t\t\tthis._input = url;\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tif (this._finished)\n\t\t\t{\n\t\t\t\tthis._chunkLoaded();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\txhr = new XMLHttpRequest();\n\n\t\t\tif (this._config.withCredentials)\n\t\t\t{\n\t\t\t\txhr.withCredentials = this._config.withCredentials;\n\t\t\t}\n\n\t\t\tif (!IS_WORKER)\n\t\t\t{\n\t\t\t\txhr.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\txhr.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\n\t\t\txhr.open(this._config.downloadRequestBody ? 'POST' : 'GET', this._input, !IS_WORKER);\n\t\t\t// Headers can only be set when once the request state is OPENED\n\t\t\tif (this._config.downloadRequestHeaders)\n\t\t\t{\n\t\t\t\tvar headers = this._config.downloadRequestHeaders;\n\n\t\t\t\tfor (var headerName in headers)\n\t\t\t\t{\n\t\t\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = this._start + this._config.chunkSize - 1;\t// minus one because byte range is inclusive\n\t\t\t\txhr.setRequestHeader('Range', 'bytes=' + this._start + '-' + end);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\txhr.send(this._config.downloadRequestBody);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis._chunkError(err.message);\n\t\t\t}\n\n\t\t\tif (IS_WORKER && xhr.status === 0)\n\t\t\t\tthis._chunkError();\n\t\t};\n\n\t\tthis._chunkLoaded = function()\n\t\t{\n\t\t\tif (xhr.readyState !== 4)\n\t\t\t\treturn;\n\n\t\t\tif (xhr.status < 200 || xhr.status >= 400)\n\t\t\t{\n\t\t\t\tthis._chunkError();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Use chunckSize as it may be a diference on reponse lentgh due to characters with more than 1 byte\n\t\t\tthis._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= getFileSize(xhr);\n\t\t\tthis.parseChunk(xhr.responseText);\n\t\t};\n\n\t\tthis._chunkError = function(errorMessage)\n\t\t{\n\t\t\tvar errorText = xhr.statusText || errorMessage;\n\t\t\tthis._sendError(new Error(errorText));\n\t\t};\n\n\t\tfunction getFileSize(xhr)\n\t\t{\n\t\t\tvar contentRange = xhr.getResponseHeader('Content-Range');\n\t\t\tif (contentRange === null) { // no content range, then finish!\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn parseInt(contentRange.substring(contentRange.lastIndexOf('/') + 1));\n\t\t}\n\t}\n\tNetworkStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tNetworkStreamer.prototype.constructor = NetworkStreamer;\n\n\n\tfunction FileStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tif (!config.chunkSize)\n\t\t\tconfig.chunkSize = Papa.LocalChunkSize;\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar reader, slice;\n\n\t\t// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862\n\t\t// But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76\n\t\tvar usingAsyncReader = typeof FileReader !== 'undefined';\t// Safari doesn't consider it a function - see issue #105\n\n\t\tthis.stream = function(file)\n\t\t{\n\t\t\tthis._input = file;\n\t\t\tslice = file.slice || file.webkitSlice || file.mozSlice;\n\n\t\t\tif (usingAsyncReader)\n\t\t\t{\n\t\t\t\treader = new FileReader();\t\t// Preferred method of reading files, even in workers\n\t\t\t\treader.onload = bindFunction(this._chunkLoaded, this);\n\t\t\t\treader.onerror = bindFunction(this._chunkError, this);\n\t\t\t}\n\t\t\telse\n\t\t\t\treader = new FileReaderSync();\t// Hack for running in a web worker in Firefox\n\n\t\t\tthis._nextChunk();\t// Starts streaming\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (!this._finished && (!this._config.preview || this._rowCount < this._config.preview))\n\t\t\t\tthis._readChunk();\n\t\t};\n\n\t\tthis._readChunk = function()\n\t\t{\n\t\t\tvar input = this._input;\n\t\t\tif (this._config.chunkSize)\n\t\t\t{\n\t\t\t\tvar end = Math.min(this._start + this._config.chunkSize, this._input.size);\n\t\t\t\tinput = slice.call(input, this._start, end);\n\t\t\t}\n\t\t\tvar txt = reader.readAsText(input, this._config.encoding);\n\t\t\tif (!usingAsyncReader)\n\t\t\t\tthis._chunkLoaded({ target: { result: txt } });\t// mimic the async signature\n\t\t};\n\n\t\tthis._chunkLoaded = function(event)\n\t\t{\n\t\t\t// Very important to increment start each time before handling results\n\t\t\tthis._start += this._config.chunkSize;\n\t\t\tthis._finished = !this._config.chunkSize || this._start >= this._input.size;\n\t\t\tthis.parseChunk(event.target.result);\n\t\t};\n\n\t\tthis._chunkError = function()\n\t\t{\n\t\t\tthis._sendError(reader.error);\n\t\t};\n\n\t}\n\tFileStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tFileStreamer.prototype.constructor = FileStreamer;\n\n\n\tfunction StringStreamer(config)\n\t{\n\t\tconfig = config || {};\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar remaining;\n\t\tthis.stream = function(s)\n\t\t{\n\t\t\tremaining = s;\n\t\t\treturn this._nextChunk();\n\t\t};\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (this._finished) return;\n\t\t\tvar size = this._config.chunkSize;\n\t\t\tvar chunk;\n\t\t\tif(size) {\n\t\t\t\tchunk = remaining.substring(0, size);\n\t\t\t\tremaining = remaining.substring(size);\n\t\t\t} else {\n\t\t\t\tchunk = remaining;\n\t\t\t\tremaining = '';\n\t\t\t}\n\t\t\tthis._finished = !remaining;\n\t\t\treturn this.parseChunk(chunk);\n\t\t};\n\t}\n\tStringStreamer.prototype = Object.create(StringStreamer.prototype);\n\tStringStreamer.prototype.constructor = StringStreamer;\n\n\n\tfunction ReadableStreamStreamer(config)\n\t{\n\t\tconfig = config || {};\n\n\t\tChunkStreamer.call(this, config);\n\n\t\tvar queue = [];\n\t\tvar parseOnData = true;\n\t\tvar streamHasEnded = false;\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.pause.apply(this, arguments);\n\t\t\tthis._input.pause();\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tChunkStreamer.prototype.resume.apply(this, arguments);\n\t\t\tthis._input.resume();\n\t\t};\n\n\t\tthis.stream = function(stream)\n\t\t{\n\t\t\tthis._input = stream;\n\n\t\t\tthis._input.on('data', this._streamData);\n\t\t\tthis._input.on('end', this._streamEnd);\n\t\t\tthis._input.on('error', this._streamError);\n\t\t};\n\n\t\tthis._checkIsFinished = function()\n\t\t{\n\t\t\tif (streamHasEnded && queue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tthis._checkIsFinished();\n\t\t\tif (queue.length)\n\t\t\t{\n\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tparseOnData = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._streamData = bindFunction(function(chunk)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tqueue.push(typeof chunk === 'string' ? chunk : chunk.toString(this._config.encoding));\n\n\t\t\t\tif (parseOnData)\n\t\t\t\t{\n\t\t\t\t\tparseOnData = false;\n\t\t\t\t\tthis._checkIsFinished();\n\t\t\t\t\tthis.parseChunk(queue.shift());\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tthis._streamError(error);\n\t\t\t}\n\t\t}, this);\n\n\t\tthis._streamError = bindFunction(function(error)\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tthis._sendError(error);\n\t\t}, this);\n\n\t\tthis._streamEnd = bindFunction(function()\n\t\t{\n\t\t\tthis._streamCleanUp();\n\t\t\tstreamHasEnded = true;\n\t\t\tthis._streamData('');\n\t\t}, this);\n\n\t\tthis._streamCleanUp = bindFunction(function()\n\t\t{\n\t\t\tthis._input.removeListener('data', this._streamData);\n\t\t\tthis._input.removeListener('end', this._streamEnd);\n\t\t\tthis._input.removeListener('error', this._streamError);\n\t\t}, this);\n\t}\n\tReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\tReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer;\n\n\n\tfunction DuplexStreamStreamer(_config) {\n\t\tvar Duplex = require('stream').Duplex;\n\t\tvar config = copy(_config);\n\t\tvar parseOnWrite = true;\n\t\tvar writeStreamHasFinished = false;\n\t\tvar parseCallbackQueue = [];\n\t\tvar stream = null;\n\n\t\tthis._onCsvData = function(results)\n\t\t{\n\t\t\tvar data = results.data;\n\t\t\tif (!stream.push(data) && !this._handle.paused()) {\n\t\t\t\t// the writeable consumer buffer has filled up\n\t\t\t\t// so we need to pause until more items\n\t\t\t\t// can be processed\n\t\t\t\tthis._handle.pause();\n\t\t\t}\n\t\t};\n\n\t\tthis._onCsvComplete = function()\n\t\t{\n\t\t\t// node will finish the read stream when\n\t\t\t// null is pushed\n\t\t\tstream.push(null);\n\t\t};\n\n\t\tconfig.step = bindFunction(this._onCsvData, this);\n\t\tconfig.complete = bindFunction(this._onCsvComplete, this);\n\t\tChunkStreamer.call(this, config);\n\n\t\tthis._nextChunk = function()\n\t\t{\n\t\t\tif (writeStreamHasFinished && parseCallbackQueue.length === 1) {\n\t\t\t\tthis._finished = true;\n\t\t\t}\n\t\t\tif (parseCallbackQueue.length) {\n\t\t\t\tparseCallbackQueue.shift()();\n\t\t\t} else {\n\t\t\t\tparseOnWrite = true;\n\t\t\t}\n\t\t};\n\n\t\tthis._addToParseQueue = function(chunk, callback)\n\t\t{\n\t\t\t// add to queue so that we can indicate\n\t\t\t// completion via callback\n\t\t\t// node will automatically pause the incoming stream\n\t\t\t// when too many items have been added without their\n\t\t\t// callback being invoked\n\t\t\tparseCallbackQueue.push(bindFunction(function() {\n\t\t\t\tthis.parseChunk(typeof chunk === 'string' ? chunk : chunk.toString(config.encoding));\n\t\t\t\tif (isFunction(callback)) {\n\t\t\t\t\treturn callback();\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tif (parseOnWrite) {\n\t\t\t\tparseOnWrite = false;\n\t\t\t\tthis._nextChunk();\n\t\t\t}\n\t\t};\n\n\t\tthis._onRead = function()\n\t\t{\n\t\t\tif (this._handle.paused()) {\n\t\t\t\t// the writeable consumer can handle more data\n\t\t\t\t// so resume the chunk parsing\n\t\t\t\tthis._handle.resume();\n\t\t\t}\n\t\t};\n\n\t\tthis._onWrite = function(chunk, encoding, callback)\n\t\t{\n\t\t\tthis._addToParseQueue(chunk, callback);\n\t\t};\n\n\t\tthis._onWriteComplete = function()\n\t\t{\n\t\t\twriteStreamHasFinished = true;\n\t\t\t// have to write empty string\n\t\t\t// so parser knows its done\n\t\t\tthis._addToParseQueue('');\n\t\t};\n\n\t\tthis.getStream = function()\n\t\t{\n\t\t\treturn stream;\n\t\t};\n\t\tstream = new Duplex({\n\t\t\treadableObjectMode: true,\n\t\t\tdecodeStrings: false,\n\t\t\tread: bindFunction(this._onRead, this),\n\t\t\twrite: bindFunction(this._onWrite, this)\n\t\t});\n\t\tstream.once('finish', bindFunction(this._onWriteComplete, this));\n\t}\n\tif (typeof PAPA_BROWSER_CONTEXT === 'undefined') {\n\t\tDuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype);\n\t\tDuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer;\n\t}\n\n\n\t// Use one ParserHandle per entire CSV file or string\n\tfunction ParserHandle(_config)\n\t{\n\t\t// One goal is to minimize the use of regular expressions...\n\t\tvar MAX_FLOAT = Math.pow(2, 53);\n\t\tvar MIN_FLOAT = -MAX_FLOAT;\n\t\tvar FLOAT = /^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/;\n\t\tvar ISO_DATE = /^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/;\n\t\tvar self = this;\n\t\tvar _stepCounter = 0;\t// Number of times step was called (number of rows parsed)\n\t\tvar _rowCounter = 0;\t// Number of rows that have been parsed so far\n\t\tvar _input;\t\t\t\t// The input being parsed\n\t\tvar _parser;\t\t\t// The core parser being used\n\t\tvar _paused = false;\t// Whether we are paused or not\n\t\tvar _aborted = false;\t// Whether the parser has aborted or not\n\t\tvar _delimiterError;\t// Temporary state between delimiter detection and processing results\n\t\tvar _fields = [];\t\t// Fields are from the header row of the input, if there is one\n\t\tvar _results = {\t\t// The last results returned from the parser\n\t\t\tdata: [],\n\t\t\terrors: [],\n\t\t\tmeta: {}\n\t\t};\n\n\t\tif (isFunction(_config.step))\n\t\t{\n\t\t\tvar userStep = _config.step;\n\t\t\t_config.step = function(results)\n\t\t\t{\n\t\t\t\t_results = results;\n\n\t\t\t\tif (needsHeaderRow())\n\t\t\t\t\tprocessResults();\n\t\t\t\telse\t// only call user's step function after header row\n\t\t\t\t{\n\t\t\t\t\tprocessResults();\n\n\t\t\t\t\t// It's possbile that this line was empty and there's no row here after all\n\t\t\t\t\tif (_results.data.length === 0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t_stepCounter += results.data.length;\n\t\t\t\t\tif (_config.preview && _stepCounter > _config.preview)\n\t\t\t\t\t\t_parser.abort();\n\t\t\t\t\telse {\n\t\t\t\t\t\t_results.data = _results.data[0];\n\t\t\t\t\t\tuserStep(_results, self);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Parses input. Most users won't need, and shouldn't mess with, the baseIndex\n\t\t * and ignoreLastRow parameters. They are used by streamers (wrapper functions)\n\t\t * when an input comes in multiple chunks, like from a file.\n\t\t */\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\tvar quoteChar = _config.quoteChar || '\"';\n\t\t\tif (!_config.newline)\n\t\t\t\t_config.newline = this.guessLineEndings(input, quoteChar);\n\n\t\t\t_delimiterError = false;\n\t\t\tif (!_config.delimiter)\n\t\t\t{\n\t\t\t\tvar delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess);\n\t\t\t\tif (delimGuess.successful)\n\t\t\t\t\t_config.delimiter = delimGuess.bestDelimiter;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_delimiterError = true;\t// add error after parsing (otherwise it would be overwritten)\n\t\t\t\t\t_config.delimiter = Papa.DefaultDelimiter;\n\t\t\t\t}\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\t\t\telse if(isFunction(_config.delimiter))\n\t\t\t{\n\t\t\t\t_config.delimiter = _config.delimiter(input);\n\t\t\t\t_results.meta.delimiter = _config.delimiter;\n\t\t\t}\n\n\t\t\tvar parserConfig = copy(_config);\n\t\t\tif (_config.preview && _config.header)\n\t\t\t\tparserConfig.preview++;\t// to compensate for header row\n\n\t\t\t_input = input;\n\t\t\t_parser = new Parser(parserConfig);\n\t\t\t_results = _parser.parse(_input, baseIndex, ignoreLastRow);\n\t\t\tprocessResults();\n\t\t\treturn _paused ? { meta: { paused: true } } : (_results || { meta: { paused: false } });\n\t\t};\n\n\t\tthis.paused = function()\n\t\t{\n\t\t\treturn _paused;\n\t\t};\n\n\t\tthis.pause = function()\n\t\t{\n\t\t\t_paused = true;\n\t\t\t_parser.abort();\n\n\t\t\t// If it is streaming via \"chunking\", the reader will start appending correctly already so no need to substring,\n\t\t\t// otherwise we can get duplicate content within a row\n\t\t\t_input = isFunction(_config.chunk) ? \"\" : _input.substring(_parser.getCharIndex());\n\t\t};\n\n\t\tthis.resume = function()\n\t\t{\n\t\t\tif(self.streamer._halted) {\n\t\t\t\t_paused = false;\n\t\t\t\tself.streamer.parseChunk(_input, true);\n\t\t\t} else {\n\t\t\t\t// Bugfix: #636 In case the processing hasn't halted yet\n\t\t\t\t// wait for it to halt in order to resume\n\t\t\t\tsetTimeout(self.resume, 3);\n\t\t\t}\n\t\t};\n\n\t\tthis.aborted = function()\n\t\t{\n\t\t\treturn _aborted;\n\t\t};\n\n\t\tthis.abort = function()\n\t\t{\n\t\t\t_aborted = true;\n\t\t\t_parser.abort();\n\t\t\t_results.meta.aborted = true;\n\t\t\tif (isFunction(_config.complete))\n\t\t\t\t_config.complete(_results);\n\t\t\t_input = '';\n\t\t};\n\n\t\tthis.guessLineEndings = function(input, quoteChar)\n\t\t{\n\t\t\tinput = input.substring(0, 1024 * 1024);\t// max length 1 MB\n\t\t\t// Replace all the text inside quotes\n\t\t\tvar re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm');\n\t\t\tinput = input.replace(re, '');\n\n\t\t\tvar r = input.split('\\r');\n\n\t\t\tvar n = input.split('\\n');\n\n\t\t\tvar nAppearsFirst = (n.length > 1 && n[0].length < r[0].length);\n\n\t\t\tif (r.length === 1 || nAppearsFirst)\n\t\t\t\treturn '\\n';\n\n\t\t\tvar numWithN = 0;\n\t\t\tfor (var i = 0; i < r.length; i++)\n\t\t\t{\n\t\t\t\tif (r[i][0] === '\\n')\n\t\t\t\t\tnumWithN++;\n\t\t\t}\n\n\t\t\treturn numWithN >= r.length / 2 ? '\\r\\n' : '\\r';\n\t\t};\n\n\t\tfunction testEmptyLine(s) {\n\t\t\treturn _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0;\n\t\t}\n\n\t\tfunction testFloat(s) {\n\t\t\tif (FLOAT.test(s)) {\n\t\t\t\tvar floatValue = parseFloat(s);\n\t\t\t\tif (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction processResults()\n\t\t{\n\t\t\tif (_results && _delimiterError)\n\t\t\t{\n\t\t\t\taddError('Delimiter', 'UndetectableDelimiter', 'Unable to auto-detect delimiting character; defaulted to \\'' + Papa.DefaultDelimiter + '\\'');\n\t\t\t\t_delimiterError = false;\n\t\t\t}\n\n\t\t\tif (_config.skipEmptyLines)\n\t\t\t{\n\t\t\t\t_results.data = _results.data.filter(function(d) {\n\t\t\t\t\treturn !testEmptyLine(d);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (needsHeaderRow())\n\t\t\t\tfillHeaderFields();\n\n\t\t\treturn applyHeaderAndDynamicTypingAndTransformation();\n\t\t}\n\n\t\tfunction needsHeaderRow()\n\t\t{\n\t\t\treturn _config.header && _fields.length === 0;\n\t\t}\n\n\t\tfunction fillHeaderFields()\n\t\t{\n\t\t\tif (!_results)\n\t\t\t\treturn;\n\n\t\t\tfunction addHeader(header, i)\n\t\t\t{\n\t\t\t\tif (isFunction(_config.transformHeader))\n\t\t\t\t\theader = _config.transformHeader(header, i);\n\n\t\t\t\t_fields.push(header);\n\t\t\t}\n\n\t\t\tif (Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\tfor (var i = 0; needsHeaderRow() && i < _results.data.length; i++)\n\t\t\t\t\t_results.data[i].forEach(addHeader);\n\n\t\t\t\t_results.data.splice(0, 1);\n\t\t\t}\n\t\t\t// if _results.data[0] is not an array, we are in a step where _results.data is the row.\n\t\t\telse\n\t\t\t\t_results.data.forEach(addHeader);\n\t\t}\n\n\t\tfunction shouldApplyDynamicTyping(field) {\n\t\t\t// Cache function values to avoid calling it for each row\n\t\t\tif (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) {\n\t\t\t\t_config.dynamicTyping[field] = _config.dynamicTypingFunction(field);\n\t\t\t}\n\t\t\treturn (_config.dynamicTyping[field] || _config.dynamicTyping) === true;\n\t\t}\n\n\t\tfunction parseDynamic(field, value)\n\t\t{\n\t\t\tif (shouldApplyDynamicTyping(field))\n\t\t\t{\n\t\t\t\tif (value === 'true' || value === 'TRUE')\n\t\t\t\t\treturn true;\n\t\t\t\telse if (value === 'false' || value === 'FALSE')\n\t\t\t\t\treturn false;\n\t\t\t\telse if (testFloat(value))\n\t\t\t\t\treturn parseFloat(value);\n\t\t\t\telse if (ISO_DATE.test(value))\n\t\t\t\t\treturn new Date(value);\n\t\t\t\telse\n\t\t\t\t\treturn (value === '' ? null : value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tfunction applyHeaderAndDynamicTypingAndTransformation()\n\t\t{\n\t\t\tif (!_results || (!_config.header && !_config.dynamicTyping && !_config.transform))\n\t\t\t\treturn _results;\n\n\t\t\tfunction processRow(rowSource, i)\n\t\t\t{\n\t\t\t\tvar row = _config.header ? {} : [];\n\n\t\t\t\tvar j;\n\t\t\t\tfor (j = 0; j < rowSource.length; j++)\n\t\t\t\t{\n\t\t\t\t\tvar field = j;\n\t\t\t\t\tvar value = rowSource[j];\n\n\t\t\t\t\tif (_config.header)\n\t\t\t\t\t\tfield = j >= _fields.length ? '__parsed_extra' : _fields[j];\n\n\t\t\t\t\tif (_config.transform)\n\t\t\t\t\t\tvalue = _config.transform(value,field);\n\n\t\t\t\t\tvalue = parseDynamic(field, value);\n\n\t\t\t\t\tif (field === '__parsed_extra')\n\t\t\t\t\t{\n\t\t\t\t\t\trow[field] = row[field] || [];\n\t\t\t\t\t\trow[field].push(value);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trow[field] = value;\n\t\t\t\t}\n\n\n\t\t\t\tif (_config.header)\n\t\t\t\t{\n\t\t\t\t\tif (j > _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t\telse if (j < _fields.length)\n\t\t\t\t\t\taddError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n\t\t\t\t}\n\n\t\t\t\treturn row;\n\t\t\t}\n\n\t\t\tvar incrementBy = 1;\n\t\t\tif (!_results.data.length || Array.isArray(_results.data[0]))\n\t\t\t{\n\t\t\t\t_results.data = _results.data.map(processRow);\n\t\t\t\tincrementBy = _results.data.length;\n\t\t\t}\n\t\t\telse\n\t\t\t\t_results.data = processRow(_results.data, 0);\n\n\n\t\t\tif (_config.header && _results.meta)\n\t\t\t\t_results.meta.fields = _fields;\n\n\t\t\t_rowCounter += incrementBy;\n\t\t\treturn _results;\n\t\t}\n\n\t\tfunction guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) {\n\t\t\tvar bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount;\n\n\t\t\tdelimitersToGuess = delimitersToGuess || [',', '\\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP];\n\n\t\t\tfor (var i = 0; i < delimitersToGuess.length; i++) {\n\t\t\t\tvar delim = delimitersToGuess[i];\n\t\t\t\tvar delta = 0, avgFieldCount = 0, emptyLinesCount = 0;\n\t\t\t\tfieldCountPrevRow = undefined;\n\n\t\t\t\tvar preview = new Parser({\n\t\t\t\t\tcomments: comments,\n\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\tnewline: newline,\n\t\t\t\t\tpreview: 10\n\t\t\t\t}).parse(input);\n\n\t\t\t\tfor (var j = 0; j < preview.data.length; j++) {\n\t\t\t\t\tif (skipEmptyLines && testEmptyLine(preview.data[j])) {\n\t\t\t\t\t\temptyLinesCount++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar fieldCount = preview.data[j].length;\n\t\t\t\t\tavgFieldCount += fieldCount;\n\n\t\t\t\t\tif (typeof fieldCountPrevRow === 'undefined') {\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldCount > 0) {\n\t\t\t\t\t\tdelta += Math.abs(fieldCount - fieldCountPrevRow);\n\t\t\t\t\t\tfieldCountPrevRow = fieldCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (preview.data.length > 0)\n\t\t\t\t\tavgFieldCount /= (preview.data.length - emptyLinesCount);\n\n\t\t\t\tif ((typeof bestDelta === 'undefined' || delta <= bestDelta)\n\t\t\t\t\t&& (typeof maxFieldCount === 'undefined' || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) {\n\t\t\t\t\tbestDelta = delta;\n\t\t\t\t\tbestDelim = delim;\n\t\t\t\t\tmaxFieldCount = avgFieldCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_config.delimiter = bestDelim;\n\n\t\t\treturn {\n\t\t\t\tsuccessful: !!bestDelim,\n\t\t\t\tbestDelimiter: bestDelim\n\t\t\t};\n\t\t}\n\n\t\tfunction addError(type, code, msg, row)\n\t\t{\n\t\t\tvar error = {\n\t\t\t\ttype: type,\n\t\t\t\tcode: code,\n\t\t\t\tmessage: msg\n\t\t\t};\n\t\t\tif(row !== undefined) {\n\t\t\t\terror.row = row;\n\t\t\t}\n\t\t\t_results.errors.push(error);\n\t\t}\n\t}\n\n\t/** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */\n\tfunction escapeRegExp(string)\n\t{\n\t\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\t}\n\n\t/** The core parser implements speedy and correct CSV parsing */\n\tfunction Parser(config)\n\t{\n\t\t// Unpack the config object\n\t\tconfig = config || {};\n\t\tvar delim = config.delimiter;\n\t\tvar newline = config.newline;\n\t\tvar comments = config.comments;\n\t\tvar step = config.step;\n\t\tvar preview = config.preview;\n\t\tvar fastMode = config.fastMode;\n\t\tvar quoteChar;\n\t\tvar renamedHeaders = null;\n\t\tvar headerParsed = false;\n\n\t\tif (config.quoteChar === undefined || config.quoteChar === null) {\n\t\t\tquoteChar = '\"';\n\t\t} else {\n\t\t\tquoteChar = config.quoteChar;\n\t\t}\n\t\tvar escapeChar = quoteChar;\n\t\tif (config.escapeChar !== undefined) {\n\t\t\tescapeChar = config.escapeChar;\n\t\t}\n\n\t\t// Delimiter must be valid\n\t\tif (typeof delim !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(delim) > -1)\n\t\t\tdelim = ',';\n\n\t\t// Comment character must be valid\n\t\tif (comments === delim)\n\t\t\tthrow new Error('Comment character same as delimiter');\n\t\telse if (comments === true)\n\t\t\tcomments = '#';\n\t\telse if (typeof comments !== 'string'\n\t\t\t|| Papa.BAD_DELIMITERS.indexOf(comments) > -1)\n\t\t\tcomments = false;\n\n\t\t// Newline must be valid: \\r, \\n, or \\r\\n\n\t\tif (newline !== '\\n' && newline !== '\\r' && newline !== '\\r\\n')\n\t\t\tnewline = '\\n';\n\n\t\t// We're gonna need these at the Parser scope\n\t\tvar cursor = 0;\n\t\tvar aborted = false;\n\n\t\tthis.parse = function(input, baseIndex, ignoreLastRow)\n\t\t{\n\t\t\t// For some reason, in Chrome, this speeds things up (!?)\n\t\t\tif (typeof input !== 'string')\n\t\t\t\tthrow new Error('Input must be a string');\n\n\t\t\t// We don't need to compute some of these every time parse() is called,\n\t\t\t// but having them in a more local scope seems to perform better\n\t\t\tvar inputLen = input.length,\n\t\t\t\tdelimLen = delim.length,\n\t\t\t\tnewlineLen = newline.length,\n\t\t\t\tcommentsLen = comments.length;\n\t\t\tvar stepIsFunction = isFunction(step);\n\n\t\t\t// Establish starting state\n\t\t\tcursor = 0;\n\t\t\tvar data = [], errors = [], row = [], lastCursor = 0;\n\n\t\t\tif (!input)\n\t\t\t\treturn returnable();\n\n\t\t\tif (fastMode || (fastMode !== false && input.indexOf(quoteChar) === -1))\n\t\t\t{\n\t\t\t\tvar rows = input.split(newline);\n\t\t\t\tfor (var i = 0; i < rows.length; i++)\n\t\t\t\t{\n\t\t\t\t\trow = rows[i];\n\t\t\t\t\tcursor += row.length;\n\n\t\t\t\t\tif (i !== rows.length - 1)\n\t\t\t\t\t\tcursor += newline.length;\n\t\t\t\t\telse if (ignoreLastRow)\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tif (comments && row.substring(0, commentsLen) === comments)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tpushRow(row.split(delim));\n\t\t\t\t\tif (preview && i >= preview)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = data.slice(0, preview);\n\t\t\t\t\t\treturn returnable(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\tvar nextDelim = input.indexOf(delim, cursor);\n\t\t\tvar nextNewline = input.indexOf(newline, cursor);\n\t\t\tvar quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g');\n\t\t\tvar quoteSearch = input.indexOf(quoteChar, cursor);\n\n\t\t\t// Parser loop\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\t// Field has opening quote\n\t\t\t\tif (input[cursor] === quoteChar)\n\t\t\t\t{\n\t\t\t\t\t// Start our search for the closing quote where the cursor is\n\t\t\t\t\tquoteSearch = cursor;\n\n\t\t\t\t\t// Skip the opening quote\n\t\t\t\t\tcursor++;\n\n\t\t\t\t\tfor (;;)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Find closing quote\n\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, quoteSearch + 1);\n\n\t\t\t\t\t\t//No other quotes are found - no other delimiters\n\t\t\t\t\t\tif (quoteSearch === -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!ignoreLastRow) {\n\t\t\t\t\t\t\t\t// No closing quote... what a pity\n\t\t\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\t\t\tcode: 'MissingQuotes',\n\t\t\t\t\t\t\t\t\tmessage: 'Quoted field unterminated',\n\t\t\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn finish();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Closing quote at EOF\n\t\t\t\t\t\tif (quoteSearch === inputLen - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar);\n\t\t\t\t\t\t\treturn finish(value);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this quote is escaped, it's part of the data; skip it\n\t\t\t\t\t\t// If the quote character is the escape character, then check if the next character is the escape character\n\t\t\t\t\t\tif (quoteChar === escapeChar &&  input[quoteSearch + 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the quote character is not the escape character, then check if the previous character was the escape character\n\t\t\t\t\t\tif (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(nextDelim !== -1 && nextDelim < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(nextNewline !== -1 && nextNewline < (quoteSearch + 1)) {\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, (quoteSearch + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check up to nextDelim or nextNewline, whichever is closest\n\t\t\t\t\t\tvar checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline);\n\t\t\t\t\t\tvar spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo);\n\n\t\t\t\t\t\t// Closing quote followed by delimiter or 'unnecessary spaces + delimiter'\n\t\t\t\t\t\tif (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndDelimiter, delimLen) === delim)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tcursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen;\n\n\t\t\t\t\t\t\t// If char after following delimiter is not quoteChar, we find next quote char position\n\t\t\t\t\t\t\tif (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline);\n\n\t\t\t\t\t\t// Closing quote followed by newline or 'unnecessary spaces + newLine'\n\t\t\t\t\t\tif (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trow.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n\t\t\t\t\t\t\tsaveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen);\n\t\t\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\t// because we may have skipped the nextDelim in the quoted field\n\t\t\t\t\t\t\tquoteSearch = input.indexOf(quoteChar, cursor);\t// we search for first quote in next line\n\n\t\t\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Checks for valid closing quotes are complete (escaped quotes or quote followed by EOF/delimiter/newline) -- assume these quotes are part of an invalid text string\n\t\t\t\t\t\terrors.push({\n\t\t\t\t\t\t\ttype: 'Quotes',\n\t\t\t\t\t\t\tcode: 'InvalidQuotes',\n\t\t\t\t\t\t\tmessage: 'Trailing quote on quoted field is malformed',\n\t\t\t\t\t\t\trow: data.length,\t// row has yet to be inserted\n\t\t\t\t\t\t\tindex: cursor\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquoteSearch++;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Comment found at start of new line\n\t\t\t\tif (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments)\n\t\t\t\t{\n\t\t\t\t\tif (nextNewline === -1)\t// Comment ends at EOF\n\t\t\t\t\t\treturn returnable();\n\t\t\t\t\tcursor = nextNewline + newlineLen;\n\t\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Next delimiter comes before next newline, so we've reached end of field\n\t\t\t\tif (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1))\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextDelim));\n\t\t\t\t\tcursor = nextDelim + delimLen;\n\t\t\t\t\t// we look for next delimiter char\n\t\t\t\t\tnextDelim = input.indexOf(delim, cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// End of row\n\t\t\t\tif (nextNewline !== -1)\n\t\t\t\t{\n\t\t\t\t\trow.push(input.substring(cursor, nextNewline));\n\t\t\t\t\tsaveRow(nextNewline + newlineLen);\n\n\t\t\t\t\tif (stepIsFunction)\n\t\t\t\t\t{\n\t\t\t\t\t\tdoStep();\n\t\t\t\t\t\tif (aborted)\n\t\t\t\t\t\t\treturn returnable();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (preview && data.length >= preview)\n\t\t\t\t\t\treturn returnable(true);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn finish();\n\n\n\t\t\tfunction pushRow(row)\n\t\t\t{\n\t\t\t\tdata.push(row);\n\t\t\t\tlastCursor = cursor;\n\t\t\t}\n\n\t\t\t/**\n             * checks if there are extra spaces after closing quote and given index without any text\n             * if Yes, returns the number of spaces\n             */\n\t\t\tfunction extraSpaces(index) {\n\t\t\t\tvar spaceLength = 0;\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tvar textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index);\n\t\t\t\t\tif (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') {\n\t\t\t\t\t\tspaceLength = textBetweenClosingQuoteAndIndex.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spaceLength;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the remaining input from cursor to the end into\n\t\t\t * row, saves the row, calls step, and returns the results.\n\t\t\t */\n\t\t\tfunction finish(value)\n\t\t\t{\n\t\t\t\tif (ignoreLastRow)\n\t\t\t\t\treturn returnable();\n\t\t\t\tif (typeof value === 'undefined')\n\t\t\t\t\tvalue = input.substring(cursor);\n\t\t\t\trow.push(value);\n\t\t\t\tcursor = inputLen;\t// important in case parsing is paused\n\t\t\t\tpushRow(row);\n\t\t\t\tif (stepIsFunction)\n\t\t\t\t\tdoStep();\n\t\t\t\treturn returnable();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Appends the current row to the results. It sets the cursor\n\t\t\t * to newCursor and finds the nextNewline. The caller should\n\t\t\t * take care to execute user's step function and check for\n\t\t\t * preview and end parsing if necessary.\n\t\t\t */\n\t\t\tfunction saveRow(newCursor)\n\t\t\t{\n\t\t\t\tcursor = newCursor;\n\t\t\t\tpushRow(row);\n\t\t\t\trow = [];\n\t\t\t\tnextNewline = input.indexOf(newline, cursor);\n\t\t\t}\n\n\t\t\t/** Returns an object with the results, errors, and meta. */\n\t\t\tfunction returnable(stopped)\n\t\t\t{\n\t\t\t\tif (config.header && !baseIndex && data.length && !headerParsed)\n\t\t\t\t{\n\t\t\t\t\tconst result = data[0];\n\t\t\t\t\tconst headerCount = Object.create(null); // To track the count of each base header\n\t\t\t\t\tconst usedHeaders = new Set(result); // To track used headers and avoid duplicates\n\t\t\t\t\tlet duplicateHeaders = false;\n\n\t\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t\tlet header = result[i];\n\t\t\t\t\t\tif (isFunction(config.transformHeader))\n\t\t\t\t\t\t\theader = config.transformHeader(header, i);\n\n\t\t\t\t\t\tif (!headerCount[header]) {\n\t\t\t\t\t\t\theaderCount[header] = 1;\n\t\t\t\t\t\t\tresult[i] = header;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet newHeader;\n\t\t\t\t\t\t\tlet suffixCount = headerCount[header];\n\n\t\t\t\t\t\t\t// Find a unique new header\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tnewHeader = `${header}_${suffixCount}`;\n\t\t\t\t\t\t\t\tsuffixCount++;\n\t\t\t\t\t\t\t} while (usedHeaders.has(newHeader));\n\n\t\t\t\t\t\t\tusedHeaders.add(newHeader); // Mark this new Header as used\n\t\t\t\t\t\t\tresult[i] = newHeader;\n\t\t\t\t\t\t\theaderCount[header]++;\n\t\t\t\t\t\t\tduplicateHeaders = true;\n\t\t\t\t\t\t\tif (renamedHeaders === null) {\n\t\t\t\t\t\t\t\trenamedHeaders = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenamedHeaders[newHeader] = header;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tusedHeaders.add(header); // Ensure the original header is marked as used\n\t\t\t\t\t}\n\t\t\t\t\tif (duplicateHeaders) {\n\t\t\t\t\t\tconsole.warn('Duplicate headers found and renamed.');\n\t\t\t\t\t}\n\t\t\t\t\theaderParsed = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: data,\n\t\t\t\t\terrors: errors,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tdelimiter: delim,\n\t\t\t\t\t\tlinebreak: newline,\n\t\t\t\t\t\taborted: aborted,\n\t\t\t\t\t\ttruncated: !!stopped,\n\t\t\t\t\t\tcursor: lastCursor + (baseIndex || 0),\n\t\t\t\t\t\trenamedHeaders: renamedHeaders\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/** Executes the user's step function and resets data & errors. */\n\t\t\tfunction doStep()\n\t\t\t{\n\t\t\t\tstep(returnable());\n\t\t\t\tdata = [];\n\t\t\t\terrors = [];\n\t\t\t}\n\t\t};\n\n\t\t/** Sets the abort flag */\n\t\tthis.abort = function()\n\t\t{\n\t\t\taborted = true;\n\t\t};\n\n\t\t/** Gets the cursor position */\n\t\tthis.getCharIndex = function()\n\t\t{\n\t\t\treturn cursor;\n\t\t};\n\t}\n\n\n\tfunction newWorker()\n\t{\n\t\tif (!Papa.WORKERS_SUPPORTED)\n\t\t\treturn false;\n\n\t\tvar workerUrl = getWorkerBlob();\n\t\tvar w = new global.Worker(workerUrl);\n\t\tw.onmessage = mainThreadReceivedMessage;\n\t\tw.id = workerIdCounter++;\n\t\tworkers[w.id] = w;\n\t\treturn w;\n\t}\n\n\t/** Callback when main thread receives a message */\n\tfunction mainThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\t\tvar worker = workers[msg.workerId];\n\t\tvar aborted = false;\n\n\t\tif (msg.error)\n\t\t\tworker.userError(msg.error, msg.file);\n\t\telse if (msg.results && msg.results.data)\n\t\t{\n\t\t\tvar abort = function() {\n\t\t\t\taborted = true;\n\t\t\t\tcompleteWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } });\n\t\t\t};\n\n\t\t\tvar handle = {\n\t\t\t\tabort: abort,\n\t\t\t\tpause: notImplemented,\n\t\t\t\tresume: notImplemented\n\t\t\t};\n\n\t\t\tif (isFunction(worker.userStep))\n\t\t\t{\n\t\t\t\tfor (var i = 0; i < msg.results.data.length; i++)\n\t\t\t\t{\n\t\t\t\t\tworker.userStep({\n\t\t\t\t\t\tdata: msg.results.data[i],\n\t\t\t\t\t\terrors: msg.results.errors,\n\t\t\t\t\t\tmeta: msg.results.meta\n\t\t\t\t\t}, handle);\n\t\t\t\t\tif (aborted)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdelete msg.results;\t// free memory ASAP\n\t\t\t}\n\t\t\telse if (isFunction(worker.userChunk))\n\t\t\t{\n\t\t\t\tworker.userChunk(msg.results, handle, msg.file);\n\t\t\t\tdelete msg.results;\n\t\t\t}\n\t\t}\n\n\t\tif (msg.finished && !aborted)\n\t\t\tcompleteWorker(msg.workerId, msg.results);\n\t}\n\n\tfunction completeWorker(workerId, results) {\n\t\tvar worker = workers[workerId];\n\t\tif (isFunction(worker.userComplete))\n\t\t\tworker.userComplete(results);\n\t\tworker.terminate();\n\t\tdelete workers[workerId];\n\t}\n\n\tfunction notImplemented() {\n\t\tthrow new Error('Not implemented.');\n\t}\n\n\t/** Callback when worker thread receives a message */\n\tfunction workerThreadReceivedMessage(e)\n\t{\n\t\tvar msg = e.data;\n\n\t\tif (typeof Papa.WORKER_ID === 'undefined' && msg)\n\t\t\tPapa.WORKER_ID = msg.workerId;\n\n\t\tif (typeof msg.input === 'string')\n\t\t{\n\t\t\tglobal.postMessage({\n\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\tresults: Papa.parse(msg.input, msg.config),\n\t\t\t\tfinished: true\n\t\t\t});\n\t\t}\n\t\telse if ((global.File && msg.input instanceof File) || msg.input instanceof Object)\t// thank you, Safari (see issue #106)\n\t\t{\n\t\t\tvar results = Papa.parse(msg.input, msg.config);\n\t\t\tif (results)\n\t\t\t\tglobal.postMessage({\n\t\t\t\t\tworkerId: Papa.WORKER_ID,\n\t\t\t\t\tresults: results,\n\t\t\t\t\tfinished: true\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Makes a deep copy of an array or object (mostly) */\n\tfunction copy(obj)\n\t{\n\t\tif (typeof obj !== 'object' || obj === null)\n\t\t\treturn obj;\n\t\tvar cpy = Array.isArray(obj) ? [] : {};\n\t\tfor (var key in obj)\n\t\t\tcpy[key] = copy(obj[key]);\n\t\treturn cpy;\n\t}\n\n\tfunction bindFunction(f, self)\n\t{\n\t\treturn function() { f.apply(self, arguments); };\n\t}\n\tfunction isFunction(func)\n\t{\n\t\treturn typeof func === 'function';\n\t}\n\n\treturn Papa;\n}));\n","/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n  try {\n    return document.execCommand(type);\n  } catch (err) {\n    return false;\n  }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n  var selectedText = select_default()(target);\n  command('cut');\n  return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n  var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n  var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n  fakeElement.style.fontSize = '12pt'; // Reset box model\n\n  fakeElement.style.border = '0';\n  fakeElement.style.padding = '0';\n  fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n  fakeElement.style.position = 'absolute';\n  fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n  var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n  fakeElement.style.top = \"\".concat(yPosition, \"px\");\n  fakeElement.setAttribute('readonly', '');\n  fakeElement.value = value;\n  return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n  var fakeElement = createFakeElement(value);\n  options.container.appendChild(fakeElement);\n  var selectedText = select_default()(fakeElement);\n  command('copy');\n  fakeElement.remove();\n  return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    container: document.body\n  };\n  var selectedText = '';\n\n  if (typeof target === 'string') {\n    selectedText = fakeCopyAction(target, options);\n  } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n    // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n    selectedText = fakeCopyAction(target.value, options);\n  } else {\n    selectedText = select_default()(target);\n    command('copy');\n  }\n\n  return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  // Defines base properties passed from constructor.\n  var _options$action = options.action,\n      action = _options$action === void 0 ? 'copy' : _options$action,\n      container = options.container,\n      target = options.target,\n      text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n  if (action !== 'copy' && action !== 'cut') {\n    throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n  } // Sets the `target` property using an element that will be have its content copied.\n\n\n  if (target !== undefined) {\n    if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n      if (action === 'copy' && target.hasAttribute('disabled')) {\n        throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n      }\n\n      if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n        throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n      }\n    } else {\n      throw new Error('Invalid \"target\" value, use a valid Element');\n    }\n  } // Define selection strategy based on `text` property.\n\n\n  if (text) {\n    return actions_copy(text, {\n      container: container\n    });\n  } // Defines which selection strategy based on `target` property.\n\n\n  if (target) {\n    return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n      container: container\n    });\n  }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n  var attribute = \"data-clipboard-\".concat(suffix);\n\n  if (!element.hasAttribute(attribute)) {\n    return;\n  }\n\n  return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n  _inherits(Clipboard, _Emitter);\n\n  var _super = _createSuper(Clipboard);\n\n  /**\n   * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n   * @param {Object} options\n   */\n  function Clipboard(trigger, options) {\n    var _this;\n\n    _classCallCheck(this, Clipboard);\n\n    _this = _super.call(this);\n\n    _this.resolveOptions(options);\n\n    _this.listenClick(trigger);\n\n    return _this;\n  }\n  /**\n   * Defines if attributes would be resolved using internal setter functions\n   * or custom functions that were passed in the constructor.\n   * @param {Object} options\n   */\n\n\n  _createClass(Clipboard, [{\n    key: \"resolveOptions\",\n    value: function resolveOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n      this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n      this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n      this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n    }\n    /**\n     * Adds a click event listener to the passed trigger.\n     * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n     */\n\n  }, {\n    key: \"listenClick\",\n    value: function listenClick(trigger) {\n      var _this2 = this;\n\n      this.listener = listen_default()(trigger, 'click', function (e) {\n        return _this2.onClick(e);\n      });\n    }\n    /**\n     * Defines a new `ClipboardAction` on each click event.\n     * @param {Event} e\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick(e) {\n      var trigger = e.delegateTarget || e.currentTarget;\n      var action = this.action(trigger) || 'copy';\n      var text = actions_default({\n        action: action,\n        container: this.container,\n        target: this.target(trigger),\n        text: this.text(trigger)\n      }); // Fires an event based on the copy operation result.\n\n      this.emit(text ? 'success' : 'error', {\n        action: action,\n        text: text,\n        trigger: trigger,\n        clearSelection: function clearSelection() {\n          if (trigger) {\n            trigger.focus();\n          }\n\n          window.getSelection().removeAllRanges();\n        }\n      });\n    }\n    /**\n     * Default `action` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultAction\",\n    value: function defaultAction(trigger) {\n      return getAttributeValue('action', trigger);\n    }\n    /**\n     * Default `target` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultTarget\",\n    value: function defaultTarget(trigger) {\n      var selector = getAttributeValue('target', trigger);\n\n      if (selector) {\n        return document.querySelector(selector);\n      }\n    }\n    /**\n     * Allow fire programmatically a copy action\n     * @param {String|HTMLElement} target\n     * @param {Object} options\n     * @returns Text copied.\n     */\n\n  }, {\n    key: \"defaultText\",\n\n    /**\n     * Default `text` lookup function.\n     * @param {Element} trigger\n     */\n    value: function defaultText(trigger) {\n      return getAttributeValue('text', trigger);\n    }\n    /**\n     * Destroy lifecycle.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.listener.destroy();\n    }\n  }], [{\n    key: \"copy\",\n    value: function copy(target) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        container: document.body\n      };\n      return actions_copy(target, options);\n    }\n    /**\n     * Allow fire programmatically a cut action\n     * @param {String|HTMLElement} target\n     * @returns Text cutted.\n     */\n\n  }, {\n    key: \"cut\",\n    value: function cut(target) {\n      return actions_cut(target);\n    }\n    /**\n     * Returns the support of the given action, or all actions if no action is\n     * given.\n     * @param {String} [action]\n     */\n\n  }, {\n    key: \"isSupported\",\n    value: function isSupported() {\n      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n      var actions = typeof action === 'string' ? [action] : action;\n      var support = !!document.queryCommandSupported;\n      actions.forEach(function (action) {\n        support = support && !!document.queryCommandSupported(action);\n      });\n      return support;\n    }\n  }]);\n\n  return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n    var proto = Element.prototype;\n\n    proto.matches = proto.matchesSelector ||\n                    proto.mozMatchesSelector ||\n                    proto.msMatchesSelector ||\n                    proto.oMatchesSelector ||\n                    proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n        if (typeof element.matches === 'function' &&\n            element.matches(selector)) {\n          return element;\n        }\n        element = element.parentNode;\n    }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n    var listenerFn = listener.apply(this, arguments);\n\n    element.addEventListener(type, listenerFn, useCapture);\n\n    return {\n        destroy: function() {\n            element.removeEventListener(type, listenerFn, useCapture);\n        }\n    }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n    // Handle the regular Element usage\n    if (typeof elements.addEventListener === 'function') {\n        return _delegate.apply(null, arguments);\n    }\n\n    // Handle Element-less usage, it defaults to global delegation\n    if (typeof type === 'function') {\n        // Use `document` as the first parameter, then apply arguments\n        // This is a short way to .unshift `arguments` without running into deoptimizations\n        return _delegate.bind(null, document).apply(null, arguments);\n    }\n\n    // Handle Selector-based usage\n    if (typeof elements === 'string') {\n        elements = document.querySelectorAll(elements);\n    }\n\n    // Handle Array-like based usage\n    return Array.prototype.map.call(elements, function (element) {\n        return _delegate(element, selector, type, callback, useCapture);\n    });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n    return function(e) {\n        e.delegateTarget = closest(e.target, selector);\n\n        if (e.delegateTarget) {\n            callback.call(element, e);\n        }\n    }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n    return value !== undefined\n        && value instanceof HTMLElement\n        && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return value !== undefined\n        && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n        && ('length' in value)\n        && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n    return typeof value === 'string'\n        || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n    if (!target && !type && !callback) {\n        throw new Error('Missing required arguments');\n    }\n\n    if (!is.string(type)) {\n        throw new TypeError('Second argument must be a String');\n    }\n\n    if (!is.fn(callback)) {\n        throw new TypeError('Third argument must be a Function');\n    }\n\n    if (is.node(target)) {\n        return listenNode(target, type, callback);\n    }\n    else if (is.nodeList(target)) {\n        return listenNodeList(target, type, callback);\n    }\n    else if (is.string(target)) {\n        return listenSelector(target, type, callback);\n    }\n    else {\n        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n    }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n    node.addEventListener(type, callback);\n\n    return {\n        destroy: function() {\n            node.removeEventListener(type, callback);\n        }\n    }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n    Array.prototype.forEach.call(nodeList, function(node) {\n        node.addEventListener(type, callback);\n    });\n\n    return {\n        destroy: function() {\n            Array.prototype.forEach.call(nodeList, function(node) {\n                node.removeEventListener(type, callback);\n            });\n        }\n    }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n    return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n    var selectedText;\n\n    if (element.nodeName === 'SELECT') {\n        element.focus();\n\n        selectedText = element.value;\n    }\n    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n        var isReadOnly = element.hasAttribute('readonly');\n\n        if (!isReadOnly) {\n            element.setAttribute('readonly', '');\n        }\n\n        element.select();\n        element.setSelectionRange(0, element.value.length);\n\n        if (!isReadOnly) {\n            element.removeAttribute('readonly');\n        }\n\n        selectedText = element.value;\n    }\n    else {\n        if (element.hasAttribute('contenteditable')) {\n            element.focus();\n        }\n\n        var selection = window.getSelection();\n        var range = document.createRange();\n\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        selectedText = selection.toString();\n    }\n\n    return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});","import $ from 'jquery';\n\nvar globalID = 1;\nvar pastWarnings = {};\n\nvar Utils = {\n  // Parsley DOM-API\n  // returns object from dom attributes and values\n  attr: function (element, namespace, obj) {\n    var i;\n    var attribute;\n    var attributes;\n    var regex = new RegExp('^' + namespace, 'i');\n\n    if ('undefined' === typeof obj)\n      obj = {};\n    else {\n      // Clear all own properties. This won't affect prototype's values\n      for (i in obj) {\n        if (obj.hasOwnProperty(i))\n          delete obj[i];\n      }\n    }\n\n    if (!element)\n      return obj;\n\n    attributes = element.attributes;\n    for (i = attributes.length; i--; ) {\n      attribute = attributes[i];\n\n      if (attribute && attribute.specified && regex.test(attribute.name)) {\n        obj[this.camelize(attribute.name.slice(namespace.length))] = this.deserializeValue(attribute.value);\n      }\n    }\n\n    return obj;\n  },\n\n  checkAttr: function (element, namespace, checkAttr) {\n    return element.hasAttribute(namespace + checkAttr);\n  },\n\n  setAttr: function (element, namespace, attr, value) {\n    element.setAttribute(this.dasherize(namespace + attr), String(value));\n  },\n\n  getType: function(element) {\n    return element.getAttribute('type') || 'text';\n  },\n\n  generateID: function () {\n    return '' + globalID++;\n  },\n\n  /** Third party functions **/\n  deserializeValue: function (value) {\n    var num;\n\n    try {\n      return value ?\n        value == \"true\" ||\n        (value == \"false\" ? false :\n        value == \"null\" ? null :\n        !isNaN(num = Number(value)) ? num :\n        /^[\\[\\{]/.test(value) ? JSON.parse(value) :\n        value)\n        : value;\n    } catch (e) { return value; }\n  },\n\n  // Zepto camelize function\n  camelize: function (str) {\n    return str.replace(/-+(.)?/g, function (match, chr) {\n      return chr ? chr.toUpperCase() : '';\n    });\n  },\n\n  // Zepto dasherize function\n  dasherize: function (str) {\n    return str.replace(/::/g, '/')\n      .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n      .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n      .replace(/_/g, '-')\n      .toLowerCase();\n  },\n\n  warn: function () {\n    if (window.console && 'function' === typeof window.console.warn)\n      window.console.warn(...arguments);\n  },\n\n  warnOnce: function(msg) {\n    if (!pastWarnings[msg]) {\n      pastWarnings[msg] = true;\n      this.warn(...arguments);\n    }\n  },\n\n  _resetWarnings: function () {\n    pastWarnings = {};\n  },\n\n  trimString: function(string) {\n    return string.replace(/^\\s+|\\s+$/g, '');\n  },\n\n  parse: {\n    date: function(string) {\n      let parsed = string.match(/^(\\d{4,})-(\\d\\d)-(\\d\\d)$/);\n      if (!parsed)\n        return null;\n      let [_, year, month, day] = parsed.map(x => parseInt(x, 10));\n      let date = new Date(year, month - 1, day);\n      if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day)\n        return null;\n      return date;\n    },\n    string: function(string) {\n      return string;\n    },\n    integer: function(string) {\n      if (isNaN(string))\n        return null;\n      return parseInt(string, 10);\n    },\n    number: function(string) {\n      if (isNaN(string))\n        throw null;\n      return parseFloat(string);\n    },\n    'boolean': function _boolean(string) {\n      return !(/^\\s*false\\s*$/i.test(string));\n    },\n    object: function(string) {\n      return Utils.deserializeValue(string);\n    },\n    regexp: function(regexp) {\n      var flags = '';\n\n      // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern\n      if (/^\\/.*\\/(?:[gimy]*)$/.test(regexp)) {\n        // Replace the regexp literal string with the first match group: ([gimy]*)\n        // If no flag is present, this will be a blank string\n        flags = regexp.replace(/.*\\/([gimy]*)$/, '$1');\n        // Again, replace the regexp literal string with the first match group:\n        // everything excluding the opening and closing slashes and the flags\n        regexp = regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');\n      } else {\n        // Anchor regexp:\n        regexp = '^' + regexp + '$';\n      }\n      return new RegExp(regexp, flags);\n    }\n  },\n\n  parseRequirement: function(requirementType, string) {\n    var converter = this.parse[requirementType || 'string'];\n    if (!converter)\n      throw 'Unknown requirement specification: \"' + requirementType + '\"';\n    let converted = converter(string);\n    if (converted === null)\n      throw `Requirement is not a ${requirementType}: \"${string}\"`;\n    return converted;\n  },\n\n  namespaceEvents: function(events, namespace) {\n    events = this.trimString(events || '').split(/\\s+/);\n    if (!events[0])\n      return '';\n    return $.map(events, evt => `${evt}.${namespace}`).join(' ');\n  },\n\n  difference: function(array, remove) {\n    // This is O(N^2), should be optimized\n    let result = [];\n    $.each(array, (_, elem) => {\n      if (remove.indexOf(elem) == -1)\n        result.push(elem);\n    });\n    return result;\n  },\n\n  // Alter-ego to native Promise.all, but for jQuery\n  all: function(promises) {\n    // jQuery treats $.when() and $.when(singlePromise) differently; let's avoid that and add spurious elements\n    return $.when(...promises, 42, 42);\n  },\n\n  // Object.create polyfill, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill\n  objectCreate: Object.create || (function () {\n    var Object = function () {};\n    return function (prototype) {\n      if (arguments.length > 1) {\n        throw Error('Second argument not supported');\n      }\n      if (typeof prototype != 'object') {\n        throw TypeError('Argument must be an object');\n      }\n      Object.prototype = prototype;\n      var result = new Object();\n      Object.prototype = null;\n      return result;\n    };\n  })(),\n\n  _SubmitSelector: 'input[type=\"submit\"], button:submit'\n};\n\nexport default Utils;\n","// All these options could be overriden and specified directly in DOM using\n// `data-parsley-` default DOM-API\n// eg: `inputs` can be set in DOM using `data-parsley-inputs=\"input, textarea\"`\n// eg: `data-parsley-stop-on-first-failing-constraint=\"false\"`\n\nvar Defaults = {\n  // ### General\n\n  // Default data-namespace for DOM API\n  namespace: 'data-parsley-',\n\n  // Supported inputs by default\n  inputs: 'input, textarea, select',\n\n  // Excluded inputs by default\n  excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]',\n\n  // Stop validating field on highest priority failing constraint\n  priorityEnabled: true,\n\n  // ### Field only\n\n  // identifier used to group together inputs (e.g. radio buttons...)\n  multiple: null,\n\n  // identifier (or array of identifiers) used to validate only a select group of inputs\n  group: null,\n\n  // ### UI\n  // Enable\\Disable error messages\n  uiEnabled: true,\n\n  // Key events threshold before validation\n  validationThreshold: 3,\n\n  // Focused field on form validation error. 'first'|'last'|'none'\n  focus: 'first',\n\n  // event(s) that will trigger validation before first failure. eg: `input`...\n  trigger: false,\n\n  // event(s) that will trigger validation after first failure.\n  triggerAfterFailure: 'input',\n\n  // Class that would be added on every failing validation Parsley field\n  errorClass: 'parsley-error',\n\n  // Same for success validation\n  successClass: 'parsley-success',\n\n  // Return the `$element` that will receive these above success or error classes\n  // Could also be (and given directly from DOM) a valid selector like `'#div'`\n  classHandler: function (Field) {},\n\n  // Return the `$element` where errors will be appended\n  // Could also be (and given directly from DOM) a valid selector like `'#div'`\n  errorsContainer: function (Field) {},\n\n  // ul elem that would receive errors' list\n  errorsWrapper: '<ul class=\"parsley-errors-list\"></ul>',\n\n  // li elem that would receive error message\n  errorTemplate: '<li></li>'\n};\n\nexport default Defaults;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar Base = function () {\n  this.__id__ = Utils.generateID();\n};\n\nBase.prototype = {\n  asyncSupport: true, // Deprecated\n\n  _pipeAccordingToValidationResult: function () {\n    var pipe = () => {\n      var r = $.Deferred();\n      if (true !== this.validationResult)\n        r.reject();\n      return r.resolve().promise();\n    };\n    return [pipe, pipe];\n  },\n\n  actualizeOptions: function () {\n    Utils.attr(this.element, this.options.namespace, this.domOptions);\n    if (this.parent && this.parent.actualizeOptions)\n      this.parent.actualizeOptions();\n    return this;\n  },\n\n  _resetOptions: function (initOptions) {\n    this.domOptions = Utils.objectCreate(this.parent.options);\n    this.options = Utils.objectCreate(this.domOptions);\n    // Shallow copy of ownProperties of initOptions:\n    for (var i in initOptions) {\n      if (initOptions.hasOwnProperty(i))\n        this.options[i] = initOptions[i];\n    }\n    this.actualizeOptions();\n  },\n\n  _listeners: null,\n\n  // Register a callback for the given event name\n  // Callback is called with context as the first argument and the `this`\n  // The context is the current parsley instance, or window.Parsley if global\n  // A return value of `false` will interrupt the calls\n  on: function (name, fn) {\n    this._listeners = this._listeners || {};\n    var queue = this._listeners[name] = this._listeners[name] || [];\n    queue.push(fn);\n\n    return this;\n  },\n\n  // Deprecated. Use `on` instead\n  subscribe: function(name, fn) {\n    $.listenTo(this, name.toLowerCase(), fn);\n  },\n\n  // Unregister a callback (or all if none is given) for the given event name\n  off: function (name, fn) {\n    var queue = this._listeners && this._listeners[name];\n    if (queue) {\n      if (!fn) {\n        delete this._listeners[name];\n      } else {\n        for (var i = queue.length; i--; )\n          if (queue[i] === fn)\n            queue.splice(i, 1);\n      }\n    }\n    return this;\n  },\n\n  // Deprecated. Use `off`\n  unsubscribe: function(name, fn) {\n    $.unsubscribeTo(this, name.toLowerCase());\n  },\n\n  // Trigger an event of the given name\n  // A return value of `false` interrupts the callback chain\n  // Returns false if execution was interrupted\n  trigger: function (name, target, extraArg) {\n    target = target || this;\n    var queue = this._listeners && this._listeners[name];\n    var result;\n    var parentResult;\n    if (queue) {\n      for (var i = queue.length; i--; ) {\n        result = queue[i].call(target, target, extraArg);\n        if (result === false) return result;\n      }\n    }\n    if (this.parent) {\n      return this.parent.trigger(name, target, extraArg);\n    }\n    return true;\n  },\n\n  asyncIsValid: function (group, force) {\n    Utils.warnOnce(\"asyncIsValid is deprecated; please use whenValid instead\");\n    return this.whenValid({group, force});\n  },\n\n  _findRelated: function () {\n    return this.options.multiple ?\n      $(this.parent.element.querySelectorAll(`[${this.options.namespace}multiple=\"${this.options.multiple}\"]`))\n    : this.$element;\n  }\n};\n\nexport default Base;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar convertArrayRequirement = function(string, length) {\n  var m = string.match(/^\\s*\\[(.*)\\]\\s*$/);\n  if (!m)\n    throw 'Requirement is not an array: \"' + string + '\"';\n  var values = m[1].split(',').map(Utils.trimString);\n  if (values.length !== length)\n    throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';\n  return values;\n};\n\nvar convertExtraOptionRequirement = function(requirementSpec, string, extraOptionReader) {\n  var main = null;\n  var extra = {};\n  for (var key in requirementSpec) {\n    if (key) {\n      var value = extraOptionReader(key);\n      if ('string' === typeof value)\n        value = Utils.parseRequirement(requirementSpec[key], value);\n      extra[key] = value;\n    } else {\n      main = Utils.parseRequirement(requirementSpec[key], string);\n    }\n  }\n  return [main, extra];\n};\n\n// A Validator needs to implement the methods `validate` and `parseRequirements`\n\nvar Validator = function(spec) {\n  $.extend(true, this, spec);\n};\n\nValidator.prototype = {\n  // Returns `true` iff the given `value` is valid according the given requirements.\n  validate: function(value, requirementFirstArg) {\n    if (this.fn) { // Legacy style validator\n\n      if (arguments.length > 3)  // If more args then value, requirement, instance...\n        requirementFirstArg = [].slice.call(arguments, 1, -1);  // Skip first arg (value) and last (instance), combining the rest\n      return this.fn(value, requirementFirstArg);\n    }\n\n    if (Array.isArray(value)) {\n      if (!this.validateMultiple)\n        throw 'Validator `' + this.name + '` does not handle multiple values';\n      return this.validateMultiple(...arguments);\n    } else {\n      let instance = arguments[arguments.length - 1];\n      if (this.validateDate && instance._isDateInput()) {\n        arguments[0] = Utils.parse.date(arguments[0]);\n        if (arguments[0] === null)\n          return false;\n        return this.validateDate(...arguments);\n      }\n      if (this.validateNumber) {\n        if (!value) // Builtin validators all accept empty strings, except `required` of course\n          return true;\n        if (isNaN(value))\n          return false;\n        arguments[0] = parseFloat(arguments[0]);\n        return this.validateNumber(...arguments);\n      }\n      if (this.validateString) {\n        return this.validateString(...arguments);\n      }\n      throw 'Validator `' + this.name + '` only handles multiple values';\n    }\n  },\n\n  // Parses `requirements` into an array of arguments,\n  // according to `this.requirementType`\n  parseRequirements: function(requirements, extraOptionReader) {\n    if ('string' !== typeof requirements) {\n      // Assume requirement already parsed\n      // but make sure we return an array\n      return Array.isArray(requirements) ? requirements : [requirements];\n    }\n    var type = this.requirementType;\n    if (Array.isArray(type)) {\n      var values = convertArrayRequirement(requirements, type.length);\n      for (var i = 0; i < values.length; i++)\n        values[i] = Utils.parseRequirement(type[i], values[i]);\n      return values;\n    } else if ($.isPlainObject(type)) {\n      return convertExtraOptionRequirement(type, requirements, extraOptionReader);\n    } else {\n      return [Utils.parseRequirement(type, requirements)];\n    }\n  },\n  // Defaults:\n  requirementType: 'string',\n\n  priority: 2\n\n};\n\nexport default Validator;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Defaults from './defaults';\nimport Validator from './validator';\n\nvar ValidatorRegistry = function (validators, catalog) {\n  this.__class__ = 'ValidatorRegistry';\n\n  // Default Parsley locale is en\n  this.locale = 'en';\n\n  this.init(validators || {}, catalog || {});\n};\n\nvar typeTesters =  {\n  email: /^((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))$/,\n\n  // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers\n  number: /^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i,\n\n  integer: /^-?\\d+$/,\n\n  digits: /^\\d+$/,\n\n  alphanum: /^\\w+$/i,\n\n  date: {\n    test: value => Utils.parse.date(value) !== null\n  },\n\n  url: new RegExp(\n      \"^\" +\n        // protocol identifier\n        \"(?:(?:https?|ftp)://)?\" + // ** mod: make scheme optional\n        // user:pass authentication\n        \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n        \"(?:\" +\n          // IP address exclusion\n          // private & local networks\n          // \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +   // ** mod: allow local networks\n          // \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n          // \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n          // IP address dotted notation octets\n          // excludes loopback network 0.0.0.0\n          // excludes reserved space >= 224.0.0.0\n          // excludes network & broacast addresses\n          // (first & last IP address of each class)\n          \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n          \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n          \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n        \"|\" +\n          // host name\n          \"(?:(?:[a-zA-Z\\\\u00a1-\\\\uffff0-9]-*)*[a-zA-Z\\\\u00a1-\\\\uffff0-9]+)\" +\n          // domain name\n          \"(?:\\\\.(?:[a-zA-Z\\\\u00a1-\\\\uffff0-9]-*)*[a-zA-Z\\\\u00a1-\\\\uffff0-9]+)*\" +\n          // TLD identifier\n          \"(?:\\\\.(?:[a-zA-Z\\\\u00a1-\\\\uffff]{2,}))\" +\n        \")\" +\n        // port number\n        \"(?::\\\\d{2,5})?\" +\n        // resource path\n        \"(?:/\\\\S*)?\" +\n      \"$\"\n    )\n};\ntypeTesters.range = typeTesters.number;\n\n// See http://stackoverflow.com/a/10454560/8279\nvar decimalPlaces = num => {\n  var match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n  if (!match) { return 0; }\n  return Math.max(\n       0,\n       // Number of digits right of decimal point.\n       (match[1] ? match[1].length : 0) -\n       // Adjust for scientific notation.\n       (match[2] ? +match[2] : 0));\n};\n\n// parseArguments('number', ['1', '2']) => [1, 2]\nlet parseArguments = (type, args) => args.map(Utils.parse[type]);\n// operatorToValidator returns a validating function for an operator function, applied to the given type\nlet operatorToValidator = (type, operator) => {\n  return (value, ...requirementsAndInput) => {\n    requirementsAndInput.pop(); // Get rid of `input` argument\n    return operator(value, ...parseArguments(type, requirementsAndInput));\n  };\n};\n\nlet comparisonOperator = operator => ({\n  validateDate: operatorToValidator('date', operator),\n  validateNumber: operatorToValidator('number', operator),\n  requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s)\n  priority: 30\n});\n\nValidatorRegistry.prototype = {\n  init: function (validators, catalog) {\n    this.catalog = catalog;\n    // Copy prototype's validators:\n    this.validators = Object.assign({}, this.validators);\n\n    for (var name in validators)\n      this.addValidator(name, validators[name].fn, validators[name].priority);\n\n    window.Parsley.trigger('parsley:validator:init');\n  },\n\n  // Set new messages locale if we have dictionary loaded in ParsleyConfig.i18n\n  setLocale: function (locale) {\n    if ('undefined' === typeof this.catalog[locale])\n      throw new Error(locale + ' is not available in the catalog');\n\n    this.locale = locale;\n\n    return this;\n  },\n\n  // Add a new messages catalog for a given locale. Set locale for this catalog if set === `true`\n  addCatalog: function (locale, messages, set) {\n    if ('object' === typeof messages)\n      this.catalog[locale] = messages;\n\n    if (true === set)\n      return this.setLocale(locale);\n\n    return this;\n  },\n\n  // Add a specific message for a given constraint in a given locale\n  addMessage: function (locale, name, message) {\n    if ('undefined' === typeof this.catalog[locale])\n      this.catalog[locale] = {};\n\n    this.catalog[locale][name] = message;\n\n    return this;\n  },\n\n  // Add messages for a given locale\n  addMessages: function (locale, nameMessageObject) {\n    for (var name in nameMessageObject)\n      this.addMessage(locale, name, nameMessageObject[name]);\n\n    return this;\n  },\n\n  // Add a new validator\n  //\n  //    addValidator('custom', {\n  //        requirementType: ['integer', 'integer'],\n  //        validateString: function(value, from, to) {},\n  //        priority: 22,\n  //        messages: {\n  //          en: \"Hey, that's no good\",\n  //          fr: \"Aye aye, pas bon du tout\",\n  //        }\n  //    })\n  //\n  // Old API was addValidator(name, function, priority)\n  //\n  addValidator: function (name, arg1, arg2) {\n    if (this.validators[name])\n      Utils.warn('Validator \"' + name + '\" is already defined.');\n    else if (Defaults.hasOwnProperty(name)) {\n      Utils.warn('\"' + name + '\" is a restricted keyword and is not a valid validator name.');\n      return;\n    }\n    return this._setValidator(...arguments);\n  },\n\n  hasValidator: function (name) {\n    return !!this.validators[name];\n  },\n\n  updateValidator: function (name, arg1, arg2) {\n    if (!this.validators[name]) {\n      Utils.warn('Validator \"' + name + '\" is not already defined.');\n      return this.addValidator(...arguments);\n    }\n    return this._setValidator(...arguments);\n  },\n\n  removeValidator: function (name) {\n    if (!this.validators[name])\n      Utils.warn('Validator \"' + name + '\" is not defined.');\n\n    delete this.validators[name];\n\n    return this;\n  },\n\n  _setValidator: function (name, validator, priority) {\n    if ('object' !== typeof validator) {\n      // Old style validator, with `fn` and `priority`\n      validator = {\n        fn: validator,\n        priority: priority\n      };\n    }\n    if (!validator.validate) {\n      validator = new Validator(validator);\n    }\n    this.validators[name] = validator;\n\n    for (var locale in validator.messages || {})\n      this.addMessage(locale, name, validator.messages[locale]);\n\n    return this;\n  },\n\n  getErrorMessage: function (constraint) {\n    var message;\n\n    // Type constraints are a bit different, we have to match their requirements too to find right error message\n    if ('type' === constraint.name) {\n      var typeMessages = this.catalog[this.locale][constraint.name] || {};\n      message = typeMessages[constraint.requirements];\n    } else\n      message = this.formatMessage(this.catalog[this.locale][constraint.name], constraint.requirements);\n\n    return message || this.catalog[this.locale].defaultMessage || this.catalog.en.defaultMessage;\n  },\n\n  // Kind of light `sprintf()` implementation\n  formatMessage: function (string, parameters) {\n    if ('object' === typeof parameters) {\n      for (var i in parameters)\n        string = this.formatMessage(string, parameters[i]);\n\n      return string;\n    }\n\n    return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';\n  },\n\n  // Here is the Parsley default validators list.\n  // A validator is an object with the following key values:\n  //  - priority: an integer\n  //  - requirement: 'string' (default), 'integer', 'number', 'regexp' or an Array of these\n  //  - validateString, validateMultiple, validateNumber: functions returning `true`, `false` or a promise\n  // Alternatively, a validator can be a function that returns such an object\n  //\n  validators: {\n    notblank: {\n      validateString: function(value) {\n        return /\\S/.test(value);\n      },\n      priority: 2\n    },\n    required: {\n      validateMultiple: function(values) {\n        return values.length > 0;\n      },\n      validateString: function(value) {\n        return /\\S/.test(value);\n      },\n      priority: 512\n    },\n    type: {\n      validateString: function(value, type, {step = 'any', base = 0} = {}) {\n        var tester = typeTesters[type];\n        if (!tester) {\n          throw new Error('validator type `' + type + '` is not supported');\n        }\n        if (!value)\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        if (!tester.test(value))\n          return false;\n        if ('number' === type) {\n          if (!/^any$/i.test(step || '')) {\n            var nb = Number(value);\n            var decimals = Math.max(decimalPlaces(step), decimalPlaces(base));\n            if (decimalPlaces(nb) > decimals) // Value can't have too many decimals\n              return false;\n            // Be careful of rounding errors by using integers.\n            var toInt = f => Math.round(f * Math.pow(10, decimals));\n            if ((toInt(nb) - toInt(base)) % toInt(step) != 0)\n              return false;\n          }\n        }\n        return true;\n      },\n      requirementType: {\n        '': 'string',\n        step: 'string',\n        base: 'number'\n      },\n      priority: 256\n    },\n    pattern: {\n      validateString: function(value, regexp) {\n        if (!value)\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        return regexp.test(value);\n      },\n      requirementType: 'regexp',\n      priority: 64\n    },\n    minlength: {\n      validateString: function (value, requirement) {\n        if (!value)\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        return value.length >= requirement;\n      },\n      requirementType: 'integer',\n      priority: 30\n    },\n    maxlength: {\n      validateString: function (value, requirement) {\n        return value.length <= requirement;\n      },\n      requirementType: 'integer',\n      priority: 30\n    },\n    length: {\n      validateString: function (value, min, max) {\n        if (!value)\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        return value.length >= min && value.length <= max;\n      },\n      requirementType: ['integer', 'integer'],\n      priority: 30\n    },\n    mincheck: {\n      validateMultiple: function (values, requirement) {\n        return values.length >= requirement;\n      },\n      requirementType: 'integer',\n      priority: 30\n    },\n    maxcheck: {\n      validateMultiple: function (values, requirement) {\n        return values.length <= requirement;\n      },\n      requirementType: 'integer',\n      priority: 30\n    },\n    check: {\n      validateMultiple: function (values, min, max) {\n        return values.length >= min && values.length <= max;\n      },\n      requirementType: ['integer', 'integer'],\n      priority: 30\n    },\n    min: comparisonOperator((value, requirement) => value >= requirement),\n    max: comparisonOperator((value, requirement) => value <= requirement),\n    range: comparisonOperator((value, min, max) => value >= min && value <= max),\n    equalto: {\n      validateString: function (value, refOrValue) {\n        if (!value)\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        var $reference = $(refOrValue);\n        if ($reference.length)\n          return value === $reference.val();\n        else\n          return value === refOrValue;\n      },\n      priority: 256\n    },\n    euvatin: {\n      validateString: function (value, refOrValue) {\n        if (!value) {\n          return true;  // Builtin validators all accept empty strings, except `required` of course\n        }\n\n        var re = /^[A-Z][A-Z][A-Za-z0-9 -]{2,}$/;\n        return re.test(value);\n      },\n      priority: 30,\n    },\n  }\n};\n\nexport default ValidatorRegistry;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar UI = {};\n\nvar diffResults = function (newResult, oldResult, deep) {\n  var added = [];\n  var kept = [];\n\n  for (var i = 0; i < newResult.length; i++) {\n    var found = false;\n\n    for (var j = 0; j < oldResult.length; j++)\n      if (newResult[i].assert.name === oldResult[j].assert.name) {\n        found = true;\n        break;\n      }\n\n    if (found)\n      kept.push(newResult[i]);\n    else\n      added.push(newResult[i]);\n  }\n\n  return {\n    kept: kept,\n    added: added,\n    removed: !deep ? diffResults(oldResult, newResult, true).added : []\n  };\n};\n\nUI.Form = {\n\n  _actualizeTriggers: function () {\n    this.$element.on('submit.Parsley', evt => { this.onSubmitValidate(evt); });\n    this.$element.on('click.Parsley', Utils._SubmitSelector, evt => { this.onSubmitButton(evt); });\n\n    // UI could be disabled\n    if (false === this.options.uiEnabled)\n      return;\n\n    this.element.setAttribute('novalidate', '');\n  },\n\n  focus: function () {\n    this._focusedField = null;\n\n    if (true === this.validationResult || 'none' === this.options.focus)\n      return null;\n\n    for (var i = 0; i < this.fields.length; i++) {\n      var field = this.fields[i];\n      if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) {\n        this._focusedField = field.$element;\n        if ('first' === this.options.focus)\n          break;\n      }\n    }\n\n    if (null === this._focusedField)\n      return null;\n\n    return this._focusedField.focus();\n  },\n\n  _destroyUI: function () {\n    // Reset all event listeners\n    this.$element.off('.Parsley');\n  }\n\n};\n\nUI.Field = {\n\n  _reflowUI: function () {\n    this._buildUI();\n\n    // If this field doesn't have an active UI don't bother doing something\n    if (!this._ui)\n      return;\n\n    // Diff between two validation results\n    var diff = diffResults(this.validationResult, this._ui.lastValidationResult);\n\n    // Then store current validation result for next reflow\n    this._ui.lastValidationResult = this.validationResult;\n\n    // Handle valid / invalid / none field class\n    this._manageStatusClass();\n\n    // Add, remove, updated errors messages\n    this._manageErrorsMessages(diff);\n\n    // Triggers impl\n    this._actualizeTriggers();\n\n    // If field is not valid for the first time, bind keyup trigger to ease UX and quickly inform user\n    if ((diff.kept.length || diff.added.length) && !this._failedOnce) {\n      this._failedOnce = true;\n      this._actualizeTriggers();\n    }\n  },\n\n  // Returns an array of field's error message(s)\n  getErrorsMessages: function () {\n    // No error message, field is valid\n    if (true === this.validationResult)\n      return [];\n\n    var messages = [];\n\n    for (var i = 0; i < this.validationResult.length; i++)\n      messages.push(this.validationResult[i].errorMessage ||\n       this._getErrorMessage(this.validationResult[i].assert));\n\n    return messages;\n  },\n\n  // It's a goal of Parsley that this method is no longer required [#1073]\n  addError: function (name, {message, assert, updateClass = true} = {}) {\n    this._buildUI();\n    this._addError(name, {message, assert});\n\n    if (updateClass)\n      this._errorClass();\n  },\n\n  // It's a goal of Parsley that this method is no longer required [#1073]\n  updateError: function (name, {message, assert, updateClass = true} = {}) {\n    this._buildUI();\n    this._updateError(name, {message, assert});\n\n    if (updateClass)\n      this._errorClass();\n  },\n\n  // It's a goal of Parsley that this method is no longer required [#1073]\n  removeError: function (name, {updateClass = true} = {}) {\n    this._buildUI();\n    this._removeError(name);\n\n    // edge case possible here: remove a standard Parsley error that is still failing in this.validationResult\n    // but highly improbable cuz' manually removing a well Parsley handled error makes no sense.\n    if (updateClass)\n      this._manageStatusClass();\n  },\n\n  _manageStatusClass: function () {\n    if (this.hasConstraints() && this.needsValidation() && true === this.validationResult)\n      this._successClass();\n    else if (this.validationResult.length > 0)\n      this._errorClass();\n    else\n      this._resetClass();\n  },\n\n  _manageErrorsMessages: function (diff) {\n    if ('undefined' !== typeof this.options.errorsMessagesDisabled)\n      return;\n\n    // Case where we have errorMessage option that configure an unique field error message, regardless failing validators\n    if ('undefined' !== typeof this.options.errorMessage) {\n      if ((diff.added.length || diff.kept.length)) {\n        this._insertErrorWrapper();\n\n        if (0 === this._ui.$errorsWrapper.find('.parsley-custom-error-message').length)\n          this._ui.$errorsWrapper\n            .append(\n              $(this.options.errorTemplate)\n              .addClass('parsley-custom-error-message')\n            );\n\n        this._ui.$errorClassHandler.attr('aria-describedby', this._ui.errorsWrapperId);\n\n        return this._ui.$errorsWrapper\n          .addClass('filled')\n          .attr('aria-hidden', 'false')\n          .find('.parsley-custom-error-message')\n          .html(this.options.errorMessage);\n      }\n\n      this._ui.$errorClassHandler.removeAttr('aria-describedby');\n\n      return this._ui.$errorsWrapper\n        .removeClass('filled')\n        .attr('aria-hidden', 'true')\n        .find('.parsley-custom-error-message')\n        .remove();\n    }\n\n    // Show, hide, update failing constraints messages\n    for (var i = 0; i < diff.removed.length; i++)\n      this._removeError(diff.removed[i].assert.name);\n\n    for (i = 0; i < diff.added.length; i++)\n      this._addError(diff.added[i].assert.name, {message: diff.added[i].errorMessage, assert: diff.added[i].assert});\n\n    for (i = 0; i < diff.kept.length; i++)\n      this._updateError(diff.kept[i].assert.name, {message: diff.kept[i].errorMessage, assert: diff.kept[i].assert});\n  },\n\n\n  _addError: function (name, {message, assert}) {\n    this._insertErrorWrapper();\n    this._ui.$errorClassHandler\n      .attr('aria-describedby', this._ui.errorsWrapperId);\n    this._ui.$errorsWrapper\n      .addClass('filled')\n      .attr('aria-hidden', 'false')\n      .append(\n        $(this.options.errorTemplate)\n        .addClass('parsley-' + name)\n        .html(message || this._getErrorMessage(assert))\n      );\n  },\n\n  _updateError: function (name, {message, assert}) {\n    this._ui.$errorsWrapper\n      .addClass('filled')\n      .find('.parsley-' + name)\n      .html(message || this._getErrorMessage(assert));\n  },\n\n  _removeError: function (name) {\n    this._ui.$errorClassHandler\n      .removeAttr('aria-describedby');\n    this._ui.$errorsWrapper\n      .removeClass('filled')\n      .attr('aria-hidden', 'true')\n      .find('.parsley-' + name)\n      .remove();\n  },\n\n  _getErrorMessage: function (constraint) {\n    var customConstraintErrorMessage = constraint.name + 'Message';\n\n    if ('undefined' !== typeof this.options[customConstraintErrorMessage])\n      return window.Parsley.formatMessage(this.options[customConstraintErrorMessage], constraint.requirements);\n\n    return window.Parsley.getErrorMessage(constraint);\n  },\n\n  _buildUI: function () {\n    // UI could be already built or disabled\n    if (this._ui || false === this.options.uiEnabled)\n      return;\n\n    var _ui = {};\n\n    // Give field its Parsley id in DOM\n    this.element.setAttribute(this.options.namespace + 'id', this.__id__);\n\n    /** Generate important UI elements and store them in this **/\n    // $errorClassHandler is the $element that woul have parsley-error and parsley-success classes\n    _ui.$errorClassHandler = this._manageClassHandler();\n\n    // $errorsWrapper is a div that would contain the various field errors, it will be appended into $errorsContainer\n    _ui.errorsWrapperId = 'parsley-id-' + (this.options.multiple ? 'multiple-' + this.options.multiple : this.__id__);\n    _ui.$errorsWrapper = $(this.options.errorsWrapper).attr('id', _ui.errorsWrapperId);\n\n    // ValidationResult UI storage to detect what have changed bwt two validations, and update DOM accordingly\n    _ui.lastValidationResult = [];\n    _ui.validationInformationVisible = false;\n\n    // Store it in this for later\n    this._ui = _ui;\n  },\n\n  // Determine which element will have `parsley-error` and `parsley-success` classes\n  _manageClassHandler: function () {\n    // Class handled could also be determined by function given in Parsley options\n    if ('string' === typeof this.options.classHandler && $(this.options.classHandler).length)\n      return $(this.options.classHandler);\n\n    // Class handled could also be determined by function given in Parsley options\n    var $handlerFunction = this.options.classHandler;\n\n    // It might also be the function name of a global function\n    if ('string' === typeof this.options.classHandler && 'function' === typeof window[this.options.classHandler])\n      $handlerFunction = window[this.options.classHandler];\n\n    if ('function' === typeof $handlerFunction) {\n      var $handler = $handlerFunction.call(this, this);\n\n      // If this function returned a valid existing DOM element, go for it\n      if ('undefined' !== typeof $handler && $handler.length)\n        return $handler;\n    } else if ('object' === typeof $handlerFunction && $handlerFunction instanceof jQuery && $handlerFunction.length) {\n      return $handlerFunction;\n    } else if ($handlerFunction) {\n      Utils.warn('The class handler `' + $handlerFunction + '` does not exist in DOM nor as a global JS function');\n    }\n\n    return this._inputHolder();\n  },\n\n  _inputHolder: function() {\n    // if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container\n    if (!this.options.multiple || this.element.nodeName === 'SELECT')\n      return this.$element;\n\n    // But if multiple element (radio, checkbox), that would be their parent\n    return this.$element.parent();\n  },\n\n  _insertErrorWrapper: function () {\n    var $errorsContainer = this.options.errorsContainer;\n\n    // Nothing to do if already inserted\n    if (0 !== this._ui.$errorsWrapper.parent().length)\n      return this._ui.$errorsWrapper.parent();\n\n    if ('string' === typeof $errorsContainer) {\n      if ($($errorsContainer).length)\n        return $($errorsContainer).append(this._ui.$errorsWrapper);\n      else if ('function' === typeof window[$errorsContainer])\n        $errorsContainer = window[$errorsContainer];\n      else\n        Utils.warn('The errors container `' + $errorsContainer + '` does not exist in DOM nor as a global JS function');\n    }\n\n    if ('function' === typeof $errorsContainer)\n      $errorsContainer = $errorsContainer.call(this, this);\n\n    if ('object' === typeof $errorsContainer && $errorsContainer.length)\n      return $errorsContainer.append(this._ui.$errorsWrapper);\n\n    return this._inputHolder().after(this._ui.$errorsWrapper);\n  },\n\n  _actualizeTriggers: function () {\n    var $toBind = this._findRelated();\n    var trigger;\n\n    // Remove Parsley events already bound on this field\n    $toBind.off('.Parsley');\n    if (this._failedOnce)\n      $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), () => {\n        this._validateIfNeeded();\n      });\n    else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) {\n      $toBind.on(trigger, event => {\n        this._validateIfNeeded(event);\n      });\n    }\n  },\n\n  _validateIfNeeded: function (event) {\n    // For keyup, keypress, keydown, input... events that could be a little bit obstrusive\n    // do not validate if val length < min threshold on first validation. Once field have been validated once and info\n    // about success or failure have been displayed, always validate with this trigger to reflect every yalidation change.\n    if (event && /key|input/.test(event.type))\n      if (!(this._ui && this._ui.validationInformationVisible) && this.getValue().length <= this.options.validationThreshold)\n        return;\n\n    if (this.options.debounce) {\n      window.clearTimeout(this._debounced);\n      this._debounced = window.setTimeout(() => this.validate(), this.options.debounce);\n    } else\n      this.validate();\n  },\n\n  _resetUI: function () {\n    // Reset all event listeners\n    this._failedOnce = false;\n    this._actualizeTriggers();\n\n    // Nothing to do if UI never initialized for this field\n    if ('undefined' === typeof this._ui)\n      return;\n\n    // Reset all errors' li\n    this._ui.$errorsWrapper\n      .removeClass('filled')\n      .children()\n      .remove();\n\n    // Reset validation class\n    this._resetClass();\n\n    // Reset validation flags and last validation result\n    this._ui.lastValidationResult = [];\n    this._ui.validationInformationVisible = false;\n  },\n\n  _destroyUI: function () {\n    this._resetUI();\n\n    if ('undefined' !== typeof this._ui)\n      this._ui.$errorsWrapper.remove();\n\n    delete this._ui;\n  },\n\n  _successClass: function () {\n    this._ui.validationInformationVisible = true;\n    this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass);\n  },\n  _errorClass: function () {\n    this._ui.validationInformationVisible = true;\n    this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass);\n  },\n  _resetClass: function () {\n    this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass);\n  }\n};\n\nexport default UI;\n","import $ from 'jquery';\nimport Base from './base';\nimport Utils from './utils';\n\nvar Form = function (element, domOptions, options) {\n  this.__class__ = 'Form';\n\n  this.element = element;\n  this.$element = $(element);\n  this.domOptions = domOptions;\n  this.options = options;\n  this.parent = window.Parsley;\n\n  this.fields = [];\n  this.validationResult = null;\n};\n\nvar statusMapping = {pending: null, resolved: true, rejected: false};\n\nForm.prototype = {\n  onSubmitValidate: function (event) {\n    // This is a Parsley generated submit event, do not validate, do not prevent, simply exit and keep normal behavior\n    if (true === event.parsley)\n      return;\n\n    // If we didn't come here through a submit button, use the first one in the form\n    var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0];\n    this._submitSource = null;\n    this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);\n    if (submitSource && null !== submitSource.getAttribute('formnovalidate'))\n      return;\n\n    window.Parsley._remoteCache = {};\n\n    var promise = this.whenValidate({event});\n\n    if ('resolved' === promise.state() && false !== this._trigger('submit')) {\n      // All good, let event go through. We make this distinction because browsers\n      // differ in their handling of `submit` being called from inside a submit event [#1047]\n    } else {\n      // Rejected or pending: cancel this submit\n      event.stopImmediatePropagation();\n      event.preventDefault();\n      if ('pending' === promise.state())\n        promise.done(() => { this._submit(submitSource); });\n    }\n  },\n\n  onSubmitButton: function(event) {\n    this._submitSource = event.currentTarget;\n  },\n  // internal\n  // _submit submits the form, this time without going through the validations.\n  // Care must be taken to \"fake\" the actual submit button being clicked.\n  _submit: function (submitSource) {\n    if (false === this._trigger('submit'))\n      return;\n    // Add submit button's data\n    if (submitSource) {\n      var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false);\n      if (0 === $synthetic.length)\n        $synthetic = $('<input class=\"parsley-synthetic-submit-button\" type=\"hidden\">').appendTo(this.$element);\n      $synthetic.attr({\n        name: submitSource.getAttribute('name'),\n        value: submitSource.getAttribute('value')\n      });\n    }\n\n    this.$element.trigger(Object.assign($.Event('submit'), {parsley: true}));\n  },\n\n  // Performs validation on fields while triggering events.\n  // @returns `true` if all validations succeeds, `false`\n  // if a failure is immediately detected, or `null`\n  // if dependant on a promise.\n  // Consider using `whenValidate` instead.\n  validate: function (options) {\n    if (arguments.length >= 1 && !$.isPlainObject(options)) {\n      Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');\n      var [group, force, event] = arguments;\n      options = {group, force, event};\n    }\n    return statusMapping[ this.whenValidate(options).state() ];\n  },\n\n  whenValidate: function ({group, force, event} = {}) {\n    this.submitEvent = event;\n    if (event) {\n      this.submitEvent = Object.assign({}, event, {preventDefault: () => {\n        Utils.warnOnce(\"Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`\");\n        this.validationResult = false;\n      }});\n    }\n    this.validationResult = true;\n\n    // fire validate event to eventually modify things before every validation\n    this._trigger('validate');\n\n    // Refresh form DOM options and form's fields that could have changed\n    this._refreshFields();\n\n    var promises = this._withoutReactualizingFormOptions(() => {\n      return $.map(this.fields, field => field.whenValidate({force, group}));\n    });\n\n    return Utils.all(promises)\n      .done(  () => { this._trigger('success'); })\n      .fail(  () => {\n        this.validationResult = false;\n        this.focus();\n        this._trigger('error');\n      })\n      .always(() => { this._trigger('validated'); })\n      .pipe(...this._pipeAccordingToValidationResult());\n  },\n\n  // Iterate over refreshed fields, and stop on first failure.\n  // Returns `true` if all fields are valid, `false` if a failure is detected\n  // or `null` if the result depends on an unresolved promise.\n  // Prefer using `whenValid` instead.\n  isValid: function (options) {\n    if (arguments.length >= 1 && !$.isPlainObject(options)) {\n      Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');\n      var [group, force] = arguments;\n      options = {group, force};\n    }\n    return statusMapping[ this.whenValid(options).state() ];\n  },\n\n  // Iterate over refreshed fields and validate them.\n  // Returns a promise.\n  // A validation that immediately fails will interrupt the validations.\n  whenValid: function ({group, force} = {}) {\n    this._refreshFields();\n\n    var promises = this._withoutReactualizingFormOptions(() => {\n      return $.map(this.fields, field => field.whenValid({group, force}));\n    });\n    return Utils.all(promises);\n  },\n\n  refresh: function() {\n    this._refreshFields();\n    return this;\n  },\n\n  // Reset UI\n  reset: function () {\n    // Form case: emit a reset event for each field\n    for (var i = 0; i < this.fields.length; i++)\n      this.fields[i].reset();\n\n    this._trigger('reset');\n  },\n\n  // Destroy Parsley instance (+ UI)\n  destroy: function () {\n    // Field case: emit destroy event to clean UI and then destroy stored instance\n    this._destroyUI();\n\n    // Form case: destroy all its fields and then destroy stored instance\n    for (var i = 0; i < this.fields.length; i++)\n      this.fields[i].destroy();\n\n    this.$element.removeData('Parsley');\n    this._trigger('destroy');\n  },\n\n  _refreshFields: function () {\n    return this.actualizeOptions()._bindFields();\n  },\n\n  _bindFields: function () {\n    var oldFields = this.fields;\n\n    this.fields = [];\n    this.fieldsMappedById = {};\n\n    this._withoutReactualizingFormOptions(() => {\n      this.$element\n      .find(this.options.inputs)\n      .not(this.options.excluded)\n      .not(`[${this.options.namespace}excluded=true]`)\n      .each((_, element) => {\n        var fieldInstance = new window.Parsley.Factory(element, {}, this);\n\n        // Only add valid and not excluded `Field` and `FieldMultiple` children\n        if ('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) {\n          let uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__;\n          if ('undefined' === typeof this.fieldsMappedById[uniqueId]) {\n            this.fieldsMappedById[uniqueId] = fieldInstance;\n            this.fields.push(fieldInstance);\n          }\n        }\n      });\n\n      $.each(Utils.difference(oldFields, this.fields), (_, field) => {\n        field.reset();\n      });\n    });\n    return this;\n  },\n\n  // Internal only.\n  // Looping on a form's fields to do validation or similar\n  // will trigger reactualizing options on all of them, which\n  // in turn will reactualize the form's options.\n  // To avoid calling actualizeOptions so many times on the form\n  // for nothing, _withoutReactualizingFormOptions temporarily disables\n  // the method actualizeOptions on this form while `fn` is called.\n  _withoutReactualizingFormOptions: function (fn) {\n    var oldActualizeOptions = this.actualizeOptions;\n    this.actualizeOptions = function () { return this; };\n    var result = fn();\n    this.actualizeOptions = oldActualizeOptions;\n    return result;\n  },\n\n  // Internal only.\n  // Shortcut to trigger an event\n  // Returns true iff event is not interrupted and default not prevented.\n  _trigger: function (eventName) {\n    return this.trigger('form:' + eventName);\n  }\n\n};\n\nexport default Form;\n","import Utils from './utils';\nimport Validator from './validator';\n\nconst Constraint = function(parsleyField, name, requirements, priority, isDomConstraint) {\n  const validatorSpec = window.Parsley._validatorRegistry.validators[name];\n  const validator = new Validator(validatorSpec);\n  priority = priority || parsleyField.options[name + 'Priority'] || validator.priority;\n  isDomConstraint = (true === isDomConstraint);\n\n  Object.assign(this, {\n    validator,\n    name,\n    requirements,\n    priority,\n    isDomConstraint\n  });\n  this._parseRequirements(parsleyField.options);\n};\n\nconst capitalize = function(str) {\n  const cap = str[0].toUpperCase();\n  return cap + str.slice(1);\n};\n\nConstraint.prototype = {\n  validate: function(value, instance) {\n    return this.validator.validate(value, ...this.requirementList, instance);\n  },\n\n  _parseRequirements: function(options) {\n    this.requirementList = this.validator.parseRequirements(this.requirements,\n      key => options[this.name + capitalize(key)]\n    );\n  }\n};\n\nexport default Constraint;\n","import $ from 'jquery';\nimport Constraint from './constraint';\nimport UI from './ui';\nimport Utils from './utils';\n\nvar Field = function (field, domOptions, options, parsleyFormInstance) {\n  this.__class__ = 'Field';\n\n  this.element = field;\n  this.$element = $(field);\n\n  // Set parent if we have one\n  if ('undefined' !== typeof parsleyFormInstance) {\n    this.parent = parsleyFormInstance;\n  }\n\n  this.options = options;\n  this.domOptions = domOptions;\n\n  // Initialize some properties\n  this.constraints = [];\n  this.constraintsByName = {};\n  this.validationResult = true;\n\n  // Bind constraints\n  this._bindConstraints();\n};\n\nvar statusMapping = {pending: null, resolved: true, rejected: false};\n\nField.prototype = {\n  // # Public API\n  // Validate field and trigger some events for mainly `UI`\n  // @returns `true`, an array of the validators that failed, or\n  // `null` if validation is not finished. Prefer using whenValidate\n  validate: function (options) {\n    if (arguments.length >= 1 && !$.isPlainObject(options)) {\n      Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');\n      options = {options};\n    }\n    var promise = this.whenValidate(options);\n    if (!promise)  // If excluded with `group` option\n      return true;\n    switch (promise.state()) {\n      case 'pending': return null;\n      case 'resolved': return true;\n      case 'rejected': return this.validationResult;\n    }\n  },\n\n  // Validate field and trigger some events for mainly `UI`\n  // @returns a promise that succeeds only when all validations do\n  // or `undefined` if field is not in the given `group`.\n  whenValidate: function ({force, group} =  {}) {\n    // do not validate a field if not the same as given validation group\n    this.refresh();\n    if (group && !this._isInGroup(group))\n      return;\n\n    this.value = this.getValue();\n\n    // Field Validate event. `this.value` could be altered for custom needs\n    this._trigger('validate');\n\n    return this.whenValid({force, value: this.value, _refreshed: true})\n      .always(() => { this._reflowUI(); })\n      .done(() =>   { this._trigger('success'); })\n      .fail(() =>   { this._trigger('error'); })\n      .always(() => { this._trigger('validated'); })\n      .pipe(...this._pipeAccordingToValidationResult());\n  },\n\n  hasConstraints: function () {\n    return 0 !== this.constraints.length;\n  },\n\n  // An empty optional field does not need validation\n  needsValidation: function (value) {\n    if ('undefined' === typeof value)\n      value = this.getValue();\n\n    // If a field is empty and not required, it is valid\n    // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators\n    if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty)\n      return false;\n\n    return true;\n  },\n\n  _isInGroup: function (group) {\n    if (Array.isArray(this.options.group))\n      return -1 !== $.inArray(group, this.options.group);\n    return this.options.group === group;\n  },\n\n  // Just validate field. Do not trigger any event.\n  // Returns `true` iff all constraints pass, `false` if there are failures,\n  // or `null` if the result can not be determined yet (depends on a promise)\n  // See also `whenValid`.\n  isValid: function (options) {\n    if (arguments.length >= 1 && !$.isPlainObject(options)) {\n      Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');\n      var [force, value] = arguments;\n      options = {force, value};\n    }\n    var promise = this.whenValid(options);\n    if (!promise) // Excluded via `group`\n      return true;\n    return statusMapping[promise.state()];\n  },\n\n  // Just validate field. Do not trigger any event.\n  // @returns a promise that succeeds only when all validations do\n  // or `undefined` if the field is not in the given `group`.\n  // The argument `force` will force validation of empty fields.\n  // If a `value` is given, it will be validated instead of the value of the input.\n  whenValid: function ({force = false, value, group, _refreshed} = {}) {\n    // Recompute options and rebind constraints to have latest changes\n    if (!_refreshed)\n      this.refresh();\n    // do not validate a field if not the same as given validation group\n    if (group && !this._isInGroup(group))\n      return;\n\n    this.validationResult = true;\n\n    // A field without constraint is valid\n    if (!this.hasConstraints())\n      return $.when();\n\n    // Value could be passed as argument, needed to add more power to 'field:validate'\n    if ('undefined' === typeof value || null === value)\n      value = this.getValue();\n\n    if (!this.needsValidation(value) && true !== force)\n      return $.when();\n\n    var groupedConstraints = this._getGroupedConstraints();\n    var promises = [];\n    $.each(groupedConstraints, (_, constraints) => {\n      // Process one group of constraints at a time, we validate the constraints\n      // and combine the promises together.\n      var promise = Utils.all(\n        $.map(constraints, constraint => this._validateConstraint(value, constraint))\n      );\n      promises.push(promise);\n      if (promise.state() === 'rejected')\n        return false; // Interrupt processing if a group has already failed\n    });\n    return Utils.all(promises);\n  },\n\n  // @returns a promise\n  _validateConstraint: function(value, constraint) {\n    var result = constraint.validate(value, this);\n    // Map false to a failed promise\n    if (false === result)\n      result = $.Deferred().reject();\n    // Make sure we return a promise and that we record failures\n    return Utils.all([result]).fail(errorMessage => {\n      if (!(this.validationResult instanceof Array))\n        this.validationResult = [];\n      this.validationResult.push({\n        assert: constraint,\n        errorMessage: 'string' === typeof errorMessage && errorMessage\n      });\n    });\n  },\n\n  // @returns Parsley field computed value that could be overrided or configured in DOM\n  getValue: function () {\n    var value;\n\n    // Value could be overriden in DOM or with explicit options\n    if ('function' === typeof this.options.value)\n      value = this.options.value(this);\n    else if ('undefined' !== typeof this.options.value)\n      value = this.options.value;\n    else\n      value = this.$element.val();\n\n    // Handle wrong DOM or configurations\n    if ('undefined' === typeof value || null === value)\n      return '';\n\n    return this._handleWhitespace(value);\n  },\n\n  // Reset UI\n  reset: function () {\n    this._resetUI();\n    return this._trigger('reset');\n  },\n\n  // Destroy Parsley instance (+ UI)\n  destroy: function () {\n    // Field case: emit destroy event to clean UI and then destroy stored instance\n    this._destroyUI();\n    this.$element.removeData('Parsley');\n    this.$element.removeData('FieldMultiple');\n    this._trigger('destroy');\n  },\n\n  // Actualize options and rebind constraints\n  refresh: function () {\n    this._refreshConstraints();\n    return this;\n  },\n\n  _refreshConstraints: function () {\n    return this.actualizeOptions()._bindConstraints();\n  },\n\n  refreshConstraints: function() {\n    Utils.warnOnce(\"Parsley's refreshConstraints is deprecated. Please use refresh\");\n    return this.refresh();\n  },\n\n  /**\n  * Add a new constraint to a field\n  *\n  * @param {String}   name\n  * @param {Mixed}    requirements      optional\n  * @param {Number}   priority          optional\n  * @param {Boolean}  isDomConstraint   optional\n  */\n  addConstraint: function (name, requirements, priority, isDomConstraint) {\n\n    if (window.Parsley._validatorRegistry.validators[name]) {\n      var constraint = new Constraint(this, name, requirements, priority, isDomConstraint);\n\n      // if constraint already exist, delete it and push new version\n      if ('undefined' !== this.constraintsByName[constraint.name])\n        this.removeConstraint(constraint.name);\n\n      this.constraints.push(constraint);\n      this.constraintsByName[constraint.name] = constraint;\n    }\n\n    return this;\n  },\n\n  // Remove a constraint\n  removeConstraint: function (name) {\n    for (var i = 0; i < this.constraints.length; i++)\n      if (name === this.constraints[i].name) {\n        this.constraints.splice(i, 1);\n        break;\n      }\n    delete this.constraintsByName[name];\n    return this;\n  },\n\n  // Update a constraint (Remove + re-add)\n  updateConstraint: function (name, parameters, priority) {\n    return this.removeConstraint(name)\n      .addConstraint(name, parameters, priority);\n  },\n\n  // # Internals\n\n  // Internal only.\n  // Bind constraints from config + options + DOM\n  _bindConstraints: function () {\n    var constraints = [];\n    var constraintsByName = {};\n\n    // clean all existing DOM constraints to only keep javascript user constraints\n    for (var i = 0; i < this.constraints.length; i++)\n      if (false === this.constraints[i].isDomConstraint) {\n        constraints.push(this.constraints[i]);\n        constraintsByName[this.constraints[i].name] = this.constraints[i];\n      }\n\n    this.constraints = constraints;\n    this.constraintsByName = constraintsByName;\n\n    // then re-add Parsley DOM-API constraints\n    for (var name in this.options)\n      this.addConstraint(name, this.options[name], undefined, true);\n\n    // finally, bind special HTML5 constraints\n    return this._bindHtml5Constraints();\n  },\n\n  // Internal only.\n  // Bind specific HTML5 constraints to be HTML5 compliant\n  _bindHtml5Constraints: function () {\n    // html5 required\n    if (null !== this.element.getAttribute('required'))\n      this.addConstraint('required', true, undefined, true);\n\n    // html5 pattern\n    if (null !== this.element.getAttribute('pattern'))\n      this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true);\n\n    // range\n    let min = this.element.getAttribute('min');\n    let max = this.element.getAttribute('max');\n    if (null !== min && null !== max)\n      this.addConstraint('range', [min, max], undefined, true);\n\n    // HTML5 min\n    else if (null !== min)\n      this.addConstraint('min', min, undefined, true);\n\n    // HTML5 max\n    else if (null !== max)\n      this.addConstraint('max', max, undefined, true);\n\n\n    // length\n    if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength'))\n      this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true);\n\n    // HTML5 minlength\n    else if (null !== this.element.getAttribute('minlength'))\n      this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true);\n\n    // HTML5 maxlength\n    else if (null !== this.element.getAttribute('maxlength'))\n      this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true);\n\n\n    // html5 types\n    var type = Utils.getType(this.element);\n\n    // Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise\n    if ('number' === type) {\n      return this.addConstraint('type', ['number', {\n        step: this.element.getAttribute('step') || '1',\n        base: min || this.element.getAttribute('value')\n      }], undefined, true);\n    // Regular other HTML5 supported types\n    } else if (/^(email|url|range|date)$/i.test(type)) {\n      return this.addConstraint('type', type, undefined, true);\n    }\n    return this;\n  },\n\n  // Internal only.\n  // Field is required if have required constraint without `false` value\n  _isRequired: function () {\n    if ('undefined' === typeof this.constraintsByName.required)\n      return false;\n\n    return false !== this.constraintsByName.required.requirements;\n  },\n\n  // Internal only.\n  // Shortcut to trigger an event\n  _trigger: function (eventName) {\n    return this.trigger('field:' + eventName);\n  },\n\n  // Internal only\n  // Handles whitespace in a value\n  // Use `data-parsley-whitespace=\"squish\"` to auto squish input value\n  // Use `data-parsley-whitespace=\"trim\"` to auto trim input value\n  _handleWhitespace: function (value) {\n    if (true === this.options.trimValue)\n      Utils.warnOnce('data-parsley-trim-value=\"true\" is deprecated, please use data-parsley-whitespace=\"trim\"');\n\n    if ('squish' === this.options.whitespace)\n      value = value.replace(/\\s{2,}/g, ' ');\n\n    if (('trim' === this.options.whitespace) || ('squish' === this.options.whitespace) || (true === this.options.trimValue))\n      value = Utils.trimString(value);\n\n    return value;\n  },\n\n  _isDateInput: function() {\n    var c = this.constraintsByName.type;\n    return c && c.requirements === 'date';\n  },\n\n  // Internal only.\n  // Returns the constraints, grouped by descending priority.\n  // The result is thus an array of arrays of constraints.\n  _getGroupedConstraints: function () {\n    if (false === this.options.priorityEnabled)\n      return [this.constraints];\n\n    var groupedConstraints = [];\n    var index = {};\n\n    // Create array unique of priorities\n    for (var i = 0; i < this.constraints.length; i++) {\n      var p = this.constraints[i].priority;\n      if (!index[p])\n        groupedConstraints.push(index[p] = []);\n      index[p].push(this.constraints[i]);\n    }\n    // Sort them by priority DESC\n    groupedConstraints.sort(function (a, b) { return b[0].priority - a[0].priority; });\n\n    return groupedConstraints;\n  }\n\n};\n\nexport default Field;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar Multiple = function () {\n  this.__class__ = 'FieldMultiple';\n};\n\nMultiple.prototype = {\n  // Add new `$element` sibling for multiple field\n  addElement: function ($element) {\n    this.$elements.push($element);\n\n    return this;\n  },\n\n  // See `Field._refreshConstraints()`\n  _refreshConstraints: function () {\n    var fieldConstraints;\n\n    this.constraints = [];\n\n    // Select multiple special treatment\n    if (this.element.nodeName === 'SELECT') {\n      this.actualizeOptions()._bindConstraints();\n\n      return this;\n    }\n\n    // Gather all constraints for each input in the multiple group\n    for (var i = 0; i < this.$elements.length; i++) {\n\n      // Check if element have not been dynamically removed since last binding\n      if (!$('html').has(this.$elements[i]).length) {\n        this.$elements.splice(i, 1);\n        continue;\n      }\n\n      fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;\n\n      for (var j = 0; j < fieldConstraints.length; j++)\n        this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);\n    }\n\n    return this;\n  },\n\n  // See `Field.getValue()`\n  getValue: function () {\n    // Value could be overriden in DOM\n    if ('function' === typeof this.options.value)\n      return this.options.value(this);\n    else if ('undefined' !== typeof this.options.value)\n      return this.options.value;\n\n    // Radio input case\n    if (this.element.nodeName === 'INPUT') {\n      var type = Utils.getType(this.element);\n      if (type === 'radio')\n        return this._findRelated().filter(':checked').val() || '';\n\n      // checkbox input case\n      if (type === 'checkbox') {\n        var values = [];\n\n        this._findRelated().filter(':checked').each(function () {\n          values.push($(this).val());\n        });\n\n        return values;\n      }\n    }\n\n    // Select multiple case\n    if (this.element.nodeName === 'SELECT' && null === this.$element.val())\n      return [];\n\n    // Default case that should never happen\n    return this.$element.val();\n  },\n\n  _init: function () {\n    this.$elements = [this.$element];\n\n    return this;\n  }\n};\n\nexport default Multiple;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Base from './base';\nimport Form from './form';\nimport Field from './field';\nimport Multiple from './multiple';\n\nvar Factory = function (element, options, parsleyFormInstance) {\n  this.element = element;\n  this.$element = $(element);\n\n  // If the element has already been bound, returns its saved Parsley instance\n  var savedparsleyFormInstance = this.$element.data('Parsley');\n  if (savedparsleyFormInstance) {\n\n    // If the saved instance has been bound without a Form parent and there is one given in this call, add it\n    if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) {\n      savedparsleyFormInstance.parent = parsleyFormInstance;\n      savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options);\n    }\n\n    if ('object' === typeof options) {\n      Object.assign(savedparsleyFormInstance.options, options);\n    }\n\n    return savedparsleyFormInstance;\n  }\n\n  // Parsley must be instantiated with a DOM element or jQuery $element\n  if (!this.$element.length)\n    throw new Error('You must bind Parsley on an existing element.');\n\n  if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__)\n    throw new Error('Parent instance must be a Form instance');\n\n  this.parent = parsleyFormInstance || window.Parsley;\n  return this.init(options);\n};\n\nFactory.prototype = {\n  init: function (options) {\n    this.__class__ = 'Parsley';\n    this.__version__ = 'VERSION';\n    this.__id__ = Utils.generateID();\n\n    // Pre-compute options\n    this._resetOptions(options);\n\n    // A Form instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute\n    if (this.element.nodeName === 'FORM' || (Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)))\n      return this.bind('parsleyForm');\n\n    // Every other element is bound as a `Field` or `FieldMultiple`\n    return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');\n  },\n\n  isMultiple: function () {\n    var type = Utils.getType(this.element);\n    return ((type === 'radio' || type === 'checkbox') ||\n      (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')));\n  },\n\n  // Multiples fields are a real nightmare :(\n  // Maybe some refactoring would be appreciated here...\n  handleMultiple: function () {\n    var name;\n    var multiple;\n    var parsleyMultipleInstance;\n\n    // Handle multiple name\n    this.options.multiple = this.options.multiple ||\n      (name = this.element.getAttribute('name')) ||\n      this.element.getAttribute('id');\n\n    // Special select multiple input\n    if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) {\n      this.options.multiple = this.options.multiple || this.__id__;\n      return this.bind('parsleyFieldMultiple');\n\n    // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it\n    } else if (!this.options.multiple) {\n      Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element);\n      return this;\n    }\n\n    // Remove special chars\n    this.options.multiple = this.options.multiple.replace(/(:|\\.|\\[|\\]|\\{|\\}|\\$)/g, '');\n\n    // Add proper `data-parsley-multiple` to siblings if we have a valid multiple name\n    if (name) {\n      $('input[name=\"' + name + '\"]').each((i, input) => {\n        var type = Utils.getType(input);\n        if ((type === 'radio' || type === 'checkbox'))\n          input.setAttribute(this.options.namespace + 'multiple', this.options.multiple);\n      });\n    }\n\n    // Check here if we don't already have a related multiple instance saved\n    var $previouslyRelated = this._findRelated();\n    for (var i = 0; i < $previouslyRelated.length; i++) {\n      parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley');\n      if ('undefined' !== typeof parsleyMultipleInstance) {\n\n        if (!this.$element.data('FieldMultiple')) {\n          parsleyMultipleInstance.addElement(this.$element);\n        }\n\n        break;\n      }\n    }\n\n    // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')`\n    // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance\n    this.bind('parsleyField', true);\n\n    return parsleyMultipleInstance || this.bind('parsleyFieldMultiple');\n  },\n\n  // Return proper `Form`, `Field` or `FieldMultiple`\n  bind: function (type, doNotStore) {\n    var parsleyInstance;\n\n    switch (type) {\n      case 'parsleyForm':\n        parsleyInstance = $.extend(\n          new Form(this.element, this.domOptions, this.options),\n          new Base(),\n          window.ParsleyExtend\n        )._bindFields();\n        break;\n      case 'parsleyField':\n        parsleyInstance = $.extend(\n          new Field(this.element, this.domOptions, this.options, this.parent),\n          new Base(),\n          window.ParsleyExtend\n        );\n        break;\n      case 'parsleyFieldMultiple':\n        parsleyInstance = $.extend(\n          new Field(this.element, this.domOptions, this.options, this.parent),\n          new Multiple(),\n          new Base(),\n          window.ParsleyExtend\n        )._init();\n        break;\n      default:\n        throw new Error(type + 'is not a supported Parsley type');\n    }\n\n    if (this.options.multiple)\n      Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple);\n\n    if ('undefined' !== typeof doNotStore) {\n      this.$element.data('FieldMultiple', parsleyInstance);\n\n      return parsleyInstance;\n    }\n\n    // Store the freshly bound instance in a DOM element for later access using jQuery `data()`\n    this.$element.data('Parsley', parsleyInstance);\n\n    // Tell the world we have a new Form or Field instance!\n    parsleyInstance._actualizeTriggers();\n    parsleyInstance._trigger('init');\n\n    return parsleyInstance;\n  }\n};\n\nexport default Factory;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Defaults from './defaults';\nimport Base from './base';\nimport ValidatorRegistry from './validator_registry';\nimport UI from './ui';\nimport Form from './form';\nimport Field from './field';\nimport Multiple from './multiple';\nimport Factory from './factory';\n\nvar vernums = $.fn.jquery.split('.');\nif (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) {\n  throw \"The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.\";\n}\nif (!vernums.forEach) {\n  Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');\n}\n// Inherit `on`, `off` & `trigger` to Parsley:\nvar Parsley = Object.assign(new Base(), {\n    element: document,\n    $element: $(document),\n    actualizeOptions: null,\n    _resetOptions: null,\n    Factory: Factory,\n    version: 'VERSION'\n  });\n\n// Supplement Field and Form with Base\n// This way, the constructors will have access to those methods\nObject.assign(Field.prototype, UI.Field, Base.prototype);\nObject.assign(Form.prototype, UI.Form, Base.prototype);\n// Inherit actualizeOptions and _resetOptions:\nObject.assign(Factory.prototype, Base.prototype);\n\n// ### jQuery API\n// `$('.elem').parsley(options)` or `$('.elem').psly(options)`\n$.fn.parsley = $.fn.psly = function (options) {\n  if (this.length > 1) {\n    var instances = [];\n\n    this.each(function () {\n      instances.push($(this).parsley(options));\n    });\n\n    return instances;\n  }\n\n  // Return undefined if applied to non existing DOM element\n  if (this.length == 0) {\n    return;\n  }\n\n  return new Factory(this[0], options);\n};\n\n// ### Field and Form extension\n// Ensure the extension is now defined if it wasn't previously\nif ('undefined' === typeof window.ParsleyExtend)\n  window.ParsleyExtend = {};\n\n// ### Parsley config\n// Inherit from ParsleyDefault, and copy over any existing values\nParsley.options = Object.assign(Utils.objectCreate(Defaults), window.ParsleyConfig);\nwindow.ParsleyConfig = Parsley.options; // Old way of accessing global options\n\n// ### Globals\nwindow.Parsley = window.psly = Parsley;\nParsley.Utils = Utils;\nwindow.ParsleyUtils = {};\n$.each(Utils, (key, value) => {\n  if ('function' === typeof value) {\n    window.ParsleyUtils[key] = (...args) => {\n      Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');\n      return Utils[key](...args);\n    };\n  }\n});\n\n// ### Define methods that forward to the registry, and deprecate all access except through window.Parsley\nvar registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);\nwindow.ParsleyValidator = {};\n$.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator hasValidator'.split(' '), function (i, method) {\n  window.Parsley[method] = (...args) => registry[method](...args);\n  window.ParsleyValidator[method] = function () {\n    Utils.warnOnce(`Accessing the method '${method}' through Validator is deprecated. Simply call 'window.Parsley.${method}(...)'`);\n    return window.Parsley[method](...arguments);\n  };\n});\n\n// ### UI\n// Deprecated global object\nwindow.Parsley.UI = UI;\nwindow.ParsleyUI = {\n  removeError: function (instance, name, doNotUpdateClass) {\n    var updateClass = true !== doNotUpdateClass;\n    Utils.warnOnce(`Accessing UI is deprecated. Call 'removeError' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);\n    return instance.removeError(name, {updateClass});\n  },\n  getErrorsMessages: function (instance) {\n    Utils.warnOnce(`Accessing UI is deprecated. Call 'getErrorsMessages' on the instance directly.`);\n    return instance.getErrorsMessages();\n  }\n};\n$.each('addError updateError'.split(' '), function (i, method) {\n  window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {\n    var updateClass = true !== doNotUpdateClass;\n    Utils.warnOnce(`Accessing UI is deprecated. Call '${method}' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);\n    return instance[method](name, {message, assert, updateClass});\n  };\n});\n\n// ### PARSLEY auto-binding\n// Prevent it by setting `ParsleyConfig.autoBind` to `false`\nif (false !== window.ParsleyConfig.autoBind) {\n  $(function () {\n    // Works only on `data-parsley-validate`.\n    if ($('[data-parsley-validate]').length)\n      $('[data-parsley-validate]').parsley();\n  });\n}\n\nexport default Parsley;\n","import $ from 'jquery';\nimport Field from './field';\nimport Form from './form';\nimport Utils from './utils';\n\nvar o = $({});\nvar deprecated = function () {\n  Utils.warnOnce(\"Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley\");\n};\n\n// Returns an event handler that calls `fn` with the arguments it expects\nfunction adapt(fn, context) {\n  // Store to allow unbinding\n  if (!fn.parsleyAdaptedCallback) {\n    fn.parsleyAdaptedCallback = function () {\n      var args = Array.prototype.slice.call(arguments, 0);\n      args.unshift(this);\n      fn.apply(context || o, args);\n    };\n  }\n  return fn.parsleyAdaptedCallback;\n}\n\nvar eventPrefix = 'parsley:';\n// Converts 'parsley:form:validate' into 'form:validate'\nfunction eventName(name) {\n  if (name.lastIndexOf(eventPrefix, 0) === 0)\n    return name.substr(eventPrefix.length);\n  return name;\n}\n\n// $.listen is deprecated. Use Parsley.on instead.\n$.listen = function (name, callback) {\n  var context;\n  deprecated();\n  if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) {\n    context = arguments[1];\n    callback = arguments[2];\n  }\n\n  if ('function' !== typeof callback)\n    throw new Error('Wrong parameters');\n\n  window.Parsley.on(eventName(name), adapt(callback, context));\n};\n\n$.listenTo = function (instance, name, fn) {\n  deprecated();\n  if (!(instance instanceof Field) && !(instance instanceof Form))\n    throw new Error('Must give Parsley instance');\n\n  if ('string' !== typeof name || 'function' !== typeof fn)\n    throw new Error('Wrong parameters');\n\n  instance.on(eventName(name), adapt(fn));\n};\n\n$.unsubscribe = function (name, fn) {\n  deprecated();\n  if ('string' !== typeof name || 'function' !== typeof fn)\n    throw new Error('Wrong arguments');\n  window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback);\n};\n\n$.unsubscribeTo = function (instance, name) {\n  deprecated();\n  if (!(instance instanceof Field) && !(instance instanceof Form))\n    throw new Error('Must give Parsley instance');\n  instance.off(eventName(name));\n};\n\n$.unsubscribeAll = function (name) {\n  deprecated();\n  window.Parsley.off(eventName(name));\n  $('form,input,textarea,select').each(function () {\n    var instance = $(this).data('Parsley');\n    if (instance) {\n      instance.off(eventName(name));\n    }\n  });\n};\n\n// $.emit is deprecated. Use jQuery events instead.\n$.emit = function (name, instance) {\n  deprecated();\n  var instanceGiven = (instance instanceof Field) || (instance instanceof Form);\n  var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);\n  args.unshift(eventName(name));\n  if (!instanceGiven) {\n    instance = window.Parsley;\n  }\n  instance.trigger(...args);\n};\n\nexport default {};\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Base from './base';\n\nimport Parsley from './main';\n\n$.extend(true, Parsley, {\n  asyncValidators: {\n    'default': {\n      fn: function (xhr) {\n        // By default, only status 2xx are deemed successful.\n        // Note: we use status instead of state() because responses with status 200\n        // but invalid messages (e.g. an empty body for content type set to JSON) will\n        // result in state() === 'rejected'.\n        return xhr.status >= 200 && xhr.status < 300;\n      },\n      url: false\n    },\n    reverse: {\n      fn: function (xhr) {\n        // If reverse option is set, a failing ajax request is considered successful\n        return xhr.status < 200 || xhr.status >= 300;\n      },\n      url: false\n    }\n  },\n\n  addAsyncValidator: function (name, fn, url, options) {\n    Parsley.asyncValidators[name] = {\n      fn: fn,\n      url: url || false,\n      options: options || {}\n    };\n\n    return this;\n  }\n\n});\n\nParsley.addValidator('remote', {\n  requirementType: {\n    '': 'string',\n    'validator': 'string',\n    'reverse': 'boolean',\n    'options': 'object'\n  },\n\n  validateString: function (value, url, options, instance) {\n    var data = {};\n    var ajaxOptions;\n    var csr;\n    var validator = options.validator || (true === options.reverse ? 'reverse' : 'default');\n\n    if ('undefined' === typeof Parsley.asyncValidators[validator])\n      throw new Error('Calling an undefined async validator: `' + validator + '`');\n\n    url = Parsley.asyncValidators[validator].url || url;\n\n    // Fill current value\n    if (url.indexOf('{value}') > -1) {\n      url = url.replace('{value}', encodeURIComponent(value));\n    } else {\n      data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value;\n    }\n\n    // Merge options passed in from the function with the ones in the attribute\n    var remoteOptions = $.extend(true, options.options || {} , Parsley.asyncValidators[validator].options);\n\n    // All `$.ajax(options)` could be overridden or extended directly from DOM in `data-parsley-remote-options`\n    ajaxOptions = $.extend(true, {}, {\n      url: url,\n      data: data,\n      type: 'GET'\n    }, remoteOptions);\n\n    // Generate store key based on ajax options\n    instance.trigger('field:ajaxoptions', instance, ajaxOptions);\n\n    csr = $.param(ajaxOptions);\n\n    // Initialise querry cache\n    if ('undefined' === typeof Parsley._remoteCache)\n      Parsley._remoteCache = {};\n\n    // Try to retrieve stored xhr\n    var xhr = Parsley._remoteCache[csr] = Parsley._remoteCache[csr] || $.ajax(ajaxOptions);\n\n    var handleXhr = function () {\n      var result = Parsley.asyncValidators[validator].fn.call(instance, xhr, url, options);\n      if (!result) // Map falsy results to rejected promise\n        result = $.Deferred().reject();\n      return $.when(result);\n    };\n\n    return xhr.then(handleXhr, handleXhr);\n  },\n\n  priority: -1\n});\n\nParsley.on('form:submit', function () {\n  Parsley._remoteCache = {};\n});\n\nBase.prototype.addAsyncValidator = function () {\n  Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');\n  return Parsley.addAsyncValidator(...arguments);\n};\n","// This is included with the Parsley library itself,\n// thus there is no use in adding it to your project.\nimport Parsley from '../parsley/main';\n\nParsley.addMessages('en', {\n  defaultMessage: \"This value seems to be invalid.\",\n  type: {\n    email:        \"This value should be a valid email.\",\n    url:          \"This value should be a valid url.\",\n    number:       \"This value should be a valid number.\",\n    integer:      \"This value should be a valid integer.\",\n    digits:       \"This value should be digits.\",\n    alphanum:     \"This value should be alphanumeric.\"\n  },\n  notblank:       \"This value should not be blank.\",\n  required:       \"This value is required.\",\n  pattern:        \"This value seems to be invalid.\",\n  min:            \"This value should be greater than or equal to %s.\",\n  max:            \"This value should be lower than or equal to %s.\",\n  range:          \"This value should be between %s and %s.\",\n  minlength:      \"This value is too short. It should have %s characters or more.\",\n  maxlength:      \"This value is too long. It should have %s characters or fewer.\",\n  length:         \"This value length is invalid. It should be between %s and %s characters long.\",\n  mincheck:       \"You must select at least %s choices.\",\n  maxcheck:       \"You must select %s choices or fewer.\",\n  check:          \"You must select between %s and %s choices.\",\n  equalto:        \"This value should be the same.\",\n  euvatin:        \"It's not a valid VAT Identification Number.\",\n});\n\nParsley.setLocale('en');\n","/**\n * inputevent - Alleviate browser bugs for input events\n * https://github.com/marcandre/inputevent\n * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm)\n * @author Marc-Andre Lafortune <github@marc-andre.ca>\n * @license MIT\n */\n\nimport $ from 'jquery';\n\nfunction InputEvent() {\n  let globals = window || global;\n\n  // Slightly odd way construct our object. This way methods are force bound.\n  // Used to test for duplicate library.\n  Object.assign(this, {\n\n    // For browsers that do not support isTrusted, assumes event is native.\n    isNativeEvent: evt => {\n      return evt.originalEvent && evt.originalEvent.isTrusted !== false;\n    },\n\n    fakeInputEvent: evt => {\n      if (this.isNativeEvent(evt)) {\n        $(evt.target).trigger('input');\n      }\n    },\n\n    misbehaves: evt => {\n      if (this.isNativeEvent(evt)) {\n        this.behavesOk(evt);\n        $(document)\n          .on('change.inputevent', evt.data.selector, this.fakeInputEvent);\n        this.fakeInputEvent(evt);\n      }\n    },\n\n    behavesOk: evt => {\n      if (this.isNativeEvent(evt)) {\n        $(document) // Simply unbinds the testing handler\n          .off('input.inputevent', evt.data.selector, this.behavesOk)\n          .off('change.inputevent', evt.data.selector, this.misbehaves);\n      }\n    },\n\n    // Bind the testing handlers\n    install: () => {\n      if (globals.inputEventPatched) {\n        return;\n      }\n      globals.inputEventPatched = '0.0.3';\n      for (let selector of ['select', 'input[type=\"checkbox\"]', 'input[type=\"radio\"]', 'input[type=\"file\"]']) {\n        $(document)\n          .on('input.inputevent', selector, {selector}, this.behavesOk)\n          .on('change.inputevent', selector, {selector}, this.misbehaves);\n      }\n    },\n\n    uninstall: () => {\n      delete globals.inputEventPatched;\n      $(document).off('.inputevent');\n    }\n\n  });\n};\n\nexport default new InputEvent();\n","import $ from 'jquery';\nimport Parsley from './parsley/main';\nimport './parsley/pubsub';\nimport './parsley/remote';\nimport './i18n/en';\nimport inputevent from './vendor/inputevent';\n\ninputevent.install();\n\nexport default Parsley;\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.async = {}));\n})(this, (function (exports) { 'use strict';\n\n    /**\n     * Creates a continuation function with some arguments already applied.\n     *\n     * Useful as a shorthand when combined with other control flow functions. Any\n     * arguments passed to the returned function are added to the arguments\n     * originally passed to apply.\n     *\n     * @name apply\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {Function} fn - The function you want to eventually apply all\n     * arguments to. Invokes with (arguments...).\n     * @param {...*} arguments... - Any number of arguments to automatically apply\n     * when the continuation is called.\n     * @returns {Function} the partially-applied function\n     * @example\n     *\n     * // using apply\n     * async.parallel([\n     *     async.apply(fs.writeFile, 'testfile1', 'test1'),\n     *     async.apply(fs.writeFile, 'testfile2', 'test2')\n     * ]);\n     *\n     *\n     * // the same process without using apply\n     * async.parallel([\n     *     function(callback) {\n     *         fs.writeFile('testfile1', 'test1', callback);\n     *     },\n     *     function(callback) {\n     *         fs.writeFile('testfile2', 'test2', callback);\n     *     }\n     * ]);\n     *\n     * // It's possible to pass any number of additional arguments when calling the\n     * // continuation:\n     *\n     * node> var fn = async.apply(sys.puts, 'one');\n     * node> fn('two', 'three');\n     * one\n     * two\n     * three\n     */\n    function apply(fn, ...args) {\n        return (...callArgs) => fn(...args,...callArgs);\n    }\n\n    function initialParams (fn) {\n        return function (...args/*, callback*/) {\n            var callback = args.pop();\n            return fn.call(this, args, callback);\n        };\n    }\n\n    /* istanbul ignore file */\n\n    var hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\n    var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\n    var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\n    function fallback(fn) {\n        setTimeout(fn, 0);\n    }\n\n    function wrap(defer) {\n        return (fn, ...args) => defer(() => fn(...args));\n    }\n\n    var _defer$1;\n\n    if (hasQueueMicrotask) {\n        _defer$1 = queueMicrotask;\n    } else if (hasSetImmediate) {\n        _defer$1 = setImmediate;\n    } else if (hasNextTick) {\n        _defer$1 = process.nextTick;\n    } else {\n        _defer$1 = fallback;\n    }\n\n    var setImmediate$1 = wrap(_defer$1);\n\n    /**\n     * Take a sync function and make it async, passing its return value to a\n     * callback. This is useful for plugging sync functions into a waterfall,\n     * series, or other async functions. Any arguments passed to the generated\n     * function will be passed to the wrapped function (except for the final\n     * callback argument). Errors thrown will be passed to the callback.\n     *\n     * If the function passed to `asyncify` returns a Promise, that promises's\n     * resolved/rejected state will be used to call the callback, rather than simply\n     * the synchronous return value.\n     *\n     * This also means you can asyncify ES2017 `async` functions.\n     *\n     * @name asyncify\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @alias wrapSync\n     * @category Util\n     * @param {Function} func - The synchronous function, or Promise-returning\n     * function to convert to an {@link AsyncFunction}.\n     * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n     * invoked with `(args..., callback)`.\n     * @example\n     *\n     * // passing a regular synchronous function\n     * async.waterfall([\n     *     async.apply(fs.readFile, filename, \"utf8\"),\n     *     async.asyncify(JSON.parse),\n     *     function (data, next) {\n     *         // data is the result of parsing the text.\n     *         // If there was a parsing error, it would have been caught.\n     *     }\n     * ], callback);\n     *\n     * // passing a function returning a promise\n     * async.waterfall([\n     *     async.apply(fs.readFile, filename, \"utf8\"),\n     *     async.asyncify(function (contents) {\n     *         return db.model.create(contents);\n     *     }),\n     *     function (model, next) {\n     *         // `model` is the instantiated model object.\n     *         // If there was an error, this function would be skipped.\n     *     }\n     * ], callback);\n     *\n     * // es2017 example, though `asyncify` is not needed if your JS environment\n     * // supports async functions out of the box\n     * var q = async.queue(async.asyncify(async function(file) {\n     *     var intermediateStep = await processFile(file);\n     *     return await somePromise(intermediateStep)\n     * }));\n     *\n     * q.push(files);\n     */\n    function asyncify(func) {\n        if (isAsync(func)) {\n            return function (...args/*, callback*/) {\n                const callback = args.pop();\n                const promise = func.apply(this, args);\n                return handlePromise(promise, callback)\n            }\n        }\n\n        return initialParams(function (args, callback) {\n            var result;\n            try {\n                result = func.apply(this, args);\n            } catch (e) {\n                return callback(e);\n            }\n            // if result is Promise object\n            if (result && typeof result.then === 'function') {\n                return handlePromise(result, callback)\n            } else {\n                callback(null, result);\n            }\n        });\n    }\n\n    function handlePromise(promise, callback) {\n        return promise.then(value => {\n            invokeCallback(callback, null, value);\n        }, err => {\n            invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err));\n        });\n    }\n\n    function invokeCallback(callback, error, value) {\n        try {\n            callback(error, value);\n        } catch (err) {\n            setImmediate$1(e => { throw e }, err);\n        }\n    }\n\n    function isAsync(fn) {\n        return fn[Symbol.toStringTag] === 'AsyncFunction';\n    }\n\n    function isAsyncGenerator(fn) {\n        return fn[Symbol.toStringTag] === 'AsyncGenerator';\n    }\n\n    function isAsyncIterable(obj) {\n        return typeof obj[Symbol.asyncIterator] === 'function';\n    }\n\n    function wrapAsync(asyncFn) {\n        if (typeof asyncFn !== 'function') throw new Error('expected a function')\n        return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n    }\n\n    // conditionally promisify a function.\n    // only return a promise if a callback is omitted\n    function awaitify (asyncFn, arity) {\n        if (!arity) arity = asyncFn.length;\n        if (!arity) throw new Error('arity is undefined')\n        function awaitable (...args) {\n            if (typeof args[arity - 1] === 'function') {\n                return asyncFn.apply(this, args)\n            }\n\n            return new Promise((resolve, reject) => {\n                args[arity - 1] = (err, ...cbArgs) => {\n                    if (err) return reject(err)\n                    resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n                };\n                asyncFn.apply(this, args);\n            })\n        }\n\n        return awaitable\n    }\n\n    function applyEach$1 (eachfn) {\n        return function applyEach(fns, ...callArgs) {\n            const go = awaitify(function (callback) {\n                var that = this;\n                return eachfn(fns, (fn, cb) => {\n                    wrapAsync(fn).apply(that, callArgs.concat(cb));\n                }, callback);\n            });\n            return go;\n        };\n    }\n\n    function _asyncMap(eachfn, arr, iteratee, callback) {\n        arr = arr || [];\n        var results = [];\n        var counter = 0;\n        var _iteratee = wrapAsync(iteratee);\n\n        return eachfn(arr, (value, _, iterCb) => {\n            var index = counter++;\n            _iteratee(value, (err, v) => {\n                results[index] = v;\n                iterCb(err);\n            });\n        }, err => {\n            callback(err, results);\n        });\n    }\n\n    function isArrayLike(value) {\n        return value &&\n            typeof value.length === 'number' &&\n            value.length >= 0 &&\n            value.length % 1 === 0;\n    }\n\n    // A temporary value used to identify if the loop should be broken.\n    // See #1064, #1293\n    const breakLoop = {};\n\n    function once(fn) {\n        function wrapper (...args) {\n            if (fn === null) return;\n            var callFn = fn;\n            fn = null;\n            callFn.apply(this, args);\n        }\n        Object.assign(wrapper, fn);\n        return wrapper\n    }\n\n    function getIterator (coll) {\n        return coll[Symbol.iterator] && coll[Symbol.iterator]();\n    }\n\n    function createArrayIterator(coll) {\n        var i = -1;\n        var len = coll.length;\n        return function next() {\n            return ++i < len ? {value: coll[i], key: i} : null;\n        }\n    }\n\n    function createES2015Iterator(iterator) {\n        var i = -1;\n        return function next() {\n            var item = iterator.next();\n            if (item.done)\n                return null;\n            i++;\n            return {value: item.value, key: i};\n        }\n    }\n\n    function createObjectIterator(obj) {\n        var okeys = obj ? Object.keys(obj) : [];\n        var i = -1;\n        var len = okeys.length;\n        return function next() {\n            var key = okeys[++i];\n            if (key === '__proto__') {\n                return next();\n            }\n            return i < len ? {value: obj[key], key} : null;\n        };\n    }\n\n    function createIterator(coll) {\n        if (isArrayLike(coll)) {\n            return createArrayIterator(coll);\n        }\n\n        var iterator = getIterator(coll);\n        return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n    }\n\n    function onlyOnce(fn) {\n        return function (...args) {\n            if (fn === null) throw new Error(\"Callback was already called.\");\n            var callFn = fn;\n            fn = null;\n            callFn.apply(this, args);\n        };\n    }\n\n    // for async generators\n    function asyncEachOfLimit(generator, limit, iteratee, callback) {\n        let done = false;\n        let canceled = false;\n        let awaiting = false;\n        let running = 0;\n        let idx = 0;\n\n        function replenish() {\n            //console.log('replenish')\n            if (running >= limit || awaiting || done) return\n            //console.log('replenish awaiting')\n            awaiting = true;\n            generator.next().then(({value, done: iterDone}) => {\n                //console.log('got value', value)\n                if (canceled || done) return\n                awaiting = false;\n                if (iterDone) {\n                    done = true;\n                    if (running <= 0) {\n                        //console.log('done nextCb')\n                        callback(null);\n                    }\n                    return;\n                }\n                running++;\n                iteratee(value, idx, iterateeCallback);\n                idx++;\n                replenish();\n            }).catch(handleError);\n        }\n\n        function iterateeCallback(err, result) {\n            //console.log('iterateeCallback')\n            running -= 1;\n            if (canceled) return\n            if (err) return handleError(err)\n\n            if (err === false) {\n                done = true;\n                canceled = true;\n                return\n            }\n\n            if (result === breakLoop || (done && running <= 0)) {\n                done = true;\n                //console.log('done iterCb')\n                return callback(null);\n            }\n            replenish();\n        }\n\n        function handleError(err) {\n            if (canceled) return\n            awaiting = false;\n            done = true;\n            callback(err);\n        }\n\n        replenish();\n    }\n\n    var eachOfLimit$2 = (limit) => {\n        return (obj, iteratee, callback) => {\n            callback = once(callback);\n            if (limit <= 0) {\n                throw new RangeError('concurrency limit cannot be less than 1')\n            }\n            if (!obj) {\n                return callback(null);\n            }\n            if (isAsyncGenerator(obj)) {\n                return asyncEachOfLimit(obj, limit, iteratee, callback)\n            }\n            if (isAsyncIterable(obj)) {\n                return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback)\n            }\n            var nextElem = createIterator(obj);\n            var done = false;\n            var canceled = false;\n            var running = 0;\n            var looping = false;\n\n            function iterateeCallback(err, value) {\n                if (canceled) return\n                running -= 1;\n                if (err) {\n                    done = true;\n                    callback(err);\n                }\n                else if (err === false) {\n                    done = true;\n                    canceled = true;\n                }\n                else if (value === breakLoop || (done && running <= 0)) {\n                    done = true;\n                    return callback(null);\n                }\n                else if (!looping) {\n                    replenish();\n                }\n            }\n\n            function replenish () {\n                looping = true;\n                while (running < limit && !done) {\n                    var elem = nextElem();\n                    if (elem === null) {\n                        done = true;\n                        if (running <= 0) {\n                            callback(null);\n                        }\n                        return;\n                    }\n                    running += 1;\n                    iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n                }\n                looping = false;\n            }\n\n            replenish();\n        };\n    };\n\n    /**\n     * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name eachOfLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.eachOf]{@link module:Collections.eachOf}\n     * @alias forEachOfLimit\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async function to apply to each\n     * item in `coll`. The `key` is the item's key, or index in the case of an\n     * array.\n     * Invoked with (item, key, callback).\n     * @param {Function} [callback] - A callback which is called when all\n     * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function eachOfLimit(coll, limit, iteratee, callback) {\n        return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback);\n    }\n\n    var eachOfLimit$1 = awaitify(eachOfLimit, 4);\n\n    // eachOf implementation optimized for array-likes\n    function eachOfArrayLike(coll, iteratee, callback) {\n        callback = once(callback);\n        var index = 0,\n            completed = 0,\n            {length} = coll,\n            canceled = false;\n        if (length === 0) {\n            callback(null);\n        }\n\n        function iteratorCallback(err, value) {\n            if (err === false) {\n                canceled = true;\n            }\n            if (canceled === true) return\n            if (err) {\n                callback(err);\n            } else if ((++completed === length) || value === breakLoop) {\n                callback(null);\n            }\n        }\n\n        for (; index < length; index++) {\n            iteratee(coll[index], index, onlyOnce(iteratorCallback));\n        }\n    }\n\n    // a generic version of eachOf which can handle array, object, and iterator cases.\n    function eachOfGeneric (coll, iteratee, callback) {\n        return eachOfLimit$1(coll, Infinity, iteratee, callback);\n    }\n\n    /**\n     * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n     * to the iteratee.\n     *\n     * @name eachOf\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias forEachOf\n     * @category Collection\n     * @see [async.each]{@link module:Collections.each}\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A function to apply to each\n     * item in `coll`.\n     * The `key` is the item's key, or index in the case of an array.\n     * Invoked with (item, key, callback).\n     * @param {Function} [callback] - A callback which is called when all\n     * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     * @example\n     *\n     * // dev.json is a file containing a valid json object config for dev environment\n     * // dev.json is a file containing a valid json object config for test environment\n     * // prod.json is a file containing a valid json object config for prod environment\n     * // invalid.json is a file with a malformed json object\n     *\n     * let configs = {}; //global variable\n     * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n     * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n     *\n     * // asynchronous function that reads a json file and parses the contents as json object\n     * function parseFile(file, key, callback) {\n     *     fs.readFile(file, \"utf8\", function(err, data) {\n     *         if (err) return calback(err);\n     *         try {\n     *             configs[key] = JSON.parse(data);\n     *         } catch (e) {\n     *             return callback(e);\n     *         }\n     *         callback();\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n     *     if (err) {\n     *         console.error(err);\n     *     } else {\n     *         console.log(configs);\n     *         // configs is now a map of JSON data, e.g.\n     *         // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n     *     }\n     * });\n     *\n     * //Error handing\n     * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n     *     if (err) {\n     *         console.error(err);\n     *         // JSON parse error exception\n     *     } else {\n     *         console.log(configs);\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.forEachOf(validConfigFileMap, parseFile)\n     * .then( () => {\n     *     console.log(configs);\n     *     // configs is now a map of JSON data, e.g.\n     *     // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n     * }).catch( err => {\n     *     console.error(err);\n     * });\n     *\n     * //Error handing\n     * async.forEachOf(invalidConfigFileMap, parseFile)\n     * .then( () => {\n     *     console.log(configs);\n     * }).catch( err => {\n     *     console.error(err);\n     *     // JSON parse error exception\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.forEachOf(validConfigFileMap, parseFile);\n     *         console.log(configs);\n     *         // configs is now a map of JSON data, e.g.\n     *         // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * //Error handing\n     * async () => {\n     *     try {\n     *         let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n     *         console.log(configs);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // JSON parse error exception\n     *     }\n     * }\n     *\n     */\n    function eachOf(coll, iteratee, callback) {\n        var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n        return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n    }\n\n    var eachOf$1 = awaitify(eachOf, 3);\n\n    /**\n     * Produces a new collection of values by mapping each value in `coll` through\n     * the `iteratee` function. The `iteratee` is called with an item from `coll`\n     * and a callback for when it has finished processing. Each of these callbacks\n     * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n     * `iteratee` passes an error to its callback, the main `callback` (for the\n     * `map` function) is immediately called with the error.\n     *\n     * Note, that since this function applies the `iteratee` to each item in\n     * parallel, there is no guarantee that the `iteratee` functions will complete\n     * in order. However, the results array will be in the same order as the\n     * original `coll`.\n     *\n     * If `map` is passed an Object, the results will be an Array.  The results\n     * will roughly be in the order of the original Objects' keys (but this can\n     * vary across JavaScript engines).\n     *\n     * @name map\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with the transformed item.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Results is an Array of the\n     * transformed items from the `coll`. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * // file1.txt is a file that is 1000 bytes in size\n     * // file2.txt is a file that is 2000 bytes in size\n     * // file3.txt is a file that is 3000 bytes in size\n     * // file4.txt does not exist\n     *\n     * const fileList = ['file1.txt','file2.txt','file3.txt'];\n     * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n     *\n     * // asynchronous function that returns the file size in bytes\n     * function getFileSizeInBytes(file, callback) {\n     *     fs.stat(file, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         callback(null, stat.size);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.map(fileList, getFileSizeInBytes, function(err, results) {\n     *     if (err) {\n     *         console.log(err);\n     *     } else {\n     *         console.log(results);\n     *         // results is now an array of the file size in bytes for each file, e.g.\n     *         // [ 1000, 2000, 3000]\n     *     }\n     * });\n     *\n     * // Error Handling\n     * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n     *     if (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     } else {\n     *         console.log(results);\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.map(fileList, getFileSizeInBytes)\n     * .then( results => {\n     *     console.log(results);\n     *     // results is now an array of the file size in bytes for each file, e.g.\n     *     // [ 1000, 2000, 3000]\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Error Handling\n     * async.map(withMissingFileList, getFileSizeInBytes)\n     * .then( results => {\n     *     console.log(results);\n     * }).catch( err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.map(fileList, getFileSizeInBytes);\n     *         console.log(results);\n     *         // results is now an array of the file size in bytes for each file, e.g.\n     *         // [ 1000, 2000, 3000]\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // Error Handling\n     * async () => {\n     *     try {\n     *         let results = await async.map(withMissingFileList, getFileSizeInBytes);\n     *         console.log(results);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     }\n     * }\n     *\n     */\n    function map (coll, iteratee, callback) {\n        return _asyncMap(eachOf$1, coll, iteratee, callback)\n    }\n    var map$1 = awaitify(map, 3);\n\n    /**\n     * Applies the provided arguments to each function in the array, calling\n     * `callback` after all functions have completed. If you only provide the first\n     * argument, `fns`, then it will return a function which lets you pass in the\n     * arguments as if it were a single function call. If more arguments are\n     * provided, `callback` is required while `args` is still optional. The results\n     * for each of the applied async functions are passed to the final callback\n     * as an array.\n     *\n     * @name applyEach\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s\n     * to all call with the same arguments\n     * @param {...*} [args] - any number of separate arguments to pass to the\n     * function.\n     * @param {Function} [callback] - the final argument should be the callback,\n     * called when all functions have completed processing.\n     * @returns {AsyncFunction} - Returns a function that takes no args other than\n     * an optional callback, that is the result of applying the `args` to each\n     * of the functions.\n     * @example\n     *\n     * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket')\n     *\n     * appliedFn((err, results) => {\n     *     // results[0] is the results for `enableSearch`\n     *     // results[1] is the results for `updateSchema`\n     * });\n     *\n     * // partial application example:\n     * async.each(\n     *     buckets,\n     *     async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(),\n     *     callback\n     * );\n     */\n    var applyEach = applyEach$1(map$1);\n\n    /**\n     * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n     *\n     * @name eachOfSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.eachOf]{@link module:Collections.eachOf}\n     * @alias forEachOfSeries\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * Invoked with (item, key, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function eachOfSeries(coll, iteratee, callback) {\n        return eachOfLimit$1(coll, 1, iteratee, callback)\n    }\n    var eachOfSeries$1 = awaitify(eachOfSeries, 3);\n\n    /**\n     * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n     *\n     * @name mapSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.map]{@link module:Collections.map}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with the transformed item.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Results is an array of the\n     * transformed items from the `coll`. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function mapSeries (coll, iteratee, callback) {\n        return _asyncMap(eachOfSeries$1, coll, iteratee, callback)\n    }\n    var mapSeries$1 = awaitify(mapSeries, 3);\n\n    /**\n     * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n     *\n     * @name applyEachSeries\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all\n     * call with the same arguments\n     * @param {...*} [args] - any number of separate arguments to pass to the\n     * function.\n     * @param {Function} [callback] - the final argument should be the callback,\n     * called when all functions have completed processing.\n     * @returns {AsyncFunction} - A function, that when called, is the result of\n     * appling the `args` to the list of functions.  It takes no args, other than\n     * a callback.\n     */\n    var applyEachSeries = applyEach$1(mapSeries$1);\n\n    const PROMISE_SYMBOL = Symbol('promiseCallback');\n\n    function promiseCallback () {\n        let resolve, reject;\n        function callback (err, ...args) {\n            if (err) return reject(err)\n            resolve(args.length > 1 ? args : args[0]);\n        }\n\n        callback[PROMISE_SYMBOL] = new Promise((res, rej) => {\n            resolve = res,\n            reject = rej;\n        });\n\n        return callback\n    }\n\n    /**\n     * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n     * their requirements. Each function can optionally depend on other functions\n     * being completed first, and each function is run as soon as its requirements\n     * are satisfied.\n     *\n     * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n     * will stop. Further tasks will not execute (so any other functions depending\n     * on it will not run), and the main `callback` is immediately called with the\n     * error.\n     *\n     * {@link AsyncFunction}s also receive an object containing the results of functions which\n     * have completed so far as the first argument, if they have dependencies. If a\n     * task function has no dependencies, it will only be passed a callback.\n     *\n     * @name auto\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Object} tasks - An object. Each of its properties is either a\n     * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n     * in the array. The object's key of a property serves as the name of the task\n     * defined by that property, i.e. can be used when specifying requirements for\n     * other tasks. The function receives one or two arguments:\n     * * a `results` object, containing the results of the previously executed\n     *   functions, only passed if the task has any dependencies,\n     * * a `callback(err, result)` function, which must be called when finished,\n     *   passing an `error` (which can be `null`) and the result of the function's\n     *   execution.\n     * @param {number} [concurrency=Infinity] - An optional `integer` for\n     * determining the maximum number of tasks that can be run in parallel. By\n     * default, as many as possible.\n     * @param {Function} [callback] - An optional callback which is called when all\n     * the tasks have been completed. It receives the `err` argument if any `tasks`\n     * pass an error to their callback. Results are always returned; however, if an\n     * error occurs, no further `tasks` will be performed, and the results object\n     * will only contain partial results. Invoked with (err, results).\n     * @returns {Promise} a promise, if a callback is not passed\n     * @example\n     *\n     * //Using Callbacks\n     * async.auto({\n     *     get_data: function(callback) {\n     *         // async code to get some data\n     *         callback(null, 'data', 'converted to array');\n     *     },\n     *     make_folder: function(callback) {\n     *         // async code to create a directory to store a file in\n     *         // this is run at the same time as getting the data\n     *         callback(null, 'folder');\n     *     },\n     *     write_file: ['get_data', 'make_folder', function(results, callback) {\n     *         // once there is some data and the directory exists,\n     *         // write the data to a file in the directory\n     *         callback(null, 'filename');\n     *     }],\n     *     email_link: ['write_file', function(results, callback) {\n     *         // once the file is written let's email a link to it...\n     *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n     *     }]\n     * }, function(err, results) {\n     *     if (err) {\n     *         console.log('err = ', err);\n     *     }\n     *     console.log('results = ', results);\n     *     // results = {\n     *     //     get_data: ['data', 'converted to array']\n     *     //     make_folder; 'folder',\n     *     //     write_file: 'filename'\n     *     //     email_link: { file: 'filename', email: 'user@example.com' }\n     *     // }\n     * });\n     *\n     * //Using Promises\n     * async.auto({\n     *     get_data: function(callback) {\n     *         console.log('in get_data');\n     *         // async code to get some data\n     *         callback(null, 'data', 'converted to array');\n     *     },\n     *     make_folder: function(callback) {\n     *         console.log('in make_folder');\n     *         // async code to create a directory to store a file in\n     *         // this is run at the same time as getting the data\n     *         callback(null, 'folder');\n     *     },\n     *     write_file: ['get_data', 'make_folder', function(results, callback) {\n     *         // once there is some data and the directory exists,\n     *         // write the data to a file in the directory\n     *         callback(null, 'filename');\n     *     }],\n     *     email_link: ['write_file', function(results, callback) {\n     *         // once the file is written let's email a link to it...\n     *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n     *     }]\n     * }).then(results => {\n     *     console.log('results = ', results);\n     *     // results = {\n     *     //     get_data: ['data', 'converted to array']\n     *     //     make_folder; 'folder',\n     *     //     write_file: 'filename'\n     *     //     email_link: { file: 'filename', email: 'user@example.com' }\n     *     // }\n     * }).catch(err => {\n     *     console.log('err = ', err);\n     * });\n     *\n     * //Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.auto({\n     *             get_data: function(callback) {\n     *                 // async code to get some data\n     *                 callback(null, 'data', 'converted to array');\n     *             },\n     *             make_folder: function(callback) {\n     *                 // async code to create a directory to store a file in\n     *                 // this is run at the same time as getting the data\n     *                 callback(null, 'folder');\n     *             },\n     *             write_file: ['get_data', 'make_folder', function(results, callback) {\n     *                 // once there is some data and the directory exists,\n     *                 // write the data to a file in the directory\n     *                 callback(null, 'filename');\n     *             }],\n     *             email_link: ['write_file', function(results, callback) {\n     *                 // once the file is written let's email a link to it...\n     *                 callback(null, {'file':results.write_file, 'email':'user@example.com'});\n     *             }]\n     *         });\n     *         console.log('results = ', results);\n     *         // results = {\n     *         //     get_data: ['data', 'converted to array']\n     *         //     make_folder; 'folder',\n     *         //     write_file: 'filename'\n     *         //     email_link: { file: 'filename', email: 'user@example.com' }\n     *         // }\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function auto(tasks, concurrency, callback) {\n        if (typeof concurrency !== 'number') {\n            // concurrency is optional, shift the args.\n            callback = concurrency;\n            concurrency = null;\n        }\n        callback = once(callback || promiseCallback());\n        var numTasks = Object.keys(tasks).length;\n        if (!numTasks) {\n            return callback(null);\n        }\n        if (!concurrency) {\n            concurrency = numTasks;\n        }\n\n        var results = {};\n        var runningTasks = 0;\n        var canceled = false;\n        var hasError = false;\n\n        var listeners = Object.create(null);\n\n        var readyTasks = [];\n\n        // for cycle detection:\n        var readyToCheck = []; // tasks that have been identified as reachable\n        // without the possibility of returning to an ancestor task\n        var uncheckedDependencies = {};\n\n        Object.keys(tasks).forEach(key => {\n            var task = tasks[key];\n            if (!Array.isArray(task)) {\n                // no dependencies\n                enqueueTask(key, [task]);\n                readyToCheck.push(key);\n                return;\n            }\n\n            var dependencies = task.slice(0, task.length - 1);\n            var remainingDependencies = dependencies.length;\n            if (remainingDependencies === 0) {\n                enqueueTask(key, task);\n                readyToCheck.push(key);\n                return;\n            }\n            uncheckedDependencies[key] = remainingDependencies;\n\n            dependencies.forEach(dependencyName => {\n                if (!tasks[dependencyName]) {\n                    throw new Error('async.auto task `' + key +\n                        '` has a non-existent dependency `' +\n                        dependencyName + '` in ' +\n                        dependencies.join(', '));\n                }\n                addListener(dependencyName, () => {\n                    remainingDependencies--;\n                    if (remainingDependencies === 0) {\n                        enqueueTask(key, task);\n                    }\n                });\n            });\n        });\n\n        checkForDeadlocks();\n        processQueue();\n\n        function enqueueTask(key, task) {\n            readyTasks.push(() => runTask(key, task));\n        }\n\n        function processQueue() {\n            if (canceled) return\n            if (readyTasks.length === 0 && runningTasks === 0) {\n                return callback(null, results);\n            }\n            while(readyTasks.length && runningTasks < concurrency) {\n                var run = readyTasks.shift();\n                run();\n            }\n\n        }\n\n        function addListener(taskName, fn) {\n            var taskListeners = listeners[taskName];\n            if (!taskListeners) {\n                taskListeners = listeners[taskName] = [];\n            }\n\n            taskListeners.push(fn);\n        }\n\n        function taskComplete(taskName) {\n            var taskListeners = listeners[taskName] || [];\n            taskListeners.forEach(fn => fn());\n            processQueue();\n        }\n\n\n        function runTask(key, task) {\n            if (hasError) return;\n\n            var taskCallback = onlyOnce((err, ...result) => {\n                runningTasks--;\n                if (err === false) {\n                    canceled = true;\n                    return\n                }\n                if (result.length < 2) {\n                    [result] = result;\n                }\n                if (err) {\n                    var safeResults = {};\n                    Object.keys(results).forEach(rkey => {\n                        safeResults[rkey] = results[rkey];\n                    });\n                    safeResults[key] = result;\n                    hasError = true;\n                    listeners = Object.create(null);\n                    if (canceled) return\n                    callback(err, safeResults);\n                } else {\n                    results[key] = result;\n                    taskComplete(key);\n                }\n            });\n\n            runningTasks++;\n            var taskFn = wrapAsync(task[task.length - 1]);\n            if (task.length > 1) {\n                taskFn(results, taskCallback);\n            } else {\n                taskFn(taskCallback);\n            }\n        }\n\n        function checkForDeadlocks() {\n            // Kahn's algorithm\n            // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n            // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n            var currentTask;\n            var counter = 0;\n            while (readyToCheck.length) {\n                currentTask = readyToCheck.pop();\n                counter++;\n                getDependents(currentTask).forEach(dependent => {\n                    if (--uncheckedDependencies[dependent] === 0) {\n                        readyToCheck.push(dependent);\n                    }\n                });\n            }\n\n            if (counter !== numTasks) {\n                throw new Error(\n                    'async.auto cannot execute tasks due to a recursive dependency'\n                );\n            }\n        }\n\n        function getDependents(taskName) {\n            var result = [];\n            Object.keys(tasks).forEach(key => {\n                const task = tasks[key];\n                if (Array.isArray(task) && task.indexOf(taskName) >= 0) {\n                    result.push(key);\n                }\n            });\n            return result;\n        }\n\n        return callback[PROMISE_SYMBOL]\n    }\n\n    var FN_ARGS = /^(?:async\\s)?(?:function)?\\s*(?:\\w+\\s*)?\\(([^)]+)\\)(?:\\s*{)/;\n    var ARROW_FN_ARGS = /^(?:async\\s)?\\s*(?:\\(\\s*)?((?:[^)=\\s]\\s*)*)(?:\\)\\s*)?=>/;\n    var FN_ARG_SPLIT = /,/;\n    var FN_ARG = /(=.+)?(\\s*)$/;\n\n    function stripComments(string) {\n        let stripped = '';\n        let index = 0;\n        let endBlockComment = string.indexOf('*/');\n        while (index < string.length) {\n            if (string[index] === '/' && string[index+1] === '/') {\n                // inline comment\n                let endIndex = string.indexOf('\\n', index);\n                index = (endIndex === -1) ? string.length : endIndex;\n            } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {\n                // block comment\n                let endIndex = string.indexOf('*/', index);\n                if (endIndex !== -1) {\n                    index = endIndex + 2;\n                    endBlockComment = string.indexOf('*/', index);\n                } else {\n                    stripped += string[index];\n                    index++;\n                }\n            } else {\n                stripped += string[index];\n                index++;\n            }\n        }\n        return stripped;\n    }\n\n    function parseParams(func) {\n        const src = stripComments(func.toString());\n        let match = src.match(FN_ARGS);\n        if (!match) {\n            match = src.match(ARROW_FN_ARGS);\n        }\n        if (!match) throw new Error('could not parse args in autoInject\\nSource:\\n' + src)\n        let [, args] = match;\n        return args\n            .replace(/\\s/g, '')\n            .split(FN_ARG_SPLIT)\n            .map((arg) => arg.replace(FN_ARG, '').trim());\n    }\n\n    /**\n     * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n     * tasks are specified as parameters to the function, after the usual callback\n     * parameter, with the parameter names matching the names of the tasks it\n     * depends on. This can provide even more readable task graphs which can be\n     * easier to maintain.\n     *\n     * If a final callback is specified, the task results are similarly injected,\n     * specified as named parameters after the initial error parameter.\n     *\n     * The autoInject function is purely syntactic sugar and its semantics are\n     * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n     *\n     * @name autoInject\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.auto]{@link module:ControlFlow.auto}\n     * @category Control Flow\n     * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n     * the form 'func([dependencies...], callback). The object's key of a property\n     * serves as the name of the task defined by that property, i.e. can be used\n     * when specifying requirements for other tasks.\n     * * The `callback` parameter is a `callback(err, result)` which must be called\n     *   when finished, passing an `error` (which can be `null`) and the result of\n     *   the function's execution. The remaining parameters name other tasks on\n     *   which the task is dependent, and the results from those tasks are the\n     *   arguments of those parameters.\n     * @param {Function} [callback] - An optional callback which is called when all\n     * the tasks have been completed. It receives the `err` argument if any `tasks`\n     * pass an error to their callback, and a `results` object with any completed\n     * task results, similar to `auto`.\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * //  The example from `auto` can be rewritten as follows:\n     * async.autoInject({\n     *     get_data: function(callback) {\n     *         // async code to get some data\n     *         callback(null, 'data', 'converted to array');\n     *     },\n     *     make_folder: function(callback) {\n     *         // async code to create a directory to store a file in\n     *         // this is run at the same time as getting the data\n     *         callback(null, 'folder');\n     *     },\n     *     write_file: function(get_data, make_folder, callback) {\n     *         // once there is some data and the directory exists,\n     *         // write the data to a file in the directory\n     *         callback(null, 'filename');\n     *     },\n     *     email_link: function(write_file, callback) {\n     *         // once the file is written let's email a link to it...\n     *         // write_file contains the filename returned by write_file.\n     *         callback(null, {'file':write_file, 'email':'user@example.com'});\n     *     }\n     * }, function(err, results) {\n     *     console.log('err = ', err);\n     *     console.log('email_link = ', results.email_link);\n     * });\n     *\n     * // If you are using a JS minifier that mangles parameter names, `autoInject`\n     * // will not work with plain functions, since the parameter names will be\n     * // collapsed to a single letter identifier.  To work around this, you can\n     * // explicitly specify the names of the parameters your task function needs\n     * // in an array, similar to Angular.js dependency injection.\n     *\n     * // This still has an advantage over plain `auto`, since the results a task\n     * // depends on are still spread into arguments.\n     * async.autoInject({\n     *     //...\n     *     write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n     *         callback(null, 'filename');\n     *     }],\n     *     email_link: ['write_file', function(write_file, callback) {\n     *         callback(null, {'file':write_file, 'email':'user@example.com'});\n     *     }]\n     *     //...\n     * }, function(err, results) {\n     *     console.log('err = ', err);\n     *     console.log('email_link = ', results.email_link);\n     * });\n     */\n    function autoInject(tasks, callback) {\n        var newTasks = {};\n\n        Object.keys(tasks).forEach(key => {\n            var taskFn = tasks[key];\n            var params;\n            var fnIsAsync = isAsync(taskFn);\n            var hasNoDeps =\n                (!fnIsAsync && taskFn.length === 1) ||\n                (fnIsAsync && taskFn.length === 0);\n\n            if (Array.isArray(taskFn)) {\n                params = [...taskFn];\n                taskFn = params.pop();\n\n                newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n            } else if (hasNoDeps) {\n                // no dependencies, use the function as-is\n                newTasks[key] = taskFn;\n            } else {\n                params = parseParams(taskFn);\n                if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {\n                    throw new Error(\"autoInject task functions require explicit parameters.\");\n                }\n\n                // remove callback param\n                if (!fnIsAsync) params.pop();\n\n                newTasks[key] = params.concat(newTask);\n            }\n\n            function newTask(results, taskCb) {\n                var newArgs = params.map(name => results[name]);\n                newArgs.push(taskCb);\n                wrapAsync(taskFn)(...newArgs);\n            }\n        });\n\n        return auto(newTasks, callback);\n    }\n\n    // Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n    // used for queues. This implementation assumes that the node provided by the user can be modified\n    // to adjust the next and last properties. We implement only the minimal functionality\n    // for queue support.\n    class DLL {\n        constructor() {\n            this.head = this.tail = null;\n            this.length = 0;\n        }\n\n        removeLink(node) {\n            if (node.prev) node.prev.next = node.next;\n            else this.head = node.next;\n            if (node.next) node.next.prev = node.prev;\n            else this.tail = node.prev;\n\n            node.prev = node.next = null;\n            this.length -= 1;\n            return node;\n        }\n\n        empty () {\n            while(this.head) this.shift();\n            return this;\n        }\n\n        insertAfter(node, newNode) {\n            newNode.prev = node;\n            newNode.next = node.next;\n            if (node.next) node.next.prev = newNode;\n            else this.tail = newNode;\n            node.next = newNode;\n            this.length += 1;\n        }\n\n        insertBefore(node, newNode) {\n            newNode.prev = node.prev;\n            newNode.next = node;\n            if (node.prev) node.prev.next = newNode;\n            else this.head = newNode;\n            node.prev = newNode;\n            this.length += 1;\n        }\n\n        unshift(node) {\n            if (this.head) this.insertBefore(this.head, node);\n            else setInitial(this, node);\n        }\n\n        push(node) {\n            if (this.tail) this.insertAfter(this.tail, node);\n            else setInitial(this, node);\n        }\n\n        shift() {\n            return this.head && this.removeLink(this.head);\n        }\n\n        pop() {\n            return this.tail && this.removeLink(this.tail);\n        }\n\n        toArray() {\n            return [...this]\n        }\n\n        *[Symbol.iterator] () {\n            var cur = this.head;\n            while (cur) {\n                yield cur.data;\n                cur = cur.next;\n            }\n        }\n\n        remove (testFn) {\n            var curr = this.head;\n            while(curr) {\n                var {next} = curr;\n                if (testFn(curr)) {\n                    this.removeLink(curr);\n                }\n                curr = next;\n            }\n            return this;\n        }\n    }\n\n    function setInitial(dll, node) {\n        dll.length = 1;\n        dll.head = dll.tail = node;\n    }\n\n    function queue$1(worker, concurrency, payload) {\n        if (concurrency == null) {\n            concurrency = 1;\n        }\n        else if(concurrency === 0) {\n            throw new RangeError('Concurrency must not be zero');\n        }\n\n        var _worker = wrapAsync(worker);\n        var numRunning = 0;\n        var workersList = [];\n        const events = {\n            error: [],\n            drain: [],\n            saturated: [],\n            unsaturated: [],\n            empty: []\n        };\n\n        function on (event, handler) {\n            events[event].push(handler);\n        }\n\n        function once (event, handler) {\n            const handleAndRemove = (...args) => {\n                off(event, handleAndRemove);\n                handler(...args);\n            };\n            events[event].push(handleAndRemove);\n        }\n\n        function off (event, handler) {\n            if (!event) return Object.keys(events).forEach(ev => events[ev] = [])\n            if (!handler) return events[event] = []\n            events[event] = events[event].filter(ev => ev !== handler);\n        }\n\n        function trigger (event, ...args) {\n            events[event].forEach(handler => handler(...args));\n        }\n\n        var processingScheduled = false;\n        function _insert(data, insertAtFront, rejectOnError, callback) {\n            if (callback != null && typeof callback !== 'function') {\n                throw new Error('task callback must be a function');\n            }\n            q.started = true;\n\n            var res, rej;\n            function promiseCallback (err, ...args) {\n                // we don't care about the error, let the global error handler\n                // deal with it\n                if (err) return rejectOnError ? rej(err) : res()\n                if (args.length <= 1) return res(args[0])\n                res(args);\n            }\n\n            var item = q._createTaskItem(\n                data,\n                rejectOnError ? promiseCallback :\n                    (callback || promiseCallback)\n            );\n\n            if (insertAtFront) {\n                q._tasks.unshift(item);\n            } else {\n                q._tasks.push(item);\n            }\n\n            if (!processingScheduled) {\n                processingScheduled = true;\n                setImmediate$1(() => {\n                    processingScheduled = false;\n                    q.process();\n                });\n            }\n\n            if (rejectOnError || !callback) {\n                return new Promise((resolve, reject) => {\n                    res = resolve;\n                    rej = reject;\n                })\n            }\n        }\n\n        function _createCB(tasks) {\n            return function (err, ...args) {\n                numRunning -= 1;\n\n                for (var i = 0, l = tasks.length; i < l; i++) {\n                    var task = tasks[i];\n\n                    var index = workersList.indexOf(task);\n                    if (index === 0) {\n                        workersList.shift();\n                    } else if (index > 0) {\n                        workersList.splice(index, 1);\n                    }\n\n                    task.callback(err, ...args);\n\n                    if (err != null) {\n                        trigger('error', err, task.data);\n                    }\n                }\n\n                if (numRunning <= (q.concurrency - q.buffer) ) {\n                    trigger('unsaturated');\n                }\n\n                if (q.idle()) {\n                    trigger('drain');\n                }\n                q.process();\n            };\n        }\n\n        function _maybeDrain(data) {\n            if (data.length === 0 && q.idle()) {\n                // call drain immediately if there are no tasks\n                setImmediate$1(() => trigger('drain'));\n                return true\n            }\n            return false\n        }\n\n        const eventMethod = (name) => (handler) => {\n            if (!handler) {\n                return new Promise((resolve, reject) => {\n                    once(name, (err, data) => {\n                        if (err) return reject(err)\n                        resolve(data);\n                    });\n                })\n            }\n            off(name);\n            on(name, handler);\n\n        };\n\n        var isProcessing = false;\n        var q = {\n            _tasks: new DLL(),\n            _createTaskItem (data, callback) {\n                return {\n                    data,\n                    callback\n                };\n            },\n            *[Symbol.iterator] () {\n                yield* q._tasks[Symbol.iterator]();\n            },\n            concurrency,\n            payload,\n            buffer: concurrency / 4,\n            started: false,\n            paused: false,\n            push (data, callback) {\n                if (Array.isArray(data)) {\n                    if (_maybeDrain(data)) return\n                    return data.map(datum => _insert(datum, false, false, callback))\n                }\n                return _insert(data, false, false, callback);\n            },\n            pushAsync (data, callback) {\n                if (Array.isArray(data)) {\n                    if (_maybeDrain(data)) return\n                    return data.map(datum => _insert(datum, false, true, callback))\n                }\n                return _insert(data, false, true, callback);\n            },\n            kill () {\n                off();\n                q._tasks.empty();\n            },\n            unshift (data, callback) {\n                if (Array.isArray(data)) {\n                    if (_maybeDrain(data)) return\n                    return data.map(datum => _insert(datum, true, false, callback))\n                }\n                return _insert(data, true, false, callback);\n            },\n            unshiftAsync (data, callback) {\n                if (Array.isArray(data)) {\n                    if (_maybeDrain(data)) return\n                    return data.map(datum => _insert(datum, true, true, callback))\n                }\n                return _insert(data, true, true, callback);\n            },\n            remove (testFn) {\n                q._tasks.remove(testFn);\n            },\n            process () {\n                // Avoid trying to start too many processing operations. This can occur\n                // when callbacks resolve synchronously (#1267).\n                if (isProcessing) {\n                    return;\n                }\n                isProcessing = true;\n                while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n                    var tasks = [], data = [];\n                    var l = q._tasks.length;\n                    if (q.payload) l = Math.min(l, q.payload);\n                    for (var i = 0; i < l; i++) {\n                        var node = q._tasks.shift();\n                        tasks.push(node);\n                        workersList.push(node);\n                        data.push(node.data);\n                    }\n\n                    numRunning += 1;\n\n                    if (q._tasks.length === 0) {\n                        trigger('empty');\n                    }\n\n                    if (numRunning === q.concurrency) {\n                        trigger('saturated');\n                    }\n\n                    var cb = onlyOnce(_createCB(tasks));\n                    _worker(data, cb);\n                }\n                isProcessing = false;\n            },\n            length () {\n                return q._tasks.length;\n            },\n            running () {\n                return numRunning;\n            },\n            workersList () {\n                return workersList;\n            },\n            idle() {\n                return q._tasks.length + numRunning === 0;\n            },\n            pause () {\n                q.paused = true;\n            },\n            resume () {\n                if (q.paused === false) { return; }\n                q.paused = false;\n                setImmediate$1(q.process);\n            }\n        };\n        // define these as fixed properties, so people get useful errors when updating\n        Object.defineProperties(q, {\n            saturated: {\n                writable: false,\n                value: eventMethod('saturated')\n            },\n            unsaturated: {\n                writable: false,\n                value: eventMethod('unsaturated')\n            },\n            empty: {\n                writable: false,\n                value: eventMethod('empty')\n            },\n            drain: {\n                writable: false,\n                value: eventMethod('drain')\n            },\n            error: {\n                writable: false,\n                value: eventMethod('error')\n            },\n        });\n        return q;\n    }\n\n    /**\n     * Creates a `cargo` object with the specified payload. Tasks added to the\n     * cargo will be processed altogether (up to the `payload` limit). If the\n     * `worker` is in progress, the task is queued until it becomes available. Once\n     * the `worker` has completed some tasks, each callback of those tasks is\n     * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n     * for how `cargo` and `queue` work.\n     *\n     * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n     * at a time, cargo passes an array of tasks to a single worker, repeating\n     * when the worker is finished.\n     *\n     * @name cargo\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.queue]{@link module:ControlFlow.queue}\n     * @category Control Flow\n     * @param {AsyncFunction} worker - An asynchronous function for processing an array\n     * of queued tasks. Invoked with `(tasks, callback)`.\n     * @param {number} [payload=Infinity] - An optional `integer` for determining\n     * how many tasks should be processed per round; if omitted, the default is\n     * unlimited.\n     * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can\n     * attached as certain properties to listen for specific events during the\n     * lifecycle of the cargo and inner queue.\n     * @example\n     *\n     * // create a cargo object with payload 2\n     * var cargo = async.cargo(function(tasks, callback) {\n     *     for (var i=0; i<tasks.length; i++) {\n     *         console.log('hello ' + tasks[i].name);\n     *     }\n     *     callback();\n     * }, 2);\n     *\n     * // add some items\n     * cargo.push({name: 'foo'}, function(err) {\n     *     console.log('finished processing foo');\n     * });\n     * cargo.push({name: 'bar'}, function(err) {\n     *     console.log('finished processing bar');\n     * });\n     * await cargo.push({name: 'baz'});\n     * console.log('finished processing baz');\n     */\n    function cargo$1(worker, payload) {\n        return queue$1(worker, 1, payload);\n    }\n\n    /**\n     * Creates a `cargoQueue` object with the specified payload. Tasks added to the\n     * cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers.\n     * If the all `workers` are in progress, the task is queued until one becomes available. Once\n     * a `worker` has completed some tasks, each callback of those tasks is\n     * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n     * for how `cargo` and `queue` work.\n     *\n     * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n     * at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker,\n     * the cargoQueue passes an array of tasks to multiple parallel workers.\n     *\n     * @name cargoQueue\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.queue]{@link module:ControlFlow.queue}\n     * @see [async.cargo]{@link module:ControlFLow.cargo}\n     * @category Control Flow\n     * @param {AsyncFunction} worker - An asynchronous function for processing an array\n     * of queued tasks. Invoked with `(tasks, callback)`.\n     * @param {number} [concurrency=1] - An `integer` for determining how many\n     * `worker` functions should be run in parallel.  If omitted, the concurrency\n     * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n     * @param {number} [payload=Infinity] - An optional `integer` for determining\n     * how many tasks should be processed per round; if omitted, the default is\n     * unlimited.\n     * @returns {module:ControlFlow.QueueObject} A cargoQueue object to manage the tasks. Callbacks can\n     * attached as certain properties to listen for specific events during the\n     * lifecycle of the cargoQueue and inner queue.\n     * @example\n     *\n     * // create a cargoQueue object with payload 2 and concurrency 2\n     * var cargoQueue = async.cargoQueue(function(tasks, callback) {\n     *     for (var i=0; i<tasks.length; i++) {\n     *         console.log('hello ' + tasks[i].name);\n     *     }\n     *     callback();\n     * }, 2, 2);\n     *\n     * // add some items\n     * cargoQueue.push({name: 'foo'}, function(err) {\n     *     console.log('finished processing foo');\n     * });\n     * cargoQueue.push({name: 'bar'}, function(err) {\n     *     console.log('finished processing bar');\n     * });\n     * cargoQueue.push({name: 'baz'}, function(err) {\n     *     console.log('finished processing baz');\n     * });\n     * cargoQueue.push({name: 'boo'}, function(err) {\n     *     console.log('finished processing boo');\n     * });\n     */\n    function cargo(worker, concurrency, payload) {\n        return queue$1(worker, concurrency, payload);\n    }\n\n    /**\n     * Reduces `coll` into a single value using an async `iteratee` to return each\n     * successive step. `memo` is the initial state of the reduction. This function\n     * only operates in series.\n     *\n     * For performance reasons, it may make sense to split a call to this function\n     * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n     * results. This function is for situations where each step in the reduction\n     * needs to be async; if you can get the data before reducing it, then it's\n     * probably a good idea to do so.\n     *\n     * @name reduce\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias inject\n     * @alias foldl\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {*} memo - The initial state of the reduction.\n     * @param {AsyncFunction} iteratee - A function applied to each item in the\n     * array to produce the next step in the reduction.\n     * The `iteratee` should complete with the next state of the reduction.\n     * If the iteratee completes with an error, the reduction is stopped and the\n     * main `callback` is immediately called with the error.\n     * Invoked with (memo, item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result is the reduced value. Invoked with\n     * (err, result).\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * // file1.txt is a file that is 1000 bytes in size\n     * // file2.txt is a file that is 2000 bytes in size\n     * // file3.txt is a file that is 3000 bytes in size\n     * // file4.txt does not exist\n     *\n     * const fileList = ['file1.txt','file2.txt','file3.txt'];\n     * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];\n     *\n     * // asynchronous function that computes the file size in bytes\n     * // file size is added to the memoized value, then returned\n     * function getFileSizeInBytes(memo, file, callback) {\n     *     fs.stat(file, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         callback(null, memo + stat.size);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {\n     *     if (err) {\n     *         console.log(err);\n     *     } else {\n     *         console.log(result);\n     *         // 6000\n     *         // which is the sum of the file sizes of the three files\n     *     }\n     * });\n     *\n     * // Error Handling\n     * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {\n     *     if (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     } else {\n     *         console.log(result);\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.reduce(fileList, 0, getFileSizeInBytes)\n     * .then( result => {\n     *     console.log(result);\n     *     // 6000\n     *     // which is the sum of the file sizes of the three files\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Error Handling\n     * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n     * .then( result => {\n     *     console.log(result);\n     * }).catch( err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n     *         console.log(result);\n     *         // 6000\n     *         // which is the sum of the file sizes of the three files\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // Error Handling\n     * async () => {\n     *     try {\n     *         let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n     *         console.log(result);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     }\n     * }\n     *\n     */\n    function reduce(coll, memo, iteratee, callback) {\n        callback = once(callback);\n        var _iteratee = wrapAsync(iteratee);\n        return eachOfSeries$1(coll, (x, i, iterCb) => {\n            _iteratee(memo, x, (err, v) => {\n                memo = v;\n                iterCb(err);\n            });\n        }, err => callback(err, memo));\n    }\n    var reduce$1 = awaitify(reduce, 4);\n\n    /**\n     * Version of the compose function that is more natural to read. Each function\n     * consumes the return value of the previous function. It is the equivalent of\n     * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n     *\n     * Each function is executed with the `this` binding of the composed function.\n     *\n     * @name seq\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.compose]{@link module:ControlFlow.compose}\n     * @category Control Flow\n     * @param {...AsyncFunction} functions - the asynchronous functions to compose\n     * @returns {Function} a function that composes the `functions` in order\n     * @example\n     *\n     * // Requires lodash (or underscore), express3 and dresende's orm2.\n     * // Part of an app, that fetches cats of the logged user.\n     * // This example uses `seq` function to avoid overnesting and error\n     * // handling clutter.\n     * app.get('/cats', function(request, response) {\n     *     var User = request.models.User;\n     *     async.seq(\n     *         User.get.bind(User),  // 'User.get' has signature (id, callback(err, data))\n     *         function(user, fn) {\n     *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))\n     *         }\n     *     )(req.session.user_id, function (err, cats) {\n     *         if (err) {\n     *             console.error(err);\n     *             response.json({ status: 'error', message: err.message });\n     *         } else {\n     *             response.json({ status: 'ok', message: 'Cats found', data: cats });\n     *         }\n     *     });\n     * });\n     */\n    function seq(...functions) {\n        var _functions = functions.map(wrapAsync);\n        return function (...args) {\n            var that = this;\n\n            var cb = args[args.length - 1];\n            if (typeof cb == 'function') {\n                args.pop();\n            } else {\n                cb = promiseCallback();\n            }\n\n            reduce$1(_functions, args, (newargs, fn, iterCb) => {\n                fn.apply(that, newargs.concat((err, ...nextargs) => {\n                    iterCb(err, nextargs);\n                }));\n            },\n            (err, results) => cb(err, ...results));\n\n            return cb[PROMISE_SYMBOL]\n        };\n    }\n\n    /**\n     * Creates a function which is a composition of the passed asynchronous\n     * functions. Each function consumes the return value of the function that\n     * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n     * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n     *\n     * If the last argument to the composed function is not a function, a promise\n     * is returned when you call it.\n     *\n     * Each function is executed with the `this` binding of the composed function.\n     *\n     * @name compose\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {...AsyncFunction} functions - the asynchronous functions to compose\n     * @returns {Function} an asynchronous function that is the composed\n     * asynchronous `functions`\n     * @example\n     *\n     * function add1(n, callback) {\n     *     setTimeout(function () {\n     *         callback(null, n + 1);\n     *     }, 10);\n     * }\n     *\n     * function mul3(n, callback) {\n     *     setTimeout(function () {\n     *         callback(null, n * 3);\n     *     }, 10);\n     * }\n     *\n     * var add1mul3 = async.compose(mul3, add1);\n     * add1mul3(4, function (err, result) {\n     *     // result now equals 15\n     * });\n     */\n    function compose(...args) {\n        return seq(...args.reverse());\n    }\n\n    /**\n     * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name mapLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.map]{@link module:Collections.map}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with the transformed item.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Results is an array of the\n     * transformed items from the `coll`. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function mapLimit (coll, limit, iteratee, callback) {\n        return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var mapLimit$1 = awaitify(mapLimit, 4);\n\n    /**\n     * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name concatLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.concat]{@link module:Collections.concat}\n     * @category Collection\n     * @alias flatMapLimit\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n     * which should use an array as its result. Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished, or an error occurs. Results is an array\n     * containing the concatenated results of the `iteratee` function. Invoked with\n     * (err, results).\n     * @returns A Promise, if no callback is passed\n     */\n    function concatLimit(coll, limit, iteratee, callback) {\n        var _iteratee = wrapAsync(iteratee);\n        return mapLimit$1(coll, limit, (val, iterCb) => {\n            _iteratee(val, (err, ...args) => {\n                if (err) return iterCb(err);\n                return iterCb(err, args);\n            });\n        }, (err, mapResults) => {\n            var result = [];\n            for (var i = 0; i < mapResults.length; i++) {\n                if (mapResults[i]) {\n                    result = result.concat(...mapResults[i]);\n                }\n            }\n\n            return callback(err, result);\n        });\n    }\n    var concatLimit$1 = awaitify(concatLimit, 4);\n\n    /**\n     * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n     * the concatenated list. The `iteratee`s are called in parallel, and the\n     * results are concatenated as they return. The results array will be returned in\n     * the original order of `coll` passed to the `iteratee` function.\n     *\n     * @name concat\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @alias flatMap\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n     * which should use an array as its result. Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished, or an error occurs. Results is an array\n     * containing the concatenated results of the `iteratee` function. Invoked with\n     * (err, results).\n     * @returns A Promise, if no callback is passed\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     * // dir4 does not exist\n     *\n     * let directoryList = ['dir1','dir2','dir3'];\n     * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];\n     *\n     * // Using callbacks\n     * async.concat(directoryList, fs.readdir, function(err, results) {\n     *    if (err) {\n     *        console.log(err);\n     *    } else {\n     *        console.log(results);\n     *        // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n     *    }\n     * });\n     *\n     * // Error Handling\n     * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {\n     *    if (err) {\n     *        console.log(err);\n     *        // [ Error: ENOENT: no such file or directory ]\n     *        // since dir4 does not exist\n     *    } else {\n     *        console.log(results);\n     *    }\n     * });\n     *\n     * // Using Promises\n     * async.concat(directoryList, fs.readdir)\n     * .then(results => {\n     *     console.log(results);\n     *     // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n     * }).catch(err => {\n     *      console.log(err);\n     * });\n     *\n     * // Error Handling\n     * async.concat(withMissingDirectoryList, fs.readdir)\n     * .then(results => {\n     *     console.log(results);\n     * }).catch(err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     *     // since dir4 does not exist\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.concat(directoryList, fs.readdir);\n     *         console.log(results);\n     *         // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n     *     } catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // Error Handling\n     * async () => {\n     *     try {\n     *         let results = await async.concat(withMissingDirectoryList, fs.readdir);\n     *         console.log(results);\n     *     } catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *         // since dir4 does not exist\n     *     }\n     * }\n     *\n     */\n    function concat(coll, iteratee, callback) {\n        return concatLimit$1(coll, Infinity, iteratee, callback)\n    }\n    var concat$1 = awaitify(concat, 3);\n\n    /**\n     * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n     *\n     * @name concatSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.concat]{@link module:Collections.concat}\n     * @category Collection\n     * @alias flatMapSeries\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n     * The iteratee should complete with an array an array of results.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished, or an error occurs. Results is an array\n     * containing the concatenated results of the `iteratee` function. Invoked with\n     * (err, results).\n     * @returns A Promise, if no callback is passed\n     */\n    function concatSeries(coll, iteratee, callback) {\n        return concatLimit$1(coll, 1, iteratee, callback)\n    }\n    var concatSeries$1 = awaitify(concatSeries, 3);\n\n    /**\n     * Returns a function that when called, calls-back with the values provided.\n     * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n     * [`auto`]{@link module:ControlFlow.auto}.\n     *\n     * @name constant\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {...*} arguments... - Any number of arguments to automatically invoke\n     * callback with.\n     * @returns {AsyncFunction} Returns a function that when invoked, automatically\n     * invokes the callback with the previous given arguments.\n     * @example\n     *\n     * async.waterfall([\n     *     async.constant(42),\n     *     function (value, next) {\n     *         // value === 42\n     *     },\n     *     //...\n     * ], callback);\n     *\n     * async.waterfall([\n     *     async.constant(filename, \"utf8\"),\n     *     fs.readFile,\n     *     function (fileData, next) {\n     *         //...\n     *     }\n     *     //...\n     * ], callback);\n     *\n     * async.auto({\n     *     hostname: async.constant(\"https://server.net/\"),\n     *     port: findFreePort,\n     *     launchServer: [\"hostname\", \"port\", function (options, cb) {\n     *         startServer(options, cb);\n     *     }],\n     *     //...\n     * }, callback);\n     */\n    function constant$1(...args) {\n        return function (...ignoredArgs/*, callback*/) {\n            var callback = ignoredArgs.pop();\n            return callback(null, ...args);\n        };\n    }\n\n    function _createTester(check, getResult) {\n        return (eachfn, arr, _iteratee, cb) => {\n            var testPassed = false;\n            var testResult;\n            const iteratee = wrapAsync(_iteratee);\n            eachfn(arr, (value, _, callback) => {\n                iteratee(value, (err, result) => {\n                    if (err || err === false) return callback(err);\n\n                    if (check(result) && !testResult) {\n                        testPassed = true;\n                        testResult = getResult(true, value);\n                        return callback(null, breakLoop);\n                    }\n                    callback();\n                });\n            }, err => {\n                if (err) return cb(err);\n                cb(null, testPassed ? testResult : getResult(false));\n            });\n        };\n    }\n\n    /**\n     * Returns the first value in `coll` that passes an async truth test. The\n     * `iteratee` is applied in parallel, meaning the first iteratee to return\n     * `true` will fire the detect `callback` with that result. That means the\n     * result might not be the first item in the original `coll` (in terms of order)\n     * that passes the test.\n\n     * If order within the original `coll` is important, then look at\n     * [`detectSeries`]{@link module:Collections.detectSeries}.\n     *\n     * @name detect\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias find\n     * @category Collections\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n     * The iteratee must complete with a boolean value as its result.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the `iteratee` functions have finished.\n     * Result will be the first item in the array that passes the truth test\n     * (iteratee) or the value `undefined` if none passed. Invoked with\n     * (err, result).\n     * @returns {Promise} a promise, if a callback is omitted\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     *\n     * // asynchronous function that checks if a file exists\n     * function fileExists(file, callback) {\n     *    fs.access(file, fs.constants.F_OK, (err) => {\n     *        callback(null, !err);\n     *    });\n     * }\n     *\n     * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n     *    function(err, result) {\n     *        console.log(result);\n     *        // dir1/file1.txt\n     *        // result now equals the first file in the list that exists\n     *    }\n     *);\n     *\n     * // Using Promises\n     * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n     * .then(result => {\n     *     console.log(result);\n     *     // dir1/file1.txt\n     *     // result now equals the first file in the list that exists\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n     *         console.log(result);\n     *         // dir1/file1.txt\n     *         // result now equals the file in the list that exists\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function detect(coll, iteratee, callback) {\n        return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback)\n    }\n    var detect$1 = awaitify(detect, 3);\n\n    /**\n     * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name detectLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.detect]{@link module:Collections.detect}\n     * @alias findLimit\n     * @category Collections\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n     * The iteratee must complete with a boolean value as its result.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the `iteratee` functions have finished.\n     * Result will be the first item in the array that passes the truth test\n     * (iteratee) or the value `undefined` if none passed. Invoked with\n     * (err, result).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function detectLimit(coll, limit, iteratee, callback) {\n        return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var detectLimit$1 = awaitify(detectLimit, 4);\n\n    /**\n     * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n     *\n     * @name detectSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.detect]{@link module:Collections.detect}\n     * @alias findSeries\n     * @category Collections\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n     * The iteratee must complete with a boolean value as its result.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the `iteratee` functions have finished.\n     * Result will be the first item in the array that passes the truth test\n     * (iteratee) or the value `undefined` if none passed. Invoked with\n     * (err, result).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function detectSeries(coll, iteratee, callback) {\n        return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback)\n    }\n\n    var detectSeries$1 = awaitify(detectSeries, 3);\n\n    function consoleFunc(name) {\n        return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n            /* istanbul ignore else */\n            if (typeof console === 'object') {\n                /* istanbul ignore else */\n                if (err) {\n                    /* istanbul ignore else */\n                    if (console.error) {\n                        console.error(err);\n                    }\n                } else if (console[name]) { /* istanbul ignore else */\n                    resultArgs.forEach(x => console[name](x));\n                }\n            }\n        })\n    }\n\n    /**\n     * Logs the result of an [`async` function]{@link AsyncFunction} to the\n     * `console` using `console.dir` to display the properties of the resulting object.\n     * Only works in Node.js or in browsers that support `console.dir` and\n     * `console.error` (such as FF and Chrome).\n     * If multiple arguments are returned from the async function,\n     * `console.dir` is called on each argument in order.\n     *\n     * @name dir\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} function - The function you want to eventually apply\n     * all arguments to.\n     * @param {...*} arguments... - Any number of arguments to apply to the function.\n     * @example\n     *\n     * // in a module\n     * var hello = function(name, callback) {\n     *     setTimeout(function() {\n     *         callback(null, {hello: name});\n     *     }, 1000);\n     * };\n     *\n     * // in the node repl\n     * node> async.dir(hello, 'world');\n     * {hello: 'world'}\n     */\n    var dir = consoleFunc('dir');\n\n    /**\n     * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n     * the order of operations, the arguments `test` and `iteratee` are switched.\n     *\n     * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n     *\n     * @name doWhilst\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.whilst]{@link module:ControlFlow.whilst}\n     * @category Control Flow\n     * @param {AsyncFunction} iteratee - A function which is called each time `test`\n     * passes. Invoked with (callback).\n     * @param {AsyncFunction} test - asynchronous truth test to perform after each\n     * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n     * non-error args from the previous callback of `iteratee`.\n     * @param {Function} [callback] - A callback which is called after the test\n     * function has failed and repeated execution of `iteratee` has stopped.\n     * `callback` will be passed an error and any arguments passed to the final\n     * `iteratee`'s callback. Invoked with (err, [results]);\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function doWhilst(iteratee, test, callback) {\n        callback = onlyOnce(callback);\n        var _fn = wrapAsync(iteratee);\n        var _test = wrapAsync(test);\n        var results;\n\n        function next(err, ...args) {\n            if (err) return callback(err);\n            if (err === false) return;\n            results = args;\n            _test(...args, check);\n        }\n\n        function check(err, truth) {\n            if (err) return callback(err);\n            if (err === false) return;\n            if (!truth) return callback(null, ...results);\n            _fn(next);\n        }\n\n        return check(null, true);\n    }\n\n    var doWhilst$1 = awaitify(doWhilst, 3);\n\n    /**\n     * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n     * argument ordering differs from `until`.\n     *\n     * @name doUntil\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n     * @category Control Flow\n     * @param {AsyncFunction} iteratee - An async function which is called each time\n     * `test` fails. Invoked with (callback).\n     * @param {AsyncFunction} test - asynchronous truth test to perform after each\n     * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n     * non-error args from the previous callback of `iteratee`\n     * @param {Function} [callback] - A callback which is called after the test\n     * function has passed and repeated execution of `iteratee` has stopped. `callback`\n     * will be passed an error and any arguments passed to the final `iteratee`'s\n     * callback. Invoked with (err, [results]);\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function doUntil(iteratee, test, callback) {\n        const _test = wrapAsync(test);\n        return doWhilst$1(iteratee, (...args) => {\n            const cb = args.pop();\n            _test(...args, (err, truth) => cb (err, !truth));\n        }, callback);\n    }\n\n    function _withoutIndex(iteratee) {\n        return (value, index, callback) => iteratee(value, callback);\n    }\n\n    /**\n     * Applies the function `iteratee` to each item in `coll`, in parallel.\n     * The `iteratee` is called with an item from the list, and a callback for when\n     * it has finished. If the `iteratee` passes an error to its `callback`, the\n     * main `callback` (for the `each` function) is immediately called with the\n     * error.\n     *\n     * Note, that since this function applies `iteratee` to each item in parallel,\n     * there is no guarantee that the iteratee functions will complete in order.\n     *\n     * @name each\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias forEach\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to\n     * each item in `coll`. Invoked with (item, callback).\n     * The array index is not passed to the iteratee.\n     * If you need the index, use `eachOf`.\n     * @param {Function} [callback] - A callback which is called when all\n     * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     * // dir4 does not exist\n     *\n     * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n     * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n     *\n     * // asynchronous function that deletes a file\n     * const deleteFile = function(file, callback) {\n     *     fs.unlink(file, callback);\n     * };\n     *\n     * // Using callbacks\n     * async.each(fileList, deleteFile, function(err) {\n     *     if( err ) {\n     *         console.log(err);\n     *     } else {\n     *         console.log('All files have been deleted successfully');\n     *     }\n     * });\n     *\n     * // Error Handling\n     * async.each(withMissingFileList, deleteFile, function(err){\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     *     // since dir4/file2.txt does not exist\n     *     // dir1/file1.txt could have been deleted\n     * });\n     *\n     * // Using Promises\n     * async.each(fileList, deleteFile)\n     * .then( () => {\n     *     console.log('All files have been deleted successfully');\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Error Handling\n     * async.each(fileList, deleteFile)\n     * .then( () => {\n     *     console.log('All files have been deleted successfully');\n     * }).catch( err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     *     // since dir4/file2.txt does not exist\n     *     // dir1/file1.txt could have been deleted\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         await async.each(files, deleteFile);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // Error Handling\n     * async () => {\n     *     try {\n     *         await async.each(withMissingFileList, deleteFile);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *         // since dir4/file2.txt does not exist\n     *         // dir1/file1.txt could have been deleted\n     *     }\n     * }\n     *\n     */\n    function eachLimit$2(coll, iteratee, callback) {\n        return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n    }\n\n    var each = awaitify(eachLimit$2, 3);\n\n    /**\n     * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name eachLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.each]{@link module:Collections.each}\n     * @alias forEachLimit\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The array index is not passed to the iteratee.\n     * If you need the index, use `eachOfLimit`.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called when all\n     * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function eachLimit(coll, limit, iteratee, callback) {\n        return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n    }\n    var eachLimit$1 = awaitify(eachLimit, 4);\n\n    /**\n     * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n     *\n     * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n     * in series and therefore the iteratee functions will complete in order.\n\n     * @name eachSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.each]{@link module:Collections.each}\n     * @alias forEachSeries\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each\n     * item in `coll`.\n     * The array index is not passed to the iteratee.\n     * If you need the index, use `eachOfSeries`.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called when all\n     * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n     * @returns {Promise} a promise, if a callback is omitted\n     */\n    function eachSeries(coll, iteratee, callback) {\n        return eachLimit$1(coll, 1, iteratee, callback)\n    }\n    var eachSeries$1 = awaitify(eachSeries, 3);\n\n    /**\n     * Wrap an async function and ensure it calls its callback on a later tick of\n     * the event loop.  If the function already calls its callback on a next tick,\n     * no extra deferral is added. This is useful for preventing stack overflows\n     * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n     * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n     * contained. ES2017 `async` functions are returned as-is -- they are immune\n     * to Zalgo's corrupting influences, as they always resolve on a later tick.\n     *\n     * @name ensureAsync\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} fn - an async function, one that expects a node-style\n     * callback as its last argument.\n     * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n     * signature as the function passed in.\n     * @example\n     *\n     * function sometimesAsync(arg, callback) {\n     *     if (cache[arg]) {\n     *         return callback(null, cache[arg]); // this would be synchronous!!\n     *     } else {\n     *         doSomeIO(arg, callback); // this IO would be asynchronous\n     *     }\n     * }\n     *\n     * // this has a risk of stack overflows if many results are cached in a row\n     * async.mapSeries(args, sometimesAsync, done);\n     *\n     * // this will defer sometimesAsync's callback if necessary,\n     * // preventing stack overflows\n     * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n     */\n    function ensureAsync(fn) {\n        if (isAsync(fn)) return fn;\n        return function (...args/*, callback*/) {\n            var callback = args.pop();\n            var sync = true;\n            args.push((...innerArgs) => {\n                if (sync) {\n                    setImmediate$1(() => callback(...innerArgs));\n                } else {\n                    callback(...innerArgs);\n                }\n            });\n            fn.apply(this, args);\n            sync = false;\n        };\n    }\n\n    /**\n     * Returns `true` if every element in `coll` satisfies an async test. If any\n     * iteratee call returns `false`, the main `callback` is immediately called.\n     *\n     * @name every\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias all\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collection in parallel.\n     * The iteratee must complete with a boolean result value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result will be either `true` or `false`\n     * depending on the values of the async tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     * // dir4 does not exist\n     *\n     * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n     * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n     *\n     * // asynchronous function that checks if a file exists\n     * function fileExists(file, callback) {\n     *    fs.access(file, fs.constants.F_OK, (err) => {\n     *        callback(null, !err);\n     *    });\n     * }\n     *\n     * // Using callbacks\n     * async.every(fileList, fileExists, function(err, result) {\n     *     console.log(result);\n     *     // true\n     *     // result is true since every file exists\n     * });\n     *\n     * async.every(withMissingFileList, fileExists, function(err, result) {\n     *     console.log(result);\n     *     // false\n     *     // result is false since NOT every file exists\n     * });\n     *\n     * // Using Promises\n     * async.every(fileList, fileExists)\n     * .then( result => {\n     *     console.log(result);\n     *     // true\n     *     // result is true since every file exists\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * async.every(withMissingFileList, fileExists)\n     * .then( result => {\n     *     console.log(result);\n     *     // false\n     *     // result is false since NOT every file exists\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.every(fileList, fileExists);\n     *         console.log(result);\n     *         // true\n     *         // result is true since every file exists\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * async () => {\n     *     try {\n     *         let result = await async.every(withMissingFileList, fileExists);\n     *         console.log(result);\n     *         // false\n     *         // result is false since NOT every file exists\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function every(coll, iteratee, callback) {\n        return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback)\n    }\n    var every$1 = awaitify(every, 3);\n\n    /**\n     * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name everyLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.every]{@link module:Collections.every}\n     * @alias allLimit\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collection in parallel.\n     * The iteratee must complete with a boolean result value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result will be either `true` or `false`\n     * depending on the values of the async tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function everyLimit(coll, limit, iteratee, callback) {\n        return _createTester(bool => !bool, res => !res)(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var everyLimit$1 = awaitify(everyLimit, 4);\n\n    /**\n     * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n     *\n     * @name everySeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.every]{@link module:Collections.every}\n     * @alias allSeries\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collection in series.\n     * The iteratee must complete with a boolean result value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result will be either `true` or `false`\n     * depending on the values of the async tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function everySeries(coll, iteratee, callback) {\n        return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback)\n    }\n    var everySeries$1 = awaitify(everySeries, 3);\n\n    function filterArray(eachfn, arr, iteratee, callback) {\n        var truthValues = new Array(arr.length);\n        eachfn(arr, (x, index, iterCb) => {\n            iteratee(x, (err, v) => {\n                truthValues[index] = !!v;\n                iterCb(err);\n            });\n        }, err => {\n            if (err) return callback(err);\n            var results = [];\n            for (var i = 0; i < arr.length; i++) {\n                if (truthValues[i]) results.push(arr[i]);\n            }\n            callback(null, results);\n        });\n    }\n\n    function filterGeneric(eachfn, coll, iteratee, callback) {\n        var results = [];\n        eachfn(coll, (x, index, iterCb) => {\n            iteratee(x, (err, v) => {\n                if (err) return iterCb(err);\n                if (v) {\n                    results.push({index, value: x});\n                }\n                iterCb(err);\n            });\n        }, err => {\n            if (err) return callback(err);\n            callback(null, results\n                .sort((a, b) => a.index - b.index)\n                .map(v => v.value));\n        });\n    }\n\n    function _filter(eachfn, coll, iteratee, callback) {\n        var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n        return filter(eachfn, coll, wrapAsync(iteratee), callback);\n    }\n\n    /**\n     * Returns a new array of all the values in `coll` which pass an async truth\n     * test. This operation is performed in parallel, but the results array will be\n     * in the same order as the original.\n     *\n     * @name filter\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias select\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n     * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n     * with a boolean argument once it has completed. Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback provided\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     *\n     * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n     *\n     * // asynchronous function that checks if a file exists\n     * function fileExists(file, callback) {\n     *    fs.access(file, fs.constants.F_OK, (err) => {\n     *        callback(null, !err);\n     *    });\n     * }\n     *\n     * // Using callbacks\n     * async.filter(files, fileExists, function(err, results) {\n     *    if(err) {\n     *        console.log(err);\n     *    } else {\n     *        console.log(results);\n     *        // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n     *        // results is now an array of the existing files\n     *    }\n     * });\n     *\n     * // Using Promises\n     * async.filter(files, fileExists)\n     * .then(results => {\n     *     console.log(results);\n     *     // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n     *     // results is now an array of the existing files\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.filter(files, fileExists);\n     *         console.log(results);\n     *         // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n     *         // results is now an array of the existing files\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function filter (coll, iteratee, callback) {\n        return _filter(eachOf$1, coll, iteratee, callback)\n    }\n    var filter$1 = awaitify(filter, 3);\n\n    /**\n     * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name filterLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.filter]{@link module:Collections.filter}\n     * @alias selectLimit\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n     * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n     * with a boolean argument once it has completed. Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function filterLimit (coll, limit, iteratee, callback) {\n        return _filter(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var filterLimit$1 = awaitify(filterLimit, 4);\n\n    /**\n     * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n     *\n     * @name filterSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.filter]{@link module:Collections.filter}\n     * @alias selectSeries\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n     * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n     * with a boolean argument once it has completed. Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results)\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function filterSeries (coll, iteratee, callback) {\n        return _filter(eachOfSeries$1, coll, iteratee, callback)\n    }\n    var filterSeries$1 = awaitify(filterSeries, 3);\n\n    /**\n     * Calls the asynchronous function `fn` with a callback parameter that allows it\n     * to call itself again, in series, indefinitely.\n\n     * If an error is passed to the callback then `errback` is called with the\n     * error, and execution stops, otherwise it will never be called.\n     *\n     * @name forever\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {AsyncFunction} fn - an async function to call repeatedly.\n     * Invoked with (next).\n     * @param {Function} [errback] - when `fn` passes an error to it's callback,\n     * this function will be called, and execution stops. Invoked with (err).\n     * @returns {Promise} a promise that rejects if an error occurs and an errback\n     * is not passed\n     * @example\n     *\n     * async.forever(\n     *     function(next) {\n     *         // next is suitable for passing to things that need a callback(err [, whatever]);\n     *         // it will result in this function being called again.\n     *     },\n     *     function(err) {\n     *         // if next is called with a value in its first parameter, it will appear\n     *         // in here as 'err', and execution will stop.\n     *     }\n     * );\n     */\n    function forever(fn, errback) {\n        var done = onlyOnce(errback);\n        var task = wrapAsync(ensureAsync(fn));\n\n        function next(err) {\n            if (err) return done(err);\n            if (err === false) return;\n            task(next);\n        }\n        return next();\n    }\n    var forever$1 = awaitify(forever, 2);\n\n    /**\n     * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name groupByLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.groupBy]{@link module:Collections.groupBy}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with a `key` to group the value under.\n     * Invoked with (value, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Result is an `Object` whoses\n     * properties are arrays of values which returned the corresponding key.\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function groupByLimit(coll, limit, iteratee, callback) {\n        var _iteratee = wrapAsync(iteratee);\n        return mapLimit$1(coll, limit, (val, iterCb) => {\n            _iteratee(val, (err, key) => {\n                if (err) return iterCb(err);\n                return iterCb(err, {key, val});\n            });\n        }, (err, mapResults) => {\n            var result = {};\n            // from MDN, handle object having an `hasOwnProperty` prop\n            var {hasOwnProperty} = Object.prototype;\n\n            for (var i = 0; i < mapResults.length; i++) {\n                if (mapResults[i]) {\n                    var {key} = mapResults[i];\n                    var {val} = mapResults[i];\n\n                    if (hasOwnProperty.call(result, key)) {\n                        result[key].push(val);\n                    } else {\n                        result[key] = [val];\n                    }\n                }\n            }\n\n            return callback(err, result);\n        });\n    }\n\n    var groupByLimit$1 = awaitify(groupByLimit, 4);\n\n    /**\n     * Returns a new object, where each value corresponds to an array of items, from\n     * `coll`, that returned the corresponding key. That is, the keys of the object\n     * correspond to the values passed to the `iteratee` callback.\n     *\n     * Note: Since this function applies the `iteratee` to each item in parallel,\n     * there is no guarantee that the `iteratee` functions will complete in order.\n     * However, the values for each key in the `result` will be in the same order as\n     * the original `coll`. For Objects, the values will roughly be in the order of\n     * the original Objects' keys (but this can vary across JavaScript engines).\n     *\n     * @name groupBy\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with a `key` to group the value under.\n     * Invoked with (value, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Result is an `Object` whoses\n     * properties are arrays of values which returned the corresponding key.\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     * // dir4 does not exist\n     *\n     * const files = ['dir1/file1.txt','dir2','dir4']\n     *\n     * // asynchronous function that detects file type as none, file, or directory\n     * function detectFile(file, callback) {\n     *     fs.stat(file, function(err, stat) {\n     *         if (err) {\n     *             return callback(null, 'none');\n     *         }\n     *         callback(null, stat.isDirectory() ? 'directory' : 'file');\n     *     });\n     * }\n     *\n     * //Using callbacks\n     * async.groupBy(files, detectFile, function(err, result) {\n     *     if(err) {\n     *         console.log(err);\n     *     } else {\n     *\t       console.log(result);\n     *         // {\n     *         //     file: [ 'dir1/file1.txt' ],\n     *         //     none: [ 'dir4' ],\n     *         //     directory: [ 'dir2']\n     *         // }\n     *         // result is object containing the files grouped by type\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.groupBy(files, detectFile)\n     * .then( result => {\n     *     console.log(result);\n     *     // {\n     *     //     file: [ 'dir1/file1.txt' ],\n     *     //     none: [ 'dir4' ],\n     *     //     directory: [ 'dir2']\n     *     // }\n     *     // result is object containing the files grouped by type\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.groupBy(files, detectFile);\n     *         console.log(result);\n     *         // {\n     *         //     file: [ 'dir1/file1.txt' ],\n     *         //     none: [ 'dir4' ],\n     *         //     directory: [ 'dir2']\n     *         // }\n     *         // result is object containing the files grouped by type\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function groupBy (coll, iteratee, callback) {\n        return groupByLimit$1(coll, Infinity, iteratee, callback)\n    }\n\n    /**\n     * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n     *\n     * @name groupBySeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.groupBy]{@link module:Collections.groupBy}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with a `key` to group the value under.\n     * Invoked with (value, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. Result is an `Object` whose\n     * properties are arrays of values which returned the corresponding key.\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function groupBySeries (coll, iteratee, callback) {\n        return groupByLimit$1(coll, 1, iteratee, callback)\n    }\n\n    /**\n     * Logs the result of an `async` function to the `console`. Only works in\n     * Node.js or in browsers that support `console.log` and `console.error` (such\n     * as FF and Chrome). If multiple arguments are returned from the async\n     * function, `console.log` is called on each argument in order.\n     *\n     * @name log\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} function - The function you want to eventually apply\n     * all arguments to.\n     * @param {...*} arguments... - Any number of arguments to apply to the function.\n     * @example\n     *\n     * // in a module\n     * var hello = function(name, callback) {\n     *     setTimeout(function() {\n     *         callback(null, 'hello ' + name);\n     *     }, 1000);\n     * };\n     *\n     * // in the node repl\n     * node> async.log(hello, 'world');\n     * 'hello world'\n     */\n    var log = consoleFunc('log');\n\n    /**\n     * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name mapValuesLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.mapValues]{@link module:Collections.mapValues}\n     * @category Collection\n     * @param {Object} obj - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - A function to apply to each value and key\n     * in `coll`.\n     * The iteratee should complete with the transformed value as its result.\n     * Invoked with (value, key, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. `result` is a new object consisting\n     * of each key from `obj`, with each transformed value on the right-hand side.\n     * Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function mapValuesLimit(obj, limit, iteratee, callback) {\n        callback = once(callback);\n        var newObj = {};\n        var _iteratee = wrapAsync(iteratee);\n        return eachOfLimit$2(limit)(obj, (val, key, next) => {\n            _iteratee(val, key, (err, result) => {\n                if (err) return next(err);\n                newObj[key] = result;\n                next(err);\n            });\n        }, err => callback(err, newObj));\n    }\n\n    var mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\n\n    /**\n     * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n     *\n     * Produces a new Object by mapping each value of `obj` through the `iteratee`\n     * function. The `iteratee` is called each `value` and `key` from `obj` and a\n     * callback for when it has finished processing. Each of these callbacks takes\n     * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n     * passes an error to its callback, the main `callback` (for the `mapValues`\n     * function) is immediately called with the error.\n     *\n     * Note, the order of the keys in the result is not guaranteed.  The keys will\n     * be roughly in the order they complete, (but this is very engine-specific)\n     *\n     * @name mapValues\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @param {Object} obj - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A function to apply to each value and key\n     * in `coll`.\n     * The iteratee should complete with the transformed value as its result.\n     * Invoked with (value, key, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. `result` is a new object consisting\n     * of each key from `obj`, with each transformed value on the right-hand side.\n     * Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * // file1.txt is a file that is 1000 bytes in size\n     * // file2.txt is a file that is 2000 bytes in size\n     * // file3.txt is a file that is 3000 bytes in size\n     * // file4.txt does not exist\n     *\n     * const fileMap = {\n     *     f1: 'file1.txt',\n     *     f2: 'file2.txt',\n     *     f3: 'file3.txt'\n     * };\n     *\n     * const withMissingFileMap = {\n     *     f1: 'file1.txt',\n     *     f2: 'file2.txt',\n     *     f3: 'file4.txt'\n     * };\n     *\n     * // asynchronous function that returns the file size in bytes\n     * function getFileSizeInBytes(file, key, callback) {\n     *     fs.stat(file, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         callback(null, stat.size);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {\n     *     if (err) {\n     *         console.log(err);\n     *     } else {\n     *         console.log(result);\n     *         // result is now a map of file size in bytes for each file, e.g.\n     *         // {\n     *         //     f1: 1000,\n     *         //     f2: 2000,\n     *         //     f3: 3000\n     *         // }\n     *     }\n     * });\n     *\n     * // Error handling\n     * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {\n     *     if (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     } else {\n     *         console.log(result);\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.mapValues(fileMap, getFileSizeInBytes)\n     * .then( result => {\n     *     console.log(result);\n     *     // result is now a map of file size in bytes for each file, e.g.\n     *     // {\n     *     //     f1: 1000,\n     *     //     f2: 2000,\n     *     //     f3: 3000\n     *     // }\n     * }).catch (err => {\n     *     console.log(err);\n     * });\n     *\n     * // Error Handling\n     * async.mapValues(withMissingFileMap, getFileSizeInBytes)\n     * .then( result => {\n     *     console.log(result);\n     * }).catch (err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.mapValues(fileMap, getFileSizeInBytes);\n     *         console.log(result);\n     *         // result is now a map of file size in bytes for each file, e.g.\n     *         // {\n     *         //     f1: 1000,\n     *         //     f2: 2000,\n     *         //     f3: 3000\n     *         // }\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // Error Handling\n     * async () => {\n     *     try {\n     *         let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);\n     *         console.log(result);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     }\n     * }\n     *\n     */\n    function mapValues(obj, iteratee, callback) {\n        return mapValuesLimit$1(obj, Infinity, iteratee, callback)\n    }\n\n    /**\n     * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n     *\n     * @name mapValuesSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.mapValues]{@link module:Collections.mapValues}\n     * @category Collection\n     * @param {Object} obj - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - A function to apply to each value and key\n     * in `coll`.\n     * The iteratee should complete with the transformed value as its result.\n     * Invoked with (value, key, callback).\n     * @param {Function} [callback] - A callback which is called when all `iteratee`\n     * functions have finished, or an error occurs. `result` is a new object consisting\n     * of each key from `obj`, with each transformed value on the right-hand side.\n     * Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function mapValuesSeries(obj, iteratee, callback) {\n        return mapValuesLimit$1(obj, 1, iteratee, callback)\n    }\n\n    /**\n     * Caches the results of an async function. When creating a hash to store\n     * function results against, the callback is omitted from the hash and an\n     * optional hash function can be used.\n     *\n     * **Note: if the async function errs, the result will not be cached and\n     * subsequent calls will call the wrapped function.**\n     *\n     * If no hash function is specified, the first argument is used as a hash key,\n     * which may work reasonably if it is a string or a data type that converts to a\n     * distinct string. Note that objects and arrays will not behave reasonably.\n     * Neither will cases where the other arguments are significant. In such cases,\n     * specify your own hash function.\n     *\n     * The cache of results is exposed as the `memo` property of the function\n     * returned by `memoize`.\n     *\n     * @name memoize\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n     * @param {Function} hasher - An optional function for generating a custom hash\n     * for storing results. It has all the arguments applied to it apart from the\n     * callback, and must be synchronous.\n     * @returns {AsyncFunction} a memoized version of `fn`\n     * @example\n     *\n     * var slow_fn = function(name, callback) {\n     *     // do something\n     *     callback(null, result);\n     * };\n     * var fn = async.memoize(slow_fn);\n     *\n     * // fn can now be used as if it were slow_fn\n     * fn('some name', function() {\n     *     // callback\n     * });\n     */\n    function memoize(fn, hasher = v => v) {\n        var memo = Object.create(null);\n        var queues = Object.create(null);\n        var _fn = wrapAsync(fn);\n        var memoized = initialParams((args, callback) => {\n            var key = hasher(...args);\n            if (key in memo) {\n                setImmediate$1(() => callback(null, ...memo[key]));\n            } else if (key in queues) {\n                queues[key].push(callback);\n            } else {\n                queues[key] = [callback];\n                _fn(...args, (err, ...resultArgs) => {\n                    // #1465 don't memoize if an error occurred\n                    if (!err) {\n                        memo[key] = resultArgs;\n                    }\n                    var q = queues[key];\n                    delete queues[key];\n                    for (var i = 0, l = q.length; i < l; i++) {\n                        q[i](err, ...resultArgs);\n                    }\n                });\n            }\n        });\n        memoized.memo = memo;\n        memoized.unmemoized = fn;\n        return memoized;\n    }\n\n    /* istanbul ignore file */\n\n    /**\n     * Calls `callback` on a later loop around the event loop. In Node.js this just\n     * calls `process.nextTick`.  In the browser it will use `setImmediate` if\n     * available, otherwise `setTimeout(callback, 0)`, which means other higher\n     * priority events may precede the execution of `callback`.\n     *\n     * This is used internally for browser-compatibility purposes.\n     *\n     * @name nextTick\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @see [async.setImmediate]{@link module:Utils.setImmediate}\n     * @category Util\n     * @param {Function} callback - The function to call on a later loop around\n     * the event loop. Invoked with (args...).\n     * @param {...*} args... - any number of additional arguments to pass to the\n     * callback on the next tick.\n     * @example\n     *\n     * var call_order = [];\n     * async.nextTick(function() {\n     *     call_order.push('two');\n     *     // call_order now equals ['one','two']\n     * });\n     * call_order.push('one');\n     *\n     * async.setImmediate(function (a, b, c) {\n     *     // a, b, and c equal 1, 2, and 3\n     * }, 1, 2, 3);\n     */\n    var _defer;\n\n    if (hasNextTick) {\n        _defer = process.nextTick;\n    } else if (hasSetImmediate) {\n        _defer = setImmediate;\n    } else {\n        _defer = fallback;\n    }\n\n    var nextTick = wrap(_defer);\n\n    var _parallel = awaitify((eachfn, tasks, callback) => {\n        var results = isArrayLike(tasks) ? [] : {};\n\n        eachfn(tasks, (task, key, taskCb) => {\n            wrapAsync(task)((err, ...result) => {\n                if (result.length < 2) {\n                    [result] = result;\n                }\n                results[key] = result;\n                taskCb(err);\n            });\n        }, err => callback(err, results));\n    }, 3);\n\n    /**\n     * Run the `tasks` collection of functions in parallel, without waiting until\n     * the previous function has completed. If any of the functions pass an error to\n     * its callback, the main `callback` is immediately called with the value of the\n     * error. Once the `tasks` have completed, the results are passed to the final\n     * `callback` as an array.\n     *\n     * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n     * parallel execution of code.  If your tasks do not use any timers or perform\n     * any I/O, they will actually be executed in series.  Any synchronous setup\n     * sections for each task will happen one after the other.  JavaScript remains\n     * single-threaded.\n     *\n     * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n     * execution of other tasks when a task fails.\n     *\n     * It is also possible to use an object instead of an array. Each property will\n     * be run as a function and the results will be passed to the final `callback`\n     * as an object instead of an array. This can be a more readable way of handling\n     * results from {@link async.parallel}.\n     *\n     * @name parallel\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n     * [async functions]{@link AsyncFunction} to run.\n     * Each async function can complete with any number of optional `result` values.\n     * @param {Function} [callback] - An optional callback to run once all the\n     * functions have completed successfully. This function gets a results array\n     * (or object) containing all the result arguments passed to the task callbacks.\n     * Invoked with (err, results).\n     * @returns {Promise} a promise, if a callback is not passed\n     *\n     * @example\n     *\n     * //Using Callbacks\n     * async.parallel([\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ], function(err, results) {\n     *     console.log(results);\n     *     // results is equal to ['one','two'] even though\n     *     // the second function had a shorter timeout.\n     * });\n     *\n     * // an example using an object instead of an array\n     * async.parallel({\n     *     one: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 1);\n     *         }, 200);\n     *     },\n     *     two: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 2);\n     *         }, 100);\n     *     }\n     * }, function(err, results) {\n     *     console.log(results);\n     *     // results is equal to: { one: 1, two: 2 }\n     * });\n     *\n     * //Using Promises\n     * async.parallel([\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ]).then(results => {\n     *     console.log(results);\n     *     // results is equal to ['one','two'] even though\n     *     // the second function had a shorter timeout.\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // an example using an object instead of an array\n     * async.parallel({\n     *     one: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 1);\n     *         }, 200);\n     *     },\n     *     two: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 2);\n     *         }, 100);\n     *     }\n     * }).then(results => {\n     *     console.log(results);\n     *     // results is equal to: { one: 1, two: 2 }\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * //Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.parallel([\n     *             function(callback) {\n     *                 setTimeout(function() {\n     *                     callback(null, 'one');\n     *                 }, 200);\n     *             },\n     *             function(callback) {\n     *                 setTimeout(function() {\n     *                     callback(null, 'two');\n     *                 }, 100);\n     *             }\n     *         ]);\n     *         console.log(results);\n     *         // results is equal to ['one','two'] even though\n     *         // the second function had a shorter timeout.\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // an example using an object instead of an array\n     * async () => {\n     *     try {\n     *         let results = await async.parallel({\n     *             one: function(callback) {\n     *                 setTimeout(function() {\n     *                     callback(null, 1);\n     *                 }, 200);\n     *             },\n     *            two: function(callback) {\n     *                 setTimeout(function() {\n     *                     callback(null, 2);\n     *                 }, 100);\n     *            }\n     *         });\n     *         console.log(results);\n     *         // results is equal to: { one: 1, two: 2 }\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function parallel(tasks, callback) {\n        return _parallel(eachOf$1, tasks, callback);\n    }\n\n    /**\n     * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name parallelLimit\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.parallel]{@link module:ControlFlow.parallel}\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n     * [async functions]{@link AsyncFunction} to run.\n     * Each async function can complete with any number of optional `result` values.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {Function} [callback] - An optional callback to run once all the\n     * functions have completed successfully. This function gets a results array\n     * (or object) containing all the result arguments passed to the task callbacks.\n     * Invoked with (err, results).\n     * @returns {Promise} a promise, if a callback is not passed\n     */\n    function parallelLimit(tasks, limit, callback) {\n        return _parallel(eachOfLimit$2(limit), tasks, callback);\n    }\n\n    /**\n     * A queue of tasks for the worker function to complete.\n     * @typedef {Iterable} QueueObject\n     * @memberOf module:ControlFlow\n     * @property {Function} length - a function returning the number of items\n     * waiting to be processed. Invoke with `queue.length()`.\n     * @property {boolean} started - a boolean indicating whether or not any\n     * items have been pushed and processed by the queue.\n     * @property {Function} running - a function returning the number of items\n     * currently being processed. Invoke with `queue.running()`.\n     * @property {Function} workersList - a function returning the array of items\n     * currently being processed. Invoke with `queue.workersList()`.\n     * @property {Function} idle - a function returning false if there are items\n     * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n     * @property {number} concurrency - an integer for determining how many `worker`\n     * functions should be run in parallel. This property can be changed after a\n     * `queue` is created to alter the concurrency on-the-fly.\n     * @property {number} payload - an integer that specifies how many items are\n     * passed to the worker function at a time. only applies if this is a\n     * [cargo]{@link module:ControlFlow.cargo} object\n     * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n     * once the `worker` has finished processing the task. Instead of a single task,\n     * a `tasks` array can be submitted. The respective callback is used for every\n     * task in the list. Invoke with `queue.push(task, [callback])`,\n     * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n     * Invoke with `queue.unshift(task, [callback])`.\n     * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n     * a promise that rejects if an error occurs.\n     * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n     * a promise that rejects if an error occurs.\n     * @property {Function} remove - remove items from the queue that match a test\n     * function.  The test function will be passed an object with a `data` property,\n     * and a `priority` property, if this is a\n     * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n     * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n     * `function ({data, priority}) {}` and returns a Boolean.\n     * @property {Function} saturated - a function that sets a callback that is\n     * called when the number of running workers hits the `concurrency` limit, and\n     * further tasks will be queued.  If the callback is omitted, `q.saturated()`\n     * returns a promise for the next occurrence.\n     * @property {Function} unsaturated - a function that sets a callback that is\n     * called when the number of running workers is less than the `concurrency` &\n     * `buffer` limits, and further tasks will not be queued. If the callback is\n     * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n     * @property {number} buffer - A minimum threshold buffer in order to say that\n     * the `queue` is `unsaturated`.\n     * @property {Function} empty - a function that sets a callback that is called\n     * when the last item from the `queue` is given to a `worker`. If the callback\n     * is omitted, `q.empty()` returns a promise for the next occurrence.\n     * @property {Function} drain - a function that sets a callback that is called\n     * when the last item from the `queue` has returned from the `worker`. If the\n     * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n     * @property {Function} error - a function that sets a callback that is called\n     * when a task errors. Has the signature `function(error, task)`. If the\n     * callback is omitted, `error()` returns a promise that rejects on the next\n     * error.\n     * @property {boolean} paused - a boolean for determining whether the queue is\n     * in a paused state.\n     * @property {Function} pause - a function that pauses the processing of tasks\n     * until `resume()` is called. Invoke with `queue.pause()`.\n     * @property {Function} resume - a function that resumes the processing of\n     * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n     * @property {Function} kill - a function that removes the `drain` callback and\n     * empties remaining tasks from the queue forcing it to go idle. No more tasks\n     * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n     *\n     * @example\n     * const q = async.queue(worker, 2)\n     * q.push(item1)\n     * q.push(item2)\n     * q.push(item3)\n     * // queues are iterable, spread into an array to inspect\n     * const items = [...q] // [item1, item2, item3]\n     * // or use for of\n     * for (let item of q) {\n     *     console.log(item)\n     * }\n     *\n     * q.drain(() => {\n     *     console.log('all done')\n     * })\n     * // or\n     * await q.drain()\n     */\n\n    /**\n     * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n     * `queue` are processed in parallel (up to the `concurrency` limit). If all\n     * `worker`s are in progress, the task is queued until one becomes available.\n     * Once a `worker` completes a `task`, that `task`'s callback is called.\n     *\n     * @name queue\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {AsyncFunction} worker - An async function for processing a queued task.\n     * If you want to handle errors from an individual task, pass a callback to\n     * `q.push()`. Invoked with (task, callback).\n     * @param {number} [concurrency=1] - An `integer` for determining how many\n     * `worker` functions should be run in parallel.  If omitted, the concurrency\n     * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n     * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n     * attached as certain properties to listen for specific events during the\n     * lifecycle of the queue.\n     * @example\n     *\n     * // create a queue object with concurrency 2\n     * var q = async.queue(function(task, callback) {\n     *     console.log('hello ' + task.name);\n     *     callback();\n     * }, 2);\n     *\n     * // assign a callback\n     * q.drain(function() {\n     *     console.log('all items have been processed');\n     * });\n     * // or await the end\n     * await q.drain()\n     *\n     * // assign an error callback\n     * q.error(function(err, task) {\n     *     console.error('task experienced an error');\n     * });\n     *\n     * // add some items to the queue\n     * q.push({name: 'foo'}, function(err) {\n     *     console.log('finished processing foo');\n     * });\n     * // callback is optional\n     * q.push({name: 'bar'});\n     *\n     * // add some items to the queue (batch-wise)\n     * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n     *     console.log('finished processing item');\n     * });\n     *\n     * // add some items to the front of the queue\n     * q.unshift({name: 'bar'}, function (err) {\n     *     console.log('finished processing bar');\n     * });\n     */\n    function queue (worker, concurrency) {\n        var _worker = wrapAsync(worker);\n        return queue$1((items, cb) => {\n            _worker(items[0], cb);\n        }, concurrency, 1);\n    }\n\n    // Binary min-heap implementation used for priority queue.\n    // Implementation is stable, i.e. push time is considered for equal priorities\n    class Heap {\n        constructor() {\n            this.heap = [];\n            this.pushCount = Number.MIN_SAFE_INTEGER;\n        }\n\n        get length() {\n            return this.heap.length;\n        }\n\n        empty () {\n            this.heap = [];\n            return this;\n        }\n\n        percUp(index) {\n            let p;\n\n            while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) {\n                let t = this.heap[index];\n                this.heap[index] = this.heap[p];\n                this.heap[p] = t;\n\n                index = p;\n            }\n        }\n\n        percDown(index) {\n            let l;\n\n            while ((l=leftChi(index)) < this.heap.length) {\n                if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) {\n                    l = l+1;\n                }\n\n                if (smaller(this.heap[index], this.heap[l])) {\n                    break;\n                }\n\n                let t = this.heap[index];\n                this.heap[index] = this.heap[l];\n                this.heap[l] = t;\n\n                index = l;\n            }\n        }\n\n        push(node) {\n            node.pushCount = ++this.pushCount;\n            this.heap.push(node);\n            this.percUp(this.heap.length-1);\n        }\n\n        unshift(node) {\n            return this.heap.push(node);\n        }\n\n        shift() {\n            let [top] = this.heap;\n\n            this.heap[0] = this.heap[this.heap.length-1];\n            this.heap.pop();\n            this.percDown(0);\n\n            return top;\n        }\n\n        toArray() {\n            return [...this];\n        }\n\n        *[Symbol.iterator] () {\n            for (let i = 0; i < this.heap.length; i++) {\n                yield this.heap[i].data;\n            }\n        }\n\n        remove (testFn) {\n            let j = 0;\n            for (let i = 0; i < this.heap.length; i++) {\n                if (!testFn(this.heap[i])) {\n                    this.heap[j] = this.heap[i];\n                    j++;\n                }\n            }\n\n            this.heap.splice(j);\n\n            for (let i = parent(this.heap.length-1); i >= 0; i--) {\n                this.percDown(i);\n            }\n\n            return this;\n        }\n    }\n\n    function leftChi(i) {\n        return (i<<1)+1;\n    }\n\n    function parent(i) {\n        return ((i+1)>>1)-1;\n    }\n\n    function smaller(x, y) {\n        if (x.priority !== y.priority) {\n            return x.priority < y.priority;\n        }\n        else {\n            return x.pushCount < y.pushCount;\n        }\n    }\n\n    /**\n     * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n     * completed in ascending priority order.\n     *\n     * @name priorityQueue\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.queue]{@link module:ControlFlow.queue}\n     * @category Control Flow\n     * @param {AsyncFunction} worker - An async function for processing a queued task.\n     * If you want to handle errors from an individual task, pass a callback to\n     * `q.push()`.\n     * Invoked with (task, callback).\n     * @param {number} concurrency - An `integer` for determining how many `worker`\n     * functions should be run in parallel.  If omitted, the concurrency defaults to\n     * `1`.  If the concurrency is `0`, an error is thrown.\n     * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three\n     * differences between `queue` and `priorityQueue` objects:\n     * * `push(task, priority, [callback])` - `priority` should be a number. If an\n     *   array of `tasks` is given, all tasks will be assigned the same priority.\n     * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`,\n     *   except this returns a promise that rejects if an error occurs.\n     * * The `unshift` and `unshiftAsync` methods were removed.\n     */\n    function priorityQueue(worker, concurrency) {\n        // Start with a normal queue\n        var q = queue(worker, concurrency);\n\n        var {\n            push,\n            pushAsync\n        } = q;\n\n        q._tasks = new Heap();\n        q._createTaskItem = ({data, priority}, callback) => {\n            return {\n                data,\n                priority,\n                callback\n            };\n        };\n\n        function createDataItems(tasks, priority) {\n            if (!Array.isArray(tasks)) {\n                return {data: tasks, priority};\n            }\n            return tasks.map(data => { return {data, priority}; });\n        }\n\n        // Override push to accept second parameter representing priority\n        q.push = function(data, priority = 0, callback) {\n            return push(createDataItems(data, priority), callback);\n        };\n\n        q.pushAsync = function(data, priority = 0, callback) {\n            return pushAsync(createDataItems(data, priority), callback);\n        };\n\n        // Remove unshift functions\n        delete q.unshift;\n        delete q.unshiftAsync;\n\n        return q;\n    }\n\n    /**\n     * Runs the `tasks` array of functions in parallel, without waiting until the\n     * previous function has completed. Once any of the `tasks` complete or pass an\n     * error to its callback, the main `callback` is immediately called. It's\n     * equivalent to `Promise.race()`.\n     *\n     * @name race\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n     * to run. Each function can complete with an optional `result` value.\n     * @param {Function} callback - A callback to run once any of the functions have\n     * completed. This function gets an error or result from the first function that\n     * completed. Invoked with (err, result).\n     * @returns {Promise} a promise, if a callback is omitted\n     * @example\n     *\n     * async.race([\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ],\n     * // main callback\n     * function(err, result) {\n     *     // the result will be equal to 'two' as it finishes earlier\n     * });\n     */\n    function race(tasks, callback) {\n        callback = once(callback);\n        if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n        if (!tasks.length) return callback();\n        for (var i = 0, l = tasks.length; i < l; i++) {\n            wrapAsync(tasks[i])(callback);\n        }\n    }\n\n    var race$1 = awaitify(race, 2);\n\n    /**\n     * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n     *\n     * @name reduceRight\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.reduce]{@link module:Collections.reduce}\n     * @alias foldr\n     * @category Collection\n     * @param {Array} array - A collection to iterate over.\n     * @param {*} memo - The initial state of the reduction.\n     * @param {AsyncFunction} iteratee - A function applied to each item in the\n     * array to produce the next step in the reduction.\n     * The `iteratee` should complete with the next state of the reduction.\n     * If the iteratee completes with an error, the reduction is stopped and the\n     * main `callback` is immediately called with the error.\n     * Invoked with (memo, item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result is the reduced value. Invoked with\n     * (err, result).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function reduceRight (array, memo, iteratee, callback) {\n        var reversed = [...array].reverse();\n        return reduce$1(reversed, memo, iteratee, callback);\n    }\n\n    /**\n     * Wraps the async function in another function that always completes with a\n     * result object, even when it errors.\n     *\n     * The result object has either the property `error` or `value`.\n     *\n     * @name reflect\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} fn - The async function you want to wrap\n     * @returns {Function} - A function that always passes null to it's callback as\n     * the error. The second argument to the callback will be an `object` with\n     * either an `error` or a `value` property.\n     * @example\n     *\n     * async.parallel([\n     *     async.reflect(function(callback) {\n     *         // do some stuff ...\n     *         callback(null, 'one');\n     *     }),\n     *     async.reflect(function(callback) {\n     *         // do some more stuff but error ...\n     *         callback('bad stuff happened');\n     *     }),\n     *     async.reflect(function(callback) {\n     *         // do some more stuff ...\n     *         callback(null, 'two');\n     *     })\n     * ],\n     * // optional callback\n     * function(err, results) {\n     *     // values\n     *     // results[0].value = 'one'\n     *     // results[1].error = 'bad stuff happened'\n     *     // results[2].value = 'two'\n     * });\n     */\n    function reflect(fn) {\n        var _fn = wrapAsync(fn);\n        return initialParams(function reflectOn(args, reflectCallback) {\n            args.push((error, ...cbArgs) => {\n                let retVal = {};\n                if (error) {\n                    retVal.error = error;\n                }\n                if (cbArgs.length > 0){\n                    var value = cbArgs;\n                    if (cbArgs.length <= 1) {\n                        [value] = cbArgs;\n                    }\n                    retVal.value = value;\n                }\n                reflectCallback(null, retVal);\n            });\n\n            return _fn.apply(this, args);\n        });\n    }\n\n    /**\n     * A helper function that wraps an array or an object of functions with `reflect`.\n     *\n     * @name reflectAll\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @see [async.reflect]{@link module:Utils.reflect}\n     * @category Util\n     * @param {Array|Object|Iterable} tasks - The collection of\n     * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n     * @returns {Array} Returns an array of async functions, each wrapped in\n     * `async.reflect`\n     * @example\n     *\n     * let tasks = [\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         // do some more stuff but error ...\n     *         callback(new Error('bad stuff happened'));\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ];\n     *\n     * async.parallel(async.reflectAll(tasks),\n     * // optional callback\n     * function(err, results) {\n     *     // values\n     *     // results[0].value = 'one'\n     *     // results[1].error = Error('bad stuff happened')\n     *     // results[2].value = 'two'\n     * });\n     *\n     * // an example using an object instead of an array\n     * let tasks = {\n     *     one: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     two: function(callback) {\n     *         callback('two');\n     *     },\n     *     three: function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'three');\n     *         }, 100);\n     *     }\n     * };\n     *\n     * async.parallel(async.reflectAll(tasks),\n     * // optional callback\n     * function(err, results) {\n     *     // values\n     *     // results.one.value = 'one'\n     *     // results.two.error = 'two'\n     *     // results.three.value = 'three'\n     * });\n     */\n    function reflectAll(tasks) {\n        var results;\n        if (Array.isArray(tasks)) {\n            results = tasks.map(reflect);\n        } else {\n            results = {};\n            Object.keys(tasks).forEach(key => {\n                results[key] = reflect.call(this, tasks[key]);\n            });\n        }\n        return results;\n    }\n\n    function reject$2(eachfn, arr, _iteratee, callback) {\n        const iteratee = wrapAsync(_iteratee);\n        return _filter(eachfn, arr, (value, cb) => {\n            iteratee(value, (err, v) => {\n                cb(err, !v);\n            });\n        }, callback);\n    }\n\n    /**\n     * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n     *\n     * @name reject\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.filter]{@link module:Collections.filter}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {Function} iteratee - An async truth test to apply to each item in\n     * `coll`.\n     * The should complete with a boolean value as its `result`.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     *\n     * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n     *\n     * // asynchronous function that checks if a file exists\n     * function fileExists(file, callback) {\n     *    fs.access(file, fs.constants.F_OK, (err) => {\n     *        callback(null, !err);\n     *    });\n     * }\n     *\n     * // Using callbacks\n     * async.reject(fileList, fileExists, function(err, results) {\n     *    // [ 'dir3/file6.txt' ]\n     *    // results now equals an array of the non-existing files\n     * });\n     *\n     * // Using Promises\n     * async.reject(fileList, fileExists)\n     * .then( results => {\n     *     console.log(results);\n     *     // [ 'dir3/file6.txt' ]\n     *     // results now equals an array of the non-existing files\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.reject(fileList, fileExists);\n     *         console.log(results);\n     *         // [ 'dir3/file6.txt' ]\n     *         // results now equals an array of the non-existing files\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function reject (coll, iteratee, callback) {\n        return reject$2(eachOf$1, coll, iteratee, callback)\n    }\n    var reject$1 = awaitify(reject, 3);\n\n    /**\n     * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name rejectLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.reject]{@link module:Collections.reject}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {Function} iteratee - An async truth test to apply to each item in\n     * `coll`.\n     * The should complete with a boolean value as its `result`.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function rejectLimit (coll, limit, iteratee, callback) {\n        return reject$2(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var rejectLimit$1 = awaitify(rejectLimit, 4);\n\n    /**\n     * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n     *\n     * @name rejectSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.reject]{@link module:Collections.reject}\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {Function} iteratee - An async truth test to apply to each item in\n     * `coll`.\n     * The should complete with a boolean value as its `result`.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     */\n    function rejectSeries (coll, iteratee, callback) {\n        return reject$2(eachOfSeries$1, coll, iteratee, callback)\n    }\n    var rejectSeries$1 = awaitify(rejectSeries, 3);\n\n    function constant(value) {\n        return function () {\n            return value;\n        }\n    }\n\n    /**\n     * Attempts to get a successful response from `task` no more than `times` times\n     * before returning an error. If the task is successful, the `callback` will be\n     * passed the result of the successful task. If all attempts fail, the callback\n     * will be passed the error and result (if any) of the final attempt.\n     *\n     * @name retry\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @see [async.retryable]{@link module:ControlFlow.retryable}\n     * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n     * object with `times` and `interval` or a number.\n     * * `times` - The number of attempts to make before giving up.  The default\n     *   is `5`.\n     * * `interval` - The time to wait between retries, in milliseconds.  The\n     *   default is `0`. The interval may also be specified as a function of the\n     *   retry count (see example).\n     * * `errorFilter` - An optional synchronous function that is invoked on\n     *   erroneous result. If it returns `true` the retry attempts will continue;\n     *   if the function returns `false` the retry flow is aborted with the current\n     *   attempt's error and result being returned to the final callback.\n     *   Invoked with (err).\n     * * If `opts` is a number, the number specifies the number of times to retry,\n     *   with the default interval of `0`.\n     * @param {AsyncFunction} task - An async function to retry.\n     * Invoked with (callback).\n     * @param {Function} [callback] - An optional callback which is called when the\n     * task has succeeded, or after the final failed attempt. It receives the `err`\n     * and `result` arguments of the last attempt at completing the `task`. Invoked\n     * with (err, results).\n     * @returns {Promise} a promise if no callback provided\n     *\n     * @example\n     *\n     * // The `retry` function can be used as a stand-alone control flow by passing\n     * // a callback, as shown below:\n     *\n     * // try calling apiMethod 3 times\n     * async.retry(3, apiMethod, function(err, result) {\n     *     // do something with the result\n     * });\n     *\n     * // try calling apiMethod 3 times, waiting 200 ms between each retry\n     * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n     *     // do something with the result\n     * });\n     *\n     * // try calling apiMethod 10 times with exponential backoff\n     * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n     * async.retry({\n     *   times: 10,\n     *   interval: function(retryCount) {\n     *     return 50 * Math.pow(2, retryCount);\n     *   }\n     * }, apiMethod, function(err, result) {\n     *     // do something with the result\n     * });\n     *\n     * // try calling apiMethod the default 5 times no delay between each retry\n     * async.retry(apiMethod, function(err, result) {\n     *     // do something with the result\n     * });\n     *\n     * // try calling apiMethod only when error condition satisfies, all other\n     * // errors will abort the retry control flow and return to final callback\n     * async.retry({\n     *   errorFilter: function(err) {\n     *     return err.message === 'Temporary error'; // only retry on a specific error\n     *   }\n     * }, apiMethod, function(err, result) {\n     *     // do something with the result\n     * });\n     *\n     * // to retry individual methods that are not as reliable within other\n     * // control flow functions, use the `retryable` wrapper:\n     * async.auto({\n     *     users: api.getUsers.bind(api),\n     *     payments: async.retryable(3, api.getPayments.bind(api))\n     * }, function(err, results) {\n     *     // do something with the results\n     * });\n     *\n     */\n    const DEFAULT_TIMES = 5;\n    const DEFAULT_INTERVAL = 0;\n\n    function retry(opts, task, callback) {\n        var options = {\n            times: DEFAULT_TIMES,\n            intervalFunc: constant(DEFAULT_INTERVAL)\n        };\n\n        if (arguments.length < 3 && typeof opts === 'function') {\n            callback = task || promiseCallback();\n            task = opts;\n        } else {\n            parseTimes(options, opts);\n            callback = callback || promiseCallback();\n        }\n\n        if (typeof task !== 'function') {\n            throw new Error(\"Invalid arguments for async.retry\");\n        }\n\n        var _task = wrapAsync(task);\n\n        var attempt = 1;\n        function retryAttempt() {\n            _task((err, ...args) => {\n                if (err === false) return\n                if (err && attempt++ < options.times &&\n                    (typeof options.errorFilter != 'function' ||\n                        options.errorFilter(err))) {\n                    setTimeout(retryAttempt, options.intervalFunc(attempt - 1));\n                } else {\n                    callback(err, ...args);\n                }\n            });\n        }\n\n        retryAttempt();\n        return callback[PROMISE_SYMBOL]\n    }\n\n    function parseTimes(acc, t) {\n        if (typeof t === 'object') {\n            acc.times = +t.times || DEFAULT_TIMES;\n\n            acc.intervalFunc = typeof t.interval === 'function' ?\n                t.interval :\n                constant(+t.interval || DEFAULT_INTERVAL);\n\n            acc.errorFilter = t.errorFilter;\n        } else if (typeof t === 'number' || typeof t === 'string') {\n            acc.times = +t || DEFAULT_TIMES;\n        } else {\n            throw new Error(\"Invalid arguments for async.retry\");\n        }\n    }\n\n    /**\n     * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method\n     * wraps a task and makes it retryable, rather than immediately calling it\n     * with retries.\n     *\n     * @name retryable\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.retry]{@link module:ControlFlow.retry}\n     * @category Control Flow\n     * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n     * options, exactly the same as from `retry`, except for a `opts.arity` that\n     * is the arity of the `task` function, defaulting to `task.length`\n     * @param {AsyncFunction} task - the asynchronous function to wrap.\n     * This function will be passed any arguments passed to the returned wrapper.\n     * Invoked with (...args, callback).\n     * @returns {AsyncFunction} The wrapped function, which when invoked, will\n     * retry on an error, based on the parameters specified in `opts`.\n     * This function will accept the same parameters as `task`.\n     * @example\n     *\n     * async.auto({\n     *     dep1: async.retryable(3, getFromFlakyService),\n     *     process: [\"dep1\", async.retryable(3, function (results, cb) {\n     *         maybeProcessData(results.dep1, cb);\n     *     })]\n     * }, callback);\n     */\n    function retryable (opts, task) {\n        if (!task) {\n            task = opts;\n            opts = null;\n        }\n        let arity = (opts && opts.arity) || task.length;\n        if (isAsync(task)) {\n            arity += 1;\n        }\n        var _task = wrapAsync(task);\n        return initialParams((args, callback) => {\n            if (args.length < arity - 1 || callback == null) {\n                args.push(callback);\n                callback = promiseCallback();\n            }\n            function taskFn(cb) {\n                _task(...args, cb);\n            }\n\n            if (opts) retry(opts, taskFn, callback);\n            else retry(taskFn, callback);\n\n            return callback[PROMISE_SYMBOL]\n        });\n    }\n\n    /**\n     * Run the functions in the `tasks` collection in series, each one running once\n     * the previous function has completed. If any functions in the series pass an\n     * error to its callback, no more functions are run, and `callback` is\n     * immediately called with the value of the error. Otherwise, `callback`\n     * receives an array of results when `tasks` have completed.\n     *\n     * It is also possible to use an object instead of an array. Each property will\n     * be run as a function, and the results will be passed to the final `callback`\n     * as an object instead of an array. This can be a more readable way of handling\n     *  results from {@link async.series}.\n     *\n     * **Note** that while many implementations preserve the order of object\n     * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n     * explicitly states that\n     *\n     * > The mechanics and order of enumerating the properties is not specified.\n     *\n     * So if you rely on the order in which your series of functions are executed,\n     * and want this to work on all platforms, consider using an array.\n     *\n     * @name series\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n     * [async functions]{@link AsyncFunction} to run in series.\n     * Each function can complete with any number of optional `result` values.\n     * @param {Function} [callback] - An optional callback to run once all the\n     * functions have completed. This function gets a results array (or object)\n     * containing all the result arguments passed to the `task` callbacks. Invoked\n     * with (err, result).\n     * @return {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * //Using Callbacks\n     * async.series([\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             // do some async task\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             // then do another async task\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ], function(err, results) {\n     *     console.log(results);\n     *     // results is equal to ['one','two']\n     * });\n     *\n     * // an example using objects instead of arrays\n     * async.series({\n     *     one: function(callback) {\n     *         setTimeout(function() {\n     *             // do some async task\n     *             callback(null, 1);\n     *         }, 200);\n     *     },\n     *     two: function(callback) {\n     *         setTimeout(function() {\n     *             // then do another async task\n     *             callback(null, 2);\n     *         }, 100);\n     *     }\n     * }, function(err, results) {\n     *     console.log(results);\n     *     // results is equal to: { one: 1, two: 2 }\n     * });\n     *\n     * //Using Promises\n     * async.series([\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'one');\n     *         }, 200);\n     *     },\n     *     function(callback) {\n     *         setTimeout(function() {\n     *             callback(null, 'two');\n     *         }, 100);\n     *     }\n     * ]).then(results => {\n     *     console.log(results);\n     *     // results is equal to ['one','two']\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // an example using an object instead of an array\n     * async.series({\n     *     one: function(callback) {\n     *         setTimeout(function() {\n     *             // do some async task\n     *             callback(null, 1);\n     *         }, 200);\n     *     },\n     *     two: function(callback) {\n     *         setTimeout(function() {\n     *             // then do another async task\n     *             callback(null, 2);\n     *         }, 100);\n     *     }\n     * }).then(results => {\n     *     console.log(results);\n     *     // results is equal to: { one: 1, two: 2 }\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * //Using async/await\n     * async () => {\n     *     try {\n     *         let results = await async.series([\n     *             function(callback) {\n     *                 setTimeout(function() {\n     *                     // do some async task\n     *                     callback(null, 'one');\n     *                 }, 200);\n     *             },\n     *             function(callback) {\n     *                 setTimeout(function() {\n     *                     // then do another async task\n     *                     callback(null, 'two');\n     *                 }, 100);\n     *             }\n     *         ]);\n     *         console.log(results);\n     *         // results is equal to ['one','two']\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * // an example using an object instead of an array\n     * async () => {\n     *     try {\n     *         let results = await async.parallel({\n     *             one: function(callback) {\n     *                 setTimeout(function() {\n     *                     // do some async task\n     *                     callback(null, 1);\n     *                 }, 200);\n     *             },\n     *            two: function(callback) {\n     *                 setTimeout(function() {\n     *                     // then do another async task\n     *                     callback(null, 2);\n     *                 }, 100);\n     *            }\n     *         });\n     *         console.log(results);\n     *         // results is equal to: { one: 1, two: 2 }\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function series(tasks, callback) {\n        return _parallel(eachOfSeries$1, tasks, callback);\n    }\n\n    /**\n     * Returns `true` if at least one element in the `coll` satisfies an async test.\n     * If any iteratee call returns `true`, the main `callback` is immediately\n     * called.\n     *\n     * @name some\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @alias any\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collections in parallel.\n     * The iteratee should complete with a boolean `result` value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the iteratee functions have finished.\n     * Result will be either `true` or `false` depending on the values of the async\n     * tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     * @example\n     *\n     * // dir1 is a directory that contains file1.txt, file2.txt\n     * // dir2 is a directory that contains file3.txt, file4.txt\n     * // dir3 is a directory that contains file5.txt\n     * // dir4 does not exist\n     *\n     * // asynchronous function that checks if a file exists\n     * function fileExists(file, callback) {\n     *    fs.access(file, fs.constants.F_OK, (err) => {\n     *        callback(null, !err);\n     *    });\n     * }\n     *\n     * // Using callbacks\n     * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n     *    function(err, result) {\n     *        console.log(result);\n     *        // true\n     *        // result is true since some file in the list exists\n     *    }\n     *);\n     *\n     * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n     *    function(err, result) {\n     *        console.log(result);\n     *        // false\n     *        // result is false since none of the files exists\n     *    }\n     *);\n     *\n     * // Using Promises\n     * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n     * .then( result => {\n     *     console.log(result);\n     *     // true\n     *     // result is true since some file in the list exists\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n     * .then( result => {\n     *     console.log(result);\n     *     // false\n     *     // result is false since none of the files exists\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n     *         console.log(result);\n     *         // true\n     *         // result is true since some file in the list exists\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     * async () => {\n     *     try {\n     *         let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n     *         console.log(result);\n     *         // false\n     *         // result is false since none of the files exists\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function some(coll, iteratee, callback) {\n        return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback)\n    }\n    var some$1 = awaitify(some, 3);\n\n    /**\n     * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n     *\n     * @name someLimit\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.some]{@link module:Collections.some}\n     * @alias anyLimit\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collections in parallel.\n     * The iteratee should complete with a boolean `result` value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the iteratee functions have finished.\n     * Result will be either `true` or `false` depending on the values of the async\n     * tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function someLimit(coll, limit, iteratee, callback) {\n        return _createTester(Boolean, res => res)(eachOfLimit$2(limit), coll, iteratee, callback)\n    }\n    var someLimit$1 = awaitify(someLimit, 4);\n\n    /**\n     * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n     *\n     * @name someSeries\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @see [async.some]{@link module:Collections.some}\n     * @alias anySeries\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n     * in the collections in series.\n     * The iteratee should complete with a boolean `result` value.\n     * Invoked with (item, callback).\n     * @param {Function} [callback] - A callback which is called as soon as any\n     * iteratee returns `true`, or after all the iteratee functions have finished.\n     * Result will be either `true` or `false` depending on the values of the async\n     * tests. Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     */\n    function someSeries(coll, iteratee, callback) {\n        return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback)\n    }\n    var someSeries$1 = awaitify(someSeries, 3);\n\n    /**\n     * Sorts a list by the results of running each `coll` value through an async\n     * `iteratee`.\n     *\n     * @name sortBy\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {AsyncFunction} iteratee - An async function to apply to each item in\n     * `coll`.\n     * The iteratee should complete with a value to use as the sort criteria as\n     * its `result`.\n     * Invoked with (item, callback).\n     * @param {Function} callback - A callback which is called after all the\n     * `iteratee` functions have finished, or an error occurs. Results is the items\n     * from the original `coll` sorted by the values returned by the `iteratee`\n     * calls. Invoked with (err, results).\n     * @returns {Promise} a promise, if no callback passed\n     * @example\n     *\n     * // bigfile.txt is a file that is 251100 bytes in size\n     * // mediumfile.txt is a file that is 11000 bytes in size\n     * // smallfile.txt is a file that is 121 bytes in size\n     *\n     * // asynchronous function that returns the file size in bytes\n     * function getFileSizeInBytes(file, callback) {\n     *     fs.stat(file, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         callback(null, stat.size);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n     *     function(err, results) {\n     *         if (err) {\n     *             console.log(err);\n     *         } else {\n     *             console.log(results);\n     *             // results is now the original array of files sorted by\n     *             // file size (ascending by default), e.g.\n     *             // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n     *         }\n     *     }\n     * );\n     *\n     * // By modifying the callback parameter the\n     * // sorting order can be influenced:\n     *\n     * // ascending order\n     * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n     *     getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n     *         if (getFileSizeErr) return callback(getFileSizeErr);\n     *         callback(null, fileSize);\n     *     });\n     * }, function(err, results) {\n     *         if (err) {\n     *             console.log(err);\n     *         } else {\n     *             console.log(results);\n     *             // results is now the original array of files sorted by\n     *             // file size (ascending by default), e.g.\n     *             // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n     *         }\n     *     }\n     * );\n     *\n     * // descending order\n     * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n     *     getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n     *         if (getFileSizeErr) {\n     *             return callback(getFileSizeErr);\n     *         }\n     *         callback(null, fileSize * -1);\n     *     });\n     * }, function(err, results) {\n     *         if (err) {\n     *             console.log(err);\n     *         } else {\n     *             console.log(results);\n     *             // results is now the original array of files sorted by\n     *             // file size (ascending by default), e.g.\n     *             // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n     *         }\n     *     }\n     * );\n     *\n     * // Error handling\n     * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n     *     function(err, results) {\n     *         if (err) {\n     *             console.log(err);\n     *             // [ Error: ENOENT: no such file or directory ]\n     *         } else {\n     *             console.log(results);\n     *         }\n     *     }\n     * );\n     *\n     * // Using Promises\n     * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n     * .then( results => {\n     *     console.log(results);\n     *     // results is now the original array of files sorted by\n     *     // file size (ascending by default), e.g.\n     *     // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n     * }).catch( err => {\n     *     console.log(err);\n     * });\n     *\n     * // Error handling\n     * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n     * .then( results => {\n     *     console.log(results);\n     * }).catch( err => {\n     *     console.log(err);\n     *     // [ Error: ENOENT: no such file or directory ]\n     * });\n     *\n     * // Using async/await\n     * (async () => {\n     *     try {\n     *         let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n     *         console.log(results);\n     *         // results is now the original array of files sorted by\n     *         // file size (ascending by default), e.g.\n     *         // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * })();\n     *\n     * // Error handling\n     * async () => {\n     *     try {\n     *         let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n     *         console.log(results);\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *         // [ Error: ENOENT: no such file or directory ]\n     *     }\n     * }\n     *\n     */\n    function sortBy (coll, iteratee, callback) {\n        var _iteratee = wrapAsync(iteratee);\n        return map$1(coll, (x, iterCb) => {\n            _iteratee(x, (err, criteria) => {\n                if (err) return iterCb(err);\n                iterCb(err, {value: x, criteria});\n            });\n        }, (err, results) => {\n            if (err) return callback(err);\n            callback(null, results.sort(comparator).map(v => v.value));\n        });\n\n        function comparator(left, right) {\n            var a = left.criteria, b = right.criteria;\n            return a < b ? -1 : a > b ? 1 : 0;\n        }\n    }\n    var sortBy$1 = awaitify(sortBy, 3);\n\n    /**\n     * Sets a time limit on an asynchronous function. If the function does not call\n     * its callback within the specified milliseconds, it will be called with a\n     * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n     *\n     * @name timeout\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @category Util\n     * @param {AsyncFunction} asyncFn - The async function to limit in time.\n     * @param {number} milliseconds - The specified time limit.\n     * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n     * to timeout Error for more information..\n     * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n     * of the control flow functions.\n     * Invoke this function with the same parameters as you would `asyncFunc`.\n     * @example\n     *\n     * function myFunction(foo, callback) {\n     *     doAsyncTask(foo, function(err, data) {\n     *         // handle errors\n     *         if (err) return callback(err);\n     *\n     *         // do some stuff ...\n     *\n     *         // return processed data\n     *         return callback(null, data);\n     *     });\n     * }\n     *\n     * var wrapped = async.timeout(myFunction, 1000);\n     *\n     * // call `wrapped` as you would `myFunction`\n     * wrapped({ bar: 'bar' }, function(err, data) {\n     *     // if `myFunction` takes < 1000 ms to execute, `err`\n     *     // and `data` will have their expected values\n     *\n     *     // else `err` will be an Error with the code 'ETIMEDOUT'\n     * });\n     */\n    function timeout(asyncFn, milliseconds, info) {\n        var fn = wrapAsync(asyncFn);\n\n        return initialParams((args, callback) => {\n            var timedOut = false;\n            var timer;\n\n            function timeoutCallback() {\n                var name = asyncFn.name || 'anonymous';\n                var error  = new Error('Callback function \"' + name + '\" timed out.');\n                error.code = 'ETIMEDOUT';\n                if (info) {\n                    error.info = info;\n                }\n                timedOut = true;\n                callback(error);\n            }\n\n            args.push((...cbArgs) => {\n                if (!timedOut) {\n                    callback(...cbArgs);\n                    clearTimeout(timer);\n                }\n            });\n\n            // setup timer and call original function\n            timer = setTimeout(timeoutCallback, milliseconds);\n            fn(...args);\n        });\n    }\n\n    function range(size) {\n        var result = Array(size);\n        while (size--) {\n            result[size] = size;\n        }\n        return result;\n    }\n\n    /**\n     * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n     * time.\n     *\n     * @name timesLimit\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.times]{@link module:ControlFlow.times}\n     * @category Control Flow\n     * @param {number} count - The number of times to run the function.\n     * @param {number} limit - The maximum number of async operations at a time.\n     * @param {AsyncFunction} iteratee - The async function to call `n` times.\n     * Invoked with the iteration index and a callback: (n, next).\n     * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n     * @returns {Promise} a promise, if no callback is provided\n     */\n    function timesLimit(count, limit, iteratee, callback) {\n        var _iteratee = wrapAsync(iteratee);\n        return mapLimit$1(range(count), limit, _iteratee, callback);\n    }\n\n    /**\n     * Calls the `iteratee` function `n` times, and accumulates results in the same\n     * manner you would use with [map]{@link module:Collections.map}.\n     *\n     * @name times\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.map]{@link module:Collections.map}\n     * @category Control Flow\n     * @param {number} n - The number of times to run the function.\n     * @param {AsyncFunction} iteratee - The async function to call `n` times.\n     * Invoked with the iteration index and a callback: (n, next).\n     * @param {Function} callback - see {@link module:Collections.map}.\n     * @returns {Promise} a promise, if no callback is provided\n     * @example\n     *\n     * // Pretend this is some complicated async factory\n     * var createUser = function(id, callback) {\n     *     callback(null, {\n     *         id: 'user' + id\n     *     });\n     * };\n     *\n     * // generate 5 users\n     * async.times(5, function(n, next) {\n     *     createUser(n, function(err, user) {\n     *         next(err, user);\n     *     });\n     * }, function(err, users) {\n     *     // we should now have 5 users\n     * });\n     */\n    function times (n, iteratee, callback) {\n        return timesLimit(n, Infinity, iteratee, callback)\n    }\n\n    /**\n     * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n     *\n     * @name timesSeries\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.times]{@link module:ControlFlow.times}\n     * @category Control Flow\n     * @param {number} n - The number of times to run the function.\n     * @param {AsyncFunction} iteratee - The async function to call `n` times.\n     * Invoked with the iteration index and a callback: (n, next).\n     * @param {Function} callback - see {@link module:Collections.map}.\n     * @returns {Promise} a promise, if no callback is provided\n     */\n    function timesSeries (n, iteratee, callback) {\n        return timesLimit(n, 1, iteratee, callback)\n    }\n\n    /**\n     * A relative of `reduce`.  Takes an Object or Array, and iterates over each\n     * element in parallel, each step potentially mutating an `accumulator` value.\n     * The type of the accumulator defaults to the type of collection passed in.\n     *\n     * @name transform\n     * @static\n     * @memberOf module:Collections\n     * @method\n     * @category Collection\n     * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n     * @param {*} [accumulator] - The initial state of the transform.  If omitted,\n     * it will default to an empty Object or Array, depending on the type of `coll`\n     * @param {AsyncFunction} iteratee - A function applied to each item in the\n     * collection that potentially modifies the accumulator.\n     * Invoked with (accumulator, item, key, callback).\n     * @param {Function} [callback] - A callback which is called after all the\n     * `iteratee` functions have finished. Result is the transformed accumulator.\n     * Invoked with (err, result).\n     * @returns {Promise} a promise, if no callback provided\n     * @example\n     *\n     * // file1.txt is a file that is 1000 bytes in size\n     * // file2.txt is a file that is 2000 bytes in size\n     * // file3.txt is a file that is 3000 bytes in size\n     *\n     * // helper function that returns human-readable size format from bytes\n     * function formatBytes(bytes, decimals = 2) {\n     *   // implementation not included for brevity\n     *   return humanReadbleFilesize;\n     * }\n     *\n     * const fileList = ['file1.txt','file2.txt','file3.txt'];\n     *\n     * // asynchronous function that returns the file size, transformed to human-readable format\n     * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n     * function transformFileSize(acc, value, key, callback) {\n     *     fs.stat(value, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         acc[key] = formatBytes(stat.size);\n     *         callback(null);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.transform(fileList, transformFileSize, function(err, result) {\n     *     if(err) {\n     *         console.log(err);\n     *     } else {\n     *         console.log(result);\n     *         // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.transform(fileList, transformFileSize)\n     * .then(result => {\n     *     console.log(result);\n     *     // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * (async () => {\n     *     try {\n     *         let result = await async.transform(fileList, transformFileSize);\n     *         console.log(result);\n     *         // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * })();\n     *\n     * @example\n     *\n     * // file1.txt is a file that is 1000 bytes in size\n     * // file2.txt is a file that is 2000 bytes in size\n     * // file3.txt is a file that is 3000 bytes in size\n     *\n     * // helper function that returns human-readable size format from bytes\n     * function formatBytes(bytes, decimals = 2) {\n     *   // implementation not included for brevity\n     *   return humanReadbleFilesize;\n     * }\n     *\n     * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };\n     *\n     * // asynchronous function that returns the file size, transformed to human-readable format\n     * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n     * function transformFileSize(acc, value, key, callback) {\n     *     fs.stat(value, function(err, stat) {\n     *         if (err) {\n     *             return callback(err);\n     *         }\n     *         acc[key] = formatBytes(stat.size);\n     *         callback(null);\n     *     });\n     * }\n     *\n     * // Using callbacks\n     * async.transform(fileMap, transformFileSize, function(err, result) {\n     *     if(err) {\n     *         console.log(err);\n     *     } else {\n     *         console.log(result);\n     *         // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n     *     }\n     * });\n     *\n     * // Using Promises\n     * async.transform(fileMap, transformFileSize)\n     * .then(result => {\n     *     console.log(result);\n     *     // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n     * }).catch(err => {\n     *     console.log(err);\n     * });\n     *\n     * // Using async/await\n     * async () => {\n     *     try {\n     *         let result = await async.transform(fileMap, transformFileSize);\n     *         console.log(result);\n     *         // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n     *     }\n     *     catch (err) {\n     *         console.log(err);\n     *     }\n     * }\n     *\n     */\n    function transform (coll, accumulator, iteratee, callback) {\n        if (arguments.length <= 3 && typeof accumulator === 'function') {\n            callback = iteratee;\n            iteratee = accumulator;\n            accumulator = Array.isArray(coll) ? [] : {};\n        }\n        callback = once(callback || promiseCallback());\n        var _iteratee = wrapAsync(iteratee);\n\n        eachOf$1(coll, (v, k, cb) => {\n            _iteratee(accumulator, v, k, cb);\n        }, err => callback(err, accumulator));\n        return callback[PROMISE_SYMBOL]\n    }\n\n    /**\n     * It runs each task in series but stops whenever any of the functions were\n     * successful. If one of the tasks were successful, the `callback` will be\n     * passed the result of the successful task. If all tasks fail, the callback\n     * will be passed the error and result (if any) of the final attempt.\n     *\n     * @name tryEach\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n     * run, each function is passed a `callback(err, result)` it must call on\n     * completion with an error `err` (which can be `null`) and an optional `result`\n     * value.\n     * @param {Function} [callback] - An optional callback which is called when one\n     * of the tasks has succeeded, or all have failed. It receives the `err` and\n     * `result` arguments of the last attempt at completing the `task`. Invoked with\n     * (err, results).\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     * async.tryEach([\n     *     function getDataFromFirstWebsite(callback) {\n     *         // Try getting the data from the first website\n     *         callback(err, data);\n     *     },\n     *     function getDataFromSecondWebsite(callback) {\n     *         // First website failed,\n     *         // Try getting the data from the backup website\n     *         callback(err, data);\n     *     }\n     * ],\n     * // optional callback\n     * function(err, results) {\n     *     Now do something with the data.\n     * });\n     *\n     */\n    function tryEach(tasks, callback) {\n        var error = null;\n        var result;\n        return eachSeries$1(tasks, (task, taskCb) => {\n            wrapAsync(task)((err, ...args) => {\n                if (err === false) return taskCb(err);\n\n                if (args.length < 2) {\n                    [result] = args;\n                } else {\n                    result = args;\n                }\n                error = err;\n                taskCb(err ? null : {});\n            });\n        }, () => callback(error, result));\n    }\n\n    var tryEach$1 = awaitify(tryEach);\n\n    /**\n     * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n     * unmemoized form. Handy for testing.\n     *\n     * @name unmemoize\n     * @static\n     * @memberOf module:Utils\n     * @method\n     * @see [async.memoize]{@link module:Utils.memoize}\n     * @category Util\n     * @param {AsyncFunction} fn - the memoized function\n     * @returns {AsyncFunction} a function that calls the original unmemoized function\n     */\n    function unmemoize(fn) {\n        return (...args) => {\n            return (fn.unmemoized || fn)(...args);\n        };\n    }\n\n    /**\n     * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n     * stopped, or an error occurs.\n     *\n     * @name whilst\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {AsyncFunction} test - asynchronous truth test to perform before each\n     * execution of `iteratee`. Invoked with (callback).\n     * @param {AsyncFunction} iteratee - An async function which is called each time\n     * `test` passes. Invoked with (callback).\n     * @param {Function} [callback] - A callback which is called after the test\n     * function has failed and repeated execution of `iteratee` has stopped. `callback`\n     * will be passed an error and any arguments passed to the final `iteratee`'s\n     * callback. Invoked with (err, [results]);\n     * @returns {Promise} a promise, if no callback is passed\n     * @example\n     *\n     * var count = 0;\n     * async.whilst(\n     *     function test(cb) { cb(null, count < 5); },\n     *     function iter(callback) {\n     *         count++;\n     *         setTimeout(function() {\n     *             callback(null, count);\n     *         }, 1000);\n     *     },\n     *     function (err, n) {\n     *         // 5 seconds have passed, n = 5\n     *     }\n     * );\n     */\n    function whilst(test, iteratee, callback) {\n        callback = onlyOnce(callback);\n        var _fn = wrapAsync(iteratee);\n        var _test = wrapAsync(test);\n        var results = [];\n\n        function next(err, ...rest) {\n            if (err) return callback(err);\n            results = rest;\n            if (err === false) return;\n            _test(check);\n        }\n\n        function check(err, truth) {\n            if (err) return callback(err);\n            if (err === false) return;\n            if (!truth) return callback(null, ...results);\n            _fn(next);\n        }\n\n        return _test(check);\n    }\n    var whilst$1 = awaitify(whilst, 3);\n\n    /**\n     * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n     * stopped, or an error occurs. `callback` will be passed an error and any\n     * arguments passed to the final `iteratee`'s callback.\n     *\n     * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n     *\n     * @name until\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @see [async.whilst]{@link module:ControlFlow.whilst}\n     * @category Control Flow\n     * @param {AsyncFunction} test - asynchronous truth test to perform before each\n     * execution of `iteratee`. Invoked with (callback).\n     * @param {AsyncFunction} iteratee - An async function which is called each time\n     * `test` fails. Invoked with (callback).\n     * @param {Function} [callback] - A callback which is called after the test\n     * function has passed and repeated execution of `iteratee` has stopped. `callback`\n     * will be passed an error and any arguments passed to the final `iteratee`'s\n     * callback. Invoked with (err, [results]);\n     * @returns {Promise} a promise, if a callback is not passed\n     *\n     * @example\n     * const results = []\n     * let finished = false\n     * async.until(function test(cb) {\n     *     cb(null, finished)\n     * }, function iter(next) {\n     *     fetchPage(url, (err, body) => {\n     *         if (err) return next(err)\n     *         results = results.concat(body.objects)\n     *         finished = !!body.next\n     *         next(err)\n     *     })\n     * }, function done (err) {\n     *     // all pages have been fetched\n     * })\n     */\n    function until(test, iteratee, callback) {\n        const _test = wrapAsync(test);\n        return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback);\n    }\n\n    /**\n     * Runs the `tasks` array of functions in series, each passing their results to\n     * the next in the array. However, if any of the `tasks` pass an error to their\n     * own callback, the next function is not executed, and the main `callback` is\n     * immediately called with the error.\n     *\n     * @name waterfall\n     * @static\n     * @memberOf module:ControlFlow\n     * @method\n     * @category Control Flow\n     * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n     * to run.\n     * Each function should complete with any number of `result` values.\n     * The `result` values will be passed as arguments, in order, to the next task.\n     * @param {Function} [callback] - An optional callback to run once all the\n     * functions have completed. This will be passed the results of the last task's\n     * callback. Invoked with (err, [results]).\n     * @returns {Promise} a promise, if a callback is omitted\n     * @example\n     *\n     * async.waterfall([\n     *     function(callback) {\n     *         callback(null, 'one', 'two');\n     *     },\n     *     function(arg1, arg2, callback) {\n     *         // arg1 now equals 'one' and arg2 now equals 'two'\n     *         callback(null, 'three');\n     *     },\n     *     function(arg1, callback) {\n     *         // arg1 now equals 'three'\n     *         callback(null, 'done');\n     *     }\n     * ], function (err, result) {\n     *     // result now equals 'done'\n     * });\n     *\n     * // Or, with named functions:\n     * async.waterfall([\n     *     myFirstFunction,\n     *     mySecondFunction,\n     *     myLastFunction,\n     * ], function (err, result) {\n     *     // result now equals 'done'\n     * });\n     * function myFirstFunction(callback) {\n     *     callback(null, 'one', 'two');\n     * }\n     * function mySecondFunction(arg1, arg2, callback) {\n     *     // arg1 now equals 'one' and arg2 now equals 'two'\n     *     callback(null, 'three');\n     * }\n     * function myLastFunction(arg1, callback) {\n     *     // arg1 now equals 'three'\n     *     callback(null, 'done');\n     * }\n     */\n    function waterfall (tasks, callback) {\n        callback = once(callback);\n        if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n        if (!tasks.length) return callback();\n        var taskIndex = 0;\n\n        function nextTask(args) {\n            var task = wrapAsync(tasks[taskIndex++]);\n            task(...args, onlyOnce(next));\n        }\n\n        function next(err, ...args) {\n            if (err === false) return\n            if (err || taskIndex === tasks.length) {\n                return callback(err, ...args);\n            }\n            nextTask(args);\n        }\n\n        nextTask([]);\n    }\n\n    var waterfall$1 = awaitify(waterfall);\n\n    /**\n     * An \"async function\" in the context of Async is an asynchronous function with\n     * a variable number of parameters, with the final parameter being a callback.\n     * (`function (arg1, arg2, ..., callback) {}`)\n     * The final callback is of the form `callback(err, results...)`, which must be\n     * called once the function is completed.  The callback should be called with a\n     * Error as its first argument to signal that an error occurred.\n     * Otherwise, if no error occurred, it should be called with `null` as the first\n     * argument, and any additional `result` arguments that may apply, to signal\n     * successful completion.\n     * The callback must be called exactly once, ideally on a later tick of the\n     * JavaScript event loop.\n     *\n     * This type of function is also referred to as a \"Node-style async function\",\n     * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n     * library are themselves CPS/Node-style async functions, or functions that\n     * return CPS/Node-style async functions.\n     *\n     * Wherever we accept a Node-style async function, we also directly accept an\n     * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n     * In this case, the `async` function will not be passed a final callback\n     * argument, and any thrown error will be used as the `err` argument of the\n     * implicit callback, and the return value will be used as the `result` value.\n     * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n     * argument, and a `resolved` value becomes the `result`.)\n     *\n     * Note, due to JavaScript limitations, we can only detect native `async`\n     * functions and not transpilied implementations.\n     * Your environment must have `async`/`await` support for this to work.\n     * (e.g. Node > v7.6, or a recent version of a modern browser).\n     * If you are using `async` functions through a transpiler (e.g. Babel), you\n     * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n     * because the `async function` will be compiled to an ordinary function that\n     * returns a promise.\n     *\n     * @typedef {Function} AsyncFunction\n     * @static\n     */\n\n\n    var index = {\n        apply,\n        applyEach,\n        applyEachSeries,\n        asyncify,\n        auto,\n        autoInject,\n        cargo: cargo$1,\n        cargoQueue: cargo,\n        compose,\n        concat: concat$1,\n        concatLimit: concatLimit$1,\n        concatSeries: concatSeries$1,\n        constant: constant$1,\n        detect: detect$1,\n        detectLimit: detectLimit$1,\n        detectSeries: detectSeries$1,\n        dir,\n        doUntil,\n        doWhilst: doWhilst$1,\n        each,\n        eachLimit: eachLimit$1,\n        eachOf: eachOf$1,\n        eachOfLimit: eachOfLimit$1,\n        eachOfSeries: eachOfSeries$1,\n        eachSeries: eachSeries$1,\n        ensureAsync,\n        every: every$1,\n        everyLimit: everyLimit$1,\n        everySeries: everySeries$1,\n        filter: filter$1,\n        filterLimit: filterLimit$1,\n        filterSeries: filterSeries$1,\n        forever: forever$1,\n        groupBy,\n        groupByLimit: groupByLimit$1,\n        groupBySeries,\n        log,\n        map: map$1,\n        mapLimit: mapLimit$1,\n        mapSeries: mapSeries$1,\n        mapValues,\n        mapValuesLimit: mapValuesLimit$1,\n        mapValuesSeries,\n        memoize,\n        nextTick,\n        parallel,\n        parallelLimit,\n        priorityQueue,\n        queue,\n        race: race$1,\n        reduce: reduce$1,\n        reduceRight,\n        reflect,\n        reflectAll,\n        reject: reject$1,\n        rejectLimit: rejectLimit$1,\n        rejectSeries: rejectSeries$1,\n        retry,\n        retryable,\n        seq,\n        series,\n        setImmediate: setImmediate$1,\n        some: some$1,\n        someLimit: someLimit$1,\n        someSeries: someSeries$1,\n        sortBy: sortBy$1,\n        timeout,\n        times,\n        timesLimit,\n        timesSeries,\n        transform,\n        tryEach: tryEach$1,\n        unmemoize,\n        until,\n        waterfall: waterfall$1,\n        whilst: whilst$1,\n\n        // aliases\n        all: every$1,\n        allLimit: everyLimit$1,\n        allSeries: everySeries$1,\n        any: some$1,\n        anyLimit: someLimit$1,\n        anySeries: someSeries$1,\n        find: detect$1,\n        findLimit: detectLimit$1,\n        findSeries: detectSeries$1,\n        flatMap: concat$1,\n        flatMapLimit: concatLimit$1,\n        flatMapSeries: concatSeries$1,\n        forEach: each,\n        forEachSeries: eachSeries$1,\n        forEachLimit: eachLimit$1,\n        forEachOf: eachOf$1,\n        forEachOfSeries: eachOfSeries$1,\n        forEachOfLimit: eachOfLimit$1,\n        inject: reduce$1,\n        foldl: reduce$1,\n        foldr: reduceRight,\n        select: filter$1,\n        selectLimit: filterLimit$1,\n        selectSeries: filterSeries$1,\n        wrapSync: asyncify,\n        during: whilst$1,\n        doDuring: doWhilst$1\n    };\n\n    exports.all = every$1;\n    exports.allLimit = everyLimit$1;\n    exports.allSeries = everySeries$1;\n    exports.any = some$1;\n    exports.anyLimit = someLimit$1;\n    exports.anySeries = someSeries$1;\n    exports.apply = apply;\n    exports.applyEach = applyEach;\n    exports.applyEachSeries = applyEachSeries;\n    exports.asyncify = asyncify;\n    exports.auto = auto;\n    exports.autoInject = autoInject;\n    exports.cargo = cargo$1;\n    exports.cargoQueue = cargo;\n    exports.compose = compose;\n    exports.concat = concat$1;\n    exports.concatLimit = concatLimit$1;\n    exports.concatSeries = concatSeries$1;\n    exports.constant = constant$1;\n    exports.default = index;\n    exports.detect = detect$1;\n    exports.detectLimit = detectLimit$1;\n    exports.detectSeries = detectSeries$1;\n    exports.dir = dir;\n    exports.doDuring = doWhilst$1;\n    exports.doUntil = doUntil;\n    exports.doWhilst = doWhilst$1;\n    exports.during = whilst$1;\n    exports.each = each;\n    exports.eachLimit = eachLimit$1;\n    exports.eachOf = eachOf$1;\n    exports.eachOfLimit = eachOfLimit$1;\n    exports.eachOfSeries = eachOfSeries$1;\n    exports.eachSeries = eachSeries$1;\n    exports.ensureAsync = ensureAsync;\n    exports.every = every$1;\n    exports.everyLimit = everyLimit$1;\n    exports.everySeries = everySeries$1;\n    exports.filter = filter$1;\n    exports.filterLimit = filterLimit$1;\n    exports.filterSeries = filterSeries$1;\n    exports.find = detect$1;\n    exports.findLimit = detectLimit$1;\n    exports.findSeries = detectSeries$1;\n    exports.flatMap = concat$1;\n    exports.flatMapLimit = concatLimit$1;\n    exports.flatMapSeries = concatSeries$1;\n    exports.foldl = reduce$1;\n    exports.foldr = reduceRight;\n    exports.forEach = each;\n    exports.forEachLimit = eachLimit$1;\n    exports.forEachOf = eachOf$1;\n    exports.forEachOfLimit = eachOfLimit$1;\n    exports.forEachOfSeries = eachOfSeries$1;\n    exports.forEachSeries = eachSeries$1;\n    exports.forever = forever$1;\n    exports.groupBy = groupBy;\n    exports.groupByLimit = groupByLimit$1;\n    exports.groupBySeries = groupBySeries;\n    exports.inject = reduce$1;\n    exports.log = log;\n    exports.map = map$1;\n    exports.mapLimit = mapLimit$1;\n    exports.mapSeries = mapSeries$1;\n    exports.mapValues = mapValues;\n    exports.mapValuesLimit = mapValuesLimit$1;\n    exports.mapValuesSeries = mapValuesSeries;\n    exports.memoize = memoize;\n    exports.nextTick = nextTick;\n    exports.parallel = parallel;\n    exports.parallelLimit = parallelLimit;\n    exports.priorityQueue = priorityQueue;\n    exports.queue = queue;\n    exports.race = race$1;\n    exports.reduce = reduce$1;\n    exports.reduceRight = reduceRight;\n    exports.reflect = reflect;\n    exports.reflectAll = reflectAll;\n    exports.reject = reject$1;\n    exports.rejectLimit = rejectLimit$1;\n    exports.rejectSeries = rejectSeries$1;\n    exports.retry = retry;\n    exports.retryable = retryable;\n    exports.select = filter$1;\n    exports.selectLimit = filterLimit$1;\n    exports.selectSeries = filterSeries$1;\n    exports.seq = seq;\n    exports.series = series;\n    exports.setImmediate = setImmediate$1;\n    exports.some = some$1;\n    exports.someLimit = someLimit$1;\n    exports.someSeries = someSeries$1;\n    exports.sortBy = sortBy$1;\n    exports.timeout = timeout;\n    exports.times = times;\n    exports.timesLimit = timesLimit;\n    exports.timesSeries = timesSeries;\n    exports.transform = transform;\n    exports.tryEach = tryEach$1;\n    exports.unmemoize = unmemoize;\n    exports.until = until;\n    exports.waterfall = waterfall$1;\n    exports.whilst = whilst$1;\n    exports.wrapSync = asyncify;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/*! DataTables 1.13.11\n * ©2008-2024 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.13.11\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - https://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: https://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\t// jQuery's factory checks for a global window - if it isn't present then it\n\t\t// returns a factory function that expects the window object\n\t\tvar jq = require('jquery');\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\twindow.DataTable = factory( jQuery, window, document );\n\t}\n}\n(function( $, window, document, undefined ) {\n\t\"use strict\";\n\n\t\n\tvar DataTable = function ( selector, options )\n\t{\n\t\t// Check if called with a window or jQuery object for DOM less applications\n\t\t// This is for backwards compatibility\n\t\tif (DataTable.factory(selector, options)) {\n\t\t\treturn DataTable;\n\t\t}\n\t\n\t\t// When creating with `new`, create a new DataTable, returning the API instance\n\t\tif (this instanceof DataTable) {\n\t\t\treturn $(selector).DataTable(options);\n\t\t}\n\t\telse {\n\t\t\t// Argument switching\n\t\t\toptions = selector;\n\t\t}\n\t\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).on('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\t\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\t\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\t\n\t\tthis.oApi = this.internal = _ext.internal;\n\t\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\t\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\t\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif (\n\t\t\t\t\ts.nTable == this ||\n\t\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t\t) {\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t\"rowId\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif (! col) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\tvar loadedInit = function () {\n\t\t\t\t/*\n\t\t\t\t * Sorting\n\t\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t\t */\n\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\t\tif ( features.bSort ) {\n\t\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t\t}\n\t\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t * Final init\n\t\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t\t} );\n\t\t\t\n\t\t\t\tvar thead = $this.children('thead');\n\t\t\t\tif ( thead.length === 0 ) {\n\t\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\t\tvar tbody = $this.children('tbody');\n\t\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t\t}\n\t\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t\t}\n\t\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Check if there is data passing into the constructor */\n\t\t\t\tif ( oInit.aaData ) {\n\t\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t\t * to replace it with Ajax data\n\t\t\t\t\t */\n\t\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Copy the data index array */\n\t\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t\t * language processor)\n\t\t\t\t */\n\t\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tloadedInit();\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\t\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n\\u2028]/g;\n\tvar _re_html = /<.*?>/g;\n\t\n\t// This is not strict ISO8601 - Date.parse() is quite lax, although\n\t// implementations differ between browsers.\n\tvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// https://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// - Ƀ - Bitcoin\n\t// - Ξ - Ethereum\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar type = typeof d;\n\t\tvar strType = type === 'string';\n\t\n\t\tif ( type === 'number' || type === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d\n\t\t\t.replace( _re_html, '' ) // Complete tags\n\t\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n\t};\n\t\n\t\n\t/**\n\t * Determine if all values in the array are unique. This means we can short\n\t * cut the _unique method at the cost of a single loop. A sorted array is used\n\t * to easily check the values.\n\t *\n\t * @param  {array} src Source array\n\t * @return {boolean} true if all unique, false otherwise\n\t * @ignore\n\t */\n\tvar _areAllUnique = function ( src ) {\n\t\tif ( src.length < 2 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar sorted = src.slice().sort();\n\t\tvar last = sorted[0];\n\t\n\t\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\t\tif ( sorted[i] === last ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tlast = sorted[i];\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\tif ( _areAllUnique( src ) ) {\n\t\t\treturn src.slice();\n\t\t}\n\t\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Surprisingly this is faster than [].concat.apply\n\t// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\n\tvar _flatten = function (out, val) {\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t\t_flatten(out, val[i]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.push(val);\n\t\t}\n\t  \n\t\treturn out;\n\t}\n\t\n\tvar _includes = function (search, start) {\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\treturn this.indexOf(search, start) !== -1;\t\n\t};\n\t\n\t// Array.isArray polyfill.\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n\tif (! Array.isArray) {\n\t    Array.isArray = function(arg) {\n\t        return Object.prototype.toString.call(arg) === '[object Array]';\n\t    };\n\t}\n\t\n\tif (! Array.prototype.includes) {\n\t\tArray.prototype.includes = _includes;\n\t}\n\t\n\t// .trim() polyfill\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function () {\n\t    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t  };\n\t}\n\t\n\tif (! String.prototype.includes) {\n\t\tString.prototype.includes = _includes;\n\t}\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: function ( fn, freq ) {\n\t\t\tvar\n\t\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\t\tlast,\n\t\t\t\ttimer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar\n\t\t\t\t\tthat = this,\n\t\t\t\t\tnow  = +new Date(),\n\t\t\t\t\targs = arguments;\n\t\n\t\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\t\tlast = undefined;\n\t\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t\t}, frequency );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} val string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: function ( val ) {\n\t\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will write to a nested object or array\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Write function\n\t\t */\n\t\tset: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t\t * for `mRender` which is read only.\n\t\t\t\t */\n\t\t\t\treturn DataTable.util.set( source._ );\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Nothing to do when the data source is null\n\t\t\t\treturn function () {};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, val, meta) {\n\t\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t// Like the get, we need to get data from a nested object\n\t\t\t\tvar setData = function (data, val, src) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\t\n\t\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\treturn setData( data, val, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\tdata[source] = val;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Value read\n\t\t */\n\t\tget: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\t\tvar o = {};\n\t\t\t\t$.each( source, function (key, val) {\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\tvar t = o[type] || o._;\n\t\t\t\t\treturn t !== undefined ?\n\t\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\t\tdata;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\treturn source( data, type, row, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t\t * be used if defined, rather than throwing an error\n\t\t\t\t */\n\t\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\t\n\t\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\t\n\t\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\n\t\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tout = [];\n\t\t\n\t\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\t\n\t\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\t\n\t\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn fetchData( data, type, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn data[source];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\t// Note the use of the Hungarian notation for the parameters in this method as\n\t\t// this is called after the mapping of camelCase to Hungarian\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\n\t\t// Default mapping\n\t\tvar defaultDecimal = defaults.sDecimal;\n\t\tif ( defaultDecimal ) {\n\t\t\t_addNumericSort( defaultDecimal );\n\t\t}\n\t\n\t\tif ( lang ) {\n\t\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t\t// sZeroRecords - assuming that is given.\n\t\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t\t}\n\t\n\t\t\t// Likewise with loading records\n\t\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t\t}\n\t\n\t\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\t\tif ( lang.sInfoThousands ) {\n\t\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t\t}\n\t\n\t\t\tvar decimal = lang.sDecimal;\n\t\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t\t_addNumericSort( decimal );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Boolean initialisation of x-scrolling\n\t\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t\t}\n\t\tif ( typeof init.scrollX === 'boolean' ) {\n\t\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t\t}\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\t// We don't need to do this every time DataTables is constructed, the values\n\t\t// calculated are specific to the browser and OS configuration which we\n\t\t// don't expect to change between initialisations\n\t\tif ( ! DataTable.__browser ) {\n\t\t\tvar browser = {};\n\t\t\tDataTable.__browser = browser;\n\t\n\t\t\t// Scrolling feature / quirks detection\n\t\t\tvar n = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.appendTo( 'body' );\n\t\n\t\t\tvar outer = n.children();\n\t\t\tvar inner = outer.children();\n\t\n\t\t\t// Numbers below, in order, are:\n\t\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t\t//\n\t\t\t// IE6 XP:                           100 100 100  83\n\t\t\t// IE7 Vista:                        100 100 100  83\n\t\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t\t// Evergreen Windows:                 83  83 100  83\n\t\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\t\n\t\t\t// Get scrollbar width\n\t\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\t\n\t\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t\t// element is contained without forcing scrolling\n\t\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\t\n\t\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t\t// scrollbar on the left, rather than the right.\n\t\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\t\n\t\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\t\n\t\t\tn.remove();\n\t\t}\n\t\n\t\t$.extend( settings.oBrowser, DataTable.__browser );\n\t\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\t\tif ( oOptions.sClass ) {\n\t\t\t\tth.addClass( oOptions.sClass );\n\t\t\t}\n\t\n\t\t\tvar origClass = oCol.sClass;\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t\t// overwriting it in the extend above\n\t\t\tif (origClass !== oCol.sClass) {\n\t\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t\t}\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\n\t\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t\t// provided.\n\t\t\tif (! oCol.ariaTitle) {\n\t\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t\t}\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\toCol._setter = null;\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\tvar vis = 0;\n\t\n\t\t// No reduce in IE8, use a loop for now\n\t\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\t\tvis++;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn vis;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t\t// must not be empty\n\t\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t\t? def.target\n\t\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t\t? def.targets\n\t\t\t\t\t\t: def.aTargets;\n\t\n\t\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data',\n\t\t\tidx: iRow\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\tvar id = oSettings.rowIdFn( aDataIn );\n\t\tif ( id !== undefined ) {\n\t\t\toSettings.aIds[ id ] = oData;\n\t\t}\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tif (type === 'search') {\n\t\t\ttype = 'filter';\n\t\t}\n\t\telse if (type === 'order') {\n\t\t\ttype = 'sort';\n\t\t}\n\t\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t// When the data source is null and a specific data type is requested (i.e.\n\t\t// not the original data), we can use default column data\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type === 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\n\t\tif ( type === 'filter' ) {\n\t\t\tvar fomatters = DataTable.ext.type.search;\n\t\n\t\t\tif ( fomatters[ col.sType ] ) {\n\t\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t\t}\n\t\t}\n\t\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\t\treturn s.replace(/\\\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnGetObjectDataFn = DataTable.util.get;\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnSetObjectDataFn = DataTable.util.set;\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t\tsettings.aIds = {};\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( settings, row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d !== undefined ?\n\t\t\td :\n\t\t\tobjectRead ?\n\t\t\t\t{} :\n\t\t\t\t[];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = (cell.innerHTML).trim();\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\t// Read the ID from the DOM if present\n\t\tvar rowNode = row.firstChild ? row : row.nTr;\n\t\n\t\tif ( rowNode ) {\n\t\t\tvar id = rowNode.getAttribute( 'id' );\n\t\n\t\t\tif ( id ) {\n\t\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen, create;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( oSettings, row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\t\t\tcreate = nTrIn ? false : true;\n\t\n\t\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\t\n\t\t\t\tif (! nTd) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\n\t\t\t\tnTd._DT_CellIndex = {\n\t\t\t\t\trow: iRow,\n\t\t\t\t\tcolumn: i\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t)) {\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( settings, row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tvar id = settings.rowIdFn( data );\n\t\n\t\t\tif ( id ) {\n\t\t\t\ttr.id = id;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\t\n\t\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param ajaxComplete true after ajax call to complete rendering\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings, ajaxComplete )\n\t{\n\t\t// Allow for state saving and a custom start position\n\t\t_fnStart( oSettings );\n\t\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t\t{\n\t\t\t_fnAjaxUpdate( oSettings );\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t\toSettings.nHolding = null;\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Set the start position for draw\n\t *  @param {object} oSettings dataTables settings object\n\t */\n\tfunction _fnStart( oSettings )\n\t{\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\n\t\t// Check and see if we have an initial draw position from state saving\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && Array.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\tvar status = oSettings.jqXHR\n\t\t\t\t? oSettings.jqXHR.status\n\t\t\t\t: null;\n\t\n\t\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\t\tjson = {};\n\t\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t\t}\n\t\n\t\t\tvar error = json.error || json.sError;\n\t\t\tif ( error ) {\n\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t}\n\t\n\t\t\toSettings.json = json;\n\t\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": callback,\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( typeof ajax === 'function' )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tsettings.iDraw++;\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\t\tvar drawHold = settings._drawHold;\n\t\n\t\t_fnBuildAjax(\n\t\t\tsettings,\n\t\t\t_fnAjaxParameters( settings ),\n\t\t\tfunction(json) {\n\t\t\t\tsettings._drawHold = drawHold;\n\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t\tsettings._drawHold = false;\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw !== undefined ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t// No data in returned object, so rather than an array, we show an empty table\n\t\tif ( ! data ) {\n\t\t\tdata = [];\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t_fnDraw( settings, true );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\t function _fnAjaxDataSrc ( oSettings, json, write )\n\t {\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\tif ( ! write ) {\n\t\t\tif ( dataSrc === 'data' ) {\n\t\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t\t// it if possible\n\t\t\t\treturn json.aaData || json[dataSrc];\n\t\t\t}\n\t\n\t\t\treturn dataSrc !== \"\" ?\n\t\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\t\tjson;\n\t\t}\n\t\n\t\t// set\n\t\t_fnSetObjectDataFn( dataSrc )( json, write );\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function(event) {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\t\"return\": previousSearch['return']\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.on(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t\t}, 10);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t\toPrevSearch['return'] = oFilter['return'];\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\t$.merge( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar out = [];\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( rpSearch.test( data ) ) {\n\t\t\t\tout.push( display[i] );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aiDisplay = out;\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\tvar filtered = [];\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t regex ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tfiltered.push( display[i] );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tsettings.aiDisplay = filtered;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// When data was added after the initialisation (data or Ajax) we need to\n\t\t// calculate the column sizing\n\t\tif ( json || settings.oInit.aaData ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = Array.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option(\n\t\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\t\tlanguage[i],\n\t\t\t\tlengths[i]\n\t\t\t);\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.on( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No change event - paging was called, but no change\n\t\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t\t'role': 'status'\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\t$(scrollBody).css('max-height', scrollY);\n\t\tif (! scroll.bCollapse) {\n\t\t\t$(scrollBody).css('height', scrollY);\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[], footerContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t// If the scrollbar visibility has changed from the last draw, we need to\n\t\t// adjust the column sizes as the table width will have changed to account\n\t\t// for the scrollbar\n\t\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\t\n\t\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\treturn; // adjust column sizing will call this function again\n\t\t}\n\t\telse {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t}\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t\tfooterCopy.find('[id]').removeAttr('id');\n\t\t}\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\theaderCopy.find('[id]').removeAttr('id');\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\telse if ( scrollXInner !== \"\" ) {\n\t\t\t// legacy x scroll inner has been given - use it\n\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tvar style = window.getComputedStyle ?\n\t\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t\t_fnStringToCss( $(nSizer).width() );\n\t\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( style );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).css('height', 0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t// Correct DOM ordering for colgroup - comes before the thead\n\t\ttable.children('colgroup').insertBefore( table.children('thead') );\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.trigger('scroll');\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth,\n\t\t\tbrowser = oSettings.oBrowser,\n\t\t\tie67 = browser.bScrollOversize;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\t\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = sizes[i];\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t     columnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\t\n\t\t\t\tif ( colIdx !== null ) {\n\t\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t\t// real header and footer are contained in different table tags\n\t\t\ttmpTable.find('thead, tfoot').remove();\n\t\t\ttmpTable\n\t\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t\t.append( $(oSettings.nTFoot).clone() );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\n\t\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t\t// width the column requires, then it will have no effect\n\t\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\theight: 1\n\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t\t// duplicated in the dom (radio elements for example)\n\t\t\t$('[name]', tmpTable).removeAttr('name');\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it.\n\t\t\t// A holding element is used, positioned at the top of the container\n\t\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t\t// needed\n\t\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\theight: 1,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t} :\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t\t.append( tmpTable )\n\t\t\t\t.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\t\ttmpTable.removeAttr('width');\n\t\n\t\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t\t// collapse\n\t\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table - we need to\n\t\t\t// know the inner width (so it can be assigned to the other table's\n\t\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t\t// column, but if ever a header can span multiple columns, this will\n\t\t\t// need to be modified.\n\t\t\tvar total = 0;\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tvar cell = $(headerCells[i]);\n\t\t\t\tvar border = cell.outerWidth() - cell.width();\n\t\n\t\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\t\tcell.outerWidth();\n\t\n\t\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\t\ttotal += bounding;\n\t\n\t\t\t\t// Width for each column to use\n\t\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( total );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\tholder.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( ie67 ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnThrottle = DataTable.util.throttle;\n\t\n\t\n\t/**\n\t * Convert a set of CSS units width to pixels (e.g. 2em)\n\t *  @param {string[]} widths widths to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int[]} widths in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( widths, parent )\n\t{\n\t\tvar els = [];\n\t\tvar results = [];\n\t\n\t\t// Add the elements in a single loop so we only need to reflow once\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tif (widths[i]) {\n\t\t\t\tels.push(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t\t)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tels.push(null);\n\t\t\t}\n\t\t}\n\t\n\t\t// Get the sizes (will reflow once)\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t\t}\n\t\n\t\t// Tidy\n\t\t$(els).remove();\n\t\n\t\treturn results;\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\t\ts = s.replace( /&nbsp;/g, ' ' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\t$.merge( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( Array.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif (settings._bLoadingState) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\tsettings.oSavedState = state;\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\t\n\t\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t\t{\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t\t}\t\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @param {function} callback Callback to execute when the state has been loaded\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit, callback )\n\t{\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar loaded = function(state) {\n\t\t\t_fnImplementState(settings, state, callback);\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\t\n\t\tif ( state !== undefined ) {\n\t\t\t_fnImplementState( settings, state, callback );\n\t\t}\n\t\t// otherwise, wait for the loaded callback to be executed\n\t\n\t\treturn true;\n\t}\n\t\n\tfunction _fnImplementState ( settings, s, callback) {\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\tsettings._bLoadingState = true;\n\t\n\t\t// When StateRestore was introduced the state could now be implemented at any time\n\t\t// Not just initialisation. To do this an api instance is required in some places\n\t\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\t\n\t\tif ( ! s || ! s.time ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t// cancelling of loading by returning false\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Reject old data\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, s );\n\t\n\t\t// Page Length\n\t\tif ( s.length !== undefined ) {\n\t\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\t\tif (api) {\n\t\t\t\tapi.page.len(s.length)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings._iDisplayLength   = s.length;\n\t\t\t}\n\t\t}\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( s.start !== undefined ) {\n\t\t\tif(api === null) {\n\t\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t\t}\n\t\t}\n\t\n\t\t// Order\n\t\tif ( s.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( s.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( s.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tif ( s.columns ) {\n\t\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\t\tvar col = s.columns[i];\n\t\n\t\t\t\t// Visibility\n\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\tif (api) {\n\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Search\n\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\tif (api) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t}\n\t\n\t\tsettings._bLoadingState = false;\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\t\tcallback();\n\t};\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'https://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\tif ( settings ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t\t}\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\t\tvar table = $(settings.nTable);\n\t\n\t\t\ttable.trigger( e, args );\n\t\n\t\t\t// If not yet attached to the document, trigger the event\n\t\t\t// on the body directly to sort of simulate the bubble\n\t\t\tif (table.parents('body').length === 0) {\n\t\t\t\t$('body').trigger( e, args );\n\t\t\t}\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\t\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( Array.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\t$.merge( this, data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n\t// isPlainObject.\n\t$.extend( _Api.prototype, {\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.count() !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\tcount: function ()\n\t\t{\n\t\t\treturn this.flatten().length;\n\t\t},\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\tvar fn = DataTable.util.get(prop);\n\t\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn fn(el);\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tslice: function () {\n\t\t\treturn new _Api( this.context, this );\n\t\t},\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t} );\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tstruct,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\tstruct.type === 'object' ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   [],\n\t\t\t\t\ttype:      'object'\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t\t'function' :\n\t\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t\t'object' :\n\t\t\t\t\t\t'other';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\tif ( Array.isArray(selector) ) {\n\t\t\treturn $.map( selector, function (item) {\n\t\t\t\treturn __table_selector(item, a);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector !== undefined && selector !== null ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t */\n\t_api_register( 'draw()', function ( paging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( paging === 'page' ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\t\tfalse :\n\t\t\t\t\t\ttrue;\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, paging===false );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords,\n\t\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t// Cancel an existing request\n\t\t\tvar xhr = settings.jqXHR;\n\t\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout = out.concat( res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn _unique( out );\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\tif ( search == 'none') {\n\t\t\t\ta = displayMaster.slice();\n\t\t\t}\n\t\t\telse if ( search == 'applied' ) {\n\t\t\t\ta = displayFiltered.slice();\n\t\t\t}\n\t\t\telse if ( search == 'removed' ) {\n\t\t\t\t// O(n+m) solution by creating a hash map\n\t\t\t\tvar displayFilteredMap = {};\n\t\n\t\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t\t}\n\t\n\t\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\t\tel :\n\t\t\t\t\t\tnull;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar rows;\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\t\tvar aoData = settings.aoData;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tif ( ! rows ) {\n\t\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t\t}\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\t\tvar cellIdx = sel._DT_CellIndex;\n\t\n\t\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse if ( cellIdx ) {\n\t\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\t\treturn host.length ?\n\t\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t\t// DataTables simplifies this for row selectors since you can select\n\t\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t\t// unescaped.\n\t\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t\t// get row index from id\n\t\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\t\treturn [ rowObj.idx ];\n\t\t\t\t}\n\t\n\t\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t\t// matches\n\t\t\t}\n\t\t\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\t\tvar a = [];\n\t\tvar context = this.context;\n\t\n\t\t// `iterator` will drop undefined values, but in this case we want them\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new _Api( context, a );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\t\tvar rowData = data[ row ];\n\t\t\tvar i, ien, j, jen;\n\t\t\tvar loopRow, loopCells;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the cached indexes\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tloopRow = data[i];\n\t\t\t\tloopCells = loopRow.anCells;\n\t\n\t\t\t\t// Rows\n\t\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\n\t\t\t\t// Cells\n\t\t\t\tif ( loopCells !== null ) {\n\t\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\t\tsettings._iRecordsDisplay--;\n\t\t\t}\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\n\t\t\t// Remove the row's ID reference if there is one\n\t\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\t\tif ( id !== undefined ) {\n\t\t\t\tdelete settings.aIds[ id ];\n\t\t\t}\n\t\t} );\n\t\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tsettings.aoData[i].idx = i;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\t$.merge( modRows, newRows );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\trow._aData = data;\n\t\n\t\t// If the DOM has an id, and the data source is an array\n\t\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t\t}\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t$(document).on('plugin-init.dt', function (e, context) {\n\t\tvar api = new _Api( context );\n\t\tvar namespace = 'on-plugin-init';\n\t\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\t\tvar destroyEvent = 'destroy. ' + namespace;\n\t\n\t\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t\t// internal loop\n\t\t\tvar idFn = settings.rowIdFn;\n\t\t\tvar data = settings.aoData;\n\t\t\tvar ids = [];\n\t\n\t\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\t\tif (data[i]._detailsShow) {\n\t\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\td.childRows = ids;\n\t\t});\n\t\n\t\tapi.on( destroyEvent, function () {\n\t\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t\t});\n\t\n\t\tvar loaded = api.state.loaded();\n\t\n\t\tif ( loaded && loaded.childRows ) {\n\t\t\tapi\n\t\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t\t}) )\n\t\t\t\t.every( function () {\n\t\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t\t});\n\t\t}\n\t});\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.detach();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\t// Make state saving of child row details async to allow them to be batch processed\n\tvar __details_state = DataTable.util.throttle(\n\t\tfunction (ctx) {\n\t\t\t_fnSaveState( ctx[0] )\n\t\t},\n\t\t500\n\t);\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row && row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\n\t\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-sizing'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\t\tvar el = $(this).children('td');\n\t\n\t\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Cell in the table body\n\t\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t\t}\n\t\n\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\tvar jqResult = $( nodes )\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t\t// a child or such an element\n\t\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\t\treturn host.length ?\n\t\t\t\t[ host.data('dt-column') ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\tvar that = this;\n\t\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis );\n\t\t} );\n\t\n\t\t// Group the column visibility changes\n\t\tif ( vis !== undefined ) {\n\t\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t\t// Redraw the header after changes\n\t\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\t\n\t\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t\t}\n\t\t\n\t\t\t\t_fnSaveState( settings );\n\t\n\t\t\t\t// Second loop once the first is done for events\n\t\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t} );\n\t\n\t\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\t\tthat.columns.adjust();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\treturn ret;\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $(_flatten( [], cells ));\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = data[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t\t[s] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\tvar jqResult = allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t \t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t\t// data attributes\n\t\t\thost = $(s).closest('*[data-dt-row]');\n\t\t\treturn host.length ?\n\t\t\t\t[ {\n\t\t\t\t\trow: host.data('dt-row'),\n\t\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t\t} ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// The default built in options need to apply to row and columns\n\t\tvar internalOpts = opts ? {\n\t\t\tpage: opts.page,\n\t\t\torder: opts.order,\n\t\t\tsearch: opts.search\n\t\t} : {};\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, internalOpts );\n\t\tvar rows = this.rows( rowSelector, internalOpts );\n\t\tvar i, ien, j, jen;\n\t\n\t\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\t\tvar a = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t// There is currently only one extension which uses a cell selector extension\n\t\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t\t// an extension specific check at the moment\n\t\tvar cells = opts && opts.selected ?\n\t\t\tthis.cells( cellsNoOpts, opts ) :\n\t\t\tcellsNoOpts;\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar data = settings.aoData[ row ];\n\t\n\t\t\treturn data && data.anCells ?\n\t\t\t\tdata.anCells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'order.fixed()', function ( set ) {\n\t\tif ( ! set ) {\n\t\t\tvar ctx = this.context;\n\t\t\tvar fixed = ctx.length ?\n\t\t\t\tctx[0].aaSortingFixed :\n\t\t\t\tundefined;\n\t\n\t\t\treturn Array.isArray( fixed ) ?\n\t\t\t\t{ pre: fixed } :\n\t\t\t\tfixed;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Set the jQuery or window object to be used by DataTables\n\t *\n\t * @param {*} module Library / container object\n\t * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n\t *   If not provided, automatic detection is attempted.\n\t */\n\tDataTable.use = function (module, type) {\n\t\tif (type === 'lib' || module.fn) {\n\t\t\t$ = module;\n\t\t}\n\t\telse if (type == 'win' || module.document) {\n\t\t\twindow = module;\n\t\t\tdocument = module.document;\n\t\t}\n\t\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\t\tDataTable.DateTime = module;\n\t\t}\n\t}\n\t\n\t/**\n\t * CommonJS factory function pass through. This will check if the arguments\n\t * given are a window object or a jQuery object. If so they are set\n\t * accordingly.\n\t * @param {*} root Window\n\t * @param {*} jq jQUery\n\t * @returns {boolean} Indicator\n\t */\n\tDataTable.factory = function (root, jq) {\n\t\tvar is = false;\n\t\n\t\t// Test if the first parameter is a window object\n\t\tif (root && root.document) {\n\t\t\twindow = root;\n\t\t\tdocument = root.document;\n\t\t}\n\t\n\t\t// Test if the second parameter is a jQuery object\n\t\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t\t$ = jq;\n\t\t\tis = true;\n\t\t}\n\t\n\t\treturn is;\n\t}\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\tif ( table instanceof DataTable.Api ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\tvar api = false;\n\t\n\t\tif ( $.isPlainObject( visible ) ) {\n\t\t\tapi = visible.api;\n\t\t\tvisible = visible.visible;\n\t\t}\n\t\n\t\tvar a = $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn api ?\n\t\t\tnew _Api( a ) :\n\t\t\ta;\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\t\te+'.dt' :\n\t\t\t\t\te;\n\t\t\t\t} ).join( ' ' );\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t\t$(window).off('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\t\tjqTable[ removedMethod ]();\n\t\t\tjqWrapper[ removedMethod ]();\n\t\n\t\t\t// If we need to reattach the table to the document\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\n\t\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t\t// so we can restore directly to that\n\t\t\t\tjqTable\n\t\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\t\tif ( ien ) {\n\t\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\tvar opts = this.selector.opts;\n\t\t\tvar api = this;\n\t\n\t\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t\t// Rows and columns:\n\t\t\t\t//  arg1 - index\n\t\t\t\t//  arg2 - table counter\n\t\t\t\t//  arg3 - loop counter\n\t\t\t\t//  arg4 - undefined\n\t\t\t\t// Cells:\n\t\t\t\t//  arg1 - row index\n\t\t\t\t//  arg2 - column index\n\t\t\t\t//  arg3 - table counter\n\t\t\t\t//  arg4 - loop counter\n\t\t\t\tfn.call(\n\t\t\t\t\tapi[ type ](\n\t\t\t\t\t\targ1,\n\t\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t\t),\n\t\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t\t);\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn typeof resolved === 'string'\n\t\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t\t: resolved;\n\t} );\t\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See https://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.13.11\";\n\t\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\t\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables should only trigger a search when\n\t\t * the return key is pressed.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"return\": false\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null,\n\t\n\t\t/**\n\t\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t\t * object, but want to know the index\n\t\t *  @type integer\n\t\t *  @default -1\n\t\t *  @private\n\t\t */\n\t\t\"idx\": -1\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would add around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit).\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} callback Callback that can be executed when done. It\n\t\t *    should be passed the loaded state object.\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings, callback) {\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              callback( json );\n\t\t *            }\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features six different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `numbers` - Page number buttons only\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null,\n\t\n\t\n\t\t/**\n\t\t * Set the data property name that DataTables should use to get a row's id\n\t\t * to set as the `id` property in the node.\n\t\t *  @type string\n\t\t *  @default DT_RowId\n\t\t *\n\t\t *  @name DataTable.defaults.rowId\n\t\t */\n\t\t\"rowId\": \"DT_RowId\"\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"details.0\" },\n\t\t *          { \"data\": \"details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed display and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all for DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false,\n\t\n\t\t\t/**\n\t\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bBounding\": false,\n\t\n\t\t\t/**\n\t\t\t * Browser scrollbar width\n\t\t\t *  @type integer\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"barWidth\": 0\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Map of row ids to data indexes\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"aIds\": {},\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {},\n\t\n\t\t/**\n\t\t * Function used to get a row's id from the row's data\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"rowIdFn\": null,\n\t\n\t\t/**\n\t\t * Data location where to store a row's id\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"rowId\": null\n\t};\n\t\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * DataTables build type (expanded by the download builder)\n\t\t *\n\t\t *  @type string\n\t\t */\n\t\tbuilder: \"-source-\",\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatibility only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tnumbers: function ( page, pages ) {\n\t\t\treturn [ _numbers(page, pages) ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\t\n\t\tfirst_last_numbers: function (page, pages) {\n\t \t\treturn ['first', _numbers(page, pages), 'last'];\n\t \t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\t\tvar btnDisplay, btnClass;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar disabled = false;\n\t\n\t\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\t\tbtnClass = button;\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\t\n\t\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\t\n\t\tvar type = typeof d;\n\t\n\t\tif (type === 'number' || type === 'bigint') {\n\t\t\treturn d;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\tvar ts = Date.parse( d );\n\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// https://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\tvar __htmlEscapeEntities = function ( d ) {\n\t\tif (Array.isArray(d)) {\n\t\t\td = d.join(',');\n\t\t}\n\t\n\t\treturn typeof d === 'string' ?\n\t\t\td\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t\t\t.replace(/\"/g, '&quot;') :\n\t\t\td;\n\t};\n\t\n\t// Common logic for moment, luxon or a date action\n\tfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\t\tif (window.moment) {\n\t\t\treturn dt[momentFn]( arg1 );\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\treturn dt[luxonFn]( arg1 );\n\t\t}\n\t\t\n\t\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n\t}\n\t\n\t\n\tvar __mlWarning = false;\n\tfunction __mldObj (d, format, locale) {\n\t\tvar dt;\n\t\n\t\tif (window.moment) {\n\t\t\tdt = window.moment.utc( d, format, locale, true );\n\t\n\t\t\tif (! dt.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\tdt = format && typeof d === 'string'\n\t\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t\t: window.luxon.DateTime.fromISO( d );\n\t\n\t\t\tif (! dt.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\tdt.setLocale(locale);\n\t\t}\n\t\telse if (! format) {\n\t\t\t// No format given, must be ISO\n\t\t\tdt = new Date(d);\n\t\t}\n\t\telse {\n\t\t\tif (! __mlWarning) {\n\t\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t\t}\n\t\n\t\t\t__mlWarning = true;\n\t\t}\n\t\n\t\treturn dt;\n\t}\n\t\n\t// Wrapper for date, datetime and time which all operate the same way with the exception of\n\t// the output string for auto locale support\n\tfunction __mlHelper (localeString) {\n\t\treturn function ( from, to, locale, def ) {\n\t\t\t// Luxon and Moment support\n\t\t\t// Argument shifting\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = null; // means toLocaleString\n\t\t\t\tfrom = null; // means iso8601\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\t\telse if ( arguments.length === 2 ) {\n\t\t\t\tlocale = to;\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\n\t\t\tvar typeName = 'datetime-' + to;\n\t\n\t\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t});\n\t\n\t\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x < y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\n\t\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x > y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\treturn function ( d, type ) {\n\t\t\t\t// Allow for a default value\n\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\tif (def === '--now') {\n\t\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t\t// UTC\n\t\t\t\t\t\tvar local = new Date();\n\t\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'type') {\n\t\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\t\treturn typeName;\n\t\t\t\t}\n\t\n\t\t\t\tif (d === '') {\n\t\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t\t}\n\t\n\t\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tvar dt = __mldObj(d, from, locale);\n\t\n\t\t\t\tif (dt === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'sort') {\n\t\t\t\t\treturn dt;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar formatted = to === null\n\t\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\t\n\t\t\t\t// XSS protection\n\t\t\t\treturn type === 'display' ?\n\t\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\t\tformatted;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t// Based on locale, determine standard number formatting\n\t// Fallback for legacy browsers is US English\n\tvar __thousands = ',';\n\tvar __decimal = '.';\n\t\n\tif (window.Intl !== undefined) {\n\t\ttry {\n\t\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\t\n\t\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\t\tif (num[i].type === 'group') {\n\t\t\t\t\t__thousands = num[i].value;\n\t\t\t\t}\n\t\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t\t__decimal = num[i].value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\t// noop\n\t\t}\n\t}\n\t\n\t// Formatted date time detection - use by declaring the formats you are going to use\n\tDataTable.datetime = function ( format, locale ) {\n\t\tvar typeName = 'datetime-detect-' + format;\n\t\n\t\tif (! locale) {\n\t\t\tlocale = 'en';\n\t\t}\n\t\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t});\n\t\n\t\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 5 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *   * `string` (optional) - Postfix (/suffix).\n\t * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n\t *   parameters.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tdate: __mlHelper('toLocaleDateString'),\n\t\tdatetime: __mlHelper('toLocaleString'),\n\t\ttime: __mlHelper('toLocaleTimeString'),\n\t\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t\t// Auto locale detection\n\t\t\tif (thousands === null || thousands === undefined) {\n\t\t\t\tthousands = __thousands;\n\t\t\t}\n\t\n\t\t\tif (decimal === null || decimal === undefined) {\n\t\t\t\tdecimal = __decimal;\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\tvar flo = parseFloat( d );\n\t\n\t\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t\t// be a number after all)\n\t\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\t\td = Math.abs( flo );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\t\tnegative = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart +\n\t\t\t\t\t\t(postfix||'');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\ttext: function () {\n\t\t\treturn {\n\t\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\t\tfilter: __htmlEscapeEntities\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnImplementState: _fnImplementState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnExtend: _fnExtend,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\t\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\t\n\t// Provide access to the host jQuery object (circular reference)\n\tDataTable.$ = $;\n\t\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\t\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\t\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\treturn DataTable;\n}));\n","/*! DataTables Bootstrap 5 integration\n * 2020 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Bootstrap 5. This requires Bootstrap 5 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>\" +\n\t\t\"<'row dt-row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bootstrap5\",\n\tsFilterInput:  \"form-control form-control-sm\",\n\tsLengthSelect: \"form-select form-select-sm\",\n\tsProcessing:   \"dataTables_processing card\",\n\tsPageButton:   \"paginate_button page-item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'page-link'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar hostEl = $(host);\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = hostEl.find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tvar paginationEl = hostEl.children('ul.pagination');\n\n\tif (paginationEl.length) {\n\t\tpaginationEl.empty();\n\t}\n\telse {\n\t\tpaginationEl = hostEl.html('<ul/>').children('ul').addClass('pagination');\n\t}\n\n\tattach(\n\t\tpaginationEl,\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\thostEl.find('[data-dt-idx='+activeEl+']').trigger('focus');\n\t}\n};\n\n\nreturn DataTable;\n}));\n","/*! Buttons for DataTables 2.4.2\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Used for namespacing events added to the document by each instance, so they\n// can be removed on destroy\nvar _instCounter = 0;\n\n// Button namespacing counter for namespacing events on individual buttons\nvar _buttonCounter = 0;\n\nvar _dtButtons = DataTable.ext.buttons;\n\n// Custom entity decoder for data export\nvar _entityDecoder = null;\n\n// Allow for jQuery slim\nfunction _fadeIn(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeIn(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'block');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\nfunction _fadeOut(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeOut(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'none');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\n/**\n * [Buttons description]\n * @param {[type]}\n * @param {[type]}\n */\nvar Buttons = function (dt, config) {\n\t// If not created with a `new` keyword then we return a wrapper function that\n\t// will take the settings object for a DT. This allows easy use of new instances\n\t// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.\n\tif (!(this instanceof Buttons)) {\n\t\treturn function (settings) {\n\t\t\treturn new Buttons(settings, dt).container();\n\t\t};\n\t}\n\n\t// If there is no config set it to an empty object\n\tif (typeof config === 'undefined') {\n\t\tconfig = {};\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\t// For easy configuration of buttons an array can be given\n\tif (Array.isArray(config)) {\n\t\tconfig = { buttons: config };\n\t}\n\n\tthis.c = $.extend(true, {}, Buttons.defaults, config);\n\n\t// Don't want a deep copy for the buttons\n\tif (config.buttons) {\n\t\tthis.c.buttons = config.buttons;\n\t}\n\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt),\n\t\tbuttons: [],\n\t\tlistenKeys: '',\n\t\tnamespace: 'dtb' + _instCounter++\n\t};\n\n\tthis.dom = {\n\t\tcontainer: $('<' + this.c.dom.container.tag + '/>').addClass(this.c.dom.container.className)\n\t};\n\n\tthis._constructor();\n};\n\n$.extend(Buttons.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t */\n\n\t/**\n\t * Get the action of a button\n\t * @param  {int|string} Button index\n\t * @return {function}\n\t */ /**\n\t * Set the action of a button\n\t * @param  {node} node Button element\n\t * @param  {function} action Function to set\n\t * @return {Buttons} Self for chaining\n\t */\n\taction: function (node, action) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (action === undefined) {\n\t\t\treturn button.conf.action;\n\t\t}\n\n\t\tbutton.conf.action = action;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add an active class to the button to make to look active or get current\n\t * active state.\n\t * @param  {node} node Button element\n\t * @param  {boolean} [flag] Enable / disable flag\n\t * @return {Buttons} Self for chaining or boolean for getter\n\t */\n\tactive: function (node, flag) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar klass = this.c.dom.button.active;\n\t\tvar jqNode = $(button.node);\n\n\t\tif (\n\t\t\tbutton.inCollection &&\n\t\t\tthis.c.dom.collection.button &&\n\t\t\tthis.c.dom.collection.button.active !== undefined\n\t\t) {\n\t\t\tklass = this.c.dom.collection.button.active;\n\t\t}\n\n\t\tif (flag === undefined) {\n\t\t\treturn jqNode.hasClass(klass);\n\t\t}\n\n\t\tjqNode.toggleClass(klass, flag === undefined ? true : flag);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add a new button\n\t * @param {object} config Button configuration object, base string name or function\n\t * @param {int|string} [idx] Button index for where to insert the button\n\t * @param {boolean} [draw=true] Trigger a draw. Set a false when adding\n\t *   lots of buttons, until the last button.\n\t * @return {Buttons} Self for chaining\n\t */\n\tadd: function (config, idx, draw) {\n\t\tvar buttons = this.s.buttons;\n\n\t\tif (typeof idx === 'string') {\n\t\t\tvar split = idx.split('-');\n\t\t\tvar base = this.s;\n\n\t\t\tfor (var i = 0, ien = split.length - 1; i < ien; i++) {\n\t\t\t\tbase = base.buttons[split[i] * 1];\n\t\t\t}\n\n\t\t\tbuttons = base.buttons;\n\t\t\tidx = split[split.length - 1] * 1;\n\t\t}\n\n\t\tthis._expandButton(\n\t\t\tbuttons,\n\t\t\tconfig,\n\t\t\tconfig !== undefined ? config.split : undefined,\n\t\t\t(config === undefined || config.split === undefined || config.split.length === 0) &&\n\t\t\t\tbase !== undefined,\n\t\t\tfalse,\n\t\t\tidx\n\t\t);\n\n\t\tif (draw === undefined || draw === true) {\n\t\t\tthis._draw();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Clear buttons from a collection and then insert new buttons\n\t */\n\tcollectionRebuild: function (node, newButtons) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (newButtons !== undefined) {\n\t\t\tvar i;\n\t\t\t// Need to reverse the array\n\t\t\tfor (i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\n\t\t\t// If the collection has prefix and / or postfix buttons we need to add them in\n\t\t\tif (button.conf.prefixButtons) {\n\t\t\t\tnewButtons.unshift.apply(newButtons, button.conf.prefixButtons);\n\t\t\t}\n\n\t\t\tif (button.conf.postfixButtons) {\n\t\t\t\tnewButtons.push.apply(newButtons, button.conf.postfixButtons);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < newButtons.length; i++) {\n\t\t\t\tvar newBtn = newButtons[i];\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbutton.buttons,\n\t\t\t\t\tnewBtn,\n\t\t\t\t\tnewBtn !== undefined &&\n\t\t\t\t\t\tnewBtn.config !== undefined &&\n\t\t\t\t\t\tnewBtn.config.split !== undefined,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnewBtn.parentConf !== undefined && newBtn.parentConf.split !== undefined,\n\t\t\t\t\tnull,\n\t\t\t\t\tnewBtn.parentConf\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._draw(button.collection, button.buttons);\n\t},\n\n\t/**\n\t * Get the container node for the buttons\n\t * @return {jQuery} Buttons node\n\t */\n\tcontainer: function () {\n\t\treturn this.dom.container;\n\t},\n\n\t/**\n\t * Disable a button\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tdisable: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\t$(button.node).addClass(this.c.dom.button.disabled).prop('disabled', true);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Destroy the instance, cleaning up event handlers and removing DOM\n\t * elements\n\t * @return {Buttons} Self for chaining\n\t */\n\tdestroy: function () {\n\t\t// Key event listener\n\t\t$('body').off('keyup.' + this.s.namespace);\n\n\t\t// Individual button destroy (so they can remove their own events if\n\t\t// needed). Take a copy as the array is modified by `remove`\n\t\tvar buttons = this.s.buttons.slice();\n\t\tvar i, ien;\n\n\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.remove(buttons[i].node);\n\t\t}\n\n\t\t// Container\n\t\tthis.dom.container.remove();\n\n\t\t// Remove from the settings object collection\n\t\tvar buttonInsts = this.s.dt.settings()[0];\n\n\t\tfor (i = 0, ien = buttonInsts.length; i < ien; i++) {\n\t\t\tif (buttonInsts.inst === this) {\n\t\t\t\tbuttonInsts.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable / disable a button\n\t * @param  {node} node Button node\n\t * @param  {boolean} [flag=true] Enable / disable flag\n\t * @return {Buttons} Self for chaining\n\t */\n\tenable: function (node, flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable(node);\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\t$(button.node).removeClass(this.c.dom.button.disabled).prop('disabled', false);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get a button's index\n\t *\n\t * This is internally recursive\n\t * @param {element} node Button to get the index of\n\t * @return {string} Button index\n\t */\n\tindex: function (node, nested, buttons) {\n\t\tif (!nested) {\n\t\t\tnested = '';\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar inner = buttons[i].buttons;\n\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn nested + i;\n\t\t\t}\n\n\t\t\tif (inner && inner.length) {\n\t\t\t\tvar match = this.index(node, i + '-', inner);\n\n\t\t\t\tif (match !== null) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Get the instance name for the button set selector\n\t * @return {string} Instance name\n\t */\n\tname: function () {\n\t\treturn this.c.name;\n\t},\n\n\t/**\n\t * Get a button's node of the buttons container if no button is given\n\t * @param  {node} [node] Button node\n\t * @return {jQuery} Button element, or container\n\t */\n\tnode: function (node) {\n\t\tif (!node) {\n\t\t\treturn this.dom.container;\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\treturn $(button.node);\n\t},\n\n\t/**\n\t * Set / get a processing class on the selected button\n\t * @param {element} node Triggering button node\n\t * @param  {boolean} flag true to add, false to remove, undefined to get\n\t * @return {boolean|Buttons} Getter value or this if a setter.\n\t */\n\tprocessing: function (node, flag) {\n\t\tvar dt = this.s.dt;\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (flag === undefined) {\n\t\t\treturn $(button.node).hasClass('processing');\n\t\t}\n\n\t\t$(button.node).toggleClass('processing', flag);\n\n\t\t$(dt.table().node()).triggerHandler('buttons-processing.dt', [\n\t\t\tflag,\n\t\t\tdt.button(node),\n\t\t\tdt,\n\t\t\t$(node),\n\t\t\tbutton.conf\n\t\t]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Remove a button.\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tremove: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar host = this._nodeToHost(node);\n\t\tvar dt = this.s.dt;\n\n\t\t// Remove any child buttons first\n\t\tif (button.buttons.length) {\n\t\t\tfor (var i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\t\t}\n\n\t\tbutton.conf.destroying = true;\n\n\t\t// Allow the button to remove event handlers, etc\n\t\tif (button.conf.destroy) {\n\t\t\tbutton.conf.destroy.call(dt.button(node), dt, $(node), button.conf);\n\t\t}\n\n\t\tthis._removeKey(button.conf);\n\n\t\t$(button.node).remove();\n\n\t\tvar idx = $.inArray(button, host);\n\t\thost.splice(idx, 1);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the text for a button\n\t * @param  {int|string} node Button index\n\t * @return {string} Button text\n\t */ /**\n\t * Set the text for a button\n\t * @param  {int|string|function} node Button index\n\t * @param  {string} label Text\n\t * @return {Buttons} Self for chaining\n\t */\n\ttext: function (node, label) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar textNode = button.textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar jqNode = $(button.node);\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, jqNode, button.conf) : opt;\n\t\t};\n\n\t\tif (label === undefined) {\n\t\t\treturn text(button.conf.text);\n\t\t}\n\n\t\tbutton.conf.text = label;\n\t\ttextNode.html(text(label));\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Buttons constructor\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar buttons = this.c.buttons;\n\n\t\tif (!dtSettings._buttons) {\n\t\t\tdtSettings._buttons = [];\n\t\t}\n\n\t\tdtSettings._buttons.push({\n\t\t\tinst: this,\n\t\t\tname: this.c.name\n\t\t});\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.add(buttons[i]);\n\t\t}\n\n\t\tdt.on('destroy', function (e, settings) {\n\t\t\tif (settings === dtSettings) {\n\t\t\t\tthat.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Global key event binding to listen for button keys\n\t\t$('body').on('keyup.' + this.s.namespace, function (e) {\n\t\t\tif (!document.activeElement || document.activeElement === document.body) {\n\t\t\t\t// SUse a string of characters for fast lookup of if we need to\n\t\t\t\t// handle this\n\t\t\t\tvar character = String.fromCharCode(e.keyCode).toLowerCase();\n\n\t\t\t\tif (that.s.listenKeys.toLowerCase().indexOf(character) !== -1) {\n\t\t\t\t\tthat._keypress(character, e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Add a new button to the key press listener\n\t * @param {object} conf Resolved button configuration object\n\t * @private\n\t */\n\t_addKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tthis.s.listenKeys += $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\t\t}\n\t},\n\n\t/**\n\t * Insert the buttons into the container. Call without parameters!\n\t * @param  {node} [container] Recursive only - Insert point\n\t * @param  {array} [buttons] Recursive only - Buttons array\n\t * @private\n\t */\n\t_draw: function (container, buttons) {\n\t\tif (!container) {\n\t\t\tcontainer = this.dom.container;\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tcontainer.children().detach();\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tcontainer.append(buttons[i].inserter);\n\t\t\tcontainer.append(' ');\n\n\t\t\tif (buttons[i].buttons && buttons[i].buttons.length) {\n\t\t\t\tthis._draw(buttons[i].collection, buttons[i].buttons);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create buttons from an array of buttons\n\t * @param  {array} attachTo Buttons array to attach to\n\t * @param  {object} button Button definition\n\t * @param  {boolean} inCollection true if the button is in a collection\n\t * @private\n\t */\n\t_expandButton: function (\n\t\tattachTo,\n\t\tbutton,\n\t\tsplit,\n\t\tinCollection,\n\t\tinSplit,\n\t\tattachPoint,\n\t\tparentConf\n\t) {\n\t\tvar dt = this.s.dt;\n\t\tvar isSplit = false;\n\t\tvar domCollection = this.c.dom.collection;\n\t\tvar buttons = !Array.isArray(button) ? [button] : button;\n\n\t\tif (button === undefined) {\n\t\t\tbuttons = !Array.isArray(split) ? [split] : split;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar conf = this._resolveExtends(buttons[i]);\n\n\t\t\tif (!conf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tisSplit = conf.config && conf.config.split ? true : false;\n\n\t\t\t// If the configuration is an array, then expand the buttons at this\n\t\t\t// point\n\t\t\tif (Array.isArray(conf)) {\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tattachTo,\n\t\t\t\t\tconf,\n\t\t\t\t\tbuilt !== undefined && built.conf !== undefined ? built.conf.split : undefined,\n\t\t\t\t\tinCollection,\n\t\t\t\t\tparentConf !== undefined && parentConf.split !== undefined,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tparentConf\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar built = this._buildButton(\n\t\t\t\tconf,\n\t\t\t\tinCollection,\n\t\t\t\tconf.split !== undefined ||\n\t\t\t\t\t(conf.config !== undefined && conf.config.split !== undefined),\n\t\t\t\tinSplit\n\t\t\t);\n\t\t\tif (!built) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attachPoint !== undefined && attachPoint !== null) {\n\t\t\t\tattachTo.splice(attachPoint, 0, built);\n\t\t\t\tattachPoint++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tattachTo.push(built);\n\t\t\t}\n\n\t\t\t// Create the dropdown for a collection\n\t\t\tif (built.conf.buttons) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.content.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\t$(built.node).append(domCollection.action.dropHtml);\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And the split collection\n\t\t\tif (built.conf.split) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\tfor (var j = 0; j < built.conf.split.length; j++) {\n\t\t\t\t\tvar item = built.conf.split[j];\n\n\t\t\t\t\tif (typeof item === 'object') {\n\t\t\t\t\t\titem.parent = parentConf;\n\n\t\t\t\t\t\tif (item.collectionLayout === undefined) {\n\t\t\t\t\t\t\titem.collectionLayout = built.conf.collectionLayout;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.dropup === undefined) {\n\t\t\t\t\t\t\titem.dropup = built.conf.dropup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.fade === undefined) {\n\t\t\t\t\t\t\titem.fade = built.conf.fade;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbuilt.conf.parent = parentConf;\n\n\t\t\t// init call is made here, rather than buildButton as it needs to\n\t\t\t// be selectable, and for that it needs to be in the buttons array\n\t\t\tif (conf.init) {\n\t\t\t\tconf.init.call(dt.button(built.node), dt, $(built.node), conf);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create an individual button\n\t * @param  {object} config            Resolved button configuration\n\t * @param  {boolean} inCollection `true` if a collection button\n\t * @return {object} Completed button description object\n\t * @private\n\t */\n\t_buildButton: function (config, inCollection, isSplit, inSplit) {\n\t\tvar configDom = this.c.dom;\n\t\tvar textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, button, config) : opt;\n\t\t};\n\n\t\t// Create an object that describes the button which can be in `dom.button`, or\n\t\t// `dom.collection.button` or `dom.split.button` or `dom.collection.split.button`!\n\t\t// Each should extend from `dom.button`.\n\t\tvar dom = $.extend(true, {}, configDom.button);\n\n\t\tif (inCollection && isSplit && configDom.collection.split) {\n\t\t\t$.extend(true, dom, configDom.collection.split.action);\n\t\t}\n\t\telse if (inSplit || inCollection) {\n\t\t\t$.extend(true, dom, configDom.collection.button);\n\t\t}\n\t\telse if (isSplit) {\n\t\t\t$.extend(true, dom, configDom.split.button);\n\t\t}\n\n\t\t// Spacers don't do much other than insert an element into the DOM\n\t\tif (config.spacer) {\n\t\t\tvar spacer = $('<' + dom.spacer.tag + '/>')\n\t\t\t\t.addClass('dt-button-spacer ' + config.style + ' ' + dom.spacer.className)\n\t\t\t\t.html(text(config.text));\n\n\t\t\treturn {\n\t\t\t\tconf: config,\n\t\t\t\tnode: spacer,\n\t\t\t\tinserter: spacer,\n\t\t\t\tbuttons: [],\n\t\t\t\tinCollection: inCollection,\n\t\t\t\tisSplit: isSplit,\n\t\t\t\tcollection: null,\n\t\t\t\ttextNode: spacer\n\t\t\t};\n\t\t}\n\n\t\t// Make sure that the button is available based on whatever requirements\n\t\t// it has. For example, PDF button require pdfmake\n\t\tif (config.available && !config.available(dt, config) && !config.hasOwnProperty('html')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar button;\n\n\t\tif (!config.hasOwnProperty('html')) {\n\t\t\tvar action = function (e, dt, button, config) {\n\t\t\t\tconfig.action.call(dt.button(button), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tvar tag = config.tag || dom.tag;\n\t\t\tvar clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs;\n\n\t\t\tbutton = $('<' + tag + '/>')\n\t\t\t\t.addClass(dom.className)\n\t\t\t\t.attr('tabindex', this.s.dt.settings()[0].iTabIndex)\n\t\t\t\t.attr('aria-controls', this.s.dt.table().node().id)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tbutton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Make `a` tags act like a link\n\t\t\tif (tag.toLowerCase() === 'a') {\n\t\t\t\tbutton.attr('href', '#');\n\t\t\t}\n\n\t\t\t// Button tags should have `type=button` so they don't have any default behaviour\n\t\t\tif (tag.toLowerCase() === 'button') {\n\t\t\t\tbutton.attr('type', 'button');\n\t\t\t}\n\n\t\t\tif (dom.liner.tag) {\n\t\t\t\tvar liner = $('<' + dom.liner.tag + '/>')\n\t\t\t\t\t.html(text(config.text))\n\t\t\t\t\t.addClass(dom.liner.className);\n\n\t\t\t\tif (dom.liner.tag.toLowerCase() === 'a') {\n\t\t\t\t\tliner.attr('href', '#');\n\t\t\t\t}\n\n\t\t\t\tbutton.append(liner);\n\t\t\t\ttextNode = liner;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbutton.html(text(config.text));\n\t\t\t\ttextNode = button;\n\t\t\t}\n\n\t\t\tif (config.enabled === false) {\n\t\t\t\tbutton.addClass(dom.disabled);\n\t\t\t}\n\n\t\t\tif (config.className) {\n\t\t\t\tbutton.addClass(config.className);\n\t\t\t}\n\n\t\t\tif (config.titleAttr) {\n\t\t\t\tbutton.attr('title', text(config.titleAttr));\n\t\t\t}\n\n\t\t\tif (config.attr) {\n\t\t\t\tbutton.attr(config.attr);\n\t\t\t}\n\n\t\t\tif (!config.namespace) {\n\t\t\t\tconfig.namespace = '.dt-button-' + _buttonCounter++;\n\t\t\t}\n\n\t\t\tif (config.config !== undefined && config.config.split) {\n\t\t\t\tconfig.split = config.config.split;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbutton = $(config.html);\n\t\t}\n\n\t\tvar buttonContainer = this.c.dom.buttonContainer;\n\t\tvar inserter;\n\t\tif (buttonContainer && buttonContainer.tag) {\n\t\t\tinserter = $('<' + buttonContainer.tag + '/>')\n\t\t\t\t.addClass(buttonContainer.className)\n\t\t\t\t.append(button);\n\t\t}\n\t\telse {\n\t\t\tinserter = button;\n\t\t}\n\n\t\tthis._addKey(config);\n\n\t\t// Style integration callback for DOM manipulation\n\t\t// Note that this is _not_ documented. It is currently\n\t\t// for style integration only\n\t\tif (this.c.buttonCreated) {\n\t\t\tinserter = this.c.buttonCreated(config, inserter);\n\t\t}\n\n\t\tvar splitDiv;\n\n\t\tif (isSplit) {\n\t\t\tvar dropdownConf = inCollection\n\t\t\t\t? $.extend(true, this.c.dom.split, this.c.dom.collection.split)\n\t\t\t\t: this.c.dom.split;\n\t\t\tvar wrapperConf = dropdownConf.wrapper;\n\n\t\t\tsplitDiv = $('<' + wrapperConf.tag + '/>')\n\t\t\t\t.addClass(wrapperConf.className)\n\t\t\t\t.append(button);\n\n\t\t\tvar dropButtonConfig = $.extend(config, {\n\t\t\t\talign: dropdownConf.dropdown.align,\n\t\t\t\tattr: {\n\t\t\t\t\t'aria-haspopup': 'dialog',\n\t\t\t\t\t'aria-expanded': false\n\t\t\t\t},\n\t\t\t\tclassName: dropdownConf.dropdown.className,\n\t\t\t\tcloseButton: false,\n\t\t\t\tsplitAlignClass: dropdownConf.dropdown.splitAlignClass,\n\t\t\t\ttext: dropdownConf.dropdown.text\n\t\t\t});\n\n\t\t\tthis._addKey(dropButtonConfig);\n\n\t\t\tvar splitAction = function (e, dt, button, config) {\n\t\t\t\t_dtButtons.split.action.call(dt.button(splitDiv), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t\tbutton.attr('aria-expanded', true);\n\t\t\t};\n\n\t\t\tvar dropButton = $(\n\t\t\t\t'<button class=\"' + dropdownConf.dropdown.className + ' dt-button\"></button>'\n\t\t\t)\n\t\t\t\t.html(dropdownConf.dropdown.dropHtml)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t}\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tdropButton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tif (config.split.length === 0) {\n\t\t\t\tdropButton.addClass('dtb-hide-drop');\n\t\t\t}\n\n\t\t\tsplitDiv.append(dropButton).attr(dropButtonConfig.attr);\n\t\t}\n\n\t\treturn {\n\t\t\tconf: config,\n\t\t\tnode: isSplit ? splitDiv.get(0) : button.get(0),\n\t\t\tinserter: isSplit ? splitDiv : inserter,\n\t\t\tbuttons: [],\n\t\t\tinCollection: inCollection,\n\t\t\tisSplit: isSplit,\n\t\t\tinSplit: inSplit,\n\t\t\tcollection: null,\n\t\t\ttextNode: textNode\n\t\t};\n\t},\n\n\t/**\n\t * Get the button object from a node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {object} Button object\n\t * @private\n\t */\n\t_nodeToButton: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons[i];\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToButton(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get container array for a button from a button node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {array} Button's host array\n\t * @private\n\t */\n\t_nodeToHost: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons;\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToHost(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle a key press - determine if any button's key configured matches\n\t * what was typed and trigger the action if so.\n\t * @param  {string} character The character pressed\n\t * @param  {object} e Key event that triggered this call\n\t * @private\n\t */\n\t_keypress: function (character, e) {\n\t\t// Check if this button press already activated on another instance of Buttons\n\t\tif (e._buttonsHandled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar run = function (conf, node) {\n\t\t\tif (!conf.key) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (conf.key === character) {\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t\telse if ($.isPlainObject(conf.key)) {\n\t\t\t\tif (conf.key.key !== character) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.shiftKey && !e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.altKey && !e.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.ctrlKey && !e.ctrlKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.metaKey && !e.metaKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Made it this far - it is good\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t};\n\n\t\tvar recurse = function (a) {\n\t\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\trun(a[i].conf, a[i].node);\n\n\t\t\t\tif (a[i].buttons.length) {\n\t\t\t\t\trecurse(a[i].buttons);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trecurse(this.s.buttons);\n\t},\n\n\t/**\n\t * Remove a key from the key listener for this instance (to be used when a\n\t * button is removed)\n\t * @param  {object} conf Button configuration\n\t * @private\n\t */\n\t_removeKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tvar character = $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\n\t\t\t// Remove only one character, as multiple buttons could have the\n\t\t\t// same listening key\n\t\t\tvar a = this.s.listenKeys.split('');\n\t\t\tvar idx = $.inArray(character, a);\n\t\t\ta.splice(idx, 1);\n\t\t\tthis.s.listenKeys = a.join('');\n\t\t}\n\t},\n\n\t/**\n\t * Resolve a button configuration\n\t * @param  {string|function|object} conf Button config to resolve\n\t * @return {object} Button configuration\n\t * @private\n\t */\n\t_resolveExtends: function (conf) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar toConfObject = function (base) {\n\t\t\tvar loop = 0;\n\n\t\t\t// Loop until we have resolved to a button configuration, or an\n\t\t\t// array of button configurations (which will be iterated\n\t\t\t// separately)\n\t\t\twhile (!$.isPlainObject(base) && !Array.isArray(base)) {\n\t\t\t\tif (base === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof base === 'function') {\n\t\t\t\t\tbase = base.call(that, dt, conf);\n\n\t\t\t\t\tif (!base) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (typeof base === 'string') {\n\t\t\t\t\tif (!_dtButtons[base]) {\n\t\t\t\t\t\treturn { html: base };\n\t\t\t\t\t}\n\n\t\t\t\t\tbase = _dtButtons[base];\n\t\t\t\t}\n\n\t\t\t\tloop++;\n\t\t\t\tif (loop > 30) {\n\t\t\t\t\t// Protect against misconfiguration killing the browser\n\t\t\t\t\tthrow 'Buttons: Too many iterations';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.isArray(base) ? base : $.extend({}, base);\n\t\t};\n\n\t\tconf = toConfObject(conf);\n\n\t\twhile (conf && conf.extend) {\n\t\t\t// Use `toConfObject` in case the button definition being extended\n\t\t\t// is itself a string or a function\n\t\t\tif (!_dtButtons[conf.extend]) {\n\t\t\t\tthrow 'Cannot extend unknown button type: ' + conf.extend;\n\t\t\t}\n\n\t\t\tvar objArray = toConfObject(_dtButtons[conf.extend]);\n\t\t\tif (Array.isArray(objArray)) {\n\t\t\t\treturn objArray;\n\t\t\t}\n\t\t\telse if (!objArray) {\n\t\t\t\t// This is a little brutal as it might be possible to have a\n\t\t\t\t// valid button without the extend, but if there is no extend\n\t\t\t\t// then the host button would be acting in an undefined state\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Stash the current class name\n\t\t\tvar originalClassName = objArray.className;\n\n\t\t\tif (conf.config !== undefined && objArray.config !== undefined) {\n\t\t\t\tconf.config = $.extend({}, objArray.config, conf.config);\n\t\t\t}\n\n\t\t\tconf = $.extend({}, objArray, conf);\n\n\t\t\t// The extend will have overwritten the original class name if the\n\t\t\t// `conf` object also assigned a class, but we want to concatenate\n\t\t\t// them so they are list that is combined from all extended buttons\n\t\t\tif (originalClassName && conf.className !== originalClassName) {\n\t\t\t\tconf.className = originalClassName + ' ' + conf.className;\n\t\t\t}\n\n\t\t\t// Although we want the `conf` object to overwrite almost all of\n\t\t\t// the properties of the object being extended, the `extend`\n\t\t\t// property should come from the object being extended\n\t\t\tconf.extend = objArray.extend;\n\t\t}\n\n\t\t// Buttons to be added to a collection  -gives the ability to define\n\t\t// if buttons should be added to the start or end of a collection\n\t\tvar postfixButtons = conf.postfixButtons;\n\t\tif (postfixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = postfixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.push(postfixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar prefixButtons = conf.prefixButtons;\n\t\tif (prefixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = prefixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.splice(i, 0, prefixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn conf;\n\t},\n\n\t/**\n\t * Display (and replace if there is an existing one) a popover attached to a button\n\t * @param {string|node} content Content to show\n\t * @param {DataTable.Api} hostButton DT API instance of the button\n\t * @param {object} inOpts Options (see object below for all options)\n\t */\n\t_popover: function (content, hostButton, inOpts, e) {\n\t\tvar dt = hostButton;\n\t\tvar c = this.c;\n\t\tvar closed = false;\n\t\tvar options = $.extend(\n\t\t\t{\n\t\t\t\talign: 'button-left', // button-right, dt-container, split-left, split-right\n\t\t\t\tautoClose: false,\n\t\t\t\tbackground: true,\n\t\t\t\tbackgroundClassName: 'dt-button-background',\n\t\t\t\tcloseButton: true,\n\t\t\t\tcontainerClassName: c.dom.collection.container.className,\n\t\t\t\tcontentClassName: c.dom.collection.container.content.className,\n\t\t\t\tcollectionLayout: '',\n\t\t\t\tcollectionTitle: '',\n\t\t\t\tdropup: false,\n\t\t\t\tfade: 400,\n\t\t\t\tpopoverTitle: '',\n\t\t\t\trightAlignClassName: 'dt-button-right',\n\t\t\t\ttag: c.dom.collection.container.tag\n\t\t\t},\n\t\t\tinOpts\n\t\t);\n\n\t\tvar containerSelector = options.tag + '.' + options.containerClassName.replace(/ /g, '.');\n\t\tvar hostNode = hostButton.node();\n\n\t\tvar close = function () {\n\t\t\tclosed = true;\n\n\t\t\t_fadeOut($(containerSelector), options.fade, function () {\n\t\t\t\t$(this).detach();\n\t\t\t});\n\n\t\t\t$(dt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()).attr(\n\t\t\t\t'aria-expanded',\n\t\t\t\t'false'\n\t\t\t);\n\n\t\t\t$('div.dt-button-background').off('click.dtb-collection');\n\t\t\tButtons.background(false, options.backgroundClassName, options.fade, hostNode);\n\n\t\t\t$(window).off('resize.resize.dtb-collection');\n\t\t\t$('body').off('.dtb-collection');\n\t\t\tdt.off('buttons-action.b-internal');\n\t\t\tdt.off('destroy');\n\t\t};\n\n\t\tif (content === false) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\tvar existingExpanded = $(\n\t\t\tdt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()\n\t\t);\n\t\tif (existingExpanded.length) {\n\t\t\t// Reuse the current position if the button that was triggered is inside an existing collection\n\t\t\tif (hostNode.closest(containerSelector).length) {\n\t\t\t\thostNode = existingExpanded.eq(0);\n\t\t\t}\n\n\t\t\tclose();\n\t\t}\n\n\t\t// Try to be smart about the layout\n\t\tvar cnt = $('.dt-button', content).length;\n\t\tvar mod = '';\n\n\t\tif (cnt === 3) {\n\t\t\tmod = 'dtb-b3';\n\t\t}\n\t\telse if (cnt === 2) {\n\t\t\tmod = 'dtb-b2';\n\t\t}\n\t\telse if (cnt === 1) {\n\t\t\tmod = 'dtb-b1';\n\t\t}\n\n\t\tvar display = $('<' + options.tag + '/>')\n\t\t\t.addClass(options.containerClassName)\n\t\t\t.addClass(options.collectionLayout)\n\t\t\t.addClass(options.splitAlignClass)\n\t\t\t.addClass(mod)\n\t\t\t.css('display', 'none')\n\t\t\t.attr({\n\t\t\t\t'aria-modal': true,\n\t\t\t\trole: 'dialog'\n\t\t\t});\n\n\t\tcontent = $(content)\n\t\t\t.addClass(options.contentClassName)\n\t\t\t.attr('role', 'menu')\n\t\t\t.appendTo(display);\n\n\t\thostNode.attr('aria-expanded', 'true');\n\n\t\tif (hostNode.parents('body')[0] !== document.body) {\n\t\t\thostNode = document.body.lastChild;\n\t\t}\n\n\t\tif (options.popoverTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.popoverTitle + '</div>'\n\t\t\t);\n\t\t}\n\t\telse if (options.collectionTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.collectionTitle + '</div>'\n\t\t\t);\n\t\t}\n\n\t\tif (options.closeButton) {\n\t\t\tdisplay\n\t\t\t\t.prepend('<div class=\"dtb-popover-close\">&times;</div>')\n\t\t\t\t.addClass('dtb-collection-closeable');\n\t\t}\n\n\t\t_fadeIn(display.insertAfter(hostNode), options.fade);\n\n\t\tvar tableContainer = $(hostButton.table().container());\n\t\tvar position = display.css('position');\n\n\t\tif (options.span === 'container' || options.align === 'dt-container') {\n\t\t\thostNode = hostNode.parent();\n\t\t\tdisplay.css('width', tableContainer.width());\n\t\t}\n\n\t\t// Align the popover relative to the DataTables container\n\t\t// Useful for wide popovers such as SearchPanes\n\t\tif (position === 'absolute') {\n\t\t\t// Align relative to the host button\n\t\t\tvar offsetParent = $(hostNode[0].offsetParent);\n\t\t\tvar buttonPosition = hostNode.position();\n\t\t\tvar buttonOffset = hostNode.offset();\n\t\t\tvar tableSizes = offsetParent.offset();\n\t\t\tvar containerPosition = offsetParent.position();\n\t\t\tvar computed = window.getComputedStyle(offsetParent[0]);\n\n\t\t\ttableSizes.height = offsetParent.outerHeight();\n\t\t\ttableSizes.width = offsetParent.width() + parseFloat(computed.paddingLeft);\n\t\t\ttableSizes.right = tableSizes.left + tableSizes.width;\n\t\t\ttableSizes.bottom = tableSizes.top + tableSizes.height;\n\n\t\t\t// Set the initial position so we can read height / width\n\t\t\tvar top = buttonPosition.top + hostNode.outerHeight();\n\t\t\tvar left = buttonPosition.left;\n\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\n\t\t\t// Get the popover position\n\t\t\tcomputed = window.getComputedStyle(display[0]);\n\t\t\tvar popoverSizes = display.offset();\n\n\t\t\tpopoverSizes.height = display.outerHeight();\n\t\t\tpopoverSizes.width = display.outerWidth();\n\t\t\tpopoverSizes.right = popoverSizes.left + popoverSizes.width;\n\t\t\tpopoverSizes.bottom = popoverSizes.top + popoverSizes.height;\n\t\t\tpopoverSizes.marginTop = parseFloat(computed.marginTop);\n\t\t\tpopoverSizes.marginBottom = parseFloat(computed.marginBottom);\n\n\t\t\t// First position per the class requirements - pop up and right align\n\t\t\tif (options.dropup) {\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (options.align === 'button-right' || display.hasClass(options.rightAlignClassName)) {\n\t\t\t\tleft = buttonPosition.left - popoverSizes.width + hostNode.outerWidth();\n\t\t\t}\n\n\t\t\t// Container alignment - make sure it doesn't overflow the table container\n\t\t\tif (options.align === 'dt-container' || options.align === 'container') {\n\t\t\t\tif (left < buttonPosition.left) {\n\t\t\t\t\tleft = -buttonPosition.left;\n\t\t\t\t}\n\n\t\t\t\tif (left + popoverSizes.width > tableSizes.width) {\n\t\t\t\t\tleft = tableSizes.width - popoverSizes.width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Window adjustment\n\t\t\tif (containerPosition.left + left + popoverSizes.width > $(window).width()) {\n\t\t\t\t// Overflowing the document to the right\n\t\t\t\tleft = $(window).width() - popoverSizes.width - containerPosition.left;\n\t\t\t}\n\n\t\t\tif (buttonOffset.left + left < 0) {\n\t\t\t\t// Off to the left of the document\n\t\t\t\tleft = -buttonOffset.left;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcontainerPosition.top + top + popoverSizes.height >\n\t\t\t\t$(window).height() + $(window).scrollTop()\n\t\t\t) {\n\t\t\t\t// Pop up if otherwise we'd need the user to scroll down\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (containerPosition.top + top < $(window).scrollTop()) {\n\t\t\t\t// Correction for when the top is beyond the top of the page\n\t\t\t\ttop = buttonPosition.top + hostNode.outerHeight();\n\t\t\t}\n\n\t\t\t// Calculations all done - now set it\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// Fix position - centre on screen\n\t\t\tvar position = function () {\n\t\t\t\tvar half = $(window).height() / 2;\n\n\t\t\t\tvar top = display.height() / 2;\n\t\t\t\tif (top > half) {\n\t\t\t\t\ttop = half;\n\t\t\t\t}\n\n\t\t\t\tdisplay.css('marginTop', top * -1);\n\t\t\t};\n\n\t\t\tposition();\n\n\t\t\t$(window).on('resize.dtb-collection', function () {\n\t\t\t\tposition();\n\t\t\t});\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tButtons.background(\n\t\t\t\ttrue,\n\t\t\t\toptions.backgroundClassName,\n\t\t\t\toptions.fade,\n\t\t\t\toptions.backgroundHost || hostNode\n\t\t\t);\n\t\t}\n\n\t\t// This is bonkers, but if we don't have a click listener on the\n\t\t// background element, iOS Safari will ignore the body click\n\t\t// listener below. An empty function here is all that is\n\t\t// required to make it work...\n\t\t$('div.dt-button-background').on('click.dtb-collection', function () {});\n\n\t\tif (options.autoClose) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tdt.on('buttons-action.b-internal', function (e, btn, dt, node) {\n\t\t\t\t\tif (node[0] === hostNode[0]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclose();\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(display).trigger('buttons-popover.dt');\n\n\t\tdt.on('destroy', close);\n\n\t\tsetTimeout(function () {\n\t\t\tclosed = false;\n\t\t\t$('body')\n\t\t\t\t.on('click.dtb-collection', function (e) {\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// andSelf is deprecated in jQ1.8, but we want 1.7 compat\n\t\t\t\t\tvar back = $.fn.addBack ? 'addBack' : 'andSelf';\n\t\t\t\t\tvar parent = $(e.target).parent()[0];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!$(e.target).parents()[back]().filter(content).length &&\n\t\t\t\t\t\t\t!$(parent).hasClass('dt-buttons')) ||\n\t\t\t\t\t\t$(e.target).hasClass('dt-button-background')\n\t\t\t\t\t) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.dtb-collection', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown.dtb-collection', function (e) {\n\t\t\t\t\t// Focus trap for tab key\n\t\t\t\t\tvar elements = $('a, button', content);\n\t\t\t\t\tvar active = document.activeElement;\n\n\t\t\t\t\tif (e.keyCode !== 9) {\n\t\t\t\t\t\t// tab\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (elements.index(active) === -1) {\n\t\t\t\t\t\t// If current focus is not inside the popover\n\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey) {\n\t\t\t\t\t\t// Reverse tabbing order when shift key is pressed\n\t\t\t\t\t\tif (active === elements[0]) {\n\t\t\t\t\t\t\telements.last().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (active === elements.last()[0]) {\n\t\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, 0);\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n */\n\n/**\n * Show / hide a background layer behind a collection\n * @param  {boolean} Flag to indicate if the background should be shown or\n *   hidden\n * @param  {string} Class to assign to the background\n * @static\n */\nButtons.background = function (show, className, fade, insertPoint) {\n\tif (fade === undefined) {\n\t\tfade = 400;\n\t}\n\tif (!insertPoint) {\n\t\tinsertPoint = document.body;\n\t}\n\n\tif (show) {\n\t\t_fadeIn(\n\t\t\t$('<div/>').addClass(className).css('display', 'none').insertAfter(insertPoint),\n\t\t\tfade\n\t\t);\n\t}\n\telse {\n\t\t_fadeOut($('div.' + className), fade, function () {\n\t\t\t$(this).removeClass(className).remove();\n\t\t});\n\t}\n};\n\n/**\n * Instance selector - select Buttons instances based on an instance selector\n * value from the buttons assigned to a DataTable. This is only useful if\n * multiple instances are attached to a DataTable.\n * @param  {string|int|array} Instance selector - see `instance-selector`\n *   documentation on the DataTables site\n * @param  {array} Button instance array that was attached to the DataTables\n *   settings object\n * @return {array} Buttons instances\n * @static\n */\nButtons.instanceSelector = function (group, buttons) {\n\tif (group === undefined || group === null) {\n\t\treturn $.map(buttons, function (v) {\n\t\t\treturn v.inst;\n\t\t});\n\t}\n\n\tvar ret = [];\n\tvar names = $.map(buttons, function (v) {\n\t\treturn v.name;\n\t});\n\n\t// Flatten the group selector into an array of single options\n\tvar process = function (input) {\n\t\tif (Array.isArray(input)) {\n\t\t\tfor (var i = 0, ien = input.length; i < ien; i++) {\n\t\t\t\tprocess(input[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof input === 'string') {\n\t\t\tif (input.indexOf(',') !== -1) {\n\t\t\t\t// String selector, list of names\n\t\t\t\tprocess(input.split(','));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// String selector individual name\n\t\t\t\tvar idx = $.inArray(input.trim(), names);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tret.push(buttons[idx].inst);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof input === 'number') {\n\t\t\t// Index selector\n\t\t\tret.push(buttons[input].inst);\n\t\t}\n\t\telse if (typeof input === 'object') {\n\t\t\t// Actual instance selector\n\t\t\tret.push(input);\n\t\t}\n\t};\n\n\tprocess(group);\n\n\treturn ret;\n};\n\n/**\n * Button selector - select one or more buttons from a selector input so some\n * operation can be performed on them.\n * @param  {array} Button instances array that the selector should operate on\n * @param  {string|int|node|jQuery|array} Button selector - see\n *   `button-selector` documentation on the DataTables site\n * @return {array} Array of objects containing `inst` and `idx` properties of\n *   the selected buttons so you know which instance each button belongs to.\n * @static\n */\nButtons.buttonSelector = function (insts, selector) {\n\tvar ret = [];\n\tvar nodeBuilder = function (a, buttons, baseIdx) {\n\t\tvar button;\n\t\tvar idx;\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif (button) {\n\t\t\t\tidx = baseIdx !== undefined ? baseIdx + i : i + '';\n\n\t\t\t\ta.push({\n\t\t\t\t\tnode: button.node,\n\t\t\t\t\tname: button.conf.name,\n\t\t\t\t\tidx: idx\n\t\t\t\t});\n\n\t\t\t\tif (button.buttons) {\n\t\t\t\t\tnodeBuilder(a, button.buttons, idx + '-');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar run = function (selector, inst) {\n\t\tvar i, ien;\n\t\tvar buttons = [];\n\t\tnodeBuilder(buttons, inst.s.buttons);\n\n\t\tvar nodes = $.map(buttons, function (v) {\n\t\t\treturn v.node;\n\t\t});\n\n\t\tif (Array.isArray(selector) || selector instanceof $) {\n\t\t\tfor (i = 0, ien = selector.length; i < ien; i++) {\n\t\t\t\trun(selector[i], inst);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (selector === null || selector === undefined || selector === '*') {\n\t\t\t// Select all\n\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'number') {\n\t\t\t// Main button index selector\n\t\t\tif (inst.s.buttons[selector]) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: inst.s.buttons[selector].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'string') {\n\t\t\tif (selector.indexOf(',') !== -1) {\n\t\t\t\t// Split\n\t\t\t\tvar a = selector.split(',');\n\n\t\t\t\tfor (i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\t\trun(a[i].trim(), inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (selector.match(/^\\d+(\\-\\d+)*$/)) {\n\t\t\t\t// Sub-button index selector\n\t\t\t\tvar indexes = $.map(buttons, function (v) {\n\t\t\t\t\treturn v.idx;\n\t\t\t\t});\n\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[$.inArray(selector, indexes)].node\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (selector.indexOf(':name') !== -1) {\n\t\t\t\t// Button name selector\n\t\t\t\tvar name = selector.replace(':name', '');\n\n\t\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\t\tif (buttons[i].name === name) {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the nodes\n\t\t\t\t$(nodes)\n\t\t\t\t\t.filter(selector)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: this\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'object' && selector.nodeName) {\n\t\t\t// Node selector\n\t\t\tvar idx = $.inArray(selector, nodes);\n\n\t\t\tif (idx !== -1) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: nodes[idx]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\tvar inst = insts[i];\n\n\t\trun(selector, inst);\n\t}\n\n\treturn ret;\n};\n\n/**\n * Default function used for formatting output data.\n * @param {*} str Data to strip\n */\nButtons.stripData = function (str, config) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\t// Always remove script tags\n\tstr = str.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n\n\t// Always remove comments\n\tstr = str.replace(/<!\\-\\-.*?\\-\\->/g, '');\n\n\tif (!config || config.stripHtml) {\n\t\tstr = str.replace(/<[^>]*>/g, '');\n\t}\n\n\tif (!config || config.trim) {\n\t\tstr = str.replace(/^\\s+|\\s+$/g, '');\n\t}\n\n\tif (!config || config.stripNewlines) {\n\t\tstr = str.replace(/\\n/g, ' ');\n\t}\n\n\tif (!config || config.decodeEntities) {\n\t\tif (_entityDecoder) {\n\t\t\tstr = _entityDecoder(str);\n\t\t}\n\t\telse {\n\t\t\t_exportTextarea.innerHTML = str;\n\t\t\tstr = _exportTextarea.value;\n\t\t}\n\t}\n\n\treturn str;\n};\n\n/**\n * Provide a custom entity decoding function - e.g. a regex one, which can be\n * much faster than the built in DOM option, but also larger code size.\n * @param {function} fn\n */\nButtons.entityDecoder = function (fn) {\n\t_entityDecoder = fn;\n}\n\n/**\n * Buttons defaults. For full documentation, please refer to the docs/option\n * directory or the DataTables site.\n * @type {Object}\n * @static\n */\nButtons.defaults = {\n\tbuttons: ['copy', 'excel', 'csv', 'pdf', 'print'],\n\tname: 'main',\n\ttabIndex: 0,\n\tdom: {\n\t\tcontainer: {\n\t\t\ttag: 'div',\n\t\t\tclassName: 'dt-buttons'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\t// The element used for the dropdown\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: '',\n\t\t\t\t\ttag: 'div'\n\t\t\t\t},\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t\t// optionally\n\t\t\t// , button: IButton - buttons inside the collection container\n\t\t\t// , split: ISplit - splits inside the collection container\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'button',\n\t\t\tclassName: 'dt-button',\n\t\t\tactive: 'dt-button-active', // class name\n\t\t\tdisabled: 'disabled', // class name\n\t\t\tspacer: {\n\t\t\t\tclassName: 'dt-button-spacer',\n\t\t\t\ttag: 'span'\n\t\t\t},\n\t\t\tliner: {\n\t\t\t\ttag: 'span',\n\t\t\t\tclassName: ''\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tclassName: 'dt-button-split-drop-button dt-button',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\t// button to trigger the dropdown\n\t\t\t\talign: 'split-right',\n\t\t\t\tclassName: 'dt-button-split-drop',\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\t// wrap around both\n\t\t\t\tclassName: 'dt-button-split',\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Version information\n * @type {string}\n * @static\n */\nButtons.version = '2.4.2';\n\n$.extend(_dtButtons, {\n\tcollection: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.collection', 'Collection');\n\t\t},\n\t\tclassName: 'buttons-collection',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\tbutton.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tif (config._collection.parents('body').length) {\n\t\t\t\tthis.popover(false, config);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.popover(config._collection, config);\n\t\t\t}\n\n\t\t\t// When activated using a key - auto focus on the\n\t\t\t// first item in the popover\n\t\t\tif (e.type === 'keypress') {\n\t\t\t\t$('a, button', config._collection).eq(0).focus();\n\t\t\t}\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tsplit: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.split', 'Split');\n\t\t},\n\t\tclassName: 'buttons-split',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\treturn button.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tthis.popover(config._collection, config);\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tcopy: function (dt, conf) {\n\t\tif (_dtButtons.copyHtml5) {\n\t\t\treturn 'copyHtml5';\n\t\t}\n\t},\n\tcsv: function (dt, conf) {\n\t\tif (_dtButtons.csvHtml5 && _dtButtons.csvHtml5.available(dt, conf)) {\n\t\t\treturn 'csvHtml5';\n\t\t}\n\t},\n\texcel: function (dt, conf) {\n\t\tif (_dtButtons.excelHtml5 && _dtButtons.excelHtml5.available(dt, conf)) {\n\t\t\treturn 'excelHtml5';\n\t\t}\n\t},\n\tpdf: function (dt, conf) {\n\t\tif (_dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available(dt, conf)) {\n\t\t\treturn 'pdfHtml5';\n\t\t}\n\t},\n\tpageLength: function (dt) {\n\t\tvar lengthMenu = dt.settings()[0].aLengthMenu;\n\t\tvar vals = [];\n\t\tvar lang = [];\n\t\tvar text = function (dt) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'buttons.pageLength',\n\t\t\t\t{\n\t\t\t\t\t'-1': 'Show all rows',\n\t\t\t\t\t_: 'Show %d rows'\n\t\t\t\t},\n\t\t\t\tdt.page.len()\n\t\t\t);\n\t\t};\n\n\t\t// Support for DataTables 1.x 2D array\n\t\tif (Array.isArray(lengthMenu[0])) {\n\t\t\tvals = lengthMenu[0];\n\t\t\tlang = lengthMenu[1];\n\t\t}\n\t\telse {\n\t\t\tfor (var i = 0; i < lengthMenu.length; i++) {\n\t\t\t\tvar option = lengthMenu[i];\n\n\t\t\t\t// Support for DataTables 2 object in the array\n\t\t\t\tif ($.isPlainObject(option)) {\n\t\t\t\t\tvals.push(option.value);\n\t\t\t\t\tlang.push(option.label);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvals.push(option);\n\t\t\t\t\tlang.push(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\textend: 'collection',\n\t\t\ttext: text,\n\t\t\tclassName: 'buttons-page-length',\n\t\t\tautoClose: true,\n\t\t\tbuttons: $.map(vals, function (val, i) {\n\t\t\t\treturn {\n\t\t\t\t\ttext: lang[i],\n\t\t\t\t\tclassName: 'button-page-length',\n\t\t\t\t\taction: function (e, dt) {\n\t\t\t\t\t\tdt.page.len(val).draw();\n\t\t\t\t\t},\n\t\t\t\t\tinit: function (dt, node, conf) {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tvar fn = function () {\n\t\t\t\t\t\t\tthat.active(dt.page.len() === val);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdt.on('length.dt' + conf.namespace, fn);\n\t\t\t\t\t\tfn();\n\t\t\t\t\t},\n\t\t\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}),\n\t\t\tinit: function (dt, node, conf) {\n\t\t\t\tvar that = this;\n\t\t\t\tdt.on('length.dt' + conf.namespace, function () {\n\t\t\t\t\tthat.text(conf.text);\n\t\t\t\t});\n\t\t\t},\n\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t}\n\t\t};\n\t},\n\tspacer: {\n\t\tstyle: 'empty',\n\t\tspacer: true,\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.spacer', '');\n\t\t}\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Buttons group and individual button selector\nDataTable.Api.register('buttons()', function (group, selector) {\n\t// Argument shifting\n\tif (selector === undefined) {\n\t\tselector = group;\n\t\tgroup = undefined;\n\t}\n\n\tthis.selector.buttonGroup = group;\n\n\tvar res = this.iterator(\n\t\ttrue,\n\t\t'table',\n\t\tfunction (ctx) {\n\t\t\tif (ctx._buttons) {\n\t\t\t\treturn Buttons.buttonSelector(\n\t\t\t\t\tButtons.instanceSelector(group, ctx._buttons),\n\t\t\t\t\tselector\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\ttrue\n\t);\n\n\tres._groupSelector = group;\n\treturn res;\n});\n\n// Individual button selector\nDataTable.Api.register('button()', function (group, selector) {\n\t// just run buttons() and truncate\n\tvar buttons = this.buttons(group, selector);\n\n\tif (buttons.length > 1) {\n\t\tbuttons.splice(1, buttons.length);\n\t}\n\n\treturn buttons;\n});\n\n// Active buttons\nDataTable.Api.registerPlural('buttons().active()', 'button().active()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.active(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.active(set.node, flag);\n\t});\n});\n\n// Get / set button action\nDataTable.Api.registerPlural('buttons().action()', 'button().action()', function (action) {\n\tif (action === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.action(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.action(set.node, action);\n\t});\n});\n\n// Collection control\nDataTable.Api.registerPlural(\n\t'buttons().collectionRebuild()',\n\t'button().collectionRebuild()',\n\tfunction (buttons) {\n\t\treturn this.each(function (set) {\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tif (typeof buttons[i] === 'object') {\n\t\t\t\t\tbuttons[i].parentConf = set;\n\t\t\t\t}\n\t\t\t}\n\t\t\tset.inst.collectionRebuild(set.node, buttons);\n\t\t});\n\t}\n);\n\n// Enable / disable buttons\nDataTable.Api.register(['buttons().enable()', 'button().enable()'], function (flag) {\n\treturn this.each(function (set) {\n\t\tset.inst.enable(set.node, flag);\n\t});\n});\n\n// Disable buttons\nDataTable.Api.register(['buttons().disable()', 'button().disable()'], function () {\n\treturn this.each(function (set) {\n\t\tset.inst.disable(set.node);\n\t});\n});\n\n// Button index\nDataTable.Api.register('button().index()', function () {\n\tvar idx = null;\n\n\tthis.each(function (set) {\n\t\tvar res = set.inst.index(set.node);\n\n\t\tif (res !== null) {\n\t\t\tidx = res;\n\t\t}\n\t});\n\n\treturn idx;\n});\n\n// Get button nodes\nDataTable.Api.registerPlural('buttons().nodes()', 'button().node()', function () {\n\tvar jq = $();\n\n\t// jQuery will automatically reduce duplicates to a single entry\n\t$(\n\t\tthis.each(function (set) {\n\t\t\tjq = jq.add(set.inst.node(set.node));\n\t\t})\n\t);\n\n\treturn jq;\n});\n\n// Get / set button processing state\nDataTable.Api.registerPlural('buttons().processing()', 'button().processing()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.processing(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.processing(set.node, flag);\n\t});\n});\n\n// Get / set button text (i.e. the button labels)\nDataTable.Api.registerPlural('buttons().text()', 'button().text()', function (label) {\n\tif (label === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.text(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.text(set.node, label);\n\t});\n});\n\n// Trigger a button's action\nDataTable.Api.registerPlural('buttons().trigger()', 'button().trigger()', function () {\n\treturn this.each(function (set) {\n\t\tset.inst.node(set.node).trigger('click');\n\t});\n});\n\n// Button resolver to the popover\nDataTable.Api.register('button().popover()', function (content, options) {\n\treturn this.map(function (set) {\n\t\treturn set.inst._popover(content, this.button(this[0].node), options);\n\t});\n});\n\n// Get the container elements\nDataTable.Api.register('buttons().containers()', function () {\n\tvar jq = $();\n\tvar groupSelector = this._groupSelector;\n\n\t// We need to use the group selector directly, since if there are no buttons\n\t// the result set will be empty\n\tthis.iterator(true, 'table', function (ctx) {\n\t\tif (ctx._buttons) {\n\t\t\tvar insts = Buttons.instanceSelector(groupSelector, ctx._buttons);\n\n\t\t\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\t\t\tjq = jq.add(insts[i].container());\n\t\t\t}\n\t\t}\n\t});\n\n\treturn jq;\n});\n\nDataTable.Api.register('buttons().container()', function () {\n\t// API level of nesting is `buttons()` so we can zip into the containers method\n\treturn this.containers().eq(0);\n});\n\n// Add a new button\nDataTable.Api.register('button().add()', function (idx, conf, draw) {\n\tvar ctx = this.context;\n\n\t// Don't use `this` as it could be empty - select the instances directly\n\tif (ctx.length) {\n\t\tvar inst = Buttons.instanceSelector(this._groupSelector, ctx[0]._buttons);\n\n\t\tif (inst.length) {\n\t\t\tinst[0].add(conf, idx, draw);\n\t\t}\n\t}\n\n\treturn this.button(this._groupSelector, idx);\n});\n\n// Destroy the button sets selected\nDataTable.Api.register('buttons().destroy()', function () {\n\tthis.pluck('inst')\n\t\t.unique()\n\t\t.each(function (inst) {\n\t\t\tinst.destroy();\n\t\t});\n\n\treturn this;\n});\n\n// Remove a button\nDataTable.Api.registerPlural('buttons().remove()', 'buttons().remove()', function () {\n\tthis.each(function (set) {\n\t\tset.inst.remove(set.node);\n\t});\n\n\treturn this;\n});\n\n// Information box that can be used by buttons\nvar _infoTimer;\nDataTable.Api.register('buttons.info()', function (title, message, time) {\n\tvar that = this;\n\n\tif (title === false) {\n\t\tthis.off('destroy.btn-info');\n\t\t_fadeOut($('#datatables_buttons_info'), 400, function () {\n\t\t\t$(this).remove();\n\t\t});\n\t\tclearTimeout(_infoTimer);\n\t\t_infoTimer = null;\n\n\t\treturn this;\n\t}\n\n\tif (_infoTimer) {\n\t\tclearTimeout(_infoTimer);\n\t}\n\n\tif ($('#datatables_buttons_info').length) {\n\t\t$('#datatables_buttons_info').remove();\n\t}\n\n\ttitle = title ? '<h2>' + title + '</h2>' : '';\n\n\t_fadeIn(\n\t\t$('<div id=\"datatables_buttons_info\" class=\"dt-button-info\"/>')\n\t\t\t.html(title)\n\t\t\t.append($('<div/>')[typeof message === 'string' ? 'html' : 'append'](message))\n\t\t\t.css('display', 'none')\n\t\t\t.appendTo('body')\n\t);\n\n\tif (time !== undefined && time !== 0) {\n\t\t_infoTimer = setTimeout(function () {\n\t\t\tthat.buttons.info(false);\n\t\t}, time);\n\t}\n\n\tthis.on('destroy.btn-info', function () {\n\t\tthat.buttons.info(false);\n\t});\n\n\treturn this;\n});\n\n// Get data from the table for export - this is common to a number of plug-in\n// buttons so it is included in the Buttons core library\nDataTable.Api.register('buttons.exportData()', function (options) {\n\tif (this.context.length) {\n\t\treturn _exportData(new DataTable.Api(this.context[0]), options);\n\t}\n});\n\n// Get information about the export that is common to many of the export data\n// types (DRY)\nDataTable.Api.register('buttons.exportInfo()', function (conf) {\n\tif (!conf) {\n\t\tconf = {};\n\t}\n\n\treturn {\n\t\tfilename: _filename(conf),\n\t\ttitle: _title(conf),\n\t\tmessageTop: _message(this, conf.message || conf.messageTop, 'top'),\n\t\tmessageBottom: _message(this, conf.messageBottom, 'bottom')\n\t};\n});\n\n/**\n * Get the file name for an exported file.\n *\n * @param {object}\tconfig Button configuration\n * @param {boolean} incExtension Include the file name extension\n */\nvar _filename = function (config) {\n\t// Backwards compatibility\n\tvar filename =\n\t\tconfig.filename === '*' &&\n\t\tconfig.title !== '*' &&\n\t\tconfig.title !== undefined &&\n\t\tconfig.title !== null &&\n\t\tconfig.title !== ''\n\t\t\t? config.title\n\t\t\t: config.filename;\n\n\tif (typeof filename === 'function') {\n\t\tfilename = filename();\n\t}\n\n\tif (filename === undefined || filename === null) {\n\t\treturn null;\n\t}\n\n\tif (filename.indexOf('*') !== -1) {\n\t\tfilename = filename.replace('*', $('head > title').text()).trim();\n\t}\n\n\t// Strip characters which the OS will object to\n\tfilename = filename.replace(/[^a-zA-Z0-9_\\u00A1-\\uFFFF\\.,\\-_ !\\(\\)]/g, '');\n\n\tvar extension = _stringOrFunction(config.extension);\n\tif (!extension) {\n\t\textension = '';\n\t}\n\n\treturn filename + extension;\n};\n\n/**\n * Simply utility method to allow parameters to be given as a function\n *\n * @param {undefined|string|function} option Option\n * @return {null|string} Resolved value\n */\nvar _stringOrFunction = function (option) {\n\tif (option === null || option === undefined) {\n\t\treturn null;\n\t}\n\telse if (typeof option === 'function') {\n\t\treturn option();\n\t}\n\treturn option;\n};\n\n/**\n * Get the title for an exported file.\n *\n * @param {object} config\tButton configuration\n */\nvar _title = function (config) {\n\tvar title = _stringOrFunction(config.title);\n\n\treturn title === null\n\t\t? null\n\t\t: title.indexOf('*') !== -1\n\t\t? title.replace('*', $('head > title').text() || 'Exported data')\n\t\t: title;\n};\n\nvar _message = function (dt, option, position) {\n\tvar message = _stringOrFunction(option);\n\tif (message === null) {\n\t\treturn null;\n\t}\n\n\tvar caption = $('caption', dt.table().container()).eq(0);\n\tif (message === '*') {\n\t\tvar side = caption.css('caption-side');\n\t\tif (side !== position) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn caption.length ? caption.text() : '';\n\t}\n\n\treturn message;\n};\n\nvar _exportTextarea = $('<textarea/>')[0];\nvar _exportData = function (dt, inOpts) {\n\tvar config = $.extend(\n\t\ttrue,\n\t\t{},\n\t\t{\n\t\t\trows: null,\n\t\t\tcolumns: '',\n\t\t\tmodifier: {\n\t\t\t\tsearch: 'applied',\n\t\t\t\torder: 'applied'\n\t\t\t},\n\t\t\torthogonal: 'display',\n\t\t\tstripHtml: true,\n\t\t\tstripNewlines: true,\n\t\t\tdecodeEntities: true,\n\t\t\ttrim: true,\n\t\t\tformat: {\n\t\t\t\theader: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tfooter: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tbody: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcustomizeData: null\n\t\t},\n\t\tinOpts\n\t);\n\n\tvar header = dt\n\t\t.columns(config.columns)\n\t\t.indexes()\n\t\t.map(function (idx) {\n\t\t\tvar el = dt.column(idx).header();\n\t\t\treturn config.format.header(el.innerHTML, idx, el);\n\t\t})\n\t\t.toArray();\n\n\tvar footer = dt.table().footer()\n\t\t? dt\n\t\t\t\t.columns(config.columns)\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\tvar el = dt.column(idx).footer();\n\t\t\t\t\treturn config.format.footer(el ? el.innerHTML : '', idx, el);\n\t\t\t\t})\n\t\t\t\t.toArray()\n\t\t: null;\n\n\t// If Select is available on this table, and any rows are selected, limit the export\n\t// to the selected rows. If no rows are selected, all rows will be exported. Specify\n\t// a `selected` modifier to control directly.\n\tvar modifier = $.extend({}, config.modifier);\n\tif (dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined) {\n\t\tif (dt.rows(config.rows, $.extend({ selected: true }, modifier)).any()) {\n\t\t\t$.extend(modifier, { selected: true });\n\t\t}\n\t}\n\n\tvar rowIndexes = dt.rows(config.rows, modifier).indexes().toArray();\n\tvar selectedCells = dt.cells(rowIndexes, config.columns);\n\tvar cells = selectedCells.render(config.orthogonal).toArray();\n\tvar cellNodes = selectedCells.nodes().toArray();\n\n\tvar columns = header.length;\n\tvar rows = columns > 0 ? cells.length / columns : 0;\n\tvar body = [];\n\tvar cellCounter = 0;\n\n\tfor (var i = 0, ien = rows; i < ien; i++) {\n\t\tvar row = [columns];\n\n\t\tfor (var j = 0; j < columns; j++) {\n\t\t\trow[j] = config.format.body(cells[cellCounter], i, j, cellNodes[cellCounter]);\n\t\t\tcellCounter++;\n\t\t}\n\n\t\tbody[i] = row;\n\t}\n\n\tvar data = {\n\t\theader: header,\n\t\tfooter: footer,\n\t\tbody: body\n\t};\n\n\tif (config.customizeData) {\n\t\tconfig.customizeData(data);\n\t}\n\n\treturn data;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interface\n */\n\n// Attach to DataTables objects for global access\n$.fn.dataTable.Buttons = Buttons;\n$.fn.DataTable.Buttons = Buttons;\n\n// DataTables creation - check if the buttons have been defined for this table,\n// they will have been if the `B` option was used in `dom`, otherwise we should\n// create the buttons instance here so they can be inserted into the document\n// using the API. Listen for `init` for compatibility with pre 1.10.10, but to\n// be removed in future.\n$(document).on('init.dt plugin-init.dt', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar opts = settings.oInit.buttons || DataTable.defaults.buttons;\n\n\tif (opts && !settings._buttons) {\n\t\tnew Buttons(settings, opts).container();\n\t}\n});\n\nfunction _init(settings, options) {\n\tvar api = new DataTable.Api(settings);\n\tvar opts = options ? options : api.init().buttons || DataTable.defaults.buttons;\n\n\treturn new Buttons(api, opts).container();\n}\n\n// DataTables `dom` feature option\nDataTable.ext.feature.push({\n\tfnInit: _init,\n\tcFeature: 'B'\n});\n\n// DataTables 2 layout feature\nif (DataTable.ext.features) {\n\tDataTable.ext.features.register('buttons', _init);\n}\n\n\nreturn DataTable;\n}));\n","/*!\n * HTML5 export buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n *\n * FileSaver.js (1.3.3) - MIT license\n * Copyright © 2016 Eli Grey - http://eligrey.com\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $, jszip, pdfmake) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document, jszip, pdfmake );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, jszip, pdfmake, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Allow the constructor to pass in JSZip and PDFMake from external requires.\n// Otherwise, use globally defined variables, if they are available.\nvar useJszip;\nvar usePdfmake;\n\nfunction _jsZip() {\n\treturn useJszip || window.JSZip;\n}\nfunction _pdfMake() {\n\treturn usePdfmake || window.pdfMake;\n}\n\nDataTable.Buttons.pdfMake = function (_) {\n\tif (!_) {\n\t\treturn _pdfMake();\n\t}\n\tusePdfmake = _;\n};\n\nDataTable.Buttons.jszip = function (_) {\n\tif (!_) {\n\t\treturn _jsZip();\n\t}\n\tuseJszip = _;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * FileSaver.js dependency\n */\n\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\nvar _saveAs = (function (view) {\n\t'use strict';\n\t// IE <10 is explicitly unsupported\n\tif (\n\t\ttypeof view === 'undefined' ||\n\t\t(typeof navigator !== 'undefined' && /MSIE [1-9]\\./.test(navigator.userAgent))\n\t) {\n\t\treturn;\n\t}\n\tvar doc = view.document,\n\t\t// only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\tget_URL = function () {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t},\n\t\tsave_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a'),\n\t\tcan_use_save_link = 'download' in save_link,\n\t\tclick = function (node) {\n\t\t\tvar event = new MouseEvent('click');\n\t\t\tnode.dispatchEvent(event);\n\t\t},\n\t\tis_safari = /constructor/i.test(view.HTMLElement) || view.safari,\n\t\tis_chrome_ios = /CriOS\\/[\\d]+/.test(navigator.userAgent),\n\t\tthrow_outside = function (ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function () {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t},\n\t\tforce_saveable_type = 'application/octet-stream',\n\t\t// the Blob API is fundamentally broken as there is no \"downloadfinished\" event to subscribe to\n\t\tarbitrary_revoke_timeout = 1000 * 40, // in ms\n\t\trevoke = function (file) {\n\t\t\tvar revoker = function () {\n\t\t\t\tif (typeof file === 'string') {\n\t\t\t\t\t// file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t},\n\t\tdispatch = function (filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver['on' + event_types[i]];\n\t\t\t\tif (typeof listener === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tauto_bom = function (blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (\n\t\t\t\t/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n\t\t\t\t\tblob.type\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n\t\t\t}\n\t\t\treturn blob;\n\t\t},\n\t\tFileSaver = function (blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar filesaver = this,\n\t\t\t\ttype = blob.type,\n\t\t\t\tforce = type === force_saveable_type,\n\t\t\t\tobject_url,\n\t\t\t\tdispatch_all = function () {\n\t\t\t\t\tdispatch(filesaver, 'writestart progress write writeend'.split(' '));\n\t\t\t\t},\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\tfs_error = function () {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn't allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function () {\n\t\t\t\t\t\t\tvar url = is_chrome_ios\n\t\t\t\t\t\t\t\t? reader.result\n\t\t\t\t\t\t\t\t: reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\n\t\t\t\t\t\t\tvar popup = view.open(url, '_blank');\n\t\t\t\t\t\t\tif (!popup) view.location.href = url;\n\t\t\t\t\t\t\turl = undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar opened = view.open(object_url, '_blank');\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t};\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t},\n\t\tFS_proto = FileSaver.prototype,\n\t\tsaveAs = function (blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || 'download', no_auto_bom);\n\t\t};\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {\n\t\treturn function (blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || 'download';\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function () {};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\treturn saveAs;\n})(\n\t(typeof self !== 'undefined' && self) ||\n\t\t(typeof window !== 'undefined' && window) ||\n\t\tthis.content\n);\n\n// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`\n// since this file can be loaded before Button's core!\nDataTable.fileSave = _saveAs;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local (private) functions\n */\n\n/**\n * Get the sheet name for Excel exports.\n *\n * @param {object}\tconfig Button configuration\n */\nvar _sheetname = function (config) {\n\tvar sheetName = 'Sheet1';\n\n\tif (config.sheetName) {\n\t\tsheetName = config.sheetName.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '');\n\t}\n\n\treturn sheetName;\n};\n\n/**\n * Get the newline character(s)\n *\n * @param {object}\tconfig Button configuration\n * @return {string}\t\t\t\tNewline character\n */\nvar _newLine = function (config) {\n\treturn config.newline ? config.newline : navigator.userAgent.match(/Windows/) ? '\\r\\n' : '\\n';\n};\n\n/**\n * Combine the data from the `buttons.exportData` method into a string that\n * will be used in the export file.\n *\n * @param\t{DataTable.Api} dt\t\t DataTables API instance\n * @param\t{object}\t\t\t\tconfig Button configuration\n * @return {object}\t\t\t\t\t\t\t The data to export\n */\nvar _exportData = function (dt, config) {\n\tvar newLine = _newLine(config);\n\tvar data = dt.buttons.exportData(config.exportOptions);\n\tvar boundary = config.fieldBoundary;\n\tvar separator = config.fieldSeparator;\n\tvar reBoundary = new RegExp(boundary, 'g');\n\tvar escapeChar = config.escapeChar !== undefined ? config.escapeChar : '\\\\';\n\tvar join = function (a) {\n\t\tvar s = '';\n\n\t\t// If there is a field boundary, then we might need to escape it in\n\t\t// the source data\n\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts += separator;\n\t\t\t}\n\n\t\t\ts += boundary\n\t\t\t\t? boundary + ('' + a[i]).replace(reBoundary, escapeChar + boundary) + boundary\n\t\t\t\t: a[i];\n\t\t}\n\n\t\treturn s;\n\t};\n\n\tvar header = config.header ? join(data.header) + newLine : '';\n\tvar footer = config.footer && data.footer ? newLine + join(data.footer) : '';\n\tvar body = [];\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tbody.push(join(data.body[i]));\n\t}\n\n\treturn {\n\t\tstr: header + body.join(newLine) + footer,\n\t\trows: body.length\n\t};\n};\n\n/**\n * Older versions of Safari (prior to tech preview 18) don't support the\n * download option required.\n *\n * @return {Boolean} `true` if old Safari\n */\nvar _isDuffSafari = function () {\n\tvar safari =\n\t\tnavigator.userAgent.indexOf('Safari') !== -1 &&\n\t\tnavigator.userAgent.indexOf('Chrome') === -1 &&\n\t\tnavigator.userAgent.indexOf('Opera') === -1;\n\n\tif (!safari) {\n\t\treturn false;\n\t}\n\n\tvar version = navigator.userAgent.match(/AppleWebKit\\/(\\d+\\.\\d+)/);\n\tif (version && version.length > 1 && version[1] * 1 < 603.1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Convert from numeric position to letter for column names in Excel\n * @param  {int} n Column number\n * @return {string} Column letter(s) name\n */\nfunction createCellPos(n) {\n\tvar ordA = 'A'.charCodeAt(0);\n\tvar ordZ = 'Z'.charCodeAt(0);\n\tvar len = ordZ - ordA + 1;\n\tvar s = '';\n\n\twhile (n >= 0) {\n\t\ts = String.fromCharCode((n % len) + ordA) + s;\n\t\tn = Math.floor(n / len) - 1;\n\t}\n\n\treturn s;\n}\n\ntry {\n\tvar _serialiser = new XMLSerializer();\n\tvar _ieExcel;\n} catch (t) {}\n\n/**\n * Recursively add XML files from an object's structure to a ZIP file. This\n * allows the XSLX file to be easily defined with an object's structure matching\n * the files structure.\n *\n * @param {JSZip} zip ZIP package\n * @param {object} obj Object to add (recursive)\n */\nfunction _addToZip(zip, obj) {\n\tif (_ieExcel === undefined) {\n\t\t// Detect if we are dealing with IE's _awful_ serialiser by seeing if it\n\t\t// drop attributes\n\t\t_ieExcel =\n\t\t\t_serialiser\n\t\t\t\t.serializeToString(\n\t\t\t\t\tnew window.DOMParser().parseFromString(\n\t\t\t\t\t\texcelStrings['xl/worksheets/sheet1.xml'],\n\t\t\t\t\t\t'text/xml'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.indexOf('xmlns:r') === -1;\n\t}\n\n\t$.each(obj, function (name, val) {\n\t\tif ($.isPlainObject(val)) {\n\t\t\tvar newDir = zip.folder(name);\n\t\t\t_addToZip(newDir, val);\n\t\t}\n\t\telse {\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE's XML serialiser will drop some name space attributes from\n\t\t\t\t// from the root node, so we need to save them. Do this by\n\t\t\t\t// replacing the namespace nodes with a regular attribute that\n\t\t\t\t// we convert back when serialised. Edge does not have this\n\t\t\t\t// issue\n\t\t\t\tvar worksheet = val.childNodes[0];\n\t\t\t\tvar i, ien;\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tfor (i = worksheet.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attrName = worksheet.attributes[i].nodeName;\n\t\t\t\t\tvar attrValue = worksheet.attributes[i].nodeValue;\n\n\t\t\t\t\tif (attrName.indexOf(':') !== -1) {\n\t\t\t\t\t\tattrs.push({ name: attrName, value: attrValue });\n\n\t\t\t\t\t\tworksheet.removeAttribute(attrName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ien = attrs.length; i < ien; i++) {\n\t\t\t\t\tvar attr = val.createAttribute(\n\t\t\t\t\t\tattrs[i].name.replace(':', '_dt_b_namespace_token_')\n\t\t\t\t\t);\n\t\t\t\t\tattr.value = attrs[i].value;\n\t\t\t\t\tworksheet.setAttributeNode(attr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar str = _serialiser.serializeToString(val);\n\n\t\t\t// Fix IE's XML\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE doesn't include the XML declaration\n\t\t\t\tif (str.indexOf('<?xml') === -1) {\n\t\t\t\t\tstr = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + str;\n\t\t\t\t}\n\n\t\t\t\t// Return namespace attributes to being as such\n\t\t\t\tstr = str.replace(/_dt_b_namespace_token_/g, ':');\n\n\t\t\t\t// Remove testing name space that IE puts into the space preserve attr\n\t\t\t\tstr = str.replace(/xmlns:NS[\\d]+=\"\" NS[\\d]+:/g, '');\n\t\t\t}\n\n\t\t\t// Safari, IE and Edge will put empty name space attributes onto\n\t\t\t// various elements making them useless. This strips them out\n\t\t\tstr = str.replace(/<([^<>]*?) xmlns=\"\"([^<>]*?)>/g, '<$1 $2>');\n\n\t\t\tzip.file(name, str);\n\t\t}\n\t});\n}\n\n/**\n * Create an XML node and add any children, attributes, etc without needing to\n * be verbose in the DOM.\n *\n * @param  {object} doc      XML document\n * @param  {string} nodeName Node name\n * @param  {object} opts     Options - can be `attr` (attributes), `children`\n *   (child nodes) and `text` (text content)\n * @return {node}            Created node\n */\nfunction _createNode(doc, nodeName, opts) {\n\tvar tempNode = doc.createElement(nodeName);\n\n\tif (opts) {\n\t\tif (opts.attr) {\n\t\t\t$(tempNode).attr(opts.attr);\n\t\t}\n\n\t\tif (opts.children) {\n\t\t\t$.each(opts.children, function (key, value) {\n\t\t\t\ttempNode.appendChild(value);\n\t\t\t});\n\t\t}\n\n\t\tif (opts.text !== null && opts.text !== undefined) {\n\t\t\ttempNode.appendChild(doc.createTextNode(opts.text));\n\t\t}\n\t}\n\n\treturn tempNode;\n}\n\n/**\n * Get the width for an Excel column based on the contents of that column\n * @param  {object} data Data for export\n * @param  {int}    col  Column index\n * @return {int}         Column width\n */\nfunction _excelColWidth(data, col) {\n\tvar max = data.header[col].length;\n\tvar len, lineSplit, str;\n\n\tif (data.footer && data.footer[col].length > max) {\n\t\tmax = data.footer[col].length;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tvar point = data.body[i][col];\n\t\tstr = point !== null && point !== undefined ? point.toString() : '';\n\n\t\t// If there is a newline character, workout the width of the column\n\t\t// based on the longest line in the string\n\t\tif (str.indexOf('\\n') !== -1) {\n\t\t\tlineSplit = str.split('\\n');\n\t\t\tlineSplit.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\n\t\t\tlen = lineSplit[0].length;\n\t\t}\n\t\telse {\n\t\t\tlen = str.length;\n\t\t}\n\n\t\tif (len > max) {\n\t\t\tmax = len;\n\t\t}\n\n\t\t// Max width rather than having potentially massive column widths\n\t\tif (max > 40) {\n\t\t\treturn 54; // 40 * 1.35\n\t\t}\n\t}\n\n\tmax *= 1.35;\n\n\t// And a min width\n\treturn max > 6 ? max : 6;\n}\n\n// Excel - Pre-defined strings to build a basic XLSX file\nvar excelStrings = {\n\t'_rels/.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'xl/_rels/workbook.xml.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'[Content_Types].xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n\t\t'<Default Extension=\"xml\" ContentType=\"application/xml\" />' +\n\t\t'<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' +\n\t\t'<Default Extension=\"jpeg\" ContentType=\"image/jpeg\" />' +\n\t\t'<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' +\n\t\t'<Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' +\n\t\t'<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" />' +\n\t\t'</Types>',\n\n\t'xl/workbook.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n\t\t'<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"24816\"/>' +\n\t\t'<workbookPr showInkAnnotation=\"0\" autoCompressPictures=\"0\"/>' +\n\t\t'<bookViews>' +\n\t\t'<workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"25600\" windowHeight=\"19020\" tabRatio=\"500\"/>' +\n\t\t'</bookViews>' +\n\t\t'<sheets>' +\n\t\t'<sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/>' +\n\t\t'</sheets>' +\n\t\t'<definedNames/>' +\n\t\t'</workbook>',\n\n\t'xl/worksheets/sheet1.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<sheetData/>' +\n\t\t'<mergeCells count=\"0\"/>' +\n\t\t'</worksheet>',\n\n\t'xl/styles.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n\t\t'<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<numFmts count=\"6\">' +\n\t\t'<numFmt numFmtId=\"164\" formatCode=\"#,##0.00_- [$$-45C]\"/>' +\n\t\t'<numFmt numFmtId=\"165\" formatCode=\"&quot;£&quot;#,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"166\" formatCode=\"[$€-2] #,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"167\" formatCode=\"0.0%\"/>' +\n\t\t'<numFmt numFmtId=\"168\" formatCode=\"#,##0;(#,##0)\"/>' +\n\t\t'<numFmt numFmtId=\"169\" formatCode=\"#,##0.00;(#,##0.00)\"/>' +\n\t\t'</numFmts>' +\n\t\t'<fonts count=\"5\" x14ac:knownFonts=\"1\">' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<color rgb=\"FFFFFFFF\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<b />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<i />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<u />' +\n\t\t'</font>' +\n\t\t'</fonts>' +\n\t\t'<fills count=\"6\">' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"none\" />' +\n\t\t'</fill>' +\n\t\t'<fill>' + // Excel appears to use this as a dotted background regardless of values but\n\t\t'<patternFill patternType=\"none\" />' + // to be valid to the schema, use a patternFill\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD9D9D9\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD99795\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6efce\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6cfef\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'</fills>' +\n\t\t'<borders count=\"2\">' +\n\t\t'<border>' +\n\t\t'<left />' +\n\t\t'<right />' +\n\t\t'<top />' +\n\t\t'<bottom />' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'<border diagonalUp=\"false\" diagonalDown=\"false\">' +\n\t\t'<left style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</left>' +\n\t\t'<right style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</right>' +\n\t\t'<top style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</top>' +\n\t\t'<bottom style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</bottom>' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'</borders>' +\n\t\t'<cellStyleXfs count=\"1\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" />' +\n\t\t'</cellStyleXfs>' +\n\t\t'<cellXfs count=\"68\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"left\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"center\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"right\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"fill\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment textRotation=\"90\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment wrapText=\"1\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"9\"   fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"169\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"3\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"4\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'</cellXfs>' +\n\t\t'<cellStyles count=\"1\">' +\n\t\t'<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\" />' +\n\t\t'</cellStyles>' +\n\t\t'<dxfs count=\"0\" />' +\n\t\t'<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\" />' +\n\t\t'</styleSheet>'\n};\n// Note we could use 3 `for` loops for the styles, but when gzipped there is\n// virtually no difference in size, since the above can be easily compressed\n\n// Pattern matching for special number formats. Perhaps this should be exposed\n// via an API in future?\n// Ref: section 3.8.30 - built in formatters in open spreadsheet\n//   https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf\nvar _excelSpecials = [\n\t{\n\t\tmatch: /^\\-?\\d+\\.\\d%$/,\n\t\tstyle: 60,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent with d.p.\n\t{\n\t\tmatch: /^\\-?\\d+\\.?\\d*%$/,\n\t\tstyle: 56,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent\n\t{ match: /^\\-?\\$[\\d,]+.?\\d*$/, style: 57 }, // Dollars\n\t{ match: /^\\-?£[\\d,]+.?\\d*$/, style: 58 }, // Pounds\n\t{ match: /^\\-?€[\\d,]+.?\\d*$/, style: 59 }, // Euros\n\t{ match: /^\\-?\\d+$/, style: 65 }, // Numbers without thousand separators\n\t{ match: /^\\-?\\d+\\.\\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators\n\t{\n\t\tmatch: /^\\([\\d,]+\\)$/,\n\t\tstyle: 61,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets\n\t{\n\t\tmatch: /^\\([\\d,]+\\.\\d{2}\\)$/,\n\t\tstyle: 62,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets - 2d.p.\n\t{ match: /^\\-?[\\d,]+$/, style: 63 }, // Numbers with thousand separators\n\t{ match: /^\\-?[\\d,]+\\.\\d{2}$/, style: 64 },\n\t{\n\t\tmatch: /^[\\d]{4}\\-[01][\\d]\\-[0123][\\d]$/,\n\t\tstyle: 67,\n\t\tfmt: function (d) {\n\t\t\treturn Math.round(25569 + Date.parse(d) / (86400 * 1000));\n\t\t}\n\t} //Date yyyy-mm-dd\n];\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\n\n//\n// Copy to clipboard\n//\nDataTable.ext.buttons.copyHtml5 = {\n\tclassName: 'buttons-copy buttons-html5',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.copy', 'Copy');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar exportData = _exportData(dt, config);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar newline = _newLine(config);\n\t\tvar output = exportData.str;\n\t\tvar hiddenDiv = $('<div/>').css({\n\t\t\theight: 1,\n\t\t\twidth: 1,\n\t\t\toverflow: 'hidden',\n\t\t\tposition: 'fixed',\n\t\t\ttop: 0,\n\t\t\tleft: 0\n\t\t});\n\n\t\tif (info.title) {\n\t\t\toutput = info.title + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageTop) {\n\t\t\toutput = info.messageTop + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\toutput = output + newline + newline + info.messageBottom;\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tvar textarea = $('<textarea readonly/>').val(output).appendTo(hiddenDiv);\n\n\t\t// For browsers that support the copy execCommand, try to use it\n\t\tif (document.queryCommandSupported('copy')) {\n\t\t\thiddenDiv.appendTo(dt.table().container());\n\t\t\ttextarea[0].focus();\n\t\t\ttextarea[0].select();\n\n\t\t\ttry {\n\t\t\t\tvar successful = document.execCommand('copy');\n\t\t\t\thiddenDiv.remove();\n\n\t\t\t\tif (successful) {\n\t\t\t\t\tdt.buttons.info(\n\t\t\t\t\t\tdt.i18n('buttons.copyTitle', 'Copy to clipboard'),\n\t\t\t\t\t\tdt.i18n(\n\t\t\t\t\t\t\t'buttons.copySuccess',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t1: 'Copied one row to clipboard',\n\t\t\t\t\t\t\t\t_: 'Copied %d rows to clipboard'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texportData.rows\n\t\t\t\t\t\t),\n\t\t\t\t\t\t2000\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.processing(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (t) {}\n\t\t}\n\n\t\t// Otherwise we show the text box and instruct the user to use it\n\t\tvar message = $(\n\t\t\t'<span>' +\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.copyKeys',\n\t\t\t\t\t'Press <i>ctrl</i> or <i>\\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>' +\n\t\t\t\t\t\t'To cancel, click this message or press escape.'\n\t\t\t\t) +\n\t\t\t\t'</span>'\n\t\t).append(hiddenDiv);\n\n\t\tdt.buttons.info(dt.i18n('buttons.copyTitle', 'Copy to clipboard'), message, 0);\n\n\t\t// Select the text so when the user activates their system clipboard\n\t\t// it will copy that text\n\t\ttextarea[0].focus();\n\t\ttextarea[0].select();\n\n\t\t// Event to hide the message when the user is done\n\t\tvar container = $(message).closest('.dt-button-info');\n\t\tvar close = function () {\n\t\t\tcontainer.off('click.buttons-copy');\n\t\t\t$(document).off('.buttons-copy');\n\t\t\tdt.buttons.info(false);\n\t\t};\n\n\t\tcontainer.on('click.buttons-copy', close);\n\t\t$(document)\n\t\t\t.on('keydown.buttons-copy', function (e) {\n\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t// esc\n\t\t\t\t\tclose();\n\t\t\t\t\tthat.processing(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('copy.buttons-copy cut.buttons-copy', function () {\n\t\t\t\tclose();\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t},\n\n\texportOptions: {},\n\n\tfieldSeparator: '\\t',\n\n\tfieldBoundary: '',\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*'\n};\n\n//\n// CSV export\n//\nDataTable.ext.buttons.csvHtml5 = {\n\tbom: false,\n\n\tclassName: 'buttons-csv buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && window.Blob;\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.csv', 'CSV');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\t// Set the text\n\t\tvar output = _exportData(dt, config).str;\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar charset = config.charset;\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tif (charset !== false) {\n\t\t\tif (!charset) {\n\t\t\t\tcharset = document.characterSet || document.charset;\n\t\t\t}\n\n\t\t\tif (charset) {\n\t\t\t\tcharset = ';charset=' + charset;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tcharset = '';\n\t\t}\n\n\t\tif (config.bom) {\n\t\t\toutput = String.fromCharCode(0xfeff) + output;\n\t\t}\n\n\t\t_saveAs(new Blob([output], { type: 'text/csv' + charset }), info.filename, true);\n\n\t\tthis.processing(false);\n\t},\n\n\tfilename: '*',\n\n\textension: '.csv',\n\n\texportOptions: {},\n\n\tfieldSeparator: ',',\n\n\tfieldBoundary: '\"',\n\n\tescapeChar: '\"',\n\n\tcharset: null,\n\n\theader: true,\n\n\tfooter: false\n};\n\n//\n// Excel (xlsx) export\n//\nDataTable.ext.buttons.excelHtml5 = {\n\tclassName: 'buttons-excel buttons-html5',\n\n\tavailable: function () {\n\t\treturn (\n\t\t\twindow.FileReader !== undefined &&\n\t\t\t_jsZip() !== undefined &&\n\t\t\t!_isDuffSafari() &&\n\t\t\t_serialiser\n\t\t);\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.excel', 'Excel');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar rowPos = 0;\n\t\tvar dataStartRow, dataEndRow;\n\t\tvar getXml = function (type) {\n\t\t\tvar str = excelStrings[type];\n\n\t\t\t//str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );\n\n\t\t\treturn $.parseXML(str);\n\t\t};\n\t\tvar rels = getXml('xl/worksheets/sheet1.xml');\n\t\tvar relsGet = rels.getElementsByTagName('sheetData')[0];\n\n\t\tvar xlsx = {\n\t\t\t_rels: {\n\t\t\t\t'.rels': getXml('_rels/.rels')\n\t\t\t},\n\t\t\txl: {\n\t\t\t\t_rels: {\n\t\t\t\t\t'workbook.xml.rels': getXml('xl/_rels/workbook.xml.rels')\n\t\t\t\t},\n\t\t\t\t'workbook.xml': getXml('xl/workbook.xml'),\n\t\t\t\t'styles.xml': getXml('xl/styles.xml'),\n\t\t\t\tworksheets: {\n\t\t\t\t\t'sheet1.xml': rels\n\t\t\t\t}\n\t\t\t},\n\t\t\t'[Content_Types].xml': getXml('[Content_Types].xml')\n\t\t};\n\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar currentRow, rowNode;\n\t\tvar addRow = function (row) {\n\t\t\tcurrentRow = rowPos + 1;\n\t\t\trowNode = _createNode(rels, 'row', { attr: { r: currentRow } });\n\n\t\t\tfor (var i = 0, ien = row.length; i < ien; i++) {\n\t\t\t\t// Concat both the Cell Columns as a letter and the Row of the cell.\n\t\t\t\tvar cellId = createCellPos(i) + '' + currentRow;\n\t\t\t\tvar cell = null;\n\n\t\t\t\t// For null, undefined of blank cell, continue so it doesn't create the _createNode\n\t\t\t\tif (row[i] === null || row[i] === undefined || row[i] === '') {\n\t\t\t\t\tif (config.createEmptyCells === true) {\n\t\t\t\t\t\trow[i] = '';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar originalContent = row[i];\n\t\t\t\trow[i] = typeof row[i].trim === 'function' ? row[i].trim() : row[i];\n\n\t\t\t\t// Special number formatting options\n\t\t\t\tfor (var j = 0, jen = _excelSpecials.length; j < jen; j++) {\n\t\t\t\t\tvar special = _excelSpecials[j];\n\n\t\t\t\t\t// TODO Need to provide the ability for the specials to say\n\t\t\t\t\t// if they are returning a string, since at the moment it is\n\t\t\t\t\t// assumed to be a number\n\t\t\t\t\tif (row[i].match && !row[i].match(/^0\\d+/) && row[i].match(special.match)) {\n\t\t\t\t\t\tvar val = row[i].replace(/[^\\d\\.\\-]/g, '');\n\n\t\t\t\t\t\tif (special.fmt) {\n\t\t\t\t\t\t\tval = special.fmt(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tr: cellId,\n\t\t\t\t\t\t\t\ts: special.style\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: val })]\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof row[i] === 'number' ||\n\t\t\t\t\t\t(row[i].match &&\n\t\t\t\t\t\t\trow[i].match(/^-?\\d+(\\.\\d+)?([eE]\\-?\\d+)?$/) && // Includes exponential format\n\t\t\t\t\t\t\t!row[i].match(/^0\\d+/))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Detect numbers - don't match numbers with leading zeros\n\t\t\t\t\t\t// or a negative anywhere but the start\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'n',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: row[i] })]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// String output - replace non standard characters for text output\n\t\t\t\t\t\tvar text = !originalContent.replace\n\t\t\t\t\t\t\t? originalContent\n\t\t\t\t\t\t\t: originalContent.replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F]/g, '');\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'inlineStr',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\trow: _createNode(rels, 'is', {\n\t\t\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t\t\trow: _createNode(rels, 't', {\n\t\t\t\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\t\t\t\t\t'xml:space': 'preserve'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowNode.appendChild(cell);\n\t\t\t}\n\n\t\t\trelsGet.appendChild(rowNode);\n\t\t\trowPos++;\n\t\t};\n\n\t\tif (config.customizeData) {\n\t\t\tconfig.customizeData(data);\n\t\t}\n\n\t\tvar mergeCells = function (row, colspan) {\n\t\t\tvar mergeCells = $('mergeCells', rels);\n\n\t\t\tmergeCells[0].appendChild(\n\t\t\t\t_createNode(rels, 'mergeCell', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref: 'A' + row + ':' + createCellPos(colspan) + row\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tmergeCells.attr('count', parseFloat(mergeCells.attr('count')) + 1);\n\t\t\t$('row:eq(' + (row - 1) + ') c', rels).attr('s', '51'); // centre\n\t\t};\n\n\t\t// Title and top messages\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tif (exportInfo.title) {\n\t\t\taddRow([exportInfo.title], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\tif (exportInfo.messageTop) {\n\t\t\taddRow([exportInfo.messageTop], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Table itself\n\t\tif (config.header) {\n\t\t\taddRow(data.header, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\tdataStartRow = rowPos;\n\n\t\tfor (var n = 0, ie = data.body.length; n < ie; n++) {\n\t\t\taddRow(data.body[n], rowPos);\n\t\t}\n\n\t\tdataEndRow = rowPos;\n\n\t\tif (config.footer && data.footer) {\n\t\t\taddRow(data.footer, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\t// Below the table\n\t\tif (exportInfo.messageBottom) {\n\t\t\taddRow([exportInfo.messageBottom], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Set column widths\n\t\tvar cols = _createNode(rels, 'cols');\n\t\t$('worksheet', rels).prepend(cols);\n\n\t\tfor (var i = 0, ien = data.header.length; i < ien; i++) {\n\t\t\tcols.appendChild(\n\t\t\t\t_createNode(rels, 'col', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tmin: i + 1,\n\t\t\t\t\t\tmax: i + 1,\n\t\t\t\t\t\twidth: _excelColWidth(data, i),\n\t\t\t\t\t\tcustomWidth: 1\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Workbook modifications\n\t\tvar workbook = xlsx.xl['workbook.xml'];\n\n\t\t$('sheets sheet', workbook).attr('name', _sheetname(config));\n\n\t\t// Auto filter for columns\n\t\tif (config.autoFilter) {\n\t\t\t$('mergeCells', rels).before(\n\t\t\t\t_createNode(rels, 'autoFilter', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref:\n\t\t\t\t\t\t\t'A' +\n\t\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\t\tdataEndRow\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t$('definedNames', workbook).append(\n\t\t\t\t_createNode(workbook, 'definedName', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tname: '_xlnm._FilterDatabase',\n\t\t\t\t\t\tlocalSheetId: '0',\n\t\t\t\t\t\thidden: 1\n\t\t\t\t\t},\n\t\t\t\t\ttext:\n\t\t\t\t\t\t_sheetname(config) +\n\t\t\t\t\t\t'!$A$' +\n\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t':' +\n\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\tdataEndRow\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Let the developer customise the document if they want to\n\t\tif (config.customize) {\n\t\t\tconfig.customize(xlsx, config, dt);\n\t\t}\n\n\t\t// Excel doesn't like an empty mergeCells tag\n\t\tif ($('mergeCells', rels).children().length === 0) {\n\t\t\t$('mergeCells', rels).remove();\n\t\t}\n\n\t\tvar jszip = _jsZip();\n\t\tvar zip = new jszip();\n\t\tvar zipConfig = {\n\t\t\tcompression: 'DEFLATE',\n\t\t\ttype: 'blob',\n\t\t\tmimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t};\n\n\t\t_addToZip(zip, xlsx);\n\n\t\t// Modern Excel has a 218 character limit on the file name + path of the file (why!?)\n\t\t// https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3\n\t\t// So we truncate to allow for this.\n\t\tvar filename = exportInfo.filename;\n\n\t\tif (filename > 175) {\n\t\t\tfilename = filename.substr(0, 175);\n\t\t}\n\n\t\tif (zip.generateAsync) {\n\t\t\t// JSZip 3+\n\t\t\tzip.generateAsync(zipConfig).then(function (blob) {\n\t\t\t\t_saveAs(blob, filename);\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// JSZip 2.5\n\t\t\t_saveAs(zip.generate(zipConfig), filename);\n\t\t\tthis.processing(false);\n\t\t}\n\t},\n\n\tfilename: '*',\n\n\textension: '.xlsx',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcreateEmptyCells: false,\n\n\tautoFilter: false,\n\n\tsheetName: ''\n};\n\n//\n// PDF export - using pdfMake - http://pdfmake.org\n//\nDataTable.ext.buttons.pdfHtml5 = {\n\tclassName: 'buttons-pdf buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && _pdfMake();\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.pdf', 'PDF');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar rows = [];\n\n\t\tif (config.header) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.header, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableHeader'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.body[i], function (d) {\n\t\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (config.footer && data.footer) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.footer, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableFooter'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar doc = {\n\t\t\tpageSize: config.pageSize,\n\t\t\tpageOrientation: config.orientation,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttable: {\n\t\t\t\t\t\theaderRows: 1,\n\t\t\t\t\t\tbody: rows\n\t\t\t\t\t},\n\t\t\t\t\tlayout: 'noBorders'\n\t\t\t\t}\n\t\t\t],\n\t\t\tstyles: {\n\t\t\t\ttableHeader: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154',\n\t\t\t\t\talignment: 'center'\n\t\t\t\t},\n\t\t\t\ttableBodyEven: {},\n\t\t\t\ttableBodyOdd: {\n\t\t\t\t\tfillColor: '#f3f3f3'\n\t\t\t\t},\n\t\t\t\ttableFooter: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154'\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\talignment: 'center',\n\t\t\t\t\tfontSize: 15\n\t\t\t\t},\n\t\t\t\tmessage: {}\n\t\t\t},\n\t\t\tdefaultStyle: {\n\t\t\t\tfontSize: 10\n\t\t\t}\n\t\t};\n\n\t\tif (info.messageTop) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.messageTop,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: info.messageBottom,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.title) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.title,\n\t\t\t\tstyle: 'title',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(doc, config, dt);\n\t\t}\n\n\t\tvar pdf = _pdfMake().createPdf(doc);\n\n\t\tif (config.download === 'open' && !_isDuffSafari()) {\n\t\t\tpdf.open();\n\t\t}\n\t\telse {\n\t\t\tpdf.download(info.filename);\n\t\t}\n\n\t\tthis.processing(false);\n\t},\n\n\ttitle: '*',\n\n\tfilename: '*',\n\n\textension: '.pdf',\n\n\texportOptions: {},\n\n\torientation: 'portrait',\n\n\tpageSize: 'A4',\n\n\theader: true,\n\n\tfooter: false,\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcustomize: null,\n\n\tdownload: 'download'\n};\n\n\nreturn DataTable;\n}));\n","/*! Responsive 2.5.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Responsive\n * @description Responsive tables plug-in for DataTables\n * @version     2.5.0\n * @author      SpryMedia Ltd\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Responsive is a plug-in for the DataTables library that makes use of\n * DataTables' ability to change the visibility of columns, changing the\n * visibility of columns so the displayed columns fit into the table container.\n * The end result is that complex tables will be dynamically adjusted to fit\n * into the viewport, be it on a desktop, tablet or mobile browser.\n *\n * Responsive for DataTables has two modes of operation, which can used\n * individually or combined:\n *\n * * Class name based control - columns assigned class names that match the\n *   breakpoint logic can be shown / hidden as required for each breakpoint.\n * * Automatic control - columns are automatically hidden when there is no\n *   room left to display them. Columns removed from the right.\n *\n * In additional to column visibility control, Responsive also has built into\n * options to use DataTables' child row display to show / hide the information\n * from the table that has been hidden. There are also two modes of operation\n * for this child row display:\n *\n * * Inline - when the control element that the user can use to show / hide\n *   child rows is displayed inside the first column of the table.\n * * Column - where a whole column is dedicated to be the show / hide control.\n *\n * Initialisation of Responsive is performed by:\n *\n * * Adding the class `responsive` or `dt-responsive` to the table. In this case\n *   Responsive will automatically be initialised with the default configuration\n *   options when the DataTable is created.\n * * Using the `responsive` option in the DataTables configuration options. This\n *   can also be used to specify the configuration options, or simply set to\n *   `true` to use the defaults.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.3+\n *\n *  @example\n *      $('#example').DataTable( {\n *        responsive: true\n *      } );\n *    } );\n */\nvar Responsive = function (settings, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.10')) {\n\t\tthrow 'DataTables Responsive requires DataTables 1.10.10 or newer';\n\t}\n\n\tthis.s = {\n\t\tchildNodeStore: {},\n\t\tcolumns: [],\n\t\tcurrent: [],\n\t\tdt: new DataTable.Api(settings)\n\t};\n\n\t// Check if responsive has already been initialised on this table\n\tif (this.s.dt.settings()[0].responsive) {\n\t\treturn;\n\t}\n\n\t// details is an object, but for simplicity the user can give it as a string\n\t// or a boolean\n\tif (opts && typeof opts.details === 'string') {\n\t\topts.details = { type: opts.details };\n\t}\n\telse if (opts && opts.details === false) {\n\t\topts.details = { type: false };\n\t}\n\telse if (opts && opts.details === true) {\n\t\topts.details = { type: 'inline' };\n\t}\n\n\tthis.c = $.extend(true, {}, Responsive.defaults, DataTable.defaults.responsive, opts);\n\tsettings.responsive = this;\n\tthis._constructor();\n};\n\n$.extend(Responsive.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the Responsive instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtPrivateSettings = dt.settings()[0];\n\t\tvar oldWindowWidth = $(window).innerWidth();\n\n\t\tdt.settings()[0]._responsive = this;\n\n\t\t// Use DataTables' throttle function to avoid processor thrashing on\n\t\t// resize\n\t\t$(window).on(\n\t\t\t'resize.dtr orientationchange.dtr',\n\t\t\tDataTable.util.throttle(function () {\n\t\t\t\t// iOS has a bug whereby resize can fire when only scrolling\n\t\t\t\t// See: http://stackoverflow.com/questions/8898412\n\t\t\t\tvar width = $(window).innerWidth();\n\n\t\t\t\tif (width !== oldWindowWidth) {\n\t\t\t\t\tthat._resize();\n\t\t\t\t\toldWindowWidth = width;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// DataTables doesn't currently trigger an event when a row is added, so\n\t\t// we need to hook into its private API to enforce the hidden rows when\n\t\t// new data is added\n\t\tdtPrivateSettings.oApi._fnCallbackReg(\n\t\t\tdtPrivateSettings,\n\t\t\t'aoRowCreatedCallback',\n\t\t\tfunction (tr, data, idx) {\n\t\t\t\tif ($.inArray(false, that.s.current) !== -1) {\n\t\t\t\t\t$('>td, >th', tr).each(function (i) {\n\t\t\t\t\t\tvar idx = dt.column.index('toData', i);\n\n\t\t\t\t\t\tif (that.s.current[idx] === false) {\n\t\t\t\t\t\t\t$(this).css('display', 'none');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// Destroy event handler\n\t\tdt.on('destroy.dtr', function () {\n\t\t\tdt.off('.dtr');\n\t\t\t$(dt.table().body()).off('.dtr');\n\t\t\t$(window).off('resize.dtr orientationchange.dtr');\n\t\t\tdt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');\n\n\t\t\t// Restore the columns that we've hidden\n\t\t\t$.each(that.s.current, function (i, val) {\n\t\t\t\tif (val === false) {\n\t\t\t\t\tthat._setColumnVis(i, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Reorder the breakpoints array here in case they have been added out\n\t\t// of order\n\t\tthis.c.breakpoints.sort(function (a, b) {\n\t\t\treturn a.width < b.width ? 1 : a.width > b.width ? -1 : 0;\n\t\t});\n\n\t\tthis._classLogic();\n\t\tthis._resizeAuto();\n\n\t\t// Details handler\n\t\tvar details = this.c.details;\n\n\t\tif (details.type !== false) {\n\t\t\tthat._detailsInit();\n\n\t\t\t// DataTables will trigger this event on every column it shows and\n\t\t\t// hides individually\n\t\t\tdt.on('column-visibility.dtr', function () {\n\t\t\t\t// Use a small debounce to allow multiple columns to be set together\n\t\t\t\tif (that._timer) {\n\t\t\t\t\tclearTimeout(that._timer);\n\t\t\t\t}\n\n\t\t\t\tthat._timer = setTimeout(function () {\n\t\t\t\t\tthat._timer = null;\n\n\t\t\t\t\tthat._classLogic();\n\t\t\t\t\tthat._resizeAuto();\n\t\t\t\t\tthat._resize(true);\n\n\t\t\t\t\tthat._redrawChildren();\n\t\t\t\t}, 100);\n\t\t\t});\n\n\t\t\t// Redraw the details box on each draw which will happen if the data\n\t\t\t// has changed. This is used until DataTables implements a native\n\t\t\t// `updated` event for rows\n\t\t\tdt.on('draw.dtr', function () {\n\t\t\t\tthat._redrawChildren();\n\t\t\t});\n\n\t\t\t$(dt.table().node()).addClass('dtr-' + details.type);\n\t\t}\n\n\t\tdt.on('column-reorder.dtr', function (e, settings, details) {\n\t\t\tthat._classLogic();\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize(true);\n\t\t});\n\n\t\t// Change in column sizes means we need to calc\n\t\tdt.on('column-sizing.dtr', function () {\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\t\t});\n\n\t\t// DT2 let's us tell it if we are hiding columns\n\t\tdt.on('column-calc.dt', function (e, d) {\n\t\t\tvar curr = that.s.current;\n\n\t\t\tfor (var i = 0; i < curr.length; i++) {\n\t\t\t\tvar idx = d.visible.indexOf(i);\n\n\t\t\t\tif (curr[i] === false && idx >= 0) {\n\t\t\t\t\td.visible.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// On Ajax reload we want to reopen any child rows which are displayed\n\t\t// by responsive\n\t\tdt.on('preXhr.dtr', function () {\n\t\t\tvar rowIds = [];\n\t\t\tdt.rows().every(function () {\n\t\t\t\tif (this.child.isShown()) {\n\t\t\t\t\trowIds.push(this.id(true));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdt.one('draw.dtr', function () {\n\t\t\t\tthat._resizeAuto();\n\t\t\t\tthat._resize();\n\n\t\t\t\tdt.rows(rowIds).every(function () {\n\t\t\t\t\tthat._detailsDisplay(this, false);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._controlClass();\n\t\t}).on('init.dtr', function (e, settings, details) {\n\t\t\tif (e.namespace !== 'dt') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\n\t\t\t// If columns were hidden, then DataTables needs to adjust the\n\t\t\t// column sizing\n\t\t\tif ($.inArray(false, that.s.current)) {\n\t\t\t\tdt.columns.adjust();\n\t\t\t}\n\t\t});\n\n\t\t// First pass - draw the table for the current viewport size\n\t\tthis._resize();\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Get and store nodes from a cell - use for node moving renderers\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodes: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (this.s.childNodeStore[name]) {\n\t\t\treturn this.s.childNodeStore[name];\n\t\t}\n\n\t\t// https://jsperf.com/childnodes-array-slice-vs-loop\n\t\tvar nodes = [];\n\t\tvar children = dt.cell(row, col).node().childNodes;\n\t\tfor (var i = 0, ien = children.length; i < ien; i++) {\n\t\t\tnodes.push(children[i]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = nodes;\n\n\t\treturn nodes;\n\t},\n\n\t/**\n\t * Restore nodes from the cache to a table cell\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodesRestore: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (!this.s.childNodeStore[name]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar node = dt.cell(row, col).node();\n\t\tvar store = this.s.childNodeStore[name];\n\t\tvar parent = store[0].parentNode;\n\t\tvar parentChildren = parent.childNodes;\n\t\tvar a = [];\n\n\t\tfor (var i = 0, ien = parentChildren.length; i < ien; i++) {\n\t\t\ta.push(parentChildren[i]);\n\t\t}\n\n\t\tfor (var j = 0, jen = a.length; j < jen; j++) {\n\t\t\tnode.appendChild(a[j]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = undefined;\n\t},\n\n\t/**\n\t * Calculate the visibility for the columns in a table for a given\n\t * breakpoint. The result is pre-determined based on the class logic if\n\t * class names are used to control all columns, but the width of the table\n\t * is also used if there are columns which are to be automatically shown\n\t * and hidden.\n\t *\n\t * @param  {string} breakpoint Breakpoint name to use for the calculation\n\t * @return {array} Array of boolean values initiating the visibility of each\n\t *   column.\n\t *  @private\n\t */\n\t_columnsVisiblity: function (breakpoint) {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\n\t\t// Create an array that defines the column ordering based first on the\n\t\t// column's priority, and secondly the column index. This allows the\n\t\t// columns to be removed from the right if the priority matches\n\t\tvar order = columns\n\t\t\t.map(function (col, idx) {\n\t\t\t\treturn {\n\t\t\t\t\tcolumnIdx: idx,\n\t\t\t\t\tpriority: col.priority\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort(function (a, b) {\n\t\t\t\tif (a.priority !== b.priority) {\n\t\t\t\t\treturn a.priority - b.priority;\n\t\t\t\t}\n\t\t\t\treturn a.columnIdx - b.columnIdx;\n\t\t\t});\n\n\t\t// Class logic - determine which columns are in this breakpoint based\n\t\t// on the classes. If no class control (i.e. `auto`) then `-` is used\n\t\t// to indicate this to the rest of the function\n\t\tvar display = $.map(columns, function (col, i) {\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn 'not-visible';\n\t\t\t}\n\t\t\treturn col.auto && col.minWidth === null\n\t\t\t\t? false\n\t\t\t\t: col.auto === true\n\t\t\t\t? '-'\n\t\t\t\t: $.inArray(breakpoint, col.includeIn) !== -1;\n\t\t});\n\n\t\t// Auto column control - first pass: how much width is taken by the\n\t\t// ones that must be included from the non-auto columns\n\t\tvar requiredWidth = 0;\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (display[i] === true) {\n\t\t\t\trequiredWidth += columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Second pass, use up any remaining width for other columns. For\n\t\t// scrolling tables we need to subtract the width of the scrollbar. It\n\t\t// may not be requires which makes this sub-optimal, but it would\n\t\t// require another full redraw to make complete use of those extra few\n\t\t// pixels\n\t\tvar scrolling = dt.settings()[0].oScroll;\n\t\tvar bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;\n\t\tvar widthAvailable = dt.table().container().offsetWidth - bar;\n\t\tvar usedWidth = widthAvailable - requiredWidth;\n\n\t\t// Control column needs to always be included. This makes it sub-\n\t\t// optimal in terms of using the available with, but to stop layout\n\t\t// thrashing or overflow. Also we need to account for the control column\n\t\t// width first so we know how much width is available for the other\n\t\t// columns, since the control column might not be the first one shown\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tusedWidth -= columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Allow columns to be shown (counting by priority and then right to\n\t\t// left) until we run out of room\n\t\tvar empty = false;\n\t\tfor (i = 0, ien = order.length; i < ien; i++) {\n\t\t\tvar colIdx = order[i].columnIdx;\n\n\t\t\tif (display[colIdx] === '-' && !columns[colIdx].control && columns[colIdx].minWidth) {\n\t\t\t\t// Once we've found a column that won't fit we don't let any\n\t\t\t\t// others display either, or columns might disappear in the\n\t\t\t\t// middle of the table\n\t\t\t\tif (empty || usedWidth - columns[colIdx].minWidth < 0) {\n\t\t\t\t\tempty = true;\n\t\t\t\t\tdisplay[colIdx] = false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdisplay[colIdx] = true;\n\t\t\t\t}\n\n\t\t\t\tusedWidth -= columns[colIdx].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Determine if the 'control' column should be shown (if there is one).\n\t\t// This is the case when there is a hidden column (that is not the\n\t\t// control column). The two loops look inefficient here, but they are\n\t\t// trivial and will fly through. We need to know the outcome from the\n\t\t// first , before the action in the second can be taken\n\t\tvar showControl = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (!columns[i].control && !columns[i].never && display[i] === false) {\n\t\t\t\tshowControl = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tdisplay[i] = showControl;\n\t\t\t}\n\n\t\t\t// Replace not visible string with false from the control column detection above\n\t\t\tif (display[i] === 'not-visible') {\n\t\t\t\tdisplay[i] = false;\n\t\t\t}\n\t\t}\n\n\t\t// Finally we need to make sure that there is at least one column that\n\t\t// is visible\n\t\tif ($.inArray(true, display) === -1) {\n\t\t\tdisplay[0] = true;\n\t\t}\n\n\t\treturn display;\n\t},\n\n\t/**\n\t * Create the internal `columns` array with information about the columns\n\t * for the table. This includes determining which breakpoints the column\n\t * will appear in, based upon class names in the column, which makes up the\n\t * vast majority of this method.\n\t *\n\t * @private\n\t */\n\t_classLogic: function () {\n\t\tvar that = this;\n\t\tvar calc = {};\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar dt = this.s.dt;\n\t\tvar columns = dt\n\t\t\t.columns()\n\t\t\t.eq(0)\n\t\t\t.map(function (i) {\n\t\t\t\tvar column = this.column(i);\n\t\t\t\tvar className = column.header().className;\n\t\t\t\tvar priority = dt.settings()[0].aoColumns[i].responsivePriority;\n\t\t\t\tvar dataPriority = column.header().getAttribute('data-priority');\n\n\t\t\t\tif (priority === undefined) {\n\t\t\t\t\tpriority =\n\t\t\t\t\t\tdataPriority === undefined || dataPriority === null\n\t\t\t\t\t\t\t? 10000\n\t\t\t\t\t\t\t: dataPriority * 1;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tclassName: className,\n\t\t\t\t\tincludeIn: [],\n\t\t\t\t\tauto: false,\n\t\t\t\t\tcontrol: false,\n\t\t\t\t\tnever: className.match(/\\b(dtr\\-)?never\\b/) ? true : false,\n\t\t\t\t\tpriority: priority\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Simply add a breakpoint to `includeIn` array, ensuring that there are\n\t\t// no duplicates\n\t\tvar add = function (colIdx, name) {\n\t\t\tvar includeIn = columns[colIdx].includeIn;\n\n\t\t\tif ($.inArray(name, includeIn) === -1) {\n\t\t\t\tincludeIn.push(name);\n\t\t\t}\n\t\t};\n\n\t\tvar column = function (colIdx, name, operator, matched) {\n\t\t\tvar size, i, ien;\n\n\t\t\tif (!operator) {\n\t\t\t\tcolumns[colIdx].includeIn.push(name);\n\t\t\t}\n\t\t\telse if (operator === 'max-') {\n\t\t\t\t// Add this breakpoint and all smaller\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width <= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'min-') {\n\t\t\t\t// Add this breakpoint and all larger\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width >= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'not-') {\n\t\t\t\t// Add all but this breakpoint\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].name.indexOf(matched) === -1) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Loop over each column and determine if it has a responsive control\n\t\t// class\n\t\tcolumns.each(function (col, i) {\n\t\t\tvar classNames = col.className.split(' ');\n\t\t\tvar hasClass = false;\n\n\t\t\t// Split the class name up so multiple rules can be applied if needed\n\t\t\tfor (var k = 0, ken = classNames.length; k < ken; k++) {\n\t\t\t\tvar className = classNames[k].trim();\n\n\t\t\t\tif (className === 'all' || className === 'dtr-all') {\n\t\t\t\t\t// Include in all\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.includeIn = $.map(breakpoints, function (a) {\n\t\t\t\t\t\treturn a.name;\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'none' || className === 'dtr-none' || col.never) {\n\t\t\t\t\t// Include in none (default) and no auto\n\t\t\t\t\thasClass = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'control' || className === 'dtr-control') {\n\t\t\t\t\t// Special column that is only visible, when one of the other\n\t\t\t\t\t// columns is hidden. This is used for the details control\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.control = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$.each(breakpoints, function (j, breakpoint) {\n\t\t\t\t\t// Does this column have a class that matches this breakpoint?\n\t\t\t\t\tvar brokenPoint = breakpoint.name.split('-');\n\t\t\t\t\tvar re = new RegExp(\n\t\t\t\t\t\t'(min\\\\-|max\\\\-|not\\\\-)?(' + brokenPoint[0] + ')(\\\\-[_a-zA-Z0-9])?'\n\t\t\t\t\t);\n\t\t\t\t\tvar match = className.match(re);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\thasClass = true;\n\n\t\t\t\t\t\tif (match[2] === brokenPoint[0] && match[3] === '-' + brokenPoint[1]) {\n\t\t\t\t\t\t\t// Class name matches breakpoint name fully\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2] + match[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (match[2] === brokenPoint[0] && !match[3]) {\n\t\t\t\t\t\t\t// Class name matched primary breakpoint name with no qualifier\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If there was no control class, then automatic sizing is used\n\t\t\tif (!hasClass) {\n\t\t\t\tcol.auto = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.s.columns = columns;\n\t},\n\n\t/**\n\t * Update the cells to show the correct control class / button\n\t * @private\n\t */\n\t_controlClass: function () {\n\t\tif (this.c.details.type === 'inline') {\n\t\t\tvar dt = this.s.dt;\n\t\t\tvar columnsVis = this.s.current;\n\t\t\tvar firstVisible = $.inArray(true, columnsVis);\n\n\t\t\t// Remove from any cells which shouldn't have it\n\t\t\tdt.cells(\n\t\t\t\tnull,\n\t\t\t\tfunction (idx) {\n\t\t\t\t\treturn idx !== firstVisible;\n\t\t\t\t},\n\t\t\t\t{ page: 'current' }\n\t\t\t)\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.filter('.dtr-control')\n\t\t\t\t.removeClass('dtr-control');\n\n\t\t\tdt.cells(null, firstVisible, { page: 'current' }).nodes().to$().addClass('dtr-control');\n\t\t}\n\t},\n\n\t/**\n\t * Show the details for the child row\n\t *\n\t * @param  {DataTables.Api} row    API instance for the row\n\t * @param  {boolean}        update Update flag\n\t * @private\n\t */\n\t_detailsDisplay: function (row, update) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\t\tvar event = function (res) {\n\t\t\t$(row.node()).toggleClass('parent', res !== false);\n\t\t\t$(dt.table().node()).triggerHandler('responsive-display.dt', [dt, row, res, update]);\n\t\t};\n\n\t\tif (details && details.type !== false) {\n\t\t\tvar renderer =\n\t\t\t\ttypeof details.renderer === 'string'\n\t\t\t\t\t? Responsive.renderer[details.renderer]()\n\t\t\t\t\t: details.renderer;\n\n\t\t\tvar res = details.display(\n\t\t\t\trow,\n\t\t\t\tupdate,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn renderer.call(that, dt, row[0], that._detailsObj(row[0]));\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tevent(false);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (typeof res === 'boolean') {\n\t\t\t\tevent(res);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Initialisation for the details handler\n\t *\n\t * @private\n\t */\n\t_detailsInit: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\n\t\t// The inline type always uses the first child as the target\n\t\tif (details.type === 'inline') {\n\t\t\tdetails.target = 'td.dtr-control, th.dtr-control';\n\t\t}\n\n\t\t// Keyboard accessibility\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._tabIndexes();\n\t\t});\n\t\tthat._tabIndexes(); // Initial draw has already happened\n\n\t\t$(dt.table().body()).on('keyup.dtr', 'td, th', function (e) {\n\t\t\tif (e.keyCode === 13 && $(this).data('dtr-keyboard')) {\n\t\t\t\t$(this).click();\n\t\t\t}\n\t\t});\n\n\t\t// type.target can be a string jQuery selector or a column index\n\t\tvar target = details.target;\n\t\tvar selector = typeof target === 'string' ? target : 'td, th';\n\n\t\tif (target !== undefined || target !== null) {\n\t\t\t// Click handler to show / hide the details rows when they are available\n\t\t\t$(dt.table().body()).on('click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {\n\t\t\t\t// If the table is not collapsed (i.e. there is no hidden columns)\n\t\t\t\t// then take no action\n\t\t\t\tif (!$(dt.table().node()).hasClass('collapsed')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check that the row is actually a DataTable's controlled node\n\t\t\t\tif ($.inArray($(this).closest('tr').get(0), dt.rows().nodes().toArray()) === -1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// For column index, we determine if we should act or not in the\n\t\t\t\t// handler - otherwise it is already okay\n\t\t\t\tif (typeof target === 'number') {\n\t\t\t\t\tvar targetIdx = target < 0 ? dt.columns().eq(0).length + target : target;\n\n\t\t\t\t\tif (dt.cell(this).index().column !== targetIdx) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// $().closest() includes itself in its check\n\t\t\t\tvar row = dt.row($(this).closest('tr'));\n\n\t\t\t\t// Check event type to do an action\n\t\t\t\tif (e.type === 'click') {\n\t\t\t\t\t// The renderer is given as a function so the caller can execute it\n\t\t\t\t\t// only when they need (i.e. if hiding there is no point is running\n\t\t\t\t\t// the renderer)\n\t\t\t\t\tthat._detailsDisplay(row, false);\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mousedown') {\n\t\t\t\t\t// For mouse users, prevent the focus ring from showing\n\t\t\t\t\t$(this).css('outline', 'none');\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mouseup') {\n\t\t\t\t\t// And then re-allow at the end of the click\n\t\t\t\t\t$(this).trigger('blur').css('outline', '');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Get the details to pass to a renderer for a row\n\t * @param  {int} rowIdx Row index\n\t * @private\n\t */\n\t_detailsObj: function (rowIdx) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.columns, function (col, i) {\n\t\t\t// Never and control columns should not be passed to the renderer\n\t\t\tif (col.never || col.control) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar dtCol = dt.settings()[0].aoColumns[i];\n\n\t\t\treturn {\n\t\t\t\tclassName: dtCol.sClass,\n\t\t\t\tcolumnIndex: i,\n\t\t\t\tdata: dt.cell(rowIdx, i).render(that.c.orthogonal),\n\t\t\t\thidden: dt.column(i).visible() && !that.s.current[i],\n\t\t\t\trowIndex: rowIdx,\n\t\t\t\ttitle: dtCol.sTitle !== null ? dtCol.sTitle : $(dt.column(i).header()).text()\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Find a breakpoint object from a name\n\t *\n\t * @param  {string} name Breakpoint name to find\n\t * @return {object}      Breakpoint description object\n\t * @private\n\t */\n\t_find: function (name) {\n\t\tvar breakpoints = this.c.breakpoints;\n\n\t\tfor (var i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\tif (breakpoints[i].name === name) {\n\t\t\t\treturn breakpoints[i];\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Re-create the contents of the child rows as the display has changed in\n\t * some way.\n\t *\n\t * @private\n\t */\n\t_redrawChildren: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tdt.rows({ page: 'current' }).iterator('row', function (settings, idx) {\n\t\t\tthat._detailsDisplay(dt.row(idx), true);\n\t\t});\n\t},\n\n\t/**\n\t * Alter the table display for a resized viewport. This involves first\n\t * determining what breakpoint the window currently is in, getting the\n\t * column visibilities to apply and then setting them.\n\t *\n\t * @param  {boolean} forceRedraw Force a redraw\n\t * @private\n\t */\n\t_resize: function (forceRedraw) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar width = $(window).innerWidth();\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar breakpoint = breakpoints[0].name;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\t\tvar oldVis = this.s.current.slice();\n\n\t\t// Determine what breakpoint we are currently at\n\t\tfor (i = breakpoints.length - 1; i >= 0; i--) {\n\t\t\tif (width <= breakpoints[i].width) {\n\t\t\t\tbreakpoint = breakpoints[i].name;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Show the columns for that break point\n\t\tvar columnsVis = this._columnsVisiblity(breakpoint);\n\t\tthis.s.current = columnsVis;\n\n\t\t// Set the class before the column visibility is changed so event\n\t\t// listeners know what the state is. Need to determine if there are\n\t\t// any columns that are not visible but can be shown\n\t\tvar collapsedClass = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (\n\t\t\t\tcolumnsVis[i] === false &&\n\t\t\t\t!columns[i].never &&\n\t\t\t\t!columns[i].control &&\n\t\t\t\t!dt.column(i).visible() === false\n\t\t\t) {\n\t\t\t\tcollapsedClass = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t$(dt.table().node()).toggleClass('collapsed', collapsedClass);\n\n\t\tvar changed = false;\n\t\tvar visible = 0;\n\n\t\tdt.columns()\n\t\t\t.eq(0)\n\t\t\t.each(function (colIdx, i) {\n\t\t\t\tif (columnsVis[i] === true) {\n\t\t\t\t\tvisible++;\n\t\t\t\t}\n\n\t\t\t\tif (forceRedraw || columnsVis[i] !== oldVis[i]) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t\tthat._setColumnVis(colIdx, columnsVis[i]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Always need to update the display, regardless of if it has changed or not, so nodes\n\t\t// can be re-inserted for listHiddenNodes\n\t\tthis._redrawChildren();\n\n\t\tif (changed) {\n\t\t\t// Inform listeners of the change\n\t\t\t$(dt.table().node()).trigger('responsive-resize.dt', [dt, this.s.current]);\n\n\t\t\t// If no records, update the \"No records\" display element\n\t\t\tif (dt.page.info().recordsDisplay === 0) {\n\t\t\t\t$('td', dt.table().body()).eq(0).attr('colspan', visible);\n\t\t\t}\n\t\t}\n\n\t\tthat._controlClass();\n\t},\n\n\t/**\n\t * Determine the width of each column in the table so the auto column hiding\n\t * has that information to work with. This method is never going to be 100%\n\t * perfect since column widths can change slightly per page, but without\n\t * seriously compromising performance this is quite effective.\n\t *\n\t * @private\n\t */\n\t_resizeAuto: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar that = this;\n\n\t\t// Are we allowed to do auto sizing?\n\t\tif (!this.c.auto) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Are there any columns that actually need auto-sizing, or do they all\n\t\t// have classes defined\n\t\tif (\n\t\t\t$.inArray(\n\t\t\t\ttrue,\n\t\t\t\t$.map(columns, function (c) {\n\t\t\t\t\treturn c.auto;\n\t\t\t\t})\n\t\t\t) === -1\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Need to restore all children. They will be reinstated by a re-render\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\t$.each(this.s.childNodeStore, function (key) {\n\t\t\t\tvar idx = key.split('-');\n\n\t\t\t\tthat._childNodesRestore(dt, idx[0] * 1, idx[1] * 1);\n\t\t\t});\n\t\t}\n\n\t\t// Clone the table with the current data in it\n\t\tvar tableWidth = dt.table().node().offsetWidth;\n\t\tvar columnWidths = dt.columns;\n\t\tvar clonedTable = dt.table().node().cloneNode(false);\n\t\tvar clonedHeader = $(dt.table().header().cloneNode(false)).appendTo(clonedTable);\n\t\tvar clonedBody = $(dt.table().body()).clone(false, false).empty().appendTo(clonedTable); // use jQuery because of IE8\n\n\t\tclonedTable.style.width = 'auto';\n\n\t\t// Header\n\t\tvar headerCells = dt\n\t\t\t.columns()\n\t\t\t.header()\n\t\t\t.filter(function (idx) {\n\t\t\t\treturn dt.column(idx).visible();\n\t\t\t})\n\t\t\t.to$()\n\t\t\t.clone(false)\n\t\t\t.css('display', 'table-cell')\n\t\t\t.css('width', 'auto')\n\t\t\t.css('min-width', 0);\n\n\t\t// Body rows - we don't need to take account of DataTables' column\n\t\t// visibility since we implement our own here (hence the `display` set)\n\t\t$(clonedBody)\n\t\t\t.append($(dt.rows({ page: 'current' }).nodes()).clone(false))\n\t\t\t.find('th, td')\n\t\t\t.css('display', '');\n\n\t\t// Footer\n\t\tvar footer = dt.table().footer();\n\t\tif (footer) {\n\t\t\tvar clonedFooter = $(footer.cloneNode(false)).appendTo(clonedTable);\n\t\t\tvar footerCells = dt\n\t\t\t\t.columns()\n\t\t\t\t.footer()\n\t\t\t\t.filter(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.to$()\n\t\t\t\t.clone(false)\n\t\t\t\t.css('display', 'table-cell');\n\n\t\t\t$('<tr/>').append(footerCells).appendTo(clonedFooter);\n\t\t}\n\n\t\t$('<tr/>').append(headerCells).appendTo(clonedHeader);\n\n\t\t// In the inline case extra padding is applied to the first column to\n\t\t// give space for the show / hide icon. We need to use this in the\n\t\t// calculation\n\t\tif (this.c.details.type === 'inline') {\n\t\t\t$(clonedTable).addClass('dtr-inline collapsed');\n\t\t}\n\n\t\t// It is unsafe to insert elements with the same name into the DOM\n\t\t// multiple times. For example, cloning and inserting a checked radio\n\t\t// clears the chcecked state of the original radio.\n\t\t$(clonedTable).find('[name]').removeAttr('name');\n\n\t\t// A position absolute table would take the table out of the flow of\n\t\t// our container element, bypassing the height and width (Scroller)\n\t\t$(clonedTable).css('position', 'relative');\n\n\t\tvar inserted = $('<div/>')\n\t\t\t.css({\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1,\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tclear: 'both'\n\t\t\t})\n\t\t\t.append(clonedTable);\n\n\t\tinserted.insertBefore(dt.table().node());\n\n\t\t// The cloned header now contains the smallest that each column can be\n\t\theaderCells.each(function (i) {\n\t\t\tvar idx = dt.column.index('fromVisible', i);\n\t\t\tcolumns[idx].minWidth = this.offsetWidth || 0;\n\t\t});\n\n\t\tinserted.remove();\n\t},\n\n\t/**\n\t * Get the state of the current hidden columns - controlled by Responsive only\n\t */\n\t_responsiveOnlyHidden: function () {\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.current, function (v, i) {\n\t\t\t// If the column is hidden by DataTables then it can't be hidden by\n\t\t\t// Responsive!\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn v;\n\t\t});\n\t},\n\n\t/**\n\t * Set a column's visibility.\n\t *\n\t * We don't use DataTables' column visibility controls in order to ensure\n\t * that column visibility can Responsive can no-exist. Since only IE8+ is\n\t * supported (and all evergreen browsers of course) the control of the\n\t * display attribute works well.\n\t *\n\t * @param {integer} col      Column index\n\t * @param {boolean} showHide Show or hide (true or false)\n\t * @private\n\t */\n\t_setColumnVis: function (col, showHide) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar display = showHide ? '' : 'none'; // empty string will remove the attr\n\n\t\t$(dt.column(col).header()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t$(dt.column(col).footer()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\tdt.column(col).nodes().to$().css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t// If the are child nodes stored, we might need to reinsert them\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\tdt.cells(null, col)\n\t\t\t\t.indexes()\n\t\t\t\t.each(function (idx) {\n\t\t\t\t\tthat._childNodesRestore(dt, idx.row, idx.column);\n\t\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Update the cell tab indexes for keyboard accessibility. This is called on\n\t * every table draw - that is potentially inefficient, but also the least\n\t * complex option given that column visibility can change on the fly. Its a\n\t * shame user-focus was removed from CSS 3 UI, as it would have solved this\n\t * issue with a single CSS statement.\n\t *\n\t * @private\n\t */\n\t_tabIndexes: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar cells = dt.cells({ page: 'current' }).nodes().to$();\n\t\tvar ctx = dt.settings()[0];\n\t\tvar target = this.c.details.target;\n\n\t\tcells.filter('[data-dtr-keyboard]').removeData('[data-dtr-keyboard]');\n\n\t\tif (typeof target === 'number') {\n\t\t\tdt.cells(null, target, { page: 'current' })\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t\telse {\n\t\t\t// This is a bit of a hack - we need to limit the selected nodes to just\n\t\t\t// those of this table\n\t\t\tif (target === 'td:first-child, th:first-child') {\n\t\t\t\ttarget = '>td:first-child, >th:first-child';\n\t\t\t}\n\n\t\t\t$(target, dt.rows({ page: 'current' }).nodes())\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t}\n});\n\n/**\n * List of default breakpoints. Each item in the array is an object with two\n * properties:\n *\n * * `name` - the breakpoint name.\n * * `width` - the breakpoint width\n *\n * @name Responsive.breakpoints\n * @static\n */\nResponsive.breakpoints = [\n\t{ name: 'desktop', width: Infinity },\n\t{ name: 'tablet-l', width: 1024 },\n\t{ name: 'tablet-p', width: 768 },\n\t{ name: 'mobile-l', width: 480 },\n\t{ name: 'mobile-p', width: 320 }\n];\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.display = {\n\tchildRow: function (row, update, render) {\n\t\tif (update) {\n\t\t\tif ($(row.node()).hasClass('parent')) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!row.child.isShown()) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow.child(false);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\tchildRowImmediate: function (row, update, render) {\n\t\tif ((!update && row.child.isShown()) || !row.responsive.hasHidden()) {\n\t\t\t// User interaction and the row is show, or nothing to show\n\t\t\trow.child(false);\n\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\t// Display\n\t\t\trow.child(render(), 'child').show();\n\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t// This is a wrapper so the modal options for Bootstrap and jQuery UI can\n\t// have options passed into them. This specific one doesn't need to be a\n\t// function but it is for consistency in the `modal` name\n\tmodal: function (options) {\n\t\treturn function (row, update, render, closeCallback) {\n\t\t\tif (!update) {\n\t\t\t\t// Show a modal\n\t\t\t\tvar close = function () {\n\t\t\t\t\tmodal.remove(); // will tidy events for us\n\t\t\t\t\t$(document).off('keypress.dtr');\n\t\t\t\t\t$(row.node()).removeClass('parent');\n\n\t\t\t\t\tcloseCallback();\n\t\t\t\t};\n\n\t\t\t\tvar modal = $('<div class=\"dtr-modal\"/>')\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-display\"/>')\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-content\"/>')\n\t\t\t\t\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t\t\t\t\t.append(render())\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-close\">&times;</div>').click(function () {\n\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-background\"/>').click(function () {\n\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo('body');\n\n\t\t\t\t$(row.node()).addClass('parent');\n\n\t\t\t\t$(document).on('keyup.dtr', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar modal = $('div.dtr-modal-content');\n\n\t\t\t\tif (modal.length && row.index() === modal.data('dtr-row-idx')) {\n\t\t\t\t\tmodal.empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown, nothing to update\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options && options.header) {\n\t\t\t\t$('div.dtr-modal-content').prepend('<h2>' + options.header(row) + '</h2>');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t}\n};\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.renderer = {\n\tlistHiddenNodes: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar that = this;\n\t\t\tvar ul = $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>');\n\t\t\tvar found = false;\n\n\t\t\tvar data = $.each(columns, function (i, col) {\n\t\t\t\tif (col.hidden) {\n\t\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\t\t$(\n\t\t\t\t\t\t'<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t)\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<span class=\"dtr-data\"/>').append(\n\t\t\t\t\t\t\t\tthat._childNodes(api, col.rowIndex, col.columnIndex)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) // api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )\n\t\t\t\t\t\t.appendTo(ul);\n\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn found ? ul : false;\n\t\t};\n\t},\n\n\tlistHidden: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn col.hidden\n\t\t\t\t\t? '<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'<span class=\"dtr-data\">' +\n\t\t\t\t\t\t\tcol.data +\n\t\t\t\t\t\t\t'</span>' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t: '';\n\t\t\t}).join('');\n\n\t\t\treturn data\n\t\t\t\t? $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>').append(data)\n\t\t\t\t: false;\n\t\t};\n\t},\n\n\ttableAll: function (options) {\n\t\toptions = $.extend(\n\t\t\t{\n\t\t\t\ttableClass: ''\n\t\t\t},\n\t\t\toptions\n\t\t);\n\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn (\n\t\t\t\t\t'<tr ' +\n\t\t\t\t\tklass +\n\t\t\t\t\t' data-dt-row=\"' +\n\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t'\">' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.title +\n\t\t\t\t\t':' +\n\t\t\t\t\t'</td> ' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.data +\n\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>'\n\t\t\t\t);\n\t\t\t}).join('');\n\n\t\t\treturn $('<table class=\"' + options.tableClass + ' dtr-details\" width=\"100%\"/>').append(\n\t\t\t\tdata\n\t\t\t);\n\t\t};\n\t}\n};\n\n/**\n * Responsive default settings for initialisation\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.defaults = {\n\t/**\n\t * List of breakpoints for the instance. Note that this means that each\n\t * instance can have its own breakpoints. Additionally, the breakpoints\n\t * cannot be changed once an instance has been creased.\n\t *\n\t * @type {Array}\n\t * @default Takes the value of `Responsive.breakpoints`\n\t */\n\tbreakpoints: Responsive.breakpoints,\n\n\t/**\n\t * Enable / disable auto hiding calculations. It can help to increase\n\t * performance slightly if you disable this option, but all columns would\n\t * need to have breakpoint classes assigned to them\n\t *\n\t * @type {Boolean}\n\t * @default  `true`\n\t */\n\tauto: true,\n\n\t/**\n\t * Details control. If given as a string value, the `type` property of the\n\t * default object is set to that value, and the defaults used for the rest\n\t * of the object - this is for ease of implementation.\n\t *\n\t * The object consists of the following properties:\n\t *\n\t * * `display` - A function that is used to show and hide the hidden details\n\t * * `renderer` - function that is called for display of the child row data.\n\t *   The default function will show the data from the hidden columns\n\t * * `target` - Used as the selector for what objects to attach the child\n\t *   open / close to\n\t * * `type` - `false` to disable the details display, `inline` or `column`\n\t *   for the two control types\n\t *\n\t * @type {Object|string}\n\t */\n\tdetails: {\n\t\tdisplay: Responsive.display.childRow,\n\n\t\trenderer: Responsive.renderer.listHidden(),\n\n\t\ttarget: 0,\n\n\t\ttype: 'inline'\n\t},\n\n\t/**\n\t * Orthogonal data request option. This is used to define the data type\n\t * requested when Responsive gets the data to show in the child row.\n\t *\n\t * @type {String}\n\t */\n\torthogonal: 'display'\n};\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register('responsive()', function () {\n\treturn this;\n});\n\nApi.register('responsive.index()', function (li) {\n\tli = $(li);\n\n\treturn {\n\t\tcolumn: li.data('dtr-index'),\n\t\trow: li.parent().data('dtr-index')\n\t};\n});\n\nApi.register('responsive.rebuild()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._classLogic();\n\t\t}\n\t});\n});\n\nApi.register('responsive.recalc()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._resizeAuto();\n\t\t\tctx._responsive._resize();\n\t\t}\n\t});\n});\n\nApi.register('responsive.hasHidden()', function () {\n\tvar ctx = this.context[0];\n\n\treturn ctx._responsive\n\t\t? $.inArray(false, ctx._responsive._responsiveOnlyHidden()) !== -1\n\t\t: false;\n});\n\nApi.registerPlural('columns().responsiveHidden()', 'column().responsiveHidden()', function () {\n\treturn this.iterator(\n\t\t'column',\n\t\tfunction (settings, column) {\n\t\t\treturn settings._responsive\n\t\t\t\t? settings._responsive._responsiveOnlyHidden()[column]\n\t\t\t\t: false;\n\t\t},\n\t\t1\n\t);\n});\n\n/**\n * Version information\n *\n * @name Responsive.version\n * @static\n */\nResponsive.version = '2.5.0';\n\n$.fn.dataTable.Responsive = Responsive;\n$.fn.DataTable.Responsive = Responsive;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtr', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tif (\n\t\t$(settings.nTable).hasClass('responsive') ||\n\t\t$(settings.nTable).hasClass('dt-responsive') ||\n\t\tsettings.oInit.responsive ||\n\t\tDataTable.defaults.responsive\n\t) {\n\t\tvar init = settings.oInit.responsive;\n\n\t\tif (init !== false) {\n\t\t\tnew Responsive(settings, $.isPlainObject(init) ? init : {});\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n","/*! Bootstrap 5 integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal fade dtr-bs-modal\" role=\"dialog\">' +\n\t\t'<div class=\"modal-dialog\" role=\"document\">' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'</div>' +\n\t\t'</div>'\n);\nvar modal;\n\n// Note this could be undefined at the time of initialisation - the\n// DataTable.Responsive.bootstrap function can be used to set a different\n// bootstrap object\nvar _bs = window.bootstrap;\n\nDataTable.Responsive.bootstrap = function (bs) {\n\t_bs = bs;\n};\n\n_display.modal = function (options) {\n\tif (!modal) {\n\t\tmodal = new _bs.Modal(_modal[0]);\n\t}\n\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\t\tvar button = header.find('button').detach();\n\n\t\t\t\t\theader\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"modal-title\">' + options.header(row) + '</h4>')\n\t\t\t\t\t\t.append(button);\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t\t_modal\n\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t.one('hidden.bs.modal', closeCallback)\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.modal();\n\n\t\t\t\tmodal.show();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown for this row - do nothing\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n","/*! Scroller 2.4.3\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     2.4.3\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen very quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables settings object or API instance\n *  @param {object} [opts={}] Configuration object for Scroller. Options\n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.11.0+\n */\nvar Scroller = function (dt, opts) {\n\t/* Sanity check - you just know it will happen */\n\tif (!(this instanceof Scroller)) {\n\t\talert(\n\t\t\t\"Scroller warning: Scroller must be initialised with the 'new' keyword.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (opts === undefined) {\n\t\topts = {};\n\t}\n\n\tvar dtApi = $.fn.dataTable.Api(dt);\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\tdt: dtApi.settings()[0],\n\n\t\t/**\n\t\t * DataTables API instance\n\t\t *  @type     DataTable.Api\n\t\t */\n\t\tdtApi: dtApi,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableBottom: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawBottom: 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\tautoHeight: true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tviewportRows: 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tstateTO: null,\n\n\t\tstateSaveThrottle: function () {},\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\tdrawTO: null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null,\n\t\t\tlabelHeight: 0,\n\t\t\txbar: 0\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false,\n\t\tforceReposition: false,\n\t\tbaseRowTop: 0,\n\t\tbaseScrollTop: 0,\n\t\tmousedown: false,\n\t\tlastScrollTop: 0\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend(this.s, Scroller.oDefaults, opts);\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\tforce: document.createElement('div'),\n\t\tlabel: $('<div class=\"dts_label\">0</div>'),\n\t\tscroller: null,\n\t\ttable: null,\n\t\tloader: null\n\t};\n\n\t// Attach the instance to the DataTables instance so it can be accessed in\n\t// future. Don't initialise Scroller twice on the same table\n\tif (this.s.dt.oScroller) {\n\t\treturn;\n\t}\n\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis.construct();\n};\n\n$.extend(Scroller.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods - to be exposed via the DataTables API\n\t */\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t */\n\tmeasure: function (redraw) {\n\t\tif (this.s.autoHeight) {\n\t\t\tthis._calcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\tif (heights.row) {\n\t\t\theights.viewport = this._parseHeight(\n\t\t\t\t$(this.dom.scroller).css('max-height')\n\t\t\t);\n\n\t\t\tthis.s.viewportRows =\n\t\t\t\tparseInt(heights.viewport / heights.row, 10) + 1;\n\t\t\tthis.s.dt._iDisplayLength =\n\t\t\t\tthis.s.viewportRows * this.s.displayBuffer;\n\t\t}\n\n\t\tvar label = this.dom.label.outerHeight();\n\n\t\theights.xbar =\n\t\t\tthis.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;\n\t\theights.labelHeight = label;\n\n\t\tif (redraw === undefined || redraw) {\n\t\t\tthis.s.dtApi.draw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Get information about current displayed record range. This corresponds to\n\t * the information usually displayed in the \"Info\" block of the table.\n\t *\n\t * @returns {object} info as an object:\n\t *  {\n\t *      start: {int}, // the 0-indexed record at the top of the viewport\n\t *      end:   {int}, // the 0-indexed record at the bottom of the viewport\n\t *  }\n\t */\n\tpageInfo: function () {\n\t\tvar dt = this.s.dt,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil(\n\t\t\t\tthis.pixelsToRow(\n\t\t\t\t\tiScrollTop + this.s.heights.viewport,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.s.ani\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn {\n\t\t\tstart: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),\n\t\t\tend: iTotal < iPossibleEnd ? iTotal - 1 : iPossibleEnd - 1\n\t\t};\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} pixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t */\n\tpixelsToRow: function (pixels, intParse, virtual) {\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual\n\t\t\t? (this._domain('physicalToVirtual', this.s.baseScrollTop) + diff) /\n\t\t\t\tthis.s.heights.row\n\t\t\t: diff / this.s.heights.row + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ? parseInt(row, 10) : row;\n\t},\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t */\n\trowToPixels: function (rowIdx, intParse, virtual) {\n\t\tvar pixels;\n\t\tvar diff = rowIdx - this.s.baseRowTop;\n\n\t\tif (virtual) {\n\t\t\tpixels = this._domain('virtualToPhysical', this.s.baseScrollTop);\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\t\telse {\n\t\t\tpixels = this.s.baseScrollTop;\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\n\t\treturn intParse || intParse === undefined\n\t\t\t? parseInt(pixels, 10)\n\t\t\t: pixels;\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} row Row index to scroll to\n\t *  @param {bool} [animate=true] Animate the transition or not\n\t *  @returns {void}\n\t */\n\tscrollToRow: function (row, animate) {\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.rowToPixels(row);\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer - 1) / 2) * this.s.viewportRows;\n\t\tvar drawRow = row - preRows;\n\t\tif (drawRow < 0) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif (\n\t\t\t(px > this.s.redrawBottom || px < this.s.redrawTop) &&\n\t\t\tthis.s.dt._iDisplayStart !== drawRow\n\t\t) {\n\t\t\tani = true;\n\t\t\tpx = this._domain('virtualToPhysical', row * this.s.heights.row);\n\n\t\t\t// If we need records outside the current draw region, but the new\n\t\t\t// scrolling position is inside that (due to the non-linear nature\n\t\t\t// for larger numbers of records), we need to force position update.\n\t\t\tif (this.s.redrawTop < px && px < this.s.redrawBottom) {\n\t\t\t\tthis.s.forceReposition = true;\n\t\t\t\tanimate = false;\n\t\t\t}\n\t\t}\n\n\t\tif (animate === undefined || animate) {\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: px\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t\t// the final scroll event fired\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\t$(this.dom.scroller).scrollTop(px);\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\tconstruct: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dtApi;\n\n\t\t/* Sanity check */\n\t\tif (!this.s.dt.oFeatures.bPaginate) {\n\t\t\tthrow new Error(\n\t\t\t\t'Pagination must be enabled for Scroller to operate'\n\t\t\t);\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = 'relative';\n\t\tthis.dom.force.style.top = '0px';\n\t\tthis.dom.force.style.left = '0px';\n\t\tthis.dom.force.style.width = '1px';\n\n\t\tthis.dom.scroller = dt.table().node().parentNode;\n\t\tthis.dom.scroller.appendChild(this.dom.force);\n\t\tthis.dom.scroller.style.position = 'relative';\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = 'absolute';\n\t\tthis.dom.table.style.top = '0px';\n\t\tthis.dom.table.style.left = '0px';\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(dt.table().container()).addClass('dts DTS');\n\n\t\tthis.dom.label.appendTo(this.dom.scroller);\n\n\t\t/* Initial size calculations */\n\t\tif (this.s.heights.row && this.s.heights.row != 'auto') {\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\n\t\t// Scrolling callback to see if a page change is needed\n\t\tthis.s.ingnoreScroll = true;\n\t\t$(this.dom.scroller).on('scroll.dt-scroller', function (e) {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t// In iOS we catch the touchstart event in case the user tries to scroll\n\t\t// while the display is already scrolling\n\t\t$(this.dom.scroller).on('touchstart.dt-scroller', function () {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t$(this.dom.scroller)\n\t\t\t.on('mousedown.dt-scroller', function () {\n\t\t\t\tthat.s.mousedown = true;\n\t\t\t})\n\t\t\t.on('mouseup.dt-scroller', function () {\n\t\t\t\tthat.s.labelVisible = false;\n\t\t\t\tthat.s.mousedown = false;\n\t\t\t\tthat.dom.label.css('display', 'none');\n\t\t\t});\n\n\t\t// On resize, update the information element, since the number of rows shown might change\n\t\t$(window).on('resize.dt-scroller', function () {\n\t\t\tthat.measure(false);\n\t\t\tthat._info();\n\t\t});\n\n\t\t// Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t// position of the scrolling.\n\t\tvar initialStateSave = true;\n\t\tvar loadedState = dt.state.loaded();\n\n\t\tdt.on('stateSaveParams.scroller', function (e, settings, data) {\n\t\t\tif (initialStateSave && loadedState) {\n\t\t\t\tdata.scroller = loadedState.scroller;\n\t\t\t\tinitialStateSave = false;\n\n\t\t\t\tif (data.scroller) {\n\t\t\t\t\tthat.s.lastScrollTop = data.scroller.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Need to used the saved position on init\n\t\t\t\tdata.scroller = {\n\t\t\t\t\ttopRow: that.s.topRowFloat,\n\t\t\t\t\tbaseRowTop: that.s.baseRowTop\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tdt.on('stateLoadParams.scroller', function (e, settings, data) {\n\t\t\tif (data.scroller !== undefined) {\n\t\t\t\tthat.scrollToRow(data.scroller.topRow);\n\t\t\t}\n\t\t});\n\n\t\tthis.measure(false);\n\n\t\tif (loadedState && loadedState.scroller) {\n\t\t\tthis.s.topRowFloat = loadedState.scroller.topRow;\n\t\t\tthis.s.baseRowTop = loadedState.scroller.baseRowTop;\n\n\t\t\t// Reconstruct the scroll positions from the rows - it is possible the\n\t\t\t// row height has changed e.g. if the styling framework has changed.\n\t\t\t// The scroll top is used in `_draw` further down.\n\t\t\tthis.s.baseScrollTop = this.s.baseRowTop * this.s.heights.row;\t\t\t\n\t\t\tloadedState.scroller.scrollTop = this._domain('physicalToVirtual', this.s.topRowFloat * this.s.heights.row);\n\t\t}\n\n\t\tthat.s.stateSaveThrottle = DataTable.util.throttle(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 500);\n\n\t\tdt.on('init.scroller', function () {\n\t\t\tthat.measure(false);\n\n\t\t\t// Setting to `jump` will instruct _draw to calculate the scroll top\n\t\t\t// position\n\t\t\tthat.s.scrollType = 'jump';\n\t\t\tthat._draw();\n\n\t\t\t// Update the scroller when the DataTable is redrawn\n\t\t\tdt.on('draw.scroller', function () {\n\t\t\t\tthat._draw();\n\t\t\t});\n\t\t});\n\n\t\t// Set height before the draw happens, allowing everything else to update\n\t\t// on draw complete without worry for roder.\n\t\tdt.on('preDraw.dt.scroller', function () {\n\t\t\tthat._scrollForce();\n\t\t});\n\n\t\t// Destructor\n\t\tdt.on('destroy.scroller', function () {\n\t\t\t$(window).off('resize.dt-scroller');\n\t\t\t$(that.dom.scroller).off('.dt-scroller');\n\t\t\t$(that.s.dt.nTable).off('.scroller');\n\n\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\tthat.dom.table.style.position = '';\n\t\t\tthat.dom.table.style.top = '';\n\t\t\tthat.dom.table.style.left = '';\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_calcRowHeight: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode(false);\n\t\tvar tbody = $('<tbody/>').appendTo(nTable);\n\t\tvar dtClasses = dt.oClasses;\n\n\t\t// Different locations for classes in DT2\n\t\tvar classes = DataTable.versionCheck('2')\n\t\t\t? {\n\t\t\t\t\tcontainer: dtClasses.container,\n\t\t\t\t\tscroller: dtClasses.scrolling.container,\n\t\t\t\t\tbody: dtClasses.scrolling.body\n\t\t\t}\n\t\t\t: {\n\t\t\t\t\tcontainer: dtClasses.sWrapper,\n\t\t\t\t\tscroller: dtClasses.sScrollWrapper,\n\t\t\t\t\tbody: dtClasses.sScrollBody\n\t\t\t};\n\n\t\tvar container = $(\n\t\t\t'<div class=\"' +\n\t\t\t\tclasses.container +\n\t\t\t\t' DTS\"><div class=\"' +\n\t\t\t\tclasses.scroller +\n\t\t\t\t'\"><div class=\"' +\n\t\t\t\tclasses.body +\n\t\t\t\t'\"></div></div></div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo(tbody);\n\t\tvar rowsCount = $('tr', tbody).length;\n\n\t\tif (rowsCount === 1) {\n\t\t\ttbody.prepend('<tr><td>&#160;</td></tr>');\n\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t}\n\t\telse {\n\t\t\tfor (; rowsCount < 3; rowsCount++) {\n\t\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t\t}\n\t\t}\n\n\t\t$('div.' + classes.body, container).append(nTable);\n\n\t\t// If initialised using `dom`, use the holding element as the insert point\n\t\tvar insertEl = this.s.dt.nHolding || origTable.parentNode;\n\n\t\tif (!$(insertEl).is(':visible')) {\n\t\t\tinsertEl = 'body';\n\t\t}\n\n\t\t// Remove form element links as they might select over others (particularly radio and checkboxes)\n\t\tcontainer.find('input').removeAttr('name');\n\n\t\tcontainer.appendTo(insertEl);\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\n\t\tcontainer.remove();\n\t},\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_draw: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay(),\n\t\t\tviewportEndY = iScrollTop + heights.viewport;\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// If paging is reset\n\t\tif (\n\t\t\t(this.s.dt.bSorted || this.s.dt.bFiltered) &&\n\t\t\tdisplayStart === 0 &&\n\t\t\t!this.s.dt._drawHold\n\t\t) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\tiScrollTop =\n\t\t\tthis.s.scrollType === 'jump'\n\t\t\t\t? this._domain(\n\t\t\t\t\t'virtualToPhysical',\n\t\t\t\t\tthis.s.topRowFloat * heights.row\n\t\t\t\t)\n\t\t\t\t: iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop =\n\t\t\tiScrollTop - (this.s.topRowFloat - displayStart) * heights.row;\n\t\tif (displayStart === 0) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if (displayStart + displayLen >= displayEnd) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\t\telse {\n\t\t\tvar iTableBottomY = tableTop + iTableHeight;\n\t\t\tif (iTableBottomY < viewportEndY) {\n\t\t\t\t// The last row of the data is above the end of the viewport.\n\t\t\t\t// This means the background is visible, which is not what the user expects.\n\t\t\t\tvar newTableTop = viewportEndY - iTableHeight;\n\t\t\t\tvar diffPx = newTableTop - tableTop;\n\t\t\t\tthis.s.baseScrollTop += diffPx + 1; // Update start row number in footer.\n\t\t\t\ttableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.\n\t\t\t}\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop + 'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom =\n\t\t\tiScrollTop + boundaryPx >\n\t\t\theights.scroll - heights.viewport - heights.row\n\t\t\t\t? heights.scroll - heights.viewport - heights.row\n\t\t\t\t: iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\tif (that.s.ingnoreScroll) {\n\t\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t\t// sourced, and the first draw when DOM soured\n\t\t\tif (\n\t\t\t\tthis.s.dt.oFeatures.bStateSave &&\n\t\t\t\tthis.s.dt.oLoadedState !== null &&\n\t\t\t\ttypeof this.s.dt.oLoadedState.scroller != 'undefined'\n\t\t\t) {\n\t\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\t\tvar ajaxSourced =\n\t\t\t\t\t(this.s.dt.sAjaxSource || that.s.dt.ajax) &&\n\t\t\t\t\t!this.s.dt.oFeatures.bServerSide\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: false;\n\n\t\t\t\tif (\n\t\t\t\t\t(ajaxSourced && this.s.dt.iDraw >= 2) ||\n\t\t\t\t\t(!ajaxSourced && this.s.dt.iDraw >= 1)\n\t\t\t\t) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(that.dom.scroller).scrollTop(\n\t\t\t\t\t\t\tthat.s.dt.oLoadedState.scroller.scrollTop\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t\t// small delay\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t}\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed.  Only add the thread break if bInfo is set\n\t\tif (this.s.dt.oFeatures.bInfo) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tthat._info.call(that);\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);\n\t},\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual`\n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function (dir, val) {\n\t\tvar heights = this.s.heights;\n\t\tvar diff;\n\t\tvar magic = 10000; // the point at which the non-linear calculations start to happen\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif (heights.virtual === heights.scroll) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// In the first 10k pixels and the last 10k pixels, we want the scrolling\n\t\t// to be linear. After that it can be non-linear. It would be unusual for\n\t\t// anyone to mouse wheel through that much.\n\t\tif (val < magic) {\n\t\t\treturn val;\n\t\t}\n\t\telse if (\n\t\t\tdir === 'virtualToPhysical' &&\n\t\t\tval >= heights.virtual - magic\n\t\t) {\n\t\t\tdiff = heights.virtual - val;\n\t\t\treturn heights.scroll - diff;\n\t\t}\n\t\telse if (dir === 'physicalToVirtual' && val >= heights.scroll - magic) {\n\t\t\tdiff = heights.scroll - val;\n\t\t\treturn heights.virtual - diff;\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple linear eq. to stop this, effectively\n\t\t// causing a kink in the scrolling ratio. It does mean the scrollbar is\n\t\t// non-linear, but with such massive data sets, the scrollbar is going\n\t\t// to be a best guess anyway\n\t\tvar m =\n\t\t\t(heights.virtual - magic - magic) /\n\t\t\t(heights.scroll - magic - magic);\n\t\tvar c = magic - m * magic;\n\n\t\treturn dir === 'virtualToPhysical' ? (val - c) / m : m * val + c;\n\t},\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_info: function () {\n\t\tif (!this.s.dt.oFeatures.bInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt,\n\t\t\tdtApi = this.s.dtApi,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tinfo = dtApi.page.info(),\n\t\t\ttotal = info.recordsDisplay,\n\t\t\tmax = info.recordsTotal;\n\n\t\t// If the scroll type is `cont` (continuous) we need to use `baseRowTop`, which\n\t\t// also means we need to work out the difference between the current scroll position\n\t\t// and the \"base\" for when it was required\n\t\tvar diffRows = (this.s.lastScrollTop - this.s.baseScrollTop) / this.s.heights.row;\n\t\tvar start = Math.floor(this.s.baseRowTop + diffRows) + 1;\n\n\t\t// For a jump scroll type, we just use the straightforward calculation based on\n\t\t// `topRowFloat`\n\t\tif (this.s.scrollType === 'jump') {\n\t\t\tstart = Math.floor(this.s.topRowFloat) + 1;\n\t\t}\n\n\t\tvar\n\t\t\tpossibleEnd = start + Math.floor(this.s.heights.viewport / this.s.heights.row),\n\t\t\tend = possibleEnd > total ? total : possibleEnd,\n\t\t\tresult;\n\n\t\tif (total === 0 && total == max) {\n\t\t\t/* Empty record set */\n\t\t\tresult = language.sInfoEmpty + language.sInfoPostFix;\n\t\t}\n\t\telse if (total === 0) {\n\t\t\t// Empty record set after filtering\n\t\t\tresult =\n\t\t\t\tlanguage.sInfoEmpty +\n\t\t\t\t' ' +\n\t\t\t\tlanguage.sInfoFiltered +\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if (total == max) {\n\t\t\t// Normal record set\n\t\t\tresult = language.sInfo + language.sInfoPostFix;\n\t\t}\n\t\telse {\n\t\t\t// Record set after filtering\n\t\t\tresult = language.sInfo + ' ' + language.sInfoFiltered + language.sInfoPostFix;\n\t\t}\n\n\t\tresult = this._macros(result, start, end, max, total);\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif (callback) {\n\t\t\tresult = callback.call(\n\t\t\t\tdt.oInstance,\n\t\t\t\tdt,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tmax,\n\t\t\t\ttotal,\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\t// DT 1.x features\n\t\tvar n = dt.aanFeatures.i;\n\t\tif (typeof n != 'undefined') {\n\t\t\tfor (var i = 0, iLen = n.length; i < iLen; i++) {\n\t\t\t\t$(n[i]).html(result);\n\t\t\t}\n\n\t\t\t$(dt.nTable).triggerHandler('info.dt');\n\t\t}\n\n\t\t// DT 2.x features\n\t\t$('div.dt-info', dtApi.table().container()).each(function () {\n\t\t\t$(this).html(result);\n\t\t\tdtApi.trigger('info', [dtApi.settings()[0], this, result]);\n\t\t});\n\t},\n\n\t/**\n\t * String replacement for info display. Basically the same as what DataTables does.\n\t *\n\t * @param {*} str\n\t * @param {*} start\n\t * @param {*} end\n\t * @param {*} max\n\t * @param {*} total\n\t * @returns Formatted string\n\t */\n\t_macros: function (str, start, end, max, total) {\n\t\tvar api = this.s.dtApi;\n\t\tvar settings = this.s.dt;\n\t\tvar formatter = settings.fnFormatNumber;\n\n\t\treturn str\n\t\t\t.replace(/_START_/g, formatter.call(settings, start))\n\t\t\t.replace(/_END_/g, formatter.call(settings, end))\n\t\t\t.replace(/_MAX_/g, formatter.call(settings, max))\n\t\t\t.replace(/_TOTAL_/g, formatter.call(settings, total))\n\t\t\t.replace(/_ENTRIES_/g, api.i18n('entries', ''))\n\t\t\t.replace(/_ENTRIES-MAX_/g, api.i18n('entries', '', max))\n\t\t\t.replace(/_ENTRIES-TOTAL_/g, api.i18n('entries', '', total));\n\t},\n\n\t/**\n\t * Parse CSS height property string as number\n\t *\n\t * An attempt is made to parse the string as a number. Currently supported units are 'px',\n\t * 'vh', and 'rem'. 'em' is partially supported; it works as long as the parent element's\n\t * font size matches the body element. Zero is returned for unrecognized strings.\n\t *  @param {string} cssHeight CSS height property string\n\t *  @returns {number} height\n\t *  @private\n\t */\n\t_parseHeight: function (cssHeight) {\n\t\tvar height;\n\t\tvar matches = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(\n\t\t\tcssHeight\n\t\t);\n\n\t\tif (matches === null) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar value = parseFloat(matches[1]);\n\t\tvar unit = matches[2];\n\n\t\tif (unit === 'px') {\n\t\t\theight = value;\n\t\t}\n\t\telse if (unit === 'vh') {\n\t\t\theight = (value / 100) * $(window).height();\n\t\t}\n\t\telse if (unit === 'rem') {\n\t\t\theight = value * parseFloat($(':root').css('font-size'));\n\t\t}\n\t\telse if (unit === 'em') {\n\t\t\theight = value * parseFloat($('body').css('font-size'));\n\t\t}\n\n\t\treturn height ? height : 0;\n\t},\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scroll: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif (this.s.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.s.ingnoreScroll) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iScrollTop === this.s.lastScrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif (this.s.dt.bFiltered || this.s.dt.bSorted) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout(this.s.stateTO);\n\t\tthis.s.stateTO = setTimeout(function () {\n\t\t\tthat.s.dtApi.state.save();\n\n\t\t\t// We can also use this to ensure that the `info` element is correct\n\t\t\t// since there can be a little scroll after the last scroll event!\n\t\t\tthat._info();\n\t\t}, 250);\n\n\t\tthis.s.scrollType =\n\t\t\tMath.abs(iScrollTop - this.s.lastScrollTop) > heights.viewport\n\t\t\t\t? 'jump'\n\t\t\t\t: 'cont';\n\n\t\tthis.s.topRowFloat =\n\t\t\tthis.s.scrollType === 'cont'\n\t\t\t\t? this.pixelsToRow(iScrollTop, false, false)\n\t\t\t\t: this._domain('physicalToVirtual', iScrollTop) / heights.row;\n\n\t\tif (this.s.topRowFloat < 0) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif (\n\t\t\tthis.s.forceReposition ||\n\t\t\tiScrollTop < this.s.redrawTop ||\n\t\t\tiScrollTop > this.s.redrawBottom\n\t\t) {\n\t\t\tvar preRows = Math.ceil(\n\t\t\t\t((this.s.displayBuffer - 1) / 2) * this.s.viewportRows\n\t\t\t);\n\n\t\t\tiTopRow = parseInt(this.s.topRowFloat, 10) - preRows;\n\t\t\tthis.s.forceReposition = false;\n\n\t\t\tif (iTopRow <= 0) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tiTopRow + this.s.dt._iDisplayLength >\n\t\t\t\tthis.s.dt.fnRecordsDisplay()\n\t\t\t) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow =\n\t\t\t\t\tthis.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif (iTopRow < 0) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (iTopRow % 2 !== 0) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\t// Store calcuated value, in case the following condition is not met, but so\n\t\t\t// that the draw function will still use it.\n\t\t\tthis.s.targetTop = iTopRow;\n\n\t\t\tif (iTopRow != this.s.dt._iDisplayStart) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom =\n\t\t\t\t\t$(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw = function () {\n\t\t\t\t\tthat.s.dt._iDisplayStart = that.s.targetTop;\n\t\t\t\t\tthat.s.dtApi.draw('page');\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif (this.s.dt.oFeatures.bServerSide) {\n\t\t\t\t\tthis.s.forceReposition = true;\n\n\t\t\t\t\t// This is used only for KeyTable and is not currently publicly\n\t\t\t\t\t// documented. Open question - is it useful for anything else?\n\t\t\t\t\t$(this.s.dt.nTable).triggerHandler('scroller-will-draw.dt');\n\n\t\t\t\t\tif (DataTable.versionCheck('2')) {\n\t\t\t\t\t\tthat.s.dtApi.processing(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.s.dt.oApi._fnProcessingDisplay(this.s.dt, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.s.drawTO);\n\t\t\t\t\tthis.s.drawTO = setTimeout(draw, this.s.serverWait);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.s.topRowFloat = this.pixelsToRow(iScrollTop, false, true);\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._info();\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\n\t\tif (this.s.scrollType === 'jump' && this.s.mousedown) {\n\t\t\tthis.s.labelVisible = true;\n\t\t}\n\t\tif (this.s.labelVisible) {\n\t\t\tvar labelFactor =\n\t\t\t\t(heights.viewport - heights.labelHeight - heights.xbar) /\n\t\t\t\theights.scroll;\n\n\t\t\tthis.dom.label\n\t\t\t\t.html(\n\t\t\t\t\tthis.s.dt.fnFormatNumber(\n\t\t\t\t\t\tparseInt(this.s.topRowFloat, 10) + 1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.css('top', iScrollTop + iScrollTop * labelFactor)\n\t\t\t\t.css('display', 'block');\n\t\t}\n\t},\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scrollForce: function () {\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif (heights.scroll > max) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\t// Minimum height so there is always a row visible (the 'no rows found'\n\t\t// if reduced to zero filtering)\n\t\tthis.dom.force.style.height =\n\t\t\theights.scroll > this.s.heights.row\n\t\t\t\t? heights.scroll + 'px'\n\t\t\t\t: this.s.heights.row + 'px';\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = {\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t */\n\tboundaryScale: 0.5,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  9\n\t *  @static\n\t */\n\tdisplayBuffer: 9,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t */\n\trowHeight: 'auto',\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t */\n\tserverWait: 200\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = '2.4.3';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtscroller', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.scroller;\n\tvar defaults = DataTable.defaults.scroller;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew Scroller(settings, opts);\n\t\t}\n\t}\n});\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n// DataTables 1.10 API method aliases\nvar Api = $.fn.dataTable.Api;\n\nApi.register('scroller()', function () {\n\treturn this;\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().rowToPixels()', function (rowIdx, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.rowToPixels(rowIdx, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().pixelsToRow()', function (pixels, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pixelsToRow(pixels, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()\nApi.register(\n\t['scroller().scrollToRow()', 'scroller.toPosition()'],\n\tfunction (idx, ani) {\n\t\tthis.iterator('table', function (ctx) {\n\t\t\tif (ctx.oScroller) {\n\t\t\t\tctx.oScroller.scrollToRow(idx, ani);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n);\n\nApi.register('row().scrollTo()', function (ani) {\n\tvar that = this;\n\n\tthis.iterator('row', function (ctx, rowIdx) {\n\t\tif (ctx.oScroller) {\n\t\t\tvar displayIdx = that\n\t\t\t\t.rows({ order: 'applied', search: 'applied' })\n\t\t\t\t.indexes()\n\t\t\t\t.indexOf(rowIdx);\n\n\t\t\tctx.oScroller.scrollToRow(displayIdx, ani);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.measure()', function (redraw) {\n\tthis.iterator('table', function (ctx) {\n\t\tif (ctx.oScroller) {\n\t\t\tctx.oScroller.measure(redraw);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.page()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pageInfo();\n\t}\n\t// undefined\n});\n\n\nreturn DataTable;\n}));\n","/*! Select for DataTables 1.7.0-dev\n * © SpryMedia Ltd - datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Version information for debugger\nDataTable.select = {};\n\nDataTable.select.version = '1.7.0-dev';\n\nDataTable.select.init = function (dt) {\n\tvar ctx = dt.settings()[0];\n\n\tif (ctx._select) {\n\t\treturn;\n\t}\n\n\tvar savedSelected = dt.state.loaded();\n\n\tvar selectAndSave = function (e, settings, data) {\n\t\tif (data === null || data.select === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any currently selected rows, before restoring state\n\t\t// None will be selected on first initialisation\n\t\tif (dt.rows({ selected: true }).any()) {\n\t\t\tdt.rows().deselect();\n\t\t}\n\t\tif (data.select.rows !== undefined) {\n\t\t\tdt.rows(data.select.rows).select();\n\t\t}\n\n\t\tif (dt.columns({ selected: true }).any()) {\n\t\t\tdt.columns().deselect();\n\t\t}\n\t\tif (data.select.columns !== undefined) {\n\t\t\tdt.columns(data.select.columns).select();\n\t\t}\n\n\t\tif (dt.cells({ selected: true }).any()) {\n\t\t\tdt.cells().deselect();\n\t\t}\n\t\tif (data.select.cells !== undefined) {\n\t\t\tfor (var i = 0; i < data.select.cells.length; i++) {\n\t\t\t\tdt.cell(data.select.cells[i].row, data.select.cells[i].column).select();\n\t\t\t}\n\t\t}\n\n\t\tdt.state.save();\n\t};\n\n\tdt.on('stateSaveParams', function (e, settings, data) {\n\t\tdata.select = {};\n\t\tdata.select.rows = dt.rows({ selected: true }).ids(true).toArray();\n\t\tdata.select.columns = dt.columns({ selected: true })[0];\n\t\tdata.select.cells = dt.cells({ selected: true })[0].map(function (coords) {\n\t\t\treturn { row: dt.row(coords.row).id(true), column: coords.column };\n\t\t});\n\t})\n\t\t.on('stateLoadParams', selectAndSave)\n\t\t.one('init', function () {\n\t\t\tselectAndSave(undefined, undefined, savedSelected);\n\t\t});\n\n\tvar init = ctx.oInit.select;\n\tvar defaults = DataTable.defaults.select;\n\tvar opts = init === undefined ? defaults : init;\n\n\t// Set defaults\n\tvar items = 'row';\n\tvar style = 'api';\n\tvar blurable = false;\n\tvar toggleable = true;\n\tvar info = true;\n\tvar selector = 'td, th';\n\tvar className = 'selected';\n\tvar setStyle = false;\n\n\tctx._select = {};\n\n\t// Initialisation customisations\n\tif (opts === true) {\n\t\tstyle = 'os';\n\t\tsetStyle = true;\n\t}\n\telse if (typeof opts === 'string') {\n\t\tstyle = opts;\n\t\tsetStyle = true;\n\t}\n\telse if ($.isPlainObject(opts)) {\n\t\tif (opts.blurable !== undefined) {\n\t\t\tblurable = opts.blurable;\n\t\t}\n\n\t\tif (opts.toggleable !== undefined) {\n\t\t\ttoggleable = opts.toggleable;\n\t\t}\n\n\t\tif (opts.info !== undefined) {\n\t\t\tinfo = opts.info;\n\t\t}\n\n\t\tif (opts.items !== undefined) {\n\t\t\titems = opts.items;\n\t\t}\n\n\t\tif (opts.style !== undefined) {\n\t\t\tstyle = opts.style;\n\t\t\tsetStyle = true;\n\t\t}\n\t\telse {\n\t\t\tstyle = 'os';\n\t\t\tsetStyle = true;\n\t\t}\n\n\t\tif (opts.selector !== undefined) {\n\t\t\tselector = opts.selector;\n\t\t}\n\n\t\tif (opts.className !== undefined) {\n\t\t\tclassName = opts.className;\n\t\t}\n\t}\n\n\tdt.select.selector(selector);\n\tdt.select.items(items);\n\tdt.select.style(style);\n\tdt.select.blurable(blurable);\n\tdt.select.toggleable(toggleable);\n\tdt.select.info(info);\n\tctx._select.className = className;\n\n\t// Sort table based on selected rows. Requires Select Datatables extension\n\t$.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {\n\t\treturn this.api()\n\t\t\t.column(col, { order: 'index' })\n\t\t\t.nodes()\n\t\t\t.map(function (td) {\n\t\t\t\tif (settings._select.items === 'row') {\n\t\t\t\t\treturn $(td).parent().hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\telse if (settings._select.items === 'cell') {\n\t\t\t\t\treturn $(td).hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t};\n\n\t// If the init options haven't enabled select, but there is a selectable\n\t// class name, then enable\n\tif (!setStyle && $(dt.table().node()).hasClass('selectable')) {\n\t\tdt.select.style('os');\n\t}\n};\n\n/*\n\nSelect is a collection of API methods, event handlers, event emitters and\nbuttons (for the `Buttons` extension) for DataTables. It provides the following\nfeatures, with an overview of how they are implemented:\n\n## Selection of rows, columns and cells. Whether an item is selected or not is\n   stored in:\n\n* rows: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoData` object for each row\n* columns: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoColumns` object for each column\n* cells: a `_selected_cells` property which contains an array of boolean values\n  of the `aoData` object for each row. The array is the same length as the\n  columns array, with each element of it representing a cell.\n\nThis method of using boolean flags allows Select to operate when nodes have not\nbeen created for rows / cells (DataTables' defer rendering feature).\n\n## API methods\n\nA range of API methods are available for triggering selection and de-selection\nof rows. Methods are also available to configure the selection events that can\nbe triggered by an end user (such as which items are to be selected). To a large\nextent, these of API methods *is* Select. It is basically a collection of helper\nfunctions that can be used to select items in a DataTable.\n\nConfiguration of select is held in the object `_select` which is attached to the\nDataTables settings object on initialisation. Select being available on a table\nis not optional when Select is loaded, but its default is for selection only to\nbe available via the API - so the end user wouldn't be able to select rows\nwithout additional configuration.\n\nThe `_select` object contains the following properties:\n\n```\n{\n\titems:string       - Can be `rows`, `columns` or `cells`. Defines what item \n\t                     will be selected if the user is allowed to activate row\n\t                     selection using the mouse.\n\tstyle:string       - Can be `none`, `single`, `multi` or `os`. Defines the\n\t                     interaction style when selecting items\n\tblurable:boolean   - If row selection can be cleared by clicking outside of\n\t                     the table\n\ttoggleable:boolean - If row selection can be cancelled by repeated clicking\n\t                     on the row\n\tinfo:boolean       - If the selection summary should be shown in the table\n\t                     information elements\n}\n```\n\nIn addition to the API methods, Select also extends the DataTables selector\noptions for rows, columns and cells adding a `selected` option to the selector\noptions object, allowing the developer to select only selected items or\nunselected items.\n\n## Mouse selection of items\n\nClicking on items can be used to select items. This is done by a simple event\nhandler that will select the items using the API methods.\n\n */\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local functions\n */\n\n/**\n * Add one or more cells to the selection when shift clicking in OS selection\n * style cell selection.\n *\n * Cell range is more complicated than row and column as we want to select\n * in the visible grid rather than by index in sequence. For example, if you\n * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1\n * should also be selected (and not 1-3, 1-4. etc)\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {object}        idx  Cell index to select to\n * @param  {object}        last Cell index to select from\n * @private\n */\nfunction cellRange(dt, idx, last) {\n\tvar indexes;\n\tvar columnIndexes;\n\tvar rowIndexes;\n\tvar selectColumns = function (start, end) {\n\t\tif (start > end) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn dt\n\t\t\t.columns(':visible')\n\t\t\t.indexes()\n\t\t\t.filter(function (i) {\n\t\t\t\tif (i === start) {\n\t\t\t\t\trecord = true;\n\t\t\t\t}\n\n\t\t\t\tif (i === end) {\n\t\t\t\t\t// not else if, as start might === end\n\t\t\t\t\trecord = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn record;\n\t\t\t});\n\t};\n\n\tvar selectRows = function (start, end) {\n\t\tvar indexes = dt.rows({ search: 'applied' }).indexes();\n\n\t\t// Which comes first - might need to swap\n\t\tif (indexes.indexOf(start) > indexes.indexOf(end)) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn indexes.filter(function (i) {\n\t\t\tif (i === start) {\n\t\t\t\trecord = true;\n\t\t\t}\n\n\t\t\tif (i === end) {\n\t\t\t\trecord = false;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn record;\n\t\t});\n\t};\n\n\tif (!dt.cells({ selected: true }).any() && !last) {\n\t\t// select from the top left cell to this one\n\t\tcolumnIndexes = selectColumns(0, idx.column);\n\t\trowIndexes = selectRows(0, idx.row);\n\t}\n\telse {\n\t\t// Get column indexes between old and new\n\t\tcolumnIndexes = selectColumns(last.column, idx.column);\n\t\trowIndexes = selectRows(last.row, idx.row);\n\t}\n\n\tindexes = dt.cells(rowIndexes, columnIndexes).flatten();\n\n\tif (!dt.cells(idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt.cells(indexes).select();\n\t}\n\telse {\n\t\t// Deselect range\n\t\tdt.cells(indexes).deselect();\n\t}\n}\n\n/**\n * Disable mouse selection by removing the selectors\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction disableMouseSelection(dt) {\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\n\t$(dt.table().container())\n\t\t.off('mousedown.dtSelect', selector)\n\t\t.off('mouseup.dtSelect', selector)\n\t\t.off('click.dtSelect', selector);\n\n\t$('body').off('click.dtSelect' + _safeId(dt.table().node()));\n}\n\n/**\n * Attach mouse listeners to the table to allow mouse selection of items\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction enableMouseSelection(dt) {\n\tvar container = $(dt.table().container());\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\tvar matchSelection;\n\n\tcontainer\n\t\t.on('mousedown.dtSelect', selector, function (e) {\n\t\t\t// Disallow text selection for shift clicking on the table so multi\n\t\t\t// element selection doesn't look terrible!\n\t\t\tif (e.shiftKey || e.metaKey || e.ctrlKey) {\n\t\t\t\tcontainer\n\t\t\t\t\t.css('-moz-user-select', 'none')\n\t\t\t\t\t.one('selectstart.dtSelect', selector, function () {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (window.getSelection) {\n\t\t\t\tmatchSelection = window.getSelection();\n\t\t\t}\n\t\t})\n\t\t.on('mouseup.dtSelect', selector, function () {\n\t\t\t// Allow text selection to occur again, Mozilla style (tested in FF\n\t\t\t// 35.0.1 - still required)\n\t\t\tcontainer.css('-moz-user-select', '');\n\t\t})\n\t\t.on('click.dtSelect', selector, function (e) {\n\t\t\tvar items = dt.select.items();\n\t\t\tvar idx;\n\n\t\t\t// If text was selected (click and drag), then we shouldn't change\n\t\t\t// the row's selected state\n\t\t\tif (matchSelection) {\n\t\t\t\tvar selection = window.getSelection();\n\n\t\t\t\t// If the element that contains the selection is not in the table, we can ignore it\n\t\t\t\t// This can happen if the developer selects text from the click event\n\t\t\t\tif (\n\t\t\t\t\t!selection.anchorNode ||\n\t\t\t\t\t$(selection.anchorNode).closest('table')[0] === dt.table().node()\n\t\t\t\t) {\n\t\t\t\t\tif (selection !== matchSelection) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar ctx = dt.settings()[0];\n\t\t\tvar wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');\n\n\t\t\t// Ignore clicks inside a sub-table\n\t\t\tif ($(e.target).closest('div.' + wrapperClass)[0] != dt.table().container()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cell = dt.cell($(e.target).closest('td, th'));\n\n\t\t\t// Check the cell actually belongs to the host DataTable (so child\n\t\t\t// rows, etc, are ignored)\n\t\t\tif (!cell.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('user-select.dt');\n\t\t\teventTrigger(dt, event, [items, cell, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cellIndex = cell.index();\n\t\t\tif (items === 'row') {\n\t\t\t\tidx = cellIndex.row;\n\t\t\t\ttypeSelect(e, dt, ctx, 'row', idx);\n\t\t\t}\n\t\t\telse if (items === 'column') {\n\t\t\t\tidx = cell.index().column;\n\t\t\t\ttypeSelect(e, dt, ctx, 'column', idx);\n\t\t\t}\n\t\t\telse if (items === 'cell') {\n\t\t\t\tidx = cell.index();\n\t\t\t\ttypeSelect(e, dt, ctx, 'cell', idx);\n\t\t\t}\n\n\t\t\tctx._select_lastCell = cellIndex;\n\t\t});\n\n\t// Blurable\n\t$('body').on('click.dtSelect' + _safeId(dt.table().node()), function (e) {\n\t\tif (ctx._select.blurable) {\n\t\t\t// If the click was inside the DataTables container, don't blur\n\t\t\tif ($(e.target).parents().filter(dt.table().container()).length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Ignore elements which have been removed from the DOM (i.e. paging\n\t\t\t// buttons)\n\t\t\tif ($(e.target).parents('html').length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't blur in Editor form\n\t\t\tif ($(e.target).parents('div.DTE').length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('select-blur.dt');\n\t\t\teventTrigger(dt, event, [e.target, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclear(ctx, true);\n\t\t}\n\t});\n}\n\n/**\n * Trigger an event on a DataTable\n *\n * @param {DataTable.Api} api      DataTable to trigger events on\n * @param  {boolean}      selected true if selected, false if deselected\n * @param  {string}       type     Item type acting on\n * @param  {boolean}      any      Require that there are values before\n *     triggering\n * @private\n */\nfunction eventTrigger(api, type, args, any) {\n\tif (any && !api.flatten().length) {\n\t\treturn;\n\t}\n\n\tif (typeof type === 'string') {\n\t\ttype = type + '.dt';\n\t}\n\n\targs.unshift(api);\n\n\t$(api.table().node()).trigger(type, args);\n}\n\n/**\n * Update the information element of the DataTable showing information about the\n * items selected. This is done by adding tags to the existing text\n *\n * @param {DataTable.Api} api DataTable to update\n * @private\n */\nfunction info(api) {\n\tvar ctx = api.settings()[0];\n\n\tif (!ctx._select.info || !ctx.aanFeatures.i) {\n\t\treturn;\n\t}\n\n\tif (api.select.style() === 'api') {\n\t\treturn;\n\t}\n\n\tvar rows = api.rows({ selected: true }).flatten().length;\n\tvar columns = api.columns({ selected: true }).flatten().length;\n\tvar cells = api.cells({ selected: true }).flatten().length;\n\n\tvar add = function (el, name, num) {\n\t\tel.append(\n\t\t\t$('<span class=\"select-item\"/>').append(\n\t\t\t\tapi.i18n(\n\t\t\t\t\t'select.' + name + 's',\n\t\t\t\t\t{ _: '%d ' + name + 's selected', 0: '', 1: '1 ' + name + ' selected' },\n\t\t\t\t\tnum\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t};\n\n\t// Internal knowledge of DataTables to loop over all information elements\n\t$.each(ctx.aanFeatures.i, function (i, el) {\n\t\tel = $(el);\n\n\t\tvar output = $('<span class=\"select-info\"/>');\n\t\tadd(output, 'row', rows);\n\t\tadd(output, 'column', columns);\n\t\tadd(output, 'cell', cells);\n\n\t\tvar exisiting = el.children('span.select-info');\n\t\tif (exisiting.length) {\n\t\t\texisiting.remove();\n\t\t}\n\n\t\tif (output.text() !== '') {\n\t\t\tel.append(output);\n\t\t}\n\t});\n}\n\n/**\n * Initialisation of a new table. Attach event handlers and callbacks to allow\n * Select to operate correctly.\n *\n * This will occur _after_ the initial DataTables initialisation, although\n * before Ajax data is rendered, if there is ajax data\n *\n * @param  {DataTable.settings} ctx Settings object to operate on\n * @private\n */\nfunction init(ctx) {\n\tvar api = new DataTable.Api(ctx);\n\tctx._select_init = true;\n\n\t// Row callback so that classes can be added to rows and cells if the item\n\t// was selected before the element was created. This will happen with the\n\t// `deferRender` option enabled.\n\t//\n\t// This method of attaching to `aoRowCreatedCallback` is a hack until\n\t// DataTables has proper events for row manipulation If you are reviewing\n\t// this code to create your own plug-ins, please do not do this!\n\tctx.aoRowCreatedCallback.push({\n\t\tfn: function (row, data, index) {\n\t\t\tvar i, ien;\n\t\t\tvar d = ctx.aoData[index];\n\n\t\t\t// Row\n\t\t\tif (d._select_selected) {\n\t\t\t\t$(row).addClass(ctx._select.className);\n\t\t\t}\n\n\t\t\t// Cells and columns - if separated out, we would need to do two\n\t\t\t// loops, so it makes sense to combine them into a single one\n\t\t\tfor (i = 0, ien = ctx.aoColumns.length; i < ien; i++) {\n\t\t\t\tif (\n\t\t\t\t\tctx.aoColumns[i]._select_selected ||\n\t\t\t\t\t(d._selected_cells && d._selected_cells[i])\n\t\t\t\t) {\n\t\t\t\t\t$(d.anCells[i]).addClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsName: 'select-deferRender'\n\t});\n\n\t// On Ajax reload we want to reselect all rows which are currently selected,\n\t// if there is an rowId (i.e. a unique value to identify each row with)\n\tapi.on('preXhr.dt.dtSelect', function (e, settings) {\n\t\tif (settings !== api.settings()[0]) {\n\t\t\t// Not triggered by our DataTable!\n\t\t\treturn;\n\t\t}\n\n\t\t// note that column selection doesn't need to be cached and then\n\t\t// reselected, as they are already selected\n\t\tvar rows = api\n\t\t\t.rows({ selected: true })\n\t\t\t.ids(true)\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\tvar cells = api\n\t\t\t.cells({ selected: true })\n\t\t\t.eq(0)\n\t\t\t.map(function (cellIdx) {\n\t\t\t\tvar id = api.row(cellIdx.row).id(true);\n\t\t\t\treturn id ? { row: id, column: cellIdx.column } : undefined;\n\t\t\t})\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\t// On the next draw, reselect the currently selected items\n\t\tapi.one('draw.dt.dtSelect', function () {\n\t\t\tapi.rows(rows).select();\n\n\t\t\t// `cells` is not a cell index selector, so it needs a loop\n\t\t\tif (cells.any()) {\n\t\t\t\tcells.each(function (id) {\n\t\t\t\t\tapi.cells(id.row, id.column).select();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Update the table information element with selected item summary\n\tapi.on('draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {\n\t\tinfo(api);\n\t\tapi.state.save();\n\t});\n\n\t// Clean up and release\n\tapi.on('destroy.dtSelect', function () {\n\t\t// Remove class directly rather than calling deselect - which would trigger events\n\t\t$(api.rows({ selected: true }).nodes()).removeClass(api.settings()[0]._select.className);\n\n\t\tdisableMouseSelection(api);\n\t\tapi.off('.dtSelect');\n\t\t$('body').off('.dtSelect' + _safeId(api.table().node()));\n\t});\n}\n\n/**\n * Add one or more items (rows or columns) to the selection when shift clicking\n * in OS selection style\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {string}        type Row or column range selector\n * @param  {object}        idx  Item index to select to\n * @param  {object}        last Item index to select from\n * @private\n */\nfunction rowColumnRange(dt, type, idx, last) {\n\t// Add a range of rows from the last selected row to this one\n\tvar indexes = dt[type + 's']({ search: 'applied' }).indexes();\n\tvar idx1 = $.inArray(last, indexes);\n\tvar idx2 = $.inArray(idx, indexes);\n\n\tif (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {\n\t\t// select from top to here - slightly odd, but both Windows and Mac OS\n\t\t// do this\n\t\tindexes.splice($.inArray(idx, indexes) + 1, indexes.length);\n\t}\n\telse {\n\t\t// reverse so we can shift click 'up' as well as down\n\t\tif (idx1 > idx2) {\n\t\t\tvar tmp = idx2;\n\t\t\tidx2 = idx1;\n\t\t\tidx1 = tmp;\n\t\t}\n\n\t\tindexes.splice(idx2 + 1, indexes.length);\n\t\tindexes.splice(0, idx1);\n\t}\n\n\tif (!dt[type](idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt[type + 's'](indexes).select();\n\t}\n\telse {\n\t\t// Deselect range - need to keep the clicked on row selected\n\t\tindexes.splice($.inArray(idx, indexes), 1);\n\t\tdt[type + 's'](indexes).deselect();\n\t}\n}\n\n/**\n * Clear all selected items\n *\n * @param  {DataTable.settings} ctx Settings object of the host DataTable\n * @param  {boolean} [force=false] Force the de-selection to happen, regardless\n *     of selection style\n * @private\n */\nfunction clear(ctx, force) {\n\tif (force || ctx._select.style === 'single') {\n\t\tvar api = new DataTable.Api(ctx);\n\n\t\tapi.rows({ selected: true }).deselect();\n\t\tapi.columns({ selected: true }).deselect();\n\t\tapi.cells({ selected: true }).deselect();\n\t}\n}\n\n/**\n * Select items based on the current configuration for style and items.\n *\n * @param  {object}             e    Mouse event object\n * @param  {DataTables.Api}     dt   DataTable\n * @param  {DataTable.settings} ctx  Settings object of the host DataTable\n * @param  {string}             type Items to select\n * @param  {int|object}         idx  Index of the item to select\n * @private\n */\nfunction typeSelect(e, dt, ctx, type, idx) {\n\tvar style = dt.select.style();\n\tvar toggleable = dt.select.toggleable();\n\tvar isSelected = dt[type](idx, { selected: true }).any();\n\n\tif (isSelected && !toggleable) {\n\t\treturn;\n\t}\n\n\tif (style === 'os') {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t// Add or remove from the selection\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t\telse if (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No cmd or shift click - deselect if selected, or select\n\t\t\t// this row only\n\t\t\tvar selected = dt[type + 's']({ selected: true });\n\n\t\t\tif (isSelected && selected.flatten().length === 1) {\n\t\t\t\tdt[type](idx).deselect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tselected.deselect();\n\t\t\t\tdt[type](idx).select();\n\t\t\t}\n\t\t}\n\t}\n\telse if (style == 'multi+shift') {\n\t\tif (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t}\n\telse {\n\t\tdt[type](idx).select(!isSelected);\n\t}\n}\n\nfunction _safeId(node) {\n\treturn node.id.replace(/[^a-zA-Z0-9\\-\\_]/g, '-');\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables selectors\n */\n\n// row and column are basically identical just assigned to different properties\n// and checking a different array, so we can dynamically create the functions to\n// reduce the code size\n$.each(\n\t[\n\t\t{ type: 'row', prop: 'aoData' },\n\t\t{ type: 'column', prop: 'aoColumns' }\n\t],\n\tfunction (i, o) {\n\t\tDataTable.ext.selector[o.type].push(function (settings, opts, indexes) {\n\t\t\tvar selected = opts.selected;\n\t\t\tvar data;\n\t\t\tvar out = [];\n\n\t\t\tif (selected !== true && selected !== false) {\n\t\t\t\treturn indexes;\n\t\t\t}\n\n\t\t\tfor (var i = 0, ien = indexes.length; i < ien; i++) {\n\t\t\t\tdata = settings[o.prop][indexes[i]];\n\n\t\t\t\tif (\n\t\t\t\t\t(selected === true && data._select_selected === true) ||\n\t\t\t\t\t(selected === false && !data._select_selected)\n\t\t\t\t) {\n\t\t\t\t\tout.push(indexes[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t});\n\t}\n);\n\nDataTable.ext.selector.cell.push(function (settings, opts, cells) {\n\tvar selected = opts.selected;\n\tvar rowData;\n\tvar out = [];\n\n\tif (selected === undefined) {\n\t\treturn cells;\n\t}\n\n\tfor (var i = 0, ien = cells.length; i < ien; i++) {\n\t\trowData = settings.aoData[cells[i].row];\n\n\t\tif (\n\t\t\t(selected === true &&\n\t\t\t\trowData._selected_cells &&\n\t\t\t\trowData._selected_cells[cells[i].column] === true) ||\n\t\t\t(selected === false &&\n\t\t\t\t(!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))\n\t\t) {\n\t\t\tout.push(cells[i]);\n\t\t}\n\t}\n\n\treturn out;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Local variables to improve compression\nvar apiRegister = DataTable.Api.register;\nvar apiRegisterPlural = DataTable.Api.registerPlural;\n\napiRegister('select()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t});\n});\n\napiRegister('select.blurable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.blurable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.blurable = flag;\n\t});\n});\n\napiRegister('select.toggleable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.toggleable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.toggleable = flag;\n\t});\n});\n\napiRegister('select.info()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.info;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.info = flag;\n\t});\n});\n\napiRegister('select.items()', function (items) {\n\tif (items === undefined) {\n\t\treturn this.context[0]._select.items;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.items = items;\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectItems', [items]);\n\t});\n});\n\n// Takes effect from the _next_ selection. None disables future selection, but\n// does not clear the current selection. Use the `deselect` methods for that\napiRegister('select.style()', function (style) {\n\tif (style === undefined) {\n\t\treturn this.context[0]._select.style;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (!ctx._select) {\n\t\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t\t}\n\n\t\tif (!ctx._select_init) {\n\t\t\tinit(ctx);\n\t\t}\n\n\t\tctx._select.style = style;\n\n\t\t// Add / remove mouse event handlers. They aren't required when only\n\t\t// API selection is available\n\t\tvar dt = new DataTable.Api(ctx);\n\t\tdisableMouseSelection(dt);\n\n\t\tif (style !== 'api') {\n\t\t\tenableMouseSelection(dt);\n\t\t}\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectStyle', [style]);\n\t});\n});\n\napiRegister('select.selector()', function (selector) {\n\tif (selector === undefined) {\n\t\treturn this.context[0]._select.selector;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tdisableMouseSelection(new DataTable.Api(ctx));\n\n\t\tctx._select.selector = selector;\n\n\t\tif (ctx._select.style !== 'api') {\n\t\t\tenableMouseSelection(new DataTable.Api(ctx));\n\t\t}\n\t});\n});\n\napiRegisterPlural('rows().select()', 'row().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoData[idx]._select_selected = true;\n\t\t$(ctx.aoData[idx].nTr).addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('row().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoData[this[0]] && ctx.aoData[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('columns().select()', 'column().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoColumns[idx]._select_selected = true;\n\n\t\tvar column = new DataTable.Api(ctx).column(idx);\n\n\t\t$(column.header()).addClass(ctx._select.className);\n\t\t$(column.footer()).addClass(ctx._select.className);\n\n\t\tcolumn.nodes().to$().addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('column().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoColumns[this[0]] && ctx.aoColumns[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('cells().select()', 'cell().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tclear(ctx);\n\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells === undefined) {\n\t\t\tdata._selected_cells = [];\n\t\t}\n\n\t\tdata._selected_cells[colIdx] = true;\n\n\t\tif (data.anCells) {\n\t\t\t$(data.anCells[colIdx]).addClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['cell', api.cells(api[i]).indexes().toArray()], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('cell().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length) {\n\t\tvar row = ctx.aoData[this[0][0].row];\n\n\t\tif (row && row._selected_cells && row._selected_cells[this[0][0].column]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('rows().deselect()', 'row().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tctx.aoData[idx]._select_selected = false;\n\t\tctx._select_lastCell = null;\n\t\t$(ctx.aoData[idx].nTr).removeClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('columns().deselect()', 'column().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tctx.aoColumns[idx]._select_selected = false;\n\n\t\tvar api = new DataTable.Api(ctx);\n\t\tvar column = api.column(idx);\n\n\t\t$(column.header()).removeClass(ctx._select.className);\n\t\t$(column.footer()).removeClass(ctx._select.className);\n\n\t\t// Need to loop over each cell, rather than just using\n\t\t// `column().nodes()` as cells which are individually selected should\n\t\t// not have the `selected` class removed from them\n\t\tapi.cells(null, idx)\n\t\t\t.indexes()\n\t\t\t.each(function (cellIdx) {\n\t\t\t\tvar data = ctx.aoData[cellIdx.row];\n\t\t\t\tvar cellSelected = data._selected_cells;\n\n\t\t\t\tif (data.anCells && (!cellSelected || !cellSelected[cellIdx.column])) {\n\t\t\t\t\t$(data.anCells[cellIdx.column]).removeClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('cells().deselect()', 'cell().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells !== undefined) {\n\t\t\tdata._selected_cells[colIdx] = false;\n\t\t}\n\n\t\t// Remove class only if the cells exist, and the cell is not column\n\t\t// selected, in which case the class should remain (since it is selected\n\t\t// in the column)\n\t\tif (data.anCells && !ctx.aoColumns[colIdx]._select_selected) {\n\t\t\t$(data.anCells[colIdx]).removeClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['cell', api[i]], true);\n\t});\n\n\treturn this;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\nfunction i18n(label, def) {\n\treturn function (dt) {\n\t\treturn dt.i18n('buttons.' + label, def);\n\t};\n}\n\n// Common events with suitable namespaces\nfunction namespacedEvents(config) {\n\tvar unique = config._eventNamespace;\n\n\treturn 'draw.dt.DT' + unique + ' select.dt.DT' + unique + ' deselect.dt.DT' + unique;\n}\n\nfunction enabled(dt, config) {\n\tif ($.inArray('rows', config.limitTo) !== -1 && dt.rows({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('columns', config.limitTo) !== -1 && dt.columns({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('cells', config.limitTo) !== -1 && dt.cells({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nvar _buttonNamespace = 0;\n\n$.extend(DataTable.ext.buttons, {\n\tselected: {\n\t\ttext: i18n('selected', 'Selected'),\n\t\tclassName: 'buttons-selected',\n\t\tlimitTo: ['rows', 'columns', 'cells'],\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\t// .DT namespace listeners are removed by DataTables automatically\n\t\t\t// on table destroy\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tthat.enable(enabled(dt, config));\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectedSingle: {\n\t\ttext: i18n('selectedSingle', 'Selected single'),\n\t\tclassName: 'buttons-selected-single',\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count === 1);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectAll: {\n\t\ttext: i18n('selectAll', 'Select all'),\n\t\tclassName: 'buttons-select-all',\n\t\taction: function (e, dt, node, config) {\n\t\t\tvar items = this.select.items();\n\t\t\tvar mod = config.selectorModifier;\n\t\t\t\n\t\t\tif (mod) {\n\t\t\t\tif (typeof mod === 'function') {\n\t\t\t\t\tmod = mod.call(dt, e, dt, node, config);\n\t\t\t\t}\n\n\t\t\t\tthis[items + 's'](mod).select();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis[items + 's']().select();\n\t\t\t}\n\t\t}\n\t\t// selectorModifier can be specified\n\t},\n\tselectNone: {\n\t\ttext: i18n('selectNone', 'Deselect all'),\n\t\tclassName: 'buttons-select-none',\n\t\taction: function () {\n\t\t\tclear(this.settings()[0], true);\n\t\t},\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count > 0);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tshowSelected: {\n\t\ttext: i18n('showSelected', 'Show only selected'),\n\t\tclassName: 'buttons-show-selected',\n\t\taction: function (e, dt, node, conf) {\n\t\t\t// Works by having a filtering function which will reduce to the selected\n\t\t\t// items only. So we can re-reference the function it gets stored in the\n\t\t\t// `conf` object\n\t\t\tif (conf._filter) {\n\t\t\t\tvar idx = DataTable.ext.search.indexOf(conf._filter);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tDataTable.ext.search.splice(idx, 1);\n\t\t\t\t\tconf._filter = null;\n\t\t\t\t}\n\n\t\t\t\tthis.active(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar fn = function (s, data, idx) {\n\t\t\t\t\t// Need to be sure we are operating on our table!\n\t\t\t\t\tif (s !== dt.settings()[0]) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet row = s.aoData[idx];\n\n\t\t\t\t\treturn row._select_selected;\n\t\t\t\t};\n\n\t\t\t\tconf._filter = fn;\n\t\t\t\tDataTable.ext.search.push(fn);\n\n\t\t\t\tthis.active(true);\n\t\t\t}\n\n\t\t\tdt.draw();\n\t\t}\n\t}\n});\n\n$.each(['Row', 'Column', 'Cell'], function (i, item) {\n\tvar lc = item.toLowerCase();\n\n\tDataTable.ext.buttons['select' + item + 's'] = {\n\t\ttext: i18n('select' + item + 's', 'Select ' + lc + 's'),\n\t\tclassName: 'buttons-select-' + lc + 's',\n\t\taction: function () {\n\t\t\tthis.select.items(lc);\n\t\t},\n\t\tinit: function (dt) {\n\t\t\tvar that = this;\n\n\t\t\tdt.on('selectItems.dt.DT', function (e, ctx, items) {\n\t\t\t\tthat.active(items === lc);\n\t\t\t});\n\t\t}\n\t};\n});\n\n$.fn.DataTable.select = DataTable.select;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n */\n\n// DataTables creation - check if select has been defined in the options. Note\n// this required that the table be in the document! If it isn't then something\n// needs to trigger this method unfortunately. The next major release of\n// DataTables will rework the events and address this.\n$(document).on('preInit.dt.dtSelect', function (e, ctx) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tDataTable.select.init(new DataTable.Api(ctx));\n});\n\n\nreturn DataTable;\n}));\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source  : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n  ? window : typeof self === 'object' && self.self === self\n  ? self : typeof global === 'object' && global.global === global\n  ? global\n  : this\n\nfunction bom (blob, opts) {\n  if (typeof opts === 'undefined') opts = { autoBom: false }\n  else if (typeof opts !== 'object') {\n    console.warn('Deprecated: Expected third argument to be a object')\n    opts = { autoBom: !opts }\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n    return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n  }\n  return blob\n}\n\nfunction download (url, name, opts) {\n  var xhr = new XMLHttpRequest()\n  xhr.open('GET', url)\n  xhr.responseType = 'blob'\n  xhr.onload = function () {\n    saveAs(xhr.response, name, opts)\n  }\n  xhr.onerror = function () {\n    console.error('could not download file')\n  }\n  xhr.send()\n}\n\nfunction corsEnabled (url) {\n  var xhr = new XMLHttpRequest()\n  // use sync to avoid popup blocker\n  xhr.open('HEAD', url, false)\n  try {\n    xhr.send()\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n  try {\n    node.dispatchEvent(new MouseEvent('click'))\n  } catch (e) {\n    var evt = document.createEvent('MouseEvents')\n    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n                          20, false, false, false, false, 0, null)\n    node.dispatchEvent(evt)\n  }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n  // probably in some web worker\n  (typeof window !== 'object' || window !== _global)\n    ? function saveAs () { /* noop */ }\n\n  // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n  : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n  ? function saveAs (blob, name, opts) {\n    var URL = _global.URL || _global.webkitURL\n    var a = document.createElement('a')\n    name = name || blob.name || 'download'\n\n    a.download = name\n    a.rel = 'noopener' // tabnabbing\n\n    // TODO: detect chrome extensions & packaged apps\n    // a.target = '_blank'\n\n    if (typeof blob === 'string') {\n      // Support regular links\n      a.href = blob\n      if (a.origin !== location.origin) {\n        corsEnabled(a.href)\n          ? download(blob, name, opts)\n          : click(a, a.target = '_blank')\n      } else {\n        click(a)\n      }\n    } else {\n      // Support blobs\n      a.href = URL.createObjectURL(blob)\n      setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n      setTimeout(function () { click(a) }, 0)\n    }\n  }\n\n  // Use msSaveOrOpenBlob as a second approach\n  : 'msSaveOrOpenBlob' in navigator\n  ? function saveAs (blob, name, opts) {\n    name = name || blob.name || 'download'\n\n    if (typeof blob === 'string') {\n      if (corsEnabled(blob)) {\n        download(blob, name, opts)\n      } else {\n        var a = document.createElement('a')\n        a.href = blob\n        a.target = '_blank'\n        setTimeout(function () { click(a) })\n      }\n    } else {\n      navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n    }\n  }\n\n  // Fallback to using FileReader and a popup\n  : function saveAs (blob, name, opts, popup) {\n    // Open a popup immediately do go around popup blocker\n    // Mostly only available on user interaction and the fileReader is async so...\n    popup = popup || open('', '_blank')\n    if (popup) {\n      popup.document.title =\n      popup.document.body.innerText = 'downloading...'\n    }\n\n    if (typeof blob === 'string') return download(blob, name, opts)\n\n    var force = blob.type === 'application/octet-stream'\n    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n    var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n    if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n      // Safari doesn't allow downloading of blob URLs\n      var reader = new FileReader()\n      reader.onloadend = function () {\n        var url = reader.result\n        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n        if (popup) popup.location.href = url\n        else location = url\n        popup = null // reverse-tabnabbing #460\n      }\n      reader.readAsDataURL(blob)\n    } else {\n      var URL = _global.URL || _global.webkitURL\n      var url = URL.createObjectURL(blob)\n      if (popup) popup.location = url\n      else location.href = url\n      popup = null // reverse-tabnabbing #460\n      setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n    }\n  }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n  module.exports = saveAs;\n}\n","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n!function(t,e,n,o){\"use strict\";function i(t,e){var o,i,a,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=h(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger(\"blur\"),(a=n.fancybox.getInstance())&&a.$trigger&&a.$trigger.is(o)||(e.selector?s=n(e.selector):(i=o.attr(\"data-fancybox\")||\"\",i?(s=t.data?t.data.items:[],s=s.length?s.filter('[data-fancybox=\"'+i+'\"]'):n('[data-fancybox=\"'+i+'\"]')):s=[o]),r=n(s).index(o),r<0&&(r=0),a=n.fancybox.open(s,e,r),a.$trigger=o))}if(t.console=t.console||{info:function(t){}},n){if(n.fn.fancybox)return void console.info(\"fancyBox already initialized\");var a={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,preventCaptionOverlap:!0,arrows:!0,infobar:!0,smallBtn:\"auto\",toolbar:\"auto\",buttons:[\"zoom\",\"slideShow\",\"thumbs\",\"close\"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id=\"fancybox-frame{rnd}\" name=\"fancybox-frame{rnd}\" class=\"fancybox-iframe\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay; fullscreen\" src=\"\"></iframe>',preload:!0,css:{},attr:{scrolling:\"auto\"}},video:{tpl:'<video class=\"fancybox-video\" controls controlsList=\"nodownload\" poster=\"{{poster}}\"><source src=\"{{src}}\" type=\"{{format}}\" />Sorry, your browser doesn\\'t support embedded videos, <a href=\"{{src}}\">download</a> and watch with your favorite video player!</video>',format:\"\",autoStart:!0},defaultType:\"image\",animationEffect:\"zoom\",animationDuration:366,zoomOpacity:\"auto\",transitionEffect:\"fade\",transitionDuration:366,slideClass:\"\",baseClass:\"\",baseTpl:'<div class=\"fancybox-container\" role=\"dialog\" tabindex=\"-1\"><div class=\"fancybox-bg\"></div><div class=\"fancybox-inner\"><div class=\"fancybox-infobar\"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div><div class=\"fancybox-toolbar\">{{buttons}}</div><div class=\"fancybox-navigation\">{{arrows}}</div><div class=\"fancybox-stage\"></div><div class=\"fancybox-caption\"><div class=\"fancybox-caption__body\"></div></div></div></div>',spinnerTpl:'<div class=\"fancybox-loading\"></div>',errorTpl:'<div class=\"fancybox-error\"><p>{{ERROR}}</p></div>',btnTpl:{download:'<a download data-fancybox-download class=\"fancybox-button fancybox-button--download\" title=\"{{DOWNLOAD}}\" href=\"javascript:;\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z\"/></svg></a>',zoom:'<button data-fancybox-zoom class=\"fancybox-button fancybox-button--zoom\" title=\"{{ZOOM}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z\"/></svg></button>',close:'<button data-fancybox-close class=\"fancybox-button fancybox-button--close\" title=\"{{CLOSE}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z\"/></svg></button>',arrowLeft:'<button data-fancybox-prev class=\"fancybox-button fancybox-button--arrow_left\" title=\"{{PREV}}\"><div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z\"/></svg></div></button>',arrowRight:'<button data-fancybox-next class=\"fancybox-button fancybox-button--arrow_right\" title=\"{{NEXT}}\"><div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z\"/></svg></div></button>',smallBtn:'<button type=\"button\" data-fancybox-close class=\"fancybox-button fancybox-close-small\" title=\"{{CLOSE}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1\" viewBox=\"0 0 24 24\"><path d=\"M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z\"/></svg></button>'},parentEl:\"body\",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:\".fancybox-container\",axis:\"y\"},wheel:\"auto\",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return\"image\"===t.type&&\"zoom\"},clickSlide:\"close\",clickOutside:\"close\",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{preventCaptionOverlap:!1,idleTime:!1,clickContent:function(t,e){return\"image\"===t.type&&\"toggleControls\"},clickSlide:function(t,e){return\"image\"===t.type?\"toggleControls\":\"close\"},dblclickContent:function(t,e){return\"image\"===t.type&&\"zoom\"},dblclickSlide:function(t,e){return\"image\"===t.type&&\"zoom\"}},lang:\"en\",i18n:{en:{CLOSE:\"Close\",NEXT:\"Next\",PREV:\"Previous\",ERROR:\"The requested content cannot be loaded. <br/> Please try again later.\",PLAY_START:\"Start slideshow\",PLAY_STOP:\"Pause slideshow\",FULL_SCREEN:\"Full screen\",THUMBS:\"Thumbnails\",DOWNLOAD:\"Download\",SHARE:\"Share\",ZOOM:\"Zoom\"},de:{CLOSE:\"Schlie&szlig;en\",NEXT:\"Weiter\",PREV:\"Zur&uuml;ck\",ERROR:\"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp&auml;ter nochmal.\",PLAY_START:\"Diaschau starten\",PLAY_STOP:\"Diaschau beenden\",FULL_SCREEN:\"Vollbild\",THUMBS:\"Vorschaubilder\",DOWNLOAD:\"Herunterladen\",SHARE:\"Teilen\",ZOOM:\"Vergr&ouml;&szlig;ern\"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},d=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),u=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),f=function(){var t,n=e.createElement(\"fakeelement\"),o={transition:\"transitionend\",OTransition:\"oTransitionEnd\",MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\"};for(t in o)if(void 0!==n.style[t])return o[t];return\"transitionend\"}(),p=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,function(t,e){n.isArray(e)&&(o[t]=e)}),o},g=function(t){var o,i;return!(!t||t.ownerDocument!==e)&&(n(\".fancybox-container\").css(\"pointer-events\",\"none\"),o={x:t.getBoundingClientRect().left+t.offsetWidth/2,y:t.getBoundingClientRect().top+t.offsetHeight/2},i=e.elementFromPoint(o.x,o.y)===t,n(\".fancybox-container\").css(\"pointer-events\",\"\"),i)},b=function(t,e,o){var i=this;i.opts=h({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(i.opts=h(i.opts,e)),n.fancybox.isMobile&&(i.opts=h(i.opts,i.opts.mobile)),i.id=i.opts.id||++c,i.currIndex=parseInt(i.opts.index,10)||0,i.prevIndex=null,i.prevPos=null,i.currPos=0,i.firstRun=!0,i.group=[],i.slides={},i.addContent(t),i.group.length&&i.init()};n.extend(b.prototype,{init:function(){var o,i,a=this,s=a.group[a.currIndex],r=s.opts;r.closeExisting&&n.fancybox.close(!0),n(\"body\").addClass(\"fancybox-active\"),!n.fancybox.getInstance()&&!1!==r.hideScrollbar&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(n(\"head\").append('<style id=\"fancybox-style-noscroll\" type=\"text/css\">.compensate-for-scrollbar{margin-right:'+(t.innerWidth-e.documentElement.clientWidth)+\"px;}</style>\"),n(\"body\").addClass(\"compensate-for-scrollbar\")),i=\"\",n.each(r.buttons,function(t,e){i+=r.btnTpl[e]||\"\"}),o=n(a.translate(a,r.baseTpl.replace(\"{{buttons}}\",i).replace(\"{{arrows}}\",r.btnTpl.arrowLeft+r.btnTpl.arrowRight))).attr(\"id\",\"fancybox-container-\"+a.id).addClass(r.baseClass).data(\"FancyBox\",a).appendTo(r.parentEl),a.$refs={container:o},[\"bg\",\"inner\",\"infobar\",\"toolbar\",\"stage\",\"caption\",\"navigation\"].forEach(function(t){a.$refs[t]=o.find(\".fancybox-\"+t)}),a.trigger(\"onInit\"),a.activate(),a.jumpTo(a.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang]||t.opts.i18n.en;return e.replace(/\\{\\{(\\w+)\\}\\}/g,function(t,e){return void 0===n[e]?t:n[e]})},addContent:function(t){var e,o=this,i=n.makeArray(t);n.each(i,function(t,e){var i,a,s,r,c,l={},d={};n.isPlainObject(e)?(l=e,d=e.opts||e):\"object\"===n.type(e)&&n(e).length?(i=n(e),d=i.data()||{},d=n.extend(!0,{},d,d.options),d.$orig=i,l.src=o.opts.src||d.src||i.attr(\"href\"),l.type||l.src||(l.type=\"inline\",l.src=e)):l={type:\"html\",src:e+\"\"},l.opts=n.extend(!0,{},o.opts,d),n.isArray(d.buttons)&&(l.opts.buttons=d.buttons),n.fancybox.isMobile&&l.opts.mobile&&(l.opts=h(l.opts,l.opts.mobile)),a=l.type||l.opts.type,r=l.src||\"\",!a&&r&&((s=r.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))?(a=\"video\",l.opts.video.format||(l.opts.video.format=\"video/\"+(\"ogv\"===s[1]?\"ogg\":s[1]))):r.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)?a=\"image\":r.match(/\\.(pdf)((\\?|#).*)?$/i)?(a=\"iframe\",l=n.extend(!0,l,{contentType:\"pdf\",opts:{iframe:{preload:!1}}})):\"#\"===r.charAt(0)&&(a=\"inline\")),a?l.type=a:o.trigger(\"objectNeedsType\",l),l.contentType||(l.contentType=n.inArray(l.type,[\"html\",\"inline\",\"ajax\"])>-1?\"html\":l.type),l.index=o.group.length,\"auto\"==l.opts.smallBtn&&(l.opts.smallBtn=n.inArray(l.type,[\"html\",\"inline\",\"ajax\"])>-1),\"auto\"===l.opts.toolbar&&(l.opts.toolbar=!l.opts.smallBtn),l.$thumb=l.opts.$thumb||null,l.opts.$trigger&&l.index===o.opts.index&&(l.$thumb=l.opts.$trigger.find(\"img:first\"),l.$thumb.length&&(l.opts.$orig=l.opts.$trigger)),l.$thumb&&l.$thumb.length||!l.opts.$orig||(l.$thumb=l.opts.$orig.find(\"img:first\")),l.$thumb&&!l.$thumb.length&&(l.$thumb=null),l.thumb=l.opts.thumb||(l.$thumb?l.$thumb[0].src:null),\"function\"===n.type(l.opts.caption)&&(l.opts.caption=l.opts.caption.apply(e,[o,l])),\"function\"===n.type(o.opts.caption)&&(l.opts.caption=o.opts.caption.apply(e,[o,l])),l.opts.caption instanceof n||(l.opts.caption=void 0===l.opts.caption?\"\":l.opts.caption+\"\"),\"ajax\"===l.type&&(c=r.split(/\\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{trapFocus:!0,infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),o.group.push(l)}),Object.keys(o.slides).length&&(o.updateControls(),(e=o.Thumbs)&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on(\"click.fb-close\",\"[data-fancybox-close]\",function(t){t.stopPropagation(),t.preventDefault(),e.close(t)}).on(\"touchstart.fb-prev click.fb-prev\",\"[data-fancybox-prev]\",function(t){t.stopPropagation(),t.preventDefault(),e.previous()}).on(\"touchstart.fb-next click.fb-next\",\"[data-fancybox-next]\",function(t){t.stopPropagation(),t.preventDefault(),e.next()}).on(\"click.fb\",\"[data-fancybox-zoom]\",function(t){e[e.isScaledDown()?\"scaleToActual\":\"scaleToFit\"]()}),s.on(\"orientationchange.fb resize.fb\",function(t){t&&t.originalEvent&&\"resize\"===t.originalEvent.type?(e.requestId&&u(e.requestId),e.requestId=d(function(){e.update(t)})):(e.current&&\"iframe\"===e.current.type&&e.$refs.stage.hide(),setTimeout(function(){e.$refs.stage.show(),e.update(t)},n.fancybox.isMobile?600:250))}),r.on(\"keydown.fb\",function(t){var o=n.fancybox?n.fancybox.getInstance():null,i=o.current,a=t.keyCode||t.which;if(9==a)return void(i.opts.trapFocus&&e.focus(t));if(!(!i.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is(\"input,textarea,video,audio,select\")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger(\"afterKeydown\",t,a)}),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,r.on(\"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1}),e.idleInterval=t.setInterval(function(){++e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())},1e3))},removeEvents:function(){var e=this;s.off(\"orientationchange.fb resize.fb\"),r.off(\"keydown.fb .fb-idle\"),this.$refs.container.off(\".fb-close .fb-prev .fb-next\"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var o,i,a,s,r,c,l,d,u,f=this,h=f.group.length;if(!(f.isDragging||f.isClosing||f.isAnimating&&f.firstRun)){if(t=parseInt(t,10),!(a=f.current?f.current.opts.loop:f.opts.loop)&&(t<0||t>=h))return!1;if(o=f.firstRun=!Object.keys(f.slides).length,r=f.current,f.prevIndex=f.currIndex,f.prevPos=f.currPos,s=f.createSlide(t),h>1&&((a||s.index<h-1)&&f.createSlide(t+1),(a||s.index>0)&&f.createSlide(t-1)),f.current=s,f.currIndex=s.index,f.currPos=s.pos,f.trigger(\"beforeShow\",o),f.updateControls(),s.forcedDuration=void 0,n.isNumeric(e)?s.forcedDuration=e:e=s.opts[o?\"animationDuration\":\"transitionDuration\"],e=parseInt(e,10),i=f.isMoved(s),s.$slide.addClass(\"fancybox-slide--current\"),o)return s.opts.animationEffect&&e&&f.$refs.container.css(\"transition-duration\",e+\"ms\"),f.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\"),f.loadSlide(s),void f.preload(\"image\");c=n.fancybox.getTranslate(r.$slide),l=n.fancybox.getTranslate(f.$refs.stage),n.each(f.slides,function(t,e){n.fancybox.stop(e.$slide,!0)}),r.pos!==s.pos&&(r.isComplete=!1),r.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\"),i?(u=c.left-(r.pos*c.width+r.pos*r.opts.gutter),n.each(f.slides,function(t,o){o.$slide.removeClass(\"fancybox-animated\").removeClass(function(t,e){return(e.match(/(^|\\s)fancybox-fx-\\S+/g)||[]).join(\" \")});var i=o.pos*c.width+o.pos*o.opts.gutter;n.fancybox.setTranslate(o.$slide,{top:0,left:i-l.left+u}),o.pos!==s.pos&&o.$slide.addClass(\"fancybox-slide--\"+(o.pos>s.pos?\"next\":\"previous\")),p(o.$slide),n.fancybox.animate(o.$slide,{top:0,left:(o.pos-s.pos)*c.width+(o.pos-s.pos)*o.opts.gutter},e,function(){o.$slide.css({transform:\"\",opacity:\"\"}).removeClass(\"fancybox-slide--next fancybox-slide--previous\"),o.pos===f.currPos&&f.complete()})})):e&&s.opts.transitionEffect&&(d=\"fancybox-animated fancybox-fx-\"+s.opts.transitionEffect,r.$slide.addClass(\"fancybox-slide--\"+(r.pos>s.pos?\"next\":\"previous\")),n.fancybox.animate(r.$slide,d,e,function(){r.$slide.removeClass(d).removeClass(\"fancybox-slide--next fancybox-slide--previous\")},!1)),s.isLoaded?f.revealContent(s):f.loadSlide(s),f.preload(\"image\")}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class=\"fancybox-slide\"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,o){var i,a,s,r,c,l=this,d=l.current,u=d.$content,f=n.fancybox.getTranslate(d.$slide).width,p=n.fancybox.getTranslate(d.$slide).height,h=d.width,g=d.height;l.isAnimating||l.isMoved()||!u||\"image\"!=d.type||!d.isLoaded||d.hasError||(l.isAnimating=!0,n.fancybox.stop(u),t=void 0===t?.5*f:t,e=void 0===e?.5*p:e,i=n.fancybox.getTranslate(u),i.top-=n.fancybox.getTranslate(d.$slide).top,i.left-=n.fancybox.getTranslate(d.$slide).left,r=h/i.width,c=g/i.height,a=.5*f-.5*h,s=.5*p-.5*g,h>f&&(a=i.left*r-(t*r-t),a>0&&(a=0),a<f-h&&(a=f-h)),g>p&&(s=i.top*c-(e*c-e),s>0&&(s=0),s<p-g&&(s=p-g)),l.updateCursor(h,g),n.fancybox.animate(u,{top:s,left:a,scaleX:r,scaleY:c},o||366,function(){l.isAnimating=!1}),l.SlideShow&&l.SlideShow.isActive&&l.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;o.isAnimating||o.isMoved()||!a||\"image\"!=i.type||!i.isLoaded||i.hasError||(o.isAnimating=!0,n.fancybox.stop(a),e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||366,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,s=this,r=t.$content,c=t.$slide,l=t.width||t.opts.width,d=t.height||t.opts.height,u={};return!!(t.isLoaded&&r&&r.length)&&(e=n.fancybox.getTranslate(s.$refs.stage).width,o=n.fancybox.getTranslate(s.$refs.stage).height,e-=parseFloat(c.css(\"paddingLeft\"))+parseFloat(c.css(\"paddingRight\"))+parseFloat(r.css(\"marginLeft\"))+parseFloat(r.css(\"marginRight\")),o-=parseFloat(c.css(\"paddingTop\"))+parseFloat(c.css(\"paddingBottom\"))+parseFloat(r.css(\"marginTop\"))+parseFloat(r.css(\"marginBottom\")),l&&d||(l=e,d=o),i=Math.min(1,e/l,o/d),l*=i,d*=i,l>e-.5&&(l=e),d>o-.5&&(d=o),\"image\"===t.type?(u.top=Math.floor(.5*(o-d))+parseFloat(c.css(\"paddingTop\")),u.left=Math.floor(.5*(e-l))+parseFloat(c.css(\"paddingLeft\"))):\"video\"===t.contentType&&(a=t.opts.width&&t.opts.height?l/d:t.opts.ratio||16/9,d>l/a?d=l/a:l>d*a&&(l=d*a)),u.width=l,u.height=d,u)},update:function(t){var e=this;n.each(e.slides,function(n,o){e.updateSlide(o,t)})},updateSlide:function(t,e){var o=this,i=t&&t.$content,a=t.width||t.opts.width,s=t.height||t.opts.height,r=t.$slide;o.adjustCaption(t),i&&(a||s||\"video\"===t.contentType)&&!t.hasError&&(n.fancybox.stop(i),n.fancybox.setTranslate(i,o.getFitPos(t)),t.pos===o.currPos&&(o.isAnimating=!1,o.updateCursor())),o.adjustLayout(t),r.length&&(r.trigger(\"refresh\"),t.pos===o.currPos&&o.$refs.toolbar.add(o.$refs.navigation.find(\".fancybox-button--arrow_right\")).toggleClass(\"compensate-for-scrollbar\",r.get(0).scrollHeight>r.get(0).clientHeight)),o.trigger(\"onUpdate\",t,e)},centerSlide:function(t){var e=this,o=e.current,i=o.$slide;!e.isClosing&&o&&(i.siblings().css({transform:\"\",opacity:\"\"}),i.parent().children().removeClass(\"fancybox-slide--previous fancybox-slide--next\"),n.fancybox.animate(i,{top:0,left:0,opacity:1},void 0===t?0:t,function(){i.css({transform:\"\",opacity:\"\"}),o.isComplete||e.complete()},!1))},isMoved:function(t){var e,o,i=t||this.current;return!!i&&(o=n.fancybox.getTranslate(this.$refs.stage),e=n.fancybox.getTranslate(i.$slide),!i.$slide.hasClass(\"fancybox-animated\")&&(Math.abs(e.top-o.top)>.5||Math.abs(e.left-o.left)>.5))},updateCursor:function(t,e){var o,i,a=this,s=a.current,r=a.$refs.container;s&&!a.isClosing&&a.Guestures&&(r.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\"),o=a.canPan(t,e),i=!!o||a.isZoomable(),r.toggleClass(\"fancybox-is-zoomable\",i),n(\"[data-fancybox-zoom]\").prop(\"disabled\",!i),o?r.addClass(\"fancybox-can-pan\"):i&&(\"zoom\"===s.opts.clickContent||n.isFunction(s.opts.clickContent)&&\"zoom\"==s.opts.clickContent(s))?r.addClass(\"fancybox-can-zoomIn\"):s.opts.touch&&(s.opts.touch.vertical||a.group.length>1)&&\"video\"!==s.contentType&&r.addClass(\"fancybox-can-swipe\"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&\"image\"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if((t=e.getFitPos(n))&&(n.width>t.width||n.height>t.height))return!0}return!1},isScaledDown:function(t,e){var o=this,i=!1,a=o.current,s=a.$content;return void 0!==t&&void 0!==e?i=t<a.width&&e<a.height:s&&(i=n.fancybox.getTranslate(s),i=i.width<a.width&&i.height<a.height),i},canPan:function(t,e){var o=this,i=o.current,a=null,s=!1;return\"image\"===i.type&&(i.isComplete||t&&e)&&!i.hasError&&(s=o.getFitPos(i),void 0!==t&&void 0!==e?a={width:t,height:e}:i.isComplete&&(a=n.fancybox.getTranslate(i.$content)),a&&s&&(s=Math.abs(a.width-s.width)>1.5||Math.abs(a.height-s.height)>1.5)),s},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){if(t.isLoading=!0,!1===a.trigger(\"beforeLoad\",t))return t.isLoading=!1,!1;switch(e=t.type,o=t.$slide,o.off(\"refresh\").trigger(\"onReset\").addClass(t.opts.slideClass),e){case\"image\":a.setImage(t);break;case\"iframe\":a.setIframe(t);break;case\"html\":a.setContent(t,t.src||t.content);break;case\"video\":a.setContent(t,t.opts.video.tpl.replace(/\\{\\{src\\}\\}/gi,t.src).replace(\"{{format}}\",t.opts.videoFormat||t.opts.video.format||\"\").replace(\"{{poster}}\",t.thumb||\"\"));break;case\"inline\":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case\"ajax\":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){\"success\"===n&&a.setContent(t,e)},error:function(e,n){e&&\"abort\"!==n&&a.setError(t)}})),o.one(\"onReset\",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(t){var o,i=this;setTimeout(function(){var e=t.$image;i.isClosing||!t.isLoading||e&&e.length&&e[0].complete||t.hasError||i.showLoading(t)},50),i.checkSrcset(t),t.$content=n('<div class=\"fancybox-content\"></div>').addClass(\"fancybox-is-hidden\").appendTo(t.$slide.addClass(\"fancybox-slide--image\")),!1!==t.opts.preload&&t.opts.width&&t.opts.height&&t.thumb&&(t.width=t.opts.width,t.height=t.opts.height,o=e.createElement(\"img\"),o.onerror=function(){n(this).remove(),t.$ghost=null},o.onload=function(){i.afterLoad(t)},t.$ghost=n(o).addClass(\"fancybox-image\").appendTo(t.$content).attr(\"src\",t.thumb)),i.setBigImage(t)},checkSrcset:function(e){var n,o,i,a,s=e.opts.srcset||e.opts.image.srcset;if(s){i=t.devicePixelRatio||1,a=t.innerWidth*i,o=s.split(\",\").map(function(t){var e={};return t.trim().split(/\\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);if(0===n)return e.url=t;o&&(e.value=o,e.postfix=t[t.length-1])}),e}),o.sort(function(t,e){return t.value-e.value});for(var r=0;r<o.length;r++){var c=o[r];if(\"w\"===c.postfix&&c.value>=a||\"x\"===c.postfix&&c.value>=i){n=c;break}}!n&&o.length&&(n=o[o.length-1]),n&&(e.src=n.url,e.width&&e.height&&\"w\"==n.postfix&&(e.height=e.width/e.height*n.value,e.width=n.value),e.opts.srcset=s)}},setBigImage:function(t){var o=this,i=e.createElement(\"img\"),a=n(i);t.$image=a.one(\"error\",function(){o.setError(t)}).one(\"load\",function(){var e;t.$ghost||(o.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),o.afterLoad(t)),o.isClosing||(t.opts.srcset&&(e=t.opts.sizes,e&&\"auto\"!==e||(e=(t.width/t.height>1&&s.width()/s.height()>1?\"100\":Math.round(t.width/t.height*100))+\"vw\"),a.attr(\"sizes\",e).attr(\"srcset\",t.opts.srcset)),t.$ghost&&setTimeout(function(){t.$ghost&&!o.isClosing&&t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))),o.hideLoading(t))}).addClass(\"fancybox-image\").attr(\"src\",t.src).appendTo(t.$content),(i.complete||\"complete\"==i.readyState)&&a.naturalWidth&&a.naturalHeight?a.trigger(\"load\"):i.error&&a.trigger(\"error\")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),i=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),i>0&&(t.width=Math.floor(i*e/n),t.height=i)},setIframe:function(t){var e,o=this,i=t.opts.iframe,a=t.$slide;t.$content=n('<div class=\"fancybox-content'+(i.preload?\" fancybox-is-hidden\":\"\")+'\"></div>').css(i.css).appendTo(a),a.addClass(\"fancybox-slide--\"+t.contentType),t.$iframe=e=n(i.tpl.replace(/\\{rnd\\}/g,(new Date).getTime())).attr(i.attr).appendTo(t.$content),i.preload?(o.showLoading(t),e.on(\"load.fb error.fb\",function(e){this.isReady=1,t.$slide.trigger(\"refresh\"),o.afterLoad(t)}),a.on(\"refresh.fb\",function(){var n,o,s=t.$content,r=i.css.width,c=i.css.height;if(1===e[0].isReady){try{n=e.contents(),o=n.find(\"body\")}catch(t){}o&&o.length&&o.children().length&&(a.css(\"overflow\",\"visible\"),s.css({width:\"100%\",\"max-width\":\"100%\",height:\"9999px\"}),void 0===r&&(r=Math.ceil(Math.max(o[0].clientWidth,o.outerWidth(!0)))),s.css(\"width\",r||\"\").css(\"max-width\",\"\"),void 0===c&&(c=Math.ceil(Math.max(o[0].clientHeight,o.outerHeight(!0)))),s.css(\"height\",c||\"\"),a.css(\"overflow\",\"auto\")),s.removeClass(\"fancybox-is-hidden\")}})):o.afterLoad(t),e.attr(\"src\",t.src),a.one(\"onReset\",function(){try{n(this).find(\"iframe\").hide().unbind().attr(\"src\",\"//about:blank\")}catch(t){}n(this).off(\"refresh.fb\").empty(),t.isLoaded=!1,t.isRevealed=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),l(e)&&e.parent().length?((e.hasClass(\"fancybox-content\")||e.parent().hasClass(\"fancybox-content\"))&&e.parents(\".fancybox-slide\").trigger(\"onReset\"),t.$placeholder=n(\"<div>\").hide().insertAfter(e),e.css(\"display\",\"inline-block\")):t.hasError||(\"string\"===n.type(e)&&(e=n(\"<div>\").append(n.trim(e)).contents()),t.opts.filter&&(e=n(\"<div>\").html(e).find(t.opts.filter))),t.$slide.one(\"onReset\",function(){n(this).find(\"video,audio\").trigger(\"pause\"),t.$placeholder&&(t.$placeholder.after(e.removeClass(\"fancybox-content\").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is(\"video,audio\")&&(n(e).addClass(\"fancybox-video\"),n(e).wrap(\"<div></div>\"),t.contentType=\"video\",t.opts.width=t.opts.width||n(e).attr(\"width\"),t.opts.height=t.opts.height||n(e).attr(\"height\")),t.$content=t.$slide.children().filter(\"div,form,main,video,audio,article,.fancybox-content\").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner(\"<div></div>\").children().first()),t.$content.addClass(\"fancybox-content\"),t.$slide.addClass(\"fancybox-slide--\"+t.contentType),o.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger(\"onReset\").removeClass(\"fancybox-slide--\"+t.contentType).addClass(\"fancybox-slide--error\"),t.contentType=\"html\",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn(\"fast\"))},hideLoading:function(t){var e=this;(t=t||e.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger(\"afterLoad\",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on(\"contextmenu.fb\",function(t){return 2==t.button&&t.preventDefault(),!0}),\"image\"===t.type&&n('<div class=\"fancybox-spaceball\"></div>').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,i=o.opts.caption,a=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass(\"fancybox-caption--separate\",a),a&&i&&i.length&&(o.pos!==n.currPos?(e=s.clone().appendTo(s.parent()),e.children().eq(0).empty().html(i),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css(\"padding-bottom\",r||\"\"))},adjustLayout:function(t){var e,n,o,i,a=this,s=t||a.current;s.isLoaded&&!0!==s.opts.disableLayoutFix&&(s.$content.css(\"margin-bottom\",\"\"),s.$content.outerHeight()>s.$slide.height()+.5&&(o=s.$slide[0].style[\"padding-bottom\"],i=s.$slide.css(\"padding-bottom\"),parseFloat(i)>0&&(e=s.$slide[0].scrollHeight,s.$slide.css(\"padding-bottom\",0),Math.abs(e-s.$slide[0].scrollHeight)<1&&(n=i),s.$slide.css(\"padding-bottom\",o))),s.$content.css(\"margin-bottom\",n))},revealContent:function(t){var e,o,i,a,s=this,r=t.$slide,c=!1,l=!1,d=s.isMoved(t),u=t.isRevealed;return t.isRevealed=!0,e=t.opts[s.firstRun?\"animationEffect\":\"transitionEffect\"],i=t.opts[s.firstRun?\"animationDuration\":\"transitionDuration\"],i=parseInt(void 0===t.forcedDuration?i:t.forcedDuration,10),!d&&t.pos===s.currPos&&i||(e=!1),\"zoom\"===e&&(t.pos===s.currPos&&i&&\"image\"===t.type&&!t.hasError&&(l=s.getThumbPos(t))?c=s.getFitPos(t):e=\"fade\"),\"zoom\"===e?(s.isAnimating=!0,c.scaleX=c.width/l.width,c.scaleY=c.height/l.height,a=t.opts.zoomOpacity,\"auto\"==a&&(a=Math.abs(t.width/t.height-l.width/l.height)>.1),a&&(l.opacity=.1,c.opacity=1),n.fancybox.setTranslate(t.$content.removeClass(\"fancybox-is-hidden\"),l),p(t.$content),void n.fancybox.animate(t.$content,c,i,function(){s.isAnimating=!1,s.complete()})):(s.updateSlide(t),e?(n.fancybox.stop(r),o=\"fancybox-slide--\"+(t.pos>=s.prevPos?\"next\":\"previous\")+\" fancybox-animated fancybox-fx-\"+e,r.addClass(o).removeClass(\"fancybox-slide--current\"),t.$content.removeClass(\"fancybox-is-hidden\"),p(r),\"image\"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(r,\"fancybox-slide--current\",i,function(){r.removeClass(o).css({transform:\"\",opacity:\"\"}),t.pos===s.currPos&&s.complete()},!0)):(t.$content.removeClass(\"fancybox-is-hidden\"),u||!d||\"image\"!==t.type||t.hasError||t.$content.hide().fadeIn(\"fast\"),void(t.pos===s.currPos&&s.complete())))},getThumbPos:function(t){var e,o,i,a,s,r=!1,c=t.$thumb;return!(!c||!g(c[0]))&&(e=n.fancybox.getTranslate(c),o=parseFloat(c.css(\"border-top-width\")||0),i=parseFloat(c.css(\"border-right-width\")||0),a=parseFloat(c.css(\"border-bottom-width\")||0),s=parseFloat(c.css(\"border-left-width\")||0),r={top:e.top+o,left:e.left+s,width:e.width-i-s,height:e.height-o-a,scaleX:1,scaleY:1},e.width>0&&e.height>0&&r)},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger(\"onReset\"),e.preload(\"inline\"),p(o.$slide),o.$slide.addClass(\"fancybox-slide--complete\"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger(\"afterShow\"),o.opts.video.autoStart&&o.$slide.find(\"video,audio\").filter(\":visible:first\").trigger(\"play\").one(\"ended\",function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()}),o.opts.autoFocus&&\"html\"===o.contentType&&(t=o.$content.find(\"input[autofocus]:enabled:visible:first\"),t.length?t.trigger(\"focus\"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],e=o.slides[o.currPos-1],e&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var i,a,s=this,r=[\"a[href]\",\"area[href]\",'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\"select:not([disabled]):not([aria-hidden])\",\"textarea:not([disabled]):not([aria-hidden])\",\"button:not([disabled]):not([aria-hidden])\",\"iframe\",\"object\",\"embed\",\"video\",\"audio\",\"[contenteditable]\",'[tabindex]:not([tabindex^=\"-\"])'].join(\",\");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find(\"*:visible\"+(o?\":not(.fancybox-close-small)\":\"\")):s.$refs.container.find(\"*:visible\"),i=i.filter(r).filter(function(){return\"hidden\"!==n(this).css(\"visibility\")&&!n(this).hasClass(\"disabled\")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger(\"focus\")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger(\"focus\"))):s.$refs.container.trigger(\"focus\"))},activate:function(){var t=this;n(\".fancybox-container\").each(function(){var e=n(this).data(\"FancyBox\");e&&e.id!==t.id&&!e.isClosing&&(e.trigger(\"onDeactivate\"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger(\"onActivate\"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,u=this,f=u.current,h=function(){u.cleanUp(t)};return!u.isClosing&&(u.isClosing=!0,!1===u.trigger(\"beforeClose\",t)?(u.isClosing=!1,d(function(){u.update()}),!1):(u.removeEvents(),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\"),!0!==t?n.fancybox.stop(f.$slide):o=!1,f.$slide.siblings().trigger(\"onReset\").remove(),i&&u.$refs.container.removeClass(\"fancybox-is-open\").addClass(\"fancybox-is-closing\").css(\"transition-duration\",i+\"ms\"),u.hideLoading(f),u.hideControls(!0),u.updateCursor(),\"zoom\"!==o||a&&i&&\"image\"===f.type&&!u.isMoved()&&!f.hasError&&(l=u.getThumbPos(f))||(o=\"fade\"),\"zoom\"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},r=f.opts.zoomOpacity,\n\"auto\"==r&&(r=Math.abs(f.width/f.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),p(a),n.fancybox.animate(a,l,i,h),!0):(o&&i?n.fancybox.animate(f.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\"fancybox-animated fancybox-fx-\"+o,i,h):!0===t?setTimeout(h,i):h(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger(\"onReset\"),s.$refs.container.empty().remove(),s.trigger(\"afterClose\",e),s.current.opts.backFocus&&(r&&r.length&&r.is(\":visible\")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger(\"focus\"),n(\"html, body\").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\"),n(\"#fancybox-style-noscroll\").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;if(s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),!1===o)return o;\"afterClose\"!==t&&a.$refs?a.$refs.container.trigger(t+\".fb\",i):r.trigger(t+\".fb\",i)},updateControls:function(){var t=this,o=t.current,i=o.index,a=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger(\"refresh\"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),a.find(\"[data-fancybox-count]\").html(t.group.length),a.find(\"[data-fancybox-index]\").html(i+1),a.find(\"[data-fancybox-prev]\").prop(\"disabled\",!o.opts.loop&&i<=0),a.find(\"[data-fancybox-next]\").prop(\"disabled\",!o.opts.loop&&i>=t.group.length-1),\"image\"===o.type?a.find(\"[data-fancybox-zoom]\").show().end().find(\"[data-fancybox-download]\").attr(\"href\",o.opts.image.src||o.src).show():o.opts.toolbar&&a.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide(),n(e.activeElement).is(\":hidden,[disabled]\")&&t.$refs.container.trigger(\"focus\")},hideControls:function(t){var e=this,n=[\"infobar\",\"toolbar\",\"nav\"];!t&&e.current.opts.preventCaptionOverlap||n.push(\"caption\"),this.$refs.container.removeClass(n.map(function(t){return\"fancybox-show-\"+t}).join(\" \")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass(\"fancybox-show-toolbar\",!(!e.toolbar||!e.buttons)).toggleClass(\"fancybox-show-infobar\",!!(e.infobar&&t.group.length>1)).toggleClass(\"fancybox-show-caption\",!!t.$caption).toggleClass(\"fancybox-show-nav\",!!(e.arrows&&t.group.length>1)).toggleClass(\"fancybox-is-modal\",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:\"3.5.7\",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),o=Array.prototype.slice.call(arguments,1);return e instanceof b&&(\"string\"===n.type(t)?e[t].apply(e,o):\"function\"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new b(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),r.add(\"body\").off(\"click.fb-start\",\"**\")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement(\"div\");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue(\"transform\")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css(\"opacity\"))})},setTranslate:function(t,e){var n=\"\",o={};if(t&&e)return void 0===e.left&&void 0===e.top||(n=(void 0===e.left?t.position().left:e.left)+\"px, \"+(void 0===e.top?t.position().top:e.top)+\"px\",n=this.use3d?\"translate3d(\"+n+\", 0px)\":\"translate(\"+n+\")\"),void 0!==e.scaleX&&void 0!==e.scaleY?n+=\" scale(\"+e.scaleX+\", \"+e.scaleY+\")\":void 0!==e.scaleX&&(n+=\" scaleX(\"+e.scaleX+\")\"),n.length&&(o.transform=n),void 0!==e.opacity&&(o.opacity=e.opacity),void 0!==e.width&&(o.width=e.width),void 0!==e.height&&(o.height=e.height),t.css(o)},animate:function(t,e,o,i,a){var s,r=this;n.isFunction(o)&&(i=o,o=null),r.stop(t),s=r.getTranslate(t),t.on(f,function(c){(!c||!c.originalEvent||t.is(c.originalEvent.target)&&\"z-index\"!=c.originalEvent.propertyName)&&(r.stop(t),n.isNumeric(o)&&t.css(\"transition-duration\",\"\"),n.isPlainObject(e)?void 0!==e.scaleX&&void 0!==e.scaleY&&r.setTranslate(t,{top:e.top,left:e.left,width:s.width*e.scaleX,height:s.height*e.scaleY,scaleX:1,scaleY:1}):!0!==a&&t.removeClass(e),n.isFunction(i)&&i(c))}),n.isNumeric(o)&&t.css(\"transition-duration\",o+\"ms\"),n.isPlainObject(e)?(void 0!==e.scaleX&&void 0!==e.scaleY&&(delete e.width,delete e.height,t.parent().hasClass(\"fancybox-slide--image\")&&t.parent().addClass(\"fancybox-is-scaling\")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data(\"timer\",setTimeout(function(){t.trigger(f)},o+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data(\"timer\")),e&&t.trigger(f),t.off(f).css(\"transition-duration\",\"\"),t.parent().removeClass(\"fancybox-is-scaling\"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n(\"body\").off(\"click.fb-start\",e).on(\"click.fb-start\",e,{options:t},i):this.off(\"click.fb-start\").on(\"click.fb-start\",{items:this,options:t},i),this},r.on(\"click.fb-start\",\"[data-fancybox]\",i),r.on(\"click.fb-start\",\"[data-fancybox-trigger]\",function(t){n('[data-fancybox=\"'+n(this).attr(\"data-fancybox-trigger\")+'\"]').eq(n(this).attr(\"data-fancybox-index\")||0).trigger(\"click.fb-start\",{$trigger:n(this)})}),function(){var t=null;r.on(\"mousedown mouseup focus blur\",\".fancybox-button\",function(e){switch(e.type){case\"mousedown\":t=n(this);break;case\"mouseup\":t=null;break;case\"focusin\":n(\".fancybox-button\").removeClass(\"fancybox-focus\"),n(this).is(t)||n(this).is(\"[disabled]\")||n(this).addClass(\"fancybox-focus\");break;case\"focusout\":n(\".fancybox-button\").removeClass(\"fancybox-focus\")}})}()}}(window,document,jQuery),function(t){\"use strict\";var e={youtube:{matcher:/(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:\"transparent\",enablejsapi:1,html5:1},paramPlace:8,type:\"iframe\",url:\"https://www.youtube-nocookie.com/embed/$4\",thumb:\"https://img.youtube.com/vi/$4/hqdefault.jpg\"},vimeo:{matcher:/^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},paramPlace:3,type:\"iframe\",url:\"//player.vimeo.com/video/$2\"},instagram:{matcher:/(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,type:\"image\",url:\"//$1/p/$2/media/?size=l\"},gmap_place:{matcher:/(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,type:\"iframe\",url:function(t){return\"//maps.google.\"+t[2]+\"/?ll=\"+(t[9]?t[9]+\"&z=\"+Math.floor(t[10])+(t[12]?t[12].replace(/^\\//,\"&\"):\"\"):t[12]+\"\").replace(/\\?/,\"&\")+\"&output=\"+(t[12]&&t[12].indexOf(\"layer=c\")>0?\"svembed\":\"embed\")}},gmap_search:{matcher:/(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,type:\"iframe\",url:function(t){return\"//maps.google.\"+t[2]+\"/maps?q=\"+t[5].replace(\"query=\",\"q=\").replace(\"api=1\",\"\")+\"&output=embed\"}}},n=function(e,n,o){if(e)return o=o||\"\",\"object\"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace(\"$\"+t,n||\"\")}),o.length&&(e+=(e.indexOf(\"?\")>0?\"&\":\"?\")+o),e};t(document).on(\"objectNeedsType.fb\",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||\"\",h=!1;s=t.extend(!0,{},e,a.opts.media),t.each(s,function(e,o){if(c=p.match(o.matcher)){if(h=o.type,f=e,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],\"?\"==d[0]&&(d=d.substring(1)),d=d.split(\"&\");for(var i=0;i<d.length;++i){var s=d[i].split(\"=\",2);2==s.length&&(u[s[0]]=decodeURIComponent(s[1].replace(/\\+/g,\" \")))}}return l=t.extend(!0,{},o.params,a.opts[e],u),p=\"function\"===t.type(o.url)?o.url.call(this,c,l,a):n(o.url,c,l),r=\"function\"===t.type(o.thumb)?o.thumb.call(this,c,l,a):n(o.thumb,c),\"youtube\"===e?p=p.replace(/&t=((\\d+)m)?(\\d+)s/,function(t,e,n,o){return\"&start=\"+((n?60*parseInt(n,10):0)+parseInt(o,10))}):\"vimeo\"===e&&(p=p.replace(\"&%23\",\"#\")),!1}}),h?(a.opts.thumb||a.opts.$thumb&&a.opts.$thumb.length||(a.opts.thumb=r),\"iframe\"===h&&(a.opts=t.extend(!0,a.opts,{iframe:{preload:!1,attr:{scrolling:\"no\"}}})),t.extend(a,{type:h,src:p,origSrc:a.src,contentSource:f,contentType:\"image\"===h?\"image\":\"gmap_place\"==f||\"gmap_search\"==f?\"map\":\"video\"})):p&&(a.type=a.opts.defaultType)});var o={youtube:{src:\"https://www.youtube.com/iframe_api\",class:\"YT\",loading:!1,loaded:!1},vimeo:{src:\"https://player.vimeo.com/api/player.js\",class:\"Vimeo\",loading:!1,loaded:!1},load:function(t){var e,n=this;if(this[t].loaded)return void setTimeout(function(){n.done(t)});this[t].loading||(this[t].loading=!0,e=document.createElement(\"script\"),e.type=\"text/javascript\",e.src=this[t].src,\"youtube\"===t?window.onYouTubeIframeAPIReady=function(){n[t].loaded=!0,n.done(t)}:e.onload=function(){n[t].loaded=!0,n.done(t)},document.body.appendChild(e))},done:function(e){var n,o,i;\"youtube\"===e&&delete window.onYouTubeIframeAPIReady,(n=t.fancybox.getInstance())&&(o=n.current.$content.find(\"iframe\"),\"youtube\"===e&&void 0!==YT&&YT?i=new YT.Player(o.attr(\"id\"),{events:{onStateChange:function(t){0==t.data&&n.next()}}}):\"vimeo\"===e&&void 0!==Vimeo&&Vimeo&&(i=new Vimeo.Player(o),i.on(\"ended\",function(){n.next()})))}};t(document).on({\"afterShow.fb\":function(t,e,n){e.group.length>1&&(\"youtube\"===n.contentSource||\"vimeo\"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){\"use strict\";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?\"x\"===n?t.x-e.x:\"y\"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe')||n.isFunction(t.get(0).onclick)||t.data(\"selectable\"))return!0;for(var e=0,o=t[0].attributes,i=o.length;e<i;e++)if(\"data-fancybox-\"===o[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)[\"overflow-y\"],o=t.getComputedStyle(e)[\"overflow-x\"],i=(\"scroll\"===n||\"auto\"===n)&&e.scrollHeight>e.clientHeight,a=(\"scroll\"===o||\"auto\"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass(\"fancybox-stage\")||t.is(\"body\"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on(\"touchstart.fb.touch mousedown.fb.touch\",n.proxy(e,\"ontouchstart\"))};d.prototype.destroy=function(){var t=this;t.$container.off(\".fb.touch\"),n(e).off(\".fb.touch\"),t.requestId&&(i(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h=\"touchstart\"==o.type;if(h&&i.$container.off(\"mousedown.fb.touch\"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is(\"img\")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass(\"fancybox-animated\"))return o.stopPropagation(),void o.preventDefault();i.realPoints=i.startPoints=a(o),i.startPoints.length&&(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(\".fb.touch\").on(h?\"touchend.fb.touch touchcancel.fb.touch\":\"mouseup.fb.touch mouseleave.fb.touch\",n.proxy(i,\"ontouchend\")).on(h?\"touchmove.fb.touch\":\"mousemove.fb.touch\",n.proxy(i,\"ontouchmove\")),n.fancybox.isMobile&&e.addEventListener(\"scroll\",i.onscroll,!0),((i.opts||i.canPan)&&(c.is(i.$stage)||i.$stage.find(c).length)||(c.is(\".fancybox-image\")&&o.preventDefault(),n.fancybox.isMobile&&c.parents(\".fancybox-caption\").length))&&(i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass(\"fancybox-is-grabbing\")),2===i.startPoints.length&&\"image\"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))))}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener(\"scroll\",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],\"x\"),e.distanceY=s(e.newPoints[0],e.startPoints[0],\"y\"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)\"x\"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:\"x\"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass(\"fancybox-is-sliding\"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping=\"y\":r.isDragging||!1===s.opts.vertical||\"auto\"===s.opts.vertical&&n(t).width()>800?s.isSwiping=\"x\":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?\"y\":\"x\"),\"y\"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,function(t,e){var o,i;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),i=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:\"\",opacity:\"\",\"transition-duration\":\"\"}).removeClass(\"fancybox-animated\").removeClass(function(t,e){return(e.match(/(^|\\s)fancybox-fx-\\S+/g)||[]).join(\" \")}),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-i.top,s.sliderStartPos.left=o.left-i.left),n.fancybox.setTranslate(e.$slide,{top:o.top-i.top,left:o.left-i.left})}),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;if(s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5))return void(t.startPoints=t.newPoints);t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&i(t.requestId),t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i<n&&(i=n+1-Math.pow(n-f-l,.8)||0),d>0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&a<o&&(a=o+1-Math.pow(o-p-d,.8)||0),{top:a,left:i}},d.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},d.prototype.onZoom=function(){var e=this,a=e.contentStartPos,r=a.width,c=a.height,l=a.left,d=a.top,u=s(e.newPoints[0],e.newPoints[1]),f=u/e.startDistanceBetweenFingers,p=Math.floor(r*f),h=Math.floor(c*f),g=(r-p)*e.percentageOfImageAtPinchPointX,b=(c-h)*e.percentageOfImageAtPinchPointY,m=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),v=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=m-e.centerPointStartX,x=v-e.centerPointStartY,w=l+(g+y),$=d+(b+x),S={top:$,left:w,scaleX:f,scaleY:f};e.canTap=!1,e.newWidth=p,e.newHeight=h,e.contentLastPos=S,e.requestId&&i(e.requestId),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},d.prototype.ontouchend=function(t){var o=this,s=o.isSwiping,r=o.isPanning,c=o.isZooming,l=o.isScrolling;if(o.endPoints=a(t),o.dMs=Math.max((new Date).getTime()-o.startTime,1),o.$container.removeClass(\"fancybox-is-grabbing\"),n(e).off(\".fb.touch\"),e.removeEventListener(\"scroll\",o.onscroll,!0),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.isScrolling=!1,o.instance.isDragging=!1,o.canTap)return o.onTap(t);o.speed=100,o.velocityX=o.distanceX/o.dMs*.5,o.velocityY=o.distanceY/o.dMs*.5,r?o.endPanning():c?o.endZooming():o.endSwiping(s,l)},d.prototype.endSwiping=function(t,e){var o=this,i=!1,a=o.instance.group.length,s=Math.abs(o.distanceX),r=\"x\"==t&&a>1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,\"y\"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,250)):r&&o.distanceX>0?i=o.instance.previous(300):r&&o.distanceX<0&&(i=o.instance.next(300)),!1!==i||\"x\"!=t&&\"y\"!=t||o.instance.centerSlide(200),o.$container.removeClass(\"fancybox-is-sliding\")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(!1===i.opts.momentum||i.dMs>350?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+500*i.velocityX,e=i.contentLastPos.top+500*i.velocityY),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,366))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case\"close\":r.close(i.startEvent);break;case\"toggleControls\":r.toggleControls();break;case\"next\":r.next();break;case\"nextOrClose\":r.group.length>1?r.next():r.close(i.startEvent);break;case\"zoom\":\"image\"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is(\"img\")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\"))o=\"Outside\";else if(s.is(\".fancybox-slide\"))o=\"Slide\";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o=\"Content\"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f(\"dblclick\"+o)}else i.tapX=d,i.tapY=u,c.opts[\"dblclick\"+o]&&c.opts[\"dblclick\"+o]!==c.opts[\"click\"+o]?i.tapped=setTimeout(function(){i.tapped=null,r.isAnimating||f(\"click\"+o)},500):f(\"click\"+o);return this}},n(e).on(\"onActivate.fb\",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))}).on(\"beforeClose.fb\",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,jQuery),function(t,e){\"use strict\";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:'<button data-fancybox-play class=\"fancybox-button fancybox-button--play\" title=\"{{PLAY_START}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M6.5 5.4v13.2l11-6.6z\"/></svg><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z\"/></svg></button>'},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\",function(){t.toggle()}),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('<div class=\"fancybox-progress\"></div>').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,i=o.current;i&&(!0===t||i.opts.loop||o.currIndex<o.group.length-1)?n.isActive&&\"video\"!==i.contentType&&(n.$progress&&e.fancybox.animate(n.$progress.show(),{scaleX:1},i.opts.slideShow.speed),n.timer=setTimeout(function(){o.current.opts.loop||o.current.index!=o.group.length-1?o.next():o.jumpTo(0)},i.opts.slideShow.speed)):(n.stop(),o.idleSecondsCounter=0,o.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null,t.$progress&&t.$progress.removeAttr(\"style\").hide()},start:function(){var t=this,e=t.instance.current;e&&(t.$button.attr(\"title\",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_STOP).removeClass(\"fancybox-button--play\").addClass(\"fancybox-button--pause\"),t.isActive=!0,e.isComplete&&t.set(!0),t.instance.trigger(\"onSlideShowChange\",!0))},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr(\"title\",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_START).removeClass(\"fancybox-button--pause\").addClass(\"fancybox-button--play\"),t.isActive=!1,t.instance.trigger(\"onSlideShowChange\",!1),t.$progress&&t.$progress.removeAttr(\"style\").hide()},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({\"onInit.fb\":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},\"beforeShow.fb\":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},\"afterShow.fb\":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},\"afterKeydown.fb\":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is(\"button,a,input\")||(a.preventDefault(),r.toggle())},\"beforeClose.fb onDeactivate.fb\":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on(\"visibilitychange\",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,jQuery),function(t,e){\"use strict\";var n=function(){for(var e=[[\"requestFullscreen\",\"exitFullscreen\",\"fullscreenElement\",\"fullscreenEnabled\",\"fullscreenchange\",\"fullscreenerror\"],[\"webkitRequestFullscreen\",\"webkitExitFullscreen\",\"webkitFullscreenElement\",\"webkitFullscreenEnabled\",\"webkitfullscreenchange\",\"webkitfullscreenerror\"],[\"webkitRequestFullScreen\",\"webkitCancelFullScreen\",\"webkitCurrentFullScreenElement\",\"webkitCancelFullScreen\",\"webkitfullscreenchange\",\"webkitfullscreenerror\"],[\"mozRequestFullScreen\",\"mozCancelFullScreen\",\"mozFullScreenElement\",\"mozFullScreenEnabled\",\"mozfullscreenchange\",\"mozfullscreenerror\"],[\"msRequestFullscreen\",\"msExitFullscreen\",\"msFullscreenElement\",\"msFullscreenEnabled\",\"MSFullscreenChange\",\"MSFullscreenError\"]],n={},o=0;o<e.length;o++){var i=e[o];if(i&&i[1]in t){for(var a=0;a<i.length;a++)n[e[0][a]]=i[a];return n}}return!1}();if(n){var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e.extend(!0,e.fancybox.defaults,{btnTpl:{fullScreen:'<button data-fancybox-fullscreen class=\"fancybox-button fancybox-button--fsenter\" title=\"{{FULL_SCREEN}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"/></svg><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z\"/></svg></button>'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&\"image\"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger(\"onFullscreenChange\",t),n.$refs.container.toggleClass(\"fancybox-is-fullscreen\",t),n.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").toggleClass(\"fancybox-button--fsenter\",!t).toggleClass(\"fancybox-button--fsexit\",t))})}e(t).on({\"onInit.fb\":function(t,e){var i;if(!n)return void e.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on(\"click.fb-fullscreen\",\"[data-fancybox-fullscreen]\",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide()},\"afterKeydown.fb\":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},\"beforeClose.fb\":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass(\"fancybox-is-fullscreen\")&&o.exit()}})}(document,jQuery),function(t,e){\"use strict\";var n=\"fancybox-thumbs\";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:'<button data-fancybox-thumbs class=\"fancybox-button fancybox-button--thumbs\" title=\"{{THUMBS}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z\"/></svg></button>'},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:\".fancybox-container\",axis:\"y\"}},e.fancybox.defaults);var o=function(t){this.init(t)};e.extend(o.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find(\"[data-fancybox-thumbs]\");for(var i=0,a=n.length;i<a&&(n[i].thumb&&o++,!(o>1));i++);o>1&&e.opts?(e.$button.removeAttr(\"style\").on(\"click\",function(){e.toggle()}),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('<div class=\"'+n+\" \"+n+\"-\"+o.opts.axis+'\"></div>').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on(\"click\",\"a\",function(){i.jumpTo(e(this).attr(\"data-index\"))})),o.$list||(o.$list=e('<div class=\"'+n+'__list\">').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.thumb,t||\"image\"!==n.type||(t=n.src),s.push('<a href=\"javascript:;\" tabindex=\"0\" data-index=\"'+e+'\"'+(t&&t.length?' style=\"background-image:url('+t+')\"':'class=\"fancybox-thumbs-missing\"')+\"></a>\")}),o.$list[0].innerHTML=s.join(\"\"),\"x\"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css(\"padding-right\"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,o=this,i=o.$list,a=o.$grid;o.instance.current&&(e=i.children().removeClass(\"fancybox-thumbs-active\").filter('[data-index=\"'+o.instance.current.index+'\"]').addClass(\"fancybox-thumbs-active\"),n=e.position(),\"y\"===o.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):\"x\"===o.opts.axis&&(n.left<a.scrollLeft()||n.left>a.scrollLeft()+(a.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger(\"onThumbsShow\"),t.focus(0)):t.$grid&&t.instance.trigger(\"onThumbsHide\"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({\"onInit.fb\":function(t,e){var n;e&&!e.Thumbs&&(n=new o(e),n.isActive&&!0===n.opts.autoStart&&n.show())},\"beforeShow.fb\":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},\"afterKeydown.fb\":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},\"beforeClose.fb\":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e){\"use strict\";function n(t){var e={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\",\"`\":\"&#x60;\",\"=\":\"&#x3D;\"};return String(t).replace(/[&<>\"'`=\\/]/g,function(t){return e[t]})}e.extend(!0,e.fancybox.defaults,{btnTpl:{share:'<button data-fancybox-share class=\"fancybox-button fancybox-button--share\" title=\"{{SHARE}}\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z\"/></svg></button>'},share:{url:function(t,e){return!t.currentHash&&\"inline\"!==e.type&&\"html\"!==e.type&&(e.origSrc||e.src)||window.location},\ntpl:'<div class=\"fancybox-share\"><h1>{{SHARE}}</h1><p><a class=\"fancybox-share__button fancybox-share__button--fb\" href=\"https://www.facebook.com/sharer/sharer.php?u={{url}}\"><svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196\" /></svg><span>Facebook</span></a><a class=\"fancybox-share__button fancybox-share__button--tw\" href=\"https://twitter.com/intent/tweet?url={{url}}&text={{descr}}\"><svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z\" /></svg><span>Twitter</span></a><a class=\"fancybox-share__button fancybox-share__button--pt\" href=\"https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}\"><svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z\" fill=\"#fff\"/></svg><span>Pinterest</span></a></p><p><input class=\"fancybox-share__input\" type=\"text\" value=\"{{url_raw}}\" onclick=\"select()\" /></p></div>'}}),e(t).on(\"click\",\"[data-fancybox-share]\",function(){var t,o,i=e.fancybox.getInstance(),a=i.current||null;a&&(\"function\"===e.type(a.opts.share.url)&&(t=a.opts.share.url.apply(a,[i,a])),o=a.opts.share.tpl.replace(/\\{\\{media\\}\\}/g,\"image\"===a.type?encodeURIComponent(a.src):\"\").replace(/\\{\\{url\\}\\}/g,encodeURIComponent(t)).replace(/\\{\\{url_raw\\}\\}/g,n(t)).replace(/\\{\\{descr\\}\\}/g,i.$caption?encodeURIComponent(i.$caption.text()):\"\"),e.fancybox.open({src:i.translate(i,o),type:\"html\",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one(\"beforeClose.fb\",function(){t.close(null,0)}),e.$content.find(\".fancybox-share__button\").click(function(){return window.open(this.href,\"Share\",\"width=550, height=450\"),!1})},mobile:{autoFocus:!1}}}))})}(document,jQuery),function(t,e,n){\"use strict\";function o(){var e=t.location.hash.substr(1),n=e.split(\"-\"),o=n.length>1&&/^\\+?\\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join(\"-\");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){\"\"!==t.gallery&&n(\"[data-fancybox='\"+n.escapeSelector(t.gallery)+\"']\").eq(t.index-1).focus().trigger(\"click.fb-start\")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,\"\"!==(n=e.hash||(e.$orig?e.$orig.data(\"fancybox\")||e.$orig.data(\"fancybox-trigger\"):\"\"))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+\"\").replace(/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g,function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t})}),n(function(){!1!==n.fancybox.defaults.hash&&(n(e).on({\"onInit.fb\":function(t,e){var n,i;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(i=a(e))&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},\"beforeShow.fb\":function(n,o,i,s){var r;i&&!1!==i.opts.hash&&(r=a(o))&&(o.currentHash=r+(o.group.length>1?\"-\"+(i.index+1):\"\"),t.location.hash!==\"#\"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){\"replaceState\"in t.history?(t.history[s?\"pushState\":\"replaceState\"]({},e.title,t.location.pathname+t.location.search+\"#\"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300)))},\"beforeClose.fb\":function(n,o,i){i&&!1!==i.opts.hash&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&(\"replaceState\"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||\"\")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on(\"hashchange.fb\",function(){var t=o(),e=null;n.each(n(\".fancybox-container\").get().reverse(),function(t,o){var i=n(o).data(\"FancyBox\");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+\"-\"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):\"\"!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){\"use strict\";var n=(new Date).getTime();e(t).on({\"onInit.fb\":function(t,e,o){e.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\",function(t){var o=e.current,i=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||\"auto\"===o.opts.wheel&&\"image\"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass(\"fancybox-animated\")||(t=t.originalEvent||t,i-n<250||(n=i,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?\"next\":\"previous\"]())))})}})}(document,jQuery);","/*!\n * SmartWizard v4.4.1\n * The awesome jQuery step wizard plugin with Bootstrap support\n * http://www.techlaboratory.net/smartwizard\n *\n * Created by Dipu Raj\n * http://dipuraj.me\n *\n * Licensed under the terms of the MIT License\n * https://github.com/techlab/SmartWizard/blob/master/LICENSE\n */\n!function(h,i,t){\"use strict\";var e={selected:0,keyNavigation:!0,autoAdjustHeight:!0,cycleSteps:!1,backButtonSupport:!0,useURLhash:!0,showStepURLhash:!0,lang:{next:\"Next\",previous:\"Previous\"},toolbarSettings:{toolbarPosition:\"bottom\",toolbarButtonPosition:\"end\",showNextButton:!0,showPreviousButton:!0,toolbarExtraButtons:[]},anchorSettings:{anchorClickable:!0,enableAllAnchors:!1,markDoneStep:!0,markAllPreviousStepsAsDone:!0,removeDoneStepOnNavigateBack:!1,enableAnchorOnDoneStep:!0},contentURL:null,contentCache:!0,ajaxSettings:{},disabledSteps:[],errorSteps:[],hiddenSteps:[],theme:\"default\",transitionEffect:\"none\",transitionSpeed:\"400\"};function n(t,s){this.options=h.extend(!0,{},e,s),this.main=h(t),this.nav=this.main.children(\"ul\"),this.steps=h(\"li > a\",this.nav),this.container=this.main.children(\"div\"),this.pages=this.container.children(\"div\"),this.current_index=null,this.options.toolbarSettings.toolbarButtonPosition=\"right\"===this.options.toolbarSettings.toolbarButtonPosition?\"end\":this.options.toolbarSettings.toolbarButtonPosition,this.options.toolbarSettings.toolbarButtonPosition=\"left\"===this.options.toolbarSettings.toolbarButtonPosition?\"start\":this.options.toolbarSettings.toolbarButtonPosition,this.options.theme=null===this.options.theme||\"\"===this.options.theme?\"default\":this.options.theme,this.init()}h.extend(n.prototype,{init:function(){this._setElements(),this._setToolbar(),this._setEvents();var t=this.options.selected;if(this.options.useURLhash){var s=i.location.hash;if(s&&0<s.length){var e=h(\"a[href*='\"+s+\"']\",this.nav);if(0<e.length){var n=this.steps.index(e);t=0<=n?n:t}}}0<t&&this.options.anchorSettings.markDoneStep&&this.options.anchorSettings.markAllPreviousStepsAsDone&&this.steps.eq(t).parent(\"li\").prevAll().addClass(\"done\"),this._showStep(t)},_setElements:function(){this.main.addClass(\"sw-main sw-theme-\"+this.options.theme),this.nav.addClass(\"nav nav-tabs step-anchor\").children(\"li\").addClass(\"nav-item\").children(\"a\").addClass(\"nav-link\"),!1!==this.options.anchorSettings.enableAllAnchors&&!1!==this.options.anchorSettings.anchorClickable&&this.steps.parent(\"li\").addClass(\"clickable\"),this.container.addClass(\"sw-container tab-content\"),this.pages.addClass(\"tab-pane step-content\");var e=this;return this.options.disabledSteps&&0<this.options.disabledSteps.length&&h.each(this.options.disabledSteps,function(t,s){e.steps.eq(s).parent(\"li\").addClass(\"disabled\")}),this.options.errorSteps&&0<this.options.errorSteps.length&&h.each(this.options.errorSteps,function(t,s){e.steps.eq(s).parent(\"li\").addClass(\"danger\")}),this.options.hiddenSteps&&0<this.options.hiddenSteps.length&&h.each(this.options.hiddenSteps,function(t,s){e.steps.eq(s).parent(\"li\").addClass(\"hidden\")}),!0},_setToolbar:function(){if(\"none\"===this.options.toolbarSettings.toolbarPosition)return!0;var t,s,e=!1!==this.options.toolbarSettings.showNextButton?h(\"<button></button>\").text(this.options.lang.next).addClass(\"btn btn-secondary sw-btn-next\").attr(\"type\",\"button\"):null,n=!1!==this.options.toolbarSettings.showPreviousButton?h(\"<button></button>\").text(this.options.lang.previous).addClass(\"btn btn-secondary sw-btn-prev\").attr(\"type\",\"button\"):null,i=h(\"<div></div>\").addClass(\"btn-group mr-2 sw-btn-group\").attr(\"role\",\"group\").append(n,e),o=null;switch(this.options.toolbarSettings.toolbarExtraButtons&&0<this.options.toolbarSettings.toolbarExtraButtons.length&&(o=h(\"<div></div>\").addClass(\"btn-group mr-2 sw-btn-group-extra\").attr(\"role\",\"group\"),h.each(this.options.toolbarSettings.toolbarExtraButtons,function(t,s){o.append(s.clone(!0))})),this.options.toolbarSettings.toolbarPosition){case\"top\":(t=h(\"<div></div>\").addClass(\"btn-toolbar sw-toolbar sw-toolbar-top justify-content-\"+this.options.toolbarSettings.toolbarButtonPosition)).append(i),\"start\"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(o):t.append(o),this.container.before(t);break;case\"bottom\":(s=h(\"<div></div>\").addClass(\"btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-\"+this.options.toolbarSettings.toolbarButtonPosition)).append(i),\"start\"===this.options.toolbarSettings.toolbarButtonPosition?s.prepend(o):s.append(o),this.container.after(s);break;case\"both\":(t=h(\"<div></div>\").addClass(\"btn-toolbar sw-toolbar sw-toolbar-top justify-content-\"+this.options.toolbarSettings.toolbarButtonPosition)).append(i),\"start\"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(o):t.append(o),this.container.before(t),(s=h(\"<div></div>\").addClass(\"btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-\"+this.options.toolbarSettings.toolbarButtonPosition)).append(i.clone(!0)),null!==o&&(\"start\"===this.options.toolbarSettings.toolbarButtonPosition?s.prepend(o.clone(!0)):s.append(o.clone(!0))),this.container.after(s);break;default:(s=h(\"<div></div>\").addClass(\"btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-\"+this.options.toolbarSettings.toolbarButtonPosition)).append(i),this.options.toolbarSettings.toolbarButtonPosition,s.append(o),this.container.after(s)}return!0},_setEvents:function(){var e=this;return h(this.steps).on(\"click\",function(t){if(t.preventDefault(),!1===e.options.anchorSettings.anchorClickable)return!0;var s=e.steps.index(this);if(!1===e.options.anchorSettings.enableAnchorOnDoneStep&&e.steps.eq(s).parent(\"li\").hasClass(\"done\"))return!0;s!==e.current_index&&(!1!==e.options.anchorSettings.enableAllAnchors&&!1!==e.options.anchorSettings.anchorClickable||e.steps.eq(s).parent(\"li\").hasClass(\"done\"))&&e._showStep(s)}),h(\".sw-btn-next\",this.main).on(\"click\",function(t){t.preventDefault(),e._showNext()}),h(\".sw-btn-prev\",this.main).on(\"click\",function(t){t.preventDefault(),e._showPrevious()}),this.options.keyNavigation&&h(t).keyup(function(t){e._keyNav(t)}),this.options.backButtonSupport&&h(i).on(\"hashchange\",function(t){if(!e.options.useURLhash)return!0;if(i.location.hash){var s=h(\"a[href*='\"+i.location.hash+\"']\",e.nav);s&&0<s.length&&(t.preventDefault(),e._showStep(e.steps.index(s)))}}),!0},_showNext:function(){for(var t=this.current_index+1,s=t;s<this.steps.length;s++)if(!this.steps.eq(s).parent(\"li\").hasClass(\"disabled\")&&!this.steps.eq(s).parent(\"li\").hasClass(\"hidden\")){t=s;break}if(this.steps.length<=t){if(!this.options.cycleSteps)return!1;t=0}return this._showStep(t),!0},_showPrevious:function(){for(var t=this.current_index-1,s=t;0<=s;s--)if(!this.steps.eq(s).parent(\"li\").hasClass(\"disabled\")&&!this.steps.eq(s).parent(\"li\").hasClass(\"hidden\")){t=s;break}if(t<0){if(!this.options.cycleSteps)return!1;t=this.steps.length-1}return this._showStep(t),!0},_showStep:function(t){return!!this.steps.eq(t)&&(t!=this.current_index&&(!this.steps.eq(t).parent(\"li\").hasClass(\"disabled\")&&!this.steps.eq(t).parent(\"li\").hasClass(\"hidden\")&&(this._loadStepContent(t),!0)))},_loadStepContent:function(s){var n=this,t=this.steps.eq(this.current_index),e=\"\",i=this.steps.eq(s),o=i.data(\"content-url\")&&0<i.data(\"content-url\").length?i.data(\"content-url\"):this.options.contentURL;if(null!==this.current_index&&this.current_index!==s&&(e=this.current_index<s?\"forward\":\"backward\"),null!==this.current_index&&!1===this._triggerEvent(\"leaveStep\",[t,this.current_index,e]))return!1;if(!(o&&0<o.length)||i.data(\"has-content\")&&this.options.contentCache)this._transitPage(s);else{var a=0<i.length?h(i.attr(\"href\"),this.main):null,r=h.extend(!0,{},{url:o,type:\"POST\",data:{step_number:s},dataType:\"text\",beforeSend:function(){n._loader(\"show\")},error:function(t,s,e){n._loader(\"hide\"),h.error(e)},success:function(t){t&&0<t.length&&(i.data(\"has-content\",!0),a.html(t)),n._loader(\"hide\"),n._transitPage(s)}},this.options.ajaxSettings);h.ajax(r)}return!0},_transitPage:function(t){var s=this,e=this.steps.eq(this.current_index),n=0<e.length?h(e.attr(\"href\"),this.main):null,i=this.steps.eq(t),o=0<i.length?h(i.attr(\"href\"),this.main):null,a=\"\";null!==this.current_index&&this.current_index!==t&&(a=this.current_index<t?\"forward\":\"backward\");var r=\"middle\";return 0===t?r=\"first\":t===this.steps.length-1&&(r=\"final\"),this.options.transitionEffect=this.options.transitionEffect.toLowerCase(),this.pages.finish(),\"slide\"===this.options.transitionEffect?n&&0<n.length?n.slideUp(\"fast\",this.options.transitionEasing,function(){o.slideDown(s.options.transitionSpeed,s.options.transitionEasing)}):o.slideDown(this.options.transitionSpeed,this.options.transitionEasing):\"fade\"===this.options.transitionEffect?n&&0<n.length?n.fadeOut(\"fast\",this.options.transitionEasing,function(){o.fadeIn(\"fast\",s.options.transitionEasing,function(){h(this).show()})}):o.fadeIn(this.options.transitionSpeed,this.options.transitionEasing,function(){h(this).show()}):(n&&0<n.length&&n.hide(),o.show()),this._setURLHash(i.attr(\"href\")),this._setAnchor(t),this._setButtons(t),this._fixHeight(t),this.current_index=t,this._triggerEvent(\"showStep\",[i,this.current_index,a,r]),!0},_setAnchor:function(t){return this.steps.eq(this.current_index).parent(\"li\").removeClass(\"active\"),!1!==this.options.anchorSettings.markDoneStep&&null!==this.current_index&&(this.steps.eq(this.current_index).parent(\"li\").addClass(\"done\"),!1!==this.options.anchorSettings.removeDoneStepOnNavigateBack&&this.steps.eq(t).parent(\"li\").nextAll().removeClass(\"done\")),this.steps.eq(t).parent(\"li\").removeClass(\"done\").addClass(\"active\"),!0},_setButtons:function(t){return this.options.cycleSteps||(t<=0?h(\".sw-btn-prev\",this.main).addClass(\"disabled\"):h(\".sw-btn-prev\",this.main).removeClass(\"disabled\"),this.steps.length-1<=t?h(\".sw-btn-next\",this.main).addClass(\"disabled\"):h(\".sw-btn-next\",this.main).removeClass(\"disabled\")),!0},_keyNav:function(t){switch(t.which){case 37:this._showPrevious(),t.preventDefault();break;case 39:this._showNext(),t.preventDefault();break;default:return}},_fixHeight:function(t){if(this.options.autoAdjustHeight){var s=0<this.steps.eq(t).length?h(this.steps.eq(t).attr(\"href\"),this.main):null;this.container.finish().animate({minHeight:s.outerHeight()},this.options.transitionSpeed,function(){})}return!0},_triggerEvent:function(t,s){var e=h.Event(t);return this.main.trigger(e,s),!e.isDefaultPrevented()&&e.result},_setURLHash:function(t){this.options.showStepURLhash&&i.location.hash!==t&&(i.location.hash=t)},_loader:function(t){switch(t){case\"show\":this.main.addClass(\"sw-loading\");break;case\"hide\":this.main.removeClass(\"sw-loading\");break;default:this.main.toggleClass(\"sw-loading\")}},goToStep:function(t){this._transitPage(t)},hiddenSteps:function(t){if(this.options.hiddenSteps=t,this.options.hiddenSteps&&0<this.options.hiddenSteps.length){var e=this;h.each(e.steps,function(t,s){-1<h.inArray(t,e.options.hiddenSteps)?h(s).parent(\"li\").addClass(\"hidden\"):h(s).parent(\"li\").removeClass(\"hidden\")})}},theme:function(t){if(this.options.theme===t)return!1;this.main.removeClass(\"sw-theme-\"+this.options.theme),this.options.theme=t,this.main.addClass(\"sw-theme-\"+this.options.theme),this._triggerEvent(\"themeChanged\",[this.options.theme])},next:function(){this._showNext()},prev:function(){this._showPrevious()},reset:function(){if(!1===this._triggerEvent(\"beginReset\"))return!1;this.container.stop(!0),this.pages.stop(!0),this.pages.hide(),this.current_index=null,this._setURLHash(this.steps.eq(this.options.selected).attr(\"href\")),h(\".sw-toolbar\",this.main).remove(),this.steps.removeClass(),this.steps.parents(\"li\").removeClass(),this.steps.data(\"has-content\",!1),this.init(),this._triggerEvent(\"endReset\")},stepState:function(e,t){e=h.isArray(e)?e:[e];var s=h.grep(this.steps,function(t,s){return-1!==h.inArray(s,e)});if(s&&0<s.length)switch(t){case\"disable\":h(s).parents(\"li\").addClass(\"disabled\");break;case\"enable\":h(s).parents(\"li\").removeClass(\"disabled\");break;case\"hide\":h(s).parents(\"li\").addClass(\"hidden\");break;case\"show\":h(s).parents(\"li\").removeClass(\"hidden\");break;case\"error-on\":h(s).parents(\"li\").addClass(\"danger\");break;case\"error-off\":h(s).parents(\"li\").removeClass(\"danger\")}}}),h.fn.smartWizard=function(t){var s,e=arguments;return void 0===t||\"object\"==typeof t?this.each(function(){h.data(this,\"smartWizard\")||h.data(this,\"smartWizard\",new n(this,t))}):\"string\"==typeof t&&\"_\"!==t[0]&&\"init\"!==t?(s=h.data(this[0],\"smartWizard\"),\"destroy\"===t&&h.data(this,\"smartWizard\",null),s instanceof n&&\"function\"==typeof s[t]?s[t].apply(s,Array.prototype.slice.call(e,1)):this):void 0}}(jQuery,window,document);","// Ion.RangeSlider\n// version 2.3.1 Build: 382\n// © Denis Ineshin, 2019\n// https://github.com/IonDen\n//\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\n//\n// Released under MIT licence:\n// http://ionden.com/a/plugins/licence-en.html\n// =====================================================================================================================\n\n;(function(factory) {\n    if ((typeof jQuery === 'undefined' || !jQuery) && typeof define === \"function\" && define.amd) {\n        define([\"jquery\"], function (jQuery) {\n            return factory(jQuery, document, window, navigator);\n        });\n    } else if ((typeof jQuery === 'undefined' || !jQuery) && typeof exports === \"object\") {\n        factory(require(\"jquery\"), document, window, navigator);\n    } else {\n        factory(jQuery, document, window, navigator);\n    }\n} (function ($, document, window, navigator, undefined) {\n    \"use strict\";\n\n    // =================================================================================================================\n    // Service\n\n    var plugin_count = 0;\n\n    // IE8 fix\n    var is_old_ie = (function () {\n        var n = navigator.userAgent,\n            r = /msie\\s\\d+/i,\n            v;\n        if (n.search(r) > 0) {\n            v = r.exec(n).toString();\n            v = v.split(\" \")[1];\n            if (v < 9) {\n                $(\"html\").addClass(\"lt-ie9\");\n                return true;\n            }\n        }\n        return false;\n    } ());\n    if (!Function.prototype.bind) {\n        Function.prototype.bind = function bind(that) {\n\n            var target = this;\n            var slice = [].slice;\n\n            if (typeof target != \"function\") {\n                throw new TypeError();\n            }\n\n            var args = slice.call(arguments, 1),\n                bound = function () {\n\n                    if (this instanceof bound) {\n\n                        var F = function(){};\n                        F.prototype = target.prototype;\n                        var self = new F();\n\n                        var result = target.apply(\n                            self,\n                            args.concat(slice.call(arguments))\n                        );\n                        if (Object(result) === result) {\n                            return result;\n                        }\n                        return self;\n\n                    } else {\n\n                        return target.apply(\n                            that,\n                            args.concat(slice.call(arguments))\n                        );\n\n                    }\n\n                };\n\n            return bound;\n        };\n    }\n    if (!Array.prototype.indexOf) {\n        Array.prototype.indexOf = function(searchElement, fromIndex) {\n            var k;\n            if (this == null) {\n                throw new TypeError('\"this\" is null or not defined');\n            }\n            var O = Object(this);\n            var len = O.length >>> 0;\n            if (len === 0) {\n                return -1;\n            }\n            var n = +fromIndex || 0;\n            if (Math.abs(n) === Infinity) {\n                n = 0;\n            }\n            if (n >= len) {\n                return -1;\n            }\n            k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n            while (k < len) {\n                if (k in O && O[k] === searchElement) {\n                    return k;\n                }\n                k++;\n            }\n            return -1;\n        };\n    }\n\n\n\n    // =================================================================================================================\n    // Template\n\n    var base_html =\n        '<span class=\"irs\">' +\n        '<span class=\"irs-line\" tabindex=\"0\"></span>' +\n        '<span class=\"irs-min\">0</span><span class=\"irs-max\">1</span>' +\n        '<span class=\"irs-from\">0</span><span class=\"irs-to\">0</span><span class=\"irs-single\">0</span>' +\n        '</span>' +\n        '<span class=\"irs-grid\"></span>';\n\n    var single_html =\n        '<span class=\"irs-bar irs-bar--single\"></span>' +\n        '<span class=\"irs-shadow shadow-single\"></span>' +\n        '<span class=\"irs-handle single\"><i></i><i></i><i></i></span>';\n\n    var double_html =\n        '<span class=\"irs-bar\"></span>' +\n        '<span class=\"irs-shadow shadow-from\"></span>' +\n        '<span class=\"irs-shadow shadow-to\"></span>' +\n        '<span class=\"irs-handle from\"><i></i><i></i><i></i></span>' +\n        '<span class=\"irs-handle to\"><i></i><i></i><i></i></span>';\n\n    var disable_html =\n        '<span class=\"irs-disable-mask\"></span>';\n\n\n\n    // =================================================================================================================\n    // Core\n\n    /**\n     * Main plugin constructor\n     *\n     * @param input {Object} link to base input element\n     * @param options {Object} slider config\n     * @param plugin_count {Number}\n     * @constructor\n     */\n    var IonRangeSlider = function (input, options, plugin_count) {\n        this.VERSION = \"2.3.1\";\n        this.input = input;\n        this.plugin_count = plugin_count;\n        this.current_plugin = 0;\n        this.calc_count = 0;\n        this.update_tm = 0;\n        this.old_from = 0;\n        this.old_to = 0;\n        this.old_min_interval = null;\n        this.raf_id = null;\n        this.dragging = false;\n        this.force_redraw = false;\n        this.no_diapason = false;\n        this.has_tab_index = true;\n        this.is_key = false;\n        this.is_update = false;\n        this.is_start = true;\n        this.is_finish = false;\n        this.is_active = false;\n        this.is_resize = false;\n        this.is_click = false;\n\n        options = options || {};\n\n        // cache for links to all DOM elements\n        this.$cache = {\n            win: $(window),\n            body: $(document.body),\n            input: $(input),\n            cont: null,\n            rs: null,\n            min: null,\n            max: null,\n            from: null,\n            to: null,\n            single: null,\n            bar: null,\n            line: null,\n            s_single: null,\n            s_from: null,\n            s_to: null,\n            shad_single: null,\n            shad_from: null,\n            shad_to: null,\n            edge: null,\n            grid: null,\n            grid_labels: []\n        };\n\n        // storage for measure variables\n        this.coords = {\n            // left\n            x_gap: 0,\n            x_pointer: 0,\n\n            // width\n            w_rs: 0,\n            w_rs_old: 0,\n            w_handle: 0,\n\n            // percents\n            p_gap: 0,\n            p_gap_left: 0,\n            p_gap_right: 0,\n            p_step: 0,\n            p_pointer: 0,\n            p_handle: 0,\n            p_single_fake: 0,\n            p_single_real: 0,\n            p_from_fake: 0,\n            p_from_real: 0,\n            p_to_fake: 0,\n            p_to_real: 0,\n            p_bar_x: 0,\n            p_bar_w: 0,\n\n            // grid\n            grid_gap: 0,\n            big_num: 0,\n            big: [],\n            big_w: [],\n            big_p: [],\n            big_x: []\n        };\n\n        // storage for labels measure variables\n        this.labels = {\n            // width\n            w_min: 0,\n            w_max: 0,\n            w_from: 0,\n            w_to: 0,\n            w_single: 0,\n\n            // percents\n            p_min: 0,\n            p_max: 0,\n            p_from_fake: 0,\n            p_from_left: 0,\n            p_to_fake: 0,\n            p_to_left: 0,\n            p_single_fake: 0,\n            p_single_left: 0\n        };\n\n\n\n        /**\n         * get and validate config\n         */\n        var $inp = this.$cache.input,\n            val = $inp.prop(\"value\"),\n            config, config_from_data, prop;\n\n        // default config\n        config = {\n            skin: \"flat\",\n            type: \"single\",\n\n            min: 10,\n            max: 100,\n            from: null,\n            to: null,\n            step: 1,\n\n            min_interval: 0,\n            max_interval: 0,\n            drag_interval: false,\n\n            values: [],\n            p_values: [],\n\n            from_fixed: false,\n            from_min: null,\n            from_max: null,\n            from_shadow: false,\n\n            to_fixed: false,\n            to_min: null,\n            to_max: null,\n            to_shadow: false,\n\n            prettify_enabled: true,\n            prettify_separator: \" \",\n            prettify: null,\n\n            force_edges: false,\n\n            keyboard: true,\n\n            grid: false,\n            grid_margin: true,\n            grid_num: 4,\n            grid_snap: false,\n\n            hide_min_max: false,\n            hide_from_to: false,\n\n            prefix: \"\",\n            postfix: \"\",\n            max_postfix: \"\",\n            decorate_both: true,\n            values_separator: \" — \",\n\n            input_values_separator: \";\",\n\n            disable: false,\n            block: false,\n\n            extra_classes: \"\",\n\n            scope: null,\n            onStart: null,\n            onChange: null,\n            onFinish: null,\n            onUpdate: null\n        };\n\n\n        // check if base element is input\n        if ($inp[0].nodeName !== \"INPUT\") {\n            console && console.warn && console.warn(\"Base element should be <input>!\", $inp[0]);\n        }\n\n\n        // config from data-attributes extends js config\n        config_from_data = {\n            skin: $inp.data(\"skin\"),\n            type: $inp.data(\"type\"),\n\n            min: $inp.data(\"min\"),\n            max: $inp.data(\"max\"),\n            from: $inp.data(\"from\"),\n            to: $inp.data(\"to\"),\n            step: $inp.data(\"step\"),\n\n            min_interval: $inp.data(\"minInterval\"),\n            max_interval: $inp.data(\"maxInterval\"),\n            drag_interval: $inp.data(\"dragInterval\"),\n\n            values: $inp.data(\"values\"),\n\n            from_fixed: $inp.data(\"fromFixed\"),\n            from_min: $inp.data(\"fromMin\"),\n            from_max: $inp.data(\"fromMax\"),\n            from_shadow: $inp.data(\"fromShadow\"),\n\n            to_fixed: $inp.data(\"toFixed\"),\n            to_min: $inp.data(\"toMin\"),\n            to_max: $inp.data(\"toMax\"),\n            to_shadow: $inp.data(\"toShadow\"),\n\n            prettify_enabled: $inp.data(\"prettifyEnabled\"),\n            prettify_separator: $inp.data(\"prettifySeparator\"),\n\n            force_edges: $inp.data(\"forceEdges\"),\n\n            keyboard: $inp.data(\"keyboard\"),\n\n            grid: $inp.data(\"grid\"),\n            grid_margin: $inp.data(\"gridMargin\"),\n            grid_num: $inp.data(\"gridNum\"),\n            grid_snap: $inp.data(\"gridSnap\"),\n\n            hide_min_max: $inp.data(\"hideMinMax\"),\n            hide_from_to: $inp.data(\"hideFromTo\"),\n\n            prefix: $inp.data(\"prefix\"),\n            postfix: $inp.data(\"postfix\"),\n            max_postfix: $inp.data(\"maxPostfix\"),\n            decorate_both: $inp.data(\"decorateBoth\"),\n            values_separator: $inp.data(\"valuesSeparator\"),\n\n            input_values_separator: $inp.data(\"inputValuesSeparator\"),\n\n            disable: $inp.data(\"disable\"),\n            block: $inp.data(\"block\"),\n\n            extra_classes: $inp.data(\"extraClasses\"),\n        };\n        config_from_data.values = config_from_data.values && config_from_data.values.split(\",\");\n\n        for (prop in config_from_data) {\n            if (config_from_data.hasOwnProperty(prop)) {\n                if (config_from_data[prop] === undefined || config_from_data[prop] === \"\") {\n                    delete config_from_data[prop];\n                }\n            }\n        }\n\n\n        // input value extends default config\n        if (val !== undefined && val !== \"\") {\n            val = val.split(config_from_data.input_values_separator || options.input_values_separator || \";\");\n\n            if (val[0] && val[0] == +val[0]) {\n                val[0] = +val[0];\n            }\n            if (val[1] && val[1] == +val[1]) {\n                val[1] = +val[1];\n            }\n\n            if (options && options.values && options.values.length) {\n                config.from = val[0] && options.values.indexOf(val[0]);\n                config.to = val[1] && options.values.indexOf(val[1]);\n            } else {\n                config.from = val[0] && +val[0];\n                config.to = val[1] && +val[1];\n            }\n        }\n\n\n\n        // js config extends default config\n        $.extend(config, options);\n\n\n        // data config extends config\n        $.extend(config, config_from_data);\n        this.options = config;\n\n\n\n        // validate config, to be sure that all data types are correct\n        this.update_check = {};\n        this.validate();\n\n\n\n        // default result object, returned to callbacks\n        this.result = {\n            input: this.$cache.input,\n            slider: null,\n\n            min: this.options.min,\n            max: this.options.max,\n\n            from: this.options.from,\n            from_percent: 0,\n            from_value: null,\n\n            to: this.options.to,\n            to_percent: 0,\n            to_value: null\n        };\n\n\n\n        this.init();\n    };\n\n    IonRangeSlider.prototype = {\n\n        /**\n         * Starts or updates the plugin instance\n         *\n         * @param [is_update] {boolean}\n         */\n        init: function (is_update) {\n            this.no_diapason = false;\n            this.coords.p_step = this.convertToPercent(this.options.step, true);\n\n            this.target = \"base\";\n\n            this.toggleInput();\n            this.append();\n            this.setMinMax();\n\n            if (is_update) {\n                this.force_redraw = true;\n                this.calc(true);\n\n                // callbacks called\n                this.callOnUpdate();\n            } else {\n                this.force_redraw = true;\n                this.calc(true);\n\n                // callbacks called\n                this.callOnStart();\n            }\n\n            this.updateScene();\n        },\n\n        /**\n         * Appends slider template to a DOM\n         */\n        append: function () {\n            var container_html = '<span class=\"irs irs--' + this.options.skin + ' js-irs-' + this.plugin_count + ' ' + this.options.extra_classes + '\"></span>';\n            this.$cache.input.before(container_html);\n            this.$cache.input.prop(\"readonly\", true);\n            this.$cache.cont = this.$cache.input.prev();\n            this.result.slider = this.$cache.cont;\n\n            this.$cache.cont.html(base_html);\n            this.$cache.rs = this.$cache.cont.find(\".irs\");\n            this.$cache.min = this.$cache.cont.find(\".irs-min\");\n            this.$cache.max = this.$cache.cont.find(\".irs-max\");\n            this.$cache.from = this.$cache.cont.find(\".irs-from\");\n            this.$cache.to = this.$cache.cont.find(\".irs-to\");\n            this.$cache.single = this.$cache.cont.find(\".irs-single\");\n            this.$cache.line = this.$cache.cont.find(\".irs-line\");\n            this.$cache.grid = this.$cache.cont.find(\".irs-grid\");\n\n            if (this.options.type === \"single\") {\n                this.$cache.cont.append(single_html);\n                this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n                this.$cache.edge = this.$cache.cont.find(\".irs-bar-edge\");\n                this.$cache.s_single = this.$cache.cont.find(\".single\");\n                this.$cache.from[0].style.visibility = \"hidden\";\n                this.$cache.to[0].style.visibility = \"hidden\";\n                this.$cache.shad_single = this.$cache.cont.find(\".shadow-single\");\n            } else {\n                this.$cache.cont.append(double_html);\n                this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n                this.$cache.s_from = this.$cache.cont.find(\".from\");\n                this.$cache.s_to = this.$cache.cont.find(\".to\");\n                this.$cache.shad_from = this.$cache.cont.find(\".shadow-from\");\n                this.$cache.shad_to = this.$cache.cont.find(\".shadow-to\");\n\n                this.setTopHandler();\n            }\n\n            if (this.options.hide_from_to) {\n                this.$cache.from[0].style.display = \"none\";\n                this.$cache.to[0].style.display = \"none\";\n                this.$cache.single[0].style.display = \"none\";\n            }\n\n            this.appendGrid();\n\n            if (this.options.disable) {\n                this.appendDisableMask();\n                this.$cache.input[0].disabled = true;\n            } else {\n                this.$cache.input[0].disabled = false;\n                this.removeDisableMask();\n                this.bindEvents();\n            }\n\n            // block only if not disabled\n            if (!this.options.disable) {\n                if (this.options.block) {\n                    this.appendDisableMask();\n                } else {\n                    this.removeDisableMask();\n                }\n            }\n\n            if (this.options.drag_interval) {\n                this.$cache.bar[0].style.cursor = \"ew-resize\";\n            }\n        },\n\n        /**\n         * Determine which handler has a priority\n         * works only for double slider type\n         */\n        setTopHandler: function () {\n            var min = this.options.min,\n                max = this.options.max,\n                from = this.options.from,\n                to = this.options.to;\n\n            if (from > min && to === max) {\n                this.$cache.s_from.addClass(\"type_last\");\n            } else if (to < max) {\n                this.$cache.s_to.addClass(\"type_last\");\n            }\n        },\n\n        /**\n         * Determine which handles was clicked last\n         * and which handler should have hover effect\n         *\n         * @param target {String}\n         */\n        changeLevel: function (target) {\n            switch (target) {\n                case \"single\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake);\n                    this.$cache.s_single.addClass(\"state_hover\");\n                    break;\n                case \"from\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n                    this.$cache.s_from.addClass(\"state_hover\");\n                    this.$cache.s_from.addClass(\"type_last\");\n                    this.$cache.s_to.removeClass(\"type_last\");\n                    break;\n                case \"to\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake);\n                    this.$cache.s_to.addClass(\"state_hover\");\n                    this.$cache.s_to.addClass(\"type_last\");\n                    this.$cache.s_from.removeClass(\"type_last\");\n                    break;\n                case \"both\":\n                    this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n                    this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer);\n                    this.$cache.s_to.removeClass(\"type_last\");\n                    this.$cache.s_from.removeClass(\"type_last\");\n                    break;\n            }\n        },\n\n        /**\n         * Then slider is disabled\n         * appends extra layer with opacity\n         */\n        appendDisableMask: function () {\n            this.$cache.cont.append(disable_html);\n            this.$cache.cont.addClass(\"irs-disabled\");\n        },\n\n        /**\n         * Then slider is not disabled\n         * remove disable mask\n         */\n        removeDisableMask: function () {\n            this.$cache.cont.remove(\".irs-disable-mask\");\n            this.$cache.cont.removeClass(\"irs-disabled\");\n        },\n\n        /**\n         * Remove slider instance\n         * and unbind all events\n         */\n        remove: function () {\n            this.$cache.cont.remove();\n            this.$cache.cont = null;\n\n            this.$cache.line.off(\"keydown.irs_\" + this.plugin_count);\n\n            this.$cache.body.off(\"touchmove.irs_\" + this.plugin_count);\n            this.$cache.body.off(\"mousemove.irs_\" + this.plugin_count);\n\n            this.$cache.win.off(\"touchend.irs_\" + this.plugin_count);\n            this.$cache.win.off(\"mouseup.irs_\" + this.plugin_count);\n\n            if (is_old_ie) {\n                this.$cache.body.off(\"mouseup.irs_\" + this.plugin_count);\n                this.$cache.body.off(\"mouseleave.irs_\" + this.plugin_count);\n            }\n\n            this.$cache.grid_labels = [];\n            this.coords.big = [];\n            this.coords.big_w = [];\n            this.coords.big_p = [];\n            this.coords.big_x = [];\n\n            cancelAnimationFrame(this.raf_id);\n        },\n\n        /**\n         * bind all slider events\n         */\n        bindEvents: function () {\n            if (this.no_diapason) {\n                return;\n            }\n\n            this.$cache.body.on(\"touchmove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n            this.$cache.body.on(\"mousemove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n\n            this.$cache.win.on(\"touchend.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n            this.$cache.win.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n\n            this.$cache.line.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            this.$cache.line.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n            this.$cache.line.on(\"focus.irs_\" + this.plugin_count, this.pointerFocus.bind(this));\n\n            if (this.options.drag_interval && this.options.type === \"double\") {\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n            } else {\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            }\n\n            if (this.options.type === \"single\") {\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.s_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.shad_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.s_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.edge.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            } else {\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n\n                this.$cache.from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.s_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.s_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.shad_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n                this.$cache.from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.s_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.s_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.shad_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            }\n\n            if (this.options.keyboard) {\n                this.$cache.line.on(\"keydown.irs_\" + this.plugin_count, this.key.bind(this, \"keyboard\"));\n            }\n\n            if (is_old_ie) {\n                this.$cache.body.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n                this.$cache.body.on(\"mouseleave.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n            }\n        },\n\n        /**\n         * Focus with tabIndex\n         *\n         * @param e {Object} event object\n         */\n        pointerFocus: function (e) {\n            if (!this.target) {\n                var x;\n                var $handle;\n\n                if (this.options.type === \"single\") {\n                    $handle = this.$cache.single;\n                } else {\n                    $handle = this.$cache.from;\n                }\n\n                x = $handle.offset().left;\n                x += ($handle.width() / 2) - 1;\n\n                this.pointerClick(\"single\", {preventDefault: function () {}, pageX: x});\n            }\n        },\n\n        /**\n         * Mousemove or touchmove\n         * only for handlers\n         *\n         * @param e {Object} event object\n         */\n        pointerMove: function (e) {\n            if (!this.dragging) {\n                return;\n            }\n\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            this.coords.x_pointer = x - this.coords.x_gap;\n\n            this.calc();\n        },\n\n        /**\n         * Mouseup or touchend\n         * only for handlers\n         *\n         * @param e {Object} event object\n         */\n        pointerUp: function (e) {\n            if (this.current_plugin !== this.plugin_count) {\n                return;\n            }\n\n            if (this.is_active) {\n                this.is_active = false;\n            } else {\n                return;\n            }\n\n            this.$cache.cont.find(\".state_hover\").removeClass(\"state_hover\");\n\n            this.force_redraw = true;\n\n            if (is_old_ie) {\n                $(\"*\").prop(\"unselectable\", false);\n            }\n\n            this.updateScene();\n            this.restoreOriginalMinInterval();\n\n            // callbacks call\n            if ($.contains(this.$cache.cont[0], e.target) || this.dragging) {\n                this.callOnFinish();\n            }\n\n            this.dragging = false;\n        },\n\n        /**\n         * Mousedown or touchstart\n         * only for handlers\n         *\n         * @param target {String|null}\n         * @param e {Object} event object\n         */\n        pointerDown: function (target, e) {\n            e.preventDefault();\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            if (e.button === 2) {\n                return;\n            }\n\n            if (target === \"both\") {\n                this.setTempMinInterval();\n            }\n\n            if (!target) {\n                target = this.target || \"from\";\n            }\n\n            this.current_plugin = this.plugin_count;\n            this.target = target;\n\n            this.is_active = true;\n            this.dragging = true;\n\n            this.coords.x_gap = this.$cache.rs.offset().left;\n            this.coords.x_pointer = x - this.coords.x_gap;\n\n            this.calcPointerPercent();\n            this.changeLevel(target);\n\n            if (is_old_ie) {\n                $(\"*\").prop(\"unselectable\", true);\n            }\n\n            this.$cache.line.trigger(\"focus\");\n\n            this.updateScene();\n        },\n\n        /**\n         * Mousedown or touchstart\n         * for other slider elements, like diapason line\n         *\n         * @param target {String}\n         * @param e {Object} event object\n         */\n        pointerClick: function (target, e) {\n            e.preventDefault();\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            if (e.button === 2) {\n                return;\n            }\n\n            this.current_plugin = this.plugin_count;\n            this.target = target;\n\n            this.is_click = true;\n            this.coords.x_gap = this.$cache.rs.offset().left;\n            this.coords.x_pointer = +(x - this.coords.x_gap).toFixed();\n\n            this.force_redraw = true;\n            this.calc();\n\n            this.$cache.line.trigger(\"focus\");\n        },\n\n        /**\n         * Keyborard controls for focused slider\n         *\n         * @param target {String}\n         * @param e {Object} event object\n         * @returns {boolean|undefined}\n         */\n        key: function (target, e) {\n            if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n                return;\n            }\n\n            switch (e.which) {\n                case 83: // W\n                case 65: // A\n                case 40: // DOWN\n                case 37: // LEFT\n                    e.preventDefault();\n                    this.moveByKey(false);\n                    break;\n\n                case 87: // S\n                case 68: // D\n                case 38: // UP\n                case 39: // RIGHT\n                    e.preventDefault();\n                    this.moveByKey(true);\n                    break;\n            }\n\n            return true;\n        },\n\n        /**\n         * Move by key\n         *\n         * @param right {boolean} direction to move\n         */\n        moveByKey: function (right) {\n            var p = this.coords.p_pointer;\n            var p_step = (this.options.max - this.options.min) / 100;\n            p_step = this.options.step / p_step;\n\n            if (right) {\n                p += p_step;\n            } else {\n                p -= p_step;\n            }\n\n            this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p);\n            this.is_key = true;\n            this.calc();\n        },\n\n        /**\n         * Set visibility and content\n         * of Min and Max labels\n         */\n        setMinMax: function () {\n            if (!this.options) {\n                return;\n            }\n\n            if (this.options.hide_min_max) {\n                this.$cache.min[0].style.display = \"none\";\n                this.$cache.max[0].style.display = \"none\";\n                return;\n            }\n\n            if (this.options.values.length) {\n                this.$cache.min.html(this.decorate(this.options.p_values[this.options.min]));\n                this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));\n            } else {\n                var min_pretty = this._prettify(this.options.min);\n                var max_pretty = this._prettify(this.options.max);\n\n                this.result.min_pretty = min_pretty;\n                this.result.max_pretty = max_pretty;\n\n                this.$cache.min.html(this.decorate(min_pretty, this.options.min));\n                this.$cache.max.html(this.decorate(max_pretty, this.options.max));\n            }\n\n            this.labels.w_min = this.$cache.min.outerWidth(false);\n            this.labels.w_max = this.$cache.max.outerWidth(false);\n        },\n\n        /**\n         * Then dragging interval, prevent interval collapsing\n         * using min_interval option\n         */\n        setTempMinInterval: function () {\n            var interval = this.result.to - this.result.from;\n\n            if (this.old_min_interval === null) {\n                this.old_min_interval = this.options.min_interval;\n            }\n\n            this.options.min_interval = interval;\n        },\n\n        /**\n         * Restore min_interval option to original\n         */\n        restoreOriginalMinInterval: function () {\n            if (this.old_min_interval !== null) {\n                this.options.min_interval = this.old_min_interval;\n                this.old_min_interval = null;\n            }\n        },\n\n\n\n        // =============================================================================================================\n        // Calculations\n\n        /**\n         * All calculations and measures start here\n         *\n         * @param update {boolean=}\n         */\n        calc: function (update) {\n            if (!this.options) {\n                return;\n            }\n\n            this.calc_count++;\n\n            if (this.calc_count === 10 || update) {\n                this.calc_count = 0;\n                this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n                this.calcHandlePercent();\n            }\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            this.calcPointerPercent();\n            var handle_x = this.getHandleX();\n\n\n            if (this.target === \"both\") {\n                this.coords.p_gap = 0;\n                handle_x = this.getHandleX();\n            }\n\n            if (this.target === \"click\") {\n                this.coords.p_gap = this.coords.p_handle / 2;\n                handle_x = this.getHandleX();\n\n                if (this.options.drag_interval) {\n                    this.target = \"both_one\";\n                } else {\n                    this.target = this.chooseHandle(handle_x);\n                }\n            }\n\n            switch (this.target) {\n                case \"base\":\n                    var w = (this.options.max - this.options.min) / 100,\n                        f = (this.result.from - this.options.min) / w,\n                        t = (this.result.to - this.options.min) / w;\n\n                    this.coords.p_single_real = this.toFixed(f);\n                    this.coords.p_from_real = this.toFixed(f);\n                    this.coords.p_to_real = this.toFixed(t);\n\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    this.target = null;\n\n                    break;\n\n                case \"single\":\n                    if (this.options.from_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_single_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real);\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n\n                    break;\n\n                case \"from\":\n                    if (this.options.from_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n                    if (this.coords.p_from_real > this.coords.p_to_real) {\n                        this.coords.p_from_real = this.coords.p_to_real;\n                    }\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n                    this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    break;\n\n                case \"to\":\n                    if (this.options.to_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n                    if (this.coords.p_to_real < this.coords.p_from_real) {\n                        this.coords.p_to_real = this.coords.p_from_real;\n                    }\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n                    this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n\n                case \"both\":\n                    if (this.options.from_fixed || this.options.to_fixed) {\n                        break;\n                    }\n\n                    handle_x = this.toFixed(handle_x + (this.coords.p_handle * 0.001));\n\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left;\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right;\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n\n                case \"both_one\":\n                    if (this.options.from_fixed || this.options.to_fixed) {\n                        break;\n                    }\n\n                    var real_x = this.convertToRealPercent(handle_x),\n                        from = this.result.from_percent,\n                        to = this.result.to_percent,\n                        full = to - from,\n                        half = full / 2,\n                        new_from = real_x - half,\n                        new_to = real_x + half;\n\n                    if (new_from < 0) {\n                        new_from = 0;\n                        new_to = new_from + full;\n                    }\n\n                    if (new_to > 100) {\n                        new_to = 100;\n                        new_from = new_to - full;\n                    }\n\n                    this.coords.p_from_real = this.calcWithStep(new_from);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    this.coords.p_to_real = this.calcWithStep(new_to);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n            }\n\n            if (this.options.type === \"single\") {\n                this.coords.p_bar_x = (this.coords.p_handle / 2);\n                this.coords.p_bar_w = this.coords.p_single_fake;\n\n                this.result.from_percent = this.coords.p_single_real;\n                this.result.from = this.convertToValue(this.coords.p_single_real);\n                this.result.from_pretty = this._prettify(this.result.from);\n\n                if (this.options.values.length) {\n                    this.result.from_value = this.options.values[this.result.from];\n                }\n            } else {\n                this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + (this.coords.p_handle / 2));\n                this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake);\n\n                this.result.from_percent = this.coords.p_from_real;\n                this.result.from = this.convertToValue(this.coords.p_from_real);\n                this.result.from_pretty = this._prettify(this.result.from);\n                this.result.to_percent = this.coords.p_to_real;\n                this.result.to = this.convertToValue(this.coords.p_to_real);\n                this.result.to_pretty = this._prettify(this.result.to);\n\n                if (this.options.values.length) {\n                    this.result.from_value = this.options.values[this.result.from];\n                    this.result.to_value = this.options.values[this.result.to];\n                }\n            }\n\n            this.calcMinMax();\n            this.calcLabels();\n        },\n\n\n        /**\n         * calculates pointer X in percent\n         */\n        calcPointerPercent: function () {\n            if (!this.coords.w_rs) {\n                this.coords.p_pointer = 0;\n                return;\n            }\n\n            if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer)  ) {\n                this.coords.x_pointer = 0;\n            } else if (this.coords.x_pointer > this.coords.w_rs) {\n                this.coords.x_pointer = this.coords.w_rs;\n            }\n\n            this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100);\n        },\n\n        convertToRealPercent: function (fake) {\n            var full = 100 - this.coords.p_handle;\n            return fake / full * 100;\n        },\n\n        convertToFakePercent: function (real) {\n            var full = 100 - this.coords.p_handle;\n            return real / 100 * full;\n        },\n\n        getHandleX: function () {\n            var max = 100 - this.coords.p_handle,\n                x = this.toFixed(this.coords.p_pointer - this.coords.p_gap);\n\n            if (x < 0) {\n                x = 0;\n            } else if (x > max) {\n                x = max;\n            }\n\n            return x;\n        },\n\n        calcHandlePercent: function () {\n            if (this.options.type === \"single\") {\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n            } else {\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n            }\n\n            this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n        },\n\n        /**\n         * Find closest handle to pointer click\n         *\n         * @param real_x {Number}\n         * @returns {String}\n         */\n        chooseHandle: function (real_x) {\n            if (this.options.type === \"single\") {\n                return \"single\";\n            } else {\n                var m_point = this.coords.p_from_real + ((this.coords.p_to_real - this.coords.p_from_real) / 2);\n                if (real_x >= m_point) {\n                    return this.options.to_fixed ? \"from\" : \"to\";\n                } else {\n                    return this.options.from_fixed ? \"to\" : \"from\";\n                }\n            }\n        },\n\n        /**\n         * Measure Min and Max labels width in percent\n         */\n        calcMinMax: function () {\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100;\n            this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100;\n        },\n\n        /**\n         * Measure labels width and X in percent\n         */\n        calcLabels: function () {\n            if (!this.coords.w_rs || this.options.hide_from_to) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n\n                this.labels.w_single = this.$cache.single.outerWidth(false);\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n                this.labels.p_single_left = this.coords.p_single_fake + (this.coords.p_handle / 2) - (this.labels.p_single_fake / 2);\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n\n            } else {\n\n                this.labels.w_from = this.$cache.from.outerWidth(false);\n                this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100;\n                this.labels.p_from_left = this.coords.p_from_fake + (this.coords.p_handle / 2) - (this.labels.p_from_fake / 2);\n                this.labels.p_from_left = this.toFixed(this.labels.p_from_left);\n                this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake);\n\n                this.labels.w_to = this.$cache.to.outerWidth(false);\n                this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100;\n                this.labels.p_to_left = this.coords.p_to_fake + (this.coords.p_handle / 2) - (this.labels.p_to_fake / 2);\n                this.labels.p_to_left = this.toFixed(this.labels.p_to_left);\n                this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake);\n\n                this.labels.w_single = this.$cache.single.outerWidth(false);\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n                this.labels.p_single_left = ((this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2) - (this.labels.p_single_fake / 2);\n                this.labels.p_single_left = this.toFixed(this.labels.p_single_left);\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n\n            }\n        },\n\n\n\n        // =============================================================================================================\n        // Drawings\n\n        /**\n         * Main function called in request animation frame\n         * to update everything\n         */\n        updateScene: function () {\n            if (this.raf_id) {\n                cancelAnimationFrame(this.raf_id);\n                this.raf_id = null;\n            }\n\n            clearTimeout(this.update_tm);\n            this.update_tm = null;\n\n            if (!this.options) {\n                return;\n            }\n\n            this.drawHandles();\n\n            if (this.is_active) {\n                this.raf_id = requestAnimationFrame(this.updateScene.bind(this));\n            } else {\n                this.update_tm = setTimeout(this.updateScene.bind(this), 300);\n            }\n        },\n\n        /**\n         * Draw handles\n         */\n        drawHandles: function () {\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (this.coords.w_rs !== this.coords.w_rs_old) {\n                this.target = \"base\";\n                this.is_resize = true;\n            }\n\n            if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) {\n                this.setMinMax();\n                this.calc(true);\n                this.drawLabels();\n                if (this.options.grid) {\n                    this.calcGridMargin();\n                    this.calcGridLabels();\n                }\n                this.force_redraw = true;\n                this.coords.w_rs_old = this.coords.w_rs;\n                this.drawShadow();\n            }\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (!this.dragging && !this.force_redraw && !this.is_key) {\n                return;\n            }\n\n            if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) {\n\n                this.drawLabels();\n\n                this.$cache.bar[0].style.left = this.coords.p_bar_x + \"%\";\n                this.$cache.bar[0].style.width = this.coords.p_bar_w + \"%\";\n\n                if (this.options.type === \"single\") {\n                    this.$cache.bar[0].style.left = 0;\n                    this.$cache.bar[0].style.width = this.coords.p_bar_w + this.coords.p_bar_x + \"%\";\n\n                    this.$cache.s_single[0].style.left = this.coords.p_single_fake + \"%\";\n\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n                } else {\n                    this.$cache.s_from[0].style.left = this.coords.p_from_fake + \"%\";\n                    this.$cache.s_to[0].style.left = this.coords.p_to_fake + \"%\";\n\n                    if (this.old_from !== this.result.from || this.force_redraw) {\n                        this.$cache.from[0].style.left = this.labels.p_from_left + \"%\";\n                    }\n                    if (this.old_to !== this.result.to || this.force_redraw) {\n                        this.$cache.to[0].style.left = this.labels.p_to_left + \"%\";\n                    }\n\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n                }\n\n                this.writeToInput();\n\n                if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) {\n                    this.$cache.input.trigger(\"change\");\n                    this.$cache.input.trigger(\"input\");\n                }\n\n                this.old_from = this.result.from;\n                this.old_to = this.result.to;\n\n                // callbacks call\n                if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) {\n                    this.callOnChange();\n                }\n                if (this.is_key || this.is_click) {\n                    this.is_key = false;\n                    this.is_click = false;\n                    this.callOnFinish();\n                }\n\n                this.is_update = false;\n                this.is_resize = false;\n                this.is_finish = false;\n            }\n\n            this.is_start = false;\n            this.is_key = false;\n            this.is_click = false;\n            this.force_redraw = false;\n        },\n\n        /**\n         * Draw labels\n         * measure labels collisions\n         * collapse close labels\n         */\n        drawLabels: function () {\n            if (!this.options) {\n                return;\n            }\n\n            var values_num = this.options.values.length;\n            var p_values = this.options.p_values;\n            var text_single;\n            var text_from;\n            var text_to;\n            var from_pretty;\n            var to_pretty;\n\n            if (this.options.hide_from_to) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n\n                if (values_num) {\n                    text_single = this.decorate(p_values[this.result.from]);\n                    this.$cache.single.html(text_single);\n                } else {\n                    from_pretty = this._prettify(this.result.from);\n\n                    text_single = this.decorate(from_pretty, this.result.from);\n                    this.$cache.single.html(text_single);\n                }\n\n                this.calcLabels();\n\n                if (this.labels.p_single_left < this.labels.p_min + 1) {\n                    this.$cache.min[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.min[0].style.visibility = \"visible\";\n                }\n\n                if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) {\n                    this.$cache.max[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.max[0].style.visibility = \"visible\";\n                }\n\n            } else {\n\n                if (values_num) {\n\n                    if (this.options.decorate_both) {\n                        text_single = this.decorate(p_values[this.result.from]);\n                        text_single += this.options.values_separator;\n                        text_single += this.decorate(p_values[this.result.to]);\n                    } else {\n                        text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]);\n                    }\n                    text_from = this.decorate(p_values[this.result.from]);\n                    text_to = this.decorate(p_values[this.result.to]);\n\n                    this.$cache.single.html(text_single);\n                    this.$cache.from.html(text_from);\n                    this.$cache.to.html(text_to);\n\n                } else {\n                    from_pretty = this._prettify(this.result.from);\n                    to_pretty = this._prettify(this.result.to);\n\n                    if (this.options.decorate_both) {\n                        text_single = this.decorate(from_pretty, this.result.from);\n                        text_single += this.options.values_separator;\n                        text_single += this.decorate(to_pretty, this.result.to);\n                    } else {\n                        text_single = this.decorate(from_pretty + this.options.values_separator + to_pretty, this.result.to);\n                    }\n                    text_from = this.decorate(from_pretty, this.result.from);\n                    text_to = this.decorate(to_pretty, this.result.to);\n\n                    this.$cache.single.html(text_single);\n                    this.$cache.from.html(text_from);\n                    this.$cache.to.html(text_to);\n\n                }\n\n                this.calcLabels();\n\n                var min = Math.min(this.labels.p_single_left, this.labels.p_from_left),\n                    single_left = this.labels.p_single_left + this.labels.p_single_fake,\n                    to_left = this.labels.p_to_left + this.labels.p_to_fake,\n                    max = Math.max(single_left, to_left);\n\n                if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) {\n                    this.$cache.from[0].style.visibility = \"hidden\";\n                    this.$cache.to[0].style.visibility = \"hidden\";\n                    this.$cache.single[0].style.visibility = \"visible\";\n\n                    if (this.result.from === this.result.to) {\n                        if (this.target === \"from\") {\n                            this.$cache.from[0].style.visibility = \"visible\";\n                        } else if (this.target === \"to\") {\n                            this.$cache.to[0].style.visibility = \"visible\";\n                        } else if (!this.target) {\n                            this.$cache.from[0].style.visibility = \"visible\";\n                        }\n                        this.$cache.single[0].style.visibility = \"hidden\";\n                        max = to_left;\n                    } else {\n                        this.$cache.from[0].style.visibility = \"hidden\";\n                        this.$cache.to[0].style.visibility = \"hidden\";\n                        this.$cache.single[0].style.visibility = \"visible\";\n                        max = Math.max(single_left, to_left);\n                    }\n                } else {\n                    this.$cache.from[0].style.visibility = \"visible\";\n                    this.$cache.to[0].style.visibility = \"visible\";\n                    this.$cache.single[0].style.visibility = \"hidden\";\n                }\n\n                if (min < this.labels.p_min + 1) {\n                    this.$cache.min[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.min[0].style.visibility = \"visible\";\n                }\n\n                if (max > 100 - this.labels.p_max - 1) {\n                    this.$cache.max[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.max[0].style.visibility = \"visible\";\n                }\n\n            }\n        },\n\n        /**\n         * Draw shadow intervals\n         */\n        drawShadow: function () {\n            var o = this.options,\n                c = this.$cache,\n\n                is_from_min = typeof o.from_min === \"number\" && !isNaN(o.from_min),\n                is_from_max = typeof o.from_max === \"number\" && !isNaN(o.from_max),\n                is_to_min = typeof o.to_min === \"number\" && !isNaN(o.to_min),\n                is_to_max = typeof o.to_max === \"number\" && !isNaN(o.to_max),\n\n                from_min,\n                from_max,\n                to_min,\n                to_max;\n\n            if (o.type === \"single\") {\n                if (o.from_shadow && (is_from_min || is_from_max)) {\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n                    from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\n                    from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\n                    from_min = from_min + (this.coords.p_handle / 2);\n\n                    c.shad_single[0].style.display = \"block\";\n                    c.shad_single[0].style.left = from_min + \"%\";\n                    c.shad_single[0].style.width = from_max + \"%\";\n                } else {\n                    c.shad_single[0].style.display = \"none\";\n                }\n            } else {\n                if (o.from_shadow && (is_from_min || is_from_max)) {\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n                    from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\n                    from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\n                    from_min = from_min + (this.coords.p_handle / 2);\n\n                    c.shad_from[0].style.display = \"block\";\n                    c.shad_from[0].style.left = from_min + \"%\";\n                    c.shad_from[0].style.width = from_max + \"%\";\n                } else {\n                    c.shad_from[0].style.display = \"none\";\n                }\n\n                if (o.to_shadow && (is_to_min || is_to_max)) {\n                    to_min = this.convertToPercent(is_to_min ? o.to_min : o.min);\n                    to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min;\n                    to_min = this.toFixed(to_min - (this.coords.p_handle / 100 * to_min));\n                    to_max = this.toFixed(to_max - (this.coords.p_handle / 100 * to_max));\n                    to_min = to_min + (this.coords.p_handle / 2);\n\n                    c.shad_to[0].style.display = \"block\";\n                    c.shad_to[0].style.left = to_min + \"%\";\n                    c.shad_to[0].style.width = to_max + \"%\";\n                } else {\n                    c.shad_to[0].style.display = \"none\";\n                }\n            }\n        },\n\n\n\n        /**\n         * Write values to input element\n         */\n        writeToInput: function () {\n            if (this.options.type === \"single\") {\n                if (this.options.values.length) {\n                    this.$cache.input.prop(\"value\", this.result.from_value);\n                } else {\n                    this.$cache.input.prop(\"value\", this.result.from);\n                }\n                this.$cache.input.data(\"from\", this.result.from);\n            } else {\n                if (this.options.values.length) {\n                    this.$cache.input.prop(\"value\", this.result.from_value + this.options.input_values_separator + this.result.to_value);\n                } else {\n                    this.$cache.input.prop(\"value\", this.result.from + this.options.input_values_separator + this.result.to);\n                }\n                this.$cache.input.data(\"from\", this.result.from);\n                this.$cache.input.data(\"to\", this.result.to);\n            }\n        },\n\n\n\n        // =============================================================================================================\n        // Callbacks\n\n        callOnStart: function () {\n            this.writeToInput();\n\n            if (this.options.onStart && typeof this.options.onStart === \"function\") {\n                if (this.options.scope) {\n                    this.options.onStart.call(this.options.scope, this.result);\n                } else {\n                    this.options.onStart(this.result);\n                }\n            }\n        },\n        callOnChange: function () {\n            this.writeToInput();\n\n            if (this.options.onChange && typeof this.options.onChange === \"function\") {\n                if (this.options.scope) {\n                    this.options.onChange.call(this.options.scope, this.result);\n                } else {\n                    this.options.onChange(this.result);\n                }\n            }\n        },\n        callOnFinish: function () {\n            this.writeToInput();\n\n            if (this.options.onFinish && typeof this.options.onFinish === \"function\") {\n                if (this.options.scope) {\n                    this.options.onFinish.call(this.options.scope, this.result);\n                } else {\n                    this.options.onFinish(this.result);\n                }\n            }\n        },\n        callOnUpdate: function () {\n            this.writeToInput();\n\n            if (this.options.onUpdate && typeof this.options.onUpdate === \"function\") {\n                if (this.options.scope) {\n                    this.options.onUpdate.call(this.options.scope, this.result);\n                } else {\n                    this.options.onUpdate(this.result);\n                }\n            }\n        },\n\n\n\n\n        // =============================================================================================================\n        // Service methods\n\n        toggleInput: function () {\n            this.$cache.input.toggleClass(\"irs-hidden-input\");\n\n            if (this.has_tab_index) {\n                this.$cache.input.prop(\"tabindex\", -1);\n            } else {\n                this.$cache.input.removeProp(\"tabindex\");\n            }\n\n            this.has_tab_index = !this.has_tab_index;\n        },\n\n        /**\n         * Convert real value to percent\n         *\n         * @param value {Number} X in real\n         * @param no_min {boolean=} don't use min value\n         * @returns {Number} X in percent\n         */\n        convertToPercent: function (value, no_min) {\n            var diapason = this.options.max - this.options.min,\n                one_percent = diapason / 100,\n                val, percent;\n\n            if (!diapason) {\n                this.no_diapason = true;\n                return 0;\n            }\n\n            if (no_min) {\n                val = value;\n            } else {\n                val = value - this.options.min;\n            }\n\n            percent = val / one_percent;\n\n            return this.toFixed(percent);\n        },\n\n        /**\n         * Convert percent to real values\n         *\n         * @param percent {Number} X in percent\n         * @returns {Number} X in real\n         */\n        convertToValue: function (percent) {\n            var min = this.options.min,\n                max = this.options.max,\n                min_decimals = min.toString().split(\".\")[1],\n                max_decimals = max.toString().split(\".\")[1],\n                min_length, max_length,\n                avg_decimals = 0,\n                abs = 0;\n\n            if (percent === 0) {\n                return this.options.min;\n            }\n            if (percent === 100) {\n                return this.options.max;\n            }\n\n\n            if (min_decimals) {\n                min_length = min_decimals.length;\n                avg_decimals = min_length;\n            }\n            if (max_decimals) {\n                max_length = max_decimals.length;\n                avg_decimals = max_length;\n            }\n            if (min_length && max_length) {\n                avg_decimals = (min_length >= max_length) ? min_length : max_length;\n            }\n\n            if (min < 0) {\n                abs = Math.abs(min);\n                min = +(min + abs).toFixed(avg_decimals);\n                max = +(max + abs).toFixed(avg_decimals);\n            }\n\n            var number = ((max - min) / 100 * percent) + min,\n                string = this.options.step.toString().split(\".\")[1],\n                result;\n\n            if (string) {\n                number = +number.toFixed(string.length);\n            } else {\n                number = number / this.options.step;\n                number = number * this.options.step;\n\n                number = +number.toFixed(0);\n            }\n\n            if (abs) {\n                number -= abs;\n            }\n\n            if (string) {\n                result = +number.toFixed(string.length);\n            } else {\n                result = this.toFixed(number);\n            }\n\n            if (result < this.options.min) {\n                result = this.options.min;\n            } else if (result > this.options.max) {\n                result = this.options.max;\n            }\n\n            return result;\n        },\n\n        /**\n         * Round percent value with step\n         *\n         * @param percent {Number}\n         * @returns percent {Number} rounded\n         */\n        calcWithStep: function (percent) {\n            var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step;\n\n            if (rounded > 100) {\n                rounded = 100;\n            }\n            if (percent === 100) {\n                rounded = 100;\n            }\n\n            return this.toFixed(rounded);\n        },\n\n        checkMinInterval: function (p_current, p_next, type) {\n            var o = this.options,\n                current,\n                next;\n\n            if (!o.min_interval) {\n                return p_current;\n            }\n\n            current = this.convertToValue(p_current);\n            next = this.convertToValue(p_next);\n\n            if (type === \"from\") {\n\n                if (next - current < o.min_interval) {\n                    current = next - o.min_interval;\n                }\n\n            } else {\n\n                if (current - next < o.min_interval) {\n                    current = next + o.min_interval;\n                }\n\n            }\n\n            return this.convertToPercent(current);\n        },\n\n        checkMaxInterval: function (p_current, p_next, type) {\n            var o = this.options,\n                current,\n                next;\n\n            if (!o.max_interval) {\n                return p_current;\n            }\n\n            current = this.convertToValue(p_current);\n            next = this.convertToValue(p_next);\n\n            if (type === \"from\") {\n\n                if (next - current > o.max_interval) {\n                    current = next - o.max_interval;\n                }\n\n            } else {\n\n                if (current - next > o.max_interval) {\n                    current = next + o.max_interval;\n                }\n\n            }\n\n            return this.convertToPercent(current);\n        },\n\n        checkDiapason: function (p_num, min, max) {\n            var num = this.convertToValue(p_num),\n                o = this.options;\n\n            if (typeof min !== \"number\") {\n                min = o.min;\n            }\n\n            if (typeof max !== \"number\") {\n                max = o.max;\n            }\n\n            if (num < min) {\n                num = min;\n            }\n\n            if (num > max) {\n                num = max;\n            }\n\n            return this.convertToPercent(num);\n        },\n\n        toFixed: function (num) {\n            num = num.toFixed(20);\n            return +num;\n        },\n\n        _prettify: function (num) {\n            if (!this.options.prettify_enabled) {\n                return num;\n            }\n\n            if (this.options.prettify && typeof this.options.prettify === \"function\") {\n                return this.options.prettify(num);\n            } else {\n                return this.prettify(num);\n            }\n        },\n\n        prettify: function (num) {\n            var n = num.toString();\n            return n.replace(/(\\d{1,3}(?=(?:\\d\\d\\d)+(?!\\d)))/g, \"$1\" + this.options.prettify_separator);\n        },\n\n        checkEdges: function (left, width) {\n            if (!this.options.force_edges) {\n                return this.toFixed(left);\n            }\n\n            if (left < 0) {\n                left = 0;\n            } else if (left > 100 - width) {\n                left = 100 - width;\n            }\n\n            return this.toFixed(left);\n        },\n\n        validate: function () {\n            var o = this.options,\n                r = this.result,\n                v = o.values,\n                vl = v.length,\n                value,\n                i;\n\n            if (typeof o.min === \"string\") o.min = +o.min;\n            if (typeof o.max === \"string\") o.max = +o.max;\n            if (typeof o.from === \"string\") o.from = +o.from;\n            if (typeof o.to === \"string\") o.to = +o.to;\n            if (typeof o.step === \"string\") o.step = +o.step;\n\n            if (typeof o.from_min === \"string\") o.from_min = +o.from_min;\n            if (typeof o.from_max === \"string\") o.from_max = +o.from_max;\n            if (typeof o.to_min === \"string\") o.to_min = +o.to_min;\n            if (typeof o.to_max === \"string\") o.to_max = +o.to_max;\n\n            if (typeof o.grid_num === \"string\") o.grid_num = +o.grid_num;\n\n            if (o.max < o.min) {\n                o.max = o.min;\n            }\n\n            if (vl) {\n                o.p_values = [];\n                o.min = 0;\n                o.max = vl - 1;\n                o.step = 1;\n                o.grid_num = o.max;\n                o.grid_snap = true;\n\n                for (i = 0; i < vl; i++) {\n                    value = +v[i];\n\n                    if (!isNaN(value)) {\n                        v[i] = value;\n                        value = this._prettify(value);\n                    } else {\n                        value = v[i];\n                    }\n\n                    o.p_values.push(value);\n                }\n            }\n\n            if (typeof o.from !== \"number\" || isNaN(o.from)) {\n                o.from = o.min;\n            }\n\n            if (typeof o.to !== \"number\" || isNaN(o.to)) {\n                o.to = o.max;\n            }\n\n            if (o.type === \"single\") {\n\n                if (o.from < o.min) o.from = o.min;\n                if (o.from > o.max) o.from = o.max;\n\n            } else {\n\n                if (o.from < o.min) o.from = o.min;\n                if (o.from > o.max) o.from = o.max;\n\n                if (o.to < o.min) o.to = o.min;\n                if (o.to > o.max) o.to = o.max;\n\n                if (this.update_check.from) {\n\n                    if (this.update_check.from !== o.from) {\n                        if (o.from > o.to) o.from = o.to;\n                    }\n                    if (this.update_check.to !== o.to) {\n                        if (o.to < o.from) o.to = o.from;\n                    }\n\n                }\n\n                if (o.from > o.to) o.from = o.to;\n                if (o.to < o.from) o.to = o.from;\n\n            }\n\n            if (typeof o.step !== \"number\" || isNaN(o.step) || !o.step || o.step < 0) {\n                o.step = 1;\n            }\n\n            if (typeof o.from_min === \"number\" && o.from < o.from_min) {\n                o.from = o.from_min;\n            }\n\n            if (typeof o.from_max === \"number\" && o.from > o.from_max) {\n                o.from = o.from_max;\n            }\n\n            if (typeof o.to_min === \"number\" && o.to < o.to_min) {\n                o.to = o.to_min;\n            }\n\n            if (typeof o.to_max === \"number\" && o.from > o.to_max) {\n                o.to = o.to_max;\n            }\n\n            if (r) {\n                if (r.min !== o.min) {\n                    r.min = o.min;\n                }\n\n                if (r.max !== o.max) {\n                    r.max = o.max;\n                }\n\n                if (r.from < r.min || r.from > r.max) {\n                    r.from = o.from;\n                }\n\n                if (r.to < r.min || r.to > r.max) {\n                    r.to = o.to;\n                }\n            }\n\n            if (typeof o.min_interval !== \"number\" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) {\n                o.min_interval = 0;\n            }\n\n            if (typeof o.max_interval !== \"number\" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) {\n                o.max_interval = 0;\n            }\n\n            if (o.min_interval && o.min_interval > o.max - o.min) {\n                o.min_interval = o.max - o.min;\n            }\n\n            if (o.max_interval && o.max_interval > o.max - o.min) {\n                o.max_interval = o.max - o.min;\n            }\n        },\n\n        decorate: function (num, original) {\n            var decorated = \"\",\n                o = this.options;\n\n            if (o.prefix) {\n                decorated += o.prefix;\n            }\n\n            decorated += num;\n\n            if (o.max_postfix) {\n                if (o.values.length && num === o.p_values[o.max]) {\n                    decorated += o.max_postfix;\n                    if (o.postfix) {\n                        decorated += \" \";\n                    }\n                } else if (original === o.max) {\n                    decorated += o.max_postfix;\n                    if (o.postfix) {\n                        decorated += \" \";\n                    }\n                }\n            }\n\n            if (o.postfix) {\n                decorated += o.postfix;\n            }\n\n            return decorated;\n        },\n\n        updateFrom: function () {\n            this.result.from = this.options.from;\n            this.result.from_percent = this.convertToPercent(this.result.from);\n            this.result.from_pretty = this._prettify(this.result.from);\n            if (this.options.values) {\n                this.result.from_value = this.options.values[this.result.from];\n            }\n        },\n\n        updateTo: function () {\n            this.result.to = this.options.to;\n            this.result.to_percent = this.convertToPercent(this.result.to);\n            this.result.to_pretty = this._prettify(this.result.to);\n            if (this.options.values) {\n                this.result.to_value = this.options.values[this.result.to];\n            }\n        },\n\n        updateResult: function () {\n            this.result.min = this.options.min;\n            this.result.max = this.options.max;\n            this.updateFrom();\n            this.updateTo();\n        },\n\n\n        // =============================================================================================================\n        // Grid\n\n        appendGrid: function () {\n            if (!this.options.grid) {\n                return;\n            }\n\n            var o = this.options,\n                i, z,\n\n                total = o.max - o.min,\n                big_num = o.grid_num,\n                big_p = 0,\n                big_w = 0,\n\n                small_max = 4,\n                local_small_max,\n                small_p,\n                small_w = 0,\n\n                result,\n                html = '';\n\n\n\n            this.calcGridMargin();\n\n            if (o.grid_snap) {\n                big_num = total / o.step;\n            }\n\n            if (big_num > 50) big_num = 50;\n            big_p = this.toFixed(100 / big_num);\n\n            if (big_num > 4) {\n                small_max = 3;\n            }\n            if (big_num > 7) {\n                small_max = 2;\n            }\n            if (big_num > 14) {\n                small_max = 1;\n            }\n            if (big_num > 28) {\n                small_max = 0;\n            }\n\n            for (i = 0; i < big_num + 1; i++) {\n                local_small_max = small_max;\n\n                big_w = this.toFixed(big_p * i);\n\n                if (big_w > 100) {\n                    big_w = 100;\n                }\n                this.coords.big[i] = big_w;\n\n                small_p = (big_w - (big_p * (i - 1))) / (local_small_max + 1);\n\n                for (z = 1; z <= local_small_max; z++) {\n                    if (big_w === 0) {\n                        break;\n                    }\n\n                    small_w = this.toFixed(big_w - (small_p * z));\n\n                    html += '<span class=\"irs-grid-pol small\" style=\"left: ' + small_w + '%\"></span>';\n                }\n\n                html += '<span class=\"irs-grid-pol\" style=\"left: ' + big_w + '%\"></span>';\n\n                result = this.convertToValue(big_w);\n                if (o.values.length) {\n                    result = o.p_values[result];\n                } else {\n                    result = this._prettify(result);\n                }\n\n                html += '<span class=\"irs-grid-text js-grid-text-' + i + '\" style=\"left: ' + big_w + '%\">' + result + '</span>';\n            }\n            this.coords.big_num = Math.ceil(big_num + 1);\n\n\n\n            this.$cache.cont.addClass(\"irs-with-grid\");\n            this.$cache.grid.html(html);\n            this.cacheGridLabels();\n        },\n\n        cacheGridLabels: function () {\n            var $label, i,\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i++) {\n                $label = this.$cache.grid.find(\".js-grid-text-\" + i);\n                this.$cache.grid_labels.push($label);\n            }\n\n            this.calcGridLabels();\n        },\n\n        calcGridLabels: function () {\n            var i, label, start = [], finish = [],\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i++) {\n                this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false);\n                this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100);\n                this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2);\n\n                start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]);\n                finish[i] = this.toFixed(start[i] + this.coords.big_p[i]);\n            }\n\n            if (this.options.force_edges) {\n                if (start[0] < -this.coords.grid_gap) {\n                    start[0] = -this.coords.grid_gap;\n                    finish[0] = this.toFixed(start[0] + this.coords.big_p[0]);\n\n                    this.coords.big_x[0] = this.coords.grid_gap;\n                }\n\n                if (finish[num - 1] > 100 + this.coords.grid_gap) {\n                    finish[num - 1] = 100 + this.coords.grid_gap;\n                    start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]);\n\n                    this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap);\n                }\n            }\n\n            this.calcGridCollision(2, start, finish);\n            this.calcGridCollision(4, start, finish);\n\n            for (i = 0; i < num; i++) {\n                label = this.$cache.grid_labels[i][0];\n\n                if (this.coords.big_x[i] !== Number.POSITIVE_INFINITY) {\n                    label.style.marginLeft = -this.coords.big_x[i] + \"%\";\n                }\n            }\n        },\n\n        // Collisions Calc Beta\n        // TODO: Refactor then have plenty of time\n        calcGridCollision: function (step, start, finish) {\n            var i, next_i, label,\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i += step) {\n                next_i = i + (step / 2);\n                if (next_i >= num) {\n                    break;\n                }\n\n                label = this.$cache.grid_labels[next_i][0];\n\n                if (finish[i] <= start[next_i]) {\n                    label.style.visibility = \"visible\";\n                } else {\n                    label.style.visibility = \"hidden\";\n                }\n            }\n        },\n\n        calcGridMargin: function () {\n            if (!this.options.grid_margin) {\n                return;\n            }\n\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n            } else {\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n            }\n            this.coords.p_handle = this.toFixed(this.coords.w_handle  / this.coords.w_rs * 100);\n            this.coords.grid_gap = this.toFixed((this.coords.p_handle / 2) - 0.1);\n\n            this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + \"%\";\n            this.$cache.grid[0].style.left = this.coords.grid_gap + \"%\";\n        },\n\n\n\n        // =============================================================================================================\n        // Public methods\n\n        update: function (options) {\n            if (!this.input) {\n                return;\n            }\n\n            this.is_update = true;\n\n            this.options.from = this.result.from;\n            this.options.to = this.result.to;\n            this.update_check.from = this.result.from;\n            this.update_check.to = this.result.to;\n\n            this.options = $.extend(this.options, options);\n            this.validate();\n            this.updateResult(options);\n\n            this.toggleInput();\n            this.remove();\n            this.init(true);\n        },\n\n        reset: function () {\n            if (!this.input) {\n                return;\n            }\n\n            this.updateResult();\n            this.update();\n        },\n\n        destroy: function () {\n            if (!this.input) {\n                return;\n            }\n\n            this.toggleInput();\n            this.$cache.input.prop(\"readonly\", false);\n            $.data(this.input, \"ionRangeSlider\", null);\n\n            this.remove();\n            this.input = null;\n            this.options = null;\n        }\n    };\n\n    $.fn.ionRangeSlider = function (options) {\n        return this.each(function() {\n            if (!$.data(this, \"ionRangeSlider\")) {\n                $.data(this, \"ionRangeSlider\", new IonRangeSlider(this, options, plugin_count++));\n            }\n        });\n    };\n\n\n\n    // =================================================================================================================\n    // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n    // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n    // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n    // MIT license\n\n    (function() {\n        var lastTime = 0;\n        var vendors = ['ms', 'moz', 'webkit', 'o'];\n        for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n            window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n            window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']\n                || window[vendors[x]+'CancelRequestAnimationFrame'];\n        }\n\n        if (!window.requestAnimationFrame)\n            window.requestAnimationFrame = function(callback, element) {\n                var currTime = new Date().getTime();\n                var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n                var id = window.setTimeout(function() { callback(currTime + timeToCall); },\n                    timeToCall);\n                lastTime = currTime + timeToCall;\n                return id;\n            };\n\n        if (!window.cancelAnimationFrame)\n            window.cancelAnimationFrame = function(id) {\n                clearTimeout(id);\n            };\n    }());\n\n}));\n","var card=function(r){var e={};function t(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return r[a].call(n.exports,n,n.exports,t),n.l=!0,n.exports}return t.m=r,t.c=e,t.d=function(r,e,a){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:a})},t.r=function(r){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(r,\"__esModule\",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&\"object\"==typeof r&&r&&r.__esModule)return r;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:r}),2&e&&\"string\"!=typeof r)for(var n in r)t.d(a,n,function(e){return r[e]}.bind(null,n));return a},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,\"a\",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p=\"\",t(t.s=5)}([function(r,e,t){\"use strict\";var a=t(4),n=t.n(a)()((function(r){return r[1]}));n.push([r.i,'.jp-card.jp-card-safari.jp-card-identified .jp-card-front:before,.jp-card.jp-card-safari.jp-card-identified .jp-card-back:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}.jp-card.jp-card-ie-10.jp-card-flipped,.jp-card.jp-card-ie-11.jp-card-flipped{-webkit-transform:0deg;-moz-transform:0deg;-ms-transform:0deg;-o-transform:0deg;transform:0deg}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-front,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-front{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-ms-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back:after{left:18%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-cvc,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-cvc{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg);left:5%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny{left:84%}.jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny:after,.jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny:after{left:-480%;-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card.jp-card-ie-10.jp-card-amex .jp-card-back,.jp-card.jp-card-ie-11.jp-card-amex .jp-card-back{display:none}.jp-card-logo{height:36px;width:60px;font-style:italic}.jp-card-logo,.jp-card-logo:before,.jp-card-logo:after{box-sizing:border-box}.jp-card-logo.jp-card-amex{text-transform:uppercase;font-size:4px;font-weight:bold;color:white;background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);background-image:repeating-radial-gradient(circle at center, #fff 1px, #999 2px);border:1px solid #EEE}.jp-card-logo.jp-card-amex:before,.jp-card-logo.jp-card-amex:after{width:28px;display:block;position:absolute;left:16px}.jp-card-logo.jp-card-amex:before{height:28px;content:\"american\";top:3px;text-align:left;padding-left:2px;padding-top:11px;background:#267AC3}.jp-card-logo.jp-card-amex:after{content:\"express\";bottom:11px;text-align:right;padding-right:2px}.jp-card.jp-card-amex.jp-card-flipped{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:before,.jp-card.jp-card-amex.jp-card-identified .jp-card-back:before{background-color:#108168}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-logo.jp-card-amex{opacity:1}.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-cvc{visibility:visible}.jp-card.jp-card-amex.jp-card-identified .jp-card-front:after{opacity:1}.jp-card-logo.jp-card-discover{background:#f60;color:#111;text-transform:uppercase;font-style:normal;font-weight:bold;font-size:10px;text-align:center;overflow:hidden;z-index:1;padding-top:9px;letter-spacing:.03em;border:1px solid #EEE}.jp-card-logo.jp-card-discover:before,.jp-card-logo.jp-card-discover:after{content:\" \";display:block;position:absolute}.jp-card-logo.jp-card-discover:before{background:white;width:200px;height:200px;border-radius:200px;bottom:-5%;right:-80%;z-index:-1}.jp-card-logo.jp-card-discover:after{width:8px;height:8px;border-radius:4px;top:10px;left:27px;background-color:#f60;background-image:-webkit-radial-gradient(#f60,#fff);background-image:radial-gradient(  #f60,#fff);content:\"network\";font-size:4px;line-height:24px;text-indent:-7px}.jp-card .jp-card-front .jp-card-logo.jp-card-discover{right:12%;top:18%}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:before,.jp-card.jp-card-discover.jp-card-identified .jp-card-back:before{background-color:#86B8CF}.jp-card.jp-card-discover.jp-card-identified .jp-card-logo.jp-card-discover{opacity:1}.jp-card.jp-card-discover.jp-card-identified .jp-card-front:after{-webkit-transition:400ms;-moz-transition:400ms;transition:400ms;content:\" \";display:block;background-color:#f60;background-image:-webkit-linear-gradient(#f60,#ffa366,#f60);background-image:linear-gradient(#f60,#ffa366,#f60);height:50px;width:50px;border-radius:25px;position:absolute;left:100%;top:15%;margin-left:-25px;box-shadow:inset 1px 1px 3px 1px rgba(0,0,0,0.5)}.jp-card-logo.jp-card-unionpay{width:60px;display:block;height:40px;background:#e21836;-webkit-transform:skew(-15deg);-moz-transform:skew(20deg);-o-transform:skew(20deg);border-radius:5px;font-size:10px;z-index:1;line-height:33px;color:#fff;text-align:center;font-family:\"Sans-serif\", \"Microsoft Yahei\", \"\\\\5FAE\\\\8F6F\\\\96C5\\\\9ED1\", \"Hiragino Sans\", \"Gulim\", \"\\\\5B8B\\\\4F53\";font-weight:bold}.jp-card-logo.jp-card-unionpay:after,.jp-card-logo.jp-card-unionpay:before{display:block;margin:0 auto;position:absolute;height:40px;top:0;z-index:-1}.jp-card-logo.jp-card-unionpay:before{content:\" \";width:28px;background:#00447c;left:14px;border-top-left-radius:5px;border-bottom-left-radius:5px}.jp-card-logo.jp-card-unionpay:after{content:\"银联\";width:26px;background:#007b84;left:34px;border-radius:5px;font-size:10px;line-height:54px;text-indent:-17px}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-back:before,.jp-card.jp-card-unionpay.jp-card-identified .jp-card-front:before{background-color:#987c00}.jp-card.jp-card-unionpay.jp-card-identified .jp-card-logo.jp-card-unionpay{opacity:1}.jp-card-logo.jp-card-visa{text-transform:uppercase;color:white;text-align:center;font-weight:bold;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-visa:before,.jp-card-logo.jp-card-visa:after{content:\" \";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visa:before{position:absolute;left:-4px;width:0;height:0;border-style:solid;border-width:0 12px 6px 0;border-color:transparent #ffffff transparent transparent}.jp-card.jp-card-visa.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visa.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visa.jp-card-identified .jp-card-logo.jp-card-visa{opacity:1;box-shadow:none}.jp-card-logo.jp-card-visaelectron{background:white;text-transform:uppercase;color:#1A1876;text-align:center;font-weight:bold;font-size:15px;line-height:18px}.jp-card-logo.jp-card-visaelectron:before,.jp-card-logo.jp-card-visaelectron:after{content:\" \";display:block;width:100%;height:25%}.jp-card-logo.jp-card-visaelectron:before{background:#1A1876}.jp-card-logo.jp-card-visaelectron:after{background:#E79800}.jp-card-logo.jp-card-visaelectron .elec{float:right;font-family:arial;font-size:9px;margin-right:1px;margin-top:-5px;text-transform:none}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-front:before,.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-back:before{background-color:#191278}.jp-card.jp-card-visaelectron.jp-card-identified .jp-card-logo.jp-card-visaelectron{opacity:1}.jp-card-logo.jp-card-mastercard{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:9px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-mastercard:before,.jp-card-logo.jp-card-mastercard:after{content:\" \";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-mastercard:before{left:0;background:#EB001B;z-index:-1;opacity:0.9}.jp-card-logo.jp-card-mastercard:after{right:0;background:#FF5F00;z-index:-2}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front .jp-card-logo.jp-card-mastercard,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back .jp-card-logo.jp-card-mastercard{box-shadow:none}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-mastercard.jp-card-identified .jp-card-back:before{background-color:#0061A8}.jp-card.jp-card-mastercard.jp-card-identified .jp-card-logo.jp-card-mastercard{opacity:1}.jp-card-logo.jp-card-maestro{color:white;font-style:normal;text-transform:lowercase;font-weight:bold;text-align:center;font-size:14px;line-height:84px;z-index:1;text-shadow:1px 1px rgba(0,0,0,0.6)}.jp-card-logo.jp-card-maestro:before,.jp-card-logo.jp-card-maestro:after{content:\" \";display:block;width:36px;top:0;position:absolute;height:36px;border-radius:18px}.jp-card-logo.jp-card-maestro:before{left:0;background:#EB001B;z-index:-2}.jp-card-logo.jp-card-maestro:after{right:0;background:#00A2E5;z-index:-1;opacity:0.8}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front .jp-card-logo.jp-card-maestro,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back .jp-card-logo.jp-card-maestro{box-shadow:none}.jp-card.jp-card-maestro.jp-card-identified .jp-card-front:before,.jp-card.jp-card-maestro.jp-card-identified .jp-card-back:before{background-color:#0B2C5F}.jp-card.jp-card-maestro.jp-card-identified .jp-card-logo.jp-card-maestro{opacity:1}.jp-card-logo.jp-card-dankort{width:60px;height:36px;padding:3px;border-radius:8px;border:#000 1px solid;background-color:#fff}.jp-card-logo.jp-card-dankort .dk{position:relative;width:100%;height:100%;overflow:hidden}.jp-card-logo.jp-card-dankort .dk:before{background-color:#ED1C24;content:\\'\\';position:absolute;width:100%;height:100%;display:block;border-radius:6px}.jp-card-logo.jp-card-dankort .dk:after{content:\\'\\';position:absolute;top:50%;margin-top:-7.7px;right:0;width:0;height:0;border-style:solid;border-width:7px 7px 10px 0;border-color:transparent #ED1C24 transparent transparent;z-index:1}.jp-card-logo.jp-card-dankort .d,.jp-card-logo.jp-card-dankort .k{position:absolute;top:50%;width:50%;display:block;height:15.4px;margin-top:-7.7px;background:white}.jp-card-logo.jp-card-dankort .d{left:0;border-radius:0 8px 10px 0}.jp-card-logo.jp-card-dankort .d:before{content:\\'\\';position:absolute;top:50%;left:50%;display:block;background:#ED1C24;border-radius:2px 4px 6px 0px;height:5px;width:7px;margin:-3px 0 0 -4px}.jp-card-logo.jp-card-dankort .k{right:0}.jp-card-logo.jp-card-dankort .k:before,.jp-card-logo.jp-card-dankort .k:after{content:\\'\\';position:absolute;right:50%;width:0;height:0;border-style:solid;margin-right:-1px}.jp-card-logo.jp-card-dankort .k:before{top:0;border-width:8px 5px 0 0;border-color:#ED1C24 transparent transparent transparent}.jp-card-logo.jp-card-dankort .k:after{bottom:0;border-width:0 5px 8px 0;border-color:transparent transparent #ED1C24 transparent}.jp-card.jp-card-dankort.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dankort.jp-card-identified .jp-card-back:before{background-color:#0055C7}.jp-card.jp-card-dankort.jp-card-identified .jp-card-logo.jp-card-dankort{opacity:1}.jp-card-logo.jp-card-elo{height:50px;width:50px;border-radius:100%;background:black;color:white;text-align:center;text-transform:lowercase;font-size:21px;font-style:normal;letter-spacing:1px;font-weight:bold;padding-top:13px}.jp-card-logo.jp-card-elo .e,.jp-card-logo.jp-card-elo .l,.jp-card-logo.jp-card-elo .o{display:inline-block;position:relative}.jp-card-logo.jp-card-elo .e{-webkit-transform:rotate(-15deg);-moz-transform:rotate(-15deg);-ms-transform:rotate(-15deg);-o-transform:rotate(-15deg);transform:rotate(-15deg)}.jp-card-logo.jp-card-elo .o{position:relative;display:inline-block;width:12px;height:12px;right:0;top:7px;border-radius:100%;background-image:-webkit-linear-gradient( #ff0 50%,red 50%);background-image:linear-gradient( #ff0 50%,red 50%);-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);text-indent:-9999px}.jp-card-logo.jp-card-elo .o:before{content:\"\";position:absolute;width:49%;height:49%;background:black;border-radius:100%;text-indent:-99999px;top:25%;left:25%}.jp-card.jp-card-elo.jp-card-identified .jp-card-front:before,.jp-card.jp-card-elo.jp-card-identified .jp-card-back:before{background-color:#6F6969}.jp-card.jp-card-elo.jp-card-identified .jp-card-logo.jp-card-elo{opacity:1}.jp-card-logo.jp-card-jcb{border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px;background-color:white;font-style:normal;color:white;width:50px;padding:2px 0 0 2px}.jp-card-logo.jp-card-jcb>div{width:15px;margin-right:1px;display:inline-block;text-align:center;text-shadow:1px 1px rgba(0,0,0,0.6);border-radius:5px 0px 5px 0px;-moz-border-radius:5px 0px 5px 0px;-webkit-border-radius:5px 0px 5px 0px}.jp-card-logo.jp-card-jcb>div:before,.jp-card-logo.jp-card-jcb>div:after{content:\" \";display:block;height:8px}.jp-card-logo.jp-card-jcb>div.j{background-color:#000063;background-image:-webkit-linear-gradient(left, #000063,#008cff);background-image:linear-gradient(to right,#000063,#008cff)}.jp-card-logo.jp-card-jcb>div.c{background-color:#630000;background-image:-webkit-linear-gradient(left, #630000,#ff008d);background-image:linear-gradient(to right,#630000,#ff008d)}.jp-card-logo.jp-card-jcb>div.b{background-color:#006300;background-image:-webkit-linear-gradient(left, #006300,lime);background-image:linear-gradient(to right,#006300,lime)}.jp-card.jp-card-jcb.jp-card-identified .jp-card-front:before,.jp-card.jp-card-jcb.jp-card-identified .jp-card-back:before{background-color:#CB8000}.jp-card.jp-card-jcb.jp-card-identified .jp-card-logo.jp-card-jcb{opacity:1;box-shadow:none}.jp-card-logo.jp-card-dinersclub{font-family:serif;height:40px;width:100px;color:white;font-size:17px;font-style:normal;letter-spacing:1px}.jp-card-logo.jp-card-dinersclub::before,.jp-card-logo.jp-card-dinersclub::after{display:block;position:relative}.jp-card-logo.jp-card-dinersclub::before{content:\\'Diners Club\\'}.jp-card-logo.jp-card-dinersclub::after{content:\\'International\\';text-transform:uppercase;font-size:0.6em}.jp-card.jp-card-dinersclub .jp-card-front .jp-card-logo{box-shadow:none !important}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-front:before,.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-back:before{background-color:#999}.jp-card.jp-card-dinersclub.jp-card-identified .jp-card-logo.jp-card-dinersclub{opacity:1}.jp-card-logo.jp-card-hipercard{height:20px;width:100px;color:white;font-size:21px;font-style:italic;font-weight:bold}.jp-card-logo.jp-card-hipercard::before,.jp-card-logo.jp-card-hipercard::after{display:block;position:relative}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-front:before,.jp-card.jp-card-hipercard.jp-card-identified .jp-card-back:before{background-color:#770304}.jp-card.jp-card-hipercard.jp-card-identified .jp-card-logo.jp-card-hipercard{opacity:1;box-shadow:none}.jp-card-logo.jp-card-troy{text-transform:lowercase;color:#fff;text-align:center;font-weight:700;font-size:24px;line-height:18px;margin-top:5px}.jp-card-logo.jp-card-troy:before,.jp-card-logo.jp-card-troy:after{content:\\\\\"\\\\\";display:block;width:26%;height:6%;background:#22b8c3;right:32%;top:24%;position:absolute;transform:rotate(105deg)}.jp-card.jp-card-troy.jp-card-identified .jp-card-front:before,.jp-card.jp-card-troy.jp-card-identified .jp-card-back:before{background-color:#01adba}.jp-card.jp-card-troy.jp-card-identified .jp-card-logo.jp-card-troy{opacity:1;box-shadow:none}.jp-card-container{-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px;width:350px;max-width:100%;height:200px;margin:auto;z-index:1;position:relative}.jp-card{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;line-height:1;position:relative;width:100%;height:100%;min-width:315px;border-radius:10px;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear}.jp-card>*,.jp-card>*:after,.jp-card>*:before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:inherit}.jp-card.jp-card-flipped{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back,.jp-card .jp-card-front{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:all 400ms linear;-moz-transition:all 400ms linear;transition:all 400ms linear;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden;border-radius:10px;background:#ddd}.jp-card .jp-card-back:before,.jp-card .jp-card-front:before{content:\" \";display:block;position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;border-radius:10px;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease}.jp-card .jp-card-back:after,.jp-card .jp-card-front:after{content:\" \";display:block}.jp-card .jp-card-back .jp-card-display,.jp-card .jp-card-front .jp-card-display{color:#fff;font-weight:normal;opacity:0.5;-webkit-transition:opacity 400ms linear;-moz-transition:opacity 400ms linear;transition:opacity 400ms linear}.jp-card .jp-card-back .jp-card-display.jp-card-focused,.jp-card .jp-card-front .jp-card-display.jp-card-focused{opacity:1;font-weight:700}.jp-card .jp-card-back .jp-card-cvc,.jp-card .jp-card-front .jp-card-cvc{font-family:\"Bitstream Vera Sans Mono\",Consolas,Courier,monospace;font-size:14px}.jp-card .jp-card-back .jp-card-shiny,.jp-card .jp-card-front .jp-card-shiny{width:50px;height:35px;border-radius:5px;background:#ccc;position:relative}.jp-card .jp-card-back .jp-card-shiny:before,.jp-card .jp-card-front .jp-card-shiny:before{content:\" \";display:block;width:70%;height:60%;border-top-right-radius:5px;border-bottom-right-radius:5px;background:#d9d9d9;position:absolute;top:20%}.jp-card .jp-card-front .jp-card-logo{position:absolute;opacity:0;right:5%;top:8%;-webkit-transition:400ms;-moz-transition:400ms;transition:400ms}.jp-card .jp-card-front .jp-card-lower{width:80%;position:absolute;left:10%;bottom:30px}@media only screen and (max-width: 480px){.jp-card .jp-card-front .jp-card-lower{width:90%;left:5%}}.jp-card .jp-card-front .jp-card-lower .jp-card-cvc{visibility:hidden;float:right;position:relative;bottom:5px}.jp-card .jp-card-front .jp-card-lower .jp-card-number{font-family:\"Bitstream Vera Sans Mono\",Consolas,Courier,monospace;font-size:24px;clear:both;margin-bottom:30px}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry{font-family:\"Bitstream Vera Sans Mono\",Consolas,Courier,monospace;letter-spacing:0;position:relative;float:right;width:25%}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after,.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-weight:bold;font-size:7px;white-space:pre;display:block;opacity:0.5}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before{content:attr(data-before);margin-bottom:2px;font-size:7px;text-transform:uppercase}.jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after{position:absolute;content:attr(data-after);text-align:right;right:100%;margin-right:5px;margin-top:2px;bottom:0}.jp-card .jp-card-front .jp-card-lower .jp-card-name{text-transform:uppercase;font-family:\"Bitstream Vera Sans Mono\",Consolas,Courier,monospace;font-size:20px;max-height:45px;position:absolute;bottom:0;width:190px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:horizontal;overflow:hidden;text-overflow:ellipsis}.jp-card .jp-card-back{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-ms-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.jp-card .jp-card-back .jp-card-bar{background-color:#444;background-image:-webkit-linear-gradient(#444,#333);background-image:linear-gradient(#444,#333);width:100%;height:20%;position:absolute;top:10%}.jp-card .jp-card-back:after{content:\" \";display:block;background-color:#fff;background-image:-webkit-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff);width:80%;height:16%;position:absolute;top:40%;left:2%}.jp-card .jp-card-back .jp-card-cvc{position:absolute;top:40%;left:85%;-webkit-transition-delay:600ms;-moz-transition-delay:600ms;transition-delay:600ms}.jp-card .jp-card-back .jp-card-shiny{position:absolute;top:66%;left:2%}.jp-card .jp-card-back .jp-card-shiny:after{content:\"This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free. It comes with no warranty. For support issues, please visit: github.com/jessepollak/card.\";position:absolute;left:120%;top:5%;color:white;font-size:7px;width:230px;opacity:0.5}.jp-card.jp-card-identified{box-shadow:0 0 20px rgba(0,0,0,0.3)}.jp-card.jp-card-identified .jp-card-back,.jp-card.jp-card-identified .jp-card-front{background-color:#000;background-color:rgba(0,0,0,0.5)}.jp-card.jp-card-identified .jp-card-back:before,.jp-card.jp-card-identified .jp-card-front:before{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;transition:all 400ms ease;background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 30% 30%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 70% 70%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 90% 20%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-radial-gradient(circle at 15% 80%, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);opacity:1}.jp-card.jp-card-identified .jp-card-back .jp-card-logo,.jp-card.jp-card-identified .jp-card-front .jp-card-logo{box-shadow:0 0 0 2px rgba(255,255,255,0.3)}.jp-card.jp-card-identified.no-radial-gradient .jp-card-back:before,.jp-card.jp-card-identified.no-radial-gradient .jp-card-front:before{background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),-webkit-linear-gradient(-245deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%);background-image:repeating-linear-gradient(45deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.03) 4px),repeating-linear-gradient(90deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),repeating-linear-gradient(210deg, rgba(255,255,255,0) 1px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.04) 3px, rgba(255,255,255,0.05) 4px),linear-gradient(-25deg, rgba(255,255,255,0) 50%,rgba(255,255,255,0.2) 70%,rgba(255,255,255,0) 90%)}@media (max-width: 450px){.card-wrapper{max-width:80vw;width:100%;margin:20px auto;overflow-x:hidden}.card-wrapper>.jp-card-container{transform:scale(0.625);transform-origin:left center}}\\n',\"\"]),e.a=n},function(r,e){var t;t=function(){return this}();try{t=t||new Function(\"return this\")()}catch(r){\"object\"==typeof window&&(t=window)}r.exports=t},function(r,e){(function(){var e,t,a;(e=function(r){return e.isDOMElement(r)?r:document.querySelectorAll(r)}).isDOMElement=function(r){return r&&null!=r.nodeName},a=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,e.trim=function(r){return null===r?\"\":(r+\"\").replace(a,\"\")},t=/\\r/g,e.val=function(r,e){var a;return arguments.length>1?r.value=e:\"string\"==typeof(a=r.value)?a.replace(t,\"\"):null===a?\"\":a},e.preventDefault=function(r){if(\"function\"!=typeof r.preventDefault)return r.returnValue=!1,!1;r.preventDefault()},e.normalizeEvent=function(r){var t;return null==(r={which:null!=(t=r).which?t.which:void 0,target:t.target||t.srcElement,preventDefault:function(){return e.preventDefault(t)},originalEvent:t,data:t.data||t.detail}).which&&(r.which=null!=t.charCode?t.charCode:t.keyCode),r},e.on=function(r,t,a){var n,o,i,d,c,p,l,s;if(r.length)for(o=0,d=r.length;o<d;o++)n=r[o],e.on(n,t,a);else{if(!t.match(\" \"))return l=a,a=function(r){return r=e.normalizeEvent(r),l(r)},r.addEventListener?r.addEventListener(t,a,!1):r.attachEvent?(t=\"on\"+t,r.attachEvent(t,a)):void(r[\"on\"+t]=a);for(i=0,c=(s=t.split(\" \")).length;i<c;i++)p=s[i],e.on(r,p,a)}},e.addClass=function(r,t){var a;return r.length?function(){var n,o,i;for(i=[],n=0,o=r.length;n<o;n++)a=r[n],i.push(e.addClass(a,t));return i}():r.classList?r.classList.add(t):r.className+=\" \"+t},e.hasClass=function(r,t){var a,n,o,i;if(r.length){for(n=!0,o=0,i=r.length;o<i;o++)a=r[o],n=n&&e.hasClass(a,t);return n}return r.classList?r.classList.contains(t):new RegExp(\"(^| )\"+t+\"( |$)\",\"gi\").test(r.className)},e.removeClass=function(r,t){var a,n,o,i,d,c;if(r.length)return function(){var a,o,i;for(i=[],a=0,o=r.length;a<o;a++)n=r[a],i.push(e.removeClass(n,t));return i}();if(r.classList){for(c=[],o=0,i=(d=t.split(\" \")).length;o<i;o++)a=d[o],c.push(r.classList.remove(a));return c}return r.className=r.className.replace(new RegExp(\"(^|\\\\b)\"+t.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \")},e.toggleClass=function(r,t,a){var n;return r.length?function(){var o,i,d;for(d=[],o=0,i=r.length;o<i;o++)n=r[o],d.push(e.toggleClass(n,t,a));return d}():a?e.hasClass(r,t)?void 0:e.addClass(r,t):e.removeClass(r,t)},e.append=function(r,t){var a;return r.length?function(){var n,o,i;for(i=[],n=0,o=r.length;n<o;n++)a=r[n],i.push(e.append(a,t));return i}():r.insertAdjacentHTML(\"beforeend\",t)},e.find=function(r,e){return(r instanceof NodeList||r instanceof Array)&&(r=r[0]),r.querySelectorAll(e)},e.trigger=function(r,e,t){var a,n;try{n=new CustomEvent(e,{detail:t})}catch(a){a,(n=document.createEvent(\"CustomEvent\")).initCustomEvent?n.initCustomEvent(e,!0,!0,t):n.initEvent(e,!0,!0,t)}return r.dispatchEvent(n)},r.exports=e}).call(this)},function(r,e,t){\"use strict\";var a,n=function(){return void 0===a&&(a=Boolean(window&&document&&document.all&&!window.atob)),a},o=function(){var r={};return function(e){if(void 0===r[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(r){t=null}r[e]=t}return r[e]}}(),i=[];function d(r){for(var e=-1,t=0;t<i.length;t++)if(i[t].identifier===r){e=t;break}return e}function c(r,e){for(var t={},a=[],n=0;n<r.length;n++){var o=r[n],c=e.base?o[0]+e.base:o[0],p=t[c]||0,l=\"\".concat(c,\" \").concat(p);t[c]=p+1;var s=d(l),f={css:o[1],media:o[2],sourceMap:o[3]};-1!==s?(i[s].references++,i[s].updater(f)):i.push({identifier:l,updater:b(f,e),references:1}),a.push(l)}return a}function p(r){var e=document.createElement(\"style\"),a=r.attributes||{};if(void 0===a.nonce){var n=t.nc;n&&(a.nonce=n)}if(Object.keys(a).forEach((function(r){e.setAttribute(r,a[r])})),\"function\"==typeof r.insert)r.insert(e);else{var i=o(r.insert||\"head\");if(!i)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");i.appendChild(e)}return e}var l,s=(l=[],function(r,e){return l[r]=e,l.filter(Boolean).join(\"\\n\")});function f(r,e,t,a){var n=t?\"\":a.media?\"@media \".concat(a.media,\" {\").concat(a.css,\"}\"):a.css;if(r.styleSheet)r.styleSheet.cssText=s(e,n);else{var o=document.createTextNode(n),i=r.childNodes;i[e]&&r.removeChild(i[e]),i.length?r.insertBefore(o,i[e]):r.appendChild(o)}}function g(r,e,t){var a=t.css,n=t.media,o=t.sourceMap;if(n?r.setAttribute(\"media\",n):r.removeAttribute(\"media\"),o&&\"undefined\"!=typeof btoa&&(a+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o)))),\" */\")),r.styleSheet)r.styleSheet.cssText=a;else{for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(document.createTextNode(a))}}var u=null,j=0;function b(r,e){var t,a,n;if(e.singleton){var o=j++;t=u||(u=p(e)),a=f.bind(null,t,o,!1),n=f.bind(null,t,o,!0)}else t=p(e),a=g.bind(null,t,e),n=function(){!function(r){if(null===r.parentNode)return!1;r.parentNode.removeChild(r)}(t)};return a(r),function(e){if(e){if(e.css===r.css&&e.media===r.media&&e.sourceMap===r.sourceMap)return;a(r=e)}else n()}}r.exports=function(r,e){(e=e||{}).singleton||\"boolean\"==typeof e.singleton||(e.singleton=n());var t=c(r=r||[],e);return function(r){if(r=r||[],\"[object Array]\"===Object.prototype.toString.call(r)){for(var a=0;a<t.length;a++){var n=d(t[a]);i[n].references--}for(var o=c(r,e),p=0;p<t.length;p++){var l=d(t[p]);0===i[l].references&&(i[l].updater(),i.splice(l,1))}t=o}}}},function(r,e,t){\"use strict\";r.exports=function(r){var e=[];return e.toString=function(){return this.map((function(e){var t=r(e);return e[2]?\"@media \".concat(e[2],\" {\").concat(t,\"}\"):t})).join(\"\")},e.i=function(r,t,a){\"string\"==typeof r&&(r=[[null,r,\"\"]]);var n={};if(a)for(var o=0;o<this.length;o++){var i=this[o][0];null!=i&&(n[i]=!0)}for(var d=0;d<r.length;d++){var c=[].concat(r[d]);a&&n[c[0]]||(t&&(c[2]?c[2]=\"\".concat(t,\" and \").concat(c[2]):c[2]=t),e.push(c))}},e}},function(r,e,t){(function(e){var a,n,o;t(6),n=t(2),t(7),o=t(10),a=function(){var r,e;function t(r){var e,t,a;this.maskCardNumber=(e=this.maskCardNumber,t=this,function(){return e.apply(t,arguments)}),this.options=o(!0,this.defaults,r),this.options.form?(this.$el=n(this.options.form),this.options.container?(this.$container=n(this.options.container),(a=n.isDOMElement(this.$container)?this.$container:this.$container[0]).getAttribute(this.initializedDataAttr)||(a.setAttribute(this.initializedDataAttr,!0),this.render(),this.attachHandlers(),this.handleInitialPlaceholders())):console.log(\"Please provide a container\")):console.log(\"Please provide a form\")}return t.prototype.initializedDataAttr=\"data-jp-card-initialized\",t.prototype.cardTemplate='<div class=\"jp-card-container\"><div class=\"jp-card\"><div class=\"jp-card-front\"><div class=\"jp-card-logo jp-card-elo\"><div class=\"e\">e</div><div class=\"l\">l</div><div class=\"o\">o</div></div><div class=\"jp-card-logo jp-card-visa\">Visa</div><div class=\"jp-card-logo jp-card-visaelectron\">Visa<div class=\"elec\">Electron</div></div><div class=\"jp-card-logo jp-card-mastercard\">Mastercard</div><div class=\"jp-card-logo jp-card-maestro\">Maestro</div><div class=\"jp-card-logo jp-card-amex\"></div><div class=\"jp-card-logo jp-card-discover\">discover</div><div class=\"jp-card-logo jp-card-unionpay\">UnionPay</div><div class=\"jp-card-logo jp-card-dinersclub\"></div><div class=\"jp-card-logo jp-card-hipercard\">Hipercard</div><div class=\"jp-card-logo jp-card-troy\">troy</div><div class=\"jp-card-logo jp-card-dankort\"><div class=\"dk\"><div class=\"d\"></div><div class=\"k\"></div></div></div><div class=\"jp-card-logo jp-card-jcb\"><div class=\"j\">J</div><div class=\"c\">C</div><div class=\"b\">B</div></div><div class=\"jp-card-lower\"><div class=\"jp-card-shiny\"></div><div class=\"jp-card-cvc jp-card-display\">{{cvc}}</div><div class=\"jp-card-number jp-card-display\">{{number}}</div><div class=\"jp-card-name jp-card-display\">{{name}}</div><div class=\"jp-card-expiry jp-card-display\" data-before=\"{{monthYear}}\" data-after=\"{{validDate}}\">{{expiry}}</div></div></div><div class=\"jp-card-back\"><div class=\"jp-card-bar\"></div><div class=\"jp-card-cvc jp-card-display\">{{cvc}}</div><div class=\"jp-card-shiny\"></div></div></div></div>',t.prototype.template=function(r,e){return r.replace(/\\{\\{(.*?)\\}\\}/g,(function(r,t,a){return e[t]}))},t.prototype.cardTypes=[\"jp-card-amex\",\"jp-card-dankort\",\"jp-card-dinersclub\",\"jp-card-discover\",\"jp-card-unionpay\",\"jp-card-jcb\",\"jp-card-laser\",\"jp-card-maestro\",\"jp-card-mastercard\",\"jp-card-troy\",\"jp-card-unionpay\",\"jp-card-visa\",\"jp-card-visaelectron\",\"jp-card-elo\",\"jp-card-hipercard\"],t.prototype.defaults={formatting:!0,formSelectors:{numberInput:'input[name=\"number\"]',expiryInput:'input[name=\"expiry\"]',cvcInput:'input[name=\"cvc\"]',nameInput:'input[name=\"name\"]'},cardSelectors:{cardContainer:\".jp-card-container\",card:\".jp-card\",numberDisplay:\".jp-card-number\",expiryDisplay:\".jp-card-expiry\",cvcDisplay:\".jp-card-cvc\",nameDisplay:\".jp-card-name\"},messages:{validDate:\"valid\\nthru\",monthYear:\"month/year\"},placeholders:{number:\"&bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull;\",cvc:\"&bull;&bull;&bull;\",expiry:\"&bull;&bull;/&bull;&bull;\",name:\"Full Name\"},masks:{cardNumber:!1},classes:{valid:\"jp-card-valid\",invalid:\"jp-card-invalid\"},debug:!1},t.prototype.render=function(){var r,e,t,a,i,d,c,p;for(t in n.append(this.$container,this.template(this.cardTemplate,o({},this.options.messages,this.options.placeholders))),i=this.options.cardSelectors)c=i[t],this[\"$\"+t]=n.find(this.$container,c);for(t in d=this.options.formSelectors)c=d[t],c=this.options[t]?this.options[t]:c,!(a=n.find(this.$el,c)).length&&this.options.debug&&console.error(\"Card can't find a \"+t+\" in your form.\"),this[\"$\"+t]=a;if(this.options.formatting&&(Payment.formatCardNumber(this.$numberInput),Payment.formatCardCVC(this.$cvcInput),Payment.formatCardExpiry(this.$expiryInput)),this.options.width&&(r=n(this.options.cardSelectors.cardContainer)[0],e=parseInt(r.clientWidth||window.getComputedStyle(r).width),r.style.transform=\"scale(\"+this.options.width/e+\")\"),(\"undefined\"!=typeof navigator&&null!==navigator?navigator.userAgent:void 0)&&-1!==(p=navigator.userAgent.toLowerCase()).indexOf(\"safari\")&&-1===p.indexOf(\"chrome\")&&n.addClass(this.$card,\"jp-card-safari\"),/MSIE 10\\./i.test(navigator.userAgent)&&n.addClass(this.$card,\"jp-card-ie-10\"),/rv:11.0/i.test(navigator.userAgent))return n.addClass(this.$card,\"jp-card-ie-11\")},t.prototype.attachHandlers=function(){var e,t;return t=[this.validToggler(\"cardNumber\")],this.options.masks.cardNumber&&t.push(this.maskCardNumber),r(this.$numberInput,this.$numberDisplay,{fill:!1,filters:t}),n.on(this.$numberInput,\"payment.cardType\",this.handle(\"setCardType\")),(e=[function(r){return 1===r.length&&\"0\"===r[0]?\"\":r.replace(/(\\s+)/g,\"\")}]).push(this.validToggler(\"cardExpiry\")),r(this.$expiryInput,this.$expiryDisplay,{join:function(r){return 2===r[0].length||r[1]?\"/\":\"\"},filters:e}),r(this.$cvcInput,this.$cvcDisplay,{filters:this.validToggler(\"cardCVC\")}),n.on(this.$cvcInput,\"focus\",this.handle(\"flipCard\")),n.on(this.$cvcInput,\"blur\",this.handle(\"unflipCard\")),r(this.$nameInput,this.$nameDisplay,{fill:!1,filters:this.validToggler(\"cardHolderName\"),join:\" \"})},t.prototype.handleInitialPlaceholders=function(){var r,e,t,a;for(e in a=[],t=this.options.formSelectors)t[e],(r=this[\"$\"+e])instanceof NodeList&&(r=r[0]),n.val(r)?(n.trigger(r,\"paste\"),a.push(function(r){return setTimeout((function(){return n.trigger(r,\"keyup\")}))}(r))):a.push(void 0);return a},t.prototype.handle=function(r){return e=this,function(t){var a;return(a=Array.prototype.slice.call(arguments)).unshift(t.target),e.handlers[r].apply(e,a)};var e},t.prototype.validToggler=function(r){var e,t;return\"cardExpiry\"===r?e=function(r){var e;return e=Payment.fns.cardExpiryVal(r),Payment.fns.validateCardExpiry(e.month,e.year)}:\"cardCVC\"===r?(t=this,e=function(r){return Payment.fns.validateCardCVC(r,t.cardType)}):\"cardNumber\"===r?e=function(r){return Payment.fns.validateCardNumber(r)}:\"cardHolderName\"===r&&(e=function(r){return\"\"!==r}),function(r){return function(t,a,n){var o;return o=e(t),r.toggleValidClass(a,o),r.toggleValidClass(n,o),t}}(this)},t.prototype.toggleValidClass=function(r,e){return n.toggleClass(r,this.options.classes.valid,e),n.toggleClass(r,this.options.classes.invalid,!e)},t.prototype.maskCardNumber=function(r,e,t){var a,n;return a=this.options.masks.cardNumber,(n=r.split(\" \")).length>=3?(n.forEach((function(r,e){if(e!==n.length-1)return n[e]=n[e].replace(/\\d/g,a)})),n.join(\" \")):r.replace(/\\d/g,a)},t.prototype.handlers={setCardType:function(r,e){var t,a;if(t=e.data,a=new CustomEvent(\"card-type-changed\",{detail:e.data}),document.dispatchEvent(a),!n.hasClass(this.$card,t))return n.removeClass(this.$card,\"jp-card-unknown\"),n.removeClass(this.$card,this.cardTypes.join(\" \")),n.addClass(this.$card,\"jp-card-\"+t),n.toggleClass(this.$card,\"jp-card-identified\",\"unknown\"!==t),this.cardType=t},flipCard:function(){return n.addClass(this.$card,\"jp-card-flipped\")},unflipCard:function(){return n.removeClass(this.$card,\"jp-card-flipped\")}},r=function(r,t,a){var o,i,d;return null==a&&(a={}),a.fill=a.fill||!1,a.filters=a.filters||[],a.filters instanceof Array||(a.filters=[a.filters]),a.join=a.join||\"\",\"function\"!=typeof a.join&&(o=a.join,a.join=function(){return o}),d=function(){var r,e,a;for(a=[],r=0,e=t.length;r<e;r++)i=t[r],a.push(i.textContent);return a}(),e(r,t,d,a),n.on(r,\"focus\",(function(){return n.addClass(t,\"jp-card-focused\")})),n.on(r,\"blur\",(function(){return n.removeClass(t,\"jp-card-focused\")})),n.on(r,\"keyup change paste\",(function(n){return e(r,t,d,a)})),r},e=function(r,e,t,a){var o,i,d,c,p,l,s,f,g,u,j,b;for(b=function(){var e,t,a;for(a=[],e=0,t=r.length;e<t;e++)o=r[e],a.push(n.val(o));return a}(),c=a.join(b),(b=b.join(c))===c&&(b=\"\"),d=0,l=(u=a.filters).length;d<l;d++)b=(0,u[d])(b,r,e);for(j=[],i=p=0,s=e.length;p<s;i=++p)f=e[i],g=a.fill?b+t[i].substring(b.length):b||t[i],j.push(f.textContent=g);return j},t.prototype.getCardType=function(){return Payment.fns.cardType(this.$numberInput[0].value)||\"unknown\"},t}(),r.exports=a,e.Card=a}).call(this,t(1))},function(r,e,t){\"use strict\";t.r(e);var a=t(3),n=t.n(a),o=t(0),i={insert:\"head\",singleton:!1};n()(o.a,i);e.default=o.a.locals||{}},function(r,e,t){(function(){var e,a,n,o,i,d,c,p,l,s,f,g,u,j,b,h,m,v,x,y,k,w,C,E,z,$,N=[].indexOf||function(r){for(var e=0,t=this.length;e<t;e++)if(e in this&&this[e]===r)return e;return-1};b=t(8)(),a=t(2),i=[{type:\"amex\",pattern:/^3[47]/,format:/(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,length:[15],cvcLength:[4],luhn:!0},{type:\"dankort\",pattern:/^5019/,format:c=/(\\d{1,4})/g,length:[16],cvcLength:[3],luhn:!0},{type:\"dinersclub\",pattern:/^(36|38|30[0-5])/,format:/(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,length:[14],cvcLength:[3],luhn:!0},{type:\"discover\",pattern:/^(6011|65|64[4-9]|622)/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"elo\",pattern:/^401178|^401179|^431274|^438935|^451416|^457393|^457631|^457632|^504175|^627780|^636297|^636369|^636368|^(506699|5067[0-6]\\d|50677[0-8])|^(50900\\d|5090[1-9]\\d|509[1-9]\\d{2})|^65003[1-3]|^(65003[5-9]|65004\\d|65005[0-1])|^(65040[5-9]|6504[1-3]\\d)|^(65048[5-9]|65049\\d|6505[0-2]\\d|65053[0-8])|^(65054[1-9]|6505[5-8]\\d|65059[0-8])|^(65070\\d|65071[0-8])|^65072[0-7]|^(65090[1-9]|65091\\d|650920)|^(65165[2-9]|6516[6-7]\\d)|^(65500\\d|65501\\d)|^(65502[1-9]|6550[3-4]\\d|65505[0-8])|^(65092[1-9]|65097[0-8])/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"hipercard\",pattern:/^(384100|384140|384160|606282|637095|637568|60(?!11))/,format:c,length:[14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:\"jcb\",pattern:/^(308[8-9]|309[0-3]|3094[0]{4}|309[6-9]|310[0-2]|311[2-9]|3120|315[8-9]|333[7-9]|334[0-9]|35)/,format:c,length:[16,19],cvcLength:[3],luhn:!0},{type:\"laser\",pattern:/^(6706|6771|6709)/,format:c,length:[16,17,18,19],cvcLength:[3],luhn:!0},{type:\"maestro\",pattern:/^(50|5[6-9]|6007|6220|6304|6703|6708|6759|676[1-3])/,format:c,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:\"mastercard\",pattern:/^(5[1-5]|677189)|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"mir\",pattern:/^220[0-4][0-9][0-9]\\d{10}$/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"troy\",pattern:/^9792/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"unionpay\",pattern:/^62/,format:c,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:\"visaelectron\",pattern:/^4(026|17500|405|508|844|91[37])/,format:c,length:[16],cvcLength:[3],luhn:!0},{type:\"visa\",pattern:/^4/,format:c,length:[13,16],cvcLength:[3],luhn:!0}],n=function(r){var e,t,a,n,o;for(r=(r+\"\").replace(/\\D/g,\"\"),t=void 0,a=0,n=i.length;a<n;a++)e=i[a],(o=r.match(e.pattern))&&(!t||o[0].length>t[1][0].length)&&(t=[e,o]);return t&&t[0]},o=function(r){var e,t,a;for(t=0,a=i.length;t<a;t++)if((e=i[t]).type===r)return e},m=function(r){var e,t,a,n,o,i;for(o=!0,i=0,a=0,n=(t=(r+\"\").split(\"\").reverse()).length;a<n;a++)e=t[a],e=parseInt(e,10),(o=!o)&&(e*=2),e>9&&(e-=9),i+=e;return i%10==0},h=function(r){var e;try{if(null!=r.selectionStart&&r.selectionStart!==r.selectionEnd)return!0;if(null!=(\"undefined\"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)&&document.selection.createRange().text)return!0}catch(r){r}return!1},v=function(r){return setTimeout((function(){var t,n;return t=r.target,n=a.val(t),n=e.fns.formatCardNumber(n),d(t,n),a.trigger(t,\"change\")}))},s=function(r){return function(e){var t,o,i,d,c,p,l,s,f,g,u;if(e.which>0?(o=String.fromCharCode(e.which),u=a.val(e.target)+o):(o=e.data,u=a.val(e.target)),/^\\d+$/.test(o)){for(s=e.target,t=n(u),p=u.replace(/\\D/g,\"\").length,g=[16],t&&(g=t.length),r&&(g=g.filter((function(e){return e<=r}))),i=d=0,c=g.length;d<c;i=++d)if(!(p>=(f=g[i])&&g[i+1])&&p>=f)return;if(!h(s))return l=t&&\"amex\"===t.type?/^(\\d{4}|\\d{4}\\s\\d{6})$/:/(?:^|\\s)(\\d{4})$/,u=u.substring(0,u.length-1),l.test(u)?(e.preventDefault(),a.val(s,u+\" \"+o),a.trigger(s,\"change\")):void 0}}},p=function(r){var e,t;if(e=r.target,t=a.val(e),!r.meta&&8===r.which&&!h(e))return/\\d\\s$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\\d\\s$/,\"\")),a.trigger(e,\"change\")):/\\s\\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\\s\\d?$/,\"\")),a.trigger(e,\"change\")):void 0},f=function(r){var e,t,n;if(t=r.target,r.which>0?(e=String.fromCharCode(r.which),n=a.val(t)+e):(e=r.data,n=a.val(t)),/^\\d+$/.test(e))return/^\\d$/.test(n)&&\"0\"!==n&&\"1\"!==n?(r.preventDefault(),a.val(t,\"0\"+n+\" / \"),a.trigger(t,\"change\")):/^\\d\\d$/.test(n)?(r.preventDefault(),a.val(t,n+\" / \"),a.trigger(t,\"change\")):void 0},j=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\\d+$/.test(e))return t=r.target,n=a.val(t)+e,/^\\d$/.test(n)&&\"0\"!==n&&\"1\"!==n?(r.preventDefault(),a.val(t,\"0\"+n),a.trigger(t,\"change\")):/^\\d\\d$/.test(n)?(r.preventDefault(),a.val(t,\"\"+n),a.trigger(t,\"change\")):void 0},g=function(r){var e,t,n;if(e=String.fromCharCode(r.which),/^\\d+$/.test(e))return t=r.target,n=a.val(t),/^\\d\\d$/.test(n)?(a.val(t,n+\" / \"),a.trigger(t,\"change\")):void 0},u=function(r){var e,t;if(\"/\"===String.fromCharCode(r.which))return e=r.target,t=a.val(e),/^\\d$/.test(t)&&\"0\"!==t?(a.val(e,\"0\"+t+\" / \"),a.trigger(e,\"change\")):void 0},l=function(r){var e,t;if(!r.metaKey&&(e=r.target,t=a.val(e),8===r.which&&!h(e)))return/\\d(\\s|\\/)+$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\\d(\\s|\\/)*$/,\"\")),a.trigger(e,\"change\")):/\\s\\/\\s?\\d?$/.test(t)?(r.preventDefault(),a.val(e,t.replace(/\\s\\/\\s?\\d?$/,\"\")),a.trigger(e,\"change\")):void 0},E=function(r){var e;return!(!r.metaKey&&!r.ctrlKey)||(32===r.which?r.preventDefault():0===r.which||(r.which<33||(e=String.fromCharCode(r.which),/[\\d\\s]/.test(e)?void 0:r.preventDefault())))},y=function(r){return function(e){var t,o,i,d,c;if(d=e.target,o=String.fromCharCode(e.which),/^\\d+$/.test(o)&&!h(d))return c=(a.val(d)+o).replace(/\\D/g,\"\"),i=16,(t=n(c))&&(i=t.length[t.length.length-1]),r&&(i=Math.min(i,r)),c.length<=i?void 0:e.preventDefault()}},w=function(r,e){var t,n;if(n=r.target,t=String.fromCharCode(r.which),/^\\d+$/.test(t)&&!h(n))return(a.val(n)+t).replace(/\\D/g,\"\").length>e?r.preventDefault():void 0},k=function(r){return w(r,6)},C=function(r){return w(r,2)},z=function(r){return w(r,4)},x=function(r){var e,t;if(t=r.target,e=String.fromCharCode(r.which),/^\\d+$/.test(e)&&!h(t))return(a.val(t)+e).length<=4?void 0:r.preventDefault()},$=function(r){var t,n,o,d,c;if(d=r.target,c=a.val(d),o=e.fns.cardType(c)||\"unknown\",!a.hasClass(d,o))return t=function(){var r,e,t;for(t=[],r=0,e=i.length;r<e;r++)n=i[r],t.push(n.type);return t}(),a.removeClass(d,\"unknown\"),a.removeClass(d,t.join(\" \")),a.addClass(d,o),a.toggleClass(d,\"identified\",\"unknown\"!==o),a.trigger(d,\"payment.cardType\",o)},d=function(r,e){var t;if(t=r.selectionEnd,a.val(r,e),t)return r.selectionEnd=t},e=function(){function r(){}return r.J=a,r.fns={cardExpiryVal:function(r){var e,t,a;return e=(t=(r=r.replace(/\\s/g,\"\")).split(\"/\",2))[0],2===(null!=(a=t[1])?a.length:void 0)&&/^\\d+$/.test(a)&&(a=(new Date).getFullYear().toString().slice(0,2)+a),{month:e=parseInt(e,10),year:a=parseInt(a,10)}},validateCardNumber:function(r){var e,t;return r=(r+\"\").replace(/\\s+|-/g,\"\"),!!/^\\d+$/.test(r)&&(!!(e=n(r))&&(t=r.length,N.call(e.length,t)>=0&&(!1===e.luhn||m(r))))},validateCardExpiry:function(e,t){var n,o,i,d;return\"object\"==typeof e&&\"month\"in e?(e=(i=e).month,t=i.year):\"string\"==typeof e&&N.call(e,\"/\")>=0&&(e=(d=r.fns.cardExpiryVal(e)).month,t=d.year),!(!e||!t)&&(e=a.trim(e),t=a.trim(t),!!/^\\d+$/.test(e)&&(!!/^\\d+$/.test(t)&&(!!((e=parseInt(e,10))&&e<=12)&&(2===t.length&&(t=(new Date).getFullYear().toString().slice(0,2)+t),o=new Date(t,e),n=new Date,o.setMonth(o.getMonth()-1),o.setMonth(o.getMonth()+1,1),o>n))))},validateCardCVC:function(r,e){var t,n;return r=a.trim(r),!!/^\\d+$/.test(r)&&(e&&o(e)?(t=r.length,N.call(null!=(n=o(e))?n.cvcLength:void 0,t)>=0):r.length>=3&&r.length<=4)},cardType:function(r){var e;return r&&(null!=(e=n(r))?e.type:void 0)||null},formatCardNumber:function(r){var e,t,a,o;return(e=n(r))?(o=e.length[e.length.length-1],r=(r=r.replace(/\\D/g,\"\")).slice(0,o),e.format.global?null!=(a=r.match(e.format))?a.join(\" \"):void 0:null!=(t=e.format.exec(r))?(t.shift(),(t=t.filter((function(r){return r}))).join(\" \")):void 0):r}},r.restrictNumeric=function(r){return a.on(r,\"keypress\",E),a.on(r,\"input\",E)},r.cardExpiryVal=function(e){return r.fns.cardExpiryVal(a.val(e))},r.formatCardCVC=function(e){return r.restrictNumeric(e),a.on(e,\"keypress\",x),a.on(e,\"input\",x),e},r.formatCardExpiry=function(e){var t,n;return r.restrictNumeric(e),e.length&&2===e.length?(t=e[0],n=e[1],this.formatCardExpiryMultiple(t,n)):(a.on(e,\"keypress\",k),a.on(e,\"keypress\",f),a.on(e,\"keypress\",u),a.on(e,\"keypress\",g),a.on(e,\"keydown\",l),a.on(e,\"input\",f)),e},r.formatCardExpiryMultiple=function(r,e){return a.on(r,\"keypress\",C),a.on(r,\"keypress\",j),a.on(r,\"input\",j),a.on(e,\"keypress\",z),a.on(e,\"input\",z)},r.formatCardNumber=function(e,t){return r.restrictNumeric(e),a.on(e,\"keypress\",y(t)),a.on(e,\"keypress\",s(t)),a.on(e,\"keydown\",p),a.on(e,\"keyup blur\",$),a.on(e,\"blur\",s(t)),a.on(e,\"paste\",v),a.on(e,\"input\",s(t)),e},r.getCardArray=function(){return i},r.setCardArray=function(r){return i=r,!0},r.addToCardArray=function(r){return i.push(r)},r.removeFromCardArray=function(r){var e;for(e in i)i[e].type===r&&i.splice(e,1);return!0},r}(),r.exports=e,b.Payment=e}).call(this)},function(r,e,t){\"use strict\";(function(e){var a=t(9);r.exports=function(){return\"object\"==typeof e&&e&&e.Math===Math&&e.Array===Array?e:a}}).call(this,t(1))},function(r,e,t){\"use strict\";\"undefined\"!=typeof self?r.exports=self:\"undefined\"!=typeof window?r.exports=window:r.exports=Function(\"return this\")()},function(r,e,t){\"use strict\";r.exports=t(11)},function(r,e,t){\"use strict\";\n/*!\n * node.extend\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * @fileoverview\n * Port of jQuery.extend that actually works on node.js\n */var a=t(12),n=t(13),o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,d=function(r,e,t){o&&\"__proto__\"===e?o(r,e,{enumerable:!0,configurable:!0,value:t,writable:!0}):r[e]=t},c=function(r,e){if(\"__proto__\"===e){if(!n(r,e))return;if(i)return i(r,e).value}return r[e]};r.exports=function r(){var e,t,n,o,i,p,l=arguments[0]||{},s=1,f=arguments.length,g=!1;for(\"boolean\"==typeof l&&(g=l,l=arguments[1]||{},s=2),\"object\"==typeof l||a.fn(l)||(l={});s<f;s++)if(null!=(e=arguments[s]))for(t in\"string\"==typeof e&&(e=e.split(\"\")),e)n=c(l,t),l!==(o=c(e,t))&&(g&&o&&(a.hash(o)||(i=a.array(o)))?(i?(i=!1,p=n&&a.array(n)?n:[]):p=n&&a.hash(n)?n:{},d(l,t,r(g,p,o))):void 0!==o&&d(l,t,o));return l}},function(r,e,t){\"use strict\";\n/**!\n * is\n * the definitive JavaScript type testing library\n *\n * @copyright 2013-2014 Enrico Marino / Jordan Harband\n * @license MIT\n */var a,n,o=Object.prototype,i=o.hasOwnProperty,d=o.toString;\"function\"==typeof Symbol&&(a=Symbol.prototype.valueOf),\"function\"==typeof BigInt&&(n=BigInt.prototype.valueOf);var c=function(r){return r!=r},p={boolean:1,number:1,string:1,undefined:1},l=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,s=/^[A-Fa-f0-9]+$/,f={};f.a=f.type=function(r,e){return typeof r===e},f.defined=function(r){return void 0!==r},f.empty=function(r){var e,t=d.call(r);if(\"[object Array]\"===t||\"[object Arguments]\"===t||\"[object String]\"===t)return 0===r.length;if(\"[object Object]\"===t){for(e in r)if(i.call(r,e))return!1;return!0}return!r},f.equal=function(r,e){if(r===e)return!0;var t,a=d.call(r);if(a!==d.call(e))return!1;if(\"[object Object]\"===a){for(t in r)if(!f.equal(r[t],e[t])||!(t in e))return!1;for(t in e)if(!f.equal(r[t],e[t])||!(t in r))return!1;return!0}if(\"[object Array]\"===a){if((t=r.length)!==e.length)return!1;for(;t--;)if(!f.equal(r[t],e[t]))return!1;return!0}return\"[object Function]\"===a?r.prototype===e.prototype:\"[object Date]\"===a&&r.getTime()===e.getTime()},f.hosted=function(r,e){var t=typeof e[r];return\"object\"===t?!!e[r]:!p[t]},f.instance=f.instanceof=function(r,e){return r instanceof e},f.nil=f.null=function(r){return null===r},f.undef=f.undefined=function(r){return void 0===r},f.args=f.arguments=function(r){var e=\"[object Arguments]\"===d.call(r),t=!f.array(r)&&f.arraylike(r)&&f.object(r)&&f.fn(r.callee);return e||t},f.array=Array.isArray||function(r){return\"[object Array]\"===d.call(r)},f.args.empty=function(r){return f.args(r)&&0===r.length},f.array.empty=function(r){return f.array(r)&&0===r.length},f.arraylike=function(r){return!!r&&!f.bool(r)&&i.call(r,\"length\")&&isFinite(r.length)&&f.number(r.length)&&r.length>=0},f.bool=f.boolean=function(r){return\"[object Boolean]\"===d.call(r)},f.false=function(r){return f.bool(r)&&!1===Boolean(Number(r))},f.true=function(r){return f.bool(r)&&!0===Boolean(Number(r))},f.date=function(r){return\"[object Date]\"===d.call(r)},f.date.valid=function(r){return f.date(r)&&!isNaN(Number(r))},f.element=function(r){return void 0!==r&&\"undefined\"!=typeof HTMLElement&&r instanceof HTMLElement&&1===r.nodeType},f.error=function(r){return\"[object Error]\"===d.call(r)},f.fn=f.function=function(r){if(\"undefined\"!=typeof window&&r===window.alert)return!0;var e=d.call(r);return\"[object Function]\"===e||\"[object GeneratorFunction]\"===e||\"[object AsyncFunction]\"===e},f.number=function(r){return\"[object Number]\"===d.call(r)},f.infinite=function(r){return r===1/0||r===-1/0},f.decimal=function(r){return f.number(r)&&!c(r)&&!f.infinite(r)&&r%1!=0},f.divisibleBy=function(r,e){var t=f.infinite(r),a=f.infinite(e),n=f.number(r)&&!c(r)&&f.number(e)&&!c(e)&&0!==e;return t||a||n&&r%e==0},f.integer=f.int=function(r){return f.number(r)&&!c(r)&&r%1==0},f.maximum=function(r,e){if(c(r))throw new TypeError(\"NaN is not a valid value\");if(!f.arraylike(e))throw new TypeError(\"second argument must be array-like\");for(var t=e.length;--t>=0;)if(r<e[t])return!1;return!0},f.minimum=function(r,e){if(c(r))throw new TypeError(\"NaN is not a valid value\");if(!f.arraylike(e))throw new TypeError(\"second argument must be array-like\");for(var t=e.length;--t>=0;)if(r>e[t])return!1;return!0},f.nan=function(r){return!f.number(r)||r!=r},f.even=function(r){return f.infinite(r)||f.number(r)&&r==r&&r%2==0},f.odd=function(r){return f.infinite(r)||f.number(r)&&r==r&&r%2!=0},f.ge=function(r,e){if(c(r)||c(e))throw new TypeError(\"NaN is not a valid value\");return!f.infinite(r)&&!f.infinite(e)&&r>=e},f.gt=function(r,e){if(c(r)||c(e))throw new TypeError(\"NaN is not a valid value\");return!f.infinite(r)&&!f.infinite(e)&&r>e},f.le=function(r,e){if(c(r)||c(e))throw new TypeError(\"NaN is not a valid value\");return!f.infinite(r)&&!f.infinite(e)&&r<=e},f.lt=function(r,e){if(c(r)||c(e))throw new TypeError(\"NaN is not a valid value\");return!f.infinite(r)&&!f.infinite(e)&&r<e},f.within=function(r,e,t){if(c(r)||c(e)||c(t))throw new TypeError(\"NaN is not a valid value\");if(!f.number(r)||!f.number(e)||!f.number(t))throw new TypeError(\"all arguments must be numbers\");return f.infinite(r)||f.infinite(e)||f.infinite(t)||r>=e&&r<=t},f.object=function(r){return\"[object Object]\"===d.call(r)},f.primitive=function(r){return!r||!(\"object\"==typeof r||f.object(r)||f.fn(r)||f.array(r))},f.hash=function(r){return f.object(r)&&r.constructor===Object&&!r.nodeType&&!r.setInterval},f.regexp=function(r){return\"[object RegExp]\"===d.call(r)},f.string=function(r){return\"[object String]\"===d.call(r)},f.base64=function(r){return f.string(r)&&(!r.length||l.test(r))},f.hex=function(r){return f.string(r)&&(!r.length||s.test(r))},f.symbol=function(r){return\"function\"==typeof Symbol&&\"[object Symbol]\"===d.call(r)&&\"symbol\"==typeof a.call(r)},f.bigint=function(r){return\"function\"==typeof BigInt&&\"[object BigInt]\"===d.call(r)&&\"bigint\"==typeof n.call(r)},r.exports=f},function(r,e,t){\"use strict\";var a=t(14);r.exports=a.call(Function.call,Object.prototype.hasOwnProperty)},function(r,e,t){\"use strict\";var a=t(15);r.exports=Function.prototype.bind||a},function(r,e,t){\"use strict\";var a=\"Function.prototype.bind called on incompatible \",n=Array.prototype.slice,o=Object.prototype.toString;r.exports=function(r){var e=this;if(\"function\"!=typeof e||\"[object Function]\"!==o.call(e))throw new TypeError(a+e);for(var t,i=n.call(arguments,1),d=function(){if(this instanceof t){var a=e.apply(this,i.concat(n.call(arguments)));return Object(a)===a?a:this}return e.apply(r,i.concat(n.call(arguments)))},c=Math.max(0,e.length-i.length),p=[],l=0;l<c;l++)p.push(\"$\"+l);if(t=Function(\"binder\",\"return function (\"+p.join(\",\")+\"){ return binder.apply(this,arguments); }\")(d),e.prototype){var s=function(){};s.prototype=e.prototype,t.prototype=new s,s.prototype=null}return t}}]);","/*!\n * dist/inputmask\n * https://github.com/RobinHerbots/Inputmask\n * Copyright (c) 2010 - 2024 Robin Herbots\n * Licensed under the MIT license\n * Version: 5.0.9\n */\n!function(e, t) {\n    if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = t(); else if (\"function\" == typeof define && define.amd) define([], t); else {\n        var n = t();\n        for (var i in n) (\"object\" == typeof exports ? exports : e)[i] = n[i];\n    }\n}(\"undefined\" != typeof self ? self : this, (function() {\n    return function() {\n        \"use strict\";\n        var e = {\n            3976: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                t.default = {\n                    _maxTestPos: 500,\n                    placeholder: \"_\",\n                    optionalmarker: [ \"[\", \"]\" ],\n                    quantifiermarker: [ \"{\", \"}\" ],\n                    groupmarker: [ \"(\", \")\" ],\n                    alternatormarker: \"|\",\n                    escapeChar: \"\\\\\",\n                    mask: null,\n                    regex: null,\n                    oncomplete: function() {},\n                    onincomplete: function() {},\n                    oncleared: function() {},\n                    repeat: 0,\n                    greedy: !1,\n                    autoUnmask: !1,\n                    removeMaskOnSubmit: !1,\n                    clearMaskOnLostFocus: !0,\n                    insertMode: !0,\n                    insertModeVisual: !0,\n                    clearIncomplete: !1,\n                    alias: null,\n                    onKeyDown: function() {},\n                    onBeforeMask: null,\n                    onBeforePaste: function(e, t) {\n                        return \"function\" == typeof t.onBeforeMask ? t.onBeforeMask.call(this, e, t) : e;\n                    },\n                    onBeforeWrite: null,\n                    onUnMask: null,\n                    showMaskOnFocus: !0,\n                    showMaskOnHover: !0,\n                    onKeyValidation: function() {},\n                    skipOptionalPartCharacter: \" \",\n                    numericInput: !1,\n                    rightAlign: !1,\n                    undoOnEscape: !0,\n                    radixPoint: \"\",\n                    _radixDance: !1,\n                    groupSeparator: \"\",\n                    keepStatic: null,\n                    positionCaretOnTab: !0,\n                    tabThrough: !1,\n                    supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n                    isComplete: null,\n                    preValidation: null,\n                    postValidation: null,\n                    staticDefinitionSymbol: void 0,\n                    jitMasking: !1,\n                    nullable: !0,\n                    inputEventOnly: !1,\n                    noValuePatching: !1,\n                    positionCaretOnClick: \"lvp\",\n                    casing: null,\n                    inputmode: \"text\",\n                    importDataAttributes: !0,\n                    shiftPositions: !0,\n                    usePrototypeDefinitions: !0,\n                    validationEventTimeOut: 3e3,\n                    substitutes: {}\n                };\n            },\n            7392: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                t.default = {\n                    9: {\n                        validator: \"[0-9\\uff10-\\uff19]\",\n                        definitionSymbol: \"*\"\n                    },\n                    a: {\n                        validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        definitionSymbol: \"*\"\n                    },\n                    \"*\": {\n                        validator: \"[0-9\\uff10-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n                    }\n                };\n            },\n            253: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e, t, n) {\n                    if (void 0 === n) return e.__data ? e.__data[t] : null;\n                    e.__data = e.__data || {}, e.__data[t] = n;\n                };\n            },\n            3776: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.Event = void 0, t.off = function(e, t) {\n                    var n, i;\n                    u(this[0]) && e && (n = this[0].eventRegistry, i = this[0], e.split(\" \").forEach((function(e) {\n                        var a = o(e.split(\".\"), 2);\n                        (function(e, i) {\n                            var a, r, o = [];\n                            if (e.length > 0) if (void 0 === t) for (a = 0, r = n[e][i].length; a < r; a++) o.push({\n                                ev: e,\n                                namespace: i && i.length > 0 ? i : \"global\",\n                                handler: n[e][i][a]\n                            }); else o.push({\n                                ev: e,\n                                namespace: i && i.length > 0 ? i : \"global\",\n                                handler: t\n                            }); else if (i.length > 0) for (var l in n) for (var s in n[l]) if (s === i) if (void 0 === t) for (a = 0, \n                            r = n[l][s].length; a < r; a++) o.push({\n                                ev: l,\n                                namespace: s,\n                                handler: n[l][s][a]\n                            }); else o.push({\n                                ev: l,\n                                namespace: s,\n                                handler: t\n                            });\n                            return o;\n                        })(a[0], a[1]).forEach((function(e) {\n                            var t = e.ev, a = e.handler;\n                            !function(e, t, a) {\n                                if (e in n == 1) if (i.removeEventListener ? i.removeEventListener(e, a, !1) : i.detachEvent && i.detachEvent(\"on\".concat(e), a), \n                                \"global\" === t) for (var r in n[e]) n[e][r].splice(n[e][r].indexOf(a), 1); else n[e][t].splice(n[e][t].indexOf(a), 1);\n                            }(t, e.namespace, a);\n                        }));\n                    })));\n                    return this;\n                }, t.on = function(e, t) {\n                    if (u(this[0])) {\n                        var n = this[0].eventRegistry, i = this[0];\n                        e.split(\" \").forEach((function(e) {\n                            var a = o(e.split(\".\"), 2), r = a[0], l = a[1];\n                            !function(e, a) {\n                                i.addEventListener ? i.addEventListener(e, t, !1) : i.attachEvent && i.attachEvent(\"on\".concat(e), t), \n                                n[e] = n[e] || {}, n[e][a] = n[e][a] || [], n[e][a].push(t);\n                            }(r, void 0 === l ? \"global\" : l);\n                        }));\n                    }\n                    return this;\n                }, t.trigger = function(e) {\n                    var t = arguments;\n                    if (u(this[0])) for (var n = this[0].eventRegistry, i = this[0], o = \"string\" == typeof e ? e.split(\" \") : [ e.type ], l = 0; l < o.length; l++) {\n                        var s = o[l].split(\".\"), f = s[0], p = s[1] || \"global\";\n                        if (void 0 !== c && \"global\" === p) {\n                            var d, h = {\n                                bubbles: !0,\n                                cancelable: !0,\n                                composed: !0,\n                                detail: arguments[1]\n                            };\n                            if (c.createEvent) {\n                                try {\n                                    if (\"input\" === f) h.inputType = \"insertText\", d = new InputEvent(f, h); else d = new CustomEvent(f, h);\n                                } catch (e) {\n                                    (d = c.createEvent(\"CustomEvent\")).initCustomEvent(f, h.bubbles, h.cancelable, h.detail);\n                                }\n                                e.type && (0, a.default)(d, e), i.dispatchEvent(d);\n                            } else (d = c.createEventObject()).eventType = f, d.detail = arguments[1], e.type && (0, \n                            a.default)(d, e), i.fireEvent(\"on\" + d.eventType, d);\n                        } else if (void 0 !== n[f]) {\n                            arguments[0] = arguments[0].type ? arguments[0] : r.default.Event(arguments[0]), \n                            arguments[0].detail = arguments.slice(1);\n                            var v = n[f];\n                            (\"global\" === p ? Object.values(v).flat() : v[p]).forEach((function(e) {\n                                return e.apply(i, t);\n                            }));\n                        }\n                    }\n                    return this;\n                };\n                var i = s(n(9380)), a = s(n(600)), r = s(n(4963));\n                function o(e, t) {\n                    return function(e) {\n                        if (Array.isArray(e)) return e;\n                    }(e) || function(e, t) {\n                        var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                        if (null != n) {\n                            var i, a, r, o, l = [], s = !0, c = !1;\n                            try {\n                                if (r = (n = n.call(e)).next, 0 === t) {\n                                    if (Object(n) !== n) return;\n                                    s = !1;\n                                } else for (;!(s = (i = r.call(n)).done) && (l.push(i.value), l.length !== t); s = !0) ;\n                            } catch (e) {\n                                c = !0, a = e;\n                            } finally {\n                                try {\n                                    if (!s && null != n.return && (o = n.return(), Object(o) !== o)) return;\n                                } finally {\n                                    if (c) throw a;\n                                }\n                            }\n                            return l;\n                        }\n                    }(e, t) || function(e, t) {\n                        if (!e) return;\n                        if (\"string\" == typeof e) return l(e, t);\n                        var n = Object.prototype.toString.call(e).slice(8, -1);\n                        \"Object\" === n && e.constructor && (n = e.constructor.name);\n                        if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                        if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return l(e, t);\n                    }(e, t) || function() {\n                        throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                    }();\n                }\n                function l(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                function s(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var c = i.default.document;\n                function u(e) {\n                    return e instanceof Element;\n                }\n                var f = t.Event = void 0;\n                \"function\" == typeof i.default.CustomEvent ? t.Event = f = i.default.CustomEvent : i.default.Event && c && c.createEvent ? (t.Event = f = function(e, t) {\n                    t = t || {\n                        bubbles: !1,\n                        cancelable: !1,\n                        composed: !0,\n                        detail: void 0\n                    };\n                    var n = c.createEvent(\"CustomEvent\");\n                    return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n;\n                }, f.prototype = i.default.Event.prototype) : \"undefined\" != typeof Event && (t.Event = f = Event);\n            },\n            600: function(e, t) {\n                function n(e) {\n                    return n = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, n(e);\n                }\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function e() {\n                    var t, i, a, r, o, l, s = arguments[0] || {}, c = 1, u = arguments.length, f = !1;\n                    \"boolean\" == typeof s && (f = s, s = arguments[c] || {}, c++);\n                    \"object\" !== n(s) && \"function\" != typeof s && (s = {});\n                    for (;c < u; c++) if (null != (t = arguments[c])) for (i in t) a = s[i], s !== (r = t[i]) && (f && r && (\"[object Object]\" === Object.prototype.toString.call(r) || (o = Array.isArray(r))) ? (o ? (o = !1, \n                    l = a && Array.isArray(a) ? a : []) : l = a && \"[object Object]\" === Object.prototype.toString.call(a) ? a : {}, \n                    s[i] = e(f, l, r)) : void 0 !== r && (s[i] = r));\n                    return s;\n                };\n            },\n            4963: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var i = l(n(9380)), a = l(n(253)), r = n(3776), o = l(n(600));\n                function l(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var s = i.default.document;\n                function c(e) {\n                    return e instanceof c ? e : this instanceof c ? void (null != e && e !== i.default && (this[0] = e.nodeName ? e : void 0 !== e[0] && e[0].nodeName ? e[0] : s.querySelector(e), \n                    void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new c(e);\n                }\n                c.prototype = {\n                    on: r.on,\n                    off: r.off,\n                    trigger: r.trigger\n                }, c.extend = o.default, c.data = a.default, c.Event = r.Event;\n                t.default = c;\n            },\n            9845: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.mobile = t.iphone = t.ie = void 0;\n                var i, a = (i = n(9380)) && i.__esModule ? i : {\n                    default: i\n                };\n                var r = a.default.navigator && a.default.navigator.userAgent || \"\";\n                t.ie = r.indexOf(\"MSIE \") > 0 || r.indexOf(\"Trident/\") > 0, t.mobile = a.default.navigator && a.default.navigator.userAgentData && a.default.navigator.userAgentData.mobile || a.default.navigator && a.default.navigator.maxTouchPoints || \"ontouchstart\" in a.default, \n                t.iphone = /iphone/i.test(r);\n            },\n            7184: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e) {\n                    return e.replace(n, \"\\\\$1\");\n                };\n                var n = new RegExp(\"(\\\\\" + [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ].join(\"|\\\\\") + \")\", \"gim\");\n            },\n            6030: function(e, t, n) {\n                function i(e) {\n                    return i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, i(e);\n                }\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.EventHandlers = void 0;\n                var a, r = n(9845), o = (a = n(9380)) && a.__esModule ? a : {\n                    default: a\n                }, l = n(7760), s = n(2839), c = n(8711), u = n(7215), f = n(4713);\n                function p() {\n                    /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ p = function() {\n                        return t;\n                    };\n                    var e, t = {}, n = Object.prototype, a = n.hasOwnProperty, r = Object.defineProperty || function(e, t, n) {\n                        e[t] = n.value;\n                    }, o = \"function\" == typeof Symbol ? Symbol : {}, l = o.iterator || \"@@iterator\", s = o.asyncIterator || \"@@asyncIterator\", c = o.toStringTag || \"@@toStringTag\";\n                    function u(e, t, n) {\n                        return Object.defineProperty(e, t, {\n                            value: n,\n                            enumerable: !0,\n                            configurable: !0,\n                            writable: !0\n                        }), e[t];\n                    }\n                    try {\n                        u({}, \"\");\n                    } catch (e) {\n                        u = function(e, t, n) {\n                            return e[t] = n;\n                        };\n                    }\n                    function f(e, t, n, i) {\n                        var a = t && t.prototype instanceof k ? t : k, o = Object.create(a.prototype), l = new D(i || []);\n                        return r(o, \"_invoke\", {\n                            value: E(e, n, l)\n                        }), o;\n                    }\n                    function d(e, t, n) {\n                        try {\n                            return {\n                                type: \"normal\",\n                                arg: e.call(t, n)\n                            };\n                        } catch (e) {\n                            return {\n                                type: \"throw\",\n                                arg: e\n                            };\n                        }\n                    }\n                    t.wrap = f;\n                    var h = \"suspendedStart\", v = \"suspendedYield\", m = \"executing\", g = \"completed\", y = {};\n                    function k() {}\n                    function b() {}\n                    function x() {}\n                    var w = {};\n                    u(w, l, (function() {\n                        return this;\n                    }));\n                    var P = Object.getPrototypeOf, S = P && P(P(L([])));\n                    S && S !== n && a.call(S, l) && (w = S);\n                    var O = x.prototype = k.prototype = Object.create(w);\n                    function _(e) {\n                        [ \"next\", \"throw\", \"return\" ].forEach((function(t) {\n                            u(e, t, (function(e) {\n                                return this._invoke(t, e);\n                            }));\n                        }));\n                    }\n                    function M(e, t) {\n                        function n(r, o, l, s) {\n                            var c = d(e[r], e, o);\n                            if (\"throw\" !== c.type) {\n                                var u = c.arg, f = u.value;\n                                return f && \"object\" == i(f) && a.call(f, \"__await\") ? t.resolve(f.__await).then((function(e) {\n                                    n(\"next\", e, l, s);\n                                }), (function(e) {\n                                    n(\"throw\", e, l, s);\n                                })) : t.resolve(f).then((function(e) {\n                                    u.value = e, l(u);\n                                }), (function(e) {\n                                    return n(\"throw\", e, l, s);\n                                }));\n                            }\n                            s(c.arg);\n                        }\n                        var o;\n                        r(this, \"_invoke\", {\n                            value: function(e, i) {\n                                function a() {\n                                    return new t((function(t, a) {\n                                        n(e, i, t, a);\n                                    }));\n                                }\n                                return o = o ? o.then(a, a) : a();\n                            }\n                        });\n                    }\n                    function E(t, n, i) {\n                        var a = h;\n                        return function(r, o) {\n                            if (a === m) throw new Error(\"Generator is already running\");\n                            if (a === g) {\n                                if (\"throw\" === r) throw o;\n                                return {\n                                    value: e,\n                                    done: !0\n                                };\n                            }\n                            for (i.method = r, i.arg = o; ;) {\n                                var l = i.delegate;\n                                if (l) {\n                                    var s = j(l, i);\n                                    if (s) {\n                                        if (s === y) continue;\n                                        return s;\n                                    }\n                                }\n                                if (\"next\" === i.method) i.sent = i._sent = i.arg; else if (\"throw\" === i.method) {\n                                    if (a === h) throw a = g, i.arg;\n                                    i.dispatchException(i.arg);\n                                } else \"return\" === i.method && i.abrupt(\"return\", i.arg);\n                                a = m;\n                                var c = d(t, n, i);\n                                if (\"normal\" === c.type) {\n                                    if (a = i.done ? g : v, c.arg === y) continue;\n                                    return {\n                                        value: c.arg,\n                                        done: i.done\n                                    };\n                                }\n                                \"throw\" === c.type && (a = g, i.method = \"throw\", i.arg = c.arg);\n                            }\n                        };\n                    }\n                    function j(t, n) {\n                        var i = n.method, a = t.iterator[i];\n                        if (a === e) return n.delegate = null, \"throw\" === i && t.iterator.return && (n.method = \"return\", \n                        n.arg = e, j(t, n), \"throw\" === n.method) || \"return\" !== i && (n.method = \"throw\", \n                        n.arg = new TypeError(\"The iterator does not provide a '\" + i + \"' method\")), y;\n                        var r = d(a, t.iterator, n.arg);\n                        if (\"throw\" === r.type) return n.method = \"throw\", n.arg = r.arg, n.delegate = null, \n                        y;\n                        var o = r.arg;\n                        return o ? o.done ? (n[t.resultName] = o.value, n.next = t.nextLoc, \"return\" !== n.method && (n.method = \"next\", \n                        n.arg = e), n.delegate = null, y) : o : (n.method = \"throw\", n.arg = new TypeError(\"iterator result is not an object\"), \n                        n.delegate = null, y);\n                    }\n                    function T(e) {\n                        var t = {\n                            tryLoc: e[0]\n                        };\n                        1 in e && (t.catchLoc = e[1]), 2 in e && (t.finallyLoc = e[2], t.afterLoc = e[3]), \n                        this.tryEntries.push(t);\n                    }\n                    function A(e) {\n                        var t = e.completion || {};\n                        t.type = \"normal\", delete t.arg, e.completion = t;\n                    }\n                    function D(e) {\n                        this.tryEntries = [ {\n                            tryLoc: \"root\"\n                        } ], e.forEach(T, this), this.reset(!0);\n                    }\n                    function L(t) {\n                        if (t || \"\" === t) {\n                            var n = t[l];\n                            if (n) return n.call(t);\n                            if (\"function\" == typeof t.next) return t;\n                            if (!isNaN(t.length)) {\n                                var r = -1, o = function n() {\n                                    for (;++r < t.length; ) if (a.call(t, r)) return n.value = t[r], n.done = !1, n;\n                                    return n.value = e, n.done = !0, n;\n                                };\n                                return o.next = o;\n                            }\n                        }\n                        throw new TypeError(i(t) + \" is not iterable\");\n                    }\n                    return b.prototype = x, r(O, \"constructor\", {\n                        value: x,\n                        configurable: !0\n                    }), r(x, \"constructor\", {\n                        value: b,\n                        configurable: !0\n                    }), b.displayName = u(x, c, \"GeneratorFunction\"), t.isGeneratorFunction = function(e) {\n                        var t = \"function\" == typeof e && e.constructor;\n                        return !!t && (t === b || \"GeneratorFunction\" === (t.displayName || t.name));\n                    }, t.mark = function(e) {\n                        return Object.setPrototypeOf ? Object.setPrototypeOf(e, x) : (e.__proto__ = x, u(e, c, \"GeneratorFunction\")), \n                        e.prototype = Object.create(O), e;\n                    }, t.awrap = function(e) {\n                        return {\n                            __await: e\n                        };\n                    }, _(M.prototype), u(M.prototype, s, (function() {\n                        return this;\n                    })), t.AsyncIterator = M, t.async = function(e, n, i, a, r) {\n                        void 0 === r && (r = Promise);\n                        var o = new M(f(e, n, i, a), r);\n                        return t.isGeneratorFunction(n) ? o : o.next().then((function(e) {\n                            return e.done ? e.value : o.next();\n                        }));\n                    }, _(O), u(O, c, \"Generator\"), u(O, l, (function() {\n                        return this;\n                    })), u(O, \"toString\", (function() {\n                        return \"[object Generator]\";\n                    })), t.keys = function(e) {\n                        var t = Object(e), n = [];\n                        for (var i in t) n.push(i);\n                        return n.reverse(), function e() {\n                            for (;n.length; ) {\n                                var i = n.pop();\n                                if (i in t) return e.value = i, e.done = !1, e;\n                            }\n                            return e.done = !0, e;\n                        };\n                    }, t.values = L, D.prototype = {\n                        constructor: D,\n                        reset: function(t) {\n                            if (this.prev = 0, this.next = 0, this.sent = this._sent = e, this.done = !1, this.delegate = null, \n                            this.method = \"next\", this.arg = e, this.tryEntries.forEach(A), !t) for (var n in this) \"t\" === n.charAt(0) && a.call(this, n) && !isNaN(+n.slice(1)) && (this[n] = e);\n                        },\n                        stop: function() {\n                            this.done = !0;\n                            var e = this.tryEntries[0].completion;\n                            if (\"throw\" === e.type) throw e.arg;\n                            return this.rval;\n                        },\n                        dispatchException: function(t) {\n                            if (this.done) throw t;\n                            var n = this;\n                            function i(i, a) {\n                                return l.type = \"throw\", l.arg = t, n.next = i, a && (n.method = \"next\", n.arg = e), \n                                !!a;\n                            }\n                            for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n                                var o = this.tryEntries[r], l = o.completion;\n                                if (\"root\" === o.tryLoc) return i(\"end\");\n                                if (o.tryLoc <= this.prev) {\n                                    var s = a.call(o, \"catchLoc\"), c = a.call(o, \"finallyLoc\");\n                                    if (s && c) {\n                                        if (this.prev < o.catchLoc) return i(o.catchLoc, !0);\n                                        if (this.prev < o.finallyLoc) return i(o.finallyLoc);\n                                    } else if (s) {\n                                        if (this.prev < o.catchLoc) return i(o.catchLoc, !0);\n                                    } else {\n                                        if (!c) throw new Error(\"try statement without catch or finally\");\n                                        if (this.prev < o.finallyLoc) return i(o.finallyLoc);\n                                    }\n                                }\n                            }\n                        },\n                        abrupt: function(e, t) {\n                            for (var n = this.tryEntries.length - 1; n >= 0; --n) {\n                                var i = this.tryEntries[n];\n                                if (i.tryLoc <= this.prev && a.call(i, \"finallyLoc\") && this.prev < i.finallyLoc) {\n                                    var r = i;\n                                    break;\n                                }\n                            }\n                            r && (\"break\" === e || \"continue\" === e) && r.tryLoc <= t && t <= r.finallyLoc && (r = null);\n                            var o = r ? r.completion : {};\n                            return o.type = e, o.arg = t, r ? (this.method = \"next\", this.next = r.finallyLoc, \n                            y) : this.complete(o);\n                        },\n                        complete: function(e, t) {\n                            if (\"throw\" === e.type) throw e.arg;\n                            return \"break\" === e.type || \"continue\" === e.type ? this.next = e.arg : \"return\" === e.type ? (this.rval = this.arg = e.arg, \n                            this.method = \"return\", this.next = \"end\") : \"normal\" === e.type && t && (this.next = t), \n                            y;\n                        },\n                        finish: function(e) {\n                            for (var t = this.tryEntries.length - 1; t >= 0; --t) {\n                                var n = this.tryEntries[t];\n                                if (n.finallyLoc === e) return this.complete(n.completion, n.afterLoc), A(n), y;\n                            }\n                        },\n                        catch: function(e) {\n                            for (var t = this.tryEntries.length - 1; t >= 0; --t) {\n                                var n = this.tryEntries[t];\n                                if (n.tryLoc === e) {\n                                    var i = n.completion;\n                                    if (\"throw\" === i.type) {\n                                        var a = i.arg;\n                                        A(n);\n                                    }\n                                    return a;\n                                }\n                            }\n                            throw new Error(\"illegal catch attempt\");\n                        },\n                        delegateYield: function(t, n, i) {\n                            return this.delegate = {\n                                iterator: L(t),\n                                resultName: n,\n                                nextLoc: i\n                            }, \"next\" === this.method && (this.arg = e), y;\n                        }\n                    }, t;\n                }\n                function d(e, t) {\n                    var n = \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                    if (!n) {\n                        if (Array.isArray(e) || (n = function(e, t) {\n                            if (!e) return;\n                            if (\"string\" == typeof e) return h(e, t);\n                            var n = Object.prototype.toString.call(e).slice(8, -1);\n                            \"Object\" === n && e.constructor && (n = e.constructor.name);\n                            if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                            if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return h(e, t);\n                        }(e)) || t && e && \"number\" == typeof e.length) {\n                            n && (e = n);\n                            var i = 0, a = function() {};\n                            return {\n                                s: a,\n                                n: function() {\n                                    return i >= e.length ? {\n                                        done: !0\n                                    } : {\n                                        done: !1,\n                                        value: e[i++]\n                                    };\n                                },\n                                e: function(e) {\n                                    throw e;\n                                },\n                                f: a\n                            };\n                        }\n                        throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                    }\n                    var r, o = !0, l = !1;\n                    return {\n                        s: function() {\n                            n = n.call(e);\n                        },\n                        n: function() {\n                            var e = n.next();\n                            return o = e.done, e;\n                        },\n                        e: function(e) {\n                            l = !0, r = e;\n                        },\n                        f: function() {\n                            try {\n                                o || null == n.return || n.return();\n                            } finally {\n                                if (l) throw r;\n                            }\n                        }\n                    };\n                }\n                function h(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                function v(e, t, n, i, a, r, o) {\n                    try {\n                        var l = e[r](o), s = l.value;\n                    } catch (e) {\n                        return void n(e);\n                    }\n                    l.done ? t(s) : Promise.resolve(s).then(i, a);\n                }\n                var m, g, y = t.EventHandlers = {\n                    keyEvent: function(e, t, n, i, a) {\n                        var o = this.inputmask, p = o.opts, d = o.dependencyLib, h = o.maskset, v = this, m = d(v), g = e.key, k = c.caret.call(o, v), b = p.onKeyDown.call(this, e, c.getBuffer.call(o), k, p);\n                        if (void 0 !== b) return b;\n                        if (g === s.keys.Backspace || g === s.keys.Delete || r.iphone && g === s.keys.BACKSPACE_SAFARI || e.ctrlKey && g === s.keys.x && !(\"oncut\" in v)) e.preventDefault(), \n                        u.handleRemove.call(o, v, g, k), (0, l.writeBuffer)(v, c.getBuffer.call(o, !0), h.p, e, v.inputmask._valueGet() !== c.getBuffer.call(o).join(\"\")); else if (g === s.keys.End || g === s.keys.PageDown) {\n                            e.preventDefault();\n                            var x = c.seekNext.call(o, c.getLastValidPosition.call(o));\n                            c.caret.call(o, v, e.shiftKey ? k.begin : x, x, !0);\n                        } else g === s.keys.Home && !e.shiftKey || g === s.keys.PageUp ? (e.preventDefault(), \n                        c.caret.call(o, v, 0, e.shiftKey ? k.begin : 0, !0)) : p.undoOnEscape && g === s.keys.Escape && !0 !== e.altKey ? ((0, \n                        l.checkVal)(v, !0, !1, o.undoValue.split(\"\")), m.trigger(\"click\")) : g !== s.keys.Insert || e.shiftKey || e.ctrlKey || void 0 !== o.userOptions.insertMode ? !0 === p.tabThrough && g === s.keys.Tab ? !0 === e.shiftKey ? (k.end = c.seekPrevious.call(o, k.end, !0), \n                        !0 === f.getTest.call(o, k.end - 1).match.static && k.end--, k.begin = c.seekPrevious.call(o, k.end, !0), \n                        k.begin >= 0 && k.end > 0 && (e.preventDefault(), c.caret.call(o, v, k.begin, k.end))) : (k.begin = c.seekNext.call(o, k.begin, !0), \n                        k.end = c.seekNext.call(o, k.begin, !0), k.end < h.maskLength && k.end--, k.begin <= h.maskLength && (e.preventDefault(), \n                        c.caret.call(o, v, k.begin, k.end))) : e.shiftKey || (p.insertModeVisual && !1 === p.insertMode ? g === s.keys.ArrowRight ? setTimeout((function() {\n                            var e = c.caret.call(o, v);\n                            c.caret.call(o, v, e.begin);\n                        }), 0) : g === s.keys.ArrowLeft && setTimeout((function() {\n                            var e = c.translatePosition.call(o, v.inputmask.caretPos.begin);\n                            c.translatePosition.call(o, v.inputmask.caretPos.end);\n                            o.isRTL ? c.caret.call(o, v, e + (e === h.maskLength ? 0 : 1)) : c.caret.call(o, v, e - (0 === e ? 0 : 1));\n                        }), 0) : void 0 === o.keyEventHook || o.keyEventHook(e)) : u.isSelection.call(o, k) ? p.insertMode = !p.insertMode : (p.insertMode = !p.insertMode, \n                        c.caret.call(o, v, k.begin, k.begin));\n                        return o.isComposing = g == s.keys.Process || g == s.keys.Unidentified, o.ignorable = g.length > 1 && !(\"textarea\" === v.tagName.toLowerCase() && g == s.keys.Enter), \n                        y.keypressEvent.call(this, e, t, n, i, a);\n                    },\n                    keypressEvent: function(e, t, n, i, a) {\n                        var r = this.inputmask || this, o = r.opts, f = r.dependencyLib, p = r.maskset, d = r.el, h = f(d), v = e.key;\n                        if (!0 === t || e.ctrlKey && e.altKey && !r.ignorable || !(e.ctrlKey || e.metaKey || r.ignorable)) {\n                            if (v) {\n                                var m, g = t ? {\n                                    begin: a,\n                                    end: a\n                                } : c.caret.call(r, d);\n                                t || (v = o.substitutes[v] || v), p.writeOutBuffer = !0;\n                                var y = u.isValid.call(r, g, v, i, void 0, void 0, void 0, t);\n                                if (!1 !== y && (c.resetMaskSet.call(r, !0), m = void 0 !== y.caret ? y.caret : c.seekNext.call(r, y.pos.begin ? y.pos.begin : y.pos), \n                                p.p = m), m = o.numericInput && void 0 === y.caret ? c.seekPrevious.call(r, m) : m, \n                                !1 !== n && (setTimeout((function() {\n                                    o.onKeyValidation.call(d, v, y);\n                                }), 0), p.writeOutBuffer && !1 !== y)) {\n                                    var k = c.getBuffer.call(r);\n                                    (0, l.writeBuffer)(d, k, m, e, !0 !== t);\n                                }\n                                if (e.preventDefault(), t) return !1 !== y && (y.forwardPosition = m), y;\n                            }\n                        } else v === s.keys.Enter && r.undoValue !== r._valueGet(!0) && (r.undoValue = r._valueGet(!0), \n                        setTimeout((function() {\n                            h.trigger(\"change\");\n                        }), 0));\n                    },\n                    pasteEvent: (m = p().mark((function e(t) {\n                        var n, i, a, r, s, u;\n                        return p().wrap((function(e) {\n                            for (;;) switch (e.prev = e.next) {\n                              case 0:\n                                n = function(e, n, i, a, o) {\n                                    var s = c.caret.call(e, n, void 0, void 0, !0), u = i.substr(0, s.begin), f = i.substr(s.end, i.length);\n                                    if (u == (e.isRTL ? c.getBufferTemplate.call(e).slice().reverse() : c.getBufferTemplate.call(e)).slice(0, s.begin).join(\"\") && (u = \"\"), \n                                    f == (e.isRTL ? c.getBufferTemplate.call(e).slice().reverse() : c.getBufferTemplate.call(e)).slice(s.end).join(\"\") && (f = \"\"), \n                                    a = u + a + f, e.isRTL && !0 !== r.numericInput) {\n                                        a = a.split(\"\");\n                                        var p, h = d(c.getBufferTemplate.call(e));\n                                        try {\n                                            for (h.s(); !(p = h.n()).done; ) {\n                                                var v = p.value;\n                                                a[0] === v && a.shift();\n                                            }\n                                        } catch (e) {\n                                            h.e(e);\n                                        } finally {\n                                            h.f();\n                                        }\n                                        a = a.reverse().join(\"\");\n                                    }\n                                    var m = a;\n                                    if (\"function\" == typeof o) {\n                                        if (!1 === (m = o.call(e, m, r))) return !1;\n                                        m || (m = i);\n                                    }\n                                    (0, l.checkVal)(n, !0, !1, m.toString().split(\"\"), t);\n                                }, i = this, a = this.inputmask, r = a.opts, s = a._valueGet(!0), a.skipInputEvent = !0, \n                                t.clipboardData && t.clipboardData.getData ? u = t.clipboardData.getData(\"text/plain\") : o.default.clipboardData && o.default.clipboardData.getData && (u = o.default.clipboardData.getData(\"Text\")), \n                                n(a, i, s, u, r.onBeforePaste), t.preventDefault();\n\n                              case 7:\n                              case \"end\":\n                                return e.stop();\n                            }\n                        }), e, this);\n                    })), g = function() {\n                        var e = this, t = arguments;\n                        return new Promise((function(n, i) {\n                            var a = m.apply(e, t);\n                            function r(e) {\n                                v(a, n, i, r, o, \"next\", e);\n                            }\n                            function o(e) {\n                                v(a, n, i, r, o, \"throw\", e);\n                            }\n                            r(void 0);\n                        }));\n                    }, function(e) {\n                        return g.apply(this, arguments);\n                    }),\n                    inputFallBackEvent: function(e) {\n                        var t = this.inputmask, n = t.opts, i = t.dependencyLib;\n                        var a, o = this, u = o.inputmask._valueGet(!0), p = (t.isRTL ? c.getBuffer.call(t).slice().reverse() : c.getBuffer.call(t)).join(\"\"), d = c.caret.call(t, o, void 0, void 0, !0);\n                        if (p !== u) {\n                            if (a = function(e, i, a) {\n                                for (var r, o, l, s = e.substr(0, a.begin).split(\"\"), u = e.substr(a.begin).split(\"\"), p = i.substr(0, a.begin).split(\"\"), d = i.substr(a.begin).split(\"\"), h = s.length >= p.length ? s.length : p.length, v = u.length >= d.length ? u.length : d.length, m = \"\", g = [], y = \"~\"; s.length < h; ) s.push(y);\n                                for (;p.length < h; ) p.push(y);\n                                for (;u.length < v; ) u.unshift(y);\n                                for (;d.length < v; ) d.unshift(y);\n                                var k = s.concat(u), b = p.concat(d);\n                                for (o = 0, r = k.length; o < r; o++) switch (l = f.getPlaceholder.call(t, c.translatePosition.call(t, o)), \n                                m) {\n                                  case \"insertText\":\n                                    b[o - 1] === k[o] && a.begin == k.length - 1 && g.push(k[o]), o = r;\n                                    break;\n\n                                  case \"insertReplacementText\":\n                                  case \"deleteContentBackward\":\n                                    k[o] === y ? a.end++ : o = r;\n                                    break;\n\n                                  default:\n                                    k[o] !== b[o] && (k[o + 1] !== y && k[o + 1] !== l && void 0 !== k[o + 1] || (b[o] !== l || b[o + 1] !== y) && b[o] !== y ? b[o + 1] === y && b[o] === k[o + 1] ? (m = \"insertText\", \n                                    g.push(k[o]), a.begin--, a.end--) : k[o] !== l && k[o] !== y && (k[o + 1] === y || b[o] !== k[o] && b[o + 1] === k[o + 1]) ? (m = \"insertReplacementText\", \n                                    g.push(k[o]), a.begin--) : k[o] === y ? (m = \"deleteContentBackward\", (c.isMask.call(t, c.translatePosition.call(t, o), !0) || b[o] === n.radixPoint) && a.end++) : o = r : (m = \"insertText\", \n                                    g.push(k[o]), a.begin--, a.end--));\n                                }\n                                return {\n                                    action: m,\n                                    data: g,\n                                    caret: a\n                                };\n                            }(u, p, d), (o.inputmask.shadowRoot || o.ownerDocument).activeElement !== o && o.focus(), \n                            (0, l.writeBuffer)(o, c.getBuffer.call(t)), c.caret.call(t, o, d.begin, d.end, !0), \n                            !r.mobile && t.skipNextInsert && \"insertText\" === e.inputType && \"insertText\" === a.action && t.isComposing) return !1;\n                            switch (\"insertCompositionText\" === e.inputType && \"insertText\" === a.action && t.isComposing ? t.skipNextInsert = !0 : t.skipNextInsert = !1, \n                            a.action) {\n                              case \"insertText\":\n                              case \"insertReplacementText\":\n                                a.data.forEach((function(e, n) {\n                                    var a = new i.Event(\"keypress\");\n                                    a.key = e, t.ignorable = !1, y.keypressEvent.call(o, a);\n                                })), setTimeout((function() {\n                                    t.$el.trigger(\"keyup\");\n                                }), 0);\n                                break;\n\n                              case \"deleteContentBackward\":\n                                var h = new i.Event(\"keydown\");\n                                h.key = s.keys.Backspace, y.keyEvent.call(o, h);\n                                break;\n\n                              default:\n                                (0, l.applyInputValue)(o, u), c.caret.call(t, o, d.begin, d.end, !0);\n                            }\n                            e.preventDefault();\n                        }\n                    },\n                    setValueEvent: function(e) {\n                        var t = this.inputmask, n = t.dependencyLib, i = this, a = e && e.detail ? e.detail[0] : arguments[1];\n                        void 0 === a && (a = i.inputmask._valueGet(!0)), (0, l.applyInputValue)(i, a, new n.Event(\"input\")), \n                        (e.detail && void 0 !== e.detail[1] || void 0 !== arguments[2]) && c.caret.call(t, i, e.detail ? e.detail[1] : arguments[2]);\n                    },\n                    focusEvent: function(e) {\n                        var t = this.inputmask, n = t.opts, i = t && t._valueGet();\n                        n.showMaskOnFocus && i !== c.getBuffer.call(t).join(\"\") && (0, l.writeBuffer)(this, c.getBuffer.call(t), c.seekNext.call(t, c.getLastValidPosition.call(t))), \n                        !0 !== n.positionCaretOnTab || !1 !== t.mouseEnter || u.isComplete.call(t, c.getBuffer.call(t)) && -1 !== c.getLastValidPosition.call(t) || y.clickEvent.apply(this, [ e, !0 ]), \n                        t.undoValue = t && t._valueGet(!0);\n                    },\n                    invalidEvent: function(e) {\n                        this.inputmask.validationEvent = !0;\n                    },\n                    mouseleaveEvent: function() {\n                        var e = this.inputmask, t = e.opts, n = this;\n                        e.mouseEnter = !1, t.clearMaskOnLostFocus && (n.inputmask.shadowRoot || n.ownerDocument).activeElement !== n && (0, \n                        l.HandleNativePlaceholder)(n, e.originalPlaceholder);\n                    },\n                    clickEvent: function(e, t) {\n                        var n = this.inputmask;\n                        n.clicked++;\n                        var i = this;\n                        if ((i.inputmask.shadowRoot || i.ownerDocument).activeElement === i) {\n                            var a = c.determineNewCaretPosition.call(n, c.caret.call(n, i), t);\n                            void 0 !== a && c.caret.call(n, i, a);\n                        }\n                    },\n                    cutEvent: function(e) {\n                        var t = this.inputmask, n = t.maskset, i = this, a = c.caret.call(t, i), r = t.isRTL ? c.getBuffer.call(t).slice(a.end, a.begin) : c.getBuffer.call(t).slice(a.begin, a.end), f = t.isRTL ? r.reverse().join(\"\") : r.join(\"\");\n                        o.default.navigator && o.default.navigator.clipboard ? o.default.navigator.clipboard.writeText(f) : o.default.clipboardData && o.default.clipboardData.getData && o.default.clipboardData.setData(\"Text\", f), \n                        u.handleRemove.call(t, i, s.keys.Delete, a), (0, l.writeBuffer)(i, c.getBuffer.call(t), n.p, e, t.undoValue !== t._valueGet(!0));\n                    },\n                    blurEvent: function(e) {\n                        var t = this.inputmask, n = t.opts, i = t.dependencyLib;\n                        t.clicked = 0;\n                        var a = i(this), r = this;\n                        if (r.inputmask) {\n                            (0, l.HandleNativePlaceholder)(r, t.originalPlaceholder);\n                            var o = r.inputmask._valueGet(), s = c.getBuffer.call(t).slice();\n                            \"\" !== o && (n.clearMaskOnLostFocus && (-1 === c.getLastValidPosition.call(t) && o === c.getBufferTemplate.call(t).join(\"\") ? s = [] : l.clearOptionalTail.call(t, s)), \n                            !1 === u.isComplete.call(t, s) && (setTimeout((function() {\n                                a.trigger(\"incomplete\");\n                            }), 0), n.clearIncomplete && (c.resetMaskSet.call(t, !1), s = n.clearMaskOnLostFocus ? [] : c.getBufferTemplate.call(t).slice())), \n                            (0, l.writeBuffer)(r, s, void 0, e)), o = t._valueGet(!0), t.undoValue !== o && (\"\" != o || t.undoValue != c.getBufferTemplate.call(t).join(\"\") || t.undoValue == c.getBufferTemplate.call(t).join(\"\") && t.maskset.validPositions.length > 0) && (t.undoValue = o, \n                            a.trigger(\"change\"));\n                        }\n                    },\n                    mouseenterEvent: function() {\n                        var e = this.inputmask, t = e.opts.showMaskOnHover, n = this;\n                        if (e.mouseEnter = !0, (n.inputmask.shadowRoot || n.ownerDocument).activeElement !== n) {\n                            var i = (e.isRTL ? c.getBufferTemplate.call(e).slice().reverse() : c.getBufferTemplate.call(e)).join(\"\");\n                            t && (0, l.HandleNativePlaceholder)(n, i);\n                        }\n                    },\n                    submitEvent: function() {\n                        var e = this.inputmask, t = e.opts;\n                        e.undoValue !== e._valueGet(!0) && e.$el.trigger(\"change\"), -1 === c.getLastValidPosition.call(e) && e._valueGet && e._valueGet() === c.getBufferTemplate.call(e).join(\"\") && e._valueSet(\"\"), \n                        t.clearIncomplete && !1 === u.isComplete.call(e, c.getBuffer.call(e)) && e._valueSet(\"\"), \n                        t.removeMaskOnSubmit && (e._valueSet(e.unmaskedvalue(), !0), setTimeout((function() {\n                            (0, l.writeBuffer)(e.el, c.getBuffer.call(e));\n                        }), 0));\n                    },\n                    resetEvent: function() {\n                        var e = this.inputmask;\n                        e.refreshValue = !0, setTimeout((function() {\n                            (0, l.applyInputValue)(e.el, e._valueGet(!0));\n                        }), 0);\n                    }\n                };\n            },\n            9716: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.EventRuler = void 0;\n                var i, a = n(7760), r = (i = n(2394)) && i.__esModule ? i : {\n                    default: i\n                }, o = n(2839), l = n(8711);\n                t.EventRuler = {\n                    on: function(e, t, n) {\n                        var i = e.inputmask.dependencyLib, s = function(t) {\n                            t.originalEvent && (t = t.originalEvent || t, arguments[0] = t);\n                            var s, c = this, u = c.inputmask, f = u ? u.opts : void 0;\n                            if (void 0 === u && \"FORM\" !== this.nodeName) {\n                                var p = i.data(c, \"_inputmask_opts\");\n                                i(c).off(), p && new r.default(p).mask(c);\n                            } else {\n                                if ([ \"submit\", \"reset\", \"setvalue\" ].includes(t.type) || \"FORM\" === this.nodeName || !(c.disabled || c.readOnly && !(\"keydown\" === t.type && t.ctrlKey && t.key === o.keys.c || !1 === f.tabThrough && t.key === o.keys.Tab))) {\n                                    switch (t.type) {\n                                      case \"input\":\n                                        if (!0 === u.skipInputEvent) return u.skipInputEvent = !1, t.preventDefault();\n                                        break;\n\n                                      case \"click\":\n                                      case \"focus\":\n                                        return u.validationEvent ? (u.validationEvent = !1, e.blur(), (0, a.HandleNativePlaceholder)(e, (u.isRTL ? l.getBufferTemplate.call(u).slice().reverse() : l.getBufferTemplate.call(u)).join(\"\")), \n                                        setTimeout((function() {\n                                            e.focus();\n                                        }), f.validationEventTimeOut), !1) : (s = arguments, void setTimeout((function() {\n                                            e.inputmask && n.apply(c, s);\n                                        }), 0));\n                                    }\n                                    var d = n.apply(c, arguments);\n                                    return !1 === d && (t.preventDefault(), t.stopPropagation()), d;\n                                }\n                                t.preventDefault();\n                            }\n                        };\n                        [ \"submit\", \"reset\" ].includes(t) ? (s = s.bind(e), null !== e.form && i(e.form).on(t, s)) : i(e).on(t, s), \n                        e.inputmask.events[t] = e.inputmask.events[t] || [], e.inputmask.events[t].push(s);\n                    },\n                    off: function(e, t) {\n                        if (e.inputmask && e.inputmask.events) {\n                            var n = e.inputmask.dependencyLib, i = e.inputmask.events;\n                            for (var a in t && ((i = [])[t] = e.inputmask.events[t]), i) {\n                                for (var r = i[a]; r.length > 0; ) {\n                                    var o = r.pop();\n                                    [ \"submit\", \"reset\" ].includes(a) ? null !== e.form && n(e.form).off(a, o) : n(e).off(a, o);\n                                }\n                                delete e.inputmask.events[a];\n                            }\n                        }\n                    }\n                };\n            },\n            219: function(e, t, n) {\n                var i = p(n(7184)), a = p(n(2394)), r = n(2839), o = n(8711), l = n(4713);\n                function s(e, t) {\n                    return function(e) {\n                        if (Array.isArray(e)) return e;\n                    }(e) || function(e, t) {\n                        var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                        if (null != n) {\n                            var i, a, r, o, l = [], s = !0, c = !1;\n                            try {\n                                if (r = (n = n.call(e)).next, 0 === t) {\n                                    if (Object(n) !== n) return;\n                                    s = !1;\n                                } else for (;!(s = (i = r.call(n)).done) && (l.push(i.value), l.length !== t); s = !0) ;\n                            } catch (e) {\n                                c = !0, a = e;\n                            } finally {\n                                try {\n                                    if (!s && null != n.return && (o = n.return(), Object(o) !== o)) return;\n                                } finally {\n                                    if (c) throw a;\n                                }\n                            }\n                            return l;\n                        }\n                    }(e, t) || function(e, t) {\n                        if (!e) return;\n                        if (\"string\" == typeof e) return c(e, t);\n                        var n = Object.prototype.toString.call(e).slice(8, -1);\n                        \"Object\" === n && e.constructor && (n = e.constructor.name);\n                        if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                        if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return c(e, t);\n                    }(e, t) || function() {\n                        throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                    }();\n                }\n                function c(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                function u(e) {\n                    return u = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, u(e);\n                }\n                function f(e, t) {\n                    for (var n = 0; n < t.length; n++) {\n                        var i = t[n];\n                        i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), \n                        Object.defineProperty(e, (a = i.key, r = void 0, r = function(e, t) {\n                            if (\"object\" !== u(e) || null === e) return e;\n                            var n = e[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                                var i = n.call(e, t || \"default\");\n                                if (\"object\" !== u(i)) return i;\n                                throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n                            }\n                            return (\"string\" === t ? String : Number)(e);\n                        }(a, \"string\"), \"symbol\" === u(r) ? r : String(r)), i);\n                    }\n                    var a, r;\n                }\n                function p(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                n(1313);\n                var d = a.default.dependencyLib, h = function() {\n                    function e(t, n, i, a) {\n                        !function(e, t) {\n                            if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n                        }(this, e), this.mask = t, this.format = n, this.opts = i, this.inputmask = a, this._date = new Date(1, 0, 1), \n                        this.initDateObject(t, this.opts, this.inputmask);\n                    }\n                    var t, n, i;\n                    return t = e, (n = [ {\n                        key: \"date\",\n                        get: function() {\n                            return void 0 === this._date && (this._date = new Date(1, 0, 1), this.initDateObject(void 0, this.opts, this.inputmask)), \n                            this._date;\n                        }\n                    }, {\n                        key: \"initDateObject\",\n                        value: function(e, t, n) {\n                            var i;\n                            for (P(t).lastIndex = 0; i = P(t).exec(this.format); ) {\n                                var a = /\\d+$/.exec(i[0]), r = a ? i[0][0] + \"x\" : i[0], o = void 0;\n                                if (void 0 !== e) {\n                                    if (a) {\n                                        var s = P(t).lastIndex, c = j.call(n, i.index, t, n && n.maskset);\n                                        P(t).lastIndex = s, o = e.slice(0, e.indexOf(c.nextMatch[0]));\n                                    } else {\n                                        for (var u = i[0][0], f = i.index; n && (t.placeholder[l.getTest.call(n, f).match.placeholder] || l.getTest.call(n, f).match.placeholder) === u; ) f++;\n                                        var p = f - i.index;\n                                        o = e.slice(0, p || y[r] && y[r][4] || r.length);\n                                    }\n                                    e = e.slice(o.length);\n                                }\n                                Object.prototype.hasOwnProperty.call(y, r) && this.setValue(this, o, r, y[r][2], y[r][1]);\n                            }\n                        }\n                    }, {\n                        key: \"setValue\",\n                        value: function(e, t, n, i, a) {\n                            if (void 0 !== t) switch (i) {\n                              case \"ampm\":\n                                e[i] = t, e[\"raw\" + i] = t.replace(/\\s/g, \"_\");\n                                break;\n\n                              case \"month\":\n                                if (\"mmm\" === n || \"mmmm\" === n) {\n                                    e[i] = _(\"mmm\" === n ? m.monthNames.slice(0, 12).findIndex((function(e) {\n                                        return t.toLowerCase() === e.toLowerCase();\n                                    })) + 1 : m.monthNames.slice(12, 24).findIndex((function(e) {\n                                        return t.toLowerCase() === e.toLowerCase();\n                                    })) + 1, 2), e[i] = \"00\" === e[i] ? \"\" : e[i].toString(), e[\"raw\" + i] = e[i];\n                                    break;\n                                }\n\n                              default:\n                                e[i] = t.replace(/[^0-9]/g, \"0\"), e[\"raw\" + i] = t.replace(/\\s/g, \"_\");\n                            }\n                            if (void 0 !== a) {\n                                var r = e[i];\n                                (\"day\" === i && 29 === parseInt(r) || \"month\" === i && 2 === parseInt(r)) && (29 !== parseInt(e.day) || 2 !== parseInt(e.month) || \"\" !== e.year && void 0 !== e.year || e._date.setFullYear(2012, 1, 29)), \n                                \"day\" === i && (g = !0, 0 === parseInt(r) && (r = 1)), \"month\" === i && (g = !0), \n                                \"year\" === i && (g = !0, r.length < y[n][4] && (r = _(r, y[n][4], !0))), (\"\" !== r && !isNaN(r) || \"ampm\" === i) && a.call(e._date, r);\n                            }\n                        }\n                    }, {\n                        key: \"reset\",\n                        value: function() {\n                            this._date = new Date(1, 0, 1);\n                        }\n                    }, {\n                        key: \"reInit\",\n                        value: function() {\n                            this._date = void 0, this.date;\n                        }\n                    } ]) && f(t.prototype, n), i && f(t, i), Object.defineProperty(t, \"prototype\", {\n                        writable: !1\n                    }), e;\n                }(), v = (new Date).getFullYear(), m = a.default.prototype.i18n, g = !1, y = {\n                    d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n                    dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n                        return _(Date.prototype.getDate.call(this), 2);\n                    } ],\n                    ddd: [ \"\" ],\n                    dddd: [ \"\" ],\n                    m: [ \"[1-9]|1[012]\", function(e) {\n                        var t = e ? parseInt(e) : 0;\n                        return t > 0 && t--, Date.prototype.setMonth.call(this, t);\n                    }, \"month\", function() {\n                        return Date.prototype.getMonth.call(this) + 1;\n                    } ],\n                    mm: [ \"0[1-9]|1[012]\", function(e) {\n                        var t = e ? parseInt(e) : 0;\n                        return t > 0 && t--, Date.prototype.setMonth.call(this, t);\n                    }, \"month\", function() {\n                        return _(Date.prototype.getMonth.call(this) + 1, 2);\n                    } ],\n                    mmm: [ m.monthNames.slice(0, 12).join(\"|\"), function(e) {\n                        var t = m.monthNames.slice(0, 12).findIndex((function(t) {\n                            return e.toLowerCase() === t.toLowerCase();\n                        }));\n                        return -1 !== t && Date.prototype.setMonth.call(this, t);\n                    }, \"month\", function() {\n                        return m.monthNames.slice(0, 12)[Date.prototype.getMonth.call(this)];\n                    } ],\n                    mmmm: [ m.monthNames.slice(12, 24).join(\"|\"), function(e) {\n                        var t = m.monthNames.slice(12, 24).findIndex((function(t) {\n                            return e.toLowerCase() === t.toLowerCase();\n                        }));\n                        return -1 !== t && Date.prototype.setMonth.call(this, t);\n                    }, \"month\", function() {\n                        return m.monthNames.slice(12, 24)[Date.prototype.getMonth.call(this)];\n                    } ],\n                    yy: [ \"[0-9]{2}\", function(e) {\n                        var t = (new Date).getFullYear().toString().slice(0, 2);\n                        Date.prototype.setFullYear.call(this, \"\".concat(t).concat(e));\n                    }, \"year\", function() {\n                        return _(Date.prototype.getFullYear.call(this), 2);\n                    }, 2 ],\n                    yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n                        return _(Date.prototype.getFullYear.call(this), 4);\n                    }, 4 ],\n                    h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n                    hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n                        return _(Date.prototype.getHours.call(this), 2);\n                    } ],\n                    hx: [ function(e) {\n                        return \"[0-9]{\".concat(e, \"}\");\n                    }, Date.prototype.setHours, \"hours\", function(e) {\n                        return Date.prototype.getHours;\n                    } ],\n                    H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n                    HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n                        return _(Date.prototype.getHours.call(this), 2);\n                    } ],\n                    Hx: [ function(e) {\n                        return \"[0-9]{\".concat(e, \"}\");\n                    }, Date.prototype.setHours, \"hours\", function(e) {\n                        return function() {\n                            return _(Date.prototype.getHours.call(this), e);\n                        };\n                    } ],\n                    M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n                    MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n                        return _(Date.prototype.getMinutes.call(this), 2);\n                    } ],\n                    s: [ \"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds ],\n                    ss: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n                        return _(Date.prototype.getSeconds.call(this), 2);\n                    } ],\n                    l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n                        return _(Date.prototype.getMilliseconds.call(this), 3);\n                    }, 3 ],\n                    L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n                        return _(Date.prototype.getMilliseconds.call(this), 2);\n                    }, 2 ],\n                    t: [ \"[ap]\", b, \"ampm\", x, 1 ],\n                    tt: [ \"[ap]m\", b, \"ampm\", x, 2 ],\n                    T: [ \"[AP]\", b, \"ampm\", x, 1 ],\n                    TT: [ \"[AP]M\", b, \"ampm\", x, 2 ],\n                    Z: [ \".*\", void 0, \"Z\", function() {\n                        var e = this.toString().match(/\\((.+)\\)/)[1];\n                        e.includes(\" \") && (e = (e = e.replace(\"-\", \" \").toUpperCase()).split(\" \").map((function(e) {\n                            return s(e, 1)[0];\n                        })).join(\"\"));\n                        return e;\n                    } ],\n                    o: [ \"\" ],\n                    S: [ \"\" ]\n                }, k = {\n                    isoDate: \"yyyy-mm-dd\",\n                    isoTime: \"HH:MM:ss\",\n                    isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n                    isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n                };\n                function b(e) {\n                    var t = this.getHours();\n                    e.toLowerCase().includes(\"p\") ? this.setHours(t + 12) : e.toLowerCase().includes(\"a\") && t >= 12 && this.setHours(t - 12);\n                }\n                function x() {\n                    var e = this.getHours();\n                    return (e = e || 12) >= 12 ? \"PM\" : \"AM\";\n                }\n                function w(e) {\n                    var t = /\\d+$/.exec(e[0]);\n                    if (t && void 0 !== t[0]) {\n                        var n = y[e[0][0] + \"x\"].slice(\"\");\n                        return n[0] = n[0](t[0]), n[3] = n[3](t[0]), n;\n                    }\n                    if (y[e[0]]) return y[e[0]];\n                }\n                function P(e) {\n                    if (!e.tokenizer) {\n                        var t = [], n = [];\n                        for (var i in y) if (/\\.*x$/.test(i)) {\n                            var a = i[0] + \"\\\\d+\";\n                            -1 === n.indexOf(a) && n.push(a);\n                        } else -1 === t.indexOf(i[0]) && t.push(i[0]);\n                        e.tokenizer = \"(\" + (n.length > 0 ? n.join(\"|\") + \"|\" : \"\") + t.join(\"+|\") + \")+?|.\", \n                        e.tokenizer = new RegExp(e.tokenizer, \"g\");\n                    }\n                    return e.tokenizer;\n                }\n                function S(e, t, n) {\n                    if (!g) return !0;\n                    if (void 0 === e.rawday || !isFinite(e.rawday) && new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day || \"29\" == e.day && (!isFinite(e.rawyear) || void 0 === e.rawyear || \"\" === e.rawyear) || new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day) return t;\n                    if (\"29\" == e.day) {\n                        var i = j.call(this, t.pos, n, this.maskset);\n                        if (i.targetMatch && \"yyyy\" === i.targetMatch[0] && t.pos - i.targetMatchIndex == 2) return t.remove = t.pos + 1, \n                        t;\n                    } else if (2 == e.date.getMonth() && \"30\" == e.day && void 0 !== t.c) return e.day = \"03\", \n                    e.date.setDate(3), e.date.setMonth(1), t.insert = [ {\n                        pos: t.pos,\n                        c: \"0\"\n                    }, {\n                        pos: t.pos + 1,\n                        c: t.c\n                    } ], t.caret = o.seekNext.call(this, t.pos + 1), t;\n                    return !1;\n                }\n                function O(e, t, n, a) {\n                    var r, o, l = \"\", s = 0, c = {};\n                    for (P(n).lastIndex = 0; r = P(n).exec(e); ) {\n                        if (void 0 === t) if (o = w(r)) l += \"(\" + o[0] + \")\", n.placeholder && \"\" !== n.placeholder ? (c[s] = n.placeholder[r.index % n.placeholder.length], \n                        c[n.placeholder[r.index % n.placeholder.length]] = r[0].charAt(0)) : c[s] = r[0].charAt(0); else switch (r[0]) {\n                          case \"[\":\n                            l += \"(\";\n                            break;\n\n                          case \"]\":\n                            l += \")?\";\n                            break;\n\n                          default:\n                            l += (0, i.default)(r[0]), c[s] = r[0].charAt(0);\n                        } else if (o = w(r)) if (!0 !== a && o[3]) l += o[3].call(t.date); else o[2] ? l += t[\"raw\" + o[2]] : l += r[0]; else l += r[0];\n                        s++;\n                    }\n                    return void 0 === t && (n.placeholder = c), l;\n                }\n                function _(e, t, n) {\n                    for (e = String(e), t = t || 2; e.length < t; ) e = n ? e + \"0\" : \"0\" + e;\n                    return e;\n                }\n                function M(e, t, n) {\n                    return \"string\" == typeof e ? new h(e, t, n, this) : e && \"object\" === u(e) && Object.prototype.hasOwnProperty.call(e, \"date\") ? e : void 0;\n                }\n                function E(e, t) {\n                    return O(t.inputFormat, {\n                        date: e\n                    }, t);\n                }\n                function j(e, t, n) {\n                    var i, a, r = this, o = n && n.tests[e] ? t.placeholder[n.tests[e][0].match.placeholder] || n.tests[e][0].match.placeholder : \"\", s = 0, c = 0;\n                    for (P(t).lastIndex = 0; a = P(t).exec(t.inputFormat); ) {\n                        var u = /\\d+$/.exec(a[0]);\n                        if (u) c = parseInt(u[0]); else {\n                            for (var f = a[0][0], p = s; r && (t.placeholder[l.getTest.call(r, p).match.placeholder] || l.getTest.call(r, p).match.placeholder) === f; ) p++;\n                            0 === (c = p - s) && (c = a[0].length);\n                        }\n                        if (s += c, -1 != a[0].indexOf(o) || s >= e + 1) {\n                            i = a, a = P(t).exec(t.inputFormat);\n                            break;\n                        }\n                    }\n                    return {\n                        targetMatchIndex: s - c,\n                        nextMatch: a,\n                        targetMatch: i\n                    };\n                }\n                a.default.extendAliases({\n                    datetime: {\n                        mask: function(e) {\n                            return e.numericInput = !1, y.S = m.ordinalSuffix.join(\"|\"), e.inputFormat = k[e.inputFormat] || e.inputFormat, \n                            e.displayFormat = k[e.displayFormat] || e.displayFormat || e.inputFormat, e.outputFormat = k[e.outputFormat] || e.outputFormat || e.inputFormat, \n                            e.regex = O(e.inputFormat, void 0, e), e.min = M(e.min, e.inputFormat, e), e.max = M(e.max, e.inputFormat, e), \n                            null;\n                        },\n                        placeholder: \"\",\n                        inputFormat: \"isoDateTime\",\n                        displayFormat: null,\n                        outputFormat: null,\n                        min: null,\n                        max: null,\n                        skipOptionalPartCharacter: \"\",\n                        preValidation: function(e, t, n, i, a, r, o, l) {\n                            if (l) return !0;\n                            if (isNaN(n) && e[t] !== n) {\n                                var s = j.call(this, t, a, r);\n                                if (s.nextMatch && s.nextMatch[0] === n && s.targetMatch[0].length > 1) {\n                                    var c = w(s.targetMatch)[0];\n                                    if (new RegExp(c).test(\"0\" + e[t - 1])) return e[t] = e[t - 1], e[t - 1] = \"0\", \n                                    {\n                                        fuzzy: !0,\n                                        buffer: e,\n                                        refreshFromBuffer: {\n                                            start: t - 1,\n                                            end: t + 1\n                                        },\n                                        pos: t + 1\n                                    };\n                                }\n                            }\n                            return !0;\n                        },\n                        postValidation: function(e, t, n, i, a, r, o, s) {\n                            var c, u, f = this;\n                            if (o) return !0;\n                            if (!1 === i && (((c = j.call(f, t + 1, a, r)).targetMatch && c.targetMatchIndex === t && c.targetMatch[0].length > 1 && void 0 !== y[c.targetMatch[0]] || (c = j.call(f, t + 2, a, r)).targetMatch && c.targetMatchIndex === t + 1 && c.targetMatch[0].length > 1 && void 0 !== y[c.targetMatch[0]]) && (u = w(c.targetMatch)[0]), \n                            void 0 !== u && (void 0 !== r.validPositions[t + 1] && new RegExp(u).test(n + \"0\") ? (e[t] = n, \n                            e[t + 1] = \"0\", i = {\n                                pos: t + 2,\n                                caret: t\n                            }) : new RegExp(u).test(\"0\" + n) && (e[t] = \"0\", e[t + 1] = n, i = {\n                                pos: t + 2\n                            })), !1 === i)) return i;\n                            if (i.fuzzy && (e = i.buffer, t = i.pos), (c = j.call(f, t, a, r)).targetMatch && c.targetMatch[0] && void 0 !== y[c.targetMatch[0]]) {\n                                var p = w(c.targetMatch);\n                                u = p[0];\n                                var d = e.slice(c.targetMatchIndex, c.targetMatchIndex + c.targetMatch[0].length);\n                                if (!1 === new RegExp(u).test(d.join(\"\")) && 2 === c.targetMatch[0].length && r.validPositions[c.targetMatchIndex] && r.validPositions[c.targetMatchIndex + 1] && (r.validPositions[c.targetMatchIndex + 1].input = \"0\"), \n                                \"year\" == p[2]) for (var h = l.getMaskTemplate.call(f, !1, 1, void 0, !0), m = t + 1; m < e.length; m++) e[m] = h[m], \n                                r.validPositions.splice(t + 1, 1);\n                            }\n                            var g = i, k = M.call(f, e.join(\"\"), a.inputFormat, a);\n                            return g && !isNaN(k.date.getTime()) && (a.prefillYear && (g = function(e, t, n) {\n                                if (e.year !== e.rawyear) {\n                                    var i = v.toString(), a = e.rawyear.replace(/[^0-9]/g, \"\"), r = i.slice(0, a.length), o = i.slice(a.length);\n                                    if (2 === a.length && a === r) {\n                                        var l = new Date(v, e.month - 1, e.day);\n                                        e.day == l.getDate() && (!n.max || n.max.date.getTime() >= l.getTime()) && (e.date.setFullYear(v), \n                                        e.year = i, t.insert = [ {\n                                            pos: t.pos + 1,\n                                            c: o[0]\n                                        }, {\n                                            pos: t.pos + 2,\n                                            c: o[1]\n                                        } ]);\n                                    }\n                                }\n                                return t;\n                            }(k, g, a)), g = function(e, t, n, i, a) {\n                                if (!t) return t;\n                                if (t && n.min && !isNaN(n.min.date.getTime())) {\n                                    var r;\n                                    for (e.reset(), P(n).lastIndex = 0; r = P(n).exec(n.inputFormat); ) {\n                                        var o;\n                                        if ((o = w(r)) && o[3]) {\n                                            for (var l = o[1], s = e[o[2]], c = n.min[o[2]], u = n.max ? n.max[o[2]] : c + 1, f = [], p = !1, d = 0; d < c.length; d++) void 0 !== i.validPositions[d + r.index] || p ? (f[d] = s[d], \n                                            p = p || s[d] > c[d]) : (d + r.index == 0 && s[d] < c[d] ? (f[d] = s[d], p = !0) : f[d] = c[d], \n                                            \"year\" === o[2] && s.length - 1 == d && c != u && (f = (parseInt(f.join(\"\")) + 1).toString().split(\"\")), \n                                            \"ampm\" === o[2] && c != u && n.min.date.getTime() > e.date.getTime() && (f[d] = u[d]));\n                                            l.call(e._date, f.join(\"\"));\n                                        }\n                                    }\n                                    t = n.min.date.getTime() <= e.date.getTime(), e.reInit();\n                                }\n                                return t && n.max && (isNaN(n.max.date.getTime()) || (t = n.max.date.getTime() >= e.date.getTime())), \n                                t;\n                            }(k, g = S.call(f, k, g, a), a, r)), void 0 !== t && g && i.pos !== t ? {\n                                buffer: O(a.inputFormat, k, a).split(\"\"),\n                                refreshFromBuffer: {\n                                    start: t,\n                                    end: i.pos\n                                },\n                                pos: i.caret || i.pos\n                            } : g;\n                        },\n                        onKeyDown: function(e, t, n, i) {\n                            e.ctrlKey && e.key === r.keys.ArrowRight && (this.inputmask._valueSet(E(new Date, i)), \n                            d(this).trigger(\"setvalue\"));\n                        },\n                        onUnMask: function(e, t, n) {\n                            return t ? O(n.outputFormat, M.call(this, e, n.inputFormat, n), n, !0) : t;\n                        },\n                        casing: function(e, t, n, i) {\n                            if (0 == t.nativeDef.indexOf(\"[ap]\")) return e.toLowerCase();\n                            if (0 == t.nativeDef.indexOf(\"[AP]\")) return e.toUpperCase();\n                            var a = l.getTest.call(this, [ n - 1 ]);\n                            return 0 == a.match.def.indexOf(\"[AP]\") || 0 === n || a && a.input === String.fromCharCode(r.keyCode.Space) || a && a.match.def === String.fromCharCode(r.keyCode.Space) ? e.toUpperCase() : e.toLowerCase();\n                        },\n                        onBeforeMask: function(e, t) {\n                            return \"[object Date]\" === Object.prototype.toString.call(e) && (e = E(e, t)), e;\n                        },\n                        insertMode: !1,\n                        insertModeVisual: !1,\n                        shiftPositions: !1,\n                        keepStatic: !1,\n                        inputmode: \"numeric\",\n                        prefillYear: !0\n                    }\n                });\n            },\n            1313: function(e, t, n) {\n                var i, a = (i = n(2394)) && i.__esModule ? i : {\n                    default: i\n                };\n                a.default.dependencyLib.extend(!0, a.default.prototype.i18n, {\n                    dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n                    monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n                    ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n                });\n            },\n            3851: function(e, t, n) {\n                var i, a = (i = n(2394)) && i.__esModule ? i : {\n                    default: i\n                }, r = n(8711), o = n(4713);\n                function l(e) {\n                    return function(e) {\n                        if (Array.isArray(e)) return s(e);\n                    }(e) || function(e) {\n                        if (\"undefined\" != typeof Symbol && null != e[Symbol.iterator] || null != e[\"@@iterator\"]) return Array.from(e);\n                    }(e) || function(e, t) {\n                        if (!e) return;\n                        if (\"string\" == typeof e) return s(e, t);\n                        var n = Object.prototype.toString.call(e).slice(8, -1);\n                        \"Object\" === n && e.constructor && (n = e.constructor.name);\n                        if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                        if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return s(e, t);\n                    }(e) || function() {\n                        throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                    }();\n                }\n                function s(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                a.default.extendDefinitions({\n                    A: {\n                        validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        casing: \"upper\"\n                    },\n                    \"&\": {\n                        validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        casing: \"upper\"\n                    },\n                    \"#\": {\n                        validator: \"[0-9A-Fa-f]\",\n                        casing: \"upper\"\n                    }\n                });\n                var c = /25[0-5]|2[0-4][0-9]|[01][0-9][0-9]/;\n                function u(e, t, n, i, a) {\n                    if (n - 1 > -1 && \".\" !== t.buffer[n - 1] ? (e = t.buffer[n - 1] + e, e = n - 2 > -1 && \".\" !== t.buffer[n - 2] ? t.buffer[n - 2] + e : \"0\" + e) : e = \"00\" + e, \n                    a.greedy && parseInt(e) > 255 && c.test(\"00\" + e.charAt(2))) {\n                        var r = [].concat(l(t.buffer.slice(0, n)), [ \".\", e.charAt(2) ]);\n                        if (r.join(\"\").match(/\\./g).length < 4) return {\n                            refreshFromBuffer: !0,\n                            buffer: r,\n                            caret: n + 2\n                        };\n                    }\n                    return c.test(e);\n                }\n                a.default.extendAliases({\n                    cssunit: {\n                        regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n                    },\n                    url: {\n                        regex: \"(https?|ftp)://.*\",\n                        autoUnmask: !1,\n                        keepStatic: !1,\n                        tabThrough: !0\n                    },\n                    ip: {\n                        mask: \"i{1,3}.j{1,3}.k{1,3}.l{1,3}\",\n                        definitions: {\n                            i: {\n                                validator: u\n                            },\n                            j: {\n                                validator: u\n                            },\n                            k: {\n                                validator: u\n                            },\n                            l: {\n                                validator: u\n                            }\n                        },\n                        onUnMask: function(e, t, n) {\n                            return e;\n                        },\n                        inputmode: \"decimal\",\n                        substitutes: {\n                            \",\": \".\"\n                        }\n                    },\n                    email: {\n                        mask: function(e) {\n                            var t = e.separator, n = e.quantifier, i = \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\", a = i;\n                            if (t) for (var r = 0; r < n; r++) a += \"[\".concat(t).concat(i, \"]\");\n                            return a;\n                        },\n                        greedy: !1,\n                        casing: \"lower\",\n                        separator: null,\n                        quantifier: 5,\n                        skipOptionalPartCharacter: \"\",\n                        onBeforePaste: function(e, t) {\n                            return (e = e.toLowerCase()).replace(\"mailto:\", \"\");\n                        },\n                        definitions: {\n                            \"*\": {\n                                validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n                            },\n                            \"-\": {\n                                validator: \"[0-9A-Za-z-]\"\n                            }\n                        },\n                        onUnMask: function(e, t, n) {\n                            return e;\n                        },\n                        inputmode: \"email\"\n                    },\n                    mac: {\n                        mask: \"##:##:##:##:##:##\"\n                    },\n                    vin: {\n                        mask: \"V{13}9{4}\",\n                        definitions: {\n                            V: {\n                                validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n                                casing: \"upper\"\n                            }\n                        },\n                        clearIncomplete: !0,\n                        autoUnmask: !0\n                    },\n                    ssn: {\n                        mask: \"999-99-9999\",\n                        postValidation: function(e, t, n, i, a, l, s) {\n                            var c = o.getMaskTemplate.call(this, !0, r.getLastValidPosition.call(this), !0, !0);\n                            return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(c.join(\"\"));\n                        }\n                    }\n                });\n            },\n            207: function(e, t, n) {\n                var i = l(n(7184)), a = l(n(2394)), r = n(2839), o = n(8711);\n                function l(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var s = a.default.dependencyLib;\n                function c(e, t) {\n                    for (var n = \"\", i = 0; i < e.length; i++) a.default.prototype.definitions[e.charAt(i)] || t.definitions[e.charAt(i)] || t.optionalmarker[0] === e.charAt(i) || t.optionalmarker[1] === e.charAt(i) || t.quantifiermarker[0] === e.charAt(i) || t.quantifiermarker[1] === e.charAt(i) || t.groupmarker[0] === e.charAt(i) || t.groupmarker[1] === e.charAt(i) || t.alternatormarker === e.charAt(i) ? n += \"\\\\\" + e.charAt(i) : n += e.charAt(i);\n                    return n;\n                }\n                function u(e, t, n, i) {\n                    if (e.length > 0 && t > 0 && (!n.digitsOptional || i)) {\n                        var a = e.indexOf(n.radixPoint), r = !1;\n                        n.negationSymbol.back === e[e.length - 1] && (r = !0, e.length--), -1 === a && (e.push(n.radixPoint), \n                        a = e.length - 1);\n                        for (var o = 1; o <= t; o++) isFinite(e[a + o]) || (e[a + o] = \"0\");\n                    }\n                    return r && e.push(n.negationSymbol.back), e;\n                }\n                function f(e, t) {\n                    var n = 0;\n                    for (var i in \"+\" === e && (n = o.seekNext.call(this, t.validPositions.length - 1)), \n                    t.tests) if ((i = parseInt(i)) >= n) for (var a = 0, r = t.tests[i].length; a < r; a++) if ((void 0 === t.validPositions[i] || \"-\" === e) && t.tests[i][a].match.def === e) return i + (void 0 !== t.validPositions[i] && \"-\" !== e ? 1 : 0);\n                    return n;\n                }\n                function p(e, t) {\n                    for (var n = -1, i = 0, a = t.validPositions.length; i < a; i++) {\n                        var r = t.validPositions[i];\n                        if (r && r.match.def === e) {\n                            n = i;\n                            break;\n                        }\n                    }\n                    return n;\n                }\n                function d(e, t, n, i, a) {\n                    var r = t.buffer ? t.buffer.indexOf(a.radixPoint) : -1, o = (-1 !== r || i && a.jitMasking) && new RegExp(a.definitions[9].validator).test(e);\n                    return !i && a._radixDance && -1 !== r && o && null == t.validPositions[r] ? {\n                        insert: {\n                            pos: r === n ? r + 1 : r,\n                            c: a.radixPoint\n                        },\n                        pos: n\n                    } : o;\n                }\n                a.default.extendAliases({\n                    numeric: {\n                        mask: function(e) {\n                            e.repeat = 0, e.groupSeparator === e.radixPoint && e.digits && \"0\" !== e.digits && (\".\" === e.radixPoint ? e.groupSeparator = \",\" : \",\" === e.radixPoint ? e.groupSeparator = \".\" : e.groupSeparator = \"\"), \n                            \" \" === e.groupSeparator && (e.skipOptionalPartCharacter = void 0), e.placeholder.length > 1 && (e.placeholder = e.placeholder.charAt(0)), \n                            \"radixFocus\" === e.positionCaretOnClick && \"\" === e.placeholder && (e.positionCaretOnClick = \"lvp\");\n                            var t = \"0\", n = e.radixPoint;\n                            !0 === e.numericInput && void 0 === e.__financeInput ? (t = \"1\", e.positionCaretOnClick = \"radixFocus\" === e.positionCaretOnClick ? \"lvp\" : e.positionCaretOnClick, \n                            e.digitsOptional = !1, isNaN(e.digits) && (e.digits = 2), e._radixDance = !1, n = \",\" === e.radixPoint ? \"?\" : \"!\", \n                            \"\" !== e.radixPoint && void 0 === e.definitions[n] && (e.definitions[n] = {}, e.definitions[n].validator = \"[\" + e.radixPoint + \"]\", \n                            e.definitions[n].placeholder = e.radixPoint, e.definitions[n].static = !0, e.definitions[n].generated = !0)) : (e.__financeInput = !1, \n                            e.numericInput = !0);\n                            var a, r = \"[+]\";\n                            if (r += c(e.prefix, e), \"\" !== e.groupSeparator ? (void 0 === e.definitions[e.groupSeparator] && (e.definitions[e.groupSeparator] = {}, \n                            e.definitions[e.groupSeparator].validator = \"[\" + e.groupSeparator + \"]\", e.definitions[e.groupSeparator].placeholder = e.groupSeparator, \n                            e.definitions[e.groupSeparator].static = !0, e.definitions[e.groupSeparator].generated = !0), \n                            r += e._mask(e)) : r += \"9{+}\", void 0 !== e.digits && 0 !== e.digits) {\n                                var o = e.digits.toString().split(\",\");\n                                isFinite(o[0]) && o[1] && isFinite(o[1]) ? r += n + t + \"{\" + e.digits + \"}\" : (isNaN(e.digits) || parseInt(e.digits) > 0) && (e.digitsOptional || e.jitMasking ? (a = r + n + t + \"{0,\" + e.digits + \"}\", \n                                e.keepStatic = !0) : r += n + t + \"{\" + e.digits + \"}\");\n                            } else e.inputmode = \"numeric\";\n                            return r += c(e.suffix, e), r += \"[-]\", a && (r = [ a + c(e.suffix, e) + \"[-]\", r ]), \n                            e.greedy = !1, function(e) {\n                                void 0 === e.parseMinMaxOptions && (null !== e.min && (e.min = e.min.toString().replace(new RegExp((0, \n                                i.default)(e.groupSeparator), \"g\"), \"\"), \",\" === e.radixPoint && (e.min = e.min.replace(e.radixPoint, \".\")), \n                                e.min = isFinite(e.min) ? parseFloat(e.min) : NaN, isNaN(e.min) && (e.min = Number.MIN_VALUE)), \n                                null !== e.max && (e.max = e.max.toString().replace(new RegExp((0, i.default)(e.groupSeparator), \"g\"), \"\"), \n                                \",\" === e.radixPoint && (e.max = e.max.replace(e.radixPoint, \".\")), e.max = isFinite(e.max) ? parseFloat(e.max) : NaN, \n                                isNaN(e.max) && (e.max = Number.MAX_VALUE)), e.parseMinMaxOptions = \"done\");\n                            }(e), \"\" !== e.radixPoint && e.substituteRadixPoint && (e.substitutes[\".\" == e.radixPoint ? \",\" : \".\"] = e.radixPoint), \n                            r;\n                        },\n                        _mask: function(e) {\n                            return \"(\" + e.groupSeparator + \"999){+|1}\";\n                        },\n                        digits: \"*\",\n                        digitsOptional: !0,\n                        enforceDigitsOnBlur: !1,\n                        radixPoint: \".\",\n                        positionCaretOnClick: \"radixFocus\",\n                        _radixDance: !0,\n                        groupSeparator: \"\",\n                        allowMinus: !0,\n                        negationSymbol: {\n                            front: \"-\",\n                            back: \"\"\n                        },\n                        prefix: \"\",\n                        suffix: \"\",\n                        min: null,\n                        max: null,\n                        SetMaxOnOverflow: !1,\n                        step: 1,\n                        inputType: \"text\",\n                        unmaskAsNumber: !1,\n                        roundingFN: Math.round,\n                        inputmode: \"decimal\",\n                        shortcuts: {\n                            k: \"1000\",\n                            m: \"1000000\"\n                        },\n                        placeholder: \"0\",\n                        greedy: !1,\n                        rightAlign: !0,\n                        insertMode: !0,\n                        autoUnmask: !1,\n                        skipOptionalPartCharacter: \"\",\n                        usePrototypeDefinitions: !1,\n                        stripLeadingZeroes: !0,\n                        substituteRadixPoint: !0,\n                        definitions: {\n                            0: {\n                                validator: d\n                            },\n                            1: {\n                                validator: d,\n                                definitionSymbol: \"9\"\n                            },\n                            9: {\n                                validator: \"[0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]\",\n                                definitionSymbol: \"*\"\n                            },\n                            \"+\": {\n                                validator: function(e, t, n, i, a) {\n                                    return a.allowMinus && (\"-\" === e || e === a.negationSymbol.front);\n                                }\n                            },\n                            \"-\": {\n                                validator: function(e, t, n, i, a) {\n                                    return a.allowMinus && e === a.negationSymbol.back;\n                                }\n                            }\n                        },\n                        preValidation: function(e, t, n, i, a, r, o, l) {\n                            var s = this;\n                            if (!1 !== a.__financeInput && n === a.radixPoint) return !1;\n                            var c = e.indexOf(a.radixPoint), u = t;\n                            if (t = function(e, t, n, i, a) {\n                                return a._radixDance && a.numericInput && t !== a.negationSymbol.back && e <= n && (n > 0 || t == a.radixPoint) && (void 0 === i.validPositions[e - 1] || i.validPositions[e - 1].input !== a.negationSymbol.back) && (e -= 1), \n                                e;\n                            }(t, n, c, r, a), \"-\" === n || n === a.negationSymbol.front) {\n                                if (!0 !== a.allowMinus) return !1;\n                                var d = !1, h = p(\"+\", r), v = p(\"-\", r);\n                                return -1 !== h && (d = [ h ], -1 !== v && d.push(v)), !1 !== d ? {\n                                    remove: d,\n                                    caret: u - a.negationSymbol.back.length\n                                } : {\n                                    insert: [ {\n                                        pos: f.call(s, \"+\", r),\n                                        c: a.negationSymbol.front,\n                                        fromIsValid: !0\n                                    }, {\n                                        pos: f.call(s, \"-\", r),\n                                        c: a.negationSymbol.back,\n                                        fromIsValid: void 0\n                                    } ],\n                                    caret: u + a.negationSymbol.back.length\n                                };\n                            }\n                            if (n === a.groupSeparator) return {\n                                caret: u\n                            };\n                            if (l) return !0;\n                            if (-1 !== c && !0 === a._radixDance && !1 === i && n === a.radixPoint && void 0 !== a.digits && (isNaN(a.digits) || parseInt(a.digits) > 0) && c !== t) {\n                                var m = f.call(s, a.radixPoint, r);\n                                return r.validPositions[m] && (r.validPositions[m].generatedInput = r.validPositions[m].generated || !1), \n                                {\n                                    caret: a._radixDance && t === c - 1 ? c + 1 : c\n                                };\n                            }\n                            if (!1 === a.__financeInput) if (i) {\n                                if (a.digitsOptional) return {\n                                    rewritePosition: o.end\n                                };\n                                if (!a.digitsOptional) {\n                                    if (o.begin > c && o.end <= c) return n === a.radixPoint ? {\n                                        insert: {\n                                            pos: c + 1,\n                                            c: \"0\",\n                                            fromIsValid: !0\n                                        },\n                                        rewritePosition: c\n                                    } : {\n                                        rewritePosition: c + 1\n                                    };\n                                    if (o.begin < c) return {\n                                        rewritePosition: o.begin - 1\n                                    };\n                                }\n                            } else if (!a.showMaskOnHover && !a.showMaskOnFocus && !a.digitsOptional && a.digits > 0 && \"\" === this.__valueGet.call(this.el)) return {\n                                rewritePosition: c\n                            };\n                            return {\n                                rewritePosition: t\n                            };\n                        },\n                        postValidation: function(e, t, n, i, a, r, o) {\n                            if (!1 === i) return i;\n                            if (o) return !0;\n                            if (null !== a.min || null !== a.max) {\n                                var l = a.onUnMask(e.slice().reverse().join(\"\"), void 0, s.extend({}, a, {\n                                    unmaskAsNumber: !0\n                                }));\n                                if (null !== a.min && l < a.min && (l.toString().length > a.min.toString().length || l < 0)) return !1;\n                                if (null !== a.max && l > a.max) return !!a.SetMaxOnOverflow && {\n                                    refreshFromBuffer: !0,\n                                    buffer: u(a.max.toString().replace(\".\", a.radixPoint).split(\"\"), a.digits, a).reverse()\n                                };\n                            }\n                            return i;\n                        },\n                        onUnMask: function(e, t, n) {\n                            if (\"\" === t && !0 === n.nullable) return t;\n                            var a = e.replace(n.prefix, \"\");\n                            return a = (a = a.replace(n.suffix, \"\")).replace(new RegExp((0, i.default)(n.groupSeparator), \"g\"), \"\"), \n                            \"\" !== n.placeholder.charAt(0) && (a = a.replace(new RegExp(n.placeholder.charAt(0), \"g\"), \"0\")), \n                            n.unmaskAsNumber ? (\"\" !== n.radixPoint && -1 !== a.indexOf(n.radixPoint) && (a = a.replace(i.default.call(this, n.radixPoint), \".\")), \n                            a = (a = a.replace(new RegExp(\"^\" + (0, i.default)(n.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n                            i.default)(n.negationSymbol.back) + \"$\"), \"\"), Number(a)) : a;\n                        },\n                        isComplete: function(e, t) {\n                            var n = (t.numericInput ? e.slice().reverse() : e).join(\"\");\n                            return n = (n = (n = (n = (n = n.replace(new RegExp(\"^\" + (0, i.default)(t.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n                            i.default)(t.negationSymbol.back) + \"$\"), \"\")).replace(t.prefix, \"\")).replace(t.suffix, \"\")).replace(new RegExp((0, \n                            i.default)(t.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"), \",\" === t.radixPoint && (n = n.replace((0, \n                            i.default)(t.radixPoint), \".\")), isFinite(n);\n                        },\n                        onBeforeMask: function(e, t) {\n                            var n;\n                            e = null !== (n = e) && void 0 !== n ? n : \"\";\n                            var a = t.radixPoint || \",\";\n                            isFinite(t.digits) && (t.digits = parseInt(t.digits)), \"number\" != typeof e && \"number\" !== t.inputType || \"\" === a || (e = e.toString().replace(\".\", a));\n                            var r = \"-\" === e.charAt(0) || e.charAt(0) === t.negationSymbol.front, o = e.split(a), l = o[0].replace(/[^\\-0-9]/g, \"\"), s = o.length > 1 ? o[1].replace(/[^0-9]/g, \"\") : \"\", c = o.length > 1;\n                            e = l + (\"\" !== s ? a + s : s);\n                            var f = 0;\n                            if (\"\" !== a && (f = t.digitsOptional ? t.digits < s.length ? t.digits : s.length : t.digits, \n                            \"\" !== s || !t.digitsOptional)) {\n                                var p = Math.pow(10, f || 1);\n                                e = e.replace((0, i.default)(a), \".\"), isNaN(parseFloat(e)) || (e = (t.roundingFN(parseFloat(e) * p) / p).toFixed(f)), \n                                e = e.toString().replace(\".\", a);\n                            }\n                            if (0 === t.digits && -1 !== e.indexOf(a) && (e = e.substring(0, e.indexOf(a))), \n                            null !== t.min || null !== t.max) {\n                                var d = e.toString().replace(a, \".\");\n                                null !== t.min && d < t.min ? e = t.min.toString().replace(\".\", a) : null !== t.max && d > t.max && (e = t.max.toString().replace(\".\", a));\n                            }\n                            return r && \"-\" !== e.charAt(0) && (e = \"-\" + e), u(e.toString().split(\"\"), f, t, c).join(\"\");\n                        },\n                        onBeforeWrite: function(e, t, n, a) {\n                            function r(e, t) {\n                                if (!1 !== a.__financeInput || t) {\n                                    var n = e.indexOf(a.radixPoint);\n                                    -1 !== n && e.splice(n, 1);\n                                }\n                                if (\"\" !== a.groupSeparator) for (;-1 !== (n = e.indexOf(a.groupSeparator)); ) e.splice(n, 1);\n                                return e;\n                            }\n                            var o, l;\n                            if (a.stripLeadingZeroes && (l = function(e, t) {\n                                var n = new RegExp(\"(^\" + (\"\" !== t.negationSymbol.front ? (0, i.default)(t.negationSymbol.front) + \"?\" : \"\") + (0, \n                                i.default)(t.prefix) + \")(.*)(\" + (0, i.default)(t.suffix) + (\"\" != t.negationSymbol.back ? (0, \n                                i.default)(t.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(e.slice().reverse().join(\"\")), a = n ? n[2] : \"\", r = !1;\n                                return a && (a = a.split(t.radixPoint.charAt(0))[0], r = new RegExp(\"^[0\" + t.groupSeparator + \"]*\").exec(a)), \n                                !(!r || !(r[0].length > 1 || r[0].length > 0 && r[0].length < a.length)) && r;\n                            }(t, a))) for (var c = t.join(\"\").lastIndexOf(l[0].split(\"\").reverse().join(\"\")) - (l[0] == l.input ? 0 : 1), f = l[0] == l.input ? 1 : 0, p = l[0].length - f; p > 0; p--) this.maskset.validPositions.splice(c + p, 1), \n                            delete t[c + p];\n                            if (e) switch (e.type) {\n                              case \"blur\":\n                              case \"checkval\":\n                                if (null !== a.min) {\n                                    var d = a.onUnMask(t.slice().reverse().join(\"\"), void 0, s.extend({}, a, {\n                                        unmaskAsNumber: !0\n                                    }));\n                                    if (null !== a.min && d < a.min) return {\n                                        refreshFromBuffer: !0,\n                                        buffer: u(a.min.toString().replace(\".\", a.radixPoint).split(\"\"), a.digits, a).reverse()\n                                    };\n                                }\n                                if (t[t.length - 1] === a.negationSymbol.front) {\n                                    var h = new RegExp(\"(^\" + (\"\" != a.negationSymbol.front ? (0, i.default)(a.negationSymbol.front) + \"?\" : \"\") + (0, \n                                    i.default)(a.prefix) + \")(.*)(\" + (0, i.default)(a.suffix) + (\"\" != a.negationSymbol.back ? (0, \n                                    i.default)(a.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(r(t.slice(), !0).reverse().join(\"\"));\n                                    0 == (h ? h[2] : \"\") && (o = {\n                                        refreshFromBuffer: !0,\n                                        buffer: [ 0 ]\n                                    });\n                                } else if (\"\" !== a.radixPoint) {\n                                    t.indexOf(a.radixPoint) === a.suffix.length && (o && o.buffer ? o.buffer.splice(0, 1 + a.suffix.length) : (t.splice(0, 1 + a.suffix.length), \n                                    o = {\n                                        refreshFromBuffer: !0,\n                                        buffer: r(t)\n                                    }));\n                                }\n                                if (a.enforceDigitsOnBlur) {\n                                    var v = (o = o || {}) && o.buffer || t.slice().reverse();\n                                    o.refreshFromBuffer = !0, o.buffer = u(v, a.digits, a, !0).reverse();\n                                }\n                            }\n                            return o;\n                        },\n                        onKeyDown: function(e, t, n, i) {\n                            var a, o = s(this);\n                            if (3 != e.location) {\n                                var l, c = e.key;\n                                if ((l = i.shortcuts && i.shortcuts[c]) && l.length > 1) return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) * parseInt(l)), \n                                o.trigger(\"setvalue\"), !1;\n                            }\n                            if (e.ctrlKey) switch (e.key) {\n                              case r.keys.ArrowUp:\n                                return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(i.step)), \n                                o.trigger(\"setvalue\"), !1;\n\n                              case r.keys.ArrowDown:\n                                return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(i.step)), \n                                o.trigger(\"setvalue\"), !1;\n                            }\n                            if (!e.shiftKey && (e.key === r.keys.Delete || e.key === r.keys.Backspace || e.key === r.keys.BACKSPACE_SAFARI) && n.begin !== t.length) {\n                                if (t[e.key === r.keys.Delete ? n.begin - 1 : n.end] === i.negationSymbol.front) return a = t.slice().reverse(), \n                                \"\" !== i.negationSymbol.front && a.shift(), \"\" !== i.negationSymbol.back && a.pop(), \n                                o.trigger(\"setvalue\", [ a.join(\"\"), n.begin ]), !1;\n                                if (!0 === i._radixDance) {\n                                    var f, p = t.indexOf(i.radixPoint);\n                                    if (i.digitsOptional) {\n                                        if (0 === p) return (a = t.slice().reverse()).pop(), o.trigger(\"setvalue\", [ a.join(\"\"), n.begin >= a.length ? a.length : n.begin ]), \n                                        !1;\n                                    } else if (-1 !== p && (n.begin < p || n.end < p || e.key === r.keys.Delete && (n.begin === p || n.begin - 1 === p))) return n.begin === n.end && (e.key === r.keys.Backspace || e.key === r.keys.BACKSPACE_SAFARI ? n.begin++ : e.key === r.keys.Delete && n.begin - 1 === p && (f = s.extend({}, n), \n                                    n.begin--, n.end--)), (a = t.slice().reverse()).splice(a.length - n.begin, n.begin - n.end + 1), \n                                    a = u(a, i.digits, i).join(\"\"), f && (n = f), o.trigger(\"setvalue\", [ a, n.begin >= a.length ? p + 1 : n.begin ]), \n                                    !1;\n                                }\n                            }\n                        }\n                    },\n                    currency: {\n                        prefix: \"\",\n                        groupSeparator: \",\",\n                        alias: \"numeric\",\n                        digits: 2,\n                        digitsOptional: !1\n                    },\n                    decimal: {\n                        alias: \"numeric\"\n                    },\n                    integer: {\n                        alias: \"numeric\",\n                        inputmode: \"numeric\",\n                        digits: 0\n                    },\n                    percentage: {\n                        alias: \"numeric\",\n                        min: 0,\n                        max: 100,\n                        suffix: \" %\",\n                        digits: 0,\n                        allowMinus: !1\n                    },\n                    indianns: {\n                        alias: \"numeric\",\n                        _mask: function(e) {\n                            return \"(\" + e.groupSeparator + \"99){*|1}(\" + e.groupSeparator + \"999){1|1}\";\n                        },\n                        groupSeparator: \",\",\n                        radixPoint: \".\",\n                        placeholder: \"0\",\n                        digits: 2,\n                        digitsOptional: !1\n                    }\n                });\n            },\n            9380: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var n = !(\"undefined\" == typeof window || !window.document || !window.document.createElement);\n                t.default = n ? window : {};\n            },\n            7760: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.HandleNativePlaceholder = function(e, t) {\n                    var n = e ? e.inputmask : this;\n                    if (i.ie) {\n                        if (e.inputmask._valueGet() !== t && (e.placeholder !== t || \"\" === e.placeholder)) {\n                            var a = o.getBuffer.call(n).slice(), r = e.inputmask._valueGet();\n                            if (r !== t) {\n                                var l = o.getLastValidPosition.call(n);\n                                -1 === l && r === o.getBufferTemplate.call(n).join(\"\") ? a = [] : -1 !== l && u.call(n, a), \n                                p(e, a);\n                            }\n                        }\n                    } else e.placeholder !== t && (e.placeholder = t, \"\" === e.placeholder && e.removeAttribute(\"placeholder\"));\n                }, t.applyInputValue = c, t.checkVal = f, t.clearOptionalTail = u, t.unmaskedvalue = function(e) {\n                    var t = e ? e.inputmask : this, n = t.opts, i = t.maskset;\n                    if (e) {\n                        if (void 0 === e.inputmask) return e.value;\n                        e.inputmask && e.inputmask.refreshValue && c(e, e.inputmask._valueGet(!0));\n                    }\n                    for (var a = [], r = i.validPositions, l = 0, s = r.length; l < s; l++) r[l] && r[l].match && (1 != r[l].match.static || Array.isArray(i.metadata) && !0 !== r[l].generatedInput) && a.push(r[l].input);\n                    var u = 0 === a.length ? \"\" : (t.isRTL ? a.reverse() : a).join(\"\");\n                    if (\"function\" == typeof n.onUnMask) {\n                        var f = (t.isRTL ? o.getBuffer.call(t).slice().reverse() : o.getBuffer.call(t)).join(\"\");\n                        u = n.onUnMask.call(t, f, u, n);\n                    }\n                    return u;\n                }, t.writeBuffer = p;\n                var i = n(9845), a = n(6030), r = n(2839), o = n(8711), l = n(7215), s = n(4713);\n                function c(e, t, n) {\n                    var i = e ? e.inputmask : this, a = i.opts;\n                    e.inputmask.refreshValue = !1, \"function\" == typeof a.onBeforeMask && (t = a.onBeforeMask.call(i, t, a) || t), \n                    f(e, !0, !1, t = (t || \"\").toString().split(\"\"), n), i.undoValue = i._valueGet(!0), \n                    (a.clearMaskOnLostFocus || a.clearIncomplete) && e.inputmask._valueGet() === o.getBufferTemplate.call(i).join(\"\") && -1 === o.getLastValidPosition.call(i) && e.inputmask._valueSet(\"\");\n                }\n                function u(e) {\n                    e.length = 0;\n                    for (var t, n = s.getMaskTemplate.call(this, !0, 0, !0, void 0, !0); void 0 !== (t = n.shift()); ) e.push(t);\n                    return e;\n                }\n                function f(e, t, n, i, r) {\n                    var c, u = e ? e.inputmask : this, f = u.maskset, d = u.opts, h = u.dependencyLib, v = i.slice(), m = \"\", g = -1, y = d.skipOptionalPartCharacter;\n                    d.skipOptionalPartCharacter = \"\", o.resetMaskSet.call(u, !1), u.clicked = 0, g = d.radixPoint ? o.determineNewCaretPosition.call(u, {\n                        begin: 0,\n                        end: 0\n                    }, !1, !1 === d.__financeInput ? \"radixFocus\" : void 0).begin : 0, f.p = g, u.caretPos = {\n                        begin: g\n                    };\n                    var k = [], b = u.caretPos;\n                    if (v.forEach((function(e, t) {\n                        if (void 0 !== e) {\n                            var i = new h.Event(\"_checkval\");\n                            i.key = e, m += e;\n                            var r = o.getLastValidPosition.call(u, void 0, !0);\n                            !function(e, t) {\n                                for (var n = s.getMaskTemplate.call(u, !0, 0).slice(e, o.seekNext.call(u, e, !1, !1)).join(\"\").replace(/'/g, \"\"), i = n.indexOf(t); i > 0 && \" \" === n[i - 1]; ) i--;\n                                var a = 0 === i && !o.isMask.call(u, e) && (s.getTest.call(u, e).match.nativeDef === t.charAt(0) || !0 === s.getTest.call(u, e).match.static && s.getTest.call(u, e).match.nativeDef === \"'\" + t.charAt(0) || \" \" === s.getTest.call(u, e).match.nativeDef && (s.getTest.call(u, e + 1).match.nativeDef === t.charAt(0) || !0 === s.getTest.call(u, e + 1).match.static && s.getTest.call(u, e + 1).match.nativeDef === \"'\" + t.charAt(0)));\n                                if (!a && i > 0 && !o.isMask.call(u, e, !1, !0)) {\n                                    var r = o.seekNext.call(u, e);\n                                    u.caretPos.begin < r && (u.caretPos = {\n                                        begin: r\n                                    });\n                                }\n                                return a;\n                            }(g, m) ? (c = a.EventHandlers.keypressEvent.call(u, i, !0, !1, n, u.caretPos.begin)) && (g = u.caretPos.begin + 1, \n                            m = \"\") : c = a.EventHandlers.keypressEvent.call(u, i, !0, !1, n, r + 1), c ? (void 0 !== c.pos && f.validPositions[c.pos] && !0 === f.validPositions[c.pos].match.static && void 0 === f.validPositions[c.pos].alternation && (k.push(c.pos), \n                            u.isRTL || (c.forwardPosition = c.pos + 1)), p.call(u, void 0, o.getBuffer.call(u), c.forwardPosition, i, !1), \n                            u.caretPos = {\n                                begin: c.forwardPosition,\n                                end: c.forwardPosition\n                            }, b = u.caretPos) : void 0 === f.validPositions[t] && v[t] === s.getPlaceholder.call(u, t) && o.isMask.call(u, t, !0) ? u.caretPos.begin++ : u.caretPos = b;\n                        }\n                    })), k.length > 0) {\n                        var x, w, P = o.seekNext.call(u, -1, void 0, !1);\n                        if (!l.isComplete.call(u, o.getBuffer.call(u)) && k.length <= P || l.isComplete.call(u, o.getBuffer.call(u)) && k.length > 0 && k.length !== P && 0 === k[0]) for (var S = P; void 0 !== (x = k.shift()); ) if (x < S) {\n                            var O = new h.Event(\"_checkval\");\n                            if ((w = f.validPositions[x]).generatedInput = !0, O.key = w.input, (c = a.EventHandlers.keypressEvent.call(u, O, !0, !1, n, S)) && void 0 !== c.pos && c.pos !== x && f.validPositions[c.pos] && !0 === f.validPositions[c.pos].match.static) k.push(c.pos); else if (!c) break;\n                            S++;\n                        }\n                    }\n                    t && p.call(u, e, o.getBuffer.call(u), c ? c.forwardPosition : u.caretPos.begin, r || new h.Event(\"checkval\"), r && (\"input\" === r.type && u.undoValue !== o.getBuffer.call(u).join(\"\") || \"paste\" === r.type)), \n                    d.skipOptionalPartCharacter = y;\n                }\n                function p(e, t, n, i, a) {\n                    var s = e ? e.inputmask : this, c = s.opts, u = s.dependencyLib;\n                    if (i && \"function\" == typeof c.onBeforeWrite) {\n                        var f = c.onBeforeWrite.call(s, i, t, n, c);\n                        if (f) {\n                            if (f.refreshFromBuffer) {\n                                var p = f.refreshFromBuffer;\n                                l.refreshFromBuffer.call(s, !0 === p ? p : p.start, p.end, f.buffer || t), t = o.getBuffer.call(s, !0);\n                            }\n                            void 0 !== n && (n = void 0 !== f.caret ? f.caret : n);\n                        }\n                    }\n                    if (void 0 !== e && (e.inputmask._valueSet(t.join(\"\")), void 0 === n || void 0 !== i && \"blur\" === i.type || o.caret.call(s, e, n, void 0, void 0, void 0 !== i && \"keydown\" === i.type && (i.key === r.keys.Delete || i.key === r.keys.Backspace)), \n                    void 0 === e.inputmask.writeBufferHook || e.inputmask.writeBufferHook(n), !0 === a)) {\n                        var d = u(e), h = e.inputmask._valueGet();\n                        e.inputmask.skipInputEvent = !0, d.trigger(\"input\"), setTimeout((function() {\n                            h === o.getBufferTemplate.call(s).join(\"\") ? d.trigger(\"cleared\") : !0 === l.isComplete.call(s, t) && d.trigger(\"complete\");\n                        }), 0);\n                    }\n                }\n            },\n            2394: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var i = v(n(3976)), a = v(n(7392)), r = v(n(4963)), o = n(9716), l = v(n(9380)), s = n(7760), c = n(157), u = n(2391), f = n(8711), p = n(7215), d = n(4713);\n                function h(e) {\n                    return h = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, h(e);\n                }\n                function v(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var m = l.default.document, g = \"_inputmask_opts\";\n                function y(e, t, n) {\n                    if (!(this instanceof y)) return new y(e, t, n);\n                    this.dependencyLib = r.default, this.el = void 0, this.events = {}, this.maskset = void 0, \n                    !0 !== n && (\"[object Object]\" === Object.prototype.toString.call(e) ? t = e : (t = t || {}, \n                    e && (t.alias = e)), this.opts = r.default.extend(!0, {}, this.defaults, t), this.noMasksCache = t && void 0 !== t.definitions, \n                    this.userOptions = t || {}, k(this.opts.alias, t, this.opts)), this.refreshValue = !1, \n                    this.undoValue = void 0, this.$el = void 0, this.skipInputEvent = !1, this.validationEvent = !1, \n                    this.ignorable = !1, this.maxLength, this.mouseEnter = !1, this.clicked = 0, this.originalPlaceholder = void 0, \n                    this.isComposing = !1, this.hasAlternator = !1;\n                }\n                function k(e, t, n) {\n                    var i = y.prototype.aliases[e];\n                    return i ? (i.alias && k(i.alias, void 0, n), r.default.extend(!0, n, i), r.default.extend(!0, n, t), \n                    !0) : (null === n.mask && (n.mask = e), !1);\n                }\n                y.prototype = {\n                    dataAttribute: \"data-inputmask\",\n                    defaults: i.default,\n                    definitions: a.default,\n                    aliases: {},\n                    masksCache: {},\n                    i18n: {},\n                    get isRTL() {\n                        return this.opts.isRTL || this.opts.numericInput;\n                    },\n                    mask: function(e) {\n                        var t = this;\n                        return \"string\" == typeof e && (e = m.getElementById(e) || m.querySelectorAll(e)), \n                        (e = e.nodeName ? [ e ] : Array.isArray(e) ? e : [].slice.call(e)).forEach((function(e, n) {\n                            var i = r.default.extend(!0, {}, t.opts);\n                            if (function(e, t, n, i) {\n                                function a(t, a) {\n                                    var r = \"\" === i ? t : i + \"-\" + t;\n                                    null !== (a = void 0 !== a ? a : e.getAttribute(r)) && (\"string\" == typeof a && (0 === t.indexOf(\"on\") ? a = l.default[a] : \"false\" === a ? a = !1 : \"true\" === a && (a = !0)), \n                                    n[t] = a);\n                                }\n                                if (!0 === t.importDataAttributes) {\n                                    var o, s, c, u, f = e.getAttribute(i);\n                                    if (f && \"\" !== f && (f = f.replace(/'/g, '\"'), s = JSON.parse(\"{\" + f + \"}\")), \n                                    s) for (u in c = void 0, s) if (\"alias\" === u.toLowerCase()) {\n                                        c = s[u];\n                                        break;\n                                    }\n                                    for (o in a(\"alias\", c), n.alias && k(n.alias, n, t), t) {\n                                        if (s) for (u in c = void 0, s) if (u.toLowerCase() === o.toLowerCase()) {\n                                            c = s[u];\n                                            break;\n                                        }\n                                        a(o, c);\n                                    }\n                                }\n                                r.default.extend(!0, t, n), (\"rtl\" === e.dir || t.rightAlign) && (e.style.textAlign = \"right\");\n                                (\"rtl\" === e.dir || t.numericInput) && (e.dir = \"ltr\", e.removeAttribute(\"dir\"), \n                                t.isRTL = !0);\n                                return Object.keys(n).length;\n                            }(e, i, r.default.extend(!0, {}, t.userOptions), t.dataAttribute)) {\n                                var a = (0, u.generateMaskSet)(i, t.noMasksCache);\n                                void 0 !== a && (void 0 !== e.inputmask && (e.inputmask.opts.autoUnmask = !0, e.inputmask.remove()), \n                                e.inputmask = new y(void 0, void 0, !0), e.inputmask.opts = i, e.inputmask.noMasksCache = t.noMasksCache, \n                                e.inputmask.userOptions = r.default.extend(!0, {}, t.userOptions), e.inputmask.el = e, \n                                e.inputmask.$el = (0, r.default)(e), e.inputmask.maskset = a, r.default.data(e, g, t.userOptions), \n                                c.mask.call(e.inputmask));\n                            }\n                        })), e && e[0] && e[0].inputmask || this;\n                    },\n                    option: function(e, t) {\n                        return \"string\" == typeof e ? this.opts[e] : \"object\" === h(e) ? (r.default.extend(this.userOptions, e), \n                        this.el && !0 !== t && this.mask(this.el), this) : void 0;\n                    },\n                    unmaskedvalue: function(e) {\n                        if (this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache), \n                        void 0 === this.el || void 0 !== e) {\n                            var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                            s.checkVal.call(this, void 0, !1, !1, t), \"function\" == typeof this.opts.onBeforeWrite && this.opts.onBeforeWrite.call(this, void 0, f.getBuffer.call(this), 0, this.opts);\n                        }\n                        return s.unmaskedvalue.call(this, this.el);\n                    },\n                    remove: function() {\n                        if (this.el) {\n                            r.default.data(this.el, g, null);\n                            var e = this.opts.autoUnmask ? (0, s.unmaskedvalue)(this.el) : this._valueGet(this.opts.autoUnmask);\n                            e !== f.getBufferTemplate.call(this).join(\"\") ? this._valueSet(e, this.opts.autoUnmask) : this._valueSet(\"\"), \n                            o.EventRuler.off(this.el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el), \"value\") && this.__valueGet && Object.defineProperty(this.el, \"value\", {\n                                get: this.__valueGet,\n                                set: this.__valueSet,\n                                configurable: !0\n                            }) : m.__lookupGetter__ && this.el.__lookupGetter__(\"value\") && this.__valueGet && (this.el.__defineGetter__(\"value\", this.__valueGet), \n                            this.el.__defineSetter__(\"value\", this.__valueSet)), this.el.inputmask = void 0;\n                        }\n                        return this.el;\n                    },\n                    getemptymask: function() {\n                        return this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache), \n                        (this.isRTL ? f.getBufferTemplate.call(this).reverse() : f.getBufferTemplate.call(this)).join(\"\");\n                    },\n                    hasMaskedValue: function() {\n                        return !this.opts.autoUnmask;\n                    },\n                    isComplete: function() {\n                        return this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache), \n                        p.isComplete.call(this, f.getBuffer.call(this));\n                    },\n                    getmetadata: function() {\n                        if (this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache), \n                        Array.isArray(this.maskset.metadata)) {\n                            var e = d.getMaskTemplate.call(this, !0, 0, !1).join(\"\");\n                            return this.maskset.metadata.forEach((function(t) {\n                                return t.mask !== e || (e = t, !1);\n                            })), e;\n                        }\n                        return this.maskset.metadata;\n                    },\n                    isValid: function(e) {\n                        if (this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache), \n                        e) {\n                            var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                            s.checkVal.call(this, void 0, !0, !1, t);\n                        } else e = this.isRTL ? f.getBuffer.call(this).slice().reverse().join(\"\") : f.getBuffer.call(this).join(\"\");\n                        for (var n = f.getBuffer.call(this), i = f.determineLastRequiredPosition.call(this), a = n.length - 1; a > i && !f.isMask.call(this, a); a--) ;\n                        return n.splice(i, a + 1 - i), p.isComplete.call(this, n) && e === (this.isRTL ? f.getBuffer.call(this).slice().reverse().join(\"\") : f.getBuffer.call(this).join(\"\"));\n                    },\n                    format: function(e, t) {\n                        this.maskset = this.maskset || (0, u.generateMaskSet)(this.opts, this.noMasksCache);\n                        var n = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                        s.checkVal.call(this, void 0, !0, !1, n);\n                        var i = this.isRTL ? f.getBuffer.call(this).slice().reverse().join(\"\") : f.getBuffer.call(this).join(\"\");\n                        return t ? {\n                            value: i,\n                            metadata: this.getmetadata()\n                        } : i;\n                    },\n                    setValue: function(e) {\n                        this.el && (0, r.default)(this.el).trigger(\"setvalue\", [ e ]);\n                    },\n                    analyseMask: u.analyseMask\n                }, y.extendDefaults = function(e) {\n                    r.default.extend(!0, y.prototype.defaults, e);\n                }, y.extendDefinitions = function(e) {\n                    r.default.extend(!0, y.prototype.definitions, e);\n                }, y.extendAliases = function(e) {\n                    r.default.extend(!0, y.prototype.aliases, e);\n                }, y.format = function(e, t, n) {\n                    return y(t).format(e, n);\n                }, y.unmask = function(e, t) {\n                    return y(t).unmaskedvalue(e);\n                }, y.isValid = function(e, t) {\n                    return y(t).isValid(e);\n                }, y.remove = function(e) {\n                    \"string\" == typeof e && (e = m.getElementById(e) || m.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n                        e.inputmask && e.inputmask.remove();\n                    }));\n                }, y.setValue = function(e, t) {\n                    \"string\" == typeof e && (e = m.getElementById(e) || m.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n                        e.inputmask ? e.inputmask.setValue(t) : (0, r.default)(e).trigger(\"setvalue\", [ t ]);\n                    }));\n                }, y.dependencyLib = r.default, l.default.Inputmask = y;\n                t.default = y;\n            },\n            5296: function(e, t, n) {\n                function i(e) {\n                    return i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, i(e);\n                }\n                var a = d(n(9380)), r = d(n(2394));\n                function o(e, t) {\n                    for (var n = 0; n < t.length; n++) {\n                        var a = t[n];\n                        a.enumerable = a.enumerable || !1, a.configurable = !0, \"value\" in a && (a.writable = !0), \n                        Object.defineProperty(e, (r = a.key, o = void 0, o = function(e, t) {\n                            if (\"object\" !== i(e) || null === e) return e;\n                            var n = e[Symbol.toPrimitive];\n                            if (void 0 !== n) {\n                                var a = n.call(e, t || \"default\");\n                                if (\"object\" !== i(a)) return a;\n                                throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n                            }\n                            return (\"string\" === t ? String : Number)(e);\n                        }(r, \"string\"), \"symbol\" === i(o) ? o : String(o)), a);\n                    }\n                    var r, o;\n                }\n                function l(e) {\n                    var t = u();\n                    return function() {\n                        var n, a = p(e);\n                        if (t) {\n                            var r = p(this).constructor;\n                            n = Reflect.construct(a, arguments, r);\n                        } else n = a.apply(this, arguments);\n                        return function(e, t) {\n                            if (t && (\"object\" === i(t) || \"function\" == typeof t)) return t;\n                            if (void 0 !== t) throw new TypeError(\"Derived constructors may only return object or undefined\");\n                            return function(e) {\n                                if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n                                return e;\n                            }(e);\n                        }(this, n);\n                    };\n                }\n                function s(e) {\n                    var t = \"function\" == typeof Map ? new Map : void 0;\n                    return s = function(e) {\n                        if (null === e || !function(e) {\n                            try {\n                                return -1 !== Function.toString.call(e).indexOf(\"[native code]\");\n                            } catch (t) {\n                                return \"function\" == typeof e;\n                            }\n                        }(e)) return e;\n                        if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n                        if (void 0 !== t) {\n                            if (t.has(e)) return t.get(e);\n                            t.set(e, n);\n                        }\n                        function n() {\n                            return c(e, arguments, p(this).constructor);\n                        }\n                        return n.prototype = Object.create(e.prototype, {\n                            constructor: {\n                                value: n,\n                                enumerable: !1,\n                                writable: !0,\n                                configurable: !0\n                            }\n                        }), f(n, e);\n                    }, s(e);\n                }\n                function c(e, t, n) {\n                    return c = u() ? Reflect.construct.bind() : function(e, t, n) {\n                        var i = [ null ];\n                        i.push.apply(i, t);\n                        var a = new (Function.bind.apply(e, i));\n                        return n && f(a, n.prototype), a;\n                    }, c.apply(null, arguments);\n                }\n                function u() {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                        return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), \n                        !0;\n                    } catch (e) {\n                        return !1;\n                    }\n                }\n                function f(e, t) {\n                    return f = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {\n                        return e.__proto__ = t, e;\n                    }, f(e, t);\n                }\n                function p(e) {\n                    return p = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {\n                        return e.__proto__ || Object.getPrototypeOf(e);\n                    }, p(e);\n                }\n                function d(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var h = a.default.document;\n                if (h && h.head && h.head.attachShadow && a.default.customElements && void 0 === a.default.customElements.get(\"input-mask\")) {\n                    var v = function(e) {\n                        !function(e, t) {\n                            if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n                            e.prototype = Object.create(t && t.prototype, {\n                                constructor: {\n                                    value: e,\n                                    writable: !0,\n                                    configurable: !0\n                                }\n                            }), Object.defineProperty(e, \"prototype\", {\n                                writable: !1\n                            }), t && f(e, t);\n                        }(s, e);\n                        var t, n, i, a = l(s);\n                        function s() {\n                            var e;\n                            !function(e, t) {\n                                if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n                            }(this, s);\n                            var t = (e = a.call(this)).getAttributeNames(), n = e.attachShadow({\n                                mode: \"closed\"\n                            });\n                            for (var i in e.input = h.createElement(\"input\"), e.input.type = \"text\", n.appendChild(e.input), \n                            t) Object.prototype.hasOwnProperty.call(t, i) && e.input.setAttribute(t[i], e.getAttribute(t[i]));\n                            var o = new r.default;\n                            return o.dataAttribute = \"\", o.mask(e.input), e.input.inputmask.shadowRoot = n, \n                            e;\n                        }\n                        return t = s, (n = [ {\n                            key: \"attributeChangedCallback\",\n                            value: function(e, t, n) {\n                                this.input.setAttribute(e, n);\n                            }\n                        }, {\n                            key: \"value\",\n                            get: function() {\n                                return this.input.value;\n                            },\n                            set: function(e) {\n                                this.input.value = e;\n                            }\n                        } ]) && o(t.prototype, n), i && o(t, i), Object.defineProperty(t, \"prototype\", {\n                            writable: !1\n                        }), s;\n                    }(s(HTMLElement));\n                    a.default.customElements.define(\"input-mask\", v);\n                }\n            },\n            2839: function(e, t) {\n                function n(e) {\n                    return n = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, n(e);\n                }\n                function i(e, t) {\n                    return function(e) {\n                        if (Array.isArray(e)) return e;\n                    }(e) || function(e, t) {\n                        var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                        if (null != n) {\n                            var i, a, r, o, l = [], s = !0, c = !1;\n                            try {\n                                if (r = (n = n.call(e)).next, 0 === t) {\n                                    if (Object(n) !== n) return;\n                                    s = !1;\n                                } else for (;!(s = (i = r.call(n)).done) && (l.push(i.value), l.length !== t); s = !0) ;\n                            } catch (e) {\n                                c = !0, a = e;\n                            } finally {\n                                try {\n                                    if (!s && null != n.return && (o = n.return(), Object(o) !== o)) return;\n                                } finally {\n                                    if (c) throw a;\n                                }\n                            }\n                            return l;\n                        }\n                    }(e, t) || function(e, t) {\n                        if (!e) return;\n                        if (\"string\" == typeof e) return a(e, t);\n                        var n = Object.prototype.toString.call(e).slice(8, -1);\n                        \"Object\" === n && e.constructor && (n = e.constructor.name);\n                        if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                        if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return a(e, t);\n                    }(e, t) || function() {\n                        throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                    }();\n                }\n                function a(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                function r(e, t) {\n                    var n = Object.keys(e);\n                    if (Object.getOwnPropertySymbols) {\n                        var i = Object.getOwnPropertySymbols(e);\n                        t && (i = i.filter((function(t) {\n                            return Object.getOwnPropertyDescriptor(e, t).enumerable;\n                        }))), n.push.apply(n, i);\n                    }\n                    return n;\n                }\n                function o(e, t, i) {\n                    return (t = function(e) {\n                        var t = function(e, t) {\n                            if (\"object\" !== n(e) || null === e) return e;\n                            var i = e[Symbol.toPrimitive];\n                            if (void 0 !== i) {\n                                var a = i.call(e, t || \"default\");\n                                if (\"object\" !== n(a)) return a;\n                                throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n                            }\n                            return (\"string\" === t ? String : Number)(e);\n                        }(e, \"string\");\n                        return \"symbol\" === n(t) ? t : String(t);\n                    }(t)) in e ? Object.defineProperty(e, t, {\n                        value: i,\n                        enumerable: !0,\n                        configurable: !0,\n                        writable: !0\n                    }) : e[t] = i, e;\n                }\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.keys = t.keyCode = void 0, t.toKey = function(e, t) {\n                    return s[e] || (t ? String.fromCharCode(e) : String.fromCharCode(e).toLowerCase());\n                }, t.toKeyCode = function(e) {\n                    return l[e];\n                };\n                var l = t.keyCode = function(e) {\n                    for (var t = 1; t < arguments.length; t++) {\n                        var n = null != arguments[t] ? arguments[t] : {};\n                        t % 2 ? r(Object(n), !0).forEach((function(t) {\n                            o(e, t, n[t]);\n                        })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : r(Object(n)).forEach((function(t) {\n                            Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));\n                        }));\n                    }\n                    return e;\n                }({\n                    c: 67,\n                    x: 88,\n                    z: 90,\n                    BACKSPACE_SAFARI: 127,\n                    Enter: 13,\n                    Meta_LEFT: 91,\n                    Meta_RIGHT: 92,\n                    Space: 32\n                }, {\n                    Alt: 18,\n                    AltGraph: 18,\n                    ArrowDown: 40,\n                    ArrowLeft: 37,\n                    ArrowRight: 39,\n                    ArrowUp: 38,\n                    Backspace: 8,\n                    CapsLock: 20,\n                    Control: 17,\n                    ContextMenu: 93,\n                    Dead: 221,\n                    Delete: 46,\n                    End: 35,\n                    Escape: 27,\n                    F1: 112,\n                    F2: 113,\n                    F3: 114,\n                    F4: 115,\n                    F5: 116,\n                    F6: 117,\n                    F7: 118,\n                    F8: 119,\n                    F9: 120,\n                    F10: 121,\n                    F11: 122,\n                    F12: 123,\n                    Home: 36,\n                    Insert: 45,\n                    NumLock: 144,\n                    PageDown: 34,\n                    PageUp: 33,\n                    Pause: 19,\n                    PrintScreen: 44,\n                    Process: 229,\n                    Shift: 16,\n                    ScrollLock: 145,\n                    Tab: 9,\n                    Unidentified: 229\n                }), s = Object.entries(l).reduce((function(e, t) {\n                    var n = i(t, 2), a = n[0], r = n[1];\n                    return e[r] = void 0 === e[r] ? a : e[r], e;\n                }), {});\n                t.keys = Object.entries(l).reduce((function(e, t) {\n                    var n = i(t, 2), a = n[0];\n                    n[1];\n                    return e[a] = \"Space\" === a ? \" \" : a, e;\n                }), {});\n            },\n            2391: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.analyseMask = function(e, t, n) {\n                    var i, a, s, c, u, f, p = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, d = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, h = !1, v = new o.default, m = [], g = [], y = !1;\n                    function k(e, i, a) {\n                        a = void 0 !== a ? a : e.matches.length;\n                        var o = e.matches[a - 1];\n                        if (t) {\n                            if (0 === i.indexOf(\"[\") || h && /\\\\d|\\\\s|\\\\w|\\\\p/i.test(i) || \".\" === i) {\n                                var s = n.casing ? \"i\" : \"\";\n                                /\\\\p\\{.*}/i.test(i) && (s += \"u\"), e.matches.splice(a++, 0, {\n                                    fn: new RegExp(i, s),\n                                    static: !1,\n                                    optionality: !1,\n                                    newBlockMarker: void 0 === o ? \"master\" : o.def !== i,\n                                    casing: null,\n                                    def: i,\n                                    placeholder: \"object\" === l(n.placeholder) ? n.placeholder[v.matches.length] : void 0,\n                                    nativeDef: i\n                                });\n                            } else h && (i = i[i.length - 1]), i.split(\"\").forEach((function(t, i) {\n                                o = e.matches[a - 1], e.matches.splice(a++, 0, {\n                                    fn: /[a-z]/i.test(n.staticDefinitionSymbol || t) ? new RegExp(\"[\" + (n.staticDefinitionSymbol || t) + \"]\", n.casing ? \"i\" : \"\") : null,\n                                    static: !0,\n                                    optionality: !1,\n                                    newBlockMarker: void 0 === o ? \"master\" : o.def !== t && !0 !== o.static,\n                                    casing: null,\n                                    def: n.staticDefinitionSymbol || t,\n                                    placeholder: void 0 !== n.staticDefinitionSymbol ? t : \"object\" === l(n.placeholder) ? n.placeholder[v.matches.length] : void 0,\n                                    nativeDef: (h ? \"'\" : \"\") + t\n                                });\n                            }));\n                            h = !1;\n                        } else {\n                            var c = n.definitions && n.definitions[i] || n.usePrototypeDefinitions && r.default.prototype.definitions[i];\n                            c && !h ? e.matches.splice(a++, 0, {\n                                fn: c.validator ? \"string\" == typeof c.validator ? new RegExp(c.validator, n.casing ? \"i\" : \"\") : new function() {\n                                    this.test = c.validator;\n                                } : /./,\n                                static: c.static || !1,\n                                optionality: c.optional || !1,\n                                defOptionality: c.optional || !1,\n                                newBlockMarker: void 0 === o || c.optional ? \"master\" : o.def !== (c.definitionSymbol || i),\n                                casing: c.casing,\n                                def: c.definitionSymbol || i,\n                                placeholder: c.placeholder,\n                                nativeDef: i,\n                                generated: c.generated\n                            }) : (e.matches.splice(a++, 0, {\n                                fn: /[a-z]/i.test(n.staticDefinitionSymbol || i) ? new RegExp(\"[\" + (n.staticDefinitionSymbol || i) + \"]\", n.casing ? \"i\" : \"\") : null,\n                                static: !0,\n                                optionality: !1,\n                                newBlockMarker: void 0 === o ? \"master\" : o.def !== i && !0 !== o.static,\n                                casing: null,\n                                def: n.staticDefinitionSymbol || i,\n                                placeholder: void 0 !== n.staticDefinitionSymbol ? i : void 0,\n                                nativeDef: (h ? \"'\" : \"\") + i\n                            }), h = !1);\n                        }\n                    }\n                    function b() {\n                        if (m.length > 0) {\n                            if (k(c = m[m.length - 1], a), c.isAlternator) {\n                                u = m.pop();\n                                for (var e = 0; e < u.matches.length; e++) u.matches[e].isGroup && (u.matches[e].isGroup = !1);\n                                m.length > 0 ? (c = m[m.length - 1]).matches.push(u) : v.matches.push(u);\n                            }\n                        } else k(v, a);\n                    }\n                    function x(e) {\n                        var t = new o.default(!0);\n                        return t.openGroup = !1, t.matches = e, t;\n                    }\n                    function w() {\n                        if ((s = m.pop()).openGroup = !1, void 0 !== s) if (m.length > 0) {\n                            if ((c = m[m.length - 1]).matches.push(s), c.isAlternator) {\n                                u = m.pop();\n                                for (var e = 0; e < u.matches.length; e++) u.matches[e].isGroup = !1, u.matches[e].alternatorGroup = !1;\n                                m.length > 0 ? (c = m[m.length - 1]).matches.push(u) : v.matches.push(u);\n                            }\n                        } else v.matches.push(s); else b();\n                    }\n                    function P(e) {\n                        var t = e.pop();\n                        return t.isQuantifier && (t = x([ e.pop(), t ])), t;\n                    }\n                    t && (n.optionalmarker[0] = void 0, n.optionalmarker[1] = void 0);\n                    for (;i = t ? d.exec(e) : p.exec(e); ) {\n                        if (a = i[0], t) {\n                            switch (a.charAt(0)) {\n                              case \"?\":\n                                a = \"{0,1}\";\n                                break;\n\n                              case \"+\":\n                              case \"*\":\n                                a = \"{\" + a + \"}\";\n                                break;\n\n                              case \"|\":\n                                if (0 === m.length) {\n                                    var S = x(v.matches);\n                                    S.openGroup = !0, m.push(S), v.matches = [], y = !0;\n                                }\n                            }\n                            switch (a) {\n                              case \"\\\\d\":\n                                a = \"[0-9]\";\n                                break;\n\n                              case \"\\\\p\":\n                                a += d.exec(e)[0], a += d.exec(e)[0];\n                            }\n                        }\n                        if (h) b(); else switch (a.charAt(0)) {\n                          case \"$\":\n                          case \"^\":\n                            t || b();\n                            break;\n\n                          case n.escapeChar:\n                            h = !0, t && b();\n                            break;\n\n                          case n.optionalmarker[1]:\n                          case n.groupmarker[1]:\n                            w();\n                            break;\n\n                          case n.optionalmarker[0]:\n                            m.push(new o.default(!1, !0));\n                            break;\n\n                          case n.groupmarker[0]:\n                            m.push(new o.default(!0));\n                            break;\n\n                          case n.quantifiermarker[0]:\n                            var O = new o.default(!1, !1, !0), _ = (a = a.replace(/[{}?]/g, \"\")).split(\"|\"), M = _[0].split(\",\"), E = isNaN(M[0]) ? M[0] : parseInt(M[0]), j = 1 === M.length ? E : isNaN(M[1]) ? M[1] : parseInt(M[1]), T = isNaN(_[1]) ? _[1] : parseInt(_[1]);\n                            \"*\" !== E && \"+\" !== E || (E = \"*\" === j ? 0 : 1), O.quantifier = {\n                                min: E,\n                                max: j,\n                                jit: T\n                            };\n                            var A = m.length > 0 ? m[m.length - 1].matches : v.matches;\n                            (i = A.pop()).isGroup || (i = x([ i ])), A.push(i), A.push(O);\n                            break;\n\n                          case n.alternatormarker:\n                            if (m.length > 0) {\n                                var D = (c = m[m.length - 1]).matches[c.matches.length - 1];\n                                f = c.openGroup && (void 0 === D.matches || !1 === D.isGroup && !1 === D.isAlternator) ? m.pop() : P(c.matches);\n                            } else f = P(v.matches);\n                            if (f.isAlternator) m.push(f); else if (f.alternatorGroup ? (u = m.pop(), f.alternatorGroup = !1) : u = new o.default(!1, !1, !1, !0), \n                            u.matches.push(f), m.push(u), f.openGroup) {\n                                f.openGroup = !1;\n                                var L = new o.default(!0);\n                                L.alternatorGroup = !0, m.push(L);\n                            }\n                            break;\n\n                          default:\n                            b();\n                        }\n                    }\n                    y && w();\n                    for (;m.length > 0; ) s = m.pop(), v.matches.push(s);\n                    v.matches.length > 0 && (!function e(i) {\n                        i && i.matches && i.matches.forEach((function(a, r) {\n                            var o = i.matches[r + 1];\n                            (void 0 === o || void 0 === o.matches || !1 === o.isQuantifier) && a && a.isGroup && (a.isGroup = !1, \n                            t || (k(a, n.groupmarker[0], 0), !0 !== a.openGroup && k(a, n.groupmarker[1]))), \n                            e(a);\n                        }));\n                    }(v), g.push(v));\n                    (n.numericInput || n.isRTL) && function e(t) {\n                        for (var i in t.matches = t.matches.reverse(), t.matches) if (Object.prototype.hasOwnProperty.call(t.matches, i)) {\n                            var a = parseInt(i);\n                            if (t.matches[i].isQuantifier && t.matches[a + 1] && t.matches[a + 1].isGroup) {\n                                var r = t.matches[i];\n                                t.matches.splice(i, 1), t.matches.splice(a + 1, 0, r);\n                            }\n                            void 0 !== t.matches[i].matches ? t.matches[i] = e(t.matches[i]) : t.matches[i] = ((o = t.matches[i]) === n.optionalmarker[0] ? o = n.optionalmarker[1] : o === n.optionalmarker[1] ? o = n.optionalmarker[0] : o === n.groupmarker[0] ? o = n.groupmarker[1] : o === n.groupmarker[1] && (o = n.groupmarker[0]), \n                            o);\n                        }\n                        var o;\n                        return t;\n                    }(g[0]);\n                    return g;\n                }, t.generateMaskSet = function(e, t) {\n                    var n;\n                    function o(e, t) {\n                        var n = t.repeat, i = t.groupmarker, r = t.quantifiermarker, o = t.keepStatic;\n                        if (n > 0 || \"*\" === n || \"+\" === n) {\n                            var l = \"*\" === n ? 0 : \"+\" === n ? 1 : n;\n                            if (l != n) e = i[0] + e + i[1] + r[0] + l + \",\" + n + r[1]; else for (var c = e, u = 1; u < l; u++) e += c;\n                        }\n                        if (!0 === o) {\n                            var f = e.match(new RegExp(\"(.)\\\\[([^\\\\]]*)\\\\]\", \"g\"));\n                            f && f.forEach((function(t, n) {\n                                var i = function(e, t) {\n                                    return function(e) {\n                                        if (Array.isArray(e)) return e;\n                                    }(e) || function(e, t) {\n                                        var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                                        if (null != n) {\n                                            var i, a, r, o, l = [], s = !0, c = !1;\n                                            try {\n                                                if (r = (n = n.call(e)).next, 0 === t) {\n                                                    if (Object(n) !== n) return;\n                                                    s = !1;\n                                                } else for (;!(s = (i = r.call(n)).done) && (l.push(i.value), l.length !== t); s = !0) ;\n                                            } catch (e) {\n                                                c = !0, a = e;\n                                            } finally {\n                                                try {\n                                                    if (!s && null != n.return && (o = n.return(), Object(o) !== o)) return;\n                                                } finally {\n                                                    if (c) throw a;\n                                                }\n                                            }\n                                            return l;\n                                        }\n                                    }(e, t) || function(e, t) {\n                                        if (!e) return;\n                                        if (\"string\" == typeof e) return s(e, t);\n                                        var n = Object.prototype.toString.call(e).slice(8, -1);\n                                        \"Object\" === n && e.constructor && (n = e.constructor.name);\n                                        if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                                        if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return s(e, t);\n                                    }(e, t) || function() {\n                                        throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n                                    }();\n                                }(t.split(\"[\"), 2), r = i[0], o = i[1];\n                                o = o.replace(\"]\", \"\"), e = e.replace(new RegExp(\"\".concat((0, a.default)(r), \"\\\\[\").concat((0, \n                                a.default)(o), \"\\\\]\")), r.charAt(0) === o.charAt(0) ? \"(\".concat(r, \"|\").concat(r).concat(o, \")\") : \"\".concat(r, \"[\").concat(o, \"]\"));\n                            }));\n                        }\n                        return e;\n                    }\n                    function c(e, n, a) {\n                        var s, c, u = !1;\n                        return null !== e && \"\" !== e || ((u = null !== a.regex) ? e = (e = a.regex).replace(/^(\\^)(.*)(\\$)$/, \"$2\") : (u = !0, \n                        e = \".*\")), 1 === e.length && !1 === a.greedy && 0 !== a.repeat && (a.placeholder = \"\"), \n                        e = o(e, a), c = u ? \"regex_\" + a.regex : a.numericInput ? e.split(\"\").reverse().join(\"\") : e, \n                        null !== a.keepStatic && (c = \"ks_\" + a.keepStatic + c), \"object\" === l(a.placeholder) && (c = \"ph_\" + JSON.stringify(a.placeholder) + c), \n                        void 0 === r.default.prototype.masksCache[c] || !0 === t ? (s = {\n                            mask: e,\n                            maskToken: r.default.prototype.analyseMask(e, u, a),\n                            validPositions: [],\n                            _buffer: void 0,\n                            buffer: void 0,\n                            tests: {},\n                            excludes: {},\n                            metadata: n,\n                            maskLength: void 0,\n                            jitOffset: {}\n                        }, !0 !== t && (r.default.prototype.masksCache[c] = s, s = i.default.extend(!0, {}, r.default.prototype.masksCache[c]))) : s = i.default.extend(!0, {}, r.default.prototype.masksCache[c]), \n                        s;\n                    }\n                    \"function\" == typeof e.mask && (e.mask = e.mask(e));\n                    if (Array.isArray(e.mask)) {\n                        if (e.mask.length > 1) {\n                            null === e.keepStatic && (e.keepStatic = !0);\n                            var u = e.groupmarker[0];\n                            return (e.isRTL ? e.mask.reverse() : e.mask).forEach((function(t) {\n                                u.length > 1 && (u += e.alternatormarker), void 0 !== t.mask && \"function\" != typeof t.mask ? u += t.mask : u += t;\n                            })), c(u += e.groupmarker[1], e.mask, e);\n                        }\n                        e.mask = e.mask.pop();\n                    }\n                    n = e.mask && void 0 !== e.mask.mask && \"function\" != typeof e.mask.mask ? c(e.mask.mask, e.mask, e) : c(e.mask, e.mask, e);\n                    null === e.keepStatic && (e.keepStatic = !1);\n                    return n;\n                };\n                var i = c(n(4963)), a = c(n(7184)), r = c(n(2394)), o = c(n(9695));\n                function l(e) {\n                    return l = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, l(e);\n                }\n                function s(e, t) {\n                    (null == t || t > e.length) && (t = e.length);\n                    for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n                    return i;\n                }\n                function c(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n            },\n            157: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.mask = function() {\n                    var e = this, t = this.opts, n = this.el, c = this.dependencyLib;\n                    r.EventRuler.off(n);\n                    var u = function(t, n) {\n                        var i = t.getAttribute(\"type\"), a = \"input\" === t.tagName.toLowerCase() && n.supportsInputType.includes(i) || t.isContentEditable || \"textarea\" === t.tagName.toLowerCase();\n                        if (!a) if (\"input\" === t.tagName.toLowerCase()) {\n                            var s = document.createElement(\"input\");\n                            s.setAttribute(\"type\", i), a = \"text\" === s.type, s = null;\n                        } else a = \"partial\";\n                        return !1 !== a ? function(t) {\n                            var i, a;\n                            function s() {\n                                return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== l.getLastValidPosition.call(e) || !0 !== n.nullable ? (this.inputmask.shadowRoot || this.ownerDocument).activeElement === this && n.clearMaskOnLostFocus ? (e.isRTL ? o.clearOptionalTail.call(e, l.getBuffer.call(e).slice()).reverse() : o.clearOptionalTail.call(e, l.getBuffer.call(e).slice())).join(\"\") : i.call(this) : \"\" : i.call(this);\n                            }\n                            function u(e) {\n                                a.call(this, e), this.inputmask && (0, o.applyInputValue)(this, e);\n                            }\n                            if (!t.inputmask.__valueGet) {\n                                if (!0 !== n.noValuePatching) {\n                                    if (Object.getOwnPropertyDescriptor) {\n                                        var f = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t), \"value\") : void 0;\n                                        f && f.get && f.set ? (i = f.get, a = f.set, Object.defineProperty(t, \"value\", {\n                                            get: s,\n                                            set: u,\n                                            configurable: !0\n                                        })) : \"input\" !== t.tagName.toLowerCase() && (i = function() {\n                                            return this.textContent;\n                                        }, a = function(e) {\n                                            this.textContent = e;\n                                        }, Object.defineProperty(t, \"value\", {\n                                            get: s,\n                                            set: u,\n                                            configurable: !0\n                                        }));\n                                    } else document.__lookupGetter__ && t.__lookupGetter__(\"value\") && (i = t.__lookupGetter__(\"value\"), \n                                    a = t.__lookupSetter__(\"value\"), t.__defineGetter__(\"value\", s), t.__defineSetter__(\"value\", u));\n                                    t.inputmask.__valueGet = i, t.inputmask.__valueSet = a;\n                                }\n                                t.inputmask._valueGet = function(t) {\n                                    return e.isRTL && !0 !== t ? i.call(this.el).split(\"\").reverse().join(\"\") : i.call(this.el);\n                                }, t.inputmask._valueSet = function(t, n) {\n                                    a.call(this.el, null == t ? \"\" : !0 !== n && e.isRTL ? t.split(\"\").reverse().join(\"\") : t);\n                                }, void 0 === i && (i = function() {\n                                    return this.value;\n                                }, a = function(e) {\n                                    this.value = e;\n                                }, function(t) {\n                                    if (c.valHooks && (void 0 === c.valHooks[t] || !0 !== c.valHooks[t].inputmaskpatch)) {\n                                        var i = c.valHooks[t] && c.valHooks[t].get ? c.valHooks[t].get : function(e) {\n                                            return e.value;\n                                        }, a = c.valHooks[t] && c.valHooks[t].set ? c.valHooks[t].set : function(e, t) {\n                                            return e.value = t, e;\n                                        };\n                                        c.valHooks[t] = {\n                                            get: function(t) {\n                                                if (t.inputmask) {\n                                                    if (t.inputmask.opts.autoUnmask) return t.inputmask.unmaskedvalue();\n                                                    var a = i(t);\n                                                    return -1 !== l.getLastValidPosition.call(e, void 0, void 0, t.inputmask.maskset.validPositions) || !0 !== n.nullable ? a : \"\";\n                                                }\n                                                return i(t);\n                                            },\n                                            set: function(e, t) {\n                                                var n = a(e, t);\n                                                return e.inputmask && (0, o.applyInputValue)(e, t), n;\n                                            },\n                                            inputmaskpatch: !0\n                                        };\n                                    }\n                                }(t.type), function(e) {\n                                    r.EventRuler.on(e, \"mouseenter\", (function() {\n                                        var e = this, t = e.inputmask._valueGet(!0);\n                                        t != (e.inputmask.isRTL ? l.getBuffer.call(e.inputmask).slice().reverse() : l.getBuffer.call(e.inputmask)).join(\"\") && (0, \n                                        o.applyInputValue)(e, t);\n                                    }));\n                                }(t));\n                            }\n                        }(t) : t.inputmask = void 0, a;\n                    }(n, t);\n                    if (!1 !== u) {\n                        e.originalPlaceholder = n.placeholder, e.maxLength = void 0 !== n ? n.maxLength : void 0, \n                        -1 === e.maxLength && (e.maxLength = void 0), \"inputMode\" in n && null === n.getAttribute(\"inputmode\") && (n.inputMode = t.inputmode, \n                        n.setAttribute(\"inputmode\", t.inputmode)), !0 === u && (t.showMaskOnFocus = t.showMaskOnFocus && -1 === [ \"cc-number\", \"cc-exp\" ].indexOf(n.autocomplete), \n                        i.iphone && (t.insertModeVisual = !1, n.setAttribute(\"autocorrect\", \"off\")), r.EventRuler.on(n, \"submit\", a.EventHandlers.submitEvent), \n                        r.EventRuler.on(n, \"reset\", a.EventHandlers.resetEvent), r.EventRuler.on(n, \"blur\", a.EventHandlers.blurEvent), \n                        r.EventRuler.on(n, \"focus\", a.EventHandlers.focusEvent), r.EventRuler.on(n, \"invalid\", a.EventHandlers.invalidEvent), \n                        r.EventRuler.on(n, \"click\", a.EventHandlers.clickEvent), r.EventRuler.on(n, \"mouseleave\", a.EventHandlers.mouseleaveEvent), \n                        r.EventRuler.on(n, \"mouseenter\", a.EventHandlers.mouseenterEvent), r.EventRuler.on(n, \"paste\", a.EventHandlers.pasteEvent), \n                        r.EventRuler.on(n, \"cut\", a.EventHandlers.cutEvent), r.EventRuler.on(n, \"complete\", t.oncomplete), \n                        r.EventRuler.on(n, \"incomplete\", t.onincomplete), r.EventRuler.on(n, \"cleared\", t.oncleared), \n                        !0 !== t.inputEventOnly && r.EventRuler.on(n, \"keydown\", a.EventHandlers.keyEvent), \n                        (i.mobile || t.inputEventOnly) && n.removeAttribute(\"maxLength\"), r.EventRuler.on(n, \"input\", a.EventHandlers.inputFallBackEvent)), \n                        r.EventRuler.on(n, \"setvalue\", a.EventHandlers.setValueEvent), void 0 === e.applyMaskHook || e.applyMaskHook(), \n                        l.getBufferTemplate.call(e).join(\"\"), e.undoValue = e._valueGet(!0);\n                        var f = (n.inputmask.shadowRoot || n.ownerDocument).activeElement;\n                        if (\"\" !== n.inputmask._valueGet(!0) || !1 === t.clearMaskOnLostFocus || f === n) {\n                            (0, o.applyInputValue)(n, n.inputmask._valueGet(!0), t);\n                            var p = l.getBuffer.call(e).slice();\n                            !1 === s.isComplete.call(e, p) && t.clearIncomplete && l.resetMaskSet.call(e, !1), \n                            t.clearMaskOnLostFocus && f !== n && (-1 === l.getLastValidPosition.call(e) ? p = [] : o.clearOptionalTail.call(e, p)), \n                            (!1 === t.clearMaskOnLostFocus || t.showMaskOnFocus && f === n || \"\" !== n.inputmask._valueGet(!0)) && (0, \n                            o.writeBuffer)(n, p), f === n && l.caret.call(e, n, l.seekNext.call(e, l.getLastValidPosition.call(e)));\n                        }\n                    }\n                };\n                var i = n(9845), a = n(6030), r = n(9716), o = n(7760), l = n(8711), s = n(7215);\n            },\n            9695: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e, t, n, i) {\n                    this.matches = [], this.openGroup = e || !1, this.alternatorGroup = !1, this.isGroup = e || !1, \n                    this.isOptional = t || !1, this.isQuantifier = n || !1, this.isAlternator = i || !1, \n                    this.quantifier = {\n                        min: 1,\n                        max: 1\n                    };\n                };\n            },\n            3194: function() {\n                Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n                    value: function(e, t) {\n                        if (null == this) throw new TypeError('\"this\" is null or not defined');\n                        var n = Object(this), i = n.length >>> 0;\n                        if (0 === i) return !1;\n                        for (var a = 0 | t, r = Math.max(a >= 0 ? a : i - Math.abs(a), 0); r < i; ) {\n                            if (n[r] === e) return !0;\n                            r++;\n                        }\n                        return !1;\n                    }\n                });\n            },\n            9302: function() {\n                var e = Function.bind.call(Function.call, Array.prototype.reduce), t = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable), n = Function.bind.call(Function.call, Array.prototype.concat), i = Object.keys;\n                Object.entries || (Object.entries = function(a) {\n                    return e(i(a), (function(e, i) {\n                        return n(e, \"string\" == typeof i && t(a, i) ? [ [ i, a[i] ] ] : []);\n                    }), []);\n                });\n            },\n            7149: function() {\n                function e(t) {\n                    return e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, e(t);\n                }\n                \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === e(\"test\".__proto__) ? function(e) {\n                    return e.__proto__;\n                } : function(e) {\n                    return e.constructor.prototype;\n                });\n            },\n            4013: function() {\n                String.prototype.includes || (String.prototype.includes = function(e, t) {\n                    return \"number\" != typeof t && (t = 0), !(t + e.length > this.length) && -1 !== this.indexOf(e, t);\n                });\n            },\n            8711: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.caret = function(e, t, n, i, r) {\n                    var o, l = this, s = this.opts;\n                    if (void 0 === t) return \"selectionStart\" in e && \"selectionEnd\" in e ? (t = e.selectionStart, \n                    n = e.selectionEnd) : a.default.getSelection ? (o = a.default.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== e && o.commonAncestorContainer !== e || (t = o.startOffset, \n                    n = o.endOffset) : document.selection && document.selection.createRange && (n = (t = 0 - (o = document.selection.createRange()).duplicate().moveStart(\"character\", -e.inputmask._valueGet().length)) + o.text.length), \n                    {\n                        begin: i ? t : f.call(l, t),\n                        end: i ? n : f.call(l, n)\n                    };\n                    if (Array.isArray(t) && (n = l.isRTL ? t[0] : t[1], t = l.isRTL ? t[1] : t[0]), \n                    void 0 !== t.begin && (n = l.isRTL ? t.begin : t.end, t = l.isRTL ? t.end : t.begin), \n                    \"number\" == typeof t) {\n                        t = i ? t : f.call(l, t), n = \"number\" == typeof (n = i ? n : f.call(l, n)) ? n : t;\n                        var c = parseInt(((e.ownerDocument.defaultView || a.default).getComputedStyle ? (e.ownerDocument.defaultView || a.default).getComputedStyle(e, null) : e.currentStyle).fontSize) * n;\n                        if (e.scrollLeft = c > e.scrollWidth ? c : 0, e.inputmask.caretPos = {\n                            begin: t,\n                            end: n\n                        }, s.insertModeVisual && !1 === s.insertMode && t === n && (r || n++), e === (e.inputmask.shadowRoot || e.ownerDocument).activeElement) {\n                            if (\"setSelectionRange\" in e) e.setSelectionRange(t, n); else if (a.default.getSelection) {\n                                if (o = document.createRange(), void 0 === e.firstChild || null === e.firstChild) {\n                                    var u = document.createTextNode(\"\");\n                                    e.appendChild(u);\n                                }\n                                o.setStart(e.firstChild, t < e.inputmask._valueGet().length ? t : e.inputmask._valueGet().length), \n                                o.setEnd(e.firstChild, n < e.inputmask._valueGet().length ? n : e.inputmask._valueGet().length), \n                                o.collapse(!0);\n                                var p = a.default.getSelection();\n                                p.removeAllRanges(), p.addRange(o);\n                            } else e.createTextRange && ((o = e.createTextRange()).collapse(!0), o.moveEnd(\"character\", n), \n                            o.moveStart(\"character\", t), o.select());\n                            void 0 === e.inputmask.caretHook || e.inputmask.caretHook.call(l, {\n                                begin: t,\n                                end: n\n                            });\n                        }\n                    }\n                }, t.determineLastRequiredPosition = function(e) {\n                    var t, n, i = this, a = i.maskset, l = i.dependencyLib, c = s.call(i), u = {}, f = a.validPositions[c], p = o.getMaskTemplate.call(i, !0, s.call(i), !0, !0), d = p.length, h = void 0 !== f ? f.locator.slice() : void 0;\n                    for (t = c + 1; t < p.length; t++) h = (n = o.getTestTemplate.call(i, t, h, t - 1)).locator.slice(), \n                    u[t] = l.extend(!0, {}, n);\n                    var v = f && void 0 !== f.alternation ? f.locator[f.alternation] : void 0;\n                    for (t = d - 1; t > c && (((n = u[t]).match.optionality || n.match.optionalQuantifier && n.match.newBlockMarker || v && (v !== u[t].locator[f.alternation] && !0 !== n.match.static || !0 === n.match.static && n.locator[f.alternation] && r.checkAlternationMatch.call(i, n.locator[f.alternation].toString().split(\",\"), v.toString().split(\",\")) && \"\" !== o.getTests.call(i, t)[0].def)) && p[t] === o.getPlaceholder.call(i, t, n.match)); t--) d--;\n                    return e ? {\n                        l: d,\n                        def: u[d] ? u[d].match : void 0\n                    } : d;\n                }, t.determineNewCaretPosition = function(e, t, n) {\n                    var i, a, r, f = this, p = f.maskset, d = f.opts;\n                    t && (f.isRTL ? e.end = e.begin : e.begin = e.end);\n                    if (e.begin === e.end) {\n                        switch (n = n || d.positionCaretOnClick) {\n                          case \"none\":\n                            break;\n\n                          case \"select\":\n                            e = {\n                                begin: 0,\n                                end: l.call(f).length\n                            };\n                            break;\n\n                          case \"ignore\":\n                            e.end = e.begin = u.call(f, s.call(f));\n                            break;\n\n                          case \"radixFocus\":\n                            if (f.clicked > 1 && 0 === p.validPositions.length) break;\n                            if (function(e) {\n                                if (\"\" !== d.radixPoint && 0 !== d.digits) {\n                                    var t = p.validPositions;\n                                    if (void 0 === t[e] || void 0 === t[e].input) {\n                                        if (e < u.call(f, -1)) return !0;\n                                        var n = l.call(f).indexOf(d.radixPoint);\n                                        if (-1 !== n) {\n                                            for (var i = 0, a = t.length; i < a; i++) if (t[i] && n < i && t[i].input !== o.getPlaceholder.call(f, i)) return !1;\n                                            return !0;\n                                        }\n                                    }\n                                }\n                                return !1;\n                            }(e.begin)) {\n                                var h = l.call(f).join(\"\").indexOf(d.radixPoint);\n                                e.end = e.begin = d.numericInput ? u.call(f, h) : h;\n                                break;\n                            }\n\n                          default:\n                            if (i = e.begin, a = s.call(f, i, !0), i <= (r = u.call(f, -1 !== a || c.call(f, 0) ? a : -1))) e.end = e.begin = c.call(f, i, !1, !0) ? i : u.call(f, i); else {\n                                var v = p.validPositions[a], m = o.getTestTemplate.call(f, r, v ? v.match.locator : void 0, v), g = o.getPlaceholder.call(f, r, m.match);\n                                if (\"\" !== g && l.call(f)[r] !== g && !0 !== m.match.optionalQuantifier && !0 !== m.match.newBlockMarker || !c.call(f, r, d.keepStatic, !0) && m.match.def === g) {\n                                    var y = u.call(f, r);\n                                    (i >= y || i === r) && (r = y);\n                                }\n                                e.end = e.begin = r;\n                            }\n                        }\n                        return e;\n                    }\n                }, t.getBuffer = l, t.getBufferTemplate = function() {\n                    var e = this.maskset;\n                    void 0 === e._buffer && (e._buffer = o.getMaskTemplate.call(this, !1, 1), void 0 === e.buffer && (e.buffer = e._buffer.slice()));\n                    return e._buffer;\n                }, t.getLastValidPosition = s, t.isMask = c, t.resetMaskSet = function(e) {\n                    var t = this.maskset;\n                    t.buffer = void 0, !0 !== e && (t.validPositions = [], t.p = 0);\n                    !1 === e && (t.tests = {}, t.jitOffset = {});\n                }, t.seekNext = u, t.seekPrevious = function(e, t) {\n                    var n = this, i = e - 1;\n                    if (e <= 0) return 0;\n                    for (;i > 0 && (!0 === t && (!0 !== o.getTest.call(n, i).match.newBlockMarker || !c.call(n, i, void 0, !0)) || !0 !== t && !c.call(n, i, void 0, !0)); ) i--;\n                    return i;\n                }, t.translatePosition = f;\n                var i, a = (i = n(9380)) && i.__esModule ? i : {\n                    default: i\n                }, r = n(7215), o = n(4713);\n                function l(e) {\n                    var t = this, n = t.maskset;\n                    return void 0 !== n.buffer && !0 !== e || (n.buffer = o.getMaskTemplate.call(t, !0, s.call(t), !0), \n                    void 0 === n._buffer && (n._buffer = n.buffer.slice())), n.buffer;\n                }\n                function s(e, t, n) {\n                    var i = this.maskset, a = -1, r = -1, o = n || i.validPositions;\n                    void 0 === e && (e = -1);\n                    for (var l = 0, s = o.length; l < s; l++) o[l] && (t || !0 !== o[l].generatedInput) && (l <= e && (a = l), \n                    l >= e && (r = l));\n                    return -1 === a || a === e ? r : -1 === r || e - a < r - e ? a : r;\n                }\n                function c(e, t, n) {\n                    var i = this, a = this.maskset, r = o.getTestTemplate.call(i, e).match;\n                    if (\"\" === r.def && (r = o.getTest.call(i, e).match), !0 !== r.static) return r.fn;\n                    if (!0 === n && void 0 !== a.validPositions[e] && !0 !== a.validPositions[e].generatedInput) return !0;\n                    if (!0 !== t && e > -1) {\n                        if (n) {\n                            var l = o.getTests.call(i, e);\n                            return l.length > 1 + (\"\" === l[l.length - 1].match.def ? 1 : 0);\n                        }\n                        var s = o.determineTestTemplate.call(i, e, o.getTests.call(i, e)), c = o.getPlaceholder.call(i, e, s.match);\n                        return s.match.def !== c;\n                    }\n                    return !1;\n                }\n                function u(e, t, n) {\n                    var i = this;\n                    void 0 === n && (n = !0);\n                    for (var a = e + 1; \"\" !== o.getTest.call(i, a).match.def && (!0 === t && (!0 !== o.getTest.call(i, a).match.newBlockMarker || !c.call(i, a, void 0, !0)) || !0 !== t && !c.call(i, a, void 0, n)); ) a++;\n                    return a;\n                }\n                function f(e) {\n                    var t = this.opts, n = this.el;\n                    return !this.isRTL || \"number\" != typeof e || t.greedy && \"\" === t.placeholder || !n || (e = this._valueGet().length - e) < 0 && (e = 0), \n                    e;\n                }\n            },\n            4713: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.determineTestTemplate = f, t.getDecisionTaker = s, t.getMaskTemplate = function(e, t, n, i, a) {\n                    var r = this, o = this.opts, l = this.maskset, s = o.greedy;\n                    a && o.greedy && (o.greedy = !1, r.maskset.tests = {});\n                    t = t || 0;\n                    var p, d, v, m, g = [], y = 0;\n                    do {\n                        if (!0 === e && l.validPositions[y]) d = (v = a && l.validPositions[y].match.optionality && void 0 === l.validPositions[y + 1] && (!0 === l.validPositions[y].generatedInput || l.validPositions[y].input == o.skipOptionalPartCharacter && y > 0) ? f.call(r, y, h.call(r, y, p, y - 1)) : l.validPositions[y]).match, \n                        p = v.locator.slice(), g.push(!0 === n ? v.input : !1 === n ? d.nativeDef : c.call(r, y, d)); else {\n                            d = (v = u.call(r, y, p, y - 1)).match, p = v.locator.slice();\n                            var k = !0 !== i && (!1 !== o.jitMasking ? o.jitMasking : d.jit);\n                            (m = (m || l.validPositions[y - 1]) && d.static && d.def !== o.groupSeparator && null === d.fn) || !1 === k || void 0 === k || \"number\" == typeof k && isFinite(k) && k > y ? g.push(!1 === n ? d.nativeDef : c.call(r, g.length, d)) : m = !1;\n                        }\n                        y++;\n                    } while (!0 !== d.static || \"\" !== d.def || t > y);\n                    \"\" === g[g.length - 1] && g.pop();\n                    !1 === n && void 0 !== l.maskLength || (l.maskLength = y - 1);\n                    return o.greedy = s, g;\n                }, t.getPlaceholder = c, t.getTest = p, t.getTestTemplate = u, t.getTests = h, t.isSubsetOf = d;\n                var i, a = (i = n(2394)) && i.__esModule ? i : {\n                    default: i\n                }, r = n(8711);\n                function o(e) {\n                    return o = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    }, o(e);\n                }\n                function l(e, t) {\n                    var n = (null != e.alternation ? e.mloc[s(e)] : e.locator).join(\"\");\n                    if (\"\" !== n) for (n = n.split(\":\")[0]; n.length < t; ) n += \"0\";\n                    return n;\n                }\n                function s(e) {\n                    var t = e.locator[e.alternation];\n                    return \"string\" == typeof t && t.length > 0 && (t = t.split(\",\")[0]), void 0 !== t ? t.toString() : \"\";\n                }\n                function c(e, t, n) {\n                    var i = this, a = this.opts, l = this.maskset;\n                    if (void 0 !== (t = t || p.call(i, e).match).placeholder || !0 === n) {\n                        if (\"\" !== t.placeholder && !0 === t.static && !0 !== t.generated) {\n                            var s = r.getLastValidPosition.call(i, e), c = r.seekNext.call(i, s);\n                            return (n ? e <= c : e < c) ? a.staticDefinitionSymbol && t.static ? t.nativeDef : t.def : \"function\" == typeof t.placeholder ? t.placeholder(a) : t.placeholder;\n                        }\n                        return \"function\" == typeof t.placeholder ? t.placeholder(a) : t.placeholder;\n                    }\n                    if (!0 === t.static) {\n                        if (e > -1 && void 0 === l.validPositions[e]) {\n                            var u, f = h.call(i, e), d = [];\n                            if (\"string\" == typeof a.placeholder && f.length > 1 + (\"\" === f[f.length - 1].match.def ? 1 : 0)) for (var v = 0; v < f.length; v++) if (\"\" !== f[v].match.def && !0 !== f[v].match.optionality && !0 !== f[v].match.optionalQuantifier && (!0 === f[v].match.static || void 0 === u || !1 !== f[v].match.fn.test(u.match.def, l, e, !0, a)) && (d.push(f[v]), \n                            !0 === f[v].match.static && (u = f[v]), d.length > 1 && /[0-9a-bA-Z]/.test(d[0].match.def))) return a.placeholder.charAt(e % a.placeholder.length);\n                        }\n                        return t.def;\n                    }\n                    return \"object\" === o(a.placeholder) ? t.def : a.placeholder.charAt(e % a.placeholder.length);\n                }\n                function u(e, t, n) {\n                    return this.maskset.validPositions[e] || f.call(this, e, h.call(this, e, t ? t.slice() : t, n));\n                }\n                function f(e, t) {\n                    var n = this.opts, i = 0, a = function(e, t) {\n                        var n = 0, i = !1;\n                        t.forEach((function(e) {\n                            e.match.optionality && (0 !== n && n !== e.match.optionality && (i = !0), (0 === n || n > e.match.optionality) && (n = e.match.optionality));\n                        })), n && (0 == e || 1 == t.length ? n = 0 : i || (n = 0));\n                        return n;\n                    }(e, t);\n                    e = e > 0 ? e - 1 : 0;\n                    var r, o, s, c = l(p.call(this, e));\n                    n.greedy && t.length > 1 && \"\" === t[t.length - 1].match.def && (i = 1);\n                    for (var u = 0; u < t.length - i; u++) {\n                        var f = t[u];\n                        r = l(f, c.length);\n                        var d = Math.abs(r - c);\n                        (!0 !== f.unMatchedAlternationStopped || t.filter((function(e) {\n                            return !0 !== e.unMatchedAlternationStopped;\n                        })).length <= 1) && (void 0 === o || \"\" !== r && d < o || s && !n.greedy && s.match.optionality && s.match.optionality - a > 0 && \"master\" === s.match.newBlockMarker && (!f.match.optionality || f.match.optionality - a < 1 || !f.match.newBlockMarker) || s && !n.greedy && s.match.optionalQuantifier && !f.match.optionalQuantifier) && (o = d, \n                        s = f);\n                    }\n                    return s;\n                }\n                function p(e, t) {\n                    var n = this.maskset;\n                    return n.validPositions[e] ? n.validPositions[e] : (t || h.call(this, e))[0];\n                }\n                function d(e, t, n) {\n                    function i(e) {\n                        for (var t, n = [], i = -1, a = 0, r = e.length; a < r; a++) if (\"-\" === e.charAt(a)) for (t = e.charCodeAt(a + 1); ++i < t; ) n.push(String.fromCharCode(i)); else i = e.charCodeAt(a), \n                        n.push(e.charAt(a));\n                        return n.join(\"\");\n                    }\n                    return e.match.def === t.match.nativeDef || !(!(n.regex || e.match.fn instanceof RegExp && t.match.fn instanceof RegExp) || !0 === e.match.static || !0 === t.match.static) && (\".\" === t.match.fn.source || -1 !== i(t.match.fn.source.replace(/[[\\]/]/g, \"\")).indexOf(i(e.match.fn.source.replace(/[[\\]/]/g, \"\"))));\n                }\n                function h(e, t, n) {\n                    var i, r, o = this, l = this.dependencyLib, s = this.maskset, c = this.opts, u = this.el, p = s.maskToken, h = t ? n : 0, v = t ? t.slice() : [ 0 ], m = [], g = !1, y = t ? t.join(\"\") : \"\", k = !1;\n                    function b(t, n, r, l) {\n                        function f(r, l, p) {\n                            function v(e, t) {\n                                var n = 0 === t.matches.indexOf(e);\n                                return n || t.matches.every((function(i, a) {\n                                    return !0 === i.isQuantifier ? n = v(e, t.matches[a - 1]) : Object.prototype.hasOwnProperty.call(i, \"matches\") && (n = v(e, i)), \n                                    !n;\n                                })), n;\n                            }\n                            function w(e, t, n) {\n                                var i, a;\n                                if ((s.tests[e] || s.validPositions[e]) && (s.validPositions[e] ? [ s.validPositions[e] ] : s.tests[e]).every((function(e, r) {\n                                    if (e.mloc[t]) return i = e, !1;\n                                    var o = void 0 !== n ? n : e.alternation, l = void 0 !== e.locator[o] ? e.locator[o].toString().indexOf(t) : -1;\n                                    return (void 0 === a || l < a) && -1 !== l && (i = e, a = l), !0;\n                                })), i) {\n                                    var r = i.locator[i.alternation], o = i.mloc[t] || i.mloc[r] || i.locator;\n                                    if (-1 !== o[o.length - 1].toString().indexOf(\":\")) o.pop();\n                                    return o.slice((void 0 !== n ? n : i.alternation) + 1);\n                                }\n                                return void 0 !== n ? w(e, t) : void 0;\n                            }\n                            function P(t, n) {\n                                return !0 === t.match.static && !0 !== n.match.static && n.match.fn.test(t.match.def, s, e, !1, c, !1);\n                            }\n                            function S(e, t) {\n                                var n = e.alternation, i = void 0 === t || n <= t.alternation && -1 === e.locator[n].toString().indexOf(t.locator[n]);\n                                if (!i && n > t.alternation) for (var a = 0; a < n; a++) if (e.locator[a] !== t.locator[a]) {\n                                    n = a, i = !0;\n                                    break;\n                                }\n                                return !!i && function(n) {\n                                    e.mloc = e.mloc || {};\n                                    var i = e.locator[n];\n                                    if (void 0 !== i) {\n                                        if (\"string\" == typeof i && (i = i.split(\",\")[0]), void 0 === e.mloc[i] && (e.mloc[i] = e.locator.slice(), \n                                        e.mloc[i].push(\":\".concat(e.alternation))), void 0 !== t) {\n                                            for (var a in t.mloc) \"string\" == typeof a && (a = parseInt(a.split(\",\")[0])), e.mloc[a + 0] = t.mloc[a];\n                                            e.locator[n] = Object.keys(e.mloc).join(\",\");\n                                        }\n                                        return e.alternation > n && (e.alternation = n), !0;\n                                    }\n                                    return e.alternation = void 0, !1;\n                                }(n);\n                            }\n                            function O(e, t) {\n                                if (e.locator.length !== t.locator.length) return !1;\n                                for (var n = e.alternation + 1; n < e.locator.length; n++) if (e.locator[n] !== t.locator[n]) return !1;\n                                return !0;\n                            }\n                            if (h > e + c._maxTestPos) throw new Error(\"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \".concat(s.mask));\n                            if (h === e && void 0 === r.matches) {\n                                if (m.push({\n                                    match: r,\n                                    locator: l.reverse(),\n                                    cd: y,\n                                    mloc: {}\n                                }), !r.optionality || void 0 !== p || !(c.definitions && c.definitions[r.nativeDef] && c.definitions[r.nativeDef].optional || a.default.prototype.definitions[r.nativeDef] && a.default.prototype.definitions[r.nativeDef].optional)) return !0;\n                                g = !0, h = e;\n                            } else if (void 0 !== r.matches) {\n                                if (r.isGroup && p !== r) return function() {\n                                    if (r = f(t.matches[t.matches.indexOf(r) + 1], l, p)) return !0;\n                                }();\n                                if (r.isOptional) return function() {\n                                    var t = r, a = m.length;\n                                    if (r = b(r, n, l, p), m.length > 0) {\n                                        if (m.forEach((function(e, t) {\n                                            t >= a && (e.match.optionality = e.match.optionality ? e.match.optionality + 1 : 1);\n                                        })), i = m[m.length - 1].match, void 0 !== p || !v(i, t)) return r;\n                                        g = !0, h = e;\n                                    }\n                                }();\n                                if (r.isAlternator) return function() {\n                                    function i(e) {\n                                        for (var t, n = e.matches[0].matches ? e.matches[0].matches.length : 1, i = 0; i < e.matches.length && n === (t = e.matches[i].matches ? e.matches[i].matches.length : 1); i++) ;\n                                        return n !== t;\n                                    }\n                                    o.hasAlternator = !0;\n                                    var a, v = r, y = [], b = m.slice(), x = l.length, _ = n.length > 0 ? n.shift() : -1;\n                                    if (-1 === _ || \"string\" == typeof _) {\n                                        var M, E = h, j = n.slice(), T = [];\n                                        if (\"string\" == typeof _) T = _.split(\",\"); else for (M = 0; M < v.matches.length; M++) T.push(M.toString());\n                                        if (void 0 !== s.excludes[e]) {\n                                            for (var A = T.slice(), D = 0, L = s.excludes[e].length; D < L; D++) {\n                                                var C = s.excludes[e][D].toString().split(\":\");\n                                                l.length == C[1] && T.splice(T.indexOf(C[0]), 1);\n                                            }\n                                            0 === T.length && (delete s.excludes[e], T = A);\n                                        }\n                                        (!0 === c.keepStatic || isFinite(parseInt(c.keepStatic)) && E >= c.keepStatic) && (T = T.slice(0, 1));\n                                        for (var B = 0; B < T.length; B++) {\n                                            M = parseInt(T[B]), m = [], n = \"string\" == typeof _ && w(h, M, x) || j.slice();\n                                            var I = v.matches[M];\n                                            if (I && f(I, [ M ].concat(l), p)) r = !0; else if (0 === B && (k = i(v)), I && I.matches && I.matches.length > v.matches[0].matches.length) break;\n                                            a = m.slice(), h = E, m = [];\n                                            for (var R = 0; R < a.length; R++) {\n                                                var F = a[R], N = !1;\n                                                F.alternation = F.alternation || x, S(F);\n                                                for (var V = 0; V < y.length; V++) {\n                                                    var G = y[V];\n                                                    if (\"string\" != typeof _ || void 0 !== F.alternation && T.includes(F.locator[F.alternation].toString())) {\n                                                        if (F.match.nativeDef === G.match.nativeDef) {\n                                                            N = !0, S(G, F);\n                                                            break;\n                                                        }\n                                                        if (d(F, G, c)) {\n                                                            S(F, G) && (N = !0, y.splice(y.indexOf(G), 0, F));\n                                                            break;\n                                                        }\n                                                        if (d(G, F, c)) {\n                                                            S(G, F);\n                                                            break;\n                                                        }\n                                                        if (P(F, G)) {\n                                                            O(F, G) || void 0 !== u.inputmask.userOptions.keepStatic ? S(F, G) && (N = !0, y.splice(y.indexOf(G), 0, F)) : c.keepStatic = !0;\n                                                            break;\n                                                        }\n                                                        if (P(G, F)) {\n                                                            S(G, F);\n                                                            break;\n                                                        }\n                                                    }\n                                                }\n                                                N || y.push(F);\n                                            }\n                                        }\n                                        m = b.concat(y), h = e, g = m.length > 0 && k, r = y.length > 0 && !k, k && g && !r && m.forEach((function(e, t) {\n                                            e.unMatchedAlternationStopped = !0;\n                                        })), n = j.slice();\n                                    } else r = f(v.matches[_] || t.matches[_], [ _ ].concat(l), p);\n                                    if (r) return !0;\n                                }();\n                                if (r.isQuantifier && p !== t.matches[t.matches.indexOf(r) - 1]) return function() {\n                                    for (var a = r, o = !1, u = n.length > 0 ? n.shift() : 0; u < (isNaN(a.quantifier.max) ? u + 1 : a.quantifier.max) && h <= e; u++) {\n                                        var p = t.matches[t.matches.indexOf(a) - 1];\n                                        if (r = f(p, [ u ].concat(l), p)) {\n                                            if (m.forEach((function(t, n) {\n                                                (i = x(p, t.match) ? t.match : m[m.length - 1].match).optionalQuantifier = u >= a.quantifier.min, \n                                                i.jit = (u + 1) * (p.matches.indexOf(i) + 1) > a.quantifier.jit, i.optionalQuantifier && v(i, p) && (g = !0, \n                                                h = e, c.greedy && null == s.validPositions[e - 1] && u > a.quantifier.min && -1 != [ \"*\", \"+\" ].indexOf(a.quantifier.max) && (m.pop(), \n                                                y = void 0), o = !0, r = !1), !o && i.jit && (s.jitOffset[e] = p.matches.length - p.matches.indexOf(i));\n                                            })), o) break;\n                                            return !0;\n                                        }\n                                    }\n                                }();\n                                if (r = b(r, n, l, p)) return !0;\n                            } else h++;\n                        }\n                        for (var p = n.length > 0 ? n.shift() : 0; p < t.matches.length; p++) if (!0 !== t.matches[p].isQuantifier) {\n                            var v = f(t.matches[p], [ p ].concat(r), l);\n                            if (v && h === e) return v;\n                            if (h > e) break;\n                        }\n                    }\n                    function x(e, t) {\n                        var n = -1 != e.matches.indexOf(t);\n                        return n || e.matches.forEach((function(e, i) {\n                            void 0 === e.matches || n || (n = x(e, t));\n                        })), n;\n                    }\n                    if (e > -1) {\n                        if (void 0 === t) {\n                            for (var w, P = e - 1; void 0 === (w = s.validPositions[P] || s.tests[P]) && P > -1; ) P--;\n                            void 0 !== w && P > -1 && (v = function(e, t) {\n                                var n, i = [];\n                                return Array.isArray(t) || (t = [ t ]), t.length > 0 && (void 0 === t[0].alternation || !0 === c.keepStatic ? 0 === (i = f.call(o, e, t.slice()).locator.slice()).length && (i = t[0].locator.slice()) : t.forEach((function(e) {\n                                    \"\" !== e.def && (0 === i.length ? (n = e.alternation, i = e.locator.slice()) : e.locator[n] && -1 === i[n].toString().indexOf(e.locator[n]) && (i[n] += \",\" + e.locator[n]));\n                                }))), i;\n                            }(P, w), y = v.join(\"\"), h = P);\n                        }\n                        if (s.tests[e] && s.tests[e][0].cd === y) return s.tests[e];\n                        for (var S = v.shift(); S < p.length; S++) {\n                            if (b(p[S], v, [ S ]) && h === e || h > e) break;\n                        }\n                    }\n                    return (0 === m.length || g) && m.push({\n                        match: {\n                            fn: null,\n                            static: !0,\n                            optionality: !1,\n                            casing: null,\n                            def: \"\",\n                            placeholder: \"\"\n                        },\n                        locator: k && 0 === m.filter((function(e) {\n                            return !0 !== e.unMatchedAlternationStopped;\n                        })).length ? [ 0 ] : [],\n                        mloc: {},\n                        cd: y\n                    }), void 0 !== t && s.tests[e] ? r = l.extend(!0, [], m) : (s.tests[e] = l.extend(!0, [], m), \n                    r = s.tests[e]), m.forEach((function(e) {\n                        e.match.optionality = e.match.defOptionality || !1;\n                    })), r;\n                }\n            },\n            7215: function(e, t, n) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.alternate = l, t.checkAlternationMatch = function(e, t, n) {\n                    for (var i, a = this.opts.greedy ? t : t.slice(0, 1), r = !1, o = void 0 !== n ? n.split(\",\") : [], l = 0; l < o.length; l++) -1 !== (i = e.indexOf(o[l])) && e.splice(i, 1);\n                    for (var s = 0; s < e.length; s++) if (a.includes(e[s])) {\n                        r = !0;\n                        break;\n                    }\n                    return r;\n                }, t.handleRemove = function(e, t, n, i, s) {\n                    var c = this, u = this.maskset, f = this.opts;\n                    if ((f.numericInput || c.isRTL) && (t === a.keys.Backspace ? t = a.keys.Delete : t === a.keys.Delete && (t = a.keys.Backspace), \n                    c.isRTL)) {\n                        var p = n.end;\n                        n.end = n.begin, n.begin = p;\n                    }\n                    var d, h = r.getLastValidPosition.call(c, void 0, !0);\n                    n.end >= r.getBuffer.call(c).length && h >= n.end && (n.end = h + 1);\n                    t === a.keys.Backspace ? n.end - n.begin < 1 && (n.begin = r.seekPrevious.call(c, n.begin)) : t === a.keys.Delete && n.begin === n.end && (n.end = r.isMask.call(c, n.end, !0, !0) ? n.end + 1 : r.seekNext.call(c, n.end) + 1);\n                    !1 !== (d = v.call(c, n)) && ((!0 !== i && !1 !== f.keepStatic || null !== f.regex && -1 !== o.getTest.call(c, n.begin).match.def.indexOf(\"|\")) && l.call(c, !0), \n                    !0 !== i && (u.p = t === a.keys.Delete ? n.begin + d : n.begin, u.p = r.determineNewCaretPosition.call(c, {\n                        begin: u.p,\n                        end: u.p\n                    }, !1, !1 === f.insertMode && t === a.keys.Backspace ? \"none\" : void 0).begin));\n                }, t.isComplete = c, t.isSelection = u, t.isValid = f, t.refreshFromBuffer = d, \n                t.revalidateMask = v;\n                var i = n(6030), a = n(2839), r = n(8711), o = n(4713);\n                function l(e, t, n, i, a, s) {\n                    var c = this, u = this.dependencyLib, p = this.opts, d = c.maskset;\n                    if (!c.hasAlternator) return !1;\n                    var h, v, m, g, y, k, b, x, w, P, S, O = u.extend(!0, [], d.validPositions), _ = u.extend(!0, {}, d.tests), M = !1, E = !1, j = void 0 !== a ? a : r.getLastValidPosition.call(c);\n                    if (s && (P = s.begin, S = s.end, s.begin > s.end && (P = s.end, S = s.begin)), \n                    -1 === j && void 0 === a) h = 0, v = (g = o.getTest.call(c, h)).alternation; else for (;j >= 0; j--) if ((m = d.validPositions[j]) && void 0 !== m.alternation) {\n                        if (j <= (e || 0) && g && g.locator[m.alternation] !== m.locator[m.alternation]) break;\n                        h = j, v = d.validPositions[h].alternation, g = m;\n                    }\n                    if (void 0 !== v) {\n                        b = parseInt(h), d.excludes[b] = d.excludes[b] || [], !0 !== e && d.excludes[b].push((0, \n                        o.getDecisionTaker)(g) + \":\" + g.alternation);\n                        var T = [], A = -1;\n                        for (y = b; b < r.getLastValidPosition.call(c, void 0, !0) + 1; y++) -1 === A && e <= y && void 0 !== t && (T.push(t), \n                        A = T.length - 1), (k = d.validPositions[b]) && !0 !== k.generatedInput && (void 0 === s || y < P || y >= S) && T.push(k.input), \n                        d.validPositions.splice(b, 1);\n                        for (-1 === A && void 0 !== t && (T.push(t), A = T.length - 1); void 0 !== d.excludes[b] && d.excludes[b].length < 10; ) {\n                            for (d.tests = {}, r.resetMaskSet.call(c, !0), M = !0, y = 0; y < T.length && (x = M.caret || 0 == p.insertMode && null != x ? r.seekNext.call(c, x) : r.getLastValidPosition.call(c, void 0, !0) + 1, \n                            w = T[y], M = f.call(c, x, w, !1, i, !0)); y++) y === A && (E = M), 1 == e && M && (E = {\n                                caretPos: y\n                            });\n                            if (M) break;\n                            if (r.resetMaskSet.call(c), g = o.getTest.call(c, b), d.validPositions = u.extend(!0, [], O), \n                            d.tests = u.extend(!0, {}, _), !d.excludes[b]) {\n                                E = l.call(c, e, t, n, i, b - 1, s);\n                                break;\n                            }\n                            if (null != g.alternation) {\n                                var D = (0, o.getDecisionTaker)(g);\n                                if (-1 !== d.excludes[b].indexOf(D + \":\" + g.alternation)) {\n                                    E = l.call(c, e, t, n, i, b - 1, s);\n                                    break;\n                                }\n                                for (d.excludes[b].push(D + \":\" + g.alternation), y = b; y < r.getLastValidPosition.call(c, void 0, !0) + 1; y++) d.validPositions.splice(b);\n                            } else delete d.excludes[b];\n                        }\n                    }\n                    return E && !1 === p.keepStatic || delete d.excludes[b], E;\n                }\n                function s(e, t, n) {\n                    var i = this.opts, r = this.maskset;\n                    switch (i.casing || t.casing) {\n                      case \"upper\":\n                        e = e.toUpperCase();\n                        break;\n\n                      case \"lower\":\n                        e = e.toLowerCase();\n                        break;\n\n                      case \"title\":\n                        var o = r.validPositions[n - 1];\n                        e = 0 === n || o && o.input === String.fromCharCode(a.keyCode.Space) ? e.toUpperCase() : e.toLowerCase();\n                        break;\n\n                      default:\n                        if (\"function\" == typeof i.casing) {\n                            var l = Array.prototype.slice.call(arguments);\n                            l.push(r.validPositions), e = i.casing.apply(this, l);\n                        }\n                    }\n                    return e;\n                }\n                function c(e) {\n                    var t = this, n = this.opts, i = this.maskset;\n                    if (\"function\" == typeof n.isComplete) return n.isComplete(e, n);\n                    if (\"*\" !== n.repeat) {\n                        var a = !1, l = r.determineLastRequiredPosition.call(t, !0), s = l.l;\n                        if (void 0 === l.def || l.def.newBlockMarker || l.def.optionality || l.def.optionalQuantifier) {\n                            a = !0;\n                            for (var c = 0; c <= s; c++) {\n                                var u = o.getTestTemplate.call(t, c).match;\n                                if (!0 !== u.static && void 0 === i.validPositions[c] && (!1 === u.optionality || void 0 === u.optionality || u.optionality && 0 == u.newBlockMarker) && (!1 === u.optionalQuantifier || void 0 === u.optionalQuantifier) || !0 === u.static && \"\" != u.def && e[c] !== o.getPlaceholder.call(t, c, u)) {\n                                    a = !1;\n                                    break;\n                                }\n                            }\n                        }\n                        return a;\n                    }\n                }\n                function u(e) {\n                    var t = this.opts.insertMode ? 0 : 1;\n                    return this.isRTL ? e.begin - e.end > t : e.end - e.begin > t;\n                }\n                function f(e, t, n, i, a, p, m) {\n                    var g = this, y = this.dependencyLib, k = this.opts, b = g.maskset;\n                    n = !0 === n;\n                    var x = e;\n                    function w(e) {\n                        if (void 0 !== e) {\n                            if (void 0 !== e.remove && (Array.isArray(e.remove) || (e.remove = [ e.remove ]), \n                            e.remove.sort((function(e, t) {\n                                return g.isRTL ? e.pos - t.pos : t.pos - e.pos;\n                            })).forEach((function(e) {\n                                v.call(g, {\n                                    begin: e,\n                                    end: e + 1\n                                });\n                            })), e.remove = void 0), void 0 !== e.insert && (Array.isArray(e.insert) || (e.insert = [ e.insert ]), \n                            e.insert.sort((function(e, t) {\n                                return g.isRTL ? t.pos - e.pos : e.pos - t.pos;\n                            })).forEach((function(e) {\n                                \"\" !== e.c && f.call(g, e.pos, e.c, void 0 === e.strict || e.strict, void 0 !== e.fromIsValid ? e.fromIsValid : i);\n                            })), e.insert = void 0), e.refreshFromBuffer && e.buffer) {\n                                var t = e.refreshFromBuffer;\n                                d.call(g, !0 === t ? t : t.start, t.end, e.buffer), e.refreshFromBuffer = void 0;\n                            }\n                            void 0 !== e.rewritePosition && (x = e.rewritePosition, e = !0);\n                        }\n                        return e;\n                    }\n                    function P(t, n, a) {\n                        var l = !1;\n                        return o.getTests.call(g, t).every((function(c, f) {\n                            var p = c.match;\n                            if (r.getBuffer.call(g, !0), !1 !== (l = (!p.jit || void 0 !== b.validPositions[r.seekPrevious.call(g, t)]) && (null != p.fn ? p.fn.test(n, b, t, a, k, u.call(g, e)) : (n === p.def || n === k.skipOptionalPartCharacter) && \"\" !== p.def && {\n                                c: o.getPlaceholder.call(g, t, p, !0) || p.def,\n                                pos: t\n                            }))) {\n                                var d = void 0 !== l.c ? l.c : n, h = t;\n                                return d = d === k.skipOptionalPartCharacter && !0 === p.static ? o.getPlaceholder.call(g, t, p, !0) || p.def : d, \n                                !0 !== (l = w(l)) && void 0 !== l.pos && l.pos !== t && (h = l.pos), !0 !== l && void 0 === l.pos && void 0 === l.c ? !1 : (!1 === v.call(g, e, y.extend({}, c, {\n                                    input: s.call(g, d, p, h)\n                                }), i, h) && (l = !1), !1);\n                            }\n                            return !0;\n                        })), l;\n                    }\n                    void 0 !== e.begin && (x = g.isRTL ? e.end : e.begin);\n                    var S = !0, O = y.extend(!0, [], b.validPositions);\n                    if (!1 === k.keepStatic && void 0 !== b.excludes[x] && !0 !== a && !0 !== i) for (var _ = x; _ < (g.isRTL ? e.begin : e.end); _++) void 0 !== b.excludes[_] && (b.excludes[_] = void 0, \n                    delete b.tests[_]);\n                    if (\"function\" == typeof k.preValidation && !0 !== i && !0 !== p && (S = w(S = k.preValidation.call(g, r.getBuffer.call(g), x, t, u.call(g, e), k, b, e, n || a))), \n                    !0 === S) {\n                        if (S = P(x, t, n), (!n || !0 === i) && !1 === S && !0 !== p) {\n                            var M = b.validPositions[x];\n                            if (!M || !0 !== M.match.static || M.match.def !== t && t !== k.skipOptionalPartCharacter) {\n                                if (k.insertMode || void 0 === b.validPositions[r.seekNext.call(g, x)] || e.end > x) {\n                                    var E = !1;\n                                    if (b.jitOffset[x] && void 0 === b.validPositions[r.seekNext.call(g, x)] && !1 !== (S = f.call(g, x + b.jitOffset[x], t, !0, !0)) && (!0 !== a && (S.caret = x), \n                                    E = !0), e.end > x && (b.validPositions[x] = void 0), !E && !r.isMask.call(g, x, k.keepStatic && 0 === x)) for (var j = x + 1, T = r.seekNext.call(g, x, !1, 0 !== x); j <= T; j++) if (!1 !== (S = P(j, t, n))) {\n                                        S = h.call(g, x, void 0 !== S.pos ? S.pos : j) || S, x = j;\n                                        break;\n                                    }\n                                }\n                            } else S = {\n                                caret: r.seekNext.call(g, x)\n                            };\n                        }\n                        g.hasAlternator && !0 !== a && !n && (a = !0, !1 === S && k.keepStatic && (c.call(g, r.getBuffer.call(g)) || 0 === x) ? S = l.call(g, x, t, n, i, void 0, e) : (u.call(g, e) && b.tests[x] && b.tests[x].length > 1 && k.keepStatic || 1 == S && !0 !== k.numericInput && b.tests[x] && b.tests[x].length > 1 && r.getLastValidPosition.call(g, void 0, !0) > x) && (S = l.call(g, !0))), \n                        !0 === S && (S = {\n                            pos: x\n                        });\n                    }\n                    if (\"function\" == typeof k.postValidation && !0 !== i && !0 !== p) {\n                        var A = k.postValidation.call(g, r.getBuffer.call(g, !0), void 0 !== e.begin ? g.isRTL ? e.end : e.begin : e, t, S, k, b, n, m);\n                        void 0 !== A && (S = !0 === A ? S : A);\n                    }\n                    S && void 0 === S.pos && (S.pos = x), !1 === S || !0 === p ? (r.resetMaskSet.call(g, !0), \n                    b.validPositions = y.extend(!0, [], O)) : h.call(g, void 0, x, !0);\n                    var D = w(S);\n                    void 0 !== g.maxLength && (r.getBuffer.call(g).length > g.maxLength && !i && (r.resetMaskSet.call(g, !0), \n                    b.validPositions = y.extend(!0, [], O), D = !1));\n                    return D;\n                }\n                function p(e, t, n) {\n                    for (var i = this.maskset, a = !1, r = o.getTests.call(this, e), l = 0; l < r.length; l++) {\n                        if (r[l].match && (r[l].match.nativeDef === t.match[n.shiftPositions ? \"def\" : \"nativeDef\"] && (!n.shiftPositions || !t.match.static) || r[l].match.nativeDef === t.match.nativeDef || n.regex && !r[l].match.static && r[l].match.fn.test(t.input, i, e, !1, n))) {\n                            a = !0;\n                            break;\n                        }\n                        if (r[l].match && r[l].match.def === t.match.nativeDef) {\n                            a = void 0;\n                            break;\n                        }\n                    }\n                    return !1 === a && void 0 !== i.jitOffset[e] && (a = p.call(this, e + i.jitOffset[e], t, n)), \n                    a;\n                }\n                function d(e, t, n) {\n                    var a, o, l = this, s = this.maskset, c = this.opts, u = this.dependencyLib, f = c.skipOptionalPartCharacter, p = l.isRTL ? n.slice().reverse() : n;\n                    if (c.skipOptionalPartCharacter = \"\", !0 === e) r.resetMaskSet.call(l, !1), e = 0, \n                    t = n.length, o = r.determineNewCaretPosition.call(l, {\n                        begin: 0,\n                        end: 0\n                    }, !1).begin; else {\n                        for (a = e; a < t; a++) s.validPositions.splice(e, 0);\n                        o = e;\n                    }\n                    var d = new u.Event(\"keypress\");\n                    for (a = e; a < t; a++) {\n                        d.key = p[a].toString(), l.ignorable = !1;\n                        var h = i.EventHandlers.keypressEvent.call(l, d, !0, !1, !1, o);\n                        !1 !== h && void 0 !== h && (o = h.forwardPosition);\n                    }\n                    c.skipOptionalPartCharacter = f;\n                }\n                function h(e, t, n) {\n                    var i = this, a = this.maskset, l = this.dependencyLib;\n                    if (void 0 === e) for (e = t - 1; e > 0 && !a.validPositions[e]; e--) ;\n                    for (var s = e; s < t; s++) {\n                        if (void 0 === a.validPositions[s] && !r.isMask.call(i, s, !1)) if (0 == s ? o.getTest.call(i, s) : a.validPositions[s - 1]) {\n                            var c = o.getTests.call(i, s).slice();\n                            \"\" === c[c.length - 1].match.def && c.pop();\n                            var u, p = o.determineTestTemplate.call(i, s, c);\n                            if (p && (!0 !== p.match.jit || \"master\" === p.match.newBlockMarker && (u = a.validPositions[s + 1]) && !0 === u.match.optionalQuantifier) && ((p = l.extend({}, p, {\n                                input: o.getPlaceholder.call(i, s, p.match, !0) || p.match.def\n                            })).generatedInput = !0, v.call(i, s, p, !0), !0 !== n)) {\n                                var d = a.validPositions[t].input;\n                                return a.validPositions[t] = void 0, f.call(i, t, d, !0, !0);\n                            }\n                        }\n                    }\n                }\n                function v(e, t, n, i) {\n                    var a = this, l = this.maskset, s = this.opts, c = this.dependencyLib;\n                    function d(e, t, n) {\n                        var i = t[e];\n                        if (void 0 !== i && !0 === i.match.static && !0 !== i.match.optionality && (void 0 === t[0] || void 0 === t[0].alternation)) {\n                            var a = n.begin <= e - 1 ? t[e - 1] && !0 === t[e - 1].match.static && t[e - 1] : t[e - 1], r = n.end > e + 1 ? t[e + 1] && !0 === t[e + 1].match.static && t[e + 1] : t[e + 1];\n                            return a && r;\n                        }\n                        return !1;\n                    }\n                    var h = 0, v = void 0 !== e.begin ? e.begin : e, m = void 0 !== e.end ? e.end : e, g = !0;\n                    if (e.begin > e.end && (v = e.end, m = e.begin), i = void 0 !== i ? i : v, void 0 === n && (v !== m || s.insertMode && void 0 !== l.validPositions[i] || void 0 === t || t.match.optionalQuantifier || t.match.optionality)) {\n                        var y, k = c.extend(!0, [], l.validPositions), b = r.getLastValidPosition.call(a, void 0, !0);\n                        l.p = v;\n                        var x = u.call(a, e) ? v : i;\n                        for (y = b; y >= x; y--) l.validPositions.splice(y, 1), void 0 === t && delete l.tests[y + 1];\n                        var w, P, S = i, O = S;\n                        for (t && (l.validPositions[i] = c.extend(!0, {}, t), O++, S++), null == k[m] && l.jitOffset[m] && (m += l.jitOffset[m] + 1), \n                        y = t ? m : m - 1; y <= b; y++) {\n                            if (void 0 !== (w = k[y]) && !0 !== w.generatedInput && (y >= m || y >= v && d(y, k, {\n                                begin: v,\n                                end: m\n                            }))) {\n                                for (;\"\" !== o.getTest.call(a, O).match.def; ) {\n                                    if (!1 !== (P = p.call(a, O, w, s)) || \"+\" === w.match.def) {\n                                        \"+\" === w.match.def && r.getBuffer.call(a, !0);\n                                        var _ = f.call(a, O, w.input, \"+\" !== w.match.def, !0);\n                                        if (g = !1 !== _, S = (_.pos || O) + 1, !g && P) break;\n                                    } else g = !1;\n                                    if (g) {\n                                        void 0 === t && w.match.static && y === e.begin && h++;\n                                        break;\n                                    }\n                                    if (!g && r.getBuffer.call(a), O > l.maskLength) break;\n                                    O++;\n                                }\n                                \"\" == o.getTest.call(a, O).match.def && (g = !1), O = S;\n                            }\n                            if (!g) break;\n                        }\n                        if (!g) return l.validPositions = c.extend(!0, [], k), r.resetMaskSet.call(a, !0), \n                        !1;\n                    } else t && o.getTest.call(a, i).match.cd === t.match.cd && (l.validPositions[i] = c.extend(!0, {}, t));\n                    return r.resetMaskSet.call(a, !0), h;\n                }\n            }\n        }, t = {};\n        function n(i) {\n            var a = t[i];\n            if (void 0 !== a) return a.exports;\n            var r = t[i] = {\n                exports: {}\n            };\n            return e[i](r, r.exports, n), r.exports;\n        }\n        var i = {};\n        return function() {\n            var e = i;\n            Object.defineProperty(e, \"__esModule\", {\n                value: !0\n            }), e.default = void 0, n(7149), n(3194), n(9302), n(4013), n(3851), n(219), n(207), \n            n(5296);\n            var t, a = (t = n(2394)) && t.__esModule ? t : {\n                default: t\n            };\n            e.default = a.default;\n        }(), i;\n    }();\n}));","\"use strict\";var flatbuffers=(()=>{var b=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports);var _=b(c=>{\"use strict\";Object.defineProperty(c,\"__esModule\",{value:!0});c.SIZE_PREFIX_LENGTH=c.FILE_IDENTIFIER_LENGTH=c.SIZEOF_INT=c.SIZEOF_SHORT=void 0;c.SIZEOF_SHORT=2;c.SIZEOF_INT=4;c.FILE_IDENTIFIER_LENGTH=4;c.SIZE_PREFIX_LENGTH=4});var y=b(o=>{\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.isLittleEndian=o.float64=o.float32=o.int32=void 0;o.int32=new Int32Array(2);o.float32=new Float32Array(o.int32.buffer);o.float64=new Float64Array(o.int32.buffer);o.isLittleEndian=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1});var g=b(f=>{\"use strict\";Object.defineProperty(f,\"__esModule\",{value:!0});f.Encoding=void 0;var S;(function(l){l[l.UTF8_BYTES=1]=\"UTF8_BYTES\",l[l.UTF16_STRING=2]=\"UTF16_STRING\"})(S||(f.Encoding=S={}))});var T=b(E=>{\"use strict\";Object.defineProperty(E,\"__esModule\",{value:!0});E.ByteBuffer=void 0;var d=_(),n=y(),m=g(),w=class l{constructor(t){this.bytes_=t,this.position_=0,this.text_decoder_=new TextDecoder}static allocate(t){return new l(new Uint8Array(t))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(t){this.position_=t}capacity(){return this.bytes_.length}readInt8(t){return this.readUint8(t)<<24>>24}readUint8(t){return this.bytes_[t]}readInt16(t){return this.readUint16(t)<<16>>16}readUint16(t){return this.bytes_[t]|this.bytes_[t+1]<<8}readInt32(t){return this.bytes_[t]|this.bytes_[t+1]<<8|this.bytes_[t+2]<<16|this.bytes_[t+3]<<24}readUint32(t){return this.readInt32(t)>>>0}readInt64(t){return BigInt.asIntN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readUint64(t){return BigInt.asUintN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readFloat32(t){return n.int32[0]=this.readInt32(t),n.float32[0]}readFloat64(t){return n.int32[n.isLittleEndian?0:1]=this.readInt32(t),n.int32[n.isLittleEndian?1:0]=this.readInt32(t+4),n.float64[0]}writeInt8(t,e){this.bytes_[t]=e}writeUint8(t,e){this.bytes_[t]=e}writeInt16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeUint16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeInt32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeUint32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeInt64(t,e){this.writeInt32(t,Number(BigInt.asIntN(32,e))),this.writeInt32(t+4,Number(BigInt.asIntN(32,e>>BigInt(32))))}writeUint64(t,e){this.writeUint32(t,Number(BigInt.asUintN(32,e))),this.writeUint32(t+4,Number(BigInt.asUintN(32,e>>BigInt(32))))}writeFloat32(t,e){n.float32[0]=e,this.writeInt32(t,n.int32[0])}writeFloat64(t,e){n.float64[0]=e,this.writeInt32(t,n.int32[n.isLittleEndian?0:1]),this.writeInt32(t+4,n.int32[n.isLittleEndian?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+d.SIZEOF_INT+d.FILE_IDENTIFIER_LENGTH)throw new Error(\"FlatBuffers: ByteBuffer is too short to contain an identifier.\");let t=\"\";for(let e=0;e<d.FILE_IDENTIFIER_LENGTH;e++)t+=String.fromCharCode(this.readInt8(this.position_+d.SIZEOF_INT+e));return t}__offset(t,e){let i=t-this.readInt32(t);return e<this.readInt16(i)?this.readInt16(i+e):0}__union(t,e){return t.bb_pos=e+this.readInt32(e),t.bb=this,t}__string(t,e){t+=this.readInt32(t);let i=this.readInt32(t);t+=d.SIZEOF_INT;let s=this.bytes_.subarray(t,t+i);return e===m.Encoding.UTF8_BYTES?s:this.text_decoder_.decode(s)}__union_with_string(t,e){return typeof t==\"string\"?this.__string(e):this.__union(t,e)}__indirect(t){return t+this.readInt32(t)}__vector(t){return t+this.readInt32(t)+d.SIZEOF_INT}__vector_len(t){return this.readInt32(t+this.readInt32(t))}__has_identifier(t){if(t.length!=d.FILE_IDENTIFIER_LENGTH)throw new Error(\"FlatBuffers: file identifier must be length \"+d.FILE_IDENTIFIER_LENGTH);for(let e=0;e<d.FILE_IDENTIFIER_LENGTH;e++)if(t.charCodeAt(e)!=this.readInt8(this.position()+d.SIZEOF_INT+e))return!1;return!0}createScalarList(t,e){let i=[];for(let s=0;s<e;++s){let a=t(s);a!==null&&i.push(a)}return i}createObjList(t,e){let i=[];for(let s=0;s<e;++s){let a=t(s);a!==null&&i.push(a.unpack())}return i}};E.ByteBuffer=w});var L=b(p=>{\"use strict\";Object.defineProperty(p,\"__esModule\",{value:!0});p.Builder=void 0;var B=T(),h=_(),N=class l{constructor(t){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null,this.text_encoder=new TextEncoder;let e;t?e=t:e=1024,this.bb=B.ByteBuffer.allocate(e),this.space=e}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(t){this.force_defaults=t}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(t,e){t>this.minalign&&(this.minalign=t);let i=~(this.bb.capacity()-this.space+e)+1&t-1;for(;this.space<i+t+e;){let s=this.bb.capacity();this.bb=l.growByteBuffer(this.bb),this.space+=this.bb.capacity()-s}this.pad(i)}pad(t){for(let e=0;e<t;e++)this.bb.writeInt8(--this.space,0)}writeInt8(t){this.bb.writeInt8(this.space-=1,t)}writeInt16(t){this.bb.writeInt16(this.space-=2,t)}writeInt32(t){this.bb.writeInt32(this.space-=4,t)}writeInt64(t){this.bb.writeInt64(this.space-=8,t)}writeFloat32(t){this.bb.writeFloat32(this.space-=4,t)}writeFloat64(t){this.bb.writeFloat64(this.space-=8,t)}addInt8(t){this.prep(1,0),this.writeInt8(t)}addInt16(t){this.prep(2,0),this.writeInt16(t)}addInt32(t){this.prep(4,0),this.writeInt32(t)}addInt64(t){this.prep(8,0),this.writeInt64(t)}addFloat32(t){this.prep(4,0),this.writeFloat32(t)}addFloat64(t){this.prep(8,0),this.writeFloat64(t)}addFieldInt8(t,e,i){(this.force_defaults||e!=i)&&(this.addInt8(e),this.slot(t))}addFieldInt16(t,e,i){(this.force_defaults||e!=i)&&(this.addInt16(e),this.slot(t))}addFieldInt32(t,e,i){(this.force_defaults||e!=i)&&(this.addInt32(e),this.slot(t))}addFieldInt64(t,e,i){(this.force_defaults||e!==i)&&(this.addInt64(e),this.slot(t))}addFieldFloat32(t,e,i){(this.force_defaults||e!=i)&&(this.addFloat32(e),this.slot(t))}addFieldFloat64(t,e,i){(this.force_defaults||e!=i)&&(this.addFloat64(e),this.slot(t))}addFieldOffset(t,e,i){(this.force_defaults||e!=i)&&(this.addOffset(e),this.slot(t))}addFieldStruct(t,e,i){e!=i&&(this.nested(e),this.slot(t))}nested(t){if(t!=this.offset())throw new TypeError(\"FlatBuffers: struct must be serialized inline.\")}notNested(){if(this.isNested)throw new TypeError(\"FlatBuffers: object serialization must not be nested.\")}slot(t){this.vtable!==null&&(this.vtable[t]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(t){let e=t.capacity();if(e&3221225472)throw new Error(\"FlatBuffers: cannot grow buffer beyond 2 gigabytes.\");let i=e<<1,s=B.ByteBuffer.allocate(i);return s.setPosition(i-e),s.bytes().set(t.bytes(),i-e),s}addOffset(t){this.prep(h.SIZEOF_INT,0),this.writeInt32(this.offset()-t+h.SIZEOF_INT)}startObject(t){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=t;for(let e=0;e<t;e++)this.vtable[e]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error(\"FlatBuffers: endObject called without startObject\");this.addInt32(0);let t=this.offset(),e=this.vtable_in_use-1;for(;e>=0&&this.vtable[e]==0;e--);let i=e+1;for(;e>=0;e--)this.addInt16(this.vtable[e]!=0?t-this.vtable[e]:0);let s=2;this.addInt16(t-this.object_start);let a=(i+s)*h.SIZEOF_SHORT;this.addInt16(a);let u=0,j=this.space;t:for(e=0;e<this.vtables.length;e++){let O=this.bb.capacity()-this.vtables[e];if(a==this.bb.readInt16(O)){for(let I=h.SIZEOF_SHORT;I<a;I+=h.SIZEOF_SHORT)if(this.bb.readInt16(j+I)!=this.bb.readInt16(O+I))continue t;u=this.vtables[e];break}}return u?(this.space=this.bb.capacity()-t,this.bb.writeInt32(this.space,u-t)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-t,this.offset()-t)),this.isNested=!1,t}finish(t,e,i){let s=i?h.SIZE_PREFIX_LENGTH:0;if(e){let a=e;if(this.prep(this.minalign,h.SIZEOF_INT+h.FILE_IDENTIFIER_LENGTH+s),a.length!=h.FILE_IDENTIFIER_LENGTH)throw new TypeError(\"FlatBuffers: file identifier must be length \"+h.FILE_IDENTIFIER_LENGTH);for(let u=h.FILE_IDENTIFIER_LENGTH-1;u>=0;u--)this.writeInt8(a.charCodeAt(u))}this.prep(this.minalign,h.SIZEOF_INT+s),this.addOffset(t),s&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(t,e){this.finish(t,e,!0)}requiredField(t,e){let i=this.bb.capacity()-t,s=i-this.bb.readInt32(i);if(!(e<this.bb.readInt16(s)&&this.bb.readInt16(s+e)!=0))throw new TypeError(\"FlatBuffers: field \"+e+\" must be set\")}startVector(t,e,i){this.notNested(),this.vector_num_elems=e,this.prep(h.SIZEOF_INT,t*e),this.prep(i,t*e)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(t){if(!t)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(t))return this.string_maps.get(t);let e=this.createString(t);return this.string_maps.set(t,e),e}createString(t){if(t==null)return 0;let e;return t instanceof Uint8Array?e=t:e=this.text_encoder.encode(t),this.addInt8(0),this.startVector(1,e.length,1),this.bb.setPosition(this.space-=e.length),this.bb.bytes().set(e,this.space),this.endVector()}createByteVector(t){return t==null?0:(this.startVector(1,t.length,1),this.bb.setPosition(this.space-=t.length),this.bb.bytes().set(t,this.space),this.endVector())}createObjectOffset(t){return t===null?0:typeof t==\"string\"?this.createString(t):t.pack(this)}createObjectOffsetList(t){let e=[];for(let i=0;i<t.length;++i){let s=t[i];if(s!==null)e.push(this.createObjectOffset(s));else throw new TypeError(\"FlatBuffers: Argument for createObjectOffsetList cannot contain null.\")}return e}createStructOffsetList(t,e){return e(this,t.length),this.createObjectOffsetList(t.slice().reverse()),this.endVector()}};p.Builder=N});var D=b(r=>{Object.defineProperty(r,\"__esModule\",{value:!0});r.ByteBuffer=r.Builder=r.Encoding=r.isLittleEndian=r.float64=r.float32=r.int32=r.SIZE_PREFIX_LENGTH=r.FILE_IDENTIFIER_LENGTH=r.SIZEOF_INT=r.SIZEOF_SHORT=void 0;var v=_();Object.defineProperty(r,\"SIZEOF_SHORT\",{enumerable:!0,get:function(){return v.SIZEOF_SHORT}});var R=_();Object.defineProperty(r,\"SIZEOF_INT\",{enumerable:!0,get:function(){return R.SIZEOF_INT}});var P=_();Object.defineProperty(r,\"FILE_IDENTIFIER_LENGTH\",{enumerable:!0,get:function(){return P.FILE_IDENTIFIER_LENGTH}});var U=_();Object.defineProperty(r,\"SIZE_PREFIX_LENGTH\",{enumerable:!0,get:function(){return U.SIZE_PREFIX_LENGTH}});var F=y();Object.defineProperty(r,\"int32\",{enumerable:!0,get:function(){return F.int32}});Object.defineProperty(r,\"float32\",{enumerable:!0,get:function(){return F.float32}});Object.defineProperty(r,\"float64\",{enumerable:!0,get:function(){return F.float64}});Object.defineProperty(r,\"isLittleEndian\",{enumerable:!0,get:function(){return F.isLittleEndian}});var Z=g();Object.defineProperty(r,\"Encoding\",{enumerable:!0,get:function(){return Z.Encoding}});var H=L();Object.defineProperty(r,\"Builder\",{enumerable:!0,get:function(){return H.Builder}});var G=T();Object.defineProperty(r,\"ByteBuffer\",{enumerable:!0,get:function(){return G.ByteBuffer}})});return D();})();\n","var io = io || {};\nio.testable = io.testable || {};\nio.testable.agent = (() => {\n  var __defProp = Object.defineProperty;\n  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n  var __getOwnPropNames = Object.getOwnPropertyNames;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __export = (target, all) => {\n    for (var name in all)\n      __defProp(target, name, { get: all[name], enumerable: true });\n  };\n  var __copyProps = (to, from, except, desc) => {\n    if (from && typeof from === \"object\" || typeof from === \"function\") {\n      for (let key of __getOwnPropNames(from))\n        if (!__hasOwnProp.call(to, key) && key !== except)\n          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n    }\n    return to;\n  };\n  var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n  // io/testable/agent.ts\n  var agent_exports = {};\n  __export(agent_exports, {\n    AgentAnnotation: () => AgentAnnotation,\n    AgentChunkMetric: () => AgentChunkMetric,\n    AgentChunkProgress: () => AgentChunkProgress,\n    AgentChunkResult: () => AgentChunkResult,\n    AgentChunkResults: () => AgentChunkResults,\n    AgentChunkTrace: () => AgentChunkTrace,\n    AgentChunkTracePacket: () => AgentChunkTracePacket,\n    AgentChunkTracePacketBody: () => AgentChunkTracePacketBody,\n    AgentCommandAction: () => AgentCommandAction,\n    AgentCommandActionType: () => AgentCommandActionType,\n    AgentConcurrentClient: () => AgentConcurrentClient,\n    AgentFile: () => AgentFile,\n    AgentFinishCommand: () => AgentFinishCommand,\n    AgentFinishCommandStream: () => AgentFinishCommandStream,\n    AgentFinishSuiteResult: () => AgentFinishSuiteResult,\n    AgentFinishSuiteTestResult: () => AgentFinishSuiteTestResult,\n    AgentHealth: () => AgentHealth,\n    AgentLog: () => AgentLog,\n    AgentLogMessage: () => AgentLogMessage,\n    AgentStartCommand: () => AgentStartCommand,\n    AgentStartCommandStream: () => AgentStartCommandStream,\n    AgentStartSuiteResult: () => AgentStartSuiteResult,\n    AgentStartSuiteTestResult: () => AgentStartSuiteTestResult,\n    AgentStatus: () => AgentStatus,\n    AgentSuiteAction: () => AgentSuiteAction,\n    AgentSuiteActionType: () => AgentSuiteActionType,\n    AgentSuiteResult: () => AgentSuiteResult,\n    AgentSuiteTestResult: () => AgentSuiteTestResult,\n    AgentTestAttribute: () => AgentTestAttribute,\n    AgentToServerEvent: () => AgentToServerEvent,\n    AgentToServerEventType: () => AgentToServerEventType,\n    AgentUsage: () => AgentUsage,\n    AgentVncInfo: () => AgentVncInfo,\n    AiInfo: () => AiInfo,\n    AiKey: () => AiKey,\n    AiModel: () => AiModel,\n    AssignedRegionInfo: () => AssignedRegionInfo,\n    AttributeOutcome: () => AttributeOutcome,\n    Browser: () => Browser,\n    ChunkExecutionType: () => ChunkExecutionType,\n    ChunkInfo: () => ChunkInfo,\n    ChunkOutcome: () => ChunkOutcome,\n    LocationInfo: () => LocationInfo,\n    LogLevel: () => LogLevel,\n    MetricType: () => MetricType,\n    RegionInfo: () => RegionInfo,\n    ServerToAgentEvent: () => ServerToAgentEvent,\n    ServerToAgentEventType: () => ServerToAgentEventType,\n    TestEvent: () => TestEvent,\n    TestState: () => TestState,\n    TestType: () => TestType\n  });\n\n  // node_modules/flatbuffers/mjs/constants.js\n  var SIZE_PREFIX_LENGTH = 4;\n\n  // node_modules/flatbuffers/mjs/utils.js\n  var int32 = new Int32Array(2);\n  var float32 = new Float32Array(int32.buffer);\n  var float64 = new Float64Array(int32.buffer);\n  var isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n\n  // node_modules/flatbuffers/mjs/encoding.js\n  var Encoding;\n  (function(Encoding2) {\n    Encoding2[Encoding2[\"UTF8_BYTES\"] = 1] = \"UTF8_BYTES\";\n    Encoding2[Encoding2[\"UTF16_STRING\"] = 2] = \"UTF16_STRING\";\n  })(Encoding || (Encoding = {}));\n\n  // io/testable/agent/agent-annotation.ts\n  var AgentAnnotation = class _AgentAnnotation {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentAnnotation(bb, obj) {\n      return (obj || new _AgentAnnotation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentAnnotation(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentAnnotation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    annotationType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    description(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentAnnotation(builder) {\n      builder.startObject(2);\n    }\n    static addAnnotationType(builder, annotationTypeOffset) {\n      builder.addFieldOffset(0, annotationTypeOffset, 0);\n    }\n    static addDescription(builder, descriptionOffset) {\n      builder.addFieldOffset(1, descriptionOffset, 0);\n    }\n    static endAgentAnnotation(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentAnnotation(builder, annotationTypeOffset, descriptionOffset) {\n      _AgentAnnotation.startAgentAnnotation(builder);\n      _AgentAnnotation.addAnnotationType(builder, annotationTypeOffset);\n      _AgentAnnotation.addDescription(builder, descriptionOffset);\n      return _AgentAnnotation.endAgentAnnotation(builder);\n    }\n  };\n\n  // io/testable/agent/metric-type.ts\n  var MetricType = /* @__PURE__ */ ((MetricType2) => {\n    MetricType2[MetricType2[\"Timing\"] = 0] = \"Timing\";\n    MetricType2[MetricType2[\"Counter\"] = 1] = \"Counter\";\n    MetricType2[MetricType2[\"Histogram\"] = 2] = \"Histogram\";\n    MetricType2[MetricType2[\"Metered\"] = 3] = \"Metered\";\n    return MetricType2;\n  })(MetricType || {});\n\n  // io/testable/agent/agent-chunk-metric.ts\n  var AgentChunkMetric = class _AgentChunkMetric {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkMetric(bb, obj) {\n      return (obj || new _AgentChunkMetric()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkMetric(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkMetric()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    metricType() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Timing */;\n    }\n    metricKey(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    metricValue() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    metricUnits(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    ns(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentChunkMetric(builder) {\n      builder.startObject(6);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addMetricType(builder, metricType) {\n      builder.addFieldInt8(1, metricType, 0 /* Timing */);\n    }\n    static addMetricKey(builder, metricKeyOffset) {\n      builder.addFieldOffset(2, metricKeyOffset, 0);\n    }\n    static addMetricValue(builder, metricValue) {\n      builder.addFieldInt64(3, metricValue, BigInt(\"0\"));\n    }\n    static addMetricUnits(builder, metricUnitsOffset) {\n      builder.addFieldOffset(4, metricUnitsOffset, 0);\n    }\n    static addNs(builder, nsOffset) {\n      builder.addFieldOffset(5, nsOffset, 0);\n    }\n    static endAgentChunkMetric(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentChunkMetric(builder, nameOffset, metricType, metricKeyOffset, metricValue, metricUnitsOffset, nsOffset) {\n      _AgentChunkMetric.startAgentChunkMetric(builder);\n      _AgentChunkMetric.addName(builder, nameOffset);\n      _AgentChunkMetric.addMetricType(builder, metricType);\n      _AgentChunkMetric.addMetricKey(builder, metricKeyOffset);\n      _AgentChunkMetric.addMetricValue(builder, metricValue);\n      _AgentChunkMetric.addMetricUnits(builder, metricUnitsOffset);\n      _AgentChunkMetric.addNs(builder, nsOffset);\n      return _AgentChunkMetric.endAgentChunkMetric(builder);\n    }\n  };\n\n  // io/testable/agent/agent-chunk-progress.ts\n  var AgentChunkProgress = class _AgentChunkProgress {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkProgress(bb, obj) {\n      return (obj || new _AgentChunkProgress()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkProgress(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkProgress()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    completedDurationSecs() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    completedIterations() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    cpu() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    memory() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    cpuUtilization() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    memoryUtilization() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    static startAgentChunkProgress(builder) {\n      builder.startObject(10);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(0, timestamp, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(1, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(2, executionRegion, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(3, chunk, BigInt(\"0\"));\n    }\n    static addCompletedDurationSecs(builder, completedDurationSecs) {\n      builder.addFieldInt64(4, completedDurationSecs, BigInt(\"0\"));\n    }\n    static addCompletedIterations(builder, completedIterations) {\n      builder.addFieldInt64(5, completedIterations, BigInt(\"0\"));\n    }\n    static addCpu(builder, cpu) {\n      builder.addFieldFloat64(6, cpu, 0);\n    }\n    static addMemory(builder, memory) {\n      builder.addFieldInt64(7, memory, BigInt(\"0\"));\n    }\n    static addCpuUtilization(builder, cpuUtilization) {\n      builder.addFieldInt64(8, cpuUtilization, BigInt(\"0\"));\n    }\n    static addMemoryUtilization(builder, memoryUtilization) {\n      builder.addFieldInt64(9, memoryUtilization, BigInt(\"0\"));\n    }\n    static endAgentChunkProgress(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentChunkProgress(builder, timestamp, execution, executionRegion, chunk, completedDurationSecs, completedIterations, cpu, memory, cpuUtilization, memoryUtilization) {\n      _AgentChunkProgress.startAgentChunkProgress(builder);\n      _AgentChunkProgress.addTimestamp(builder, timestamp);\n      _AgentChunkProgress.addExecution(builder, execution);\n      _AgentChunkProgress.addExecutionRegion(builder, executionRegion);\n      _AgentChunkProgress.addChunk(builder, chunk);\n      _AgentChunkProgress.addCompletedDurationSecs(builder, completedDurationSecs);\n      _AgentChunkProgress.addCompletedIterations(builder, completedIterations);\n      _AgentChunkProgress.addCpu(builder, cpu);\n      _AgentChunkProgress.addMemory(builder, memory);\n      _AgentChunkProgress.addCpuUtilization(builder, cpuUtilization);\n      _AgentChunkProgress.addMemoryUtilization(builder, memoryUtilization);\n      return _AgentChunkProgress.endAgentChunkProgress(builder);\n    }\n  };\n\n  // io/testable/agent/agent-chunk-trace-packet-body.ts\n  var AgentChunkTracePacketBody = class _AgentChunkTracePacketBody {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkTracePacketBody(bb, obj) {\n      return (obj || new _AgentChunkTracePacketBody()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkTracePacketBody(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkTracePacketBody()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    type(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    data(index) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt8(this.bb.__vector(this.bb_pos + offset) + index) : 0;\n    }\n    dataLength() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    dataArray() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? new Int8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n    }\n    static startAgentChunkTracePacketBody(builder) {\n      builder.startObject(2);\n    }\n    static addType(builder, typeOffset) {\n      builder.addFieldOffset(0, typeOffset, 0);\n    }\n    static addData(builder, dataOffset) {\n      builder.addFieldOffset(1, dataOffset, 0);\n    }\n    static createDataVector(builder, data) {\n      builder.startVector(1, data.length, 1);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addInt8(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startDataVector(builder, numElems) {\n      builder.startVector(1, numElems, 1);\n    }\n    static endAgentChunkTracePacketBody(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentChunkTracePacketBody(builder, typeOffset, dataOffset) {\n      _AgentChunkTracePacketBody.startAgentChunkTracePacketBody(builder);\n      _AgentChunkTracePacketBody.addType(builder, typeOffset);\n      _AgentChunkTracePacketBody.addData(builder, dataOffset);\n      return _AgentChunkTracePacketBody.endAgentChunkTracePacketBody(builder);\n    }\n  };\n\n  // io/testable/agent/agent-chunk-trace-packet.ts\n  var AgentChunkTracePacket = class _AgentChunkTracePacket {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkTracePacket(bb, obj) {\n      return (obj || new _AgentChunkTracePacket()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkTracePacket(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkTracePacket()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    lastTimestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    type(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    headers(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    body(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? (obj || new AgentChunkTracePacketBody()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    bodyTooLarge() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    length() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    static startAgentChunkTracePacket(builder) {\n      builder.startObject(7);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(0, timestamp, BigInt(\"0\"));\n    }\n    static addLastTimestamp(builder, lastTimestamp) {\n      builder.addFieldInt64(1, lastTimestamp, BigInt(\"0\"));\n    }\n    static addType(builder, typeOffset) {\n      builder.addFieldOffset(2, typeOffset, 0);\n    }\n    static addHeaders(builder, headersOffset) {\n      builder.addFieldOffset(3, headersOffset, 0);\n    }\n    static addBody(builder, bodyOffset) {\n      builder.addFieldOffset(4, bodyOffset, 0);\n    }\n    static addBodyTooLarge(builder, bodyTooLarge) {\n      builder.addFieldInt8(5, +bodyTooLarge, 0);\n    }\n    static addLength(builder, length) {\n      builder.addFieldInt64(6, length, BigInt(\"0\"));\n    }\n    static endAgentChunkTracePacket(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-chunk-trace.ts\n  var AgentChunkTrace = class _AgentChunkTrace {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkTrace(bb, obj) {\n      return (obj || new _AgentChunkTrace()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkTrace(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkTrace()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    status(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    length() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    packets(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new AgentChunkTracePacket()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    packetsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    statusMsg(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    tooLarge() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    static startAgentChunkTrace(builder) {\n      builder.startObject(6);\n    }\n    static addStatus(builder, statusOffset) {\n      builder.addFieldOffset(0, statusOffset, 0);\n    }\n    static addLength(builder, length) {\n      builder.addFieldInt64(1, length, BigInt(\"0\"));\n    }\n    static addPackets(builder, packetsOffset) {\n      builder.addFieldOffset(2, packetsOffset, 0);\n    }\n    static createPacketsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startPacketsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addStatusMsg(builder, statusMsgOffset) {\n      builder.addFieldOffset(3, statusMsgOffset, 0);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(4, uuidOffset, 0);\n    }\n    static addTooLarge(builder, tooLarge) {\n      builder.addFieldInt8(5, +tooLarge, 0);\n    }\n    static endAgentChunkTrace(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentChunkTrace(builder, statusOffset, length, packetsOffset, statusMsgOffset, uuidOffset, tooLarge) {\n      _AgentChunkTrace.startAgentChunkTrace(builder);\n      _AgentChunkTrace.addStatus(builder, statusOffset);\n      _AgentChunkTrace.addLength(builder, length);\n      _AgentChunkTrace.addPackets(builder, packetsOffset);\n      _AgentChunkTrace.addStatusMsg(builder, statusMsgOffset);\n      _AgentChunkTrace.addUuid(builder, uuidOffset);\n      _AgentChunkTrace.addTooLarge(builder, tooLarge);\n      return _AgentChunkTrace.endAgentChunkTrace(builder);\n    }\n  };\n\n  // io/testable/agent/browser.ts\n  var Browser = class _Browser {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsBrowser(bb, obj) {\n      return (obj || new _Browser()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsBrowser(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _Browser()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    browserType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    version(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startBrowser(builder) {\n      builder.startObject(2);\n    }\n    static addBrowserType(builder, browserTypeOffset) {\n      builder.addFieldOffset(0, browserTypeOffset, 0);\n    }\n    static addVersion(builder, versionOffset) {\n      builder.addFieldOffset(1, versionOffset, 0);\n    }\n    static endBrowser(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createBrowser(builder, browserTypeOffset, versionOffset) {\n      _Browser.startBrowser(builder);\n      _Browser.addBrowserType(builder, browserTypeOffset);\n      _Browser.addVersion(builder, versionOffset);\n      return _Browser.endBrowser(builder);\n    }\n  };\n\n  // io/testable/agent/agent-file.ts\n  var AgentFile = class _AgentFile {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentFile(bb, obj) {\n      return (obj || new _AgentFile()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentFile(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentFile()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    contentType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    charset(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    contents(index) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt8(this.bb.__vector(this.bb_pos + offset) + index) : 0;\n    }\n    contentsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    contentsArray() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? new Int8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    regionalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    hasMorePackets() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    isFinalPacket() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    packetNumber() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    iterationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    relatedSuiteUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 34);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    relatedSuiteTestUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    relatedSuiteName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    relatedSuiteTestName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 40);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    device(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 44);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    commandUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 46);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    commandName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 48);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    sessionNum() {\n      const offset = this.bb.__offset(this.bb_pos, 50);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    relatedParentSuiteTestUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 52);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    relatedParentSuiteTestName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 54);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    saveToScenario() {\n      const offset = this.bb.__offset(this.bb_pos, 56);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    static startAgentFile(builder) {\n      builder.startObject(27);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addContentType(builder, contentTypeOffset) {\n      builder.addFieldOffset(1, contentTypeOffset, 0);\n    }\n    static addCharset(builder, charsetOffset) {\n      builder.addFieldOffset(2, charsetOffset, 0);\n    }\n    static addContents(builder, contentsOffset) {\n      builder.addFieldOffset(3, contentsOffset, 0);\n    }\n    static createContentsVector(builder, data) {\n      builder.startVector(1, data.length, 1);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addInt8(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startContentsVector(builder, numElems) {\n      builder.startVector(1, numElems, 1);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(4, timestamp, BigInt(\"0\"));\n    }\n    static addConcurrentClientIndex(builder, concurrentClientIndex) {\n      builder.addFieldInt64(5, concurrentClientIndex, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(6, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addRegionalConcurrentClientIndex(builder, regionalConcurrentClientIndex) {\n      builder.addFieldInt64(7, regionalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt32(8, iteration, 0);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(9, uuidOffset, 0);\n    }\n    static addHasMorePackets(builder, hasMorePackets) {\n      builder.addFieldInt8(10, +hasMorePackets, 0);\n    }\n    static addIsFinalPacket(builder, isFinalPacket) {\n      builder.addFieldInt8(11, +isFinalPacket, 0);\n    }\n    static addPacketNumber(builder, packetNumber) {\n      builder.addFieldInt32(12, packetNumber, 0);\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(13, threadIdOffset, 0);\n    }\n    static addIterationId(builder, iterationIdOffset) {\n      builder.addFieldOffset(14, iterationIdOffset, 0);\n    }\n    static addRelatedSuiteUuid(builder, relatedSuiteUuidOffset) {\n      builder.addFieldOffset(15, relatedSuiteUuidOffset, 0);\n    }\n    static addRelatedSuiteTestUuid(builder, relatedSuiteTestUuidOffset) {\n      builder.addFieldOffset(16, relatedSuiteTestUuidOffset, 0);\n    }\n    static addRelatedSuiteName(builder, relatedSuiteNameOffset) {\n      builder.addFieldOffset(17, relatedSuiteNameOffset, 0);\n    }\n    static addRelatedSuiteTestName(builder, relatedSuiteTestNameOffset) {\n      builder.addFieldOffset(18, relatedSuiteTestNameOffset, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(19, browserOffset, 0);\n    }\n    static addDevice(builder, deviceOffset) {\n      builder.addFieldOffset(20, deviceOffset, 0);\n    }\n    static addCommandUuid(builder, commandUuidOffset) {\n      builder.addFieldOffset(21, commandUuidOffset, 0);\n    }\n    static addCommandName(builder, commandNameOffset) {\n      builder.addFieldOffset(22, commandNameOffset, 0);\n    }\n    static addSessionNum(builder, sessionNum) {\n      builder.addFieldInt32(23, sessionNum, 0);\n    }\n    static addRelatedParentSuiteTestUuid(builder, relatedParentSuiteTestUuidOffset) {\n      builder.addFieldOffset(24, relatedParentSuiteTestUuidOffset, 0);\n    }\n    static addRelatedParentSuiteTestName(builder, relatedParentSuiteTestNameOffset) {\n      builder.addFieldOffset(25, relatedParentSuiteTestNameOffset, 0);\n    }\n    static addSaveToScenario(builder, saveToScenario) {\n      builder.addFieldInt8(26, +saveToScenario, 0);\n    }\n    static endAgentFile(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/test-state.ts\n  var TestState = /* @__PURE__ */ ((TestState2) => {\n    TestState2[TestState2[\"Passed\"] = 0] = \"Passed\";\n    TestState2[TestState2[\"Failed\"] = 1] = \"Failed\";\n    TestState2[TestState2[\"Skipped\"] = 2] = \"Skipped\";\n    TestState2[TestState2[\"NA\"] = 3] = \"NA\";\n    TestState2[TestState2[\"InProgress\"] = 4] = \"InProgress\";\n    TestState2[TestState2[\"Retried\"] = 5] = \"Retried\";\n    TestState2[TestState2[\"Delete\"] = 6] = \"Delete\";\n    return TestState2;\n  })(TestState || {});\n\n  // io/testable/agent/agent-suite-test-result.ts\n  var AgentSuiteTestResult = class _AgentSuiteTestResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentSuiteTestResult(bb, obj) {\n      return (obj || new _AgentSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentSuiteTestResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    state() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Passed */;\n    }\n    errorType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    error(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    errorTrace(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    screenshots(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? (obj || new AgentFile()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    screenshotsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    childResults(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? (obj || new _AgentSuiteTestResult()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    childResultsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    annotations(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? (obj || new AgentAnnotation()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    annotationsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentSuiteTestResult(builder) {\n      builder.startObject(12);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(1, started, BigInt(\"0\"));\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(2, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(3, duration, BigInt(\"0\"));\n    }\n    static addState(builder, state) {\n      builder.addFieldInt8(4, state, 0 /* Passed */);\n    }\n    static addErrorType(builder, errorTypeOffset) {\n      builder.addFieldOffset(5, errorTypeOffset, 0);\n    }\n    static addError(builder, errorOffset) {\n      builder.addFieldOffset(6, errorOffset, 0);\n    }\n    static addErrorTrace(builder, errorTraceOffset) {\n      builder.addFieldOffset(7, errorTraceOffset, 0);\n    }\n    static addScreenshots(builder, screenshotsOffset) {\n      builder.addFieldOffset(8, screenshotsOffset, 0);\n    }\n    static createScreenshotsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startScreenshotsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(9, uuidOffset, 0);\n    }\n    static addChildResults(builder, childResultsOffset) {\n      builder.addFieldOffset(10, childResultsOffset, 0);\n    }\n    static createChildResultsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startChildResultsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addAnnotations(builder, annotationsOffset) {\n      builder.addFieldOffset(11, annotationsOffset, 0);\n    }\n    static createAnnotationsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAnnotationsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentSuiteTestResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentSuiteTestResult(builder, nameOffset, started, finished, duration, state, errorTypeOffset, errorOffset, errorTraceOffset, screenshotsOffset, uuidOffset, childResultsOffset, annotationsOffset) {\n      _AgentSuiteTestResult.startAgentSuiteTestResult(builder);\n      _AgentSuiteTestResult.addName(builder, nameOffset);\n      _AgentSuiteTestResult.addStarted(builder, started);\n      _AgentSuiteTestResult.addFinished(builder, finished);\n      _AgentSuiteTestResult.addDuration(builder, duration);\n      _AgentSuiteTestResult.addState(builder, state);\n      _AgentSuiteTestResult.addErrorType(builder, errorTypeOffset);\n      _AgentSuiteTestResult.addError(builder, errorOffset);\n      _AgentSuiteTestResult.addErrorTrace(builder, errorTraceOffset);\n      _AgentSuiteTestResult.addScreenshots(builder, screenshotsOffset);\n      _AgentSuiteTestResult.addUuid(builder, uuidOffset);\n      _AgentSuiteTestResult.addChildResults(builder, childResultsOffset);\n      _AgentSuiteTestResult.addAnnotations(builder, annotationsOffset);\n      return _AgentSuiteTestResult.endAgentSuiteTestResult(builder);\n    }\n  };\n\n  // io/testable/agent/agent-suite-result.ts\n  var AgentSuiteResult = class _AgentSuiteResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentSuiteResult(bb, obj) {\n      return (obj || new _AgentSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentSuiteResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    regionalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    iterationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    testResults(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? (obj || new AgentSuiteTestResult()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    testResultsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    device(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentSuiteResult(builder) {\n      builder.startObject(13);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(1, started, BigInt(\"0\"));\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(2, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(3, duration, BigInt(\"0\"));\n    }\n    static addConcurrentClientIndex(builder, concurrentClientIndex) {\n      builder.addFieldInt64(4, concurrentClientIndex, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(5, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addRegionalConcurrentClientIndex(builder, regionalConcurrentClientIndex) {\n      builder.addFieldInt64(6, regionalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt32(7, iteration, 0);\n    }\n    static addIterationId(builder, iterationIdOffset) {\n      builder.addFieldOffset(8, iterationIdOffset, 0);\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(9, threadIdOffset, 0);\n    }\n    static addTestResults(builder, testResultsOffset) {\n      builder.addFieldOffset(10, testResultsOffset, 0);\n    }\n    static createTestResultsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startTestResultsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(11, browserOffset, 0);\n    }\n    static addDevice(builder, deviceOffset) {\n      builder.addFieldOffset(12, deviceOffset, 0);\n    }\n    static endAgentSuiteResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-chunk-result.ts\n  var AgentChunkResult = class _AgentChunkResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkResult(bb, obj) {\n      return (obj || new _AgentChunkResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    connectionId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    resource(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    url(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    firstReport() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    metrics(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? (obj || new AgentChunkMetric()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    metricsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    trace(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? (obj || new AgentChunkTrace()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    iterationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    createdAt() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    testSuiteResults(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? (obj || new AgentSuiteResult()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    testSuiteResultsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    regionalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    hasClientIndices() {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    excludeFromCount() {\n      const offset = this.bb.__offset(this.bb_pos, 34);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    device(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentChunkResult(builder) {\n      builder.startObject(18);\n    }\n    static addConnectionId(builder, connectionIdOffset) {\n      builder.addFieldOffset(0, connectionIdOffset, 0);\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(1, threadIdOffset, 0);\n    }\n    static addResource(builder, resourceOffset) {\n      builder.addFieldOffset(2, resourceOffset, 0);\n    }\n    static addUrl(builder, urlOffset) {\n      builder.addFieldOffset(3, urlOffset, 0);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(4, timestamp, BigInt(\"0\"));\n    }\n    static addFirstReport(builder, firstReport) {\n      builder.addFieldInt8(5, +firstReport, 0);\n    }\n    static addMetrics(builder, metricsOffset) {\n      builder.addFieldOffset(6, metricsOffset, 0);\n    }\n    static createMetricsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startMetricsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addTrace(builder, traceOffset) {\n      builder.addFieldOffset(7, traceOffset, 0);\n    }\n    static addIterationId(builder, iterationIdOffset) {\n      builder.addFieldOffset(8, iterationIdOffset, 0);\n    }\n    static addCreatedAt(builder, createdAt) {\n      builder.addFieldInt64(9, createdAt, BigInt(\"0\"));\n    }\n    static addTestSuiteResults(builder, testSuiteResultsOffset) {\n      builder.addFieldOffset(10, testSuiteResultsOffset, 0);\n    }\n    static createTestSuiteResultsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startTestSuiteResultsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt64(11, iteration, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(12, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addRegionalConcurrentClientIndex(builder, regionalConcurrentClientIndex) {\n      builder.addFieldInt64(13, regionalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addHasClientIndices(builder, hasClientIndices) {\n      builder.addFieldInt8(14, +hasClientIndices, 0);\n    }\n    static addExcludeFromCount(builder, excludeFromCount) {\n      builder.addFieldInt8(15, +excludeFromCount, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(16, browserOffset, 0);\n    }\n    static addDevice(builder, deviceOffset) {\n      builder.addFieldOffset(17, deviceOffset, 0);\n    }\n    static endAgentChunkResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-command-action-type.ts\n  var AgentCommandActionType = /* @__PURE__ */ ((AgentCommandActionType2) => {\n    AgentCommandActionType2[AgentCommandActionType2[\"StartStream\"] = 0] = \"StartStream\";\n    AgentCommandActionType2[AgentCommandActionType2[\"FinishStream\"] = 1] = \"FinishStream\";\n    AgentCommandActionType2[AgentCommandActionType2[\"StartCommand\"] = 2] = \"StartCommand\";\n    AgentCommandActionType2[AgentCommandActionType2[\"FinishCommand\"] = 3] = \"FinishCommand\";\n    return AgentCommandActionType2;\n  })(AgentCommandActionType || {});\n\n  // io/testable/agent/agent-finish-command.ts\n  var AgentFinishCommand = class _AgentFinishCommand {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentFinishCommand(bb, obj) {\n      return (obj || new _AgentFinishCommand()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentFinishCommand(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentFinishCommand()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    streamId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    status(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    responseBody(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    params(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    error(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    success() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    files(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? (obj || new AgentFile()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    filesLength() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    commandNum() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    static startAgentFinishCommand(builder) {\n      builder.startObject(13);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addStreamId(builder, streamIdOffset) {\n      builder.addFieldOffset(1, streamIdOffset, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(2, browserOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(3, nameOffset, 0);\n    }\n    static addStatus(builder, statusOffset) {\n      builder.addFieldOffset(4, statusOffset, 0);\n    }\n    static addResponseBody(builder, responseBodyOffset) {\n      builder.addFieldOffset(5, responseBodyOffset, 0);\n    }\n    static addParams(builder, paramsOffset) {\n      builder.addFieldOffset(6, paramsOffset, 0);\n    }\n    static addError(builder, errorOffset) {\n      builder.addFieldOffset(7, errorOffset, 0);\n    }\n    static addSuccess(builder, success) {\n      builder.addFieldInt8(8, +success, 0);\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(9, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(10, duration, BigInt(\"0\"));\n    }\n    static addFiles(builder, filesOffset) {\n      builder.addFieldOffset(11, filesOffset, 0);\n    }\n    static createFilesVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startFilesVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addCommandNum(builder, commandNum) {\n      builder.addFieldInt32(12, commandNum, 0);\n    }\n    static endAgentFinishCommand(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-finish-command-stream.ts\n  var AgentFinishCommandStream = class _AgentFinishCommandStream {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentFinishCommandStream(bb, obj) {\n      return (obj || new _AgentFinishCommandStream()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentFinishCommandStream(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentFinishCommandStream()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    hasError() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    static startAgentFinishCommandStream(builder) {\n      builder.startObject(5);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(1, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(2, duration, BigInt(\"0\"));\n    }\n    static addHasError(builder, hasError) {\n      builder.addFieldInt8(3, +hasError, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(4, browserOffset, 0);\n    }\n    static endAgentFinishCommandStream(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-start-command.ts\n  var AgentStartCommand = class _AgentStartCommand {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentStartCommand(bb, obj) {\n      return (obj || new _AgentStartCommand()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentStartCommand(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentStartCommand()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    streamId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    command(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    requestBody(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    params(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    offset() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    detailed() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    videoOffset() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    commandNum() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    static startAgentStartCommand(builder) {\n      builder.startObject(12);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addStreamId(builder, streamIdOffset) {\n      builder.addFieldOffset(1, streamIdOffset, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(2, browserOffset, 0);\n    }\n    static addCommand(builder, commandOffset) {\n      builder.addFieldOffset(3, commandOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(4, nameOffset, 0);\n    }\n    static addRequestBody(builder, requestBodyOffset) {\n      builder.addFieldOffset(5, requestBodyOffset, 0);\n    }\n    static addParams(builder, paramsOffset) {\n      builder.addFieldOffset(6, paramsOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(7, started, BigInt(\"0\"));\n    }\n    static addOffset(builder, offset) {\n      builder.addFieldInt64(8, offset, BigInt(\"0\"));\n    }\n    static addDetailed(builder, detailed) {\n      builder.addFieldInt8(9, +detailed, 0);\n    }\n    static addVideoOffset(builder, videoOffset) {\n      builder.addFieldInt64(10, videoOffset, BigInt(\"0\"));\n    }\n    static addCommandNum(builder, commandNum) {\n      builder.addFieldInt32(11, commandNum, 0);\n    }\n    static endAgentStartCommand(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-start-command-stream.ts\n  var AgentStartCommandStream = class _AgentStartCommandStream {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentStartCommandStream(bb, obj) {\n      return (obj || new _AgentStartCommandStream()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentStartCommandStream(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentStartCommandStream()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    regionalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    iterationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    device(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    sessionNum() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    static startAgentStartCommandStream(builder) {\n      builder.startObject(11);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(1, started, BigInt(\"0\"));\n    }\n    static addConcurrentClientIndex(builder, concurrentClientIndex) {\n      builder.addFieldInt64(2, concurrentClientIndex, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(3, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addRegionalConcurrentClientIndex(builder, regionalConcurrentClientIndex) {\n      builder.addFieldInt64(4, regionalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt32(5, iteration, 0);\n    }\n    static addIterationId(builder, iterationIdOffset) {\n      builder.addFieldOffset(6, iterationIdOffset, 0);\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(7, threadIdOffset, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(8, browserOffset, 0);\n    }\n    static addDevice(builder, deviceOffset) {\n      builder.addFieldOffset(9, deviceOffset, 0);\n    }\n    static addSessionNum(builder, sessionNum) {\n      builder.addFieldInt32(10, sessionNum, 0);\n    }\n    static endAgentStartCommandStream(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-command-action.ts\n  var AgentCommandAction = class _AgentCommandAction {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentCommandAction(bb, obj) {\n      return (obj || new _AgentCommandAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentCommandAction(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentCommandAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    type() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* StartStream */;\n    }\n    startStream(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? (obj || new AgentStartCommandStream()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    finishStream(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new AgentFinishCommandStream()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    startCommand(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? (obj || new AgentStartCommand()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    finishCommand(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? (obj || new AgentFinishCommand()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    static startAgentCommandAction(builder) {\n      builder.startObject(5);\n    }\n    static addType(builder, type) {\n      builder.addFieldInt8(0, type, 0 /* StartStream */);\n    }\n    static addStartStream(builder, startStreamOffset) {\n      builder.addFieldOffset(1, startStreamOffset, 0);\n    }\n    static addFinishStream(builder, finishStreamOffset) {\n      builder.addFieldOffset(2, finishStreamOffset, 0);\n    }\n    static addStartCommand(builder, startCommandOffset) {\n      builder.addFieldOffset(3, startCommandOffset, 0);\n    }\n    static addFinishCommand(builder, finishCommandOffset) {\n      builder.addFieldOffset(4, finishCommandOffset, 0);\n    }\n    static endAgentCommandAction(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-finish-suite-result.ts\n  var AgentFinishSuiteResult = class _AgentFinishSuiteResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentFinishSuiteResult(bb, obj) {\n      return (obj || new _AgentFinishSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentFinishSuiteResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentFinishSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    hasError() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    static startAgentFinishSuiteResult(builder) {\n      builder.startObject(5);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(0, uuidOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(1, nameOffset, 0);\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(2, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(3, duration, BigInt(\"0\"));\n    }\n    static addHasError(builder, hasError) {\n      builder.addFieldInt8(4, +hasError, 0);\n    }\n    static endAgentFinishSuiteResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentFinishSuiteResult(builder, uuidOffset, nameOffset, finished, duration, hasError) {\n      _AgentFinishSuiteResult.startAgentFinishSuiteResult(builder);\n      _AgentFinishSuiteResult.addUuid(builder, uuidOffset);\n      _AgentFinishSuiteResult.addName(builder, nameOffset);\n      _AgentFinishSuiteResult.addFinished(builder, finished);\n      _AgentFinishSuiteResult.addDuration(builder, duration);\n      _AgentFinishSuiteResult.addHasError(builder, hasError);\n      return _AgentFinishSuiteResult.endAgentFinishSuiteResult(builder);\n    }\n  };\n\n  // io/testable/agent/agent-finish-suite-test-result.ts\n  var AgentFinishSuiteTestResult = class _AgentFinishSuiteTestResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentFinishSuiteTestResult(bb, obj) {\n      return (obj || new _AgentFinishSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentFinishSuiteTestResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentFinishSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    suiteUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    suiteName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    finished() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    duration() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    state() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Passed */;\n    }\n    errorType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    error(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    errorTrace(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    screenshots(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? (obj || new AgentFile()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    screenshotsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    parentUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    parentName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    annotations(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? (obj || new AgentAnnotation()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    annotationsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentFinishSuiteTestResult(builder) {\n      builder.startObject(14);\n    }\n    static addSuiteUuid(builder, suiteUuidOffset) {\n      builder.addFieldOffset(0, suiteUuidOffset, 0);\n    }\n    static addSuiteName(builder, suiteNameOffset) {\n      builder.addFieldOffset(1, suiteNameOffset, 0);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(2, uuidOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(3, nameOffset, 0);\n    }\n    static addFinished(builder, finished) {\n      builder.addFieldInt64(4, finished, BigInt(\"0\"));\n    }\n    static addDuration(builder, duration) {\n      builder.addFieldInt64(5, duration, BigInt(\"0\"));\n    }\n    static addState(builder, state) {\n      builder.addFieldInt8(6, state, 0 /* Passed */);\n    }\n    static addErrorType(builder, errorTypeOffset) {\n      builder.addFieldOffset(7, errorTypeOffset, 0);\n    }\n    static addError(builder, errorOffset) {\n      builder.addFieldOffset(8, errorOffset, 0);\n    }\n    static addErrorTrace(builder, errorTraceOffset) {\n      builder.addFieldOffset(9, errorTraceOffset, 0);\n    }\n    static addScreenshots(builder, screenshotsOffset) {\n      builder.addFieldOffset(10, screenshotsOffset, 0);\n    }\n    static createScreenshotsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startScreenshotsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addParentUuid(builder, parentUuidOffset) {\n      builder.addFieldOffset(11, parentUuidOffset, 0);\n    }\n    static addParentName(builder, parentNameOffset) {\n      builder.addFieldOffset(12, parentNameOffset, 0);\n    }\n    static addAnnotations(builder, annotationsOffset) {\n      builder.addFieldOffset(13, annotationsOffset, 0);\n    }\n    static createAnnotationsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAnnotationsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentFinishSuiteTestResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentFinishSuiteTestResult(builder, suiteUuidOffset, suiteNameOffset, uuidOffset, nameOffset, finished, duration, state, errorTypeOffset, errorOffset, errorTraceOffset, screenshotsOffset, parentUuidOffset, parentNameOffset, annotationsOffset) {\n      _AgentFinishSuiteTestResult.startAgentFinishSuiteTestResult(builder);\n      _AgentFinishSuiteTestResult.addSuiteUuid(builder, suiteUuidOffset);\n      _AgentFinishSuiteTestResult.addSuiteName(builder, suiteNameOffset);\n      _AgentFinishSuiteTestResult.addUuid(builder, uuidOffset);\n      _AgentFinishSuiteTestResult.addName(builder, nameOffset);\n      _AgentFinishSuiteTestResult.addFinished(builder, finished);\n      _AgentFinishSuiteTestResult.addDuration(builder, duration);\n      _AgentFinishSuiteTestResult.addState(builder, state);\n      _AgentFinishSuiteTestResult.addErrorType(builder, errorTypeOffset);\n      _AgentFinishSuiteTestResult.addError(builder, errorOffset);\n      _AgentFinishSuiteTestResult.addErrorTrace(builder, errorTraceOffset);\n      _AgentFinishSuiteTestResult.addScreenshots(builder, screenshotsOffset);\n      _AgentFinishSuiteTestResult.addParentUuid(builder, parentUuidOffset);\n      _AgentFinishSuiteTestResult.addParentName(builder, parentNameOffset);\n      _AgentFinishSuiteTestResult.addAnnotations(builder, annotationsOffset);\n      return _AgentFinishSuiteTestResult.endAgentFinishSuiteTestResult(builder);\n    }\n  };\n\n  // io/testable/agent/agent-start-suite-result.ts\n  var AgentStartSuiteResult = class _AgentStartSuiteResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentStartSuiteResult(bb, obj) {\n      return (obj || new _AgentStartSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentStartSuiteResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentStartSuiteResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    regionalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    iterationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    browser(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    device(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentStartSuiteResult(builder) {\n      builder.startObject(11);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(0, uuidOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(1, nameOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(2, started, BigInt(\"0\"));\n    }\n    static addConcurrentClientIndex(builder, concurrentClientIndex) {\n      builder.addFieldInt64(3, concurrentClientIndex, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(4, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addRegionalConcurrentClientIndex(builder, regionalConcurrentClientIndex) {\n      builder.addFieldInt64(5, regionalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt32(6, iteration, 0);\n    }\n    static addIterationId(builder, iterationIdOffset) {\n      builder.addFieldOffset(7, iterationIdOffset, 0);\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(8, threadIdOffset, 0);\n    }\n    static addBrowser(builder, browserOffset) {\n      builder.addFieldOffset(9, browserOffset, 0);\n    }\n    static addDevice(builder, deviceOffset) {\n      builder.addFieldOffset(10, deviceOffset, 0);\n    }\n    static endAgentStartSuiteResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-start-suite-test-result.ts\n  var AgentStartSuiteTestResult = class _AgentStartSuiteTestResult {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentStartSuiteTestResult(bb, obj) {\n      return (obj || new _AgentStartSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentStartSuiteTestResult(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentStartSuiteTestResult()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    suiteUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    suiteName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    started() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    parentUuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    parentName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    annotations(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? (obj || new AgentAnnotation()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    annotationsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentStartSuiteTestResult(builder) {\n      builder.startObject(8);\n    }\n    static addSuiteUuid(builder, suiteUuidOffset) {\n      builder.addFieldOffset(0, suiteUuidOffset, 0);\n    }\n    static addSuiteName(builder, suiteNameOffset) {\n      builder.addFieldOffset(1, suiteNameOffset, 0);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(2, uuidOffset, 0);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(3, nameOffset, 0);\n    }\n    static addStarted(builder, started) {\n      builder.addFieldInt64(4, started, BigInt(\"0\"));\n    }\n    static addParentUuid(builder, parentUuidOffset) {\n      builder.addFieldOffset(5, parentUuidOffset, 0);\n    }\n    static addParentName(builder, parentNameOffset) {\n      builder.addFieldOffset(6, parentNameOffset, 0);\n    }\n    static addAnnotations(builder, annotationsOffset) {\n      builder.addFieldOffset(7, annotationsOffset, 0);\n    }\n    static createAnnotationsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAnnotationsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentStartSuiteTestResult(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentStartSuiteTestResult(builder, suiteUuidOffset, suiteNameOffset, uuidOffset, nameOffset, started, parentUuidOffset, parentNameOffset, annotationsOffset) {\n      _AgentStartSuiteTestResult.startAgentStartSuiteTestResult(builder);\n      _AgentStartSuiteTestResult.addSuiteUuid(builder, suiteUuidOffset);\n      _AgentStartSuiteTestResult.addSuiteName(builder, suiteNameOffset);\n      _AgentStartSuiteTestResult.addUuid(builder, uuidOffset);\n      _AgentStartSuiteTestResult.addName(builder, nameOffset);\n      _AgentStartSuiteTestResult.addStarted(builder, started);\n      _AgentStartSuiteTestResult.addParentUuid(builder, parentUuidOffset);\n      _AgentStartSuiteTestResult.addParentName(builder, parentNameOffset);\n      _AgentStartSuiteTestResult.addAnnotations(builder, annotationsOffset);\n      return _AgentStartSuiteTestResult.endAgentStartSuiteTestResult(builder);\n    }\n  };\n\n  // io/testable/agent/agent-suite-action-type.ts\n  var AgentSuiteActionType = /* @__PURE__ */ ((AgentSuiteActionType2) => {\n    AgentSuiteActionType2[AgentSuiteActionType2[\"StartSuite\"] = 0] = \"StartSuite\";\n    AgentSuiteActionType2[AgentSuiteActionType2[\"FinishSuite\"] = 1] = \"FinishSuite\";\n    AgentSuiteActionType2[AgentSuiteActionType2[\"StartSuiteTest\"] = 2] = \"StartSuiteTest\";\n    AgentSuiteActionType2[AgentSuiteActionType2[\"FinishSuiteTest\"] = 3] = \"FinishSuiteTest\";\n    return AgentSuiteActionType2;\n  })(AgentSuiteActionType || {});\n\n  // io/testable/agent/agent-suite-action.ts\n  var AgentSuiteAction = class _AgentSuiteAction {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentSuiteAction(bb, obj) {\n      return (obj || new _AgentSuiteAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentSuiteAction(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentSuiteAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    type() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* StartSuite */;\n    }\n    startSuite(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? (obj || new AgentStartSuiteResult()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    finishSuite(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new AgentFinishSuiteResult()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    startSuiteTest(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? (obj || new AgentStartSuiteTestResult()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    finishSuiteTest(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? (obj || new AgentFinishSuiteTestResult()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    static startAgentSuiteAction(builder) {\n      builder.startObject(5);\n    }\n    static addType(builder, type) {\n      builder.addFieldInt8(0, type, 0 /* StartSuite */);\n    }\n    static addStartSuite(builder, startSuiteOffset) {\n      builder.addFieldOffset(1, startSuiteOffset, 0);\n    }\n    static addFinishSuite(builder, finishSuiteOffset) {\n      builder.addFieldOffset(2, finishSuiteOffset, 0);\n    }\n    static addStartSuiteTest(builder, startSuiteTestOffset) {\n      builder.addFieldOffset(3, startSuiteTestOffset, 0);\n    }\n    static addFinishSuiteTest(builder, finishSuiteTestOffset) {\n      builder.addFieldOffset(4, finishSuiteTestOffset, 0);\n    }\n    static endAgentSuiteAction(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/attribute-outcome.ts\n  var AttributeOutcome = /* @__PURE__ */ ((AttributeOutcome2) => {\n    AttributeOutcome2[AttributeOutcome2[\"Success\"] = 0] = \"Success\";\n    AttributeOutcome2[AttributeOutcome2[\"Error\"] = 1] = \"Error\";\n    AttributeOutcome2[AttributeOutcome2[\"Unknown\"] = 2] = \"Unknown\";\n    return AttributeOutcome2;\n  })(AttributeOutcome || {});\n\n  // io/testable/agent/agent-test-attribute.ts\n  var AgentTestAttribute = class _AgentTestAttribute {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentTestAttribute(bb, obj) {\n      return (obj || new _AgentTestAttribute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentTestAttribute(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentTestAttribute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    attributeType(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    outcome() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Success */;\n    }\n    status(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    statusCode(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    expiration() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    data(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentTestAttribute(builder) {\n      builder.startObject(6);\n    }\n    static addAttributeType(builder, attributeTypeOffset) {\n      builder.addFieldOffset(0, attributeTypeOffset, 0);\n    }\n    static addOutcome(builder, outcome) {\n      builder.addFieldInt8(1, outcome, 0 /* Success */);\n    }\n    static addStatus(builder, statusOffset) {\n      builder.addFieldOffset(2, statusOffset, 0);\n    }\n    static addStatusCode(builder, statusCodeOffset) {\n      builder.addFieldOffset(3, statusCodeOffset, 0);\n    }\n    static addExpiration(builder, expiration) {\n      builder.addFieldInt64(4, expiration, BigInt(\"0\"));\n    }\n    static addData(builder, dataOffset) {\n      builder.addFieldOffset(5, dataOffset, 0);\n    }\n    static endAgentTestAttribute(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentTestAttribute(builder, attributeTypeOffset, outcome, statusOffset, statusCodeOffset, expiration, dataOffset) {\n      _AgentTestAttribute.startAgentTestAttribute(builder);\n      _AgentTestAttribute.addAttributeType(builder, attributeTypeOffset);\n      _AgentTestAttribute.addOutcome(builder, outcome);\n      _AgentTestAttribute.addStatus(builder, statusOffset);\n      _AgentTestAttribute.addStatusCode(builder, statusCodeOffset);\n      _AgentTestAttribute.addExpiration(builder, expiration);\n      _AgentTestAttribute.addData(builder, dataOffset);\n      return _AgentTestAttribute.endAgentTestAttribute(builder);\n    }\n  };\n\n  // io/testable/agent/chunk-execution-type.ts\n  var ChunkExecutionType = /* @__PURE__ */ ((ChunkExecutionType2) => {\n    ChunkExecutionType2[ChunkExecutionType2[\"Init\"] = 0] = \"Init\";\n    ChunkExecutionType2[ChunkExecutionType2[\"Teardown\"] = 1] = \"Teardown\";\n    ChunkExecutionType2[ChunkExecutionType2[\"Main\"] = 2] = \"Main\";\n    return ChunkExecutionType2;\n  })(ChunkExecutionType || {});\n\n  // io/testable/agent/test-type.ts\n  var TestType = /* @__PURE__ */ ((TestType2) => {\n    TestType2[TestType2[\"Load\"] = 0] = \"Load\";\n    TestType2[TestType2[\"Functional\"] = 1] = \"Functional\";\n    TestType2[TestType2[\"Monitor\"] = 2] = \"Monitor\";\n    TestType2[TestType2[\"Remote\"] = 3] = \"Remote\";\n    return TestType2;\n  })(TestType || {});\n\n  // io/testable/agent/agent-chunk-results.ts\n  var AgentChunkResults = class _AgentChunkResults {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentChunkResults(bb, obj) {\n      return (obj || new _AgentChunkResults()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentChunkResults(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentChunkResults()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    testCase() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionType() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Init */;\n    }\n    agentId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    results(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? (obj || new AgentChunkResult()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    resultsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    org() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    files(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? (obj || new AgentFile()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    filesLength() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    isReplay() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    testType() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Load */;\n    }\n    regionId() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunkIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    testSuiteResults(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? (obj || new AgentSuiteResult()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    testSuiteResultsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    traceContinuation(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 34);\n      return offset ? (obj || new AgentChunkTrace()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    suiteActions(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? (obj || new AgentSuiteAction()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    suiteActionsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    commands(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? (obj || new AgentCommandAction()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    commandsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    parentExecution() {\n      const offset = this.bb.__offset(this.bb_pos, 40);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    attributes(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? (obj || new AgentTestAttribute()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    attributesLength() {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentChunkResults(builder) {\n      builder.startObject(20);\n    }\n    static addTestCase(builder, testCase) {\n      builder.addFieldInt64(0, testCase, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(1, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(2, executionRegion, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(3, chunk, BigInt(\"0\"));\n    }\n    static addExecutionType(builder, executionType) {\n      builder.addFieldInt8(4, executionType, 0 /* Init */);\n    }\n    static addAgentId(builder, agentIdOffset) {\n      builder.addFieldOffset(5, agentIdOffset, 0);\n    }\n    static addRegionName(builder, regionNameOffset) {\n      builder.addFieldOffset(6, regionNameOffset, 0);\n    }\n    static addResults(builder, resultsOffset) {\n      builder.addFieldOffset(7, resultsOffset, 0);\n    }\n    static createResultsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startResultsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addOrg(builder, org) {\n      builder.addFieldInt64(8, org, BigInt(\"0\"));\n    }\n    static addFiles(builder, filesOffset) {\n      builder.addFieldOffset(9, filesOffset, 0);\n    }\n    static createFilesVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startFilesVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addIsReplay(builder, isReplay) {\n      builder.addFieldInt8(10, +isReplay, 0);\n    }\n    static addTestType(builder, testType) {\n      builder.addFieldInt8(11, testType, 0 /* Load */);\n    }\n    static addRegionId(builder, regionId) {\n      builder.addFieldInt64(12, regionId, BigInt(\"0\"));\n    }\n    static addChunkIndex(builder, chunkIndex) {\n      builder.addFieldInt32(13, chunkIndex, 0);\n    }\n    static addTestSuiteResults(builder, testSuiteResultsOffset) {\n      builder.addFieldOffset(14, testSuiteResultsOffset, 0);\n    }\n    static createTestSuiteResultsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startTestSuiteResultsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addTraceContinuation(builder, traceContinuationOffset) {\n      builder.addFieldOffset(15, traceContinuationOffset, 0);\n    }\n    static addSuiteActions(builder, suiteActionsOffset) {\n      builder.addFieldOffset(16, suiteActionsOffset, 0);\n    }\n    static createSuiteActionsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startSuiteActionsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addCommands(builder, commandsOffset) {\n      builder.addFieldOffset(17, commandsOffset, 0);\n    }\n    static createCommandsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startCommandsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addParentExecution(builder, parentExecution) {\n      builder.addFieldInt64(18, parentExecution, BigInt(\"0\"));\n    }\n    static addAttributes(builder, attributesOffset) {\n      builder.addFieldOffset(19, attributesOffset, 0);\n    }\n    static createAttributesVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAttributesVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentChunkResults(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-concurrent-client.ts\n  var AgentConcurrentClient = class _AgentConcurrentClient {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentConcurrentClient(bb, obj) {\n      return (obj || new _AgentConcurrentClient()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentConcurrentClient(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentConcurrentClient()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    testCase() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    threadId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    count() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    actualCount() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    agentId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    org() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    testType() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Load */;\n    }\n    parentExecution() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    static startAgentConcurrentClient(builder) {\n      builder.startObject(13);\n    }\n    static addTestCase(builder, testCase) {\n      builder.addFieldInt64(0, testCase, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(1, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(2, executionRegion, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(3, chunk, BigInt(\"0\"));\n    }\n    static addThreadId(builder, threadIdOffset) {\n      builder.addFieldOffset(4, threadIdOffset, 0);\n    }\n    static addCount(builder, count) {\n      builder.addFieldInt64(5, count, BigInt(\"0\"));\n    }\n    static addActualCount(builder, actualCount) {\n      builder.addFieldInt64(6, actualCount, BigInt(\"0\"));\n    }\n    static addAgentId(builder, agentIdOffset) {\n      builder.addFieldOffset(7, agentIdOffset, 0);\n    }\n    static addRegionName(builder, regionNameOffset) {\n      builder.addFieldOffset(8, regionNameOffset, 0);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(9, timestamp, BigInt(\"0\"));\n    }\n    static addOrg(builder, org) {\n      builder.addFieldInt64(10, org, BigInt(\"0\"));\n    }\n    static addTestType(builder, testType) {\n      builder.addFieldInt8(11, testType, 0 /* Load */);\n    }\n    static addParentExecution(builder, parentExecution) {\n      builder.addFieldInt64(12, parentExecution, BigInt(\"0\"));\n    }\n    static endAgentConcurrentClient(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentConcurrentClient(builder, testCase, execution, executionRegion, chunk, threadIdOffset, count, actualCount, agentIdOffset, regionNameOffset, timestamp, org, testType, parentExecution) {\n      _AgentConcurrentClient.startAgentConcurrentClient(builder);\n      _AgentConcurrentClient.addTestCase(builder, testCase);\n      _AgentConcurrentClient.addExecution(builder, execution);\n      _AgentConcurrentClient.addExecutionRegion(builder, executionRegion);\n      _AgentConcurrentClient.addChunk(builder, chunk);\n      _AgentConcurrentClient.addThreadId(builder, threadIdOffset);\n      _AgentConcurrentClient.addCount(builder, count);\n      _AgentConcurrentClient.addActualCount(builder, actualCount);\n      _AgentConcurrentClient.addAgentId(builder, agentIdOffset);\n      _AgentConcurrentClient.addRegionName(builder, regionNameOffset);\n      _AgentConcurrentClient.addTimestamp(builder, timestamp);\n      _AgentConcurrentClient.addOrg(builder, org);\n      _AgentConcurrentClient.addTestType(builder, testType);\n      _AgentConcurrentClient.addParentExecution(builder, parentExecution);\n      return _AgentConcurrentClient.endAgentConcurrentClient(builder);\n    }\n  };\n\n  // io/testable/agent/agent-health.ts\n  var AgentHealth = class _AgentHealth {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentHealth(bb, obj) {\n      return (obj || new _AgentHealth()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentHealth(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentHealth()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    agentId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    activeChunks(index) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb.__vector(this.bb_pos + offset) + index * 8) : BigInt(0);\n    }\n    activeChunksLength() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    activeConcurrentClients() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    cpu() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    totalMemory() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    freeMemory() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    usedMemory() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    networkSent() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    networkReceived() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    connections() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    cpuUtilization() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    installedBrowsers(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    installedBrowsersLength() {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentHealth(builder) {\n      builder.startObject(14);\n    }\n    static addAgentId(builder, agentIdOffset) {\n      builder.addFieldOffset(0, agentIdOffset, 0);\n    }\n    static addRegionName(builder, regionNameOffset) {\n      builder.addFieldOffset(1, regionNameOffset, 0);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(2, timestamp, BigInt(\"0\"));\n    }\n    static addActiveChunks(builder, activeChunksOffset) {\n      builder.addFieldOffset(3, activeChunksOffset, 0);\n    }\n    static createActiveChunksVector(builder, data) {\n      builder.startVector(8, data.length, 8);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addInt64(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startActiveChunksVector(builder, numElems) {\n      builder.startVector(8, numElems, 8);\n    }\n    static addActiveConcurrentClients(builder, activeConcurrentClients) {\n      builder.addFieldInt64(4, activeConcurrentClients, BigInt(\"0\"));\n    }\n    static addCpu(builder, cpu) {\n      builder.addFieldFloat64(5, cpu, 0);\n    }\n    static addTotalMemory(builder, totalMemory) {\n      builder.addFieldInt64(6, totalMemory, BigInt(\"0\"));\n    }\n    static addFreeMemory(builder, freeMemory) {\n      builder.addFieldInt64(7, freeMemory, BigInt(\"0\"));\n    }\n    static addUsedMemory(builder, usedMemory) {\n      builder.addFieldInt64(8, usedMemory, BigInt(\"0\"));\n    }\n    static addNetworkSent(builder, networkSent) {\n      builder.addFieldInt64(9, networkSent, BigInt(\"0\"));\n    }\n    static addNetworkReceived(builder, networkReceived) {\n      builder.addFieldInt64(10, networkReceived, BigInt(\"0\"));\n    }\n    static addConnections(builder, connections) {\n      builder.addFieldInt64(11, connections, BigInt(\"0\"));\n    }\n    static addCpuUtilization(builder, cpuUtilization) {\n      builder.addFieldInt64(12, cpuUtilization, BigInt(\"0\"));\n    }\n    static addInstalledBrowsers(builder, installedBrowsersOffset) {\n      builder.addFieldOffset(13, installedBrowsersOffset, 0);\n    }\n    static createInstalledBrowsersVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startInstalledBrowsersVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentHealth(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentHealth(builder, agentIdOffset, regionNameOffset, timestamp, activeChunksOffset, activeConcurrentClients, cpu, totalMemory, freeMemory, usedMemory, networkSent, networkReceived, connections, cpuUtilization, installedBrowsersOffset) {\n      _AgentHealth.startAgentHealth(builder);\n      _AgentHealth.addAgentId(builder, agentIdOffset);\n      _AgentHealth.addRegionName(builder, regionNameOffset);\n      _AgentHealth.addTimestamp(builder, timestamp);\n      _AgentHealth.addActiveChunks(builder, activeChunksOffset);\n      _AgentHealth.addActiveConcurrentClients(builder, activeConcurrentClients);\n      _AgentHealth.addCpu(builder, cpu);\n      _AgentHealth.addTotalMemory(builder, totalMemory);\n      _AgentHealth.addFreeMemory(builder, freeMemory);\n      _AgentHealth.addUsedMemory(builder, usedMemory);\n      _AgentHealth.addNetworkSent(builder, networkSent);\n      _AgentHealth.addNetworkReceived(builder, networkReceived);\n      _AgentHealth.addConnections(builder, connections);\n      _AgentHealth.addCpuUtilization(builder, cpuUtilization);\n      _AgentHealth.addInstalledBrowsers(builder, installedBrowsersOffset);\n      return _AgentHealth.endAgentHealth(builder);\n    }\n  };\n\n  // io/testable/agent/log-level.ts\n  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {\n    LogLevel2[LogLevel2[\"Error\"] = 0] = \"Error\";\n    LogLevel2[LogLevel2[\"Info\"] = 1] = \"Info\";\n    LogLevel2[LogLevel2[\"Debug\"] = 2] = \"Debug\";\n    LogLevel2[LogLevel2[\"Fatal\"] = 3] = \"Fatal\";\n    LogLevel2[LogLevel2[\"Trace\"] = 4] = \"Trace\";\n    return LogLevel2;\n  })(LogLevel || {});\n\n  // io/testable/agent/agent-log-message.ts\n  var AgentLogMessage = class _AgentLogMessage {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentLogMessage(bb, obj) {\n      return (obj || new _AgentLogMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentLogMessage(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentLogMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    level() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* Error */;\n    }\n    message(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    timestamp() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    static startAgentLogMessage(builder) {\n      builder.startObject(3);\n    }\n    static addLevel(builder, level) {\n      builder.addFieldInt8(0, level, 0 /* Error */);\n    }\n    static addMessage(builder, messageOffset) {\n      builder.addFieldOffset(1, messageOffset, 0);\n    }\n    static addTimestamp(builder, timestamp) {\n      builder.addFieldInt64(2, timestamp, BigInt(\"0\"));\n    }\n    static endAgentLogMessage(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentLogMessage(builder, level, messageOffset, timestamp) {\n      _AgentLogMessage.startAgentLogMessage(builder);\n      _AgentLogMessage.addLevel(builder, level);\n      _AgentLogMessage.addMessage(builder, messageOffset);\n      _AgentLogMessage.addTimestamp(builder, timestamp);\n      return _AgentLogMessage.endAgentLogMessage(builder);\n    }\n  };\n\n  // io/testable/agent/agent-log.ts\n  var AgentLog = class _AgentLog {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentLog(bb, obj) {\n      return (obj || new _AgentLog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentLog(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentLog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    agentId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    messages(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? (obj || new AgentLogMessage()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    messagesLength() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    org() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    client() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    logGroup(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionId() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    iteration() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    monitor() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    incident() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    static startAgentLog(builder) {\n      builder.startObject(13);\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(0, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(1, executionRegion, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(2, chunk, BigInt(\"0\"));\n    }\n    static addAgentId(builder, agentIdOffset) {\n      builder.addFieldOffset(3, agentIdOffset, 0);\n    }\n    static addRegionName(builder, regionNameOffset) {\n      builder.addFieldOffset(4, regionNameOffset, 0);\n    }\n    static addMessages(builder, messagesOffset) {\n      builder.addFieldOffset(5, messagesOffset, 0);\n    }\n    static createMessagesVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startMessagesVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addOrg(builder, org) {\n      builder.addFieldInt64(6, org, BigInt(\"0\"));\n    }\n    static addClient(builder, client) {\n      builder.addFieldInt32(7, client, 0);\n    }\n    static addLogGroup(builder, logGroupOffset) {\n      builder.addFieldOffset(8, logGroupOffset, 0);\n    }\n    static addRegionId(builder, regionId) {\n      builder.addFieldInt64(9, regionId, BigInt(\"0\"));\n    }\n    static addIteration(builder, iteration) {\n      builder.addFieldInt32(10, iteration, 0);\n    }\n    static addMonitor(builder, monitor) {\n      builder.addFieldInt64(11, monitor, BigInt(\"0\"));\n    }\n    static addIncident(builder, incident) {\n      builder.addFieldInt64(12, incident, BigInt(\"0\"));\n    }\n    static endAgentLog(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentLog(builder, execution, executionRegion, chunk, agentIdOffset, regionNameOffset, messagesOffset, org, client, logGroupOffset, regionId, iteration, monitor, incident) {\n      _AgentLog.startAgentLog(builder);\n      _AgentLog.addExecution(builder, execution);\n      _AgentLog.addExecutionRegion(builder, executionRegion);\n      _AgentLog.addChunk(builder, chunk);\n      _AgentLog.addAgentId(builder, agentIdOffset);\n      _AgentLog.addRegionName(builder, regionNameOffset);\n      _AgentLog.addMessages(builder, messagesOffset);\n      _AgentLog.addOrg(builder, org);\n      _AgentLog.addClient(builder, client);\n      _AgentLog.addLogGroup(builder, logGroupOffset);\n      _AgentLog.addRegionId(builder, regionId);\n      _AgentLog.addIteration(builder, iteration);\n      _AgentLog.addMonitor(builder, monitor);\n      _AgentLog.addIncident(builder, incident);\n      return _AgentLog.endAgentLog(builder);\n    }\n  };\n\n  // io/testable/agent/location-info.ts\n  var LocationInfo = class _LocationInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsLocationInfo(bb, obj) {\n      return (obj || new _LocationInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsLocationInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _LocationInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    ip(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    latitude() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    longitude() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    hasLatLong() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    updateLatLong() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : true;\n    }\n    static startLocationInfo(builder) {\n      builder.startObject(5);\n    }\n    static addIp(builder, ipOffset) {\n      builder.addFieldOffset(0, ipOffset, 0);\n    }\n    static addLatitude(builder, latitude) {\n      builder.addFieldFloat64(1, latitude, 0);\n    }\n    static addLongitude(builder, longitude) {\n      builder.addFieldFloat64(2, longitude, 0);\n    }\n    static addHasLatLong(builder, hasLatLong) {\n      builder.addFieldInt8(3, +hasLatLong, 0);\n    }\n    static addUpdateLatLong(builder, updateLatLong) {\n      builder.addFieldInt8(4, +updateLatLong, 1);\n    }\n    static endLocationInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createLocationInfo(builder, ipOffset, latitude, longitude, hasLatLong, updateLatLong) {\n      _LocationInfo.startLocationInfo(builder);\n      _LocationInfo.addIp(builder, ipOffset);\n      _LocationInfo.addLatitude(builder, latitude);\n      _LocationInfo.addLongitude(builder, longitude);\n      _LocationInfo.addHasLatLong(builder, hasLatLong);\n      _LocationInfo.addUpdateLatLong(builder, updateLatLong);\n      return _LocationInfo.endLocationInfo(builder);\n    }\n  };\n\n  // io/testable/agent/region-info.ts\n  var RegionInfo = class _RegionInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsRegionInfo(bb, obj) {\n      return (obj || new _RegionInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsRegionInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _RegionInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    scope(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    description(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    provider() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"-1\");\n    }\n    static startRegionInfo(builder) {\n      builder.startObject(4);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addScope(builder, scopeOffset) {\n      builder.addFieldOffset(1, scopeOffset, 0);\n    }\n    static addDescription(builder, descriptionOffset) {\n      builder.addFieldOffset(2, descriptionOffset, 0);\n    }\n    static addProvider(builder, provider) {\n      builder.addFieldInt64(3, provider, BigInt(\"-1\"));\n    }\n    static endRegionInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createRegionInfo(builder, nameOffset, scopeOffset, descriptionOffset, provider) {\n      _RegionInfo.startRegionInfo(builder);\n      _RegionInfo.addName(builder, nameOffset);\n      _RegionInfo.addScope(builder, scopeOffset);\n      _RegionInfo.addDescription(builder, descriptionOffset);\n      _RegionInfo.addProvider(builder, provider);\n      return _RegionInfo.endRegionInfo(builder);\n    }\n  };\n\n  // io/testable/agent/agent-status.ts\n  var AgentStatus = class _AgentStatus {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentStatus(bb, obj) {\n      return (obj || new _AgentStatus()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentStatus(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentStatus()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    key(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    region(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new RegionInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    concurrentConnectionLimit() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    activeConnections() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    pid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    host(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    containerId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    location(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? (obj || new LocationInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    version() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    freeMemory() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    totalMemory() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    cpu() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    totalCpus() {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    activeChunks(index) {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? this.bb.readInt64(this.bb.__vector(this.bb_pos + offset) + index * 8) : BigInt(0);\n    }\n    activeChunksLength() {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    instanceId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 34);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    productCode(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    agentVersion(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    platform(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 40);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    installedBrowsers(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? (obj || new Browser()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    installedBrowsersLength() {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    requiresLock() {\n      const offset = this.bb.__offset(this.bb_pos, 44);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    keys(index, optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 46);\n      return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n    }\n    keysLength() {\n      const offset = this.bb.__offset(this.bb_pos, 46);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    regions(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 48);\n      return offset ? (obj || new RegionInfo()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    regionsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 48);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    scenarioTypes(index, optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 50);\n      return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n    }\n    scenarioTypesLength() {\n      const offset = this.bb.__offset(this.bb_pos, 50);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    tags(index, optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 52);\n      return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n    }\n    tagsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 52);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    static startAgentStatus(builder) {\n      builder.startObject(25);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addKey(builder, keyOffset) {\n      builder.addFieldOffset(1, keyOffset, 0);\n    }\n    static addRegion(builder, regionOffset) {\n      builder.addFieldOffset(2, regionOffset, 0);\n    }\n    static addConcurrentConnectionLimit(builder, concurrentConnectionLimit) {\n      builder.addFieldInt64(3, concurrentConnectionLimit, BigInt(\"0\"));\n    }\n    static addActiveConnections(builder, activeConnections) {\n      builder.addFieldInt64(4, activeConnections, BigInt(\"0\"));\n    }\n    static addPid(builder, pidOffset) {\n      builder.addFieldOffset(5, pidOffset, 0);\n    }\n    static addHost(builder, hostOffset) {\n      builder.addFieldOffset(6, hostOffset, 0);\n    }\n    static addContainerId(builder, containerIdOffset) {\n      builder.addFieldOffset(7, containerIdOffset, 0);\n    }\n    static addLocation(builder, locationOffset) {\n      builder.addFieldOffset(8, locationOffset, 0);\n    }\n    static addVersion(builder, version) {\n      builder.addFieldInt32(9, version, 0);\n    }\n    static addFreeMemory(builder, freeMemory) {\n      builder.addFieldInt64(10, freeMemory, BigInt(\"0\"));\n    }\n    static addTotalMemory(builder, totalMemory) {\n      builder.addFieldInt64(11, totalMemory, BigInt(\"0\"));\n    }\n    static addCpu(builder, cpu) {\n      builder.addFieldFloat64(12, cpu, 0);\n    }\n    static addTotalCpus(builder, totalCpus) {\n      builder.addFieldInt32(13, totalCpus, 0);\n    }\n    static addActiveChunks(builder, activeChunksOffset) {\n      builder.addFieldOffset(14, activeChunksOffset, 0);\n    }\n    static createActiveChunksVector(builder, data) {\n      builder.startVector(8, data.length, 8);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addInt64(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startActiveChunksVector(builder, numElems) {\n      builder.startVector(8, numElems, 8);\n    }\n    static addInstanceId(builder, instanceIdOffset) {\n      builder.addFieldOffset(15, instanceIdOffset, 0);\n    }\n    static addProductCode(builder, productCodeOffset) {\n      builder.addFieldOffset(16, productCodeOffset, 0);\n    }\n    static addAgentVersion(builder, agentVersionOffset) {\n      builder.addFieldOffset(17, agentVersionOffset, 0);\n    }\n    static addPlatform(builder, platformOffset) {\n      builder.addFieldOffset(18, platformOffset, 0);\n    }\n    static addInstalledBrowsers(builder, installedBrowsersOffset) {\n      builder.addFieldOffset(19, installedBrowsersOffset, 0);\n    }\n    static createInstalledBrowsersVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startInstalledBrowsersVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addRequiresLock(builder, requiresLock) {\n      builder.addFieldInt8(20, +requiresLock, 0);\n    }\n    static addKeys(builder, keysOffset) {\n      builder.addFieldOffset(21, keysOffset, 0);\n    }\n    static createKeysVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startKeysVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addRegions(builder, regionsOffset) {\n      builder.addFieldOffset(22, regionsOffset, 0);\n    }\n    static createRegionsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startRegionsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addScenarioTypes(builder, scenarioTypesOffset) {\n      builder.addFieldOffset(23, scenarioTypesOffset, 0);\n    }\n    static createScenarioTypesVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startScenarioTypesVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addTags(builder, tagsOffset) {\n      builder.addFieldOffset(24, tagsOffset, 0);\n    }\n    static createTagsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startTagsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static endAgentStatus(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/agent-to-server-event-type.ts\n  var AgentToServerEventType = /* @__PURE__ */ ((AgentToServerEventType2) => {\n    AgentToServerEventType2[AgentToServerEventType2[\"Register\"] = 0] = \"Register\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Unregister\"] = 1] = \"Unregister\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ScriptExecuted\"] = 2] = \"ScriptExecuted\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Results\"] = 3] = \"Results\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Log\"] = 4] = \"Log\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Ping\"] = 5] = \"Ping\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ChunkStarted\"] = 6] = \"ChunkStarted\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ChunkExecuted\"] = 7] = \"ChunkExecuted\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ChunkFailed\"] = 8] = \"ChunkFailed\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ChunkProgress\"] = 9] = \"ChunkProgress\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ConcurrentClientStarted\"] = 10] = \"ConcurrentClientStarted\";\n    AgentToServerEventType2[AgentToServerEventType2[\"ConcurrentClientFinished\"] = 11] = \"ConcurrentClientFinished\";\n    AgentToServerEventType2[AgentToServerEventType2[\"WillRestart\"] = 12] = \"WillRestart\";\n    AgentToServerEventType2[AgentToServerEventType2[\"VncStarted\"] = 13] = \"VncStarted\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Ack\"] = 14] = \"Ack\";\n    AgentToServerEventType2[AgentToServerEventType2[\"Usage\"] = 15] = \"Usage\";\n    return AgentToServerEventType2;\n  })(AgentToServerEventType || {});\n\n  // io/testable/agent/agent-usage.ts\n  var AgentUsage = class _AgentUsage {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentUsage(bb, obj) {\n      return (obj || new _AgentUsage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentUsage(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentUsage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    org() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    testCase() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    script() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    productCode(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    quantity() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    description(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAgentUsage(builder) {\n      builder.startObject(9);\n    }\n    static addOrg(builder, org) {\n      builder.addFieldInt64(0, org, BigInt(\"0\"));\n    }\n    static addTestCase(builder, testCase) {\n      builder.addFieldInt64(1, testCase, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(2, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(3, executionRegion, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(4, chunk, BigInt(\"0\"));\n    }\n    static addScript(builder, script) {\n      builder.addFieldInt64(5, script, BigInt(\"0\"));\n    }\n    static addProductCode(builder, productCodeOffset) {\n      builder.addFieldOffset(6, productCodeOffset, 0);\n    }\n    static addQuantity(builder, quantity) {\n      builder.addFieldFloat64(7, quantity, 0);\n    }\n    static addDescription(builder, descriptionOffset) {\n      builder.addFieldOffset(8, descriptionOffset, 0);\n    }\n    static endAgentUsage(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentUsage(builder, org, testCase, execution, executionRegion, chunk, script, productCodeOffset, quantity, descriptionOffset) {\n      _AgentUsage.startAgentUsage(builder);\n      _AgentUsage.addOrg(builder, org);\n      _AgentUsage.addTestCase(builder, testCase);\n      _AgentUsage.addExecution(builder, execution);\n      _AgentUsage.addExecutionRegion(builder, executionRegion);\n      _AgentUsage.addChunk(builder, chunk);\n      _AgentUsage.addScript(builder, script);\n      _AgentUsage.addProductCode(builder, productCodeOffset);\n      _AgentUsage.addQuantity(builder, quantity);\n      _AgentUsage.addDescription(builder, descriptionOffset);\n      return _AgentUsage.endAgentUsage(builder);\n    }\n  };\n\n  // io/testable/agent/agent-vnc-info.ts\n  var AgentVncInfo = class _AgentVncInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentVncInfo(bb, obj) {\n      return (obj || new _AgentVncInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentVncInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentVncInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    chunk() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    globalConcurrentClientIndex() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    error(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    session() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;\n    }\n    static startAgentVncInfo(builder) {\n      builder.startObject(6);\n    }\n    static addId(builder, idOffset) {\n      builder.addFieldOffset(0, idOffset, 0);\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(1, execution, BigInt(\"0\"));\n    }\n    static addChunk(builder, chunk) {\n      builder.addFieldInt64(2, chunk, BigInt(\"0\"));\n    }\n    static addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex) {\n      builder.addFieldInt64(3, globalConcurrentClientIndex, BigInt(\"0\"));\n    }\n    static addError(builder, errorOffset) {\n      builder.addFieldOffset(4, errorOffset, 0);\n    }\n    static addSession(builder, session) {\n      builder.addFieldInt32(5, session, 0);\n    }\n    static endAgentVncInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAgentVncInfo(builder, idOffset, execution, chunk, globalConcurrentClientIndex, errorOffset, session) {\n      _AgentVncInfo.startAgentVncInfo(builder);\n      _AgentVncInfo.addId(builder, idOffset);\n      _AgentVncInfo.addExecution(builder, execution);\n      _AgentVncInfo.addChunk(builder, chunk);\n      _AgentVncInfo.addGlobalConcurrentClientIndex(builder, globalConcurrentClientIndex);\n      _AgentVncInfo.addError(builder, errorOffset);\n      _AgentVncInfo.addSession(builder, session);\n      return _AgentVncInfo.endAgentVncInfo(builder);\n    }\n  };\n\n  // io/testable/agent/chunk-outcome.ts\n  var ChunkOutcome = /* @__PURE__ */ ((ChunkOutcome2) => {\n    ChunkOutcome2[ChunkOutcome2[\"None\"] = 0] = \"None\";\n    ChunkOutcome2[ChunkOutcome2[\"Passed\"] = 1] = \"Passed\";\n    ChunkOutcome2[ChunkOutcome2[\"Failed\"] = 2] = \"Failed\";\n    ChunkOutcome2[ChunkOutcome2[\"Timeout\"] = 3] = \"Timeout\";\n    return ChunkOutcome2;\n  })(ChunkOutcome || {});\n\n  // io/testable/agent/chunk-info.ts\n  var ChunkInfo = class _ChunkInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsChunkInfo(bb, obj) {\n      return (obj || new _ChunkInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsChunkInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _ChunkInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    id() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClients() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    concurrentClientId() {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    outcome() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.readInt8(this.bb_pos + offset) : 0 /* None */;\n    }\n    commit(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startChunkInfo(builder) {\n      builder.startObject(7);\n    }\n    static addId(builder, id) {\n      builder.addFieldInt64(0, id, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(1, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(2, executionRegion, BigInt(\"0\"));\n    }\n    static addConcurrentClients(builder, concurrentClients) {\n      builder.addFieldInt64(3, concurrentClients, BigInt(\"0\"));\n    }\n    static addConcurrentClientId(builder, concurrentClientId) {\n      builder.addFieldInt64(4, concurrentClientId, BigInt(\"0\"));\n    }\n    static addOutcome(builder, outcome) {\n      builder.addFieldInt8(5, outcome, 0 /* None */);\n    }\n    static addCommit(builder, commitOffset) {\n      builder.addFieldOffset(6, commitOffset, 0);\n    }\n    static endChunkInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createChunkInfo(builder, id, execution, executionRegion, concurrentClients, concurrentClientId, outcome, commitOffset) {\n      _ChunkInfo.startChunkInfo(builder);\n      _ChunkInfo.addId(builder, id);\n      _ChunkInfo.addExecution(builder, execution);\n      _ChunkInfo.addExecutionRegion(builder, executionRegion);\n      _ChunkInfo.addConcurrentClients(builder, concurrentClients);\n      _ChunkInfo.addConcurrentClientId(builder, concurrentClientId);\n      _ChunkInfo.addOutcome(builder, outcome);\n      _ChunkInfo.addCommit(builder, commitOffset);\n      return _ChunkInfo.endChunkInfo(builder);\n    }\n  };\n\n  // io/testable/agent/agent-to-server-event.ts\n  var AgentToServerEvent = class _AgentToServerEvent {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAgentToServerEvent(bb, obj) {\n      return (obj || new _AgentToServerEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAgentToServerEvent(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AgentToServerEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    eventType() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt16(this.bb_pos + offset) : 0 /* Register */;\n    }\n    health(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? (obj || new AgentHealth()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    status(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? (obj || new AgentStatus()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    results(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? (obj || new AgentChunkResults()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    chunk(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? (obj || new ChunkInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    concurrentClient(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? (obj || new AgentConcurrentClient()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    chunkProgress(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? (obj || new AgentChunkProgress()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    startedAt() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    log(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? (obj || new AgentLog()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    correlationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    iterationsExecuted() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    failureMessage(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    isExpectedRestart() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    vncInfo(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? (obj || new AgentVncInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    usage(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? (obj || new AgentUsage()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    static startAgentToServerEvent(builder) {\n      builder.startObject(15);\n    }\n    static addEventType(builder, eventType) {\n      builder.addFieldInt16(0, eventType, 0 /* Register */);\n    }\n    static addHealth(builder, healthOffset) {\n      builder.addFieldOffset(1, healthOffset, 0);\n    }\n    static addStatus(builder, statusOffset) {\n      builder.addFieldOffset(2, statusOffset, 0);\n    }\n    static addResults(builder, resultsOffset) {\n      builder.addFieldOffset(3, resultsOffset, 0);\n    }\n    static addChunk(builder, chunkOffset) {\n      builder.addFieldOffset(4, chunkOffset, 0);\n    }\n    static addConcurrentClient(builder, concurrentClientOffset) {\n      builder.addFieldOffset(5, concurrentClientOffset, 0);\n    }\n    static addChunkProgress(builder, chunkProgressOffset) {\n      builder.addFieldOffset(6, chunkProgressOffset, 0);\n    }\n    static addStartedAt(builder, startedAt) {\n      builder.addFieldInt64(7, startedAt, BigInt(\"0\"));\n    }\n    static addLog(builder, logOffset) {\n      builder.addFieldOffset(8, logOffset, 0);\n    }\n    static addCorrelationId(builder, correlationIdOffset) {\n      builder.addFieldOffset(9, correlationIdOffset, 0);\n    }\n    static addIterationsExecuted(builder, iterationsExecuted) {\n      builder.addFieldInt64(10, iterationsExecuted, BigInt(\"0\"));\n    }\n    static addFailureMessage(builder, failureMessageOffset) {\n      builder.addFieldOffset(11, failureMessageOffset, 0);\n    }\n    static addIsExpectedRestart(builder, isExpectedRestart) {\n      builder.addFieldInt8(12, +isExpectedRestart, 0);\n    }\n    static addVncInfo(builder, vncInfoOffset) {\n      builder.addFieldOffset(13, vncInfoOffset, 0);\n    }\n    static addUsage(builder, usageOffset) {\n      builder.addFieldOffset(14, usageOffset, 0);\n    }\n    static endAgentToServerEvent(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n\n  // io/testable/agent/ai-key.ts\n  var AiKey = class _AiKey {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAiKey(bb, obj) {\n      return (obj || new _AiKey()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAiKey(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AiKey()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    provider(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    key(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAiKey(builder) {\n      builder.startObject(2);\n    }\n    static addProvider(builder, providerOffset) {\n      builder.addFieldOffset(0, providerOffset, 0);\n    }\n    static addKey(builder, keyOffset) {\n      builder.addFieldOffset(1, keyOffset, 0);\n    }\n    static endAiKey(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAiKey(builder, providerOffset, keyOffset) {\n      _AiKey.startAiKey(builder);\n      _AiKey.addProvider(builder, providerOffset);\n      _AiKey.addKey(builder, keyOffset);\n      return _AiKey.endAiKey(builder);\n    }\n  };\n\n  // io/testable/agent/ai-info.ts\n  var AiInfo = class _AiInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAiInfo(bb, obj) {\n      return (obj || new _AiInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAiInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AiInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    limit() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    keys(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? (obj || new AiKey()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    keysLength() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    meterUsage() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    static startAiInfo(builder) {\n      builder.startObject(3);\n    }\n    static addLimit(builder, limit) {\n      builder.addFieldInt64(0, limit, BigInt(\"0\"));\n    }\n    static addKeys(builder, keysOffset) {\n      builder.addFieldOffset(1, keysOffset, 0);\n    }\n    static createKeysVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startKeysVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addMeterUsage(builder, meterUsage) {\n      builder.addFieldInt8(2, +meterUsage, 0);\n    }\n    static endAiInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAiInfo(builder, limit, keysOffset, meterUsage) {\n      _AiInfo.startAiInfo(builder);\n      _AiInfo.addLimit(builder, limit);\n      _AiInfo.addKeys(builder, keysOffset);\n      _AiInfo.addMeterUsage(builder, meterUsage);\n      return _AiInfo.endAiInfo(builder);\n    }\n  };\n\n  // io/testable/agent/ai-model.ts\n  var AiModel = class _AiModel {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAiModel(bb, obj) {\n      return (obj || new _AiModel()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAiModel(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AiModel()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    inputPrice() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    inputCachedPrice() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    outputPrice() {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0;\n    }\n    static startAiModel(builder) {\n      builder.startObject(4);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addInputPrice(builder, inputPrice) {\n      builder.addFieldFloat64(1, inputPrice, 0);\n    }\n    static addInputCachedPrice(builder, inputCachedPrice) {\n      builder.addFieldFloat64(2, inputCachedPrice, 0);\n    }\n    static addOutputPrice(builder, outputPrice) {\n      builder.addFieldFloat64(3, outputPrice, 0);\n    }\n    static endAiModel(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAiModel(builder, nameOffset, inputPrice, inputCachedPrice, outputPrice) {\n      _AiModel.startAiModel(builder);\n      _AiModel.addName(builder, nameOffset);\n      _AiModel.addInputPrice(builder, inputPrice);\n      _AiModel.addInputCachedPrice(builder, inputCachedPrice);\n      _AiModel.addOutputPrice(builder, outputPrice);\n      return _AiModel.endAiModel(builder);\n    }\n  };\n\n  // io/testable/agent/assigned-region-info.ts\n  var AssignedRegionInfo = class _AssignedRegionInfo {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsAssignedRegionInfo(bb, obj) {\n      return (obj || new _AssignedRegionInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsAssignedRegionInfo(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _AssignedRegionInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    regionName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    regionDescription(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    providerId() {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    key(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    locationName(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    locationDescription(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    tag(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startAssignedRegionInfo(builder) {\n      builder.startObject(7);\n    }\n    static addRegionName(builder, regionNameOffset) {\n      builder.addFieldOffset(0, regionNameOffset, 0);\n    }\n    static addRegionDescription(builder, regionDescriptionOffset) {\n      builder.addFieldOffset(1, regionDescriptionOffset, 0);\n    }\n    static addProviderId(builder, providerId) {\n      builder.addFieldInt64(2, providerId, BigInt(\"0\"));\n    }\n    static addKey(builder, keyOffset) {\n      builder.addFieldOffset(3, keyOffset, 0);\n    }\n    static addLocationName(builder, locationNameOffset) {\n      builder.addFieldOffset(4, locationNameOffset, 0);\n    }\n    static addLocationDescription(builder, locationDescriptionOffset) {\n      builder.addFieldOffset(5, locationDescriptionOffset, 0);\n    }\n    static addTag(builder, tagOffset) {\n      builder.addFieldOffset(6, tagOffset, 0);\n    }\n    static endAssignedRegionInfo(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createAssignedRegionInfo(builder, regionNameOffset, regionDescriptionOffset, providerId, keyOffset, locationNameOffset, locationDescriptionOffset, tagOffset) {\n      _AssignedRegionInfo.startAssignedRegionInfo(builder);\n      _AssignedRegionInfo.addRegionName(builder, regionNameOffset);\n      _AssignedRegionInfo.addRegionDescription(builder, regionDescriptionOffset);\n      _AssignedRegionInfo.addProviderId(builder, providerId);\n      _AssignedRegionInfo.addKey(builder, keyOffset);\n      _AssignedRegionInfo.addLocationName(builder, locationNameOffset);\n      _AssignedRegionInfo.addLocationDescription(builder, locationDescriptionOffset);\n      _AssignedRegionInfo.addTag(builder, tagOffset);\n      return _AssignedRegionInfo.endAssignedRegionInfo(builder);\n    }\n  };\n\n  // io/testable/agent/server-to-agent-event-type.ts\n  var ServerToAgentEventType = /* @__PURE__ */ ((ServerToAgentEventType2) => {\n    ServerToAgentEventType2[ServerToAgentEventType2[\"StartChunk\"] = 0] = \"StartChunk\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"StopChunk\"] = 1] = \"StopChunk\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"Registered\"] = 2] = \"Registered\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"Error\"] = 3] = \"Error\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"RestartAck\"] = 4] = \"RestartAck\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"UpdateChunk\"] = 5] = \"UpdateChunk\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"AssignToRegion\"] = 6] = \"AssignToRegion\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"SendEvent\"] = 7] = \"SendEvent\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"ChunkExecutedAck\"] = 8] = \"ChunkExecutedAck\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"Heartbeat\"] = 9] = \"Heartbeat\";\n    ServerToAgentEventType2[ServerToAgentEventType2[\"SendHttpNotification\"] = 10] = \"SendHttpNotification\";\n    return ServerToAgentEventType2;\n  })(ServerToAgentEventType || {});\n\n  // io/testable/agent/test-event.ts\n  var TestEvent = class _TestEvent {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsTestEvent(bb, obj) {\n      return (obj || new _TestEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsTestEvent(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _TestEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    name(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    contents(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    static startTestEvent(builder) {\n      builder.startObject(2);\n    }\n    static addName(builder, nameOffset) {\n      builder.addFieldOffset(0, nameOffset, 0);\n    }\n    static addContents(builder, contentsOffset) {\n      builder.addFieldOffset(1, contentsOffset, 0);\n    }\n    static endTestEvent(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n    static createTestEvent(builder, nameOffset, contentsOffset) {\n      _TestEvent.startTestEvent(builder);\n      _TestEvent.addName(builder, nameOffset);\n      _TestEvent.addContents(builder, contentsOffset);\n      return _TestEvent.endTestEvent(builder);\n    }\n  };\n\n  // io/testable/agent/server-to-agent-event.ts\n  var ServerToAgentEvent = class _ServerToAgentEvent {\n    constructor() {\n      this.bb = null;\n      this.bb_pos = 0;\n    }\n    __init(i, bb) {\n      this.bb_pos = i;\n      this.bb = bb;\n      return this;\n    }\n    static getRootAsServerToAgentEvent(bb, obj) {\n      return (obj || new _ServerToAgentEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    static getSizePrefixedRootAsServerToAgentEvent(bb, obj) {\n      bb.setPosition(bb.position() + SIZE_PREFIX_LENGTH);\n      return (obj || new _ServerToAgentEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n    }\n    eventType() {\n      const offset = this.bb.__offset(this.bb_pos, 4);\n      return offset ? this.bb.readInt16(this.bb_pos + offset) : 0 /* StartChunk */;\n    }\n    registrationExists() {\n      const offset = this.bb.__offset(this.bb_pos, 6);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    chunk(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 8);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    error(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 10);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    correlationId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 12);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    reallocating() {\n      const offset = this.bb.__offset(this.bb_pos, 14);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    chunkId() {\n      const offset = this.bb.__offset(this.bb_pos, 16);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    onDemand() {\n      const offset = this.bb.__offset(this.bb_pos, 18);\n      return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;\n    }\n    org() {\n      const offset = this.bb.__offset(this.bb_pos, 20);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    testCase() {\n      const offset = this.bb.__offset(this.bb_pos, 22);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    execution() {\n      const offset = this.bb.__offset(this.bb_pos, 24);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    executionRegion() {\n      const offset = this.bb.__offset(this.bb_pos, 26);\n      return offset ? this.bb.readInt64(this.bb_pos + offset) : BigInt(\"0\");\n    }\n    unexpectedActiveChunks(index) {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.readInt64(this.bb.__vector(this.bb_pos + offset) + index * 8) : BigInt(0);\n    }\n    unexpectedActiveChunksLength() {\n      const offset = this.bb.__offset(this.bb_pos, 28);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    update(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 30);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    assignedRegionInfo(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 32);\n      return offset ? (obj || new AssignedRegionInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    event(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 34);\n      return offset ? (obj || new TestEvent()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    key(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 36);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    region(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 38);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    s3AccessKeyId(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 40);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    s3SecretAccessKey(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 42);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    assignedRegionInfos(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 44);\n      return offset ? (obj || new AssignedRegionInfo()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    assignedRegionInfosLength() {\n      const offset = this.bb.__offset(this.bb_pos, 44);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    notification(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 46);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    uuid(optionalEncoding) {\n      const offset = this.bb.__offset(this.bb_pos, 48);\n      return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n    }\n    aiModels(index, obj) {\n      const offset = this.bb.__offset(this.bb_pos, 50);\n      return offset ? (obj || new AiModel()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n    }\n    aiModelsLength() {\n      const offset = this.bb.__offset(this.bb_pos, 50);\n      return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n    }\n    aiInfo(obj) {\n      const offset = this.bb.__offset(this.bb_pos, 52);\n      return offset ? (obj || new AiInfo()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;\n    }\n    static startServerToAgentEvent(builder) {\n      builder.startObject(25);\n    }\n    static addEventType(builder, eventType) {\n      builder.addFieldInt16(0, eventType, 0 /* StartChunk */);\n    }\n    static addRegistrationExists(builder, registrationExists) {\n      builder.addFieldInt8(1, +registrationExists, 0);\n    }\n    static addChunk(builder, chunkOffset) {\n      builder.addFieldOffset(2, chunkOffset, 0);\n    }\n    static addError(builder, errorOffset) {\n      builder.addFieldOffset(3, errorOffset, 0);\n    }\n    static addCorrelationId(builder, correlationIdOffset) {\n      builder.addFieldOffset(4, correlationIdOffset, 0);\n    }\n    static addReallocating(builder, reallocating) {\n      builder.addFieldInt8(5, +reallocating, 0);\n    }\n    static addChunkId(builder, chunkId) {\n      builder.addFieldInt64(6, chunkId, BigInt(\"0\"));\n    }\n    static addOnDemand(builder, onDemand) {\n      builder.addFieldInt8(7, +onDemand, 0);\n    }\n    static addOrg(builder, org) {\n      builder.addFieldInt64(8, org, BigInt(\"0\"));\n    }\n    static addTestCase(builder, testCase) {\n      builder.addFieldInt64(9, testCase, BigInt(\"0\"));\n    }\n    static addExecution(builder, execution) {\n      builder.addFieldInt64(10, execution, BigInt(\"0\"));\n    }\n    static addExecutionRegion(builder, executionRegion) {\n      builder.addFieldInt64(11, executionRegion, BigInt(\"0\"));\n    }\n    static addUnexpectedActiveChunks(builder, unexpectedActiveChunksOffset) {\n      builder.addFieldOffset(12, unexpectedActiveChunksOffset, 0);\n    }\n    static createUnexpectedActiveChunksVector(builder, data) {\n      builder.startVector(8, data.length, 8);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addInt64(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startUnexpectedActiveChunksVector(builder, numElems) {\n      builder.startVector(8, numElems, 8);\n    }\n    static addUpdate(builder, updateOffset) {\n      builder.addFieldOffset(13, updateOffset, 0);\n    }\n    static addAssignedRegionInfo(builder, assignedRegionInfoOffset) {\n      builder.addFieldOffset(14, assignedRegionInfoOffset, 0);\n    }\n    static addEvent(builder, eventOffset) {\n      builder.addFieldOffset(15, eventOffset, 0);\n    }\n    static addKey(builder, keyOffset) {\n      builder.addFieldOffset(16, keyOffset, 0);\n    }\n    static addRegion(builder, regionOffset) {\n      builder.addFieldOffset(17, regionOffset, 0);\n    }\n    static addS3AccessKeyId(builder, s3AccessKeyIdOffset) {\n      builder.addFieldOffset(18, s3AccessKeyIdOffset, 0);\n    }\n    static addS3SecretAccessKey(builder, s3SecretAccessKeyOffset) {\n      builder.addFieldOffset(19, s3SecretAccessKeyOffset, 0);\n    }\n    static addAssignedRegionInfos(builder, assignedRegionInfosOffset) {\n      builder.addFieldOffset(20, assignedRegionInfosOffset, 0);\n    }\n    static createAssignedRegionInfosVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAssignedRegionInfosVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addNotification(builder, notificationOffset) {\n      builder.addFieldOffset(21, notificationOffset, 0);\n    }\n    static addUuid(builder, uuidOffset) {\n      builder.addFieldOffset(22, uuidOffset, 0);\n    }\n    static addAiModels(builder, aiModelsOffset) {\n      builder.addFieldOffset(23, aiModelsOffset, 0);\n    }\n    static createAiModelsVector(builder, data) {\n      builder.startVector(4, data.length, 4);\n      for (let i = data.length - 1; i >= 0; i--) {\n        builder.addOffset(data[i]);\n      }\n      return builder.endVector();\n    }\n    static startAiModelsVector(builder, numElems) {\n      builder.startVector(4, numElems, 4);\n    }\n    static addAiInfo(builder, aiInfoOffset) {\n      builder.addFieldOffset(24, aiInfoOffset, 0);\n    }\n    static endServerToAgentEvent(builder) {\n      const offset = builder.endObject();\n      return offset;\n    }\n  };\n  return __toCommonJS(agent_exports);\n})();\n","/**\n * When sorting a DataTable you might find that you want to keep a specific\n * item at the top or bottom of the table. For example when sorting a column\n * of numbers, if a value is `null` or `N/A` you might want to keep it at the\n * bottom of the table, regardless of if ascending or descending sorting is\n * applied. This plug-in provides that ability.\n *\n * You must call the `$.fn.dataTable.absoluteOrder` with information about the\n * value(s) you wish to make absolute in the sorting order and store the\n * returned value, assigning it to the `columns.type` option for the column\n * you wish this sorting to be applied to.\n *\n * For number based columns a `$.fn.dataTable.absoluteOrderNumber` function is\n * also available.\n *\n * @name Absolute sorting\n * @summary Keep one or more items at the top and/or bottom of a table when sorting\n * @author [Allan Jardine](//datatables.net)\n * @depends DataTables 1.10+\n *\n * @example\n *    var namesType = $.fn.dataTable.absoluteOrder( [\n *      { value: '', position: 'top' }\n *    ] );\n *\n *    var numbersType = $.fn.dataTable.absoluteOrderNumber( [\n *      { value: 'N/A', position: 'bottom' }\n *    ] );\n *\n *    $('#example').DataTable( {\n *      columnDefs: [\n *        { type: namesType, targets: 0 },\n *        { type: numbersType, targets: 1 }\n *      ]\n *    } );\n */\n\n(function( factory ){\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( ['jquery', 'datatables.net'], function ( $ ) {\n      return factory( $, window, document );\n    } );\n  }\n  else if ( typeof exports === 'object' ) {\n    // CommonJS\n    module.exports = function (root, $) {\n      if ( ! root ) {\n        root = window;\n      }\n\n      if ( ! $ || ! $.fn.dataTable ) {\n        $ = require('datatables.net')(root, $).$;\n      }\n\n      return factory( $, root, root.document );\n    };\n  }\n  else {\n    // Browser\n    factory( jQuery, window, document );\n  }\n}(function( $, window, document, undefined ) {\n  'use strict';\n\n  // Unique value allowing multiple absolute ordering use cases on a single page.\n  var _unique = 0;\n\n  // Function to encapsulate code that is common to both the string and number\n  // ordering plug-ins.\n  var _setup = function ( values ) {\n    if ( ! Array.isArray( values ) ) {\n      values = [ values ];\n    }\n\n    var o = {\n      name: 'absoluteOrder'+(_unique++),\n      alwaysTop: {},\n      alwaysBottom: {}\n    };\n\n    // In order to provide performance, the symbols that are to be looked for\n    // are stored as parameter keys in an object, allowing O(1) lookup, rather\n    // than O(n) if it were in an array.\n    for ( var i=0, ien=values.length ; i<ien ; i++ ) {\n      var conf = values[i];\n\n      if ( typeof conf === 'string' ) {\n        o.alwaysTop[ conf ] = true;\n      }\n      else if ( conf.position === undefined || conf.position === 'top' ) {\n        o.alwaysTop[ conf.value ] = true;\n      }\n      else {\n        o.alwaysBottom[ conf.value ] = true;\n      }\n    }\n\n    // Ascending ordering method\n    o.asc = function ( a, b, isNumber ) {\n      if ( o.alwaysTop[ a ] && o.alwaysTop[ b ] ) {\n        return 0;\n      }\n      else if ( o.alwaysBottom[ a ] && o.alwaysBottom[ b ] ) {\n        return 0;\n      }\n      else if ( o.alwaysTop[ a ] || o.alwaysBottom[ b ] ) {\n        return -1;\n      }\n      else if ( o.alwaysBottom[ a ] || o.alwaysTop[ b ] ) {\n        return 1;\n      }\n\n      if ( isNumber ) {\n        // Cast as a number if required\n        if ( typeof a === 'string' ) {\n          a = a.replace(/[^\\d\\-\\.]/g, '') * 1;\n        }\n        if ( typeof b === 'string' ) {\n          b = b.replace(/[^\\d\\-\\.]/g, '') * 1;\n        }\n      }\n\n      return ((a < b) ? -1 : ((a > b) ? 1 : 0));\n    };\n\n    // Descending ordering method\n    o.desc = function ( a, b, isNumber ) {\n      if ( o.alwaysTop[ a ] && o.alwaysTop[ b ] ) {\n        return 0;\n      }\n      else if ( o.alwaysBottom[ a ] && o.alwaysBottom[ b ] ) {\n        return 0;\n      }\n      else if ( o.alwaysTop[ a ] || o.alwaysBottom[ b ] ) {\n        return -1;\n      }\n      else if ( o.alwaysBottom[ a ] || o.alwaysTop[ b ] ) {\n        return 1;\n      }\n\n      if ( isNumber ) {\n        if ( typeof a === 'string' ) {\n          a = a.replace(/[^\\d\\-\\.]/g, '') * 1;\n        }\n        if ( typeof b === 'string' ) {\n          b = b.replace(/[^\\d\\-\\.]/g, '') * 1;\n        }\n      }\n\n      return ((a < b) ? 1 : ((a > b) ? -1 : 0));\n    };\n\n    return o;\n  };\n\n  // String based ordering\n  $.fn.dataTable.absoluteOrder = function ( values ) {\n    var conf = _setup( values );\n\n    $.fn.dataTable.ext.type.order[ conf.name+'-asc' ] = conf.asc;\n    $.fn.dataTable.ext.type.order[ conf.name+'-desc' ] = conf.desc;\n\n    // Return the name of the sorting plug-in that was created so it can be used\n    // with the `columns.type` parameter. There is no auto-detection here.\n    return conf.name;\n  };\n\n  // Number based ordering - strips out everything but the number information\n  $.fn.dataTable.absoluteOrderNumber = function ( values ) {\n    var conf = _setup( values );\n\n    $.fn.dataTable.ext.type.order[ conf.name+'-asc' ] = function ( a, b ) {\n      return conf.asc( a, b, true );\n    };\n    $.fn.dataTable.ext.type.order[ conf.name+'-desc' ] = function ( a, b ) {\n      return conf.desc( a, b, true );\n    };\n\n    return conf.name;\n  };\n\n\n}));\n","/**\n * @summary     ColResize\n * @description Provide the ability to resize columns in a DataTable\n * @version     1.6.1\n * @file        jquery.dataTables.colResize.js\n * @author      Daniel Hobi, Lado Tadic, Daniel Petras\n * Language:    Javascript\n * License:     MIT\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD\n    define(['jquery', 'datatables.net'], function ($) {\n      return factory($, window, document);\n    });\n  }\n  else if (typeof exports === 'object') {\n    // CommonJS\n    module.exports = function (root, $) {\n      if (!root) {\n        root = window;\n      }\n\n      if (!$ || !$.fn.dataTable) {\n        $ = require('datatables.net')(root, $).$;\n      }\n\n      return factory($, root, root.document);\n    };\n  }\n  else {\n    // Browser\n    factory(jQuery, window, document);\n  }\n}(function ($, window, document) {\n  'use strict';\n  function settingsFallback(userSetting, fallBackSetting) {\n    var resultObject = {};\n    for(var prop in fallBackSetting) {\n      if(!fallBackSetting.hasOwnProperty(prop)) {\n        continue;\n      }\n      if(userSetting.hasOwnProperty(prop)) {\n        var userObject = userSetting[prop];\n        if(typeof userObject === 'object') {\n          resultObject[prop] = settingsFallback(userObject, fallBackSetting[prop]);\n        } else {\n          resultObject[prop] = userObject;\n        }\n      } else {\n        resultObject[prop] = fallBackSetting[prop];\n      }\n    }\n    return resultObject;\n  }\n\n  var DataTable = $.fn.dataTable;\n\n  /**\n   * ColResize provides column resizable control for DataTables\n   * @class ColResize\n   * @constructor\n   * @param {object} dt DataTables settings object\n   * @param {object} opts ColResize options\n   */\n  var ColResize = function(dt, opts) {\n    opts = settingsFallback(opts || {}, ColResize.defaults);\n\n    var settings = new $.fn.dataTable.Api(dt).settings()[0];\n    dt = settings;\n\n    // Ensure that we can't initialise on the same table twice\n    if (settings._colResize) {\n      return settings._colResize;\n    }\n\n    // Convert from camelCase to Hungarian, just as DataTables does\n    var camelToHungarian = $.fn.dataTable.camelToHungarian;\n    if (camelToHungarian) {\n      camelToHungarian(ColResize.defaults, ColResize.defaults, true);\n      camelToHungarian(ColResize.defaults, opts || {});\n    }\n    this.s = {\n      dt: dt,\n      state: {\n        isDragging: false,\n        startX: 0,\n        originalTableWidth: 0,\n        originalWidth: 0,\n        minWidth: 0,\n        maxWidth: 0,\n        $element: null,\n        column: null,\n        minBoundAllowClass: true,\n        maxBoundAllowClass: true,\n        isLastColumnDragging: false,\n        maxTableWidth: 0,\n      },\n      opts: opts\n    };\n    this.s.dt._colResize = this;\n    if(this.s.opts.isEnabled) {\n      this._fnConstruct();\n    }\n\n    return this;\n  };\n\n  $.extend(ColResize.prototype, {\n    fnEnable: function() {\n      if(this.isEnabled) {\n        this.s.dt.oInstance.oApi._fnLog(this.dt, 1, \"ColResize: attempted to enable again. Ignoring.\");\n        return;\n      }\n      this._fnConstruct();\n    },\n    fnReset: function() {\n      this._fnGetAllColumns().forEach(function(column) {\n        column.width = column._sResizableWidth;\n        column.sWidth = column._sResizableWidth;\n      });\n      this.s.opts.onResizeEnd(null, this._fnGetAllColumns().map(this._fnMapColumn));\n    },\n    fnDisable: function() {\n      if(!this.isEnabled) {\n        this.s.dt.oInstance.oApi._fnLog(this.dt, 1, \"ColResize: attempted to disable again. Ignoring.\");\n        return;\n      }\n\n      $(document).off('.ColResize');\n      this._fnGetAllColumns().forEach(function(column) {\n        var $columnNode = $(column.nTh);\n        $columnNode.off('.ColResize');\n        $columnNode.removeAttr('data-is-resizable');\n      });\n      this.isEnabled = false;\n    },\n    /**\n     * Constructor logic\n     *  @method  _fnConstruct\n     *  @returns void\n     *  @private\n     */\n    _fnConstruct: function () {\n      var that = this;\n\n      // register document events\n      $(document).on('mousemove.ColResize touchmove.ColResize', function(e) {\n        if(that.s.state.isDragging) {\n          var changedWidth = that._fnGetXCoords(e) - that.s.state.startX;\n          that._fnApplyWidth(changedWidth);\n\n          that.s.opts.onResize(that._fnMapColumn(that.s.state.column));\n\n          //scroll if the last element gets resized\n          if(that.s.state.isLastColumnDragging) {\n            var $scrollBody = that._fnGetBodyScroll();\n            if($scrollBody.length > 0) {\n              $scrollBody[0].scrollLeft = $scrollBody[0].scrollWidth;\n            }\n          }\n\n          // do not outgrow table if not scrollable\n          if(that.s.state.maxTableWidth > 0) {\n            var currentTableWidth = that.s.state.$element.closest('table').width();\n            if(currentTableWidth > that.s.state.maxTableWidth) {\n              that._fnApplyWidth(changedWidth + (that.s.state.maxTableWidth - currentTableWidth));\n              that._fnShowMaxBoundReached();\n            }\n          }\n        }\n      });\n      $(document).on('mouseup.ColResize touchend.ColResize', function() {\n        if(that.s.state.isDragging) {\n          // workaround to prevent sorting on column click\n          setTimeout(function() {\n            //disable sorting\n            that._fnGetAllColumns().forEach(function(column) {\n              column.bSortable = column._bSortableTempHolder;\n            });\n          }, 100);\n          // callback\n          var mappedColumns = that._fnGetAllColumns().map(that._fnMapColumn);\n          that.s.opts.onResizeEnd(that._fnMapColumn(that.s.state.column), mappedColumns);\n        }\n        that._fnGetAllColumns().forEach(function(column) {\n          $(column.nTh).removeClass(that.s.opts.hoverClass);\n        });\n        that.s.state.isDragging = false;\n      });\n\n      //register column events\n\n      this._fnGetAllColumns().forEach(function(column) {\n        var $columnNode = $(column.nTh);\n        var isResizable = that._fnIsColumnResizable(column);\n        $columnNode.attr('data-is-resizable', isResizable.toString());\n        if(isResizable) {\n\n          //save the original value (server) somewhere\n          column._sResizableWidth = column.sWidth;\n\n          $columnNode.on('mousemove.ColResize touchmove.ColResize', function(e) {\n            var $node = $(e.currentTarget);\n            if(that._fnIsInDragArea($node, e)) {\n              $node.addClass(that.s.opts.hoverClass);\n            } else {\n              if(!that.s.state.isDragging) {\n                $node.removeClass(that.s.opts.hoverClass);\n              }\n            }\n          });\n          $columnNode.on('mouseout.ColResize', function(e) {\n            if(!that.s.state.isDragging) {\n              var $node = $(e.currentTarget);\n              $node.removeClass(that.s.opts.hoverClass);\n            }\n          });\n          $columnNode.on('mousedown.ColResize touchstart.ColResize', function(e) {\n            var $node = $(e.currentTarget);\n            if(that._fnIsInDragArea($node, e)) {\n\n              //disable sorting\n              that._fnGetAllColumns().forEach(function(column) {\n                column._bSortableTempHolder = column.bSortable;\n                column.bSortable = false;\n                that._fnRemovePercentWidths(column, $(column.nTh));\n              });\n\n              that.s.state.isDragging = true;\n              that.s.state.startX = that._fnGetXCoords(e);\n              that.s.state.maxTableWidth = that._fnGetBodyScroll().length > 0 ? 0 : $node.closest('table').width();\n              that.s.state.originalTableWidth = $node.closest('table').width();\n              that.s.state.originalWidth = that._fnGetCurrentWidth($node);\n              that.s.state.minWidth = that._fnGetMinWidthOf($node);\n              that.s.state.maxWidth = that._fnGetMaxWidthOf($node);\n              that.s.state.minBoundAllowClass = true;\n              that.s.state.maxBoundAllowClass = true;\n              that.s.state.$element = $node;\n              that.s.state.column = column;\n              that.s.state.isLastColumnDragging = that._fnIsLastResizableColumnDragging(column);\n\n              that.s.opts.onResizeStart(null, that._fnGetAllColumns().map(that._fnMapColumn));\n            }\n          });\n        }\n      });\n\n      this.isEnabled = true;\n    },\n    _fnGetAllColumns: function() {\n      return this.s.dt.aoColumns;\n    },\n    _fnGetBodyScroll: function() {\n      return $(this.s.dt.nScrollBody);\n    },\n    _fnRemovePercentWidths: function(column, $node) {\n      if($node.attr('style') && $node.attr('style').indexOf('%') !== -1) {\n        this.s.dt.oInstance.oApi._fnLog(this.dt, 1, \"ColResize: column styles in percentages is not supported, trying to convert to px on the fly.\");\n        var width = $node.width();\n        $node.removeAttr('style');\n        column.sWidth = width+'px';\n        column.width = width+'px';\n        $node.width(width);\n      } else {\n        $node.width($node.width());\n      }\n    },\n    _fnIsInDragArea: function($th, e) {\n      var rightSide = $th.offset().left + $th.outerWidth();\n      var xCoord = this._fnGetXCoords(e);\n      return (rightSide + 10) > xCoord && (rightSide - 10) < xCoord;\n    },\n    _fnGetXCoords: function(e) {\n      return e.type.indexOf('touch') !== -1 ? e.originalEvent.touches[0].pageX : e.pageX;\n    },\n    _fnApplyWidth: function(changedWidth) {\n      var that = this;\n      //keep inside bounds by manipulating changedWidth if any\n      changedWidth = this.s.opts.hasBoundCheck ? this._fnBoundCheck(changedWidth) : changedWidth;\n\n      //apply widths\n      var thWidth = this.s.state.originalWidth + changedWidth;\n      this._fnApplyWidthColumn(this.s.state.column, thWidth);\n\n      //change table size\n      var $table = this.s.state.$element.closest('table');\n      var shouldChangeTableWidth = this.s.state.$element.closest('.dataTables_scroll').length > 0 &&\n        ($table.width() + changedWidth) > this.s.state.$element.closest('.dataTables_scroll').width();\n      if(shouldChangeTableWidth) {\n        $table.width(that.s.state.originalTableWidth + changedWidth);\n      }\n\n      // possible body table\n      var scrollBodyTh = this.s.state.$element.closest('.dataTables_scroll').find('.dataTables_scrollBody table th:nth-child('+(this.s.state.$element.index() + 1)+')');\n      scrollBodyTh.outerWidth((thWidth)+'px');\n      var $bodyTable = scrollBodyTh.closest('table');\n      $bodyTable.width($table.width());\n\n      // possible footer table\n      var scrollFooterTh = this.s.state.$element.closest('.dataTables_scroll').find('.dataTables_scrollFoot table th:nth-child('+(this.s.state.$element.index() + 1)+')');\n      scrollFooterTh.outerWidth((thWidth)+'px');\n      var $footerTable = scrollFooterTh.closest('table');\n      $footerTable.width($table.width());\n\n      // HTML table can force columns to be wider than max-width and smaller than min-width. Overwrite style properties to look the same as the header\n      if(this.s.state.$element.closest('.dataTables_scroll').length > 0) {\n        var additionalStylesForHiddenThRows = ';padding-top: 0px;padding-bottom: 0px;border-top-width: 0px;border-bottom-width: 0px;height: 0px;';\n        this._fnGetAllColumns().forEach(function(column) {\n          var $hbTh = $(column.nTh);\n          var currentIndex = $hbTh.index();\n          var currentStyles = $hbTh.attr('style') + additionalStylesForHiddenThRows;\n\n          //body table\n          var $sbTh = that.s.state.$element.closest('.dataTables_scroll').find('.dataTables_scrollBody table th:nth-child('+(currentIndex + 1)+')');\n          $sbTh.attr('style', currentStyles);\n          //footer table\n          var $sfTh = that.s.state.$element.closest('.dataTables_scroll').find('.dataTables_scrollFoot table th:nth-child('+(currentIndex + 1)+')');\n          $sfTh.attr('style', currentStyles);\n        });\n      }\n    },\n    _fnApplyWidthColumn: function(column, width) {\n      $(column.nTh).outerWidth(width+'px');\n      column.sWidth = width+'px';\n    },\n    _fnGetCurrentWidth: function($node) {\n      var possibleWidths = $node.attr('style').split(';').map(function(cssPart) { return cssPart.trim(); })\n        .filter(function(cssPart) { return cssPart !== ''; })\n        .map(function(cssPart) {\n          var widthResult = cssPart.match(/^width: (\\d+)px/i);\n          return widthResult != null ? parseInt(widthResult[1]) : 0;\n        })\n        .filter(function(possibleWidth) { return !isNaN(possibleWidth) && possibleWidth > 0; });\n\n      if(possibleWidths.length > 0) {\n        return possibleWidths[0];\n      }\n      return $node.width();\n    },\n    _fnGetMinWidthOf: function ($node) {\n      if(this.s.opts.getMinWidthOf != null) {\n        return this.s.opts.getMinWidthOf($node);\n      }\n      var minWidthFromCss = this._fnGetWidthOfValue($node.css('min-width'));\n      if(!isNaN(minWidthFromCss) && minWidthFromCss > 0) {\n        return minWidthFromCss;\n      }\n\n      //try to guess\n      var $hiddenElement = $node.clone().css({\n        left: -10000,\n        top: -10000,\n        position: 'absolute',\n        display: 'inline',\n        visibility: 'visible',\n        width: 'auto',\n        fontFamily: $node.css('font-family'),\n        fontSize: $node.css('font-size'),\n        padding: $node.css('padding')\n      }).appendTo('body');\n      var minWidth = parseInt($hiddenElement.width());\n      $hiddenElement.remove();\n      if(!$node.hasClass('sorting_disabled')) {\n        minWidth += 20; //sortable column needs a bit more space for the icon\n      }\n      return minWidth < 30 ? 30 : minWidth;\n    },\n    _fnGetMaxWidthOf: function($node) {\n      return this._fnGetWidthOfValue($node.css('max-width'));\n    },\n    _fnGetWidthOfValue: function(widthStr) {\n      if(widthStr === 'none') {\n        return -1;\n      }\n      return parseInt(widthStr.match(/(\\d+)px/ig));\n    },\n    _fnBoundCheck: function(changedWidth) {\n      var thWishWidth = this.s.state.originalWidth + changedWidth;\n\n      //min bound\n      if(this.s.state.minWidth !== -1 && thWishWidth < this.s.state.minWidth) {\n        var addBackToMinWidth = this.s.state.minWidth - thWishWidth;\n        changedWidth += addBackToMinWidth;\n        this._fnShowMinBoundReached();\n      } else {\n        this.s.state.minBoundAllowClass = true;\n      }\n\n      //max bound\n      if(this.s.state.maxWidth !== -1 && thWishWidth > this.s.state.maxWidth) {\n        var substractFromMaxWidth = thWishWidth - this.s.state.maxWidth;\n        changedWidth -= substractFromMaxWidth;\n        this._fnShowMaxBoundReached();\n      } else {\n        this.s.state.maxBoundAllowClass = true;\n      }\n\n      return changedWidth;\n    },\n    _fnShowMinBoundReached: function() {\n      var that = this;\n      if(this.s.state.minBoundAllowClass) {\n        this.s.state.$element.addClass(this.s.opts.minBoundClass);\n        var $currentElement = this.s.state.$element;\n        setTimeout(function() { $currentElement.removeClass(that.s.opts.minBoundClass); }, 500);\n        this.s.state.minBoundAllowClass = false;\n      }\n    },\n    _fnShowMaxBoundReached: function() {\n      var that = this;\n      if(this.s.state.maxBoundAllowClass) {\n        this.s.state.$element.addClass(this.s.opts.maxBoundClass);\n        var $currentElement = this.s.state.$element;\n        setTimeout(function() { $currentElement.removeClass(that.s.opts.maxBoundClass); }, 500);\n        this.s.state.maxBoundAllowClass = false;\n      }\n    },\n    _fnMapColumn: function(column) {\n      return { idx: column.idx, width: column.sWidth };\n    },\n    _fnIsLastResizableColumnDragging: function(draggingColumn) {\n      var visibleColumns = this._fnGetAllColumns().filter(function(column) { return $(column.nTh).is(':visible'); });\n      var indexOfColumn = visibleColumns.indexOf(draggingColumn);\n      if(indexOfColumn === visibleColumns.length - 1) {\n        return true;\n      }\n      for(var counter = indexOfColumn+1; counter < visibleColumns.length; counter++) {\n        var column = visibleColumns[counter];\n        if(this._fnIsColumnResizable(column)) {\n          return false;\n        }\n      }\n      return true;\n    },\n    _fnIsColumnResizable: function(column) {\n      return this.s.opts.isResizable(column);\n    }\n  });\n\n  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static parameters\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n  /**\n   * ColResize default settings for initialisation\n   *  @namespace\n   *  @static\n   */\n  ColResize.defaults = {\n    isEnabled: true,\n    hoverClass: 'dt-colresizable-hover',\n    hasBoundCheck: true,\n    minBoundClass: 'dt-colresizable-bound-min',\n    maxBoundClass: 'dt-colresizable-bound-max',\n    isResizable: function(column) {\n      if(typeof column.isResizable === 'undefined') {\n        return true;\n      }\n      return column.isResizable;\n    },\n    onResizeStart: function(column, columns) {},\n    onResize: function(column) {},\n    onResizeEnd: function (column, columns) { },\n    getMinWidthOf: null\n  };\n\n  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n  /**\n   * ColResize version\n   *  @constant  version\n   *  @type      String\n   *  @default   As code\n   */\n  ColResize.version = \"1.6.1\";\n\n  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n  // Expose\n  $.fn.dataTable.ColResize = ColResize;\n  $.fn.DataTable.ColResize = ColResize;\n\n\n  // Register a new feature with DataTables\n  if (typeof $.fn.dataTable == \"function\" &&\n    typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n    $.fn.dataTableExt.fnVersionCheck('1.10.8')) {\n    $.fn.dataTableExt.aoFeatures.push({\n      \"fnInit\": function (settings) {\n        var table = settings.oInstance;\n\n        if (!settings._colResize) {\n          var init = settings.oInit.colResize;\n          var opts = $.extend({}, init, DataTable.defaults.colResize);\n          new ColResize(settings, opts);\n        }\n        else {\n          table.oApi._fnLog(settings, 1, \"ColResize: attempted to initialise twice. Ignoring second\");\n        }\n\n        return null; /* No node for DataTables to insert */\n      },\n      \"sFeature\": \"ColResize\"\n    });\n  }\n  else {\n    alert(\"Warning: ColResize requires DataTables 1.10.8 or greater - www.datatables.net/download\");\n  }\n\n\n  // Attach a listener to the document which listens for DataTables initialisation\n  // events so we can automatically initialise\n  $(document).on('preInit.dt.colResize', function (e, settings) {\n    if (e.namespace !== 'dt') {\n      return;\n    }\n\n    var init = settings.oInit.colResize;\n    var defaults = DataTable.defaults.colResize;\n\n    if (init || defaults) {\n      var opts = $.extend({}, init, defaults);\n\n      if (init !== false) {\n        new ColResize(settings, opts);\n      }\n    }\n  });\n\n  // API augmentation\n  $.fn.dataTable.Api.register('colResize.enable()', function () {\n    return this.iterator('table', function (ctx) {\n      ctx._colResize.fnEnable();\n    });\n  });\n  $.fn.dataTable.Api.register('colResize.disable()', function () {\n    return this.iterator('table', function (ctx) {\n      ctx._colResize.fnDisable();\n    });\n  });\n  $.fn.dataTable.Api.register('colResize.reset()', function () {\n    return this.iterator('table', function (ctx) {\n      ctx._colResize.fnReset();\n    });\n  });\n}));\n","/*! Scroller 2.1.1\n * © SpryMedia Ltd - datatables.net/license\n */\n!function(o){var e,l;\"function\"==typeof define&&define.amd?define([\"jquery\",\"datatables.net\"],function(s){return o(s,window,document)}):\"object\"==typeof exports?(e=require(\"jquery\"),l=function(s,t){t.fn.dataTable||require(\"datatables.net\")(s,t)},\"undefined\"!=typeof window?module.exports=function(s,t){return s=s||window,t=t||e(s),l(s,t),o(t,s,s.document)}:(l(window,e),module.exports=o(e,window,window.document))):o(jQuery,window,document)}(function(f,i,o,a){\"use strict\";function l(s,t){this instanceof l?(t===a&&(t={}),s=f.fn.dataTable.Api(s),this.s={dt:s.settings()[0],dtApi:s,tableTop:0,tableBottom:0,redrawTop:0,redrawBottom:0,autoHeight:!0,viewportRows:0,stateTO:null,stateSaveThrottle:function(){},drawTO:null,heights:{jump:null,page:null,virtual:null,scroll:null,row:null,viewport:null,labelHeight:0,xbar:0},topRowFloat:0,scrollDrawDiff:null,loaderVisible:!1,forceReposition:!1,baseRowTop:0,baseScrollTop:0,mousedown:!1,lastScrollTop:0},this.s=f.extend(this.s,l.oDefaults,t),this.s.heights.row=this.s.rowHeight,this.dom={force:o.createElement(\"div\"),label:f('<div class=\"dts_label\">0</div>'),scroller:null,table:null,loader:null},this.s.dt.oScroller||(this.s.dt.oScroller=this).construct()):alert(\"Scroller warning: Scroller must be initialised with the 'new' keyword.\")}var r=f.fn.dataTable,s=(f.extend(l.prototype,{measure:function(s){this.s.autoHeight&&this._calcRowHeight();var t=this.s.heights,o=(t.row&&(t.viewport=this._parseHeight(f(this.dom.scroller).css(\"max-height\")),this.s.viewportRows=parseInt(t.viewport/t.row,10)+1,this.s.dt._iDisplayLength=this.s.viewportRows*this.s.displayBuffer),this.dom.label.outerHeight());t.xbar=this.dom.scroller.offsetHeight-this.dom.scroller.clientHeight,t.labelHeight=o,s!==a&&!s||this.s.dt.oInstance.fnDraw(!1)},pageInfo:function(){var s=this.s.dt,t=this.dom.scroller.scrollTop,s=s.fnRecordsDisplay(),o=Math.ceil(this.pixelsToRow(t+this.s.heights.viewport,!1,this.s.ani));return{start:Math.floor(this.pixelsToRow(t,!1,this.s.ani)),end:s<o?s-1:o-1}},pixelsToRow:function(s,t,o){s-=this.s.baseScrollTop,o=o?(this._domain(\"physicalToVirtual\",this.s.baseScrollTop)+s)/this.s.heights.row:s/this.s.heights.row+this.s.baseRowTop;return t||t===a?parseInt(o,10):o},rowToPixels:function(s,t,o){s-=this.s.baseRowTop,o=o?this._domain(\"virtualToPhysical\",this.s.baseScrollTop):this.s.baseScrollTop;return o+=s*this.s.heights.row,t||t===a?parseInt(o,10):o},scrollToRow:function(s,t){var o=this,e=!1,l=this.rowToPixels(s),r=s-(this.s.displayBuffer-1)/2*this.s.viewportRows;r<0&&(r=0),(t=(l>this.s.redrawBottom||l<this.s.redrawTop)&&this.s.dt._iDisplayStart!==r&&(e=!0,l=this._domain(\"virtualToPhysical\",s*this.s.heights.row),this.s.redrawTop<l)&&l<this.s.redrawBottom?!(this.s.forceReposition=!0):t)===a||t?(this.s.ani=e,f(this.dom.scroller).animate({scrollTop:l},function(){setTimeout(function(){o.s.ani=!1},250)})):f(this.dom.scroller).scrollTop(l)},construct:function(){var e,l,r=this,s=this.s.dtApi;this.s.dt.oFeatures.bPaginate?(this.dom.force.style.position=\"relative\",this.dom.force.style.top=\"0px\",this.dom.force.style.left=\"0px\",this.dom.force.style.width=\"1px\",this.dom.scroller=f(\"div.\"+this.s.dt.oClasses.sScrollBody,this.s.dt.nTableWrapper)[0],this.dom.scroller.appendChild(this.dom.force),this.dom.scroller.style.position=\"relative\",this.dom.table=f(\">table\",this.dom.scroller)[0],this.dom.table.style.position=\"absolute\",this.dom.table.style.top=\"0px\",this.dom.table.style.left=\"0px\",f(s.table().container()).addClass(\"dts DTS\"),this.s.loadingIndicator&&(this.dom.loader=f('<div class=\"dataTables_processing dts_loading\">'+this.s.dt.oLanguage.sLoadingRecords+\"</div>\").css(\"display\",\"none\"),f(this.dom.scroller.parentNode).css(\"position\",\"relative\").append(this.dom.loader)),this.dom.label.appendTo(this.dom.scroller),this.s.heights.row&&\"auto\"!=this.s.heights.row&&(this.s.autoHeight=!1),this.s.ingnoreScroll=!0,f(this.dom.scroller).on(\"scroll.dt-scroller\",function(s){r._scroll.call(r)}),f(this.dom.scroller).on(\"touchstart.dt-scroller\",function(){r._scroll.call(r)}),f(this.dom.scroller).on(\"mousedown.dt-scroller\",function(){r.s.mousedown=!0}).on(\"mouseup.dt-scroller\",function(){r.s.labelVisible=!1,r.s.mousedown=!1,r.dom.label.css(\"display\",\"none\")}),f(i).on(\"resize.dt-scroller\",function(){r.measure(!1),r._info()}),e=!0,l=s.state.loaded(),s.on(\"stateSaveParams.scroller\",function(s,t,o){e&&l?(o.scroller=l.scroller,e=!1,o.scroller&&(r.s.lastScrollTop=o.scroller.scrollTop)):o.scroller={topRow:r.s.topRowFloat,baseScrollTop:r.s.baseScrollTop,baseRowTop:r.s.baseRowTop,scrollTop:r.s.lastScrollTop}}),s.on(\"stateLoadParams.scroller\",function(s,t,o){o.scroller!==a&&r.scrollToRow(o.scroller.topRow)}),l&&l.scroller&&(this.s.topRowFloat=l.scroller.topRow,this.s.baseScrollTop=l.scroller.baseScrollTop,this.s.baseRowTop=l.scroller.baseRowTop),this.measure(!1),r.s.stateSaveThrottle=r.s.dt.oApi._fnThrottle(function(){r.s.dtApi.state.save()},500),s.on(\"init.scroller\",function(){r.measure(!1),r.s.scrollType=\"jump\",r._draw(),s.on(\"draw.scroller\",function(){r._draw()})}),s.on(\"preDraw.dt.scroller\",function(){r._scrollForce()}),s.on(\"destroy.scroller\",function(){f(i).off(\"resize.dt-scroller\"),f(r.dom.scroller).off(\".dt-scroller\"),f(r.s.dt.nTable).off(\".scroller\"),f(r.s.dt.nTableWrapper).removeClass(\"DTS\"),f(\"div.DTS_Loading\",r.dom.scroller.parentNode).remove(),r.dom.table.style.position=\"\",r.dom.table.style.top=\"\",r.dom.table.style.left=\"\"})):this.s.dt.oApi._fnLog(this.s.dt,0,\"Pagination must be enabled for Scroller\")},_calcRowHeight:function(){var s=this.s.dt,t=s.nTable,o=t.cloneNode(!1),e=f(\"<tbody/>\").appendTo(o),l=f('<div class=\"'+s.oClasses.sWrapper+' DTS\"><div class=\"'+s.oClasses.sScrollWrapper+'\"><div class=\"'+s.oClasses.sScrollBody+'\"></div></div></div>'),r=(f(\"tbody tr:lt(4)\",t).clone().appendTo(e),f(\"tr\",e).length);if(1===r)e.prepend(\"<tr><td>&#160;</td></tr>\"),e.append(\"<tr><td>&#160;</td></tr>\");else for(;r<3;r++)e.append(\"<tr><td>&#160;</td></tr>\");f(\"div.\"+s.oClasses.sScrollBody,l).append(o);s=this.s.dt.nHolding||t.parentNode;f(s).is(\":visible\")||(s=\"body\"),l.find(\"input\").removeAttr(\"name\"),l.appendTo(s),this.s.heights.row=f(\"tr\",e).eq(1).outerHeight(),l.remove()},_draw:function(){var s=this,t=this.s.heights,o=this.dom.scroller.scrollTop,e=f(this.s.dt.nTable).height(),l=this.s.dt._iDisplayStart,r=this.s.dt._iDisplayLength,i=this.s.dt.fnRecordsDisplay(),a=o+t.viewport,n=(this.s.skip=!0,!this.s.dt.bSorted&&!this.s.dt.bFiltered||0!==l||this.s.dt._drawHold||(this.s.topRowFloat=0),o=\"jump\"===this.s.scrollType?this._domain(\"virtualToPhysical\",this.s.topRowFloat*t.row):o,this.s.baseScrollTop=o,this.s.baseRowTop=this.s.topRowFloat,o-(this.s.topRowFloat-l)*t.row),l=(0===l?n=0:i<=l+r?n=t.scroll-e:n+e<a&&(this.s.baseScrollTop+=1+((i=a-e)-n),n=i),this.dom.table.style.top=n+\"px\",this.s.tableTop=n,this.s.tableBottom=e+this.s.tableTop,(o-this.s.tableTop)*this.s.boundaryScale);this.s.redrawTop=o-l,this.s.redrawBottom=o+l>t.scroll-t.viewport-t.row?t.scroll-t.viewport-t.row:o+l,this.s.skip=!1,s.s.ingnoreScroll&&(this.s.dt.oFeatures.bStateSave&&null!==this.s.dt.oLoadedState&&void 0!==this.s.dt.oLoadedState.scroller?((r=!(!this.s.dt.sAjaxSource&&!s.s.dt.ajax||this.s.dt.oFeatures.bServerSide))&&2<=this.s.dt.iDraw||!r&&1<=this.s.dt.iDraw)&&setTimeout(function(){f(s.dom.scroller).scrollTop(s.s.dt.oLoadedState.scroller.scrollTop),setTimeout(function(){s.s.ingnoreScroll=!1},0)},0):s.s.ingnoreScroll=!1),this.s.dt.oFeatures.bInfo&&setTimeout(function(){s._info.call(s)},0),f(this.s.dt.nTable).triggerHandler(\"position.dts.dt\",n),this.dom.loader&&this.s.loaderVisible&&(this.dom.loader.css(\"display\",\"none\"),this.s.loaderVisible=!1)},_domain:function(s,t){var o,e=this.s.heights,l=1e4;return e.virtual===e.scroll||t<l?t:\"virtualToPhysical\"===s&&t>=e.virtual-l?(o=e.virtual-t,e.scroll-o):\"physicalToVirtual\"===s&&t>=e.scroll-l?(o=e.scroll-t,e.virtual-o):(e=l-(o=(e.virtual-l-l)/(e.scroll-l-l))*l,\"virtualToPhysical\"===s?(t-e)/o:o*t+e)},_info:function(){if(this.s.dt.oFeatures.bInfo){var s=this.s.dt,t=s.oLanguage,o=this.dom.scroller.scrollTop,e=Math.floor(this.pixelsToRow(o,!1,this.s.ani)+1),l=s.fnRecordsTotal(),r=s.fnRecordsDisplay(),o=Math.ceil(this.pixelsToRow(o+this.s.heights.viewport,!1,this.s.ani)),o=r<o?r:o,i=s.fnFormatNumber(e),a=s.fnFormatNumber(o),n=s.fnFormatNumber(l),h=s.fnFormatNumber(r),c=0===s.fnRecordsDisplay()&&s.fnRecordsDisplay()==s.fnRecordsTotal()?t.sInfoEmpty+t.sInfoPostFix:0===s.fnRecordsDisplay()?t.sInfoEmpty+\" \"+t.sInfoFiltered.replace(\"_MAX_\",n)+t.sInfoPostFix:s.fnRecordsDisplay()==s.fnRecordsTotal()?t.sInfo.replace(\"_START_\",i).replace(\"_END_\",a).replace(\"_MAX_\",n).replace(\"_TOTAL_\",h)+t.sInfoPostFix:t.sInfo.replace(\"_START_\",i).replace(\"_END_\",a).replace(\"_MAX_\",n).replace(\"_TOTAL_\",h)+\" \"+t.sInfoFiltered.replace(\"_MAX_\",s.fnFormatNumber(s.fnRecordsTotal()))+t.sInfoPostFix,i=t.fnInfoCallback,d=(i&&(c=i.call(s.oInstance,s,e,o,l,r,c)),s.aanFeatures.i);if(void 0!==d)for(var p=0,u=d.length;p<u;p++)f(d[p]).html(c);f(s.nTable).triggerHandler(\"info.dt\")}},_parseHeight:function(s){var t,o,s=/^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(s);return null!==s&&(o=parseFloat(s[1]),\"px\"===(s=s[2])?t=o:\"vh\"===s?t=o/100*f(i).height():\"rem\"===s?t=o*parseFloat(f(\":root\").css(\"font-size\")):\"em\"===s&&(t=o*parseFloat(f(\"body\").css(\"font-size\"))),t)||0},_scroll:function(){var s,t=this,o=this.s.heights,e=this.dom.scroller.scrollTop;this.s.skip||this.s.ingnoreScroll||e!==this.s.lastScrollTop&&(this.s.dt.bFiltered||this.s.dt.bSorted?this.s.lastScrollTop=0:(this._info(),clearTimeout(this.s.stateTO),this.s.stateTO=setTimeout(function(){t.s.dtApi.state.save()},250),this.s.scrollType=Math.abs(e-this.s.lastScrollTop)>o.viewport?\"jump\":\"cont\",this.s.topRowFloat=\"cont\"===this.s.scrollType?this.pixelsToRow(e,!1,!1):this._domain(\"physicalToVirtual\",e)/o.row,this.s.topRowFloat<0&&(this.s.topRowFloat=0),this.s.forceReposition||e<this.s.redrawTop||e>this.s.redrawBottom?(s=Math.ceil((this.s.displayBuffer-1)/2*this.s.viewportRows),s=parseInt(this.s.topRowFloat,10)-s,this.s.forceReposition=!1,s<=0?s=0:s+this.s.dt._iDisplayLength>this.s.dt.fnRecordsDisplay()?(s=this.s.dt.fnRecordsDisplay()-this.s.dt._iDisplayLength)<0&&(s=0):s%2!=0&&s++,(this.s.targetTop=s)!=this.s.dt._iDisplayStart&&(this.s.tableTop=f(this.s.dt.nTable).offset().top,this.s.tableBottom=f(this.s.dt.nTable).height()+this.s.tableTop,s=function(){t.s.dt._iDisplayStart=t.s.targetTop,t.s.dt.oApi._fnDraw(t.s.dt)},this.s.dt.oFeatures.bServerSide?(this.s.forceReposition=!0,clearTimeout(this.s.drawTO),this.s.drawTO=setTimeout(s,this.s.serverWait)):s(),this.dom.loader)&&!this.s.loaderVisible&&(this.dom.loader.css(\"display\",\"block\"),this.s.loaderVisible=!0)):this.s.topRowFloat=this.pixelsToRow(e,!1,!0),this.s.lastScrollTop=e,this.s.stateSaveThrottle(),\"jump\"===this.s.scrollType&&this.s.mousedown&&(this.s.labelVisible=!0),this.s.labelVisible&&(s=(o.viewport-o.labelHeight-o.xbar)/o.scroll,this.dom.label.html(this.s.dt.fnFormatNumber(parseInt(this.s.topRowFloat,10)+1)).css(\"top\",e+e*s).css(\"right\",10-this.dom.scroller.scrollLeft).css(\"display\",\"block\"))))},_scrollForce:function(){var s=this.s.heights;s.virtual=s.row*this.s.dt.fnRecordsDisplay(),s.scroll=s.virtual,1e6<s.scroll&&(s.scroll=1e6),this.dom.force.style.height=s.scroll>this.s.heights.row?s.scroll+\"px\":this.s.heights.row+\"px\"}}),l.oDefaults=l.defaults={boundaryScale:.5,displayBuffer:9,loadingIndicator:!1,rowHeight:\"auto\",serverWait:200},l.version=\"2.1.1\",f(o).on(\"preInit.dt.dtscroller\",function(s,t){var o,e;\"dt\"===s.namespace&&(s=t.oInit.scroller,o=r.defaults.scroller,s||o)&&(e=f.extend({},s,o),!1!==s)&&new l(t,e)}),f.fn.dataTable.Scroller=l,f.fn.DataTable.Scroller=l,f.fn.dataTable.Api);return s.register(\"scroller()\",function(){return this}),s.register(\"scroller().rowToPixels()\",function(s,t,o){var e=this.context;if(e.length&&e[0].oScroller)return e[0].oScroller.rowToPixels(s,t,o)}),s.register(\"scroller().pixelsToRow()\",function(s,t,o){var e=this.context;if(e.length&&e[0].oScroller)return e[0].oScroller.pixelsToRow(s,t,o)}),s.register([\"scroller().scrollToRow()\",\"scroller.toPosition()\"],function(t,o){return this.iterator(\"table\",function(s){s.oScroller&&s.oScroller.scrollToRow(t,o)}),this}),s.register(\"row().scrollTo()\",function(o){var e=this;return this.iterator(\"row\",function(s,t){s.oScroller&&(t=e.rows({order:\"applied\",search:\"applied\"}).indexes().indexOf(t),s.oScroller.scrollToRow(t,o))}),this}),s.register(\"scroller.measure()\",function(t){return this.iterator(\"table\",function(s){s.oScroller&&s.oScroller.measure(t)}),this}),s.register(\"scroller.page()\",function(){var s=this.context;if(s.length&&s[0].oScroller)return s[0].oScroller.pageInfo()}),r});","define(\"@ember/render-modifiers/modifiers/did-insert\", [\"exports\", \"@ember/modifier\"], function (_exports, _modifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n    The `{{did-insert}}` element modifier is activated when an element is\n    inserted into the DOM.\n  \n    In this example, the `fadeIn` function receives the `div` DOM element as its\n    first argument and is executed after the element is inserted into the DOM.\n  \n    ```handlebars\n    <div {{did-insert this.fadeIn}} class=\"alert\">\n      {{yield}}\n    </div>\n    ```\n  \n    ```js\n    export default Component.extend({\n      fadeIn(element) {\n        element.classList.add('fade-in');\n      }\n    });\n    ```\n  \n    By default, the executed function will be unbound. If you would like to access\n    the component context in your function, use the `action` decorator as follows:\n  \n    ```handlebars\n    <div {{did-insert this.incrementCount}}>first</div>\n    <div {{did-insert this.incrementCount}}>second</div>\n  \n    <p>{{this.count}} elements were rendered</p>\n    ```\n  \n    ```js\n    export default Component.extend({\n      count: tracked({ value: 0 }),\n  \n      incrementCount: action(function() {\n        this.count++;\n      })\n    });\n    ```\n  \n    @method did-insert\n    @public\n  */\n  var _default = _exports.default = (0, _modifier.setModifierManager)(() => ({\n    capabilities: (0, _modifier.capabilities)('3.22', {\n      disableAutoTracking: true\n    }),\n    createModifier() {},\n    installModifier(_state, element, {\n      positional: [fn, ...args],\n      named\n    }) {\n      fn(element, args, named);\n    },\n    updateModifier() {},\n    destroyModifier() {}\n  }), class DidInsertModifier {});\n});","define(\"@ember/render-modifiers/modifiers/did-update\", [\"exports\", \"@ember/modifier\", \"@embroider/macros/es-compat2\"], function (_exports, _modifier, _esCompat) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const untrack = function () {\n    {\n      // ember-source@3.27 shipped \"real modules\" by default, so we can just use\n      // importSync to get @glimmer/validator directly\n      return (0, _esCompat.default)(require(\"@glimmer/validator\")).untrack;\n    }\n  }();\n\n  /**\n    The `{{did-update}}` element modifier is activated when any of its arguments\n    are updated. It does not run on initial render.\n  \n    In this example, the `resize` function receives the `textarea` DOM element as its\n    first argument and is executed anytime the `@text` argument changes.\n  \n    ```handlebars\n    <textarea {{did-update this.resize @text}} readonly style=\"padding: 0px;\">\n      {{@text}}\n    </textarea>\n    ```\n  \n    ```js\n    export default Component.extend({\n      resize(element) {\n        element.style.height = `${element.scrollHeight}px`;\n      }\n    });\n    ```\n  \n    In addition to the `element`, both named and positional arguments are passed to the\n    executed function:\n  \n    ```handlebars\n    <div {{did-update this.logArguments @first @second third=@third}} />\n    ```\n  \n    ```js\n    export default Component.extend({\n      logArguments(element, [first, second], { third }) {\n        console.log('element', element);\n        console.log('positional args', first, second);\n        console.log('names args', third);\n      }\n    });\n    ```\n  \n    By default, the executed function will be unbound. If you would like to access\n    the component context in your function, use the `action` decorator as follows:\n  \n    ```handlebars\n    <div {{did-update this.someFunction @someArg} />\n    ```\n  \n    ```js\n    export default Component.extend({\n      someFunction: action(function(element, [someArg]) {\n        // the `this` context will be the component instance\n      })\n    });\n    ```\n  \n    @method did-update\n    @public\n  */\n  var _default = _exports.default = (0, _modifier.setModifierManager)(() => ({\n    capabilities: (0, _modifier.capabilities)('3.22', {\n      disableAutoTracking: false\n    }),\n    createModifier() {\n      return {\n        element: null\n      };\n    },\n    installModifier(state, element, args) {\n      // save element into state bucket\n      state.element = element;\n      {\n        // Consume individual properties to entangle tracking.\n        // https://github.com/emberjs/ember.js/issues/19277\n        // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n        args.positional.forEach(() => {});\n        args.named && Object.values(args.named);\n      }\n    },\n    updateModifier({\n      element\n    }, args) {\n      let [fn, ...positional] = args.positional;\n      {\n        // Consume individual properties to entangle tracking.\n        // https://github.com/emberjs/ember.js/issues/19277\n        // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n        args.positional.forEach(() => {});\n        args.named && Object.values(args.named);\n        untrack(() => {\n          fn(element, positional, args.named);\n        });\n      }\n    },\n    destroyModifier() {}\n  }), class DidUpdateModifier {});\n});","define(\"@ember/render-modifiers/modifiers/will-destroy\", [\"exports\", \"@ember/modifier\"], function (_exports, _modifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n    The `{{will-destroy}}` element modifier is activated immediately before the element\n    is removed from the DOM.\n  \n    ```handlebars\n    <div {{will-destroy this.teardownPlugin}}>\n      {{yield}}\n    </div>\n    ```\n  \n    ```js\n    export default Component.extend({\n      teardownPlugin(element) {\n        // teardown logic here\n      }\n    });\n    ```\n  \n    By default, the executed function will be unbound. If you would like to access\n    the component context in your function, use the `action` decorator as follows:\n  \n    ```handlebars\n    <div {{will-destroy this.teardownPlugin}}>\n      {{yield}}\n    </div>\n    ```\n  \n    ```js\n    export default Component.extend({\n      teardownPlugin: action(function(element) {\n        // the `this` context will be the component instance\n      })\n    });\n    ```\n  \n    @method will-destroy\n    @public\n  */\n  var _default = _exports.default = (0, _modifier.setModifierManager)(() => ({\n    capabilities: (0, _modifier.capabilities)('3.22', {\n      disableAutoTracking: true\n    }),\n    createModifier() {\n      return {\n        element: null\n      };\n    },\n    installModifier(state, element) {\n      state.element = element;\n    },\n    updateModifier() {},\n    destroyModifier({\n      element\n    }, args) {\n      let [fn, ...positional] = args.positional;\n      fn(element, positional, args.named);\n    }\n  }), class WillDestroyModifier {});\n});","define(\"@embroider/macros/es-compat2\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = esCompat;\n  function esCompat(m) {\n    return m?.__esModule ? m : {\n      default: m,\n      ...m\n    };\n  }\n});","define(\"@embroider/macros/runtime\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.config = config;\n  _exports.each = each;\n  _exports.getGlobalConfig = getGlobalConfig;\n  _exports.isTesting = isTesting;\n  _exports.macroCondition = macroCondition;\n  _exports.setTesting = setTesting;\n  /*\n    These are the runtime implementations for the javascript macros that have\n    runtime implementations.\n  \n    Not every macro has a runtime implementation, some only make sense in the\n    build and always run there.\n  \n    Even when we have runtime implementations, we are still careful to emit static\n    errors during the build wherever possible, and runtime errors when necessary,\n    so that you're not surprised when you switch from runtime-mode to compile-time\n    mode.\n  */\n\n  /*\n    CAUTION: in classic builds, this file gets shared by all present copies of\n    @embroider/macros. If you want to change its public API, you need to rename it\n    and update `pathToRuntime` in ../babel/state.ts to point at it, so that your\n    babel plugin and runtime will match.\n  */\n\n  function each(array) {\n    if (!Array.isArray(array)) {\n      throw new Error(`the argument to the each() macro must be an array`);\n    }\n    return array;\n  }\n  function macroCondition(predicate) {\n    return predicate;\n  }\n\n  // This is here as a compile target for `getConfig` and `getOwnConfig` when\n  // we're in runtime mode. This is not public API to call from your own code.\n  function config(packageRoot) {\n    return runtimeConfig.packages[packageRoot];\n  }\n  function getGlobalConfig() {\n    return runtimeConfig.global;\n  }\n  function isTesting() {\n    let g = runtimeConfig.global;\n    let e = g && g['@embroider/macros'];\n    return Boolean(e && e.isTesting);\n  }\n  function setTesting(isTesting) {\n    if (!runtimeConfig.global) {\n      runtimeConfig.global = {};\n    }\n    if (!runtimeConfig.global['@embroider/macros']) {\n      runtimeConfig.global['@embroider/macros'] = {};\n    }\n    runtimeConfig.global['@embroider/macros'].isTesting = Boolean(isTesting);\n  }\n\n  // Welcome intrepid developer!\n  //\n  // While this data is \"global\", this is a private variable.\n  //\n  // do not build features based off of its contents,\n  // or assume it will have the same name in future releases.\n  const runtimeConfig = globalThis.__embroider_macros__runtime_config__ ||= {};\n  runtimeConfig.packages ||= {};\n  runtimeConfig.global ||= {};\n\n  // In the off chance there are duplicate copies of @embroider/macros in the dep graph\n  // (due to the package manager messing up)\n  // Let's try to merge them together via the above global well known variable\n  const localConfig = initializeRuntimeMacrosConfig();\n  Object.assign(runtimeConfig.packages, localConfig.packages);\n  Object.assign(runtimeConfig.global, localConfig.global);\n\n  // this exists to be targeted by our babel plugin\n  function initializeRuntimeMacrosConfig() {\n    return {\n      packages: {},\n      global: {}\n    };\n  }\n  function updaterMethods() {\n    return {\n      config,\n      getGlobalConfig,\n      setConfig(packageRoot, value) {\n        runtimeConfig.packages[packageRoot] = value;\n      },\n      setGlobalConfig(key, value) {\n        runtimeConfig.global[key] = value;\n      }\n    };\n  }\n\n  // this is how runtime config can get injected at boot. I'm not sure yet if this\n  // should be public API, but we certainly need it internally to set things like\n  // the global fastboot.isRunning.\n  //\n  // consumers of this API push a function onto\n  // window._embroider_macros_runtime_config. The function is given four methods\n  // which allow it to read and write the per-package and global configs. The\n  // reason for allowing both read & write is that merging strategies are up to\n  // each consumers -- read first, then merge, then write.\n  //\n  // For an example user of this API, see where we generate\n  // embroider_macros_fastboot_init.js' in @embroider/core.\n  let updaters = typeof window !== 'undefined' ? window._embroider_macros_runtime_config : undefined;\n  if (updaters) {\n    let methods = updaterMethods();\n    for (let updater of updaters) {\n      updater(methods);\n    }\n  }\n});","define(\"@embroider/util/ember-private-api\", [\"exports\", \"@embroider/macros/es-compat2\"], function (_exports, _esCompat) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isCurriedComponentDefinition = void 0;\n  _exports.lookupCurriedComponentDefinition = lookupCurriedComponentDefinition;\n  let runtime;\n  {\n    // new enough ember has a real module we can import\n    runtime = (0, _esCompat.default)(require(\"@glimmer/runtime\"));\n  }\n  let {\n    isCurriedComponentDefinition,\n    CurriedComponentDefinition,\n    curry,\n    CurriedValue\n  } = runtime;\n\n  // older embers have isCurriedComponentDefinition, new ones have CurriedValue\n  // and instanceof CurriedValue seems good enough.\n  _exports.isCurriedComponentDefinition = isCurriedComponentDefinition;\n  if (!isCurriedComponentDefinition) {\n    _exports.isCurriedComponentDefinition = isCurriedComponentDefinition = function (value) {\n      return value instanceof CurriedValue;\n    };\n  }\n  function runtimeResolver(owner) {\n    let resolver = owner.lookup('renderer:-dom')._runtimeResolver;\n    if (resolver) {\n      return resolver;\n    }\n    let entry = Object.entries(owner.__container__.cache).find(e => e[0].startsWith('template-compiler:main-'));\n    if (entry) {\n      return entry[1].resolver.resolver;\n    }\n    throw new Error(`@embroider/util couldn't locate the runtime resolver on this ember version`);\n  }\n  function lookupCurriedComponentDefinition(name, owner) {\n    let resolver = runtimeResolver(owner);\n    if (typeof resolver.lookupComponentHandle === 'function') {\n      let handle = resolver.lookupComponentHandle(name, contextForLookup(owner));\n      if (handle != null) {\n        return new CurriedComponentDefinition(resolver.resolve(handle), null);\n      }\n    }\n\n    // here we're doing the same thing the internal currying does, in order to\n    // generate a sane error message (even though we don't actually use\n    // resolvedDefinition as part of our return value).\n    let resolvedDefinition = resolver.lookupComponent(name, owner);\n    if (!resolvedDefinition) {\n      throw new Error(`Attempted to resolve \\`${name}\\` via ensureSafeComponent, but nothing was found.`);\n    }\n    return curry(0, name, owner, {\n      named: {},\n      positional: []\n    });\n  }\n  function contextForLookup(owner) {\n    {\n      return owner;\n    }\n  }\n});","define(\"@embroider/util/index\", [\"exports\", \"@ember/debug\", \"@ember/application\", \"@embroider/util/ember-private-api\", \"@ember/component/helper\"], function (_exports, _debug, _application, _emberPrivateApi, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.EnsureSafeComponentHelper = void 0;\n  _exports.ensureSafeComponent = ensureSafeComponent;\n  function ensureSafeComponent(value, thingWithOwner) {\n    if (typeof value === 'string') {\n      return handleString(value, thingWithOwner);\n    } else if ((0, _emberPrivateApi.isCurriedComponentDefinition)(value)) {\n      return value;\n    } else if (value == null) {\n      return value;\n    } else {\n      return handleClass(value, thingWithOwner);\n    }\n  }\n  class EnsureSafeComponentHelper extends _helper.default {\n    compute([value]) {\n      return ensureSafeComponent(value, this);\n    }\n  }\n  _exports.EnsureSafeComponentHelper = EnsureSafeComponentHelper;\n  function handleString(name, thingWithOwner) {\n    (false && !(false) && (0, _debug.deprecate)(`You're trying to invoke the component \"${name}\" by passing its name as a string. This won't work under Embroider.`, false, {\n      id: 'ensure-safe-component.string',\n      url: 'https://github.com/embroider-build/embroider/blob/main/docs/replacing-component-helper.md#when-youre-passing-a-component-to-someone-else',\n      until: 'embroider',\n      for: '@embroider/util',\n      since: '0.27.0'\n    }));\n    let owner = (0, _application.getOwner)(thingWithOwner);\n    return (0, _emberPrivateApi.lookupCurriedComponentDefinition)(name, owner);\n  }\n  function ensureRegistered(klass, owner) {\n    let service = owner.lookup('service:-ensure-registered');\n    (false && !(service) && (0, _debug.assert)('Could not lookup private -ensure-registered service', service));\n    return service.register(klass, owner);\n  }\n  function handleClass(klass, thingWithOwner) {\n    {\n      return klass;\n    }\n  }\n});","define(\"@embroider/util/services/ensure-registered\", [\"exports\", \"@ember/service\", \"@ember/application\"], function (_exports, _service, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class EnsureRegisteredService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"classNonces\", new WeakMap());\n      _defineProperty(this, \"nonceCounter\", 0);\n    }\n    register(klass, owner = (0, _application.getOwner)(this)) {\n      let nonce = this.classNonces.get(klass);\n      if (nonce == null) {\n        nonce = `-ensure${this.nonceCounter++}`;\n        this.classNonces.set(klass, nonce);\n        owner.register(`component:${nonce}`, klass);\n      }\n      return nonce;\n    }\n  }\n  _exports.default = EnsureRegisteredService;\n});","define(\"@testable/shared-ui/components/access-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/login\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _login, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/login\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"login login-v2\" {{did-insert this.didInsert}}>\n    <div class=\"login-content\">\n      <form data-parsley-trigger=\"focusout\" id=\"accessCodeForm\" class=\"margin-bottom-0\">\n        <div class=\"form-group m-b-20\">\n          <Input @type=\"text\"\n                 class=\"form-control input-lg\"\n                 placeholder=\"Access Code\"\n                 @value={{this.accessCode}}\n                 id=\"accessCode\"\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"Access Code is required.\"/>\n        </div>\n        <div class=\"login-buttons\">\n          <button type=\"submit\" {{on \"click\" this.verify}} disabled={{this.isSubmitted}} class=\"btn btn-success btn-block btn-lg\">\n            <Ui::Icon @icon=\"fa fa-key\" /> {{if this.isSubmitted 'Verifying...' 'Verify'}}\n          </button>\n        </div>\n      </form>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"login login-v2\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"login-content\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"form\\\"],[14,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[14,1,\\\"accessCodeForm\\\"],[14,0,\\\"margin-bottom-0\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,3],[[24,0,\\\"form-control input-lg\\\"],[24,\\\"placeholder\\\",\\\"Access Code\\\"],[24,1,\\\"accessCode\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Access Code is required.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"accessCode\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"login-buttons\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isSubmitted\\\"]]],[24,0,\\\"btn btn-success btn-block btn-lg\\\"],[24,4,\\\"submit\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"verify\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-key\\\"]],null],[1,\\\" \\\"],[1,[52,[30,0,[\\\"isSubmitted\\\"]],\\\"Verifying...\\\",\\\"Verify\\\"]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"form\\\",\\\"input\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/access-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccessPanelComponent = _exports.default = (_class = class AccessPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isSubmitted\", _descriptor, this);\n      _initializerDefineProperty(this, \"accessCode\", _descriptor2, this);\n    }\n    verify(e) {\n      e.preventDefault();\n      if (!$('#accessCodeForm').parsley().validate()) return;\n      this.isSubmitted = true;\n      _login.default.verifyAccessCode(this.accessCode).then(result => {\n        if (result && result.success) {\n          if (!_.isEmpty(_login.default.getAccessCodeCookie())) {\n            this.args.verified();\n          }\n        }\n        this.isSubmitted = false;\n      }, (jqxhr, state, errMsg) => {\n        this.isSubmitted = false;\n      });\n    }\n    didInsert() {\n      $('#accessCodeForm').parsley();\n      $('#accessCode').focus();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSubmitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"accessCode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"verify\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"verify\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccessPanelComponent);\n});","define(\"@testable/shared-ui/components/account-integration\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"tracked-built-ins\", \"ember-uuid\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _trackedBuiltIns, _emberUuid, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"ember-uuid\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container\" data-sortable-id=\"glance\" data-type=\"Glance\" {{did-insert this.didInsert}}>\n    <div class=\"panel-heading block-sub-container-target\">\n      <div class=\"panel-heading-btn\">\n        {{#if (and @feature (not (has-feature @feature)))}}\n          <span class=\"me-2\"><Ui::FeatureFlagButton @feature={{@feature}} /></span>\n        {{/if}}\n        <input id=\"{{this.integration.integrationType}}Enabled{{this.uuid}}\" type=\"checkbox\" data-bs-toggle=\"toggle\" data-on=\"Active\"\n               data-off=\"Inactive\" data-width=\"80\" data-size=\"mini\" data-onstyle=\"primary\" data-offstyle=\"danger\"\n               disabled={{if @feature (not (has-feature @feature))}}>\n        {{#if (or (not @feature) (has-feature @feature))}}\n          <a role=\"button\" {{on \"click\" (fn this.deleteIntegration this.integration)}}\n             class=\"btn btn-sm btn-icon btn-circle text-danger close\">\n            {{#if this.integration.updating}}<Ui::Icon @icon=\"fa-spinner fa-spin\" />{{else}}<Ui::Icon @icon=\"fa fa-times\" />{{/if}}\n          </a>\n        {{/if}}\n      </div>\n      <h4 class=\"panel-title\">\n         <Ui::Icon @icon=\"fa fa-plus\" role=\"button\" data-bs-toggle=\"collapse\" id=\"{{this.integration.integrationType}}Toggle{{this.uuid}}\"\n               href=\"#{{this.integration.integrationType}}{{this.uuid}}\" aria-expanded=\"true\"\n               class=\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\"\n               aria-controls=\"{{this.integration.integrationType}}{{this.uuid}}\" />\n        <strong>{{camel-to-title this.integration.integrationType}}</strong>\n        <Ui::InfoIcon @title={{@info.name}} @content={{@info.tooltip}} @placement=\"bottom\"/>\n        <a target=\"_blank\" href=\"{{@info.docs}}\" class=\"m-r-10 m-l-10 text-primary\" rel=\"noreferrer noopener\">\n          <Ui::Icon @icon=\"fa fa-book\" /></a>\n      </h4>\n    </div>\n    <div class=\"collapse\" id=\"{{this.integration.integrationType}}{{this.uuid}}\" aria-expanded=\"true\">\n      <div class=\"panel-body\">\n      {{#if this.integration.lastError}}\n        <div class=\"note note-danger m-b-10\">\n          <h5>Latest Error<span class=\"f-s-12 f-w-600 m-l-5\">@ {{print-datetime this.integration.lastErrorAt}}</span></h5>\n          <p>{{html-safe (to-html this.integration.lastError)}}</p>\n        </div>\n      {{/if}}\n      <fieldset disabled={{or (not this.integration.active) this.integration.updating (if @feature (not (has-feature @feature)))}}\n                class={{if (and @feature (not (has-feature @feature))) \"pe-none opacity-50\"}}>\n        {{component (concat 'integration-' (to-lowercase this.integration.integrationType))\n                    integration=this.integration\n                    updateIntegration=this.updateIntegration }}\n  \n      </fieldset>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"panel block-sub-container\\\"],[24,\\\"data-sortable-id\\\",\\\"glance\\\"],[24,\\\"data-type\\\",\\\"Glance\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,1],[28,[37,4],[[28,[37,5],[[30,1]],null]],null]],null],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"me-2\\\"],[12],[8,[39,7],null,[[\\\"@feature\\\"],[[30,1]]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"input\\\"],[15,1,[29,[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]],\\\"Enabled\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"toggle\\\"],[14,\\\"data-on\\\",\\\"Active\\\"],[14,\\\"data-off\\\",\\\"Inactive\\\"],[14,\\\"data-width\\\",\\\"80\\\"],[14,\\\"data-size\\\",\\\"mini\\\"],[14,\\\"data-onstyle\\\",\\\"primary\\\"],[14,\\\"data-offstyle\\\",\\\"danger\\\"],[15,\\\"disabled\\\",[52,[30,1],[28,[37,4],[[28,[37,5],[[30,1]],null]],null]]],[14,4,\\\"checkbox\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[28,[37,4],[[30,1]],null],[28,[37,5],[[30,1]],null]],null],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger close\\\"],[4,[38,11],[\\\"click\\\",[28,[37,12],[[30,0,[\\\"deleteIntegration\\\"]],[30,0,[\\\"integration\\\"]]],null]],null],[12],[1,\\\"\\\\n          \\\"],[41,[30,0,[\\\"integration\\\",\\\"updating\\\"]],[[[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null]],[]],[[[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null]],[]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n       \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,1,[29,[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]],\\\"Toggle\\\",[30,0,[\\\"uuid\\\"]]]]],[16,6,[29,[\\\"#\\\",[30,0,[\\\"integration\\\",\\\"integrationType\\\"]],[30,0,[\\\"uuid\\\"]]]]],[24,\\\"aria-expanded\\\",\\\"true\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\\\"],[16,\\\"aria-controls\\\",[29,[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]],[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,16],[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]]],null]],[13],[1,\\\"\\\\n      \\\"],[8,[39,17],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[[30,2,[\\\"name\\\"]],[30,2,[\\\"tooltip\\\"]],\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,2,[\\\"docs\\\"]]]]],[14,0,\\\"m-r-10 m-l-10 text-primary\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-book\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"collapse\\\"],[15,1,[29,[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]],[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"integration\\\",\\\"lastError\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"note note-danger m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Latest Error\\\"],[10,1],[14,0,\\\"f-s-12 f-w-600 m-l-5\\\"],[12],[1,\\\"@ \\\"],[1,[28,[35,19],[[30,0,[\\\"integration\\\",\\\"lastErrorAt\\\"]]],null]],[13],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,[28,[35,21],[[28,[37,22],[[30,0,[\\\"integration\\\",\\\"lastError\\\"]]],null]],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[28,[37,9],[[28,[37,4],[[30,0,[\\\"integration\\\",\\\"active\\\"]]],null],[30,0,[\\\"integration\\\",\\\"updating\\\"]],[52,[30,1],[28,[37,4],[[28,[37,5],[[30,1]],null]],null]]],null]],[15,0,[52,[28,[37,3],[[30,1],[28,[37,4],[[28,[37,5],[[30,1]],null]],null]],null],\\\"pe-none opacity-50\\\"]],[12],[1,\\\"\\\\n      \\\"],[46,[28,[37,25],[\\\"integration-\\\",[28,[37,26],[[30,0,[\\\"integration\\\",\\\"integrationType\\\"]]],null]],null],null,[[\\\"integration\\\",\\\"updateIntegration\\\"],[[30,0,[\\\"integration\\\"]],[30,0,[\\\"updateIntegration\\\"]]]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@feature\\\",\\\"@info\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"has-feature\\\",\\\"span\\\",\\\"ui/feature-flag-button\\\",\\\"input\\\",\\\"or\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"strong\\\",\\\"camel-to-title\\\",\\\"ui/info-icon\\\",\\\"h5\\\",\\\"print-datetime\\\",\\\"p\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"fieldset\\\",\\\"component\\\",\\\"concat\\\",\\\"to-lowercase\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account-integration.hbs\",\n    \"isStrictMode\": false\n  });\n  const NonStandardActivation = ['Slack'];\n  let AccountIntegrationComponent = _exports.default = (_class = class AccountIntegrationComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"integration\", new _trackedBuiltIns.TrackedObject(this.args.integration));\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n    }\n    get toggleId() {\n      return `#${this.integration.integrationType}Enabled${this.uuid}`;\n    }\n    enableDisableToggle(enable) {\n      $(this.toggleId).bootstrapToggle(enable ? 'enable' : 'disable');\n    }\n    get supportsStandardActivation() {\n      return !NonStandardActivation.includes(this.integration.integrationType);\n    }\n    deleteIntegration(integration) {\n      integration.updating = true;\n      this.enableDisableToggle(false);\n      _lib.default.confirm('Are you sure you want to delete this integration?', 'Delete Integration', () => {\n        integration.updating = true;\n        _server.default.deleteIntegration(_environment.config.currentUser.orgId, integration.id).then(() => {\n          if (typeof this.args.integrationDeleted === 'function') {\n            this.args.integrationDeleted(this.args.integration);\n          }\n          integration.updating = false;\n          this.enableDisableToggle(true);\n        }, () => {\n          integration.updating = false;\n          this.enableDisableToggle(true);\n        });\n      }, 'Cancel', () => {\n        integration.updating = false;\n        this.enableDisableToggle(true);\n      }, 'Delete Integration');\n    }\n    updateIntegration(integration, settings) {\n      integration.updating = true;\n      this.enableDisableToggle(false);\n      _server.default.updateIntegration(_environment.config.currentUser.orgId, integration.id, settings).then(result => {\n        _lib.default.info('Successfully updated ' + _lib.default.camelCaseToTitleCase(integration.integrationType) + ' integration.');\n        integration.settings = result.settings;\n        integration.updating = false;\n        this.enableDisableToggle(true);\n      }, () => {\n        integration.updating = false;\n        this.enableDisableToggle(true);\n      });\n    }\n    didInsert() {\n      const integration = this.integration;\n      const id = this.toggleId;\n      $(id).bootstrapToggle(integration.active ? 'on' : 'off');\n      if (!this.supportsStandardActivation && !integration.active) {\n        $(id).bootstrapToggle('disable');\n      }\n      $(id).on('change', () => {\n        const active = $(id).prop('checked');\n        this.enableDisableToggle(false);\n        _lib.default.confirm('Are you sure you want to ' + (active ? 'activate' : 'deactivate') + ' this integration?', 'OK', () => {\n          integration.updating = true;\n          _server.default.updateIntegration(_environment.config.currentUser.orgId, integration.id, undefined, active).then(result => {\n            integration.active = active;\n            integration.updating = false;\n            this.enableDisableToggle(true);\n            if (active) {\n              $(`#${integration.integrationType}${this.uuid}`).collapse('show');\n            }\n          }, () => {\n            integration.updating = false;\n            this.enableDisableToggle(true);\n            _lib.default.revertToggle(id);\n          });\n        }, 'Cancel', () => {\n          this.enableDisableToggle(true);\n          _lib.default.revertToggle(id);\n        }, (active ? 'Activate' : 'Deactivate') + ' Integration');\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, this.afterRenderFunc);\n    }\n    afterRenderFunc() {\n      const integration = this.integration;\n      $(`#${integration.integrationType}${this.uuid}`).collapse(integration.active ? 'show' : 'hide');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"deleteIntegration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteIntegration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIntegration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIntegration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountIntegrationComponent);\n});","define(\"@testable/shared-ui/components/account-integrations\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"tracked-built-ins\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _runloop, _trackedBuiltIns, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (gt this.availableIntegrations.length 0)}}\n      <div class=\"btn-group pull-right \">\n        <a href=\"javascript:;\" class=\"btn btn-primary {{if this.addingIntegration 'disabled'}}\" data-bs-toggle=\"dropdown\">\n          <Ui::Icon @icon=\"fa fa-plus\" /></a>\n        <a href=\"javascript:;\" class=\"btn btn-primary dropdown-toggle {{if this.addingIntegration 'disabled'}}\"\n           data-bs-toggle=\"dropdown\"></a>\n        <ul class=\"dropdown-menu dropdown-menu-end\">\n          {{#each this.availableIntegrations as |availableIntegration|}}\n            <li>\n              {{#if availableIntegration.locked}}\n                <span class=\"dropdown-item disabled d-flex justify-content-between align-items-center\">\n                  <span class=\"text-muted\">{{availableIntegration.name}}</span>\n                  <small class=\"text-warning m-l-10\">Requires <LinkTo @route=\"account.billing.subscription\">plan upgrade</LinkTo></small>\n                </span>\n              {{else}}\n                <a {{on \"click\" (fn this.addIntegration availableIntegration)}} role=\"button\">\n                  <Ui::InfoIcon\n                          @content={{availableIntegration.tooltip}}\n                          @placement=\"left\" />\n                  {{availableIntegration.name}}\n                </a>\n              {{/if}}\n            </li>\n          {{/each}}\n        </ul>\n    </div>\n  {{/if}}\n  \n  <h1 class=\"page-header m-b-20 m-t-10\">Integrations</h1>\n  \n  {{#if (gt this.integrationsWithInfo.length 0)}}\n    {{#each this.integrationsWithInfo as |details|}}\n      <AccountIntegration @integration={{details.integration}}\n                          @info={{details.info}}\n                          @feature={{details.feature}}\n                          @integrationDeleted={{this.integrationDeleted}} />\n    {{/each}}\n  {{else if (eq this.allEnabledIntegrations.length 0)}}\n    <h5>No integrations are enabled in your deployment. Contact your site administrator to enable one or more integration options.</h5>\n  {{else if this.isLoading}}\n    <h5>Loading Integrations...</h5>\n  {{else}}\n    <h5>No integrations configured yet.</h5>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,0,[\\\"availableIntegrations\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"btn-group pull-right \\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"javascript:;\\\"],[15,0,[29,[\\\"btn btn-primary \\\",[52,[30,0,[\\\"addingIntegration\\\"]],\\\"disabled\\\"]]]],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"javascript:;\\\"],[15,0,[29,[\\\"btn btn-primary dropdown-toggle \\\",[52,[30,0,[\\\"addingIntegration\\\"]],\\\"disabled\\\"]]]],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"availableIntegrations\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"locked\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"dropdown-item disabled d-flex justify-content-between align-items-center\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"small\\\"],[14,0,\\\"text-warning m-l-10\\\"],[12],[1,\\\"Requires \\\"],[8,[39,11],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"plan upgrade\\\"]],[]]]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[28,[37,13],[[30,0,[\\\"addIntegration\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,14],null,[[\\\"@content\\\",\\\"@placement\\\"],[[30,1,[\\\"tooltip\\\"]],\\\"left\\\"]],null],[1,\\\"\\\\n                \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-20 m-t-10\\\"],[12],[1,\\\"Integrations\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"integrationsWithInfo\\\",\\\"length\\\"]],0],null],[[[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"integrationsWithInfo\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[8,[39,16],null,[[\\\"@integration\\\",\\\"@info\\\",\\\"@feature\\\",\\\"@integrationDeleted\\\"],[[30,2,[\\\"integration\\\"]],[30,2,[\\\"info\\\"]],[30,2,[\\\"feature\\\"]],[30,0,[\\\"integrationDeleted\\\"]]]],null],[1,\\\"\\\\n\\\"]],[2]],null]],[]],[[[41,[28,[37,17],[[30,0,[\\\"allEnabledIntegrations\\\",\\\"length\\\"]],0],null],[[[1,\\\"  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No integrations are enabled in your deployment. Contact your site administrator to enable one or more integration options.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Loading Integrations...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No integrations configured yet.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]]],[]]]],[\\\"availableIntegration\\\",\\\"details\\\"],[\\\"if\\\",\\\"gt\\\",\\\"div\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"span\\\",\\\"small\\\",\\\"link-to\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/info-icon\\\",\\\"h1\\\",\\\"account-integration\\\",\\\"eq\\\",\\\"h5\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account-integrations.hbs\",\n    \"isStrictMode\": false\n  });\n  const AllIntegrations = [{\n    name: 'Microsoft Teams',\n    type: 'Teams',\n    tooltip: 'If enabled, a Testable bot can integrate with your Microsoft Team and chat test related updates.',\n    docs: 'https://docs.testable.io/integration/msteams.html'\n  }, {\n    name: 'New Relic',\n    type: 'NewRelic',\n    tooltip: 'If enabled, all test results will be sent to New Relic',\n    docs: 'https://docs.testable.io/integration/newrelic.html'\n  }, {\n    name: 'Slack',\n    type: 'Slack',\n    tooltip: 'If enabled, a Testable bot can integrate with your Slack workspace and chat test related updates.',\n    docs: 'https://docs.testable.io/integration/slack.html'\n  }, {\n    name: 'SNS',\n    type: 'SNS',\n    tooltip: 'If enabled, Send Testable notifications to an SNS topic or to text.',\n    docs: 'https://docs.testable.io/integration/sns.html'\n  }, {\n    name: 'Dynatrace',\n    type: 'Dynatrace',\n    tooltip: 'If enabled, all test results will be sent to Dynatrace.',\n    docs: 'https://docs.testable.io/integration/dynatrace.html'\n  }, {\n    name: 'Datadog',\n    type: 'Datadog',\n    tooltip: 'If enabled, all test results will be sent to Datadog.',\n    docs: 'https://docs.testable.io/integration/datadog.html'\n  }, {\n    name: 'Aws Code Pipeline',\n    type: 'AwsCodePipeline',\n    tooltip: 'If enabled, a custom action to run a test can be added to your AWS pipelines. Test results will get reported including success status.',\n    docs: 'https://docs.testable.io/integration/aws-codepipeline.html'\n  }, {\n    name: 'CloudWatch',\n    type: 'CloudWatch',\n    tooltip: 'If enabled, all test results will be sent to AWS CloudWatch.',\n    docs: 'https://docs.testable.io/integration/aws-cloudwatch.html'\n  }];\n  let AccountIntegrationsComponent = _exports.default = (_class = class AccountIntegrationsComponent extends _component2.default {\n    get allIntegrations() {\n      return this.args.allowedTypes ? AllIntegrations.filter(integration => this.args.allowedTypes.includes(integration.type)) : AllIntegrations;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"orgAcl\", _descriptor2, this);\n      _initializerDefineProperty(this, \"addingIntegration\", _descriptor3, this);\n      _initializerDefineProperty(this, \"integrations\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor5, this);\n      _defineProperty(this, \"_isFeatureLocked\", integrationType => {\n        const featureMap = this.args.featureMap || {};\n        const featureCode = featureMap[integrationType];\n        if (!featureCode) return false;\n        const feature = this.orgAcl.lookup(featureCode);\n        return feature.feature && !feature.match;\n      });\n      this.loadIntegrations();\n    }\n    get allEnabledIntegrations() {\n      return this.envConfig.isOnPrem ? _.filter(this.allIntegrations, i => _environment.config.integrations && _environment.config.integrations[i.type.toLowerCase()]) : this.allIntegrations;\n    }\n    get availableIntegrations() {\n      return _.filter(this.allEnabledIntegrations, potentialIntegration => {\n        return _.findIndex(this.integrations, i => i.integrationType === potentialIntegration.type) === -1;\n      }).sort((a, b) => (a.name || '').localeCompare(b.name || '')).map(i => ({\n        ...i,\n        locked: this._isFeatureLocked(i.type)\n      }));\n    }\n    get integrationsWithInfo() {\n      const featureMap = this.args.featureMap || {};\n      return _.map(this.integrations, integration => {\n        return {\n          integration: integration,\n          info: _.find(this.allIntegrations, potentialInfo => {\n            return potentialInfo.type === integration.integrationType;\n          }),\n          feature: featureMap[integration.integrationType]\n        };\n      });\n    }\n    async loadIntegrations() {\n      this.isLoading = true;\n      let integrations = await _server.default.getIntegrations(_environment.config.currentUser.orgId);\n      if (this.args.allowedTypes) {\n        integrations = integrations.filter(integration => this.args.allowedTypes.includes(integration.integrationType));\n      }\n      this.integrations = new _trackedBuiltIns.TrackedArray(integrations);\n      this.isLoading = false;\n    }\n    integrationDeleted(integration) {\n      const idx = this.integrations.indexOf(integration);\n      if (idx > -1) {\n        this.integrations.splice(idx, 1);\n      }\n    }\n    addIntegration(integration) {\n      (0, _runloop.next)(this, () => {\n        this.addingIntegration = true;\n        _server.default.createIntegration(_environment.config.currentUser.orgId, integration.type).then(result => {\n          this.integrations.unshift(result);\n          this.addingIntegration = false;\n        }, () => {\n          this.addingIntegration = false;\n        });\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"orgAcl\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"addingIntegration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"integrations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"integrationDeleted\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"integrationDeleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addIntegration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addIntegration\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountIntegrationsComponent);\n});","define(\"@testable/shared-ui/components/account-profile-page\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{page-title @pageTitle}}\n  \n  <div class='heading-wrapper'>\n    <h1 class='page-header m-b-10 m-t-10'>Profile</h1>\n    <div class='row p-b-10'>\n      <ol class='breadcrumb pull-right'>\n        <li class='breadcrumb-item'>Account</li>\n        <li class='breadcrumb-item active'>Profile</li>\n      </ol>\n    </div>\n  </div>\n  \n  {{#if this.isLoading}}\n    <h5>Loading Profile...</h5>\n  {{else}}\n    <AccountProfile @model={{this.profile}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[[30,1]],null]],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"heading-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-10 m-t-10\\\"],[12],[1,\\\"Profile\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row p-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"ol\\\"],[14,0,\\\"breadcrumb pull-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item\\\"],[12],[1,\\\"Account\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item active\\\"],[12],[1,\\\"Profile\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Loading Profile...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[8,[39,7],null,[[\\\"@model\\\"],[[30,0,[\\\"profile\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@pageTitle\\\"],[\\\"page-title\\\",\\\"div\\\",\\\"h1\\\",\\\"ol\\\",\\\"li\\\",\\\"if\\\",\\\"h5\\\",\\\"account-profile\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account-profile-page.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountProfilePageComponent = _exports.default = (_class = class AccountProfilePageComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor, this);\n      _initializerDefineProperty(this, \"profile\", _descriptor2, this);\n      this.loadProfile();\n    }\n    async loadProfile() {\n      this.isLoading = true;\n      this.profile = await _server.default.getUser(_environment.config.currentUser.id).then(null, _lib.default.fail);\n      this.isLoading = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"profile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountProfilePageComponent);\n});","define(\"@testable/shared-ui/components/account-profile\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class='panel'>\n    <div class='panel-heading'>\n      <h4 class='panel-title'><strong>Profile</strong></h4>\n    </div>\n    <div class='panel-body'>\n      <form {{on 'submit' this.updateProfile}} id='profileForm' class='form-horizontal'>\n        <div class='form-group'>\n          <label class='col-md-2 control-label'>ID</label>\n          <div class='col-md-10'>\n            <input\n              class='form-control'\n              disabled={{true}}\n              type='text'\n              id='id'\n              placeholder='System generated ID'\n              value={{@model.id}}\n            />\n          </div>\n        </div>\n        <div class='form-group'>\n          <label class='col-md-2 control-label'>Name</label>\n          <div class='col-md-10'>\n            <input class='form-control' type='text' id='name' placeholder='Full name' value={{@model.name}} />\n          </div>\n        </div>\n        <div class='form-group'>\n          <label class='col-md-2 control-label'>Email</label>\n          <div class='col-md-10'>\n            <input class='form-control' type='email' id='email' placeholder='Email address' value={{@model.email}} />\n          </div>\n        </div>\n  \n        {{#unless this.isSamlOnPremEnabled}}\n          <div class='form-group'>\n            <label class='col-md-2 control-label'>Authentication Source</label>\n            <div class='col-md-10'>\n              <Ui::PSelect\n                @options={{this.authSources}}\n                @selected={{this.currentAuthSource}}\n                @placeholder='Please select Authentication Source...'\n                @onChange={{this.updateAuthSource}}\n                as |opt|\n              >\n                {{opt}}\n              </Ui::PSelect>\n            </div>\n          </div>\n          {{#if (eq this.currentAuthSource 'Password')}}\n            {{#if (eq @model.authSource 'Password')}}\n              <div class='form-group'>\n                <label class='col-md-2 control-label'>Current Password</label>\n                <div class='col-md-10'>\n                  <Ui::PasswordInput id='oldPassword' placeholder='Current password' />\n                </div>\n              </div>\n            {{/if}}\n            <div class='form-group'>\n              <label class='col-md-2 control-label'>New Password</label>\n              <div class='col-md-10'>\n                <Ui::PasswordInput id='newPassword' placeholder='New password' />\n              </div>\n            </div>\n            <div class='form-group'>\n              <label class='col-md-2 control-label'>Confirm Password</label>\n              <div class='col-md-10'>\n                <Ui::PasswordInput id='confirmPassword' placeholder='Confirm new password' />\n              </div>\n            </div>\n          {{/if}}\n        {{/unless}}\n        <div class='form-group'>\n          <label class='col-md-2 control-label'></label>\n          <div class='col-md-10'><button type='submit' class='btn btn-sm btn-success'>Update Profile</button></div>\n        </div>\n      </form>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Profile\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,1,\\\"profileForm\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,4],[\\\"submit\\\",[30,0,[\\\"updateProfile\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"ID\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[15,\\\"disabled\\\",true],[14,1,\\\"id\\\"],[14,\\\"placeholder\\\",\\\"System generated ID\\\"],[15,2,[30,1,[\\\"id\\\"]]],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[14,1,\\\"name\\\"],[14,\\\"placeholder\\\",\\\"Full name\\\"],[15,2,[30,1,[\\\"name\\\"]]],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Email\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[14,1,\\\"email\\\"],[14,\\\"placeholder\\\",\\\"Email address\\\"],[15,2,[30,1,[\\\"email\\\"]]],[14,4,\\\"email\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"isSamlOnPremEnabled\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Authentication Source\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"authSources\\\"]],[30,0,[\\\"currentAuthSource\\\"]],\\\"Please select Authentication Source...\\\",[30,0,[\\\"updateAuthSource\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,2]],[1,\\\"\\\\n            \\\"]],[2]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"currentAuthSource\\\"]],\\\"Password\\\"],null],[[[41,[28,[37,10],[[30,1,[\\\"authSource\\\"]],\\\"Password\\\"],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Current Password\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,1,\\\"oldPassword\\\"],[24,\\\"placeholder\\\",\\\"Current password\\\"]],null,null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"New Password\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,11],[[24,1,\\\"newPassword\\\"],[24,\\\"placeholder\\\",\\\"New password\\\"]],null,null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Confirm Password\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,11],[[24,1,\\\"confirmPassword\\\"],[24,\\\"placeholder\\\",\\\"Confirm new password\\\"]],null,null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-10\\\"],[12],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Update Profile\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@model\\\",\\\"opt\\\"],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"unless\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"eq\\\",\\\"ui/password-input\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account-profile.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /* global $ */\n\n  const PasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/;\n  let AccountProfileComponent = _exports.default = (_class = class AccountProfileComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"authSources\", ['Password', 'Saml', 'Google']);\n      _defineProperty(this, \"isSamlOnPremEnabled\", _environment.config.isSamlOnPremEnabled);\n      _initializerDefineProperty(this, \"currentAuthSource\", _descriptor, this);\n      this.currentAuthSource = this.args.model.authSource;\n    }\n    updateProfile(e) {\n      e.preventDefault();\n      const updatedUser = {};\n      const name = $('#name').val();\n      const email = $('#email').val();\n      const authSource = this.currentAuthSource;\n      if (authSource === 'Password') {\n        const oldPassword = $('#oldPassword').val();\n        const newPassword = $('#newPassword').val();\n        const confirmPassword = $('#confirmPassword').val();\n        const passwordFieldsAreEmpty = [oldPassword, newPassword, confirmPassword].every(value => _.isEmpty(value));\n        if (!passwordFieldsAreEmpty) {\n          if (this.args.model.authSource === 'Password') {\n            if (!_.isEmpty(oldPassword) && _.isEmpty(newPassword)) {\n              _lib.default.error('Please set a new password to change it, otherwise leave all password fields blank');\n              return;\n            }\n            if (_.isEmpty(oldPassword) && !_.isEmpty(newPassword)) {\n              _lib.default.error('Please enter your old password in order to set a new one');\n              return;\n            }\n          } else if (_.isEmpty(newPassword)) {\n            _lib.default.error('Please pick a password as part of this profile update.');\n            return;\n          }\n          if (!_.isEmpty(newPassword) || !_.isEmpty(confirmPassword)) {\n            if (newPassword !== confirmPassword) {\n              _lib.default.error('New password did not match, please input again');\n              $('#newPassword').val('');\n              $('#confirmPassword').val('');\n              return;\n            }\n            if (newPassword === oldPassword) {\n              _lib.default.error('New password cannot be the same as the old one');\n              $('#newPassword').val('');\n              $('#confirmPassword').val('');\n              return;\n            }\n            if (newPassword.length < 8 || newPassword.length > 100) {\n              _lib.default.error('Passwords must be between 8 and 100 characters long.');\n              $('#newPassword').val('');\n              $('#confirmPassword').val('');\n              return;\n            }\n            if (!PasswordRegex.test(newPassword)) {\n              _lib.default.error('Passwords must contain 1 uppercase letter, 1 lowercase letter, and 1 number');\n              $('#newPassword').val('');\n              $('#confirmPassword').val('');\n              return;\n            }\n          }\n          if (!_.isEmpty(oldPassword)) updatedUser.oldPassword = oldPassword;\n          if (!_.isEmpty(newPassword)) updatedUser.newPassword = newPassword;\n        }\n      }\n      if (!_.isEmpty(name)) updatedUser.name = name;\n      if (!_.isEmpty(email)) updatedUser.email = email;\n      updatedUser.authSource = authSource;\n      _server.default.updateUser(_environment.config.currentUser.id, updatedUser).then(data => {\n        (0, _object.set)(_environment.config.currentUser, 'name', data.name);\n        (0, _object.set)(_environment.config.currentUser, 'email', data.email);\n        (0, _object.set)(_environment.config.currentUser, 'hmac', data.hmac);\n        _lib.default.info('Successfully updated profile', 'Profile Updated');\n        _lib.default.intercomUpdate(_environment.config.currentUser);\n      });\n    }\n    updateAuthSource(value) {\n      this.currentAuthSource = value;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentAuthSource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateProfile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateProfile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAuthSource\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAuthSource\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountProfileComponent);\n});","define(\"@testable/shared-ui/components/account-settings/package-managers\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"pkgToggle\" class=\"panel\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <Ui::Icon @icon=\"fa fa-plus\" role=\"button\" data-bs-toggle=\"collapse\" href=\"#pkg\" aria-expanded=\"false\"  aria-controls=\"pkg\"\n              class=\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\" />\n        <strong> Package Managers</strong>\n      </h4>\n    </div>\n    <div id=\"pkg\" class=\"collapse\" aria-expanded=\"false\" {{did-insert this.onPanelInsert}}>\n      <div class=\"panel-body\">\n      <div class=\"form-group\">\n        <label>\n          Custom .npmrc File <Ui::InfoIcon @isHtml={{true}}\n                                         @content=\"For scenario types (e.g. WebDriver.io Selenium) that use NPM. Defines a custom .npmrc file to use.\"\n                                         @placement=\"bottom\" />\n        </label>\n        {{#if this.npmrcEditable}}\n          <div class=\"m-b-5\">\n            <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.hasCustomNpmrc}} {{on \"change\" (fn this.onCheckboxChange \"hasCustomNpmrc\")}} /> Enable custom .npmrc file</label>\n          </div>\n          {{#if this.hasCustomNpmrc}}\n            <Textarea @value={{this.customNpmrc}}\n                      {{on \"input\" (fn this.onFieldChange \"customNpmrc\")}}\n                      placeholder=\"Your .npmrc file\"\n                      class=\"form-control\"\n                      rows=\"5\" />\n          {{/if}}\n        {{else}}\n          <Textarea @value={{this.customNpmrc}}\n                    disabled=\"true\"\n                    placeholder=\"Your .npmrc file\"\n                    class=\"form-control\"\n                    rows=\"5\" />\n        {{/if}}\n      </div>\n  \n      <div class=\"form-group\">\n        <label>\n          OpenFin Desktop Owner Settings (Json)\n          <Ui::InfoIcon @isHtml={{true}}\n                        @content=\"The OpenFin desktop owner settings file is a JSON file that lets you override\n                        various settings like <code>assetsUrl</code>, the URL the RVM uses to download runtime versions.\n                        See https://developers.openfin.co/docs/desktop-owner-settings for more details.\"\n                        @placement=\"bottom\" />\n        </label>\n        {{#if this.openFinEditable}}\n          <div class=\"m-b-5\">\n            <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.hasCustomOpenFin}} {{on \"change\" (fn this.onCheckboxChange \"hasCustomOpenFin\")}} /> Enable OpenFin Desktop Owner Settings (JSON)</label>\n          </div>\n          {{#if this.hasCustomOpenFin}}\n            <Ui::AceEditor @id=\"openFinSettings\"\n                           @placeholderText=\"Your OpenFin Desktop Owner Settings (JSON)\"\n                           @code={{this.openFinSettings}}\n                           @codeChanged={{this.updateOpenFinSettings}}\n                           @wrap={{true}}\n                           @mode=\"ace/mode/json\"\n                           @height=\"160\" />\n          {{/if}}\n        {{else}}\n          <Ui::AceEditor @id=\"openFinSettings\"\n                         @placeholderText=\"Your OpenFin Desktop Owner Settings (JSON)\"\n                         @code={{this.openFinSettings}}\n                         @readonly={{true}}\n                         @wrap={{true}}\n                         @mode=\"ace/mode/json\"\n                         @height=\"160\" />\n        {{/if}}\n      </div>\n  \n      <div class=\"form-group\">\n        <label>\n          Maven settings.xml File <Ui::InfoIcon @isHtml={{true}}\n                                            @content=\"For Java related scenario that utilize Maven this settings.xml file will be placed at %USER_HOME%/.m2/settings.xml on each test runner while running your test.\"\n                                            @placement=\"bottom\" />\n        </label>\n        <div class=\"m-b-5\">\n          <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.hasMvnSettings}} {{on \"change\" (fn this.onCheckboxChange \"hasMvnSettings\")}} /> Enable Maven settings.xml</label>\n        </div>\n        {{#if this.hasMvnSettings}}\n          <Textarea @value={{this.mvnSettings}}\n                    {{on \"input\" (fn this.onFieldChange \"mvnSettings\")}}\n                    placeholder=\"Your Maven settings.xml file\"\n                    class=\"form-control\"\n                    rows=\"5\" />\n        {{/if}}\n      </div>\n      {{#if this.globalMvnSettings}}\n        <div class=\"form-group\">\n          <label>\n            Global Maven settings.xml File <Ui::InfoIcon\n                                                @isHtml={{true}}\n                                                @content=\"For Java related scenario that utilize Maven this settings.xml file will be placed at ${maven.home}/conf/settings.xml on each test runner as a global settings.xml file. To override any of these settings please provide your own org-specific settings.xml file above.\"\n                                                @placement=\"bottom\" />\n          </label>\n          <Textarea @value={{this.globalMvnSettings}}\n                    placeholder=\"Global Maven settings.xml file\"\n                    class=\"form-control\"\n                    rows=\"5\"\n                    disabled=\"true\" />\n        </div>\n      {{/if}}\n      <div class=\"form-group\">\n        <label>\n          Custom Pip Config File <Ui::InfoIcon @isHtml={{true}}\n                                           @content=\"For scenario types that use Python. Defines a custom pip config file to use.\"\n                                           @placement=\"bottom\" />\n        </label>\n        {{#if this.pipEditable}}\n          <div class=\"m-b-5\">\n            <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.hasPipSettings}} {{on \"change\" (fn this.onCheckboxChange \"hasPipSettings\")}} /> Enable custom pip config file</label>\n          </div>\n          {{#if this.hasPipSettings}}\n            <Textarea @value={{this.pipSettings}}\n                      {{on \"input\" (fn this.onFieldChange \"pipSettings\")}}\n                      placeholder=\"Your pip config file\"\n                      class=\"form-control\"\n                      rows=\"5\" />\n          {{/if}}\n        {{else}}\n          <Textarea @value={{this.pipSettings}}\n                    disabled=\"true\"\n                    placeholder=\"Your pip config file\"\n                    class=\"form-control\"\n                    rows=\"5\" />\n        {{/if}}\n      </div>\n      <div class=\"form-group\">\n        <label>\n          Playwright Download Host <Ui::InfoIcon @isHtml={{true}}\n                                                @content=\"Host from which to download Playwright browsers (Chromium, Firefox, Webkit). Set as the PLAYWRIGHT_DOWNLOAD_HOST environment variable when running Playwright.\"\n                                                @placement=\"bottom\" />\n        </label>\n        {{#if this.playwrightDownloadHostEditable}}\n          <div class=\"m-b-5\">\n            <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.hasPlaywrightSettings}} {{on \"change\" (fn this.onCheckboxChange \"hasPlaywrightSettings\")}} /> Enable custom Playwright download host</label>\n          </div>\n          {{#if this.hasPlaywrightSettings}}\n            <Input @value={{this.playwrightDownloadHost}}\n                   {{on \"input\" (fn this.onFieldChange \"playwrightDownloadHost\")}}\n                   @type=\"text\"\n                   placeholder=\"Your Playwright Download Host\"\n                   class=\"form-control\"\n            />\n          {{/if}}\n        {{else}}\n          <Input @value={{this.playwrightDownloadHost}}\n                 @type=\"text\"\n                 placeholder=\"Your Playwright Download Host\"\n                 class=\"form-control\"\n                 disabled=\"true\"\n          />\n        {{/if}}\n      </div>\n      <div class=\"form-group\">\n        <label>\n          JMeter Plugin Repos <Ui::InfoIcon @isHtml={{true}}\n                                                 @content=\"Specify a semi-colon separated list of plugin repos from which to download JMeter plugins. Will be set as the jpgc.repo.address JMeter property.\"\n                                                 @placement=\"bottom\" />\n        </label>\n        <div class=\"m-b-5\">\n          <label class=\"normal\"><Input @type=\"checkbox\" {{on \"change\" this.onClickJmeterCheckbox}} @checked={{this.showJmeterPluginRepos}} /> Enable JMeter Plugin Repos</label>\n        </div>\n        {{#if this.showJmeterPluginRepos}}\n          <Input @value={{this.jmeterPluginRepos}}\n                  {{on \"input\" (fn this.onFieldChange \"jmeterPluginRepos\")}}\n                  @type=\"text\"\n                  placeholder=\"Your JMeter Plugin Repos\"\n                  class=\"form-control\"\n          />\n        {{/if}}\n      </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,1,\\\"pkgToggle\\\"],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[24,6,\\\"#pkg\\\"],[24,\\\"aria-expanded\\\",\\\"false\\\"],[24,\\\"aria-controls\\\",\\\"pkg\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\" Package Managers\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[11,0],[24,1,\\\"pkg\\\"],[24,0,\\\"collapse\\\"],[24,\\\"aria-expanded\\\",\\\"false\\\"],[4,[38,4],[[30,0,[\\\"onPanelInsert\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Custom .npmrc File \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"For scenario types (e.g. WebDriver.io Selenium) that use NPM. Defines a custom .npmrc file to use.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"npmrcEditable\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[28,[37,10],[[30,0,[\\\"onCheckboxChange\\\"]],\\\"hasCustomNpmrc\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"hasCustomNpmrc\\\"]]]],null],[1,\\\" Enable custom .npmrc file\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasCustomNpmrc\\\"]],[[[1,\\\"          \\\"],[8,[39,11],[[24,\\\"placeholder\\\",\\\"Your .npmrc file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"],[4,[38,9],[\\\"input\\\",[28,[37,10],[[30,0,[\\\"onFieldChange\\\"]],\\\"customNpmrc\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"customNpmrc\\\"]]]],null],[1,\\\"\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[8,[39,11],[[24,\\\"disabled\\\",\\\"true\\\"],[24,\\\"placeholder\\\",\\\"Your .npmrc file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"customNpmrc\\\"]]]],null],[1,\\\"\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        OpenFin Desktop Owner Settings (Json)\\\\n        \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"The OpenFin desktop owner settings file is a JSON file that lets you override\\\\n                      various settings like <code>assetsUrl</code>, the URL the RVM uses to download runtime versions.\\\\n                      See https://developers.openfin.co/docs/desktop-owner-settings for more details.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"openFinEditable\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[28,[37,10],[[30,0,[\\\"onCheckboxChange\\\"]],\\\"hasCustomOpenFin\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"hasCustomOpenFin\\\"]]]],null],[1,\\\" Enable OpenFin Desktop Owner Settings (JSON)\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasCustomOpenFin\\\"]],[[[1,\\\"          \\\"],[8,[39,12],null,[[\\\"@id\\\",\\\"@placeholderText\\\",\\\"@code\\\",\\\"@codeChanged\\\",\\\"@wrap\\\",\\\"@mode\\\",\\\"@height\\\"],[\\\"openFinSettings\\\",\\\"Your OpenFin Desktop Owner Settings (JSON)\\\",[30,0,[\\\"openFinSettings\\\"]],[30,0,[\\\"updateOpenFinSettings\\\"]],true,\\\"ace/mode/json\\\",\\\"160\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[8,[39,12],null,[[\\\"@id\\\",\\\"@placeholderText\\\",\\\"@code\\\",\\\"@readonly\\\",\\\"@wrap\\\",\\\"@mode\\\",\\\"@height\\\"],[\\\"openFinSettings\\\",\\\"Your OpenFin Desktop Owner Settings (JSON)\\\",[30,0,[\\\"openFinSettings\\\"]],true,true,\\\"ace/mode/json\\\",\\\"160\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Maven settings.xml File \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"For Java related scenario that utilize Maven this settings.xml file will be placed at %USER_HOME%/.m2/settings.xml on each test runner while running your test.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[28,[37,10],[[30,0,[\\\"onCheckboxChange\\\"]],\\\"hasMvnSettings\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"hasMvnSettings\\\"]]]],null],[1,\\\" Enable Maven settings.xml\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasMvnSettings\\\"]],[[[1,\\\"        \\\"],[8,[39,11],[[24,\\\"placeholder\\\",\\\"Your Maven settings.xml file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"],[4,[38,9],[\\\"input\\\",[28,[37,10],[[30,0,[\\\"onFieldChange\\\"]],\\\"mvnSettings\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mvnSettings\\\"]]]],null],[1,\\\"\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"globalMvnSettings\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n          Global Maven settings.xml File \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"For Java related scenario that utilize Maven this settings.xml file will be placed at ${maven.home}/conf/settings.xml on each test runner as a global settings.xml file. To override any of these settings please provide your own org-specific settings.xml file above.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,11],[[24,\\\"placeholder\\\",\\\"Global Maven settings.xml file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"],[24,\\\"disabled\\\",\\\"true\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"globalMvnSettings\\\"]]]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Custom Pip Config File \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"For scenario types that use Python. Defines a custom pip config file to use.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"pipEditable\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[28,[37,10],[[30,0,[\\\"onCheckboxChange\\\"]],\\\"hasPipSettings\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"hasPipSettings\\\"]]]],null],[1,\\\" Enable custom pip config file\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasPipSettings\\\"]],[[[1,\\\"          \\\"],[8,[39,11],[[24,\\\"placeholder\\\",\\\"Your pip config file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"],[4,[38,9],[\\\"input\\\",[28,[37,10],[[30,0,[\\\"onFieldChange\\\"]],\\\"pipSettings\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"pipSettings\\\"]]]],null],[1,\\\"\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[8,[39,11],[[24,\\\"disabled\\\",\\\"true\\\"],[24,\\\"placeholder\\\",\\\"Your pip config file\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"5\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"pipSettings\\\"]]]],null],[1,\\\"\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Playwright Download Host \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Host from which to download Playwright browsers (Chromium, Firefox, Webkit). Set as the PLAYWRIGHT_DOWNLOAD_HOST environment variable when running Playwright.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"playwrightDownloadHostEditable\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[28,[37,10],[[30,0,[\\\"onCheckboxChange\\\"]],\\\"hasPlaywrightSettings\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"hasPlaywrightSettings\\\"]]]],null],[1,\\\" Enable custom Playwright download host\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasPlaywrightSettings\\\"]],[[[1,\\\"          \\\"],[8,[39,8],[[24,\\\"placeholder\\\",\\\"Your Playwright Download Host\\\"],[24,0,\\\"form-control\\\"],[4,[38,9],[\\\"input\\\",[28,[37,10],[[30,0,[\\\"onFieldChange\\\"]],\\\"playwrightDownloadHost\\\"],null]],null]],[[\\\"@value\\\",\\\"@type\\\"],[[30,0,[\\\"playwrightDownloadHost\\\"]],\\\"text\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"placeholder\\\",\\\"Your Playwright Download Host\\\"],[24,0,\\\"form-control\\\"],[24,\\\"disabled\\\",\\\"true\\\"]],[[\\\"@value\\\",\\\"@type\\\"],[[30,0,[\\\"playwrightDownloadHost\\\"]],\\\"text\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        JMeter Plugin Repos \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Specify a semi-colon separated list of plugin repos from which to download JMeter plugins. Will be set as the jpgc.repo.address JMeter property.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,9],[\\\"change\\\",[30,0,[\\\"onClickJmeterCheckbox\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"showJmeterPluginRepos\\\"]]]],null],[1,\\\" Enable JMeter Plugin Repos\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showJmeterPluginRepos\\\"]],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"placeholder\\\",\\\"Your JMeter Plugin Repos\\\"],[24,0,\\\"form-control\\\"],[4,[38,9],[\\\"input\\\",[28,[37,10],[[30,0,[\\\"onFieldChange\\\"]],\\\"jmeterPluginRepos\\\"],null]],null]],[[\\\"@value\\\",\\\"@type\\\"],[[30,0,[\\\"jmeterPluginRepos\\\"]],\\\"text\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"h4\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"did-insert\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"if\\\",\\\"input\\\",\\\"on\\\",\\\"fn\\\",\\\"textarea\\\",\\\"ui/ace-editor\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account-settings/package-managers.hbs\",\n    \"isStrictMode\": false\n  });\n  /* global $ */\n\n  const DefaultNpmrc = 'registry=https://registry.npmjs.org/';\n  const JmeterPluginRepos = 'https://jmeter-plugins.org/repo/;http://my.intranet.site/plugins-repo.json';\n  let PackageManagers = _exports.default = (_class = class PackageManagers extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"customNpmrc\", _descriptor, this);\n      _initializerDefineProperty(this, \"npmrcEditable\", _descriptor2, this);\n      _initializerDefineProperty(this, \"hasCustomNpmrc\", _descriptor3, this);\n      _initializerDefineProperty(this, \"pipEditable\", _descriptor4, this);\n      _initializerDefineProperty(this, \"pipSettings\", _descriptor5, this);\n      _initializerDefineProperty(this, \"hasPipSettings\", _descriptor6, this);\n      _initializerDefineProperty(this, \"openFinEditable\", _descriptor7, this);\n      _initializerDefineProperty(this, \"openFinSettings\", _descriptor8, this);\n      _initializerDefineProperty(this, \"hasCustomOpenFin\", _descriptor9, this);\n      _initializerDefineProperty(this, \"globalMvnSettings\", _descriptor0, this);\n      _initializerDefineProperty(this, \"mvnSettings\", _descriptor1, this);\n      _initializerDefineProperty(this, \"hasMvnSettings\", _descriptor10, this);\n      _initializerDefineProperty(this, \"playwrightDownloadHost\", _descriptor11, this);\n      _initializerDefineProperty(this, \"playwrightDownloadHostEditable\", _descriptor12, this);\n      _initializerDefineProperty(this, \"hasPlaywrightSettings\", _descriptor13, this);\n      _initializerDefineProperty(this, \"showJmeterPluginRepos\", _descriptor14, this);\n      _initializerDefineProperty(this, \"jmeterPluginRepos\", _descriptor15, this);\n      this._loadFromSettings(this.args.settings);\n    }\n    onPanelInsert() {\n      if (this.customNpmrc || this.mvnSettings || this.openFinSettings || this.pipSettings) {\n        $('#pkg').collapse('show');\n      }\n    }\n    _loadFromSettings(settings) {\n      if (!settings) return;\n      const customNpmrc = _environment.config.customNpmrc || settings.customNpmrc;\n      this.customNpmrc = customNpmrc ? atob(customNpmrc) : '';\n      this.hasCustomNpmrc = settings.hasCustomNpmrc === 'true';\n      this.npmrcEditable = !_environment.config.customNpmrc;\n      const pipSettings = _environment.config.pipSettings || settings.pipSettings;\n      this.pipSettings = pipSettings ? atob(pipSettings) : '';\n      this.hasPipSettings = settings.hasPipSettings === 'true';\n      this.pipEditable = !_environment.config.pipSettings;\n      const openFinSettings = _environment.config.openFinSettings || settings.openFinSettings;\n      this.openFinSettings = openFinSettings ? atob(openFinSettings) : '';\n      this.openFinEditable = !_environment.config.openFinSettings;\n      this.hasCustomOpenFin = settings.hasCustomOpenFin === 'true';\n      this.mvnSettings = settings.mvnSettings ? atob(settings.mvnSettings) : '';\n      this.hasMvnSettings = settings.hasMvnSettings === 'true';\n      if (_environment.config.mvnSettings) this.globalMvnSettings = atob(_environment.config.mvnSettings);\n      this.hasPlaywrightSettings = settings.hasPlaywrightSettings === 'true';\n      const customPlaywrightDownloadHost = _environment.config.playwrightDownloadHost || settings.playwrightDownloadHost;\n      this.playwrightDownloadHost = customPlaywrightDownloadHost ? atob(customPlaywrightDownloadHost) : '';\n      this.playwrightDownloadHostEditable = !_environment.config.playwrightDownloadHost;\n      this.showJmeterPluginRepos = settings.jmeterPluginRepos;\n      this.jmeterPluginRepos = settings.jmeterPluginRepos;\n      this._notifyParent();\n    }\n    _notifyParent() {\n      if (!this.args.onSettingsChanged) return;\n      const hasCustomNpmrc = this.hasCustomNpmrc;\n      const customNpmrc = _environment.config.customNpmrc ? null : hasCustomNpmrc ? btoa(this.customNpmrc) : '';\n      const hasPipSettings = this.hasPipSettings;\n      const pipSettings = _environment.config.pipSettings ? null : hasPipSettings ? btoa(this.pipSettings) : '';\n      const hasCustomOpenFin = this.hasCustomOpenFin;\n      const openFinSettings = _environment.config.openFinSettings ? null : hasCustomOpenFin ? btoa(this.openFinSettings) : '';\n      const hasMvnSettings = this.hasMvnSettings;\n      const mvnSettings = hasMvnSettings ? btoa(this.mvnSettings) : null;\n      const hasPlaywrightSettings = this.hasPlaywrightSettings + '';\n      const playwrightDownloadHost = this.hasPlaywrightSettings ? btoa(this.playwrightDownloadHost) : null;\n      const result = {\n        hasCustomNpmrc: '' + hasCustomNpmrc,\n        customNpmrc,\n        hasPipSettings: '' + hasPipSettings,\n        pipSettings,\n        hasCustomOpenFin: '' + hasCustomOpenFin,\n        openFinSettings,\n        hasMvnSettings,\n        mvnSettings,\n        hasPlaywrightSettings,\n        playwrightDownloadHost\n      };\n      if (this.showJmeterPluginRepos) {\n        result.jmeterPluginRepos = this.jmeterPluginRepos;\n      }\n      this.args.onSettingsChanged(result);\n    }\n    onFieldChange(field, event) {\n      this[field] = event.target.value;\n      this._notifyParent();\n    }\n    onCheckboxChange(field) {\n      if (field === 'hasCustomNpmrc' && this.hasCustomNpmrc && !this.customNpmrc) {\n        this.customNpmrc = DefaultNpmrc;\n      }\n      this._notifyParent();\n    }\n    updateOpenFinSettings(type, value) {\n      this.openFinSettings = value;\n      this._notifyParent();\n    }\n    onClickJmeterCheckbox(event) {\n      this.showJmeterPluginRepos = event.target.checked;\n      this.jmeterPluginRepos = this.showJmeterPluginRepos ? JmeterPluginRepos : '';\n      this._notifyParent();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"customNpmrc\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"npmrcEditable\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"hasCustomNpmrc\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"pipEditable\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"pipSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"hasPipSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"openFinEditable\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"openFinSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"hasCustomOpenFin\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"globalMvnSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"mvnSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"hasMvnSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"playwrightDownloadHost\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"playwrightDownloadHostEditable\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"hasPlaywrightSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"showJmeterPluginRepos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"jmeterPluginRepos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onPanelInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPanelInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFieldChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFieldChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCheckboxChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCheckboxChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateOpenFinSettings\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateOpenFinSettings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onClickJmeterCheckbox\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClickJmeterCheckbox\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, PackageManagers);\n});","define(\"@testable/shared-ui/components/account/billing\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"billing-container\">\n    <div class=\"sidebar-nav position-static\">\n      <h1 class=\"page-header billing-header-title\">Billing</h1>\n      <ul class=\"nav flex-column nav-testable position-fixed\">\n        <LinkTo @route=\"account.billing.subscription\" class=\"nav-item {{if this.isActive 'active'}}\">\n          <Ui::Icon @icon=\"fa fa-money-check\" class=\"d-inline d-xl-none\" data-bs-toggle=\"tooltip\" data-bs-title=\"Summary\" />\n          <Ui::Icon @icon=\"fa fa-money-check\" class=\"d-none d-xl-inline\"> Summary</Ui::Icon>\n        </LinkTo>\n        {{#if this.showCreditCardLink}}\n          <LinkTo @route=\"account.billing.cards\" class=\"nav-item \">\n            <Ui::Icon @icon=\"fa fa-credit-card\" class=\"d-inline d-xl-none\" data-bs-toggle=\"tooltip\" data-bs-title=\"Credit Cards\" />\n            <Ui::Icon @icon=\"fa fa-credit-card\" class=\"d-none d-xl-inline\"> Credit Cards</Ui::Icon>\n          </LinkTo>\n        {{/if}}\n        <LinkTo @route=\"account.billing.history\" class=\"nav-item\">\n          <Ui::Icon @icon=\"fa fa-chart-line\" class=\"d-inline d-xl-none\" data-bs-toggle=\"tooltip\" data-bs-title=\"Usage History\" />\n          <Ui::Icon @icon=\"fa fa-chart-line\" class=\"d-none d-xl-inline\"> Usage History</Ui::Icon>\n        </LinkTo>\n        {{#if this.showPrimaryOrgMenuItem}}\n          {{#unless this.isOnPrem}}\n            <LinkTo @route=\"account.billing.invoices\" class=\"nav-item\">\n              <Ui::Icon @icon=\"fa fa-file\" class=\"d-inline d-xl-none\" data-bs-toggle=\"tooltip\" data-bs-title=\"Invoices\" />\n              <Ui::Icon @icon=\"fa fa-file\" class=\"d-none d-xl-inline\"> Invoices</Ui::Icon>\n            </LinkTo>\n          {{/unless}}\n          <LinkTo @route=\"account.billing.allocations\" class=\"nav-item\">\n            <Ui::Icon @icon=\"fa fa-calculator\" class=\"d-inline d-xl-none\" data-bs-toggle=\"tooltip\" data-bs-title=\"Allocations\" />\n            <Ui::Icon @icon=\"fa fa-calculator\" class=\"d-none d-xl-inline\"> Allocations</Ui::Icon>\n          </LinkTo>\n        {{/if}}\n      </ul>\n    </div>\n    <div class=\"sidebar-panel billing-panel\">\n      {{outlet}}\n    </div>\n  </div>\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"billing-container\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"sidebar-nav position-static\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header billing-header-title\\\"],[12],[1,\\\"Billing\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav flex-column nav-testable position-fixed\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],[[16,0,[29,[\\\"nav-item \\\",[52,[30,0,[\\\"isActive\\\"]],\\\"active\\\"]]]]],[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"d-inline d-xl-none\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Summary\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-money-check\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"d-none d-xl-inline\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-money-check\\\"]],[[\\\"default\\\"],[[[[1,\\\" Summary\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCreditCardLink\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,0,\\\"nav-item \\\"]],[[\\\"@route\\\"],[\\\"account.billing.cards\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"d-inline d-xl-none\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Credit Cards\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-credit-card\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"d-none d-xl-inline\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-credit-card\\\"]],[[\\\"default\\\"],[[[[1,\\\" Credit Cards\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,3],[[24,0,\\\"nav-item\\\"]],[[\\\"@route\\\"],[\\\"account.billing.history\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"d-inline d-xl-none\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Usage History\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-chart-line\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"d-none d-xl-inline\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-chart-line\\\"]],[[\\\"default\\\"],[[[[1,\\\" Usage History\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPrimaryOrgMenuItem\\\"]],[[[41,[51,[30,0,[\\\"isOnPrem\\\"]]],[[[1,\\\"          \\\"],[8,[39,3],[[24,0,\\\"nav-item\\\"]],[[\\\"@route\\\"],[\\\"account.billing.invoices\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,5],[[24,0,\\\"d-inline d-xl-none\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Invoices\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\"\\\\n            \\\"],[8,[39,5],[[24,0,\\\"d-none d-xl-inline\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\" Invoices\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[8,[39,3],[[24,0,\\\"nav-item\\\"]],[[\\\"@route\\\"],[\\\"account.billing.allocations\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"d-inline d-xl-none\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Allocations\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-calculator\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"d-none d-xl-inline\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-calculator\\\"]],[[\\\"default\\\"],[[[[1,\\\" Allocations\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"sidebar-panel billing-panel\\\"],[12],[1,\\\"\\\\n    \\\"],[46,[28,[37,8],null,null],null,null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[],[\\\"div\\\",\\\"h1\\\",\\\"ul\\\",\\\"link-to\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingComponent = _exports.default = (_class = class AccountBillingComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedTab\", _descriptor2, this);\n      _initializerDefineProperty(this, \"content\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showCreditCardLink\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showPrimaryOrgMenuItem\", _descriptor5, this);\n      _initializerDefineProperty(this, \"cards\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor7, this);\n      _initializerDefineProperty(this, \"selectedCard\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showCardModal\", _descriptor9, this);\n      _initializerDefineProperty(this, \"cardsErrorText\", _descriptor0, this);\n      _initializerDefineProperty(this, \"isOnPrem\", _descriptor1, this);\n      this.showCreditCardLink = _environment.config.currentUser.org?.account?.paymentGateway === 'Stripe' && _environment.config.currentUser.org?.primaryOrg === undefined;\n      this.showPrimaryOrgMenuItem = _environment.config.currentUser.org?.primaryOrg === undefined;\n    }\n    get isActive() {\n      let url = this.router.currentURL;\n      if (url.startsWith('/account/billing/plans/') || url.startsWith('/account/billing/subscriptions/') || url.startsWith('/account/billing/buy-plan') || url.startsWith('/account/billing/change-plan')) {\n        return true;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'currentSubscription';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"content\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showCreditCardLink\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showPrimaryOrgMenuItem\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"cards\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"selectedCard\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showCardModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"cardsErrorText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"isOnPrem\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.isOnPrem;\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingComponent);\n});","define(\"@testable/shared-ui/components/account/billing/addon-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/providers\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _environment, _providers, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/providers\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"addOnModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            {{if this.existingAddon 'Edit' 'Purchase'}} Add-On\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body addon-modal-body\">\n          {{#if this.isLoading}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading details ...\n          {{else}}\n            <div class=\"row\">\n              <div class=\"col-3 text-right\"><label>Add On Type</label></div>\n              <div class=\"col-9\">\n                <Ui::PSelect @options={{this.addonsOptions}} @selected={{this.addon}}\n                             @onChange={{this.addonSelected}}\n                             @disabled={{this.existingAddon}}\n                             @placeholder=\"Choose add-on type\"\n                             as |option|>\n                  {{option.product.description}}\n                </Ui::PSelect>\n              </div>\n            </div>\n            {{#if (and (gt this.addon.priceSchedule.maxQuantity 1) (not-eq this.addon.product.code 'NotificationCredits'))}}\n              <div class=\"row m-t-10 animate__animated fadeIn\">\n                <div class=\"col-3 text-right\">&nbsp;<label>Quantity</label></div>\n                <div class=\"col-9\">\n                  {{#if (lte this.addon.priceSchedule.maxQuantity 100) }}\n                    <Ui::PSelect @options={{this.quantityMenu}} @selected={{this.quantity}}\n                                 @placeholder=\"Quantity to purchase\"\n                                 @disabled={{@isReadOnly}}\n                                 class=\"m-b-5\"\n                                 @onChange={{this.quantityChange}} as |choice|>\n                      {{if (gt choice 0) choice 'Custom'}}\n                    </Ui::PSelect>\n                  {{/if}}\n  \n                  {{#if (or (gt this.addon.priceSchedule.maxQuantity 100) this.showCustomQuantity)}}\n                    <Input @type=\"number\"\n                           class=\"form-control input animate__animated fadeIn\"\n                           disabled={{@isReadOnly}}\n                           placeholder=\"{{this.addon.product.description}} Quantity\"\n                           onchange={{this.quantityChangeTyped}}\n                           @value={{this.customQuantity}}\n                           min={{this.addon.priceSchedule.minQuantity}}\n                           max={{this.addon.priceSchedule.maxQuantity}}\n                    />\n                  {{/if}}\n                </div>\n              </div>\n            {{/if}}\n            {{#if (eq this.addon.product.code 'NotificationCredits')}}\n              <div class=\"note note-info m-t-10\">\n                Notification credits cover SMS, WhatsApp, and voice notifications at the cost reported by Twilio.\n                You purchase a dollar balance; the amount used varies by notification type and destination.\n                <a href={{this.notificationCreditsDocsUrl}} target=\"_blank\" rel=\"noopener noreferrer\">Learn how notification credits work</a>.\n              </div>\n              <div class=\"row m-t-10 animate__animated fadeIn\">\n                <div class=\"col-3 text-right\">&nbsp;<label>{{this.addon.product.description}}</label></div>\n                <div class=\"col-9\">\n                  <div class=\"input-group\">\n                    <div class=\"input-group-prepend\"><span class=\"input-group-text\">$</span></div>\n                   <Input @type=\"number\"\n                           class=\"form-control input animate__animated fadeIn\"\n                           disabled={{@isReadOnly}}\n                           placeholder=\"{{this.addon.product.description}}\"\n                           onchange={{this.quantityChangeTyped}}\n                           @value={{this.quantity}}\n                    />\n                  </div>\n                </div>\n              </div>\n            {{/if}}\n            {{#if (eq this.addon.product.code 'EIP')}}\n              <div class=\"row m-t-10 animate__animated fadeIn\">\n                <div class=\"col-3 text-right\"><label>Region</label></div>\n                <div class=\"col-9\">\n                  <Ui::PSelect @options={{this.awsRegions}} @selected={{this.region}} @disabled={{@isReadOnly}}\n                               @onChange={{this.onRegionChange}} as |option|>\n                    {{option.description}} - ({{option.name}})\n                  </Ui::PSelect>\n                </div>\n              </div>\n            {{/if}}\n            {{#if (eq this.addon.product.code 'PublicIP')}}\n              <div class=\"row m-t-10 animate__animated fadeIn\">\n                <div class=\"col-3 text-right\"><label>Region</label></div>\n                <div class=\"col-9\">\n                  <Ui::PSelect @options={{this.azureRegions}} @selected={{this.region}} @disabled={{@isReadOnly}}\n                               @onChange={{this.onRegionChange}} as |option|>\n                    {{option.description}} - ({{option.name}})\n                  </Ui::PSelect>\n                </div>\n              </div>\n            {{/if}}\n            <div class=\"row m-t-10\">\n              <div class=\"col-3 text-right\"><label>Summary</label></div>\n              <div class=\"col-9 addon-summary-text\">\n                <label>\n                {{#if this.isFormNotValid }}\n                  Please fill form above\n                {{else}}\n                  {{#if this.existingAddon}}\n                    {{#if (and\n                              (gte this.getQuantity this.existingAddon.currentPeriod.includedQty )\n                              (not-eq this.addon.product.code 'NotificationCredits' )\n                            )\n                      }}\n                      You are about to change from {{this.existingAddon.currentPeriod.includedQty}} to {{this.quantity}}\n                      {{this.addon.product.description}} {{this.metadataText}}.\n                      The new price will be {{this.price}}\n                    {{else}}\n                      Your change from\n                      {{if (eq this.addon.product.code 'NotificationCredits') '$'}}{{this.existingAddon.currentPeriod.includedQty}}\n                      to\n                      {{if (eq this.addon.product.code 'NotificationCredits') '$'}}{{this.quantity}}\n                      {{this.addon.product.description}} {{this.metadataText}} will be effective {{print-date this.existingAddon.currentPeriod.endDate \"MMM D 'YY\"}}.\n                      The new price at that time will be {{this.price}}.\n                    {{/if}}\n                  {{else}}\n                    You are about to purchase\n                    {{#if (eq this.addon.product.code 'NotificationCredits')}}\n                      ${{this.getQuantity}} in {{this.addon.product.description}}\n                    {{else}}\n                      {{this.getQuantity}} {{this.addon.product.description}}\n                      for {{this.price}}\n                    {{/if}}\n                    {{this.expirationText}} {{this.metadataText}}\n                  {{/if}}\n                {{/if}}\n                </label>\n              </div>\n            </div>\n            {{#if this.isLoadingCardDetails}}\n              <div class=\"m-t-10\" role=\"status\"><Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Checking credit card ...</div>\n            {{else if this.cardCheckError}}\n              <div class=\"note note-danger m-t-10\" role=\"alert\">\n                {{this.cardCheckError}}\n                <button type=\"button\" class=\"btn btn-link\" {{on \"click\" this.loadCardDetails}}>Retry</button>\n              </div>\n            {{else if (and this.showCardDetails (not @isReadOnly))}}\n              <div class=\"note note-info m-t-10\">Add a credit card before purchasing this add-on.</div>\n              {{#unless this.isFormNotValid}}\n                <CreditCardForm\n                  @orgId={{this.billingOrgId}}\n                  @cardCreated={{this.cardCreated}}\n                  @cardError={{this.cardError}}\n                  @sibmitMessage=\"Add Card and Continue\"\n                />\n              {{/unless}}\n            {{/if}}\n            <div class=\"row m-t-10\">\n              <div class=\"col-3\">&nbsp;</div>\n              <div class=\"col-9\">\n                <button class=\"btn btn-primary\"\n                        disabled={{or @isReadOnly this.isSaving this.isFormNotValid this.isLoadingCardDetails this.cardCheckError this.showCardDetails}}\n                        onclick={{this.purchaseAddOn}}\n                        type=\"button\">\n                  {{#if this.isSaving}} Saving ... {{else}}\n                    {{#if this.existingAddon}} Update Add-On {{else}} Purchase Add-On {{/if}}\n                  {{/if}}\n                </button>\n              </div>\n            </div>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"addOnModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[52,[30,0,[\\\"existingAddon\\\"]],\\\"Edit\\\",\\\"Purchase\\\"]],[1,\\\" Add-On\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body addon-modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"          \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading details ...\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\"Add On Type\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@disabled\\\",\\\"@placeholder\\\"],[[30,0,[\\\"addonsOptions\\\"]],[30,0,[\\\"addon\\\"]],[30,0,[\\\"addonSelected\\\"]],[30,0,[\\\"existingAddon\\\"]],\\\"Choose add-on type\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,1,[\\\"product\\\",\\\"description\\\"]]],[1,\\\"\\\\n              \\\"]],[1]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[28,[37,9],[[30,0,[\\\"addon\\\",\\\"priceSchedule\\\",\\\"maxQuantity\\\"]],1],null],[28,[37,10],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"row m-t-10 animate__animated fadeIn\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[1,\\\" \\\"],[10,\\\"label\\\"],[12],[1,\\\"Quantity\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"addon\\\",\\\"priceSchedule\\\",\\\"maxQuantity\\\"]],100],null],[[[1,\\\"                  \\\"],[8,[39,7],[[24,0,\\\"m-b-5\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"quantityMenu\\\"]],[30,0,[\\\"quantity\\\"]],\\\"Quantity to purchase\\\",[30,2],[30,0,[\\\"quantityChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[52,[28,[37,9],[[30,3],0],null],[30,3],\\\"Custom\\\"]],[1,\\\"\\\\n                  \\\"]],[3]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[28,[37,9],[[30,0,[\\\"addon\\\",\\\"priceSchedule\\\",\\\"maxQuantity\\\"]],100],null],[30,0,[\\\"showCustomQuantity\\\"]]],null],[[[1,\\\"                  \\\"],[8,[39,13],[[24,0,\\\"form-control input animate__animated fadeIn\\\"],[16,\\\"disabled\\\",[30,2]],[16,\\\"placeholder\\\",[29,[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]],\\\" Quantity\\\"]]],[16,\\\"onchange\\\",[30,0,[\\\"quantityChangeTyped\\\"]]],[16,\\\"min\\\",[30,0,[\\\"addon\\\",\\\"priceSchedule\\\",\\\"minQuantity\\\"]]],[16,\\\"max\\\",[30,0,[\\\"addon\\\",\\\"priceSchedule\\\",\\\"maxQuantity\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"customQuantity\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-info m-t-10\\\"],[12],[1,\\\"\\\\n              Notification credits cover SMS, WhatsApp, and voice notifications at the cost reported by Twilio.\\\\n              You purchase a dollar balance; the amount used varies by notification type and destination.\\\\n              \\\"],[10,3],[15,6,[30,0,[\\\"notificationCreditsDocsUrl\\\"]]],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"Learn how notification credits work\\\"],[13],[1,\\\".\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"row m-t-10 animate__animated fadeIn\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[1,\\\" \\\"],[10,\\\"label\\\"],[12],[1,[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"$\\\"],[13],[13],[1,\\\"\\\\n                 \\\"],[8,[39,13],[[24,0,\\\"form-control input animate__animated fadeIn\\\"],[16,\\\"disabled\\\",[30,2]],[16,\\\"placeholder\\\",[29,[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]]]],[16,\\\"onchange\\\",[30,0,[\\\"quantityChangeTyped\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"quantity\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"EIP\\\"],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"row m-t-10 animate__animated fadeIn\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\"Region\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"awsRegions\\\"]],[30,0,[\\\"region\\\"]],[30,2],[30,0,[\\\"onRegionChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,4,[\\\"description\\\"]]],[1,\\\" - (\\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\")\\\\n                \\\"]],[4]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"PublicIP\\\"],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"row m-t-10 animate__animated fadeIn\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\"Region\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"azureRegions\\\"]],[30,0,[\\\"region\\\"]],[30,2],[30,0,[\\\"onRegionChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,5,[\\\"description\\\"]]],[1,\\\" - (\\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\")\\\\n                \\\"]],[5]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,0],[14,0,\\\"row m-t-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-3 text-right\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\"Summary\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-9 addon-summary-text\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isFormNotValid\\\"]],[[[1,\\\"                Please fill form above\\\\n\\\"]],[]],[[[41,[30,0,[\\\"existingAddon\\\"]],[[[41,[28,[37,8],[[28,[37,17],[[30,0,[\\\"getQuantity\\\"]],[30,0,[\\\"existingAddon\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]]],null],[28,[37,10],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null]],null],[[[1,\\\"                    You are about to change from \\\"],[1,[30,0,[\\\"existingAddon\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]]],[1,\\\" to \\\"],[1,[30,0,[\\\"quantity\\\"]]],[1,\\\"\\\\n                    \\\"],[1,[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]],[1,\\\" \\\"],[1,[30,0,[\\\"metadataText\\\"]]],[1,\\\".\\\\n                    The new price will be \\\"],[1,[30,0,[\\\"price\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    Your change from\\\\n                    \\\"],[1,[52,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null],\\\"$\\\"]],[1,[30,0,[\\\"existingAddon\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]]],[1,\\\"\\\\n                    to\\\\n                    \\\"],[1,[52,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null],\\\"$\\\"]],[1,[30,0,[\\\"quantity\\\"]]],[1,\\\"\\\\n                    \\\"],[1,[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]],[1,\\\" \\\"],[1,[30,0,[\\\"metadataText\\\"]]],[1,\\\" will be effective \\\"],[1,[28,[35,18],[[30,0,[\\\"existingAddon\\\",\\\"currentPeriod\\\",\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\".\\\\n                    The new price at that time will be \\\"],[1,[30,0,[\\\"price\\\"]]],[1,\\\".\\\\n\\\"]],[]]]],[]],[[[1,\\\"                  You are about to purchase\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"addon\\\",\\\"product\\\",\\\"code\\\"]],\\\"NotificationCredits\\\"],null],[[[1,\\\"                    $\\\"],[1,[30,0,[\\\"getQuantity\\\"]]],[1,\\\" in \\\"],[1,[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[1,[30,0,[\\\"getQuantity\\\"]]],[1,\\\" \\\"],[1,[30,0,[\\\"addon\\\",\\\"product\\\",\\\"description\\\"]]],[1,\\\"\\\\n                    for \\\"],[1,[30,0,[\\\"price\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[1,[30,0,[\\\"expirationText\\\"]]],[1,\\\" \\\"],[1,[30,0,[\\\"metadataText\\\"]]],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingCardDetails\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[14,\\\"role\\\",\\\"status\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Checking credit card ...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"cardCheckError\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-danger m-t-10\\\"],[14,\\\"role\\\",\\\"alert\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"cardCheckError\\\"]]],[1,\\\"\\\\n              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link\\\"],[24,4,\\\"button\\\"],[4,[38,19],[\\\"click\\\",[30,0,[\\\"loadCardDetails\\\"]]],null],[12],[1,\\\"Retry\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,0,[\\\"showCardDetails\\\"]],[28,[37,20],[[30,2]],null]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-info m-t-10\\\"],[12],[1,\\\"Add a credit card before purchasing this add-on.\\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isFormNotValid\\\"]]],[[[1,\\\"              \\\"],[8,[39,22],null,[[\\\"@orgId\\\",\\\"@cardCreated\\\",\\\"@cardError\\\",\\\"@sibmitMessage\\\"],[[30,0,[\\\"billingOrgId\\\"]],[30,0,[\\\"cardCreated\\\"]],[30,0,[\\\"cardError\\\"]],\\\"Add Card and Continue\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"]],[]],null]],[]]]],[]]],[1,\\\"          \\\"],[10,0],[14,0,\\\"row m-t-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[15,\\\"disabled\\\",[28,[37,12],[[30,2],[30,0,[\\\"isSaving\\\"]],[30,0,[\\\"isFormNotValid\\\"]],[30,0,[\\\"isLoadingCardDetails\\\"]],[30,0,[\\\"cardCheckError\\\"]],[30,0,[\\\"showCardDetails\\\"]]],null]],[15,\\\"onclick\\\",[30,0,[\\\"purchaseAddOn\\\"]]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                \\\"],[41,[30,0,[\\\"isSaving\\\"]],[[[1,\\\" Saving ... \\\"]],[]],[[[1,\\\"\\\\n                  \\\"],[41,[30,0,[\\\"existingAddon\\\"]],[[[1,\\\" Update Add-On \\\"]],[]],[[[1,\\\" Purchase Add-On \\\"]],[]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"option\\\",\\\"@isReadOnly\\\",\\\"choice\\\",\\\"option\\\",\\\"option\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"and\\\",\\\"gt\\\",\\\"not-eq\\\",\\\"lte\\\",\\\"or\\\",\\\"input\\\",\\\"eq\\\",\\\"a\\\",\\\"span\\\",\\\"gte\\\",\\\"print-date\\\",\\\"on\\\",\\\"not\\\",\\\"unless\\\",\\\"credit-card-form\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/addon-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPlanModalComponent = _exports.default = (_class = class AccountBillingPlanModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"addonsOptions\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"quantityMenu\", _descriptor4, this);\n      _initializerDefineProperty(this, \"awsRegions\", _descriptor5, this);\n      _initializerDefineProperty(this, \"azureRegions\", _descriptor6, this);\n      _initializerDefineProperty(this, \"customQuantity\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor8, this);\n      _initializerDefineProperty(this, \"isAddonSaved\", _descriptor9, this);\n      _initializerDefineProperty(this, \"showCardDetails\", _descriptor0, this);\n      _initializerDefineProperty(this, \"isLoadingCardDetails\", _descriptor1, this);\n      _initializerDefineProperty(this, \"cardCheckError\", _descriptor10, this);\n      _initializerDefineProperty(this, \"addon\", _descriptor11, this);\n      _initializerDefineProperty(this, \"purchased\", _descriptor12, this);\n      _initializerDefineProperty(this, \"existingAddon\", _descriptor13, this);\n      _initializerDefineProperty(this, \"region\", _descriptor14, this);\n      _initializerDefineProperty(this, \"quantity\", _descriptor15, this);\n      _initializerDefineProperty(this, \"showCustomQuantity\", _descriptor16, this);\n      if (this.args.existingAddon) {\n        this.existingAddon = this.args.existingAddon;\n      }\n      this.awsRegions = _providers.default.getAwsRegions(true);\n      this.azureRegions = _providers.default.getAzureRegions(true);\n    }\n    get notificationCreditsDocsUrl() {\n      return _environment.config.isMonitoring ? 'https://monitoring-docs.testable.io/guides/notification-credits' : 'https://docs.testable.io/notification-credits.html';\n    }\n    get getQuantity() {\n      return this.quantity < 1 ? this.customQuantity : this.quantity;\n    }\n    get price() {\n      let price = 0;\n      if (this.addon.priceSchedule?.maxQuantity === 1 && this.addon.priceSchedule?.prices[0].price) {\n        price = _lib.default.printCcy(this.api.billing.getPriceFromFrequency(this.addon.priceSchedule.prices[0].price, this.addon.frequency));\n        if (this.addon.frequency !== 'OneTime') price += '/mo';\n        return price;\n      } else if (this.addon.priceSchedule?.maxQuantity > 1) {\n        const quantity = this.getQuantity;\n        price = this.api.billing.getPrice(0, quantity, this.addon.priceSchedule);\n        price = _lib.default.printCcy(this.api.billing.getPriceFromFrequency(price, this.addon.frequency));\n        if (this.addon.frequency !== 'OneTime') price += '/mo';\n        return price;\n      } else if (this.addon.product.code == 'NotificationCredits') {\n        return 'same';\n      }\n      return \"FREE\";\n    }\n    get metadata() {\n      if ((this.addon?.product?.code === 'EIP' || this.addon?.product?.code === 'PublicIP') && this.region?.name) {\n        return {\n          region: this.region.name\n        };\n      }\n    }\n    get metadataText() {\n      if ((this.addon?.product?.code === 'EIP' || this.addon?.product?.code === 'PublicIP') && this.region?.name) {\n        return `with region ${this.region.description} (${this.region.name})`;\n      }\n    }\n    get expirationText() {\n      const expirationDays = this.addon.product.code === 'NotificationCredits' ? 365 : this.addon?.expirationDays;\n      if (expirationDays) return `expiring in ${expirationDays} days`;\n    }\n    get isFormNotValid() {\n      const quantity = _.isNull(this.quantity) || this.quantity < 0 ? this.customQuantity : this.quantity;\n      let status = this.isLoading || !quantity;\n      if (!status && (this.addon?.product?.code === 'EIP' || this.addon?.product?.code === 'PublicIP') && !this.region?.name) {\n        status = true;\n      }\n      return status;\n    }\n    async requestDetails() {\n      this.isLoading = true;\n      this.addonsOptions = this.api.billing.getPurchasedAddons(this.args.account.purchasedPlans);\n      if (this.args.preselectedAddon && !this.existingAddon) {\n        this.addon = this.addonsOptions.find(a => a.product?.code === this.args.preselectedAddon.product?.code);\n      }\n      if (this.existingAddon) {\n        const allAddons = this.api.billing.getAllPossibleAddons(this.args.account.purchasedPlans);\n        this.addon = this.api.billing.getPurchasedAddonFromPlans(allAddons, this.existingAddon);\n        this.quantity = this.existingAddon.currentPeriod.includedQty;\n        this.customQuantity = this.quantity;\n        const regions = this.addon?.product?.code === 'PublicIP' ? this.azureRegions : this.awsRegions;\n        this.region = regions.find(r => r.name === this.existingAddon.metadata.region);\n      }\n      await this.loadCardDetails();\n      this.isLoading = false;\n    }\n    get billingOrgId() {\n      return this.args.account.primaryOrgId || _environment.config.currentUser.orgId;\n    }\n    async loadCardDetails() {\n      if (this.existingAddon || this.args.account.paymentGateway !== 'Stripe') return true;\n      this.isLoadingCardDetails = true;\n      this.cardCheckError = null;\n      try {\n        const cards = await this.api.billing.getCards(this.billingOrgId);\n        this.showCardDetails = !Array.isArray(cards) || cards.length === 0;\n        return !this.showCardDetails;\n      } catch (error) {\n        this.cardCheckError = 'Unable to verify your credit card. Please retry before purchasing.';\n        return false;\n      } finally {\n        this.isLoadingCardDetails = false;\n      }\n    }\n    async cardCreated() {\n      await this.purchaseAddOn();\n    }\n    cardError(message) {\n      _lib.default.error(message || 'Unable to save your credit card. Please try again.');\n    }\n    didInsert() {\n      let self = this;\n      $('#addOnModal').on('hidden.bs.modal', function () {\n        self.args.onClose(self.isAddonSaved, self.purchased);\n      });\n      $('#addOnModal').on('shown.bs.modal', function () {\n        self.requestDetails();\n      });\n      $('#addOnModal').modal('show');\n    }\n    addonSelected(addon) {\n      this.addon = addon;\n      this.customQuantity = null;\n      this.quantity = null;\n      this.region = null;\n    }\n    quantityChange(quantity) {\n      this.customQuantity = this.quantity;\n      this.showCustomQuantity = quantity < 1;\n      this.quantity = quantity;\n    }\n    quantityChangeTyped(e) {\n      if (e.target.valueAsNumber < this.addon.priceSchedule?.minQuantity) this.customQuantity = this.addon.priceSchedule?.minQuantity;else if (e.target.valueAsNumber > this.addon.priceSchedule?.maxQuantity) this.customQuantity = this.addon.priceSchedule?.maxQuantity;else this.customQuantity = e.target.valueAsNumber;\n      this.quantity = this.customQuantity;\n    }\n    onRegionChange(region) {\n      this.region = region;\n    }\n    async purchaseAddOn() {\n      if (this.isLoading || this.isSaving || this.isLoadingCardDetails || this.args.isReadOnly) return;\n      const body = {};\n      body.quantity = this.quantity < 0 ? this.customQuantity : this.quantity;\n      body.planProductId = this.addon?.id;\n      body.metadata = this.metadata;\n      if (!body.planProductId) {\n        _lib.default.error('Please select an Add-On to purchase');\n        return;\n      }\n      if (!body.quantity || body.quantity < 0) {\n        _lib.default.error('Quantity must be greater than 0');\n        return;\n      }\n      if (!(await this.loadCardDetails())) return;\n      let confirmMessage;\n      if (this.existingAddon) {\n        confirmMessage = `Are you sure you want to update ${this.addon.product.description} add on?`;\n      } else {\n        confirmMessage = 'Are you sure you want to purchase ' + (this.addon.product.description === 'NotificationCredits' ? \"$\" : '') + body.quantity + (this.addon.product.description === 'NotificationCredits' ? \"x\" : '') + ` ${this.addon.product.description}?`;\n      }\n      _lib.default.confirm(confirmMessage, 'Yes', async () => {\n        try {\n          this.isSaving = true;\n          if (this.existingAddon) {\n            await this.api.billing.updateAddOn(this.existingAddon.id, body);\n            _lib.default.info(`Add-On Successfully updated.`);\n          } else {\n            this.purchased = await this.api.billing.purchaseAddOn(this.args.account.id, body);\n            _lib.default.info(`Add-On Successfully purchased.`);\n          }\n          this.isSaving = false;\n          this.closeModal();\n        } catch (e) {\n          _lib.default.info(e.statusText);\n          this.isSaving = false;\n          console.log(e);\n        }\n      }, 'Cancel');\n    }\n    closeModal() {\n      this.isAddonSaved = true;\n      $('#addOnModal').modal('hide');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"addonsOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"quantityMenu\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [1, 2, 3, 4, 5, 10, 15, 20, 25, -1];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"awsRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"azureRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"customQuantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"isAddonSaved\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"showCardDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingCardDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"cardCheckError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"addon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"purchased\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"existingAddon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"quantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"showCustomQuantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadCardDetails\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadCardDetails\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardError\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addonSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addonSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"quantityChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"quantityChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"quantityChangeTyped\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"quantityChangeTyped\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onRegionChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRegionChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"purchaseAddOn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"purchaseAddOn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPlanModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/allocations-row\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <tr>\n    <td> {{@allocation.organizationName}} </td>\n    <td>\n      <Ui::PSelect @options={{@allocationTypes}} @selected={{@allocation.type}}\n                   @onChange={{fn @allocationTypeChange @allocation}} as |option|>\n        {{option.label}}\n      </Ui::PSelect>\n    </td>\n    {{#if @showPercentagesColumn}}\n      <td>\n        {{#if (eq @allocation.type.type 'percent')}}\n          <div class=\"input-group\" style={{html-safe \"max-width: 500px;\"}}>\n            <Input class=\"form-control input\"\n                   @value={{@allocation.percentageAll}}\n                   min=\"0\" max=\"100\" step=\"1\"\n                   @type=\"number\"\n            />\n            <div class=\"input-group-append\"><Ui::Icon @icon=\"fa fa-percent\" class=\"input-group-text\" />\n            </div>\n          </div>\n        {{/if}}\n      </td>\n    {{/if}}\n    {{#if @showSubsColumn}}\n      {{#each (get @allocationPercentages (concat 'allocation_' @allocation.id)) as |sub|}}\n        {{#if (eq @allocation.type.type 'persub' )}}\n          <td>\n            <div class=\"input-group allocations-button-group\">\n              <BsButtonGroup class=\"input-group-prepend\"\n                             @value={{sub.type}}\n                             @type=\"radio\"\n                             @onChange={{fn (mut sub.type)}} as |bg|>\n                <bg.button @type=\"success\"\n                           @value=\"quantity\"\n                           @size=\"md\"\n                           data-bs-toggle=\"tooltip\"\n                           data-bs-title=\"Quantity\"><Ui::Icon @icon=\"fa fa-layer-group\" /></bg.button>\n                <bg.button @type=\"success\"\n                           @value=\"percentage\"\n                           @size=\"md\"\n                           data-bs-toggle=\"tooltip\"\n                           data-bs-title=\"Percentage\"><Ui::Icon @icon=\"fa fa-percent\" /></bg.button>\n              </BsButtonGroup>\n              <Input class=\"form-control input {{if sub.validationError 'parsley-error'}}\"\n                     @value={{sub.value}}\n                     @type=\"number\"/>\n              <div class=\"parsley-errors-list\">{{sub.validationError}}</div>\n            </div>\n          </td>\n        {{else}}\n          <td></td>\n        {{/if}}\n      {{/each}}\n    {{/if}}\n  </tr>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"tr\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[12],[1,\\\" \\\"],[1,[30,1,[\\\"organizationName\\\"]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,2],[30,1,[\\\"type\\\"]],[28,[37,3],[[30,3],[30,1]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,4,[\\\"label\\\"]]],[1,\\\"\\\\n    \\\"]],[4]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,5],[[[1,\\\"    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,1,[\\\"type\\\",\\\"type\\\"]],\\\"percent\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"input-group\\\"],[15,5,[28,[37,7],[\\\"max-width: 500px;\\\"],null]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"form-control input\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"max\\\",\\\"100\\\"],[24,\\\"step\\\",\\\"1\\\"]],[[\\\"@value\\\",\\\"@type\\\"],[[30,1,[\\\"percentageAll\\\"]],\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[8,[39,9],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-percent\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,6],[[[42,[28,[37,11],[[28,[37,11],[[28,[37,12],[[30,7],[28,[37,13],[\\\"allocation_\\\",[30,1,[\\\"id\\\"]]],null]],null]],null]],null],null,[[[41,[28,[37,5],[[30,1,[\\\"type\\\",\\\"type\\\"]],\\\"persub\\\"],null],[[[1,\\\"        \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group allocations-button-group\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,14],[[24,0,\\\"input-group-prepend\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,8,[\\\"type\\\"]],\\\"radio\\\",[28,[37,3],[[28,[37,15],[[30,8,[\\\"type\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,9,[\\\"button\\\"]],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Quantity\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"quantity\\\",\\\"md\\\"]],[[\\\"default\\\"],[[[[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-layer-group\\\"]],null]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[30,9,[\\\"button\\\"]],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Percentage\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"percentage\\\",\\\"md\\\"]],[[\\\"default\\\"],[[[[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-percent\\\"]],null]],[]]]]],[1,\\\"\\\\n            \\\"]],[9]]]]],[1,\\\"\\\\n            \\\"],[8,[39,8],[[16,0,[29,[\\\"form-control input \\\",[52,[30,8,[\\\"validationError\\\"]],\\\"parsley-error\\\"]]]]],[[\\\"@value\\\",\\\"@type\\\"],[[30,8,[\\\"value\\\"]],\\\"number\\\"]],null],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"parsley-errors-list\\\"],[12],[1,[30,8,[\\\"validationError\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"td\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]]],[8]],null]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@allocation\\\",\\\"@allocationTypes\\\",\\\"@allocationTypeChange\\\",\\\"option\\\",\\\"@showPercentagesColumn\\\",\\\"@showSubsColumn\\\",\\\"@allocationPercentages\\\",\\\"sub\\\",\\\"bg\\\"],[\\\"tr\\\",\\\"td\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"if\\\",\\\"eq\\\",\\\"div\\\",\\\"html-safe\\\",\\\"input\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"get\\\",\\\"concat\\\",\\\"bs-button-group\\\",\\\"mut\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/allocations-row.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"allocations-row\"));\n});","define(\"@testable/shared-ui/components/account/billing/allocations\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _class2, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _class3, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\"><strong>Allocations</strong></h4>\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.isLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n      {{else}}\n        <div class=\"position-relative\">\n          <table class=\"table table-sticky table-condensed table-hover table-striped \">\n            <thead>\n            <tr>\n              <th width=\"150px\">Organization</th>\n              <th width=\"150px\">Access</th>\n              {{#if this.showPercentagesColumn}}\n                <th width=\"120px\">Percentage</th>\n              {{/if}}\n              {{#if this.showSubsColumn}}\n                {{#each this.accountList.subscriptions as |sub|}}\n                  <th width=\"160px\">{{sub.productDescription}}</th>\n                {{/each}}\n              {{/if}}\n            </tr>\n            </thead>\n            <tbody>\n            {{#if this.allocationsSharedLength}}\n              {{#each this.allocations as |allocation|}}\n                {{#if allocation.organizationShared}}\n                  <Account::Billing::AllocationsRow\n                          @allocation={{allocation}}\n                          @allocationTypes={{this.allocationTypes}}\n                          @showPercentagesColumn={{this.showPercentagesColumn}}\n                          @allocationPercentages={{this.allocationPercentages}}\n                          @showSubsColumn={{this.showSubsColumn}}\n                          @allocationTypeChange={{this.allocationTypeChange}}\n                  />\n                {{/if}}\n              {{/each}}\n            {{else}}\n              No Allocations!\n            {{/if}}\n            </tbody>\n          </table>\n        </div>\n        <div class=\"position-relative m-t-20\">\n          <table class=\"table table-sticky table-condensed table-hover table-striped \">\n            <thead>\n            <tr>\n              <th width=\"150px\">User Organization</th>\n              <th width=\"150px\">Access</th>\n              {{#if this.showPercentagesColumn}}\n                <th width=\"120px\">Percentage</th>\n              {{/if}}\n              {{#if this.showSubsColumn}}\n                {{#each this.accountList.subscriptions as |sub|}}\n                  <th width=\"160px\">{{sub.productDescription}}</th>\n                {{/each}}\n              {{/if}}\n            </tr>\n            </thead>\n            <tbody>\n            {{#if this.allocationsNotSharedLength}}\n              {{#each this.allocations as |allocation|}}\n                {{#unless allocation.organizationShared}}\n                  <Account::Billing::AllocationsRow\n                          @allocation={{allocation}}\n                          @allocationTypes={{this.allocationTypes}}\n                          @showPercentagesColumn={{this.showPercentagesColumn}}\n                          @allocationPercentages={{this.allocationPercentages}}\n                          @showSubsColumn={{this.showSubsColumn}}\n                          @allocationTypeChange={{this.allocationTypeChange}}\n                  />\n                {{/unless}}\n              {{/each}}\n            {{else}}\n              No Allocations!\n            {{/if}}\n            </tbody>\n          </table>\n        </div>\n        <button class=\"m-t-10 btn btn-sm btn-primary pull-right\"\n                type=\"button\"\n                {{on \"click\" this.saveAllocation}}\n                disabled={{this.isSaving}}>\n          {{#if this.isSaving}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Saving ...\n          {{else}}\n            Save\n          {{/if}}\n        </button>\n      {{/if}}\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Allocations\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"position-relative\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sticky table-condensed table-hover table-striped \\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"Organization\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"Access\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPercentagesColumn\\\"]],[[[1,\\\"              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"120px\\\"],[12],[1,\\\"Percentage\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showSubsColumn\\\"]],[[[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"accountList\\\",\\\"subscriptions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"160px\\\"],[12],[1,[30,1,[\\\"productDescription\\\"]]],[13],[1,\\\"\\\\n\\\"]],[1]],null]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allocationsSharedLength\\\"]],[[[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"allocations\\\"]]],null]],null],null,[[[41,[30,2,[\\\"organizationShared\\\"]],[[[1,\\\"                \\\"],[8,[39,12],null,[[\\\"@allocation\\\",\\\"@allocationTypes\\\",\\\"@showPercentagesColumn\\\",\\\"@allocationPercentages\\\",\\\"@showSubsColumn\\\",\\\"@allocationTypeChange\\\"],[[30,2],[30,0,[\\\"allocationTypes\\\"]],[30,0,[\\\"showPercentagesColumn\\\"]],[30,0,[\\\"allocationPercentages\\\"]],[30,0,[\\\"showSubsColumn\\\"]],[30,0,[\\\"allocationTypeChange\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[2]],null]],[]],[[[1,\\\"            No Allocations!\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"position-relative m-t-20\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sticky table-condensed table-hover table-striped \\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"User Organization\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"Access\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPercentagesColumn\\\"]],[[[1,\\\"              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"120px\\\"],[12],[1,\\\"Percentage\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showSubsColumn\\\"]],[[[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"accountList\\\",\\\"subscriptions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"160px\\\"],[12],[1,[30,3,[\\\"productDescription\\\"]]],[13],[1,\\\"\\\\n\\\"]],[3]],null]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allocationsNotSharedLength\\\"]],[[[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"allocations\\\"]]],null]],null],null,[[[41,[51,[30,4,[\\\"organizationShared\\\"]]],[[[1,\\\"                \\\"],[8,[39,12],null,[[\\\"@allocation\\\",\\\"@allocationTypes\\\",\\\"@showPercentagesColumn\\\",\\\"@allocationPercentages\\\",\\\"@showSubsColumn\\\",\\\"@allocationTypeChange\\\"],[[30,4],[30,0,[\\\"allocationTypes\\\"]],[30,0,[\\\"showPercentagesColumn\\\"]],[30,0,[\\\"allocationPercentages\\\"]],[30,0,[\\\"showSubsColumn\\\"]],[30,0,[\\\"allocationTypeChange\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[4]],null]],[]],[[[1,\\\"            No Allocations!\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"m-t-10 btn btn-sm btn-primary pull-right\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"saveAllocation\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSaving\\\"]],[[[1,\\\"          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Saving ...\\\\n\\\"]],[]],[[[1,\\\"          Save\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"sub\\\",\\\"allocation\\\",\\\"sub\\\",\\\"allocation\\\"],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"each\\\",\\\"-track-array\\\",\\\"tbody\\\",\\\"account/billing/allocations-row\\\",\\\"unless\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/allocations.hbs\",\n    \"isStrictMode\": false\n  });\n  let Allocation = (_class = class Allocation {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"accessAll\", _descriptor2, this);\n      _initializerDefineProperty(this, \"organizationId\", _descriptor3, this);\n      _initializerDefineProperty(this, \"organizationName\", _descriptor4, this);\n      _initializerDefineProperty(this, \"organizationShared\", _descriptor5, this);\n      _initializerDefineProperty(this, \"percentageAll\", _descriptor6, this);\n      _initializerDefineProperty(this, \"subscriptionAllocations\", _descriptor7, this);\n      _initializerDefineProperty(this, \"type\", _descriptor8, this);\n      this.id = data.id;\n      this.accessAll = data.accessAll;\n      this.organizationId = data.organizationId;\n      this.organizationName = data.organizationName;\n      this.organizationShared = data.organizationShared;\n      this.percentageAll = data.percentageAll;\n      this.subscriptionAllocations = data.subscriptionAllocations;\n      this.type = data.type;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"accessAll\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"organizationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"organizationName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"organizationShared\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"percentageAll\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"subscriptionAllocations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _class);\n  let AllocationSubscription = (_class2 = class AllocationSubscription {\n    constructor(data) {\n      _initializerDefineProperty(this, \"subId\", _descriptor9, this);\n      _initializerDefineProperty(this, \"value\", _descriptor0, this);\n      _initializerDefineProperty(this, \"type\", _descriptor1, this);\n      _initializerDefineProperty(this, \"accessAll\", _descriptor10, this);\n      _initializerDefineProperty(this, \"percentageAll\", _descriptor11, this);\n      _initializerDefineProperty(this, \"validationError\", _descriptor12, this);\n      this.subId = data.subId;\n      this.value = data.value;\n      this.type = data.type;\n      this.accessAll = data.accessAll;\n      this.percentageAll = data.percentageAll;\n    }\n  }, _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, \"subId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, \"value\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, \"accessAll\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, \"percentageAll\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, \"validationError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class2);\n  let AccountBillingAllocationsComponent = _exports.default = (_class3 = class AccountBillingAllocationsComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor13, this);\n      _initializerDefineProperty(this, \"accountList\", _descriptor14, this);\n      _initializerDefineProperty(this, \"allocations\", _descriptor15, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor16, this);\n      _initializerDefineProperty(this, \"allocationPercentages\", _descriptor17, this);\n      _initializerDefineProperty(this, \"showSubsColumn\", _descriptor18, this);\n      _initializerDefineProperty(this, \"showPercentagesColumn\", _descriptor19, this);\n      _initializerDefineProperty(this, \"accountId\", _descriptor20, this);\n      _initializerDefineProperty(this, \"allocationsSharedLength\", _descriptor21, this);\n      _initializerDefineProperty(this, \"allocationsNotSharedLength\", _descriptor22, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor23, this);\n      _defineProperty(this, \"allocationTypes\", [{\n        type: 'all',\n        label: 'All'\n      }, {\n        type: 'percent',\n        label: 'Percentage'\n      }, {\n        type: 'persub',\n        label: 'Per Subscription'\n      }]);\n      this.loadAccount();\n    }\n    allocationTypeChange(allocation, type) {\n      allocation.type = type;\n      if (type.type === 'all') {\n        allocation.accessAll = true;\n        delete allocation.percentageAll;\n      } else if (type.type === 'percent') {\n        allocation.accessAll = false;\n        allocation.percentageAll = null;\n      } else if (type.type === 'persub') {\n        const subs = this.allocationPercentages[`allocation_${allocation.id}`];\n        subs.forEach(sub => sub.type = 'quantity');\n        allocation.accessAll = false;\n        delete allocation.percentageAll;\n      }\n      this.allocations = this.allocations.map(a => a.id === allocation.id ? allocation : a);\n      this.updateColumnVisibility();\n    }\n    updateColumnVisibility() {\n      const isAccessAll = !this.allocations.find(a => !a.accessAll);\n      const showPercentageColumn = !!this.allocations.find(a => a.type.type === 'percent');\n      const isShowSubColumns = !!this.allocations.find(a => a.type.type === 'persub');\n      if (isAccessAll) {\n        this.showSubsColumn = false;\n        this.showPercentagesColumn = false;\n      } else {\n        this.showPercentagesColumn = showPercentageColumn;\n        this.showSubsColumn = isShowSubColumns;\n      }\n    }\n    async loadAccount() {\n      this.isLoading = true;\n      const accountList = await this.api.billing.getAccount();\n      this.accountList = accountList;\n      this.accountId = accountList.id;\n      this.allocationsSharedLength = accountList.allocations.filter(a => a.organizationShared).length;\n      this.allocationsNotSharedLength = accountList.allocations.filter(a => !a.organizationShared).length;\n      const sortedAccountList = accountList.allocations.sort((a, b) => {\n        return a.organizationName.toLowerCase() < b.organizationName.toLowerCase() ? -1 : 1;\n      });\n      sortedAccountList.forEach(a => {\n        this.allocations.push(new Allocation(a));\n      });\n      const allocationPercentages = {};\n      this.allocations.forEach(allocation => {\n        if (allocation.accessAll) {\n          allocation.type = this.allocationTypes[0];\n        } else if (allocation.percentageAll) {\n          allocation.type = this.allocationTypes[1];\n        } else {\n          allocation.type = this.allocationTypes[2];\n        }\n        let subs = [];\n        this.accountList.subscriptions.forEach(sub => {\n          const subAllocation = allocation.subscriptionAllocations.find(sa => sa.subscriptionId === sub.id);\n          subs.push(new AllocationSubscription({\n            subId: sub.id,\n            value: subAllocation ? subAllocation.percentage || subAllocation.quantity : null,\n            type: subAllocation ? subAllocation.quantity !== undefined ? 'quantity' : subAllocation.percentage !== undefined ? 'percentage' : 'quantity' : '',\n            accessAll: allocation.accessAll,\n            percentageAll: sub.percentageAll\n          }));\n        });\n        allocationPercentages[`allocation_${allocation.id}`] = subs;\n      });\n      this.allocationPercentages = allocationPercentages;\n      this.updateColumnVisibility();\n      this.isLoading = false;\n    }\n    async saveAllocation() {\n      let saveBody = [];\n      let errorFound = false;\n      this.allocations.forEach(allocation => {\n        let allocationId = allocation.id;\n        const newAllocation = {\n          orgId: allocation.organizationId\n        };\n        if (allocation.type.type === 'all') {\n          newAllocation.accessAll = true;\n        } else if (allocation.type.type === 'percent') {\n          newAllocation.accessAll = false;\n          newAllocation.percentageAll = allocation.percentageAll;\n        } else {\n          newAllocation.accessAll = false;\n          const subs = this.allocationPercentages[`allocation_${allocationId}`];\n          const newSubs = [];\n          subs.forEach(sub => {\n            sub.validationError = '';\n            let newSub = {};\n            newSub.subId = sub.subId;\n            if (sub.type === 'percentage') {\n              if (sub.value < 0 || sub.value > 100) {\n                sub.validationError = 'Percentage must be between 0 and 100';\n                errorFound = true;\n              }\n              newSub.percentage = sub.value;\n            } else if (sub.type === 'quantity') {\n              newSub.quantity = sub.value;\n            } else {\n              sub.validationError = 'No type selected';\n              errorFound = true;\n            }\n            newSubs.push(newSub);\n          });\n          newAllocation.allocations = newSubs;\n          this.allocationPercentages[`allocation_${allocationId}`] = subs;\n        }\n        saveBody.push(newAllocation);\n      });\n      if (errorFound) {\n        console.log(this.allocationPercentages);\n        return;\n      }\n      try {\n        this.isSaving = true;\n        await this.api.billing.saveAllocations(this.accountId, saveBody);\n        _lib.default.info('Allocations updated', 'Saved');\n      } catch (e) {\n        _lib.default.info(e.statusText, 'Update failed');\n        console.log(e);\n      }\n      this.isSaving = false;\n    }\n  }, _descriptor13 = _applyDecoratedDescriptor(_class3.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class3.prototype, \"accountList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class3.prototype, \"allocations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class3.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class3.prototype, \"allocationPercentages\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class3.prototype, \"showSubsColumn\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class3.prototype, \"showPercentagesColumn\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class3.prototype, \"accountId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class3.prototype, \"allocationsSharedLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class3.prototype, \"allocationsNotSharedLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class3.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class3.prototype, \"allocationTypeChange\", [_object.action], Object.getOwnPropertyDescriptor(_class3.prototype, \"allocationTypeChange\"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, \"saveAllocation\", [_object.action], Object.getOwnPropertyDescriptor(_class3.prototype, \"saveAllocation\"), _class3.prototype), _class3);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingAllocationsComponent);\n});","define(\"@testable/shared-ui/components/account/billing/balance-alert-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal @onHidden={{@onClose}} @onShown={{this.focusInput}} as |Modal|>\n    <form {{on \"submit\" this.onSubmit}}>\n      <Modal.header>\n        <h4 class=\"modal-title\">{{this.alertConfig.title}}</h4>\n      </Modal.header>\n      <Modal.body>\n        {{#if this.alertConfig.alertSent}}\n          <div class=\"alert alert-warning m-b-15\">\n            <Ui::Icon @icon=\"fa fa-exclamation-triangle\" /> Alert has been sent for the current period.\n          </div>\n        {{/if}}\n        <div class=\"form-group\">\n          <label>{{this.alertConfig.label}}</label>\n          <div class=\"input-group\">\n            {{#if this.alertConfig.isCurrency}}\n              <span class=\"input-group-addon\">$</span>\n            {{else}}\n              <span class=\"input-group-addon\">{{this.alertConfig.unit}}</span>\n            {{/if}}\n            <input type=\"number\" class=\"form-control\" placeholder=\"Enter threshold amount\"\n                   value={{this.thresholdValue}}\n                   {{on \"input\" this.onInput}} />\n          </div>\n          <small class=\"text-muted\">Leave empty or set to 0 to disable the alert.</small>\n        </div>\n      </Modal.body>\n      <Modal.footer>\n        {{#if this.alertConfig.currentThreshold}}\n          <button type=\"button\" class=\"btn btn-danger btn-sm pull-left\" onclick={{this.deleteAlert}}\n                  disabled={{this.isSaving}}>\n            <Ui::Icon @icon=\"fa fa-trash\" /> Remove Alert\n          </button>\n        {{/if}}\n        <button type=\"button\" class=\"btn btn-default btn-sm\" onclick={{@onClose}}>Cancel</button>\n        <button type=\"submit\" class=\"btn btn-primary btn-sm\"\n                disabled={{this.isSaving}}>\n          {{#if this.isSaving}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Saving...\n          {{else}}\n            Save\n          {{/if}}\n        </button>\n      </Modal.footer>\n    </form>\n  </BsModal>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@onHidden\\\",\\\"@onShown\\\"],[[30,1],[30,0,[\\\"focusInput\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[11,\\\"form\\\"],[4,[38,2],[\\\"submit\\\",[30,0,[\\\"onSubmit\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,0,[\\\"alertConfig\\\",\\\"title\\\"]]],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"alertConfig\\\",\\\"alertSent\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-warning m-b-15\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-exclamation-triangle\\\"]],null],[1,\\\" Alert has been sent for the current period.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[30,0,[\\\"alertConfig\\\",\\\"label\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"alertConfig\\\",\\\"isCurrency\\\"]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"$\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,[30,0,[\\\"alertConfig\\\",\\\"unit\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[11,\\\"input\\\"],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Enter threshold amount\\\"],[16,2,[30,0,[\\\"thresholdValue\\\"]]],[24,4,\\\"number\\\"],[4,[38,2],[\\\"input\\\",[30,0,[\\\"onInput\\\"]]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"small\\\"],[14,0,\\\"text-muted\\\"],[12],[1,\\\"Leave empty or set to 0 to disable the alert.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,2,[\\\"footer\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"alertConfig\\\",\\\"currentThreshold\\\"]],[[[1,\\\"        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-danger btn-sm pull-left\\\"],[15,\\\"onclick\\\",[30,0,[\\\"deleteAlert\\\"]]],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Remove Alert\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-default btn-sm\\\"],[15,\\\"onclick\\\",[30,1]],[14,4,\\\"button\\\"],[12],[1,\\\"Cancel\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary btn-sm\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSaving\\\"]],[[[1,\\\"          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Saving...\\\\n\\\"]],[]],[[[1,\\\"          Save\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onClose\\\",\\\"Modal\\\"],[\\\"bs-modal\\\",\\\"form\\\",\\\"on\\\",\\\"h4\\\",\\\"if\\\",\\\"div\\\",\\\"ui/icon\\\",\\\"label\\\",\\\"span\\\",\\\"input\\\",\\\"small\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/balance-alert-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let BalanceAlertModalComponent = _exports.default = (_class = class BalanceAlertModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"thresholdValue\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor3, this);\n    }\n    _categoryData() {\n      const type = this.args.alertType;\n      const category = this.args.billingCategories?.find(c => c.category === type?.category);\n      const isOrg = this.args.organizationType === 'org';\n      const settings = isOrg ? category?.orgSettings || category?.accountSettings : category?.accountSettings;\n      return {\n        category,\n        settings\n      };\n    }\n    get alertConfig() {\n      const type = this.args.alertType;\n      if (type === 'balance') {\n        return {\n          title: 'Current Balance Alert',\n          currentThreshold: this.args.account?.balanceAlertThreshold,\n          alertSent: this.args.account?.balanceAlertSent,\n          label: 'Alert when balance exceeds',\n          isCurrency: true\n        };\n      } else if (type === 'payg') {\n        return {\n          title: 'Additional Spending Alert',\n          currentThreshold: this.args.account?.paygSpendAlertThreshold,\n          alertSent: this.args.account?.paygSpendAlertSent,\n          label: 'Alert when additional spending exceeds',\n          isCurrency: true\n        };\n      } else if (type?.type === 'categoryIncluded') {\n        const {\n          category,\n          settings\n        } = this._categoryData();\n        return {\n          title: `Included Remaining Alert - ${category?.displayName || type.category}`,\n          currentThreshold: settings?.includedRemainingAlertThreshold,\n          alertSent: settings?.includedRemainingAlertSent,\n          label: 'Alert when included remaining drops below',\n          unit: category?.consumableUnits || category?.units,\n          isCurrency: false\n        };\n      } else if (type?.type === 'categoryPayg') {\n        const {\n          category,\n          settings\n        } = this._categoryData();\n        return {\n          title: `Additional Usage Alert - ${category?.displayName || type.category}`,\n          currentThreshold: settings?.paygSpendAlertThreshold,\n          alertSent: settings?.paygSpendAlertSent,\n          label: 'Alert when additional usage spend exceeds',\n          isCurrency: true\n        };\n      }\n      return {\n        title: 'Alert',\n        label: 'Threshold'\n      };\n    }\n    _orgId() {\n      return this.args.organizationType === 'org' ? this.args.selectedOrgId : null;\n    }\n    focusInput() {\n      document.querySelector('.modal input[type=\"number\"]')?.focus();\n    }\n    onInput(e) {\n      this.thresholdValue = e.target.value;\n    }\n    onSubmit(e) {\n      e.preventDefault();\n      this.saveAlert();\n    }\n    _buildBody(field, val) {\n      return val > 0 ? {\n        [field]: val\n      } : {\n        [`delete${field.charAt(0).toUpperCase()}${field.slice(1)}`]: true\n      };\n    }\n    async saveAlert() {\n      const type = this.args.alertType;\n      const val = parseFloat(this.thresholdValue);\n      const newVal = val > 0 ? val : null;\n      this.isSaving = true;\n      try {\n        if (type === 'balance' || type === 'payg') {\n          const field = type === 'balance' ? 'balanceAlertThreshold' : 'paygSpendAlertThreshold';\n          await this.api.billing.updateAccount(this.args.account.id, this._buildBody(field, val));\n          this.args.onClose({\n            field,\n            value: newVal\n          });\n        } else if (type?.type === 'categoryIncluded' || type?.type === 'categoryPayg') {\n          const field = type.type === 'categoryIncluded' ? 'includedRemainingAlertThreshold' : 'paygSpendAlertThreshold';\n          await this.api.billing.updateBillingCategory(type.category, this.args.account.id, this._orgId(), this._buildBody(field, val));\n          this.args.onClose({\n            field,\n            value: newVal,\n            category: type.category\n          });\n        }\n        _lib.default.info('Alert threshold updated', 'Saved');\n      } catch (e) {\n        _lib.default.info('Error saving alert threshold');\n      } finally {\n        this.isSaving = false;\n      }\n    }\n    deleteAlert() {\n      this.thresholdValue = '';\n      this.saveAlert();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"thresholdValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.alertConfig.currentThreshold || '';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSubmit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSubmit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAlert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAlert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteAlert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteAlert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BalanceAlertModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/billing-category-card\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"billing-category-card {{if this.isExpanded 'billing-category-card-expanded'}}\">\n    <div class=\"billing-category-card-header\">\n      <h5 class=\"m-b-0 f-w-600\">{{@category.displayName}}</h5>\n      {{#if this.showToggle}}\n        <BsButtonGroup @value={{this.viewMode}} @type=\"radio\" @onChange={{this.toggleViewMode}} as |bs|>\n          <bs.button @type=\"success\" @value=\"public\" @size=\"xs\">Public</bs.button>\n          <bs.button @type=\"success\" @value=\"selfHosted\" @size=\"xs\">Self-Hosted</bs.button>\n        </BsButtonGroup>\n      {{else if this.hasSelfHosted}}\n        <span class=\"label label-default\">Self-Hosted</span>\n      {{/if}}\n    </div>\n  \n    <div class=\"billing-category-card-body\">\n      {{#if this.hasLicensed}}\n        <div class=\"m-b-5\">\n          <strong>Licensed:</strong> {{this.licensedQty}} {{print-plural this.units this.rawLicensedQty}}\n          {{#if this.licensedAddOn}}\n            <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5\" data-bs-toggle=\"tooltip\" data-bs-title=\"Purchase Add-On\"\n                    onclick={{fn @updatedAddon this.licensedAddOn}}>\n              <Ui::Icon @icon=\"fa fa-plus text-primary\" />\n            </button>\n          {{/if}}\n        </div>\n      {{/if}}\n  \n      {{#if this.hasPurchased}}\n        <div class=\"m-b-5\">\n          <strong>Purchased:</strong>\n          {{this.purchasedRemaining}}\n          <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5 {{if this.includedAlertThreshold 'text-warning' 'text-muted'}}\"\n                  data-bs-toggle=\"tooltip\" data-bs-title=\"Set Included Alert\" onclick={{fn @onIncludedAlert @category.category}}>\n            <Ui::Icon @icon=\"fa fa-bell\" />\n          </button>\n          / {{this.purchasedTotal}} {{print-plural this.consumableUnits this.rawPurchasedTotal}} remaining\n          {{#if this.purchasedAddOn}}\n            <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5\" data-bs-toggle=\"tooltip\" data-bs-title=\"Purchase Add-On\"\n                    onclick={{fn @updatedAddon this.purchasedAddOn}}>\n              <Ui::Icon @icon=\"fa fa-plus text-primary\" />\n            </button>\n          {{/if}}\n        </div>\n      {{/if}}\n  \n      {{#if this.hasAdditionalUsage}}\n        <div class=\"m-b-5\">\n          <strong>Additional Usage:</strong>\n            {{this.paygQty}} {{print-plural this.consumableUnits this.rawPaygQty}} for {{print-ccy this.paygSpend}}{{if this.rawPaygPricing (concat \" (\" this.rawPaygPricing \")\")}}\n          <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5 {{if this.paygAlertThreshold 'text-warning' 'text-muted'}}\"\n                  data-bs-toggle=\"tooltip\" data-bs-title=\"Set Additional Usage Alert\" onclick={{fn @onPaygAlert @category.category}}>\n            <Ui::Icon @icon=\"fa fa-bell\" />\n          </button>\n          <span class=\"text-muted small\">\n            (Monthly Budget =\n            {{#if this.isEditingBudget}}\n              <span class=\"d-inline-flex align-items-center\">\n                <input type=\"number\" class=\"form-control form-control-sm d-inline-block billing-inline-input\"\n                        value={{this.editBudgetValue}}\n                        {{on \"input\" this.onBudgetInput}}\n                        {{on \"keydown\" this.onBudgetKeydown}}\n                        {{on \"blur\" this.cancelBudgetEdit}}\n                        {{did-insert this.focusBudgetInput}}\n                        disabled={{this.isSavingBudget}} />\n                {{#if this.isSavingBudget}}\n                  <Ui::Icon @icon=\"fa fa-spinner fa-spin text-muted m-l-5\" />\n                {{/if}}\n              </span>\n            {{else}}\n              <a href=\"javascript:;\" class=\"text-muted editable-text\" data-bs-toggle=\"tooltip\"\n                  data-bs-title={{if this.monthlyBudget \"Click to edit monthly budget\" \"Click to set monthly budget\"}}\n                  onclick={{this.startEditBudget}}>\n                {{#if this.monthlyBudget}}{{print-ccy this.monthlyBudget}}{{else}}no limit{{/if}}\n              </a>\n            {{/if}}\n            )\n          </span>\n        </div>\n      {{/if}}\n    </div>\n  \n    <div class=\"billing-category-card-footer\">\n      <a href=\"javascript:;\" onclick={{this.toggleExpand}} class=\"text-primary\">\n        {{#if this.isExpanded}}\n          <Ui::Icon @icon=\"fa fa-chevron-up\" /> Hide Details\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-chevron-down\" /> View Details\n        {{/if}}\n      </a>\n    </div>\n  \n    {{#if this.isExpanded}}\n      <div class=\"billing-category-card-details\">\n        {{#if this.isLoadingSubscriptions}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading subscriptions...\n        {{else if this.categorySubscriptions}}\n          <Account::Billing::SubscriptionsGrid\n                  @id={{concat \"cat-subs-\" @category.category}}\n                  @isLocked={{@isLocked}}\n                  @organizationMode={{@organizationMode}}\n                  @organizationType={{@organizationType}}\n                  @data={{this.categorySubscriptions}}\n                  @purchasedPlans={{@purchasedPlans}}\n                  @goToDetails={{@goToDetails}}\n                  @goToPlan={{@goToPlan}}\n                  @showUsageModal={{this.onShowUsageModal}}\n                  @updatedAddon={{@updatedAddon}}\n                  @terminateAddon={{@terminateAddon}}\n                  @onInputChange={{@onInputChange}}\n          />\n          {{#if this.isMonitorCheckCategory}}\n            <Account::Billing::MonitorCheckUsageBreakdown\n              @accountId={{@accountId}}\n              @orgId={{this.orgId}}\n              @subscriptions={{this.categorySubscriptions}}\n            />\n          {{/if}}\n        {{else}}\n          <span class=\"text-muted\">No subscriptions available.</span>\n        {{/if}}\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"billing-category-card \\\",[52,[30,0,[\\\"isExpanded\\\"]],\\\"billing-category-card-expanded\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"billing-category-card-header\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h5\\\"],[14,0,\\\"m-b-0 f-w-600\\\"],[12],[1,[30,1,[\\\"displayName\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showToggle\\\"]],[[[1,\\\"      \\\"],[8,[39,3],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewMode\\\"]],\\\"radio\\\",[30,0,[\\\"toggleViewMode\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"public\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Public\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"selfHosted\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Self-Hosted\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"hasSelfHosted\\\"]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"label label-default\\\"],[12],[1,\\\"Self-Hosted\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"billing-category-card-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLicensed\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Licensed:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"licensedQty\\\"]]],[1,\\\" \\\"],[1,[28,[35,6],[[30,0,[\\\"units\\\"]],[30,0,[\\\"rawLicensedQty\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"licensedAddOn\\\"]],[[[1,\\\"          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-link btn-sm p-0 m-l-5\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Purchase Add-On\\\"],[15,\\\"onclick\\\",[28,[37,8],[[30,3],[30,0,[\\\"licensedAddOn\\\"]]],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-plus text-primary\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasPurchased\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Purchased:\\\"],[13],[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"purchasedRemaining\\\"]]],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[15,0,[29,[\\\"btn btn-link btn-sm p-0 m-l-5 \\\",[52,[30,0,[\\\"includedAlertThreshold\\\"]],\\\"text-warning\\\",\\\"text-muted\\\"]]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Set Included Alert\\\"],[15,\\\"onclick\\\",[28,[37,8],[[30,4],[30,1,[\\\"category\\\"]]],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-bell\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        / \\\"],[1,[30,0,[\\\"purchasedTotal\\\"]]],[1,\\\" \\\"],[1,[28,[35,6],[[30,0,[\\\"consumableUnits\\\"]],[30,0,[\\\"rawPurchasedTotal\\\"]]],null]],[1,\\\" remaining\\\\n\\\"],[41,[30,0,[\\\"purchasedAddOn\\\"]],[[[1,\\\"          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-link btn-sm p-0 m-l-5\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Purchase Add-On\\\"],[15,\\\"onclick\\\",[28,[37,8],[[30,3],[30,0,[\\\"purchasedAddOn\\\"]]],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-plus text-primary\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasAdditionalUsage\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Additional Usage:\\\"],[13],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"paygQty\\\"]]],[1,\\\" \\\"],[1,[28,[35,6],[[30,0,[\\\"consumableUnits\\\"]],[30,0,[\\\"rawPaygQty\\\"]]],null]],[1,\\\" for \\\"],[1,[28,[35,10],[[30,0,[\\\"paygSpend\\\"]]],null]],[1,[52,[30,0,[\\\"rawPaygPricing\\\"]],[28,[37,11],[\\\" (\\\",[30,0,[\\\"rawPaygPricing\\\"]],\\\")\\\"],null]]],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[15,0,[29,[\\\"btn btn-link btn-sm p-0 m-l-5 \\\",[52,[30,0,[\\\"paygAlertThreshold\\\"]],\\\"text-warning\\\",\\\"text-muted\\\"]]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Set Additional Usage Alert\\\"],[15,\\\"onclick\\\",[28,[37,8],[[30,5],[30,1,[\\\"category\\\"]]],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-bell\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"\\\\n          (Monthly Budget =\\\\n\\\"],[41,[30,0,[\\\"isEditingBudget\\\"]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"d-inline-flex align-items-center\\\"],[12],[1,\\\"\\\\n              \\\"],[11,\\\"input\\\"],[24,0,\\\"form-control form-control-sm d-inline-block billing-inline-input\\\"],[16,2,[30,0,[\\\"editBudgetValue\\\"]]],[16,\\\"disabled\\\",[30,0,[\\\"isSavingBudget\\\"]]],[24,4,\\\"number\\\"],[4,[38,13],[\\\"input\\\",[30,0,[\\\"onBudgetInput\\\"]]],null],[4,[38,13],[\\\"keydown\\\",[30,0,[\\\"onBudgetKeydown\\\"]]],null],[4,[38,13],[\\\"blur\\\",[30,0,[\\\"cancelBudgetEdit\\\"]]],null],[4,[38,14],[[30,0,[\\\"focusBudgetInput\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSavingBudget\\\"]],[[[1,\\\"                \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin text-muted m-l-5\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,3],[14,6,\\\"javascript:;\\\"],[14,0,\\\"text-muted editable-text\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[15,\\\"data-bs-title\\\",[52,[30,0,[\\\"monthlyBudget\\\"]],\\\"Click to edit monthly budget\\\",\\\"Click to set monthly budget\\\"]],[15,\\\"onclick\\\",[30,0,[\\\"startEditBudget\\\"]]],[12],[1,\\\"\\\\n              \\\"],[41,[30,0,[\\\"monthlyBudget\\\"]],[[[1,[28,[35,10],[[30,0,[\\\"monthlyBudget\\\"]]],null]]],[]],[[[1,\\\"no limit\\\"]],[]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          )\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"billing-category-card-footer\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,6,\\\"javascript:;\\\"],[15,\\\"onclick\\\",[30,0,[\\\"toggleExpand\\\"]]],[14,0,\\\"text-primary\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isExpanded\\\"]],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-chevron-up\\\"]],null],[1,\\\" Hide Details\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-chevron-down\\\"]],null],[1,\\\" View Details\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isExpanded\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"billing-category-card-details\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingSubscriptions\\\"]],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading subscriptions...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"categorySubscriptions\\\"]],[[[1,\\\"        \\\"],[8,[39,16],null,[[\\\"@id\\\",\\\"@isLocked\\\",\\\"@organizationMode\\\",\\\"@organizationType\\\",\\\"@data\\\",\\\"@purchasedPlans\\\",\\\"@goToDetails\\\",\\\"@goToPlan\\\",\\\"@showUsageModal\\\",\\\"@updatedAddon\\\",\\\"@terminateAddon\\\",\\\"@onInputChange\\\"],[[28,[37,11],[\\\"cat-subs-\\\",[30,1,[\\\"category\\\"]]],null],[30,6],[30,7],[30,8],[30,0,[\\\"categorySubscriptions\\\"]],[30,9],[30,10],[30,11],[30,0,[\\\"onShowUsageModal\\\"]],[30,3],[30,12],[30,13]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMonitorCheckCategory\\\"]],[[[1,\\\"          \\\"],[8,[39,17],null,[[\\\"@accountId\\\",\\\"@orgId\\\",\\\"@subscriptions\\\"],[[30,14],[30,0,[\\\"orgId\\\"]],[30,0,[\\\"categorySubscriptions\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No subscriptions available.\\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@category\\\",\\\"bs\\\",\\\"@updatedAddon\\\",\\\"@onIncludedAlert\\\",\\\"@onPaygAlert\\\",\\\"@isLocked\\\",\\\"@organizationMode\\\",\\\"@organizationType\\\",\\\"@purchasedPlans\\\",\\\"@goToDetails\\\",\\\"@goToPlan\\\",\\\"@terminateAddon\\\",\\\"@onInputChange\\\",\\\"@accountId\\\"],[\\\"div\\\",\\\"if\\\",\\\"h5\\\",\\\"bs-button-group\\\",\\\"span\\\",\\\"strong\\\",\\\"print-plural\\\",\\\"button\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"print-ccy\\\",\\\"concat\\\",\\\"input\\\",\\\"on\\\",\\\"did-insert\\\",\\\"a\\\",\\\"account/billing/subscriptions-grid\\\",\\\"account/billing/monitor-check-usage-breakdown\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/billing-category-card.hbs\",\n    \"isStrictMode\": false\n  });\n  function fmt(val) {\n    return numeral(val).format('0,0.[000]a');\n  }\n  let BillingCategoryCardComponent = _exports.default = (_class = class BillingCategoryCardComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"viewMode\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isExpanded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"categorySubscriptions\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoadingSubscriptions\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isEditingBudget\", _descriptor6, this);\n      _initializerDefineProperty(this, \"editBudgetValue\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isSavingBudget\", _descriptor8, this);\n    }\n    _findAddOn(productType) {\n      const cat = this.category.category;\n      return this.args.purchasedPlans?.flatMap(pp => pp.plan.products).find(p => !p.included && p.product?.category === cat && p.product?.productType === productType) || null;\n    }\n    _defaultViewMode() {\n      return this.hasPublic ? 'public' : 'selfHosted';\n    }\n    _raw(field) {\n      return this.category[`${this.prefix}${field}`];\n    }\n    get category() {\n      return this.args.category;\n    }\n    get isMonitorCheckCategory() {\n      return this.category.category === 'MonitorCheck';\n    }\n    get isOrg() {\n      return this.args.organizationType === 'org';\n    }\n    get orgId() {\n      return this.isOrg ? this.args.selectedOrgId : null;\n    }\n    get _settings() {\n      return this.isOrg ? this.category.orgSettings || this.category.accountSettings : this.category.accountSettings;\n    }\n    get units() {\n      return this.category.units || '';\n    }\n    get consumableUnits() {\n      return this.category.consumableUnits || this.category.units || '';\n    }\n    get hasPublic() {\n      const c = this.category;\n      return c.publicTotalCapacityQty > 0 || c.publicTotalIncludedQty > 0 || c.publicTotalPaygQty > 0;\n    }\n    get hasSelfHosted() {\n      const c = this.category;\n      return c.selfHostedTotalCapacityQty > 0 || c.selfHostedTotalIncludedQty > 0 || c.selfHostedTotalPaygQty > 0;\n    }\n    get hasLicensed() {\n      const c = this.category;\n      return c.publicTotalCapacityQty > 0 || c.selfHostedTotalCapacityQty > 0 || !!this.licensedAddOn;\n    }\n    get hasPurchased() {\n      const c = this.category;\n      return c.publicTotalIncludedQty != null || c.selfHostedTotalIncludedQty != null;\n    }\n    get hasAdditionalUsage() {\n      const c = this.category;\n      return c.publicTotalPaygQty != null || c.selfHostedTotalPaygQty != null || c.publicTotalPaygSpend != null || c.selfHostedTotalPaygSpend != null;\n    }\n    get showToggle() {\n      return this.hasPublic && this.hasSelfHosted;\n    }\n    get prefix() {\n      return this.viewMode === 'selfHosted' ? 'selfHosted' : 'public';\n    }\n    get rawLicensedQty() {\n      return this._raw('TotalCapacityQty');\n    }\n    get licensedQty() {\n      return fmt(this.rawLicensedQty);\n    }\n    get purchasedRemaining() {\n      return fmt(this._raw('TotalIncludedRemainingQty'));\n    }\n    get rawPurchasedTotal() {\n      return this._raw('TotalIncludedQty');\n    }\n    get purchasedTotal() {\n      return fmt(this.rawPurchasedTotal);\n    }\n    get rawPaygPricing() {\n      return this._raw('PaygPricing');\n    }\n    get rawPaygQty() {\n      return this._raw('TotalPaygQty');\n    }\n    get paygQty() {\n      return fmt(this.rawPaygQty);\n    }\n    get paygSpend() {\n      return this._raw('TotalPaygSpend') || 0;\n    }\n    get includedAlertThreshold() {\n      this.args.alertUpdate;\n      return this._settings?.includedRemainingAlertThreshold;\n    }\n    get paygAlertThreshold() {\n      this.args.alertUpdate;\n      return this._settings?.paygSpendAlertThreshold;\n    }\n    get monthlyBudget() {\n      return this._settings?.paygSpendLimit;\n    }\n    get licensedAddOn() {\n      return this._findAddOn('Capacity');\n    }\n    get purchasedAddOn() {\n      return this._findAddOn('Consumable');\n    }\n    toggleViewMode(mode) {\n      this.viewMode = mode;\n    }\n    onShowUsageModal(item) {\n      this.args.showUsageModal(item, this.categorySubscriptions);\n    }\n    startEditBudget() {\n      this.editBudgetValue = this.monthlyBudget || '';\n      this.isEditingBudget = true;\n    }\n    onBudgetInput(e) {\n      this.editBudgetValue = e.target.value;\n    }\n    onBudgetKeydown(e) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        this.saveBudget();\n      } else if (e.key === 'Escape') {\n        this._skipBlur = true;\n        this.isEditingBudget = false;\n      }\n    }\n    focusBudgetInput(element) {\n      element.focus();\n      element.select();\n    }\n    cancelBudgetEdit() {\n      if (this._skipBlur) {\n        this._skipBlur = false;\n        return;\n      }\n      if (!this.isSavingBudget) {\n        this.isEditingBudget = false;\n      }\n    }\n    async saveBudget() {\n      const val = parseFloat(this.editBudgetValue);\n      if (this.orgId && val > 0) {\n        const accountLimit = this.category.accountSettings?.paygSpendLimit;\n        if (accountLimit && val > accountLimit) {\n          _lib.default.info(`Org budget cannot exceed the account limit of $${accountLimit}`);\n          return;\n        }\n      }\n      const body = val > 0 ? {\n        paygSpendLimit: val\n      } : {\n        deletePaygSpendLimit: true\n      };\n      const settingsKey = this.orgId ? 'orgSettings' : 'accountSettings';\n      this.isSavingBudget = true;\n      try {\n        await this.api.billing.updateBillingCategory(this.category.category, this.args.accountId, this.orgId, body);\n        const updatedSettings = {\n          ...this.category[settingsKey],\n          paygSpendLimit: val > 0 ? val : null\n        };\n        const updatedCategory = {\n          ...this.category,\n          [settingsKey]: updatedSettings\n        };\n        this.args.onBudgetUpdate(this.category.category, updatedCategory);\n        this.editBudgetValue = val > 0 ? String(val) : '';\n        this.isEditingBudget = false;\n      } catch (e) {\n        const oldVal = this._settings?.paygSpendLimit;\n        this.editBudgetValue = oldVal ? String(oldVal) : '';\n        this.isEditingBudget = false;\n        _lib.default.info(`Org budget cannot exceed the account limit. Please refresh and try again.`);\n      } finally {\n        this.isSavingBudget = false;\n      }\n    }\n    async toggleExpand() {\n      if (this.isExpanded) {\n        this.isExpanded = false;\n        return;\n      }\n      this.isExpanded = true;\n      if (!this.categorySubscriptions) {\n        this.isLoadingSubscriptions = true;\n        try {\n          this.categorySubscriptions = await this.api.billing.getCategorySubscriptions(this.category.category, this.args.accountId, this.orgId);\n        } catch (e) {\n          _lib.default.info('Error loading subscriptions');\n        }\n        this.isLoadingSubscriptions = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"viewMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this._defaultViewMode();\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"categorySubscriptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingSubscriptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isEditingBudget\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"editBudgetValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isSavingBudget\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleViewMode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleViewMode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowUsageModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowUsageModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"startEditBudget\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"startEditBudget\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBudgetInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBudgetInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBudgetKeydown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBudgetKeydown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusBudgetInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusBudgetInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelBudgetEdit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelBudgetEdit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveBudget\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveBudget\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleExpand\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BillingCategoryCardComponent);\n});","define(\"@testable/shared-ui/components/account/billing/credit-cards\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _server, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\"><strong>Credit Cards</strong></h4>\n      <Ui::InfoIcon @isHtml={{true}}\n                    @content=\"Create and manage the credit cards associated with your account.\n                              Card details are never sent or stored on our servers, we use Stripe for secure card/subscription management.\"\n                    @placement=\"bottom\"/>\n      <div class=\"panel-heading-btn\">\n        <button type=\"button\" onclick={{this.addCard}} class=\"btn btn-primary btn-xs\">\n          <strong><Ui::Icon @icon=\"fa fa-plus\" /> Add New Card</strong>\n        </button>\n      </div>\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.isLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading credit cards...\n      {{else}}\n        <table class=\"table\">\n          <thead>\n          <tr>\n            <th>Actions</th>\n            <th>Default</th>\n            <th>Type</th>\n            <th>Card #</th>\n            <th>Exp Date</th>\n            <th>Name</th>\n          </tr>\n          </thead>\n          <tbody>\n          {{#each this.cards as |card|}}\n            <tr>\n              <td>\n                <button type=\"button\" onclick={{fn this.editCard card.id}}\n                        class=\"btn btn-sm btn-icon btn-circle text-primary\" title=\"Edit Card\">\n                        <Ui::Icon @icon=\"fa fa-edit\" /></button>\n                <button type=\"button\"\n                        disabled={{this.isDeletingCard card.id}}\n                        onclick={{fn this.cardDelete card.id}}\n                        class=\"btn btn-sm btn-icon btn-circle text-danger\" title=\"Delete Card\">\n                        {{#if (this.isDeletingCard card.id)}}\n                          <Ui::Icon @icon=\"fa-spinner fa-spin\" />\n                        {{else}}\n                          <Ui::Icon @icon=\"fa fa-trash\" />\n                        {{/if}}\n                        </button>\n                {{#if (not-eq card.metadata.default 'true')}}\n                  <button type=\"button\" onclick={{fn this.cardMakeDefault card}}\n                          class=\"btn btn-sm btn-icon btn-circle text-warning\" title=\"Make Default\"><Ui::Icon @icon=\"fa fa-check\" /></button>\n                {{/if}}\n              </td>\n              <td>\n                {{#if (eq card.metadata.default 'true')}}\n                  <Ui::Icon @icon=\"fa fa-check\" />\n                {{/if}}\n              </td>\n              <td>{{card.brand}}</td>\n              <td>**{{card.last4}}</td>\n              <td>{{card.exp_month}}/{{card.exp_year}}</td>\n              <td>{{card.name}}</td>\n            </tr>\n          {{else}}\n            {{#if this.cardsErrorText}}\n              {{this.cardsErrorText}}\n            {{else}}\n              <tr>\n                <td colspan=\"6\" class=\"text-center\">\n                  No credit cards on file!\n                </td>\n              </tr>\n            {{/if}}\n          {{/each}}\n          </tbody>\n        </table>\n      {{/if}}\n  \n      <div class=\"m-t-10 m-b-10\">\n        <a target=\"_blank\" href=\"https://stripe.com\" rel=\"noreferrer noopener\"><img\n                src=\"/assets/images/powered_by_stripe.png\" alt=\"Powered by Stripe\"></a>\n      </div>\n    </div>\n  </div>\n  {{#if this.showCardModal}}\n    <AddCreditCardModal @card={{this.selectedCard}}\n                        @cardError={{this.cardError}}\n                        @cardCreated={{this.cardAdded}}\n                        @cardUpdated={{this.cardEdited}}\n                        @modalClosed={{this.cardModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Credit Cards\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Create and manage the credit cards associated with your account.\\\\n                            Card details are never sent or stored on our servers, we use Stripe for secure card/subscription management.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[15,\\\"onclick\\\",[30,0,[\\\"addCard\\\"]]],[14,0,\\\"btn btn-primary btn-xs\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Add New Card\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading credit cards...\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Actions\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Default\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Type\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Card #\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Exp Date\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"cards\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[15,\\\"onclick\\\",[28,[37,15],[[30,0,[\\\"editCard\\\"]],[30,1,[\\\"id\\\"]]],null]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"title\\\",\\\"Edit Card\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[28,[30,0,[\\\"isDeletingCard\\\"]],[[30,1,[\\\"id\\\"]]],null]],[15,\\\"onclick\\\",[28,[37,15],[[30,0,[\\\"cardDelete\\\"]],[30,1,[\\\"id\\\"]]],null]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[14,\\\"title\\\",\\\"Delete Card\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[30,0,[\\\"isDeletingCard\\\"]],[[30,1,[\\\"id\\\"]]],null],[[[1,\\\"                        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,1,[\\\"metadata\\\",\\\"default\\\"]],\\\"true\\\"],null],[[[1,\\\"                \\\"],[10,\\\"button\\\"],[15,\\\"onclick\\\",[28,[37,15],[[30,0,[\\\"cardMakeDefault\\\"]],[30,1]],null]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-warning\\\"],[14,\\\"title\\\",\\\"Make Default\\\"],[14,4,\\\"button\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,1,[\\\"metadata\\\",\\\"default\\\"]],\\\"true\\\"],null],[[[1,\\\"                \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"brand\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"**\\\"],[1,[30,1,[\\\"last4\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"exp_month\\\"]]],[1,\\\"/\\\"],[1,[30,1,[\\\"exp_year\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],[[[41,[30,0,[\\\"cardsErrorText\\\"]],[[[1,\\\"            \\\"],[1,[30,0,[\\\"cardsErrorText\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"6\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                No credit cards on file!\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://stripe.com\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[10,\\\"img\\\"],[14,\\\"src\\\",\\\"/assets/images/powered_by_stripe.png\\\"],[14,\\\"alt\\\",\\\"Powered by Stripe\\\"],[12],[13],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCardModal\\\"]],[[[1,\\\"  \\\"],[8,[39,20],null,[[\\\"@card\\\",\\\"@cardError\\\",\\\"@cardCreated\\\",\\\"@cardUpdated\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedCard\\\"]],[30,0,[\\\"cardError\\\"]],[30,0,[\\\"cardAdded\\\"]],[30,0,[\\\"cardEdited\\\"]],[30,0,[\\\"cardModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"card\\\"],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"fn\\\",\\\"not-eq\\\",\\\"eq\\\",\\\"a\\\",\\\"img\\\",\\\"add-credit-card-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/credit-cards.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingCreditCardsComponent = _exports.default = (_class = class AccountBillingCreditCardsComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"paymentGateway\", _descriptor, this);\n      _initializerDefineProperty(this, \"cards\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedCard\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showCardModal\", _descriptor5, this);\n      _initializerDefineProperty(this, \"cardsErrorText\", _descriptor6, this);\n      _initializerDefineProperty(this, \"deletingCardIds\", _descriptor7, this);\n      _defineProperty(this, \"isDeletingCard\", cardId => !!this.deletingCardIds[cardId]);\n      this.paymentGateway = _environment.config.currentUser.org?.account?.paymentGateway;\n      this.loadCards();\n    }\n    loadCards() {\n      this.isLoading = true;\n      _server.default.getCards(_environment.config.currentUser.orgId).then(cards => {\n        cards.sort((a, b) => {\n          if (a.metadata.default === 'true' && b.metadata.default === 'false') {\n            return -1;\n          }\n          if (a.metadata.default === 'false' && b.metadata.default === 'true') {\n            return 1;\n          }\n          return 0;\n        });\n        this.cards = cards;\n        this.isLoading = false;\n      }, (jqxhr, status, errMsg) => {\n        this.cardsErrorText = 'Failed to load credit cards: ' + _lib.default.messageFromFail(jqxhr, status, errMsg);\n        this.isLoading = false;\n      });\n    }\n    addCard() {\n      this.selectedCard = null;\n      this.showCardModal = true;\n    }\n    editCard(id) {\n      this.selectedCard = _.find(this.cards, card => card.id === id);\n      this.showCardModal = true;\n    }\n    cardAdded() {\n      this.loadCards();\n      $('#addCreditCardModal').modal('hide');\n    }\n    cardEdited() {\n      this.loadCards();\n      $('#addCreditCardModal').modal('hide');\n    }\n    cardMakeDefault(card) {\n      _lib.default.confirm(`Are you sure you want to make **** **** **** ${card.last4} your default card?`, 'OK', () => {\n        card.metadata.default = 'true';\n        _server.default.updateCard(_environment.config.currentUser.org.id, card.id, {\n          makeDefault: true\n        }).then(() => {\n          this.loadCards();\n          _lib.default.info('Default card changed successfully');\n        });\n      }, 'Cancel');\n    }\n    cardDelete(id) {\n      _lib.default.confirm('Are you sure you want to delete this card?', 'OK', async () => {\n        this.deletingCardIds[id] = true;\n        this.deletingCardIds = {\n          ...this.deletingCardIds\n        };\n        try {\n          await _server.default.deleteCard(_environment.config.currentUser.orgId, id);\n          this.loadCards();\n          _lib.default.info('Card deleted successfully');\n        } catch (error) {\n          _lib.default.error(error.statusText, 'Failed to delete card');\n        } finally {\n          delete this.deletingCardIds[id];\n          this.deletingCardIds = {\n            ...this.deletingCardIds\n          };\n        }\n      }, 'Cancel', () => {});\n    }\n    cardModalClosed() {\n      this.showCardModal = false;\n    }\n    cardError() {}\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"paymentGateway\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"cards\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedCard\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showCardModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"cardsErrorText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"deletingCardIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"addCard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addCard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"editCard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editCard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardAdded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardAdded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardEdited\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardEdited\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardMakeDefault\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardMakeDefault\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardDelete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardDelete\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cardError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cardError\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingCreditCardsComponent);\n});","define(\"@testable/shared-ui/components/account/billing/current-subscription\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _lib, _environment, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and this.isPrimaryOrg this.hasLinkedOrgs)}}\n    <div class=\"row\">\n      <div class=\"col-12 col-sm-6 col-lg-3\">\n        <BsButtonGroup @value={{this.organizationType}} @type=\"radio\" @onChange={{this.changeOrgType}}\n                       class='m-b-10' as |bs|>\n          <bs.button @type=\"success\" @value=\"acc\" @size=\"sm\">Account</bs.button>\n          <bs.button @type=\"success\" @value=\"org\" @size=\"sm\">Organization</bs.button>\n        </BsButtonGroup>\n  \n      </div>\n      <div class=\"col-12 col-sm-6 col-lg-9\">\n        {{#if (eq this.organizationType 'org')}}\n          {{#if this.isLoadingLinkedOrgs}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading linked organizations...\n          {{else}}\n            <Ui::PSelect @options={{this.linkedOrgs}} @selected={{this.selectedOrg}}\n                         @placeholder=\"Please select an organization...\" @onChange={{this.orgSelected}} as |orgOpt|>\n              <strong>{{orgOpt.name}}</strong>\n              <small>{{orgOpt.email}}</small>\n            </Ui::PSelect>\n          {{/if}}\n        {{/if}}\n      </div>\n    </div>\n  {{/if}}\n  {{#if (and this.isPrimaryOrg (eq this.organizationType 'acc') (not this.isOnPrem))}}\n    {{#unless this.isLoading}}\n      <div class=\"panel\" data-sortable=\"false\">\n        <div class=\"panel-heading\">\n          <h4 class=\"panel-title\"><strong>Spending</strong></h4>\n          {{#if this.accountList.latestInvoice}}\n            <span class=\"text-muted m-l-10 small\">\n              {{moment-format this.accountList.latestInvoice.startDate \"MMM D\"}} to {{moment-format this.accountList.latestInvoice.endDate \"MMM D\"}}\n              via {{camel-to-title (if (eq this.accountList.paymentGateway \"AwsMetering\") \"AWS Marketplace\" this.accountList.paymentGateway)}}\n            </span>\n          {{/if}}\n        </div>\n        <div class=\"panel-body\">\n          <div class=\"row\">\n            <div class=\"col-12 col-md-6 m-b-15\">\n              <div class=\"d-flex align-items-center\">\n                <h3 class=\"m-b-0 m-r-5\">\n                  <LinkTo @route=\"account.billing.invoices\"><b>{{print-ccy this.accountList.balance}}</b></LinkTo>\n                </h3>\n                <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5\" data-bs-toggle=\"tooltip\" data-bs-title=\"Set Current Balance Alert\"\n                        onclick={{fn this.openBalanceAlertModal \"balance\"}}>\n                  <Ui::Icon @icon=\"fa fa-bell {{if this.accountList.balanceAlertThreshold 'text-warning' 'text-muted'}}\" />\n                </button>\n                {{#if this.accountList.balanceLimit}}\n                  <span class=\"text-muted m-l-10\">/ {{print-ccy this.accountList.balanceLimit}} limit</span>\n                {{/if}}\n              </div>\n              <span class=\"text-muted\">Current Balance</span>\n            </div>\n            <div class=\"col-12 col-md-6 m-b-15\">\n              <div class=\"d-flex align-items-center\">\n                <h3 class=\"m-b-0 m-r-5\">\n                  <b>{{print-ccy this.accountList.currentPaygBalance}}</b>\n                </h3>\n                <button type=\"button\" class=\"btn btn-link btn-sm p-0 m-l-5\" data-bs-toggle=\"tooltip\" data-bs-title=\"Set Additional Spending Alert\"\n                        onclick={{fn this.openBalanceAlertModal \"payg\"}}>\n                  <Ui::Icon @icon=\"fa fa-bell {{if this.accountList.paygSpendAlertThreshold 'text-warning' 'text-muted'}}\" />\n                </button>\n                <span class=\"m-l-10\">\n                  {{#if this.isEditingPaygLimit}}\n                    <span class=\"d-inline-flex align-items-center\">\n                      <span class=\"text-muted m-r-5\">/ $</span>\n                      <input type=\"number\" class=\"form-control form-control-sm d-inline-block billing-inline-input\"\n                             value={{this.editPaygLimitValue}}\n                             {{on \"input\" this.onPaygLimitInput}}\n                             {{on \"keydown\" this.onPaygLimitKeydown}}\n                             {{on \"blur\" this.cancelPaygLimitEdit}}\n                             {{did-insert this.focusPaygLimitInput}}\n                             disabled={{this.isSavingPaygLimit}} />\n                      <span class=\"text-muted m-l-5\">limit</span>\n                      {{#if this.isSavingPaygLimit}}\n                        <Ui::Icon @icon=\"fa fa-spinner fa-spin text-muted m-l-5\" />\n                      {{/if}}\n                    </span>\n                  {{else}}\n                    <a href=\"javascript:;\" onclick={{this.startEditPaygLimit}} class=\"text-muted editable-text\" data-bs-toggle=\"tooltip\" data-bs-title=\"Click to edit limit\">\n                      {{#if this.accountList.paygSpendLimit}}\n                        / {{print-ccy this.accountList.paygSpendLimit}} limit\n                      {{else}}\n                        no limit\n                      {{/if}}\n                    </a>\n                  {{/if}}\n                </span>\n              </div>\n              <span class=\"text-muted\">Additional Spending</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    {{/unless}}\n  \n    <div class=\"panel\" data-sortable=\"false\">\n      <div class=\"panel-heading\">\n        <h4 class=\"panel-title\"><strong>Plans</strong></h4>\n        {{#unless this.isLocked}}\n          <div class=\"panel-heading-btn\">\n            {{#if (and (eq this.accountList.purchasedPlans.length 1) (ends-with (get this.accountList.purchasedPlans '0.plan.name') 'free') ) }}\n              <button type=\"button\" onclick={{fn this.buyPlan (get this.accountList.purchasedPlans '0')}} class=\"btn btn-primary btn-xs\">\n                <strong><Ui::Icon @icon=\"fa fa-arrow-up\" /> Upgrade Plan</strong>\n              </button>\n            {{else}}\n              <LinkTo @route=\"account.billing.buy-plan\" class=\"btn btn-primary btn-xs\"><strong><Ui::Icon @icon=\"fa fa-plus\" /> Buy Additional Plan</strong></LinkTo>\n            {{/if}}\n          </div>\n        {{/unless}}\n      </div>\n      <div class=\"panel-body\">\n        {{#if this.isLoading}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading plans...\n        {{else}}\n          <div class=\"packages\">\n            {{#each this.accountList.purchasedPlans as |plan|}}\n              <Account::Billing::PricingPlanWidget\n                      @showMenu={{true}}\n                      @isLocked={{this.isLocked}}\n                      @purchased={{plan}}\n                      @plan={{plan.plan}}\n                      @purchasedPlans={{this.accountList.purchasedPlans}}\n                      @onChangePlan={{fn this.buyPlan plan}}\n                      @onTerminatePlan={{fn this.onTerminatePlan plan}}\n                      @isReadOnly={{true}}\n                      @undoTerminatePlan={{fn this.undoTerminatePlan plan}}\n              />\n            {{/each}}\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  {{/if}}\n  <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading overflow-auto\">\n      <h4 class=\"panel-title\"><strong>Products</strong></h4>\n      <div class=\"panel-heading-btn\">\n        {{#if (and this.showPurchaseAddonButton (eq this.organizationType 'acc') (not this.isLocked))}}\n          <button type=\"button\" class=\"btn btn-primary btn-xs m-l-10\" onclick={{fn this.buyAddon null}}>\n            <strong><Ui::Icon @icon=\"fa fa-plus\" /> Purchase Add-On</strong>\n          </button>\n        {{/if}}\n      </div>\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.isLoadingCategories}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading products...\n      {{else if this.billingCategories.length}}\n        <div class=\"billing-categories-grid\">\n          {{#each this.billingCategories key=\"category\" as |cat|}}\n            <Account::Billing::BillingCategoryCard\n                    @category={{cat}}\n                    @accountId={{this.accountList.id}}\n                    @organizationType={{this.organizationType}}\n                    @selectedOrgId={{this.selectedOrg.id}}\n                    @isLocked={{this.isLocked}}\n                    @organizationMode={{this.organizationMode}}\n                    @purchasedPlans={{this.accountList.purchasedPlans}}\n                    @goToDetails={{this.goToProductDetails}}\n                    @goToPlan={{this.goToPlanDetails}}\n                    @showUsageModal={{this.showUsageModalAction}}\n                    @updatedAddon={{this.buyAddon}}\n                    @terminateAddon={{this.terminateAddon}}\n                    @onInputChange={{this.onInputChange}}\n                    @onIncludedAlert={{fn this.openBalanceAlertModal \"categoryIncluded\"}}\n                    @onPaygAlert={{fn this.openBalanceAlertModal \"categoryPayg\"}}\n                    @onBudgetUpdate={{this.handleBudgetUpdate}}\n                    @alertUpdate={{this.categoryAlertUpdate}}\n            />\n          {{/each}}\n        </div>\n      {{else}}\n        <span class=\"text-muted\">No products found.</span>\n      {{/if}}\n    </div>\n  </div>\n  {{#if this.showUsageModal}}\n    <Account::Billing::SubscriptionUsageModal\n            @thisOrgOnly={{eq this.organizationType \"org\"}}\n            @selectedPeriodId={{this.selectedPeriodId}}\n            @selectedPeriod={{this.selectedPeriod}}\n            @onClose={{this.detailsModalClose}} />\n  {{/if}}\n  {{#if this.showAddonModal}}\n    <Account::Billing::AddonModal\n            @account={{this.accountList}}\n            @existingAddon={{this.selectedAddon}}\n            @preselectedAddon={{this.preselectedPlanProduct}}\n            @onClose={{this.closeAddonModal}}\n    />\n  {{/if}}\n  {{#if this.showBalanceAlertModal}}\n    <Account::Billing::BalanceAlertModal\n            @alertType={{this.balanceAlertType}}\n            @account={{this.accountList}}\n            @billingCategories={{this.billingCategories}}\n            @organizationType={{this.organizationType}}\n            @selectedOrgId={{this.selectedOrg.id}}\n            @onClose={{this.closeBalanceAlertModal}}\n    />\n  {{/if}}\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,0,[\\\"isPrimaryOrg\\\"]],[30,0,[\\\"hasLinkedOrgs\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-12 col-sm-6 col-lg-3\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"m-b-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"organizationType\\\"]],\\\"radio\\\",[30,0,[\\\"changeOrgType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"acc\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Account\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"org\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Organization\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-12 col-sm-6 col-lg-9\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"organizationType\\\"]],\\\"org\\\"],null],[[[41,[30,0,[\\\"isLoadingLinkedOrgs\\\"]],[[[1,\\\"          \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading linked organizations...\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,6],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"linkedOrgs\\\"]],[30,0,[\\\"selectedOrg\\\"]],\\\"Please select an organization...\\\",[30,0,[\\\"orgSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,[30,2,[\\\"email\\\"]]],[13],[1,\\\"\\\\n          \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,1],[[30,0,[\\\"isPrimaryOrg\\\"]],[28,[37,4],[[30,0,[\\\"organizationType\\\"]],\\\"acc\\\"],null],[28,[37,9],[[30,0,[\\\"isOnPrem\\\"]]],null]],null],[[[41,[51,[30,0,[\\\"isLoading\\\"]]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Spending\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"accountList\\\",\\\"latestInvoice\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"text-muted m-l-10 small\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[35,13],[[30,0,[\\\"accountList\\\",\\\"latestInvoice\\\",\\\"startDate\\\"]],\\\"MMM D\\\"],null]],[1,\\\" to \\\"],[1,[28,[35,13],[[30,0,[\\\"accountList\\\",\\\"latestInvoice\\\",\\\"endDate\\\"]],\\\"MMM D\\\"],null]],[1,\\\"\\\\n            via \\\"],[1,[28,[35,14],[[52,[28,[37,4],[[30,0,[\\\"accountList\\\",\\\"paymentGateway\\\"]],\\\"AwsMetering\\\"],null],\\\"AWS Marketplace\\\",[30,0,[\\\"accountList\\\",\\\"paymentGateway\\\"]]]],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-12 col-md-6 m-b-15\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-b-0 m-r-5\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,16],null,[[\\\"@route\\\"],[\\\"account.billing.invoices\\\"]],[[\\\"default\\\"],[[[[10,\\\"b\\\"],[12],[1,[28,[35,18],[[30,0,[\\\"accountList\\\",\\\"balance\\\"]]],null]],[13]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-link btn-sm p-0 m-l-5\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Set Current Balance Alert\\\"],[15,\\\"onclick\\\",[28,[37,20],[[30,0,[\\\"openBalanceAlertModal\\\"]],\\\"balance\\\"],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-bell \\\",[52,[30,0,[\\\"accountList\\\",\\\"balanceAlertThreshold\\\"]],\\\"text-warning\\\",\\\"text-muted\\\"]]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"accountList\\\",\\\"balanceLimit\\\"]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"text-muted m-l-10\\\"],[12],[1,\\\"/ \\\"],[1,[28,[35,18],[[30,0,[\\\"accountList\\\",\\\"balanceLimit\\\"]]],null]],[1,\\\" limit\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"Current Balance\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-12 col-md-6 m-b-15\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-b-0 m-r-5\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[12],[1,[28,[35,18],[[30,0,[\\\"accountList\\\",\\\"currentPaygBalance\\\"]]],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-link btn-sm p-0 m-l-5\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Set Additional Spending Alert\\\"],[15,\\\"onclick\\\",[28,[37,20],[[30,0,[\\\"openBalanceAlertModal\\\"]],\\\"payg\\\"],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-bell \\\",[52,[30,0,[\\\"accountList\\\",\\\"paygSpendAlertThreshold\\\"]],\\\"text-warning\\\",\\\"text-muted\\\"]]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEditingPaygLimit\\\"]],[[[1,\\\"                  \\\"],[10,1],[14,0,\\\"d-inline-flex align-items-center\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"text-muted m-r-5\\\"],[12],[1,\\\"/ $\\\"],[13],[1,\\\"\\\\n                    \\\"],[11,\\\"input\\\"],[24,0,\\\"form-control form-control-sm d-inline-block billing-inline-input\\\"],[16,2,[30,0,[\\\"editPaygLimitValue\\\"]]],[16,\\\"disabled\\\",[30,0,[\\\"isSavingPaygLimit\\\"]]],[24,4,\\\"number\\\"],[4,[38,22],[\\\"input\\\",[30,0,[\\\"onPaygLimitInput\\\"]]],null],[4,[38,22],[\\\"keydown\\\",[30,0,[\\\"onPaygLimitKeydown\\\"]]],null],[4,[38,22],[\\\"blur\\\",[30,0,[\\\"cancelPaygLimitEdit\\\"]]],null],[4,[38,23],[[30,0,[\\\"focusPaygLimitInput\\\"]]],null],[12],[13],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"text-muted m-l-5\\\"],[12],[1,\\\"limit\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSavingPaygLimit\\\"]],[[[1,\\\"                      \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin text-muted m-l-5\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,3],[14,6,\\\"javascript:;\\\"],[15,\\\"onclick\\\",[30,0,[\\\"startEditPaygLimit\\\"]]],[14,0,\\\"text-muted editable-text\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-title\\\",\\\"Click to edit limit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"accountList\\\",\\\"paygSpendLimit\\\"]],[[[1,\\\"                      / \\\"],[1,[28,[35,18],[[30,0,[\\\"accountList\\\",\\\"paygSpendLimit\\\"]]],null]],[1,\\\" limit\\\\n\\\"]],[]],[[[1,\\\"                      no limit\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"Additional Spending\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Plans\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isLocked\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[28,[37,4],[[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\",\\\"length\\\"]],1],null],[28,[37,25],[[28,[37,26],[[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\"]],\\\"0.plan.name\\\"],null],\\\"free\\\"],null]],null],[[[1,\\\"            \\\"],[10,\\\"button\\\"],[15,\\\"onclick\\\",[28,[37,20],[[30,0,[\\\"buyPlan\\\"]],[28,[37,26],[[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\"]],\\\"0\\\"],null]],null]],[14,0,\\\"btn btn-primary btn-xs\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-arrow-up\\\"]],null],[1,\\\" Upgrade Plan\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,16],[[24,0,\\\"btn btn-primary btn-xs\\\"]],[[\\\"@route\\\"],[\\\"account.billing.buy-plan\\\"]],[[\\\"default\\\"],[[[[10,\\\"strong\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Buy Additional Plan\\\"],[13]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading plans...\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"packages\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,28],[[28,[37,28],[[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[39,29],null,[[\\\"@showMenu\\\",\\\"@isLocked\\\",\\\"@purchased\\\",\\\"@plan\\\",\\\"@purchasedPlans\\\",\\\"@onChangePlan\\\",\\\"@onTerminatePlan\\\",\\\"@isReadOnly\\\",\\\"@undoTerminatePlan\\\"],[true,[30,0,[\\\"isLocked\\\"]],[30,3],[30,3,[\\\"plan\\\"]],[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\"]],[28,[37,20],[[30,0,[\\\"buyPlan\\\"]],[30,3]],null],[28,[37,20],[[30,0,[\\\"onTerminatePlan\\\"]],[30,3]],null],true,[28,[37,20],[[30,0,[\\\"undoTerminatePlan\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading overflow-auto\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Products\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"showPurchaseAddonButton\\\"]],[28,[37,4],[[30,0,[\\\"organizationType\\\"]],\\\"acc\\\"],null],[28,[37,9],[[30,0,[\\\"isLocked\\\"]]],null]],null],[[[1,\\\"        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary btn-xs m-l-10\\\"],[15,\\\"onclick\\\",[28,[37,20],[[30,0,[\\\"buyAddon\\\"]],null],null]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Purchase Add-On\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingCategories\\\"]],[[[1,\\\"      \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading products...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"billingCategories\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"billing-categories-grid\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,28],[[28,[37,28],[[30,0,[\\\"billingCategories\\\"]]],null]],null],\\\"category\\\",[[[1,\\\"          \\\"],[8,[39,30],null,[[\\\"@category\\\",\\\"@accountId\\\",\\\"@organizationType\\\",\\\"@selectedOrgId\\\",\\\"@isLocked\\\",\\\"@organizationMode\\\",\\\"@purchasedPlans\\\",\\\"@goToDetails\\\",\\\"@goToPlan\\\",\\\"@showUsageModal\\\",\\\"@updatedAddon\\\",\\\"@terminateAddon\\\",\\\"@onInputChange\\\",\\\"@onIncludedAlert\\\",\\\"@onPaygAlert\\\",\\\"@onBudgetUpdate\\\",\\\"@alertUpdate\\\"],[[30,4],[30,0,[\\\"accountList\\\",\\\"id\\\"]],[30,0,[\\\"organizationType\\\"]],[30,0,[\\\"selectedOrg\\\",\\\"id\\\"]],[30,0,[\\\"isLocked\\\"]],[30,0,[\\\"organizationMode\\\"]],[30,0,[\\\"accountList\\\",\\\"purchasedPlans\\\"]],[30,0,[\\\"goToProductDetails\\\"]],[30,0,[\\\"goToPlanDetails\\\"]],[30,0,[\\\"showUsageModalAction\\\"]],[30,0,[\\\"buyAddon\\\"]],[30,0,[\\\"terminateAddon\\\"]],[30,0,[\\\"onInputChange\\\"]],[28,[37,20],[[30,0,[\\\"openBalanceAlertModal\\\"]],\\\"categoryIncluded\\\"],null],[28,[37,20],[[30,0,[\\\"openBalanceAlertModal\\\"]],\\\"categoryPayg\\\"],null],[30,0,[\\\"handleBudgetUpdate\\\"]],[30,0,[\\\"categoryAlertUpdate\\\"]]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No products found.\\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showUsageModal\\\"]],[[[1,\\\"  \\\"],[8,[39,31],null,[[\\\"@thisOrgOnly\\\",\\\"@selectedPeriodId\\\",\\\"@selectedPeriod\\\",\\\"@onClose\\\"],[[28,[37,4],[[30,0,[\\\"organizationType\\\"]],\\\"org\\\"],null],[30,0,[\\\"selectedPeriodId\\\"]],[30,0,[\\\"selectedPeriod\\\"]],[30,0,[\\\"detailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showAddonModal\\\"]],[[[1,\\\"  \\\"],[8,[39,32],null,[[\\\"@account\\\",\\\"@existingAddon\\\",\\\"@preselectedAddon\\\",\\\"@onClose\\\"],[[30,0,[\\\"accountList\\\"]],[30,0,[\\\"selectedAddon\\\"]],[30,0,[\\\"preselectedPlanProduct\\\"]],[30,0,[\\\"closeAddonModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showBalanceAlertModal\\\"]],[[[1,\\\"  \\\"],[8,[39,33],null,[[\\\"@alertType\\\",\\\"@account\\\",\\\"@billingCategories\\\",\\\"@organizationType\\\",\\\"@selectedOrgId\\\",\\\"@onClose\\\"],[[30,0,[\\\"balanceAlertType\\\"]],[30,0,[\\\"accountList\\\"]],[30,0,[\\\"billingCategories\\\"]],[30,0,[\\\"organizationType\\\"]],[30,0,[\\\"selectedOrg\\\",\\\"id\\\"]],[30,0,[\\\"closeBalanceAlertModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[\\\"bs\\\",\\\"orgOpt\\\",\\\"plan\\\",\\\"cat\\\"],[\\\"if\\\",\\\"and\\\",\\\"div\\\",\\\"bs-button-group\\\",\\\"eq\\\",\\\"ui/icon\\\",\\\"ui/p-select\\\",\\\"strong\\\",\\\"small\\\",\\\"not\\\",\\\"unless\\\",\\\"h4\\\",\\\"span\\\",\\\"moment-format\\\",\\\"camel-to-title\\\",\\\"h3\\\",\\\"link-to\\\",\\\"b\\\",\\\"print-ccy\\\",\\\"button\\\",\\\"fn\\\",\\\"input\\\",\\\"on\\\",\\\"did-insert\\\",\\\"a\\\",\\\"ends-with\\\",\\\"get\\\",\\\"each\\\",\\\"-track-array\\\",\\\"account/billing/pricing-plan-widget\\\",\\\"account/billing/billing-category-card\\\",\\\"account/billing/subscription-usage-modal\\\",\\\"account/billing/addon-modal\\\",\\\"account/billing/balance-alert-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/current-subscription.hbs\",\n    \"isStrictMode\": false\n  });\n  const CATEGORY_ORDER = ['VU', 'TestRunner', 'UnlimitedTestRunner', 'Monitor', 'BrowserSession', 'LiveSession', 'AiCredit', 'ElasticIP', 'PublicIP', 'NotificationCredits'];\n  const CATEGORY_DISPLAY_NAMES = {\n    VU: 'Virtual User',\n    AiCredit: 'AI Credit'\n  };\n  function categoryDisplayName(category) {\n    return CATEGORY_DISPLAY_NAMES[category] || _lib.default.camelCaseToTitleCase(category);\n  }\n  let AccountBillingCurrentSubscriptionComponent = _exports.default = (_class = class AccountBillingCurrentSubscriptionComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor3, this);\n      _initializerDefineProperty(this, \"accountList\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor5, this);\n      _initializerDefineProperty(this, \"showAddonModal\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showPurchaseAddonButton\", _descriptor7, this);\n      _initializerDefineProperty(this, \"selectedAddon\", _descriptor8, this);\n      _initializerDefineProperty(this, \"preselectedPlanProduct\", _descriptor9, this);\n      _defineProperty(this, \"isPrimaryOrg\", void 0);\n      _defineProperty(this, \"hasLinkedOrgs\", void 0);\n      _initializerDefineProperty(this, \"selectedPeriod\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedPeriodId\", _descriptor1, this);\n      _initializerDefineProperty(this, \"showUsageModal\", _descriptor10, this);\n      _initializerDefineProperty(this, \"isLoadingLinkedOrgs\", _descriptor11, this);\n      _initializerDefineProperty(this, \"linkedOrgs\", _descriptor12, this);\n      _initializerDefineProperty(this, \"selectedOrg\", _descriptor13, this);\n      _initializerDefineProperty(this, \"organizationType\", _descriptor14, this);\n      _defineProperty(this, \"isSuperAdmin\", _environment.config.currentUser?.isAdmin);\n      _defineProperty(this, \"isOnPrem\", _environment.config.isOnPrem);\n      _initializerDefineProperty(this, \"showBalanceAlertModal\", _descriptor15, this);\n      _initializerDefineProperty(this, \"balanceAlertType\", _descriptor16, this);\n      _initializerDefineProperty(this, \"isEditingPaygLimit\", _descriptor17, this);\n      _initializerDefineProperty(this, \"editPaygLimitValue\", _descriptor18, this);\n      _initializerDefineProperty(this, \"billingCategories\", _descriptor19, this);\n      _initializerDefineProperty(this, \"isLoadingCategories\", _descriptor20, this);\n      _initializerDefineProperty(this, \"categoryAlertUpdate\", _descriptor21, this);\n      _initializerDefineProperty(this, \"isSavingPaygLimit\", _descriptor22, this);\n      this.isPrimaryOrg = !_environment.config.currentUser.org?.primaryOrg;\n      this.hasLinkedOrgs = _environment.config.currentUser.org?.hasLinkedOrgs;\n      this.organizationType = this.args.thisOrgOnly && this.args.thisOrgOnly !== 'false' ? 'org' : this.isPrimaryOrg ? 'acc' : 'org';\n      if (this.organizationType === 'org') {\n        this.loadLinkedOrgs();\n      } else {\n        this.loadAccount();\n      }\n      if (!this.isPrimaryOrg) {\n        this.selectedOrg = _environment.config.currentUser.org;\n        this.args.selectedOrg(this.selectedOrg.id);\n      }\n    }\n    async loadAccount(orgId) {\n      const expectedType = this.organizationType;\n      const expectedOrg = orgId;\n      this.isLoading = true;\n      const accountList = await this.api.billing.getAccount(orgId, this.organizationType === 'org');\n      if (this.organizationType !== expectedType || orgId !== expectedOrg) return;\n      this.accountList = accountList;\n      this.showPurchaseAddonButton = this.accountList.purchasedPlans.some(pp => pp.plan.products.some(p => !p.included));\n      this.isLoading = false;\n      this.loadBillingCategories(orgId);\n      if (this.router.doAccountRefresh) {\n        delete this.router.doAccountRefresh;\n        _environment.config.currentUser.org.account = this.accountList;\n        this.envConfig.isPaidPlan();\n      }\n    }\n    get organizationMode() {\n      return this.organizationType === 'acc' && !_environment.config.currentUser.org?.primaryOrg;\n    }\n    get isLocked() {\n      return this.isOnPrem || this.accountList?.locked && !this.isSuperAdmin;\n    }\n    buyPlan(plan) {\n      this.router.transitionTo('account.billing.change-plan', plan.id);\n    }\n    buyAddon(addon) {\n      this.showAddonModal = true;\n      this.selectedAddon = this.accountList?.subscriptions?.find(s => s.id === addon?.id);\n      this.preselectedPlanProduct = addon;\n    }\n    terminateAddon(addon) {\n      let sub = this.accountList?.subscriptions?.find(s => s.id === addon?.id);\n      if (sub) {\n        let confirmMsg = `Are you sure you want to terminate ${sub.productDescription}?`;\n        if (sub.currentPeriod.endDate && sub.planProduct.frequency !== 'OneTime') {\n          confirmMsg += `<br><br>The termination will be effective on ` + moment(sub.currentPeriod.endDate).format('MMM D');\n        }\n        _lib.default.confirm(confirmMsg, 'Yes', async () => {\n          try {\n            await this.api.billing.terminateAddOn(addon?.id);\n            _lib.default.info(`Add-On Successfully terminated.`);\n            this.loadAccount();\n          } catch (e) {\n            _lib.default.info(e.statusText);\n          }\n        }, 'Cancel');\n      }\n    }\n    closeAddonModal(doRefresh, purchaseSub) {\n      this.showAddonModal = false;\n      this.selectedAddon = null;\n      this.preselectedPlanProduct = null;\n      if (doRefresh && !purchaseSub) {\n        this.loadAccount();\n      } else if (purchaseSub) {\n        this.goToProductDetails(purchaseSub);\n      }\n    }\n    showUsageModalAction(item, subscriptions) {\n      this.selectedPeriodId = item.id;\n      this.selectedPeriod = (subscriptions || []).find(sub => sub.currentPeriod?.id === item.id);\n      this.showUsageModal = true;\n    }\n    detailsModalClose() {\n      this.showUsageModal = false;\n      this.selectedPeriod = null;\n      this.selectedPeriodId = null;\n    }\n    _confirmAndExecute(message, apiCall) {\n      _lib.default.confirm(message, 'OK', async () => {\n        try {\n          await apiCall();\n          this.loadAccount();\n        } catch (e) {\n          _lib.default.info(e.statusText);\n        }\n      }, 'Cancel');\n    }\n    async onTerminatePlan(purchasedPlan) {\n      this._confirmAndExecute(`Are you sure you want to terminate your ${purchasedPlan.plan.displayName} plan subscription?\n    The termination will be effective on ${_lib.default.displayDate(purchasedPlan.currentPeriod.endDate)}`, async () => {\n        await this.api.billing.terminatePlan(purchasedPlan.id);\n        _lib.default.info('Subscription terminated');\n      });\n    }\n    undoTerminatePlan(plan) {\n      const lbl = plan.changedToId ? 'change' : 'termination';\n      this._confirmAndExecute(`Are you sure you want to undo the ${plan.plan.displayName} plan ${lbl}?`, async () => {\n        await this.api.billing.undoTerminatePlan(plan.id);\n        _lib.default.info('Subscription terminated');\n      });\n    }\n    changeOrgType(type) {\n      this.organizationType = type;\n      this.billingCategories = [];\n      this.isLoadingCategories = true;\n      if (type === 'org') {\n        this.args.selectedOrg(_environment.config.currentUser.org.id);\n        this.loadLinkedOrgs();\n      } else {\n        this.args.selectedOrg();\n        this.loadAccount();\n      }\n    }\n    async loadLinkedOrgs() {\n      this.isLoading = true;\n      this.isLoadingLinkedOrgs = true;\n      try {\n        const results = await _server.default.getLinkedOrgs(_environment.config.currentUser.org.id, false);\n        this.linkedOrgs = _.sortBy(results, 'name');\n        this.selectedOrg = _.find(results, o => o.id === _environment.config.currentUser.org.id);\n        this.isLoadingLinkedOrgs = false;\n        this.loadAccount(this.selectedOrg.id);\n      } catch {\n        this.isLoadingLinkedOrgs = false;\n        this.isLoading = false;\n      }\n    }\n    orgSelected(org) {\n      this.selectedOrg = org;\n      this.args.selectedOrg(this.selectedOrg.id);\n      this.billingCategories = [];\n      this.isLoadingCategories = true;\n      this.loadAccount(org.id);\n    }\n    goToProductDetails(subscriptionId) {\n      this.router.transitionTo('account.billing.subscription-history', subscriptionId.id, {\n        queryParams: {\n          thisOrgOnly: this.organizationType === 'org' ? this.selectedOrg.id : 'false'\n        }\n      });\n    }\n    goToPlanDetails(purchasedPlanId) {\n      this.router.transitionTo('account.billing.plans', purchasedPlanId.id);\n    }\n    onInputChange(id, type, value) {\n      const sub = _.find(this.accountList.subscriptions, s => s.id === id);\n      value = value !== '' ? value : null;\n      sub[type] = value;\n      const updateObj = {\n        perUsageLimit: sub.perUsageLimit,\n        totalLimit: sub.totalLimit,\n        usageTimeAlertThreshold: sub.usageTimeAlertThreshold\n      };\n      this.api.billing.updateSubscriptionLimit(id, updateObj).then(() => {}, () => _lib.default.info('Error updating subscription limit'));\n    }\n    async loadBillingCategories(orgId) {\n      const expectedType = this.organizationType;\n      const expectedOrg = orgId;\n      this.isLoadingCategories = true;\n      try {\n        const categories = await this.api.billing.getBillingCategoriesList(this.accountList.id, this.organizationType === 'org' ? orgId : null);\n        if (this.organizationType !== expectedType || orgId !== expectedOrg) return;\n        this.billingCategories = (categories || []).map(c => ({\n          ...c,\n          displayName: categoryDisplayName(c.category)\n        })).sort((a, b) => {\n          return CATEGORY_ORDER.indexOf(a.category) - CATEGORY_ORDER.indexOf(b.category);\n        });\n      } catch (e) {\n        this.billingCategories = [];\n      }\n      this.isLoadingCategories = false;\n    }\n    openBalanceAlertModal(type, category) {\n      this.balanceAlertType = typeof category === 'string' ? {\n        type,\n        category\n      } : type;\n      this.showBalanceAlertModal = true;\n    }\n    _updateCategory(categoryKey, updatedCategory) {\n      const idx = this.billingCategories.findIndex(c => c.category === categoryKey);\n      if (idx < 0) return;\n      const updated = [...this.billingCategories];\n      updated[idx] = updatedCategory;\n      this.billingCategories = updated;\n    }\n    handleBudgetUpdate(category, updatedCategory) {\n      this._updateCategory(category, updatedCategory);\n    }\n    closeBalanceAlertModal(update) {\n      this.showBalanceAlertModal = false;\n      this.balanceAlertType = null;\n      if (!update) return;\n      if (update.category) {\n        const category = this.billingCategories.find(c => c.category === update.category);\n        if (category) {\n          const settingsKey = this.organizationType === 'org' ? 'orgSettings' : 'accountSettings';\n          const updatedSettings = {\n            ...category[settingsKey],\n            [update.field]: update.value\n          };\n          this._updateCategory(update.category, {\n            ...category,\n            [settingsKey]: updatedSettings\n          });\n        }\n        this.categoryAlertUpdate = {\n          ...update\n        };\n      } else {\n        this.accountList = {\n          ...this.accountList,\n          [update.field]: update.value\n        };\n      }\n    }\n    startEditPaygLimit() {\n      this.editPaygLimitValue = this.accountList.paygSpendLimit || '';\n      this.isEditingPaygLimit = true;\n    }\n    onPaygLimitInput(e) {\n      this.editPaygLimitValue = e.target.value;\n    }\n    focusPaygLimitInput(element) {\n      element.focus();\n      element.select();\n    }\n    onPaygLimitKeydown(e) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        this.savePaygLimit();\n      } else if (e.key === 'Escape') {\n        this._skipPaygBlur = true;\n        this.isEditingPaygLimit = false;\n      }\n    }\n    cancelPaygLimitEdit() {\n      if (this._skipPaygBlur) {\n        this._skipPaygBlur = false;\n        return;\n      }\n      if (!this.isSavingPaygLimit) {\n        this.isEditingPaygLimit = false;\n      }\n    }\n    async savePaygLimit() {\n      const val = parseFloat(this.editPaygLimitValue);\n      const isDelete = !(val > 0) && this.accountList.paygSpendLimit;\n      if (!(val > 0) && !isDelete) {\n        this.isEditingPaygLimit = false;\n        return;\n      }\n      const body = val > 0 ? {\n        paygSpendLimit: val\n      } : {\n        deletePaygSpendLimit: true\n      };\n      this.isSavingPaygLimit = true;\n      try {\n        await this.api.billing.updateAccount(this.accountList.id, body);\n        this.accountList = {\n          ...this.accountList,\n          paygSpendLimit: val > 0 ? val : null\n        };\n        this.isEditingPaygLimit = false;\n      } catch (e) {\n        _lib.default.info('Error updating spend limit');\n      } finally {\n        this.isSavingPaygLimit = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"accountList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showAddonModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showPurchaseAddonButton\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"selectedAddon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"preselectedPlanProduct\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"selectedPeriod\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedPeriodId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"showUsageModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingLinkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"linkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"organizationType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"showBalanceAlertModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"balanceAlertType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"isEditingPaygLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"editPaygLimitValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"billingCategories\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingCategories\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"categoryAlertUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"isSavingPaygLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"buyPlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"buyPlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"buyAddon\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"buyAddon\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"terminateAddon\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"terminateAddon\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeAddonModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeAddonModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showUsageModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showUsageModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailsModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onTerminatePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onTerminatePlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"undoTerminatePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"undoTerminatePlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeOrgType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeOrgType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadLinkedOrgs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadLinkedOrgs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"orgSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orgSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goToProductDetails\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToProductDetails\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goToPlanDetails\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToPlanDetails\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInputChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInputChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openBalanceAlertModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openBalanceAlertModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleBudgetUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleBudgetUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeBalanceAlertModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeBalanceAlertModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"startEditPaygLimit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"startEditPaygLimit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onPaygLimitInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPaygLimitInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusPaygLimitInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusPaygLimitInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onPaygLimitKeydown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPaygLimitKeydown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelPaygLimitEdit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelPaygLimitEdit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"savePaygLimit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"savePaygLimit\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingCurrentSubscriptionComponent);\n});","define(\"@testable/shared-ui/components/account/billing/history-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _toHtml, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  class HistoryGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: '',\n        data: 'id',\n        width: '20px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return \" <a href='javascript:;' data-ember-action='showDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Type',\n        data: 'entityType',\n        width: '120px',\n        render: data => _lib.default.camelCaseToTitleCase(data)\n      }, {\n        title: 'Started At',\n        data: 'startTs',\n        width: '70px',\n        render: (data, type) => type === 'display' ? _lib.default.displayDateTime(data) : moment(data).valueOf()\n      }, {\n        title: 'Ended At',\n        data: 'endTs',\n        width: '70px',\n        render: (data, type) => type === 'display' ? _lib.default.displayDateTime(data) : moment(data).valueOf()\n      }, {\n        title: 'Status',\n        data: 'pending',\n        width: '60px',\n        render: data => data ? 'Pending' : 'Finalized'\n      }];\n      if (this.args.hasLinkedOrgs) columns.push({\n        title: 'Organization',\n        data: 'organizationName',\n        width: '70px'\n      });\n      columns.push({\n        title: 'Description',\n        data: 'description',\n        width: '300px',\n        render: data => (0, _toHtml.sanitizeHtml)([data, 'html'])\n      });\n      columns.push({\n        title: 'Charge (USD)',\n        data: 'charge',\n        width: '80px',\n        render: (data, type) => type === 'display' ? _lib.default.printCcy(data) : data\n      });\n      return columns;\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No usage history yet.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }\n  _exports.default = HistoryGrid;\n});","define(\"@testable/shared-ui/components/account/billing/history-subscription-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _service, _tracking, _toHtml, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let HistorySubscriptionGrid = _exports.default = (_class = class HistorySubscriptionGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"haveResources\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isResourcesColumnVisible\", _descriptor3, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: 'Date',\n        width: '100px',\n        data: 'startTs',\n        render: (data, type) => type === 'display' ? _lib.default.displayDateTime(data) : moment(data).valueOf()\n      }, {\n        title: 'Subscription',\n        data: 'product',\n        width: '100px',\n        render: (data, type, full) => {\n          if (type === 'display') {\n            return \" <a href='javascript:;' data-ember-action='showSubDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.subscriptionPeriodId\n            }) + \"'>\" + data + '</a> ';\n          }\n          return data;\n        }\n      }, {\n        title: 'Status',\n        data: 'pending',\n        width: '100px',\n        render: data => data ? 'Pending' : 'Finalized'\n      }, {\n        title: 'Organization',\n        data: 'id',\n        width: '200px',\n        render: (data, type, full) => full.usageRecord.organizationName\n      }, {\n        title: 'Qty Used',\n        data: 'quantity',\n        width: '70px'\n      }, {\n        title: 'Description',\n        data: 'description',\n        width: '200px'\n      }, {\n        title: 'Charge',\n        data: 'charge',\n        width: '70px',\n        render: (data, type) => type === 'display' ? _lib.default.printCcy(data) : data\n      }, {\n        title: 'Relates To',\n        data: 'id',\n        width: '250px',\n        render: (data, type, full) => {\n          let description = (0, _toHtml.sanitizeHtml)([full.usageRecord.description, 'html']);\n          if (type === 'display') {\n            const desc = description;\n            const [first, ...rest] = desc.split(' (');\n            const remainder = rest.join(' (');\n            return \" <a href='javascript:;' data-ember-action='showDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.usageRecord.id\n            }) + \"'>\" + first + '</a> ' + remainder;\n          }\n          return description;\n        }\n      }];\n      if (this.haveResources) {\n        columns.push({\n          title: 'Resources',\n          data: 'id',\n          width: '250px',\n          render: (data, type, full) => {\n            return this.api.billing.getResourceString(full.resources, full.productCode);\n          }\n        });\n      }\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'desc']];\n    }\n    createDataSource() {\n      this.haveResources = this.args.data.find(d => d.resources) !== undefined;\n      if (!this.isResourcesColumnVisible && this.haveResources) this.isResourcesColumnVisible = true;\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n      this.createDataSource();\n      if (!this.isResourcesColumnVisible && this.haveResources) {\n        this.isResourcesColumnVisible = true;\n        this.refreshTable();\n      }\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: moment(this.args.endTime) < new Date() ? \"No usage occurred during this period\" : \"No usage yet utilizing this subscription\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"haveResources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isResourcesColumnVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/account/billing/history-usage-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"historyUsageDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Usage Details</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          {{#if this.isLoaded}}\n            <div class=\"widget-row\">\n              <div class=\"widget-container\">\n                <div class=\"widget-card bg-white widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h3><b> {{if this.historyObj.pending 'Pending' 'Finalized'}}</b></h3>\n                    <b class=\"text-black-transparent-7\">Status</b>\n                  </div>\n                </div>\n              </div>\n  \n              <div class=\"widget-container\">\n                <div class=\"widget-card bg-white widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h3><b>{{print-date this.historyObj.startTs \"MMM D 'YY LTS\"}}</b></h3>\n                    <b class=\"text-black-transparent-7\">Started At</b>\n                  </div>\n                </div>\n              </div>\n              <div class=\"widget-container\">\n                <div class=\"widget-card bg-white widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h3><b>{{if this.historyObj.endTs (print-date this.historyObj.endTs \"MMM D 'YY LTS\") '-'}}</b></h3>\n                    <b class=\"text-black-transparent-7\">Ended At</b>\n                  </div>\n                </div>\n              </div>\n  \n              <div class=\"widget-container\">\n                <div class=\"widget-card bg-white widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h3><b>${{this.historyObj.charge}}</b></h3>\n                    <b class=\"text-black-transparent-7\">Charge</b>\n                  </div>\n                </div>\n              </div>\n            </div>\n  \n            {{#if this.historyObj.description}}\n              <div class=\"note note-info alert\">\n                {{this.historyObj.description}}\n              </div>\n            {{/if}}\n  \n            <table class=\"table\">\n              <thead>\n              <tr>\n                <th width=\"300px\">Subscription</th>\n                <th width=\"100px\">Qty Used</th>\n                <th>Description</th>\n                <th width=\"120px\">Charge</th>\n              </tr>\n              </thead>\n              <tbody>\n                {{#each this.historyObj.usages as |entry|}}\n                  <tr>\n                    <td>{{entry.product}}</td>\n                    <td>{{entry.quantity}}</td>\n                    <td>{{entry.description}}</td>\n                    <td>${{entry.charge}}</td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          {{else}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"historyUsageDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Usage Details\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\" \\\"],[1,[52,[30,0,[\\\"historyObj\\\",\\\"pending\\\"]],\\\"Pending\\\",\\\"Finalized\\\"]],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Status\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,7],[[30,0,[\\\"historyObj\\\",\\\"startTs\\\"]],\\\"MMM D 'YY LTS\\\"],null]],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Started At\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[52,[30,0,[\\\"historyObj\\\",\\\"endTs\\\"]],[28,[37,7],[[30,0,[\\\"historyObj\\\",\\\"endTs\\\"]],\\\"MMM D 'YY LTS\\\"],null],\\\"-\\\"]],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Ended At\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"$\\\"],[1,[30,0,[\\\"historyObj\\\",\\\"charge\\\"]]],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Charge\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"historyObj\\\",\\\"description\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"historyObj\\\",\\\"description\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"300px\\\"],[12],[1,\\\"Subscription\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"100px\\\"],[12],[1,\\\"Qty Used\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,\\\"Description\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"120px\\\"],[12],[1,\\\"Charge\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"historyObj\\\",\\\"usages\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"product\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"quantity\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"description\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,\\\"$\\\"],[1,[30,1,[\\\"charge\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"entry\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"h3\\\",\\\"b\\\",\\\"print-date\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/history-usage-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let LimitModalComponent = _exports.default = (_class = class LimitModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"historyObj\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor3, this);\n    }\n    async requestDetails() {\n      this.historyObj = await this.api.billing.historyDetails(this.args.historyObjId);\n      this.isLoaded = true;\n    }\n    didInsert() {\n      let self = this;\n      $('#historyUsageDetailsModal').on('hidden.bs.modal', function () {\n        self.args.onClose();\n      });\n      $('#historyUsageDetailsModal').modal('show');\n      $('#historyUsageDetailsModal').on('shown.bs.modal', function () {\n        self.requestDetails();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"historyObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LimitModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/history\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <strong>Usage History</strong>\n        <BsButtonGroup @value={{this.viewType}} class=\"m-l-10\" @type=\"radio\" @onChange={{this.updateViewType}} as |bg|>\n          <bg.button @type=\"success\" @value=\"byTest\" @size=\"xs\">By Test</bg.button>\n          <bg.button @type=\"success\" @value=\"bySubscription\" @size=\"xs\">By Subscription</bg.button>\n        </BsButtonGroup>\n      </h4>\n      <div class=\"panel-heading-btn\">\n        <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\" target=\"_blank\"\n           title=\"Download usage history\" href={{this.downloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n      </div>\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"pull-right\">\n        <div class=\"row\">\n          <div class=\"col-12\">\n            <BsButtonGroup @value={{this.range}} @type=\"radio\" @onChange={{this.rangeChanged}} as |bg|>\n              <bg.button @type=\"success\" @value=\"currentMonth\" @size=\"xs\">This Month</bg.button>\n              <bg.button @type=\"success\" @value=\"lastMonth\" @size=\"xs\">Last Month</bg.button>\n              <bg.button @type=\"success\" @value=\"custom\" @size=\"xs\">Custom</bg.button>\n            </BsButtonGroup>\n  \n            {{#if this.hasLinkedOrgs}}\n              <label class=\"normal m-l-10\" style=\"vertical-align: sub\">\n                <Input @type=\"checkbox\" @checked={{this.includeLinkedOrgs}} {{on 'change' this.onLinkedOrgChange}}/>\n                Include linked organizations\n              </label>\n            {{/if}}\n            <label class=\"normal m-l-10\" style=\"vertical-align: sub\">\n              <Input @type=\"checkbox\" @checked={{this.showNoTestCharges}} {{on 'change' this.updateNoTestCharges}}/>\n              Show tests with no per-test charges\n            </label>\n          </div>\n        </div>\n        {{#if (eq this.range 'custom')}}\n          <div class=\"row m-b-10\">\n            <div class=\"col-md-6\">\n              <label class=\"m-b-0\">Start Date</label>\n              <Ui::BsDatetimepicker @date={{this.startTs}}\n                                    @maxDate={{this.endTs}}\n                                    @onHide={{this.startDateChanged}}\n              />\n            </div>\n            <div class=\"col-md-6\">\n              <label class=\"m-b-0\">End Date</label>\n              <Ui::BsDatetimepicker @date={{this.endTs}}\n                                    @minDate={{this.startTs}}\n                                    @onHide={{this.endDateChanged}} />\n            </div>\n          </div>\n        {{/if}}\n      </div>\n      {{#if this.isLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n          {{#if (eq this.viewType 'byTest')}}\n            Loading Usage History...\n          {{else}}\n            Loading Subscription History...\n          {{/if}}\n      {{else}}\n        <div class=\"m-t-10\">\n          <strong>\n            {{#if (eq this.viewType 'byTest')}}\n              {{this.history.length}} / {{this.historyTotal}}\n            {{else}}\n              {{this.subHistory.length}} / {{this.subHistoryTotal}}\n            {{/if}}\n            total records\n          </strong>\n          {{#if this.showLoadMore}}\n            <a role=\"button\" class=\"text-primary\" {{on 'click' this.loadMoreBtn}}>\n              {{#if this.showLoadingMore}}\n                <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading More...\n              {{else}}\n                Load More\n              {{/if}}\n            </a>\n          {{/if}}\n        </div>\n        {{#if (eq this.viewType 'byTest')}}\n          <Account::Billing::HistoryGrid @id=\"usageHistoryGrid\"\n                                         @data={{this.history}}\n                                         @hasLinkedOrgs={{this.includeLinkedOrgs}}\n                                         @showDetailsModal={{this.showDetailsModalAction}}\n          />\n        {{else}}\n          <Account::Billing::HistorySubscriptionGrid @id=\"usageHistoryGrid\"\n                                         @data={{this.subHistory}}\n                                         @hasLinkedOrgs={{this.includeLinkedOrgs}}\n                                         @showDetailsModal={{this.showDetailsModalAction}}\n                                         @showSubDetailsModal={{this.showSubDetailsModalAction}}\n                                         @endTime={{this.endTs}}\n          />\n        {{/if}}\n      {{/if}}\n    </div>\n  </div>\n  {{#if this.showDetailsModal}}\n    <Account::Billing::HistoryUsageDetailsModal\n            @historyObjId={{this.selectedUsageObjId}}\n            @onClose={{this.detailsModalClose}} />\n  {{/if}}\n  {{#if this.showSubDetailsModal}}\n    <Account::Billing::SubscriptionDetailsModal\n            @isAddOn={{this.isAddOn}}\n            @isPrimaryOrg={{this.isPrimaryOrg}}\n            @productCode={{this.selectedHistoryObj.subscription.planProduct.product.code}}\n            @historyObj={{this.selectedHistoryObj}}\n            @subscription={{this.selectedHistoryObj.subscription}}\n            @thisOrgOnly={{this.thisOrgOnly}}\n            @showUsageModalAction={{this.showUsageModalAction}}\n            @onClose={{this.subDetailsModalClose}} />\n  {{/if}}\n  {{#if this.showUsageModal}}\n    <Account::Billing::SubscriptionUsageModal\n            @thisOrgOnly={{this.thisOrgOnly}}\n            @selectedPeriodId={{this.selectedPeriodId}}\n            @selectedPeriod={{this.selectedPeriod}}\n            @onClose={{this.usageModalClose}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Usage History\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewType\\\"]],\\\"radio\\\",[30,0,[\\\"updateViewType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"byTest\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Test\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"bySubscription\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Subscription\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[1]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download usage history\\\"],[15,6,[30,0,[\\\"downloadUrl\\\"]]],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-12\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,3],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"range\\\"]],\\\"radio\\\",[30,0,[\\\"rangeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"currentMonth\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"This Month\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"lastMonth\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Last Month\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"custom\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Custom\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[2]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasLinkedOrgs\\\"]],[[[1,\\\"            \\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-l-10\\\"],[14,5,\\\"vertical-align: sub\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],[[4,[38,9],[\\\"change\\\",[30,0,[\\\"onLinkedOrgChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"includeLinkedOrgs\\\"]]]],null],[1,\\\"\\\\n              Include linked organizations\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-l-10\\\"],[14,5,\\\"vertical-align: sub\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],[[4,[38,9],[\\\"change\\\",[30,0,[\\\"updateNoTestCharges\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"showNoTestCharges\\\"]]]],null],[1,\\\"\\\\n            Show tests with no per-test charges\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"range\\\"]],\\\"custom\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"row m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-6\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"m-b-0\\\"],[12],[1,\\\"Start Date\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,11],null,[[\\\"@date\\\",\\\"@maxDate\\\",\\\"@onHide\\\"],[[30,0,[\\\"startTs\\\"]],[30,0,[\\\"endTs\\\"]],[30,0,[\\\"startDateChanged\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-6\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"m-b-0\\\"],[12],[1,\\\"End Date\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,11],null,[[\\\"@date\\\",\\\"@minDate\\\",\\\"@onHide\\\"],[[30,0,[\\\"endTs\\\"]],[30,0,[\\\"startTs\\\"]],[30,0,[\\\"endDateChanged\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"viewType\\\"]],\\\"byTest\\\"],null],[[[1,\\\"          Loading Usage History...\\\\n\\\"]],[]],[[[1,\\\"          Loading Subscription History...\\\\n\\\"]],[]]]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"viewType\\\"]],\\\"byTest\\\"],null],[[[1,\\\"            \\\"],[1,[30,0,[\\\"history\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"historyTotal\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[1,[30,0,[\\\"subHistory\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"subHistoryTotal\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          total records\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadMore\\\"]],[[[1,\\\"          \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"text-primary\\\"],[4,[38,9],[\\\"click\\\",[30,0,[\\\"loadMoreBtn\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadingMore\\\"]],[[[1,\\\"              \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading More...\\\\n\\\"]],[]],[[[1,\\\"              Load More\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"viewType\\\"]],\\\"byTest\\\"],null],[[[1,\\\"        \\\"],[8,[39,12],null,[[\\\"@id\\\",\\\"@data\\\",\\\"@hasLinkedOrgs\\\",\\\"@showDetailsModal\\\"],[\\\"usageHistoryGrid\\\",[30,0,[\\\"history\\\"]],[30,0,[\\\"includeLinkedOrgs\\\"]],[30,0,[\\\"showDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@data\\\",\\\"@hasLinkedOrgs\\\",\\\"@showDetailsModal\\\",\\\"@showSubDetailsModal\\\",\\\"@endTime\\\"],[\\\"usageHistoryGrid\\\",[30,0,[\\\"subHistory\\\"]],[30,0,[\\\"includeLinkedOrgs\\\"]],[30,0,[\\\"showDetailsModalAction\\\"]],[30,0,[\\\"showSubDetailsModalAction\\\"]],[30,0,[\\\"endTs\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,14],null,[[\\\"@historyObjId\\\",\\\"@onClose\\\"],[[30,0,[\\\"selectedUsageObjId\\\"]],[30,0,[\\\"detailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showSubDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,15],null,[[\\\"@isAddOn\\\",\\\"@isPrimaryOrg\\\",\\\"@productCode\\\",\\\"@historyObj\\\",\\\"@subscription\\\",\\\"@thisOrgOnly\\\",\\\"@showUsageModalAction\\\",\\\"@onClose\\\"],[[30,0,[\\\"isAddOn\\\"]],[30,0,[\\\"isPrimaryOrg\\\"]],[30,0,[\\\"selectedHistoryObj\\\",\\\"subscription\\\",\\\"planProduct\\\",\\\"product\\\",\\\"code\\\"]],[30,0,[\\\"selectedHistoryObj\\\"]],[30,0,[\\\"selectedHistoryObj\\\",\\\"subscription\\\"]],[30,0,[\\\"thisOrgOnly\\\"]],[30,0,[\\\"showUsageModalAction\\\"]],[30,0,[\\\"subDetailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showUsageModal\\\"]],[[[1,\\\"  \\\"],[8,[39,16],null,[[\\\"@thisOrgOnly\\\",\\\"@selectedPeriodId\\\",\\\"@selectedPeriod\\\",\\\"@onClose\\\"],[[30,0,[\\\"thisOrgOnly\\\"]],[30,0,[\\\"selectedPeriodId\\\"]],[30,0,[\\\"selectedPeriod\\\"]],[30,0,[\\\"usageModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"bg\\\",\\\"bg\\\"],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"bs-button-group\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"label\\\",\\\"input\\\",\\\"on\\\",\\\"eq\\\",\\\"ui/bs-datetimepicker\\\",\\\"account/billing/history-grid\\\",\\\"account/billing/history-subscription-grid\\\",\\\"account/billing/history-usage-details-modal\\\",\\\"account/billing/subscription-details-modal\\\",\\\"account/billing/subscription-usage-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/history.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingHistoryComponent = _exports.default = (_class = class AccountBillingHistoryComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor2, this);\n      _initializerDefineProperty(this, \"history\", _descriptor3, this);\n      _initializerDefineProperty(this, \"historyTotal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"subHistory\", _descriptor5, this);\n      _initializerDefineProperty(this, \"subHistoryTotal\", _descriptor6, this);\n      _initializerDefineProperty(this, \"range\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showLoadMore\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showLoadingMore\", _descriptor9, this);\n      _initializerDefineProperty(this, \"hasLinkedOrgs\", _descriptor0, this);\n      _initializerDefineProperty(this, \"includeLinkedOrgs\", _descriptor1, this);\n      _initializerDefineProperty(this, \"showNoTestCharges\", _descriptor10, this);\n      _initializerDefineProperty(this, \"showDetailsModal\", _descriptor11, this);\n      _initializerDefineProperty(this, \"selectedUsageObjId\", _descriptor12, this);\n      _initializerDefineProperty(this, \"startTs\", _descriptor13, this);\n      _initializerDefineProperty(this, \"endTs\", _descriptor14, this);\n      _initializerDefineProperty(this, \"offset\", _descriptor15, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor16, this);\n      _initializerDefineProperty(this, \"viewType\", _descriptor17, this);\n      _initializerDefineProperty(this, \"showSubDetailsModal\", _descriptor18, this);\n      _initializerDefineProperty(this, \"showUsageModal\", _descriptor19, this);\n      _initializerDefineProperty(this, \"selectedHistoryObj\", _descriptor20, this);\n      _initializerDefineProperty(this, \"thisOrgOnly\", _descriptor21, this);\n      _initializerDefineProperty(this, \"isAddOn\", _descriptor22, this);\n      this.hasLinkedOrgs = _environment.config.currentUser?.org?.hasLinkedOrgs ?? false;\n      this.startTs = moment().startOf('month');\n      this.endTs = moment().endOf('month');\n      this.loadData();\n    }\n    loadData(loadMore) {\n      if (this.viewType === 'byTest') {\n        this.loadHistory(loadMore);\n      } else {\n        this.loadSubHistory(loadMore);\n      }\n    }\n    async loadHistory(fromLoadMore = false) {\n      if (fromLoadMore) {\n        this.showLoadingMore = true;\n      } else {\n        this.isLoading = true;\n      }\n      try {\n        const offset = this.offset;\n        const limit = this.limit;\n        const start = this.startTs.valueOf();\n        const end = this.endTs.valueOf();\n        const includeLinkedOrg = this.includeLinkedOrgs;\n        const minChange = this.showNoTestCharges ? 0 : 0.0001;\n        let historyResults = await this.api.billing.historyUsage(offset, limit, start, end, includeLinkedOrg, minChange, r => this.historyTotal = r.getResponseHeader('X-Testable-Count'));\n        this.history = fromLoadMore ? [...this.history, ...historyResults] : historyResults;\n        this.showLoadMore = this.history.length < this.historyTotal;\n        this.isLoading = false;\n        this.showLoadingMore = false;\n        this.offset += this.limit;\n      } catch (e) {\n        this.isLoading = false;\n        this.showLoadingMore = false;\n        _lib.default.info('Something went wrong while loading your billing history.', 'Usage History');\n        console.log(e);\n      }\n    }\n    async loadSubHistory(fromLoadMore = false) {\n      if (fromLoadMore) {\n        this.showLoadingMore = true;\n      } else {\n        this.isLoading = true;\n      }\n      try {\n        const offset = this.offset;\n        const limit = this.limit;\n        const start = this.startTs.valueOf();\n        const end = this.endTs.valueOf();\n        const includeLinkedOrg = this.includeLinkedOrgs;\n        const minChange = this.showNoTestCharges ? 0 : 0.0001;\n        let historyResults = await this.api.billing.historyUsageBySubscription(offset, limit, start, end, includeLinkedOrg, minChange, r => this.subHistoryTotal = r.getResponseHeader('X-Testable-Count'));\n        this.subHistory = fromLoadMore ? [...this.subHistory, ...historyResults] : historyResults;\n        this.showLoadMore = this.subHistory.length < this.subHistoryTotal;\n        this.isLoading = false;\n        this.showLoadingMore = false;\n        this.offset += this.limit;\n      } catch (e) {\n        this.isLoading = false;\n        this.showLoadingMore = false;\n        _lib.default.info('Something went wrong while loading your billing history.', 'Usage History');\n        console.log(e);\n      }\n    }\n    rangeChanged(range) {\n      if (this.range === range || range === 'custom') {\n        this.range = range;\n        return;\n      }\n      this.offset = 0;\n      this.range = range;\n      this.historyTotal = 0;\n      if (range === 'currentMonth') {\n        this.startTs = moment().startOf('month');\n        this.endTs = moment().endOf('month');\n      } else if (range === 'lastMonth') {\n        this.startTs = moment().subtract(1, 'month').startOf('month');\n        this.endTs = moment().subtract(1, 'month').endOf('month');\n      }\n      this.loadData();\n    }\n    onLinkedOrgChange(ckBox) {\n      this.includeLinkedOrgs = ckBox.target.checked;\n      this.offset = 0;\n      this.loadData();\n    }\n    updateNoTestCharges(ckBox) {\n      this.showNoTestCharges = ckBox.target.checked;\n      this.offset = 0;\n      this.loadData();\n    }\n    startDateChanged(date) {\n      this.startTs = date;\n      this.offset = 0;\n      this.loadData();\n    }\n    endDateChanged(date) {\n      this.endTs = date;\n      this.offset = 0;\n      this.loadData();\n    }\n    showDetailsModalAction(item) {\n      this.showDetailsModal = true;\n      this.selectedUsageObjId = item.id;\n    }\n    detailsModalClose() {\n      this.showDetailsModal = null;\n      this.selectedUsageObjId = null;\n    }\n    loadMoreBtn() {\n      if (!this.showLoadingMore) this.loadData(true);\n    }\n    updateViewType(type) {\n      this.viewType = type;\n      this.offset = 0;\n      this.range = 'currentMonth';\n      this.startTs = moment().startOf('month');\n      this.historyTotal = 0;\n      this.subHistoryTotal = 0;\n      this.history = [];\n      this.subHistory = [];\n      this.loadData();\n    }\n    get downloadUrl() {\n      const start = this.startTs.valueOf();\n      const end = this.endTs.valueOf();\n      const linked = this.includeLinkedOrgs;\n      const minCharge = this.showNoTestCharges ? 0 : 0.0001;\n      if (this.viewType === 'byTest') {\n        return this.api.billing.getHistoryUsageDownloadUrl(start, end, linked, minCharge);\n      } else {\n        return this.api.billing.getHistoryUsageBySubscriptionDownloadUrl(start, end, linked, minCharge);\n      }\n    }\n    async showSubDetailsModalAction(subscriptionPeriodId) {\n      const periodInfo = await this.api.billing.getSubscriptionPeriod(subscriptionPeriodId.id);\n      this.selectedHistoryObj = periodInfo;\n      this.showSubDetailsModal = true;\n    }\n    showUsageModalAction(item) {\n      this.selectedPeriod = item;\n      this.selectedPeriodId = item.id;\n      this.showUsageModal = true;\n    }\n    usageModalClose() {\n      this.showUsageModal = null;\n      this.selectedPeriod = null;\n      this.selectedPeriodId = null;\n    }\n    subDetailsModalClose() {\n      this.selectedHistoryObj = null;\n      this.showSubDetailsModal = null;\n    }\n    get isPrimaryOrg() {\n      return !_environment.config.currentUser?.org?.primaryOrg;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"history\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"historyTotal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"subHistory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"subHistoryTotal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"range\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'currentMonth';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showLoadMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showLoadingMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"hasLinkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"includeLinkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"showNoTestCharges\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"showDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"selectedUsageObjId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"startTs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"endTs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"offset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 100;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"viewType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'byTest';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"showSubDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"showUsageModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"selectedHistoryObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"thisOrgOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"isAddOn\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"rangeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"rangeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLinkedOrgChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLinkedOrgChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNoTestCharges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNoTestCharges\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"startDateChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"startDateChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"endDateChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"endDateChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailsModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreBtn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreBtn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateViewType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateViewType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showSubDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showSubDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showUsageModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showUsageModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"usageModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"usageModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"subDetailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"subDetailsModalClose\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingHistoryComponent);\n});","define(\"@testable/shared-ui/components/account/billing/invoice-details-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  class InvoiceDetailsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: 'Date',\n        data: 'createdAt',\n        width: '150px',\n        render: (data, type) => type === 'display' ? _lib.default.displayDateTime(data) : moment(data).valueOf()\n      }, {\n        title: 'Amount (USD)',\n        data: 'amount',\n        width: '80px',\n        render: (data, type) => type === 'display' ? `${_lib.default.printCcy(data)}` : data\n      }, {\n        title: 'Description',\n        data: 'description',\n        width: '700px',\n        render: data => data\n      }];\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No invoice items.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }\n  _exports.default = InvoiceDetailsGrid;\n});","define(\"@testable/shared-ui/components/account/billing/invoice-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"invoiceDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Invoice Details</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"widget-row\">\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h2><b>{{print-date @invoice.startDate \"MMM D 'YY\"}} to {{print-date @invoice.endDate \"MMM D 'YY\"}}</b></h2>\n                  <b class=\"text-black-transparent-7\">Period</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h2><b>{{print-ccy @invoice.total}}<br/></b></h2>\n                  <b class=\"text-black-transparent-7\">Total</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h2><b> {{if @invoice.pending \"Pending\"\n                               (if @invoice.paid \"Paid\"\n                                       (if @invoice.externalStatus (camel-to-title @invoice.externalStatus) \"Unpaid\"))\n                  }}</b></h2>\n                  <b class=\"text-black-transparent-7\">Status</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h2><b>\n                    {{if (eq @invoice.externalGateway \"Stripe\") \"Stripe\"\n                         (if (eq @invoice.externalGateway \"AwsMetering\") \"AWS Marketplace\"\n                         (if (eq @invoice.externalGateway \"AwsContract\") \"AWS Contract\"\n                                 (if (eq @invoice.externalGateway \"Manual\") \"Via PO\" '-')))\n                    }}</b></h2>\n                  <b class=\"text-black-transparent-7\">Gateway</b>\n                </div>\n  \n              </div>\n            </div>\n          </div>\n  \n          {{#if this.isLoaded}}\n            <div class=\"d-flex justify-content-between\">\n              <span>\n                {{#if this.showLoadMore}}\n                  {{#if this.isLoading}}\n                    <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n                  {{else}}\n                    <a role=\"button\" {{on 'click' this.loadMoreBtn}}>\n                      Load More ({{this.invoiceDetails.length}}/{{this.totalCount}})\n                    </a>\n                  {{/if}}\n                {{/if}}\n              </span>\n              {{#if this.invoiceDetails.length}}\n                <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                  target=\"_blank\"\n                  title=\"Download Invoice details\" href={{this.downloadUrl}}>\n                  <Ui::Icon role=\"presentation\" @icon=\"fa fa-download\" />\n                </a>\n              {{/if}}\n            </div>\n            <Account::Billing::InvoiceDetailsGrid\n                    @id=\"invoiceDetailsGrid\"\n                    @data={{this.invoiceDetails}} />\n  \n          {{else}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"invoiceDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Invoice Details\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,6],[[30,1,[\\\"startDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\" to \\\"],[1,[28,[35,6],[[30,1,[\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Period\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,7],[[30,1,[\\\"total\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Total\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\" \\\"],[1,[52,[30,1,[\\\"pending\\\"]],\\\"Pending\\\",[52,[30,1,[\\\"paid\\\"]],\\\"Paid\\\",[52,[30,1,[\\\"externalStatus\\\"]],[28,[37,10],[[30,1,[\\\"externalStatus\\\"]]],null],\\\"Unpaid\\\"]]]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Status\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[52,[28,[37,11],[[30,1,[\\\"externalGateway\\\"]],\\\"Stripe\\\"],null],\\\"Stripe\\\",[52,[28,[37,11],[[30,1,[\\\"externalGateway\\\"]],\\\"AwsMetering\\\"],null],\\\"AWS Marketplace\\\",[52,[28,[37,11],[[30,1,[\\\"externalGateway\\\"]],\\\"AwsContract\\\"],null],\\\"AWS Contract\\\",[52,[28,[37,11],[[30,1,[\\\"externalGateway\\\"]],\\\"Manual\\\"],null],\\\"Via PO\\\",\\\"-\\\"]]]]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Gateway\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"d-flex justify-content-between\\\"],[12],[1,\\\"\\\\n            \\\"],[10,1],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadMore\\\"]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"                  \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"loadMoreBtn\\\"]]],null],[12],[1,\\\"\\\\n                    Load More (\\\"],[1,[30,0,[\\\"invoiceDetails\\\",\\\"length\\\"]]],[1,\\\"/\\\"],[1,[30,0,[\\\"totalCount\\\"]]],[1,\\\")\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"invoiceDetails\\\",\\\"length\\\"]],[[[1,\\\"              \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download Invoice details\\\"],[15,6,[30,0,[\\\"downloadUrl\\\"]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@id\\\",\\\"@data\\\"],[\\\"invoiceDetailsGrid\\\",[30,0,[\\\"invoiceDetails\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@invoice\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"h2\\\",\\\"b\\\",\\\"print-date\\\",\\\"print-ccy\\\",\\\"br\\\",\\\"if\\\",\\\"camel-to-title\\\",\\\"eq\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"a\\\",\\\"on\\\",\\\"account/billing/invoice-details-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/invoice-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let LimitModalComponent = _exports.default = (_class = class LimitModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"invoiceDetails\", _descriptor2, this);\n      _initializerDefineProperty(this, \"totalCount\", _descriptor3, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor4, this);\n      _initializerDefineProperty(this, \"offset\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showLoadMore\", _descriptor8, this);\n    }\n    get downloadUrl() {\n      let url = `/invoices/${this.args.invoice.id}/items.csv`;\n      return _lib.default.toUrl(url);\n    }\n    async requestDetails() {\n      this.api.billing.getInvoiceDetails(this.args.invoice.id, this.limit, this.offset).then((resp, status, xhr) => {\n        const totalCount = xhr.getResponseHeader('X-Testable-Count');\n        this.invoiceDetails = [...this.invoiceDetails, ...resp];\n        this.showLoadMore = this.invoiceDetails.length < totalCount;\n        this.totalCount = totalCount;\n        this.offset += this.limit;\n        this.isLoaded = true;\n        this.isLoading = false;\n      });\n    }\n    loadMoreBtn() {\n      this.isLoading = true;\n      this.requestDetails(true);\n    }\n    didInsert() {\n      let self = this;\n      $('#invoiceDetailsModal').on('hidden.bs.modal', function () {\n        self.args.onClose();\n      });\n      $('#invoiceDetailsModal').modal('show');\n      $('#invoiceDetailsModal').on('shown.bs.modal', function () {\n        self.requestDetails();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"invoiceDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"totalCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 100;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"offset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showLoadMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadMoreBtn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreBtn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LimitModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/invoices-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  class InvoicesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: '',\n        data: 'id',\n        width: '100px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            let output = \" <a href='javascript:;' data-ember-action='showDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n            const url = full.metadata?.hostedInvoiceUrl || full.metadata?.invoicePdf;\n            if (url) {\n              output += `<a href=\"${url}\" target=\"_blank\" class=\"m-l-10 \"><i class=\"fa fa-download\"></i></a>`;\n            }\n            if (!full.paid && full.metadata?.hostedInvoiceUrl) {\n              output += `<a href=\"${full.metadata?.hostedInvoiceUrl}\" class=\"m-l-10 btn-xs btn btn-primary\" target=\"_blank\">Pay Now</a>`;\n            }\n            return output;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Period',\n        data: '',\n        width: '200px',\n        render: (data, type, full) => {\n          if (type === 'display') return `${_lib.default.displayDateUTC(full.startDate)} to ${_lib.default.displayDateUTC(full.endDate)}`;else return moment(full.startDate).valueOf();\n        }\n      }, {\n        title: 'Total',\n        data: 'total',\n        width: '100px',\n        render: (data, type) => type === 'display' ? `${_lib.default.printCcy(data)}` : data\n      }, {\n        title: 'Status',\n        data: 'endTs',\n        width: '150px',\n        render: (data, type, full) => {\n          if (full.pending) {\n            return 'Pending';\n          } else if (full.paid) {\n            return 'Paid';\n          } else if (full.externalStatus) {\n            return _lib.default.camelCaseToTitleCase(full.externalStatus);\n          } else {\n            return 'Unpaid';\n          }\n        }\n      }, {\n        title: 'Gateway',\n        data: 'externalGateway',\n        width: '150px',\n        render: data => data === 'Stripe' ? 'Stripe' : data === 'AwsMetering' ? 'AWS Marketplace' : data === 'AwsContract' ? 'AWS Contract' : data === 'Manual' ? 'Via PO' : '-'\n      }];\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[1, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No invoices yet.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }\n  _exports.default = InvoicesGrid;\n});","define(\"@testable/shared-ui/components/account/billing/invoices\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\"><strong>Invoices</strong></h4>\n    </div>\n    <div class=\"panel-body\">\n      {{#unless this.isLoadingAccount}}\n        <div class=\"widget-row\">\n          <div class=\"widget-container\">\n            <div class=\"widget-card bg-white widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h2><b>{{print-ccy this.account.balance}}</b></h2>\n                <b class=\"text-black-transparent-7\">Current Outstanding Balance</b>\n              </div>\n            </div>\n          </div>\n          <div class=\"widget-container\">\n            <div class=\"widget-card bg-white widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h2><b>{{camel-to-title (if (eq this.account.paymentGateway \"AwsMetering\") \"AWS Marketplace\" this.account.paymentGateway)}}</b></h2>\n                <b class=\"text-black-transparent-7\">Gateway</b>\n              </div>\n            </div>\n          </div>\n        </div>\n      {{/unless}}\n      {{#if this.isLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading Invoices...\n      {{else}}\n        <Account::Billing::InvoicesGrid @id=\"invoicesGrid\"\n                                        @data={{this.invoices}}\n                                        @showDetailsModal={{this.showDetailsModalAction}}\n        />\n      {{/if}}\n    </div>\n  </div>\n  {{#if this.showDetailsModal}}\n    <Account::Billing::InvoiceDetailsModal\n            @invoice={{this.selectedInvoice}}\n            @onClose={{this.detailsModalClose}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Invoices\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isLoadingAccount\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,6],[[30,0,[\\\"account\\\",\\\"balance\\\"]]],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Current Outstanding Balance\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h2\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,7],[[52,[28,[37,9],[[30,0,[\\\"account\\\",\\\"paymentGateway\\\"]],\\\"AwsMetering\\\"],null],\\\"AWS Marketplace\\\",[30,0,[\\\"account\\\",\\\"paymentGateway\\\"]]]],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Gateway\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading Invoices...\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,11],null,[[\\\"@id\\\",\\\"@data\\\",\\\"@showDetailsModal\\\"],[\\\"invoicesGrid\\\",[30,0,[\\\"invoices\\\"]],[30,0,[\\\"showDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,12],null,[[\\\"@invoice\\\",\\\"@onClose\\\"],[[30,0,[\\\"selectedInvoice\\\"]],[30,0,[\\\"detailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"unless\\\",\\\"h2\\\",\\\"b\\\",\\\"print-ccy\\\",\\\"camel-to-title\\\",\\\"if\\\",\\\"eq\\\",\\\"ui/icon\\\",\\\"account/billing/invoices-grid\\\",\\\"account/billing/invoice-details-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/invoices.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingInvoicesComponent = _exports.default = (_class = class AccountBillingInvoicesComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"account\", _descriptor2, this);\n      _initializerDefineProperty(this, \"invoices\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showDetailsModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedInvoice\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isLoadingAccount\", _descriptor7, this);\n      this.loadAccount();\n      this.getInvoices();\n    }\n    async loadAccount() {\n      this.isLoadingAccount = true;\n      this.account = await this.api.billing.getAccount();\n      this.isLoadingAccount = false;\n    }\n    async getInvoices() {\n      this.isLoading = true;\n      this.invoices = await this.api.billing.getInvoices();\n      this.isLoading = false;\n    }\n    showDetailsModalAction(item) {\n      this.showDetailsModal = true;\n      this.selectedInvoice = this.invoices.filter(i => i.id === item.id)[0];\n    }\n    detailsModalClose() {\n      this.showDetailsModal = null;\n      this.selectedInvoice = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"account\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"invoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedInvoice\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingAccount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailsModalClose\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingInvoicesComponent);\n});","define(\"@testable/shared-ui/components/account/billing/monitor-check-usage-breakdown\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class='monitor-check-usage-breakdown'>\n    <div class='d-flex align-items-center gap-2 m-b-10'>\n      <h6 class='m-b-0 f-w-600'>Usage by Monitor</h6>\n      <Ui::InfoIcon\n        @content='Monitor check usage attributed to each monitor in the subscription period. Totals include finalized usage and checks that are still pending finalization.'\n      />\n    </div>\n  \n    {{#if this.isLoading}}\n      <div class='text-muted'>\n        <Ui::Icon @icon='fa fa-spinner fa-spin' />\n        Loading monitor usage...\n      </div>\n    {{else if this.hasError}}\n      <div class='text-warning'>Unable to load usage by monitor.</div>\n    {{else if this.periods.length}}\n      {{#each this.periods key='subscriptionPeriodId' as |period|}}\n        <section class='monitor-check-usage-period'>\n          {{#unless @rowsOnly}}\n            <div class='d-flex flex-wrap justify-content-between align-items-start gap-2 m-b-10'>\n              <div>\n                <strong>{{period.productName}}</strong>\n                <div class='text-muted small'>{{period.dateRange}}</div>\n              </div>\n              <div class='text-end'>\n                <strong>{{period.formattedTotalUsage}}</strong>\n                {{#if period.formattedIncludedQty}}\n                  <span class='text-muted'> / {{period.formattedIncludedQty}}</span>\n                {{/if}}\n                <div class='text-muted small'>attributed checks</div>\n              </div>\n            </div>\n  \n            {{#if period.formattedIncludedQty}}\n              <div class='progress monitor-check-allocation-progress m-b-15'>\n                <div\n                  class='progress-bar'\n                  role='progressbar'\n                  aria-label='Attributed monitor check utilization'\n                  style={{html-safe period.allocationStyle}}\n                ></div>\n              </div>\n            {{/if}}\n          {{/unless}}\n  \n          {{#if period.monitors.length}}\n            <div class='monitor-check-usage-list'>\n              {{#each period.monitors key='monitorId' as |monitor|}}\n                <div class='monitor-check-usage-row'>\n                  <div class='monitor-check-usage-name'>\n                    <strong>{{monitor.monitorName}}</strong>\n                    <div class='text-muted small'>\n                      {{monitor.formattedFinalized}}\n                      finalized\n                      {{#if monitor.pending}}\n                        +\n                        {{monitor.formattedPending}}\n                        pending\n                      {{/if}}\n                    </div>\n                  </div>\n                  <div class='monitor-check-share'>\n                    <div class='monitor-check-share-bar' style={{html-safe monitor.shareStyle}}></div>\n                  </div>\n                  <div class='monitor-check-usage-total'>{{monitor.formattedTotal}}</div>\n                </div>\n              {{/each}}\n            </div>\n          {{else}}\n            <div class='text-muted'>No attributed monitor check usage in this period.</div>\n          {{/if}}\n        </section>\n      {{/each}}\n    {{else}}\n      <div class='text-muted'>No active monitor check subscription periods.</div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"monitor-check-usage-breakdown\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2 m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h6\\\"],[14,0,\\\"m-b-0 f-w-600\\\"],[12],[1,\\\"Usage by Monitor\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@content\\\"],[\\\"Monitor check usage attributed to each monitor in the subscription period. Totals include finalized usage and checks that are still pending finalization.\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n      Loading monitor usage...\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"hasError\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-warning\\\"],[12],[1,\\\"Unable to load usage by monitor.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"periods\\\",\\\"length\\\"]],[[[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"periods\\\"]]],null]],null],\\\"subscriptionPeriodId\\\",[[[1,\\\"      \\\"],[10,\\\"section\\\"],[14,0,\\\"monitor-check-usage-period\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"d-flex flex-wrap justify-content-between align-items-start gap-2 m-b-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"productName\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,[30,1,[\\\"dateRange\\\"]]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"text-end\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"formattedTotalUsage\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"formattedIncludedQty\\\"]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\" / \\\"],[1,[30,1,[\\\"formattedIncludedQty\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"attributed checks\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1,[\\\"formattedIncludedQty\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"progress monitor-check-allocation-progress m-b-15\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"progress-bar\\\"],[14,\\\"role\\\",\\\"progressbar\\\"],[14,\\\"aria-label\\\",\\\"Attributed monitor check utilization\\\"],[15,5,[28,[37,11],[[30,1,[\\\"allocationStyle\\\"]]],null]],[12],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"monitors\\\",\\\"length\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"monitor-check-usage-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,1,[\\\"monitors\\\"]]],null]],null],\\\"monitorId\\\",[[[1,\\\"              \\\"],[10,0],[14,0,\\\"monitor-check-usage-row\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"monitor-check-usage-name\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,[30,3,[\\\"monitorName\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[30,3,[\\\"formattedFinalized\\\"]]],[1,\\\"\\\\n                    finalized\\\\n\\\"],[41,[30,3,[\\\"pending\\\"]],[[[1,\\\"                      +\\\\n                      \\\"],[1,[30,3,[\\\"formattedPending\\\"]]],[1,\\\"\\\\n                      pending\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"monitor-check-share\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"monitor-check-share-bar\\\"],[15,5,[28,[37,11],[[30,3,[\\\"shareStyle\\\"]]],null]],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"monitor-check-usage-total\\\"],[12],[1,[30,3,[\\\"formattedTotal\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No attributed monitor check usage in this period.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null]],[]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No active monitor check subscription periods.\\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]],[]]]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"period\\\",\\\"@rowsOnly\\\",\\\"monitor\\\"],[\\\"div\\\",\\\"h6\\\",\\\"ui/info-icon\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"section\\\",\\\"unless\\\",\\\"strong\\\",\\\"span\\\",\\\"html-safe\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/monitor-check-usage-breakdown.hbs\",\n    \"isStrictMode\": false\n  });\n  function number(value) {\n    return Number(value || 0);\n  }\n  function formatQuantity(value) {\n    return numeral(value).format('0,0.[000]a');\n  }\n  let MonitorCheckUsageBreakdownComponent = _exports.default = (_class = class MonitorCheckUsageBreakdownComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"usagePeriods\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"hasError\", _descriptor4, this);\n      this.loadUsage();\n    }\n    get periods() {\n      return this.usagePeriods.map(period => {\n        const totalUsage = (period.monitors || []).reduce((total, monitor) => total + number(monitor.quantity) + number(monitor.pendingQuantity), 0);\n        const subscription = (this.args.subscriptions || []).find(item => Number(item.currentPeriod?.id) === Number(period.subscriptionPeriodId));\n        const productName = subscription?.productDescription || subscription?.planProduct?.product?.description || this.args.productName || 'Monitor checks';\n        const includedQty = period.includedQty === null || period.includedQty === undefined ? null : number(period.includedQty);\n        return {\n          ...period,\n          productName,\n          dateRange: `${_lib.default.displayDate(period.startDate, 'MMM D, YYYY')} – ` + _lib.default.displayDate(period.endDate, 'MMM D, YYYY'),\n          totalUsage,\n          formattedTotalUsage: formatQuantity(totalUsage),\n          formattedIncludedQty: includedQty === null ? null : formatQuantity(includedQty),\n          allocationStyle: includedQty && totalUsage ? `width: ${Math.min(100, 100 * totalUsage / includedQty)}%` : 'width: 0%',\n          monitors: (period.monitors || []).map(monitor => {\n            const finalized = number(monitor.quantity);\n            const pending = number(monitor.pendingQuantity);\n            const total = finalized + pending;\n            return {\n              ...monitor,\n              finalized,\n              pending,\n              total,\n              formattedFinalized: formatQuantity(finalized),\n              formattedPending: formatQuantity(pending),\n              formattedTotal: formatQuantity(total),\n              shareStyle: `width: ${totalUsage ? Math.max(1, 100 * total / totalUsage) : 0}%`\n            };\n          })\n        };\n      });\n    }\n    async loadUsage() {\n      this.isLoading = true;\n      this.hasError = false;\n      if (!this.args.orgId && !this.args.accountId) {\n        this.hasError = true;\n        this.isLoading = false;\n        return;\n      }\n      const periodIds = (this.args.periodIds || []).filter(Boolean);\n      const params = periodIds.length ? {\n        subscriptionPeriodIds: periodIds.join(',')\n      } : {};\n      try {\n        const periods = this.args.orgId ? await this.api.monitors.getOrgCheckUsage(this.args.orgId, params) : await this.api.monitors.getAccountCheckUsage(this.args.accountId, params);\n        if (this.isDestroyed || this.isDestroying) return;\n        this.usagePeriods = periods || [];\n      } catch {\n        if (this.isDestroyed || this.isDestroying) return;\n        this.usagePeriods = [];\n        this.hasError = true;\n      } finally {\n        if (!this.isDestroyed && !this.isDestroying) {\n          this.isLoading = false;\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"usagePeriods\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"hasError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MonitorCheckUsageBreakdownComponent);\n});","define(\"@testable/shared-ui/components/account/billing/plan-details-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  class PlanDetailsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: '',\n        data: 'id',\n        width: '20px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return \" <a href='javascript:;' data-ember-action='showDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Period',\n        data: 'startDate',\n        width: '500px',\n        render: (data, type, full) => {\n          if (type === 'display') {\n            return _lib.default.displayDateTime(full.startDate) + ' to ' + _lib.default.displayDateTime(full.endDate);\n          } else {\n            return full.startDate;\n          }\n        }\n      }, {\n        title: 'Price <span data-bs-toggle=\"tooltip\" data-bs-title=\"Upfront charge at the beginning of the period for this plan\"><i class=\"fa fa-info-circle\"></i></span>',\n        data: 'price',\n        width: '120px',\n        render: (data, type) => {\n          if (type === 'display') {\n            return `${_lib.default.printCcy(data)}  ${this.args.planFrequency === 'Yearly' ? ' Annual' : ' Monthly'}`;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Invoiced Total <span data-bs-toggle=\"tooltip\" data-bs-title=\"Total of any per test charges accrued during this plan period\"><i class=\"fa fa-info-circle\"></i></span>',\n        data: 'invoicedTotal',\n        width: '120px',\n        render: (data, type) => {\n          if (type === 'display') {\n            return `${_lib.default.printCcy(data)}`;\n          } else {\n            return data;\n          }\n        }\n      }];\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[1, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No plan details.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }\n  _exports.default = PlanDetailsGrid;\n});","define(\"@testable/shared-ui/components/account/billing/plan-details-modal-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _toHtml, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  class PlanDetailsModalGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: 'Date',\n        width: '150px',\n        data: 'startTs',\n        render: (data, type, full, meta) => type === 'display' ? _lib.default.displayDateTime(full.startTs) : moment(data).valueOf()\n      }, {\n        title: 'Status',\n        width: '80px',\n        data: 'pending',\n        render: data => data ? 'Pending' : 'Finalized'\n      }, {\n        title: 'Organization',\n        width: '150px',\n        data: 'id',\n        render: (data, type, full) => full.usageRecord.organizationName\n      }, {\n        title: 'Subscription',\n        width: '150px',\n        data: 'product'\n      }, {\n        title: 'Qty Used',\n        width: '60px',\n        data: 'quantity'\n      }, {\n        title: 'Description',\n        width: '250px',\n        data: 'description'\n      }, {\n        title: 'Charge',\n        width: '60px',\n        data: 'charge',\n        render: (data, type) => type === 'display' ? _lib.default.printCcy(data) : data\n      }, {\n        title: 'Relates To',\n        width: '250px',\n        data: 'id',\n        render: (data, type, full) => (0, _toHtml.sanitizeHtml)([full.usageRecord.description, 'html'])\n      }];\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No usage yet utilizing this plan\"\n      };\n      options.scrollY = \"400px\";\n    }\n  }\n  _exports.default = PlanDetailsModalGrid;\n});","define(\"@testable/shared-ui/components/account/billing/plan-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"historyUsageDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Plan Period Details</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n  \n          <div class=\"widget-row\">\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>{{@planDetails.plan.displayName}}</b></h3>\n                  <b class=\"text-black-transparent-7\">Plan</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>{{print-date @historyObj.startDate \"MMM D 'YY\"}} to {{print-date @historyObj.endDate \"MMM D 'YY\"}}</b></h3>\n                  <b class=\"text-black-transparent-7\">Period</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>\n                    {{print-ccy @historyObj.price}} {{if (eq @planFrequency 'Yearly') ' Annual'  ' Monthly'}}\n                  </b></h3>\n                  <b class=\"text-black-transparent-7\">Price</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>\n                    {{print-ccy @historyObj.invoicedTotal}}\n                  </b></h3>\n                  <b class=\"text-black-transparent-7\">Invoiced Total</b>\n                </div>\n              </div>\n            </div>\n          </div>\n  \n          {{#if this.isLoaded}}\n            {{#if this.periodDetails.length}}\n              <div class=\"m-t-10\">\n                <strong>{{this.periodDetails.length}} / {{this.detailsTotal}} total records</strong>\n                {{#if this.showLoadMore}}\n                  <a role=\"button\" class=\"text-primary\" onclick={{this.loadMoreBtn}}>\n                    {{#if this.showLoadingMore}}\n                      <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading More...\n                    {{else}}\n                      Load More\n                    {{/if}}\n                  </a>\n                {{/if}}\n                <a role=\"button\" class=\"pull-right btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                   target=\"_blank\"\n                   title=\"Download details\" href={{this.downloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n              </div>\n            {{/if}}\n            <Account::Billing::PlanDetailsModalGrid\n                    @id='planDetailsModalGrid'\n                    @data={{this.periodDetails}}\n            />\n          {{else}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"historyUsageDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Plan Period Details\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,1,[\\\"plan\\\",\\\"displayName\\\"]]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Plan\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,6],[[30,2,[\\\"startDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\" to \\\"],[1,[28,[35,6],[[30,2,[\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Period\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,7],[[30,2,[\\\"price\\\"]]],null]],[1,\\\" \\\"],[1,[52,[28,[37,9],[[30,3],\\\"Yearly\\\"],null],\\\" Annual\\\",\\\" Monthly\\\"]],[1,\\\"\\\\n                \\\"],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Price\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,7],[[30,2,[\\\"invoicedTotal\\\"]]],null]],[1,\\\"\\\\n                \\\"],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Invoiced Total\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[41,[30,0,[\\\"periodDetails\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"periodDetails\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"detailsTotal\\\"]]],[1,\\\" total records\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadMore\\\"]],[[[1,\\\"                \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"text-primary\\\"],[15,\\\"onclick\\\",[30,0,[\\\"loadMoreBtn\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadingMore\\\"]],[[[1,\\\"                    \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading More...\\\\n\\\"]],[]],[[[1,\\\"                    Load More\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"pull-right btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download details\\\"],[15,6,[30,0,[\\\"downloadUrl\\\"]]],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@data\\\"],[\\\"planDetailsModalGrid\\\",[30,0,[\\\"periodDetails\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@planDetails\\\",\\\"@historyObj\\\",\\\"@planFrequency\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"h3\\\",\\\"b\\\",\\\"print-date\\\",\\\"print-ccy\\\",\\\"if\\\",\\\"eq\\\",\\\"strong\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"account/billing/plan-details-modal-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/plan-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let LimitModalComponent = _exports.default = (_class = class LimitModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"periodDetails\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"detailsTotal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showLoadingMore\", _descriptor5, this);\n      _initializerDefineProperty(this, \"offset\", _descriptor6, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor7, this);\n    }\n    async requestDetails(fromLoadMore) {\n      if (fromLoadMore) {\n        this.showLoadingMore = true;\n      } else {\n        this.isLoaded = false;\n      }\n      let detailsResult = await this.api.billing.getPeriodHistory(this.args.historyObj.id, this.offset, this.limit, r => this.detailsTotal = r.getResponseHeader('X-Testable-Count'));\n      this.periodDetails = fromLoadMore ? [...this.periodDetails, ...detailsResult] : detailsResult;\n      this.showLoadMore = this.periodDetails.length < this.detailsTotal;\n      this.isLoaded = true;\n      this.showLoadingMore = false;\n      this.offset += this.limit;\n    }\n    get downloadUrl() {\n      return this.api.billing.getPeriodHistoryDownloadUrl(this.args.historyObj.id);\n    }\n    loadMoreBtn() {\n      this.requestDetails(true);\n    }\n    didInsert() {\n      let self = this;\n      $('#historyUsageDetailsModal').on('hidden.bs.modal', function () {\n        self.args.onClose();\n      });\n      $('#historyUsageDetailsModal').modal('show');\n      $('#historyUsageDetailsModal').on('shown.bs.modal', function () {\n        self.offset = 0;\n        self.requestDetails();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"periodDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"detailsTotal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showLoadingMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"offset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 100;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadMoreBtn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreBtn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LimitModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/plan-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\"><strong>Plan Details</strong></h4>\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.isLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading Plan...\n      {{else}}\n      <div class=\"widget-row\">\n        <div class=\"widget-container\">\n          <div class=\"widget-card bg-white widget-card-rounded \">\n            <div class=\"widget-card-content\">\n              <h3 class=\"text-primary\"><b\n                      data-bs-placement=\"bottom\" data-bs-toggle=\"popover\"\n                      data-bs-title=\"Plan Details\"\n                      data-bs-trigger=\"hover\"\n                      data-bs-content={{this.planFeatures}}\n                      data-bs-html=\"true\"\n              >{{this.plan.displayName}}</b></h3>\n              <b class=\"text-black-transparent-7\">Plan</b>\n            </div>\n          </div>\n        </div>\n        <div class=\"widget-container\">\n          <div class=\"widget-card bg-white widget-card-rounded \">\n            <div class=\"widget-card-content\">\n              <h3><b>\n                {{#if (gt this.planDetails.price 0)}}\n                  {{print-ccy this.planDetails.price}}\n                  {{#if (gt this.planDetails.quantity 1)}} for {{print-number this.planDetails.quantity}} {{get this.planDetails.plan.products \"0.product.description\"}} {{/if}}\n                {{else}}\n                  FREE\n                {{/if}}\n              </b></h3>\n              <b class=\"text-black-transparent-7\">Price</b>\n            </div>\n          </div>\n        </div>\n        <div class=\"widget-container\">\n          <div class=\"widget-card bg-white widget-card-rounded \">\n            <div class=\"widget-card-content\">\n              <h3><b>{{print-date this.planDetails.effectiveDate \"MMM D 'YY\"}}</b></h3>\n              <b class=\"text-black-transparent-7\">Purchase Date</b>\n            </div>\n          </div>\n        </div>\n        {{#if this.planDetails.terminationDate}}\n          <div class=\"widget-container\">\n            <div class=\"widget-card bg-white widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h3><b>{{print-date this.planDetails.terminationDate \"MMM D 'YY\"}}</b></h3>\n                <b class=\"text-black-transparent-7\">Termination Date</b>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n        {{#if this.planDetails.currentPeriod}}\n          <div class=\"widget-container\">\n            <div class=\"widget-card bg-white widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h3><b>{{print-date this.planDetails.currentPeriod.startDate \"MMM D 'YY\"}} to {{print-date\n                        this.planDetails.currentPeriod.endDate \"MMM D 'YY\"}}</b></h3>\n                <b class=\"text-black-transparent-7\">Current Period</b>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n      </div>\n  \n      {{#if this.planHistory.length}}\n        <div class=\"m-t-10\"><strong>{{this.planHistory.length}} / {{this.planHistory.length}} billing periods</strong></div>\n      {{/if}}\n      {{#if this.isHistoryLoading}}\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading Plan Usage History ...\n      {{else}}\n        <Account::Billing::PlanDetailsGrid\n                @id=\"planHistory_grid\"\n                @showDetailsModal={{this.showDetailsModalAction}}\n                @planFrequency={{this.plan.frequency}}\n                @data={{this.planHistory}}\n        />\n      {{/if}}\n      {{/if}}\n  \n    </div>\n  </div>\n  \n  {{#if this.showDetailsModal}}\n    <Account::Billing::PlanDetailsModal\n            @historyObj={{this.selectedHistoryObj}}\n            @planDetails={{this.planDetails}}\n            @planFrequency={{this.plan.frequency}}\n            @onClose={{this.detailsModalClose}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Plan Details\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading Plan...\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[14,0,\\\"text-primary\\\"],[12],[10,\\\"b\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-title\\\",\\\"Plan Details\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[30,0,[\\\"planFeatures\\\"]]],[14,\\\"data-bs-html\\\",\\\"true\\\"],[12],[1,[30,0,[\\\"plan\\\",\\\"displayName\\\"]]],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Plan\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,0,[\\\"planDetails\\\",\\\"price\\\"]],0],null],[[[1,\\\"                \\\"],[1,[28,[35,8],[[30,0,[\\\"planDetails\\\",\\\"price\\\"]]],null]],[1,\\\"\\\\n                \\\"],[41,[28,[37,7],[[30,0,[\\\"planDetails\\\",\\\"quantity\\\"]],1],null],[[[1,\\\" for \\\"],[1,[28,[35,9],[[30,0,[\\\"planDetails\\\",\\\"quantity\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,10],[[30,0,[\\\"planDetails\\\",\\\"plan\\\",\\\"products\\\"]],\\\"0.product.description\\\"],null]],[1,\\\" \\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                FREE\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Price\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,11],[[30,0,[\\\"planDetails\\\",\\\"effectiveDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Purchase Date\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"planDetails\\\",\\\"terminationDate\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,11],[[30,0,[\\\"planDetails\\\",\\\"terminationDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Termination Date\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"planDetails\\\",\\\"currentPeriod\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,11],[[30,0,[\\\"planDetails\\\",\\\"currentPeriod\\\",\\\"startDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\" to \\\"],[1,[28,[35,11],[[30,0,[\\\"planDetails\\\",\\\"currentPeriod\\\",\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Current Period\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"planHistory\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"planHistory\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"planHistory\\\",\\\"length\\\"]]],[1,\\\" billing periods\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isHistoryLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading Plan Usage History ...\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,12],null,[[\\\"@id\\\",\\\"@showDetailsModal\\\",\\\"@planFrequency\\\",\\\"@data\\\"],[\\\"planHistory_grid\\\",[30,0,[\\\"showDetailsModalAction\\\"]],[30,0,[\\\"plan\\\",\\\"frequency\\\"]],[30,0,[\\\"planHistory\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,13],null,[[\\\"@historyObj\\\",\\\"@planDetails\\\",\\\"@planFrequency\\\",\\\"@onClose\\\"],[[30,0,[\\\"selectedHistoryObj\\\"]],[30,0,[\\\"planDetails\\\"]],[30,0,[\\\"plan\\\",\\\"frequency\\\"]],[30,0,[\\\"detailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"h3\\\",\\\"b\\\",\\\"gt\\\",\\\"print-ccy\\\",\\\"print-number\\\",\\\"get\\\",\\\"print-date\\\",\\\"account/billing/plan-details-grid\\\",\\\"account/billing/plan-details-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/plan-details.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPlanModalComponent = _exports.default = (_class = class AccountBillingPlanModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"plan\", _descriptor2, this);\n      _initializerDefineProperty(this, \"planDetails\", _descriptor3, this);\n      _initializerDefineProperty(this, \"planHistory\", _descriptor4, this);\n      _initializerDefineProperty(this, \"planFeatures\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isHistoryLoading\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showDetailsModal\", _descriptor8, this);\n      _initializerDefineProperty(this, \"selectedHistoryObj\", _descriptor9, this);\n      _defineProperty(this, \"planCategories\", [{\n        category: \"VU\",\n        title: \"Virtual Users\"\n      }, {\n        category: \"TestRunner\",\n        title: \"Test Runners\"\n      }, {\n        category: \"BrowserSession\",\n        title: \"Browser Automation\"\n      }, {\n        category: \"LiveSession\",\n        title: \"Live Session\"\n      }, {\n        category: \"MonitorCheck\",\n        title: \"Monitors\"\n      }]);\n      this.getPlan();\n    }\n    async getPlan() {\n      this.isLoading = true;\n      const planDetails = await this.api.billing.getPlan(this.args.model.planSubId);\n      this.plan = planDetails.plan;\n      this.planDetails = planDetails;\n      let planFeatures = `\n      <div class=\"text-center m-b-10\">\n        <span class='label label-success'>${this.planCategory.title}</span>\n        <span class='label label-success'>${this.plan.frequency}</span>\n      </div>`;\n      planFeatures += (_.isString(this.plan.description) ? JSON.parse(this.plan.description) : []).join('<br />');\n      this.planFeatures = planFeatures;\n      this.loadPlanHistory();\n      this.isLoading = false;\n    }\n    get planCategory() {\n      return this.planCategories.find(category => category.category === this.plan.category);\n    }\n    async loadPlanHistory() {\n      this.isHistoryLoading = true;\n      this.planHistory = await this.api.billing.getPlanHistory(this.planDetails.id);\n      this.isHistoryLoading = false;\n    }\n    showDetailsModalAction(item) {\n      this.showDetailsModal = true;\n      this.selectedHistoryObj = this.planHistory.find(h => h.id === item.id);\n    }\n    detailsModalClose() {\n      this.showDetailsModal = null;\n      this.selectedHistoryObj = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"plan\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"planDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"planHistory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"planFeatures\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isHistoryLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"selectedHistoryObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailsModalClose\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPlanModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/plan-purchase-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/providers\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _runloop, _providers, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/providers\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@onCancel}}\n    @size=\"md\"\n    @title=\"{{if @purchasedPlan 'Change' 'Purchase'}} Plan\"\n  >\n    {{#if this.isLoadingCardDetails}}\n      <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading details ...\n    {{else}}\n      {{#if @purchasedPlan}}\n        <div class=\"row\">\n          <div class=\"col-3\"><label> Current Plan</label></div>\n          <div class=\"col-9\">{{@purchasedPlan.plan.displayName}}</div>\n        </div>\n        {{#if (gt @purchasedPlan.quantity 1)}}\n          <div class=\"row\">\n            <div class=\"col-3\"><label> Current Quantity</label></div>\n            <div class=\"col-9\">\n              {{@purchasedPlan.quantity}} {{get (get @purchasedPlan.plan.products '0') 'product.description'}}\n            </div>\n          </div>\n        {{/if}}\n        <div class=\"row\">\n          <div class=\"col-3\"><label> Current Price</label></div>\n          <div class=\"col-9\">\n            {{print-ccy @purchasedPlan.price}}{{get-frequency-label-short @purchasedPlan.plan.frequency}}\n          </div>\n        </div>\n      {{/if}}\n  \n      <div class=\"row\">\n        <div class=\"col-3\"><label> {{if @purchasedPlan 'New'}} Plan</label></div>\n        <div class=\"col-9\">{{@newPlanDetails.plan.displayName}}</div>\n      </div>\n      {{#if (gt @newPlanDetails.plan.maxQuantity 1)}}\n        <div class=\"row\">\n          <div class=\"col-3\"><label> {{if @purchasedPlan 'New'}} Quantity</label></div>\n          <div class=\"col-9\">\n            {{@newPlanDetails.quantity}} {{get (get @newPlanDetails.plan.products '0') 'product.description'}}\n          </div>\n        </div>\n      {{/if}}\n      <div class=\"row\">\n        <div class=\"col-3\"><label> {{if @purchasedPlan 'New'}} Price</label></div>\n        <div class=\"col-9\">\n          {{this.price}}\n        </div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-3\"><label> Effective From</label></div>\n        <div class=\"col-9\">\n          {{#if (or (not @purchasedPlan) this.isUpgrade)}}\n            {{print-datetimeminutes this.now}}\n          {{else}}\n            {{print-datetimeminutes @purchasedPlan.currentPeriod.endDate}}\n          {{/if}}\n        </div>\n      </div>\n  \n      {{#if this.showCardDetails}}\n  \n      <hr class=\"bg-grey mb-4\" />\n  \n      <CreditCardForm @cardCreated={{this.purchasePlan}}\n                      @submitMessage={{if @purchasedPlan 'Change Plan' 'Purchase Plan'}} />\n      {{else}}\n  \n        <div class=\"row m-t-20\">\n          <div class=\"col-12 text-center\">\n            <button class=\"btn btn-primary\"\n                    disabled={{this.isSaving}}\n                    onclick={{this.purchasePlan}}\n                    type=\"button\">\n                {{#if @purchasedPlan}}\n                  {{if this.isSaving 'Upgrading' 'Upgrade'}} Plan\n                {{else}}\n                  {{if this.isSaving 'Purchasing' 'Purchase'}} Plan\n                {{/if}}\n            </button>\n            <button type=\"button\" class=\"btn btn-warning\" {{on \"click\" @onCancel}}>\n              Cancel\n            </button>\n          </div>\n        </div>\n  \n      {{/if}}\n    {{/if}}\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@size\\\",\\\"@title\\\"],[true,[30,1],\\\"md\\\",[29,[[52,[30,2],\\\"Change\\\",\\\"Purchase\\\"],\\\" Plan\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingCardDetails\\\"]],[[[1,\\\"    \\\"],[8,[39,2],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading details ...\\\\n\\\"]],[]],[[[41,[30,2],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" Current Plan\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,[30,2,[\\\"plan\\\",\\\"displayName\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,2,[\\\"quantity\\\"]],1],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" Current Quantity\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,2,[\\\"quantity\\\"]]],[1,\\\" \\\"],[1,[28,[35,6],[[28,[37,6],[[30,2,[\\\"plan\\\",\\\"products\\\"]],\\\"0\\\"],null],\\\"product.description\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" Current Price\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"price\\\"]]],null]],[1,[28,[35,8],[[30,2,[\\\"plan\\\",\\\"frequency\\\"]]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" \\\"],[1,[52,[30,2],\\\"New\\\"]],[1,\\\" Plan\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,[30,3,[\\\"plan\\\",\\\"displayName\\\"]]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,3,[\\\"plan\\\",\\\"maxQuantity\\\"]],1],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" \\\"],[1,[52,[30,2],\\\"New\\\"]],[1,\\\" Quantity\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,3,[\\\"quantity\\\"]]],[1,\\\" \\\"],[1,[28,[35,6],[[28,[37,6],[[30,3,[\\\"plan\\\",\\\"products\\\"]],\\\"0\\\"],null],\\\"product.description\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" \\\"],[1,[52,[30,2],\\\"New\\\"]],[1,\\\" Price\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"price\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-3\\\"],[12],[10,\\\"label\\\"],[12],[1,\\\" Effective From\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-9\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[28,[37,10],[[30,2]],null],[30,0,[\\\"isUpgrade\\\"]]],null],[[[1,\\\"          \\\"],[1,[28,[35,11],[[30,0,[\\\"now\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[1,[28,[35,11],[[30,2,[\\\"currentPeriod\\\",\\\"endDate\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCardDetails\\\"]],[[[1,\\\"\\\\n    \\\"],[10,\\\"hr\\\"],[14,0,\\\"bg-grey mb-4\\\"],[12],[13],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,13],null,[[\\\"@cardCreated\\\",\\\"@submitMessage\\\"],[[30,0,[\\\"purchasePlan\\\"]],[52,[30,2],\\\"Change Plan\\\",\\\"Purchase Plan\\\"]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row m-t-20\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-12 text-center\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[15,\\\"onclick\\\",[30,0,[\\\"purchasePlan\\\"]]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Upgrading\\\",\\\"Upgrade\\\"]],[1,\\\" Plan\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Purchasing\\\",\\\"Purchase\\\"]],[1,\\\" Plan\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-warning\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,1]],null],[12],[1,\\\"\\\\n            Cancel\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]]]],[]]]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onCancel\\\",\\\"@purchasedPlan\\\",\\\"@newPlanDetails\\\"],[\\\"ui/modal-wrapper\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"div\\\",\\\"label\\\",\\\"gt\\\",\\\"get\\\",\\\"print-ccy\\\",\\\"get-frequency-label-short\\\",\\\"or\\\",\\\"not\\\",\\\"print-datetimeminutes\\\",\\\"hr\\\",\\\"credit-card-form\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/plan-purchase-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPlanPurchaseModalComponent = _exports.default = (_class = class AccountBillingPlanPurchaseModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"gtag\", _descriptor2, this);\n      _initializerDefineProperty(this, \"router\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showCardDetails\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoadingCardDetails\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor6, this);\n      if (this.args.existingAddon) {\n        this.purchased = this.args.existingAddon;\n      }\n      this.awsRegions = _providers.default.getAwsRegions(true);\n      this.loadCardDetails();\n    }\n    get isUpgrade() {\n      if (!this.args.purchasedPlan) {\n        return false;\n      }\n      if (this.args.purchasedPlan.plan.id === this.args.newPlanDetails.plan.id) {\n        return this.args.newPlanDetails.quantity > this.args.purchasedPlan.quantity;\n      } else {\n        return this.priceOnly > this.args.purchasedPlan.price;\n      }\n    }\n    get now() {\n      return new Date();\n    }\n    get priceOnly() {\n      let price = 0;\n      let plan = this.args.newPlanDetails.plan;\n      if (plan.priceSchedule.maxQuantity === 1 && plan.priceSchedule.prices[0].price) {\n        price = plan.priceSchedule.prices[0].price;\n      } else if (plan.priceSchedule.maxQuantity > 1) {\n        const quantity = this.args.newPlanDetails.quantity;\n        price = this.api.billing.getPrice(0, quantity, plan.priceSchedule);\n      }\n      return price;\n    }\n    get price() {\n      let price = 0;\n      let plan = this.args.newPlanDetails.plan;\n      if (plan.priceSchedule.maxQuantity === 1 && plan.priceSchedule.prices[0].price) {\n        price = _lib.default.printCcy(this.priceOnly);\n        price += this.api.billing.getFrequencyLabelShort(plan.frequency);\n        return price;\n      } else if (plan.priceSchedule.maxQuantity > 1) {\n        price = _lib.default.printCcy(this.priceOnly);\n        price += this.api.billing.getFrequencyLabelShort(plan.frequency);\n        return price;\n      }\n      return \"FREE\";\n    }\n    async loadCardDetails() {\n      const checkCard = this.priceOnly > 0 && _environment.config.currentUser.org?.account?.paymentGateway === 'Stripe';\n      try {\n        if (checkCard) {\n          const cards = await this.api.billing.getCards(_environment.config.currentUser.org.id);\n          if (!_.isArray(cards) || cards.length === 0) {\n            this.showCardDetails = true;\n            return;\n          }\n        }\n      } catch (e) {\n        _lib.default.info(e.statusText);\n      } finally {\n        this.isLoadingCardDetails = false;\n      }\n    }\n    async planPurchase(plan, isChangePlane, quantity) {\n      this.isSaving = true;\n      try {\n        if (isChangePlane) {\n          await this.api.billing.changePlan(this.args.purchasedPlan.id, plan.id, quantity);\n          _lib.default.info(`Plan changed from <b>${this.args.purchasedPlan.plan.displayName}</b> to <b>${plan.displayName}</b> successfully.`);\n          this.planSaved();\n        } else {\n          let purchasedPlan = await this.api.billing.addPlan(plan.id, quantity, this.args.selectedOrg?.id);\n          if (!_environment.config.isMonitoring) {\n            this.gtag.addPaidPlanConversion(purchasedPlan.id, purchasedPlan.price);\n          }\n          _lib.default.info(`Successfully subscribed to <b>${plan.displayName}</b> plan.`);\n          this.planPurchased(purchasedPlan);\n        }\n      } catch (e) {\n        console.log(e);\n        _lib.default.info(e.statusText || e.message || 'Unable to update plan.');\n      } finally {\n        this.isSaving = false;\n      }\n    }\n    redirectIfNoPlan() {\n      if (!_environment.config.currentUser.isNoPlan) return false;\n      (0, _runloop.later)(async () => {\n        (0, _object.set)(_environment.config.currentUser, 'isNoPlan', null);\n        window.location.href = '/';\n      }, 300);\n      return true;\n    }\n    planSaved() {\n      this.isPlanSaved = true;\n      if (this.redirectIfNoPlan()) return;\n      this.router.doAccountRefresh = true;\n      this.router.transitionTo('account.billing.subscription');\n    }\n    planPurchased(purchasedPlan) {\n      this.isPlanSaved = true;\n      if (this.redirectIfNoPlan()) return;\n      this.router.transitionTo('account.billing.plans', purchasedPlan.id);\n    }\n    async purchasePlan() {\n      await this.planPurchase(this.args.newPlanDetails.plan, this.args.newPlanDetails.isChangePlane, this.args.newPlanDetails.quantity);\n      this.args.onCancel();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"gtag\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showCardDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingCardDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"planSaved\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"planSaved\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"planPurchased\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"planPurchased\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"purchasePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"purchasePlan\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPlanPurchaseModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/plan-purchase\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\" data-sortable=\"false\">\n    <div class=\"panel-heading d-flex justify-content-between align-items-center\">\n      <h4 class=\"panel-title\">{{#if @existingPlan}}Change Plan{{else}}Available Plans{{/if}}</h4>\n      {{#if @onBack}}\n        <button class=\"btn btn-success btn-sm\" type=\"button\" {{on \"click\" @onBack}}>\n          <Ui::Icon @icon=\"fa fa-arrow-left\" /> Back\n        </button>\n      {{/if}}\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.isLocked}}\n        <div id=\"mask\">\n          <div id=\"mask-background\"></div>\n          <h1>Please contact us to make any changes to your plan.</h1>\n        </div>\n      {{/if}}\n      <div class=\"plan-filters m-b-10\">\n        <BsButtonGroup @value={{this.frequency}} @type=\"radio\" @onChange={{fn this.filterPlans 'frequency'}}\n                       class='m-b-10' as |bs|>\n          <bs.button @type=\"success\" @value=\"annual\" @size=\"sm\">Annual</bs.button>\n          <bs.button @type=\"success\" @value=\"monthly\" @size=\"sm\">Monthly</bs.button>\n        </BsButtonGroup>\n      {{#unless @ungroupedFilters}}\n        <BsButtonGroup @value={{this.testType}} @type=\"radio\" @onChange={{fn this.filterPlans 'testType'}}\n                       class='m-b-10 m-l-10' as |bs|>\n          <bs.button @type=\"success\" @value=\"load\" @size=\"sm\">Performance & API Testing</bs.button>\n          <bs.button @type=\"success\" @value=\"functional\" @size=\"sm\">Functional Testing</bs.button>\n          <bs.button @type=\"success\" @value=\"monitor\" @size=\"sm\">Monitoring</bs.button>\n        </BsButtonGroup>\n  \n        {{#if (eq this.testType 'load')}}\n          <BsButtonGroup @value={{this.addFilter1}} @type=\"radio\" @onChange={{fn this.filterPlans 'addFilter1'}}\n                         class='m-b-10 m-l-10' as |bs|>\n            <bs.button @type=\"success\" @value=\"VU\" @size=\"sm\">Virtual Users</bs.button>\n            <bs.button @type=\"success\" @value=\"TestRunner\" @size=\"sm\">Test Runners</bs.button>\n          </BsButtonGroup>\n  \n          {{#if (eq this.frequency 'annual')}}\n            <BsButtonGroup @value={{this.addFilter2}} @type=\"radio\" @onChange={{fn this.filterPlans 'addFilter2'}}\n                           class='m-b-10 m-l-10' as |bs|>\n              <bs.button @type=\"success\" @value=\"PPH\" @size=\"sm\">Pay Per Hour</bs.button>\n              <bs.button @type=\"success\" @value=\"Unlimited\" @size=\"sm\">Unlimited</bs.button>\n            </BsButtonGroup>\n          {{/if}}\n  \n        {{else if (eq this.testType 'functional')}}\n          <BsButtonGroup @value={{this.addFilter1}} @type=\"radio\" @onChange={{fn this.filterPlans 'addFilter1'}}\n                         class='m-b-10 m-l-10' as |bs|>\n            <bs.button @type=\"success\" @value=\"liveAndAuto\" @size=\"sm\">Live & Automation</bs.button>\n            <bs.button @type=\"success\" @value=\"live\" @size=\"sm\">Live Only</bs.button>\n          </BsButtonGroup>\n          <BsButtonGroup @value={{this.addFilter2}} @type=\"radio\" @onChange={{fn this.filterPlans 'addFilter2'}}\n                         class='m-b-10 m-l-10' as |bs|>\n            <bs.button @type=\"success\" @value=\"tbl\" @size=\"sm\">Testable Hosted</bs.button>\n            <bs.button @type=\"success\" @value=\"sh\" @size=\"sm\">Customer Hosted</bs.button>\n          </BsButtonGroup>\n        {{else if (eq this.testType 'monitor')}}\n          <BsButtonGroup @value={{this.addFilter1}} @type=\"radio\" @onChange={{fn this.filterPlans 'addFilter1'}}\n                         class='m-b-10 m-l-10' as |bs|>\n            <bs.button @type=\"success\" @value=\"PPC\" @size=\"sm\">Pay Per Check</bs.button>\n            <bs.button @type=\"success\" @value=\"Unlimited\" @size=\"sm\">Unlimited</bs.button>\n          </BsButtonGroup>\n        {{/if}}\n      {{/unless}}\n      </div>\n  \n      {{#if @existingPlan}}\n        <div class=\"pull-left\">\n          <Account::Billing::PricingPlanWidget\n                  @allowChange={{true}}\n                  @purchased={{@existingPlan}}\n                  @plan={{@existingPlan.plan}}\n                  @detailsHidden={{this.planDetailsHidden}}\n                  @onToggleDetails={{this.togglePlanDetails}}\n          />\n        </div>\n      {{/if}}\n      {{#if this.isLoaded}}\n        {{#if this.filteredPlans}}\n          <div class=\"packages {{if @ungroupedFilters 'packages-grid'}} {{if @existingPlan 'packages-change'}}\">\n            {{#each this.filteredPlans as |plan|}}\n              <Account::Billing::PricingPlanWidget\n                      @allowChange={{true}}\n                      @isChange={{@existingPlan}}\n                      @showButton={{true}}\n                      @plan={{plan}}\n                      @onChangePlan={{fn this.onSelectPlan plan}}\n                      @detailsHidden={{this.planDetailsHidden}}\n                      @onToggleDetails={{this.togglePlanDetails}}\n              />\n            {{/each}}\n          </div>\n        {{else}}\n          <div class=\"text-center\">\n            <h4>No Plan Available</h4>\n          </div>\n        {{/if}}\n      {{/if}}\n      {{#unless this.isLoaded}}\n        <div class=\"text-center\">\n          {{#if this.loadError}}\n            <p class=\"text-danger\">{{this.loadError}}</p>\n          {{else}}\n            <h4>Loading Plans...</h4>\n          {{/if}}\n        </div>\n      {{/unless}}\n    </div>\n  </div>\n  \n  {{#if (and this.showPlanModal this._tempPlanDetails)}}\n    <Account::Billing::PlanPurchaseModal\n            @purchasedPlan={{@existingPlan}}\n            @newPlanDetails={{this._tempPlanDetails}}\n            @onCancel={{this.cancelPlanModal}}\n            @modalClosed={{this.cancelPlanModal}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading d-flex justify-content-between align-items-center\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[41,[30,1],[[[1,\\\"Change Plan\\\"]],[]],[[[1,\\\"Available Plans\\\"]],[]]],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,2]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-arrow-left\\\"]],null],[1,\\\" Back\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLocked\\\"]],[[[1,\\\"      \\\"],[10,0],[14,1,\\\"mask\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"mask-background\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"h1\\\"],[12],[1,\\\"Please contact us to make any changes to your plan.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"plan-filters m-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,7],[[24,0,\\\"m-b-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"frequency\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"frequency\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"annual\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Annual\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"monthly\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Monthly\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"      \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"testType\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"testType\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"load\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Performance & API Testing\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"functional\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Functional Testing\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"monitor\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Monitoring\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"testType\\\"]],\\\"load\\\"],null],[[[1,\\\"        \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"addFilter1\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"addFilter1\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"VU\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Virtual Users\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"TestRunner\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Test Runners\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"frequency\\\"]],\\\"annual\\\"],null],[[[1,\\\"          \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"addFilter2\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"addFilter2\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"PPH\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Pay Per Hour\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Unlimited\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Unlimited\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,10],[[30,0,[\\\"testType\\\"]],\\\"functional\\\"],null],[[[1,\\\"        \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"addFilter1\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"addFilter1\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"liveAndAuto\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Live & Automation\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"live\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Live Only\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"addFilter2\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"addFilter2\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tbl\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Testable Hosted\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"sh\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Customer Hosted\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,10],[[30,0,[\\\"testType\\\"]],\\\"monitor\\\"],null],[[[1,\\\"        \\\"],[8,[39,7],[[24,0,\\\"m-b-10 m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"addFilter1\\\"]],\\\"radio\\\",[28,[37,8],[[30,0,[\\\"filterPlans\\\"]],\\\"addFilter1\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"PPC\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Pay Per Check\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Unlimited\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Unlimited\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n      \\\"]],[]],null]],[]]]],[]]]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"pull-left\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,11],null,[[\\\"@allowChange\\\",\\\"@purchased\\\",\\\"@plan\\\",\\\"@detailsHidden\\\",\\\"@onToggleDetails\\\"],[true,[30,1],[30,1,[\\\"plan\\\"]],[30,0,[\\\"planDetailsHidden\\\"]],[30,0,[\\\"togglePlanDetails\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isLoaded\\\"]],[[[41,[30,0,[\\\"filteredPlans\\\"]],[[[1,\\\"        \\\"],[10,0],[15,0,[29,[\\\"packages \\\",[52,[30,4],\\\"packages-grid\\\"],\\\" \\\",[52,[30,1],\\\"packages-change\\\"]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"filteredPlans\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[39,11],null,[[\\\"@allowChange\\\",\\\"@isChange\\\",\\\"@showButton\\\",\\\"@plan\\\",\\\"@onChangePlan\\\",\\\"@detailsHidden\\\",\\\"@onToggleDetails\\\"],[true,[30,1],true,[30,11],[28,[37,8],[[30,0,[\\\"onSelectPlan\\\"]],[30,11]],null],[30,0,[\\\"planDetailsHidden\\\"]],[30,0,[\\\"togglePlanDetails\\\"]]]],null],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[12],[1,\\\"No Plan Available\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[41,[51,[30,0,[\\\"isLoaded\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadError\\\"]],[[[1,\\\"          \\\"],[10,2],[14,0,\\\"text-danger\\\"],[12],[1,[30,0,[\\\"loadError\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Loading Plans...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"showPlanModal\\\"]],[30,0,[\\\"_tempPlanDetails\\\"]]],null],[[[1,\\\"  \\\"],[8,[39,16],null,[[\\\"@purchasedPlan\\\",\\\"@newPlanDetails\\\",\\\"@onCancel\\\",\\\"@modalClosed\\\"],[[30,1],[30,0,[\\\"_tempPlanDetails\\\"]],[30,0,[\\\"cancelPlanModal\\\"]],[30,0,[\\\"cancelPlanModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@existingPlan\\\",\\\"@onBack\\\",\\\"bs\\\",\\\"@ungroupedFilters\\\",\\\"bs\\\",\\\"bs\\\",\\\"bs\\\",\\\"bs\\\",\\\"bs\\\",\\\"bs\\\",\\\"plan\\\"],[\\\"div\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"h1\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"unless\\\",\\\"eq\\\",\\\"account/billing/pricing-plan-widget\\\",\\\"each\\\",\\\"-track-array\\\",\\\"p\\\",\\\"and\\\",\\\"account/billing/plan-purchase-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/plan-purchase.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPlanPurchaseComponent = _exports.default = (_class = class AccountBillingPlanPurchaseComponent extends _component2.default {\n    get isSuperAdmin() {\n      return _environment.config.currentUser?.isAdmin;\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"plans\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"frequency\", _descriptor4, this);\n      _initializerDefineProperty(this, \"testType\", _descriptor5, this);\n      _initializerDefineProperty(this, \"addFilter1\", _descriptor6, this);\n      _initializerDefineProperty(this, \"addFilter2\", _descriptor7, this);\n      _initializerDefineProperty(this, \"accountList\", _descriptor8, this);\n      _initializerDefineProperty(this, \"purchasedPlans\", _descriptor9, this);\n      _initializerDefineProperty(this, \"isPlanSaved\", _descriptor0, this);\n      _initializerDefineProperty(this, \"loadError\", _descriptor1, this);\n      _initializerDefineProperty(this, \"showPlanModal\", _descriptor10, this);\n      _initializerDefineProperty(this, \"planDetailsHidden\", _descriptor11, this);\n      _initializerDefineProperty(this, \"_tempPlanDetails\", _descriptor12, this);\n      this.loadDetails();\n    }\n    async loadDetails() {\n      try {\n        this.prepareFilterPreset();\n        const orgId = _environment.config.currentUser.org?.id || _environment.config.currentUser.orgs?.[0]?.organization?.id;\n        this.accountList = await this.api.billing.getAccount(orgId);\n        this.purchasedPlans = this.accountList.purchasedPlans;\n        const accountId = _environment.config.currentUser.org?.account?.id || this.accountList.id;\n        this.plans = await this.api.billing.getPlans(accountId, _environment.config.isMonitoring ? 'Monitoring' : null);\n        this.isLoaded = true;\n      } catch (e) {\n        this.loadError = 'Unable to load plans. Please contact support@testable.io.';\n      }\n    }\n    prepareFilterPreset() {\n      if (this.args.existingPlan?.plan) {\n        const plan = this.args.existingPlan.plan;\n        this.frequency = plan.frequency === 'Yearly' ? 'annual' : 'monthly';\n        if (!_environment.config.isMonitoring) {\n          if (plan.category === 'VU' || plan.category === 'TestRunner') {\n            this.testType = 'load';\n            this.addFilter1 = plan.category;\n          } else if (plan.category === 'LiveSession' || plan.category === 'BrowserSession') {\n            this.testType = 'functional';\n            this.addFilter1 = plan.category === 'BrowserSession' ? 'liveAndAuto' : 'live';\n          } else if (plan.category === 'MonitorCheck') {\n            this.testType = 'monitor';\n            this.addFilter1 = plan.name.toLowerCase().indexOf('unlimited') === 0 ? 'Unlimited' : 'PPC';\n          }\n          if (this.testType === 'load' && this.frequency === 'annual') {\n            this.addFilter2 = plan.name.toLowerCase().indexOf('unlimited') === 0 ? 'Unlimited' : 'PPH';\n          } else if (this.testType === 'functional') {\n            this.addFilter2 = plan.name.toLowerCase().indexOf('tbl') === 0 ? 'tbl' : 'sh';\n          }\n        }\n      }\n    }\n    get isLocked() {\n      return this.accountList?.locked && !this.isSuperAdmin;\n    }\n    togglePlanDetails() {\n      this.planDetailsHidden = !this.planDetailsHidden;\n    }\n    filterPlans(type, value) {\n      this[type] = value;\n      if (type === 'testType') {\n        if (value === 'load') {\n          this.addFilter1 = 'VU';\n          this.addFilter2 = 'PPH';\n        } else if (value === 'functional') {\n          this.addFilter1 = 'liveAndAuto';\n          this.addFilter2 = 'tbl';\n        } else if (value === 'monitor') {\n          this.addFilter1 = 'PPC';\n        }\n      }\n    }\n    onSelectPlan(plan, isChangePlane, quantity) {\n      this._tempPlanDetails.plan = plan;\n      this._tempPlanDetails.isChangePlane = isChangePlane;\n      this._tempPlanDetails.quantity = quantity;\n      this.showPlanModal = true;\n    }\n    cancelPlanModal() {\n      this.showPlanModal = false;\n    }\n    get filteredPlans() {\n      let plans = this.plans;\n      if (!plans.length || !this.purchasedPlans) return;\n      const freePlan = plans.find(p => p.name?.endsWith('free'));\n      const app = _environment.config.isMonitoring ? 'Monitoring' : 'Testing';\n      const purchasedPlans = this.purchasedPlans.filter(p => (p.plan.app || 'Testing') === app);\n      if (this.frequency === 'annual') {\n        plans = plans.filter(plan => plan.frequency === 'Yearly');\n      } else if (this.frequency === 'monthly') {\n        plans = plans.filter(plan => plan.frequency === 'Monthly');\n      }\n      if (!this.args.ungroupedFilters) {\n        if (this.testType === 'load') {\n          plans = plans.filter(plan => plan.category === this.addFilter1);\n          if (this.frequency === 'annual') {\n            plans = plans.filter(plan => this.addFilter2 === 'Unlimited' ? plan.name.toLowerCase().indexOf('unlimited') === 0 : plan.name.toLowerCase().indexOf('unlimited') !== 0);\n          }\n        } else if (this.testType === 'functional') {\n          if (this.addFilter1 === 'live') {\n            plans = plans.filter(plan => plan.category === 'LiveSession');\n          } else if (this.addFilter1 === 'liveAndAuto') {\n            plans = plans.filter(plan => plan.category === 'BrowserSession' || plan.category === 'LiveSession');\n          }\n          plans = plans.filter(plan => plan.name.toLowerCase().indexOf(this.addFilter2) === 0);\n        } else if (this.testType === 'monitor') {\n          plans = plans.filter(plan => plan.category === 'MonitorCheck');\n          plans = plans.filter(plan => this.addFilter1 === 'Unlimited' ? plan.name.toLowerCase().indexOf('unlimited') === 0 : plan.name.toLowerCase().indexOf('unlimited') !== 0);\n        }\n      }\n      plans = plans.filter(plan => !plan.name?.endsWith('free'));\n      if (purchasedPlans.length < 1 || this.args.existingPlan && purchasedPlans.length === 1 && !purchasedPlans[0].plan.name?.endsWith('free')) {\n        if (freePlan) plans.unshift(freePlan);\n      }\n      return plans;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"plans\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"frequency\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'annual';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"testType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'load';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"addFilter1\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'VU';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"addFilter2\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'PPH';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"accountList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"purchasedPlans\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"isPlanSaved\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"loadError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"showPlanModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"planDetailsHidden\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"_tempPlanDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {\n        plan: null,\n        isChangePlane: null,\n        quantity: null\n      };\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"togglePlanDetails\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"togglePlanDetails\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filterPlans\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"filterPlans\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectPlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectPlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelPlanModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelPlanModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPlanPurchaseComponent);\n});","define(\"@testable/shared-ui/components/account/billing/pricing-plan-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"package {{if (and this.purchased @allowChange) 'package-selected-green'}} {{if this.isTerminated 'package-terminated'}} {{if this.effectiveDateInFuture 'package-effective'}}\">\n  \n    {{#if this.purchased.terminationDate}}\n      <div class=\"package-top-label terminate-label\">\n          Terminates on <strong>{{print-date this.purchased.terminationDate \"MMM D 'YY\"}}</strong>\n      </div>\n    {{/if}}\n    {{#if this.effectiveDateInFuture}}\n      <div class=\"package-top-label effectiveDate-label\">\n          Effective on <strong>{{print-date this.purchased.effectiveDate \"MMM D 'YY\"}}</strong>\n      </div>\n    {{/if}}\n    {{#if (and this.renewOnDate (not this.purchased.terminationDate) (not this.purchased.effectiveDateInFuture))}}\n      <div class=\"package-top-label currentPeriod-label\">\n        Renews On <strong>{{this.renewOnDate}}</strong>\n      </div>\n    {{/if}}\n  \n    {{#if (and this.purchased @showMenu)}}\n      <button type=\"button\" class=\"package-dropdown btn btn-icon btn-sm btn-circle text-primary\" data-bs-toggle=\"dropdown\">\n        <Ui::Icon @icon=\"fa fa-ellipsis-h\" />\n      </button>\n      <ul class=\"dropdown-menu\" role=\"menu\">\n        {{#unless this.config.isOnPrem}}\n          {{#if (and (not @isLocked) (not this.isTerminated))}}\n              <li>\n                <a href=\"javascript:\" {{on \"click\" this.changePlan}}><Ui::Icon @icon=\"fa fa-edit\" /> Change Plan</a>\n              </li>\n          {{/if}}\n          {{#if (and (not this.isTerminated) (not @isLocked) (gt @purchasedPlans.length 1))}}\n            <li>\n              <a href=\"javascript:\" onclick={{this.terminatePlan}}><Ui::Icon @icon=\"fa fa-trash\" /> Terminate Plan</a>\n            </li>\n          {{/if}}\n          {{#if (and (not @isLocked) this.terminateInFuture)}}\n            <li>\n              <a href=\"javascript:\" onclick={{fn this.undoTerminatePlan this.purchased}}><Ui::Icon @icon=\"fa fa-trash\" /> Undo {{if this.purchased.changedToId 'Change' 'Termination'}}</a>\n            </li>\n          {{/if}}\n        {{/unless}}\n        <li>\n          <LinkTo @route=\"account.billing.plans\" @model={{this.purchased.id}} class=\"nav-item\"><Ui::Icon @icon=\"fa fa-history\" /> View Details/History</LinkTo>\n        </li>\n      </ul>\n    {{/if}}\n  \n    {{#if this.purchased.id}}\n      <LinkTo @route=\"account.billing.plans\" @model={{this.purchased.id}} class=\"package-title\">{{this.plan.displayName}}</LinkTo>\n    {{else}}\n      <h3 class=\"package-title\">{{this.plan.displayName}}</h3>\n    {{/if}}\n  \n    <div>\n      {{#if this.planCategory.title}}\n        <span class='label label-success'>{{this.planCategory.title}}</span>\n      {{/if}}\n      <span class='label label-success'>{{this.plan.frequency}}</span>\n    </div>\n  \n    <div class=\"package-price\"> {{html-safe this.price}} </div>\n    {{#if (and @allowChange (not this.purchased) (gt this.plan.maxQuantity 1))}}\n      {{get this.plan.products '0.product.description'}}\n      {{#if (lte this.plan.maxQuantity 100) }}\n        <Ui::PSelect class=\"quantity-dropdown\" @options={{this.quantityMenu}} @selected={{this.quantity}} @disabled={{@isReadOnly}}\n                     @onChange={{this.quantityChange}} as |choice|>\n          {{if (gt choice 0) choice 'Custom'}}\n        </Ui::PSelect>\n      {{/if}}\n  \n      {{#if (or (gt this.plan.maxQuantity 100) this.showCustomQuantity)}}\n        <Input @type=\"number\"\n               class=\"form-control input-lg\"\n               disabled={{@isReadOnly}}\n               placeholder={{get this.plan.products '0.product.description'}}\n               onchange={{this.quantityChangeTyped}}\n               @value={{this.customQuantity}}\n               min={{this.plan.minQuantity}}\n               max={{this.plan.maxQuantity}}\n        />\n      {{/if}}\n    {{/if}}\n  \n    <ul class=\"package-ul\">\n      {{#each this.features as |feature index|}}\n        <li class=\"package-li {{if (and this.isDetailsHidden (gt index 0)) 'hide' }}\"> {{html-safe feature}}</li>\n      {{/each}}\n    </ul>\n    {{#if (gt this.features.length 1)}}\n    <ul class=\"package-ul-noborder\">\n      <li class=\"package-li package-li-more\">\n        <a href=\"javascript:\" onclick={{this.showHideMore}}>{{#if this.isDetailsHidden}}\n          + View more details\n        {{else}}\n          - hide details\n        {{/if}}\n        </a>\n      </li>\n    </ul>\n    {{/if}}\n    {{#if @showButton}}\n      <a class=\"btn btn-rounded btn-primary package-button\" href=\"javascript:\" {{on \"click\" this.changePlan}}>\n        {{if @isChange 'Change' 'Add'}}\n      </a>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"package \\\",[52,[28,[37,2],[[30,0,[\\\"purchased\\\"]],[30,1]],null],\\\"package-selected-green\\\"],\\\" \\\",[52,[30,0,[\\\"isTerminated\\\"]],\\\"package-terminated\\\"],\\\" \\\",[52,[30,0,[\\\"effectiveDateInFuture\\\"]],\\\"package-effective\\\"]]]],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"purchased\\\",\\\"terminationDate\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"package-top-label terminate-label\\\"],[12],[1,\\\"\\\\n        Terminates on \\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,0,[\\\"purchased\\\",\\\"terminationDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"effectiveDateInFuture\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"package-top-label effectiveDate-label\\\"],[12],[1,\\\"\\\\n        Effective on \\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,0,[\\\"purchased\\\",\\\"effectiveDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,2],[[30,0,[\\\"renewOnDate\\\"]],[28,[37,5],[[30,0,[\\\"purchased\\\",\\\"terminationDate\\\"]]],null],[28,[37,5],[[30,0,[\\\"purchased\\\",\\\"effectiveDateInFuture\\\"]]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"package-top-label currentPeriod-label\\\"],[12],[1,\\\"\\\\n      Renews On \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"renewOnDate\\\"]]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[30,0,[\\\"purchased\\\"]],[30,2]],null],[[[1,\\\"    \\\"],[10,\\\"button\\\"],[14,0,\\\"package-dropdown btn btn-icon btn-sm btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-ellipsis-h\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"config\\\",\\\"isOnPrem\\\"]]],[[[41,[28,[37,2],[[28,[37,5],[[30,3]],null],[28,[37,5],[[30,0,[\\\"isTerminated\\\"]]],null]],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,6,\\\"javascript:\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"changePlan\\\"]]],null],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Change Plan\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,2],[[28,[37,5],[[30,0,[\\\"isTerminated\\\"]]],null],[28,[37,5],[[30,3]],null],[28,[37,13],[[30,4,[\\\"length\\\"]],1],null]],null],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,6,\\\"javascript:\\\"],[15,\\\"onclick\\\",[30,0,[\\\"terminatePlan\\\"]]],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Terminate Plan\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,2],[[28,[37,5],[[30,3]],null],[30,0,[\\\"terminateInFuture\\\"]]],null],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,6,\\\"javascript:\\\"],[15,\\\"onclick\\\",[28,[37,14],[[30,0,[\\\"undoTerminatePlan\\\"]],[30,0,[\\\"purchased\\\"]]],null]],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Undo \\\"],[1,[52,[30,0,[\\\"purchased\\\",\\\"changedToId\\\"]],\\\"Change\\\",\\\"Termination\\\"]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,15],[[24,0,\\\"nav-item\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.billing.plans\\\",[30,0,[\\\"purchased\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-history\\\"]],null],[1,\\\" View Details/History\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"purchased\\\",\\\"id\\\"]],[[[1,\\\"    \\\"],[8,[39,15],[[24,0,\\\"package-title\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.billing.plans\\\",[30,0,[\\\"purchased\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"plan\\\",\\\"displayName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,\\\"h3\\\"],[14,0,\\\"package-title\\\"],[12],[1,[30,0,[\\\"plan\\\",\\\"displayName\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"planCategory\\\",\\\"title\\\"]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"label label-success\\\"],[12],[1,[30,0,[\\\"planCategory\\\",\\\"title\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,1],[14,0,\\\"label label-success\\\"],[12],[1,[30,0,[\\\"plan\\\",\\\"frequency\\\"]]],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"package-price\\\"],[12],[1,\\\" \\\"],[1,[28,[35,18],[[30,0,[\\\"price\\\"]]],null]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[30,1],[28,[37,5],[[30,0,[\\\"purchased\\\"]]],null],[28,[37,13],[[30,0,[\\\"plan\\\",\\\"maxQuantity\\\"]],1],null]],null],[[[1,\\\"    \\\"],[1,[28,[35,19],[[30,0,[\\\"plan\\\",\\\"products\\\"]],\\\"0.product.description\\\"],null]],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[30,0,[\\\"plan\\\",\\\"maxQuantity\\\"]],100],null],[[[1,\\\"      \\\"],[8,[39,21],[[24,0,\\\"quantity-dropdown\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"quantityMenu\\\"]],[30,0,[\\\"quantity\\\"]],[30,5],[30,0,[\\\"quantityChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[52,[28,[37,13],[[30,6],0],null],[30,6],\\\"Custom\\\"]],[1,\\\"\\\\n      \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,22],[[28,[37,13],[[30,0,[\\\"plan\\\",\\\"maxQuantity\\\"]],100],null],[30,0,[\\\"showCustomQuantity\\\"]]],null],[[[1,\\\"      \\\"],[8,[39,23],[[24,0,\\\"form-control input-lg\\\"],[16,\\\"disabled\\\",[30,5]],[16,\\\"placeholder\\\",[28,[37,19],[[30,0,[\\\"plan\\\",\\\"products\\\"]],\\\"0.product.description\\\"],null]],[16,\\\"onchange\\\",[30,0,[\\\"quantityChangeTyped\\\"]]],[16,\\\"min\\\",[30,0,[\\\"plan\\\",\\\"minQuantity\\\"]]],[16,\\\"max\\\",[30,0,[\\\"plan\\\",\\\"maxQuantity\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"customQuantity\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"package-ul\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,25],[[28,[37,25],[[30,0,[\\\"features\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,\\\"li\\\"],[15,0,[29,[\\\"package-li \\\",[52,[28,[37,2],[[30,0,[\\\"isDetailsHidden\\\"]],[28,[37,13],[[30,8],0],null]],null],\\\"hide\\\"]]]],[12],[1,\\\" \\\"],[1,[28,[35,18],[[30,7]],null]],[13],[1,\\\"\\\\n\\\"]],[7,8]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"features\\\",\\\"length\\\"]],1],null],[[[1,\\\"  \\\"],[10,\\\"ul\\\"],[14,0,\\\"package-ul-noborder\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"package-li package-li-more\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"javascript:\\\"],[15,\\\"onclick\\\",[30,0,[\\\"showHideMore\\\"]]],[12],[41,[30,0,[\\\"isDetailsHidden\\\"]],[[[1,\\\"\\\\n        + View more details\\\\n\\\"]],[]],[[[1,\\\"        - hide details\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,9],[[[1,\\\"    \\\"],[11,3],[24,0,\\\"btn btn-rounded btn-primary package-button\\\"],[24,6,\\\"javascript:\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"changePlan\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[1,[52,[30,10],\\\"Change\\\",\\\"Add\\\"]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@allowChange\\\",\\\"@showMenu\\\",\\\"@isLocked\\\",\\\"@purchasedPlans\\\",\\\"@isReadOnly\\\",\\\"choice\\\",\\\"feature\\\",\\\"index\\\",\\\"@showButton\\\",\\\"@isChange\\\"],[\\\"div\\\",\\\"if\\\",\\\"and\\\",\\\"strong\\\",\\\"print-date\\\",\\\"not\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"ul\\\",\\\"unless\\\",\\\"li\\\",\\\"a\\\",\\\"on\\\",\\\"gt\\\",\\\"fn\\\",\\\"link-to\\\",\\\"h3\\\",\\\"span\\\",\\\"html-safe\\\",\\\"get\\\",\\\"lte\\\",\\\"ui/p-select\\\",\\\"or\\\",\\\"input\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/pricing-plan-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPricingPlanWidgetComponent = _exports.default = (_class = class AccountBillingPricingPlanWidgetComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"features\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"purchased\", _descriptor4, this);\n      _initializerDefineProperty(this, \"renewOnDate\", _descriptor5, this);\n      _initializerDefineProperty(this, \"plan\", _descriptor6, this);\n      _initializerDefineProperty(this, \"config\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showMoreHidden\", _descriptor8, this);\n      _initializerDefineProperty(this, \"quantityMenu\", _descriptor9, this);\n      _initializerDefineProperty(this, \"showCustomQuantity\", _descriptor0, this);\n      _initializerDefineProperty(this, \"quantity\", _descriptor1, this);\n      _initializerDefineProperty(this, \"customQuantity\", _descriptor10, this);\n      _initializerDefineProperty(this, \"isTerminated\", _descriptor11, this);\n      _initializerDefineProperty(this, \"terminateInFuture\", _descriptor12, this);\n      _initializerDefineProperty(this, \"effectiveDateInFuture\", _descriptor13, this);\n      _defineProperty(this, \"planCategories\", [{\n        category: \"VU\",\n        title: \"Virtual Users\"\n      }, {\n        category: \"TestRunner\",\n        title: \"Test Runners\"\n      }, {\n        category: \"BrowserSession\",\n        title: \"Browser Automation\"\n      }, {\n        category: \"LiveSession\",\n        title: \"Live Session\"\n      }, {\n        category: \"MonitorCheck\",\n        title: \"Monitors\"\n      }]);\n      this.purchased = this.args.purchased;\n      this.plan = this.args.plan;\n      this.features = _.isString(this.plan.description) ? JSON.parse(this.plan.description) : [];\n      if (this.purchased) {\n        this.isTerminated = !!this.purchased.terminationDate;\n        if (this.isTerminated) {\n          this.terminateInFuture = moment(this.purchased.terminationDate) > new Date();\n        }\n        if (this.purchased.effectiveDate) {\n          this.effectiveDateInFuture = moment(this.purchased.effectiveDate) > new Date();\n        }\n        if (this.quantityMenu.includes(this.purchased.quantity) && this.plan.maxQuantity <= 100) {\n          this.quantity = this.purchased.quantity;\n        } else {\n          this.quantity = -1;\n          this.showCustomQuantity = true;\n          this.customQuantity = this.purchased.quantity;\n        }\n        if (!this.effectiveDateInFuture && this.purchased.currentPeriod?.endDate) this.renewOnDate = moment(this.purchased.currentPeriod?.endDate).format(\"MMM D 'YY\");\n      } else {\n        if (this.plan.maxQuantity <= 100) {\n          this.quantity = this.plan.minQuantity;\n        } else {\n          this.quantity = -1;\n          this.showCustomQuantity = true;\n          this.customQuantity = this.plan.minQuantity;\n        }\n      }\n    }\n    get planCategory() {\n      return this.planCategories.find(category => category.category === this.plan.category);\n    }\n    get price() {\n      let price = 0;\n      if (this.purchased) {\n        if (this.purchased.price > 0) {\n          price = this.purchased.price;\n          price = _lib.default.printCcy(this.api.billing.getPriceFromFrequency(price, this.plan.frequency));\n          if (this.plan.frequency !== 'OneTime') price += '/mo';\n          let quantityText = '';\n          if (this.plan.maxQuantity > 1) {\n            quantityText = `${this.api.billing.formatNum(this.purchased.quantity)} ${this.plan.products[0].product.description}<br />`;\n          }\n          return quantityText + _lib.default.printCcy(price);\n        }\n      } else if (this.plan && this.plan.priceSchedule) {\n        const quantity = this.plan.maxQuantity === 1 ? 1 : this.quantity < 1 ? this.customQuantity : this.quantity;\n        price = this.api.billing.getPrice(0, quantity, this.plan.priceSchedule);\n        price = _lib.default.printCcy(this.api.billing.getPriceFromFrequency(price, this.plan.frequency));\n        if (this.plan.frequency !== 'OneTime') price += '/mo';\n        return price;\n      }\n      return \"FREE\";\n    }\n    changePlan() {\n      if (this.quantity < 0 && (this.customQuantity < this.plan.minQuantity || this.customQuantity > this.plan.maxQuantity)) {\n        _lib.default.info(`Quantity must be between ${this.plan.minQuantity} and ${this.plan.maxQuantity}`);\n        return;\n      }\n      if (typeof this.args.onChangePlan === 'function') {\n        let quantityToUse = this.quantity < 0 ? this.customQuantity : this.quantity;\n        this.args.onChangePlan(this.args.isChange, quantityToUse);\n      }\n    }\n    terminatePlan() {\n      if (typeof this.args.onTerminatePlan === 'function') {\n        this.args.onTerminatePlan();\n      }\n    }\n    undoTerminatePlan() {\n      if (typeof this.args.undoTerminatePlan === 'function') {\n        this.args.undoTerminatePlan();\n      }\n    }\n    get isDetailsHidden() {\n      return this.args.detailsHidden !== undefined ? this.args.detailsHidden : this.showMoreHidden;\n    }\n    showHideMore() {\n      if (this.args.onToggleDetails) {\n        this.args.onToggleDetails();\n      } else {\n        this.showMoreHidden = !this.showMoreHidden;\n      }\n    }\n    quantityChange(quantity) {\n      this.customQuantity = this.quantity;\n      this.showCustomQuantity = quantity < 1;\n      this.quantity = quantity;\n    }\n    quantityChangeTyped(e) {\n      if (e.target.valueAsNumber < this.plan.minQuantity) this.customQuantity = this.plan.minQuantity;\n      if (e.target.valueAsNumber > this.plan.maxQuantity) this.customQuantity = this.plan.maxQuantity;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"features\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"purchased\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"renewOnDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"plan\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"config\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showMoreHidden\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"quantityMenu\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [1, 2, 3, 4, 5, 10, 15, 20, 25, -1];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"showCustomQuantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"quantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"customQuantity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"isTerminated\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"terminateInFuture\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"effectiveDateInFuture\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"changePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changePlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"terminatePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"terminatePlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"undoTerminatePlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"undoTerminatePlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showHideMore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showHideMore\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"quantityChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"quantityChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"quantityChangeTyped\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"quantityChangeTyped\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPricingPlanWidgetComponent);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-details-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _service, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionDetailsGrid = _exports.default = (_class = class SubscriptionDetailsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [];\n      columns.push({\n        title: '',\n        data: 'id',\n        width: '20px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return \" <a href='javascript:;' data-ember-action='showDetailsModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n          } else {\n            return data;\n          }\n        }\n      });\n      columns.push({\n        title: 'Description',\n        data: 'description',\n        width: '200px'\n      });\n      columns.push({\n        title: 'Period',\n        data: 'startDate',\n        width: '250px',\n        render: (data, type, full) => {\n          if (type === 'display') {\n            return _lib.default.displayDateTime(full.startDate) + ' to ' + _lib.default.displayDateTime(full.endDate);\n          } else {\n            return full.startDate;\n          }\n        }\n      });\n      if (this.args.isAddOn && this.args.isPrimaryOrg) {\n        columns.push({\n          title: 'Price',\n          data: 'invoiceItem',\n          width: '80px',\n          render: (data, type, full) => {\n            if (full.invoiceItem?.amount) {\n              let price = this.api.billing.getPriceFromFrequency(full.invoiceItem?.amount, this.args.frequency);\n              let returnText = _lib.default.printCcy(price);\n              if (this.args.frequency !== 'OneTime') returnText += '/mo';\n              return returnText;\n            }\n            return 'Free';\n          }\n        });\n      }\n      if (this.api.billing.hasUsageMetrics(this.args.subDetails)) {\n        columns.push({\n          title: 'Usage',\n          data: 'usage',\n          width: '120px',\n          render: (data, type, full) => {\n            return this.api.billing.getSubscriptionDetailsUsageInfo(full, this.args.subDetails, this.args.accountSubDetails, this.args.thisOrgOnly, type, !this.args.thisOrgOnly);\n          }\n        });\n      }\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[2, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No plan details.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-details-modal-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _service, _tracking, _toHtml, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionDetailsModalGrid = _exports.default = (_class = class SubscriptionDetailsModalGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"haveResources\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isResourcesColumnVisible\", _descriptor3, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: 'Date',\n        width: '100px',\n        data: 'startTs',\n        render: (data, type) => type === 'display' ? _lib.default.displayDateTime(data) : moment(data).valueOf()\n      }, {\n        title: 'Status',\n        data: 'pending',\n        width: '100px',\n        render: data => data ? 'Pending' : 'Finalized'\n      }, {\n        title: 'Organization',\n        data: 'id',\n        width: '200px',\n        render: (data, type, full) => full.usageRecord.organizationName\n      }, {\n        title: 'Qty Used',\n        data: 'quantity',\n        width: '70px'\n      }, {\n        title: 'Description',\n        data: 'description',\n        width: '200px'\n      }, {\n        title: 'Charge',\n        data: 'charge',\n        width: '70px',\n        render: (data, type) => type === 'display' ? _lib.default.printCcy(data) : data\n      }, {\n        title: 'Relates To',\n        data: 'id',\n        width: '250px',\n        render: (data, type, full) => (0, _toHtml.sanitizeHtml)([full.usageRecord.description, 'html'])\n      }];\n      if (this.haveResources) {\n        columns.push({\n          title: 'Resources',\n          data: 'id',\n          width: '250px',\n          render: (data, type, full) => {\n            return this.api.billing.getResourceString(full.resources, this.args.productCode);\n          }\n        });\n      }\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'desc']];\n    }\n    createDataSource() {\n      this.haveResources = this.args.data.find(d => d.resources) !== undefined;\n      if (!this.isResourcesColumnVisible && this.haveResources) this.isResourcesColumnVisible = true;\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n      this.createDataSource();\n      if (!this.isResourcesColumnVisible && this.haveResources) {\n        this.isResourcesColumnVisible = true;\n        this.refreshTable();\n      }\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: moment(this.args.endDate) < new Date() ? \"No usage occurred during this period\" : \"No usage yet utilizing this subscription\"\n      };\n      options.scrollY = \"400px\";\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"haveResources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isResourcesColumnVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _template, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"historyUsageDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Subscription Period Details {{@title}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body subscription-details-panel\">\n  \n          <div class=\"widget-row\">\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>{{@historyObj.description}}</b></h3>\n                  <b class=\"text-black-transparent-7\">Subscription</b>\n                </div>\n              </div>\n            </div>\n            <div class=\"widget-container\">\n              <div class=\"widget-card bg-white widget-card-rounded \">\n                <div class=\"widget-card-content\">\n                  <h3><b>{{print-date @historyObj.startDate \"MMM D 'YY\"}} to {{print-date @historyObj.endDate \"MMM D 'YY\"}}</b></h3>\n                  <b class=\"text-black-transparent-7\">Period</b>\n                </div>\n              </div>\n            </div>\n            {{#if (and @isAddon @isPrimaryOrg)}}\n              <div class=\"widget-container\">\n                <div class=\"widget-card bg-white widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h3><b> {{this.getPrice}} </b></h3>\n                    <b class=\"text-black-transparent-7\">Price</b>\n                  </div>\n                </div>\n              </div>\n            {{/if}}\n            {{#if this.getUsage}}\n              <div class=\"widget-container\">\n                <div class=\"widget-card widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h5><b>{{this.getUsage}}</b></h5>\n                    {{#if (and this.hasUsageMetrics (not (contains-val this.getUsage \"No usage\")) (not @thisOrgOnly))}}\n                      <a class='usage-icon' href='javascript:;'>\n                        <Ui::Icon @icon=\"fa fa-search\" {{on \"click\" (fn @showUsageModalAction @historyObj)}}/>\n                      </a>\n                    {{/if}}\n                    <b class=\"text-black-transparent-7\">Usage</b>\n                  </div>\n                </div>\n              </div>\n            {{/if}}\n            {{#if (and this.hasUsageMetrics this.getStats)}}\n              <div class=\"widget-container\">\n                <div class=\"widget-card widget-card-rounded \">\n                  <div class=\"widget-card-content\">\n                    <h5><b>{{html-safe this.getStats}}</b></h5>\n                    <b class=\"text-black-transparent-7\">Stats</b>\n                  </div>\n                </div>\n              </div>\n            {{/if}}\n          </div>\n  \n          {{#if @historyObj.resources}}\n            <div class=\"notes-container note note-primary m-b-15\">\n              <div class=\"note-icon f-s-20 p-t-15\">\n                <Ui::Icon @icon=\"fa fa-cubes fa-2x\" />\n              </div>\n              <div class=\"note-content\">\n                <h4 class=\"m-t-5 m-b-5 p-b-2\">{{@subscription.planProduct.product.description}}</h4>\n                {{this.getCurrentResources}}\n              </div>\n            </div>\n          {{/if}}\n  \n          {{#if this.isLoaded}}\n            {{#if this.isMonitorCheckUsage}}\n              <Account::Billing::MonitorCheckUsageBreakdown\n                @accountId={{@accountId}}\n                @orgId={{this.monitorUsageOrgId}}\n                @periodIds={{this.monitorUsagePeriodIds}}\n                @productName={{@historyObj.description}}\n                @rowsOnly={{true}}\n              />\n            {{/if}}\n            {{#if this.periodDetails.length}}\n              <div class=\"m-t-10\">\n                <strong>{{this.periodDetails.length}} / {{this.detailsTotal}} total records</strong>\n                {{#if this.showLoadMore}}\n                  <a role=\"button\" class=\"text-primary\" onclick={{this.loadMoreBtn}}>\n                    {{#if this.showLoadingMore}}\n                      <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading More...\n                    {{else}}\n                      Load More\n                    {{/if}}\n  \n                  </a>\n                {{/if}}\n                <a role=\"button\" class=\"pull-right btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                   target=\"_blank\"\n                   title=\"Download details\" href={{this.downloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n              </div>\n            {{/if}}\n            <Account::Billing::SubscriptionDetailsModalGrid\n                    @id='planDetailsModalGrid'\n                    @productCode={{@productCode}}\n                    @data={{this.periodDetails}}\n                    @endDate={{@historyObj.endDate}}\n            />\n          {{else}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"historyUsageDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Subscription Period Details \\\"],[1,[30,1]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body subscription-details-panel\\\"],[12],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,2,[\\\"description\\\"]]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Subscription\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,6],[[30,2,[\\\"startDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\" to \\\"],[1,[28,[35,6],[[30,2,[\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Period\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,3],[30,4]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card bg-white widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\" \\\"],[1,[30,0,[\\\"getPrice\\\"]]],[1,\\\" \\\"],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Price\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getUsage\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h5\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,0,[\\\"getUsage\\\"]]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,0,[\\\"hasUsageMetrics\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"getUsage\\\"]],\\\"No usage\\\"],null]],null],[28,[37,10],[[30,5]],null]],null],[[[1,\\\"                    \\\"],[10,3],[14,0,\\\"usage-icon\\\"],[14,6,\\\"javascript:;\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[4,[38,14],[\\\"click\\\",[28,[37,15],[[30,6],[30,2]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Usage\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,0,[\\\"hasUsageMetrics\\\"]],[30,0,[\\\"getStats\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h5\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,16],[[30,0,[\\\"getStats\\\"]]],null]],[13],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Stats\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2,[\\\"resources\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"notes-container note note-primary m-b-15\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"note-icon f-s-20 p-t-15\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-cubes fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"note-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,[30,7,[\\\"planProduct\\\",\\\"product\\\",\\\"description\\\"]]],[13],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"getCurrentResources\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[41,[30,0,[\\\"isMonitorCheckUsage\\\"]],[[[1,\\\"            \\\"],[8,[39,17],null,[[\\\"@accountId\\\",\\\"@orgId\\\",\\\"@periodIds\\\",\\\"@productName\\\",\\\"@rowsOnly\\\"],[[30,8],[30,0,[\\\"monitorUsageOrgId\\\"]],[30,0,[\\\"monitorUsagePeriodIds\\\"]],[30,2,[\\\"description\\\"]],true]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"periodDetails\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"periodDetails\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"detailsTotal\\\"]]],[1,\\\" total records\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadMore\\\"]],[[[1,\\\"                \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"text-primary\\\"],[15,\\\"onclick\\\",[30,0,[\\\"loadMoreBtn\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoadingMore\\\"]],[[[1,\\\"                    \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading More...\\\\n\\\"]],[]],[[[1,\\\"                    Load More\\\\n\\\"]],[]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"pull-right btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download details\\\"],[15,6,[30,0,[\\\"downloadUrl\\\"]]],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,19],null,[[\\\"@id\\\",\\\"@productCode\\\",\\\"@data\\\",\\\"@endDate\\\"],[\\\"planDetailsModalGrid\\\",[30,9],[30,0,[\\\"periodDetails\\\"]],[30,2,[\\\"endDate\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@title\\\",\\\"@historyObj\\\",\\\"@isAddon\\\",\\\"@isPrimaryOrg\\\",\\\"@thisOrgOnly\\\",\\\"@showUsageModalAction\\\",\\\"@subscription\\\",\\\"@accountId\\\",\\\"@productCode\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"h3\\\",\\\"b\\\",\\\"print-date\\\",\\\"if\\\",\\\"and\\\",\\\"h5\\\",\\\"not\\\",\\\"contains-val\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"on\\\",\\\"fn\\\",\\\"html-safe\\\",\\\"account/billing/monitor-check-usage-breakdown\\\",\\\"strong\\\",\\\"account/billing/subscription-details-modal-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/subscription-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let LimitModalComponent = _exports.default = (_class = class LimitModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"periodDetails\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"detailsTotal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showLoadingMore\", _descriptor5, this);\n      _initializerDefineProperty(this, \"offset\", _descriptor6, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showLoadMore\", _descriptor8, this);\n    }\n    async requestDetails(fromLoadMore) {\n      if (fromLoadMore) {\n        this.showLoadingMore = true;\n      } else {\n        this.isLoaded = false;\n      }\n      let detailsResult = await this.api.billing.getSubscriptionPeriodDetails(this.args.historyObj.id, this.args.thisOrgOnly, this.offset, this.limit, r => this.detailsTotal = r.getResponseHeader('X-Testable-Count'));\n      this.periodDetails = fromLoadMore ? [...this.periodDetails, ...detailsResult] : detailsResult;\n      this.showLoadMore = this.periodDetails.length < this.detailsTotal;\n      this.isLoaded = true;\n      this.showLoadingMore = false;\n      this.offset += this.limit;\n    }\n    get downloadUrl() {\n      return this.api.billing.getSubscriptionPeriodDetailsUrl(this.args.historyObj.id, this.args.thisOrgOnly);\n    }\n    get getPrice() {\n      if (this.args.isAddOn) {\n        return _lib.default.printCcy(this.args.historyObj.invoiceItem?.amount) || 'FREE';\n      } else {\n        if (this.args.historyObj.price) {\n          return _lib.default.printCcy(this.args.historyObj.price);\n        } else {\n          return 'Free';\n        }\n      }\n    }\n    get getCurrentResources() {\n      return `(${this.api.billing.printMetadata(this.args.historyObj.metadata)}):\n              ${this.api.billing.getResourceString(this.args.historyObj.resources, this.args.subscription.planProduct.product.code)}`;\n    }\n    get getUsage() {\n      return (0, _template.htmlSafe)(this.api.billing.getSubscriptionDetailsUsageInfo(this.args.historyObj, this.args.subscription, this.args.accountSubDetails, this.args.thisOrgOnly, 'display'));\n    }\n    get hasUsageMetrics() {\n      return this.api.billing.hasUsageMetrics(this.args.subscription);\n    }\n    get isMonitorCheckUsage() {\n      return this.args.subscription?.planProduct?.product?.category === 'MonitorCheck';\n    }\n    get monitorUsageOrgId() {\n      const orgId = this.args.thisOrgOnly;\n      return orgId && orgId !== true && orgId !== 'true' ? orgId : null;\n    }\n    get monitorUsagePeriodIds() {\n      return this.args.historyObj?.id ? [this.args.historyObj.id] : [];\n    }\n    get getStats() {\n      const totalUsageTime = this.args.historyObj.totalUsageTime || 0;\n      const {\n        queuedExecutions,\n        totalExecutions,\n        totalQueuedTime,\n        peakUsage\n      } = this.args.historyObj;\n      const sub = this.args.subscription;\n      const frequency = sub.planProduct.frequency;\n      const description = sub.planProduct.product.description;\n      const consumableDescription = sub.planProduct.relatedConsumableProduct?.description || description;\n      const productType = this.api.billing.getProductType(sub.planProduct.product.productType, sub.planProduct.paymentType);\n      return this.api.billing.getStatsDetails(productType, description, consumableDescription, peakUsage, totalUsageTime, frequency, true, queuedExecutions, totalExecutions, totalQueuedTime);\n    }\n    loadMoreBtn() {\n      this.requestDetails(true);\n    }\n    didInsert() {\n      let self = this;\n      $('#historyUsageDetailsModal').on('hidden.bs.modal', function () {\n        self.args.onClose();\n      });\n      $('#historyUsageDetailsModal').modal('show');\n      $('#historyUsageDetailsModal').on('shown.bs.modal', function () {\n        self.offset = 0;\n        self.requestDetails();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"periodDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"detailsTotal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showLoadingMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"offset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 100;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showLoadMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadMoreBtn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreBtn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LimitModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _tracking, _object, _environment, _server, _template, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel subscription-details-panel\" data-sortable=\"false\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\"><strong>Subscription Details {{this.getSubtitle}}</strong></h4>\n      {{#if (and this.isAddOn this.subscription.planProduct (not this.isLocked) (not-eq this.subscription.planProduct.frequency 'OneTime') (not this.thisOrgOnly))}}\n        <div class=\"panel-heading-btn\">\n          <button type=\"button\" class=\"btn btn-primary btn-xs\" onclick={{this.editAddon}}>\n            <strong><Ui::Icon @icon=\"fa fa-edit\" /> Edit Add-On</strong>\n          </button>\n        </div>\n      {{/if}}\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"widget-row\">\n        <div class=\"widget-container\">\n          <div class=\"widget-card widget-card-rounded \">\n            <div class=\"widget-card-content\">\n              <h3><b>{{this.getTitle}}</b></h3>\n              <b class=\"text-black-transparent-7\">Name</b>\n            </div>\n          </div>\n        </div>\n        <div class=\"widget-container\">\n          <div class=\"widget-card widget-card-rounded \">\n            <div class=\"widget-card-content\">\n              <h5 class=\"text-wrap\"><b>{{this.getUsage}}</b></h5>\n              {{#if (and this.hasUsageMetrics (not (contains-val this.getUsage \"No usage\")) (not this.thisOrgOnly))}}\n                <Ui::Icon {{on \"click\" (fn this.showUsageModalAction this.subscription.currentPeriod)}} class=\"usage-icon cursor-pointer\" @icon=\"fa fa-search\" />\n              {{/if}}\n              <b class=\"text-black-transparent-7\">Usage</b>\n            </div>\n          </div>\n        </div>\n        {{#if this.isPrimaryOrg}}\n          <div class=\"widget-container\">\n            <div class=\"widget-card widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                {{html-safe this.getPlan}}\n                <b class=\"text-black-transparent-7\">{{this.getPlanLabel}}</b>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n        {{#if (eq this.getSubscriptionType 'Consumable')}}\n          <div class=\"widget-container\">\n            <div class=\"widget-card widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h3><b>{{html-safe this.getRollover}}</b></h3>\n                <b class=\"text-black-transparent-7\">Rollover</b>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and this.hasUsageMetrics this.getStats)}}\n          <div class=\"widget-container\">\n            <div class=\"widget-card widget-card-rounded \">\n              <div class=\"widget-card-content\">\n                <h5><b>{{html-safe this.getStats}}</b></h5>\n                <b class=\"text-black-transparent-7\">Stats</b>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n      </div>\n      <div class=\"notes-row\">\n        {{#if this.subscription.resources}}\n          <div class=\"notes-container note note-primary m-b-15\">\n            <div class=\"note-icon f-s-20 p-t-15\">\n              <Ui::Icon @icon=\"fa fa-cubes fa-2x\" />\n            </div>\n            <div class=\"note-content\">\n              <h4 class=\"m-t-5 m-b-5 p-b-2\">{{this.subscription.planProduct.product.description}}</h4>\n              {{this.getCurrentResources}}\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if\n          (and\n            this.subscription.hasChanges\n            (or\n                (not-eq this.subscription.currentPeriod.includedQty this.subscription.includedQty)\n                (not (lodash-function 'isEqual' this.subscription.resources this.subscription.currentPeriod.resources))\n            )\n          )\n        }}\n          <div class=\"notes-container note note-yellow m-b-15\">\n            <div class=\"note-icon f-s-20 p-t-15\">\n              <Ui::Icon @icon=\"fa fa-clone fa-2x\" />\n            </div>\n            <div class=\"note-content\">\n              {{#if this.subscription.terminationDate}}\n                <h6 class=\"m-t-5 m-b-5 p-b-2\">\n                  This subscription has been cancelled and will not renew after {{print-date this.subscription.terminationDate \"MMM D 'YY\"}}.\n                </h6>\n              {{else}}\n                <h6 class=\"m-t-5 m-b-5 p-b-2\">On {{print-date this.subscription.currentPeriod.endDate \"MMM D 'YY\"}}\n                  the following changes will be applied to this subscription:</h6>\n                <ul>\n                  {{#if (not-eq this.subscription.currentPeriod.includedQty this.subscription.includedQty)}}\n                    <li>Quantity: {{this.subscription.currentPeriod.includedQty}} <Ui::Icon @icon=\"fa fa-arrow-right\" />\n                      {{this.subscription.includedQty}} {{this.subscription.planProduct.product.description}}\n                    </li>\n                  {{/if}}\n                  {{#if (not (lodash-function 'isEqual' this.subscription.resources this.subscription.currentPeriod.resources))}}\n                    <li>New Resources: {{this.getSubscriptionResources}}</li>\n                  {{/if}}\n                </ul>\n              {{/if}}\n            </div>\n          </div>\n        {{/if}}\n      </div>\n  \n      {{#if this.hasUsageMetrics}}\n        {{#if this.periods.length}}\n          <div class=\"m-t-10\"><strong>{{this.periods.length}} / {{this.periods.length}} billing periods</strong></div>\n        {{/if}}\n        {{#if this.isPeriodsLoading}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin m-t-10\" /> Loading Subscription Usage History ...\n        {{else}}\n          <Account::Billing::SubscriptionDetailsGrid\n                  @id=\"subscripts_details_grid\"\n                  @isPrimaryOrg={{this.isPrimaryOrg}}\n                  @thisOrgOnly={{this.thisOrgOnly}}\n                  @isAddOn={{this.isAddOn}}\n                  @frequency={{this.subscription.planProduct.frequency}}\n                  @subDetails={{this.subscription}}\n                  @accountSubDetails={{this.accountSubscription}}\n                  @showDetailsModal={{this.showDetailsModalAction}}\n                  @showUsageModal={{this.showUsageModalAction}}\n                  @data={{this.periods}}\n          />\n        {{/if}}\n      {{else}}\n        {{#if this.entities.length}}\n          <div class=\"m-t-10\"><strong>{{this.entities.length}} current {{this.entityLabel}}</strong></div>\n        {{/if}}\n        {{#if this.isEntitiesLoading}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin m-t-10\" /> Loading Current Usage ...\n        {{else}}\n          <Account::Billing::SubscriptionEntitiesGrid\n                  @id=\"subscription_entities_grid\"\n                  @entityLabel={{this.entityLabel}}\n                  @data={{this.entities}}\n          />\n        {{/if}}\n      {{/if}}\n    </div>\n  </div>\n  \n  {{#if this.showDetailsModal}}\n    <Account::Billing::SubscriptionDetailsModal\n            @isAddOn={{this.isAddOn}}\n            @isPrimaryOrg={{this.isPrimaryOrg}}\n            @title={{this.getSubtitle}}\n            @accountId={{this.accountList.id}}\n            @productCode={{this.subscription.planProduct.product.code}}\n            @historyObj={{this.selectedHistoryObj}}\n            @accountSubDetails={{this.accountSubscription}}\n            @showUsageModalAction={{this.showUsageModalAction}}\n            @subscription={{this.subscription}}\n            @thisOrgOnly={{this.thisOrgOnly}}\n            @onClose={{this.detailsModalClose}} />\n  {{/if}}\n  {{#if this.showUsageModal}}\n    <Account::Billing::SubscriptionUsageModal\n            @thisOrgOnly={{this.thisOrgOnly}}\n            @selectedPeriodId={{this.selectedPeriodId}}\n            @selectedPeriod={{this.selectedHistoryObj}}\n            @onClose={{this.usageModalClose}} />\n  {{/if}}\n  {{#if this.showAddonModal}}\n    <Account::Billing::AddonModal\n            @account={{this.accountList}}\n            @existingAddon={{this.subscription}}\n            @onClose={{this.closeAddonModal}}\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel subscription-details-panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Subscription Details \\\"],[1,[30,0,[\\\"getSubtitle\\\"]]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"isAddOn\\\"]],[30,0,[\\\"subscription\\\",\\\"planProduct\\\"]],[28,[37,5],[[30,0,[\\\"isLocked\\\"]]],null],[28,[37,6],[[30,0,[\\\"subscription\\\",\\\"planProduct\\\",\\\"frequency\\\"]],\\\"OneTime\\\"],null],[28,[37,5],[[30,0,[\\\"thisOrgOnly\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary btn-xs\\\"],[15,\\\"onclick\\\",[30,0,[\\\"editAddon\\\"]]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit Add-On\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"widget-row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,0,[\\\"getTitle\\\"]]],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h5\\\"],[14,0,\\\"text-wrap\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,0,[\\\"getUsage\\\"]]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"hasUsageMetrics\\\"]],[28,[37,5],[[28,[37,12],[[30,0,[\\\"getUsage\\\"]],\\\"No usage\\\"],null]],null],[28,[37,5],[[30,0,[\\\"thisOrgOnly\\\"]]],null]],null],[[[1,\\\"              \\\"],[8,[39,8],[[24,0,\\\"usage-icon cursor-pointer\\\"],[4,[38,13],[\\\"click\\\",[28,[37,14],[[30,0,[\\\"showUsageModalAction\\\"]],[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\"]]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Usage\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isPrimaryOrg\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[35,15],[[30,0,[\\\"getPlan\\\"]]],null]],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,[30,0,[\\\"getPlanLabel\\\"]]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,16],[[30,0,[\\\"getSubscriptionType\\\"]],\\\"Consumable\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,15],[[30,0,[\\\"getRollover\\\"]]],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Rollover\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"hasUsageMetrics\\\"]],[30,0,[\\\"getStats\\\"]]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"widget-card widget-card-rounded \\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"widget-card-content\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h5\\\"],[12],[10,\\\"b\\\"],[12],[1,[28,[35,15],[[30,0,[\\\"getStats\\\"]]],null]],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[14,0,\\\"text-black-transparent-7\\\"],[12],[1,\\\"Stats\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"notes-row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"subscription\\\",\\\"resources\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"notes-container note note-primary m-b-15\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"note-icon f-s-20 p-t-15\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-cubes fa-2x\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"note-content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,[30,0,[\\\"subscription\\\",\\\"planProduct\\\",\\\"product\\\",\\\"description\\\"]]],[13],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"getCurrentResources\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"subscription\\\",\\\"hasChanges\\\"]],[28,[37,17],[[28,[37,6],[[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]],[30,0,[\\\"subscription\\\",\\\"includedQty\\\"]]],null],[28,[37,5],[[28,[37,18],[\\\"isEqual\\\",[30,0,[\\\"subscription\\\",\\\"resources\\\"]],[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"resources\\\"]]],null]],null]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"notes-container note note-yellow m-b-15\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"note-icon f-s-20 p-t-15\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-clone fa-2x\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"note-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"subscription\\\",\\\"terminationDate\\\"]],[[[1,\\\"              \\\"],[10,\\\"h6\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,\\\"\\\\n                This subscription has been cancelled and will not renew after \\\"],[1,[28,[35,20],[[30,0,[\\\"subscription\\\",\\\"terminationDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\".\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,\\\"h6\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,\\\"On \\\"],[1,[28,[35,20],[[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"endDate\\\"]],\\\"MMM D 'YY\\\"],null]],[1,\\\"\\\\n                the following changes will be applied to this subscription:\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]],[30,0,[\\\"subscription\\\",\\\"includedQty\\\"]]],null],[[[1,\\\"                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"Quantity: \\\"],[1,[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"includedQty\\\"]]],[1,\\\" \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-arrow-right\\\"]],null],[1,\\\"\\\\n                    \\\"],[1,[30,0,[\\\"subscription\\\",\\\"includedQty\\\"]]],[1,\\\" \\\"],[1,[30,0,[\\\"subscription\\\",\\\"planProduct\\\",\\\"product\\\",\\\"description\\\"]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,5],[[28,[37,18],[\\\"isEqual\\\",[30,0,[\\\"subscription\\\",\\\"resources\\\"]],[30,0,[\\\"subscription\\\",\\\"currentPeriod\\\",\\\"resources\\\"]]],null]],null],[[[1,\\\"                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"New Resources: \\\"],[1,[30,0,[\\\"getSubscriptionResources\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasUsageMetrics\\\"]],[[[41,[30,0,[\\\"periods\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"periods\\\",\\\"length\\\"]]],[1,\\\" / \\\"],[1,[30,0,[\\\"periods\\\",\\\"length\\\"]]],[1,\\\" billing periods\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isPeriodsLoading\\\"]],[[[1,\\\"        \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin m-t-10\\\"]],null],[1,\\\" Loading Subscription Usage History ...\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,23],null,[[\\\"@id\\\",\\\"@isPrimaryOrg\\\",\\\"@thisOrgOnly\\\",\\\"@isAddOn\\\",\\\"@frequency\\\",\\\"@subDetails\\\",\\\"@accountSubDetails\\\",\\\"@showDetailsModal\\\",\\\"@showUsageModal\\\",\\\"@data\\\"],[\\\"subscripts_details_grid\\\",[30,0,[\\\"isPrimaryOrg\\\"]],[30,0,[\\\"thisOrgOnly\\\"]],[30,0,[\\\"isAddOn\\\"]],[30,0,[\\\"subscription\\\",\\\"planProduct\\\",\\\"frequency\\\"]],[30,0,[\\\"subscription\\\"]],[30,0,[\\\"accountSubscription\\\"]],[30,0,[\\\"showDetailsModalAction\\\"]],[30,0,[\\\"showUsageModalAction\\\"]],[30,0,[\\\"periods\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[41,[30,0,[\\\"entities\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"entities\\\",\\\"length\\\"]]],[1,\\\" current \\\"],[1,[30,0,[\\\"entityLabel\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isEntitiesLoading\\\"]],[[[1,\\\"        \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin m-t-10\\\"]],null],[1,\\\" Loading Current Usage ...\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,24],null,[[\\\"@id\\\",\\\"@entityLabel\\\",\\\"@data\\\"],[\\\"subscription_entities_grid\\\",[30,0,[\\\"entityLabel\\\"]],[30,0,[\\\"entities\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,25],null,[[\\\"@isAddOn\\\",\\\"@isPrimaryOrg\\\",\\\"@title\\\",\\\"@accountId\\\",\\\"@productCode\\\",\\\"@historyObj\\\",\\\"@accountSubDetails\\\",\\\"@showUsageModalAction\\\",\\\"@subscription\\\",\\\"@thisOrgOnly\\\",\\\"@onClose\\\"],[[30,0,[\\\"isAddOn\\\"]],[30,0,[\\\"isPrimaryOrg\\\"]],[30,0,[\\\"getSubtitle\\\"]],[30,0,[\\\"accountList\\\",\\\"id\\\"]],[30,0,[\\\"subscription\\\",\\\"planProduct\\\",\\\"product\\\",\\\"code\\\"]],[30,0,[\\\"selectedHistoryObj\\\"]],[30,0,[\\\"accountSubscription\\\"]],[30,0,[\\\"showUsageModalAction\\\"]],[30,0,[\\\"subscription\\\"]],[30,0,[\\\"thisOrgOnly\\\"]],[30,0,[\\\"detailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showUsageModal\\\"]],[[[1,\\\"  \\\"],[8,[39,26],null,[[\\\"@thisOrgOnly\\\",\\\"@selectedPeriodId\\\",\\\"@selectedPeriod\\\",\\\"@onClose\\\"],[[30,0,[\\\"thisOrgOnly\\\"]],[30,0,[\\\"selectedPeriodId\\\"]],[30,0,[\\\"selectedHistoryObj\\\"]],[30,0,[\\\"usageModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showAddonModal\\\"]],[[[1,\\\"  \\\"],[8,[39,27],null,[[\\\"@account\\\",\\\"@existingAddon\\\",\\\"@onClose\\\"],[[30,0,[\\\"accountList\\\"]],[30,0,[\\\"subscription\\\"]],[30,0,[\\\"closeAddonModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"not-eq\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"h3\\\",\\\"b\\\",\\\"h5\\\",\\\"contains-val\\\",\\\"on\\\",\\\"fn\\\",\\\"html-safe\\\",\\\"eq\\\",\\\"or\\\",\\\"lodash-function\\\",\\\"h6\\\",\\\"print-date\\\",\\\"ul\\\",\\\"li\\\",\\\"account/billing/subscription-details-grid\\\",\\\"account/billing/subscription-entities-grid\\\",\\\"account/billing/subscription-details-modal\\\",\\\"account/billing/subscription-usage-modal\\\",\\\"account/billing/addon-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/subscription-details.hbs\",\n    \"isStrictMode\": false\n  });\n  let AccountBillingPlanModalComponent = _exports.default = (_class = class AccountBillingPlanModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"subscription\", _descriptor2, this);\n      _initializerDefineProperty(this, \"accountSubscription\", _descriptor3, this);\n      _initializerDefineProperty(this, \"thisOrgOnly\", _descriptor4, this);\n      _initializerDefineProperty(this, \"periods\", _descriptor5, this);\n      _initializerDefineProperty(this, \"entities\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isPeriodsLoading\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isEntitiesLoading\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showDetailsModal\", _descriptor9, this);\n      _initializerDefineProperty(this, \"showUsageModal\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedHistoryObj\", _descriptor1, this);\n      _initializerDefineProperty(this, \"selectedPeriodId\", _descriptor10, this);\n      _initializerDefineProperty(this, \"showAddonModal\", _descriptor11, this);\n      _initializerDefineProperty(this, \"addon\", _descriptor12, this);\n      _initializerDefineProperty(this, \"accountList\", _descriptor13, this);\n      _initializerDefineProperty(this, \"selectedOrg\", _descriptor14, this);\n      _initializerDefineProperty(this, \"isSuperAdmin\", _descriptor15, this);\n      this.subscription = this.args.subDetails;\n      this.accountSubscription = this.args.accountSubscription;\n      this.thisOrgOnly = this.args.thisOrgOnly === 'false' ? false : this.args.thisOrgOnly;\n      if (this.thisOrgOnly) {\n        _server.default.getOrg(this.thisOrgOnly).then(results => {\n          this.selectedOrg = results;\n        });\n      }\n      this.loadDetails();\n    }\n    async loadDetails(refreshSubscription) {\n      this.isPeriodsLoading = this.hasUsageMetrics;\n      this.isEntitiesLoading = !this.hasUsageMetrics;\n      if (refreshSubscription) {\n        this.subscription = await this.api.billing.getSubscriptionDetails(this.subscription.id, this.thisOrgOnly);\n        if (this.thisOrgOnly) {\n          this.accountSubscription = await this.api.billing.getSubscriptionDetails(this.subscription.id, false);\n        }\n      }\n      this.accountList = await this.api.billing.getAccount(this.thisOrgOnly, !!this.thisOrgOnly);\n      if (this.hasUsageMetrics) {\n        this.periods = await this.api.billing.getSubscriptionPeriods(this.subscription.id, this.thisOrgOnly);\n        if (this.thisOrgOnly) {\n          const accountPeriods = await this.api.billing.getSubscriptionPeriods(this.subscription.id, false);\n          this.periods = this.periods.map(ps => {\n            ps.accountPeriod = accountPeriods.find(ap => ap.id === ps.id);\n            return ps;\n          });\n        }\n      } else {\n        this.entities = await this.api.billing.getSubscriptionEntities(this.subscription.id, this.thisOrgOnly);\n      }\n      this.isPeriodsLoading = false;\n      this.isEntitiesLoading = false;\n    }\n    get getSubtitle() {\n      return this.thisOrgOnly ? this.selectedOrg && ' - ' + this.selectedOrg?.name + ' View' || \"\" : ' - Account View';\n    }\n    get isPrimaryOrg() {\n      return !_environment.config.currentUser.org?.primaryOrg;\n    }\n    get getTitle() {\n      return this.subscription.productDescription || this.subscription.planProduct.product.description;\n    }\n    get getUsage() {\n      let subscription = this.subscription;\n      if (this.thisOrgOnly) {\n        subscription = this.accountSubscription;\n        subscription.organization = this.subscription;\n      }\n      return (0, _template.htmlSafe)(this.api.billing.getSubscriptionUsageInfo(subscription, this.thisOrgOnly));\n    }\n    get isAddOn() {\n      return !this.subscription.planProduct.included;\n    }\n    get isLocked() {\n      return this.accountList?.locked && !this.isSuperAdmin;\n    }\n    get getPlan() {\n      if (!this.isAddOn) {\n        return `<h3><b>${this.subscription.srcAccountPlan?.plan?.displayName || '-'}</b></h3>`;\n      } else {\n        if (this.subscription.currentPeriod?.invoiceItem?.amount) {\n          let result = this.api.billing.getPlanColumn(this.subscription);\n          return this.subscription.hasChanges ? `<h5><b>${result}</b></h5>` : `<h3><b>${result}</b></h3>`;\n        }\n        return '<h3><b>Free</b></h3>';\n      }\n    }\n    get getPlanLabel() {\n      return this.subscription.planProduct.included ? 'Plan' : 'Price';\n    }\n    get getRollover() {\n      if (this.subscription.currentPeriod?.rollover) {\n        return `<i class=\"fa fa-check\"></i> (${this.api.billing.formatNum(this.subscription.currentPeriod.maxRollover)} ${this.subscription.planProduct.product.consumableUnits} max)`;\n      } else {\n        return `<i class=\"fa fa-times text-danger\"></i>`;\n      }\n    }\n    get getSubscriptionType() {\n      return this.api.billing.getProductTypeFromSubscription(this.subscription);\n    }\n    get hasUsageMetrics() {\n      return this.api.billing.hasUsageMetrics(this.subscription);\n    }\n    get entityLabel() {\n      return this.subscription?.planProduct?.product?.description || 'entities';\n    }\n    get getStats() {\n      return this.api.billing.getUsageInfo(this.subscription);\n    }\n    get getCurrentResources() {\n      return `(${this.api.billing.printMetadata(this.subscription.currentPeriod.metadata)}):\n              ${this.api.billing.getResourceString(this.subscription.currentPeriod.resources, this.subscription.planProduct.product.code)}`;\n    }\n    get getSubscriptionResources() {\n      return this.api.billing.getResourceString(this.subscription.resources, this.subscription.planProduct.product.code);\n    }\n    showDetailsModalAction(item) {\n      this.showDetailsModal = true;\n      this.selectedHistoryObj = this.periods.find(h => h.id === item.id);\n    }\n    showUsageModalAction(item) {\n      if (this.periods) {\n        this.selectedHistoryObj = this.periods.find(h => h.id === item.id);\n        this.selectedPeriodId = item.id;\n        this.showUsageModal = true;\n      }\n    }\n    detailsModalClose() {\n      this.showUsageModal = null;\n      this.showDetailsModal = null;\n      this.selectedHistoryObj = null;\n      this.selectedPeriodId = null;\n    }\n    usageModalClose() {\n      this.showUsageModal = null;\n      this.selectedPeriodId = null;\n    }\n    editAddon() {\n      this.showAddonModal = true;\n    }\n    closeAddonModal(doRefresh) {\n      this.showAddonModal = false;\n      if (doRefresh) this.loadDetails(true);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"subscription\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"accountSubscription\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"thisOrgOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"periods\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"entities\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isPeriodsLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isEntitiesLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"showUsageModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedHistoryObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"selectedPeriodId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"showAddonModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"addon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"accountList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"selectedOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"isSuperAdmin\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser?.isAdmin;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showUsageModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showUsageModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailsModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"usageModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"usageModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"editAddon\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editAddon\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeAddonModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeAddonModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountBillingPlanModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-entities-grid\", [\"exports\", \"@ember/object/observers\", \"@testable/shared-ui/components/data-grid\"], function (_exports, _observers, _dataGrid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@testable/shared-ui/components/data-grid\"eaimeta@70e063a35619d71f\n  class SubscriptionEntitiesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      return [{\n        title: '',\n        data: 'detailsUrl',\n        width: '20px',\n        render: (data, type) => {\n          if (type !== 'display') return data;\n          return `<a href=\"${data}\"><i class=\"fa fa-search\"></i></a>`;\n        }\n      }, {\n        title: 'Name',\n        data: 'name',\n        width: '220px'\n      }, {\n        title: 'Status',\n        data: 'status',\n        width: '100px'\n      }, {\n        title: 'Organization',\n        data: 'organizationName',\n        width: '180px'\n      }, {\n        title: 'Group',\n        data: 'groupName',\n        width: '180px',\n        render: data => data || '-'\n      }, {\n        title: 'Folder',\n        data: 'folder',\n        width: '180px',\n        render: data => data || '-'\n      }];\n    }\n    getInitialOrder() {\n      return [[1, 'asc']];\n    }\n    createDataSource() {\n      return this.args.data || [];\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      table.clear();\n      table.rows.add(this.args.data || []);\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: `No ${this.args.entityLabel || 'entities'}.`\n      };\n      options.scrollY = '400px';\n    }\n  }\n  _exports.default = SubscriptionEntitiesGrid;\n});","define(\"@testable/shared-ui/components/account/billing/subscription-usage-modal-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/components/data-grid\"], function (_exports, _observers, _service, _tracking, _dataGrid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/components/data-grid\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionDetailsModalGrid = _exports.default = (_class = class SubscriptionDetailsModalGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"haveResources\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isResourcesColumnVisible\", _descriptor3, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: 'Org Name',\n        data: 'name',\n        render: (data, type, full) => full.organization.name\n      }, {\n        title: 'Stats',\n        data: 'stats',\n        render: (data, type, full) => {\n          if (!this.api.billing.hasUsageMetrics(this.args.subscription)) return '';\n          const {\n            planProduct\n          } = this.args.subscription;\n          return this.api.billing.getUsageInfo({\n            ...full,\n            planProduct\n          });\n        }\n      }];\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'desc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n      this.createDataSource();\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No usage occurred during this period\"\n      };\n      options.scrollY = \"400px\";\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"haveResources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isResourcesColumnVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/account/billing/subscription-usage-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"historyUsageModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{this.title}} - {{this.subtitle}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body subscription-details-panel\">\n  \n          {{#if this.isLoaded}}\n            <Account::Billing::SubscriptionUsageModalGrid\n                    @id='usageDetailsModalGrid'\n                    @subscription={{this.detailsResult.subscription}}\n                    @data={{this.detailsResult.byOrg}}\n                    @thisOrgOnly={{@thisOrgOnly}}\n            />\n            {{#if this.isMonitorCheckUsage}}\n              <Account::Billing::MonitorCheckUsageBreakdown\n                @accountId={{this.monitorUsageAccountId}}\n                @orgId={{this.monitorUsageOrgId}}\n                @periodIds={{this.monitorUsagePeriodIds}}\n                @productName={{this.detailsResult.description}}\n              />\n            {{/if}}\n          {{else}}\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"historyUsageModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,0,[\\\"title\\\"]]],[1,\\\" - \\\"],[1,[30,0,[\\\"subtitle\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body subscription-details-panel\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[1,\\\"          \\\"],[8,[39,5],null,[[\\\"@id\\\",\\\"@subscription\\\",\\\"@data\\\",\\\"@thisOrgOnly\\\"],[\\\"usageDetailsModalGrid\\\",[30,0,[\\\"detailsResult\\\",\\\"subscription\\\"]],[30,0,[\\\"detailsResult\\\",\\\"byOrg\\\"]],[30,1]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMonitorCheckUsage\\\"]],[[[1,\\\"            \\\"],[8,[39,6],null,[[\\\"@accountId\\\",\\\"@orgId\\\",\\\"@periodIds\\\",\\\"@productName\\\"],[[30,0,[\\\"monitorUsageAccountId\\\"]],[30,0,[\\\"monitorUsageOrgId\\\"]],[30,0,[\\\"monitorUsagePeriodIds\\\"]],[30,0,[\\\"detailsResult\\\",\\\"description\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"          \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@thisOrgOnly\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"account/billing/subscription-usage-modal-grid\\\",\\\"account/billing/monitor-check-usage-breakdown\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/account/billing/subscription-usage-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let UsageModalComponent = _exports.default = (_class = class UsageModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"detailsResult\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor3, this);\n    }\n    get subtitle() {\n      const description = this.args.selectedPeriod?.description ?? this.args.selectedPeriod?.productDescription;\n      const period = this.detailsResult ? ` - ${_lib.default.displayDateTime(this.detailsResult.startDate)} to ${_lib.default.displayDateTime(this.detailsResult.endDate)}` : '';\n      return `${description} subscription ${period}`;\n    }\n    get isMonitorCheckUsage() {\n      return this.detailsResult?.subscription?.planProduct?.product?.category === 'MonitorCheck';\n    }\n    get title() {\n      return this.isMonitorCheckUsage ? 'Usage Details' : 'Usage by Organization';\n    }\n    get monitorUsageAccountId() {\n      return this.detailsResult?.subscription?.account?.id;\n    }\n    get monitorUsageOrgId() {\n      const orgId = this.args.thisOrgOnly;\n      return orgId && orgId !== true && orgId !== 'true' ? orgId : null;\n    }\n    get monitorUsagePeriodIds() {\n      return this.args.selectedPeriodId ? [this.args.selectedPeriodId] : [];\n    }\n    async requestDetails() {\n      this.isLoaded = false;\n      let detailsResult = await this.api.billing.getSubscriptionPeriod(this.args.selectedPeriodId);\n      this.detailsResult = detailsResult;\n      this.isLoaded = true;\n    }\n    didInsert() {\n      let self = this;\n      $('#historyUsageModal').on('hidden.bs.modal', function () {\n        self.args.onClose();\n      });\n      $('#historyUsageModal').modal('show');\n      $('#historyUsageModal').on('shown.bs.modal', function () {\n        self.requestDetails();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"detailsResult\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UsageModalComponent);\n});","define(\"@testable/shared-ui/components/account/billing/subscriptions-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _service, _tracking, _dataGrid, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionsGrid = _exports.default = (_class = class SubscriptionsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"addonsOptions\", _descriptor2, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.updateDataSource();\n    }\n    getColumns() {\n      const columns = [{\n        title: '',\n        data: 'id',\n        width: '40px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            if (!(full.effectiveDate && moment(full.effectiveDate) > new Date())) {\n              let output = \" <a href='javascript:;' data-ember-action='goToDetails' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                id: full.id\n              }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n              if (full?.planProduct?.id && full.planProduct.frequency !== 'OneTime' && !this.args.isLocked) {\n                const addon = this.api.billing.getPurchasedAddonFromPlans(this.addonsOptions, full);\n                if (addon) {\n                  output += \" <a href='javascript:;' data-ember-action='updatedAddon' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                    id: full.id\n                  }) + \"' class='m-l-5'>\" + '<i class=\"fa fa-edit\"></i></a> ';\n                  if (!full.terminationDate) {\n                    output += \" <a href='javascript:;' data-ember-action='terminateAddon' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                      id: full.id\n                    }) + \"' class='m-l-5'>\" + '<i class=\"fa fa-trash\"></i></a> ';\n                  }\n                }\n              }\n              return output;\n            }\n          }\n          return '';\n        }\n      }, {\n        title: 'Product',\n        data: 'productDescription',\n        width: '160px',\n        render: (data, type, full) => {\n          if (type === 'display') {\n            if (!full.productDescription) {\n              return full.planProduct.product.description;\n            } else {\n              let result = \" <a href='javascript:;' data-ember-action='goToDetails' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                id: full.id\n              }) + \"'>\" + data + '</a> ';\n              if (full.hasChanges) {\n                result += ' *';\n              }\n              return result;\n            }\n          }\n          return data || full.planProduct.product.description;\n        }\n      }, {\n        title: 'Usage',\n        data: 'id',\n        width: '120px',\n        render: (data, type, full) => {\n          let content = this.api.billing.getSubscriptionUsageInfo(full, this.args.organizationType === 'org', type !== 'display');\n          content = \"<span>\" + content + '</span>';\n          if (type === 'display') {\n            if (this.args.organizationType !== 'org' && !content.includes('No usage')) {\n              content += \" <a href='javascript:;' data-ember-action='showUsageModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                id: full.currentPeriod?.id\n              }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n            }\n            content = \"<span class='d-flex justify-content-between'>\" + content + '</span>';\n          }\n          return content;\n        }\n      }, {\n        title: 'Plan <i class=\"fa fa-info-circle\" ' + 'data-bs-toggle=\"tooltip\" ' + 'data-bs-title=\"The plan that provides you with this product. If a product comes from a plan you can only modify/cancel it via the plan. If this is an add-on this column simply shows the price\"></i>',\n        data: 'id',\n        width: '150px',\n        render: (data, type, full) => {\n          if (type === 'display' && this.args.organizationMode) {\n            let result;\n            if (full.planProduct.included) {\n              if (full.srcAccountPlan?.plan?.displayName) {\n                result = \" <a href='javascript:;' data-ember-action='goToPlan' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n                  id: full.srcAccountPlan.id\n                }) + \"'>\" + full.srcAccountPlan.plan.displayName + '</a> ';\n              } else {\n                result = '-';\n              }\n            } else {\n              if (full.currentPeriod?.invoiceItem?.amount) {\n                result = this.api.billing.getPlanColumn(full);\n              } else {\n                result = 'Free';\n              }\n            }\n            return result;\n          } else {\n            return full.srcAccountPlan?.plan?.displayName || '-';\n          }\n        }\n      }, {\n        title: 'Limits',\n        data: 'id',\n        width: '250px',\n        render: (data, type, full, meta) => {\n          let content = '';\n          if (this.api.billing.getProductTypeFromSubscription(full) === 'Capacity') return '';\n          content = `<div class=\"input-group input-group-xs\">\n                          <div class=\"input-group-prepend\"><span class=\"input-group-text\">Per Usage</span></div>\n                          <input type=\"number\"\n                            class=\"form-control perUsageLimit\"\n                            ${this.args.organizationMode ? '' : 'disabled=\"disabled\"'}\n                            ${full.currentPeriod?.includedQty ? `max=\"${full.currentPeriod?.includedQty}\"` : ''}\n                            ${full.currentPeriod?.includedQty ? `data-max=\"${full.currentPeriod?.includedQty}\"` : ''}\n                            value=\"${full.perUsageLimit ?? ''}\"\n                            data-id=\"${full.id}\"\n                            />\n                          <div class=\"input-group-append\"><span class=\"input-group-text\">${full.planProduct.product.description}</span></div>\n                        </div>\n                        <div class=\"input-group input-group-xs m-t-5\">\n                          <div class=\"input-group-prepend\"><span class=\"input-group-text\">Alert</span></div>\n                          <input type=\"number\"\n                            class=\"form-control usageTimeAlertThreshold\"\n                            ${this.args.organizationMode ? '' : 'disabled=\"disabled\"'}\n                            ${full.currentPeriod?.includedQty ? `max=\"${full.currentPeriod?.includedQty}\"` : ''}\n                            ${full.currentPeriod?.includedQty ? `data-max=\"${full.currentPeriod?.includedQty}\"` : ''}\n                            value=\"${full.usageTimeAlertThreshold ?? ''}\"\n                            data-id=\"${full.id}\"\n                            />\n                          <div class=\"input-group-append\"><span class=\"input-group-text\">${full.planProduct.product.description}</span></div>\n                        </div>`;\n          if (this.api.billing.getProductTypeFromSubscription(full) === 'PayAsYouGo') {\n            content += `<div class=\"input-group input-group-xs m-t-5\">\n                          <div class=\"input-group-prepend\"><span class=\"input-group-text\">Total Usage</span></div>\n                          <input type=\"number\"\n                          class=\"form-control  totalLimit\"\n                          ${this.args.organizationMode ? '' : 'disabled=\"disabled\"'}\n                          value=\"${full.totalLimit ?? ''}\"\n                          data-id=\"${full.id}\"\n                          />\n                          <div class=\"input-group-append\"><span class=\"input-group-text\">${full.planProduct.product.description}</span></div>\n                          </div>`;\n          }\n          return content;\n        }\n      }, {\n        title: 'Stats',\n        data: 'id',\n        width: '200px',\n        render: (data, type, full) => {\n          if (!this.api.billing.hasUsageMetrics(full)) return '';\n          return this.api.billing.getUsageInfo(full);\n        }\n      }, {\n        title: 'Rollover  <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"If rollover is enabled, any unused product (up to the max) will be rolled over to the next billing period\"><i class=\"fa fa-info-circle\"></i></div>',\n        data: 'rollover',\n        width: '70px',\n        render: (data, type, full) => {\n          if (this.api.billing.getProductTypeFromSubscription(full) === 'Consumable') {\n            if (full.currentPeriod?.rollover) {\n              return `<i class=\"fa fa-check\"></i> (${this.api.billing.formatNum(full.currentPeriod.maxRollover)} ${full.planProduct.product.consumableUnits} max)`;\n            } else {\n              return `<i class=\"fa fa-times text-danger\"></i>`;\n            }\n          }\n          return '';\n        }\n      }];\n      return columns;\n    }\n    createDataSource() {\n      this.addonsOptions = this.api.billing.getAllPossibleAddons(this.args.purchasedPlans);\n      return this.args.data;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const data = this.args.data;\n      let toAdd = [];\n      _.forEach(data, history => {\n        if (!_.find(tableRows, row => row.id === history.id)) {\n          toAdd.push(history);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      let toRemove = [];\n      _.forEach(tableRows, history => {\n        if (!_.find(data, row => row.id === history.id)) {\n          toRemove.push(history);\n        }\n      });\n      if (toRemove.length > 0) {\n        _.forEach(toRemove, row => {\n          table.row($(`#${this.args.id} #${row.id}`)).remove();\n        });\n      }\n      table.draw(false);\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No plan details.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n      $('#' + this.args.id).on('change', 'input', function (e) {\n        const subscriptionId = $(e.target).data('id');\n        const value = $(e.target).val();\n        const classNames = $(e.target).attr('class').split(' ');\n        const maxvalue = $(e.target).data('max');\n        let type;\n        if (classNames.includes('perUsageLimit')) {\n          type = 'perUsageLimit';\n        }\n        if (classNames.includes('totalLimit')) {\n          type = 'totalLimit';\n        }\n        if (classNames.includes('usageTimeAlertThreshold')) {\n          type = 'usageTimeAlertThreshold';\n        }\n        if (value === 0) {\n          _lib.default.info('0 value is not allowed. To set the value to unlimited empty the field.');\n          $(e.target).focus();\n        } else if (maxvalue && value > maxvalue) {\n          _lib.default.info('Value should be less than or equal to ' + maxvalue);\n          $(e.target).focus();\n        } else {\n          _this.args.onInputChange(subscriptionId, type, value);\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"addonsOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/activity-entry\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <li class=\"left\">\n    <span class=\"date-time\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"{{@activityEntry.fullTimestamp}}\">\n      {{@activityEntry.readableTimestamp}}\n    </span>\n    <span class=\"name\">\n      <span class=\"label label-primary\">{{@activityEntry.type}}</span>\n      <span data-bs-toggle=\"tooltip\"\n            data-bs-placement=\"top\"\n            title=\"{{@activityEntry.nameTooltip}}\">{{@activityEntry.name}}</span>\n    </span>\n    <div class=\"{{if @activityEntry.important 'important-message'}} simple-message\">\n    {{#if (eq @activityEntry.eventType 'User2Organization')}}\n      {{@activityEntry.actionType}} <strong>{{@activityEntry.targetName}}</strong>\n      ({{@activityEntry.data.email}})\n      {{if (eq @activityEntry.actionType 'Removed') 'from' 'to'}} organization\n      <LinkTo @route=\"account.organization\" @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo>\n    {{else if (eq @activityEntry.eventType 'Organization')}}\n      {{@activityEntry.actionType}} organization details\n      (<strong><LinkTo @route='view' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo></strong>)\n    {{else if (eq @activityEntry.eventType 'SamlConfig')}}\n      {{@activityEntry.actionType}} SAML configuration\n      <strong>{{@activityEntry.targetName}}</strong>\n    {{else if (eq @activityEntry.eventType 'Application')}}\n      {{@activityEntry.actionType}} test case\n      <strong><LinkTo @route='view' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo></strong>\n    {{else if (eq @activityEntry.eventType 'LoadTest')}}\n      {{@activityEntry.actionType}} test configuration\n      <strong>\n        <LinkTo @route='view' @model={{@activityEntry.data.testCaseId}}>{{@activityEntry.data.testCaseName}}</LinkTo> -\n        <LinkTo @route='loadTest' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo>\n      </strong>\n    {{else if (eq @activityEntry.eventType 'LoadTestExecution')}}\n      {{#if (not (is-undefined @activityEntry.data.success))}}\n        {{html-safe (to-outcome-html @activityEntry.data.success)}}\n      {{/if}}\n      {{@activityEntry.actionType}}\n      <LinkTo @route='loadTestResults' @model={{@activityEntry.targetId}}>test execution</LinkTo> for\n      <strong>\n        <LinkTo @route='view' @model={{@activityEntry.data.testCaseId}}>{{@activityEntry.data.testCaseName}}</LinkTo> -\n        <LinkTo @route='loadTest' @model={{@activityEntry.data.configurationId}}>{{@activityEntry.data.configurationName}}</LinkTo>\n      </strong>.\n    {{else if (eq @activityEntry.eventType 'Script')}}\n      {{@activityEntry.actionType}} scenario\n      <strong>\n        <LinkTo @route='view' @model={{@activityEntry.data.testCaseId}}>{{@activityEntry.data.testCaseName}}</LinkTo> -\n        <LinkTo @route='scenario' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo>\n      </strong>\n    {{else if (eq @activityEntry.eventType 'Recording')}}\n      {{@activityEntry.actionType}} recording\n      <strong>\n        <LinkTo @route='view' @model={{@activityEntry.data.testCaseId}}>{{@activityEntry.data.testCaseName}}</LinkTo> -\n        <LinkTo @route='recording' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo>\n      </strong>\n    {{else if (eq @activityEntry.eventType 'DataStore')}}\n      {{@activityEntry.actionType}} file\n      <strong>\n        <LinkTo @route='file' @model={{@activityEntry.targetId}}>{{@activityEntry.targetName}}</LinkTo>\n      </strong> in scenario\n      <strong>\n        <LinkTo @route='view' @model={{@activityEntry.data.testCaseId}}>{{@activityEntry.data.testCaseName}}</LinkTo> -\n        <LinkTo @route='scenario' @model={{@activityEntry.data.scriptId}}>{{@activityEntry.data.scriptName}}</LinkTo>\n      </strong>\n    {{/if}}\n  </div>\n  </li>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"li\\\"],[14,0,\\\"left\\\"],[12],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"date-time\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[30,1,[\\\"fullTimestamp\\\"]]]]],[12],[1,\\\"\\\\n    \\\"],[1,[30,1,[\\\"readableTimestamp\\\"]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"name\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"label label-primary\\\"],[12],[1,[30,1,[\\\"type\\\"]]],[13],[1,\\\"\\\\n    \\\"],[10,1],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[30,1,[\\\"nameTooltip\\\"]]]]],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,1,[\\\"important\\\"]],\\\"important-message\\\"],\\\" simple-message\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"User2Organization\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"targetName\\\"]]],[13],[1,\\\"\\\\n    (\\\"],[1,[30,1,[\\\"data\\\",\\\"email\\\"]]],[1,\\\")\\\\n    \\\"],[1,[52,[28,[37,4],[[30,1,[\\\"actionType\\\"]],\\\"Removed\\\"],null],\\\"from\\\",\\\"to\\\"]],[1,\\\" organization\\\\n    \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.organization\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"Organization\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" organization details\\\\n    (\\\"],[10,\\\"strong\\\"],[12],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[13],[1,\\\")\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"SamlConfig\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" SAML configuration\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"targetName\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"Application\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" test case\\\\n    \\\"],[10,\\\"strong\\\"],[12],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"LoadTest\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" test configuration\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"data\\\",\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"testCaseName\\\"]]]],[]]]]],[1,\\\" -\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"LoadTestExecution\\\"],null],[[[41,[28,[37,7],[[28,[37,8],[[30,1,[\\\"data\\\",\\\"success\\\"]]],null]],null],[[[1,\\\"      \\\"],[1,[28,[35,9],[[28,[37,10],[[30,1,[\\\"data\\\",\\\"success\\\"]]],null]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\"\\\\n    \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"test execution\\\"]],[]]]]],[1,\\\" for\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"data\\\",\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"testCaseName\\\"]]]],[]]]]],[1,\\\" -\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,1,[\\\"data\\\",\\\"configurationId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"configurationName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\".\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"Script\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" scenario\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"data\\\",\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"testCaseName\\\"]]]],[]]]]],[1,\\\" -\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"Recording\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" recording\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"data\\\",\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"testCaseName\\\"]]]],[]]]]],[1,\\\" -\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"recording\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,4],[[30,1,[\\\"eventType\\\"]],\\\"DataStore\\\"],null],[[[1,\\\"    \\\"],[1,[30,1,[\\\"actionType\\\"]]],[1,\\\" file\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"file\\\",[30,1,[\\\"targetId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"targetName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\" in scenario\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"data\\\",\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"testCaseName\\\"]]]],[]]]]],[1,\\\" -\\\\n      \\\"],[8,[39,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario\\\",[30,1,[\\\"data\\\",\\\"scriptId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"data\\\",\\\"scriptName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@activityEntry\\\"],[\\\"li\\\",\\\"span\\\",\\\"div\\\",\\\"if\\\",\\\"eq\\\",\\\"strong\\\",\\\"link-to\\\",\\\"not\\\",\\\"is-undefined\\\",\\\"html-safe\\\",\\\"to-outcome-html\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/activity-entry.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"activity-entry\"));\n});","define(\"@testable/shared-ui/components/activity-history\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object/observers\", \"@ember/object\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _observers, _object, _tracking, _trackedBuiltIns, _environment, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object/observers\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <ul class=\"chats\">\n    {{#each this.activityEntries as |activityEntry|}}\n      <ActivityEntry @activityEntry={{activityEntry}} />\n    {{else if this.isLoading}}\n      Loading recent activity...\n    {{else}}\n      No recent activity yet!\n    {{/each}}\n    {{#unless this.isLoading}}\n      <li class=\"left\">\n        <button {{on \"click\" this.loadMore}} type=\"button\" disabled={{this.isLoadingMore}} class=\"btn btn-primary btn-xs\">\n          {{if this.isLoadingMore 'Loading More...' 'Load More'}}\n        </button>\n      </li>\n    {{/unless}}\n  </ul>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"ul\\\"],[14,0,\\\"chats\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"activityEntries\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[8,[39,3],null,[[\\\"@activityEntry\\\"],[[30,1]]],null],[1,\\\"\\\\n\\\"]],[1]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"    Loading recent activity...\\\\n\\\"]],[]],[[[1,\\\"    No recent activity yet!\\\\n  \\\"]],[]]]],[]]],[41,[51,[30,0,[\\\"isLoading\\\"]]],[[[1,\\\"    \\\"],[10,\\\"li\\\"],[14,0,\\\"left\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isLoadingMore\\\"]]],[24,0,\\\"btn btn-primary btn-xs\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"loadMore\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[1,[52,[30,0,[\\\"isLoadingMore\\\"]],\\\"Loading More...\\\",\\\"Load More\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"activityEntry\\\"],[\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"activity-entry\\\",\\\"if\\\",\\\"unless\\\",\\\"li\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/activity-history.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultLimit = 50;\n  const UpdateInterval = 30000;\n  const MaxEntries = 500;\n  let ActivityHistoryComponent = _exports.default = (_class = class ActivityHistoryComponent extends _component2.default {\n    // todo: check is it used or not.\n\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"org\", _environment.config.currentUser.org);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor, this);\n      _initializerDefineProperty(this, \"isLoadingMore\", _descriptor2, this);\n      _initializerDefineProperty(this, \"activityEntries\", _descriptor3, this);\n      _initializerDefineProperty(this, \"pendingLoad\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadEntriesRunning\", _descriptor5, this);\n      _initializerDefineProperty(this, \"intervalTimer\", _descriptor6, this);\n      this.loadEntriesRunning = true;\n      this.loadNewAuditEntries(true);\n      (0, _observers.addObserver)(this, 'args.testCaseId', this.onTestCaseChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.loadEntriesRunning = false;\n      clearTimeout(this.pendingLoad);\n      this.pendingLoad = null;\n      (0, _observers.removeObserver)(this, 'args.testCaseId', this.onTestCaseChange);\n    }\n    onTestCaseChange() {\n      clearTimeout(this.pendingLoad);\n      this.loadEntriesRunning = true;\n      this.loadNewAuditEntries(true);\n    }\n    loadMore() {\n      const testCaseId = this.args.testCaseId;\n      const scriptId = this.args.scriptId;\n      const testConfId = this.args.testConfId;\n      const entries = this.activityEntries;\n      const minId = entries && entries.length > 0 ? entries[entries.length - 1].auditEntry.id : undefined;\n      this.isLoadingMore = true;\n      let request;\n      if (testConfId) {\n        request = _server.default.getTestConfActivityUntil(testConfId, minId, DefaultLimit);\n      } else if (scriptId) {\n        request = _server.default.getScriptActivityUntil(scriptId, minId, DefaultLimit);\n      } else if (testCaseId) {\n        request = _server.default.getTestCaseActivityUntil(testCaseId, minId, DefaultLimit);\n      } else {\n        request = _server.default.getOrgActivityUntil(_environment.config.currentUser.orgId, minId, DefaultLimit);\n      }\n      request.then(results => {\n        this.activityEntries.push(...this.toEntries(results));\n        this.ensureSize();\n        this.isLoadingMore = false;\n      }, () => {\n        if (!this.isDestroyed) {\n          this.isLoading = false;\n        }\n      });\n    }\n    loadNewAuditEntries(isFirst) {\n      if (!this.isDestroyed && this.loadEntriesRunning) {\n        if (isFirst) {\n          this.isLoading = true;\n          this.activityEntries = new _trackedBuiltIns.TrackedArray();\n        }\n        const testCaseId = this.args.testCaseId;\n        const scriptId = this.args.scriptId;\n        const testConfId = this.args.testConfId;\n        const entries = this.activityEntries;\n        const maxId = entries && entries.length > 0 ? entries[0].auditEntry.id : undefined;\n        let request;\n        if (testConfId) {\n          request = _server.default.getTestConfActivitySince(testConfId, maxId, DefaultLimit);\n        } else if (scriptId) {\n          request = _server.default.getScriptActivitySince(scriptId, maxId, DefaultLimit);\n        } else if (testCaseId) {\n          request = _server.default.getTestCaseActivitySince(testCaseId, maxId, DefaultLimit);\n        } else {\n          request = _server.default.getOrgActivitySince(_environment.config.currentUser.orgId, maxId, DefaultLimit);\n        }\n        request.then(results => {\n          if (!this.isDestroyed && this.loadEntriesRunning) {\n            if (isFirst) {\n              this.isLoading = false;\n            }\n            if (results && results.length > 0) {\n              let entries = this.toEntries(results) || [];\n              this.activityEntries = new _trackedBuiltIns.TrackedArray(isFirst ? entries : _.concat(entries, this.activityEntries || []));\n              this.ensureSize();\n            } else if (isFirst) {\n              this.activityEntries = new _trackedBuiltIns.TrackedArray();\n            }\n            this.pendingLoad = setTimeout(() => this.loadNewAuditEntries(), UpdateInterval);\n          }\n        }, () => {\n          if (isFirst && !this.isDestroyed) {\n            this.isLoading = false;\n          }\n        });\n      }\n    }\n    ensureSize() {\n      let entries = this.activityEntries;\n      if (entries && entries.length > MaxEntries) {\n        this.activityEntries = new _trackedBuiltIns.TrackedArray(_.slice(entries, 0, MaxEntries));\n      }\n    }\n    toTypeAndName(auditEntry) {\n      if (auditEntry.user) {\n        return {\n          type: 'USER',\n          name: auditEntry.user.name,\n          nameTooltip: auditEntry.user.email\n        };\n      }\n      if (auditEntry.apiKey) {\n        return {\n          type: 'API',\n          name: auditEntry.apiKey.description ? auditEntry.apiKey.description + ' (' + auditEntry.apiKey.name.substring(0, 7) + '..)' : auditEntry.apiKey.name.substring(0, 7) + '..',\n          nameTooltip: auditEntry.apiKey.name\n        };\n      }\n      if (auditEntry.token) {\n        return {\n          type: 'TOKEN',\n          name: auditEntry.token.description ? auditEntry.token.description + ' (' + auditEntry.token.name + ')' : auditEntry.token.name\n        };\n      }\n      return {\n        type: 'SYSTEM',\n        name: ''\n      };\n    }\n    toActionType(auditEntry) {\n      switch (auditEntry.actionType) {\n        case 'Delete':\n          if (auditEntry.eventType === 'User2Organization') return 'Removed';\n          return 'Deleted';\n        case 'Insert':\n          if (auditEntry.eventType === 'User2Organization') return 'Added';\n          if (auditEntry.eventType === 'DataStore') return 'Uploaded';\n          return 'Created';\n        case 'Update':\n          return 'Updated';\n        case 'Start':\n          return 'Started';\n        case 'Stop':\n          return 'Stop requested on';\n        case 'Finish':\n          return 'Finished';\n        default:\n          return auditEntry.actionType;\n      }\n    }\n    toActivityEntry(auditEntry) {\n      let entry = this.toTypeAndName(auditEntry);\n      entry.auditEntry = auditEntry;\n      entry.fullTimestamp = moment(auditEntry.eventTimestamp).format('lll');\n      entry.readableTimestamp = moment(auditEntry.eventTimestamp).calendar();\n      entry.eventType = auditEntry.eventType;\n      entry.actionType = this.toActionType(auditEntry);\n      entry.targetId = auditEntry.targetId;\n      entry.targetName = auditEntry.targetName;\n      entry.data = auditEntry.data;\n      entry.important = auditEntry.eventType === 'LoadTestExecution';\n      return entry;\n    }\n    toEntries(results) {\n      return _.map(results, result => {\n        return this.toActivityEntry(result);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingMore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"activityEntries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"pendingLoad\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadEntriesRunning\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"intervalTimer\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadMore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMore\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ActivityHistoryComponent);\n});","define(\"@testable/shared-ui/components/activity-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"activityModal\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}} >\n    <div class=\"modal-dialog modal-lg\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            Audit Trail\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div>\n              <h5 class=\"m-b-40\">\n                {{#if @conf}}\n                  {{@testCase.name}} => {{@script.name}} <span class=\"text-muted\">running with</span> {{@conf.name}}\n                {{else if @script}}\n                  {{@testCase.name}} => {{@script.name}}\n                {{else if @testCase}}\n                  {{@testCase.name}}\n                {{else}}\n                  All Test Cases\n                {{/if}}\n              </h5>\n            </div>\n            <div style={{html-safe this.panelStyle}}>\n              <ActivityHistory @testCaseId={{@testCase.id}}\n                               @testConfId={{@conf.id}}\n                               @scriptId={{@script.id}} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"activityModal\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n          Audit Trail\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h5\\\"],[14,0,\\\"m-b-40\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"                \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\" => \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\" \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"running with\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3],[[[1,\\\"                \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\" => \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,2],[[[1,\\\"                \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                All Test Cases\\\\n              \\\"]],[]]]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,5,[28,[37,7],[[30,0,[\\\"panelStyle\\\"]]],null]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@testCaseId\\\",\\\"@testConfId\\\",\\\"@scriptId\\\"],[[30,2,[\\\"id\\\"]],[30,1,[\\\"id\\\"]],[30,3,[\\\"id\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@conf\\\",\\\"@testCase\\\",\\\"@script\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"h5\\\",\\\"if\\\",\\\"span\\\",\\\"html-safe\\\",\\\"activity-history\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/activity-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ActivityModalComponent = _exports.default = (_class = class ActivityModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"panelStyle\", 'height: 400px; overflow-y: auto;');\n    }\n    didInsert() {\n      $('#activityModal').on('hidden.bs.modal', () => {\n        this.args.modalClosed();\n      });\n      $('#activityModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ActivityModalComponent);\n});","define(\"@testable/shared-ui/components/add-credit-card-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"addCreditCardModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-medium-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            {{#if @card.id}}\n              Update {{@card.brand}} ending with {{@card.last4}}\n            {{else}}\n              Add Credit Card\n            {{/if}}\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <CreditCardForm\n                @card={{@card}}\n                @cardCreated={{@cardCreated}}\n                @cardUpdated={{@cardUpdated}}\n                @cardError={{@cardError}}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"addCreditCardModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-medium-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"id\\\"]],[[[1,\\\"            Update \\\"],[1,[30,1,[\\\"brand\\\"]]],[1,\\\" ending with \\\"],[1,[30,1,[\\\"last4\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            Add Credit Card\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],null,[[\\\"@card\\\",\\\"@cardCreated\\\",\\\"@cardUpdated\\\",\\\"@cardError\\\"],[[30,1],[30,2],[30,3],[30,4]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@card\\\",\\\"@cardCreated\\\",\\\"@cardUpdated\\\",\\\"@cardError\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"credit-card-form\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/add-credit-card-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AddCreditCardModalComponent = _exports.default = (_class = class AddCreditCardModalComponent extends _component2.default {\n    didInsert() {\n      $('#addCreditCardModal').on('hidden.bs.modal', () => {\n        this.args.modalClosed();\n      });\n      $('#addCreditCardModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AddCreditCardModalComponent);\n});","define(\"@testable/shared-ui/components/add-member-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _environment, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"addMemberModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n  {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Add Member</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <form id=\"addMemberForm\" {{on \"submit\" this.addMember}} data-parsley-trigger=\"focusout\">\n            <fieldset disabled={{this.submitInProgress}}>\n              <div class=\"form-group\">\n                <label>User Role</label>\n                <div>\n                  <BsButtonGroup @value={{this.userRole}} @type=\"radio\" @onChange={{fn (mut this.userRole)}} as |bg|>\n                    {{#each this.userRoles as |userRole|}}\n                      <bg.button @type=\"primary\" @value={{userRole}} @size=\"sm\">{{userRole}}</bg.button>\n                    {{/each}}\n                  </BsButtonGroup>\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label>Email <Ui::InfoIcon\n                        @content=\"Email of the user to add as a member to this organization.\" /></label>\n                <div>\n                  <Input @type=\"text\"\n                         class=\"form-control\"\n                         minlength=\"1\"\n                         maxlength=\"255\"\n                         @value={{this.email}}\n                         placeholder=\"Email Address\"\n                         data-parsley-type=\"email\"\n                         data-parsley-required=\"true\"\n                         data-parsley-required-message=\"Email address is required.\"\n                         {{on \"keyup\" this.onEmailChange}}\n                  />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label>Name\n                  <Ui::InfoIcon\n                          @content=\"Name of the user to invite. Will auto-populate if the user already has a Testable account and be read-only.\" />\n                </label>\n                <div>\n                  <Input @type=\"text\"\n                         class=\"form-control\"\n                         minlength=\"1\"\n                         maxlength=\"255\"\n                         disabled={{or this.userExists this.userLoading (not this.email)}}\n                         placeholder={{if\n                                          this.userLoading \"Loading user details...\"\n                                          (if this.email \"Please enter the user's full name\" \"Please enter an email first\")}}\n                         @value={{this.name}}\n                         data-parsley-required=\"true\"\n                         data-parsley-required-message=\"Name is required.\" />\n                </div>\n              </div>\n              {{#if (and (not this.userLoading) this.email this.isPaidPlan (not this.userExists))}}\n                <div class=\"form-group\">\n                  <label>{{if this.envConfig.isOnPrem 'Limit Tracking' 'Billing'}}\n                    <Ui::InfoIcon @isHtml={{true}}\n                              @content=\"Whether or not the new user will share this organization's plan and billing settings for tests <strong>created in their private organization</strong>. Tests created in this organization will always apply against the organizations plan.\" />\n                  </label>\n                  <div class=\"m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.linkPlans}} /> Link user's private organization to this one for\n                      {{if this.envConfig.isOnPrem 'limit tracking' 'billing'}}\n                    </label>\n                  </div>\n                </div>\n              {{/if}}\n            </fieldset>\n            <div class=\"form-group\">\n              <label></label>\n              <div>\n                <button disabled={{this.submitInProgress}} type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>\n                    {{if this.submitInProgress 'Processing...' 'Add Member'}}\n                  </strong></button>\n              </div>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"addMemberModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Add Member\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"form\\\"],[24,1,\\\"addMemberForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"addMember\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"User Role\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"userRole\\\"]],\\\"radio\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"userRole\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"userRoles\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",[30,2],\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,[30,2]]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"                \\\"]],[1]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Email \\\"],[8,[39,13],null,[[\\\"@content\\\"],[\\\"Email of the user to add as a member to this organization.\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,0],[12],[1,\\\"\\\\n                \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Email Address\\\"],[24,\\\"data-parsley-type\\\",\\\"email\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Email address is required.\\\"],[4,[38,5],[\\\"keyup\\\",[30,0,[\\\"onEmailChange\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"email\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Name\\\\n                \\\"],[8,[39,13],null,[[\\\"@content\\\"],[\\\"Name of the user to invite. Will auto-populate if the user already has a Testable account and be read-only.\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[12],[1,\\\"\\\\n                \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[16,\\\"disabled\\\",[28,[37,15],[[30,0,[\\\"userExists\\\"]],[30,0,[\\\"userLoading\\\"]],[28,[37,16],[[30,0,[\\\"email\\\"]]],null]],null]],[16,\\\"placeholder\\\",[52,[30,0,[\\\"userLoading\\\"]],\\\"Loading user details...\\\",[52,[30,0,[\\\"email\\\"]],\\\"Please enter the user's full name\\\",\\\"Please enter an email first\\\"]]],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Name is required.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[28,[37,16],[[30,0,[\\\"userLoading\\\"]]],null],[30,0,[\\\"email\\\"]],[30,0,[\\\"isPaidPlan\\\"]],[28,[37,16],[[30,0,[\\\"userExists\\\"]]],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,[52,[30,0,[\\\"envConfig\\\",\\\"isOnPrem\\\"]],\\\"Limit Tracking\\\",\\\"Billing\\\"]],[1,\\\"\\\\n                  \\\"],[8,[39,13],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Whether or not the new user will share this organization's plan and billing settings for tests <strong>created in their private organization</strong>. Tests created in this organization will always apply against the organizations plan.\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,14],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"linkPlans\\\"]]]],null],[1,\\\" Link user's private organization to this one for\\\\n                    \\\"],[1,[52,[30,0,[\\\"envConfig\\\",\\\"isOnPrem\\\"]],\\\"limit tracking\\\",\\\"billing\\\"]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[52,[30,0,[\\\"submitInProgress\\\"]],\\\"Processing...\\\",\\\"Add Member\\\"]],[1,\\\"\\\\n                \\\"],[13],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"userRole\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"fieldset\\\",\\\"label\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"each\\\",\\\"-track-array\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"or\\\",\\\"not\\\",\\\"if\\\",\\\"and\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/add-member-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AddMemberModalComponent = _exports.default = (_class = class AddMemberModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor2, this);\n      _initializerDefineProperty(this, \"email\", _descriptor3, this);\n      _initializerDefineProperty(this, \"name\", _descriptor4, this);\n      _initializerDefineProperty(this, \"linkPlans\", _descriptor5, this);\n      _initializerDefineProperty(this, \"submitInProgress\", _descriptor6, this);\n      _initializerDefineProperty(this, \"userRole\", _descriptor7, this);\n      _initializerDefineProperty(this, \"pendingExistsCheck\", _descriptor8, this);\n      _initializerDefineProperty(this, \"userLoading\", _descriptor9, this);\n      _initializerDefineProperty(this, \"userExists\", _descriptor0, this);\n      _defineProperty(this, \"userRoles\", _lib.default.userRoles());\n    }\n    get isPaidPlan() {\n      return _environment.config.currentUser?.isPaid;\n    }\n    onEmailChange() {\n      this.userLoading = true;\n      clearTimeout(this.pendingExistsCheck);\n      if (!this.email) return;\n      this.pendingExistsCheck = setTimeout(async () => {\n        try {\n          const user = await this.api.users.userLookup(this.email);\n          this.userExists = true;\n          this.name = user.name;\n          this.userLoading = false;\n        } catch {\n          this.userExists = false;\n          this.name = '';\n          this.userLoading = false;\n          this.linkPlans = this.envConfig.isPaid;\n        }\n      }, 1000);\n    }\n    addMember(e) {\n      e.preventDefault();\n      if (!$('#addMemberForm').parsley().validate()) return;\n      let org = this.args.org;\n      this.submitInProgress = true;\n      _server.default.addUserToOrg(org.id, this.email, this.name, this.userRole, this.linkPlans).then(userOrg => {\n        $('#addMemberModal').modal('hide');\n        this.args.memberAdded(userOrg);\n        this.submitInProgress = false;\n      }, () => {\n        this.submitInProgress = false;\n      });\n    }\n    didInsert() {\n      const _this = this;\n      $('#addMemberForm').parsley();\n      $('#addMemberModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#addMemberModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"email\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"linkPlans\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"submitInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"userRole\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Admin';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"pendingExistsCheck\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"userLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"userExists\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onEmailChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onEmailChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addMember\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addMember\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AddMemberModalComponent);\n});","define(\"@testable/shared-ui/components/agents-map\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/object/observers\", \"@glimmer/tracking\", \"@ember/service\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/map\", \"@amcharts/amcharts5-geodata/worldLow\", \"@amcharts/amcharts5/themes/Animated\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/amcharts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _observers, _tracking, _service, am5, am5map, _worldLow, _Animated, _lib, _loadTest, _amcharts2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/map\",0,\"@amcharts/amcharts5-geodata/worldLow\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @comparisonId}}\n    <div class=\"mb-2 mt-2 heading\"><strong>{{@title}}</strong></div>\n  {{/if}}\n  \n  <div class=\"bg-white\" id={{@id}} {{did-insert this.didInsert}}>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-2 mt-2 heading\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,2]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[11,0],[24,0,\\\"bg-white\\\"],[16,1,[30,3]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@comparisonId\\\",\\\"@title\\\",\\\"@id\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"did-insert\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/agents-map.hbs\",\n    \"isStrictMode\": false\n  });\n  const minBulletSize = 5;\n  const maxBulletSize = 20;\n\n  // it's better to use circle square to show difference between values, not a radius\n  const maxSquare = maxBulletSize * maxBulletSize * 2 * Math.PI;\n  const minSquare = minBulletSize * minBulletSize * 2 * Math.PI;\n  let AgentsMapComponent = _exports.default = (_class = class AgentsMapComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"map\", _descriptor2, this);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor3, this);\n      this.EventBus.subscribe(\"map.data.update\", this, 'onDataUpdated');\n      this.EventBus.subscribe(\"map.invalidate\", this, 'onInvalidate');\n      (0, _observers.addObserver)(this, 'args.data', this.refresh);\n    }\n    willDestroy() {\n      super.willDestroy();\n      (0, _observers.removeObserver)(this, 'args.data', this.refresh);\n    }\n    get concurrentClientText() {\n      return _loadTest.default.isMultiUser(this.args.scriptType) ? this.args.scriptType + ' instance' : 'concurrent user';\n    }\n    refresh() {\n      if (this.chartRoot && this.map) {\n        if (this.map.series?.values?.length > 0) {\n          this.map.series.values.forEach(s => {\n            if (s instanceof am5map.MapPointSeries) {\n              let points = [];\n              const mapPoints = this.getMapDataProvider(this.getDataSource(this.args.data));\n              for (let i = 0; i < mapPoints.length; i++) {\n                let chart = mapPoints[i];\n                points.push({\n                  geometry: {\n                    type: \"Point\",\n                    coordinates: [chart.longitude, chart.latitude]\n                  },\n                  data: chart\n                });\n              }\n              s.data.setAll(points);\n            }\n          });\n        }\n      }\n    }\n    onDataUpdated() {\n      this.refresh();\n    }\n    onInvalidate() {}\n    getDataSource(model) {\n      return model;\n    }\n    makeMap(id) {\n      _amcharts2.default.initLicense();\n      const self = this;\n      let root = am5.Root.new(id);\n      root.setThemes([_Animated.default.new(root)]);\n      this.chartRoot = root;\n      let mapChart = root.container.children.push(am5map.MapChart.new(root, {}));\n      mapChart.series.push(am5map.MapPolygonSeries.new(root, {\n        geoJSON: _worldLow.default,\n        exclude: [\"AQ\"],\n        fill: '#e5e5e5'\n      }));\n      let pointSeries = mapChart.series.push(am5map.MapPointSeries.new(root, {}));\n      pointSeries.bullets.push(function (root, series, x) {\n        let chartData = x.dataContext.data;\n        return am5.Bullet.new(root, {\n          sprite: am5.Circle.new(root, {\n            radius: chartData.radius,\n            fill: chartData.color,\n            stroke: chartData.color,\n            tooltipText: self.builtTooltip(chartData)\n          })\n        });\n      });\n\n      // set tooltip\n      let tooltip = am5.Tooltip.new(root, {\n        getFillFromSprite: false,\n        getStrokeFromSprite: true,\n        autoTextColor: true,\n        pointerOrientation: \"vertical\"\n      });\n      tooltip.get(\"background\").setAll({\n        fill: am5.color(0xffffff)\n      });\n      tooltip.label.adapters.add(\"text\", function (text, target) {\n        return text;\n      });\n      pointSeries.set(\"tooltip\", tooltip);\n      const mapPoints = this.getMapDataProvider(this.getDataSource(this.args.data));\n\n      // push bullets\n      for (let i = 0; i < mapPoints.length; i++) {\n        let chart = mapPoints[i];\n        pointSeries.data.push({\n          geometry: {\n            type: \"Point\",\n            coordinates: [chart.longitude, chart.latitude]\n          },\n          data: chart\n        });\n      }\n      mapChart.set(\"zoomControl\", am5map.ZoomControl.new(root, {}));\n      let button = root.container.children.push(am5.Button.new(root, {\n        dx: 10,\n        dy: 10,\n        label: am5.Label.new(root, {\n          text: \"🏠\",\n          fontSize: 15,\n          paddingTop: 2,\n          paddingRight: 4,\n          paddingBottom: 2,\n          paddingLeft: 4\n        })\n      }));\n      button.get(\"background\").setAll({\n        cornerRadiusTL: 5,\n        cornerRadiusTR: 5,\n        cornerRadiusBR: 5,\n        cornerRadiusBL: 5,\n        fill: am5.color(0x000000),\n        fillOpacity: 0.1\n      });\n      button.events.on(\"click\", function (ev) {\n        mapChart.goHome();\n      });\n      _amcharts2.default.addExportOptions(root);\n      return mapChart;\n    }\n\n    /**\n     * Build Tooltip\n     * @param mapObject\n     * @returns {string}\n     */\n    builtTooltip(mapObject) {\n      let isLoad = this.args.isLoad;\n      let concurrentClientText = this.concurrentClientText;\n      let answer = \"[bold fontSize:14px]\" + mapObject.header + \"[/]\\n\";\n      if (isLoad) {\n        answer += \"[bold fontSize:12px]Scenario Iterations:[/] [fontSize:12px]\" + mapObject.iterationsText + \"[/]\\n\";\n      }\n      if (mapObject.summary && mapObject.summary.memory) {\n        answer += \"[bold fontSize:12px]Memory (Peak):[/] [fontSize:12px]\" + _lib.default.printBytes(mapObject.summary.memory) + \" (\" + _lib.default.printBytes(mapObject.summary.memory / mapObject.summary.concurrentClients) + \" per \" + concurrentClientText + \")[/]\\n\";\n      }\n      if (mapObject.summary && mapObject.summary.cpu) {\n        let cpu = Math.round(100 * mapObject.summary.cpu) / 100;\n        let cpuPerCc = Math.round(100 * mapObject.summary.cpu / mapObject.summary.concurrentClients) / 100;\n        answer += \"[bold fontSize:12px]vCPU (Peak):[/] [fontSize:12px]\" + _lib.default.printNumber(cpu) + \" (\" + cpuPerCc + \" per \" + concurrentClientText + \")[/]\";\n      }\n      return answer;\n    }\n\n    /**\n     * Get Map Data\n     * @param regions\n     * @returns {*[]}\n     */\n    getMapDataProvider(regions) {\n      let isLoad = this.args.isLoad;\n      let dataProvider = [];\n      let min = 1;\n      let max = _.isUndefined(regions) || regions.length === 0 || _.isUndefined(regions[0].expected) ? 0 : regions[0].expected;\n      for (let i = 0; i < regions.length; i++) {\n        let dataItem = regions[i];\n        let value = dataItem.value;\n        let square;\n        if (isLoad) {\n          // calculate size of a bubble\n          square = max === 0 ? maxSquare : (value - min) / Math.max(value - min, max - min, 1) * (maxSquare - minSquare) + minSquare;\n          if (square < minSquare) {\n            square = minSquare;\n          }\n        } else {\n          square = (maxSquare - minSquare) * 2;\n        }\n        let radius = Math.sqrt(square / (Math.PI * 2));\n        dataProvider.push({\n          radius,\n          color: '#a7a737',\n          value,\n          longitude: dataItem.longitude,\n          latitude: dataItem.latitude,\n          header: (dataItem.description || dataItem.region) + (_.isString(dataItem.region) ? ' (' + dataItem.region + ')' : ''),\n          iterationsText: value + (_.isUndefined(dataItem.expected) ? '' : '/' + dataItem.expected),\n          summary: dataItem.summary\n        });\n      }\n      return dataProvider;\n    }\n    willDestroyElement() {\n      this.EventBus.unsubscribe('map.data.update', this, 'onDataUpdated');\n      this.EventBus.unsubscribe('map.invalidate', this, 'onInvalidate');\n      if (_.isObject(this.map)) {\n        this.map.dispose();\n        this.map = null;\n      }\n    }\n    didInsert() {\n      this.map = this.makeMap(this.args.id);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"map\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AgentsMapComponent);\n});","define(\"@testable/shared-ui/components/ai-agents-page\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"streaming-markdown\", \"@testable/shared-ui/helpers/render-markdown\", \"@testable/shared-ui/utils/mcp-server-url\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _runloop, _lib, _environment, _server, smd, renderMD, _mcpServerUrl, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"streaming-markdown\",0,\"@testable/shared-ui/helpers/render-markdown\",0,\"@testable/shared-ui/utils/mcp-server-url\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ai-agents-container {{if @sidebar 'sidebar-mode'}}\">\n    <div class=\"agent-panel-wrapper\">\n      <div class=\"agent-chat-panel\">\n        {{#if this.showConversationHeader}}\n          <div class=\"conversation-header\">\n            <div class=\"d-flex align-items-center justify-content-between\">\n              <h5>{{or this.aiAgent.conversationTitle \"New Conversation\"}}</h5>\n            </div>\n            <div class=\"conversation-meta\">\n              {{#if this.aiAgent.browserSessions.length}}\n                <button type=\"button\" class=\"btn btn-link browser-sessions-badge\" {{on \"click\" this.openBrowserSessions}}>\n                  <span>{{this.aiAgent.browserSessions.length}}</span>\n                  <Ui::Icon @icon=\"fa fa-globe\" />\n                </button>\n              {{/if}}\n              {{#if this.aiAgent.attachments.length}}\n                <button type=\"button\" class=\"btn btn-link attachments-badge\" {{on \"click\" this.openAttachments}}>\n                  <span>{{this.aiAgent.attachments.length}}</span>\n                  <Ui::Icon @icon=\"fa fa-paperclip\" />\n                </button>\n              {{/if}}\n              {{#if this.aiAgent.conversationMeta}}\n                <span class=\"cursor-pointer\" data-bs-toggle=\"tooltip\" data-bs-placement=\"bottom\" data-bs-original-title={{this.aiAgent.conversationMeta.absoluteTime}}>{{this.aiAgent.conversationMeta.elapsed}}</span>\n                {{#if this.aiAgent.conversationMeta.model}}\n                  <span>{{this.aiAgent.conversationMeta.model}}</span>\n                {{/if}}\n              {{/if}}\n              {{#if this.aiAgent.costDisplay}}\n                <span class=\"cost-display cursor-pointer\" data-bs-toggle=\"tooltip\" data-bs-placement=\"bottom\" data-bs-html=\"true\" data-bs-original-title={{this.aiAgent.costDisplay.tooltipHtml}}>\n                  ${{this.aiAgent.costDisplay.cost}}\n                </span>\n              {{/if}}\n              {{#if this.aiAgent.contextUsage}}\n                <span class=\"context-progress-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"bottom\" data-bs-original-title={{this.aiAgent.contextUsage.tooltip}}>\n                  <svg width=\"18\" height=\"18\" viewBox=\"0 0 36 36\">\n                    <circle cx=\"18\" cy=\"18\" r=\"15.9155\" fill=\"none\" stroke=\"#e9ecef\" stroke-width=\"3.5\" />\n                    <circle cx=\"18\" cy=\"18\" r=\"15.9155\" fill=\"none\" stroke=\"#4a9eff\" stroke-width=\"3.5\"\n                      stroke-dasharray=\"100\" stroke-dashoffset={{this.aiAgent.contextUsage.dashOffset}}\n                      stroke-linecap=\"round\" />\n                  </svg>\n                </span>\n              {{/if}}\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if this.isEmailConfirmationRequired}}\n          <div class=\"alert alert-warning mx-3 mb-0 mt-2 py-2\">\n            You must confirm your email address before starting an AI conversation.\n            If you haven't received the confirmation email,\n            <a href=\"javascript:;\" role=\"button\" {{on \"click\" this.sendEmailConfirmation}}>resend the confirmation email</a>.\n          </div>\n        {{/if}}\n  \n        {{#if this.hasNoAiCredits}}\n          <div class=\"alert alert-warning mx-3 mb-0 mt-2 py-2\">\n            Your plan does not include any AI credits. Please <LinkTo @route=\"account.billing.subscription\">upgrade your plan</LinkTo> to get access to this feature.\n          </div>\n        {{else if this.aiCreditsExhausted}}\n          <div class=\"alert alert-warning mx-3 mb-0 mt-2 py-2\">\n            Your account has run out of AI credits during the current billing period. Consider <LinkTo @route=\"account.billing.subscription\">purchasing additional credits as an add-on or an additional plan</LinkTo> to continue.\n          </div>\n        {{/if}}\n  \n        {{#if this.aiAgent.errorMessage}}\n          <div class=\"alert alert-danger mx-3 mb-0 mt-2 py-2\">{{this.aiAgent.errorMessage}}</div>\n        {{/if}}\n  \n        <div class=\"agent-chat-area\"\n          {{on \"scroll\" this.onChatScroll}}\n          {{did-insert this.setChatAreaRef}}\n          {{did-update this.scrollToBottom this.aiAgent.historyLoaded}}\n        >\n          {{#if this.aiAgent.authError}}\n            <div class=\"alert alert-danger py-2\">{{this.aiAgent.authError}}</div>\n          {{/if}}\n  \n          {{#if (and this.showWelcomePrompt (not this.hasNoAiCredits) (not this.isEmailConfirmationRequired))}}\n            <div class=\"welcome-prompt\">\n              <p class=\"welcome-intro\">{{this.welcomeParts.intro}}</p>\n              <div class=\"welcome-grid\">\n                {{#each this.welcomeParts.bullets as |bullet|}}\n                  <button type=\"button\" class=\"welcome-card\" {{on \"click\" (fn this.submitPromptSuggestion bullet.text)}}>\n                    {{render-markdown bullet.markdown}}\n                  </button>\n                {{/each}}\n              </div>\n            </div>\n          {{/if}}\n  \n          {{#if this.isInitialHistoryLoad}}\n            <div class=\"chat-loading-overlay\">\n              <Ui::Icon @icon=\"fa-spinner fa-spin fa-2x\" />\n              <div class=\"mt-2\">Loading…</div>\n            </div>\n          {{else if this.aiAgent.isLoadingHistory}}\n            <div class=\"text-center p-2 h-40px\">\n              <Ui::Icon @icon=\"fa-spinner fa-spin\" /> <span class=\"text-muted small\">Loading…</span>\n            </div>\n          {{else if this.aiAgent.hasMoreHistory}}\n            <div class=\"text-center p-2 h-40px\">\n              <button type=\"button\" class=\"btn btn-link btn-sm text-muted\" {{on \"click\" this.loadMoreHistory}}>Load older messages</button>\n            </div>\n          {{/if}}\n  \n          {{#each this.visibleMessages as |item|}}\n            <AiAgents::ChatHistoryItem\n              @item={{item}}\n              @onAction={{this.adjustSpacerAndScroll}}\n              @onToggleWorkCycle={{this.toggleWorkCycle}}\n            />\n          {{/each}}\n  \n          {{#each this.aiAgent.toolCallsList key=\"callId\" as |tool|}}\n            <AiAgents::ToolCallPanel @tool={{tool}} @onAction={{this.adjustSpacerAndScroll}} />\n          {{/each}}\n  \n          {{#if this.aiAgent.currentReasoningSummaryText}}\n            <div class=\"reasoning-summary-message\">\n              <div class=\"reasoning-summary-title\">Thought</div>\n              <div class=\"reasoning-summary-text\">{{render-markdown this.aiAgent.currentReasoningSummaryText}}</div>\n            </div>\n          {{/if}}\n  \n          {{#if this.aiAgent.currentResponseText}}\n            <div class=\"assistant-message\">\n              <div class=\"message-text\"\n                {{did-insert this.initStreamingMarkdown}}\n                {{did-update this.updateStreamingMarkdown this.aiAgent.currentResponseText this.aiAgent.isStreaming}}\n              ></div>\n            </div>\n          {{/if}}\n  \n          {{#if this.showThinkingIndicator}}\n            <div class=\"streaming-indicator\">\n              <Ui::Icon @icon=\"fa-spinner fa-spin\" /> Thinking...\n            </div>\n          {{/if}}\n  \n          <div class=\"chat-scroll-spacer\" {{did-insert this.setSpacerRef}}></div>\n        </div>\n      </div>\n  \n      {{#if this.aiAgent.queueCancelledNotice}}\n        <div class=\"agent-queue-notice\">{{this.aiAgent.queueCancelledNotice}}</div>\n      {{else if this.aiAgent.isReplyQueued}}\n        <div class=\"agent-queue-notice\">Your reply is queued — waiting for current response to finish</div>\n      {{else if this.aiAgent.replyQueue.length}}\n        <div class=\"agent-queue-notice\">A reply is queued from another participant</div>\n      {{/if}}\n  \n      {{!-- Chat Box --}}\n      <div class=\"agent-input-panel {{if this.isInputDisabled 'disabled'}}\">\n        <label class=\"visually-hidden\" for=\"agent-message-input\">Message input</label>\n        <textarea\n          id=\"agent-message-input\"\n          class=\"form-control {{if this.isInputDisabled 'bg-light'}}\"\n          placeholder={{if this.aiAgent.isReadOnly \"View only — write access required to send messages\" \"Enter what you want the agent to do here...\"}}\n          value={{this.messageInput}}\n          disabled={{this.isInputDisabled}}\n          {{on \"input\" this.onMessageInput}}\n          {{on \"keydown\" this.onMessageKeydown}}\n          {{did-insert this.setTextareaRef}}\n          {{did-update this.onStreamingChange this.aiAgent.isStreaming}}\n        ></textarea>\n        <div class=\"agent-input-controls\">\n          <Ui::PSelect\n            @options={{this.aiAgent.modelOptions}}\n            @selected={{this.aiAgent.selectedModel}}\n            @onChange={{this.onModelChange}}\n            @searchEnabled={{false}}\n            @placeholder=\"Auto\"\n            @disabled={{this.isInputDisabled}}\n            @verticalPosition=\"above\"\n            class=\"flex-grow-1 agent-model-select\"\n            as |option|\n          >\n            <div class=\"ps-2 li-tooltip w-100\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" title={{this.getModelTooltip option}}>{{option.description}}</div>\n          </Ui::PSelect>\n  \n          <Ui::PSelect\n            @options={{this.aiAgent.regions}}\n            @selected={{this.aiAgent.selectedRegion}}\n            @onChange={{this.onRegionChange}}\n            @searchEnabled={{false}}\n            @placeholder=\"Region\"\n            @disabled={{this.isInputDisabled}}\n            @verticalPosition=\"above\"\n            class=\"flex-grow-1\"\n            as |group|\n          >\n            {{#if group.groupName}}\n              {{group.groupName}}\n            {{else}}\n              {{group.description}}\n            {{/if}}\n          </Ui::PSelect>\n  \n          <Ui::PSelect\n            @options={{this.aiAgent.modeOptions}}\n            @selected={{this.aiAgent.selectedMode}}\n            @onChange={{this.onModeChange}}\n            @searchEnabled={{false}}\n            @placeholder=\"Mode\"\n            @disabled={{this.isInputDisabled}}\n            @verticalPosition=\"above\"\n            class=\"flex-grow-1\"\n            as |option|\n          >\n            {{option.label}}\n          </Ui::PSelect>\n  \n  \n          <button type=\"button\" class=\"btn btn-link p-0\" title=\"Upload files\" disabled={{or this.isInputDisabled this.aiAgent.isReadOnly}} {{on \"click\" this.openActiveConversationUpload}}>\n            <Ui::Icon @icon=\"fa-md fa-paperclip\" />\n          </button>\n  \n          {{#if this.aiAgent.isStreaming}}\n            <button type=\"button\" class=\"btn btn-danger rounded-circle\" {{on \"click\" this.stopStreaming}}>\n              <Ui::Icon @icon=\"fa-stop\" />\n            </button>\n          {{else}}\n            <button type=\"button\" class=\"btn btn-primary rounded-circle\" disabled={{or this.isInputDisabled (not this.messageInput)}} {{on \"click\" this.sendMessage}}>\n              <Ui::Icon @icon=\"fa-arrow-up\" />\n            </button>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  \n    <div class=\"conversations-panel\">\n      <div class=\"conversations-mobile-toggle\">\n        <button type=\"button\" class=\"btn btn-link\" {{on \"click\" this.toggleMobileConversations}}>\n          <span class=\"text-truncate\">{{or this.aiAgent.conversationTitle \"New Conversation\"}}</span>\n          <Ui::Icon @icon=\"fa-caret-{{if this.mobileConversationsOpen 'up' 'down'}}\" />\n        </button>\n  \n        {{#if @sidebar}}\n          <div class=\"d-flex gap-2\">\n            <button type=\"button\" class=\"btn btn-link text-muted p-0\" {{on \"click\" this.expandToFullPage}} title=\"Open full page\">\n              <Ui::Icon @icon=\"fa-expand\" />\n            </button>\n            {{#if this.showCloseButton}}\n              <button type=\"button\" class=\"btn btn-link text-muted p-0\" {{on \"click\" this.closeSidebar}} title=\"Close\">\n                <Ui::Icon @icon=\"fa-times\" />\n              </button>\n            {{/if}}\n          </div>\n        {{/if}}\n      </div>\n  \n      <div class=\"conversations-panel-content {{if this.mobileConversationsOpen 'open'}}\">\n        <div class=\"d-flex gap-2\">\n          <button type=\"button\" class=\"btn btn-primary flex-grow-1\" disabled={{this.hasNoAiCredits}} {{on \"click\" this.createNewConversation}}>\n            + New Conversation\n          </button>\n          <button type=\"button\" class=\"btn btn-outline-secondary\" title=\"Settings\" {{on \"click\" this.toggleSettings}}>\n            <Ui::Icon @icon=\"fa-cog\" />\n          </button>\n        </div>\n  \n        <div class=\"conversations-list\">\n          {{#if this.aiAgent.isLoadingConversations}}\n            <div class=\"text-center p-3 text-muted\">\n              <Ui::Icon @icon=\"fa-spinner fa-spin\" /> Loading...\n            </div>\n          {{else if this.aiAgent.conversationsList.length}}\n            {{#each this.aiAgent.conversationsList as |conversation|}}\n              <div class=\"conversation-item {{if (eq this.aiAgent.activeConversationId conversation.id) 'active'}} {{if (eq this.deletingConversationId conversation.id) 'deleting'}}\">\n                {{#if (eq this.deletingConversationId conversation.id)}}\n                  <span class=\"conversation-title text-muted\">\n                    <Ui::Icon @icon=\"fa-spinner fa-spin\" /> Deleting...\n                  </span>\n                {{else if (eq this.editingConversationId conversation.id)}}\n                  <div class=\"conversation-edit-wrapper\">\n                    <label class=\"visually-hidden\" for=\"title-input-{{conversation.id}}\">Conversation title</label>\n                    <input\n                      id=\"title-input-{{conversation.id}}\"\n                      type=\"text\"\n                      class=\"form-control form-control-sm min-width-0\"\n                      value={{conversation.title}}\n                      disabled={{eq this.savingTitleConversationId conversation.id}}\n                      {{on \"blur\" this.cancelEdit}}\n                      {{on \"keydown\" (fn this.onTitleKeydown conversation)}}\n                      {{did-insert this.focusInput}}\n                    />\n                    {{#if (eq this.savingTitleConversationId conversation.id)}}\n                      <Ui::Icon @icon=\"fa-spinner fa-spin\" />\n                    {{/if}}\n                  </div>\n                {{else}}\n                  <span\n                    class=\"conversation-title\"\n                    role=\"button\"\n                    data-bs-toggle=\"tooltip\"\n                    data-bs-placement=\"left\"\n                    data-bs-original-title={{or conversation.title \"New Conversation\"}}\n                    {{on \"click\" (fn this.selectConversation conversation)}}\n                  >\n                    {{or conversation.title \"New Conversation\"}}\n                  </span>\n                  <div class=\"conversation-actions\">\n                    <button type=\"button\" class=\"btn btn-link p-0\" data-bs-toggle=\"dropdown\">\n                      <Ui::Icon @icon=\"fa-ellipsis-h\" />\n                    </button>\n                    <ul class=\"dropdown-menu dropdown-menu-end\">\n                      <li>\n                        <button type=\"button\" class=\"dropdown-item\" {{on \"click\" (fn this.renameConversation conversation)}}>\n                          <Ui::Icon @icon=\"fa-edit\" /> Rename\n                        </button>\n                      </li>\n                      <li>\n                        <button type=\"button\" class=\"dropdown-item text-danger\" {{on \"click\" (fn this.deleteConversation conversation)}}>\n                          <Ui::Icon @icon=\"fa-trash\" /> Delete\n                        </button>\n                      </li>\n                    </ul>\n                  </div>\n                {{/if}}\n              </div>\n            {{/each}}\n          {{else}}\n            <div class=\"text-center p-3 text-muted\">\n              No conversations yet\n            </div>\n          {{/if}}\n        </div>\n  \n        <div class=\"mcp-server-card\">\n          <div class=\"d-flex align-items-center justify-content-between mb-1\">\n            <span class=\"mcp-server-card-title\">\n              <Ui::Icon @icon=\"fa-plug\" />\n              MCP Server\n            </span>\n            <Ui::CopyText @target=\"#mcpUrlCopySourcePanel\" @title=\"Copy URL\" @trigger=\"click\" class=\"btn-sm\" />\n          </div>\n          <pre id=\"mcpUrlCopySourcePanel\" class=\"mcp-server-url\"><code>{{this.mcpServerUrl}}</code></pre>\n        </div>\n      </div>\n    </div>\n  \n    {{#if this.showSettingsModal}}\n      <AiAgents::SettingsModal\n        @onClose={{this.toggleSettings}}\n      />\n    {{/if}}\n  \n    {{#if this.showBrowserSessionsModal}}\n      <AiAgents::BrowserSessionsModal\n        @browserSessions={{this.aiAgent.browserSessions}}\n        @conversationId={{this.aiAgent.activeConversationId}}\n        @onClose={{this.closeBrowserSessions}}\n      />\n    {{/if}}\n  \n    {{#if this.showAttachmentsModal}}\n      <AiAgents::AttachmentsModal\n        @attachments={{this.aiAgent.attachments}}\n        @onClose={{this.closeAttachments}}\n      />\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"ai-agents-container \\\",[52,[30,1],\\\"sidebar-mode\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"agent-panel-wrapper\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"agent-chat-panel\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showConversationHeader\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"conversation-header\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h5\\\"],[12],[1,[28,[35,3],[[30,0,[\\\"aiAgent\\\",\\\"conversationTitle\\\"]],\\\"New Conversation\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"conversation-meta\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"browserSessions\\\",\\\"length\\\"]],[[[1,\\\"              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link browser-sessions-badge\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"openBrowserSessions\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[10,1],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"browserSessions\\\",\\\"length\\\"]]],[13],[1,\\\"\\\\n                \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-globe\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"aiAgent\\\",\\\"attachments\\\",\\\"length\\\"]],[[[1,\\\"              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link attachments-badge\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"openAttachments\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[10,1],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"attachments\\\",\\\"length\\\"]]],[13],[1,\\\"\\\\n                \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-paperclip\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"aiAgent\\\",\\\"conversationMeta\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"cursor-pointer\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[15,\\\"data-bs-original-title\\\",[30,0,[\\\"aiAgent\\\",\\\"conversationMeta\\\",\\\"absoluteTime\\\"]]],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"conversationMeta\\\",\\\"elapsed\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"conversationMeta\\\",\\\"model\\\"]],[[[1,\\\"                \\\"],[10,1],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"conversationMeta\\\",\\\"model\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[41,[30,0,[\\\"aiAgent\\\",\\\"costDisplay\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"cost-display cursor-pointer\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[14,\\\"data-bs-html\\\",\\\"true\\\"],[15,\\\"data-bs-original-title\\\",[30,0,[\\\"aiAgent\\\",\\\"costDisplay\\\",\\\"tooltipHtml\\\"]]],[12],[1,\\\"\\\\n                $\\\"],[1,[30,0,[\\\"aiAgent\\\",\\\"costDisplay\\\",\\\"cost\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"aiAgent\\\",\\\"contextUsage\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"context-progress-circle\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[15,\\\"data-bs-original-title\\\",[30,0,[\\\"aiAgent\\\",\\\"contextUsage\\\",\\\"tooltip\\\"]]],[12],[1,\\\"\\\\n                \\\"],[10,\\\"svg\\\"],[14,\\\"width\\\",\\\"18\\\"],[14,\\\"height\\\",\\\"18\\\"],[14,\\\"viewBox\\\",\\\"0 0 36 36\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"circle\\\"],[14,\\\"cx\\\",\\\"18\\\"],[14,\\\"cy\\\",\\\"18\\\"],[14,\\\"r\\\",\\\"15.9155\\\"],[14,\\\"fill\\\",\\\"none\\\"],[14,\\\"stroke\\\",\\\"#e9ecef\\\"],[14,\\\"stroke-width\\\",\\\"3.5\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"circle\\\"],[14,\\\"cx\\\",\\\"18\\\"],[14,\\\"cy\\\",\\\"18\\\"],[14,\\\"r\\\",\\\"15.9155\\\"],[14,\\\"fill\\\",\\\"none\\\"],[14,\\\"stroke\\\",\\\"#4a9eff\\\"],[14,\\\"stroke-width\\\",\\\"3.5\\\"],[14,\\\"stroke-dasharray\\\",\\\"100\\\"],[15,\\\"stroke-dashoffset\\\",[30,0,[\\\"aiAgent\\\",\\\"contextUsage\\\",\\\"dashOffset\\\"]]],[14,\\\"stroke-linecap\\\",\\\"round\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEmailConfirmationRequired\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-warning mx-3 mb-0 mt-2 py-2\\\"],[12],[1,\\\"\\\\n          You must confirm your email address before starting an AI conversation.\\\\n          If you haven't received the confirmation email,\\\\n          \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"sendEmailConfirmation\\\"]]],null],[12],[1,\\\"resend the confirmation email\\\"],[13],[1,\\\".\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasNoAiCredits\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-warning mx-3 mb-0 mt-2 py-2\\\"],[12],[1,\\\"\\\\n          Your plan does not include any AI credits. Please \\\"],[8,[39,11],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"upgrade your plan\\\"]],[]]]]],[1,\\\" to get access to this feature.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiCreditsExhausted\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-warning mx-3 mb-0 mt-2 py-2\\\"],[12],[1,\\\"\\\\n          Your account has run out of AI credits during the current billing period. Consider \\\"],[8,[39,11],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"purchasing additional credits as an add-on or an additional plan\\\"]],[]]]]],[1,\\\" to continue.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"errorMessage\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-danger mx-3 mb-0 mt-2 py-2\\\"],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"errorMessage\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[11,0],[24,0,\\\"agent-chat-area\\\"],[4,[38,5],[\\\"scroll\\\",[30,0,[\\\"onChatScroll\\\"]]],null],[4,[38,12],[[30,0,[\\\"setChatAreaRef\\\"]]],null],[4,[38,13],[[30,0,[\\\"scrollToBottom\\\"]],[30,0,[\\\"aiAgent\\\",\\\"historyLoaded\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"authError\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"alert alert-danger py-2\\\"],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"authError\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"showWelcomePrompt\\\"]],[28,[37,15],[[30,0,[\\\"hasNoAiCredits\\\"]]],null],[28,[37,15],[[30,0,[\\\"isEmailConfirmationRequired\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"welcome-prompt\\\"],[12],[1,\\\"\\\\n            \\\"],[10,2],[14,0,\\\"welcome-intro\\\"],[12],[1,[30,0,[\\\"welcomeParts\\\",\\\"intro\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"welcome-grid\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"welcomeParts\\\",\\\"bullets\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"welcome-card\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"submitPromptSuggestion\\\"]],[30,2,[\\\"text\\\"]]],null]],null],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,20],[[30,2,[\\\"markdown\\\"]]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isInitialHistoryLoad\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"chat-loading-overlay\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"mt-2\\\"],[12],[1,\\\"Loading…\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiAgent\\\",\\\"isLoadingHistory\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-center p-2 h-40px\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" \\\"],[10,1],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"Loading…\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiAgent\\\",\\\"hasMoreHistory\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-center p-2 h-40px\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link btn-sm text-muted\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"loadMoreHistory\\\"]]],null],[12],[1,\\\"Load older messages\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]],null]],[]]]],[]]],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"visibleMessages\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,21],null,[[\\\"@item\\\",\\\"@onAction\\\",\\\"@onToggleWorkCycle\\\"],[[30,3],[30,0,[\\\"adjustSpacerAndScroll\\\"]],[30,0,[\\\"toggleWorkCycle\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"aiAgent\\\",\\\"toolCallsList\\\"]]],null]],null],\\\"callId\\\",[[[1,\\\"          \\\"],[8,[39,22],null,[[\\\"@tool\\\",\\\"@onAction\\\"],[[30,4],[30,0,[\\\"adjustSpacerAndScroll\\\"]]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"currentReasoningSummaryText\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"reasoning-summary-message\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"reasoning-summary-title\\\"],[12],[1,\\\"Thought\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"reasoning-summary-text\\\"],[12],[1,[28,[35,20],[[30,0,[\\\"aiAgent\\\",\\\"currentReasoningSummaryText\\\"]]],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"currentResponseText\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"assistant-message\\\"],[12],[1,\\\"\\\\n            \\\"],[11,0],[24,0,\\\"message-text\\\"],[4,[38,12],[[30,0,[\\\"initStreamingMarkdown\\\"]]],null],[4,[38,13],[[30,0,[\\\"updateStreamingMarkdown\\\"]],[30,0,[\\\"aiAgent\\\",\\\"currentResponseText\\\"]],[30,0,[\\\"aiAgent\\\",\\\"isStreaming\\\"]]],null],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showThinkingIndicator\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"streaming-indicator\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" Thinking...\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[11,0],[24,0,\\\"chat-scroll-spacer\\\"],[4,[38,12],[[30,0,[\\\"setSpacerRef\\\"]]],null],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"queueCancelledNotice\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"agent-queue-notice\\\"],[12],[1,[30,0,[\\\"aiAgent\\\",\\\"queueCancelledNotice\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiAgent\\\",\\\"isReplyQueued\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"agent-queue-notice\\\"],[12],[1,\\\"Your reply is queued — waiting for current response to finish\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiAgent\\\",\\\"replyQueue\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"agent-queue-notice\\\"],[12],[1,\\\"A reply is queued from another participant\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]]],[]]],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[15,0,[29,[\\\"agent-input-panel \\\",[52,[30,0,[\\\"isInputDisabled\\\"]],\\\"disabled\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"visually-hidden\\\"],[14,\\\"for\\\",\\\"agent-message-input\\\"],[12],[1,\\\"Message input\\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"textarea\\\"],[24,1,\\\"agent-message-input\\\"],[16,0,[29,[\\\"form-control \\\",[52,[30,0,[\\\"isInputDisabled\\\"]],\\\"bg-light\\\"]]]],[16,\\\"placeholder\\\",[52,[30,0,[\\\"aiAgent\\\",\\\"isReadOnly\\\"]],\\\"View only — write access required to send messages\\\",\\\"Enter what you want the agent to do here...\\\"]],[16,2,[30,0,[\\\"messageInput\\\"]]],[16,\\\"disabled\\\",[30,0,[\\\"isInputDisabled\\\"]]],[4,[38,5],[\\\"input\\\",[30,0,[\\\"onMessageInput\\\"]]],null],[4,[38,5],[\\\"keydown\\\",[30,0,[\\\"onMessageKeydown\\\"]]],null],[4,[38,12],[[30,0,[\\\"setTextareaRef\\\"]]],null],[4,[38,13],[[30,0,[\\\"onStreamingChange\\\"]],[30,0,[\\\"aiAgent\\\",\\\"isStreaming\\\"]]],null],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"agent-input-controls\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,25],[[24,0,\\\"flex-grow-1 agent-model-select\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@verticalPosition\\\"],[[30,0,[\\\"aiAgent\\\",\\\"modelOptions\\\"]],[30,0,[\\\"aiAgent\\\",\\\"selectedModel\\\"]],[30,0,[\\\"onModelChange\\\"]],false,\\\"Auto\\\",[30,0,[\\\"isInputDisabled\\\"]],\\\"above\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ps-2 li-tooltip w-100\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"right\\\"],[15,\\\"title\\\",[28,[30,0,[\\\"getModelTooltip\\\"]],[[30,5]],null]],[12],[1,[30,5,[\\\"description\\\"]]],[13],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[39,25],[[24,0,\\\"flex-grow-1\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@verticalPosition\\\"],[[30,0,[\\\"aiAgent\\\",\\\"regions\\\"]],[30,0,[\\\"aiAgent\\\",\\\"selectedRegion\\\"]],[30,0,[\\\"onRegionChange\\\"]],false,\\\"Region\\\",[30,0,[\\\"isInputDisabled\\\"]],\\\"above\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,6,[\\\"groupName\\\"]],[[[1,\\\"            \\\"],[1,[30,6,[\\\"groupName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[1,[30,6,[\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[39,25],[[24,0,\\\"flex-grow-1\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@verticalPosition\\\"],[[30,0,[\\\"aiAgent\\\",\\\"modeOptions\\\"]],[30,0,[\\\"aiAgent\\\",\\\"selectedMode\\\"]],[30,0,[\\\"onModeChange\\\"]],false,\\\"Mode\\\",[30,0,[\\\"isInputDisabled\\\"]],\\\"above\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,7,[\\\"label\\\"]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link p-0\\\"],[24,\\\"title\\\",\\\"Upload files\\\"],[16,\\\"disabled\\\",[28,[37,3],[[30,0,[\\\"isInputDisabled\\\"]],[30,0,[\\\"aiAgent\\\",\\\"isReadOnly\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"openActiveConversationUpload\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-md fa-paperclip\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"isStreaming\\\"]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger rounded-circle\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"stopStreaming\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-stop\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary rounded-circle\\\"],[16,\\\"disabled\\\",[28,[37,3],[[30,0,[\\\"isInputDisabled\\\"]],[28,[37,15],[[30,0,[\\\"messageInput\\\"]]],null]],null]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"sendMessage\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-arrow-up\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"conversations-panel\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"conversations-mobile-toggle\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"toggleMobileConversations\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"text-truncate\\\"],[12],[1,[28,[35,3],[[30,0,[\\\"aiAgent\\\",\\\"conversationTitle\\\"]],\\\"New Conversation\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[[29,[\\\"fa-caret-\\\",[52,[30,0,[\\\"mobileConversationsOpen\\\"]],\\\"up\\\",\\\"down\\\"]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link text-muted p-0\\\"],[24,\\\"title\\\",\\\"Open full page\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"expandToFullPage\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-expand\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCloseButton\\\"]],[[[1,\\\"            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link text-muted p-0\\\"],[24,\\\"title\\\",\\\"Close\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"closeSidebar\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-times\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"conversations-panel-content \\\",[52,[30,0,[\\\"mobileConversationsOpen\\\"]],\\\"open\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary flex-grow-1\\\"],[16,\\\"disabled\\\",[30,0,[\\\"hasNoAiCredits\\\"]]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"createNewConversation\\\"]]],null],[12],[1,\\\"\\\\n          + New Conversation\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-secondary\\\"],[24,\\\"title\\\",\\\"Settings\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"toggleSettings\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-cog\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"conversations-list\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"aiAgent\\\",\\\"isLoadingConversations\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-center p-3 text-muted\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" Loading...\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"aiAgent\\\",\\\"conversationsList\\\",\\\"length\\\"]],[[[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"aiAgent\\\",\\\"conversationsList\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[15,0,[29,[\\\"conversation-item \\\",[52,[28,[37,26],[[30,0,[\\\"aiAgent\\\",\\\"activeConversationId\\\"]],[30,8,[\\\"id\\\"]]],null],\\\"active\\\"],\\\" \\\",[52,[28,[37,26],[[30,0,[\\\"deletingConversationId\\\"]],[30,8,[\\\"id\\\"]]],null],\\\"deleting\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,26],[[30,0,[\\\"deletingConversationId\\\"]],[30,8,[\\\"id\\\"]]],null],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"conversation-title text-muted\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" Deleting...\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,26],[[30,0,[\\\"editingConversationId\\\"]],[30,8,[\\\"id\\\"]]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"conversation-edit-wrapper\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"visually-hidden\\\"],[15,\\\"for\\\",[29,[\\\"title-input-\\\",[30,8,[\\\"id\\\"]]]]],[12],[1,\\\"Conversation title\\\"],[13],[1,\\\"\\\\n                  \\\"],[11,\\\"input\\\"],[16,1,[29,[\\\"title-input-\\\",[30,8,[\\\"id\\\"]]]]],[24,0,\\\"form-control form-control-sm min-width-0\\\"],[16,2,[30,8,[\\\"title\\\"]]],[16,\\\"disabled\\\",[28,[37,26],[[30,0,[\\\"savingTitleConversationId\\\"]],[30,8,[\\\"id\\\"]]],null]],[24,4,\\\"text\\\"],[4,[38,5],[\\\"blur\\\",[30,0,[\\\"cancelEdit\\\"]]],null],[4,[38,5],[\\\"keydown\\\",[28,[37,19],[[30,0,[\\\"onTitleKeydown\\\"]],[30,8]],null]],null],[4,[38,12],[[30,0,[\\\"focusInput\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,26],[[30,0,[\\\"savingTitleConversationId\\\"]],[30,8,[\\\"id\\\"]]],null],[[[1,\\\"                    \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[11,1],[24,0,\\\"conversation-title\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[16,\\\"data-bs-original-title\\\",[28,[37,3],[[30,8,[\\\"title\\\"]],\\\"New Conversation\\\"],null]],[4,[38,5],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"selectConversation\\\"]],[30,8]],null]],null],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,3],[[30,8,[\\\"title\\\"]],\\\"New Conversation\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"conversation-actions\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-link p-0\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-ellipsis-h\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"renameConversation\\\"]],[30,8]],null]],null],[12],[1,\\\"\\\\n                        \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-edit\\\"]],null],[1,\\\" Rename\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item text-danger\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"deleteConversation\\\"]],[30,8]],null]],null],[12],[1,\\\"\\\\n                        \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-trash\\\"]],null],[1,\\\" Delete\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[8]],null]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-center p-3 text-muted\\\"],[12],[1,\\\"\\\\n            No conversations yet\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"mcp-server-card\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between mb-1\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"mcp-server-card-title\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-plug\\\"]],null],[1,\\\"\\\\n            MCP Server\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,30],[[24,0,\\\"btn-sm\\\"]],[[\\\"@target\\\",\\\"@title\\\",\\\"@trigger\\\"],[\\\"#mcpUrlCopySourcePanel\\\",\\\"Copy URL\\\",\\\"click\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"pre\\\"],[14,1,\\\"mcpUrlCopySourcePanel\\\"],[14,0,\\\"mcp-server-url\\\"],[12],[10,\\\"code\\\"],[12],[1,[30,0,[\\\"mcpServerUrl\\\"]]],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showSettingsModal\\\"]],[[[1,\\\"    \\\"],[8,[39,33],null,[[\\\"@onClose\\\"],[[30,0,[\\\"toggleSettings\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showBrowserSessionsModal\\\"]],[[[1,\\\"    \\\"],[8,[39,34],null,[[\\\"@browserSessions\\\",\\\"@conversationId\\\",\\\"@onClose\\\"],[[30,0,[\\\"aiAgent\\\",\\\"browserSessions\\\"]],[30,0,[\\\"aiAgent\\\",\\\"activeConversationId\\\"]],[30,0,[\\\"closeBrowserSessions\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAttachmentsModal\\\"]],[[[1,\\\"    \\\"],[8,[39,35],null,[[\\\"@attachments\\\",\\\"@onClose\\\"],[[30,0,[\\\"aiAgent\\\",\\\"attachments\\\"]],[30,0,[\\\"closeAttachments\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@sidebar\\\",\\\"bullet\\\",\\\"item\\\",\\\"tool\\\",\\\"option\\\",\\\"group\\\",\\\"option\\\",\\\"conversation\\\"],[\\\"div\\\",\\\"if\\\",\\\"h5\\\",\\\"or\\\",\\\"button\\\",\\\"on\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"svg\\\",\\\"circle\\\",\\\"a\\\",\\\"link-to\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"and\\\",\\\"not\\\",\\\"p\\\",\\\"each\\\",\\\"-track-array\\\",\\\"fn\\\",\\\"render-markdown\\\",\\\"ai-agents/chat-history-item\\\",\\\"ai-agents/tool-call-panel\\\",\\\"label\\\",\\\"textarea\\\",\\\"ui/p-select\\\",\\\"eq\\\",\\\"input\\\",\\\"ul\\\",\\\"li\\\",\\\"ui/copy-text\\\",\\\"pre\\\",\\\"code\\\",\\\"ai-agents/settings-modal\\\",\\\"ai-agents/browser-sessions-modal\\\",\\\"ai-agents/attachments-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents-page.hbs\",\n    \"isStrictMode\": false\n  });\n  let AiAgentsPageComponent = _exports.default = (_class = class AiAgentsPageComponent extends _component2.default {\n    get MAX_WINDOW_SIZE() {\n      return this.MAX_VISIBLE_MESSAGES + this.MAX_BUFFER_MESSAGES;\n    }\n    get visibleMessages() {\n      const allMessages = this.messagesWithLiveCycleHeader;\n      const total = allMessages.length;\n      if (total <= this.MAX_WINDOW_SIZE) {\n        return allMessages;\n      }\n      const maxStartIndex = total - this.MAX_WINDOW_SIZE;\n      const startIndex = Math.floor(maxStartIndex * this._scrollPercent);\n      return allMessages.slice(startIndex, startIndex + this.MAX_WINDOW_SIZE);\n    }\n    get messagesWithLiveCycleHeader() {\n      const allMessages = this.aiAgent.chatMessages || [];\n      const liveHeader = this.aiAgent.liveWorkCycleHeader;\n      if (!liveHeader) return allMessages;\n      const userIndex = [...allMessages].reverse().findIndex(item => item?.message?.role === 'User');\n      if (userIndex < 0) return allMessages;\n      const startIndex = allMessages.length - 1 - userIndex;\n      const turnItems = allMessages.slice(startIndex + 1);\n      if (turnItems.some(item => item.itemType === 'WorkCycle' || item.itemType === 'LiveWorkCycle')) return allMessages;\n      return [...allMessages.slice(0, startIndex + 1), liveHeader, ...turnItems];\n    }\n    get showConversationHeader() {\n      return this.aiAgent.conversationTitle || this.aiAgent.activeConversationId || this.aiAgent.isStreaming;\n    }\n    get isInitialHistoryLoad() {\n      const hasUrlConversation = new URL(window.location).searchParams.has('conversationId');\n      if (hasUrlConversation && this.aiAgent.isLoadingConversations) return true;\n      return this.aiAgent.isLoadingHistory && !this.aiAgent.chatMessages.length;\n    }\n    get showWelcomePrompt() {\n      return !this.aiAgent.isStreaming && !this.aiAgent.chatMessages.length && !this.isInitialHistoryLoad;\n    }\n    get showCloseButton() {\n      const isMainPage = this.args.staticPage || this.router.currentRouteName === 'conversations';\n      const hasHeaderButton = this.aiAgent.showAiToggle;\n      const isIndexPage = this.router.currentRouteName === 'index';\n      if (isIndexPage && this.args.isMobileScreen) {\n        return true;\n      }\n      return !(isMainPage && !hasHeaderButton);\n    }\n    get welcomeParts() {\n      const prompt = this.aiAgent.welcomePrompt;\n      if (!prompt) return null;\n      const lines = prompt.split('\\n');\n      const intro = lines[0];\n      const bullets = lines.slice(1).filter(l => l.startsWith('* ')).map(line => {\n        const markdown = line.replace(/^\\* /, '');\n        return {\n          markdown,\n          text: markdown.replace(/\\*\\*/g, '')\n        };\n      });\n      return {\n        intro,\n        bullets\n      };\n    }\n    get isInputDisabled() {\n      return this.hasNoAiCredits || this.isEmailConfirmationRequired || this.aiAgent.isReadOnly || this.aiAgent.isStreaming || this.isInitialHistoryLoad;\n    }\n    get hasNoAiCredits() {\n      return this.envConfig.hasAiCredits === false;\n    }\n    get isEmailConfirmationRequired() {\n      return _environment.config.currentUser.isLoggedIn && !_environment.config.currentUser.confirmed;\n    }\n    get aiCreditsExhausted() {\n      return this.envConfig.aiCreditsExhausted === true;\n    }\n    get mcpServerUrl() {\n      return (0, _mcpServerUrl.mcpServerUrl)();\n    }\n    get showThinkingIndicator() {\n      return !this.isInitialHistoryLoad && !this.aiAgent.isLoadingConversations && this.aiAgent.isStreaming && !this.aiAgent.currentResponseText && !this.aiAgent.currentReasoningSummaryText && !this.aiAgent.hasActiveToolCalls;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor3, this);\n      _initializerDefineProperty(this, \"messageInput\", _descriptor4, this);\n      _initializerDefineProperty(this, \"mobileConversationsOpen\", _descriptor5, this);\n      _initializerDefineProperty(this, \"editingConversationId\", _descriptor6, this);\n      _initializerDefineProperty(this, \"savingTitleConversationId\", _descriptor7, this);\n      _initializerDefineProperty(this, \"deletingConversationId\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showSettingsModal\", _descriptor9, this);\n      _initializerDefineProperty(this, \"showBrowserSessionsModal\", _descriptor0, this);\n      _initializerDefineProperty(this, \"showAttachmentsModal\", _descriptor1, this);\n      _initializerDefineProperty(this, \"_scrollPercent\", _descriptor10, this);\n      _defineProperty(this, \"textareaElement\", null);\n      _defineProperty(this, \"chatAreaElement\", null);\n      _defineProperty(this, \"spacerElement\", null);\n      _defineProperty(this, \"_streamParser\", null);\n      _defineProperty(this, \"_streamedLength\", 0);\n      _defineProperty(this, \"_scrollDebounceId\", null);\n      _defineProperty(this, \"MAX_VISIBLE_MESSAGES\", 50);\n      _defineProperty(this, \"MAX_BUFFER_MESSAGES\", 50);\n      _defineProperty(this, \"getModelTooltip\", model => {\n        if (!model?.pricing) return '';\n        const parts = [model.pricing.input != null && `Input: $${model.pricing.input}/1M tokens`, model.pricing.output != null && `Output: $${model.pricing.output}/1M tokens`, model.contextWindow && _lib.default.printContextWindow(model.contextWindow)].filter(Boolean);\n        return parts.join(' | ');\n      });\n      this.aiAgent.initialize();\n      const hasUrlConversation = new URL(window.location).searchParams.has('conversationId');\n      if (!hasUrlConversation && this.aiAgent.activeConversationId) {\n        this.aiAgent._updateConversationUrl(this.aiAgent.activeConversationId);\n      }\n    }\n    onModelChange(model) {\n      this.aiAgent.selectedModel = model;\n    }\n    onRegionChange(region) {\n      this.aiAgent.selectedRegion = region;\n    }\n    onModeChange(mode) {\n      this.aiAgent.selectedMode = mode;\n    }\n    sendEmailConfirmation(e) {\n      e.preventDefault();\n      _server.default.sendEmailConfirmation(_environment.config.currentUser.email).then(data => {\n        if (data.success) {\n          _lib.default.info('Email sent with link to confirm your account.');\n        } else {\n          _lib.default.error(data.error);\n        }\n      });\n    }\n    onMessageInput(event) {\n      this.messageInput = event.target.value;\n    }\n    onMessageKeydown(event) {\n      if (event.key === 'Enter' && !event.shiftKey) {\n        event.preventDefault();\n        this.sendMessage();\n      }\n    }\n    focusInput(element) {\n      element.focus();\n      element.select();\n    }\n    setTextareaRef(element) {\n      this.textareaElement = element;\n      element.focus({\n        preventScroll: true\n      });\n    }\n    onStreamingChange() {\n      if (!this.aiAgent.isStreaming) {\n        if (this.textareaElement) this.textareaElement.focus();\n        if (this.spacerElement && this.chatAreaElement) {\n          const {\n            scrollTop,\n            clientHeight,\n            scrollHeight\n          } = this.chatAreaElement;\n          const currentSpacerHeight = this.spacerElement.offsetHeight;\n          const contentHeight = scrollHeight - currentSpacerHeight;\n          const minNeededHeight = scrollTop + clientHeight;\n          const newSpacerHeight = Math.max(0, minNeededHeight - contentHeight);\n          this.spacerElement.style.minHeight = `${newSpacerHeight}px`;\n        }\n      }\n    }\n    closeSidebar() {\n      this.aiAgent.closeSidebar();\n    }\n    async expandToFullPage() {\n      this.aiAgent.closeSidebar();\n      await this.router.transitionTo('conversations');\n      if (this.aiAgent.activeConversationId) {\n        const url = new URL(window.location);\n        url.searchParams.set('conversationId', this.aiAgent.activeConversationId);\n        window.history.replaceState({}, '', url);\n      }\n    }\n    toggleMobileConversations() {\n      this.mobileConversationsOpen = !this.mobileConversationsOpen;\n    }\n    createNewConversation() {\n      this.aiAgent.createNewConversation();\n      this.mobileConversationsOpen = false;\n      this.textareaElement?.focus();\n    }\n    selectConversation(conversation) {\n      this.aiAgent.selectConversation(conversation);\n      this.mobileConversationsOpen = false;\n    }\n    renameConversation(conversation, event) {\n      event?.stopPropagation?.();\n      this.editingConversationId = conversation.id;\n    }\n    cancelEdit() {\n      if (this.editingConversationId === null || this.savingTitleConversationId) return;\n      (0, _runloop.next)(() => {\n        this.editingConversationId = null;\n      });\n    }\n    async onTitleKeydown(conversation, event) {\n      if (event.key === 'Enter') {\n        event.preventDefault();\n        const newTitle = event.target.value.trim();\n        if (!newTitle) return;\n        if (newTitle === conversation.title) {\n          this.editingConversationId = null;\n          return;\n        }\n        this.savingTitleConversationId = conversation.id;\n        await this.aiAgent.saveTitle(conversation, newTitle);\n        this.savingTitleConversationId = null;\n        this.editingConversationId = null;\n      } else if (event.key === 'Escape') {\n        this.editingConversationId = null;\n      }\n    }\n    deleteConversation(conversation, event) {\n      event?.stopPropagation?.();\n      _lib.default.confirm(`Are you sure you want to delete <strong>${conversation.title || 'New Conversation'}</strong>?`, 'OK', async () => {\n        this.deletingConversationId = conversation.id;\n        await this.aiAgent.deleteConversation(conversation.id);\n        this.deletingConversationId = null;\n      }, 'Cancel', () => {}, 'Delete Conversation');\n    }\n    sendMessage() {\n      if (!this.messageInput.trim() || this.aiAgent.isStreaming) return;\n      this.aiAgent.sendMessage(this.messageInput.trim());\n      this.messageInput = '';\n      this.adjustSpacerAndScroll();\n    }\n    adjustSpacerAndScroll() {\n      (0, _runloop.next)(() => {\n        if (!this.chatAreaElement) return;\n        const messages = this.chatAreaElement.querySelectorAll('.user-message-box');\n        const lastMessage = messages?.[messages.length - 1];\n        if (lastMessage && this.spacerElement) {\n          const areaHeight = this.chatAreaElement.clientHeight;\n          const messageHeight = lastMessage.offsetHeight;\n          this.spacerElement.style.minHeight = `${areaHeight - messageHeight - 60}px`;\n          const containerRect = this.chatAreaElement.getBoundingClientRect();\n          const messageRect = lastMessage.getBoundingClientRect();\n          this.chatAreaElement.scrollTop += messageRect.top - containerRect.top;\n        }\n      });\n    }\n    submitPromptSuggestion(text) {\n      if (this.aiAgent.isStreaming) return;\n      this.messageInput = text;\n      this.textareaElement?.focus();\n    }\n    stopStreaming() {\n      this.aiAgent.stopStreaming();\n    }\n    setChatAreaRef(element) {\n      this.chatAreaElement = element;\n    }\n    setSpacerRef(element) {\n      this.spacerElement = element;\n    }\n    scrollToBottom() {\n      if (this.chatAreaElement) {\n        (0, _runloop.next)(() => {\n          this.chatAreaElement.scrollTop = this.chatAreaElement.scrollHeight;\n        });\n      }\n    }\n    async loadMoreHistory() {\n      if (!this.chatAreaElement) return;\n      const chatArea = this.chatAreaElement;\n      const prevScrollHeight = chatArea.scrollHeight;\n      await this.aiAgent.loadMoreHistory();\n      requestAnimationFrame(() => {\n        if (this.isDestroyed || this.isDestroying) return;\n        chatArea.scrollTop = chatArea.scrollHeight - prevScrollHeight;\n      });\n    }\n    toggleWorkCycle(workCycle) {\n      this.aiAgent.toggleWorkCycle(workCycle);\n    }\n    onChatScroll(event) {\n      const {\n        scrollTop,\n        scrollHeight,\n        clientHeight\n      } = event.target;\n\n      // Update scroll percentage for virtual window calculation (every scroll)\n      const maxScroll = Math.max(scrollHeight - clientHeight, 1);\n      this._scrollPercent = Math.min(scrollTop / maxScroll, 1);\n\n      // Debounce history load check (reduce from 60+ events/sec to ~4 events/sec)\n      this._scrollDebounceId = (0, _runloop.debounce)(this, this._checkLoadMoreHistory, 250);\n    }\n    _checkLoadMoreHistory() {\n      const chatArea = this.chatAreaElement;\n      if (!chatArea) return;\n      if (chatArea.scrollTop === 0 && this.aiAgent.hasMoreHistory && !this.aiAgent.isLoadingHistory) {\n        this.loadMoreHistory();\n      }\n    }\n    toggleSettings() {\n      this.showSettingsModal = !this.showSettingsModal;\n    }\n    openBrowserSessions() {\n      this.showBrowserSessionsModal = true;\n    }\n    closeBrowserSessions() {\n      this.showBrowserSessionsModal = false;\n    }\n    openAttachments() {\n      this.showAttachmentsModal = true;\n    }\n    closeAttachments() {\n      this.showAttachmentsModal = false;\n    }\n    openActiveConversationUpload() {\n      this.showAttachmentsModal = true;\n    }\n    initStreamingMarkdown(element) {\n      const renderer = smd.default_renderer(element);\n      this._streamParser = smd.parser(renderer);\n      this._streamedLength = 0;\n      const text = this.aiAgent.currentResponseText;\n      if (text) {\n        smd.parser_write(this._streamParser, text);\n        this._streamedLength = text.length;\n      }\n    }\n    updateStreamingMarkdown() {\n      const text = this.aiAgent.currentResponseText;\n      if (this._streamParser && text.length > this._streamedLength) {\n        try {\n          const newText = text.slice(this._streamedLength);\n          smd.parser_write(this._streamParser, newText);\n          this._streamedLength = text.length;\n        } catch (error) {\n          console.error('Error updating streaming markdown:', error);\n          this._cleanupStreamParser();\n        }\n      }\n      if (!this.aiAgent.isStreaming && this._streamParser) {\n        this._finalizeStreamingMarkdown();\n      }\n    }\n    _finalizeStreamingMarkdown() {\n      if (!this._streamParser) return;\n      try {\n        smd.parser_end(this._streamParser);\n        const el = document.querySelector('.assistant-message:last-child .message-text');\n        if (el) renderMD.postProcessMarkdown(el);\n      } catch (error) {\n        console.error('Error finalizing streaming markdown:', error);\n      } finally {\n        this._cleanupStreamParser();\n      }\n    }\n    _cleanupStreamParser() {\n      this._streamParser = null;\n      this._streamedLength = 0;\n    }\n    willDestroy() {\n      super.willDestroy();\n      this._cleanupStreamParser();\n      if (this._scrollDebounceId) {\n        (0, _runloop.cancel)(this._scrollDebounceId);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"messageInput\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"mobileConversationsOpen\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"editingConversationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"savingTitleConversationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"deletingConversationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showSettingsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"showBrowserSessionsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"showAttachmentsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"_scrollPercent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"visibleMessages\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"visibleMessages\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showConversationHeader\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"showConversationHeader\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isInitialHistoryLoad\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"isInitialHistoryLoad\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showWelcomePrompt\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"showWelcomePrompt\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCloseButton\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"showCloseButton\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"welcomeParts\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"welcomeParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isInputDisabled\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"isInputDisabled\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showThinkingIndicator\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"showThinkingIndicator\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onModelChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onModelChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onRegionChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRegionChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onModeChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onModeChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sendEmailConfirmation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sendEmailConfirmation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMessageInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMessageInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMessageKeydown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMessageKeydown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setTextareaRef\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setTextareaRef\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onStreamingChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onStreamingChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeSidebar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeSidebar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expandToFullPage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandToFullPage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleMobileConversations\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleMobileConversations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createNewConversation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createNewConversation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"selectConversation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"selectConversation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameConversation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameConversation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelEdit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelEdit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onTitleKeydown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onTitleKeydown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteConversation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteConversation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sendMessage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sendMessage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"adjustSpacerAndScroll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"adjustSpacerAndScroll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"submitPromptSuggestion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"submitPromptSuggestion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopStreaming\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopStreaming\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setChatAreaRef\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setChatAreaRef\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setSpacerRef\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setSpacerRef\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"scrollToBottom\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"scrollToBottom\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreHistory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreHistory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleWorkCycle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleWorkCycle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChatScroll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChatScroll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleSettings\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleSettings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openBrowserSessions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openBrowserSessions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeBrowserSessions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeBrowserSessions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openAttachments\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openAttachments\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeAttachments\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeAttachments\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openActiveConversationUpload\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openActiveConversationUpload\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initStreamingMarkdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initStreamingMarkdown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStreamingMarkdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStreamingMarkdown\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AiAgentsPageComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/attachments-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@onClose}}\n    @title=\"Conversation Attachments\"\n    class=\"attachments-modal\"\n    @size=\"lg\"\n  >\n    <AiAgents::FileUploadZone @conversationId={{this.aiAgent.activeConversationId}} />\n  \n    <table class=\"table table-sm mb-0 mt-3\">\n      <thead>\n        <tr>\n          <th>Name</th>\n          <th>Size</th>\n          <th>Lines</th>\n          <th>Content Type</th>\n          <th class=\"text-end\">Actions</th>\n        </tr>\n      </thead>\n      <tbody>\n        {{#each this.attachments as |attachment|}}\n          <tr>\n            <td class=\"text-truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-original-title={{attachment.name}}>{{attachment.name}}</td>\n            <td>{{this.formatSize attachment.fileSize}}</td>\n            <td>{{if attachment.lineCount attachment.lineCount \"-\"}}</td>\n            <td>{{or attachment.contentType \"-\"}}</td>\n            <td class=\"text-end text-nowrap\">\n              <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" title=\"Download\" {{on \"click\" (fn this.downloadAttachment attachment)}}>\n                <Ui::Icon @icon=\"fa fa-download\" />\n              </button>\n              <button type=\"button\" class=\"btn btn-outline-danger btn-sm ms-1\" title=\"Delete\"\n                disabled={{eq this.deletingId attachment.id}}\n                {{on \"click\" (fn this.deleteAttachment attachment)}}\n              >\n                {{#if (eq this.deletingId attachment.id)}}\n                  <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n                {{else}}\n                  <Ui::Icon @icon=\"fa fa-trash\" />\n                {{/if}}\n              </button>\n            </td>\n          </tr>\n        {{/each}}\n      </tbody>\n    </table>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"attachments-modal\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],\\\"Conversation Attachments\\\",\\\"lg\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[39,1],null,[[\\\"@conversationId\\\"],[[30,0,[\\\"aiAgent\\\",\\\"activeConversationId\\\"]]]],null],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sm mb-0 mt-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[12],[1,\\\"Size\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[12],[1,\\\"Lines\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[12],[1,\\\"Content Type\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[14,0,\\\"text-end\\\"],[12],[1,\\\"Actions\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,8],[[28,[37,8],[[30,0,[\\\"attachments\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"text-truncate\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"right\\\"],[15,\\\"data-bs-original-title\\\",[30,2,[\\\"name\\\"]]],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,[28,[30,0,[\\\"formatSize\\\"]],[[30,2,[\\\"fileSize\\\"]]],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,[52,[30,2,[\\\"lineCount\\\"]],[30,2,[\\\"lineCount\\\"]],\\\"-\\\"]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,11],[[30,2,[\\\"contentType\\\"]],\\\"-\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"text-end text-nowrap\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-secondary btn-sm\\\"],[24,\\\"title\\\",\\\"Download\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,14],[[30,0,[\\\"downloadAttachment\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-danger btn-sm ms-1\\\"],[24,\\\"title\\\",\\\"Delete\\\"],[16,\\\"disabled\\\",[28,[37,16],[[30,0,[\\\"deletingId\\\"]],[30,2,[\\\"id\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,14],[[30,0,[\\\"deleteAttachment\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"deletingId\\\"]],[30,2,[\\\"id\\\"]]],null],[[[1,\\\"                \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onClose\\\",\\\"attachment\\\"],[\\\"ui/modal-wrapper\\\",\\\"ai-agents/file-upload-zone\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"if\\\",\\\"or\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/attachments-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AttachmentsModalComponent = _exports.default = (_class = class AttachmentsModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor2, this);\n      _initializerDefineProperty(this, \"deletingId\", _descriptor3, this);\n    }\n    get attachments() {\n      return this.args.attachments || [];\n    }\n    formatSize(bytes) {\n      if (!bytes) return '-';\n      return numeral(bytes).format(bytes < 1024 * 1024 ? '0 ib' : '0.0 ib');\n    }\n    downloadAttachment(attachment) {\n      const url = this.api.conversations.getAttachmentDownloadUrl(this.aiAgent.activeConversationId, attachment.id);\n      window.open(url, '_blank');\n    }\n    async deleteAttachment(attachment) {\n      this.deletingId = attachment.id;\n      try {\n        await this.aiAgent.removeAttachment(attachment.id);\n      } catch (error) {\n        console.error('Failed to delete attachment:', error);\n      } finally {\n        this.deletingId = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"deletingId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"downloadAttachment\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadAttachment\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteAttachment\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteAttachment\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AttachmentsModalComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/browser-sessions-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@onClose}}\n    @title=\"Conversation Browser Sessions\"\n    class=\"browser-sessions-modal\"\n    @size=\"xl\"\n  >\n    <div class=\"mb-3\">\n      <Ui::PSelect\n        @options={{this.sessions}}\n        @selected={{this.selectedSessionOption}}\n        @onChange={{this.onSessionChange}}\n        @searchEnabled={{false}}\n        as |session|\n      >\n        {{session.browserSessionId}}\n      </Ui::PSelect>\n    </div>\n  \n    <div class=\"browser-sessions-split-pane\">\n      <div class=\"browser-sessions-video-pane\">\n        {{#if this.videoUrl}}\n          <Ui::VideojsPlayer @src={{this.videoUrl}} />\n        {{else if this.selectedSession}}\n          <div class=\"text-center text-muted p-4\">No video available for this session</div>\n        {{/if}}\n      </div>\n  \n      <div class=\"browser-sessions-commands-pane\">\n        {{#if (and this.isLoadingCommands (not this.sessionCommands.length))}}\n          <div class=\"text-center p-3 text-muted\">\n            <Ui::Icon @icon=\"fa-spinner fa-spin\" /> Loading commands...\n          </div>\n        {{/if}}\n  \n        {{#each this.sessionCommands as |item|}}\n          <AiAgents::ChatHistoryItem @item={{item}} />\n        {{/each}}\n  \n        {{#if this.hasMoreCommands}}\n          <div class=\"text-center p-2\">\n            <button type=\"button\" class=\"btn btn-link btn-sm text-muted\" {{on \"click\" this.loadMoreCommands}}>\n              Load more commands\n            </button>\n          </div>\n        {{/if}}\n  \n        {{#each this.streamingToolCalls key=\"callId\" as |tool|}}\n          <AiAgents::ToolCallPanel @tool={{tool}} />\n        {{/each}}\n      </div>\n    </div>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"browser-sessions-modal\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],\\\"Conversation Browser Sessions\\\",\\\"xl\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"mb-3\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\"],[[30,0,[\\\"sessions\\\"]],[30,0,[\\\"selectedSessionOption\\\"]],[30,0,[\\\"onSessionChange\\\"]],false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,2,[\\\"browserSessionId\\\"]]],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"browser-sessions-split-pane\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"browser-sessions-video-pane\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videoUrl\\\"]],[[[1,\\\"        \\\"],[8,[39,4],null,[[\\\"@src\\\"],[[30,0,[\\\"videoUrl\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"selectedSession\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center text-muted p-4\\\"],[12],[1,\\\"No video available for this session\\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"browser-sessions-commands-pane\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,0,[\\\"isLoadingCommands\\\"]],[28,[37,6],[[30,0,[\\\"sessionCommands\\\",\\\"length\\\"]]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center p-3 text-muted\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" Loading commands...\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"sessionCommands\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[39,10],null,[[\\\"@item\\\"],[[30,3]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasMoreCommands\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center p-2\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link btn-sm text-muted\\\"],[24,4,\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"loadMoreCommands\\\"]]],null],[12],[1,\\\"\\\\n            Load more commands\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"streamingToolCalls\\\"]]],null]],null],\\\"callId\\\",[[[1,\\\"        \\\"],[8,[39,13],null,[[\\\"@tool\\\"],[[30,4]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onClose\\\",\\\"session\\\",\\\"item\\\",\\\"tool\\\"],[\\\"ui/modal-wrapper\\\",\\\"div\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"ui/videojs-player\\\",\\\"and\\\",\\\"not\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"ai-agents/chat-history-item\\\",\\\"button\\\",\\\"on\\\",\\\"ai-agents/tool-call-panel\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/browser-sessions-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let BrowserSessionsModalComponent = _exports.default = (_class = class BrowserSessionsModalComponent extends _component2.default {\n    get sessions() {\n      return this.args.browserSessions || [];\n    }\n    get selectedSessionOption() {\n      return this.sessions.find(s => s.browserSessionId === this.selectedSession?.browserSessionId) || null;\n    }\n    get video() {\n      return this.selectedSession?.video || null;\n    }\n    get videoUrl() {\n      return this.video?.playlistUrl || null;\n    }\n    get streamingToolCalls() {\n      if (!this.selectedSession) return [];\n      const sessionId = this.selectedSession.browserSessionId;\n      this.aiAgent._toolCallsDirty;\n      const hasSessionTools = this.aiAgent.toolCallsList.some(t => t.browserSessionId === sessionId);\n      const active = this.aiAgent.toolCallsList.filter(t => !this._seenCallIds.has(t.callId) && (t.browserSessionId === sessionId || hasSessionTools && t.browserSessionId === null));\n      for (const t of active) {\n        this._seenCallIds.add(t.callId);\n        this._capturedToolCalls.push(t);\n      }\n      const historyCallIds = new Set(this.sessionCommands.filter(c => c.toolResult?.id).map(c => c.toolResult.id));\n      return this._capturedToolCalls.filter(t => !historyCallIds.has(t.callId));\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor3, this);\n      _initializerDefineProperty(this, \"sessionCommands\", _descriptor4, this);\n      _defineProperty(this, \"_capturedToolCalls\", []);\n      _initializerDefineProperty(this, \"isLoadingCommands\", _descriptor5, this);\n      _initializerDefineProperty(this, \"hasMoreCommands\", _descriptor6, this);\n      _defineProperty(this, \"_commandsOffset\", 0);\n      _defineProperty(this, \"_commandsLimit\", 50);\n      _defineProperty(this, \"_seenCallIds\", new Set());\n      if (this.sessions.length) {\n        this.selectSession(this.sessions[0]);\n      }\n    }\n    onSessionChange(session) {\n      this.selectSession(session);\n    }\n    selectSession(session) {\n      this.selectedSession = session;\n      this.sessionCommands = [];\n      this._capturedToolCalls = [];\n      this._seenCallIds = new Set();\n      this._commandsOffset = 0;\n      this.hasMoreCommands = false;\n      if (!this.aiAgent.isStreaming) {\n        this.loadCommands(session);\n      }\n    }\n    async loadCommands(session) {\n      if (!session || !this.args.conversationId) return;\n      this.isLoadingCommands = true;\n      try {\n        const response = await this.api.conversations.getHistory(this.args.conversationId, {\n          browserSessionId: session.browserSessionId,\n          desc: false,\n          offset: this._commandsOffset,\n          limit: this._commandsLimit\n        });\n        const rawItems = response?.results || [];\n        const items = rawItems.filter(i => i.itemType !== 'Video');\n        this.sessionCommands = [...this.sessionCommands, ...items];\n        this.hasMoreCommands = rawItems.length >= this._commandsLimit;\n        this._commandsOffset += rawItems.length;\n      } catch (error) {\n        console.error('Failed to load browser session commands:', error);\n      } finally {\n        this.isLoadingCommands = false;\n      }\n    }\n    loadMoreCommands() {\n      if (this.isLoadingCommands || !this.hasMoreCommands) return;\n      this.loadCommands(this.selectedSession);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"sessionCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"hasMoreCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSessionChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSessionChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreCommands\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreCommands\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BrowserSessionsModalComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/chat-history-item\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template\", \"@testable/shared-ui/helpers/render-markdown\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _template, _renderMarkdown, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template\",0,\"@testable/shared-ui/helpers/render-markdown\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (eq @item.itemType 'Video')}}\n    <AiAgents::VideoPanel @item={{@item}} />\n  {{else if (eq @item.itemType 'Summarize')}}\n    <AiAgents::SummarizePanel @item={{@item}} />\n  {{else if (eq @item.itemType 'ReasoningSummary')}}\n    <div class=\"reasoning-summary-message\">\n      <div class=\"reasoning-summary-title\">Thought</div>\n      <div class=\"reasoning-summary-text\">{{this.processedReasoningSummary}}</div>\n    </div>\n  {{else if (eq @item.itemType 'LiveWorkCycle')}}\n    <div class=\"live-work-cycle-marker\">\n      <span>Working for {{this.workedForDisplay}}</span>\n    </div>\n  {{else if (eq @item.itemType 'WorkCycle')}}\n    <div class=\"work-cycle-panel\">\n      <button type=\"button\" class=\"work-cycle-toggle\" {{on \"click\" this.toggleWorkCycle}}>\n        <span>\n          Worked for {{this.workedForDisplay}}\n        </span>\n        {{#if this.workSummaryParts}}\n          <span class=\"work-cycle-summary\">{{this.workSummaryParts}}</span>\n        {{/if}}\n        <span class=\"work-row-chevron\">&gt;</span>\n      </button>\n      {{#if @item.expanded}}\n        <div class=\"work-cycle-entries\">\n          {{#if @item.loading}}\n            <div class=\"text-muted small p-2\"><Ui::Icon @icon=\"fa-spinner fa-spin\" /> Loading work...</div>\n          {{else}}\n            {{#each @item.entries as |entry|}}\n              <AiAgents::ChatHistoryItem @item={{entry}} @onAction={{@onAction}} @onToggleWorkCycle={{@onToggleWorkCycle}} />\n            {{/each}}\n          {{/if}}\n        </div>\n      {{/if}}\n    </div>\n  {{else if (or (eq @item.itemType 'ToolResult') (eq @item.itemType 'WebSearch'))}}\n    <AiAgents::ToolCallPanel @tool={{@item}} @itemType={{@item.itemType}} @onAction={{@onAction}} />\n  {{else if (eq @item.message.role 'User')}}\n    <div class=\"user-message-box\">\n      {{#if @item.userName}}\n        <div class=\"user-message-sender\">{{@item.userName}} ({{@item.userEmail}})</div>\n      {{/if}}\n      {{@item.message.content}}\n    </div>\n  {{else if @item.message}}\n    {{#if @item.message.toolCalls.length}}\n      {{#each @item.message.toolCalls as |tool|}}\n        {{#if tool.callId}}\n          <AiAgents::ToolCallPanel @tool={{tool}} @onAction={{@onAction}} />\n        {{/if}}\n      {{/each}}\n    {{/if}}\n    {{#if @item.message.content}}\n      <div class=\"assistant-message\">\n        <div role=\"button\" class=\"message-text\" {{on \"click\" this.onMessageClick}}>{{this.processedContent}}</div>\n        {{#if this.hasFiles}}\n          <span role=\"button\" class=\"tool-files-count\" {{on \"click\" (fn this.openFilesModal null)}}>{{this.fileCount}} {{print-plural \"file\" this.fileCount}}</span>\n        {{/if}}\n      </div>\n    {{/if}}\n  {{/if}}\n  \n  {{#if this.showFilesModal}}\n    <AiAgents::ToolCallFilesModal\n      @files={{this.messageFiles}}\n      @fileContents={{@item.fileContents}}\n      @selectedFileName={{this.selectedFileName}}\n      @historyEntryId={{this.historyEntryId}}\n      @callDescription=\"Response\"\n      @onClose={{this.closeFilesModal}}\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"Video\\\"],null],[[[1,\\\"  \\\"],[8,[39,2],null,[[\\\"@item\\\"],[[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"Summarize\\\"],null],[[[1,\\\"  \\\"],[8,[39,3],null,[[\\\"@item\\\"],[[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"ReasoningSummary\\\"],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"reasoning-summary-message\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"reasoning-summary-title\\\"],[12],[1,\\\"Thought\\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"reasoning-summary-text\\\"],[12],[1,[30,0,[\\\"processedReasoningSummary\\\"]]],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"LiveWorkCycle\\\"],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"live-work-cycle-marker\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[12],[1,\\\"Working for \\\"],[1,[30,0,[\\\"workedForDisplay\\\"]]],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"WorkCycle\\\"],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"work-cycle-panel\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"work-cycle-toggle\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"toggleWorkCycle\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,1],[12],[1,\\\"\\\\n        Worked for \\\"],[1,[30,0,[\\\"workedForDisplay\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"workSummaryParts\\\"]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"work-cycle-summary\\\"],[12],[1,[30,0,[\\\"workSummaryParts\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,1],[14,0,\\\"work-row-chevron\\\"],[12],[1,\\\">\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"expanded\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"work-cycle-entries\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"loading\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-muted small p-2\\\"],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null],[1,\\\" Loading work...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[42,[28,[37,10],[[28,[37,10],[[30,1,[\\\"entries\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[39,11],null,[[\\\"@item\\\",\\\"@onAction\\\",\\\"@onToggleWorkCycle\\\"],[[30,2],[30,3],[30,4]]],null],[1,\\\"\\\\n\\\"]],[2]],null]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"ToolResult\\\"],null],[28,[37,1],[[30,1,[\\\"itemType\\\"]],\\\"WebSearch\\\"],null]],null],[[[1,\\\"  \\\"],[8,[39,13],null,[[\\\"@tool\\\",\\\"@itemType\\\",\\\"@onAction\\\"],[[30,1],[30,1,[\\\"itemType\\\"]],[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"message\\\",\\\"role\\\"]],\\\"User\\\"],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"user-message-box\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"userName\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"user-message-sender\\\"],[12],[1,[30,1,[\\\"userName\\\"]]],[1,\\\" (\\\"],[1,[30,1,[\\\"userEmail\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[1,[30,1,[\\\"message\\\",\\\"content\\\"]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"message\\\"]],[[[41,[30,1,[\\\"message\\\",\\\"toolCalls\\\",\\\"length\\\"]],[[[42,[28,[37,10],[[28,[37,10],[[30,1,[\\\"message\\\",\\\"toolCalls\\\"]]],null]],null],null,[[[41,[30,5,[\\\"callId\\\"]],[[[1,\\\"        \\\"],[8,[39,13],null,[[\\\"@tool\\\",\\\"@onAction\\\"],[[30,5],[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[5]],null]],[]],null],[41,[30,1,[\\\"message\\\",\\\"content\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"assistant-message\\\"],[12],[1,\\\"\\\\n      \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"message-text\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"onMessageClick\\\"]]],null],[12],[1,[30,0,[\\\"processedContent\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasFiles\\\"]],[[[1,\\\"        \\\"],[11,1],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"tool-files-count\\\"],[4,[38,7],[\\\"click\\\",[28,[37,14],[[30,0,[\\\"openFilesModal\\\"]],null],null]],null],[12],[1,[30,0,[\\\"fileCount\\\"]]],[1,\\\" \\\"],[1,[28,[35,15],[\\\"file\\\",[30,0,[\\\"fileCount\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showFilesModal\\\"]],[[[1,\\\"  \\\"],[8,[39,16],null,[[\\\"@files\\\",\\\"@fileContents\\\",\\\"@selectedFileName\\\",\\\"@historyEntryId\\\",\\\"@callDescription\\\",\\\"@onClose\\\"],[[30,0,[\\\"messageFiles\\\"]],[30,1,[\\\"fileContents\\\"]],[30,0,[\\\"selectedFileName\\\"]],[30,0,[\\\"historyEntryId\\\"]],\\\"Response\\\",[30,0,[\\\"closeFilesModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@item\\\",\\\"entry\\\",\\\"@onAction\\\",\\\"@onToggleWorkCycle\\\",\\\"tool\\\"],[\\\"if\\\",\\\"eq\\\",\\\"ai-agents/video-panel\\\",\\\"ai-agents/summarize-panel\\\",\\\"div\\\",\\\"span\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"ai-agents/chat-history-item\\\",\\\"or\\\",\\\"ai-agents/tool-call-panel\\\",\\\"fn\\\",\\\"print-plural\\\",\\\"ai-agents/tool-call-files-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/chat-history-item.hbs\",\n    \"isStrictMode\": false\n  });\n  const FILENAME_PATTERN = /__filename__\\(([^)]+)\\)/g;\n  let ChatHistoryItemComponent = _exports.default = (_class = class ChatHistoryItemComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"showFilesModal\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedFileName\", _descriptor2, this);\n    }\n    get messageFiles() {\n      return this.args.item?.files || this.args.item?.message?.files || [];\n    }\n    get historyEntryId() {\n      return this.args.item?.historyEntryId || this.args.item?.id;\n    }\n    get hasFiles() {\n      return this.messageFiles.length > 0;\n    }\n    get fileCount() {\n      return this.messageFiles.length;\n    }\n    get processedContent() {\n      const content = this.args.item?.message?.content;\n      if (!content) return '';\n      if (!content.includes('__filename__')) return (0, _renderMarkdown.renderMarkdown)([content]);\n      const fileRefs = [];\n      const withPlaceholders = content.replace(FILENAME_PATTERN, (_, name) => {\n        const idx = fileRefs.length;\n        fileRefs.push(name);\n        return `ZFILEREFZ${idx}ZENDZ`;\n      });\n      let html = (0, _renderMarkdown.renderMarkdown)([withPlaceholders]).toString();\n      fileRefs.forEach((name, idx) => {\n        html = html.replace(`ZFILEREFZ${idx}ZENDZ`, `<span role=\"button\" class=\"tool-file-link\" data-filename=\"${name.replace(/\"/g, '&quot;')}\">${name}</span>`);\n      });\n      return (0, _template.htmlSafe)(html);\n    }\n    get processedReasoningSummary() {\n      const content = this.args.item?.content;\n      if (!content) return '';\n      return (0, _renderMarkdown.renderMarkdown)([content]);\n    }\n    get workedForDisplay() {\n      const ms = this.args.item?.durationMs || 0;\n      if (ms < 1000) return '<1s';\n      const seconds = Math.round(ms / 1000);\n      if (seconds < 60) return `${seconds}s`;\n      const minutes = Math.floor(seconds / 60);\n      const remainingSeconds = seconds % 60;\n      if (minutes < 60) return remainingSeconds ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;\n      const hours = Math.floor(minutes / 60);\n      const remainingMinutes = minutes % 60;\n      return remainingMinutes ? `${hours}h ${remainingMinutes}m` : `${hours}h`;\n    }\n    get workSummaryParts() {\n      const item = this.args.item;\n      return [item?.toolCallCount ? `${item.toolCallCount} ${item.toolCallCount === 1 ? 'tool' : 'tools'}` : null, item?.webSearchCount ? `${item.webSearchCount} ${item.webSearchCount === 1 ? 'search' : 'searches'}` : null, item?.videoCount ? `${item.videoCount} ${item.videoCount === 1 ? 'video' : 'videos'}` : null].filter(Boolean).join(' - ');\n    }\n    toggleWorkCycle() {\n      this.args.onToggleWorkCycle?.(this.args.item);\n    }\n    onMessageClick(event) {\n      const link = event.target.closest('.tool-file-link');\n      if (link) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.openFilesModal(link.dataset.filename);\n      }\n    }\n    openFilesModal(fileName) {\n      if (!fileName) {\n        const files = this.messageFiles;\n        if (files?.length) {\n          const first = files[0];\n          fileName = typeof first === 'string' ? first : first?.name;\n        }\n      }\n      this.selectedFileName = fileName;\n      this.showFilesModal = true;\n    }\n    closeFilesModal() {\n      this.showFilesModal = false;\n      this.selectedFileName = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"showFilesModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedFileName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleWorkCycle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleWorkCycle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMessageClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMessageClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openFilesModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openFilesModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeFilesModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeFilesModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ChatHistoryItemComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/file-upload-zone\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <label class=\"visually-hidden\" for=\"upload-files-input\">Select files</label>\n  <input type=\"file\" id=\"upload-files-input\" multiple hidden\n    {{did-insert this.setFileInputRef}}\n    {{on \"change\" this.onFileInputChange}}\n  />\n  \n  <div class=\"upload-drop-zone {{if this.isDragOver 'drag-over'}}\"\n    role=\"button\"\n    {{on \"dragover\" this.onDragOver}}\n    {{on \"dragleave\" this.onDragLeave}}\n    {{on \"drop\" this.onDrop}}\n    {{on \"click\" this.triggerFileInput}}\n  >\n    {{#if this.isUploading}}\n      <Ui::Icon @icon=\"fa fa-spinner fa-spin fa-2x\" />\n      <div class=\"mt-2\">Uploading...</div>\n    {{else}}\n      <Ui::Icon @icon=\"fa fa-cloud-upload fa-2x\" />\n      <div class=\"mt-2\">Drag & drop files here or click to browse</div>\n    {{/if}}\n  </div>\n  \n  {{#if this.error}}\n    <div class=\"alert alert-danger mt-3 mb-0 py-2\">{{this.error}}</div>\n  {{/if}}\n  \n  {{#if (and @uploadOnly this.uploadedFiles.length)}}\n    <div class=\"mt-3\">\n      <strong>Uploaded</strong>\n      <ul class=\"list-unstyled mb-0 mt-1\">\n        {{#each this.uploadedFiles as |file|}}\n          <li class=\"uploaded-file-item\">\n            <Ui::Icon @icon=\"fa fa-check text-success\" />\n            {{file.name}}\n            <span class=\"text-muted small ms-1\">{{file.contentType}}</span>\n          </li>\n        {{/each}}\n      </ul>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"label\\\"],[14,0,\\\"visually-hidden\\\"],[14,\\\"for\\\",\\\"upload-files-input\\\"],[12],[1,\\\"Select files\\\"],[13],[1,\\\"\\\\n\\\"],[11,\\\"input\\\"],[24,1,\\\"upload-files-input\\\"],[24,\\\"multiple\\\",\\\"\\\"],[24,\\\"hidden\\\",\\\"\\\"],[24,4,\\\"file\\\"],[4,[38,2],[[30,0,[\\\"setFileInputRef\\\"]]],null],[4,[38,3],[\\\"change\\\",[30,0,[\\\"onFileInputChange\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[11,0],[16,0,[29,[\\\"upload-drop-zone \\\",[52,[30,0,[\\\"isDragOver\\\"]],\\\"drag-over\\\"]]]],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"dragover\\\",[30,0,[\\\"onDragOver\\\"]]],null],[4,[38,3],[\\\"dragleave\\\",[30,0,[\\\"onDragLeave\\\"]]],null],[4,[38,3],[\\\"drop\\\",[30,0,[\\\"onDrop\\\"]]],null],[4,[38,3],[\\\"click\\\",[30,0,[\\\"triggerFileInput\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isUploading\\\"]],[[[1,\\\"    \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin fa-2x\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"mt-2\\\"],[12],[1,\\\"Uploading...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-cloud-upload fa-2x\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"mt-2\\\"],[12],[1,\\\"Drag & drop files here or click to browse\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"error\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"alert alert-danger mt-3 mb-0 py-2\\\"],[12],[1,[30,0,[\\\"error\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,1],[30,0,[\\\"uploadedFiles\\\",\\\"length\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mt-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Uploaded\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"list-unstyled mb-0 mt-1\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"uploadedFiles\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"uploaded-file-item\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-check text-success\\\"]],null],[1,\\\"\\\\n          \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"text-muted small ms-1\\\"],[12],[1,[30,2,[\\\"contentType\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@uploadOnly\\\",\\\"file\\\"],[\\\"label\\\",\\\"input\\\",\\\"did-insert\\\",\\\"on\\\",\\\"div\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"and\\\",\\\"strong\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/file-upload-zone.hbs\",\n    \"isStrictMode\": false\n  });\n  let FileUploadZoneComponent = _exports.default = (_class = class FileUploadZoneComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isDragOver\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isUploading\", _descriptor4, this);\n      _initializerDefineProperty(this, \"uploadedFiles\", _descriptor5, this);\n      _initializerDefineProperty(this, \"error\", _descriptor6, this);\n      _defineProperty(this, \"fileInputElement\", null);\n    }\n    setFileInputRef(element) {\n      this.fileInputElement = element;\n    }\n    onFileInputChange(event) {\n      const files = Array.from(event.target.files);\n      if (!files?.length) return;\n      this.uploadedFiles = [];\n      this._uploadFiles(files);\n      event.target.value = '';\n    }\n    triggerFileInput() {\n      this.fileInputElement?.click();\n    }\n    onDragOver(event) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.isDragOver = true;\n    }\n    onDragLeave(event) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.isDragOver = false;\n    }\n    onDrop(event) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.isDragOver = false;\n      const files = event.dataTransfer?.files;\n      if (!files?.length) return;\n      this.uploadedFiles = [];\n      this._uploadFiles(Array.from(files));\n    }\n    async _uploadFiles(files) {\n      this.isUploading = true;\n      this.error = null;\n      try {\n        let conversationId = this.args.conversationId;\n        if (!conversationId) {\n          await this.aiAgent.createEmptyConversation();\n          conversationId = this.aiAgent.activeConversationId;\n        }\n        const uploadPromises = files.map(file => this.api.conversations.uploadAttachment(conversationId, file));\n        const results = await Promise.all(uploadPromises);\n        const allNewAttachments = results.flatMap(result => _.isArray(result) ? result : [result]);\n        this.uploadedFiles = [...this.uploadedFiles, ...allNewAttachments];\n        if (this.aiAgent.activeConversationId === conversationId) {\n          if (!this.aiAgent.activeConversation) {\n            this.aiAgent.activeConversation = {\n              id: conversationId,\n              browserSessions: [],\n              attachments: []\n            };\n          }\n          const attachments = [...(this.aiAgent.activeConversation.attachments || []), ...allNewAttachments];\n          this.aiAgent.activeConversation = {\n            ...this.aiAgent.activeConversation,\n            attachments\n          };\n        }\n      } catch (error) {\n        this.error = 'Failed to upload file. Please try again.';\n        console.error('Failed to upload attachment:', error);\n      } finally {\n        this.isUploading = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isDragOver\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isUploading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"uploadedFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"error\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setFileInputRef\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setFileInputRef\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFileInputChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFileInputChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"triggerFileInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"triggerFileInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDragOver\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDragOver\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDragLeave\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDragLeave\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDrop\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDrop\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FileUploadZoneComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/settings-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/mcp-server-url\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _environment, _mcpServerUrl, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/mcp-server-url\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@onClose}}\n    @title=\"Agent Settings\"\n    class=\"ai-agent-settings-modal\"\n  >\n    <div class=\"d-flex align-items-center justify-content-between mb-1\">\n      <h6 class=\"fw-medium mb-0\">MCP Server</h6>\n    </div>\n    <p class=\"text-muted small mb-2\">Connect an MCP client with this server URL. The client will handle OAuth authentication.</p>\n  \n    <div class=\"d-flex align-items-center gap-2 mb-2\">\n      <pre id=\"mcpUrlCopySourceSettings\" class=\"flex-grow-1 p-2 bg-light rounded small text-break mb-0\"><code>{{this.mcpDisplayUrl}}</code></pre>\n      <Ui::CopyText @target=\"#mcpUrlCopySourceSettings\" @title=\"Copy URL\" @trigger=\"click\" class=\"btn-sm\" />\n    </div>\n  \n    <hr class=\"my-3\" />\n  \n    <h6 class=\"fw-medium mb-3\">AI Settings</h6>\n    <AiSettingsForm\n      @useMyKeys={{this.aiUseMyKeys}}\n      @openaiKey={{this.aiOpenaiKey}}\n      @baseUrlCustom={{this.aiOpenaiBaseUrlCustom}}\n      @baseUrl={{this.aiOpenaiBaseUrl}}\n      @systemMessage={{this.aiSystemMessage}}\n      @onToggleUseMyKeys={{this.toggleAiUseMyKeys}}\n      @onSetBaseUrlCustom={{this.setAiOpenaiBaseUrlCustom}}\n      @onUpdateSystemMessage={{this.updateAiSystemMessage}}\n      @onSave={{this.saveAiSettings}}\n      @isSaving={{this.isSavingAiSettings}}\n    />\n  \n    <hr class=\"my-3\" />\n  \n    <h6 class=\"fw-medium mb-3\">Auto-Approved Tools</h6>\n  \n    <div class=\"auto-approved-tools-list mb-2\">\n      <label class=\"d-flex align-items-center justify-content-between py-2 border-bottom\">\n        <div>\n          <div class=\"fw-medium\">All Tools</div>\n          <div class=\"text-muted small\">Automatically approve every tool call.</div>\n        </div>\n        <Input\n          @type=\"checkbox\"\n          @checked={{this.allToolsAutoApproved}}\n          class=\"form-check-input ms-3\"\n          {{on \"change\" this.toggleAllTools}}\n        />\n      </label>\n    </div>\n  \n    {{#unless this.allToolsAutoApproved}}\n      {{#if this.tools.length}}\n        <div class=\"auto-approved-tools-list\">\n          {{#each this.tools as |tool|}}\n            <div class=\"d-flex align-items-center justify-content-between py-2 border-bottom\">\n              <div>\n                <div class=\"fw-medium\">{{camel-to-title tool.name}}</div>\n                {{#if tool.callDescription}}\n                  <div class=\"text-muted small\">{{tool.callDescription}}</div>\n                {{/if}}\n              </div>\n              <button type=\"button\" class=\"btn btn-link btn-sm text-danger p-0\" title=\"Remove\" {{on \"click\" (fn this.removeTool tool.name)}}>\n                <Ui::Icon @icon=\"fa-trash\" />\n              </button>\n            </div>\n          {{/each}}\n        </div>\n      {{else}}\n        <div class=\"text-muted small\">No individual auto-approved tools. Click \"Always Approve\" on a tool call to add one.</div>\n      {{/if}}\n    {{/unless}}\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"ai-agent-settings-modal\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\"],[true,[30,1],\\\"Agent Settings\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between mb-1\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h6\\\"],[14,0,\\\"fw-medium mb-0\\\"],[12],[1,\\\"MCP Server\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,2],[14,0,\\\"text-muted small mb-2\\\"],[12],[1,\\\"Connect an MCP client with this server URL. The client will handle OAuth authentication.\\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2 mb-2\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"pre\\\"],[14,1,\\\"mcpUrlCopySourceSettings\\\"],[14,0,\\\"flex-grow-1 p-2 bg-light rounded small text-break mb-0\\\"],[12],[10,\\\"code\\\"],[12],[1,[30,0,[\\\"mcpDisplayUrl\\\"]]],[13],[13],[1,\\\"\\\\n    \\\"],[8,[39,6],[[24,0,\\\"btn-sm\\\"]],[[\\\"@target\\\",\\\"@title\\\",\\\"@trigger\\\"],[\\\"#mcpUrlCopySourceSettings\\\",\\\"Copy URL\\\",\\\"click\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"hr\\\"],[14,0,\\\"my-3\\\"],[12],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"h6\\\"],[14,0,\\\"fw-medium mb-3\\\"],[12],[1,\\\"AI Settings\\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,8],null,[[\\\"@useMyKeys\\\",\\\"@openaiKey\\\",\\\"@baseUrlCustom\\\",\\\"@baseUrl\\\",\\\"@systemMessage\\\",\\\"@onToggleUseMyKeys\\\",\\\"@onSetBaseUrlCustom\\\",\\\"@onUpdateSystemMessage\\\",\\\"@onSave\\\",\\\"@isSaving\\\"],[[30,0,[\\\"aiUseMyKeys\\\"]],[30,0,[\\\"aiOpenaiKey\\\"]],[30,0,[\\\"aiOpenaiBaseUrlCustom\\\"]],[30,0,[\\\"aiOpenaiBaseUrl\\\"]],[30,0,[\\\"aiSystemMessage\\\"]],[30,0,[\\\"toggleAiUseMyKeys\\\"]],[30,0,[\\\"setAiOpenaiBaseUrlCustom\\\"]],[30,0,[\\\"updateAiSystemMessage\\\"]],[30,0,[\\\"saveAiSettings\\\"]],[30,0,[\\\"isSavingAiSettings\\\"]]]],null],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"hr\\\"],[14,0,\\\"my-3\\\"],[12],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"h6\\\"],[14,0,\\\"fw-medium mb-3\\\"],[12],[1,\\\"Auto-Approved Tools\\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"auto-approved-tools-list mb-2\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"d-flex align-items-center justify-content-between py-2 border-bottom\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"fw-medium\\\"],[12],[1,\\\"All Tools\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"Automatically approve every tool call.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,10],[[24,0,\\\"form-check-input ms-3\\\"],[4,[38,11],[\\\"change\\\",[30,0,[\\\"toggleAllTools\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"allToolsAutoApproved\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"allToolsAutoApproved\\\"]]],[[[41,[30,0,[\\\"tools\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"auto-approved-tools-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,15],[[28,[37,15],[[30,0,[\\\"tools\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between py-2 border-bottom\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"fw-medium\\\"],[12],[1,[28,[35,16],[[30,2,[\\\"name\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"callDescription\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,[30,2,[\\\"callDescription\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link btn-sm text-danger p-0\\\"],[24,\\\"title\\\",\\\"Remove\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[28,[37,18],[[30,0,[\\\"removeTool\\\"]],[30,2,[\\\"name\\\"]]],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,19],null,[[\\\"@icon\\\"],[\\\"fa-trash\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"No individual auto-approved tools. Click \\\\\\\"Always Approve\\\\\\\" on a tool call to add one.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onClose\\\",\\\"tool\\\"],[\\\"ui/modal-wrapper\\\",\\\"div\\\",\\\"h6\\\",\\\"p\\\",\\\"pre\\\",\\\"code\\\",\\\"ui/copy-text\\\",\\\"hr\\\",\\\"ai-settings-form\\\",\\\"label\\\",\\\"input\\\",\\\"on\\\",\\\"unless\\\",\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"camel-to-title\\\",\\\"button\\\",\\\"fn\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/settings-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let SettingsModalComponent = _exports.default = (_class = class SettingsModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor, this);\n      _initializerDefineProperty(this, \"tools\", _descriptor2, this);\n      _initializerDefineProperty(this, \"allToolsAutoApproved\", _descriptor3, this);\n      // AI Settings\n      _initializerDefineProperty(this, \"aiUseMyKeys\", _descriptor4, this);\n      _initializerDefineProperty(this, \"aiOpenaiKey\", _descriptor5, this);\n      _initializerDefineProperty(this, \"aiOpenaiBaseUrlCustom\", _descriptor6, this);\n      _initializerDefineProperty(this, \"aiOpenaiBaseUrl\", _descriptor7, this);\n      _initializerDefineProperty(this, \"aiSystemMessage\", _descriptor8, this);\n      _initializerDefineProperty(this, \"isSavingAiSettings\", _descriptor9, this);\n      this.tools = this.aiAgent.getSpecificAutoApprovedTools();\n      this.allToolsAutoApproved = this.aiAgent.isAllToolsAutoApproved();\n      this.loadAiSettings();\n    }\n    get mcpDisplayUrl() {\n      return (0, _mcpServerUrl.mcpServerUrl)();\n    }\n    loadAiSettings() {\n      const aiSettings = _environment.config.currentUser.org?.settings?.ai || {};\n      this.aiUseMyKeys = aiSettings.useMyKeys === true || aiSettings.useMyKeys === 'true';\n      this.aiOpenaiKey = aiSettings.keys?.openai || '';\n      this.aiOpenaiBaseUrl = aiSettings.openAiBaseUrl || '';\n      this.aiOpenaiBaseUrlCustom = !!aiSettings.openAiBaseUrl;\n      this.aiSystemMessage = aiSettings.systemMessage || '';\n    }\n    toggleAiUseMyKeys() {\n      this.aiUseMyKeys = !this.aiUseMyKeys;\n      if (!this.aiUseMyKeys) {\n        this.aiOpenaiKey = '';\n        this.aiOpenaiBaseUrlCustom = false;\n        this.aiOpenaiBaseUrl = '';\n      }\n    }\n    setAiOpenaiBaseUrlCustom(isCustom) {\n      this.aiOpenaiBaseUrlCustom = isCustom;\n      if (!isCustom) {\n        this.aiOpenaiBaseUrl = '';\n      }\n    }\n    updateAiSystemMessage(value) {\n      this.aiSystemMessage = value;\n    }\n    async saveAiSettings() {\n      this.isSavingAiSettings = true;\n      try {\n        const org = _environment.config.currentUser.org;\n        const settings = org.settings || {};\n        settings.ai = {\n          useMyKeys: this.aiUseMyKeys,\n          keys: {\n            openai: this.aiOpenaiKey\n          },\n          ...(this.aiOpenaiBaseUrlCustom && this.aiOpenaiBaseUrl ? {\n            openAiBaseUrl: this.aiOpenaiBaseUrl\n          } : {}),\n          ...(this.aiSystemMessage ? {\n            systemMessage: this.aiSystemMessage\n          } : {})\n        };\n        await _server.default.updateOrgSettings(org.id, settings);\n        org.settings = settings;\n      } catch (e) {\n        console.error('Failed to save AI settings:', e);\n      } finally {\n        this.isSavingAiSettings = false;\n      }\n    }\n    removeTool(name) {\n      this.aiAgent.removeAutoApprovedTool(name);\n      this.tools = this.aiAgent.getSpecificAutoApprovedTools();\n    }\n    toggleAllTools(event) {\n      this.allToolsAutoApproved = event.target.checked;\n      if (this.allToolsAutoApproved) {\n        this.aiAgent.addAllToolsAutoApproved();\n      } else {\n        this.aiAgent.removeAllToolsAutoApproved();\n      }\n      this.tools = this.aiAgent.getSpecificAutoApprovedTools();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"tools\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"allToolsAutoApproved\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"aiUseMyKeys\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"aiOpenaiKey\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"aiOpenaiBaseUrlCustom\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"aiOpenaiBaseUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"aiSystemMessage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"isSavingAiSettings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleAiUseMyKeys\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleAiUseMyKeys\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setAiOpenaiBaseUrlCustom\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setAiOpenaiBaseUrlCustom\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAiSystemMessage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAiSystemMessage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAiSettings\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAiSettings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeTool\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeTool\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleAllTools\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleAllTools\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SettingsModalComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/summarize-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"tool-call-panel agent-work-item mb-2\">\n    <div class=\"agent-work-row-wrap\">\n      <button\n        type=\"button\"\n        class=\"agent-work-row\"\n        {{on \"click\" this.toggle}}\n      >\n        <Ui::Icon @icon=\"fa fa-check text-success\" />\n        <span class=\"agent-work-row-text\">Summarized Conversation History</span>\n        <span class=\"work-row-chevron\">&gt;</span>\n      </button>\n    </div>\n  \n    {{#if this.isExpanded}}\n      <div class=\"agent-work-details\">\n        <div class=\"text-muted small\">The conversation history was summarized for future AI interactions to stay below the maximum context size of this model.</div>\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"tool-call-panel agent-work-item mb-2\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"agent-work-row-wrap\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"agent-work-row\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"toggle\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-check text-success\\\"]],null],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"agent-work-row-text\\\"],[12],[1,\\\"Summarized Conversation History\\\"],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"work-row-chevron\\\"],[12],[1,\\\">\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isExpanded\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"agent-work-details\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"The conversation history was summarized for future AI interactions to stay below the maximum context size of this model.\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/summarize-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let SummarizePanelComponent = _exports.default = (_class = class SummarizePanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isExpanded\", _descriptor, this);\n    }\n    toggle() {\n      this.isExpanded = !this.isExpanded;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggle\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SummarizePanelComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/tool-call-files-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@onClose}}\n    @title={{this.modalTitle}}\n    class=\"tool-call-files-modal\"\n    @size=\"lg\"\n  >\n    <div class=\"d-flex align-items-center justify-content-between mb-3\">\n      <div class=\"flex-grow-1 me-3\">\n        <Ui::PSelect\n          @options={{this.fileOptions}}\n          @selected={{this.selectedOption}}\n          @onChange={{this.onFileChange}}\n          @searchEnabled={{false}}\n          as |option|\n        >\n          <Ui::Icon @icon={{if option.isOutput \"fa fa-download\" \"fa fa-upload\"}} /> {{option.name}}\n        </Ui::PSelect>\n      </div>\n      {{#unless this.isImage}}\n        <div class=\"d-flex gap-2\">\n          <Ui::CopyText @text={{this.fileContent}} @title=\"Copy\" @placement=\"top\" class=\"btn-outline-secondary btn-sm\" />\n          <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" title=\"Download\" {{on \"click\" this.downloadFile}} disabled={{this.isLoading}}>\n            <Ui::Icon @icon=\"fa fa-download\" />\n          </button>\n        </div>\n      {{/unless}}\n    </div>\n  \n    {{#if this.isImage}}\n      <div class=\"text-center p-3\">\n        <img src={{this.imageUrl}} alt={{this.selectedFile}} class=\"img-fluid\" />\n      </div>\n    {{else if this.isLoading}}\n      <div class=\"text-center p-5 text-muted\">\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Loading file...\n      </div>\n    {{else if this.error}}\n      <div class=\"alert alert-danger\">{{this.error}}</div>\n    {{else}}\n      <Ui::AceEditor\n        @id={{this.editorId}}\n        @code={{this.fileContent}}\n        @mode={{this.editorMode}}\n        @readonly={{true}}\n        @wrap={{true}}\n        @height={{400}}\n      />\n    {{/if}}\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"tool-call-files-modal\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],[30,0,[\\\"modalTitle\\\"]],\\\"lg\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between mb-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"flex-grow-1 me-3\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\"],[[30,0,[\\\"fileOptions\\\"]],[30,0,[\\\"selectedOption\\\"]],[30,0,[\\\"onFileChange\\\"]],false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[[52,[30,2,[\\\"isOutput\\\"]],\\\"fa fa-download\\\",\\\"fa fa-upload\\\"]]],null],[1,\\\" \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[2]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isImage\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],[[24,0,\\\"btn-outline-secondary btn-sm\\\"]],[[\\\"@text\\\",\\\"@title\\\",\\\"@placement\\\"],[[30,0,[\\\"fileContent\\\"]],\\\"Copy\\\",\\\"top\\\"]],null],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-secondary btn-sm\\\"],[24,\\\"title\\\",\\\"Download\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isLoading\\\"]]],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"downloadFile\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isImage\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-center p-3\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[30,0,[\\\"imageUrl\\\"]]],[15,\\\"alt\\\",[30,0,[\\\"selectedFile\\\"]]],[14,0,\\\"img-fluid\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-center p-5 text-muted\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading file...\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"error\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"alert alert-danger\\\"],[12],[1,[30,0,[\\\"error\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[8,[39,10],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@mode\\\",\\\"@readonly\\\",\\\"@wrap\\\",\\\"@height\\\"],[[30,0,[\\\"editorId\\\"]],[30,0,[\\\"fileContent\\\"]],[30,0,[\\\"editorMode\\\"]],true,true,400]],null],[1,\\\"\\\\n  \\\"]],[]]]],[]]]],[]]]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@onClose\\\",\\\"option\\\"],[\\\"ui/modal-wrapper\\\",\\\"div\\\",\\\"ui/p-select\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"unless\\\",\\\"ui/copy-text\\\",\\\"button\\\",\\\"on\\\",\\\"img\\\",\\\"ui/ace-editor\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/tool-call-files-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  const IMAGE_EXTENSIONS = ['png', 'gif', 'jpg', 'jpeg'];\n  const CONTENT_TYPE_MODE_MAP = {\n    'application/javascript': 'ace/mode/javascript',\n    'text/javascript': 'ace/mode/javascript',\n    'application/json': 'ace/mode/json',\n    'text/html': 'ace/mode/html',\n    'text/css': 'ace/mode/css',\n    'text/xml': 'ace/mode/xml',\n    'application/xml': 'ace/mode/xml',\n    'text/yaml': 'ace/mode/yaml',\n    'application/x-yaml': 'ace/mode/yaml',\n    'text/markdown': 'ace/mode/markdown',\n    'text/x-python': 'ace/mode/python',\n    'text/x-java': 'ace/mode/java',\n    'text/x-typescript': 'ace/mode/typescript',\n    'text/x-sh': 'ace/mode/sh',\n    'text/plain': 'ace/mode/text'\n  };\n  function getModeForFile(fileName) {\n    try {\n      const modelist = ace.require('ace/ext/modelist');\n      if (modelist) return modelist.getModeForPath(fileName).mode;\n    } catch (e) {/* fallback below */}\n    return null;\n  }\n  let ToolCallFilesModalComponent = _exports.default = (_class = class ToolCallFilesModalComponent extends _component2.default {\n    get fileOptions() {\n      return this.args.files.map(f => {\n        if (typeof f === 'string') return {\n          name: f,\n          isOutput: false\n        };\n        return {\n          name: f.name,\n          isOutput: f.isOutput || false\n        };\n      });\n    }\n    get selectedOption() {\n      return this.fileOptions.find(o => o.name === this.selectedFile);\n    }\n    get editorMode() {\n      if (this.contentType) {\n        const baseType = this.contentType.split(';')[0].trim();\n        if (CONTENT_TYPE_MODE_MAP[baseType]) return CONTENT_TYPE_MODE_MAP[baseType];\n      }\n      return getModeForFile(this.selectedFile) || 'ace/mode/text';\n    }\n    get isImage() {\n      if (!this.selectedFile) return false;\n      const ext = this.selectedFile.split('.').pop().toLowerCase();\n      return IMAGE_EXTENSIONS.includes(ext);\n    }\n    get imageUrl() {\n      if (!this.isImage || !this.args.historyEntryId || !this.selectedFile) return '';\n      return _lib.default.toUrl(`/conversation-history-entries/${this.args.historyEntryId}/files?name=${encodeURIComponent(this.selectedFile)}`);\n    }\n    get modalTitle() {\n      return `Files for ${this.args.callDescription || 'Tool Call'}`;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedFile\", _descriptor2, this);\n      _initializerDefineProperty(this, \"fileContent\", _descriptor3, this);\n      _initializerDefineProperty(this, \"contentType\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor5, this);\n      _initializerDefineProperty(this, \"error\", _descriptor6, this);\n      _defineProperty(this, \"editorId\", `tool-file-editor-${Date.now()}`);\n      this.selectedFile = this.args.selectedFileName;\n      if (this.selectedFile && !this.isImage) this.loadFile(this.selectedFile);\n    }\n    onFileChange(option) {\n      if (option.name === this.selectedFile) return;\n      this.selectedFile = option.name;\n      if (!this.isImage) this.loadFile(option.name);\n    }\n    downloadFile() {\n      saveAs(new Blob([this.fileContent], {\n        type: this.contentType || 'text/plain'\n      }), this.selectedFile || 'download.txt');\n    }\n    loadFile(fileName) {\n      if (!fileName) {\n        this.error = 'No file selected';\n        return;\n      }\n      const cached = this.args.fileContents?.[fileName];\n      if (cached) {\n        this.fileContent = cached;\n        this.contentType = '';\n        this.isLoading = false;\n        this.error = null;\n        return;\n      }\n      if (!this.args.historyEntryId) {\n        this.error = 'File content not available';\n        return;\n      }\n      this.isLoading = true;\n      this.error = null;\n      this.fileContent = '';\n      this.contentType = '';\n      this.api.conversations.getFile(this.args.historyEntryId, fileName).then((data, _status, xhr) => {\n        if (this.isDestroying || this.isDestroyed) return;\n        this.fileContent = data;\n        this.contentType = xhr.getResponseHeader('Content-Type') || '';\n        this.isLoading = false;\n      }, () => {\n        if (this.isDestroying || this.isDestroyed) return;\n        this.error = 'Failed to load file content';\n        this.isLoading = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"fileContent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"contentType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"error\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onFileChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFileChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadFile\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ToolCallFilesModalComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/tool-call-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.tool.requiresApproval}}\n    <div class=\"tool-call-panel tool-approval-panel border rounded mb-3\">\n      <div class=\"tool-header p-5 border-bottom bg-light d-flex align-items-center justify-content-between\">\n        <span class=\"fw-medium\">Run Command: {{this.tool.callDescription}}</span>\n        {{#if this.hasFiles}}\n          <span role=\"button\" class=\"tool-files-count\" {{on \"click\" (fn this.openFilesModal null)}}>{{this.fileCount}} {{print-plural \"file\" this.fileCount}}</span>\n        {{/if}}\n      </div>\n      <div class=\"tool-body p-10\">\n        {{#if this.parsedParamsList.length}}\n          <div class=\"tool-params mb-3\" data-bs-toggle={{if this.fullParamsTooltip \"tooltip\"}} data-bs-custom-class=\"tooltip-breakword\" title=\"{{this.fullParamsTooltip}}\">\n            {{#each this.parsedParamsList as |param|}}\n              {{#if param.isHtml}}\n                <div role=\"button\" {{on \"click\" this.onParamClick}}>{{html-safe param.html}}</div>\n              {{else}}\n                <div>{{param.text}}</div>\n              {{/if}}\n            {{/each}}\n          </div>\n        {{/if}}\n        {{#if this.aiAgent.isReadOnly}}\n          <div class=\"text-muted small\">Waiting for approval from another participant...</div>\n        {{else}}\n          <div class=\"approval-buttons d-flex gap-2 justify-content-end\">\n            <button type=\"button\" class=\"btn btn-outline-success btn-sm d-flex align-items-center gap-1\" {{on \"click\" this.approve}}>\n              <Ui::Icon @icon=\"fa-check-circle\" /> Approve\n            </button>\n            <button type=\"button\" class=\"btn btn-outline-primary btn-sm d-flex align-items-center gap-1\" {{on \"click\" this.alwaysApprove}}>\n              <Ui::Icon @icon=\"fa-shield\" /> Always Approve\n            </button>\n            <button type=\"button\" class=\"btn btn-outline-danger btn-sm d-flex align-items-center gap-1\" {{on \"click\" this.reject}}>\n              <Ui::Icon @icon=\"fa-times-circle\" /> Reject\n            </button>\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  {{else}}\n    <div class=\"tool-call-panel agent-work-item mb-2\">\n      <div class=\"agent-work-row-wrap\">\n        <button\n          type=\"button\"\n          class=\"agent-work-row\"\n          {{on \"click\" this.toggle}}\n        >\n          <Ui::Icon @icon={{this.statusIcon}} />\n          <span class=\"agent-work-row-text\">\n            {{#if (eq this.tool.status \"success\")}}\n              {{if (eq @itemType \"WebSearch\") \"Web search -\" \"Ran Command:\"}} {{this.tool.callDescription}}\n              {{#if this.tool.durationMs}}\n                <span class=\"timing\">({{this.formattedDuration}})</span>\n              {{/if}}\n            {{else if (eq this.tool.status \"denied\")}}\n              Denied: {{this.tool.callDescription}}\n            {{else if (eq this.tool.status \"failed\")}}\n              Failed: {{this.tool.callDescription}}\n              {{#if this.tool.durationMs}}\n                <span class=\"timing\">({{this.formattedDuration}})</span>\n              {{/if}}\n            {{else}}\n              {{this.tool.callDescription}}\n            {{/if}}\n          </span>\n          <span class=\"work-row-chevron\">&gt;</span>\n        </button>\n        {{#if this.hasFiles}}\n          <span role=\"button\" class=\"tool-files-count\" {{on \"click\" (fn this.openFilesModal null)}}>{{this.fileCount}} {{print-plural \"file\" this.fileCount}}</span>\n        {{/if}}\n      </div>\n      {{#if this.isExpanded}}\n        <div class=\"agent-work-details\">\n          {{#if (eq this.tool.status \"failed\")}}\n            <div class=\"text-danger mb-2\">{{this.tool.message}}</div>\n          {{/if}}\n          {{#if (eq this.tool.status \"denied\")}}\n            <div class=\"text-danger mb-2\">{{this.tool.reason}}</div>\n          {{/if}}\n          {{#if this.parsedParamsList.length}}\n            <div data-bs-toggle={{if this.fullParamsTooltip \"tooltip\"}} data-bs-custom-class=\"tooltip-breakword\" title=\"{{this.fullParamsTooltip}}\">\n              {{#each this.parsedParamsList as |param|}}\n                {{#if param.isHtml}}\n                  <div role=\"button\" {{on \"click\" this.onParamClick}}>{{html-safe param.html}}</div>\n                {{else}}\n                  <div>{{param.text}}</div>\n                {{/if}}\n              {{/each}}\n            </div>\n          {{/if}}\n        </div>\n      {{/if}}\n    </div>\n  {{/if}}\n  \n  {{#if this.showFilesModal}}\n    <AiAgents::ToolCallFilesModal\n      @files={{this.allFiles}}\n      @selectedFileName={{this.selectedFileName}}\n      @historyEntryId={{this.tool.historyEntryId}}\n      @callDescription={{this.tool.callDescription}}\n      @onClose={{this.closeFilesModal}}\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"tool\\\",\\\"requiresApproval\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"tool-call-panel tool-approval-panel border rounded mb-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"tool-header p-5 border-bottom bg-light d-flex align-items-center justify-content-between\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"fw-medium\\\"],[12],[1,\\\"Run Command: \\\"],[1,[30,0,[\\\"tool\\\",\\\"callDescription\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasFiles\\\"]],[[[1,\\\"        \\\"],[11,1],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"tool-files-count\\\"],[4,[38,3],[\\\"click\\\",[28,[37,4],[[30,0,[\\\"openFilesModal\\\"]],null],null]],null],[12],[1,[30,0,[\\\"fileCount\\\"]]],[1,\\\" \\\"],[1,[28,[35,5],[\\\"file\\\",[30,0,[\\\"fileCount\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"tool-body p-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"parsedParamsList\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"tool-params mb-3\\\"],[15,\\\"data-bs-toggle\\\",[52,[30,0,[\\\"fullParamsTooltip\\\"]],\\\"tooltip\\\"]],[14,\\\"data-bs-custom-class\\\",\\\"tooltip-breakword\\\"],[15,\\\"title\\\",[29,[[30,0,[\\\"fullParamsTooltip\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"parsedParamsList\\\"]]],null]],null],null,[[[41,[30,1,[\\\"isHtml\\\"]],[[[1,\\\"              \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"onParamClick\\\"]]],null],[12],[1,[28,[35,8],[[30,1,[\\\"html\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[12],[1,[30,1,[\\\"text\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]]],[1]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"aiAgent\\\",\\\"isReadOnly\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"Waiting for approval from another participant...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"approval-buttons d-flex gap-2 justify-content-end\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-success btn-sm d-flex align-items-center gap-1\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"approve\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa-check-circle\\\"]],null],[1,\\\" Approve\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-primary btn-sm d-flex align-items-center gap-1\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"alwaysApprove\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa-shield\\\"]],null],[1,\\\" Always Approve\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-danger btn-sm d-flex align-items-center gap-1\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"reject\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa-times-circle\\\"]],null],[1,\\\" Reject\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"tool-call-panel agent-work-item mb-2\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"agent-work-row-wrap\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"agent-work-row\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"toggle\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[[30,0,[\\\"statusIcon\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"agent-work-row-text\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"tool\\\",\\\"status\\\"]],\\\"success\\\"],null],[[[1,\\\"            \\\"],[1,[52,[28,[37,11],[[30,2],\\\"WebSearch\\\"],null],\\\"Web search -\\\",\\\"Ran Command:\\\"]],[1,\\\" \\\"],[1,[30,0,[\\\"tool\\\",\\\"callDescription\\\"]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"tool\\\",\\\"durationMs\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"timing\\\"],[12],[1,\\\"(\\\"],[1,[30,0,[\\\"formattedDuration\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[28,[37,11],[[30,0,[\\\"tool\\\",\\\"status\\\"]],\\\"denied\\\"],null],[[[1,\\\"            Denied: \\\"],[1,[30,0,[\\\"tool\\\",\\\"callDescription\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,11],[[30,0,[\\\"tool\\\",\\\"status\\\"]],\\\"failed\\\"],null],[[[1,\\\"            Failed: \\\"],[1,[30,0,[\\\"tool\\\",\\\"callDescription\\\"]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"tool\\\",\\\"durationMs\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"timing\\\"],[12],[1,\\\"(\\\"],[1,[30,0,[\\\"formattedDuration\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"            \\\"],[1,[30,0,[\\\"tool\\\",\\\"callDescription\\\"]]],[1,\\\"\\\\n          \\\"]],[]]]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"work-row-chevron\\\"],[12],[1,\\\">\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasFiles\\\"]],[[[1,\\\"        \\\"],[11,1],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"tool-files-count\\\"],[4,[38,3],[\\\"click\\\",[28,[37,4],[[30,0,[\\\"openFilesModal\\\"]],null],null]],null],[12],[1,[30,0,[\\\"fileCount\\\"]]],[1,\\\" \\\"],[1,[28,[35,5],[\\\"file\\\",[30,0,[\\\"fileCount\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isExpanded\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"agent-work-details\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"tool\\\",\\\"status\\\"]],\\\"failed\\\"],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-danger mb-2\\\"],[12],[1,[30,0,[\\\"tool\\\",\\\"message\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,11],[[30,0,[\\\"tool\\\",\\\"status\\\"]],\\\"denied\\\"],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-danger mb-2\\\"],[12],[1,[30,0,[\\\"tool\\\",\\\"reason\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"parsedParamsList\\\",\\\"length\\\"]],[[[1,\\\"          \\\"],[10,0],[15,\\\"data-bs-toggle\\\",[52,[30,0,[\\\"fullParamsTooltip\\\"]],\\\"tooltip\\\"]],[14,\\\"data-bs-custom-class\\\",\\\"tooltip-breakword\\\"],[15,\\\"title\\\",[29,[[30,0,[\\\"fullParamsTooltip\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"parsedParamsList\\\"]]],null]],null],null,[[[41,[30,3,[\\\"isHtml\\\"]],[[[1,\\\"                \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"onParamClick\\\"]]],null],[12],[1,[28,[35,8],[[30,3,[\\\"html\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[12],[1,[30,3,[\\\"text\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showFilesModal\\\"]],[[[1,\\\"  \\\"],[8,[39,12],null,[[\\\"@files\\\",\\\"@selectedFileName\\\",\\\"@historyEntryId\\\",\\\"@callDescription\\\",\\\"@onClose\\\"],[[30,0,[\\\"allFiles\\\"]],[30,0,[\\\"selectedFileName\\\"]],[30,0,[\\\"tool\\\",\\\"historyEntryId\\\"]],[30,0,[\\\"tool\\\",\\\"callDescription\\\"]],[30,0,[\\\"closeFilesModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"param\\\",\\\"@itemType\\\",\\\"param\\\"],[\\\"if\\\",\\\"div\\\",\\\"span\\\",\\\"on\\\",\\\"fn\\\",\\\"print-plural\\\",\\\"each\\\",\\\"-track-array\\\",\\\"html-safe\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"eq\\\",\\\"ai-agents/tool-call-files-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/tool-call-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  const FILENAME_PATTERN = /__filename__\\(([^)]+)\\)/g;\n  let ToolCallPanelComponent = _exports.default = (_class = class ToolCallPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor, this);\n      _initializerDefineProperty(this, \"isExpanded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showFilesModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedFileName\", _descriptor4, this);\n    }\n    get tool() {\n      // Depend on _toolCallsDirty to invalidate cache when tools change\n      this.aiAgent._toolCallsDirty;\n      return this.aiAgent.resolveToolForDisplay(this.args.tool);\n    }\n    get statusIcon() {\n      const status = this.tool?.status;\n      switch (status) {\n        case 'success':\n          return 'fa-check text-success';\n        case 'denied':\n          return 'fa-minus text-warning';\n        case 'failed':\n          return 'fa-times text-danger';\n        case 'pending':\n          return 'fa-clock text-muted';\n        default:\n          return 'fa-spinner fa-spin';\n      }\n    }\n    get fileCount() {\n      return this.allFiles?.length || 0;\n    }\n    get allFiles() {\n      const tool = this.tool;\n      const files = tool.files || [];\n      if (!files.length && tool?.paramsDescription) {\n        let match;\n        const re = new RegExp(FILENAME_PATTERN.source, 'g');\n        while (match = re.exec(tool.paramsDescription)) {\n          files.push(match[1]);\n        }\n      }\n      return files;\n    }\n    get hasFiles() {\n      return this.fileCount > 0;\n    }\n    _parseArguments(tool) {\n      if (!tool?.arguments) return null;\n      try {\n        const parsed = JSON.parse(tool.arguments);\n        const obj = parsed.body || parsed;\n        return Object.entries(obj).map(([key, val]) => {\n          const display = typeof val === 'string' ? val : JSON.stringify(val);\n          return `${key}: ${display}`;\n        });\n      } catch {\n        return [tool.arguments];\n      }\n    }\n    get fullParamsTooltip() {\n      if (!this.tool?.paramsDescription?.includes('...')) return null;\n      return this._parseArguments(this.tool)?.join('\\n') || null;\n    }\n    get paramsList() {\n      const tool = this.tool;\n      if (tool?.paramsDescription) {\n        return tool.paramsDescription.split(';').map(p => p.trim()).filter(Boolean);\n      }\n      return this._parseArguments(tool) || [];\n    }\n    get parsedParamsList() {\n      return this.paramsList.map(param => {\n        if (!param.includes('__filename__')) return {\n          text: param,\n          isHtml: false\n        };\n        const html = param.replace(FILENAME_PATTERN, (_, name) => `<span role=\"button\" class=\"tool-file-link\" data-filename=\"${name.replace(/\"/g, '&quot;')}\">${name}</span>`);\n        return {\n          html,\n          isHtml: true\n        };\n      });\n    }\n    get formattedDuration() {\n      const ms = this.tool?.durationMs;\n      if (ms == null) return '';\n      if (ms < 1000) return `${ms}ms`;\n      return `${(ms / 1000).toFixed(2)}s`;\n    }\n    toggle() {\n      this.isExpanded = !this.isExpanded;\n    }\n    _markToolApprovalResolved() {\n      const actualTool = this.aiAgent.toolCalls.get(this.tool.callId);\n      if (actualTool) {\n        actualTool.requiresApproval = false;\n        this.aiAgent._toolCallsDirty = !this.aiAgent._toolCallsDirty;\n      }\n    }\n    approve(event) {\n      event?.stopPropagation();\n      this._markToolApprovalResolved();\n      this.aiAgent.respondToolApproval(this.tool.callId, true);\n      this.args.onAction?.();\n    }\n    reject(event) {\n      event?.stopPropagation();\n      this._markToolApprovalResolved();\n      this.aiAgent.respondToolApproval(this.tool.callId, false);\n      this.args.onAction?.();\n    }\n    alwaysApprove(event) {\n      event?.stopPropagation();\n      this._markToolApprovalResolved();\n      this.aiAgent.addAutoApprovedTool(this.tool.name, this.tool.callDescription);\n      this.aiAgent.respondToolApproval(this.tool.callId, true);\n      this.args.onAction?.();\n    }\n    openFilesModal(fileName, event) {\n      event?.preventDefault();\n      event?.stopPropagation();\n      if (!fileName) {\n        const files = this.allFiles;\n        if (files?.length) {\n          const first = files[0];\n          fileName = typeof first === 'string' ? first : first?.name;\n        }\n      }\n      this.selectedFileName = fileName;\n      this.showFilesModal = true;\n    }\n    closeFilesModal() {\n      this.showFilesModal = false;\n      this.selectedFileName = null;\n    }\n    onParamClick(event) {\n      const link = event.target.closest('.tool-file-link');\n      if (link) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.openFilesModal(link.dataset.filename);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showFilesModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedFileName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"parsedParamsList\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"parsedParamsList\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"approve\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"approve\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"reject\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"reject\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"alwaysApprove\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"alwaysApprove\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openFilesModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openFilesModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeFilesModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeFilesModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParamClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParamClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ToolCallPanelComponent);\n});","define(\"@testable/shared-ui/components/ai-agents/video-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"tool-call-panel agent-work-item mb-2\">\n    <div class=\"agent-work-row-wrap\">\n      <button\n        type=\"button\"\n        class=\"agent-work-row\"\n        {{on \"click\" this.toggle}}\n      >\n        <Ui::Icon @icon=\"fa fa-video\" />\n        <span class=\"agent-work-row-text\">Video for {{this.sessionId}}</span>\n        <span class=\"work-row-chevron\">&gt;</span>\n      </button>\n    </div>\n  \n    {{#if this.isExpanded}}\n      <div class=\"agent-work-details\">\n        {{#if this.videoUrl}}\n          <Ui::VideojsPlayer @src={{this.videoUrl}} />\n        {{else}}\n          <div class=\"text-center text-muted p-3\">No video available for this session</div>\n        {{/if}}\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"tool-call-panel agent-work-item mb-2\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"agent-work-row-wrap\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"agent-work-row\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"toggle\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-video\\\"]],null],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"agent-work-row-text\\\"],[12],[1,\\\"Video for \\\"],[1,[30,0,[\\\"sessionId\\\"]]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"work-row-chevron\\\"],[12],[1,\\\">\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isExpanded\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"agent-work-details\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videoUrl\\\"]],[[[1,\\\"        \\\"],[8,[39,6],null,[[\\\"@src\\\"],[[30,0,[\\\"videoUrl\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center text-muted p-3\\\"],[12],[1,\\\"No video available for this session\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"if\\\",\\\"ui/videojs-player\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-agents/video-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let VideoPanelComponent = _exports.default = (_class = class VideoPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor, this);\n      _initializerDefineProperty(this, \"isExpanded\", _descriptor2, this);\n    }\n    get browserSession() {\n      const item = this.args.item;\n      if (item?.video || item?.browserSessionId) {\n        const sessionId = item.browserSessionId || item.video?.browserSessionId || item.video?.sessionId;\n        const matched = this.aiAgent.browserSessions.find(s => s.browserSessionId === sessionId);\n        return matched || {\n          browserSessionId: sessionId,\n          video: item.video || null\n        };\n      }\n      const videoItems = (this.aiAgent.chatMessages || []).filter(m => m.itemType === 'Video');\n      const index = videoItems.indexOf(this.args.item);\n      const sessions = this.aiAgent.browserSessions;\n      return index >= 0 && index < sessions.length ? sessions[index] : null;\n    }\n    get sessionId() {\n      return this.browserSession?.browserSessionId || '';\n    }\n    get video() {\n      return this.browserSession?.video || null;\n    }\n    get videoUrl() {\n      return this.video?.playlistUrl || null;\n    }\n    toggle() {\n      this.isExpanded = !this.isExpanded;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggle\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideoPanelComponent);\n});","define(\"@testable/shared-ui/components/ai-settings-form\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group\">\n    <label class=\"normal\">\n      <Input @type=\"checkbox\" @checked={{@useMyKeys}} {{on \"change\" this.toggleUseMyKeys}} />\n      Use My Keys\n    </label>\n  </div>\n  \n  {{#if @useMyKeys}}\n    <div class=\"form-group\">\n      <div class=\"m-l-10\">\n        <label>OpenAI</label>\n        <Input\n          @type=\"text\"\n          @value={{@openaiKey}}\n          placeholder=\"OpenAI API Key\"\n          class=\"form-control\"\n        />\n        <div class=\"m-t-10\">\n          <label>Base URL</label>\n          <div class=\"d-flex align-items-center m-b-5\">\n            <div class=\"btn-group\" role=\"group\">\n              <button type=\"button\" class=\"btn btn-xs {{if @baseUrlCustom 'btn-default' 'btn-primary'}}\"\n                {{on \"click\" (fn this.setBaseUrlCustom false)}}>\n                Default\n              </button>\n              <button type=\"button\" class=\"btn btn-xs {{if @baseUrlCustom 'btn-primary' 'btn-default'}}\"\n                {{on \"click\" (fn this.setBaseUrlCustom true)}}>\n                Custom\n              </button>\n            </div>\n          </div>\n          {{#if @baseUrlCustom}}\n            <Input\n              @type=\"text\"\n              @value={{@baseUrl}}\n              placeholder=\"https://api.openai.com/v1\"\n              class=\"form-control\"\n            />\n          {{else}}\n            <Input\n              @type=\"text\"\n              @value=\"https://api.openai.com/v1\"\n              class=\"form-control\"\n              disabled={{true}}\n            />\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  {{/if}}\n  \n  <div class=\"form-group\">\n    <label>System Message</label>\n    <textarea\n      class=\"form-control\"\n      rows=\"3\"\n      placeholder=\"A system message to provide the AI on every interaction\"\n      value={{@systemMessage}}\n      {{on \"change\" this.updateSystemMessage}}\n    ></textarea>\n    <div class=\"text-muted small m-t-5\">A system message to provide the AI on every interaction</div>\n  </div>\n  \n  {{#if @onSave}}\n    <div class=\"m-t-10\">\n      <button type=\"button\" class=\"btn btn-primary\" {{on \"click\" this.saveSettings}} disabled={{@isSaving}}>\n        {{if @isSaving 'Saving...' 'Save AI Settings'}}\n      </button>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],[[4,[38,3],[\\\"change\\\",[30,0,[\\\"toggleUseMyKeys\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,1]]],null],[1,\\\"\\\\n    Use My Keys\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"OpenAI\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,2],[[24,\\\"placeholder\\\",\\\"OpenAI API Key\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,2]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Base URL\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex align-items-center m-b-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"btn-group\\\"],[14,\\\"role\\\",\\\"group\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-xs \\\",[52,[30,3],\\\"btn-default\\\",\\\"btn-primary\\\"]]]],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"setBaseUrlCustom\\\"]],false],null]],null],[12],[1,\\\"\\\\n              Default\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-xs \\\",[52,[30,3],\\\"btn-primary\\\",\\\"btn-default\\\"]]]],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"setBaseUrlCustom\\\"]],true],null]],null],[12],[1,\\\"\\\\n              Custom\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"          \\\"],[8,[39,2],[[24,\\\"placeholder\\\",\\\"https://api.openai.com/v1\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,4]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,2],[[24,0,\\\"form-control\\\"],[16,\\\"disabled\\\",true]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",\\\"https://api.openai.com/v1\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[1,\\\"System Message\\\"],[13],[1,\\\"\\\\n  \\\"],[11,\\\"textarea\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"3\\\"],[24,\\\"placeholder\\\",\\\"A system message to provide the AI on every interaction\\\"],[16,2,[30,5]],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateSystemMessage\\\"]]],null],[12],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"text-muted small m-t-5\\\"],[12],[1,\\\"A system message to provide the AI on every interaction\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,6],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[16,\\\"disabled\\\",[30,7]],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"saveSettings\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[1,[52,[30,7],\\\"Saving...\\\",\\\"Save AI Settings\\\"]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@useMyKeys\\\",\\\"@openaiKey\\\",\\\"@baseUrlCustom\\\",\\\"@baseUrl\\\",\\\"@systemMessage\\\",\\\"@onSave\\\",\\\"@isSaving\\\"],[\\\"div\\\",\\\"label\\\",\\\"input\\\",\\\"on\\\",\\\"if\\\",\\\"button\\\",\\\"fn\\\",\\\"textarea\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ai-settings-form.hbs\",\n    \"isStrictMode\": false\n  });\n  let AiSettingsFormComponent = _exports.default = (_class = class AiSettingsFormComponent extends _component2.default {\n    toggleUseMyKeys() {\n      this.args.onToggleUseMyKeys?.();\n    }\n    setBaseUrlCustom(isCustom) {\n      this.args.onSetBaseUrlCustom?.(isCustom);\n    }\n    updateSystemMessage(event) {\n      this.args.onUpdateSystemMessage?.(event.target.value);\n    }\n    saveSettings() {\n      this.args.onSave?.();\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"toggleUseMyKeys\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleUseMyKeys\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setBaseUrlCustom\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setBaseUrlCustom\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSystemMessage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSystemMessage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveSettings\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveSettings\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AiSettingsFormComponent);\n});","define(\"@testable/shared-ui/components/api-key-create\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _server, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"createApiKeyModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Create Api Key</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel mb-0\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.createApiKey}} class=\"form-horizontal\">\n                <div class=\"p-0\">\n                  <div class=\"form-group\">\n                    <label class=\"visually-hidden\" for=\"api-key-description\">Description</label>\n                    <Input id=\"api-key-description\" @value={{this.description}} @type=\"text\" class=\"form-control\" placeholder=\"Description\" minlength=\"1\"\n                            maxlength=\"255\" />\n                  </div>\n  \n                  <BsButtonGroup class=\"w-100\" @value={{this.accessType}} @type=\"radio\" @onChange={{fn (mut this.accessType)}} as |bg|>\n                    <bg.button @type=\"success\" @value=\"Regular\">Regular</bg.button>\n                    <bg.button @type=\"success\" @value=\"Viewer\">Viewer</bg.button>\n                  </BsButtonGroup>\n  \n                  <div class=\"mt-4\">\n                    <button type=\"submit\" class=\"btn btn-primary\" disabled={{this.isSaving}}>\n                      {{if this.isSaving \"Saving...\" \"Save\"}}\n                    </button>\n                  </div>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"modal fade\\\"],[14,1,\\\"createApiKeyModal\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,\\\"role\\\",\\\"dialog\\\"],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Create Api Key\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel mb-0\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,4],[\\\"submit\\\",[30,0,[\\\"createApiKey\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"p-0\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"visually-hidden\\\"],[14,\\\"for\\\",\\\"api-key-description\\\"],[12],[1,\\\"Description\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,6],[[24,1,\\\"api-key-description\\\"],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Description\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"]],[[\\\"@value\\\",\\\"@type\\\"],[[30,0,[\\\"description\\\"]],\\\"text\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,7],[[24,0,\\\"w-100\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"accessType\\\"]],\\\"radio\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"accessType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"Regular\\\"]],[[\\\"default\\\"],[[[[1,\\\"Regular\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"Viewer\\\"]],[[\\\"default\\\"],[[[[1,\\\"Viewer\\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"mt-4\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Saving...\\\",\\\"Save\\\"]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\"],[\\\"div\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/api-key-create.hbs\",\n    \"isStrictMode\": false\n  });\n  let ApiKeyCreateComponent = _exports.default = (_class = class ApiKeyCreateComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor2, this);\n      _initializerDefineProperty(this, \"description\", _descriptor3, this);\n      _initializerDefineProperty(this, \"accessType\", _descriptor4, this);\n    }\n    async createApiKey(event) {\n      event?.preventDefault();\n      let description = this.description;\n      if (description.length > 0) {\n        this.isSaving = true;\n        let request = this.args.isAdmin ? this.api.admin.createApiKey(description) : _server.default.createApiKey(_environment.config.currentUser.orgId, description, this.accessType);\n        try {\n          let data = await request;\n          $('#createApiKeyModal').modal('hide');\n          this.description = '';\n          _lib.default.info(`Api key <strong>${data.name}</strong> created successfully`);\n          if (typeof this.args.apiKeysChanged === 'function') this.args.apiKeysChanged();\n        } finally {\n          this.isSaving = false;\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"description\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"accessType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Regular';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"createApiKey\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createApiKey\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ApiKeyCreateComponent);\n});","define(\"@testable/shared-ui/components/api-key-info\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <tr>\n    <td style={{html-safe \"vertical-align: middle\"}} >\n      {{#if this.isEditing}}\n        <Input @type=\"text\" class=\"form-control edit\" @value={{this.editedDesc}}\n               @insert-newline={{this.updateKey}} @escape-press={{this.escPress}}\n          {{autofocusAndSelect}}\n        />\n      {{else}}\n        <span class=\"float-left truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"{{this.editedDesc}}\">\n          {{this.editedDesc}}\n        </span>\n      {{/if}}\n    </td>\n    <td style={{html-safe \"vertical-align: middle\"}}>\n      <code>{{@model.name}}</code>\n      <Ui::CopyText class=\"btn-circle text-primary\" @title=\"Copy Key\" @text={{@model.name}} />\n    </td>\n    {{#unless @isAdmin}}\n      <td style={{html-safe \"vertical-align: middle\"}}>\n        {{#if this.isEditing}}\n          <BsButtonGroup @value={{this.editedAccessType}} @type=\"radio\" @onChange={{fn (mut this.editedAccessType)}} as |bg|>\n            <bg.button @type=\"success\" @value=\"Regular\">Regular</bg.button>\n            <bg.button @type=\"success\" @value=\"Viewer\">Viewer</bg.button>\n          </BsButtonGroup>\n        {{else}}\n          {{this.editedAccessType}}\n        {{/if}}\n      </td>\n    {{/unless}}\n    <td style={{html-safe \"vertical-align: middle\"}}>\n      {{#unless @isViewer}}\n        <div class=\"btn-group btn-xs\">\n          {{#if this.isEditing}}\n            <button type=\"button\" {{on \"click\" this.updateKey}} class=\"btn btn-circle btn-icon text-success btn-sm\"><span\n                    class=\"fa fa-check\"></span>\n            </button>\n            <button type=\"button\" {{on \"click\" this.escPress}} class=\"btn btn-circle btn-icon text-danger btn-sm\"><span\n                    class=\"fa fa-times\"></span></button>\n          {{else}}\n            <button type=\"button\" {{on \"click\" (fn (mut this.isEditing) true)}} class=\"btn btn-circle btn-icon text-success btn-sm\"><span\n                    class=\"fa fa-edit\"></span></button>\n            <button type=\"button\" {{on \"click\" this.deleteKey}} disabled={{this.isDeleting}} class=\"btn btn-circle btn-icon text-danger btn-sm\">\n              {{#if this.isDeleting}}\n                <span class=\"fa fa-spinner fa-spin\"></span>\n              {{else}}\n                <span class=\"fa fa-trash\"></span>\n              {{/if}}\n            </button>\n          {{/if}}\n        </div>\n      {{/unless}}\n    </td>\n  </tr>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"tr\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[15,5,[28,[37,2],[\\\"vertical-align: middle\\\"],null]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEditing\\\"]],[[[1,\\\"      \\\"],[8,[39,4],[[24,0,\\\"form-control edit\\\"],[4,[38,5],null,null]],[[\\\"@type\\\",\\\"@value\\\",\\\"@insert-newline\\\",\\\"@escape-press\\\"],[\\\"text\\\",[30,0,[\\\"editedDesc\\\"]],[30,0,[\\\"updateKey\\\"]],[30,0,[\\\"escPress\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"float-left truncate\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[30,0,[\\\"editedDesc\\\"]]]]],[12],[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"editedDesc\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[15,5,[28,[37,2],[\\\"vertical-align: middle\\\"],null]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"code\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n    \\\"],[8,[39,8],[[24,0,\\\"btn-circle text-primary\\\"]],[[\\\"@title\\\",\\\"@text\\\"],[\\\"Copy Key\\\",[30,1,[\\\"name\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"    \\\"],[10,\\\"td\\\"],[15,5,[28,[37,2],[\\\"vertical-align: middle\\\"],null]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEditing\\\"]],[[[1,\\\"        \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"editedAccessType\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"editedAccessType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"Regular\\\"]],[[\\\"default\\\"],[[[[1,\\\"Regular\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"Viewer\\\"]],[[\\\"default\\\"],[[[[1,\\\"Viewer\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[3]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[30,0,[\\\"editedAccessType\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,\\\"td\\\"],[15,5,[28,[37,2],[\\\"vertical-align: middle\\\"],null]],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"btn-group btn-xs\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEditing\\\"]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-circle btn-icon text-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"updateKey\\\"]]],null],[12],[10,1],[14,0,\\\"fa fa-check\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-circle btn-icon text-danger btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"escPress\\\"]]],null],[12],[10,1],[14,0,\\\"fa fa-times\\\"],[12],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-circle btn-icon text-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"isEditing\\\"]]],null],true],null]],null],[12],[10,1],[14,0,\\\"fa fa-edit\\\"],[12],[13],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isDeleting\\\"]]],[24,0,\\\"btn btn-circle btn-icon text-danger btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"deleteKey\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isDeleting\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"fa fa-spinner fa-spin\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"fa fa-trash\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@isAdmin\\\",\\\"bg\\\",\\\"@isViewer\\\"],[\\\"tr\\\",\\\"td\\\",\\\"html-safe\\\",\\\"if\\\",\\\"input\\\",\\\"autofocusAndSelect\\\",\\\"span\\\",\\\"code\\\",\\\"ui/copy-text\\\",\\\"unless\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"div\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/api-key-info.hbs\",\n    \"isStrictMode\": false\n  });\n  let ApiKeyInfoComponent = _exports.default = (_class = class ApiKeyInfoComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"isEditing\", _descriptor2, this);\n      _initializerDefineProperty(this, \"editedDesc\", _descriptor3, this);\n      _initializerDefineProperty(this, \"editedAccessType\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isDeleting\", _descriptor5, this);\n      this.setDefaults();\n    }\n    get endPoint() {\n      return this.args.isAdmin ? this.api.admin : _server.default;\n    }\n    escPress() {\n      this.isEditing = false;\n      this.setDefaults();\n    }\n    updateKey() {\n      let model = this.args.model;\n      let description = this.editedDesc;\n      if (this.isEditing) {\n        this.endPoint.updateApiKey(model.name, description, this.editedAccessType).done(data => {\n          _lib.default.info(`Api Key <strong>${model.description}</strong> updated to <strong>${description}</strong> successfully`);\n          this.isEditing = false;\n        });\n      }\n    }\n    deleteKey() {\n      const model = this.args.model;\n      _lib.default.confirm(`Are you sure you want to delete <strong>${model.description}</strong>?`, 'OK', () => {\n        this.isDeleting = true;\n        this.endPoint.deleteApiKey(model.name).then(() => {\n          _lib.default.info(`Api Key <strong>${model.description}</strong> deleted successfully`);\n          if (typeof this.args.apiKeysChanged === 'function') this.args.apiKeysChanged();\n          this.isDeleting = false;\n        }).catch(() => {\n          this.isDeleting = false;\n        });\n      }, 'Cancel');\n    }\n    setDefaults() {\n      this.editedDesc = this.args.model.description;\n      this.editedAccessType = this.args.model.accessType;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isEditing\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"editedDesc\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"editedAccessType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isDeleting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"escPress\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"escPress\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateKey\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateKey\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteKey\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteKey\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ApiKeyInfoComponent);\n});","define(\"@testable/shared-ui/components/api-keys-list\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"heading-wrapper\">\n    <h1 class=\"page-header m-b-10 m-t-10\">\n      API Keys\n      <Ui::InfoIcon @isHtml={{true}}\n                    @content=\"Create and manage the api keys for accessing the API. See the <strong>Documentation</strong> for more details.\"\n                    @placement=\"right\" />\n    </h1>\n    <div class=\"row p-b-10\">\n      <div class=\"col-md-12\">\n        <ol class=\"breadcrumb pull-right\">\n          <li class=\"breadcrumb-item\">Account</li>\n          <li class=\"breadcrumb-item active\">API Keys</li>\n        </ol>\n      </div>\n    </div>\n  </div>\n  \n  {{#unless this.isViewer}}\n    <div class=\"text-right m-b-10\">\n      <a href=\"javascript:\" class=\"btn btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#createApiKeyModal\">New API\n        Key</a>\n    </div>\n  {{/unless}}\n  \n  <div class=\"panel\">\n    <div class=\"panel-body\">\n      <div class=\"table-responsive\">\n        <table class=\"table table-hover\">\n          <thead>\n          <tr>\n            <th scope=\"col\" class=\"width-200\">Description</th>\n            <th scope=\"col\" width=\"150\">Key</th>\n            <th scope=\"col\" width=\"150\">Access</th>\n            <th scope=\"col\" class=\"width-100\">Settings</th>\n          </tr>\n          </thead>\n          <tbody>\n          {{#each this.apiKeys as |apiKey|}}\n            <ApiKeyInfo @model={{apiKey}}\n                        @isAdmin={{false}}\n                        @isViewer={{this.isViewer}}\n                        @apiKeysChanged={{this.apiKeysChanged}}\n            />\n          {{else if this.isLoading}}\n            <tr><td colspan=\"3\">Loading Api Keys...</td></tr>\n          {{else}}\n            <tr>\n              <td colspan=\"3\">\n                <div class=\"row\">\n                  <div class=\"col-md-12 text-center\">\n                    <span>No api keys yet!</span>\n                  </div>\n                </div>\n              </td>\n            </tr>\n          {{/each}}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n  {{!-- end panel --}}\n  <ApiKeyCreate @isAdmin={{false}} @apiKeysChanged={{this.apiKeysChanged}} />\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"heading-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-10 m-t-10\\\"],[12],[1,\\\"\\\\n    API Keys\\\\n    \\\"],[8,[39,2],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Create and manage the api keys for accessing the API. See the <strong>Documentation</strong> for more details.\\\",\\\"right\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row p-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"ol\\\"],[14,0,\\\"breadcrumb pull-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item\\\"],[12],[1,\\\"Account\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item active\\\"],[12],[1,\\\"API Keys\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"text-right m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,0,\\\"btn btn-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"modal\\\"],[14,\\\"data-bs-target\\\",\\\"#createApiKeyModal\\\"],[12],[1,\\\"New API\\\\n      Key\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-hover\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,0,\\\"width-200\\\"],[12],[1,\\\"Description\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,\\\"width\\\",\\\"150\\\"],[12],[1,\\\"Key\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,\\\"width\\\",\\\"150\\\"],[12],[1,\\\"Access\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,0,\\\"width-100\\\"],[12],[1,\\\"Settings\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"apiKeys\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,14],null,[[\\\"@model\\\",\\\"@isAdmin\\\",\\\"@isViewer\\\",\\\"@apiKeysChanged\\\"],[[30,1],false,[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"apiKeysChanged\\\"]]]],null],[1,\\\"\\\\n\\\"]],[1]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,\\\"Loading Api Keys...\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"col-md-12 text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,\\\"No api keys yet!\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,18],null,[[\\\"@isAdmin\\\",\\\"@apiKeysChanged\\\"],[false,[30,0,[\\\"apiKeysChanged\\\"]]]],null],[1,\\\"\\\\n\\\"]],[\\\"apiKey\\\"],[\\\"div\\\",\\\"h1\\\",\\\"ui/info-icon\\\",\\\"ol\\\",\\\"li\\\",\\\"unless\\\",\\\"a\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"api-key-info\\\",\\\"if\\\",\\\"td\\\",\\\"span\\\",\\\"api-key-create\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/api-keys-list.hbs\",\n    \"isStrictMode\": false\n  });\n  let ApiKeysListComponent = _exports.default = (_class = class ApiKeysListComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"apiKeys\", _descriptor, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor2, this);\n      this.loadApiKeys();\n    }\n    get currentUser() {\n      return _environment.config.currentUser;\n    }\n    get isViewer() {\n      return this.currentUser.isViewer;\n    }\n    apiKeysChanged() {\n      this.loadApiKeys();\n    }\n    async loadApiKeys() {\n      this.isLoading = true;\n      try {\n        this.apiKeys = await _server.default.getApiKeys(_environment.config.currentUser.orgId);\n      } catch (error) {} finally {\n        this.isLoading = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"apiKeys\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"apiKeysChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"apiKeysChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadApiKeys\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadApiKeys\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ApiKeysListComponent);\n});","define(\"@testable/shared-ui/components/app-switcher\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @sidebarCollapsed}}\n    <div class=\"p-5 border-bottom text-center\">\n      <div class=\"dropdown\">\n        <button class=\"btn btn-success btn-sm dropdown-toggle w-100\" type=\"button\" data-bs-toggle=\"dropdown\">\n          {{if (eq @selectedApp this.testableApp) \"T\" \"M\"}}\n        </button>\n        <ul class=\"dropdown-menu\">\n          <li><a href=\"javascript:;\" class=\"{{if (eq @selectedApp this.testableApp) \"active\"}}\" role=\"button\" {{on \"click\" (fn this.onChangeApp this.testableApp)}}>Testing</a></li>\n          <li><a href=\"javascript:;\" class=\"{{if (eq @selectedApp this.monitoringApp) \"active\"}}\" role=\"button\" {{on \"click\" (fn this.onChangeApp this.monitoringApp)}}>Monitoring</a></li>\n        </ul>\n      </div>\n    </div>\n  {{else}}\n    <div class=\"p-10 border-bottom text-center\">\n      <BsButtonGroup @value={{@selectedApp}} @type=\"radio\" @onChange={{this.onChangeApp}} as |bg|>\n        <bg.button @type=\"success\" @value={{this.testableApp}} @size=\"sm\">Testing</bg.button>\n        <bg.button @type=\"success\" @value={{this.monitoringApp}} @size=\"sm\">Monitoring</bg.button>\n      </BsButtonGroup>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"p-5 border-bottom text-center\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"dropdown\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success btn-sm dropdown-toggle w-100\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[52,[28,[37,3],[[30,2],[30,0,[\\\"testableApp\\\"]]],null],\\\"T\\\",\\\"M\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"javascript:;\\\"],[16,0,[29,[[52,[28,[37,3],[[30,2],[30,0,[\\\"testableApp\\\"]]],null],\\\"active\\\"]]]],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"onChangeApp\\\"]],[30,0,[\\\"testableApp\\\"]]],null]],null],[12],[1,\\\"Testing\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"javascript:;\\\"],[16,0,[29,[[52,[28,[37,3],[[30,2],[30,0,[\\\"monitoringApp\\\"]]],null],\\\"active\\\"]]]],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"onChangeApp\\\"]],[30,0,[\\\"monitoringApp\\\"]]],null]],null],[12],[1,\\\"Monitoring\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"p-10 border-bottom text-center\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,9],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,2],\\\"radio\\\",[30,0,[\\\"onChangeApp\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",[30,0,[\\\"testableApp\\\"]],\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Testing\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",[30,0,[\\\"monitoringApp\\\"]],\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Monitoring\\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[3]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@sidebarCollapsed\\\",\\\"@selectedApp\\\",\\\"bg\\\"],[\\\"if\\\",\\\"div\\\",\\\"button\\\",\\\"eq\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"bs-button-group\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/app-switcher.hbs\",\n    \"isStrictMode\": false\n  });\n  let AppSwitcherComponent = _exports.default = (_class = class AppSwitcherComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"testableApp\", 'testableweb');\n      _defineProperty(this, \"monitoringApp\", 'testable-monitoring');\n    }\n    onChangeApp(app) {\n      if (app === this.args.selectedApp) {\n        return;\n      }\n      const url = this.withCurrentSession(app === this.testableApp ? _environment.config.testingAppUrl : _environment.config.monitoringAppUrl);\n      window.open(url, '_blank');\n    }\n    withCurrentSession(url) {\n      const parsedUrl = new URL(url, window.location.origin);\n      if (_environment.config.currentUser?.sid) {\n        parsedUrl.searchParams.set('sid', _environment.config.currentUser.sid);\n      }\n      if (_environment.config.currentUser?.org?.id) {\n        parsedUrl.searchParams.set('org', _environment.config.currentUser.org.id);\n      }\n      return parsedUrl.toString();\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"onChangeApp\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeApp\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AppSwitcherComponent);\n});","define(\"@testable/shared-ui/components/assertions-result-download-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"assertionsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Download Assertion Summary</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults  'summary')}}\n                 class=\"btn btn-lg btn-default width-full\">\n                <b>Assertions Summary</b><br/>\n                <small>Each row will correspond to the aggregated metrics of a <br> suite or test step.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'summary-with-errors')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Assertions Summary with Errors</b><br/>\n                <small>Each row will correspond to the aggregated metrics of a <br> suite, a test step, or the errors\n                  associated with a test step.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'errors')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Assertion Errors Summary</b><br/>\n                <small>Each row will correspond to the aggregated metrics for <br> each assertion error across the\n                  test.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'results')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>All Assertions</b><br/>\n                <small>Each row will correspond to an individual assertion.</small>\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"assertionsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Download Assertion Summary\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"summary\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Assertions Summary\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics of a \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\" suite or test step.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"summary-with-errors\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Assertions Summary with Errors\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics of a \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\" suite, a test step, or the errors\\\\n                associated with a test step.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"errors\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Assertion Errors Summary\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics for \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\" each assertion error across the\\\\n                test.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"results\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"All Assertions\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to an individual assertion.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"b\\\",\\\"br\\\",\\\"small\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/assertions-result-download-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let AssertionsResultDownloadModalComponent = _exports.default = (_class = class AssertionsResultDownloadModalComponent extends _component2.default {\n    downloadSuiteResults(option) {\n      this.args.openSuiteResultsDownloadUrl(option);\n    }\n    didInsert() {\n      let _this = this;\n      $('#assertionsModal').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#assertionsModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"downloadSuiteResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadSuiteResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AssertionsResultDownloadModalComponent);\n});","define(\"@testable/shared-ui/components/by-iteration\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"m-t-10\" id=\"slowestIterationsContents\">\n    <div class=\"input-group\" style={{html-safe \"max-width: 500px;\"}}>\n      <div class=\"input-group-prepend\">\n        <span class=\"input-group-text\">Iteration ID\n          <Ui::InfoIcon @content=\"An iteration is when a virtual user or thread executes the defined scenario one time.\n          Testable assigns each iteration a unique iteration ID that can be found when viewing result details, traces,\n          images, exporting results to CSV, etc. Paste that iteration ID here to search for all results collected as\n          part of that iteration.\" />\n        </span>\n      </div>\n      <Input @type=\"text\" class=\"form-control\" @value={{this.iteration}} placeholder=\"Iteration ID...\" />\n      <div class=\"input-group-append\">\n        <button {{on \"click\" this.search}} type=\"button\" class=\"btn btn-sm btn-primary\"><Ui::Icon @icon=\"fa fa-search\" /></button>\n      </div>\n    </div>\n    {{#if this.selectedIteration}}\n      <IterationResults @overallModel={{@overallModel}}\n                        @iteration={{this.selectedIteration}}\n                        @selectedResource={{@selectedResource}}\n                        @showImageDetailsModal={{this.showImageDetailsModal}} />\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"m-t-10\\\"],[14,1,\\\"slowestIterationsContents\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"input-group\\\"],[15,5,[28,[37,1],[\\\"max-width: 500px;\\\"],null]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"Iteration ID\\\\n        \\\"],[8,[39,3],null,[[\\\"@content\\\"],[\\\"An iteration is when a virtual user or thread executes the defined scenario one time.\\\\n        Testable assigns each iteration a unique iteration ID that can be found when viewing result details, traces,\\\\n        images, exporting results to CSV, etc. Paste that iteration ID here to search for all results collected as\\\\n        part of that iteration.\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Iteration ID...\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"iteration\\\"]]]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"search\\\"]]],null],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedIteration\\\"]],[[[1,\\\"    \\\"],[8,[39,9],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,1],[30,0,[\\\"selectedIteration\\\"]],[30,2],[30,0,[\\\"showImageDetailsModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@overallModel\\\",\\\"@selectedResource\\\"],[\\\"div\\\",\\\"html-safe\\\",\\\"span\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/by-iteration.hbs\",\n    \"isStrictMode\": false\n  });\n  let ByIterationComponent = _exports.default = (_class = class ByIterationComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"iteration\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor2, this);\n    }\n    get exportToCsvUrl() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/results.csv';\n      return _lib.default.toUrl(path);\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel.script.scriptType);\n    }\n    showImageDetailsModal(imageId) {\n      if (typeof this.args.showImageDetailsModal === 'function') {\n        this.args.showImageDetailsModal(imageId);\n      }\n    }\n    search() {\n      this.selectedIteration = this.iteration.trim();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"search\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"search\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ByIterationComponent);\n});","define(\"@testable/shared-ui/components/capture-param\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row m-b-5\"\n    data-sortable-id=\"{{@paramId}}\"\n    data-capture-param-id=\"{{@paramId}}\"\n    data-is-default={{and (eq @category \"conf\") this.isDefaultValue}}\n    data-capture-category=\"{{@category}}\">\n    <div class=\"col-md-4\">\n      <div class=\"input-group input-group-sm\">\n        {{#if (and (not @viewOnly) @allowDelete)}}\n  {{!--        todo: remove this delete option in view mode e.g. http://localhost:4300/results/15304 -> scenario tab--}}\n          <div class=\"input-group-prepend\">\n            <button {{on \"click\" (fn this.deleteParam @paramConfig this.paramVal)}} class=\"btn btn-icon btn-danger\" data-bs-toggle=\"tooltip\"\n              title=\"Delete parameter\" type=\"button\">\n              <Ui::Icon @icon=\"fa fa-trash\" />\n            </button>\n          </div>\n        {{/if}}\n        <Input @type=\"text\"\n               id={{concat \"paramName-\" @paramId}}\n               class=\"form-control\"\n               {{on \"change\" @onParamChange}}\n               placeholder=\"Parameter name\"\n               @value={{@paramConfig.name}}\n               disabled={{not @allowDelete}}\n               data-parsley-required={{true}}\n               data-parsley-required-message=\"Parameter name is required\"\n               data-parsley-errors-container={{concat \"#paramNameErrors-\" @paramId}} />\n      </div>\n      <div id=\"paramNameErrors-{{@paramId}}\" class=\"m-b-5\"></div>\n    </div>\n    <div class=\"col-md-8\">\n      <div class=\"input-group input-group-sm\">\n        <div class=\"input-group-prepend\">\n          <span class=\"input-group-text\" style={{html-safe \"width: 60px;\"}}>Value {{if @paramConfig.required '*'}}</span>\n        </div>\n        <Input @type=\"text\"\n               id={{concat \"paramVal-\" @paramId}}\n               class=\"form-control\"\n               placeholder=\"Parameter value\"\n               @value={{this.paramVal}}\n               {{on \"change\" @onParamChange}}\n               disabled={{this.isEncrypting}}\n               data-parsley-required={{@paramConfig.required}}\n               data-parsley-required-message={{concat @paramConfig.name \" value is required\"}}\n               data-parsley-errors-container={{concat \"#paramErrors-\" @paramId}} />\n        {{#unless @viewOnly}}\n          <div class=\"input-group-append d-inline-flex\">\n            <button disabled={{or this.isEncrypted this.isEncrypting (not this.paramVal)}} {{on \"click\" this.encrypt}} type=\"button\"\n              class=\"btn btn-sm btn-primary\">\n              Encrypt\n            </button><a data-bs-toggle=\"popover\" data-bs-placement=\"left\" data-bs-trigger=\"hover\"\n              data-bs-content=\"Encrypt the value of this parameter using this test case's 2048-bit RSA public key. Parameters are decrypted when this test is run just before assigning to a test runner. Click for more details.\"\n              class=\"input-group-text btn btn-primary\" target=\"_blank\"\n              href=\"https://docs.testable.io/guides/scenario-params.html\" rel=\"noreferrer noopener\">\n              <Ui::Icon @icon=\"fa fa-lg fa-question-circle\" />\n            </a>\n          </div>\n        {{/unless}}\n      </div>\n      <div id=\"paramErrors-{{@paramId}}\" class=\"m-b-5\"></div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"row m-b-5\\\"],[15,\\\"data-sortable-id\\\",[29,[[30,1]]]],[15,\\\"data-capture-param-id\\\",[29,[[30,1]]]],[15,\\\"data-is-default\\\",[28,[37,1],[[28,[37,2],[[30,2],\\\"conf\\\"],null],[30,0,[\\\"isDefaultValue\\\"]]],null]],[15,\\\"data-capture-category\\\",[29,[[30,2]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group input-group-sm\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[28,[37,4],[[30,3]],null],[30,4]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-icon btn-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete parameter\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"deleteParam\\\"]],[30,5],[30,0,[\\\"paramVal\\\"]]],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,9],[[16,1,[28,[37,10],[\\\"paramName-\\\",[30,1]],null]],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Parameter name\\\"],[16,\\\"disabled\\\",[28,[37,4],[[30,4]],null]],[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Parameter name is required\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,10],[\\\"#paramNameErrors-\\\",[30,1]],null]],[4,[38,6],[\\\"change\\\",[30,6]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,5,[\\\"name\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,1,[29,[\\\"paramNameErrors-\\\",[30,1]]]],[14,0,\\\"m-b-5\\\"],[12],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group input-group-sm\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-text\\\"],[15,5,[28,[37,12],[\\\"width: 60px;\\\"],null]],[12],[1,\\\"Value \\\"],[1,[52,[30,5,[\\\"required\\\"]],\\\"*\\\"]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,9],[[16,1,[28,[37,10],[\\\"paramVal-\\\",[30,1]],null]],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Parameter value\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isEncrypting\\\"]]],[16,\\\"data-parsley-required\\\",[30,5,[\\\"required\\\"]]],[16,\\\"data-parsley-required-message\\\",[28,[37,10],[[30,5,[\\\"name\\\"]],\\\" value is required\\\"],null]],[16,\\\"data-parsley-errors-container\\\",[28,[37,10],[\\\"#paramErrors-\\\",[30,1]],null]],[4,[38,6],[\\\"change\\\",[30,6]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"paramVal\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,3]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"input-group-append d-inline-flex\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[28,[37,14],[[30,0,[\\\"isEncrypted\\\"]],[30,0,[\\\"isEncrypting\\\"]],[28,[37,4],[[30,0,[\\\"paramVal\\\"]]],null]],null]],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"encrypt\\\"]]],null],[12],[1,\\\"\\\\n            Encrypt\\\\n          \\\"],[13],[10,3],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-placement\\\",\\\"left\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[14,\\\"data-bs-content\\\",\\\"Encrypt the value of this parameter using this test case's 2048-bit RSA public key. Parameters are decrypted when this test is run just before assigning to a test runner. Click for more details.\\\"],[14,0,\\\"input-group-text btn btn-primary\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/guides/scenario-params.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question-circle\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,1,[29,[\\\"paramErrors-\\\",[30,1]]]],[14,0,\\\"m-b-5\\\"],[12],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@paramId\\\",\\\"@category\\\",\\\"@viewOnly\\\",\\\"@allowDelete\\\",\\\"@paramConfig\\\",\\\"@onParamChange\\\"],[\\\"div\\\",\\\"and\\\",\\\"eq\\\",\\\"if\\\",\\\"not\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"concat\\\",\\\"span\\\",\\\"html-safe\\\",\\\"unless\\\",\\\"or\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/capture-param.hbs\",\n    \"isStrictMode\": false\n  });\n  let CaptureParamComponent = _exports.default = (_class = class CaptureParamComponent extends _component2.default {\n    get paramConfig() {\n      return this.args.paramConfig;\n    }\n    get defaultValue() {\n      return this.paramConfig.defaultValue;\n    }\n    get isDefaultValue() {\n      return this.paramVal === this.defaultValue;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"isEncrypting\", _descriptor, this);\n      _initializerDefineProperty(this, \"paramVal\", _descriptor2, this);\n      const params = this.args.params;\n      this.paramVal = params?.[this.paramConfig.name] || this.defaultValue;\n      (0, _observers.addObserver)(this, 'args.params', this, this.onParamsChanged);\n    }\n    willDestroy() {\n      (0, _observers.removeObserver)(this, 'args.params', this, this.onParamsChanged);\n    }\n    onParamsChanged() {\n      const params = this.args.params;\n      if (params && params[this.paramConfig.name]) {\n        this.paramVal = params[this.paramConfig.name];\n      }\n    }\n    get isEncrypted() {\n      return this.val && this.val.indexOf('secure:') === 0;\n    }\n    encrypt() {\n      this.isEncrypting = true;\n      _server.default.encrypt(this.args.testCaseId, this.paramVal).then(encrypted => {\n        if (encrypted && encrypted.length > 0 && encrypted.indexOf('secure:') !== 0) encrypted = 'secure:' + encrypted;\n        this.paramVal = encrypted;\n        this.isEncrypting = false;\n      }, () => {\n        this.isEncrypting = false;\n      });\n    }\n    deleteParam(param, val) {\n      if (typeof this.args.deleteParam === 'function') {\n        this.args.deleteParam(param, val);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isEncrypting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"paramVal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"encrypt\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"encrypt\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteParam\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CaptureParamComponent);\n});","define(\"@testable/shared-ui/components/capture-params-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"captureParamsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n    <div class=\"modal-dialog modal-lg\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Configure {{@type}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.run}} class=\"form-horizontal\">\n                {{#if (gt this.relatedParams.length 0)}}\n                  <div class=\"form-group\">\n                    <Ui::PSelect\n                      @options={{this.relatedParams}}\n                      @selected={{this.selectedParams}}\n                      @placeholder=\"Populate parameters from...\"\n                      @onChange={{this.relatedParamsSelected}} as |option|>\n                      {{html-safe (to-html option.name)}}\n                    </Ui::PSelect>\n                  </div>\n                {{/if}}\n                <CaptureParams @testCaseId={{@testCaseId}}\n                               @scriptType={{@script.scriptType}}\n                               @paramsConfig={{@paramsConfig}}\n                               @params={{this.scriptScriptParams}}\n                               @onParamDelete={{this.onParamDelete}}\n                               @onParamChange={{this.empty}}\n                               @category=\"script\"\n                               @hideInfo={{true}} />\n                <div class=\"form-group\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-success\"><strong>Run</strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"modal fade\\\"],[14,1,\\\"captureParamsModal\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,\\\"role\\\",\\\"dialog\\\"],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Configure \\\"],[1,[30,1]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,4],[\\\"submit\\\",[30,0,[\\\"run\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"relatedParams\\\",\\\"length\\\"]],0],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"relatedParams\\\"]],[30,0,[\\\"selectedParams\\\"]],\\\"Populate parameters from...\\\",[30,0,[\\\"relatedParamsSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[28,[35,8],[[28,[37,9],[[30,2,[\\\"name\\\"]]],null]],null]],[1,\\\"\\\\n                  \\\"]],[2]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[8,[39,10],null,[[\\\"@testCaseId\\\",\\\"@scriptType\\\",\\\"@paramsConfig\\\",\\\"@params\\\",\\\"@onParamDelete\\\",\\\"@onParamChange\\\",\\\"@category\\\",\\\"@hideInfo\\\"],[[30,3],[30,4,[\\\"scriptType\\\"]],[30,5],[30,0,[\\\"scriptScriptParams\\\"]],[30,0,[\\\"onParamDelete\\\"]],[30,0,[\\\"empty\\\"]],\\\"script\\\",true]],null],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Run\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@type\\\",\\\"option\\\",\\\"@testCaseId\\\",\\\"@script\\\",\\\"@paramsConfig\\\"],[\\\"div\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"if\\\",\\\"gt\\\",\\\"ui/p-select\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"capture-params\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/capture-params-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let CaptureParamsModalComponent = _exports.default = (_class = class CaptureParamsModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"selectedParams\", _descriptor, this);\n      _initializerDefineProperty(this, \"scriptScriptParams\", _descriptor2, this);\n    }\n    get relatedParams() {\n      const answer = [];\n      const relatedExecution = this.args.script.execution;\n      if (relatedExecution) {\n        answer.push({\n          name: 'Related Test Execution',\n          scriptParams: relatedExecution.scriptParams ? JSON.parse(relatedExecution.scriptParams) : {}\n        });\n        answer.push({\n          name: relatedExecution.confName + ' [Test Configuration]',\n          scriptParams: relatedExecution.configuration.scriptParams ? JSON.parse(relatedExecution.configuration.scriptParams) : {}\n        });\n      }\n      _.forEach(this.args.confs, config => {\n        answer.push({\n          name: config.name + ' [Test Configuration]',\n          scriptParams: config.scriptParams ? JSON.parse(config.scriptParams) : {}\n        });\n      });\n      return answer;\n    }\n    run(event) {\n      event.preventDefault();\n      this.args.run(_loadTest.default.getScriptParams('script'));\n      $('#captureParamsModal').modal('hide');\n    }\n    relatedParamsSelected(selection) {\n      this.selectedParams = selection;\n      if (selection.scriptParams) {\n        this.scriptScriptParams = selection.scriptParams;\n      }\n    }\n    onParamDelete(param) {\n      if (this.scriptScriptParams) delete this.scriptScriptParams[param.name];\n    }\n    empty() {}\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selectedParams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"scriptScriptParams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"run\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"run\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"relatedParamsSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"relatedParamsSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParamDelete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParamDelete\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"empty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"empty\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CaptureParamsModalComponent);\n});","define(\"@testable/shared-ui/components/capture-params\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"tracked-built-ins\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _trackedBuiltIns, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"tracked-built-ins\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div>\n    {{#unless @viewOnly}}\n      <a {{on \"click\" this.addParam}} href=\"javascript:;\" class=\"btn btn-xs btn-primary m-t-5 mb-3\" data-bs-toggle=\"tooltip\"\n                               title=\"Add parameter\">\n        <Ui::Icon @icon=\"fa fa-plus\" />\n      </a>\n    {{/unless}}\n    {{#each @paramsConfig as |paramConfig|}}\n      {{#if paramConfig.name}}\n        <CaptureParam @paramId={{generate-id ''}}\n                      @paramConfig={{paramConfig}}\n                      @params={{@params}}\n                      @testCaseId={{@testCaseId}}\n                      @category={{@category}}\n                      @onParamChange={{@onParamChange}}\n                      @viewOnly={{@viewOnly}} />\n      {{/if}}\n    {{/each}}\n    {{#each this.undeclaredParams as |paramConfig|}}\n      <CaptureParam @paramId={{generate-id ''}}\n                    @paramConfig={{paramConfig}}\n                    @params={{@params}}\n                    @testCaseId={{@testCaseId}}\n                    @viewOnly={{@viewOnly}}\n                    @category={{@category}}\n                    @allowDelete={{true}}\n                    @onParamChange={{@onParamChange}}\n                    @deleteParam={{this.deleteUndeclaredParam}} />\n    {{/each}}\n    {{#each this.additionalParams as |paramConfig|}}\n      <CaptureParam @paramId={{generate-id ''}}\n                    @paramConfig={{paramConfig}}\n                    @params={{@params}}\n                    @testCaseId={{@testCaseId}}\n                    @viewOnly={{@viewOnly}}\n                    @category={{@category}}\n                    @allowDelete={{true}}\n                    @onParamChange={{@onParamChange}}\n                    @deleteParam={{this.deleteAdditionalParam}} />\n    {{/each}}\n  </div>\n  {{#if (and (not @hideInfo) (not @viewOnly))}}\n    <div class=\"note note-info alert m-t-10\">\n      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n      {{#if (eq @scriptType 'Code')}}\n        <p>Parameter values are passed as both environment variables (e.g. myParamName is passed as environment variable\n          <strong>MYPARAMNAME</strong>) and as a <strong>params</strong> object (e.g. myParamName can be referenced\n          as <strong>params['myParamName']</strong>) to your Node.js script.</p>\n      {{else if (eq @scriptType 'PhantomJs')}}\n        <p>PhantomJS scripts can accept custom parameters that are accessible within your code using the <strong>params['myParamName']</strong>\n          syntax.</p>\n      {{else if (eq @scriptType 'Selenium')}}\n        <p>Parameters can be referenced in your code using environment variables. For example, parameter\n          <strong>Abc</strong> is available as the environment variable <strong>ABC</strong> (and also as system\n          property <strong>Abc</strong> with Selenium Java).</p>\n      {{else if (eq @scriptType 'JMeter')}}\n        <p>Parameters can be referenced in your test plan as JMeter properties (<code>${__P(param,5)}</code>). Parameters\n          can also be referenced as <strong>${paramName}</strong> within any field definition in your scenario.</p>\n      {{else if (eq @scriptType 'Gatling')}}\n        <p>Parameters can be referenced in your Gatling simulation code as system properties. For example, integer\n          parameter <strong>Abc</strong> is available as <strong>Integer.getInteger('Abc')</strong>.</p>\n      {{else if (eq @scriptType 'Locust')}}\n        <p>Parameters can be referenced in your code using environment variables. For example, parameter\n          <strong>Abc</strong> is available as the environment variable <strong>ABC</strong>.</p>\n      {{/if}}\n      <p>Declared scenario parameters cannot be renamed or deleted here. Please manage in the scenario definition.</p>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[24,0,\\\"btn btn-xs btn-primary m-t-5 mb-3\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Add parameter\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"addParam\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,6],[[28,[37,6],[[30,2]],null]],null],null,[[[41,[30,3,[\\\"name\\\"]],[[[1,\\\"      \\\"],[8,[39,8],null,[[\\\"@paramId\\\",\\\"@paramConfig\\\",\\\"@params\\\",\\\"@testCaseId\\\",\\\"@category\\\",\\\"@onParamChange\\\",\\\"@viewOnly\\\"],[[28,[37,9],[\\\"\\\"],null],[30,3],[30,4],[30,5],[30,6],[30,7],[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[3]],null],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"undeclaredParams\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[8,[39,8],null,[[\\\"@paramId\\\",\\\"@paramConfig\\\",\\\"@params\\\",\\\"@testCaseId\\\",\\\"@viewOnly\\\",\\\"@category\\\",\\\"@allowDelete\\\",\\\"@onParamChange\\\",\\\"@deleteParam\\\"],[[28,[37,9],[\\\"\\\"],null],[30,8],[30,4],[30,5],[30,1],[30,6],true,[30,7],[30,0,[\\\"deleteUndeclaredParam\\\"]]]],null],[1,\\\"\\\\n\\\"]],[8]],null],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"additionalParams\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[8,[39,8],null,[[\\\"@paramId\\\",\\\"@paramConfig\\\",\\\"@params\\\",\\\"@testCaseId\\\",\\\"@viewOnly\\\",\\\"@category\\\",\\\"@allowDelete\\\",\\\"@onParamChange\\\",\\\"@deleteParam\\\"],[[28,[37,9],[\\\"\\\"],null],[30,9],[30,4],[30,5],[30,1],[30,6],true,[30,7],[30,0,[\\\"deleteAdditionalParam\\\"]]]],null],[1,\\\"\\\\n\\\"]],[9]],null],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[28,[37,11],[[30,10]],null],[28,[37,11],[[30,1]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info alert m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,11],\\\"Code\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"Parameter values are passed as both environment variables (e.g. myParamName is passed as environment variable\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"MYPARAMNAME\\\"],[13],[1,\\\") and as a \\\"],[10,\\\"strong\\\"],[12],[1,\\\"params\\\"],[13],[1,\\\" object (e.g. myParamName can be referenced\\\\n        as \\\"],[10,\\\"strong\\\"],[12],[1,\\\"params['myParamName']\\\"],[13],[1,\\\") to your Node.js script.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,11],\\\"PhantomJs\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"PhantomJS scripts can accept custom parameters that are accessible within your code using the \\\"],[10,\\\"strong\\\"],[12],[1,\\\"params['myParamName']\\\"],[13],[1,\\\"\\\\n        syntax.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,11],\\\"Selenium\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"Parameters can be referenced in your code using environment variables. For example, parameter\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Abc\\\"],[13],[1,\\\" is available as the environment variable \\\"],[10,\\\"strong\\\"],[12],[1,\\\"ABC\\\"],[13],[1,\\\" (and also as system\\\\n        property \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Abc\\\"],[13],[1,\\\" with Selenium Java).\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,11],\\\"JMeter\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"Parameters can be referenced in your test plan as JMeter properties (\\\"],[10,\\\"code\\\"],[12],[1,\\\"${__P(param,5)}\\\"],[13],[1,\\\"). Parameters\\\\n        can also be referenced as \\\"],[10,\\\"strong\\\"],[12],[1,\\\"${paramName}\\\"],[13],[1,\\\" within any field definition in your scenario.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,11],\\\"Gatling\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"Parameters can be referenced in your Gatling simulation code as system properties. For example, integer\\\\n        parameter \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Abc\\\"],[13],[1,\\\" is available as \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Integer.getInteger('Abc')\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,11],\\\"Locust\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"Parameters can be referenced in your code using environment variables. For example, parameter\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Abc\\\"],[13],[1,\\\" is available as the environment variable \\\"],[10,\\\"strong\\\"],[12],[1,\\\"ABC\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"    \\\"],[10,2],[12],[1,\\\"Declared scenario parameters cannot be renamed or deleted here. Please manage in the scenario definition.\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@viewOnly\\\",\\\"@paramsConfig\\\",\\\"paramConfig\\\",\\\"@params\\\",\\\"@testCaseId\\\",\\\"@category\\\",\\\"@onParamChange\\\",\\\"paramConfig\\\",\\\"paramConfig\\\",\\\"@hideInfo\\\",\\\"@scriptType\\\"],[\\\"div\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"capture-param\\\",\\\"generate-id\\\",\\\"and\\\",\\\"not\\\",\\\"span\\\",\\\"eq\\\",\\\"p\\\",\\\"strong\\\",\\\"code\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/capture-params.hbs\",\n    \"isStrictMode\": false\n  });\n  let CaptureParamsComponent = _exports.default = (_class = class CaptureParamsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"additionalParams\", _descriptor, this);\n      _defineProperty(this, \"_undeclaredParamsCache\", new Map());\n      this.additionalParams = new _trackedBuiltIns.TrackedArray();\n      (0, _observers.addObserver)(this, 'args.params', this.onSavedParamsChanged);\n      (0, _observers.addObserver)(this, 'args.paramsConfig', this.onSavedParamsChanged);\n    }\n    willDestroy() {\n      (0, _observers.removeObserver)(this, 'args.params', this.onSavedParamsChanged);\n      (0, _observers.removeObserver)(this, 'args.paramsConfig', this.onSavedParamsChanged);\n    }\n    onSavedParamsChanged() {\n      const paramsConfig = this.args.paramsConfig;\n      const undeclaredParams = this.undeclaredParams;\n      this.additionalParams = new _trackedBuiltIns.TrackedArray(_.filter(this.additionalParams, ap => {\n        const pcIndex = _.findIndex(paramsConfig, pc => {\n          return pc.name === ap.name;\n        });\n        const upIndex = _.findIndex(undeclaredParams, up => {\n          return up.name === ap.name;\n        });\n        return pcIndex === -1 && upIndex === -1;\n      }));\n    }\n    get undeclaredParams() {\n      const params = this.args.params;\n      const paramsConfig = this.args.paramsConfig;\n      const answer = [];\n      _.forEach(params, (val, key) => {\n        const existing = _.find(paramsConfig, pc => pc.name === key);\n        if (!existing) {\n          let paramObj = this._undeclaredParamsCache.get(key);\n          if (!paramObj || paramObj.name !== key) {\n            paramObj = {\n              name: key\n            };\n            this._undeclaredParamsCache.set(key, paramObj);\n          }\n          answer.push(paramObj);\n        } else {\n          existing.name = key;\n        }\n      });\n      return answer;\n    }\n    deleteFrom(paramsConfig, param, val) {\n      const paramObj = paramsConfig.find(c => {\n        return c.name === param.name;\n      });\n      if (paramObj) {\n        const idx = paramsConfig.indexOf(paramObj);\n        if (idx > -1) paramsConfig.splice(idx, 1);\n        if (typeof this.args.onParamDelete === 'function') {\n          this.args.onParamDelete(paramObj);\n        }\n      }\n    }\n    addParam() {\n      this.additionalParams.push({\n        name: ''\n      });\n    }\n    deleteUndeclaredParam(param, val) {\n      this.deleteFrom(this.undeclaredParams, param, val);\n      this._undeclaredParamsCache.delete(param.name);\n    }\n    deleteAdditionalParam(param, val) {\n      this.deleteFrom(this.additionalParams, param, val);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"additionalParams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"addParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addParam\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteUndeclaredParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteUndeclaredParam\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteAdditionalParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteAdditionalParam\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CaptureParamsComponent);\n});","define(\"@testable/shared-ui/components/command-related-results-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _loadTest, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"suiteRelatedResultsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Related Iteration Results</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">Command</div>\n              <Ui::PSelect @options={{this.commandOptions}}\n                       @selected={{this.selectedCommand}}\n                       class=\"width-200\"\n                       @placeholder=\"Select a command...\"\n                       @onChange={{this.updateSelectedCommand}} as |command|>\n  \n                {{#if (gte command.id 0)}}\n                  <span class=\"green m-r-10\">\n                    <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" class=\"m-r-5\" />{{print-number command.statePassed}}\n                  </span>\n                  <span class=\"red m-r-10\">\n                    <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" class=\"m-r-5\"/>{{print-number command.stateFailed}}\n                  </span>\n                {{/if}}\n                {{command.description}}\n              </Ui::PSelect>\n            </div>\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">Error</div>\n              <Ui::PSelect @options={{this.errorOptions}}\n                       @selected={{this.selectedError}}\n                       @selectedItemComponent=\"print-selected-command-error\"\n                       class=\"width-200\"\n                       @placeholder=\"Select an error...\"\n                       @onChange={{this.updateSelectedError}} as |errorOption|>\n                <span class=\"semi-bold\">{{html-safe (truncate-string errorOption.commandError.name)}}</span>\n              </Ui::PSelect>\n            </div>\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">\n                {{#if this.isMultiUser}}\n                  {{@overallModel.script.scriptType}} Instance #\n                {{else}}\n                  User #\n                {{/if}}\n              </div>\n              {{#if this.loadingUsers}}\n                Loading users...\n              {{else}}\n                <Ui::PSelect @options={{this.commandUsers}}\n                             @selected={{this.selectedUser}}\n                             @placeholder=\"Please select a user...\"\n                             @onChange={{this.updateUser}} as |user|>\n                {{#if this.isMultiUser}}\n                  {{@overallModel.script.scriptType}} Instance {{user}}\n                {{else}}\n                  User {{user}}\n                {{/if}}\n              </Ui::PSelect>\n              {{/if}}\n            </div>\n            {{#if this.isMultiUser}}\n              <div class=\"m-r-20\">\n                {{#if (is-number this.selectedUser)}}\n                  <div class=\"f-w-700 m-b-5\">\n                    Thread\n                    {{if (gt this.threadsCount this.threads.length) (concat ' (' this.threads.length '/' (print-number this.threadsCount) ')')}}\n                  </div>\n                  {{#if this.threadsLoaded}}\n                    {{#if (gt this.threads.length 0)}}\n                      <Ui::PSelect @options={{this.threads}}\n                               @selected={{this.thread}}\n                               class=\"width-200\"\n                               @placeholder=\"Please select a thread...\"\n                               @onChange={{this.updateThread}} as |thread|>\n                        {{thread.threadId}}\n                      </Ui::PSelect>\n                    {{else}}\n                      No threads.\n                    {{/if}}\n                  {{else}}\n                    Loading threads...\n                  {{/if}}\n                {{/if}}\n              </div>\n            {{/if}}\n            {{#if (and (or (not this.isMultiUser) this.thread) (is-number this.selectedUser))}}\n              <div>\n                <div class=\"f-w-700 m-b-5\">\n                  Iteration\n                  {{if (gt this.iterationCount this.iterations.length) (concat ' (' this.iterations.length '/' (print-number this.iterationCount) ')')}}\n                </div>\n                {{#if (and this.threadsLoaded this.iterationsLoaded)}}\n                  {{#if (gt this.iterations.length 0)}}\n                    <Ui::PSelect @options={{this.iterations}}\n                             @selected={{this.selectedIteration}}\n                             @placeholder=\"Please select an iteration...\"\n                             class=\"width-200\"\n                             @onChange={{this.updateIteration}} as |iteration|>\n                      {{#if (is-number iteration.iteration)}}\n                        {{#if this.isMultiUser}}{{iteration.threadId}}{{else}}\n                          User {{print-number iteration.user}}{{/if}} Iteration {{print-number\n                              iteration.iteration}} {{print-number iteration.totalTimeMs}}ms ({{iteration.id}})\n                      {{else}}\n                        {{iteration.id}}\n                      {{/if}}\n                    </Ui::PSelect>\n                  {{else}}\n                    No iterations found.\n                  {{/if}}\n                {{else if this.thread}}\n                  Loading iterations...\n                {{else if (and (not this.isMultiUser) (not this.threadsLoaded))}}\n                  Loading threads...\n                {{/if}}\n              </div>\n            {{/if}}\n            {{#if this.sessions.length}}\n              <div class=\"m-l-10\">\n                <div class=\"f-w-700 m-b-5\">\n                  Session\n                </div>\n                <Ui::PSelect\n                        @options={{this.sessions}}\n                        @selected={{this.selectedSession}}\n                        @placeholder=\"Please select a session...\"\n                        @onChange={{this.onChangeSession}} as |option| >\n                        {{option.title}}\n                </Ui::PSelect>\n              </div>\n            {{/if}}\n          </div>\n          {{#if this.selectedIteration.id}}\n            <IterationResults @overallModel={{@overallModel}}\n                              @iteration={{this.selectedIteration.id}}\n                              @selectedSession={{this.selectedSessionNum}}\n                              @updateMaxSessionNum={{this.updateMaxSessionNum}}\n                              @isInModal={{true}}\n                              @regionName=\"iterationResultsModal\"\n                              @showImageDetailsModal={{@showImageDetailsModal}}\n                              @containerModalId=\"suiteRelatedResultsModal\"\n            />\n          {{else}}\n            <div class=\"m-t-10\">Please select search criteria above to find a specific test iteration...</div>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"suiteRelatedResultsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Related Iteration Results\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Command\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,4],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandOptions\\\"]],[30,0,[\\\"selectedCommand\\\"]],\\\"Select a command...\\\",[30,0,[\\\"updateSelectedCommand\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,6],[[30,1,[\\\"id\\\"]],0],null],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"green m-r-10\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],null],[1,[28,[35,9],[[30,1,[\\\"statePassed\\\"]]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"red m-r-10\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],null],[1,[28,[35,9],[[30,1,[\\\"stateFailed\\\"]]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[1,[30,1,[\\\"description\\\"]]],[1,\\\"\\\\n            \\\"]],[1]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,4],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"errorOptions\\\"]],[30,0,[\\\"selectedError\\\"]],\\\"print-selected-command-error\\\",\\\"Select an error...\\\",[30,0,[\\\"updateSelectedError\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,10],[[28,[37,11],[[30,2,[\\\"commandError\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n            \\\"]],[2]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"                \\\"],[1,[30,3,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance #\\\\n\\\"]],[]],[[[1,\\\"                User #\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingUsers\\\"]],[[[1,\\\"              Loading users...\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[39,4],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandUsers\\\"]],[30,0,[\\\"selectedUser\\\"]],\\\"Please select a user...\\\",[30,0,[\\\"updateUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"                \\\"],[1,[30,3,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance \\\"],[1,[30,4]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                User \\\"],[1,[30,4]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[4]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"selectedUser\\\"]]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n                  Thread\\\\n                  \\\"],[1,[52,[28,[37,13],[[30,0,[\\\"threadsCount\\\"]],[30,0,[\\\"threads\\\",\\\"length\\\"]]],null],[28,[37,14],[\\\" (\\\",[30,0,[\\\"threads\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,9],[[30,0,[\\\"threadsCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"threadsLoaded\\\"]],[[[41,[28,[37,13],[[30,0,[\\\"threads\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[8,[39,4],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"threads\\\"]],[30,0,[\\\"thread\\\"]],\\\"Please select a thread...\\\",[30,0,[\\\"updateThread\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,5,[\\\"threadId\\\"]]],[1,\\\"\\\\n                    \\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    No threads.\\\\n\\\"]],[]]]],[]],[[[1,\\\"                  Loading threads...\\\\n\\\"]],[]]]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[28,[37,16],[[28,[37,17],[[30,0,[\\\"isMultiUser\\\"]]],null],[30,0,[\\\"thread\\\"]]],null],[28,[37,12],[[30,0,[\\\"selectedUser\\\"]]],null]],null],[[[1,\\\"            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n                Iteration\\\\n                \\\"],[1,[52,[28,[37,13],[[30,0,[\\\"iterationCount\\\"]],[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null],[28,[37,14],[\\\" (\\\",[30,0,[\\\"iterations\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,9],[[30,0,[\\\"iterationCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"threadsLoaded\\\"]],[30,0,[\\\"iterationsLoaded\\\"]]],null],[[[41,[28,[37,13],[[30,0,[\\\"iterations\\\",\\\"length\\\"]],0],null],[[[1,\\\"                  \\\"],[8,[39,4],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],\\\"Please select an iteration...\\\",[30,0,[\\\"updateIteration\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,6,[\\\"iteration\\\"]]],null],[[[1,\\\"                      \\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,[30,6,[\\\"threadId\\\"]]]],[]],[[[1,\\\"\\\\n                        User \\\"],[1,[28,[35,9],[[30,6,[\\\"user\\\"]]],null]]],[]]],[1,\\\" Iteration \\\"],[1,[28,[35,9],[[30,6,[\\\"iteration\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,9],[[30,6,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,6,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[1,[30,6,[\\\"id\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  No iterations found.\\\\n\\\"]],[]]]],[]],[[[41,[30,0,[\\\"thread\\\"]],[[[1,\\\"                Loading iterations...\\\\n\\\"]],[]],[[[41,[28,[37,15],[[28,[37,17],[[30,0,[\\\"isMultiUser\\\"]]],null],[28,[37,17],[[30,0,[\\\"threadsLoaded\\\"]]],null]],null],[[[1,\\\"                Loading threads...\\\\n              \\\"]],[]],null]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"sessions\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n                Session\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"sessions\\\"]],[30,0,[\\\"selectedSession\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,7,[\\\"title\\\"]]],[1,\\\"\\\\n              \\\"]],[7]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[[[1,\\\"          \\\"],[8,[39,18],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedSession\\\",\\\"@updateMaxSessionNum\\\",\\\"@isInModal\\\",\\\"@regionName\\\",\\\"@showImageDetailsModal\\\",\\\"@containerModalId\\\"],[[30,3],[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[30,0,[\\\"selectedSessionNum\\\"]],[30,0,[\\\"updateMaxSessionNum\\\"]],true,\\\"iterationResultsModal\\\",[30,8],\\\"suiteRelatedResultsModal\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Please select search criteria above to find a specific test iteration...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"command\\\",\\\"errorOption\\\",\\\"@overallModel\\\",\\\"user\\\",\\\"thread\\\",\\\"iteration\\\",\\\"option\\\",\\\"@showImageDetailsModal\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"gte\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"is-number\\\",\\\"gt\\\",\\\"concat\\\",\\\"and\\\",\\\"or\\\",\\\"not\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-related-results-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandRelatedResultsModalComponent = _exports.default = (_class = class CommandRelatedResultsModalComponent extends _component2.default {\n    get isPublic() {\n      return !!this.args.overallModel.uuid;\n    }\n    get requestID() {\n      return this.isPublic ? this.args.overallModel.uuid : this.args.overallModel.id;\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel.script.scriptType);\n    }\n    get getParams() {\n      const params = {\n        limit: 500\n      };\n      if (this.selectedCommand.commandNameId > 0) {\n        params.commandNameId = this.selectedCommand.commandNameId;\n      }\n      if (this.selectedError.commandErrorId > 0) {\n        params.commandErrorId = this.selectedError.commandErrorId;\n      }\n      return params;\n    }\n    async loadConcurrentClientOptions() {\n      this.loadingUsers = true;\n      try {\n        const users = await this.api.commandStreams.getCommandRelatedUsers(this.requestID, this.getParams, this.isPublic);\n        this.commandUsers = _.map(users, user => '' + user);\n      } catch (e) {\n        console.log(e);\n      }\n      this.loadingUsers = false;\n    }\n    async loadThreadIds() {\n      const user = this.selectedUser;\n      const isMultiUser = this.isMultiUser;\n      if (_lib.default.isNumber(user)) {\n        this.threadsLoaded = false;\n        this.thread = null;\n        let threads;\n        try {\n          threads = await this.api.commandStreams.getCommandRelatedThreads(this.requestID, user, this.getParams, this.isPublic, r => {\n            const threadsCount = r.getResponseHeader('X-Testable-Count');\n            if (_.isString(threadsCount)) {\n              this.threadsCount = Number(threadsCount);\n            }\n          });\n        } catch (e) {\n          console.log(e);\n          this.threads = [];\n          this.threadsCount = 0;\n          this.threadsLoaded = true;\n          return;\n        }\n        this.threads = _.sortBy(threads, ['threadId']);\n        if (!isMultiUser && threads.length > 0) {\n          this.thread = threads[0];\n          this.loadIterations();\n        } else {\n          this.thread = null;\n        }\n        this.threadsLoaded = true;\n      }\n    }\n    async loadIterations() {\n      if (this.thread) {\n        this.selectedIteration = null;\n        this.iterationsLoaded = false;\n        this.iterationCount = 0;\n        this.iterations = [];\n        let iterations;\n        try {\n          iterations = await this.api.commandStreams.getCommandRelatedIterations(this.requestID, this.thread.threadId, this.getParams, this.isPublic, r => {\n            const iterationCount = r.getResponseHeader('X-Testable-Count');\n            if (_.isString(iterationCount)) {\n              this.iterationCount = Number(iterationCount);\n            }\n          });\n        } catch (e) {\n          console.log(e);\n          this.iterations = [];\n          this.iterationCount = 0;\n          this.iterationsLoaded = true;\n          return;\n        }\n        this.iterations = iterations;\n        if (iterations && iterations.length === 1) {\n          this.selectedIteration = iterations[0];\n        }\n        this.iterationsLoaded = true;\n      } else {\n        this.iterations = [];\n        this.iterationCount = 0;\n        this.iterationsLoaded = false;\n      }\n    }\n    updateThread(thread) {\n      this.thread = thread;\n      if (thread) {\n        this.loadIterations();\n      }\n    }\n    updateMaxSessionNum(sessionNum) {\n      if (!sessionNum || sessionNum < 0 || !isFinite(sessionNum)) return;\n      this.sessions = _lib.default.getSessionsList(sessionNum);\n      this.selectedSession = this.sessions[0];\n      this.selectedSessionNum = this.selectedSession?.value;\n    }\n    updateIteration(iteration) {\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      const action = this.api.liveVideos.getIterationVideos(this.args.overallModel.uuid || this.args.overallModel.id, iteration.id, params, !!this.args.overallModel.uuid);\n      action.then(results => {\n        results = _.sortBy(results, ['createdAt']);\n        this.updateMaxSessionNum(Math.max(...results.map(o => o.sessionNum)));\n        this.selectedIteration = iteration;\n      }, () => {\n        // this.set('video', null);\n      });\n    }\n    updateSelectedCommand(command) {\n      this.selectedCommand = command;\n      this.loadConcurrentClientOptions();\n    }\n    onChangeSession(selectedSession) {\n      this.selectedSession = selectedSession;\n      this.selectedSessionNum = selectedSession.value;\n    }\n    updateSelectedError(value) {\n      this.selectedError = value;\n      this.selectedUser = null;\n      this.loadConcurrentClientOptions();\n    }\n    updateUser(user) {\n      this.selectedUser = user;\n      this.loadThreadIds();\n    }\n    get commandOptions() {\n      const answer = [{\n        id: -1,\n        description: 'ALL'\n      }];\n      const options = [];\n      _.forEach(this.args.commands, cmd => options.push(cmd));\n      answer.push({\n        groupName: 'Commands',\n        options: options\n      });\n      return answer;\n    }\n    get errorOptions() {\n      const answer = [{\n        commandError: {\n          id: -1,\n          name: 'ALL'\n        }\n      }];\n      _.forEach(this.args.commandErrors, err => answer.push(err));\n      return answer;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"loadingUsers\", _descriptor3, this);\n      _initializerDefineProperty(this, \"commandUsers\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedCommand\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedError\", _descriptor6, this);\n      _initializerDefineProperty(this, \"selectedUser\", _descriptor7, this);\n      _initializerDefineProperty(this, \"sessions\", _descriptor8, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor9, this);\n      _initializerDefineProperty(this, \"selectedSessionNum\", _descriptor0, this);\n      _initializerDefineProperty(this, \"threads\", _descriptor1, this);\n      _initializerDefineProperty(this, \"threadsLoaded\", _descriptor10, this);\n      _initializerDefineProperty(this, \"threadsCount\", _descriptor11, this);\n      _initializerDefineProperty(this, \"thread\", _descriptor12, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor13, this);\n      _initializerDefineProperty(this, \"iterationsLoaded\", _descriptor14, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor15, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor16, this);\n      this.selectedError = this.args.error || this.errorOptions[0];\n      this.selectedCommand = this.args.command || this.commandOptions[0];\n    }\n    didInsert() {\n      const self = this;\n      $('#suiteRelatedResultsModal').on('hidden.bs.modal', function () {\n        self.args.modalClosed();\n      });\n      $('#suiteRelatedResultsModal').modal('show');\n      this.loadConcurrentClientOptions();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"loadingUsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"commandUsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"selectedUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"sessions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"selectedSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"threads\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"threadsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"threadsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"thread\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"iterationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateThread\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateThread\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxSessionNum\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxSessionNum\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedError\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandRelatedResultsModalComponent);\n});","define(\"@testable/shared-ui/components/command-stream-command\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _server, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span class=\"pull-right\" {{did-insert this.didInsert}}>\n    {{#if (is-number @command.duration)}}\n      <Ui::Icon @icon=\"fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Duration\" class=\"m-r-15 saved-status\">\n        {{@command.duration}}ms\n      </Ui::Icon>\n    {{/if}}\n    {{#if this.getScreenshot.viewUrl}}\n      <Ui::Icon @icon=\"fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Has Associated Screenshot\" class=\"m-r-15 saved-status\">\n        1\n      </Ui::Icon>\n    {{/if}}\n  </span>\n  <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#headingCommandBody{{this.uniqueId}}\"\n     aria-expanded=\"false\"\n     class=\"m-r-10\"\n     aria-controls=\"headingCommandBody{{this.uniqueId}}\">\n      <Ui::Icon @icon=\"fa fa-plus\" />\n     </a>\n  \n  <code data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n        data-bs-html=\"true\"\n        title=\"Occurred At: {{concat (print-datetime @command.startedAt)\n                                     (if this.showVideoPlayControls \"<br>Click to view the video when this command was performed\")}}\"\n        class=\"m-r-10 width-50 text-center inline-block\n                        {{if this.showVideoPlayControls \"offset-play-icon cursor-pointer\"}}\"\n    {{on 'click' this.videoSeekPosition}}\n  >\n    {{#if this.showVideoPlayControls}}\n      <Ui::Icon @icon=\"fa fa-play\" />\n    {{/if}}\n    {{this.getOffset}}\n  </code>\n  \n  <Ui::Icon @icon={{this.getCommandStateClass}} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" class=\"m-r-15\" />\n  \n  <strong>{{@command.description}}</strong>\n  {{#if @command.subDescription}}\n    <span class=\"saved-status m-l-10\">{{html-safe\n            (truncate-string @command.subDescription 50 true null 'truncate-inline p-b-3')}}</span>\n  {{/if}}\n  \n  \n  <div id=\"headingCommandBody{{this.uniqueId}}\"\n       class=\"command-panel-commands suite-expand collapse p-b-0\"\n       aria-expanded=\"false\">\n    {{#if this.showBody}}\n    <div class=\"widget-row m-t-10\">\n      {{#if this.getScreenshot.viewUrl}}\n        <div class=\"width-250 m-r-10\">\n          <a href={{this.getScreenshot.viewUrl}} data-fancybox=\"command-error-images-{{this.uniqueId}}\"\n             data-modal-id={{@containerModalId}}\n             data-caption=\"\">\n            <img class=\"w-100 success-image\" src=\"{{this.getScreenshot.thumbnailUrl}}\"\n                 alt={{this.getScreenshot.name}} role=\"none\"/>\n          </a>\n        </div>\n      {{/if}}\n      <div class=\"widget-container\">\n        <ul class=\"nav nav-pills\" id=\"CommandTabsNav_{{this.uniqueId}}\">\n          {{#if this.showTabErrors}}\n            <li class=\"nav-items\">\n              <a href=\"#command-error-tab_{{this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link active\">Error</a>\n            </li>\n          {{/if}}\n          <li class=\"nav-items\">\n            <a href=\"#command-params-tab_{{this.uniqueId}}\" data-bs-toggle=\"tab\"\n               class=\"nav-link {{unless this.showTabErrors 'active'}}\">\n              Params\n            </a>\n          </li>\n          <li class=\"nav-items\">\n            <a href=\"#command-request-tab_{{this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link\">Request</a>\n          </li>\n          <li class=\"nav-items\">\n            <a href=\"#command-response-tab_{{this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link\">Response</a>\n          </li>\n        </ul>\n        <div class=\"tab-content \">\n          {{#if this.showTabErrors}}\n            <div class=\"{{if @isPrint '' 'tab-pane fade '}} active show\" id=\"command-error-tab_{{this.uniqueId}}\">\n              <Ui::CopyText class=\"btn-circle text-primary float-right\" @title=\"Copy Error\" @text={{this.error}} />\n              <pre class=\"m-0 danger\"><strong>{{@command.status}}</strong><br><br>{{this.error}}</pre>\n            </div>\n          {{/if}}\n  \n          <div class=\"{{if @isPrint '' 'tab-pane fade '}} {{if this.showTabErrors '' 'active show'}}\"\n               id=\"command-params-tab_{{this.uniqueId}}\">\n            <Ui::CopyText class=\"btn-circle text-primary float-right\" @title=\"Copy Params\" @text={{this.getParamsText}} />\n            <pre class=\"m-0\">{{html-safe this.getParams}}</pre>\n          </div>\n  \n          <div class=\"{{if @isPrint '' 'tab-pane fade  '}}\" id=\"command-request-tab_{{this.uniqueId}}\">\n            {{#if (eq this.currentTab (concat '#command-request-tab_' this.uniqueId))}}\n              <div {{did-insert this.loadRequest}}>\n                {{#if this.loadingCommandDetails}}\n                  <Ui::Icon @icon=\"fa fa-spinner fa-spin\" class=\"m-r-5\" /> Loading ...\n                {{else if this.request}}\n                  <Ui::CopyText class=\"btn-circle text-primary float-right\" @title=\"Copy Request\" @text={{this.request}} />\n                  <pre class=\"m-0\">{{this.request}}</pre>\n                {{else}}\n                  No request data\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n  \n          <div class=\"{{if @isPrint '' 'tab-pane fade'}}\" id=\"command-response-tab_{{this.uniqueId}}\">\n            {{#if (eq this.currentTab (concat '#command-response-tab_' this.uniqueId))}}\n              <div {{did-insert this.loadResponse}}>\n                {{#if this.loadingCommandDetails}}\n                  <Ui::Icon @icon=\"fa fa-spinner fa-spin\" class=\"m-r-5\" /> Loading ...\n                {{else}}\n                  {{#if this.imageBase64}}\n                    <a href=\"data:image/png;base64,{{this.imageBase64}}\" data-fancybox=\"command-images-{{this.uniqueId}}\"\n                       data-caption=\"\" data-modal-id={{@containerModalId}}>\n                      <img src=\"data:image/png;base64,{{this.imageBase64}}\" alt=\"\" class=\"width-250\" role=\"none\"/>\n                    </a>\n                  {{else if this.response}}\n                    <Ui::CopyText class=\"btn-circle text-primary float-right\" @title=\"Copy Response\" @text={{this.response}} />\n                    <pre class=\"m-0\">{{this.response}}</pre>\n                  {{else}}\n                    No response data\n                  {{/if}}\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[24,0,\\\"pull-right\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,1,[\\\"duration\\\"]]],null],[[[1,\\\"    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,1,[\\\"duration\\\"]]],[1,\\\"ms\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getScreenshot\\\",\\\"viewUrl\\\"]],[[[1,\\\"    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Has Associated Screenshot\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      1\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#headingCommandBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[14,0,\\\"m-r-10\\\"],[15,\\\"aria-controls\\\",[29,[\\\"headingCommandBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n   \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[11,\\\"code\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"data-bs-html\\\",\\\"true\\\"],[16,\\\"title\\\",[29,[\\\"Occurred At: \\\",[28,[37,7],[[28,[37,8],[[30,1,[\\\"startedAt\\\"]]],null],[52,[30,0,[\\\"showVideoPlayControls\\\"]],\\\"<br>Click to view the video when this command was performed\\\"]],null]]]],[16,0,[29,[\\\"m-r-10 width-50 text-center inline-block\\\\n                      \\\",[52,[30,0,[\\\"showVideoPlayControls\\\"]],\\\"offset-play-icon cursor-pointer\\\"]]]],[4,[38,9],[\\\"click\\\",[30,0,[\\\"videoSeekPosition\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showVideoPlayControls\\\"]],[[[1,\\\"    \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[1,[30,0,[\\\"getOffset\\\"]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[[30,0,[\\\"getCommandStateClass\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"description\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"subDescription\\\"]],[[[1,\\\"  \\\"],[10,1],[14,0,\\\"saved-status m-l-10\\\"],[12],[1,[28,[35,11],[[28,[37,12],[[30,1,[\\\"subDescription\\\"]],50,true,null,\\\"truncate-inline p-b-3\\\"],null]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,1,[29,[\\\"headingCommandBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"command-panel-commands suite-expand collapse p-b-0\\\"],[14,\\\"aria-expanded\\\",\\\"false\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showBody\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"widget-row m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"getScreenshot\\\",\\\"viewUrl\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"width-250 m-r-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[15,6,[30,0,[\\\"getScreenshot\\\",\\\"viewUrl\\\"]]],[15,\\\"data-fancybox\\\",[29,[\\\"command-error-images-\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,\\\"data-modal-id\\\",[30,2]],[14,\\\"data-caption\\\",\\\"\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"img\\\"],[14,0,\\\"w-100 success-image\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"getScreenshot\\\",\\\"thumbnailUrl\\\"]]]]],[15,\\\"alt\\\",[30,0,[\\\"getScreenshot\\\",\\\"name\\\"]]],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"widget-container\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills\\\"],[15,1,[29,[\\\"CommandTabsNav_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTabErrors\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[29,[\\\"#command-error-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link active\\\"],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[15,6,[29,[\\\"#command-params-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[15,0,[29,[\\\"nav-link \\\",[52,[51,[30,0,[\\\"showTabErrors\\\"]]],\\\"active\\\"]]]],[12],[1,\\\"\\\\n            Params\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[15,6,[29,[\\\"#command-request-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"Request\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[15,6,[29,[\\\"#command-response-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"Response\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"tab-content \\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTabErrors\\\"]],[[[1,\\\"          \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"\\\",\\\"tab-pane fade \\\"],\\\" active show\\\"]]],[15,1,[29,[\\\"command-error-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],[[24,0,\\\"btn-circle text-primary float-right\\\"]],[[\\\"@title\\\",\\\"@text\\\"],[\\\"Copy Error\\\",[30,0,[\\\"error\\\"]]]],null],[1,\\\"\\\\n            \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-0 danger\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"status\\\"]]],[13],[10,\\\"br\\\"],[12],[13],[10,\\\"br\\\"],[12],[13],[1,[30,0,[\\\"error\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"\\\",\\\"tab-pane fade \\\"],\\\" \\\",[52,[30,0,[\\\"showTabErrors\\\"]],\\\"\\\",\\\"active show\\\"]]]],[15,1,[29,[\\\"command-params-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,18],[[24,0,\\\"btn-circle text-primary float-right\\\"]],[[\\\"@title\\\",\\\"@text\\\"],[\\\"Copy Params\\\",[30,0,[\\\"getParamsText\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-0\\\"],[12],[1,[28,[35,11],[[30,0,[\\\"getParams\\\"]]],null]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"\\\",\\\"tab-pane fade  \\\"]]]],[15,1,[29,[\\\"command-request-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"currentTab\\\"]],[28,[37,7],[\\\"#command-request-tab_\\\",[30,0,[\\\"uniqueId\\\"]]],null]],null],[[[1,\\\"            \\\"],[11,0],[4,[38,1],[[30,0,[\\\"loadRequest\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingCommandDetails\\\"]],[[[1,\\\"                \\\"],[8,[39,4],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading ...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"request\\\"]],[[[1,\\\"                \\\"],[8,[39,18],[[24,0,\\\"btn-circle text-primary float-right\\\"]],[[\\\"@title\\\",\\\"@text\\\"],[\\\"Copy Request\\\",[30,0,[\\\"request\\\"]]]],null],[1,\\\"\\\\n                \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-0\\\"],[12],[1,[30,0,[\\\"request\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                No request data\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"\\\",\\\"tab-pane fade\\\"]]]],[15,1,[29,[\\\"command-response-tab_\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"currentTab\\\"]],[28,[37,7],[\\\"#command-response-tab_\\\",[30,0,[\\\"uniqueId\\\"]]],null]],null],[[[1,\\\"            \\\"],[11,0],[4,[38,1],[[30,0,[\\\"loadResponse\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingCommandDetails\\\"]],[[[1,\\\"                \\\"],[8,[39,4],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading ...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"imageBase64\\\"]],[[[1,\\\"                  \\\"],[10,3],[15,6,[29,[\\\"data:image/png;base64,\\\",[30,0,[\\\"imageBase64\\\"]]]]],[15,\\\"data-fancybox\\\",[29,[\\\"command-images-\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"data-caption\\\",\\\"\\\"],[15,\\\"data-modal-id\\\",[30,2]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"data:image/png;base64,\\\",[30,0,[\\\"imageBase64\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,0,\\\"width-250\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"response\\\"]],[[[1,\\\"                  \\\"],[8,[39,18],[[24,0,\\\"btn-circle text-primary float-right\\\"]],[[\\\"@title\\\",\\\"@text\\\"],[\\\"Copy Response\\\",[30,0,[\\\"response\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-0\\\"],[12],[1,[30,0,[\\\"response\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  No response data\\\\n                \\\"]],[]]]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@command\\\",\\\"@containerModalId\\\",\\\"@isPrint\\\"],[\\\"span\\\",\\\"did-insert\\\",\\\"if\\\",\\\"is-number\\\",\\\"ui/icon\\\",\\\"a\\\",\\\"code\\\",\\\"concat\\\",\\\"print-datetime\\\",\\\"on\\\",\\\"strong\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"div\\\",\\\"img\\\",\\\"ul\\\",\\\"li\\\",\\\"unless\\\",\\\"ui/copy-text\\\",\\\"pre\\\",\\\"br\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-command.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandsSuiteResultComponent = _exports.default = (_class = class CommandsSuiteResultComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"uniqueId\", this.args.id + (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"currentTab\", _descriptor2, this);\n      _initializerDefineProperty(this, \"response\", _descriptor3, this);\n      _initializerDefineProperty(this, \"request\", _descriptor4, this);\n      _initializerDefineProperty(this, \"imageBase64\", _descriptor5, this);\n      _initializerDefineProperty(this, \"loadingCommandDetails\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showBody\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showError\", _descriptor8, this);\n      _defineProperty(this, \"commandDataCache\", void 0);\n    }\n    get getScreenshot() {\n      let ss = [];\n      if (this.args.command.isSmoke && this.args.command.filesLength > 0 && this.args.command.files[0]?.isImage) {\n        let command = this.args.command.files[0];\n        ss.viewUrl = command.dataUri;\n        ss.thumbnailUrl = command.dataUri;\n        ss.name = command.name;\n      } else if (this.args.command.screenshots?.length > 0) {\n        let screenshots = this.args.command.screenshots[0];\n        ss.viewUrl = screenshots.viewUrl;\n        ss.thumbnailUrl = screenshots.thumbnailUrl + '&big=true';\n        ss.name = screenshots.name;\n      }\n      return ss;\n    }\n    get showVideoPlayControls() {\n      return !!this.args.showVideoPlayControls && this.args.command.videoOffset && typeof this.args.videoSeekPosition === 'function';\n    }\n    get getOffset() {\n      let ms = this.args.command.startOffset || 0;\n      if (_lib.default.isNumber(ms)) {\n        let duration = moment.duration(ms, 'milliseconds');\n        let fromHours = Math.floor(duration.asHours());\n        let fromMinutes = Math.floor(duration.asMinutes() - fromHours * 60);\n        let fromSeconds = duration.asSeconds() - fromHours * 3600 - fromMinutes * 60;\n        if (fromSeconds < 0.1) fromSeconds = 0.1;\n        let roundFunction = value => {\n          if (value > 0) value = Math.round(32 / 60 * 10) / 10;\n          return value;\n        };\n        if (fromHours > 0) {\n          return `${fromHours + roundFunction(fromMinutes)}h`;\n        } else if (fromMinutes > 0) {\n          return `${fromMinutes + roundFunction(fromSeconds)}m`;\n        } else {\n          return `${Math.round(fromSeconds * 10) / 10}s`;\n        }\n      }\n      return '';\n    }\n    get showTabErrors() {\n      return !!this.args.command.error;\n    }\n    get getParams() {\n      let params = this.args.command.params;\n      if (params) {\n        params = JSON.parse(params);\n        if (Object.keys(params).length === 0) {\n          return 'No parameters for this command';\n        } else {\n          let paramsString = '';\n          for (let key in params) {\n            paramsString += `<strong>${key}:</strong> `;\n            if (typeof params[key] === 'object') {\n              paramsString += `${JSON.stringify(params[key], null, 2)}\\n`;\n            } else {\n              paramsString += `${params[key]}\\n`;\n            }\n          }\n          return paramsString;\n        }\n      }\n      return '';\n    }\n    get getParamsText() {\n      let params = this.args.command.params;\n      if (params) {\n        params = JSON.parse(params);\n        if (Object.keys(params).length === 0) {\n          return 'No parameters for this command';\n        } else {\n          let paramsString = '';\n          for (let key in params) {\n            paramsString += `${key}: `;\n            if (typeof params[key] === 'object') {\n              paramsString += `${JSON.stringify(params[key], null, 2)}\\n`;\n            } else {\n              paramsString += `${params[key]}\\n`;\n            }\n          }\n          return paramsString;\n        }\n      }\n      return '';\n    }\n    get getCommandStateClass() {\n      let state = this.args.command.state;\n      let cls = 'fa fa-lg ';\n      if (state === 'Failed') {\n        cls += 'fa-times-circle text-danger';\n      } else if (state === 'Passed') {\n        cls += 'fa-check-circle text-success';\n      } else if (state === 'InProgress') {\n        cls += 'fa-spinner fa-spin text-info';\n      }\n      return cls;\n    }\n    get error() {\n      if (_.isObject(this.args.command.error) && this.args.command.error.name) {\n        return this.args.command.error.name;\n      } else if (this.args.command.error) {\n        return this.args.command.error;\n      }\n    }\n    didInsert() {\n      const _this = this;\n      $(`#headingCommandBody${_this.uniqueId}`).on(\"show.bs.collapse\", function () {\n        _this.showBody = true;\n      });\n      if (this.args?.completed && this.args.command.state === 'Failed') {\n        $(`#headingCommandBody${_this.uniqueId}`).collapse('show');\n        _this.showBody = true;\n      }\n      $(document).on(\"shown.bs.tab\", `#CommandTabsNav_${_this.uniqueId} a`, function () {\n        const href = $(this).attr('href');\n        _this.currentTab = href;\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      $(`#headingCommandBody${this.uniqueId}`).off('show.bs.collapse');\n      $(document).off('shown.bs.tab', `#CommandTabsNav_${this.uniqueId} a`);\n    }\n    async loadResponse() {\n      const resp = await this.getCommandResponse();\n      const scriptType = this.args.scriptType;\n      const response = _.find(resp.datas, r => r.dataType === 'Response');\n      if (response?.data) {\n        if (resp.commandName.name === 'take-screenshot') {\n          this.imageBase64 = atob(response.data);\n        } else if (scriptType === 'Playwright' && resp.commandName.name === 'screenshot') {\n          this.imageBase64 = JSON.parse(atob(response.data))?.binary;\n        } else if (resp.commandName.name === 'DevTools: Page.captureScreenshot' || resp.commandName.name === 'Bidi: browsingContext.captureScreenshot' || scriptType === 'Puppeteer' && resp.commandName.name === 'Page.captureScreenshot') {\n          this.imageBase64 = JSON.parse(atob(response.data))?.data;\n        } else {\n          this.response = atob(response.data);\n        }\n      }\n    }\n    async loadRequest() {\n      const resp = await this.getCommandResponse();\n      const request = _.find(resp.datas, r => r.dataType === 'Request');\n      if (request?.data) {\n        this.request = JSON.stringify(JSON.parse(atob(request.data)), null, 2);\n      }\n    }\n    videoSeekPosition() {\n      if (!this.showVideoPlayControls) return;\n      if (typeof this.args?.videoSeekPosition === 'function' && this.args?.command?.videoOffset) {\n        if (this.args?.videoContainerSelector) {\n          let parent = this.args?.parentToScroll;\n          $(parent || 'html, body').animate({\n            scrollTop: $(this.args.videoContainerSelector)[parent ? 'position' : 'offset']().top - (parent ? 0 : 75)\n          }, 1000);\n        }\n        this.args.videoSeekPosition(this.args.command.videoOffset);\n      }\n    }\n    async getCommandResponse() {\n      this.loadingCommandDetails = true;\n      if (this.args.command.isSmoke) {\n        this.loadingCommandDetails = false;\n        return {\n          datas: [{\n            dataType: 'Request',\n            data: this.args.command.request\n          }, {\n            dataType: 'Response',\n            data: this.args.command.response\n          }],\n          commandName: {\n            name: this.args.command.commandName\n          }\n        };\n      }\n      if (!this.commandDataCache) {\n        try {\n          if (this.args.isPublic) {\n            this.commandDataCache = await _server.default.getTokenContent(this.args.isPublic, {\n              commandResultId: this.args.id,\n              includeData: true\n            });\n          } else {\n            this.commandDataCache = await this.api.commandStreams.getCommandDetails(this.args.id);\n          }\n        } catch (e) {\n          console.log(e);\n        }\n      }\n      this.loadingCommandDetails = false;\n      return this.commandDataCache;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"response\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"request\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"imageBase64\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"loadingCommandDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadResponse\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadResponse\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadRequest\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadRequest\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSeekPosition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSeekPosition\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandsSuiteResultComponent);\n});","define(\"@testable/shared-ui/components/command-stream-summaries-stats\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel-heading-btn\" ...attributes>\n    <span class=\"stats {{if @hideOnLg 'd-lg-none'}} {{if @hideOnSm 'd-none d-lg-inline'}}\">\n      {{#if this.getDuration}}\n        <Ui::Icon\n          @icon=\"fa fa-lg fa-clock\"\n          class=\"m-r-15\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"top\"\n          title=\"Total Duration\" >\n          {{html-safe this.getDuration}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getPassed}}\n        <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Passed\" class=\"m-r-15\">\n          {{html-safe this.getPassed}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getFailed}}\n        <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Failed\" class=\"m-r-15\">\n          {{html-safe this.getFailed}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getInProgress}}\n        <Ui::Icon @icon=\"fa fa-lg fa-spinner fa-spin\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands In Progress\" class=\"m-r-15\">\n          {{print-number this.getInProgress}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getImages}}\n        <Ui::Icon @icon=\"fa fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15\">\n          {{html-safe this.getImages}}\n        </Ui::Icon>\n      {{/if}}\n    </span>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"panel-heading-btn\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[10,1],[15,0,[29,[\\\"stats \\\",[52,[30,2],\\\"d-lg-none\\\"],\\\" \\\",[52,[30,3],\\\"d-none d-lg-inline\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"getDuration\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,0,\\\"m-r-15\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"getDuration\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getPassed\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Passed\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"getPassed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getFailed\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Failed\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"getFailed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getInProgress\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands In Progress\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,0,[\\\"getInProgress\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getImages\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"getImages\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@hideOnLg\\\",\\\"@hideOnSm\\\"],[\\\"div\\\",\\\"span\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"html-safe\\\",\\\"print-number\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-summaries-stats.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamSummariesStatsComponent = _exports.default = (_class = class CommandStreamSummariesStatsComponent extends _component2.default {\n    get currentSummary() {\n      return this.args.commandStreamSummaries[0];\n    }\n    get getPassed() {\n      return _lib.default.toText(this.currentSummary?.statePassed, this.currentSummary?.comparisons?.statePassed, '', false);\n    }\n    get getFailed() {\n      return _lib.default.toText(this.currentSummary?.stateFailed, this.currentSummary?.comparisons?.stateFailed, '', false);\n    }\n    get getImages() {\n      return _lib.default.toText(this.currentSummary?.images, this.currentSummary?.comparisons?.images, '', false);\n    }\n    get getInProgress() {\n      return this.args.commandStreamSummaries.reduce((acc, curr) => acc + curr.stateInProgress, 0);\n    }\n    get getDuration() {\n      return _lib.default.toText(this.currentSummary?.durationMean, this.currentSummary?.comparisons?.durationMean, 'ms', false);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"currentSummary\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"currentSummary\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamSummariesStatsComponent);\n});","define(\"@testable/shared-ui/components/command-stream-summaries-summary\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/object/observers\", \"@ember/runloop\", \"tracked-built-ins\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/models/command-summary\", \"@testable/shared-ui/models/command-stream-summary\", \"@testable/shared-ui/models/command\", \"@testable/shared-ui/models/command-stream-error\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _observers, _runloop, _trackedBuiltIns, _server, _commandSummary, _commandStreamSummary, _command, _commandStreamError, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/models/command-summary\",0,\"@testable/shared-ui/models/command-stream-summary\",0,\"@testable/shared-ui/models/command\",0,\"@testable/shared-ui/models/command-stream-error\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if (not @isComparison) \"hidden\"}} {{if (eq @title 'Baseline Test') 'm-t-10 p-t-10 with-border-top'}}\">\n    <strong>{{@title}} ({{this.commandCount}})</strong>\n    {{#if this.hasLoadedCommands}}\n      <div class=\"m-b-10\">\n        <BsButtonGroup class=\"no-print\" @value={{this.viewType}} @type=\"radio\" @onChange={{this.updateViewType}} as\n                        |bg|>\n          <bg.button @type=\"success\" @value=\"command\" @size=\"xs\">By Command ({{this.getCommandCount}})</bg.button>\n          <bg.button @type=\"success\" @value=\"error\" @size=\"xs\">By Error ({{this.commandStreamErrors.length}})</bg.button>\n        </BsButtonGroup>\n        <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n            target=\"_blank\"\n            title=\"Download details\" {{on \"click\" @updateShowDownloadModal}}>\n          <Ui::Icon @icon=\"fa fa-download\" />\n        </a>\n  \n        <CommandStreamSummariesStats\n                @commandStreamSummaries={{this.commandStreamSummaries}}\n        />\n      </div>\n    {{/if}}\n  </div>\n  \n  {{#if this.hasLoadedCommands}}\n    <div class=\"display-inline w-100 m-b-15 no-print\">\n      <div class=\"width-120 m-r-10 pull-left\">\n  \n        <Ui::PSelect @options={{this.browsers}}\n                     @selected={{this.browser}}\n                     @placeholder=\"Please select a deployment type...\"\n                     @onChange={{this.updateBrowser}} as |option|>\n          {{option.title}}\n        </Ui::PSelect>\n      </div>\n      {{#if (not (or (eq this.viewType 'error') (eq @viewType 'error')))}}\n        <div class=\"w-max-content pull-right\">\n          <div class=\"input-group\">\n            <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\"/></span>\n            <Input\n                    @type=\"text\"\n              {{on \"keyup\" this.onChangeFilter}}\n                    placeholder=\"Search...\"\n                    class=\"form-control\" />\n          </div>\n        </div>\n      {{/if}}\n      <div class=\" m-t-5\">\n        <BsButtonGroup @value={{this.commandOrder}} @type=\"radio\" @onChange={{this.updateCommandOrder}} as |bg|>\n          <bg.button @type=\"success width-100\" @value=\"chronological\" @size=\"xs\" class=\"width-100\">\n            Chronological\n          </bg.button>\n          <bg.button @type=\"success width-100\" @value=\"tail\" @size=\"xs\" class=\"width-100\">Tail</bg.button>\n        </BsButtonGroup>\n        <label class=\"normal vertical-align-sub m-l-10\">\n          <Input @type=\"checkbox\" @checked={{this.failureOnly}} {{on \"change\" this.failureOnlyUpdate}}  />\n          Show failures only\n        </label>\n        {{#if (or (eq @scriptType 'Puppeteer') (eq @scriptType 'Playwright') (eq @scriptType 'Selenium'))}}\n          <label class=\"normal vertical-align-sub m-l-10\">\n            <Input @type=\"checkbox\" @checked={{this.detailedView}} {{on \"change\" this.detailedViewUpdate}}  />\n            Detailed View\n            <Ui::InfoIcon\n                    @content=\"Detailed view of commands include any command related to initialization of the browser or\n                    setup that occurs before navigating to a URL. Simply check the box to include those commands.\"\n                    @placement=\"top\"\n                    class=\"m-l-5\"\n            />\n          </label>\n        {{/if}}\n      </div>\n    </div>\n  {{/if}}\n  {{#if this.isLoading}}\n    <div class=\"m-t-10\">Loading Commands ...</div>\n  {{else if (or (eq this.viewType 'error') (eq @viewType 'error'))}}\n    <CommandStreamSummaryErrors @errors={{this.commandStreamErrors}}\n                                @expand={{@expand}}\n                                @model={{@model}}\n                                @overallModel={{@overallModel}}\n                                @byRegionId={{@byRegionId}}\n                                @regionName={{@regionName}}\n                                @isViewer={{@isViewer}}\n                                @showCommandErrorRelatedResults={{this.showCommandErrorRelatedResults}}\n                                @showImageDetailsModal={{@showImageDetailsModal}}\n    />\n  \n  {{else}}\n    {{#if this.getCommands.length}}\n      <div class=\"suite-results\">\n        <table class=\"table m-t-5\">\n          <tbody>\n          {{#each this.filteredCommands as |command|}}\n            <CommandStreamSummaryCommand\n                    @model={{@model}}\n                    @executionRegionId={{@model.executionRegion.id}}\n                    @overallModel={{@overallModel}}\n                    @id={{command.commandNameId}}\n                    @executionId={{@overallModel.id}}\n                    @byRegionId={{@byRegionId}}\n                    @isAll={{@isAll}}\n                    @isLoad={{@isLoad}}\n                    @isMultiUser={{@isMultiUser}}\n                    @command={{command}}\n                    @completed={{@overallModel.completed}}\n                    @showCommandErrorRelatedResults={{this.showCommandErrorRelatedResults}}\n                    @onShowRelatedCommands={{this.onShowRelatedCommands}}\n                    @isPublic={{@overallModel.uuid}}\n                    @isViewer={{@isViewer}}\n                    @showImageDetailsModal={{@showImageDetailsModal}}\n                    @isBaseline={{@isBaseline}}\n            />\n          {{/each}}\n          </tbody>\n        </table>\n      </div>\n    {{else}}\n      No commands.\n    {{/if}}\n  {{/if}}\n  \n  \n  {{#if this.showCommandRelatedResultsModal}}\n    <CommandRelatedResultsModal @error={{this.selectedCommandError}}\n                                @command={{this.selectedCommand}}\n                                @commands={{this.getCommands}}\n                                @commandErrors={{this.commandStreamErrors}}\n                                @overallModel={{@overallModel}}\n                                @model={{@model}}\n                                @showImageDetailsModal={{@showImageDetailsModal}}\n                                @modalClosed={{this.commandRelatedResultsModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[28,[37,2],[[30,1]],null],\\\"hidden\\\"],\\\" \\\",[52,[28,[37,3],[[30,2],\\\"Baseline Test\\\"],null],\\\"m-t-10 p-t-10 with-border-top\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,\\\"strong\\\"],[12],[1,[30,2]],[1,\\\" (\\\"],[1,[30,0,[\\\"commandCount\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLoadedCommands\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewType\\\"]],\\\"radio\\\",[30,0,[\\\"updateViewType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"command\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Command (\\\"],[1,[30,0,[\\\"getCommandCount\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"error\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Error (\\\"],[1,[30,0,[\\\"commandStreamErrors\\\",\\\"length\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n      \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"target\\\",\\\"_blank\\\"],[24,\\\"title\\\",\\\"Download details\\\"],[4,[38,7],[\\\"click\\\",[30,4]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,9],null,[[\\\"@commandStreamSummaries\\\"],[[30,0,[\\\"commandStreamSummaries\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasLoadedCommands\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"display-inline w-100 m-b-15 no-print\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"width-120 m-r-10 pull-left\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,10],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"browsers\\\"]],[30,0,[\\\"browser\\\"]],\\\"Please select a deployment type...\\\",[30,0,[\\\"updateBrowser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,5,[\\\"title\\\"]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[28,[37,11],[[28,[37,3],[[30,0,[\\\"viewType\\\"]],\\\"error\\\"],null],[28,[37,3],[[30,6],\\\"error\\\"],null]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"w-max-content pull-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,8],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[8,[39,13],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"],[4,[38,7],[\\\"keyup\\\",[30,0,[\\\"onChangeFilter\\\"]]],null]],[[\\\"@type\\\"],[\\\"text\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\" m-t-5\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,5],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandOrder\\\"]],\\\"radio\\\",[30,0,[\\\"updateCommandOrder\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,7,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"chronological\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          Chronological\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,7,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"tail\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tail\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[7]]]]],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal vertical-align-sub m-l-10\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,13],[[4,[38,7],[\\\"change\\\",[30,0,[\\\"failureOnlyUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"failureOnly\\\"]]]],null],[1,\\\"\\\\n        Show failures only\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[28,[37,3],[[30,8],\\\"Puppeteer\\\"],null],[28,[37,3],[[30,8],\\\"Playwright\\\"],null],[28,[37,3],[[30,8],\\\"Selenium\\\"],null]],null],[[[1,\\\"        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal vertical-align-sub m-l-10\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,13],[[4,[38,7],[\\\"change\\\",[30,0,[\\\"detailedViewUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"detailedView\\\"]]]],null],[1,\\\"\\\\n          Detailed View\\\\n          \\\"],[8,[39,15],[[24,0,\\\"m-l-5\\\"]],[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Detailed view of commands include any command related to initialization of the browser or\\\\n                  setup that occurs before navigating to a URL. Simply check the box to include those commands.\\\",\\\"top\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Loading Commands ...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,11],[[28,[37,3],[[30,0,[\\\"viewType\\\"]],\\\"error\\\"],null],[28,[37,3],[[30,6],\\\"error\\\"],null]],null],[[[1,\\\"  \\\"],[8,[39,16],null,[[\\\"@errors\\\",\\\"@expand\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showCommandErrorRelatedResults\\\",\\\"@showImageDetailsModal\\\"],[[30,0,[\\\"commandStreamErrors\\\"]],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,0,[\\\"showCommandErrorRelatedResults\\\"]],[30,15]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[41,[30,0,[\\\"getCommands\\\",\\\"length\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"suite-results\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,20],[[28,[37,20],[[30,0,[\\\"filteredCommands\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,21],null,[[\\\"@model\\\",\\\"@executionRegionId\\\",\\\"@overallModel\\\",\\\"@id\\\",\\\"@executionId\\\",\\\"@byRegionId\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@command\\\",\\\"@completed\\\",\\\"@showCommandErrorRelatedResults\\\",\\\"@onShowRelatedCommands\\\",\\\"@isPublic\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"@isBaseline\\\"],[[30,10],[30,10,[\\\"executionRegion\\\",\\\"id\\\"]],[30,11],[30,16,[\\\"commandNameId\\\"]],[30,11,[\\\"id\\\"]],[30,12],[30,17],[30,18],[30,19],[30,16],[30,11,[\\\"completed\\\"]],[30,0,[\\\"showCommandErrorRelatedResults\\\"]],[30,0,[\\\"onShowRelatedCommands\\\"]],[30,11,[\\\"uuid\\\"]],[30,14],[30,15],[30,20]]],null],[1,\\\"\\\\n\\\"]],[16]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    No commands.\\\\n\\\"]],[]]]],[]]]],[]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCommandRelatedResultsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,22],null,[[\\\"@error\\\",\\\"@command\\\",\\\"@commands\\\",\\\"@commandErrors\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@showImageDetailsModal\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedCommandError\\\"]],[30,0,[\\\"selectedCommand\\\"]],[30,0,[\\\"getCommands\\\"]],[30,0,[\\\"commandStreamErrors\\\"]],[30,11],[30,10],[30,15],[30,0,[\\\"commandRelatedResultsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"bg\\\",\\\"@updateShowDownloadModal\\\",\\\"option\\\",\\\"@viewType\\\",\\\"bg\\\",\\\"@scriptType\\\",\\\"@expand\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"command\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@isBaseline\\\"],[\\\"div\\\",\\\"if\\\",\\\"not\\\",\\\"eq\\\",\\\"strong\\\",\\\"bs-button-group\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"command-stream-summaries-stats\\\",\\\"ui/p-select\\\",\\\"or\\\",\\\"span\\\",\\\"input\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"command-stream-summary-errors\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"command-stream-summary-command\\\",\\\"command-related-results-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-summaries-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamSummariesSummaryComponent = _exports.default = (_class = class CommandStreamSummariesSummaryComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"defaultBrowser\", {\n        id: 'All',\n        title: 'All'\n      });\n      _initializerDefineProperty(this, \"browser\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"failureOnly\", _descriptor4, this);\n      _initializerDefineProperty(this, \"detailedView\", _descriptor5, this);\n      _initializerDefineProperty(this, \"commandStreamSummaries\", _descriptor6, this);\n      _initializerDefineProperty(this, \"commandStreamErrors\", _descriptor7, this);\n      _initializerDefineProperty(this, \"commandOrder\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showCommandRelatedResultsModal\", _descriptor9, this);\n      _initializerDefineProperty(this, \"selectedCommandError\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedCommand\", _descriptor1, this);\n      _initializerDefineProperty(this, \"viewType\", _descriptor10, this);\n      _initializerDefineProperty(this, \"summaryFilter\", _descriptor11, this);\n      _initializerDefineProperty(this, \"hasLoadedCommands\", _descriptor12, this);\n      this.isLoading = true;\n      this.browser = this.defaultBrowser;\n      this.loadCommandsStreamAll();\n      (0, _observers.addObserver)(this, 'args.commandStream.overallSummary.updatedAt', this.commandStreamUpdated);\n      (0, _observers.addObserver)(this, 'args.commandStream.errors', this.commandStreamUpdated);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.commandStream.overallSummary.updatedAt', this.commandStreamUpdated);\n      (0, _observers.removeObserver)(this, 'args.commandStream.errors', this.commandStreamUpdated);\n    }\n    get filteredCommands() {\n      return this.summaryFilter ? this.getCommands.filter(command => command.description.toLowerCase().includes(this.summaryFilter.toLowerCase())) : this.getCommands;\n    }\n    async loadCommandsStreamAll() {\n      await this.loadCommandsStream();\n    }\n    get currentSummary() {\n      return this.commandStreamSummaries[0];\n    }\n    get commandCount() {\n      return this.commandStreamSummaries.reduce((acc, curr) => acc + curr.commandSummaries.length, 0);\n    }\n    get getCommandCount() {\n      const count = this.currentSummary?.commandSummaries?.length;\n      if (this.args.updateByCommandCount) (0, _runloop.next)(this, () => this.args.updateByCommandCount(count));\n      return count;\n    }\n    get getCommands() {\n      let returnCommands = [];\n      if (this.commandStreamSummaries.length === 0) {\n        return [];\n      }\n      returnCommands = this.commandStreamSummaries.map(stream => stream.commandSummaries);\n      returnCommands = [].concat(...returnCommands);\n      if (this.failureOnly) {\n        returnCommands = returnCommands.filter(cmd => cmd.stateFailed > 0);\n      }\n      if (this.commandOrder === 'tail') {\n        returnCommands = returnCommands.sort((a, b) => moment(b.firstStartedAt) - moment(a.firstStartedAt));\n      } else {\n        returnCommands = returnCommands.sort((a, b) => moment(a.firstStartedAt) - moment(b.firstStartedAt));\n      }\n      return returnCommands;\n    }\n    async loadCommandsStream() {\n      this.isLoading = true;\n      try {\n        let streams = new _trackedBuiltIns.TrackedArray();\n        let errors = new _trackedBuiltIns.TrackedArray();\n        let isAll = this.args.regionName === 'ALL';\n        let commandStreamSummaries;\n        const params = {};\n        if (this.browser.id !== 'All') params.browser = this.browser.id;\n        params.detailed = this.detailedView;\n        params.asc = this.commandOrder === 'chronological';\n        if (this.failureOnly) {\n          params.failuresOnly = true;\n        }\n        let executionRegionId;\n        if (this.args.isBaseline) {\n          executionRegionId = this.args.regionName === 'ALL' ? 'ALL' : this.args.regionBaselineId;\n        } else {\n          executionRegionId = this.args.model.executionRegion.id;\n        }\n        if (this.args.overallModel.uuid) {\n          params.commandRelated = true;\n          if (this.args.isBaseline) {\n            params.comparison = true;\n          }\n          if (!isAll) params.executionRegionId = executionRegionId;\n          commandStreamSummaries = await _server.default.getTokenContent(this.args.overallModel.uuid, params);\n        } else {\n          commandStreamSummaries = await this.api.commandStreams.getCommandStreamRelated(this.args.overallModel.id, !isAll ? executionRegionId : null, params);\n        }\n        commandStreamSummaries.summaries.forEach(stream => {\n          stream.limit = this.api.commandStreams.defaultLimit;\n          streams.push(new _commandStreamSummary.default(stream));\n        });\n        commandStreamSummaries.errors.forEach(stream => {\n          stream.limit = this.api.commandStreams.defaultLimit;\n          errors.push(new _commandStreamError.default(stream));\n        });\n        this.commandStreamSummaries = new _trackedBuiltIns.TrackedArray(streams);\n        this.commandStreamErrors = new _trackedBuiltIns.TrackedArray(errors);\n        if (streams.length > 0) {\n          this.hasLoadedCommands = true;\n        }\n        if (this.args.updateCommandStreamSummaries) {\n          this.args.updateCommandStreamSummaries(this.commandStreamSummaries);\n        }\n        if (this.args.updateCommandStreamErrors) {\n          this.args.updateCommandStreamErrors(this.commandStreamErrors);\n        }\n        this.isLoading = false;\n      } catch (e) {\n        console.log(e);\n        this.isLoading = false;\n      }\n    }\n    get browsers() {\n      let browsers = [];\n      let browsersExecuted;\n      if (this.args.regionName !== 'ALL') {\n        let region;\n        if (this.args.isBaseline) {\n          region = this.args.regions.find(r => r.id === this.args.regionBaselineId);\n        } else {\n          region = this.args.regions.find(r => r.region.name === this.args.regionName);\n        }\n        if (region) browsersExecuted = region.browsersExecuted;\n      } else {\n        browsersExecuted = this.args.browsersExecuted;\n      }\n      browsersExecuted?.forEach(browser => {\n        if (!browser || browsers.find(b => b.id === browser)) return;\n        browsers.push({\n          id: browser,\n          title: (0, _command.toBrowserVersion)(browser)\n        });\n      });\n      browsers.unshift(this.defaultBrowser);\n      return browsers;\n    }\n    updateCommandOrder(order) {\n      this.commandOrder = order;\n    }\n    updateBrowser(browser) {\n      this.browser = browser;\n      this.loadCommandsStream();\n    }\n    updateViewType(type) {\n      this.viewType = type;\n    }\n    failureOnlyUpdate(e) {\n      this.failureOnly = e.target.checked;\n      this.resetAndLoad();\n    }\n    detailedViewUpdate(e) {\n      this.detailedView = e.target.checked;\n      this.resetAndLoad();\n    }\n    resetAndLoad() {\n      this.commandStreamSummaries = new _trackedBuiltIns.TrackedArray();\n      this.commandStreamErrors = new _trackedBuiltIns.TrackedArray();\n      if (this.args.updateCommandStreamSummaries) {\n        this.args.updateCommandStreamSummaries([]);\n      }\n      if (this.args.updateCommandStreamErrors) {\n        this.args.updateCommandStreamErrors([]);\n      }\n      this.loadCommandsStream();\n    }\n    commandStreamUpdated() {\n      if (this.args.regionName !== 'ALL') {\n        const regions = this.args.overallModel?.regions;\n        const region = this.args.isBaseline ? regions?.find(r => r.id === this.args.regionBaselineId) : regions?.find(r => r.region.name === this.args.regionName);\n        if (region?.commandStreamSummaries?.length === 1) {\n          this.mergeCommandSummaries(region.commandStreamSummaries[0]);\n        }\n        if (region?.commandErrors?.length) {\n          this.mergeCommandErrors(region.commandErrors);\n        }\n      } else {\n        const update = this.args.commandStream;\n        this.mergeCommandSummaries(update.overallSummary);\n        this.mergeCommandErrors(update.errors);\n      }\n    }\n    mergeCommandSummaries(summary) {\n      if (!summary) {\n        return;\n      }\n      if (this.commandStreamSummaries.length === 0) {\n        this.commandStreamSummaries = new _trackedBuiltIns.TrackedArray([new _commandStreamSummary.default(summary)]);\n        if (this.args.updateCommandStreamSummaries) {\n          this.args.updateCommandStreamSummaries(this.commandStreamSummaries);\n        }\n      } else if (!this.currentSummary.browser) {\n        // real-time updates only come for the overall summary\n        this.currentSummary.id = summary.id;\n        this.currentSummary.createdAt = summary.createdAt;\n        this.currentSummary.updatedAt = summary.updatedAt;\n        this.currentSummary.executionId = summary.executionId;\n        this.currentSummary.durationMean = summary.durationMean;\n        this.currentSummary.count = summary.count;\n        this.currentSummary.commandCount = summary.commandCount;\n        this.currentSummary.statePassed = summary.statePassed;\n        this.currentSummary.stateFailed = summary.stateFailed;\n        this.currentSummary.stateInProgress = summary.stateInProgress;\n        this.currentSummary.images = summary.images;\n        this.currentSummary.files = summary.files;\n        this.currentSummary.firstStartedAt = summary.firstStartedAt;\n        this.currentSummary.browser = summary.browser;\n        this.currentSummary.comparisons = summary.comparisons ? (0, _commandStreamSummary.CommandStreamComparison)(summary, summary.comparisons) : null;\n        summary?.commandSummaries.forEach(cs => {\n          let cmd = this.currentSummary.commandSummaries.find(s => s.commandNameId === cs.commandNameId);\n          if (cmd) {\n            Object.assign(cmd, cs);\n          } else {\n            this.currentSummary.commandSummaries.push(new _commandSummary.default(cs));\n          }\n        });\n      }\n    }\n    mergeCommandErrors(errors) {\n      if (!errors) {\n        return;\n      }\n      errors.forEach(er => {\n        let cmd = this.commandStreamErrors.find(e => e.commandErrorId === er.commandErrorId);\n        if (cmd) {\n          Object.assign(cmd, er);\n        } else {\n          this.commandStreamErrors.push(new _commandStreamError.default(er));\n          if (this.args.updateCommandStreamErrors) {\n            this.args.updateCommandStreamErrors(this.commandStreamErrors);\n          }\n        }\n      });\n    }\n    onChangeFilter(event) {\n      this.summaryFilter = event.target.value;\n    }\n    onShowRelatedCommands(command) {\n      this.selectedCommand = command;\n      this.showCommandRelatedResultsModal = true;\n    }\n    commandRelatedResultsModalClosed() {\n      this.showCommandRelatedResultsModal = false;\n      this.selectedCommand = null;\n      this.selectedCommandError = null;\n    }\n    showCommandErrorRelatedResults(commandError, command) {\n      this.selectedCommand = command;\n      this.selectedCommandError = commandError;\n      this.showCommandRelatedResultsModal = true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"failureOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"detailedView\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"commandStreamSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"commandStreamErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"commandOrder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'chronological';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showCommandRelatedResultsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"selectedCommandError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"viewType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.viewType || 'command';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"summaryFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"hasLoadedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"browsers\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"browsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandOrder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandOrder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateViewType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateViewType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"failureOnlyUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"failureOnlyUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailedViewUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailedViewUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandStreamUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"commandStreamUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeFilter\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeFilter\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowRelatedCommands\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowRelatedCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandRelatedResultsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"commandRelatedResultsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCommandErrorRelatedResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showCommandErrorRelatedResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamSummariesSummaryComponent);\n});","define(\"@testable/shared-ui/components/command-stream-summaries-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if @disableDrag 'panel-no-drag' 'panel block-sub-container'}}\"\n       data-sortable-id=\"commandSummaries\"\n       data-type=\"CommandSummaries\"\n  >\n    <div class=\"{{if @isRemovable 'block-sub-container-target'}} panel-heading block-sub-container-target overflow-hidden\"\n         role=\"tab\"\n         id=\"headingCommands\">\n      <h4 class=\"panel-title\">\n        <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n           href=\"#commandsSummaries\" aria-expanded=\"true\"\n           aria-controls=\"commandsSummaries\">\n          <Ui::Icon @icon=\"fa fa-minus\" />\n        </a>\n        <strong>Commands {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}} {{#unless @baselineExecution}}({{this.commandCount}}) {{/unless}}</strong>\n        {{#unless @baselineExecution}}\n          <BsButtonGroup class=\"m-l-10 no-print\" @value={{this.viewType}} @type=\"radio\" @onChange={{this.updateViewType}} as\n                         |bg|>\n            <bg.button @type=\"success\" @value=\"command\" @size=\"xs\">By Command ({{this.getCommandCount}})</bg.button>\n            <bg.button @type=\"success\" @value=\"error\" @size=\"xs\">By Error ({{this.commandStreamErrors.length}})</bg.button>\n          </BsButtonGroup>\n        {{/unless}}\n        <a {{on \"click\" (fn this.updateExpandStatus false)}} class=\"btn btn-sm btn-icon btn-circle text-primary\">\n          <Ui::Icon @icon=\"fa fa-compress\" /></a>\n        <a {{on \"click\" (fn this.updateExpandStatus true)}} class=\"btn btn-sm btn-icon btn-circle text-primary\">\n          <Ui::Icon @icon=\"fa fa-expand\" /></a>\n        {{#if (and this.commandCount (not @baselineExecution))}}\n          <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n             target=\"_blank\"\n             title=\"Download details\" {{on \"click\" this.updateShowDownloadModal}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{/if}}\n      </h4>\n      {{!--Panel buttons--}}\n      <div class=\"panel-heading-btn\">\n        <span class=\"close-btn\">\n          {{#if (and @removePanel (not (or @minimalHeader @baselineExecution @isViewer)))}}\n            <a {{on \"click\" (fn @removePanel \"commandSummaries\") }}\n                    class=\"btn btn-sm btn-icon btn-circle text-danger\"\n                    data-bs-toggle=\"tooltip\" title=\"Delete Panel\"\n                    role=\"button\">\n                <Ui::Icon @icon=\"fa fa-times\" />\n            </a>\n          {{/if}}\n        </span>\n      </div>\n  \n      {{#unless @baselineExecution}}\n        <CommandStreamSummariesStats\n                @commandStreamSummaries={{this.commandStreamSummaries}}\n                @hideOnSm={{true}}\n        />\n      {{/unless}}\n  \n  \n    </div>\n    <div class=\"panel-collapse collapse show\" id=\"commandsSummaries\">\n      <div class=\"panel-body panel-500\">\n        {{#unless @baselineExecution}}\n          <CommandStreamSummariesStats\n                  @commandStreamSummaries={{this.commandStreamSummaries}}\n                  @hideOnLg={{true}}\n          />\n        {{/unless}}\n  \n        <CommandStreamSummariesSummary\n                @title=\"Current Test\"\n                @expand={{this.expand}}\n                @model={{@model}}\n                @overallModel={{@overallModel}}\n                @browsersExecuted={{@overallModel.browsersExecuted}}\n                @regions={{@overallModel.regions}}\n                @byRegionId={{@byRegionId}}\n                @regionName={{@regionName}}\n                @scriptType={{@scriptType}}\n                @showImageDetailsModal={{@showImageDetailsModal}}\n                @viewType={{this.viewType}}\n                @isMultiUser={{@isMultiUser}}\n                @isAll={{@isAll}}\n                @isLoad={{@isLoad}}\n                @isViewer={{@isViewer}}\n                @commandStream={{@commandStream}}\n                @isComparison={{if @baselineExecution true}}\n                @updateShowDownloadModal={{this.updateShowDownloadModal}}\n                @updateCommandStreamSummaries={{this.updateCommandStreamSummaries}}\n                @updateCommandStreamErrors={{this.updateCommandStreamErrors}}\n                @updateByCommandCount={{this.updateByCommandCount}}\n        />\n      </div>\n      {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n        <div>\n          <CommandStreamSummariesSummary\n                  @title=\"Baseline Test\"\n                  @expand={{this.expand}}\n                  @model={{@regionSummaryBaseline}}\n                  @overallModel={{@baselineExecution}}\n                  @browsersExecuted={{@baselineExecution.browsersExecuted}}\n                  @regions={{@baselineExecution.regions}}\n                  @byRegionId={{@byRegionBaselineId}}\n                  @regionName={{@regionName}}\n                  @regionBaselineId={{@regionBaselineId}}\n                  @scriptType={{@scriptType}}\n                  @showImageDetailsModal={{@showImageDetailsModal}}\n                  @viewType={{this.viewType}}\n                  @isMultiUser={{@isMultiUser}}\n                  @isAll={{@isAll}}\n                  @isLoad={{@isLoad}}\n                  @isViewer={{@isViewer}}\n                  @commandStream={{@commandStream}}\n                  @isBaseline={{true}}\n                  @isComparison={{true}}\n                  @updateShowDownloadModal={{fn this.updateShowDownloadModal true}}\n          />\n        </div>\n      {{/if}}\n  \n    </div>\n  </div>\n  \n  {{#if this.showDownloadModal}}\n    <CommandsDownloadModal\n            @openCommandResultsDownloadUrl={{@openCommandResultsDownloadUrl}}\n            @modalClosed={{fn (mut this.showDownloadModal) false}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,1],\\\"panel-no-drag\\\",\\\"panel block-sub-container\\\"]]]],[14,\\\"data-sortable-id\\\",\\\"commandSummaries\\\"],[14,\\\"data-type\\\",\\\"CommandSummaries\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,2],\\\"block-sub-container-target\\\"],\\\" panel-heading block-sub-container-target overflow-hidden\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingCommands\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,6,\\\"#commandsSummaries\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"commandsSummaries\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Commands \\\"],[41,[51,[30,3,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,3,[\\\"regionDescription\\\"]]]],[]],null],[1,\\\" \\\"],[41,[51,[30,4]],[[[1,\\\"(\\\"],[1,[30,0,[\\\"commandCount\\\"]]],[1,\\\") \\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"        \\\"],[8,[39,7],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewType\\\"]],\\\"radio\\\",[30,0,[\\\"updateViewType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"command\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Command (\\\"],[1,[30,0,[\\\"getCommandCount\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"error\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Error (\\\"],[1,[30,0,[\\\"commandStreamErrors\\\",\\\"length\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"updateExpandStatus\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-compress\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"updateExpandStatus\\\"]],true],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"commandCount\\\"]],[28,[37,11],[[30,4]],null]],null],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"target\\\",\\\"_blank\\\"],[24,\\\"title\\\",\\\"Download details\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"updateShowDownloadModal\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"close-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,6],[28,[37,11],[[28,[37,13],[[30,7],[30,4],[30,8]],null]],null]],null],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,6],\\\"commandSummaries\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"      \\\"],[8,[39,14],null,[[\\\"@commandStreamSummaries\\\",\\\"@hideOnSm\\\"],[[30,0,[\\\"commandStreamSummaries\\\"]],true]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-collapse collapse show\\\"],[14,1,\\\"commandsSummaries\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body panel-500\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"        \\\"],[8,[39,14],null,[[\\\"@commandStreamSummaries\\\",\\\"@hideOnLg\\\"],[[30,0,[\\\"commandStreamSummaries\\\"]],true]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@expand\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@browsersExecuted\\\",\\\"@regions\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@scriptType\\\",\\\"@showImageDetailsModal\\\",\\\"@viewType\\\",\\\"@isMultiUser\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isViewer\\\",\\\"@commandStream\\\",\\\"@isComparison\\\",\\\"@updateShowDownloadModal\\\",\\\"@updateCommandStreamSummaries\\\",\\\"@updateCommandStreamErrors\\\",\\\"@updateByCommandCount\\\"],[\\\"Current Test\\\",[30,0,[\\\"expand\\\"]],[30,3],[30,9],[30,9,[\\\"browsersExecuted\\\"]],[30,9,[\\\"regions\\\"]],[30,10],[30,11],[30,12],[30,13],[30,0,[\\\"viewType\\\"]],[30,14],[30,15],[30,16],[30,8],[30,17],[52,[30,4],true],[30,0,[\\\"updateShowDownloadModal\\\"]],[30,0,[\\\"updateCommandStreamSummaries\\\"]],[30,0,[\\\"updateCommandStreamErrors\\\"]],[30,0,[\\\"updateByCommandCount\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,4],[28,[37,13],[[28,[37,16],[[30,11],\\\"ALL\\\"],null],[30,18]],null]],null],[[[1,\\\"      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@expand\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@browsersExecuted\\\",\\\"@regions\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@scriptType\\\",\\\"@showImageDetailsModal\\\",\\\"@viewType\\\",\\\"@isMultiUser\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isViewer\\\",\\\"@commandStream\\\",\\\"@isBaseline\\\",\\\"@isComparison\\\",\\\"@updateShowDownloadModal\\\"],[\\\"Baseline Test\\\",[30,0,[\\\"expand\\\"]],[30,19],[30,4],[30,4,[\\\"browsersExecuted\\\"]],[30,4,[\\\"regions\\\"]],[30,20],[30,11],[30,18],[30,12],[30,13],[30,0,[\\\"viewType\\\"]],[30,14],[30,15],[30,16],[30,8],[30,17],true,true,[28,[37,9],[[30,0,[\\\"updateShowDownloadModal\\\"]],true],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDownloadModal\\\"]],[[[1,\\\"  \\\"],[8,[39,17],null,[[\\\"@openCommandResultsDownloadUrl\\\",\\\"@modalClosed\\\"],[[30,21],[28,[37,9],[[28,[37,18],[[30,0,[\\\"showDownloadModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@disableDrag\\\",\\\"@isRemovable\\\",\\\"@model\\\",\\\"@baselineExecution\\\",\\\"bg\\\",\\\"@removePanel\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@scriptType\\\",\\\"@showImageDetailsModal\\\",\\\"@isMultiUser\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@commandStream\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@byRegionBaselineId\\\",\\\"@openCommandResultsDownloadUrl\\\"],[\\\"div\\\",\\\"if\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"unless\\\",\\\"bs-button-group\\\",\\\"on\\\",\\\"fn\\\",\\\"and\\\",\\\"not\\\",\\\"span\\\",\\\"or\\\",\\\"command-stream-summaries-stats\\\",\\\"command-stream-summaries-summary\\\",\\\"eq\\\",\\\"commands-download-modal\\\",\\\"mut\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-summaries-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamSummariesWidgetComponent = _exports.default = (_class = class CommandStreamSummariesWidgetComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"expand\", _descriptor, this);\n      _initializerDefineProperty(this, \"viewType\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showDownloadModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"baselineCommandsModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"getCommandCount\", _descriptor5, this);\n      _initializerDefineProperty(this, \"commandStreamSummaries\", _descriptor6, this);\n      _initializerDefineProperty(this, \"commandStreamErrors\", _descriptor7, this);\n    }\n    updateExpandStatus(status) {\n      $(`.command-panel-commands`).collapse(status ? 'show' : 'hide');\n      this.expand = status;\n    }\n    updateViewType(type) {\n      this.viewType = type;\n    }\n    get commandCount() {\n      return this.commandStreamSummaries.reduce((acc, curr) => acc + curr.commandSummaries.length, 0);\n    }\n    updateCommandStreamSummaries(commandStreamSummaries) {\n      this.commandStreamSummaries = commandStreamSummaries;\n    }\n    updateCommandStreamErrors(commandStreamErrors) {\n      this.commandStreamErrors = commandStreamErrors;\n    }\n    updateByCommandCount(getCommandCount) {\n      this.getCommandCount = getCommandCount;\n    }\n    updateShowDownloadModal(isBaseline) {\n      this.baselineCommandsModal = typeof isBaseline === 'boolean' ? isBaseline : null;\n      this.showDownloadModal = true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"expand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"viewType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'command';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showDownloadModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"baselineCommandsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"getCommandCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"commandStreamSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"commandStreamErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateExpandStatus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateExpandStatus\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateViewType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateViewType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandStreamSummaries\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandStreamSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandStreamErrors\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandStreamErrors\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateByCommandCount\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateByCommandCount\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateShowDownloadModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateShowDownloadModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamSummariesWidgetComponent);\n});","define(\"@testable/shared-ui/components/command-stream-summary-command\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"ember-uuid\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _emberUuid, _trackedBuiltIns, _lib, _loadTest, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"ember-uuid\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <tr class=\"suite-row\">\n    <td>\n      <span class=\"pull-right\" {{did-insert this.didInsert}}>\n        {{#if @command.statePassed }}\n          <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Passed\" class=\"m-r-15 saved-status\">\n            {{html-safe this.getPassed}}\n          </Ui::Icon>\n        {{/if}}\n          {{#if @command.stateFailed}}\n            <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Failed\" class=\"m-r-15 saved-status\">\n              {{html-safe this.getFailed}}\n            </Ui::Icon>\n          {{/if}}\n          {{#if @command.stateInProgress}}\n            <Ui::Icon\n            @icon=\"fa fa-lg fa-spinner fa-spin\"\n            data-bs-toggle=\"tooltip\"\n            data-bs-placement=\"top\"\n            title=\"Commands In Progress\"\n            class=\"m-r-15 saved-status\">\n              {{html-safe this.getInProgress}}\n            </Ui::Icon>\n          {{/if}}\n  \n          {{#if @command.durationMean}}\n            <Ui::Icon\n              @icon=\"fa fa-lg fa-clock\"\n              class=\"m-r-15 saved-status\"\n              data-bs-toggle=\"tooltip\"\n              data-bs-placement=\"top\"\n              title=\"Total Duration\">\n              {{html-safe this.getDuration}}\n            </Ui::Icon>\n          {{/if}}\n          {{#if (gt @command.images 0)}}\n            <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15 saved-status\">\n              {{print-number @command.images}}\n            </Ui::Icon>\n          {{/if}}\n      </span>\n  \n      <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#headingCommandBody{{concat @id this.uniqueId}}\"\n         aria-expanded=\"false\"\n         class=\"m-r-5\"\n         aria-controls=\"headingCommandBody{{concat @id this.uniqueId}}\">\n         <Ui::Icon @icon=\"fa fa-plus\" /></a>\n  \n      {{#if @completed}}\n        <a {{on \"click\" this.showRelatedCommands}} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                                                   title=\"Find related results\" role=\"button\">\n          <Ui::Icon @icon=\"fa fa-link\" class=\"m-r-5\" />\n        </a>\n      {{/if}}\n  \n      <code data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"{{print-datetime @command.firstStartedAt}}\"\n            class=\"m-r-10 width-50 text-center inline-block \">{{this.getOffset}}</code>\n  \n      <strong class=\"saved-status\">{{@command.description}}</strong>\n  \n    </td>\n  </tr>\n  <div id=\"headingCommandBody{{concat @id this.uniqueId}}\" class=\"command-panel-commands suite-expand collapse p-b-0\" aria-expanded=\"false\">\n    <div class=\"m-t-10\">\n    <ul class=\"nav nav-pills\" id=\"CommandTabsNav_{{concat @id this.uniqueId}}\">\n  \n      <li class=\"nav-items\">\n        <a href=\"#command-screenshots-tab_{{concat @id this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link active\">\n          Screenshots ({{print-number @command.images}})\n        </a>\n      </li>\n  \n      {{!--          {{#if @command.stateFailed}}--}}\n      <li class=\"nav-items\">\n        <a href=\"#command-error-tab_{{concat @id this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link\">\n          Errors ({{print-number @command.stateFailed}})\n        </a>\n      </li>\n      {{!--          {{/if}}--}}\n    </ul>\n    <div class=\"tab-content \">\n  \n      <div class=\"{{if @isPrint '' 'tab-pane fade'}} active show\"\n           id=\"command-screenshots-tab_{{concat @id this.uniqueId}}\">\n        {{#if this.showScreenshots}}\n          <ImagesWidget @command={{@command}}\n                        @isCommandsRelated={{true}}\n                        @minimalHeader={{true}}\n                        @embedded={{true}}\n                        @model={{@model}}\n                        @overallModel={{@overallModel}}\n                        @byRegionId={{@byRegionId}}\n                        @regionName={{@regionName}}\n                        @isAll={{@model.isAll}}\n                        @isLoad={{true}}\n                        @isPrint={{@isPrint}}\n                        @widget={{@command}}\n                        @isViewer={{@isViewer}}\n                        @showImageDetailsModal={{@showImageDetailsModal}} />\n        {{/if}}\n      </div>\n  \n      <div class=\"{{if @isPrint '' 'tab-pane fade '}}\" id=\"command-error-tab_{{concat @id this.uniqueId}}\">\n        {{#if (eq this.currentTab (concat '#command-error-tab_' @id this.uniqueId))}}\n          <div {{did-insert this.loadErrors}}>\n            {{#if this.loadingErrors}}\n              <Ui::Icon @icon=\"fa fa-spinner fa-spin\" class=\"m-r-5\"/> Loading ...\n            {{else if this.commandErrors}}\n              <CommandStreamSummaryErrors @errors={{this.commandErrors}}\n                                          @model={{@model}}\n                                          @overallModel={{@overallModel}}\n                                          @byRegionId={{@byRegionId}}\n                                          @regionName={{@regionName}}\n                                          @isViewer={{@isViewer}}\n                                          @showCommandErrorRelatedResults={{@showCommandErrorRelatedResults}}\n                                          @showImageDetailsModal={{@showImageDetailsModal}}\n              />\n            {{else}}\n              <span class=\"ps-3 mb-2\">No Errors</span>\n            {{/if}}\n          </div>\n        {{/if}}\n      </div>\n    </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"tr\\\"],[14,0,\\\"suite-row\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n    \\\"],[11,1],[24,0,\\\"pull-right\\\"],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"statePassed\\\"]],[[[1,\\\"        \\\"],[8,[39,5],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Passed\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,6],[[30,0,[\\\"getPassed\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"stateFailed\\\"]],[[[1,\\\"          \\\"],[8,[39,5],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Failed\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,6],[[30,0,[\\\"getFailed\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"stateInProgress\\\"]],[[[1,\\\"          \\\"],[8,[39,5],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands In Progress\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,6],[[30,0,[\\\"getInProgress\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"durationMean\\\"]],[[[1,\\\"          \\\"],[8,[39,5],[[24,0,\\\"m-r-15 saved-status\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,6],[[30,0,[\\\"getDuration\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,7],[[30,1,[\\\"images\\\"]],0],null],[[[1,\\\"          \\\"],[8,[39,5],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15 saved-status\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,8],[[30,1,[\\\"images\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#headingCommandBody\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[14,0,\\\"m-r-5\\\"],[15,\\\"aria-controls\\\",[29,[\\\"headingCommandBody\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n       \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3],[[[1,\\\"      \\\"],[11,3],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Find related results\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,11],[\\\"click\\\",[30,0,[\\\"showRelatedCommands\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-link\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[10,\\\"code\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[28,[37,13],[[30,1,[\\\"firstStartedAt\\\"]]],null]]]],[14,0,\\\"m-r-10 width-50 text-center inline-block \\\"],[12],[1,[30,0,[\\\"getOffset\\\"]]],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,\\\"strong\\\"],[14,0,\\\"saved-status\\\"],[12],[1,[30,1,[\\\"description\\\"]]],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,1,[29,[\\\"headingCommandBody\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,0,\\\"command-panel-commands suite-expand collapse p-b-0\\\"],[14,\\\"aria-expanded\\\",\\\"false\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills\\\"],[15,1,[29,[\\\"CommandTabsNav_\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[29,[\\\"#command-screenshots-tab_\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link active\\\"],[12],[1,\\\"\\\\n        Screenshots (\\\"],[1,[28,[35,8],[[30,1,[\\\"images\\\"]]],null]],[1,\\\")\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[29,[\\\"#command-error-tab_\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n        Errors (\\\"],[1,[28,[35,8],[[30,1,[\\\"stateFailed\\\"]]],null]],[1,\\\")\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"tab-content \\\"],[12],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"\\\",\\\"tab-pane fade\\\"],\\\" active show\\\"]]],[15,1,[29,[\\\"command-screenshots-tab_\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showScreenshots\\\"]],[[[1,\\\"        \\\"],[8,[39,18],null,[[\\\"@command\\\",\\\"@isCommandsRelated\\\",\\\"@minimalHeader\\\",\\\"@embedded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isPrint\\\",\\\"@widget\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\"],[[30,1],true,true,true,[30,5],[30,6],[30,7],[30,8],[30,5,[\\\"isAll\\\"]],true,[30,4],[30,1],[30,9],[30,10]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"\\\",\\\"tab-pane fade \\\"]]]],[15,1,[29,[\\\"command-error-tab_\\\",[28,[37,10],[[30,2],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[30,0,[\\\"currentTab\\\"]],[28,[37,10],[\\\"#command-error-tab_\\\",[30,2],[30,0,[\\\"uniqueId\\\"]]],null]],null],[[[1,\\\"        \\\"],[11,0],[4,[38,3],[[30,0,[\\\"loadErrors\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingErrors\\\"]],[[[1,\\\"            \\\"],[8,[39,5],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Loading ...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"commandErrors\\\"]],[[[1,\\\"            \\\"],[8,[39,20],null,[[\\\"@errors\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showCommandErrorRelatedResults\\\",\\\"@showImageDetailsModal\\\"],[[30,0,[\\\"commandErrors\\\"]],[30,5],[30,6],[30,7],[30,8],[30,9],[30,11],[30,10]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ps-3 mb-2\\\"],[12],[1,\\\"No Errors\\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@command\\\",\\\"@id\\\",\\\"@completed\\\",\\\"@isPrint\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"@showCommandErrorRelatedResults\\\"],[\\\"tr\\\",\\\"td\\\",\\\"span\\\",\\\"did-insert\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"html-safe\\\",\\\"gt\\\",\\\"print-number\\\",\\\"a\\\",\\\"concat\\\",\\\"on\\\",\\\"code\\\",\\\"print-datetime\\\",\\\"strong\\\",\\\"div\\\",\\\"ul\\\",\\\"li\\\",\\\"images-widget\\\",\\\"eq\\\",\\\"command-stream-summary-errors\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-summary-command.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamSummaryCommandComponent = _exports.default = (_class = class CommandStreamSummaryCommandComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"currentTab\", _descriptor3, this);\n      _initializerDefineProperty(this, \"loadingErrors\", _descriptor4, this);\n      _initializerDefineProperty(this, \"commandErrors\", _descriptor5, this);\n      _initializerDefineProperty(this, \"showScreenshots\", _descriptor6, this);\n      _initializerDefineProperty(this, \"region\", _descriptor7, this);\n      _initializerDefineProperty(this, \"agent\", _descriptor8, this);\n      _initializerDefineProperty(this, \"user\", _descriptor9, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor0, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor1, this);\n      _initializerDefineProperty(this, \"filtersExpanded\", _descriptor10, this);\n      _defineProperty(this, \"commandDataCache\", void 0);\n      _defineProperty(this, \"currentFilter\", void 0);\n    }\n    get getOffset() {\n      let ms = this.args.command?.startOffsetMean || 0;\n      if (_lib.default.isNumber(ms)) {\n        let duration = moment.duration(ms, 'milliseconds');\n        let fromHours = Math.floor(duration.asHours());\n        let fromMinutes = Math.floor(duration.asMinutes() - fromHours * 60);\n        let fromSeconds = duration.asSeconds() - fromHours * 3600 - fromMinutes * 60;\n        if (fromSeconds < 0.1) fromSeconds = 0.1;\n        let roundFunction = value => {\n          if (value > 0) value = Math.round(32 / 60 * 10) / 10;\n          return value;\n        };\n        if (fromHours > 0) {\n          return `${fromHours + roundFunction(fromMinutes)}h`;\n        } else if (fromMinutes > 0) {\n          return `${fromMinutes + roundFunction(fromSeconds)}m`;\n        } else {\n          return `${Math.round(fromSeconds * 10) / 10}s`;\n        }\n      }\n      return '';\n    }\n    get getPassed() {\n      return _lib.default.toText(this.args.command?.statePassed, !this.args.isBaseline ? this.args.command?.comparisons?.statePassed : null, '', false);\n    }\n    get getFailed() {\n      return _lib.default.toText(this.args.command?.stateFailed, !this.args.isBaseline ? this.args.command?.comparisons?.stateFailed : null, '', false);\n    }\n    get getInProgress() {\n      return this.args.command?.stateInProgress;\n    }\n    get getDuration() {\n      return _lib.default.toText(this.args.command?.durationMean, !this.args.isBaseline ? this.args.command?.comparisons?.durationMean : null, 'ms', false);\n    }\n    didInsert() {\n      const _this = this;\n      $(`#CommandTabsNav_${this.args.id}${this.uniqueId} a`).on('shown.bs.tab', function () {\n        _this.currentTab = $(this).attr('href');\n      });\n      $(`#headingCommandBody${this.args.id}${this.uniqueId}`).on('shown.bs.collapse', function () {\n        _this.showScreenshots = true;\n      });\n    }\n    async loadErrors() {\n      if (!this.commandErrors) {\n        this.commandErrors = await this.getErrors();\n      } else {\n        return this.commandErrors;\n      }\n    }\n    async getErrors() {\n      this.loadingErrors = true;\n      let resp;\n      if (!this.commandDataCache) {\n        try {\n          if (this.args.isPublic) {\n            resp = await _server.default.getTokenContent(this.args.isPublic, {\n              commandNameId: this.args.command.commandNameId,\n              commandErrors: true\n            });\n          } else {\n            resp = await this.api.commandStreams.getCommandSummariesErrors(this.args.executionId, this.args.command.commandNameId);\n          }\n        } catch (e) {\n          console.log(e);\n        }\n      }\n      this.loadingErrors = false;\n      return (resp || []).map(er => {\n        return new _trackedBuiltIns.TrackedObject(er);\n      });\n    }\n    getParams() {\n      const params = _loadTest.default.toFileFilterParams(this.filter, this.zoomInfo);\n      if (!this.args?.model?.isAll && this.args?.model?.executionRegion.id) {\n        params.regions = this.args?.model?.executionRegion.id;\n      }\n      params.multimediaOnly = 'true';\n      if (this.args?.overallModel?.uuid) {\n        params.outputFiles = true;\n      }\n      return params;\n    }\n    get filter() {\n      const regionInfo = this.args.byRegionId.get(this.region);\n      return {\n        region: this.args.isAll ? regionInfo && regionInfo.execRegionIds.join(',') : this.args.executionRegionId,\n        agent: this.agent,\n        user: this.user,\n        browser: this.browser,\n        iteration: this.iteration\n      };\n    }\n    resetFilters() {\n      this.region = 'ALL';\n      this.agent = 'ALL';\n      this.user = 'ALL';\n      this.iteration = 'ALL';\n      this.errorsOnly = 'all';\n      this.browser = 'ALL';\n    }\n    onFiltersChanged() {\n      const currentFilter = this.currentFilter;\n      if (!_.isEqual(currentFilter, this.filter)) {\n        this.commandDataCache = null;\n      }\n    }\n    filtersExpand() {\n      this.filtersExpanded = !this.filtersExpanded;\n    }\n    updateRegion(value) {\n      this.region = value;\n      this.onFiltersChanged();\n    }\n    updateAgent(value) {\n      this.agent = value;\n      this.onFiltersChanged();\n    }\n    updateUser(value) {\n      this.user = value;\n      this.onFiltersChanged();\n    }\n    updateIteration(value) {\n      this.iteration = value;\n      this.onFiltersChanged();\n    }\n    updateBrowser(value) {\n      this.browser = value;\n      this.onFiltersChanged();\n    }\n    showRelatedCommands() {\n      this.args.onShowRelatedCommands?.(this.args.command);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"currentTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"loadingErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"commandErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"agent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"user\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"filtersExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadErrors\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadErrors\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filtersExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"filtersExpand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRelatedCommands\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRelatedCommands\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamSummaryCommandComponent);\n});","define(\"@testable/shared-ui/components/command-stream-summary-errors\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (eq @errors.length 0)}}\n    No errors found.\n  {{else}}\n    <table class=\"table table-bordered\" {{did-update this.expandAll @expand}} >\n      <thead>\n        <th style={{html-safe \"width: 5%;\"}}></th>\n        <th style={{html-safe \"width: 7%;\"}}>Count <Ui::Icon @icon=\"fa fa-sort-amount-down\" class=\"m-l-5\" /></th>\n        <th style={{html-safe \"width: 88%;\"}}>Error</th>\n      </thead>\n      <tbody>\n        {{#each @errors as |error|}}\n          <tr>\n            <td>\n              <a {{on \"click\" (fn this.expand error)}} role=\"button\">\n                <Ui::Icon @icon=\"fa {{if error.collapse 'fa-minus' 'fa-plus'}}\" class=\"m-r-5\" />\n              </a>\n              <a {{on \"click\" (fn this.showRelatedResults error)}} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                title=\"Find related results\" role=\"button\">\n                <Ui::Icon @icon=\"fa fa-link\" />\n              </a>\n            </td>\n            <td>{{print-number error.count}}</td>\n            <td class=\"p-0\">\n              <pre class=\"m-5 danger\">{{error.commandError.name}}</pre>\n            </td>\n          </tr>\n          {{#if error.collapse}}\n            <tr>\n              <td colspan=\"3\">\n                <ImagesWidget @commandError={{error}}\n                              @isCommandsRelated={{true}}\n                              @minimalHeader={{true}}\n                              @embedded={{true}}\n                              @model={{@model}}\n                              @overallModel={{@overallModel}}\n                              @byRegionId={{@byRegionId}}\n                              @regionName={{@regionName}}\n                              @isAll={{@model.isAll}}\n                              @isLoad={{true}}\n                              @widget={{error.commandError}}\n                              @isViewer={{@isViewer}}\n                              @showImageDetailsModal={{@showImageDetailsModal}} />\n              </td>\n            </tr>\n          {{/if}}\n        {{/each}}\n      </tbody>\n    </table>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1,[\\\"length\\\"]],0],null],[[[1,\\\"  No errors found.\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[11,\\\"table\\\"],[24,0,\\\"table table-bordered\\\"],[4,[38,3],[[30,0,[\\\"expandAll\\\"]],[30,2]],null],[12],[1,\\\"\\\\n    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 5%;\\\"],null]],[12],[13],[1,\\\"\\\\n      \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 7%;\\\"],null]],[12],[1,\\\"Count \\\"],[8,[39,7],[[24,0,\\\"m-l-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-sort-amount-down\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 88%;\\\"],null]],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,1]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,14],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"expand\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,3,[\\\"collapse\\\"]],\\\"fa-minus\\\",\\\"fa-plus\\\"]]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Find related results\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,14],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"showRelatedResults\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-link\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,16],[[30,3,[\\\"count\\\"]]],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"p-0\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-5 danger\\\"],[12],[1,[30,3,[\\\"commandError\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"collapse\\\"]],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],null,[[\\\"@commandError\\\",\\\"@isCommandsRelated\\\",\\\"@minimalHeader\\\",\\\"@embedded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@widget\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\"],[[30,3],true,true,true,[30,4],[30,5],[30,6],[30,7],[30,4,[\\\"isAll\\\"]],true,[30,3,[\\\"commandError\\\"]],[30,8],[30,9]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[3]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@errors\\\",\\\"@expand\\\",\\\"error\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\"],[\\\"if\\\",\\\"eq\\\",\\\"table\\\",\\\"did-update\\\",\\\"thead\\\",\\\"th\\\",\\\"html-safe\\\",\\\"ui/icon\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"tr\\\",\\\"td\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"print-number\\\",\\\"pre\\\",\\\"images-widget\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-summary-errors.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamSummaryErrorsComponent = _exports.default = (_class = class CommandStreamSummaryErrorsComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"loadedSuiteErrors\", _descriptor2, this);\n    }\n    expand(error) {\n      error.collapse = !error.collapse;\n    }\n    expandAll(dom, [status]) {\n      this.args.errors.map(er => {\n        er.collapse = status;\n      });\n    }\n    showRelatedResults(error) {\n      this.args.showCommandErrorRelatedResults(error);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"loadedSuiteErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"expand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expandAll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandAll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRelatedResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRelatedResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamSummaryErrorsComponent);\n});","define(\"@testable/shared-ui/components/command-stream-widget-stats\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#unless @hideStats}}\n    {{#if @commandsLength}}\n      <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n         target=\"_blank\"\n         title=\"Download details\" href={{@downloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n    {{/if}}\n    {{#if @isLoading}}Loading...{{/if}}\n  {{/unless}}\n  \n  <div class=\"{{if @isPanelHeader 'panel-heading-btn has-stats' 'pull-right'}}\">\n    {{#unless @hideStats}}\n      {{#if this.getDuration}}\n        <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Duration\" class=\"m-r-15\">\n          {{print-time-from-ms this.getDuration}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getPassed}}\n        <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Passed\" class=\"m-r-15\">\n          {{print-number this.getPassed}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getFailed}}\n        <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Failed\" class=\"m-r-15\">\n          {{print-number this.getFailed}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if this.getInProgress}}\n        <Ui::Icon @icon=\"fa fa-lg fa-spinner fa-spin\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands in Progress\" class=\"m-r-15\">\n          {{print-number this.getInProgress}}\n        </Ui::Icon>\n      {{/if}}\n    {{/unless}}\n    {{#if (and @removePanel (not (or @minimalHeader @isViewer)))}}\n      <a {{on \"click\" (fn @removePanel \"commandSummaries\") }} class=\"hide-icon btn btn-sm btn-icon btn-circle text-danger\"\n                                                              data-bs-toggle=\"tooltip\" title=\"Delete Panel\"\n                                                              role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[51,[30,1]],[[[41,[30,2],[[[1,\\\"    \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download details\\\"],[15,6,[30,3]],[12],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[41,[30,4],[[[1,\\\"Loading...\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[15,0,[29,[[52,[30,5],\\\"panel-heading-btn has-stats\\\",\\\"pull-right\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[41,[30,0,[\\\"getDuration\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,0,[\\\"getDuration\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getPassed\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Passed\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,6],[[30,0,[\\\"getPassed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getFailed\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Failed\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,6],[[30,0,[\\\"getFailed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"getInProgress\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands in Progress\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,6],[[30,0,[\\\"getInProgress\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[41,[28,[37,7],[[30,6],[28,[37,8],[[28,[37,9],[[30,7],[30,8]],null]],null]],null],[[[1,\\\"    \\\"],[11,3],[24,0,\\\"hide-icon btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[28,[37,11],[[30,6],\\\"commandSummaries\\\"],null]],null],[12],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@hideStats\\\",\\\"@commandsLength\\\",\\\"@downloadUrl\\\",\\\"@isLoading\\\",\\\"@isPanelHeader\\\",\\\"@removePanel\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\"],[\\\"unless\\\",\\\"if\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"div\\\",\\\"print-time-from-ms\\\",\\\"print-number\\\",\\\"and\\\",\\\"not\\\",\\\"or\\\",\\\"on\\\",\\\"fn\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-widget-stats.hbs\",\n    \"isStrictMode\": false\n  });\n  class CommandStreamWidgetStatsComponent extends _component2.default {\n    get getPassed() {\n      return this.args.commandStreams.reduce((acc, curr) => acc + curr.statePassed, 0);\n    }\n    get getFailed() {\n      return this.args.commandStreams.reduce((acc, curr) => acc + curr.stateFailed, 0);\n    }\n    get getInProgress() {\n      return this.args.commandStreams.reduce((acc, curr) => acc + curr.stateInProgress, 0);\n    }\n    get getDuration() {\n      return this.args.commandStreams.reduce((acc, curr) => acc + curr.duration, 0);\n    }\n  }\n  _exports.default = CommandStreamWidgetStatsComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamWidgetStatsComponent);\n});","define(\"@testable/shared-ui/components/command-stream-widget-summary\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/object/observers\", \"@testable/shared-ui/models/command\", \"@testable/shared-ui/models/command-stream\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _observers, _command, _commandStream, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/models/command\",0,\"@testable/shared-ui/models/command-stream\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isComparison}}\n    <div class=\"{{if (eq @title 'Baseline Test') 'm-t-10 p-t-10 with-border-top'}}\">\n      <strong>{{@title}} ({{this.commandCounts}})</strong>\n      {{#if this.getCommands.length}}\n        <CommandStreamWidgetStats @commandStreams={{this.commandStreams}}\n                                  @commandsLength={{this.getCommands.length}}\n                                  @downloadUrl={{this.downloadUrl}}\n                                  @isLoading={{this.isLoading}}\n                                  @minimalHeader={{true}}\n                                  @isViewer={{@isViewer}}\n        />\n      {{/if}}\n    </div>\n  {{/if}}\n  \n  <div class=\"display-inline w-100 m-b-15 no-print\"\n    {{did-update this.selectedSessionNum @selectedSessionNum}}\n  >\n    <div class=\" m-t-5\">\n      <div class=\"display-inline w-100\">\n        {{#if (gt this.commandStreams.length 1)}}\n          <div class=\"width-120 m-r-10 pull-left\">\n            <Ui::PSelect @options={{this.getCommandStreamOptions}}\n                         @selected={{this.selectedStream}}\n                         @onChange={{this.updateSelectedStream}} as |stream|>\n              {{stream.label}}\n            </Ui::PSelect>\n          </div>\n        {{/if}}\n        <div class=\"w-max-content pull-right\">\n          <div class=\"input-group\">\n            <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\" /></span>\n            <Input\n                    @type=\"text\"\n              {{on \"keyup\" this.onChangeFilter}}\n                    placeholder=\"Search...\"\n                    class=\"form-control\" />\n          </div>\n        </div>\n        <div class=\" m-t-3\">\n          <BsButtonGroup @value={{this.commandOrder}} @type=\"radio\" @onChange={{this.updateCommandOrder}} as |bg|>\n            <bg.button @type=\"success width-100\" @value=\"chronological\" @size=\"xs\" class=\"width-100\">\n              Chronological\n            </bg.button>\n            <bg.button @type=\"success width-100\" @value=\"tail\" @size=\"xs\" class=\"width-100\">Tail</bg.button>\n          </BsButtonGroup>\n          <label class=\"normal vertical-align-sub m-l-10\">\n            <Input @type=\"checkbox\" @checked={{this.failureOnly}} {{on \"change\" this.failureOnlyUpdate}} />\n            Show failures only ({{if this.selectedStream.stateFailed this.selectedStream.stateFailed 0}})\n          </label>\n          {{#if (or (eq @scriptType 'Puppeteer') (eq @scriptType 'Playwright') (eq @scriptType 'Selenium'))}}\n            <label class=\"normal vertical-align-sub m-l-10\">\n              <Input @type=\"checkbox\" @checked={{this.detailedView}} {{on \"change\" this.detailedViewUpdate}} />\n              Detailed View {{#unless this.detailedView}} ({{this.detailedCount}}){{/unless}}\n              <Ui::InfoIcon\n                      @content=\"Detailed view of commands include any command related to initialization of the browser or\n                    setup that occurs before navigating to a URL. Simply check the box to include those commands.\"\n                      @placement=\"top\"\n                      class=\"m-l-5\"\n              />\n            </label>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  {{#if this.getCommands.length}}\n    <div class=\"suite-results\">\n      <Ui::InfiniteScroller class=\"{{if @isPrint \"\" \"height-300\"}} overflow-auto\" @onLoadMore={{this.loadMoreCommands}}>\n        <table class=\"table\">\n          <tbody>\n          {{#each this.filteredCommands as |command index|}}\n            <tr class=\"suite-row\">\n              <td class=\"{{if (eq index 0) 'no-border'}}\">\n                <CommandStreamCommand @id={{command.id}}\n                                      @command={{command}}\n                                      @scriptType={{@scriptType}}\n                                      @isPublic={{@overallModel.uuid}}\n                                      @completed={{@completed}}\n                                      @videoSeekPosition={{@videoSeekPosition}}\n                                      @showVideoPlayControls={{this.showVideoPlayControls}}\n                                      @videoContainerSelector={{@videoContainerSelector}}\n                                      @videoParentToScroll={{@videoParentToScroll}}\n                />\n              </td>\n            </tr>\n          {{/each}}\n          </tbody>\n        </table>\n      </Ui::InfiniteScroller>\n    </div>\n  {{else}}\n    No commands.\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[28,[37,2],[[30,2],\\\"Baseline Test\\\"],null],\\\"m-t-10 p-t-10 with-border-top\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,[30,2]],[1,\\\" (\\\"],[1,[30,0,[\\\"commandCounts\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"getCommands\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[8,[39,4],null,[[\\\"@commandStreams\\\",\\\"@commandsLength\\\",\\\"@downloadUrl\\\",\\\"@isLoading\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\"],[[30,0,[\\\"commandStreams\\\"]],[30,0,[\\\"getCommands\\\",\\\"length\\\"]],[30,0,[\\\"downloadUrl\\\"]],[30,0,[\\\"isLoading\\\"]],true,[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[11,0],[24,0,\\\"display-inline w-100 m-b-15 no-print\\\"],[4,[38,5],[[30,0,[\\\"selectedSessionNum\\\"]],[30,4]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\" m-t-5\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"display-inline w-100\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"commandStreams\\\",\\\"length\\\"]],1],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"width-120 m-r-10 pull-left\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"getCommandStreamOptions\\\"]],[30,0,[\\\"selectedStream\\\"]],[30,0,[\\\"updateSelectedStream\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,5,[\\\"label\\\"]]],[1,\\\"\\\\n          \\\"]],[5]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"w-max-content pull-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,9],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"],[4,[38,11],[\\\"keyup\\\",[30,0,[\\\"onChangeFilter\\\"]]],null]],[[\\\"@type\\\"],[\\\"text\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\" m-t-3\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,12],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandOrder\\\"]],\\\"radio\\\",[30,0,[\\\"updateCommandOrder\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"chronological\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Chronological\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"tail\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tail\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal vertical-align-sub m-l-10\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,10],[[4,[38,11],[\\\"change\\\",[30,0,[\\\"failureOnlyUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"failureOnly\\\"]]]],null],[1,\\\"\\\\n          Show failures only (\\\"],[1,[52,[30,0,[\\\"selectedStream\\\",\\\"stateFailed\\\"]],[30,0,[\\\"selectedStream\\\",\\\"stateFailed\\\"]],0]],[1,\\\")\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[28,[37,2],[[30,7],\\\"Puppeteer\\\"],null],[28,[37,2],[[30,7],\\\"Playwright\\\"],null],[28,[37,2],[[30,7],\\\"Selenium\\\"],null]],null],[[[1,\\\"          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal vertical-align-sub m-l-10\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],[[4,[38,11],[\\\"change\\\",[30,0,[\\\"detailedViewUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"detailedView\\\"]]]],null],[1,\\\"\\\\n            Detailed View \\\"],[41,[51,[30,0,[\\\"detailedView\\\"]]],[[[1,\\\" (\\\"],[1,[30,0,[\\\"detailedCount\\\"]]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n            \\\"],[8,[39,16],[[24,0,\\\"m-l-5\\\"]],[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Detailed view of commands include any command related to initialization of the browser or\\\\n                  setup that occurs before navigating to a URL. Simply check the box to include those commands.\\\",\\\"top\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"getCommands\\\",\\\"length\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"suite-results\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,17],[[16,0,[29,[[52,[30,8],\\\"\\\",\\\"height-300\\\"],\\\" overflow-auto\\\"]]]],[[\\\"@onLoadMore\\\"],[[30,0,[\\\"loadMoreCommands\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,21],[[28,[37,21],[[30,0,[\\\"filteredCommands\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[14,0,\\\"suite-row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[15,0,[29,[[52,[28,[37,2],[[30,10],0],null],\\\"no-border\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,24],null,[[\\\"@id\\\",\\\"@command\\\",\\\"@scriptType\\\",\\\"@isPublic\\\",\\\"@completed\\\",\\\"@videoSeekPosition\\\",\\\"@showVideoPlayControls\\\",\\\"@videoContainerSelector\\\",\\\"@videoParentToScroll\\\"],[[30,9,[\\\"id\\\"]],[30,9],[30,7],[30,11,[\\\"uuid\\\"]],[30,12],[30,13],[30,0,[\\\"showVideoPlayControls\\\"]],[30,14],[30,15]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[9,10]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  No commands.\\\\n\\\"]],[]]]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"@isViewer\\\",\\\"@selectedSessionNum\\\",\\\"stream\\\",\\\"bg\\\",\\\"@scriptType\\\",\\\"@isPrint\\\",\\\"command\\\",\\\"index\\\",\\\"@overallModel\\\",\\\"@completed\\\",\\\"@videoSeekPosition\\\",\\\"@videoContainerSelector\\\",\\\"@videoParentToScroll\\\"],[\\\"if\\\",\\\"div\\\",\\\"eq\\\",\\\"strong\\\",\\\"command-stream-widget-stats\\\",\\\"did-update\\\",\\\"gt\\\",\\\"ui/p-select\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"on\\\",\\\"bs-button-group\\\",\\\"label\\\",\\\"or\\\",\\\"unless\\\",\\\"ui/info-icon\\\",\\\"ui/infinite-scroller\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"tr\\\",\\\"td\\\",\\\"command-stream-command\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-widget-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamWidgetComponent = _exports.default = (_class = class CommandStreamWidgetComponent extends _component2.default {\n    get commandCounts() {\n      return this.commands.length < this.totalCommands ? `${this.commands.length} / ${this.totalCommands}` : this.totalCommands;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"commandOrder\", _descriptor3, this);\n      _initializerDefineProperty(this, \"failureOnly\", _descriptor4, this);\n      _initializerDefineProperty(this, \"detailedView\", _descriptor5, this);\n      _initializerDefineProperty(this, \"totalCommands\", _descriptor6, this);\n      _initializerDefineProperty(this, \"detailedCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loadedCommands\", _descriptor8, this);\n      _initializerDefineProperty(this, \"commands\", _descriptor9, this);\n      _initializerDefineProperty(this, \"commandStreams\", _descriptor0, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor1, this);\n      _initializerDefineProperty(this, \"selectedStream\", _descriptor10, this);\n      _initializerDefineProperty(this, \"summaryFilter\", _descriptor11, this);\n      this.loadCommandStreamsAll();\n      (0, _observers.addObserver)(this, 'args.commandStream.@each.commandCount', this.commandStreamUpdated);\n      (0, _observers.addObserver)(this, 'args.command', this.commandUpdated);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.commandStream.@each.commandCount', this.commandStreamUpdated);\n      (0, _observers.removeObserver)(this, 'args.command', this.commandUpdated);\n    }\n    get filteredCommands() {\n      return this.summaryFilter ? this.getCommands.filter(command => command.description.toLowerCase().includes(this.summaryFilter.toLowerCase())) : this.getCommands;\n    }\n    get showVideoPlayControls() {\n      return this.args?.videoWidgetAvailable && this.args?.completed;\n    }\n    async loadCommandStreamsAll() {\n      await this.loadCommandStreams();\n      await this.loadCommands();\n    }\n    async loadCommandStreams() {\n      this.isLoading = true;\n      try {\n        let isAll = this.args.regionName === 'ALL';\n        const params = {};\n        if (this.detailedView) {\n          params.detailed = true;\n        }\n        let commandStreams = await this.api.commandStreams.getCommandStreams(this.args.overallModel, !isAll ? this.args.regionBaselineId || this.args.executionRegionId : null, params);\n        if (this.isDestroyed) return;\n        let streams = [];\n        commandStreams.forEach(stream => {\n          stream.limit = this.api.commandStreams.defaultLimit;\n          streams.push(new _commandStream.default(stream));\n        });\n        this.commandStreams = streams.sort((a, b) => a.sessionNum - b.sessionNum);\n        this.selectedStream = this.commandStreams[0];\n        this.commands = [];\n        if (this.args.updateCommands) {\n          this.args.updateCommands(this.commands);\n          this.args.updateCommandStreams(this.commandStreams);\n          if (this.args.updateSelectedStream) {\n            this.args.updateSelectedStream(this.selectedStream);\n          }\n        }\n      } catch (e) {\n        console.log(e);\n      }\n    }\n    loadMoreCommands() {\n      if (this.loadedCommands < this.totalCommands && !this.isLoading) {\n        this.isLoading = true;\n        this.loadCommands();\n      }\n    }\n    async loadCommands() {\n      try {\n        if (this.selectedStream) {\n          this.args.updateIsLoading?.(true);\n          let commands = this.commands;\n          const isPublic = !!this.args.overallModel.uuid;\n          const params = _lib.default.getZoomParams(this.zoomInfo);\n          params.detailed = this.detailedView;\n          params.asc = this.commandOrder !== 'tail';\n          if (!this.args.isPrint) {\n            params.limit = this.selectedStream.limit || this.api.commandStreams.defaultLimit;\n            params.offset = this.loadedCommands;\n          }\n          if (this.failureOnly) {\n            params.failuresOnly = true;\n          }\n          let cmdObjs = await this.api.commandStreams.getCommands(this.selectedStream.id, params, isPublic ? this.args.overallModel.uuid : null, r => {\n            const count = Number(r.getResponseHeader('X-Testable-Count'));\n            this.totalCommands = count;\n            if (this.args.updateTotalCommands) {\n              this.args.updateTotalCommands(this.totalCommands);\n            }\n            if (!this.detailedView) this.detailedCount = Number(r.getResponseHeader('X-Testable-DetailedCount'));\n          });\n          this.loadedCommands = cmdObjs.length + this.loadedCommands;\n          if (this.args.updateLoadedCommands) {\n            this.args.updateLoadedCommands(this.loadedCommands);\n          }\n          cmdObjs.forEach(cmdObj => {\n            let existingCmd = commands.find(cmd => cmd.id === cmdObj.id);\n            if (existingCmd) {\n              Object.assign(existingCmd, cmdObj);\n            } else {\n              commands.push(new _command.default(cmdObj));\n            }\n          });\n          this.commands = commands;\n          if (this.args.updateCommands) {\n            this.args.updateCommands(this.commands);\n          }\n        }\n        this.isLoading = false;\n        this.args.updateIsLoading?.(false);\n      } catch (e) {\n        console.log(e);\n        this.isLoading = false;\n        this.args.updateIsLoading?.(false);\n      }\n    }\n    get getCommands() {\n      let returnCommands = this.commands;\n      if (this.commandStreams.length > 1) {\n        returnCommands = returnCommands.filter(cmd => cmd.parentId === (this.selectedStream?.id || this.commandStreams[0].id));\n      }\n      if (!this.detailedView) {\n        returnCommands = returnCommands.filter(cmd => !cmd.detailed);\n      }\n      if (this.failureOnly) {\n        returnCommands = returnCommands.filter(cmd => cmd.state === 'Failed');\n      }\n      returnCommands = returnCommands.sort((a, b) => {\n        const aTime = moment(a.createdAt);\n        const bTime = moment(b.createdAt);\n        if (this.commandOrder === 'chronological') return moment(aTime).diff(moment(bTime));else if (this.commandOrder === 'tail') return moment(bTime).diff(moment(aTime));\n      });\n      if (this.args.updateCommandsLength) {\n        this.args.updateCommandsLength(returnCommands.length);\n      }\n      return returnCommands;\n    }\n    get getCommandStreamOptions() {\n      const regionSummaries = this.args.regionSummaries;\n      const options = [];\n      this.commandStreams.forEach(stream => {\n        const region = regionSummaries.find(rs => rs.executionRegion.id === stream.executionRegionId);\n        if (!region && !this.args.overallModel.isParent) return;\n        const regionDescription = region?.executionRegion.region.description || 'all';\n        stream.label = `${(0, _command.toBrowserVersion)(stream.browser)} in ${regionDescription} (Session ${stream.sessionNum}; ${stream.uuid})`;\n        options.push(stream);\n      });\n      return options;\n    }\n    failureOnlyUpdate(e) {\n      this.failureOnly = e.target.checked;\n      if (this.args?.completed) {\n        this.commands = [];\n        this.loadedCommands = 0;\n        this.detailedCount = 0;\n        this.totalCommands = 0;\n        if (this.args.updateCommands) {\n          this.args.updateCommands([]);\n          this.args.updateLoadedCommands(this.loadedCommands);\n          this.args.updateTotalCommands(this.totalCommands);\n        }\n        this.loadCommandStreamsAll();\n      }\n    }\n    detailedViewUpdate(e) {\n      this.detailedView = e.target.checked;\n      if (this.args?.completed) {\n        this.commands = [];\n        this.loadedCommands = 0;\n        this.detailedCount = 0;\n        this.totalCommands = 0;\n        if (this.args.updateCommands) {\n          this.args.updateCommands([]);\n          this.args.updateLoadedCommands(this.loadedCommands);\n          this.args.updateTotalCommands(this.totalCommands);\n        }\n        this.loadCommandStreamsAll();\n      }\n    }\n    get downloadUrl() {\n      let isAll = this.args.regionName === 'ALL';\n      let url = `/executions/${this.args.executionId}`;\n      if (!isAll) {\n        url += '/regions/' + (this.args.regionBaselineId ?? this.args.executionRegionId);\n      }\n      url += '/command-streams.csv';\n      return _lib.default.toUrl(url);\n    }\n    onChangeFilter(event) {\n      this.summaryFilter = event.target.value;\n    }\n    updateSelectedStream(stream) {\n      this.selectedStream = stream?.id ? stream : null;\n      this.commands = [];\n      this.loadedCommands = 0;\n      this.detailedCount = 0;\n      this.totalCommands = 0;\n      if (this.args.updateCommands) {\n        this.args.updateCommands([]);\n        this.args.updateLoadedCommands(this.loadedCommands);\n        this.args.updateTotalCommands(this.totalCommands);\n      }\n      if (this.args.updateSelectedStream) {\n        this.args.updateSelectedStream(this.selectedStream);\n      }\n      this.loadCommands();\n    }\n    selectedSessionNum(dom, [sessionNum]) {\n      const stream = this.getCommandStreamOptions.find(stream => stream.sessionNum === (sessionNum > 0 ? sessionNum : 1));\n      this.selectedStream = stream?.id ? stream : null;\n      this.commands = [];\n      this.loadedCommands = 0;\n      this.detailedCount = 0;\n      this.totalCommands = 0;\n    }\n    commandStreamUpdated() {\n      this.filteredCommands; // re-evaluate filtered commands when command stream updates\n      if (this.args.commandStream?.length === 0) {\n        return;\n      }\n      this.mergeCommandStream(this.args.commandStream);\n    }\n    commandUpdated() {\n      if (!this.args.command || this.selectedStream && this.selectedStream.id !== this.args.command.parentId) {\n        return;\n      }\n      const cmdObj = this.args.command;\n      let existingCmd = this.commands.find(cmd => cmd.id === cmdObj.id);\n      if (existingCmd) {\n        Object.assign(existingCmd, cmdObj);\n      } else {\n        if (this.detailedView || !cmdObj.detailed) {\n          this.commands.push(new _command.default(cmdObj));\n          this.totalCommands = this.totalCommands + 1;\n          this.loadedCommands = this.loadedCommands + 1;\n          if (this.args.updateCommands) {\n            this.args.updateLoadedCommands(this.loadedCommands);\n            this.args.updateTotalCommands(this.totalCommands);\n          }\n        }\n        this.detailedCount = this.detailedCount + 1;\n      }\n      this.commands = [...this.commands];\n      if (this.args.updateCommands) {\n        this.args.updateCommands(this.commands);\n      }\n    }\n    updateCommandOrder(order) {\n      this.commandOrder = order;\n      this.commands = [];\n      this.loadedCommands = 0;\n      this.totalCommands = 0;\n      this.detailedCount = 0;\n      if (this.args.updateCommands) {\n        this.args.updateCommands(this.commands);\n        this.args.updateTotalCommands(this.totalCommands);\n        this.args.updateLoadedCommands(this.loadedCommands);\n      }\n      for (let stream of this.commandStreams) {\n        stream.limit = this.api.commandStreams.defaultLimit;\n      }\n      this.loadCommands();\n    }\n    mergeCommandStream(commandStreams) {\n      commandStreams.forEach(cmd => {\n        let cmdStream = this.commandStreams.find(cs => cs.id === cmd.id);\n        if (cmdStream) {\n          cmd.limit = cmdStream.commandCount;\n          Object.assign(cmdStream, cmd);\n        } else {\n          cmd.limit = this.api.commandStreams.defaultLimit;\n          this.commandStreams.push(new _commandStream.default(cmd));\n        }\n        this.commandStreams = [...this.commandStreams];\n        if (this.args.updateCommandStreams) {\n          this.args.updateCommandStreams(this.commandStreams);\n        }\n      });\n      if (!this.selectedStream) {\n        this.selectedStream = this.commandStreams[0];\n        if (this.args.updateSelectedStream) {\n          this.args.updateSelectedStream(this.selectedStream);\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"commandOrder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'chronological';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"failureOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"detailedView\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"totalCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"detailedCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loadedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"commands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"commandStreams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"selectedStream\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"summaryFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadMoreCommands\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"failureOnlyUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"failureOnlyUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"detailedViewUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"detailedViewUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeFilter\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeFilter\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedStream\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedStream\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"selectedSessionNum\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"selectedSessionNum\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandStreamUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"commandStreamUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"commandUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandOrder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandOrder\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamWidgetComponent);\n});","define(\"@testable/shared-ui/components/command-stream-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if @disableDrag 'panel-no-drag' 'panel block-sub-container'}}\"\n       data-sortable-id=\"commandSummaries\"\n       data-type=\"CommandSummaries\"\n  >\n    <div class=\"{{if @isRemovable 'block-sub-container-target'}} panel-heading block-sub-container-target overflow-hidden\"\n         role=\"tab\"\n         id=\"headingCommands\">\n      <h4 class=\"panel-title\">\n        <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n           href=\"#commandsSummaries\" aria-expanded=\"true\"\n           aria-controls=\"commandsSummaries\">\n          <Ui::Icon @icon=\"fa fa-minus\" />\n        </a>\n        <strong>Commands {{#unless @baselineExecution}}({{this.commandCounts}}){{/unless}}</strong>\n        <a {{on \"click\" (fn this.updateExpandStatus false)}} class=\"btn btn-sm btn-icon btn-circle text-primary\">\n          <Ui::Icon @icon=\"fa fa-compress\" /></a>\n        <a {{on \"click\" (fn this.updateExpandStatus true)}} class=\"btn btn-sm btn-icon btn-circle text-primary\">\n          <Ui::Icon @icon=\"fa fa-expand\" /></a>\n      </h4>\n      {{!--Panel buttons--}}\n      <CommandStreamWidgetStats @commandStreams={{this.commandStreams}}\n                                @commandsLength={{this.commandsLength}}\n                                @downloadUrl={{this.downloadUrl}}\n                                @minimalHeader={{or @minimalHeader @baselineExecution}}\n                                @removePanel={{@removePanel}}\n                                @isLoading={{this.isLoading}}\n                                @isPanelHeader={{true}}\n                                @isViewer={{@isViewer}}\n                                @hideStats={{if @baselineExecution true}}\n      />\n  \n    </div>\n    <div id=\"commandsSummaries\" class=\"panel-collapse collapse show\" role=\"tabpanel\"\n         aria-labelledby=\"headingAssertions\">\n      <div class=\"panel-body {{if @isPrint '' 'panel-500'}}\">\n        <CommandStreamWidgetSummary\n                @title=\"Current Test\"\n                @executionId={{@model.execution.id}}\n                @executionRegionId={{@model.executionRegion.id}}\n                @completed={{@model.completed}}\n                @overallModel={{@overallModel}}\n                @scriptType={{@scriptType}}\n                @regionName={{@regionName}}\n                @videoWidgetAvailable={{@videoWidgetAvailable}}\n                @videoSeekPosition={{@videoSeekPosition}}\n                @commandStream={{@commandStream}}\n                @selectedSessionNum={{@selectedSessionNum}}\n                @command={{@command}}\n                @regionSummaries={{@regionSummaries}}\n                @updateCommands={{fn (mut this.commands)}}\n                @updateTotalCommands={{fn (mut this.totalCommands)}}\n                @updateSelectedStream={{@selectedStream}}\n                @updateLoadedCommands={{fn (mut this.loadedCommands)}}\n                @updateCommandsLength={{this.updateCommandsLength}}\n                @updateCommandStreams={{fn (mut this.commandStreams)}}\n                @updateIsLoading={{this.updateIsLoading}}\n                @isViewer={{@isViewer}}\n                @isPrint={{@isPrint}}\n                @isComparison={{if @baselineExecution true}}\n        />\n  \n        {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n          <CommandStreamWidgetSummary\n                  @title=\"Baseline Test\"\n                  @executionId={{@regionSummaryBaseline.execution.id}}\n                  @executionRegionId={{@regionSummaryBaseline.executionRegion.id}}\n                  @completed={{@regionSummaryBaseline.completed}}\n                  @overallModel={{@baselineExecution}}\n                  @scriptType={{@scriptType}}\n                  @regionName={{@regionName}}\n                  @regionBaselineId={{@regionBaselineId}}\n                  @videoWidgetAvailable={{@videoWidgetAvailable}}\n                  @videoSeekPosition={{@baselineVideoSeekPosition}}\n                  @commandStream={{@commandStream}}\n                  @updateSelectedStream={{@baselineSelectedStream}}\n                  @selectedSessionNum={{@baselineSelectedSessionNum}}\n                  @command={{@command}}\n                  @isViewer={{@isViewer}}\n                  @isPrint={{@isPrint}}\n                  @regionSummaries={{@regionSummaries}}\n                  @isComparison={{true}}\n          />\n        {{/if}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,1],\\\"panel-no-drag\\\",\\\"panel block-sub-container\\\"]]]],[14,\\\"data-sortable-id\\\",\\\"commandSummaries\\\"],[14,\\\"data-type\\\",\\\"CommandSummaries\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,2],\\\"block-sub-container-target\\\"],\\\" panel-heading block-sub-container-target overflow-hidden\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingCommands\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,6,\\\"#commandsSummaries\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"commandsSummaries\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Commands \\\"],[41,[51,[30,3]],[[[1,\\\"(\\\"],[1,[30,0,[\\\"commandCounts\\\"]]],[1,\\\")\\\"]],[]],null],[13],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"updateExpandStatus\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-compress\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"updateExpandStatus\\\"]],true],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[8,[39,9],null,[[\\\"@commandStreams\\\",\\\"@commandsLength\\\",\\\"@downloadUrl\\\",\\\"@minimalHeader\\\",\\\"@removePanel\\\",\\\"@isLoading\\\",\\\"@isPanelHeader\\\",\\\"@isViewer\\\",\\\"@hideStats\\\"],[[30,0,[\\\"commandStreams\\\"]],[30,0,[\\\"commandsLength\\\"]],[30,0,[\\\"downloadUrl\\\"]],[28,[37,10],[[30,4],[30,3]],null],[30,5],[30,0,[\\\"isLoading\\\"]],true,[30,6],[52,[30,3],true]]],null],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"commandsSummaries\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingAssertions\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"panel-body \\\",[52,[30,7],\\\"\\\",\\\"panel-500\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@title\\\",\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@completed\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@videoWidgetAvailable\\\",\\\"@videoSeekPosition\\\",\\\"@commandStream\\\",\\\"@selectedSessionNum\\\",\\\"@command\\\",\\\"@regionSummaries\\\",\\\"@updateCommands\\\",\\\"@updateTotalCommands\\\",\\\"@updateSelectedStream\\\",\\\"@updateLoadedCommands\\\",\\\"@updateCommandsLength\\\",\\\"@updateCommandStreams\\\",\\\"@updateIsLoading\\\",\\\"@isViewer\\\",\\\"@isPrint\\\",\\\"@isComparison\\\"],[\\\"Current Test\\\",[30,8,[\\\"execution\\\",\\\"id\\\"]],[30,8,[\\\"executionRegion\\\",\\\"id\\\"]],[30,8,[\\\"completed\\\"]],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[28,[37,8],[[28,[37,12],[[30,0,[\\\"commands\\\"]]],null]],null],[28,[37,8],[[28,[37,12],[[30,0,[\\\"totalCommands\\\"]]],null]],null],[30,18],[28,[37,8],[[28,[37,12],[[30,0,[\\\"loadedCommands\\\"]]],null]],null],[30,0,[\\\"updateCommandsLength\\\"]],[28,[37,8],[[28,[37,12],[[30,0,[\\\"commandStreams\\\"]]],null]],null],[30,0,[\\\"updateIsLoading\\\"]],[30,6],[30,7],[52,[30,3],true]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,13],[[30,3],[28,[37,10],[[28,[37,14],[[30,11],\\\"ALL\\\"],null],[30,19]],null]],null],[[[1,\\\"        \\\"],[8,[39,11],null,[[\\\"@title\\\",\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@completed\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@videoWidgetAvailable\\\",\\\"@videoSeekPosition\\\",\\\"@commandStream\\\",\\\"@updateSelectedStream\\\",\\\"@selectedSessionNum\\\",\\\"@command\\\",\\\"@isViewer\\\",\\\"@isPrint\\\",\\\"@regionSummaries\\\",\\\"@isComparison\\\"],[\\\"Baseline Test\\\",[30,20,[\\\"execution\\\",\\\"id\\\"]],[30,20,[\\\"executionRegion\\\",\\\"id\\\"]],[30,20,[\\\"completed\\\"]],[30,3],[30,10],[30,11],[30,19],[30,12],[30,21],[30,14],[30,22],[30,23],[30,16],[30,6],[30,7],[30,17],true]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@disableDrag\\\",\\\"@isRemovable\\\",\\\"@baselineExecution\\\",\\\"@minimalHeader\\\",\\\"@removePanel\\\",\\\"@isViewer\\\",\\\"@isPrint\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@videoWidgetAvailable\\\",\\\"@videoSeekPosition\\\",\\\"@commandStream\\\",\\\"@selectedSessionNum\\\",\\\"@command\\\",\\\"@regionSummaries\\\",\\\"@selectedStream\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@baselineVideoSeekPosition\\\",\\\"@baselineSelectedStream\\\",\\\"@baselineSelectedSessionNum\\\"],[\\\"div\\\",\\\"if\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"unless\\\",\\\"on\\\",\\\"fn\\\",\\\"command-stream-widget-stats\\\",\\\"or\\\",\\\"command-stream-widget-summary\\\",\\\"mut\\\",\\\"and\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/command-stream-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandStreamWidgetComponent = _exports.default = (_class = class CommandStreamWidgetComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"commands\", _descriptor, this);\n      _initializerDefineProperty(this, \"commandStreams\", _descriptor2, this);\n      _initializerDefineProperty(this, \"commandsLength\", _descriptor3, this);\n      _initializerDefineProperty(this, \"totalCommands\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor5, this);\n      _initializerDefineProperty(this, \"loadedCommands\", _descriptor6, this);\n      _initializerDefineProperty(this, \"loadCommands\", _descriptor7, this);\n    }\n    get commandCounts() {\n      return this.commands.length < this.totalCommands ? `${this.commands.length} / ${this.totalCommands}` : this.totalCommands;\n    }\n    updateExpandStatus(status) {\n      $(`.command-panel-commands`).collapse(status ? 'show' : 'hide');\n    }\n    updateIsLoading(status) {\n      (0, _runloop.next)(this, () => {\n        this.isLoading = status;\n      });\n    }\n    updateCommandsLength(length) {\n      (0, _runloop.next)(this, () => {\n        this.commandsLength = length;\n      });\n    }\n    get downloadUrl() {\n      let isAll = this.args.regionName === 'ALL';\n      let url = '/executions/' + this.args.executionId + (isAll ? '' : '/regions/' + this.args.executionRegionId) + '/command-streams.csv';\n      return _lib.default.toUrl(url);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"commands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"commandStreams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"commandsLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"totalCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"loadedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"loadCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateExpandStatus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateExpandStatus\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIsLoading\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIsLoading\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandsLength\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandsLength\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandStreamWidgetComponent);\n});","define(\"@testable/shared-ui/components/commands-download-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"assertionsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Download Command Summary</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults  'command')}}\n                 class=\"btn btn-lg btn-default width-full\">\n                <b>Command Summary</b><br/>\n                <small>Each row will correspond to the aggregated metrics of a command.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'command-with-errors')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Command Summary with Errors</b><br/>\n                <small>Each row will correspond to the aggregated metrics of a command,\n                  or the errors associated with a command.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'errors')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Command Errors Summary</b><br/>\n                <small>Each row will correspond to the aggregated metrics for each command error across the test.</small>\n              </a>\n  \n              <a href=\"javascript:\" {{on 'click' (fn this.downloadSuiteResults 'results')}}\n                 class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>All Commands</b><br/>\n                <small>Each row will correspond to an individual command.</small>\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"assertionsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Download Command Summary\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"command\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Command Summary\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics of a command.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"command-with-errors\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Command Summary with Errors\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics of a command,\\\\n                or the errors associated with a command.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"errors\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Command Errors Summary\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to the aggregated metrics for each command error across the test.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"downloadSuiteResults\\\"]],\\\"results\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"All Commands\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to an individual command.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"b\\\",\\\"br\\\",\\\"small\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/commands-download-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let CommandsDownloadModalComponent = _exports.default = (_class = class CommandsDownloadModalComponent extends _component2.default {\n    downloadSuiteResults(option) {\n      this.args.openCommandResultsDownloadUrl(option);\n    }\n    didInsert() {\n      let _this = this;\n      $('#assertionsModal').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#assertionsModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"downloadSuiteResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadSuiteResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CommandsDownloadModalComponent);\n});","define(\"@testable/shared-ui/components/configure-chart\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"ember-uuid\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _emberUuid, _trackedBuiltIns, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"ember-uuid\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"configureChart\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{if this.isNew 'Create Chart' 'Update Chart'}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on 'submit' this.configure}} id=\"configureChartForm\" data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>Name <Ui::InfoIcon @content=\"Label to identify this widget.\" /></label>\n                  <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" placeholder=\"Name\"\n                         @value={{this.currentConfig.name}} data-parsley-required=\"true\" data-parsley-minlength=\"1\"\n                         data-parsley-maxlength=\"255\" data-parsley-required-message=\"Name is required.\"\n                         data-parsley-minlength-message=\"Name must be at least 1 character.\"\n                         data-parsley-maxlength-message=\"Name cannot be longer than 255 characters.\" />\n                </div>\n                <div class=\"form-group\">\n                  <label>Chart Type</label>\n                  <div>\n                    <BsButtonGroup @value={{this.currentConfig.chartType}} @type=\"radio\" @onChange={{this.chartTypeChanged}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"Line\" @size=\"sm\">Line</bg.button>\n                      <bg.button @type=\"success\" @value=\"Histogram\" @size=\"sm\">Histogram</bg.button>\n                      <bg.button @type=\"success\" @value=\"Metered\" @size=\"sm\">Metered</bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>Visibility - By Report Type <Ui::InfoIcon\n                          @content=\"Control when this chart appears in the report: always, only when reporting on a single test run, or only when comparing vs past runs\" /></label>\n                  <div>\n                    <BsButtonGroup @value={{this.currentConfig.visibility}} @type=\"radio\"\n                                   @onChange={{fn (mut this.currentConfig.visibility)}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"always\" @size=\"sm\">Always</bg.button>\n                      <bg.button @type=\"success\" @value=\"thisRun\" @size=\"sm\">\n                        This Test Run Report Only</bg.button>\n                      <bg.button @type=\"success\" @value=\"history\" @size=\"sm\">\n                        Comparison vs History Report Only</bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                {{#if @hasTransactions}}\n                  <div class=\"form-group\">\n                    <label>Visibility - By Resource Type <Ui::InfoIcon\n                            @content=\"For scenario types that capture transaction level metrics (e.g. JMeter Transaction controller element) whether to always show this chart, only when a transaction resource is selected, or only when a request resource is selected.\" /></label>\n                    <div>\n                      <BsButtonGroup @value={{this.currentConfig.resourceTypeVisibility}} @type=\"radio\"\n                                     @onChange={{fn (mut this.currentConfig.resourceTypeVisibility)}} as |bg|>\n                        <bg.button @type=\"success\" @value=\"always\" @size=\"sm\">Always</bg.button>\n                        <bg.button @type=\"success\" @value=\"tx\" @size=\"sm\">Transactions</bg.button>\n                        <bg.button @type=\"success\" @value=\"req\" @size=\"sm\">Requests</bg.button>\n                      </BsButtonGroup>\n                    </div>\n                  </div>\n                {{/if}}\n                {{#if (eq this.metricType 'Histogram')}}\n                  <div class=\"form-group\">\n                    <label>Display Type</label>\n                    <div>\n                      <BsButtonGroup @value={{this.currentConfig.displayType}} @type=\"radio\"\n                                     @onChange={{fn (mut this.currentConfig.displayType)}} as |bg|>\n                        <bg.button @type=\"success\" @value=\"Pie\" @size=\"sm\">Pie</bg.button>\n                        <bg.button @type=\"success\" @value=\"Table\" @size=\"sm\">Table</bg.button>\n                        <bg.button @type=\"success\" @value=\"LinePerBucket\" @size=\"sm\">Line Per Bucket</bg.button>\n                      </BsButtonGroup>\n                    </div>\n                  </div>\n                  {{#if (eq this.currentConfig.displayType 'Table')}}\n                    <div class=\"form-group\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.currentConfig.showComparisons}} /> Show comparisons to recent test\n                        executions\n                      </label>\n                    </div>\n                  {{/if}}\n                {{else}}\n                  <div class=\"form-group\">\n                    <label>Options</label>\n                    {{#if (is-empty this.metricType)}}\n                      <div>\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.currentConfig.showUserMetrics}} /> Automatically add all <a\n                                target=\"_blank\" href=\"https://docs.testable.io/scripts/custom-metrics.html\" rel=\"noreferrer noopener\">custom timing\n                          and counter metrics</a>\n                        </label>\n                      </div>\n                    {{/if}}\n                    <div class=\"{{if (is-empty this.metricType) 'm-t-10'}}\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.currentConfig.showMetricValues}} /> Show Metric Values\n                      </label>\n                      (<label class=\"normal m-l-10 m-r-10\"><Input @type=\"checkbox\"\n                                                         @checked={{this.currentConfig.hideMetricValuesInHistoryReport}} />\n                                                         Hide in Test Run History Report</label>)\n                    </div>\n                    {{#if (or (not @isLoad) (not-eq this.currentConfig.visibility \"thisRun\"))}}\n                      <div class=\"m-t-10\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.currentConfig.showPFIndicator}} /> Include a Pass/Fail indicator in\n                          test history chart\n                        </label>\n                      </div>\n                    {{/if}}\n                    {{#if (eq this.metricType 'Metered')}}\n                      <div class=\"m-t-10\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.currentConfig.showBucketTable}} /> Show Breakdown\n                          By {{this.currentConfig.label}}\n                        </label>\n                      </div>\n                    {{/if}}\n                  </div>\n                {{/if}}\n                {{#if (eq this.metricType 'Metered')}}\n                  <div class=\"form-group\">\n                    <label>\n                      Bucket Label <Ui::InfoIcon\n                            @content=\"Metered metrics support bucketing. This label describes what type of bucketing is used (e.g. for Memory/CPU it is by Test Runner).\" />\n                    </label>\n                    <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" placeholder=\"Bucket Label\"\n                           @value={{this.currentConfig.label}} data-parsley-required=\"true\" data-parsley-minlength=\"1\"\n                           data-parsley-maxlength=\"255\" data-parsley-required-message=\"Bucket label is required.\"\n                           data-parsley-minlength-message=\"Bucket label must be at least 1 character.\"\n                           data-parsley-maxlength-message=\"Bucket label cannot be longer than 255 characters.\" />\n                  </div>\n                  <div class=\"form-group\">\n                    <label>Display Type</label>\n                    <div>\n                      <BsButtonGroup @value={{this.currentConfig.bucketAggregator}} @type=\"radio\"\n                                     @onChange={{this.bucketAggregatorChanged}} as |bg| >\n                        <bg.button @type=\"success\" @value=\"Largest\" @size=\"sm\">\n                          Show Peak On Single {{this.currentConfig.label}}</bg.button>\n                        <bg.button @type=\"success\" @value=\"Peak\" @size=\"sm\">\n                          Show Peak Across {{this.currentConfig.label}}s</bg.button>\n                      </BsButtonGroup>\n                    </div>\n                  </div>\n                {{/if}}\n                <div class=\"form-group\">\n                  <label>Metrics</label>\n                  <div>\n                    <button {{on 'click' this.addRow}} type=\"button\" class=\"btn btn-xs btn-primary\"><Ui::Icon @icon=\"fa fa-plus\" />\n                    </button>\n                    <br/>\n                    Click and drag to reorder metrics\n                    <div class=\"row config-row\">\n                      <div class=\"col-md-12\">\n                        {{#each this.columnIds as |columnId|}}\n                          <ConfigureColumn @columnId={{columnId}}\n                                           @columnConfig={{prop-lookup this.metricByColumnId columnId}}\n                                           @metricDefs={{@metricDefs}}\n                                           @summary={{@summary}}\n                                           @percentiles={{@percentiles}}\n                                           @scriptType={{@scriptType}}\n                                           @isLoad={{@isLoad}}\n                                           @showSelectedCheckbox={{not-eq this.metricType 'Histogram'}}\n                                           @showCounterTotal={{true}}\n                                           @showGraphType={{not-eq this.currentConfig.chartType 'Histogram'}}\n                                           @showInHistory={{not-eq this.currentConfig.visibility 'thisRun'}}\n                                           @metricType={{this.metricType}}\n                                           @forcePercentage={{eq this.currentConfig.displayType 'LinePerBucket'}}\n                          />\n                        {{/each}}\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>{{if this.isNew 'Create' 'Update'}}</strong>\n                  </button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"configureChart\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[52,[30,0,[\\\"isNew\\\"]],\\\"Create Chart\\\",\\\"Update Chart\\\"]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"configureChartForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"configure\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Name \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Label to identify this widget.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Name\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Name is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Name must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Name cannot be longer than 255 characters.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"currentConfig\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Chart Type\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"chartType\\\"]],\\\"radio\\\",[30,0,[\\\"chartTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Line\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Line\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Histogram\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Histogram\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Metered\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Metered\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[1]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Visibility - By Report Type \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Control when this chart appears in the report: always, only when reporting on a single test run, or only when comparing vs past runs\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"always\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Always\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"thisRun\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      This Test Run Report Only\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"history\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Comparison vs History Report Only\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[2]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Visibility - By Resource Type \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"For scenario types that capture transaction level metrics (e.g. JMeter Transaction controller element) whether to always show this chart, only when a transaction resource is selected, or only when a request resource is selected.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"resourceTypeVisibility\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"currentConfig\\\",\\\"resourceTypeVisibility\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,4,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"always\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Always\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,4,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tx\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Transactions\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,4,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"req\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Requests\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[4]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,13],[[30,0,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Display Type\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"displayType\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"currentConfig\\\",\\\"displayType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Pie\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Pie\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Table\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Table\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"LinePerBucket\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Line Per Bucket\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[5]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"currentConfig\\\",\\\"displayType\\\"]],\\\"Table\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showComparisons\\\"]]]],null],[1,\\\" Show comparisons to recent test\\\\n                      executions\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Options\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"metricType\\\"]]],null],[[[1,\\\"                    \\\"],[10,0],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showUserMetrics\\\"]]]],null],[1,\\\" Automatically add all \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/scripts/custom-metrics.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"custom timing\\\\n                        and counter metrics\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,0],[15,0,[29,[[52,[28,[37,14],[[30,0,[\\\"metricType\\\"]]],null],\\\"m-t-10\\\"]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showMetricValues\\\"]]]],null],[1,\\\" Show Metric Values\\\\n                    \\\"],[13],[1,\\\"\\\\n                    (\\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-l-10 m-r-10\\\"],[12],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"hideMetricValuesInHistoryReport\\\"]]]],null],[1,\\\"\\\\n                                                       Hide in Test Run History Report\\\"],[13],[1,\\\")\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[28,[37,17],[[30,6]],null],[28,[37,18],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]],\\\"thisRun\\\"],null]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showPFIndicator\\\"]]]],null],[1,\\\" Include a Pass/Fail indicator in\\\\n                        test history chart\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,13],[[30,0,[\\\"metricType\\\"]],\\\"Metered\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showBucketTable\\\"]]]],null],[1,\\\" Show Breakdown\\\\n                        By \\\"],[1,[30,0,[\\\"currentConfig\\\",\\\"label\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[28,[37,13],[[30,0,[\\\"metricType\\\"]],\\\"Metered\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n                    Bucket Label \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Metered metrics support bucketing. This label describes what type of bucketing is used (e.g. for Memory/CPU it is by Test Runner).\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Bucket Label\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Bucket label is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Bucket label must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Bucket label cannot be longer than 255 characters.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"currentConfig\\\",\\\"label\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Display Type\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"bucketAggregator\\\"]],\\\"radio\\\",[30,0,[\\\"bucketAggregatorChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Largest\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        Show Peak On Single \\\"],[1,[30,0,[\\\"currentConfig\\\",\\\"label\\\"]]]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Peak\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        Show Peak Across \\\"],[1,[30,0,[\\\"currentConfig\\\",\\\"label\\\"]]],[1,\\\"s\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[7]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Metrics\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"addRow\\\"]]],null],[12],[8,[39,19],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  Click and drag to reorder metrics\\\\n                  \\\"],[10,0],[14,0,\\\"row config-row\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,22],[[28,[37,22],[[30,0,[\\\"columnIds\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[8,[39,23],null,[[\\\"@columnId\\\",\\\"@columnConfig\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@showSelectedCheckbox\\\",\\\"@showCounterTotal\\\",\\\"@showGraphType\\\",\\\"@showInHistory\\\",\\\"@metricType\\\",\\\"@forcePercentage\\\"],[[30,8],[28,[37,24],[[30,0,[\\\"metricByColumnId\\\"]],[30,8]],null],[30,9],[30,10],[30,11],[30,12],[30,6],[28,[37,18],[[30,0,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],true,[28,[37,18],[[30,0,[\\\"currentConfig\\\",\\\"chartType\\\"]],\\\"Histogram\\\"],null],[28,[37,18],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]],\\\"thisRun\\\"],null],[30,0,[\\\"metricType\\\"]],[28,[37,13],[[30,0,[\\\"currentConfig\\\",\\\"displayType\\\"]],\\\"LinePerBucket\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,[52,[30,0,[\\\"isNew\\\"]],\\\"Create\\\",\\\"Update\\\"]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"bg\\\",\\\"@hasTransactions\\\",\\\"bg\\\",\\\"bg\\\",\\\"@isLoad\\\",\\\"bg\\\",\\\"columnId\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"eq\\\",\\\"is-empty\\\",\\\"a\\\",\\\"or\\\",\\\"not\\\",\\\"not-eq\\\",\\\"ui/icon\\\",\\\"br\\\",\\\"each\\\",\\\"-track-array\\\",\\\"configure-column\\\",\\\"prop-lookup\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-chart.hbs\",\n    \"isStrictMode\": false\n  });\n  let ConfigureChartComponent = _exports.default = (_class = class ConfigureChartComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"currentConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"metricByColumnId\", _descriptor2, this);\n      _initializerDefineProperty(this, \"columnIds\", _descriptor3, this);\n      _initializerDefineProperty(this, \"counter\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isNew\", _descriptor5, this);\n      this.isNew = _.isUndefined(this.args.config);\n      const config = _.cloneDeep(this.args.config) || {\n        name: '',\n        chartType: 'Line',\n        showMetricValues: true,\n        metrics: []\n      };\n      const metricByColumnId = {};\n      const columnIds = [];\n      let counter = 0;\n      _.forEach(config.metrics, column => {\n        let columnId = counter++;\n        metricByColumnId[columnId] = column;\n        columnIds.push(columnId);\n      });\n      if (config.chartType === 'Metered') {\n        this.addMeteredDefaults(config);\n      }\n      if (config.chartType === 'Histogram' && !config.displayType) {\n        config.displayType = 'Pie';\n      }\n      if (config.chartType === 'Histogram' && _.isUndefined(config.showComparisons)) {\n        config.showComparisons = true;\n      }\n      if (!config.visibility) {\n        config.visibility = config.chartType === 'Histogram' ? 'thisRun' : 'always';\n      }\n      if (!config.resourceTypeVisibility) {\n        config.resourceTypeVisibility = 'always';\n      }\n      if (!_.isBoolean(config.hideMetricValuesInHistoryReport)) {\n        config.hideMetricValuesInHistoryReport = true;\n      }\n      this.currentConfig = config;\n      this.metricByColumnId = metricByColumnId;\n      this.columnIds = new _trackedBuiltIns.TrackedArray(columnIds);\n      this.counter = counter;\n    }\n    didInsert() {\n      const _this = this;\n      $('#configureChart').on('shown.bs.modal', function () {\n        _lib.default.makeColumnsDraggable('#configureChart');\n      });\n      $('#configureChart').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#configureChart').modal('show');\n      $('#configureChartForm').parsley();\n    }\n    get metricType() {\n      let chartType = this.currentConfig.chartType;\n      if (chartType === 'Histogram' || chartType === 'Metered') {\n        return chartType;\n      }\n      return null;\n    }\n    configure(e) {\n      e.preventDefault();\n      if (!$('#configureChartForm').parsley().validate()) {\n        return;\n      }\n      const metricByColumnId = this.metricByColumnId;\n      const metrics = [];\n      const _this = this;\n      $('[data-column-id]').each(function () {\n        const columnId = $(this).attr('data-column-id');\n        const metric = metricByColumnId[Number(columnId)];\n        if (metric) {\n          metrics.push(metric);\n        }\n      });\n      $('#configureChart').modal('hide');\n      this.args.configChanged({\n        id: this.args.config?.id || (0, _emberUuid.v4)(),\n        name: this.currentConfig.name,\n        chartType: this.currentConfig.chartType,\n        visibility: this.currentConfig.visibility,\n        resourceTypeVisibility: this.currentConfig.resourceTypeVisibility,\n        displayType: this.currentConfig.displayType,\n        showUserMetrics: this.currentConfig.showUserMetrics,\n        showMetricValues: this.currentConfig.showMetricValues,\n        showPFIndicator: this.currentConfig.showPFIndicator,\n        hideMetricValuesInHistoryReport: this.currentConfig.hideMetricValuesInHistoryReport,\n        showBucketTable: this.currentConfig.showBucketTable,\n        showComparisons: this.currentConfig.showComparisons,\n        bucketAggregator: this.currentConfig.bucketAggregator,\n        label: this.currentConfig.label,\n        metrics: metrics\n      }, this.args.config);\n    }\n    addRow() {\n      const config = this.currentConfig.metrics;\n      const isFirst = config.length === 0;\n      const metricByColumnId = this.metricByColumnId;\n      const columnIds = this.columnIds;\n      let counter = this.counter;\n      const columnId = counter++;\n      const newMetric = {\n        title: '',\n        name: '',\n        units: '',\n        selected: true\n      };\n      metricByColumnId[columnId] = newMetric;\n      columnIds.unshift(columnId);\n      this.counter = counter;\n      if (isFirst) {\n        (0, _runloop.schedule)('afterRender', this, () => {\n          _lib.default.makeColumnsDraggable('#configureChart');\n        });\n      }\n    }\n    chartTypeChanged(newChartType) {\n      if (newChartType === 'Metered') {\n        this.addMeteredDefaults(this.currentConfig);\n      } else if (newChartType === 'Histogram') {\n        this.addHistogramDefaults(this.currentConfig);\n      }\n      this.currentConfig.chartType = newChartType;\n      this.currentConfig = this.currentConfig;\n    }\n    bucketAggregatorChanged(value) {\n      this.currentConfig.bucketAggregator = value;\n      this.currentConfig = this.currentConfig;\n    }\n    addMeteredDefaults(config) {\n      if (!config.label) {\n        config.label = 'Test Runner';\n      }\n      if (_.isUndefined(config.showBucketTable)) {\n        config.showBucketTable = true;\n      }\n      if (_.isUndefined(config.bucketAggregator)) {\n        config.bucketAggregator = 'Largest';\n      }\n    }\n    addHistogramDefaults(config) {\n      if (!config.displayType) {\n        config.displayType = 'Pie';\n      }\n      if (_.isUndefined(config.showComparisons)) {\n        config.showComparisons = true;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"metricByColumnId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"columnIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"counter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isNew\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configure\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configure\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addRow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addRow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chartTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chartTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketAggregatorChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketAggregatorChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureChartComponent);\n});","define(\"@testable/shared-ui/components/configure-column\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row config-row m-t-10\" data-sortable-id=\"{{@columnId}}\" data-column-id=\"{{@columnId}}\"\n    {{did-update this.onToggleUseFailColor @columnConfig.useFailColor}}>\n    <div class=\"col-md-4\">\n      <div class=\"input-group\">\n        <div class=\"input-group-addon\">\n          <a {{on \"click\" (fn this.deleteColumn @columnId)}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                                title=\"Delete Column\" role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n        </div>\n        <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"4096\" placeholder=\"Title\"\n               @value={{@columnConfig.title}} required=\"true\" />\n      </div>\n      {{#if @defaultCheckboxText}}\n        <label class=\"normal\"><Input @type=\"checkbox\" @checked={{@columnConfig.isDefault}} /> {{@defaultCheckboxText}}</label>\n      {{/if}}\n      {{#if @showSelectedCheckbox}}\n      <label class=\"normal\"><Input @type=\"checkbox\" @checked={{@columnConfig.selected}} class=\"m-l-10\" /> Show in chart\n        </label>\n      {{/if}}\n      {{#if (and @showSelectedCheckbox @showInHistory (eq @columnConfig.graphType 'column'))}}\n        <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{@columnConfig.useFailColor}} class=\"m-l-10\" />\n          Different fail color\n          <Ui::InfoIcon\n                @content=\"When graphing test history use a different column color for failed tests than for successful ones. The second color is the color for failed tests.\" />\n        </label>\n      {{/if}}\n    </div>\n    <div class=\"col-md-8\">\n      <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n        <MetricPicker @namespace={{@columnConfig.namespace}}\n                      @metric={{or @columnConfig.name @columnConfig.metric}}\n                      @columnConfig={{@columnConfig}}\n                      @errorsElementId={{this.errorsElementId}}\n                      @metricDefs={{@metricDefs}}\n                      @percentiles={{@percentiles}}\n                      @summary={{@summary}}\n                      @scriptType={{@scriptType}}\n                      @showCumulativeCheckbox={{and @isLoad @showSelectedCheckbox}}\n                      @showCounterTotal={{@showCounterTotal}}\n                      @showCounterOverallAggregators={{true}}\n                      @showGraphType={{@showGraphType}}\n                      @metricType={{@metricType}}\n                      @forcePercentage={{@forcePercentage}}\n                      @metricUpdated={{this.metricUpdated}}\n        />\n        <div id=\"{{this.errorsElementId}}\"></div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"row config-row m-t-10\\\"],[16,\\\"data-sortable-id\\\",[29,[[30,1]]]],[16,\\\"data-column-id\\\",[29,[[30,1]]]],[4,[38,1],[[30,0,[\\\"onToggleUseFailColor\\\"]],[30,2,[\\\"useFailColor\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Column\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,4],[[30,0,[\\\"deleteColumn\\\"]],[30,1]],null]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"4096\\\"],[24,\\\"placeholder\\\",\\\"Title\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,2,[\\\"title\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,6],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"isDefault\\\"]]]],null],[1,\\\" \\\"],[1,[30,3]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,4],[[[1,\\\"    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,6],[[24,0,\\\"m-l-10\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"selected\\\"]]]],null],[1,\\\" Show in chart\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,9],[[30,4],[30,5],[28,[37,10],[[30,2,[\\\"graphType\\\"]],\\\"column\\\"],null]],null],[[[1,\\\"      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[24,0,\\\"m-l-10\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"useFailColor\\\"]]]],null],[1,\\\"\\\\n        Different fail color\\\\n        \\\"],[8,[39,11],null,[[\\\"@content\\\"],[\\\"When graphing test history use a different column color for failed tests than for successful ones. The second color is the color for failed tests.\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,12],null,[[\\\"@namespace\\\",\\\"@metric\\\",\\\"@columnConfig\\\",\\\"@errorsElementId\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@showCumulativeCheckbox\\\",\\\"@showCounterTotal\\\",\\\"@showCounterOverallAggregators\\\",\\\"@showGraphType\\\",\\\"@metricType\\\",\\\"@forcePercentage\\\",\\\"@metricUpdated\\\"],[[30,2,[\\\"namespace\\\"]],[28,[37,13],[[30,2,[\\\"name\\\"]],[30,2,[\\\"metric\\\"]]],null],[30,2],[30,0,[\\\"errorsElementId\\\"]],[30,6],[30,7],[30,8],[30,9],[28,[37,9],[[30,10],[30,4]],null],[30,11],true,[30,12],[30,13],[30,14],[30,0,[\\\"metricUpdated\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[15,1,[29,[[30,0,[\\\"errorsElementId\\\"]]]]],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@columnId\\\",\\\"@columnConfig\\\",\\\"@defaultCheckboxText\\\",\\\"@showSelectedCheckbox\\\",\\\"@showInHistory\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@showCounterTotal\\\",\\\"@showGraphType\\\",\\\"@metricType\\\",\\\"@forcePercentage\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"if\\\",\\\"label\\\",\\\"and\\\",\\\"eq\\\",\\\"ui/info-icon\\\",\\\"metric-picker\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-column.hbs\",\n    \"isStrictMode\": false\n  });\n  let ConfigureColumnComponent = _exports.default = (_class = class ConfigureColumnComponent extends _component2.default {\n    get errorsElementId() {\n      return 'error-' + this.args.columnId;\n    }\n    onToggleUseFailColor() {\n      if (this.args.columnConfig.useFailColor) {\n        (0, _object.set)(this.args.columnConfig, 'failColor', 'rgba(255,91,87,.3)');\n      }\n    }\n    deleteColumn(id) {\n      $('[data-column-id=' + id + ']').remove();\n    }\n    metricUpdated(info) {\n      if (info.metricDef) {\n        const usesNameProp = _.isUndefined(this.args.columnConfig.metric);\n        (0, _object.set)(this.args.columnConfig, 'namespace', info.metricDef.namespace);\n        (0, _object.set)(this.args.columnConfig, usesNameProp ? 'name' : 'metric', info.metric);\n        (0, _object.set)(this.args.columnConfig, 'units', _loadTest.default.getUnits(info.metricDef.namespace, info.metric, info.metricDef, this.args.scriptType));\n        if (info.graphType) {\n          (0, _object.set)(this.args.columnConfig, 'graphType', info.graphType);\n        }\n        if (info.color) {\n          (0, _object.set)(this.args.columnConfig, 'color', info.color);\n        }\n        if (info.failColor) {\n          (0, _object.set)(this.args.columnConfig, 'failColor', info.failColor);\n        }\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"onToggleUseFailColor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onToggleUseFailColor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteColumn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteColumn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricUpdated\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureColumnComponent);\n});","define(\"@testable/shared-ui/components/configure-columns\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _runloop, _trackedBuiltIns, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"configureColumns\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Configure {{@type}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.configure}} id=\"configureColumnsForm\" data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>Comparisons</label>\n                  <div>\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.currentConfig.showComparisons}} /> Show comparisons to\n                      recent test\n                      executions\n                    </label>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <label>Columns</label>\n                  <div>\n                    <button {{on \"click\" this.addRow}} type=\"button\" class=\"btn btn-xs btn-primary\">\n                      <Ui::Icon @icon=\"fa fa-plus\" /></button>\n                    <br/>\n                    Click and drag to reorder columns\n                    <div class=\"row config-row\">\n                      <div class=\"col-md-12\">\n                        {{#each this.columnIds as |columnId|}}\n                          <ConfigureColumn @columnId={{columnId}}\n                                           @columnConfig={{prop-lookup this.metricByColumnId columnId}}\n                                           @metricDefs={{@metricDefs}}\n                                           @summary={{@summary}}\n                                           @percentiles={{@percentiles}}\n                                           @scriptType={{@scriptType}}\n                                           @isLoad={{@isLoad}}\n                                           @defaultCheckboxText={{@defaultCheckboxText}}\n                                           @showSelectedCheckbox={{@showSelectedCheckbox}}\n                                           @showCounterTotal={{@showCounterTotal}}\n                          />\n                        {{/each}}\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <label>Sort Resources By</label>\n                  <div>\n                    <BsButtonGroup @value={{this.currentConfig.orderBy}} @type=\"radio\"\n                                   @onChange={{this.orderByChanged}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"resource\" @size=\"sm\">\n                        Resource Name\n                        <Ui::InfoIcon content=\"Sort by the resource label.\"/>\n                      </bg.button>\n                      <bg.button @type=\"success\" @value=\"first\" @size=\"sm\">\n                        First Result Timestamp\n                        <Ui::InfoIcon\n                                content=\"Sort the resources grid in the order that results were produced. This ordering may not be available for older test results.\"/>\n                      </bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>Update {{@type}}</strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"configureColumns\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Configure \\\"],[1,[30,1]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"configureColumnsForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"configure\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Comparisons\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showComparisons\\\"]]]],null],[1,\\\" Show comparisons to\\\\n                    recent test\\\\n                    executions\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Columns\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"addRow\\\"]]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  Click and drag to reorder columns\\\\n                  \\\"],[10,0],[14,0,\\\"row config-row\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"columnIds\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[8,[39,12],null,[[\\\"@columnId\\\",\\\"@columnConfig\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@defaultCheckboxText\\\",\\\"@showSelectedCheckbox\\\",\\\"@showCounterTotal\\\"],[[30,2],[28,[37,13],[[30,0,[\\\"metricByColumnId\\\"]],[30,2]],null],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[30,9],[30,10]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Sort Resources By\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,14],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"orderBy\\\"]],\\\"radio\\\",[30,0,[\\\"orderByChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,11,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"resource\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Resource Name\\\\n                      \\\"],[8,[39,15],[[24,\\\"content\\\",\\\"Sort by the resource label.\\\"]],null,null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,11,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"first\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      First Result Timestamp\\\\n                      \\\"],[8,[39,15],[[24,\\\"content\\\",\\\"Sort the resources grid in the order that results were produced. This ordering may not be available for older test results.\\\"]],null,null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[11]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Update \\\"],[1,[30,1]],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@type\\\",\\\"columnId\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@defaultCheckboxText\\\",\\\"@showSelectedCheckbox\\\",\\\"@showCounterTotal\\\",\\\"bg\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"ui/icon\\\",\\\"br\\\",\\\"each\\\",\\\"-track-array\\\",\\\"configure-column\\\",\\\"prop-lookup\\\",\\\"bs-button-group\\\",\\\"ui/info-icon\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-columns.hbs\",\n    \"isStrictMode\": false\n  });\n  let ConfigureColumnsComponent = _exports.default = (_class = class ConfigureColumnsComponent extends _component2.default {\n    configure(e) {\n      e.preventDefault();\n      const metricByColumnId = this.metricByColumnId;\n      const metrics = [];\n      $('[data-column-id]').each(function () {\n        let columnId = $(this).attr('data-column-id');\n        let metric = metricByColumnId[Number(columnId)];\n        if (metric) {\n          metrics.push(metric);\n        }\n      });\n      this.args.configChanged({\n        orderBy: this.currentConfig.orderBy,\n        showComparisons: this.currentConfig.showComparisons,\n        metrics: metrics\n      });\n      $('#configureColumns').modal('hide');\n    }\n    addRow() {\n      const columnIds = this.columnIds;\n      const metricByColumnId = this.metricByColumnId;\n      let counter = this.counter;\n      const metric = {\n        title: '',\n        namespace: '',\n        metric: '',\n        units: '',\n        isDefault: true,\n        selected: false\n      };\n      const columnId = counter++;\n      metricByColumnId[columnId] = metric;\n      columnIds.unshift(columnId);\n      this.counter = counter;\n    }\n    orderByChanged(newOrderBy) {\n      this.currentConfig.orderBy = newOrderBy;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"currentConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"columnIds\", _descriptor2, this);\n      _initializerDefineProperty(this, \"metricByColumnId\", _descriptor3, this);\n      _initializerDefineProperty(this, \"counter\", _descriptor4, this);\n      const config = _.cloneDeep(this.args.config);\n      const metricByColumnId = {};\n      const columnIds = [];\n      let counter = 0;\n      _.forEach(config.metrics, function (column) {\n        let columnId = counter++;\n        metricByColumnId[columnId] = column;\n        columnIds.push(columnId);\n      });\n      this.metricByColumnId = metricByColumnId;\n      this.columnIds = new _trackedBuiltIns.TrackedArray(columnIds);\n      this.counter = counter;\n      this.currentConfig = new _trackedBuiltIns.TrackedObject(config);\n      if (!config.orderBy) {\n        this.currentConfig.orderBy = 'resource';\n      }\n    }\n    didInsert() {\n      let _this = this;\n      $('#configureColumns').on('shown.bs.modal', function () {\n        _lib.default.makeColumnsDraggable('#configureColumns');\n      });\n      $('#configureColumns').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#configureColumns').modal('show');\n      $('#configureColumnsForm').parsley();\n      (0, _runloop.later)(this, () => {\n        $('#configureColumns *:button:first').focus();\n      }, 500);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"columnIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"metricByColumnId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"counter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"configure\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configure\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addRow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addRow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"orderByChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orderByChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureColumnsComponent);\n});","define(\"@testable/shared-ui/components/configure-console\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"lodash-es\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lodashEs, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"lodash-es\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@modalClosed}}\n    @title=\"Configure Console\"\n    @size=\"md\"\n  >\n    <form {{on \"submit\" this.configure}} class=\"form-horizontal\">\n      <div class=\"row form-group\">\n        <div class=\"col-md-3 col-sm-5 col-xs-8\">\n          <Ui::PSelect @options={{this.logLevels}} @selected={{this.currentConfigLevel}}\n                       @placeholder=\"Please select Authentication Source...\"\n                       @onChange={{this.consoleLevelChanged}} as |opt|>\n            {{opt}}\n          </Ui::PSelect>\n        </div>\n        <div class=\"col-md-9\">\n          <Ui::InfoIcon\n            @content=\"Only logging above the selected level will appear in the console (Error > Info > Debug)\"/>\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <div class=\"col-md-4 col-sm-8 col-xs-10\">\n          <label class=\"normal\">\n            <input type=\"checkbox\" checked={{this.systemOnly}} {{on \"change\" this.systemOnlyChanged}}> System\n            Logging\n            Only\n          </label>\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <div class=\"col-md-4 col-sm-8 col-xs-10\">\n          <label class=\"normal\">\n            <input type=\"checkbox\" checked={{this.wrap}} {{on \"change\" this.wrapChanged}}> Wrap Text\n          </label>\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <div class=\"col-md-2 col-sm-3 col-xs-4\">\n          <button type=\"submit\" class=\"btn btn-sm btn-success\"><strong>Update</strong></button>\n        </div>\n      </div>\n    </form>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],\\\"Configure Console\\\",\\\"md\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,2],[\\\"submit\\\",[30,0,[\\\"configure\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-3 col-sm-5 col-xs-8\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"logLevels\\\"]],[30,0,[\\\"currentConfigLevel\\\"]],\\\"Please select Authentication Source...\\\",[30,0,[\\\"consoleLevelChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,2]],[1,\\\"\\\\n        \\\"]],[2]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-9\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@content\\\"],[\\\"Only logging above the selected level will appear in the console (Error > Info > Debug)\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-8 col-xs-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,0,[\\\"systemOnly\\\"]]],[24,4,\\\"checkbox\\\"],[4,[38,2],[\\\"change\\\",[30,0,[\\\"systemOnlyChanged\\\"]]],null],[12],[13],[1,\\\" System\\\\n          Logging\\\\n          Only\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-8 col-xs-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,0,[\\\"wrap\\\"]]],[24,4,\\\"checkbox\\\"],[4,[38,2],[\\\"change\\\",[30,0,[\\\"wrapChanged\\\"]]],null],[12],[13],[1,\\\" Wrap Text\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-2 col-sm-3 col-xs-4\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Update\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"opt\\\"],[\\\"ui/modal-wrapper\\\",\\\"form\\\",\\\"on\\\",\\\"div\\\",\\\"ui/p-select\\\",\\\"ui/info-icon\\\",\\\"label\\\",\\\"input\\\",\\\"button\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-console.hbs\",\n    \"isStrictMode\": false\n  });\n  let ConfigureConsoleComponent = _exports.default = (_class = class ConfigureConsoleComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"logLevels\", ['Error', 'Info', 'Debug']);\n      _initializerDefineProperty(this, \"currentConfigLevel\", _descriptor, this);\n      _initializerDefineProperty(this, \"wrap\", _descriptor2, this);\n      _initializerDefineProperty(this, \"systemOnly\", _descriptor3, this);\n      const config = _lodashEs.default.cloneDeep(this.args.config);\n      this.currentConfigLevel = config.level;\n      this.wrap = !!config.wrap;\n      this.systemOnly = !!config.systemOnly;\n    }\n    configure(e) {\n      e.preventDefault();\n      this.args.configChanged({\n        wrap: this.wrap,\n        systemOnly: this.systemOnly,\n        level: this.currentConfigLevel\n      });\n      this.args.modalClosed();\n    }\n    consoleLevelChanged(value) {\n      this.currentConfigLevel = value;\n    }\n    wrapChanged(e) {\n      this.wrap = e.target.checked;\n    }\n    systemOnlyChanged(e) {\n      this.systemOnly = e.target.checked;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentConfigLevel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"wrap\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"systemOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"configure\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configure\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"consoleLevelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleLevelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"wrapChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"wrapChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemOnlyChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemOnlyChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureConsoleComponent);\n});","define(\"@testable/shared-ui/components/configure-glance-metric\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row form-group\" data-sortable-id=\"{{@columnId}}\" data-column-id=\"{{@columnId}}\">\n  \n    <div class=\"col-md-3\">\n      <div class=\"input-group\">\n        <div class=\"input-group-addon\">\n          <a {{on \"click\" (fn this.deleteColumn @columnId)}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\" title=\"Delete Column\" role=\"button\">\n            <Ui::Icon @icon=\"fa fa-trash\" /></a>\n        </div>\n        <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" placeholder=\"Title\" @value={{@columnConfig.title}} required=\"true\" />\n      </div>\n      <label class=\"normal\"><Input @type=\"checkbox\" @checked={{@columnConfig.isDefault}} /> Show in dashboard</label>\n    </div>\n    <div class=\"col-md-5\">\n      <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n        <MetricPicker @namespace={{@columnConfig.namespace}}\n                      @metric={{@columnConfig.metric}}\n                      @errorsElementId={{this.errorsElementId}}\n                      @metricDefs={{@metricDefs}}\n                      @percentiles={{@percentiles}}\n                      @summary={{@summary}}\n                      @scriptType={{@scriptType}}\n                      @showCumulativeCheckbox={{@isLoad}}\n                      @showCounterOverallAggregators={{true}}\n                      @metricUpdated={{this.metricUpdated}} />\n        <div id=\"{{this.errorsElementId}}\"></div>\n      </div>\n      <label class=\"normal\"><Input @type=\"checkbox\" @checked={{@columnConfig.higherIsBetter}} /> Higher Is Better</label>\n    </div>\n    <div class=\"col-md-4\">\n      <div class=\"input-group\">\n        <div class=\"input-group-addon glance-threshold\">\n  \t\t\t\t<span class=\"fa-stack text-success\">\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-circle-o fa-stack-1x\" class=\"fs-2m\" />\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-star fa-stack-1x\" class=\"fs-1m\" />\n  \t\t\t\t</span>\n          {{if @columnConfig.higherIsBetter 'increase by' 'decrease by'}}\n        </div>\n        <Input @type=\"number\" class=\"form-control\" placeholder=\"Threshold\" @value={{@columnConfig.improved}} required=\"true\" />\n        <div class=\"input-group-addon\">%</div>\n      </div>\n      <div class=\"input-group m-t-10\">\n        <div class=\"input-group-addon glance-threshold\">\n  \t\t\t\t<span class=\"fa-stack text-warning\">\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-circle-o fa-stack-1x\" class=\"fs-2m\" />\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-minus fa-stack-1x\" class=\"fs-1m\" />\n  \t\t\t\t</span>\n          {{if @columnConfig.higherIsBetter 'decrease by' 'increase by'}}\n        </div>\n        <Input @type=\"number\" class=\"form-control\" placeholder=\"Threshold\" @value={{@columnConfig.amber}} required=\"true\" />\n        <div class=\"input-group-addon\">%</div>\n      </div>\n      <div class=\"input-group m-t-10\">\n        <div class=\"input-group-addon glance-threshold\">\n  \t\t\t\t<span class=\"fa-stack text-danger\">\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-circle-o fa-stack-1x\" class=\"fs-2m\" />\n  \t\t\t\t    <Ui::Icon @icon=\"fa fa-times fa-stack-1x\" class=\"fs-1m\" />\n  \t\t\t\t</span>\n          {{if @columnConfig.higherIsBetter 'decrease by' 'increase by'}}\n        </div>\n        <Input @type=\"number\" class=\"form-control\" placeholder=\"Threshold\" @value={{@columnConfig.red}} required=\"true\" />\n        <div class=\"input-group-addon\">%</div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"row form-group\\\"],[15,\\\"data-sortable-id\\\",[29,[[30,1]]]],[15,\\\"data-column-id\\\",[29,[[30,1]]]],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"col-md-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Column\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,2],[\\\"click\\\",[28,[37,3],[[30,0,[\\\"deleteColumn\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Title\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,2,[\\\"title\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,5],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"isDefault\\\"]]]],null],[1,\\\" Show in dashboard\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-5\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,7],null,[[\\\"@namespace\\\",\\\"@metric\\\",\\\"@errorsElementId\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@showCumulativeCheckbox\\\",\\\"@showCounterOverallAggregators\\\",\\\"@metricUpdated\\\"],[[30,2,[\\\"namespace\\\"]],[30,2,[\\\"metric\\\"]],[30,0,[\\\"errorsElementId\\\"]],[30,3],[30,4],[30,5],[30,6],[30,7],true,[30,0,[\\\"metricUpdated\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[15,1,[29,[[30,0,[\\\"errorsElementId\\\"]]]]],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,5],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"higherIsBetter\\\"]]]],null],[1,\\\" Higher Is Better\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon glance-threshold\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[10,1],[14,0,\\\"fa-stack text-success\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-2m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-circle-o fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-1m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-star fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[13],[1,\\\"\\\\n        \\\"],[1,[52,[30,2,[\\\"higherIsBetter\\\"]],\\\"increase by\\\",\\\"decrease by\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Threshold\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,2,[\\\"improved\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"%\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon glance-threshold\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[10,1],[14,0,\\\"fa-stack text-warning\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-2m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-circle-o fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-1m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-minus fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[13],[1,\\\"\\\\n        \\\"],[1,[52,[30,2,[\\\"higherIsBetter\\\"]],\\\"decrease by\\\",\\\"increase by\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Threshold\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,2,[\\\"amber\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"%\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon glance-threshold\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[10,1],[14,0,\\\"fa-stack text-danger\\\"],[12],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-2m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-circle-o fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t    \\\"],[8,[39,4],[[24,0,\\\"fs-1m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-times fa-stack-1x\\\"]],null],[1,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[13],[1,\\\"\\\\n        \\\"],[1,[52,[30,2,[\\\"higherIsBetter\\\"]],\\\"decrease by\\\",\\\"increase by\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Threshold\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,2,[\\\"red\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"%\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@columnId\\\",\\\"@columnConfig\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@isLoad\\\"],[\\\"div\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"label\\\",\\\"metric-picker\\\",\\\"span\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-glance-metric.hbs\",\n    \"isStrictMode\": false\n  });\n  // todo:\n  // - columnConfig is being updated from template as well\n  // -              but it is coming from parent\n  let ConfigureGlanceMetricComponent = _exports.default = (_class = class ConfigureGlanceMetricComponent extends _component2.default {\n    get errorsElementId() {\n      return 'error-' + this.args.columnId;\n    }\n    deleteColumn(id) {\n      $('[data-column-id=' + id + ']').remove();\n    }\n    metricUpdated(info) {\n      if (info.metricDef) {\n        (0, _object.set)(this.args.columnConfig, 'namespace', info.metricDef.namespace);\n        (0, _object.set)(this.args.columnConfig, 'metric', info.metric);\n        (0, _object.set)(this.args.columnConfig, 'units', _loadTest.default.getUnits(info.metricDef.namespace, info.metric, info.metricDef, this.args.scriptType));\n        (0, _object.set)(this.args.columnConfig, 'higherIsBetter', info.metricDef.metricType !== 'Timing' && info.metricDef.metricType !== 'Metered');\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"deleteColumn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteColumn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricUpdated\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureGlanceMetricComponent);\n});","define(\"@testable/shared-ui/components/configure-glance\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _trackedBuiltIns, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"configureGlanceModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Configure Summary Metrics</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on 'submit' this.configure }} id=\"configureGlanceForm\"\n                                                       class=\"form-horizontal\"\n                                                       data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>Visibility</label>\n                  <div>\n                    <BsButtonGroup @value={{this.currentConfig.visibility}} @type=\"radio\" @onChange={{fn (mut this.currentConfig.visibility)}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"always\" @size=\"sm\">Always</bg.button>\n                      <bg.button @type=\"success\" @value=\"thisRun\" @size=\"sm\">\n                        This Test Run Report Only</bg.button>\n                      <bg.button @type=\"success\" @value=\"history\" @size=\"sm\">\n                        Comparison vs History Report Only</bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label class=\"normal\">\n                    <Input @type=\"checkbox\" @checked={{this.currentConfig.showUserMetrics}} /> Automatically add all\n                    <a target=\"_blank\" href=\"https://docs.testable.io/scripts/custom-metrics.html\" rel=\"noreferrer noopener\">custom\n                    timing and counter metrics</a>\n                  </label>\n                </div>\n                <div class=\"form-group\">\n                  <label>Metrics</label>\n                  <div>\n                    <button {{on 'click' this.addRow}} type=\"button\" class=\"btn btn-xs btn-primary\"><Ui::Icon @icon=\"fa fa-plus\" />\n                    </button>\n                    <br/>\n                    Click and drag to reorder metrics\n                    <div class=\"row config-row m-t-10\">\n                      <div class=\"col-md-12\">\n                        {{#each this.columnIds as |columnId|}}\n                          <ConfigureGlanceMetric @columnId={{columnId}}\n                                                 @columnConfig={{prop-lookup this.configByColumnId columnId}}\n                                                 @percentiles={{@percentiles}}\n                                                 @summary={{@summary}}\n                                                 @scriptType={{@scriptType}}\n                                                 @isLoad={{@isLoad}}\n                                                 @metricDefs={{@metricDefs}} />\n                        {{/each}}\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>Update Summary</strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"configureGlanceModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Configure Summary Metrics\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"configureGlanceForm\\\"],[24,0,\\\"form-horizontal\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"configure\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Visibility\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]],\\\"radio\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"currentConfig\\\",\\\"visibility\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"always\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Always\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"thisRun\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      This Test Run Report Only\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"history\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Comparison vs History Report Only\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[1]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"currentConfig\\\",\\\"showUserMetrics\\\"]]]],null],[1,\\\" Automatically add all\\\\n                  \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/scripts/custom-metrics.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"custom\\\\n                  timing and counter metrics\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Metrics\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"addRow\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  Click and drag to reorder metrics\\\\n                  \\\"],[10,0],[14,0,\\\"row config-row m-t-10\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,15],[[28,[37,15],[[30,0,[\\\"columnIds\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[8,[39,16],null,[[\\\"@columnId\\\",\\\"@columnConfig\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@metricDefs\\\"],[[30,2],[28,[37,17],[[30,0,[\\\"configByColumnId\\\"]],[30,2]],null],[30,3],[30,4],[30,5],[30,6],[30,7]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Update Summary\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"columnId\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@metricDefs\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"input\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"br\\\",\\\"each\\\",\\\"-track-array\\\",\\\"configure-glance-metric\\\",\\\"prop-lookup\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/configure-glance.hbs\",\n    \"isStrictMode\": false\n  });\n  let ConfigureGlanceComponent = _exports.default = (_class = class ConfigureGlanceComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"currentConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"configByColumnId\", _descriptor2, this);\n      _initializerDefineProperty(this, \"columnIds\", _descriptor3, this);\n      _initializerDefineProperty(this, \"counter\", _descriptor4, this);\n      const config = this.args.config ? _.cloneDeep(this.args.config) : {};\n      this.currentConfig = config;\n      const configByColumnId = {};\n      const columnIds = [];\n      let counter = 0;\n      _.forEach(config?.metrics, function (column) {\n        let columnId = counter++;\n        configByColumnId[columnId] = column;\n        columnIds.push(columnId);\n      });\n      if (!config.visibility) {\n        config.visibility = 'thisRun';\n      }\n      this.configByColumnId = configByColumnId;\n      this.columnIds = new _trackedBuiltIns.TrackedArray(columnIds);\n      this.counter = counter;\n    }\n    didInsert() {\n      const _this = this;\n      $('#configureGlanceModal').on('shown.bs.modal', function () {\n        _lib.default.makeColumnsDraggable('#configureGlanceModal');\n      });\n      $('#configureGlanceModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#configureGlanceModal').modal('show');\n      $('#configureGlanceForm').parsley();\n    }\n    configure(e) {\n      e.preventDefault();\n      if (!$('#configureGlanceForm').parsley().validate()) {\n        return;\n      }\n      const configByColumnId = this.configByColumnId;\n      const newMetrics = [];\n      const newConfig = {\n        visibility: this.currentConfig.visibility,\n        showUserMetrics: this.currentConfig.showUserMetrics,\n        metrics: newMetrics\n      };\n      $('[data-column-id]').each(function () {\n        const columnId = $(this).attr('data-column-id');\n        const column = configByColumnId[Number(columnId)];\n        newMetrics.push(column);\n      });\n      this.args.configChanged(newConfig);\n      $('#configureGlanceModal').modal('hide');\n    }\n    addRow() {\n      const columnIds = this.columnIds;\n      const configByColumnId = this.configByColumnId;\n      let counter = this.counter;\n      const column = {\n        title: '',\n        namespace: '',\n        metric: '',\n        higherIsBetter: false,\n        isDefault: true,\n        amber: 10,\n        red: 25,\n        improved: 10\n      };\n      const columnId = counter++;\n      configByColumnId[columnId] = column;\n      columnIds.unshift(columnId);\n      this.counter = counter;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"configByColumnId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"columnIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"counter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configure\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configure\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addRow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addRow\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfigureGlanceComponent);\n});","define(\"@testable/shared-ui/components/confirm-email-base\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@ember/service\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\"], function (_exports, _component, _object, _runloop, _service, _login, _lib, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ConfirmEmailBaseComponent = _exports.default = (_class = class ConfirmEmailBaseComponent extends _component.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    get isMonitoring() {\n      return _environment.config.isMonitoring;\n    }\n    async resendCode() {\n      try {\n        await _login.default.resendCode(this.args.email);\n        _lib.default.info('Confirmation email sent. Please confirm your email and try logging in again');\n        (0, _runloop.later)(this, () => {\n          this.router.transitionTo('login');\n        }, 5000);\n      } catch (e) {\n        _lib.default.error('Something went wrong');\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"resendCode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resendCode\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/components/confirm-email-pending\", [\"exports\", \"@ember/component\", \"@testable/shared-ui/components/confirm-email-base\", \"@ember/template-factory\"], function (_exports, _component, _confirmEmailBase, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/components/confirm-email-base\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if this.isMonitoring 'login-page' 'page-without-sidebar landing-page'}}\">\n    <div class=\"{{unless this.isMonitoring 'login login-v2'}}\">\n      <div class=\"login-content\">\n        <h4 class=\"{{if this.isMonitoring '' 'text-white'}}\">Please Confirm Your Email</h4>\n        <p>\n          You need to confirm your email address before you can login to {{this.appName}}.\n          If you did not receive the email with the confirmation link, make sure to check your spam folder.\n        </p>\n        <p>\n          If you still cannot find it,\n          <a href=\"javascript:\" {{on \"click\" this.resendCode}}>click here</a>\n          to have a new one sent to you.\n        </p>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,0,[\\\"isMonitoring\\\"]],\\\"login-page\\\",\\\"page-without-sidebar landing-page\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[51,[30,0,[\\\"isMonitoring\\\"]]],\\\"login login-v2\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"login-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[15,0,[29,[[52,[30,0,[\\\"isMonitoring\\\"]],\\\"\\\",\\\"text-white\\\"]]]],[12],[1,\\\"Please Confirm Your Email\\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        You need to confirm your email address before you can login to \\\"],[1,[30,0,[\\\"appName\\\"]]],[1,\\\".\\\\n        If you did not receive the email with the confirmation link, make sure to check your spam folder.\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        If you still cannot find it,\\\\n        \\\"],[11,3],[24,6,\\\"javascript:\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"resendCode\\\"]]],null],[12],[1,\\\"click here\\\"],[13],[1,\\\"\\\\n        to have a new one sent to you.\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"if\\\",\\\"unless\\\",\\\"h4\\\",\\\"p\\\",\\\"a\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/confirm-email-pending.hbs\",\n    \"isStrictMode\": false\n  });\n  class ConfirmEmailPendingComponent extends _confirmEmailBase.default {\n    get appName() {\n      return this.isMonitoring ? 'Testable Monitoring' : 'Testable';\n    }\n  }\n  _exports.default = ConfirmEmailPendingComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfirmEmailPendingComponent);\n});","define(\"@testable/shared-ui/components/confirm-email-result\", [\"exports\", \"@ember/component\", \"@testable/shared-ui/components/confirm-email-base\", \"@ember/template-factory\"], function (_exports, _component, _confirmEmailBase, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/components/confirm-email-base\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if this.isMonitoring 'login-page' 'page-without-sidebar landing-page'}}\">\n    <div class=\"{{if this.isMonitoring 'login login-v2' 'content'}}\">\n      <div class=\"{{if this.isMonitoring 'login-content text-center' ''}}\">\n        {{#if @model.success}}\n          <h4>Email address confirmed successfully. Try logging in!</h4>\n        {{else if @model.alreadyConfirmed}}\n          <h4>Email already confirmed. Try logging in!</h4>\n        {{else}}\n          <h4>Error confirming email address.</h4>\n          <p>\n            <a href=\"javascript:\" {{on \"click\" this.resendCode}}>Click here</a>\n            to have a new confirmation link emailed to you.\n          </p>\n        {{/if}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,0,[\\\"isMonitoring\\\"]],\\\"login-page\\\",\\\"page-without-sidebar landing-page\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,0,[\\\"isMonitoring\\\"]],\\\"login login-v2\\\",\\\"content\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[[52,[30,0,[\\\"isMonitoring\\\"]],\\\"login-content text-center\\\",\\\"\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"success\\\"]],[[[1,\\\"        \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Email address confirmed successfully. Try logging in!\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"alreadyConfirmed\\\"]],[[[1,\\\"        \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Email already confirmed. Try logging in!\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Error confirming email address.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          \\\"],[11,3],[24,6,\\\"javascript:\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"resendCode\\\"]]],null],[12],[1,\\\"Click here\\\"],[13],[1,\\\"\\\\n          to have a new confirmation link emailed to you.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@model\\\"],[\\\"div\\\",\\\"if\\\",\\\"h4\\\",\\\"p\\\",\\\"a\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/confirm-email-result.hbs\",\n    \"isStrictMode\": false\n  });\n  class ConfirmEmailResultComponent extends _confirmEmailBase.default {}\n  _exports.default = ConfirmEmailResultComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ConfirmEmailResultComponent);\n});","define(\"@testable/shared-ui/components/create-org-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal\n          @onSubmit={{this.createOrganization}}\n          @onHidden={{@modalClosed}}\n          as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">{{this.submitText}} Organization</h4>\n    </Modal.header>\n    <Modal.body>\n      <div class=\"panel\" {{did-insert this.initializeForm}}>\n        <div class=\"panel-body\">\n          <form id=\"createOrgForm\" {{on 'submit' this.createOrganization }} data-parsley-trigger=\"focusout\">\n            <fieldset disabled={{this.submitInProgress}}>\n              <div class=\"form-group\">\n                <label for=\"orgName\">Name <Ui::InfoIcon @content=\"Name for this organization, must be unique.\" /></label>\n                <input type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" placeholder=\"Name\" id=\"orgName\"\n                  value=\"{{@org.name}}\" data-parsley-required=\"true\" data-parsley-minlength=\"1\"\n                  data-parsley-maxlength=\"255\" data-parsley-required-message=\"Name is required.\"\n                  data-parsley-minlength-message=\"Name must be at least 1 character.\"\n                  data-parsley-maxlength-message=\"Name cannot be longer than 255 characters.\" />\n              </div>\n              <div class=\"form-group\">\n                <label for=\"orgEmail\">Email <Ui::InfoIcon @content=\"Email to contact the owner of this organization.\" /></label>\n                <input type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" id=\"orgEmail\"\n                  placeholder=\"Email Address\" value=\"{{@org.email}}\" data-parsley-type=\"email\" data-parsley-required=\"true\"\n                  data-parsley-required-message=\"Email address is required.\" />\n              </div>\n              {{#unless @org}}\n                <div class=\"form-group\">\n                  <label>\n                    {{#if this.envConfig.isOnPrem}}\n                      Link For Limit Tracking <Ui::InfoIcon\n                          @content=\"Link this organization to another for the purposes of sharing the same test runner limit.\" />\n                    {{else}}\n                      Link For Billing <Ui::InfoIcon\n                          @content=\"Link this organization to another for the purposes of billing. The new organization will share the plan, limits, monthly credits, etc.\" />\n                    {{/if}}\n                  </label>\n                  <Ui::PSelect @options={{this.orgs}} @selected={{this.primaryOrg}} @onChange={{this.updatePrimaryOrg}} as |org|>\n                    {{org.name}}\n                  </Ui::PSelect>\n                </div>\n                {{#if this.primaryOrg.awsCustomerId}}\n                  <div class=\"form-group\">\n                    <label>AWS Marketplace <Ui::InfoIcon\n                            @content=\"Whether or not to also connect this organization to the same AWS account that the link for billing organization is connected to.\" /></label>\n                    <div>\n                      <label class=\"normal\">\n                        <input type=\"checkbox\" checked={{this.shareAwsLink}} {{on \"change\" this.toggleAwsLink}} /> Connect the new organization to the same AWS account\n                        as the \"Link For Billing\" organization.\n                      </label>\n                    </div>\n                  </div>\n                {{/if}}\n              {{/unless}}\n            </fieldset>\n            <div class=\"form-group p-t-10\">\n              <button disabled={{this.submitInProgress}} type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>\n                  {{if this.submitInProgress 'Processing...' this.submitText}}\n                </strong></button>\n            </div>\n          </form>\n        </div>\n      </div>\n    </Modal.body>\n  </BsModal>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@onSubmit\\\",\\\"@onHidden\\\"],[[30,0,[\\\"createOrganization\\\"]],[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,0,[\\\"submitText\\\"]]],[1,\\\" Organization\\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"panel\\\"],[4,[38,3],[[30,0,[\\\"initializeForm\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"form\\\"],[24,1,\\\"createOrgForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"createOrganization\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"orgName\\\"],[12],[1,\\\"Name \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Name for this organization, must be unique.\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[14,\\\"minlength\\\",\\\"1\\\"],[14,\\\"maxlength\\\",\\\"255\\\"],[14,\\\"placeholder\\\",\\\"Name\\\"],[14,1,\\\"orgName\\\"],[15,2,[29,[[30,3,[\\\"name\\\"]]]]],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-minlength\\\",\\\"1\\\"],[14,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Name is required.\\\"],[14,\\\"data-parsley-minlength-message\\\",\\\"Name must be at least 1 character.\\\"],[14,\\\"data-parsley-maxlength-message\\\",\\\"Name cannot be longer than 255 characters.\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"orgEmail\\\"],[12],[1,\\\"Email \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Email to contact the owner of this organization.\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[14,\\\"minlength\\\",\\\"1\\\"],[14,\\\"maxlength\\\",\\\"255\\\"],[14,1,\\\"orgEmail\\\"],[14,\\\"placeholder\\\",\\\"Email Address\\\"],[15,2,[29,[[30,3,[\\\"email\\\"]]]]],[14,\\\"data-parsley-type\\\",\\\"email\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Email address is required.\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,3]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"envConfig\\\",\\\"isOnPrem\\\"]],[[[1,\\\"                    Link For Limit Tracking \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Link this organization to another for the purposes of sharing the same test runner limit.\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    Link For Billing \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Link this organization to another for the purposes of billing. The new organization will share the plan, limits, monthly credits, etc.\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,12],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"orgs\\\"]],[30,0,[\\\"primaryOrg\\\"]],[30,0,[\\\"updatePrimaryOrg\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\"\\\\n                \\\"]],[4]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"primaryOrg\\\",\\\"awsCustomerId\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"AWS Marketplace \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Whether or not to also connect this organization to the same AWS account that the link for billing organization is connected to.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,0,[\\\"shareAwsLink\\\"]]],[24,4,\\\"checkbox\\\"],[4,[38,5],[\\\"change\\\",[30,0,[\\\"toggleAwsLink\\\"]]],null],[12],[13],[1,\\\" Connect the new organization to the same AWS account\\\\n                      as the \\\\\\\"Link For Billing\\\\\\\" organization.\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group p-t-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[52,[30,0,[\\\"submitInProgress\\\"]],\\\"Processing...\\\",[30,0,[\\\"submitText\\\"]]]],[1,\\\"\\\\n              \\\"],[13],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]]],[\\\"@modalClosed\\\",\\\"Modal\\\",\\\"@org\\\",\\\"org\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"div\\\",\\\"did-insert\\\",\\\"form\\\",\\\"on\\\",\\\"fieldset\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"unless\\\",\\\"if\\\",\\\"ui/p-select\\\",\\\"button\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/create-org-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  const EmptyOrg = {\n    id: '',\n    name: 'None'\n  };\n  let CreateOrgModalComponent = _exports.default = (_class = class CreateOrgModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"shareAwsLink\", _descriptor2, this);\n      _initializerDefineProperty(this, \"submitInProgress\", _descriptor3, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor4, this);\n      _initializerDefineProperty(this, \"primaryOrg\", _descriptor5, this);\n      this.primaryOrg = EmptyOrg;\n    }\n    initializeForm(element) {\n      $('#createOrgForm').parsley();\n    }\n    updatePrimaryOrg(org) {\n      this.primaryOrg = org;\n    }\n    toggleAwsLink(event) {\n      this.shareAwsLink = event.target.checked;\n    }\n    get submitText() {\n      return this.args.org ? 'Update' : 'Create';\n    }\n    get orgs() {\n      const answer = [EmptyOrg];\n      _.forEach(_environment.config.currentUser.orgs, orgAssoc => {\n        if (!orgAssoc.organization.primaryOrgId) {\n          answer.push(orgAssoc.organization);\n        }\n      });\n      return answer;\n    }\n    createOrganization(e) {\n      e.preventDefault();\n      if (!$('#createOrgForm').parsley().validate()) return false;\n      let org = this.args.org;\n      this.submitInProgress = true;\n      if (org) {\n        _server.default.updateOrg(org.id, $('#orgName').val(), $('#orgEmail').val()).then(org => {\n          this.args.orgSaved(org);\n          this.submitInProgress = false;\n        }, () => {\n          this.submitInProgress = false;\n        });\n      } else {\n        _server.default.createOrg($('#orgName').val(), $('#orgEmail').val(), this.primaryOrg.id || '', this.args.isAdmin ? null : _environment.config.currentUser.id, this.shareAwsLink).then(org => {\n          this.args.orgSaved(org);\n          this.submitInProgress = false;\n        }, () => {\n          this.submitInProgress = false;\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"shareAwsLink\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"submitInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"primaryOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"initializeForm\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initializeForm\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePrimaryOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePrimaryOrg\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleAwsLink\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleAwsLink\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createOrganization\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createOrganization\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CreateOrgModalComponent);\n});","define(\"@testable/shared-ui/components/credit-card-form\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"lodash-es\", \"inputmask\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lodashEs, _inputmask, _environment, _server, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"lodash-es\",0,\"inputmask\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div {{did-insert this.didInsert}}>\n    {{#unless this.cardInternal.id}}\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\"></label>\n        <div class=\"col-md-8\">\n          <div class='card-wrapper'></div>\n        </div>\n      </div>\n    {{/unless}}\n  \n    {{#if this.cardInternal.id}}\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\"></label>\n        <div class=\"col-md-8\">\n          <div class=\"jp-card-container\">\n            <div class=\"jp-card  jp-card-{{this.cardType}} jp-card-identified\">\n              <div class=\"jp-card-front\">\n                <div class=\"jp-card-logo jp-card-elo\">\n                  <div class=\"e\">e</div>\n                  <div class=\"l\">l</div>\n                  <div class=\"o\">o</div>\n                </div>\n                <div class=\"jp-card-logo jp-card-visa\">Visa</div>\n                <div class=\"jp-card-logo jp-card-visaelectron\">Visa<div class=\"elec\">Electron</div></div>\n                <div class=\"jp-card-logo jp-card-mastercard\">Mastercard</div>\n                <div class=\"jp-card-logo jp-card-maestro\">Maestro</div>\n                <div class=\"jp-card-logo jp-card-amex\"></div>\n                <div class=\"jp-card-logo jp-card-discover\">discover</div>\n                <div class=\"jp-card-logo jp-card-unionpay\">UnionPay</div>\n                <div class=\"jp-card-logo jp-card-dinersclub\"></div>\n                <div class=\"jp-card-logo jp-card-hipercard\">Hipercard</div>\n                <div class=\"jp-card-logo jp-card-troy\">troy</div>\n                <div class=\"jp-card-logo jp-card-dankort\"><div class=\"dk\"><div class=\"d\"></div><div class=\"k\"></div></div></div>\n                <div class=\"jp-card-logo jp-card-jcb\">\n                  <div class=\"j\">J</div>\n                  <div class=\"c\">C</div>\n                  <div class=\"b\">B</div>\n                </div>\n                <div class=\"jp-card-lower\">\n                  <div class=\"jp-card-shiny\"></div>\n                  <div class=\"jp-card-cvc jp-card-display\">{{this.cvc}}</div>\n                  <div class=\"jp-card-number jp-card-display\">**** **** **** {{this.cardInternal.last4}}</div>\n                  <div class=\"jp-card-name jp-card-display\">{{this.cardInternal.name}}</div>\n                  <div class=\"jp-card-expiry jp-card-display\">{{this.cardInternal.expiry}}</div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    {{/if}}\n  \n    <form {{on \"submit\" this.addOrUpdate}} class=\"form-horizontal m-t-20\" id='cc-form'>\n      {{#unless this.cardInternal.id}}\n        <div class=\"row form-group\">\n          <label class=\"col-md-3 control-label\">Number *</label>\n          <div class=\"col-md-8\">\n            <Input @type=\"text\" class=\"form-control\" minlength=\"15\" maxlength=\"20\" id=\"numberField\"\n                   name='number' @value={{this.cardInternal.number}}\n                   placeholder=\"Credit Card Number\" required/>\n          </div>\n        </div>\n      {{/unless}}\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\">Name *</label>\n        <div class=\"col-md-8\">\n          <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" id=\"cardNameField\"\n                 name='name' @value={{this.cardInternal.name}}\n                 placeholder=\"Name\" required/>\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\">Expiry *</label>\n        <div class=\"col-md-3\">\n          <Input class=\"form-control\" @type=\"text\" name='expiry' @value={{this.cardInternal.expiry}}\n                 required id=\"expiryField\"\n                 placeholder='MM / YY' />\n        </div>\n        {{#unless this.cardInternal.id}}\n          <label class=\"col-md-2 control-label\">CVC *</label>\n          <div class=\"col-md-3\">\n            <Input @type=\"number\" class=\"form-control\" id=\"cvcField\" placeholder=\"CVC\" required\n                   name='cvc' @value={{this.cardInternal.cvc}}\n                   minLength=\"3\" maxLength=\"3\"/>\n          </div>\n        {{/unless}}\n      </div>\n  \n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\">Zip Code *</label>\n        <div class=\"col-md-3\">\n          <Input @type=\"text\" class=\"form-control\" minlength=\"5\" maxlength=\"9\" id=\"zipField\"\n                 placeholder=\"Zip Code\" @value={{this.cardInternal.address_zip}} required />\n        </div>\n        <label class=\"col-md-2 control-label\">Country *</label>\n        <div class=\"col-md-3\">\n          <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" id=\"countryField\"\n                 placeholder=\"Country\" @value={{this.cardInternal.address_country}} required />\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\"></label>\n        <div class=\"col-md-8\">\n          <label class=\"normal\">\n            <input id=\"makeCardDefaultField\" type=\"checkbox\"\n                   checked={{if (eq this.cardInternal.metadata.default 'false') false true}}> Make Default\n          </label>\n        </div>\n      </div>\n      <div class=\"row form-group\">\n        <label class=\"col-md-3 control-label\"></label>\n        <div class=\"col-md-4\">\n          <button type=\"submit\" disabled={{this.isSubmitted}} class=\"btn btn-sm btn-success\"><strong>\n            {{#if this.isSubmitted}}\n              Processing...\n            {{else}}\n              {{#if @submitMessage}}\n                {{@submitMessage}}\n              {{else}}\n                {{if this.cardInternal.id 'Update' 'Add'}}\n              {{/if}}\n            {{/if}}\n          </strong></button>\n        </div>\n      </div>\n    </form>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"cardInternal\\\",\\\"id\\\"]]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"card-wrapper\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"cardInternal\\\",\\\"id\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"jp-card-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"jp-card  jp-card-\\\",[30,0,[\\\"cardType\\\"]],\\\" jp-card-identified\\\"]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"jp-card-front\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-elo\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"e\\\"],[12],[1,\\\"e\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"l\\\"],[12],[1,\\\"l\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"o\\\"],[12],[1,\\\"o\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-visa\\\"],[12],[1,\\\"Visa\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-visaelectron\\\"],[12],[1,\\\"Visa\\\"],[10,0],[14,0,\\\"elec\\\"],[12],[1,\\\"Electron\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-mastercard\\\"],[12],[1,\\\"Mastercard\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-maestro\\\"],[12],[1,\\\"Maestro\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-amex\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-discover\\\"],[12],[1,\\\"discover\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-unionpay\\\"],[12],[1,\\\"UnionPay\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-dinersclub\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-hipercard\\\"],[12],[1,\\\"Hipercard\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-troy\\\"],[12],[1,\\\"troy\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-dankort\\\"],[12],[10,0],[14,0,\\\"dk\\\"],[12],[10,0],[14,0,\\\"d\\\"],[12],[13],[10,0],[14,0,\\\"k\\\"],[12],[13],[13],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-logo jp-card-jcb\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"j\\\"],[12],[1,\\\"J\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"c\\\"],[12],[1,\\\"C\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"b\\\"],[12],[1,\\\"B\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"jp-card-lower\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"jp-card-shiny\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"jp-card-cvc jp-card-display\\\"],[12],[1,[30,0,[\\\"cvc\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"jp-card-number jp-card-display\\\"],[12],[1,\\\"**** **** **** \\\"],[1,[30,0,[\\\"cardInternal\\\",\\\"last4\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"jp-card-name jp-card-display\\\"],[12],[1,[30,0,[\\\"cardInternal\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"jp-card-expiry jp-card-display\\\"],[12],[1,[30,0,[\\\"cardInternal\\\",\\\"expiry\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal m-t-20\\\"],[24,1,\\\"cc-form\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"addOrUpdate\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"cardInternal\\\",\\\"id\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[1,\\\"Number *\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"15\\\"],[24,\\\"maxlength\\\",\\\"20\\\"],[24,1,\\\"numberField\\\"],[24,3,\\\"number\\\"],[24,\\\"placeholder\\\",\\\"Credit Card Number\\\"],[24,\\\"required\\\",\\\"\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cardInternal\\\",\\\"number\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[1,\\\"Name *\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,1,\\\"cardNameField\\\"],[24,3,\\\"name\\\"],[24,\\\"placeholder\\\",\\\"Name\\\"],[24,\\\"required\\\",\\\"\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cardInternal\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[1,\\\"Expiry *\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-3\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,3,\\\"expiry\\\"],[24,\\\"required\\\",\\\"\\\"],[24,1,\\\"expiryField\\\"],[24,\\\"placeholder\\\",\\\"MM / YY\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cardInternal\\\",\\\"expiry\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"cardInternal\\\",\\\"id\\\"]]],[[[1,\\\"        \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"CVC *\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-3\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,1,\\\"cvcField\\\"],[24,\\\"placeholder\\\",\\\"CVC\\\"],[24,\\\"required\\\",\\\"\\\"],[24,3,\\\"cvc\\\"],[24,\\\"minLength\\\",\\\"3\\\"],[24,\\\"maxLength\\\",\\\"3\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"cardInternal\\\",\\\"cvc\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[1,\\\"Zip Code *\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-3\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"5\\\"],[24,\\\"maxlength\\\",\\\"9\\\"],[24,1,\\\"zipField\\\"],[24,\\\"placeholder\\\",\\\"Zip Code\\\"],[24,\\\"required\\\",\\\"\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cardInternal\\\",\\\"address_zip\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-2 control-label\\\"],[12],[1,\\\"Country *\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-3\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,1,\\\"countryField\\\"],[24,\\\"placeholder\\\",\\\"Country\\\"],[24,\\\"required\\\",\\\"\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cardInternal\\\",\\\"address_country\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,1,\\\"makeCardDefaultField\\\"],[15,\\\"checked\\\",[52,[28,[37,8],[[30,0,[\\\"cardInternal\\\",\\\"metadata\\\",\\\"default\\\"]],\\\"false\\\"],null],false,true]],[14,4,\\\"checkbox\\\"],[12],[13],[1,\\\" Make Default\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"col-md-3 control-label\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSubmitted\\\"]]],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSubmitted\\\"]],[[[1,\\\"            Processing...\\\\n\\\"]],[]],[[[41,[30,1],[[[1,\\\"              \\\"],[1,[30,1]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[1,[52,[30,0,[\\\"cardInternal\\\",\\\"id\\\"]],\\\"Update\\\",\\\"Add\\\"]],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@submitMessage\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"unless\\\",\\\"label\\\",\\\"if\\\",\\\"form\\\",\\\"on\\\",\\\"input\\\",\\\"eq\\\",\\\"button\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/credit-card-form.hbs\",\n    \"isStrictMode\": false\n  });\n  let CreditCardFormComponent = _exports.default = (_class = class CreditCardFormComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"isSubmitted\", _descriptor, this);\n      _initializerDefineProperty(this, \"cardInternal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"cardType\", _descriptor3, this);\n      let card = this.args.card;\n      if (_lodashEs.default.isEmpty(card)) {\n        this.cardInternal = {};\n      } else {\n        this.cardInternal = {\n          ...card\n        };\n      }\n    }\n    addOrUpdate(e) {\n      e.preventDefault();\n      let params = {};\n      let expMonty = Number(this.cardInternal.expiry.split('/')[0]);\n      let expYear = Number(this.cardInternal.expiry.split('/')[1]);\n\n      // check if expYear is 2 digits add 20 before that\n      if (expYear < 100) {\n        expYear = expYear + 2000;\n      }\n      params.number = this.cardInternal.number;\n      params.cvc = this.cardInternal.cvc;\n      params.name = this.cardInternal.name;\n      params.expMonth = expMonty;\n      params.expYear = expYear;\n      params.addressZip = this.cardInternal.address_zip;\n      params.addressCountry = this.cardInternal.address_country;\n      params.makeDefault = $('#makeCardDefaultField').is(':checked');\n      let card = this.cardInternal;\n      this.isSubmitted = true;\n      if (_lodashEs.default.isEmpty(card) || !card.id) {\n        let makeDefault = params.makeDefault;\n        delete params.makeDefault;\n        Stripe.card.createToken(params, (status, response) => {\n          if (response.error) {\n            _lib.default.error(response.error.message);\n            this.isSubmitted = false;\n            if (typeof this.args.cardError === 'function') {\n              this.args.cardError(response.error.message);\n            }\n          } else {\n            let token = response.id;\n            _server.default.createCard(this.args.orgId || _environment.config.currentUser.orgId, token, makeDefault).then(results => {\n              this.isSubmitted = false;\n              if (_lodashEs.default.isFunction(this.args.cardCreated)) this.args.cardCreated(results);\n            }, (jqxhr, status, errMsg) => {\n              this.isSubmitted = false;\n              if (_lodashEs.default.isFunction(this.args.cardError)) this.args.cardError(_lib.default.messageFromFail(jqxhr, status, errMsg));\n            });\n          }\n        });\n      } else {\n        _server.default.updateCard(_environment.config.currentUser.orgId, card.id, params).then(results => {\n          this.isSubmitted = false;\n          this.args.cardUpdated(results);\n        }, (jqxhr, status, errMsg) => {\n          this.isSubmitted = false;\n          this.args.cardError(_lib.default.messageFromFail(jqxhr, status, errMsg));\n        });\n      }\n    }\n    didInsert() {\n      if (_lodashEs.default.isEmpty(this.cardInternal) || !this.cardInternal.id) {\n        let card = new Card({\n          form: document.getElementById('cc-form'),\n          container: '.card-wrapper',\n          placeholders: {\n            number: '**** **** **** ****',\n            name: 'Your Name',\n            expiry: 'Expiry',\n            cvc: '***'\n          }\n        });\n      } else {\n        let expMonty = Number(this.cardInternal.exp_month);\n        let expYear = Number(this.cardInternal.exp_year);\n        if (expMonty < 10) {\n          expMonty = '0' + expMonty;\n        }\n        this.cardInternal.expiry = expMonty + ' / ' + expYear;\n        this.cardType = this.cardInternal.brand.toLowerCase();\n        new _inputmask.default(\"99 / 9999\").mask(document.getElementById('expiryField'));\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSubmitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"cardInternal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"cardType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"addOrUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addOrUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CreditCardFormComponent);\n});","define(\"@testable/shared-ui/components/csv-grid\", [\"exports\", \"@testable/shared-ui/components/data-grid\", \"@ember/object/observers\"], function (_exports, _dataGrid, _observers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/components/data-grid\",0,\"@ember/object/observers\"eaimeta@70e063a35619d71f\n  class CsvGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.dataUpdates);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.dataUpdates);\n    }\n    dataUpdates() {\n      this.refreshTable();\n    }\n    getColumns() {\n      let model = this.args.data;\n      if (model !== null) {\n        return _.map(model.meta.fields, field => {\n          return {\n            title: field,\n            data: field,\n            width: '70px'\n          };\n        });\n      } else {\n        return [];\n      }\n    }\n    createDataSource() {\n      let model = this.args.data;\n      if (model !== null) {\n        let id = 0;\n        _.forEach(model.data, data => {\n          data.id = id++;\n        });\n        return model.data;\n      }\n      return [];\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No rows found in CSV.\"\n      };\n      options.dom = 'Zt';\n      options.paging = false;\n      options.pageLength = 10;\n    }\n  }\n  _exports.default = CsvGrid;\n});","define(\"@testable/shared-ui/components/csv-preview-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@modalClosed}}\n    @title=\"Review {{this.fileName}}\"\n    @size=\"md\"\n  >\n    <div class=\"form-horizontal\">\n      {{#if this.hasCsvParseErrors}}\n        <div class=\"panel panel-danger\">\n          <div class=\"panel-heading\">\n            <strong>Parse Errors</strong>\n          </div>\n          <div class=\"panel-body\">\n            <p>Your file contained the following errors. Not all errors are fatal. Take a look at the preview\n              below to decide whether the file needs fixing.</p>\n            <ul>\n              {{#each this.csvParseErrors as |error|}}\n                <li>{{error}}</li>\n              {{/each}}\n            </ul>\n          </div>\n        </div>\n      {{/if}}\n      <div class=\"panel\">\n        <div class=\"panel-heading\">\n          <strong class=\"text-dark\">{{this.previewHeading}}</strong>\n        </div>\n        <div class=\"panel-body\">\n          {{#if this.isEmpty}}\n            <div class=\"text-muted\">This file has no content to preview.</div>\n          {{else if this.hasCsvPreview}}\n            <div class=\"overflow-auto\">\n              <CsvGrid @id=\"csvPreviewGrid\" @data={{this.csvPreview}} />\n            </div>\n          {{else}}\n            Loading Preview...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],[29,[\\\"Review \\\",[30,0,[\\\"fileName\\\"]]]],\\\"md\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-horizontal\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasCsvParseErrors\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel panel-danger\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Parse Errors\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n          \\\"],[10,2],[12],[1,\\\"Your file contained the following errors. Not all errors are fatal. Take a look at the preview\\\\n            below to decide whether the file needs fixing.\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"csvParseErrors\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[14,0,\\\"text-dark\\\"],[12],[1,[30,0,[\\\"previewHeading\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEmpty\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"This file has no content to preview.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"hasCsvPreview\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],null,[[\\\"@id\\\",\\\"@data\\\"],[\\\"csvPreviewGrid\\\",[30,0,[\\\"csvPreview\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          Loading Preview...\\\\n        \\\"]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"error\\\"],[\\\"ui/modal-wrapper\\\",\\\"div\\\",\\\"if\\\",\\\"strong\\\",\\\"p\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"csv-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/csv-preview-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let CsvPreviewModalComponent = _exports.default = (_class = class CsvPreviewModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"hasCsvPreview\", _descriptor2, this);\n      _initializerDefineProperty(this, \"csvPreview\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isEmpty\", _descriptor4, this);\n      _defineProperty(this, \"PreviewSize\", 10);\n      (0, _runloop.next)(this, this.loadAndParse);\n    }\n    get fileName() {\n      return this.args.file?.name || '';\n    }\n    get previewHeading() {\n      const rows = this.csvPreview?.data?.length || 0;\n      return rows < this.PreviewSize ? `${rows} ${_lib.default.pluralCheck('Row', rows)}` : `First ${this.PreviewSize} Rows`;\n    }\n    get csvParseErrors() {\n      let preview = this.csvPreview;\n      if (!_.isObject(preview)) return [];\n      return _.map(preview.errors, error => {\n        let msg = _.isNumber(error.row) ? 'Row ' + (error.row + 1) : 'Overall';\n        if (_.isNumber(error.index)) {\n          msg += ', Index: ' + error.index;\n        }\n        msg += ' [' + error.type + ' - ' + error.code + '] ' + error.message;\n        return msg;\n      });\n    }\n    get hasCsvParseErrors() {\n      return this.csvParseErrors.length > 0;\n    }\n    async loadAndParse() {\n      const file = this.args.file;\n      if (!file) return;\n      let fileContent = this.args.loadedFiles?.find(lf => lf.id === file.id)?.code;\n      if (!fileContent) {\n        try {\n          fileContent = await this.api.dataStores.download(file);\n        } catch (error) {\n          if (this.isDestroyed || this.isDestroying) return;\n          _lib.default.error(error.statusText, 'Failed to load file for preview');\n          this.isEmpty = true;\n          this.hasCsvPreview = true;\n          return;\n        }\n      }\n      if (this.isDestroyed || this.isDestroying) return;\n      if (_.isEmpty(_.trim(fileContent))) {\n        this.isEmpty = true;\n        this.hasCsvPreview = true;\n        return;\n      }\n      Papa.parse(fileContent, {\n        preview: this.PreviewSize,\n        header: true,\n        skipEmptyLines: true,\n        complete: results => {\n          if (this.isDestroyed || this.isDestroying) return;\n          this.csvPreview = results;\n          this.hasCsvPreview = true;\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"hasCsvPreview\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"csvPreview\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isEmpty\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CsvPreviewModalComponent);\n});","define(\"@testable/shared-ui/components/custom-metrics-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\" role=\"tab\" id=\"headingCustomMetrics\">\n      <h4 class=\"panel-title\">\n        <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\" data-bs-parent={{@parentElement}} href=\"#customMetrics\" aria-expanded=\"true\" aria-controls=\"customMetrics\">\n          <Ui::Icon @icon=\"fa fa-minus\" />\n        </a>\n        <strong>Custom Metrics ({{@customMetrics.length}})</strong>\n      </h4>\n    </div>\n    <div id=\"customMetrics\" class=\"panel-collapse collapse show\" role=\"tabpanel\" aria-labelledby=\"headingCustomMetrics\">\n      <div class=\"panel-body\">\n        {{#each this.customMetricRows as |metricRow|}}\n          <div class=\"row\">\n            {{#each metricRow as |metricInfo|}}\n              <div class=\"col-md-4 col-sm-6\">\n                <div class=\"widget widget-stats bg-black-lighter\">\n                  <div class=\"stats-title\">{{uppercase (or metricInfo.metric.metricDef metricInfo.metric.name)}} <span\n                          class=\"label {{metric-label-class\n                                  metricInfo.metric.metricType}} metric-type m-l-10\">{{metricInfo.metric.metricType}}</span>\n                  </div>\n                  <div class=\"stats-number\">\n                    {{#if (is-empty metricInfo.metric.metricKey)}}\n                      {{print-val metricInfo.metric.metricValue metricInfo.metric.metricUnits }}\n                    {{else}}\n                      {{html-safe (truncate-string metricInfo.metric.metricKey)}} <span class=\"m-l-10\"> {{if\n                            (eq metricInfo.metric.metricType 'Histogram') '+' '= '}}{{print-val\n                            metricInfo.metric.metricValue metricInfo.metric.metricUnits }}</span>\n                    {{/if}}\n                  </div>\n                  <div class=\"stats-desc\">\n                    {{html-safe (truncate-string (concat 'RESOURCE: ' (or metricInfo.result.resource '[None]')))}}\n                  </div>\n                </div>\n              </div>\n            {{/each}}\n          </div>\n        {{/each}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingCustomMetrics\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-parent\\\",[30,1]],[14,6,\\\"#customMetrics\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"customMetrics\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Custom Metrics (\\\"],[1,[30,2,[\\\"length\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"customMetrics\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingCustomMetrics\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"customMetricRows\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,3]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-6\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget widget-stats bg-black-lighter\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-title\\\"],[12],[1,[28,[35,7],[[28,[37,8],[[30,4,[\\\"metric\\\",\\\"metricDef\\\"]],[30,4,[\\\"metric\\\",\\\"name\\\"]]],null]],null]],[1,\\\" \\\"],[10,1],[15,0,[29,[\\\"label \\\",[28,[37,10],[[30,4,[\\\"metric\\\",\\\"metricType\\\"]]],null],\\\" metric-type m-l-10\\\"]]],[12],[1,[30,4,[\\\"metric\\\",\\\"metricType\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-number\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,4,[\\\"metric\\\",\\\"metricKey\\\"]]],null],[[[1,\\\"                    \\\"],[1,[28,[35,13],[[30,4,[\\\"metric\\\",\\\"metricValue\\\"]],[30,4,[\\\"metric\\\",\\\"metricUnits\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[1,[28,[35,14],[[28,[37,15],[[30,4,[\\\"metric\\\",\\\"metricKey\\\"]]],null]],null]],[1,\\\" \\\"],[10,1],[14,0,\\\"m-l-10\\\"],[12],[1,\\\" \\\"],[1,[52,[28,[37,16],[[30,4,[\\\"metric\\\",\\\"metricType\\\"]],\\\"Histogram\\\"],null],\\\"+\\\",\\\"= \\\"]],[1,[28,[35,13],[[30,4,[\\\"metric\\\",\\\"metricValue\\\"]],[30,4,[\\\"metric\\\",\\\"metricUnits\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-desc\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,14],[[28,[37,15],[[28,[37,17],[\\\"RESOURCE: \\\",[28,[37,8],[[30,4,[\\\"result\\\",\\\"resource\\\"]],\\\"[None]\\\"],null]],null]],null]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@parentElement\\\",\\\"@customMetrics\\\",\\\"metricRow\\\",\\\"metricInfo\\\"],[\\\"div\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"each\\\",\\\"-track-array\\\",\\\"uppercase\\\",\\\"or\\\",\\\"span\\\",\\\"metric-label-class\\\",\\\"if\\\",\\\"is-empty\\\",\\\"print-val\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"eq\\\",\\\"concat\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/custom-metrics-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  class CustomMetricsPanelComponent extends _component2.default {\n    get customMetricRows() {\n      return _lib.default.group(this.args.customMetrics, 3);\n    }\n  }\n  _exports.default = CustomMetricsPanelComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CustomMetricsPanelComponent);\n});","define(\"@testable/shared-ui/components/dashboard-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"dashboardModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n       {{did-insert this.didInsert}}\n  >\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{@modalTitle}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.save}}>\n                <div class=\"form-group\">\n                  <label>View Name</label>\n                  <div>\n                    <input id=\"dashboardModalName\" class=\"form-control\" type=\"text\" placeholder=\"View Name\" minlength=\"1\" maxlength=\"255\" value=\"{{this.name}}\" required>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>View Description</label>\n                  <div>\n                    <input id=\"dashboardModalDescription\" class=\"form-control\" type=\"text\" placeholder=\"View Description\" minlength=\"0\" maxlength=\"2048\" value=\"{{this.description}}\">\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>Make default for <Ui::InfoIcon\n                          @content=\"If specified, the default view for this test configuration has highest priority followed by test case and organization. If no default view is specified at any of those levels, the system default view is used.\" /></label>\n                  <Ui::PSelectMultiple @options={{this.options}} @selected={{this.selectedVal}} @onChange={{fn (mut this.selected)}} as |option|>\n                    {{option.name}}\n                  </Ui::PSelectMultiple>\n                </div>\n                {{#if this.currentUser.isAdmin}}\n                  <div class=\"form-group\">\n                    <label>Make Public <Ui::InfoIcon\n                            @content=\"If checked this view will be available across all organizations, otherwise only to users with access to the current organization.\" /></label>\n                    <div>\n                      <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.isPublic}} class=\"m-r-10\" /> Make view available across all\n                      organizations\n                      </label>\n                    </div>\n                  </div>\n                {{/if}}\n                <div class=\"form-group\">\n                  <button type=\"submit\" class=\"btn btn-primary\">Save</button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"dashboardModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,1]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"View Name\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"input\\\"],[14,1,\\\"dashboardModalName\\\"],[14,0,\\\"form-control\\\"],[14,\\\"placeholder\\\",\\\"View Name\\\"],[14,\\\"minlength\\\",\\\"1\\\"],[14,\\\"maxlength\\\",\\\"255\\\"],[15,2,[29,[[30,0,[\\\"name\\\"]]]]],[14,\\\"required\\\",\\\"\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"View Description\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"input\\\"],[14,1,\\\"dashboardModalDescription\\\"],[14,0,\\\"form-control\\\"],[14,\\\"placeholder\\\",\\\"View Description\\\"],[14,\\\"minlength\\\",\\\"0\\\"],[14,\\\"maxlength\\\",\\\"2048\\\"],[15,2,[29,[[30,0,[\\\"description\\\"]]]]],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Make default for \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"If specified, the default view for this test configuration has highest priority followed by test case and organization. If no default view is specified at any of those levels, the system default view is used.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"options\\\"]],[30,0,[\\\"selectedVal\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selected\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n                \\\"]],[2]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isAdmin\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Make Public \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"If checked this view will be available across all organizations, otherwise only to users with access to the current organization.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,7],[[24,0,\\\"m-r-10\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"isPublic\\\"]]]],null],[1,\\\" Make view available across all\\\\n                    organizations\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Save\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@modalTitle\\\",\\\"option\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"ui/info-icon\\\",\\\"ui/p-select-multiple\\\",\\\"fn\\\",\\\"mut\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/dashboard-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  const TestConfOption = {\n    id: 'testConf',\n    name: 'Test Configuration'\n  };\n  const TestCaseOption = {\n    id: 'testCase',\n    name: 'Test Case'\n  };\n  const OrgOption = {\n    id: 'acct',\n    name: 'Organization'\n  };\n  let DashboardModalComponent = _exports.default = (_class = class DashboardModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"options\", [TestConfOption, TestCaseOption, OrgOption]);\n      _initializerDefineProperty(this, \"selected\", _descriptor, this);\n      _initializerDefineProperty(this, \"isPublic\", _descriptor2, this);\n    }\n    didInsert() {\n      const _this = this;\n      $('#dashboardModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#dashboardModal').modal('show');\n      $('#dashboardModal').on('shown.bs.modal', function () {\n        $('#dashboardModalName').focus();\n      });\n    }\n    get selectedVal() {\n      if (this.selected) {\n        return this.selected;\n      }\n      let selected = [];\n      if (this.args.isTestConfDefault) {\n        selected.push(TestConfOption);\n      }\n      if (this.args.isTestCaseDefault) {\n        selected.push(TestCaseOption);\n      }\n      if (this.args.isOrgDefault) {\n        selected.push(OrgOption);\n      }\n      return selected;\n    }\n    save(e) {\n      e.preventDefault();\n      const name = $('#dashboardModalName').val();\n      const description = $('#dashboardModalDescription').val();\n      $('#dashboardModal').modal('hide');\n      this.args.save(name, description, _.map(this.selected, option => {\n        return option.id;\n      }), this.isPublic);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isPublic\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DashboardModalComponent);\n});","define(\"@testable/shared-ui/components/dashboard-settings-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/utilization\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _utilization, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/utilization\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"dashboardSettingsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Edit View Settings</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form id=\"dashboardSettingsForm\" {{on \"submit\" this.save}} data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>View Name</label>\n                  <Input id=\"dashboardName\" class=\"form-control\" @type=\"text\" placeholder=\"View Name\" minlength=\"1\"\n                         maxlength=\"255\" @value={{this.name}} required={{true}} />\n                </div>\n                <div class=\"form-group\">\n                  <label>View Description</label>\n                  <Input class=\"form-control\" @type=\"text\" placeholder=\"View Description\" @value={{this.description}} />\n                </div>\n                <div class=\"form-group\">\n                  <label>Test Runner CPU/Memory Utilization (%) Warning Threshold <Ui::InfoIcon\n                          @content=\"If any single test runner utilizes a higher percentage of its available CPU or Memory for at lease 1 threshold period, provide a warning. High utilization rates indicate that more test runner instances are required to generate the specified number of concurrent users.\" /></label>\n                  <div class=\"input-group\">\n                    <Input class=\"form-control\" @type=\"number\" placeholder=\"Warning Threshold (0-100%)\"\n                           data-parsley-min=\"0\" data-parsley-min-message=\"Threshold must be between 0-100%\"\n                           data-parsley-max=\"100\" data-parsley-max-message=\"Threshold must be between 0-100%\"\n                           @value={{this.utilizationWarningThreshold}} />\n                    <span class=\"input-group-addon\">%</span>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>Test Runner Warning Threshold Interval <Ui::InfoIcon\n                          @content=\"Define how long the test runner CPU/memory must exceed the warning threshold before a warning is generated.\" /></label>\n                  <div>\n                    <BsButtonGroup @value={{this.numIntervalsMovingAverage}} @type=\"radio\"\n                                   @onChange={{fn (mut this.numIntervalsMovingAverage)}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"1\" @size=\"sm\">10s</bg.button>\n                      <bg.button @type=\"success\" @value=\"6\" @size=\"sm\">1m</bg.button>\n                      <bg.button @type=\"success\" @value=\"30\" @size=\"sm\">5m</bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>Time Display <Ui::InfoIcon\n                          @content=\"Whether charts should show time relative to the start time of the test or the absolute local time.\" /></label>\n                  <div>\n                    <BsButtonGroup @value={{this.showRelativeTime}} @type=\"radio\"\n                                   @onChange={{fn (mut this.showRelativeTime)}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"0\" @size=\"sm\">Absolute</bg.button>\n                      <bg.button @type=\"success\" @value=\"1\" @size=\"sm\">Relative</bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>Save</strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"dashboardSettingsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Edit View Settings\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"dashboardSettingsForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"View Name\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,7],[[24,1,\\\"dashboardName\\\"],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"View Name\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[16,\\\"required\\\",true]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"View Description\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"View Description\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"description\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Runner CPU/Memory Utilization (%) Warning Threshold \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"If any single test runner utilizes a higher percentage of its available CPU or Memory for at lease 1 threshold period, provide a warning. High utilization rates indicate that more test runner instances are required to generate the specified number of concurrent users.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Warning Threshold (0-100%)\\\"],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Threshold must be between 0-100%\\\"],[24,\\\"data-parsley-max\\\",\\\"100\\\"],[24,\\\"data-parsley-max-message\\\",\\\"Threshold must be between 0-100%\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"utilizationWarningThreshold\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"%\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Runner Warning Threshold Interval \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Define how long the test runner CPU/memory must exceed the warning threshold before a warning is generated.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"numIntervalsMovingAverage\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"numIntervalsMovingAverage\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"1\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"10s\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"6\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"1m\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"30\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"5m\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[1]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Time Display \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Whether charts should show time relative to the start time of the test or the absolute local time.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"showRelativeTime\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"showRelativeTime\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"0\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Absolute\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"1\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Relative\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[2]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Save\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"bg\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"ui/info-icon\\\",\\\"span\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/dashboard-settings-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let DashboardSettingsModalComponent = _exports.default = (_class = class DashboardSettingsModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"name\", _descriptor, this);\n      _initializerDefineProperty(this, \"description\", _descriptor2, this);\n      _initializerDefineProperty(this, \"utilizationWarningThreshold\", _descriptor3, this);\n      _initializerDefineProperty(this, \"numIntervalsMovingAverage\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showRelativeTime\", _descriptor5, this);\n      this.name = this.args.dashboard.name;\n      this.description = this.args.dashboard.description;\n      this.utilizationWarningThreshold = _utilization.default.getThreshold(this.args.dashboard.config);\n      this.numIntervalsMovingAverage = '' + _utilization.default.getNumIntervalsMovingAverage(this.args.dashboard.config);\n      this.showRelativeTime = '' + _utilization.default.getShowRelativeTime(this.args.dashboard.config);\n    }\n    didInsert() {\n      const _this = this;\n      $('#dashboardSettingsModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#dashboardSettingsModal').modal('show');\n      $('#dashboardSettingsModal').on('shown.bs.modal', function () {\n        $('#dashboardName').focus();\n      });\n    }\n    save(e) {\n      e.preventDefault();\n      const settings = {\n        utilizationWarningThreshold: Number(this.utilizationWarningThreshold),\n        numIntervalsMovingAverage: Number(this.numIntervalsMovingAverage),\n        showRelativeTime: Number(this.showRelativeTime)\n      };\n      this.args.save(this.name, this.description, settings);\n      $('#dashboardSettingsModal').modal('hide');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"description\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"utilizationWarningThreshold\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"numIntervalsMovingAverage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showRelativeTime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DashboardSettingsModalComponent);\n});","define(\"@testable/shared-ui/components/data-grid\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@ember/object/observers\", \"@testable/shared-ui/utils/apps\", \"@testable/shared-ui/utils/lib\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _observers, _apps, _lib, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/utils/apps\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <table\n         id={{@id}}\n         class=\"table table-striped table-bordered {{if @noPadding 'table-no-top-bottom-padding'}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this._didUpdate @data}}\n         ...attributes\n  >\n  \n  </table>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"table\\\"],[16,1,[30,1]],[16,0,[29,[\\\"table table-striped table-bordered \\\",[52,[30,2],\\\"table-no-top-bottom-padding\\\"]]]],[17,3],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,3],[[30,0,[\\\"_didUpdate\\\"]],[30,4]],null],[12],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\",\\\"@noPadding\\\",\\\"&attrs\\\",\\\"@data\\\"],[\\\"table\\\",\\\"if\\\",\\\"did-insert\\\",\\\"did-update\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/data-grid.hbs\",\n    \"isStrictMode\": false\n  });\n  let DataGridComponent = _exports.default = (_class = class DataGridComponent extends _component2.default {\n    refreshTable() {\n      if (this.isDestroyed) return;\n      let ds = this.createDataSource();\n      let columns = this.getColumnsWithDefaults(ds);\n      this.ds = ds;\n      this.columns = columns;\n      $(`#${this.args.id}`).DataTable().clear().destroy();\n      $(`#${this.args.id}`).empty();\n      this.createTable();\n      this.onInvalidate();\n    }\n    clearTable() {}\n    onDataUpdated() {\n      this.updateDataSource.apply(this, arguments);\n    }\n    onInvalidate() {\n      const selector = `#${this.args.id}`;\n      if ($.fn.dataTable.isDataTable(selector)) {\n        $(selector).DataTable().draw(false);\n      }\n    }\n    redrawCells() {\n      const selector = `#${this.args.id}`;\n      if ($.fn.dataTable.isDataTable(selector)) {\n        $(selector).DataTable().rows().invalidate('data').draw(false);\n      }\n    }\n    getColumns() {\n      return [];\n    }\n    getInitialOrder(columns) {\n      return [];\n    }\n    createDataSource() {\n      return [];\n    }\n    updateDataSource() {}\n    addTableOptions(options) {}\n    createTable() {\n      this.pageScrollPos = 0;\n      let self = this;\n      let options;\n      if (this.args.isPrint) {\n        options = {\n          searching: false,\n          destroy: true,\n          deferRender: false,\n          autoWidth: false,\n          paging: false,\n          rowId: \"id\",\n          data: this.ds,\n          columns: this.columns,\n          order: this.getInitialOrder(this.columns)\n        };\n      } else {\n        options = {\n          destroy: true,\n          dom: 'Ztp',\n          scrollX: true,\n          scrollY: \"200px\",\n          scrollCollapse: true,\n          paging: true,\n          pageLength: 20,\n          deferRender: true,\n          autoWidth: true,\n          rowId: \"id\",\n          data: this.ds,\n          columns: this.columns,\n          order: this.getInitialOrder(this.columns),\n          search: {\n            search: this.search || ''\n          },\n          preDrawCallback(settings) {\n            self.pageScrollPos = $(document).scrollTop();\n          },\n          drawCallback(settings) {\n            $(`#${settings.sInstance} .lazy`).Lazy({\n              threshold: 2000,\n              appendScroll: `#${settings.sInstance}`\n            });\n            $(document).scrollTop(self.pageScrollPos);\n            _apps.default.handleTooltipPopoverActivation();\n          }\n        };\n      }\n      this.addTableOptions(options);\n      this.addStyle(`#${this.args.id}{width: 100% !important}`);\n      let table = $('#' + this.args.id).on('error.dt', function (e, settings, techNote, message) {\n        console.log('An error has been reported by DataTables: ', message);\n      }).DataTable(options);\n      this.initTable(table);\n      return table;\n    }\n    initTable(table) {}\n    onSearch() {\n      const table = $('#' + this.args.id).DataTable();\n      const search = this.args.search;\n      table.search(search || \"\").draw();\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"noPadding\", _descriptor2, this);\n      _initializerDefineProperty(this, \"ds\", _descriptor3, this);\n      _initializerDefineProperty(this, \"columns\", _descriptor4, this);\n      _initializerDefineProperty(this, \"pageScrollPos\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isPrint\", _descriptor6, this);\n      _initializerDefineProperty(this, \"search\", _descriptor7, this);\n      let ds = this.createDataSource();\n      let columns = this.getColumnsWithDefaults(ds);\n      this.ds = ds;\n      this.columns = columns;\n      (0, _observers.addObserver)(this, 'args.search', this.onSearch);\n    }\n    didInsert() {\n      this.EventBus.subscribe(this.args.id + '.update', this, 'onDataUpdated');\n      this.EventBus.subscribe(this.args.id + '.invalidate', this, 'onInvalidate');\n      this.EventBus.subscribe(this.args.id + '.refresh', this, 'refreshTable');\n      this.EventBus.subscribe(this.args.id + '.clear', this, 'clearTable');\n      (0, _runloop.scheduleOnce)('afterRender', () => {\n        this.createTable().columns.adjust().draw();\n        $(window).on('resize.' + this.args.id, this.onInvalidate.bind(this));\n      });\n      this._relativeTimeTimer = setInterval(() => this.redrawCells(), _lib.default.RelativeDurationInterval);\n    }\n    _didUpdate() {}\n    willDestroy() {\n      this.EventBus.unsubscribe(this.args.id + '.update', this, 'onDataUpdated');\n      this.EventBus.unsubscribe(this.args.id + '.invalidate', this, 'onInvalidate');\n      this.EventBus.unsubscribe(this.args.id + '.refresh', this, 'refreshTable');\n      this.EventBus.unsubscribe(this.args.id + '.clear', this, 'clearTable');\n      $(window).off('resize.' + this.args.id);\n      clearInterval(this._relativeTimeTimer);\n      (0, _observers.removeObserver)(this, 'args.search', this.onSearch);\n    }\n    addStyle(styleString) {\n      const style = document.createElement('style');\n      style.textContent = styleString;\n      document.head.append(style);\n    }\n    getColumnsWithDefaults() {\n      let columns = this.getColumns();\n      columns.forEach(col => {\n        if (!col.defaultContent) col.defaultContent = '';\n      });\n      return columns;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"noPadding\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"ds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"columns\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"pageScrollPos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isPrint\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"refreshTable\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshTable\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_didUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_didUpdate\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DataGridComponent);\n});","define(\"@testable/shared-ui/components/edit-kpis\", [\"exports\", \"@ember/component\", \"ember-concurrency/async-arrow-runtime\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/models/trigger-condition\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"ember-concurrency\", \"@ember/template-factory\"], function (_exports, _component, _asyncArrowRuntime, _object, _component2, _tracking, _lib, _triggerCondition, _server, _environment, _emberConcurrency, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"ember-concurrency/async-arrow-runtime\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/models/trigger-condition\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"ember-concurrency\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <fieldset disabled={{@isReadOnly}}>\n    {{#unless @isReadOnly}}\n      <div class=\"btn-group m-r-5\">\n        <button type=\"button\" href=\"javascript:;\" data-bs-toggle=\"dropdown\" class=\"btn btn-xs btn-primary dropdown-toggle\">\n          <Ui::Icon @icon=\"fa fa-plus\" /></button>\n        <ul class=\"dropdown-menu\" style={{html-safe \"position: inherit;\"}}>\n          <li><a {{on \"click\" (fn this.addCondition \"latency\")}} role=\"button\">Response time {{if this.isRealTime 'greater' 'less'}} than X\n            milliseconds</a></li>\n          <li><a {{on \"click\" (fn this.addCondition \"success\")}} role=\"button\">Success rate {{if this.isRealTime 'less' 'greater'}} than X%</a></li>\n          <li><a {{on \"click\" (fn this.addCondition \"throughput\")}} role=\"button\">Throughput {{if this.isRealTime 'less' 'greater'}} than X bytes/sec</a>\n          </li>\n          <li><a {{on \"click\" (fn this.addCondition \"assertion\")}} role=\"button\">Assertion pass rate {{if this.isRealTime 'less' 'greater'}} than X%</a>\n          </li>\n          <li class=\"divider\"></li>\n          <li><a {{on \"click\" (fn this.addCondition \"custom\")}} role=\"button\">Custom...</a></li>\n        </ul>\n      </div>\n    {{/unless}}\n    <div class=\"overflow-x-auto\">\n      <table class=\"table table-bordered widget-table widget-table-rounded\">\n        <thead>\n        <tr>\n          {{#unless @isReadOnly}}\n            <th class=\"p-l-5 p-r-5\" style={{html-safe \"width: 40px;\"}}>\n            </th>\n          {{/unless}}\n          {{#if this.showBreakingPoint}}\n            <th style={{html-safe \"width: 120px;\"}}>Break on fail?</th>\n          {{/if}}\n          {{#unless @isMonitor}}\n            <th style={{html-safe \"width: 250px;\"}}>Type</th>\n          {{/unless}}\n          {{#if this.showBreakingPoint}}\n            <th style={{html-safe \"width: 350px;\"}}>\n              Level\n              <Ui::InfoIcon @content=\"Success criteria can be evaluated against a metric aggregated across all test results (Overall) or a metric aggregated across results for a particular resource only (Resource). For Resource metrics Testable can either choose the resource with the maximum or minimum value of the chosen metric or you can choose a resource to evaluate the criteria against. Note that you will need to run this configuration at least once to be able to choose a specific resource.\" />\n            </th>\n          {{/if}}\n          <th style={{html-safe \"width: 350px;\"}}>Metric</th>\n          <th style={{html-safe \"width: 100px;\"}}>Op</th>\n          <th style={{html-safe \"width: 250px;\"}}>Threshold</th>\n        </tr>\n        </thead>\n        <tbody>\n        {{#each @conditions as |condition|}}\n          <tr>\n            {{#unless @isReadOnly}}\n              <td class=\"p-l-5 p-r-5\">\n                <a {{on \"click\" (fn this.removeCondition condition)}} class=\"btn btn-sm btn-icon btn-circle text-danger m-t-5\"\n                                                          data-bs-toggle=\"tooltip\" title=\"Delete criteria\" role=\"button\">\n                                                          <Ui::Icon @icon=\"fa fa-trash\" /></a>\n              </td>\n            {{/unless}}\n            {{#if this.showBreakingPoint}}\n              <td>\n                <div class=\"text-center\">\n                  <Input @type=\"checkbox\" @checked={{condition.isBreakingPoint}} />\n                </div>\n              </td>\n            {{/if}}\n            {{#unless @isMonitor}}\n              <td>\n                <Ui::XSelect @class=\"form-control form-select\" @value={{condition.type}} data-parsley-required={{true}}\n                        data-parsley-required-message=\"Type must be specified.\"\n                        @onChange={{fn (mut condition.type)}} as |xs| >\n                  {{#if condition.allowLastMinuteTimePeriod}}\n                    <xs.option @value='Absolute|LastMinute'>Active value</xs.option>\n                  {{/if}}\n                  <xs.option @value='Absolute|EntireTest'>Value during test</xs.option>\n                  {{#if condition.allowLastMinuteTimePeriod}}\n                    <xs.option @value='Change|LastMinute'>Change minute over minute</xs.option>\n                  {{/if}}\n                  <xs.option @value='Change|EntireTest'>Change from previous test runs</xs.option>\n                </Ui::XSelect>\n              </td>\n            {{/unless}}\n            {{#if this.showBreakingPoint}}\n              <td>\n                <div class=\"d-flex gap-2\">\n                  <Ui::XSelect @class=\"form-control form-select\" @value={{condition.level}} data-parsley-required={{true}}\n                          data-parsley-required-message=\"Level must be specified.\"\n                          @onChange={{fn this.onSelectLevel condition}} as |xs| >\n                    <xs.option @value='Overall'>Overall</xs.option>\n                    <xs.option @value='ByResource'>Resource</xs.option>\n                  </Ui::XSelect>\n                  {{#if (eq condition.level \"ByResource\")}}\n                    <Ui::XSelect @class=\"form-control form-select\" @value={{condition.resourceChooser}} data-parsley-required={{true}}\n                            data-parsley-required-message=\"Resource Chooser must be specified.\"\n                            @onChange={{fn (mut condition.resourceChooser)}} as |xs| >\n                      <xs.option @value='Max'>Max</xs.option>\n                      <xs.option @value='Min'>Min</xs.option>\n                      <xs.option @value='Specify'>Specify</xs.option>\n                    </Ui::XSelect>\n                  {{/if}}\n                </div>\n                {{#if (and (eq condition.level \"ByResource\") (eq condition.resourceChooser \"Specify\"))}}\n                  <div class=\"m-t-10\" {{did-insert this.loadResourcesData}}>\n                    {{#if this.resourceLoaded}}\n                      <Ui::PSelect @options={{this.resources}}\n                                  @search={{this.onSearchResources}}\n                                  @disabled={{@isReadOnly}}\n                                  @selected={{condition.resource}}\n                                  @searchEnabled={{true}}\n                                  @labelText=\"Resource\"\n                                  @placeholder=\"Please select a resource...\"\n                                  class=\"p-control w-100\"\n                                  @onChange={{fn this.onSelectResource condition}} as |resource| >\n                                  {{#if resource.label}}\n                                    <span class=\"disabled\"><b>{{resource.label}}</b></span>\n                                  {{else}}\n                                    {{resource.resource}}\n                                  {{/if}}\n                      </Ui::PSelect>\n                    {{else}}\n                      {{#if @isReadOnly}}\n                        <input class=\"form-control\" value={{condition.resource.resource}}>\n                      {{else}}\n                        Loading Resources...\n                      {{/if}}\n                    {{/if}}\n                  </div>\n                {{/if}}\n              </td>\n            {{/if}}\n            <td>\n              <div>\n                <MetricPicker @namespace={{condition.namespace}}\n                              @metric={{condition.metricText}}\n                              @errorsElementId={{concat \"errors-\" condition.id \"-type\"}}\n                              @metricDefs={{@metricDefs}}\n                              @percentiles={{@percentiles}}\n                              @summary={{@summary}}\n                              @scriptType={{@scriptType}}\n                              @isReadOnly={{@isReadOnly}}\n                              @showCumulativeCheckbox={{false}}\n                              @showCounterOverallAggregators={{true}}\n                              @metricUpdated={{fn this.metricUpdated condition}} />\n              </div>\n              <div id=\"errors-{{condition.id}}-type\"></div>\n            </td>\n            <td>\n              <Ui::PSelect @options={{this.operators}} @disabled={{@isReadOnly}} @selected={{condition.operator}} data-parsley-required={{true}}\n                       data-parsley-required-message=\"Operator must be specified.\"\n                       data-parsley-errors-container={{concat \"#errors-\" condition.id \"-type\"}}\n                       @onChange={{fn (mut condition.operator)}} as |choice|>\n                {{html-safe (print-operator choice)}}\n              </Ui::PSelect>\n            </td>\n            <td>\n              <div class=\"input-group\">\n                <Input @type=\"number\" placeholder=\"Threshold for this condition...\" class=\"form-control width-100\"\n                       @value={{condition.threshold}} data-parsley-required={{true}}\n                       data-parsley-required-message=\"Threshold must be specified.\"\n                       data-parsley-errors-container={{concat \"#errors-\" condition.id \"-threshold\"}} />\n                {{#if condition.metricUnits}}\n                  <div class=\"input-group-append\"><span class=\"input-group-text\">{{condition.metricUnits}}</span></div>\n                {{/if}}\n              </div>\n              <div id=\"errors-{{condition.id}}-threshold\"></div>\n            </td>\n          </tr>\n        {{/each}}\n        </tbody>\n      </table>\n    </div>\n  </fieldset>\n  \n  {{#if this.hasBreakingPoint}}\n    <div class=\"m-t-5\">\n      <label class=\"normal\"><Input @type=\"checkbox\" @checked={{@bpIsFailure}} /> Hitting a breaking point is considered a test failure</label>\n    </div>\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,1]],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"btn-group m-r-5\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[14,6,\\\"javascript:;\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,0,\\\"btn btn-xs btn-primary dropdown-toggle\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu\\\"],[15,5,[28,[37,6],[\\\"position: inherit;\\\"],null]],[12],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"addCondition\\\"]],\\\"latency\\\"],null]],null],[12],[1,\\\"Response time \\\"],[1,[52,[30,0,[\\\"isRealTime\\\"]],\\\"greater\\\",\\\"less\\\"]],[1,\\\" than X\\\\n          milliseconds\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"addCondition\\\"]],\\\"success\\\"],null]],null],[12],[1,\\\"Success rate \\\"],[1,[52,[30,0,[\\\"isRealTime\\\"]],\\\"less\\\",\\\"greater\\\"]],[1,\\\" than X%\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"addCondition\\\"]],\\\"throughput\\\"],null]],null],[12],[1,\\\"Throughput \\\"],[1,[52,[30,0,[\\\"isRealTime\\\"]],\\\"less\\\",\\\"greater\\\"]],[1,\\\" than X bytes/sec\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"addCondition\\\"]],\\\"assertion\\\"],null]],null],[12],[1,\\\"Assertion pass rate \\\"],[1,[52,[30,0,[\\\"isRealTime\\\"]],\\\"less\\\",\\\"greater\\\"]],[1,\\\" than X%\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"addCondition\\\"]],\\\"custom\\\"],null]],null],[12],[1,\\\"Custom...\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[14,0,\\\"overflow-x-auto\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered widget-table widget-table-rounded\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[14,0,\\\"p-l-5 p-r-5\\\"],[15,5,[28,[37,6],[\\\"width: 40px;\\\"],null]],[12],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showBreakingPoint\\\"]],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 120px;\\\"],null]],[12],[1,\\\"Break on fail?\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 250px;\\\"],null]],[12],[1,\\\"Type\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showBreakingPoint\\\"]],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 350px;\\\"],null]],[12],[1,\\\"\\\\n            Level\\\\n            \\\"],[8,[39,16],null,[[\\\"@content\\\"],[\\\"Success criteria can be evaluated against a metric aggregated across all test results (Overall) or a metric aggregated across results for a particular resource only (Resource). For Resource metrics Testable can either choose the resource with the maximum or minimum value of the chosen metric or you can choose a resource to evaluate the criteria against. Note that you will need to run this configuration at least once to be able to choose a specific resource.\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 350px;\\\"],null]],[12],[1,\\\"Metric\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 100px;\\\"],null]],[12],[1,\\\"Op\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,6],[\\\"width: 250px;\\\"],null]],[12],[1,\\\"Threshold\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,19],[[28,[37,19],[[30,3]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[14,0,\\\"p-l-5 p-r-5\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger m-t-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete criteria\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"removeCondition\\\"]],[30,4]],null]],null],[12],[1,\\\"\\\\n                                                        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showBreakingPoint\\\"]],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,4,[\\\"isBreakingPoint\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,2]],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,22],[[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Type must be specified.\\\"]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,4,[\\\"type\\\"]],[28,[37,10],[[28,[37,23],[[30,4,[\\\"type\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"allowLastMinuteTimePeriod\\\"]],[[[1,\\\"                  \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Absolute|LastMinute\\\"]],[[\\\"default\\\"],[[[[1,\\\"Active value\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Absolute|EntireTest\\\"]],[[\\\"default\\\"],[[[[1,\\\"Value during test\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"allowLastMinuteTimePeriod\\\"]],[[[1,\\\"                  \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Change|LastMinute\\\"]],[[\\\"default\\\"],[[[[1,\\\"Change minute over minute\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Change|EntireTest\\\"]],[[\\\"default\\\"],[[[[1,\\\"Change from previous test runs\\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[5]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showBreakingPoint\\\"]],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,22],[[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Level must be specified.\\\"]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,4,[\\\"level\\\"]],[28,[37,10],[[30,0,[\\\"onSelectLevel\\\"]],[30,4]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Overall\\\"]],[[\\\"default\\\"],[[[[1,\\\"Overall\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"ByResource\\\"]],[[\\\"default\\\"],[[[[1,\\\"Resource\\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[6]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,24],[[30,4,[\\\"level\\\"]],\\\"ByResource\\\"],null],[[[1,\\\"                  \\\"],[8,[39,22],[[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Resource Chooser must be specified.\\\"]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,4,[\\\"resourceChooser\\\"]],[28,[37,10],[[28,[37,23],[[30,4,[\\\"resourceChooser\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,7,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Max\\\"]],[[\\\"default\\\"],[[[[1,\\\"Max\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,7,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Min\\\"]],[[\\\"default\\\"],[[[[1,\\\"Min\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,7,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Specify\\\"]],[[\\\"default\\\"],[[[[1,\\\"Specify\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,25],[[28,[37,24],[[30,4,[\\\"level\\\"]],\\\"ByResource\\\"],null],[28,[37,24],[[30,4,[\\\"resourceChooser\\\"]],\\\"Specify\\\"],null]],null],[[[1,\\\"                \\\"],[11,0],[24,0,\\\"m-t-10\\\"],[4,[38,26],[[30,0,[\\\"loadResourcesData\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"resourceLoaded\\\"]],[[[1,\\\"                    \\\"],[8,[39,27],[[24,0,\\\"p-control w-100\\\"]],[[\\\"@options\\\",\\\"@search\\\",\\\"@disabled\\\",\\\"@selected\\\",\\\"@searchEnabled\\\",\\\"@labelText\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"resources\\\"]],[30,0,[\\\"onSearchResources\\\"]],[30,1],[30,4,[\\\"resource\\\"]],true,\\\"Resource\\\",\\\"Please select a resource...\\\",[28,[37,10],[[30,0,[\\\"onSelectResource\\\"]],[30,4]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"label\\\"]],[[[1,\\\"                                  \\\"],[10,1],[14,0,\\\"disabled\\\"],[12],[10,\\\"b\\\"],[12],[1,[30,8,[\\\"label\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                                  \\\"],[1,[30,8,[\\\"resource\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"]],[8]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1],[[[1,\\\"                      \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control\\\"],[15,2,[30,4,[\\\"resource\\\",\\\"resource\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      Loading Resources...\\\\n\\\"]],[]]]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[8,[39,30],null,[[\\\"@namespace\\\",\\\"@metric\\\",\\\"@errorsElementId\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@isReadOnly\\\",\\\"@showCumulativeCheckbox\\\",\\\"@showCounterOverallAggregators\\\",\\\"@metricUpdated\\\"],[[30,4,[\\\"namespace\\\"]],[30,4,[\\\"metricText\\\"]],[28,[37,31],[\\\"errors-\\\",[30,4,[\\\"id\\\"]],\\\"-type\\\"],null],[30,9],[30,10],[30,11],[30,12],[30,1],false,true,[28,[37,10],[[30,0,[\\\"metricUpdated\\\"]],[30,4]],null]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,1,[29,[\\\"errors-\\\",[30,4,[\\\"id\\\"]],\\\"-type\\\"]]],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,27],[[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Operator must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,31],[\\\"#errors-\\\",[30,4,[\\\"id\\\"]],\\\"-type\\\"],null]]],[[\\\"@options\\\",\\\"@disabled\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"operators\\\"]],[30,1],[30,4,[\\\"operator\\\"]],[28,[37,10],[[28,[37,23],[[30,4,[\\\"operator\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,6],[[28,[37,32],[[30,13]],null]],null]],[1,\\\"\\\\n            \\\"]],[13]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,21],[[24,\\\"placeholder\\\",\\\"Threshold for this condition...\\\"],[24,0,\\\"form-control width-100\\\"],[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Threshold must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,31],[\\\"#errors-\\\",[30,4,[\\\"id\\\"]],\\\"-threshold\\\"],null]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,4,[\\\"threshold\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"metricUnits\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,[30,4,[\\\"metricUnits\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,1,[29,[\\\"errors-\\\",[30,4,[\\\"id\\\"]],\\\"-threshold\\\"]]],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasBreakingPoint\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,14]]],null],[1,\\\" Hitting a breaking point is considered a test failure\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isReadOnly\\\",\\\"@isMonitor\\\",\\\"@conditions\\\",\\\"condition\\\",\\\"xs\\\",\\\"xs\\\",\\\"xs\\\",\\\"resource\\\",\\\"@metricDefs\\\",\\\"@percentiles\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"choice\\\",\\\"@bpIsFailure\\\"],[\\\"fieldset\\\",\\\"unless\\\",\\\"div\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"ul\\\",\\\"html-safe\\\",\\\"li\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"if\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"ui/info-icon\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"input\\\",\\\"ui/x-select\\\",\\\"mut\\\",\\\"eq\\\",\\\"and\\\",\\\"did-insert\\\",\\\"ui/p-select\\\",\\\"span\\\",\\\"b\\\",\\\"metric-picker\\\",\\\"concat\\\",\\\"print-operator\\\",\\\"label\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/edit-kpis.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   * todo: check following\n   * - isRealTime is missing\n   */\n  let EditKpisComponent = _exports.default = (_class = class EditKpisComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"operators\", _lib.default.operators);\n      _initializerDefineProperty(this, \"resources\", _descriptor, this);\n      _initializerDefineProperty(this, \"resourceLoaded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"searchTerm\", _descriptor3, this);\n      _defineProperty(this, \"searchResources\", (0, _asyncArrowRuntime.buildTask)(() => ({\n        context: this,\n        generator: function* () {\n          const term = this.searchTerm.toLowerCase().trim();\n          yield (0, _emberConcurrency.timeout)(1000);\n          yield this.loadResources(term);\n        }\n      }), {\n        restartable: true\n      }, \"searchResources\", null));\n    }\n    get hasBreakingPoint() {\n      return _.findIndex(this.args.conditions, c => {\n        return c.isBreakingPoint;\n      }) >= 0;\n    }\n    get showBreakingPoint() {\n      const testType = this.args.testType;\n      return !testType || testType === 'Load';\n    }\n    addCondition(type) {\n      const c = _lib.default.createCondition(type);\n      c.metricDefs = this.args.metricDefs;\n      if (this.showBreakingPoint) {\n        c.level = 'Overall';\n      }\n      this.args.conditions.push(_triggerCondition.default.create(c));\n    }\n    removeCondition(cond) {\n      const index = this.args.conditions.indexOf(cond);\n      if (index > -1) {\n        this.args.conditions.splice(index, 1);\n      }\n    }\n    metricUpdated(condition, info) {\n      if (condition && info) {\n        condition.metricText = info.metric;\n        condition.namespace = info.metricDef.namespace;\n      }\n    }\n    onSelectLevel(condition, selected) {\n      condition.level = selected;\n      if (selected === 'ByResource') {\n        condition.resourceChooser = 'Max';\n      } else {\n        delete condition.resourceChooser;\n        delete condition.resourceId;\n        delete condition.resource;\n      }\n    }\n    async onSelectResource(condition, selected) {\n      condition.resourceId = selected.id;\n      condition.resource = selected;\n    }\n    async onSearchResources(text) {\n      this.searchTerm = text;\n      this.searchResources.perform();\n    }\n    loadResourcesData() {\n      if (!this.resourceLoaded && !this.args.isReadOnly) {\n        this.loadResources();\n      }\n    }\n    loadResources(text = '') {\n      _server.default.loadOrgResources(_environment.config.currentUser.orgId, text).then((response, status, xhr) => {\n        const totalResources = xhr.getResponseHeader('X-Testable-Count');\n        let resources = response;\n        if (response.length < totalResources) {\n          resources.push({\n            label: `${totalResources - resources.length} more resources...`,\n            disabled: true\n          });\n        }\n        this.resources = resources;\n        this.resourceLoaded = true;\n      });\n    }\n    get isRealTime() {\n      return this.args.isRealTime;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"resources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resourceLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"searchTerm\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"addCondition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addCondition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeCondition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeCondition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectLevel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectLevel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectResource\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectResource\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSearchResources\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSearchResources\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadResourcesData\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadResourcesData\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, EditKpisComponent);\n});","define(\"@testable/shared-ui/components/email-confirmation-banner\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _environment, _server, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.isEmailConfirmationRequired}}\n    <div class=\"alert alert-info fade show animate__animated animate__bounceInDown\">\n      <span class=\"close cursor-pointer pull-right\" data-bs-dismiss=\"alert\">×</span>\n      <Ui::Icon @icon=\"fa fa-inbox fa-2x\" />\n      <span class=\"m-l-5\" style={{html-safe \"vertical-align: super\"}}>\n        {{this.emailConfirmationRequiredMessage}}\n        If you haven't received the confirmation email,\n        <a href=\"javascript:;\" role=\"button\" {{on \"click\" this.sendEmailConfirmation}}>resend the confirmation email</a>.\n      </span>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"isEmailConfirmationRequired\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"alert alert-info fade show animate__animated animate__bounceInDown\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"close cursor-pointer pull-right\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-inbox fa-2x\\\"]],null],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[15,5,[28,[37,4],[\\\"vertical-align: super\\\"],null]],[12],[1,\\\"\\\\n      \\\"],[1,[30,0,[\\\"emailConfirmationRequiredMessage\\\"]]],[1,\\\"\\\\n      If you haven't received the confirmation email,\\\\n      \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"sendEmailConfirmation\\\"]]],null],[12],[1,\\\"resend the confirmation email\\\"],[13],[1,\\\".\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"if\\\",\\\"div\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"html-safe\\\",\\\"a\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/email-confirmation-banner.hbs\",\n    \"isStrictMode\": false\n  });\n  let EmailConfirmationBannerComponent = _exports.default = (_class = class EmailConfirmationBannerComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    get isEmailConfirmationRequired() {\n      return !_environment.config.currentUser.confirmed && this.router.currentRouteName !== 'conversations';\n    }\n    get emailConfirmationRequiredMessage() {\n      const action = _environment.config.isMonitoring ? 'running monitor checks' : 'running tests';\n      return `You must confirm your email address to proceed with ${action}.`;\n    }\n    sendEmailConfirmation(e) {\n      e.preventDefault();\n      _server.default.sendEmailConfirmation(_environment.config.currentUser.email).then(data => {\n        if (data.success) {\n          _lib.default.info('Email sent with link to confirm your account.');\n        } else {\n          _lib.default.error(data.error);\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"sendEmailConfirmation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sendEmailConfirmation\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, EmailConfirmationBannerComponent);\n});","define(\"@testable/shared-ui/components/empty\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{yield}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[18,1,null]],[\\\"&default\\\"],[\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/empty.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"empty\"));\n});","define(\"@testable/shared-ui/components/execution-agents-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/runloop\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\", \"@ember/service\"], function (_exports, _observers, _runloop, _dataGrid, _formatters, _lib, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/service\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ExecutionAgentsGrid = _exports.default = (_class = class ExecutionAgentsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.agents.[]', this.agentsUpdates);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.agents.[]', this.agentsUpdates);\n    }\n    agentsUpdates() {\n      (0, _runloop.debounce)(this, this.updateDataSource, 250);\n    }\n    getColumns() {\n      const showRegion = this.args.showRegion;\n      const columns = [];\n      if (showRegion) columns.push({\n        data: 'regionName',\n        title: 'Region',\n        width: '100px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            if (full.regionDescription) return full.regionDescription + (full.regionDescription !== full.regionName ? ' (' + full.regionName + ')' : '');\n            return data || '-';\n          } else {\n            return data;\n          }\n        }\n      });\n      columns.push({\n        data: 'instanceId',\n        title: 'Instance Id',\n        width: '120px'\n      }, {\n        data: 'host',\n        title: 'Host',\n        width: '200px'\n      }, {\n        data: 'version',\n        title: 'Version',\n        width: '60px'\n      }, {\n        data: 'platform',\n        title: 'OS',\n        width: '60px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            if (data === 'win32') return 'Windows';else if (data === 'linux') return 'Linux';\n            return data;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Unlimited <span class=\"m-l-5\" data-bs-toggle=\"tooltip\" data-bs-html=\"true\" title=\"' + _lib.default.UnlimitedInfo + '\"><i class=\"fa fa-info\"></i></span>',\n        data: 'isPaidExternally',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return _formatters.default.icon(data, 'fa fa-check', 'fa fa-times', _lib.default.UnlimitedTestingText, 'Tests were charged credits according to the policy outlined at Documentation => Billing.');\n        }\n      });\n      return columns;\n    }\n    createDataSource() {\n      return this.args.agents;\n    }\n    getInitialOrder(columns) {\n      return [[0, 'asc']];\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No test runner info found.\"\n      };\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const tableRows = table.rows().data();\n      const agents = this.args.agents;\n      let toAdd = [];\n      agents.forEach(record => {\n        if (!_.find(tableRows, agent => {\n          return record.id === agent.id;\n        })) {\n          toAdd.push(record);\n        } else {\n          let row = table.row('#' + record.id);\n          let data = row.data();\n          if (!_.isEqual(data, record)) {\n            row.data(record);\n          }\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n      (0, _runloop.next)(this, () => {\n        this.EventBus.publish(`${this.args.id}.refresh`);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/execution-live-session\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/load-test\", \"@ember/service\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _loadTest, _service, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex gap-10\"\n    {{did-insert this.didInsert}}\n    {{did-update this.onReadyForLiveSessionChanged this.isReadyForLiveSession}}>\n  {{#if (gt this.sessionList.length 1)}}\n    <div class=\"form-group\">\n      <div class=\"f-w-700 m-b-5\">Sessions</div>\n      <Ui::PSelect class=\"d-inline-flex\"\n                    @options={{this.sessionList}}\n                    @selected={{this.selectedSession}}\n                    @disabled={{this.readOnly}}\n                    @placeholder=\"Please select a session...\"\n                    @onChange={{this.updateSessionNum}} as |option| >\n        {{option.title}}\n      </Ui::PSelect>\n    </div>\n  {{/if}}\n  {{#if this.hasMultipleUsers}}\n    <div class=\"form-group\">\n      <div class=\"f-w-700 m-b-5\">Users</div>\n      {{#if this.userManuallyInputted}}\n        <InputSelectAll @type=\"text\"\n                        class=\"form-control form-control-sm width-100\"\n                        placeholder={{concat \"User \" this.userNumRangeText}}\n                        @value={{this.selectedUser}}\n                        @readonly={{this.readOnly}}\n                        @onChange={{this.updateManualUser}} />\n      {{else}}\n        <Ui::PSelect @disabled={{this.readOnly}}\n                     @options={{this.users}}\n                     @selected={{this.selectedUser}}\n                     class=\"\"\n                     @onChange={{this.updateUserAction}} as |user|>\n          <span class=\"m-r-10\">{{#if (eq user.index \"NONE\")}}NONE{{else}}User {{user.index}}{{/if}}</span>\n          {{#if user.browser}}\n            <span class=\"m-r-10\">\n              {{print-browser-title (concat user.browser.browserType \"-\" user.browser.version)}}\n            </span>\n          {{/if}}\n          {{#if user.browser.device}}\n            {{print-device user.browser.device}}\n          {{/if}}\n        </Ui::PSelect>\n      {{/if}}\n    </div>\n  {{/if}}\n  </div>\n  <div>\n    {{#if this.isRequestingSession}}\n      <h5>Requesting live session...</h5>\n    {{else if this.awaitingSessionRegistration}}\n      <h5>Live session requested. Waiting for test runner to activate it...</h5>\n    {{else if (and this.vncInfo (not this.vncInfo.error))}}\n      <LiveSession @info={{this.vncInfo}} />\n    {{else if (and this.vncInfo this.vncInfo.error)}}\n      <h5>{{this.vncInfo.error}}</h5>\n    {{else if (and (not this.hasMultipleUsers) (not this.isReadyForLiveSession))}}\n      <h5>Waiting to be assigned a test runner before requesting a live session...</h5>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"d-flex gap-10\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onReadyForLiveSessionChanged\\\"]],[30,0,[\\\"isReadyForLiveSession\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"sessionList\\\",\\\"length\\\"]],1],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Sessions\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,5],[[24,0,\\\"d-inline-flex\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"sessionList\\\"]],[30,0,[\\\"selectedSession\\\"]],[30,0,[\\\"readOnly\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"updateSessionNum\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,1,[\\\"title\\\"]]],[1,\\\"\\\\n    \\\"]],[1]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasMultipleUsers\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Users\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"userManuallyInputted\\\"]],[[[1,\\\"      \\\"],[8,[39,6],[[24,0,\\\"form-control form-control-sm width-100\\\"],[16,\\\"placeholder\\\",[28,[37,7],[\\\"User \\\",[30,0,[\\\"userNumRangeText\\\"]]],null]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@readonly\\\",\\\"@onChange\\\"],[\\\"text\\\",[30,0,[\\\"selectedUser\\\"]],[30,0,[\\\"readOnly\\\"]],[30,0,[\\\"updateManualUser\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,5],[[24,0,\\\"\\\"]],[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"readOnly\\\"]],[30,0,[\\\"users\\\"]],[30,0,[\\\"selectedUser\\\"]],[30,0,[\\\"updateUserAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-r-10\\\"],[12],[41,[28,[37,9],[[30,2,[\\\"index\\\"]],\\\"NONE\\\"],null],[[[1,\\\"NONE\\\"]],[]],[[[1,\\\"User \\\"],[1,[30,2,[\\\"index\\\"]]]],[]]],[13],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"browser\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"m-r-10\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[35,10],[[28,[37,7],[[30,2,[\\\"browser\\\",\\\"browserType\\\"]],\\\"-\\\",[30,2,[\\\"browser\\\",\\\"version\\\"]]],null]],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"browser\\\",\\\"device\\\"]],[[[1,\\\"          \\\"],[1,[28,[35,11],[[30,2,[\\\"browser\\\",\\\"device\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isRequestingSession\\\"]],[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Requesting live session...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"awaitingSessionRegistration\\\"]],[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Live session requested. Waiting for test runner to activate it...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,0,[\\\"vncInfo\\\"]],[28,[37,14],[[30,0,[\\\"vncInfo\\\",\\\"error\\\"]]],null]],null],[[[1,\\\"    \\\"],[8,[39,15],null,[[\\\"@info\\\"],[[30,0,[\\\"vncInfo\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,0,[\\\"vncInfo\\\"]],[30,0,[\\\"vncInfo\\\",\\\"error\\\"]]],null],[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[12],[1,[30,0,[\\\"vncInfo\\\",\\\"error\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[28,[37,14],[[30,0,[\\\"hasMultipleUsers\\\"]]],null],[28,[37,14],[[30,0,[\\\"isReadyForLiveSession\\\"]]],null]],null],[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Waiting to be assigned a test runner before requesting a live session...\\\"],[13],[1,\\\"\\\\n  \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"option\\\",\\\"user\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"gt\\\",\\\"ui/p-select\\\",\\\"input-select-all\\\",\\\"concat\\\",\\\"span\\\",\\\"eq\\\",\\\"print-browser-title\\\",\\\"print-device\\\",\\\"h5\\\",\\\"and\\\",\\\"not\\\",\\\"live-session\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-live-session.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExecutionLiveSession = _exports.default = (_class = class ExecutionLiveSession extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _defineProperty(this, \"knownVncSessions\", new Map());\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedUser\", _descriptor4, this);\n      _initializerDefineProperty(this, \"browsers\", _descriptor5, this);\n      _initializerDefineProperty(this, \"vncInfo\", _descriptor6, this);\n      _initializerDefineProperty(this, \"awaitingSessionRegistration\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isRequestingSession\", _descriptor8, this);\n      _initializerDefineProperty(this, \"pendingUuid\", _descriptor9, this);\n      _initializerDefineProperty(this, \"sessionNum\", _descriptor0, this);\n      if (this.hasMultipleUsers) {\n        this.selectedUser = this.userManuallyInputted ? 'NONE' : {\n          index: 'NONE'\n        };\n      }\n      if (this.isReadyForLiveSession) {\n        if (!this.hasMultipleUsers) {\n          this.selectedUser = 0;\n          this.updateUser(0);\n        }\n        this.loadBrowserInfo();\n      }\n    }\n    get sessionList() {\n      return this.args.sessionsList?.filter(session => session.value !== 0 && session.value !== -1);\n    }\n    get hasMultipleUsers() {\n      return this.args.isLoad && this.args.concurrentClients > 1;\n    }\n    get userManuallyInputted() {\n      return this.args.concurrentClients > _loadTest.default.MaxUsersDropdown;\n    }\n    get userNumRangeText() {\n      return '[0,' + (Number(this.args.concurrentClients) - 1) + ']';\n    }\n    get users() {\n      let concurrentClients = this.args.concurrentClients;\n      let answer = [{\n        index: 'NONE'\n      }];\n      let browsers = this.browsers || [];\n      if (concurrentClients <= _loadTest.default.MaxUsersDropdown) {\n        for (let i = 0; i < concurrentClients; i++) {\n          let user = {\n            index: `${i}`\n          };\n          if (browsers.length > i) user.browser = browsers[i];\n          answer.push(user);\n        }\n      }\n      return answer;\n    }\n    get isReadyForLiveSession() {\n      return this.args.running && !this.args.allocatingInfra && this.args.startedAt;\n    }\n    get readOnly() {\n      return this.isRequestingSession || this.awaitingSessionRegistration;\n    }\n    onReadyForLiveSessionChanged() {\n      if (this.isReadyForLiveSession) {\n        this.loadBrowserInfo();\n        if (!this.hasMultipleUsers) {\n          this.selectedUser = 0;\n          this.updateUser(0);\n        }\n      }\n    }\n    loadBrowserInfo() {\n      if (this.args.running && this.args.concurrentClients <= _loadTest.default.MaxUsersDropdown) {\n        const self = this;\n        const executionBrowsers = this.args.uuid ? this.api.liveVideos.getExecutionBrowsers(this.args.uuid, true) : this.api.liveVideos.getExecutionBrowsers(this.args.executionId);\n        executionBrowsers.then(function (results) {\n          const answer = [];\n          _.forEach(results, function (result) {\n            if (result.length === 2) {\n              _.forEach(result[1], function (assignment) {\n                for (let i = 0; i < (assignment.concurrentClients || 1); i++) answer.push(assignment);\n              });\n            }\n          });\n          self.browsers = answer;\n        });\n      }\n    }\n    updateUser(user) {\n      if (user !== 'NONE') {\n        const knownVncSessions = this.knownVncSessions;\n        const sessionNum = this.selectedSession?.value;\n        if (knownVncSessions.has(user) && (!sessionNum || this.sessionNum === sessionNum)) {\n          this.awaitingSessionRegistration = true;\n          this.vncInfo = null;\n          (0, _runloop.later)(this, () => {\n            this.vncInfo = knownVncSessions.get(user);\n            this.awaitingSessionRegistration = false;\n          });\n        } else {\n          const self = this;\n          const uuid = (0, _emberUuid.v4)();\n          this.isRequestingSession = true;\n          this.sessionNum = sessionNum;\n          const id = this.args.uuid || this.args.executionId;\n          const requestLiveSession = this.args.uuid ? this.api.liveVideos.requestLiveSession(id, user, uuid, sessionNum, true) : this.api.liveVideos.requestLiveSession(id, user, uuid, sessionNum);\n          requestLiveSession.then(function () {\n            self.isRequestingSession = false;\n            self.awaitingSessionRegistration = true;\n            self.pendingUuid = uuid;\n          }, function () {\n            self.isRequestingSession = false;\n          });\n        }\n      } else {\n        this.vncInfo = null;\n        this.awaitingSessionRegistration = false;\n        this.isRequestingSession = false;\n      }\n    }\n    updateSessionNum(selected) {\n      this.selectedSession = selected;\n      this.updateUser(0);\n    }\n    updateUserAction(value) {\n      this.selectedUser = value;\n      this.updateUser(!value || !value.index || value.index === 'NONE' ? 'NONE' : Number(value.index));\n    }\n    updateManualUser(val) {\n      let value = val.target.value;\n      let selectedUser;\n      if (_.isEmpty(value) || value.toUpperCase() === 'NONE') {\n        selectedUser = 'NONE';\n      } else {\n        const user = Number(value);\n        if (_.isNaN(user)) {\n          selectedUser = 'NONE';\n        } else if (user < 0) {\n          selectedUser = 0;\n        } else if (user >= this.args.concurrentClients) {\n          const max = Number(this.args.concurrentClients) - 1;\n          selectedUser = `${max}`;\n        } else {\n          selectedUser = 'NONE';\n        }\n      }\n      this.selectedUser = selectedUser;\n      this.updateUser(selectedUser);\n    }\n    onSessionStart(vncInfo) {\n      if (vncInfo.id === this.pendingUuid) {\n        this.pendingUuid = null;\n        this.knownVncSessions.set(vncInfo.globalClientIndex, vncInfo);\n        this.vncInfo = vncInfo;\n        this.awaitingSessionRegistration = false;\n      }\n    }\n    didInsert() {\n      this.EventBus.subscribe('liveSessions.start', this, 'onSessionStart');\n      this.knownVncSessions = new Map();\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('liveSessions.start', this, 'onSessionStart');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {\n        value: 1,\n        title: 'Session 1'\n      };\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"browsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"vncInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"awaitingSessionRegistration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isRequestingSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"pendingUuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"sessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"users\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"users\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onReadyForLiveSessionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onReadyForLiveSessionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSessionNum\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSessionNum\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUserAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUserAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateManualUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateManualUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionLiveSession);\n});","define(\"@testable/shared-ui/components/execution-progress\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _component2, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span {{did-update this.onNewExecution @regionSummary.execution.id}}></span>\n  {{#unless @regionSummary.execution.completed}}\n    <div class=\"panel block-sub-container no-print\" data-sortable-id=\"summary\" data-type=\"Summary\">\n      <div class=\"panel-heading\">\n        <div class=\"panel-heading-btn\">\n          <a class=\"btn btn-sm btn-circle btn-icon text-primary\" data-click=\"panel-expand\"><Ui::Icon @icon=\"fa fa-expand\" /></a>\n        </div>\n        <h4 class=\"panel-title\">Progress</h4>\n      </div>\n      <div class=\"panel-body\">\n        <div class=\"progress m-b-0\">\n          <div class=\"progress-bar {{if @hasErrors 'progress-bar-danger'}}\"\n               role=\"progressbar\" aria-valuenow=\"{{html-safe this.percentCompleted}}\"\n               aria-valuemin=\"0\" aria-valuemax=\"100\" style={{html-safe this.percentCompletedStyle}}\n               data-bs-toggle=\"popover\" data-bs-placement=\"top\" data-bs-trigger=\"hover\"\n               data-bs-content=\"The test is {{this.percentCompleted}}% finished {{if @regionSummary.execution.running 'running'\n                                                                             'processing results'}} {{unless @regionSummary.isAll 'in this region'}}\">\n            <span class=\"sr-only\">{{html-safe this.percentCompleted}}%</span>\n          </div>\n        </div>\n        <div class=\"table-responsive\">\n          <table class=\"table table-bordered\">\n            <tbody>\n              <tr>\n                {{#if @regionSummary.execution.queued}}\n                  <td class=\"text-center\">\n                    <div>Queued</div>\n                    <div class=\"summary-content\">Waiting for plan capacity to run your test...</div>\n                  </td>\n                {{else if (not @regionSummary.execution.startedAt)}}\n                  <td class=\"text-center\">\n                    <div>Starting</div>\n                    <div class=\"summary-content\">Initializing test...</div>\n                  </td>\n                {{else if (and (not @regionSummary.hasResults) @regionSummary.execution.allocatingInfra)}}\n                  <td class=\"text-center\">\n                    {{#if (and @regionSummary.isAll @regionSummary.execution.manualStart @regionSummary.execution.infraReady)}}\n                      <div>Awaiting Manual Start</div>\n                      <div class=\"summary-content m-t-10\">\n                        <button {{on \"click\" this.manualStart}} type=\"submit\" class=\"btn btn-sm btn-primary\" disabled={{this.manualStartInProgress}}><strong>\n                            {{if this.manualStartInProgress 'Starting...' 'Start Now...'}}\n                          </strong></button>\n                      </div>\n                    {{else}}\n                      <div>Provisioning</div>\n                      <div class=\"summary-content\">\n                        {{#if @regionSummary.isOnDemand}}\n                          Provisioning infrastructure, {{@regionSummary.instancesText}}...\n                          {{#if (and @regionSummary.isAll (gt @regionSummary.instanceCounts.connected 0))}}\n                            <br />\n                            <button {{on \"click\" (fn this.manualStart true)}} type=\"submit\" class=\"m-t-10 btn btn-sm btn-primary\" disabled={{this.manualStartInProgress}}><strong>\n                                {{if this.manualStartInProgress 'Force Starting...' 'Force Start Before All Test Runners Are Up...'}}\n                              </strong></button>\n                          {{/if}}\n                        {{else}}\n                          Provisioning infrastructure...\n                        {{/if}}\n                      </div>\n                    {{/if}}\n                  </td>\n                {{else if @regionSummary.execution.running}}\n                  {{#if (is-multi-user @regionSummary.execution.script.scriptType)}}\n                    <td class=\"text-center\">\n                      <div>Active {{@regionSummary.execution.script.scriptType}} Instances</div>\n                      <div class=\"summary-content\">{{html-safe (print-metric @regionSummary.summary 'Testable' 'activeInstances'\n                                                                 '')}}</div>\n                    </td>\n                  {{/if}}\n                  <td class=\"text-center\">\n                    <div>Active Users</div>\n                    <div class=\"summary-content\">{{html-safe (print-metric @regionSummary.summary 'Testable' 'activeConcurrentClients'\n                                                               '')}}</div>\n                  </td>\n                  <td class=\"text-center\">\n                    <div>Active Requests</div>\n                    <div class=\"summary-content\">{{html-safe (print-metric @regionSummary.summary 'Testable'  'activeRequestRate'\n                                                               'req/sec')}}</div>\n                  </td>\n                  <td class=\"text-center\">\n                    <div>Active Throughput</div>\n                    <div class=\"summary-content\">{{html-safe (print-metric @regionSummary.summary 'Testable' 'activeThroughput'\n                                                               'bytes/sec')}}</div>\n                  </td>\n                {{else if (and @regionSummary.execution.aggregated (not @regionSummary.execution.immediateContentSaved))}}\n                  <td class=\"text-center\">\n                    <div>Saving Output Files</div>\n                    <div class=\"summary-content\">\n                      {{#if (and @regionSummary.filesProgress (gt @regionSummary.filesProgress.expected 0))}}\n                        {{print-number @regionSummary.filesProgress.saved}} / {{print-number\n                            @regionSummary.filesProgress.expected}}\n                      {{else}}\n                        Saving traces, screenshots, and other output files...\n                      {{/if}}\n                    </div>\n                  </td>\n                {{else if (and @regionSummary.execution.aggregated (not @regionSummary.execution.diffsCalculated))}}\n                  <td class=\"text-center\">\n                    <div>Calculating Image Differences</div>\n                    <div class=\"summary-content\">\n                      {{#if (and @regionSummary.filesProgress (gt @regionSummary.filesProgress.savedExpectingDiff 0))}}\n                        {{print-number @regionSummary.filesProgress.diffed}} / {{print-number\n                            @regionSummary.filesProgress.savedExpectingDiff}}\n                      {{else}}\n                        Calculating image differences vs chosen basline...\n                      {{/if}}\n                    </div>\n                  </td>\n                {{else if (not @regionSummary.execution.aggregated)}}\n                  <td class=\"text-center\">\n                    <div>Aggregating</div>\n                    <div class=\"summary-content\">{{html-safe (print-metric @regionSummary.summary 'Testable'\n                                                               'processedResultDimensions' '')}} / {{html-safe (print-metric\n                          @regionSummary.summary 'Testable' 'expectedResultDimensions' '')}}</div>\n                  </td>\n                {{else if (not @regionSummary.execution.summaryCalculated)}}\n                  <td class=\"text-center\">\n                    <div>Waiting To Save</div>\n                    <div class=\"summary-content\">Waiting to save results to long term storage...</div>\n                  </td>\n                {{else if (and (not @regionSummary.execution.summarySaved)\n                               (or (eq @regionSummary.execution.numSavedSummaries 0) (eq @regionSummary.execution.numRedisSummaries 0)))}}\n                  <td class=\"text-center\">\n                    <div>Loading Aggregated Metrics</div>\n                    <div class=\"summary-content\">Preparing to save aggregated metrics...</div>\n                  </td>\n                {{else if (not @regionSummary.execution.summarySaved)}}\n                  <td class=\"text-center\">\n                    <div>Saving Aggregated Metrics</div>\n                    <div class=\"summary-content\">{{print-number @regionSummary.execution.numSavedSummaries}} /\n                      {{print-number\n                          @regionSummary.execution.numRedisSummaries}}</div>\n                  </td>\n                {{else}}\n                  <td class=\"text-center\">\n                    <div>Analyzing Results</div>\n                    <div class=\"summary-content\">Comparing results against past test executions...</div>\n                  </td>\n                {{/if}}\n              </tr>\n            </tbody>\n          </table>\n        </div>\n      </div>\n    </div>\n  {{/unless}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onNewExecution\\\"]],[30,1,[\\\"execution\\\",\\\"id\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"execution\\\",\\\"completed\\\"]]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"panel block-sub-container no-print\\\"],[14,\\\"data-sortable-id\\\",\\\"summary\\\"],[14,\\\"data-type\\\",\\\"Summary\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"btn btn-sm btn-circle btn-icon text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-expand\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"Progress\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"progress m-b-0\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[\\\"progress-bar \\\",[52,[30,2],\\\"progress-bar-danger\\\"]]]],[14,\\\"role\\\",\\\"progressbar\\\"],[15,\\\"aria-valuenow\\\",[29,[[28,[37,8],[[30,0,[\\\"percentCompleted\\\"]]],null]]]],[14,\\\"aria-valuemin\\\",\\\"0\\\"],[14,\\\"aria-valuemax\\\",\\\"100\\\"],[15,5,[28,[37,8],[[30,0,[\\\"percentCompletedStyle\\\"]]],null]],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[\\\"The test is \\\",[30,0,[\\\"percentCompleted\\\"]],\\\"% finished \\\",[52,[30,1,[\\\"execution\\\",\\\"running\\\"]],\\\"running\\\",\\\"processing results\\\"],\\\" \\\",[52,[51,[30,1,[\\\"isAll\\\"]]],\\\"in this region\\\"]]]],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,[28,[35,8],[[30,0,[\\\"percentCompleted\\\"]]],null]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"execution\\\",\\\"queued\\\"]],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Queued\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"Waiting for plan capacity to run your test...\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,1,[\\\"execution\\\",\\\"startedAt\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Starting\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"Initializing test...\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[28,[37,13],[[30,1,[\\\"hasResults\\\"]]],null],[30,1,[\\\"execution\\\",\\\"allocatingInfra\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,1,[\\\"isAll\\\"]],[30,1,[\\\"execution\\\",\\\"manualStart\\\"]],[30,1,[\\\"execution\\\",\\\"infraReady\\\"]]],null],[[[1,\\\"                    \\\"],[10,0],[12],[1,\\\"Awaiting Manual Start\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"summary-content m-t-10\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[16,\\\"disabled\\\",[30,0,[\\\"manualStartInProgress\\\"]]],[24,4,\\\"submit\\\"],[4,[38,16],[\\\"click\\\",[30,0,[\\\"manualStart\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[52,[30,0,[\\\"manualStartInProgress\\\"]],\\\"Starting...\\\",\\\"Start Now...\\\"]],[1,\\\"\\\\n                        \\\"],[13],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,0],[12],[1,\\\"Provisioning\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"isOnDemand\\\"]],[[[1,\\\"                        Provisioning infrastructure, \\\"],[1,[30,1,[\\\"instancesText\\\"]]],[1,\\\"...\\\\n\\\"],[41,[28,[37,14],[[30,1,[\\\"isAll\\\"]],[28,[37,18],[[30,1,[\\\"instanceCounts\\\",\\\"connected\\\"]],0],null]],null],[[[1,\\\"                          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                          \\\"],[11,\\\"button\\\"],[24,0,\\\"m-t-10 btn btn-sm btn-primary\\\"],[16,\\\"disabled\\\",[30,0,[\\\"manualStartInProgress\\\"]]],[24,4,\\\"submit\\\"],[4,[38,16],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"manualStart\\\"]],true],null]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                              \\\"],[1,[52,[30,0,[\\\"manualStartInProgress\\\"]],\\\"Force Starting...\\\",\\\"Force Start Before All Test Runners Are Up...\\\"]],[1,\\\"\\\\n                            \\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"                        Provisioning infrastructure...\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"execution\\\",\\\"running\\\"]],[[[41,[28,[37,21],[[30,1,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]]],null],[[[1,\\\"                  \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[12],[1,\\\"Active \\\"],[1,[30,1,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instances\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"activeInstances\\\",\\\"\\\"],null]],null]],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Active Users\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"activeConcurrentClients\\\",\\\"\\\"],null]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Active Requests\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"activeRequestRate\\\",\\\"req/sec\\\"],null]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Active Throughput\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"activeThroughput\\\",\\\"bytes/sec\\\"],null]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[30,1,[\\\"execution\\\",\\\"aggregated\\\"]],[28,[37,13],[[30,1,[\\\"execution\\\",\\\"immediateContentSaved\\\"]]],null]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Saving Output Files\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,1,[\\\"filesProgress\\\"]],[28,[37,18],[[30,1,[\\\"filesProgress\\\",\\\"expected\\\"]],0],null]],null],[[[1,\\\"                      \\\"],[1,[28,[35,23],[[30,1,[\\\"filesProgress\\\",\\\"saved\\\"]]],null]],[1,\\\" / \\\"],[1,[28,[35,23],[[30,1,[\\\"filesProgress\\\",\\\"expected\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      Saving traces, screenshots, and other output files...\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[30,1,[\\\"execution\\\",\\\"aggregated\\\"]],[28,[37,13],[[30,1,[\\\"execution\\\",\\\"diffsCalculated\\\"]]],null]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Calculating Image Differences\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,1,[\\\"filesProgress\\\"]],[28,[37,18],[[30,1,[\\\"filesProgress\\\",\\\"savedExpectingDiff\\\"]],0],null]],null],[[[1,\\\"                      \\\"],[1,[28,[35,23],[[30,1,[\\\"filesProgress\\\",\\\"diffed\\\"]]],null]],[1,\\\" / \\\"],[1,[28,[35,23],[[30,1,[\\\"filesProgress\\\",\\\"savedExpectingDiff\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      Calculating image differences vs chosen basline...\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,1,[\\\"execution\\\",\\\"aggregated\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Aggregating\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"processedResultDimensions\\\",\\\"\\\"],null]],null]],[1,\\\" / \\\"],[1,[28,[35,8],[[28,[37,22],[[30,1,[\\\"summary\\\"]],\\\"Testable\\\",\\\"expectedResultDimensions\\\",\\\"\\\"],null]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,1,[\\\"execution\\\",\\\"summaryCalculated\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Waiting To Save\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"Waiting to save results to long term storage...\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[28,[37,13],[[30,1,[\\\"execution\\\",\\\"summarySaved\\\"]]],null],[28,[37,24],[[28,[37,25],[[30,1,[\\\"execution\\\",\\\"numSavedSummaries\\\"]],0],null],[28,[37,25],[[30,1,[\\\"execution\\\",\\\"numRedisSummaries\\\"]],0],null]],null]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Loading Aggregated Metrics\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"Preparing to save aggregated metrics...\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,1,[\\\"execution\\\",\\\"summarySaved\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Saving Aggregated Metrics\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,[28,[35,23],[[30,1,[\\\"execution\\\",\\\"numSavedSummaries\\\"]]],null]],[1,\\\" /\\\\n                    \\\"],[1,[28,[35,23],[[30,1,[\\\"execution\\\",\\\"numRedisSummaries\\\"]]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"Analyzing Results\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"summary-content\\\"],[12],[1,\\\"Comparing results against past test executions...\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@regionSummary\\\",\\\"@hasErrors\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"unless\\\",\\\"div\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"if\\\",\\\"html-safe\\\",\\\"table\\\",\\\"tbody\\\",\\\"tr\\\",\\\"td\\\",\\\"not\\\",\\\"and\\\",\\\"button\\\",\\\"on\\\",\\\"strong\\\",\\\"gt\\\",\\\"br\\\",\\\"fn\\\",\\\"is-multi-user\\\",\\\"print-metric\\\",\\\"print-number\\\",\\\"or\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-progress.hbs\",\n    \"isStrictMode\": false\n  });\n  function executionPercentCompleted(execution, regionSummaries, now) {\n    let regionCount = regionSummaries.length - 1;\n    let total = 0;\n    _.forEach(regionSummaries, regionSummary => {\n      if (!regionSummary.isAll) {\n        total += regionPercentCompleted(regionSummary, now);\n      }\n    });\n    return Math.round(total / regionCount);\n  }\n  function regionPercentCompleted(regionSummary, now) {\n    let region = regionSummary.executionRegion;\n    let iterationsExecuted = regionSummary.summary ? regionSummary.summary.iterationsExecuted : 0;\n    if (region.running) {\n      return 5 + getProgress(now, region.startedAt, region.expectedResultCount, iterationsExecuted, regionSummary.execution);\n    } else if (regionSummary.isOnDemand && !region.allocated) {\n      let instances = regionSummary.instances,\n        instanceCounts = regionSummary.instanceCounts;\n      return instances.length > 0 ? Math.round(100 * (instanceCounts.connected + instanceCounts.errors) / instanceCounts.total) : 0;\n    } else if (region.completed) {\n      return 100;\n    } else {\n      return regionSummary.execution.running ? 5 : 0;\n    }\n  }\n  function getProgress(now, startedAt, expectedResultCount, iterationsExecuted, execution) {\n    if (_.isNumber(execution.durationSecs) && !_.isUndefined(startedAt)) {\n      return Math.min(95, Math.round(95 * (moment.duration(now.diff(moment(startedAt))).asSeconds() - 5) / (execution.durationSecs + (execution.rampupSecs || 0))));\n    } else {\n      return _.isUndefined(expectedResultCount) || expectedResultCount === 0 ? 5 : Math.min(95, Math.round(95 * iterationsExecuted / expectedResultCount));\n    }\n  }\n  function processingResultsPercentCompleted(execution, count, expected) {\n    if (!_.isUndefined(execution.finishedAt) && !execution.summaryCalculated) {\n      if (expected && expected > 0) {\n        return Math.min(100, Math.round(100 * count / expected));\n      } else if (count > 0) {\n        return 100;\n      } else {\n        return 5;\n      }\n    } else if (execution.summaryCalculated) {\n      return 100;\n    }\n    return 0;\n  }\n  function getPercentCompleted(saved, total) {\n    if (!_.isNumber(saved) || !_.isNumber(total)) {\n      return 0;\n    }\n    return Math.max(5, Math.round(100 * saved / total));\n  }\n  let ExecutionProgress = _exports.default = (_dec = (0, _object.computed)('args.regionSummary.execution.{completed,finishedAt,running,aggregated}'), _dec2 = (0, _object.computed)('args.regionSummary.execution.{summaryCalculated,summarySaved}'), _dec3 = (0, _object.computed)('calculatingDiffsPercentCompleted', 'executionPercentCompleted', 'processingResults', 'processingResultsPercentCompleted', 'regionPercentCompleted', 'args.regionSummary.execution.{diffsCalculated,finishedAt,immediateContentSaved,running}', 'args.regionSummary.isAll', 'savingImmediateContentPercentCompleted', 'savingSummaries', 'savingSummariesPercentCompleted'), _dec4 = (0, _object.computed)('percentCompleted'), _dec5 = (0, _object.computed)('args.now', 'args.regionSummaries.@each.{instances,summary,executionRegion}', 'args.regionSummary.execution.allocatingInfra'), _dec6 = (0, _object.computed)('args.now', 'args.regionSummary.executionRegion.{allocated,expectedResultCount,finishedAt,startedAt}', 'args.regionSummary.{execution,summary}'), _dec7 = (0, _object.computed)('args.regionSummary.execution.{finishedAt,summaryCalculated}', 'args.regionSummary.summary.{expectedResultDimensions,processedResultDimensions}'), _dec8 = (0, _object.computed)('args.regionSummary.execution.{numSavedSummaries,numRedisSummaries}'), _dec9 = (0, _object.computed)('args.regionSummary.filesProgress.{saved,expected}'), _dec0 = (0, _object.computed)('args.regionSummary.filesProgress.{diffed,savedExpectingDiff}'), _class = class ExecutionProgress extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"manualStartInProgress\", _descriptor, this);\n    }\n    get processingResults() {\n      return !this.args.regionSummary?.execution?.running && !_.isUndefined(this.args.regionSummary?.execution?.finishedAt) && !this.args.regionSummary?.execution?.aggregated;\n    }\n    get savingSummaries() {\n      return this.args.regionSummary?.execution?.summaryCalculated && !this.args.regionSummary?.execution?.summarySaved;\n    }\n    get percentCompleted() {\n      if (this.args.regionSummary?.execution?.running) {\n        return this.args.regionSummary?.isAll ? this.executionPercentCompleted : this.regionPercentCompleted;\n      } else if (this.processingResults) {\n        return this.processingResultsPercentCompleted;\n      } else if (!this.args.regionSummary?.execution?.immediateContentSaved) {\n        return this.savingImmediateContentPercentCompleted;\n      } else if (!this.args.regionSummary?.execution?.diffsCalculated) {\n        return this.calculatingDiffsPercentCompleted;\n      } else if (this.savingSummaries) {\n        return this.savingSummariesPercentCompleted;\n      } else if (_.isUndefined(this.args.regionSummary?.execution?.finishedAt)) {\n        return 0;\n      }\n      return 100;\n    }\n    get percentCompletedStyle() {\n      return 'width: ' + this.percentCompleted + '%';\n    }\n    get executionPercentCompleted() {\n      return executionPercentCompleted(this.args.regionSummary?.execution, this.args.regionSummaries, this.args.now);\n    }\n    get regionPercentCompleted() {\n      return regionPercentCompleted(this.args.regionSummary, this.args.now);\n    }\n    get processingResultsPercentCompleted() {\n      return processingResultsPercentCompleted(this.args.regionSummary?.execution, this.args.regionSummary?.summary?.processedResultDimensions, this.args.regionSummary?.summary?.expectedResultDimensions);\n    }\n    get savingSummariesPercentCompleted() {\n      return getPercentCompleted(this.args.regionSummary?.execution?.numSavedSummaries, this.args.regionSummary?.execution?.numRedisSummaries);\n    }\n    get savingImmediateContentPercentCompleted() {\n      return getPercentCompleted(this.args.regionSummary?.filesProgress?.saved, this.args.regionSummary?.filesProgress?.expected);\n    }\n    get calculatingDiffsPercentCompleted() {\n      return getPercentCompleted(this.args.regionSummary?.filesProgress?.diffed, this.args.regionSummary?.filesProgress?.savedExpectingDiff);\n    }\n    doManualStart() {\n      const self = this;\n      this.manualStartInProgress = true;\n      _server.default.manualStart(self.args.regionSummary?.execution?.id).then(() => {\n        _lib.default.info('Force starting test...');\n      }, () => {\n        self.manualStartInProgress = false;\n      });\n    }\n    manualStart(isPartial) {\n      if (isPartial) {\n        _lib.default.confirm('Are you sure you want to start the test before all test runners are up and running?', 'Force Start', () => {\n          this.doManualStart();\n        }, 'I\\'ll Wait');\n      } else {\n        this.doManualStart();\n      }\n    }\n    onNewExecution() {\n      this.manualStartInProgress = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"manualStartInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"processingResults\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"processingResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"savingSummaries\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"savingSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"percentCompleted\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"percentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"percentCompletedStyle\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"percentCompletedStyle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"executionPercentCompleted\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"executionPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionPercentCompleted\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"regionPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"processingResultsPercentCompleted\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"processingResultsPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"savingSummariesPercentCompleted\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"savingSummariesPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"savingImmediateContentPercentCompleted\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"savingImmediateContentPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"calculatingDiffsPercentCompleted\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"calculatingDiffsPercentCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"manualStart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"manualStart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onNewExecution\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onNewExecution\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionProgress);\n});","define(\"@testable/shared-ui/components/execution-region-suite-results\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/suite-utils\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _trackedBuiltIns, _lib, _suiteUtils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/suite-utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.suiteResultsLoaded}}\n    <div class=\"panel block-sub-container\" id=\"suiteResults\" data-sortable-id=\"suiteSummaries\" data-type=\"SuiteSummaries\"\n         {{did-insert @onSuiteImagesLoaded}}>\n      <div role=\"tab\" class=\"panel-heading {{if @isRemovable 'block-sub-container-target'}}\">\n        <h4 class=\"panel-title\">\n          <a href=\"javascript:\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-click=\"panel-collapse\">\n            <Ui::Icon @icon=\"fa fa-minus\" /></a>\n          <strong>Assertions {{#unless @comparisonId}}({{this.aggregatedSuiteSummaries.tests}}){{/unless}}</strong>\n        </h4>\n        <SuiteSummaryHeader @suitesSummary={{this.aggregatedSuiteSummaries}}\n                            @hasDuration={{this.suiteResultsHasDuration}}\n                            @isRemovable={{@isRemovable}}\n                            @removePanel={{@removePanel}}\n                            @hideStats={{@comparisonId}}\n                            @isViewer={{@isViewer}}\n                            @openSuiteSummaryDownloadUrl={{fn this.openSuiteSummaryDownloadUrl false}}\n        />\n      </div>\n      <div class=\"panel-body no-padding {{if @isPrint '' 'panel-500'}}\">\n        <div class=\"p-15\">\n  \n        <ExecutionRegionSuiteSummary @title=\"Current Test\"\n                                     @regionSummaries={{@regionSummaries}}\n                                     @suiteResultsHasDuration={{not @isMultiUser}}\n                                     @selectedRegion={{this.selectedRegion}}\n                                     @updateSelectedRegion={{fn (mut this.selectedRegion)}}\n                                     @isComparison={{@comparisonId}}\n                                     @scriptType={{@scriptType}}\n                                     @aggregatedSuiteSummaries={{this.aggregatedSuiteSummaries}}\n                                     @onloadImages={{@onSuiteImagesLoaded}}\n                                     @runInProgress={{not @model.completed}}\n                                     @openSuiteSummaryDownloadUrl={{fn this.openSuiteSummaryDownloadUrl false}}\n        />\n        {{#if (and @comparisonId (or (eq @regionName 'ALL') @regionBaselineId)) }}\n          <span class=\"d-none\" {{did-insert @onBaselineSuiteImagesLoaded}}></span>\n          <ExecutionRegionSuiteSummary @title=\"Baseline Test\"\n                                       @regionSummaries={{@regionSummariesBaseline}}\n                                       @suiteResultsHasDuration={{not @isMultiUser}}\n                                       @selectedRegion={{this.selectedRegionBaseline}}\n                                       @updateSelectedRegion={{fn (mut this.selectedRegionBaseline)}}\n                                       @isComparison={{true}}\n                                       @scriptType={{@scriptType}}\n                                       @onloadImages={{@onBaselineSuiteImagesLoaded}}\n                                       @aggregatedSuiteSummaries={{this.aggregatedSuiteSummariesBaseline}}\n                                       @openSuiteSummaryDownloadUrl={{fn this.openSuiteSummaryDownloadUrl true}}\n          />\n        {{/if}}\n  \n        </div>\n      </div>\n    </div>\n  \n  {{else}}\n    <span class=\"lead\">Loading assertions...</span>\n  {{/if}}\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"suiteResultsLoaded\\\"]],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"panel block-sub-container\\\"],[24,1,\\\"suiteResults\\\"],[24,\\\"data-sortable-id\\\",\\\"suiteSummaries\\\"],[24,\\\"data-type\\\",\\\"SuiteSummaries\\\"],[4,[38,2],[[30,1]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,\\\"role\\\",\\\"tab\\\"],[15,0,[29,[\\\"panel-heading \\\",[52,[30,2],\\\"block-sub-container-target\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-collapse\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Assertions \\\"],[41,[51,[30,3]],[[[1,\\\"(\\\"],[1,[30,0,[\\\"aggregatedSuiteSummaries\\\",\\\"tests\\\"]]],[1,\\\")\\\"]],[]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,8],null,[[\\\"@suitesSummary\\\",\\\"@hasDuration\\\",\\\"@isRemovable\\\",\\\"@removePanel\\\",\\\"@hideStats\\\",\\\"@isViewer\\\",\\\"@openSuiteSummaryDownloadUrl\\\"],[[30,0,[\\\"aggregatedSuiteSummaries\\\"]],[30,0,[\\\"suiteResultsHasDuration\\\"]],[30,2],[30,4],[30,3],[30,5],[28,[37,9],[[30,0,[\\\"openSuiteSummaryDownloadUrl\\\"]],false],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"panel-body no-padding \\\",[52,[30,6],\\\"\\\",\\\"panel-500\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"p-15\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,10],null,[[\\\"@title\\\",\\\"@regionSummaries\\\",\\\"@suiteResultsHasDuration\\\",\\\"@selectedRegion\\\",\\\"@updateSelectedRegion\\\",\\\"@isComparison\\\",\\\"@scriptType\\\",\\\"@aggregatedSuiteSummaries\\\",\\\"@onloadImages\\\",\\\"@runInProgress\\\",\\\"@openSuiteSummaryDownloadUrl\\\"],[\\\"Current Test\\\",[30,7],[28,[37,11],[[30,8]],null],[30,0,[\\\"selectedRegion\\\"]],[28,[37,9],[[28,[37,12],[[30,0,[\\\"selectedRegion\\\"]]],null]],null],[30,3],[30,9],[30,0,[\\\"aggregatedSuiteSummaries\\\"]],[30,1],[28,[37,11],[[30,10,[\\\"completed\\\"]]],null],[28,[37,9],[[30,0,[\\\"openSuiteSummaryDownloadUrl\\\"]],false],null]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,3],[28,[37,14],[[28,[37,15],[[30,11],\\\"ALL\\\"],null],[30,12]],null]],null],[[[1,\\\"        \\\"],[11,1],[24,0,\\\"d-none\\\"],[4,[38,2],[[30,13]],null],[12],[13],[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@title\\\",\\\"@regionSummaries\\\",\\\"@suiteResultsHasDuration\\\",\\\"@selectedRegion\\\",\\\"@updateSelectedRegion\\\",\\\"@isComparison\\\",\\\"@scriptType\\\",\\\"@onloadImages\\\",\\\"@aggregatedSuiteSummaries\\\",\\\"@openSuiteSummaryDownloadUrl\\\"],[\\\"Baseline Test\\\",[30,14],[28,[37,11],[[30,8]],null],[30,0,[\\\"selectedRegionBaseline\\\"]],[28,[37,9],[[28,[37,12],[[30,0,[\\\"selectedRegionBaseline\\\"]]],null]],null],true,[30,9],[30,13],[30,0,[\\\"aggregatedSuiteSummariesBaseline\\\"]],[28,[37,9],[[30,0,[\\\"openSuiteSummaryDownloadUrl\\\"]],true],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading assertions...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"]],[\\\"@onSuiteImagesLoaded\\\",\\\"@isRemovable\\\",\\\"@comparisonId\\\",\\\"@removePanel\\\",\\\"@isViewer\\\",\\\"@isPrint\\\",\\\"@regionSummaries\\\",\\\"@isMultiUser\\\",\\\"@scriptType\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@onBaselineSuiteImagesLoaded\\\",\\\"@regionSummariesBaseline\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"unless\\\",\\\"suite-summary-header\\\",\\\"fn\\\",\\\"execution-region-suite-summary\\\",\\\"not\\\",\\\"mut\\\",\\\"and\\\",\\\"or\\\",\\\"eq\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-region-suite-results.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExecutionRegionSuiteResultsComponent = _exports.default = (_class = class ExecutionRegionSuiteResultsComponent extends _component2.default {\n    get suiteResultsHasDuration() {\n      return !this.args.isMultiUser;\n    }\n    get aggregatedSuiteSummaries() {\n      return _suiteUtils.default.aggregateAllSuiteSummaries(_.map(this.args.regionSummaries, function (regionSummary) {\n        return regionSummary.suitesSummary;\n      }));\n    }\n    get aggregatedSuiteSummariesBaseline() {\n      return _suiteUtils.default.aggregateAllSuiteSummaries(_.map(this.args.regionSummariesBaseline, function (regionSummary) {\n        return regionSummary.suitesSummary;\n      }));\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"suiteResultsLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedRegion\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedRegionBaseline\", _descriptor3, this);\n      this.loadSuiteResults(this.args.regionSummaries, 'selectedRegion');\n      if (this.args.comparisonId) {\n        this.loadSuiteResults(this.args.regionSummariesBaseline, 'selectedRegionBaseline');\n      }\n    }\n    loadSuiteResults(regionSummaries, selectedRegion) {\n      const isBaseline = selectedRegion === 'selectedRegionBaseline';\n      if (regionSummaries.length === 0) {\n        this.suiteResultsLoaded = true;\n        return;\n      }\n      this.suiteResultsLoaded = false;\n      const isAll = this.args.isAll;\n      const regionSummariesById = {};\n      _.forEach(regionSummaries, regionSummary => {\n        regionSummariesById[regionSummary.executionRegion.id] = regionSummary;\n      });\n      const regionSummary = regionSummaries[0];\n      this[selectedRegion] = regionSummaries[0];\n      let path = regionSummary.execution.uuid ? '/p/' + regionSummary.execution.uuid : '/executions/' + regionSummary.execution.id;\n      if (!isAll) {\n        path += '/regions/' + regionSummary.executionRegion.id;\n      }\n      path += '/suite-results';\n      const _this = this;\n      const params = {};\n      if (regionSummary.execution.uuid && isBaseline) {\n        params.comparison = true;\n      }\n      $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(path, params),\n        contentType: 'application/json; charset=utf-8'\n      }).then(function (results) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        if (_this.args.overallModel?.isParent) {\n          regionSummary.suiteResults = new _trackedBuiltIns.TrackedArray(_lib.default.toTrackedObjects(results));\n        } else {\n          const regionSummariesById = {};\n          _.forEach(regionSummaries, regionSummary => {\n            regionSummariesById[regionSummary.executionRegion.id] = regionSummary;\n          });\n          const resultsByRegionId = _.groupBy(results, result => {\n            return result.executionRegionId;\n          });\n          _.forEach(resultsByRegionId, (regionResults, executionRegionId) => {\n            const regionSummary = regionSummariesById[executionRegionId];\n            if (regionSummary) {\n              regionSummary.suiteResults = new _trackedBuiltIns.TrackedArray(_lib.default.toTrackedObjects(regionResults));\n            }\n          });\n        }\n        _this.suiteResultsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        _.forEach(regionSummaries, regionSummary => {\n          regionSummary.suiteResults = new _trackedBuiltIns.TrackedArray([]);\n        });\n        _this.suiteResultsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    openSuiteSummaryDownloadUrl(isBaseline) {\n      let isAll = this.args.regionName === 'ALL';\n      const model = isBaseline ? this.args.regionSummaryBaseline : this.args.model;\n      const overallModel = isBaseline ? this.args.baselineExecution : this.args.overallModel;\n      const executionId = model.execution.id;\n      const regionId = isBaseline ? this.args.regionBaselineId : model.executionRegion.id;\n      let url = overallModel.uuid ? '/p/' + overallModel.uuid : '/executions/' + executionId;\n      if (!isAll) {\n        url += '/regions/' + regionId;\n      }\n      url += '/suite-results.csv';\n      const params = {};\n      if (isBaseline && overallModel.uuid) {\n        params.comparison = true;\n      }\n      window.open(_lib.default.toUrl(url, params), '_blank');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"suiteResultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegionBaseline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"openSuiteSummaryDownloadUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openSuiteSummaryDownloadUrl\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionRegionSuiteResultsComponent);\n});","define(\"@testable/shared-ui/components/execution-region-suite-summary\", [\"exports\", \"@ember/component\", \"ember-concurrency/async-arrow-runtime\", \"@glimmer/component\", \"@glimmer/tracking\", \"ember-concurrency\", \"@ember/template-factory\"], function (_exports, _component, _asyncArrowRuntime, _component2, _tracking, _emberConcurrency, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"ember-concurrency/async-arrow-runtime\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"ember-concurrency\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isComparison}}\n    <div class=\"d-flex justify-content-between\">\n      <div class=\"mb-1\"><strong>{{@title}}</strong></div>\n      <SuiteSummaryHeader @suitesSummary={{@aggregatedSuiteSummaries}}\n                            @hasDuration={{@suiteResultsHasDuration}}\n                            @openSuiteSummaryDownloadUrl={{@openSuiteSummaryDownloadUrl}}\n                            @isRemovable={{false}}\n        />\n    </div>\n  {{/if}}\n  \n  {{#if (gt @regionSummaries.length 1)}}\n    <Ui::PSelect class=\"no-print\"\n                 @options={{@regionSummaries}}\n                 @selected={{@selectedRegion}}\n                 @onChange={{@updateSelectedRegion}} as |regionSummary|>\n  \n      <h5 class=\"inline-block\">{{regionSummary.regionDescription}}</h5>\n      <div class=\"inline-block f-s-12 f-w-300 m-l-10\">\n        {{#if (and @suiteResultsHasDuration regionSummary.suitesSummary.duration)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Duration\" class=\"m-r-15\">\n            {{print-number regionSummary.suitesSummary.duration}} ms\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @icon=\"fa fa-lg fa-tasks\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests\" class=\"m-r-15 m-r-5\">\n          {{print-number regionSummary.suitesSummary.tests}}\n        </Ui::Icon>\n        {{#if (gt regionSummary.suitesSummary.pending 0)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-spinner fa-spin\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests In Progress\" class=\"m-r-15\" >\n            {{print-number regionSummary.suitesSummary.pending}}\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Passed\" class=\"green m-r-15\" >\n          {{print-number regionSummary.suitesSummary.passed}}\n        </Ui::Icon>\n        <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Failed\" class=\"red m-r-15\">\n          {{print-number regionSummary.suitesSummary.failed}}\n        </Ui::Icon>\n        {{#if (gt regionSummary.suitesSummary.skipped 0)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Skipped\" class=\"m-r-15\">\n            {{print-number regionSummary.suitesSummary.skipped}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (gt regionSummary.suitesSummary.na 0)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests N/A\" class=\"m-r-5\">\n            {{print-number regionSummary.suitesSummary.na}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (gt regionSummary.suitesSummary.retried 0)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Test Retries\" class=\"m-r-5\">\n            {{print-number regionSummary.suitesSummary.retried}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (and (gt regionSummary.suitesSummary.files 0) (not-eq regionSummary.suitesSummary.files regionSummary.suitesSummary.images))}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Files Captured\" class=\"m-r-5\">\n            {{print-number regionSummary.suitesSummary.files}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (gt regionSummary.suitesSummary.images 0)}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15\">\n            {{print-number regionSummary.suitesSummary.images}}\n          </Ui::Icon>\n        {{/if}}\n      </div>\n    </Ui::PSelect>\n  {{/if}}\n  <div class=\"d-flex justify-content-between m-t-5 no-print\">\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\">\n      <BsButtonGroup @value={{this.viewAssertionsToggle}} @type=\"radio\" @onChange={{fn (mut this.viewAssertionsToggle)}} as\n                      |bg|>\n        <bg.button @type=\"success\" @value=\"all\" @size=\"xs\">All ({{@aggregatedSuiteSummaries.tests}})</bg.button>\n        <bg.button @type=\"success\" @value=\"errors\" @size=\"xs\">Errors Only ({{@aggregatedSuiteSummaries.failed}})</bg.button>\n      </BsButtonGroup>\n    </div>\n    <div class=\"w-max-content\">\n      <div class=\"input-group\">\n        <span class=\"input-group-prepend\"><Ui::Icon class=\"input-group-text\" @icon=\"fa fa-search\" /></span>\n        <Input\n          @type=\"text\"\n          {{on \"keyup\" (perform this.onChangeFilter)}}\n          placeholder=\"Search...\"\n          class=\"form-control\" />\n      </div>\n    </div>\n  </div>\n  {{#each this.regionSummaries as |regionSummary|}}\n    {{#if (eq regionSummary @selectedRegion)}}\n      <div class=\"m-b-20\">\n        <div class=\"m-t-5\">\n          <SuiteResultSummaries\n            @suiteResultSummaries={{if this.filtered regionSummary.suiteResultSummariesFiltered regionSummary.suiteResultSummaries}}\n            @hasDuration={{@suiteResultsHasDuration}}\n            @onloadImages={{@onloadImages}}\n            @isComparison={{@isComparison}}\n            @runInProgress={{@runInProgress}}\n            @uuid={{regionSummary.execution.uuid}}\n            @scriptType={{@scriptType}}\n            @filterResults={{this.viewAssertionsToggle}}\n          />\n        </div>\n      </div>\n    {{/if}}\n  {{else}}\n    <span {{did-insert @onloadImages}}></span>\n  {{/each}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"d-flex justify-content-between\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"mb-1\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,2]],[13],[13],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@suitesSummary\\\",\\\"@hasDuration\\\",\\\"@openSuiteSummaryDownloadUrl\\\",\\\"@isRemovable\\\"],[[30,3],[30,4],[30,5],false]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,6,[\\\"length\\\"]],1],null],[[[1,\\\"  \\\"],[8,[39,5],[[24,0,\\\"no-print\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,6],[30,7],[30,8]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n    \\\"],[10,\\\"h5\\\"],[14,0,\\\"inline-block\\\"],[12],[1,[30,9,[\\\"regionDescription\\\"]]],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"inline-block f-s-12 f-w-300 m-l-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,4],[30,9,[\\\"suitesSummary\\\",\\\"duration\\\"]]],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Duration\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"duration\\\"]]],null]],[1,\\\" ms\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests\\\"],[24,0,\\\"m-r-15 m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-tasks\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"tests\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"pending\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests In Progress\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"pending\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Passed\\\"],[24,0,\\\"green m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"passed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Failed\\\"],[24,0,\\\"red m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"failed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"skipped\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Skipped\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"skipped\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"na\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests N/A\\\"],[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"na\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"retried\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Retries\\\"],[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"retried\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,7],[[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"files\\\"]],0],null],[28,[37,10],[[30,9,[\\\"suitesSummary\\\",\\\"files\\\"]],[30,9,[\\\"suitesSummary\\\",\\\"images\\\"]]],null]],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Files Captured\\\"],[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"files\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,9,[\\\"suitesSummary\\\",\\\"images\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,9],[[30,9,[\\\"suitesSummary\\\",\\\"images\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[9]]]]],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[14,0,\\\"d-flex justify-content-between m-t-5 no-print\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,11],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewAssertionsToggle\\\"]],\\\"radio\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"viewAssertionsToggle\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"All (\\\"],[1,[30,3,[\\\"tests\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Errors Only (\\\"],[1,[30,3,[\\\"failed\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[10]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"w-max-content\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,8],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[8,[39,15],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"],[4,[38,16],[\\\"keyup\\\",[28,[37,17],[[30,0,[\\\"onChangeFilter\\\"]]],null]],null]],[[\\\"@type\\\"],[\\\"text\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,19],[[28,[37,19],[[30,0,[\\\"regionSummaries\\\"]]],null]],null],null,[[[41,[28,[37,20],[[30,11],[30,7]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-b-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,21],null,[[\\\"@suiteResultSummaries\\\",\\\"@hasDuration\\\",\\\"@onloadImages\\\",\\\"@isComparison\\\",\\\"@runInProgress\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@filterResults\\\"],[[52,[30,0,[\\\"filtered\\\"]],[30,11,[\\\"suiteResultSummariesFiltered\\\"]],[30,11,[\\\"suiteResultSummaries\\\"]]],[30,4],[30,12],[30,1],[30,13],[30,11,[\\\"execution\\\",\\\"uuid\\\"]],[30,14],[30,0,[\\\"viewAssertionsToggle\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[11]],[[[1,\\\"  \\\"],[11,1],[4,[38,22],[[30,12]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"@aggregatedSuiteSummaries\\\",\\\"@suiteResultsHasDuration\\\",\\\"@openSuiteSummaryDownloadUrl\\\",\\\"@regionSummaries\\\",\\\"@selectedRegion\\\",\\\"@updateSelectedRegion\\\",\\\"regionSummary\\\",\\\"bg\\\",\\\"regionSummary\\\",\\\"@onloadImages\\\",\\\"@runInProgress\\\",\\\"@scriptType\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"suite-summary-header\\\",\\\"gt\\\",\\\"ui/p-select\\\",\\\"h5\\\",\\\"and\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"not-eq\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"span\\\",\\\"input\\\",\\\"on\\\",\\\"perform\\\",\\\"each\\\",\\\"-track-array\\\",\\\"eq\\\",\\\"suite-result-summaries\\\",\\\"did-insert\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-region-suite-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExecutionRegionSuiteSummaryComponent = _exports.default = (_class = class ExecutionRegionSuiteSummaryComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"summaryFilter\", _descriptor, this);\n      _initializerDefineProperty(this, \"viewAssertionsToggle\", _descriptor2, this);\n      _defineProperty(this, \"onChangeFilter\", (0, _asyncArrowRuntime.buildTask)(() => ({\n        context: this,\n        generator: function* (event) {\n          yield (0, _emberConcurrency.timeout)(300);\n          this.summaryFilter = event.target.value;\n        }\n      }), {\n        restartable: true\n      }, \"onChangeFilter\", null));\n    }\n    get filtered() {\n      return this.summaryFilter || this.viewAssertionsToggle === 'errors';\n    }\n    get regionSummaries() {\n      const filter = this.summaryFilter.toLowerCase();\n      const errorOnly = this.viewAssertionsToggle === 'errors';\n      const regionSummaries = this.args.regionSummaries;\n      if (this.filtered) {\n        return regionSummaries.flatMap(regionSummary => {\n          const suiteResultSummariesFiltered = regionSummary.suiteResultSummaries.flatMap(summary => {\n            const suite = summary.suiteResult?.suite;\n            const testResults = summary.suiteResult?.testResults || [];\n            const matchingParent = filter && suite ? suite.name.toLowerCase().includes(filter.toLowerCase()) : false;\n            let matchingChildren = testResults.filter(testResult => {\n              const matchesFilter = filter ? matchingParent || testResult.suiteTest.name.toLowerCase().includes(filter.toLowerCase()) : true;\n              const matchesError = errorOnly ? !!testResult.error : true;\n              return matchesFilter && matchesError;\n            });\n            if (matchingChildren.length === 0) return null;\n            return {\n              ...summary,\n              suiteResult: {\n                ...summary.suiteResult,\n                testResults: matchingChildren\n              }\n            };\n          }).filter(Boolean);\n          if (suiteResultSummariesFiltered.length === 0) return null;\n          regionSummary.suiteResultSummariesFiltered = suiteResultSummariesFiltered;\n          return regionSummary;\n        }).filter(Boolean);\n      } else {\n        return regionSummaries;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"summaryFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"viewAssertionsToggle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionRegionSuiteSummaryComponent);\n});","define(\"@testable/shared-ui/components/execution-results\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isComparison}}\n    <div class=\"mb-1\"><strong>{{@title}}</strong></div>\n  {{/if}}\n  {{#if this.resultsLoaded}}\n    {{#if (and @overallModel.completed (gt this.resultCount this.maxResults))}}\n      <span class=\"semi-bold\">Only displaying the first {{print-number this.maxResults}} of {{print-number this.resultCount}} total results. To view all results <a\n              href=\"{{this.exportToCsvUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> export to CSV</a>.</span>\n    {{/if}}\n    {{#if @overallModel.completed}}\n      <BsButtonGroup class=\"no-print\" @value={{this.resultsFilter}} @type=\"radio\" @onChange={{fn (mut this.resultsFilter)}} as |bg|>\n        <bg.button @type=\"success\" @value=\"all\" @size=\"sm\">All ({{print-number\n                this.results.length}})</bg.button>\n        <bg.button @type=\"success\" @value=\"errors\" @size=\"sm\">Errors Only ({{print-number\n                this.errorResultCount}})</bg.button>\n      </BsButtonGroup>\n      <br/>\n    {{/if}}\n    <GridSearch @onSearch={{fn (mut this.search)}} />\n    <div class=\"m-t-20\">(Double click a row to view all metrics, the full request/response, and more)</div>\n    <ResultsTimelineGrid @id={{@id}}\n                         @dblClickToSelect={{true}}\n                         @hideOverallResult={{true}}\n                         @hideTraceColumn={{true}}\n                         @results={{this.results}}\n                         @scriptType={{@model.execution.script.scriptType}}\n                         @search={{this.search}}\n                         @resultsFilter={{this.resultsFilter}}\n                         @isPrint={{@isPrint}}\n                         @maxResults={{this.maxResults}}\n                         @resultSelected={{this.resultSelected}} />\n  {{else}}\n    Loading results...\n  {{/if}}\n  \n  {{#if this.showResultModal}}\n    <ResultModal @resultId={{this.selectedResultId}}\n                 @uuid={{@model.execution.uuid}}\n                 @scriptType={{@model.execution.script.scriptType}}\n                 @modalClosed={{this.resultModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-1\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,2]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"resultsLoaded\\\"]],[[[41,[28,[37,3],[[30,3,[\\\"completed\\\"]],[28,[37,4],[[30,0,[\\\"resultCount\\\"]],[30,0,[\\\"maxResults\\\"]]],null]],null],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Only displaying the first \\\"],[1,[28,[35,6],[[30,0,[\\\"maxResults\\\"]]],null]],[1,\\\" of \\\"],[1,[28,[35,6],[[30,0,[\\\"resultCount\\\"]]],null]],[1,\\\" total results. To view all results \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportToCsvUrl\\\"]]]]],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" export to CSV\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3,[\\\"completed\\\"]],[[[1,\\\"    \\\"],[8,[39,9],[[24,0,\\\"no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"resultsFilter\\\"]],\\\"radio\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"resultsFilter\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,4,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"All (\\\"],[1,[28,[35,6],[[30,0,[\\\"results\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,4,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Errors Only (\\\"],[1,[28,[35,6],[[30,0,[\\\"errorResultCount\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[4]]]]],[1,\\\"\\\\n    \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[8,[39,13],null,[[\\\"@onSearch\\\"],[[28,[37,10],[[28,[37,11],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-20\\\"],[12],[1,\\\"(Double click a row to view all metrics, the full request/response, and more)\\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,14],null,[[\\\"@id\\\",\\\"@dblClickToSelect\\\",\\\"@hideOverallResult\\\",\\\"@hideTraceColumn\\\",\\\"@results\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@resultsFilter\\\",\\\"@isPrint\\\",\\\"@maxResults\\\",\\\"@resultSelected\\\"],[[30,5],true,true,true,[30,0,[\\\"results\\\"]],[30,6,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"resultsFilter\\\"]],[30,7],[30,0,[\\\"maxResults\\\"]],[30,0,[\\\"resultSelected\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  Loading results...\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showResultModal\\\"]],[[[1,\\\"  \\\"],[8,[39,15],null,[[\\\"@resultId\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedResultId\\\"]],[30,6,[\\\"execution\\\",\\\"uuid\\\"]],[30,6,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"resultModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"@overallModel\\\",\\\"bg\\\",\\\"@id\\\",\\\"@model\\\",\\\"@isPrint\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"and\\\",\\\"gt\\\",\\\"span\\\",\\\"print-number\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"br\\\",\\\"grid-search\\\",\\\"results-timeline-grid\\\",\\\"result-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-results.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExecutionResultsComponent = _exports.default = (_class = class ExecutionResultsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"MaxResults\", 1000);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"maxResults\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resultsFilter\", _descriptor4, this);\n      _initializerDefineProperty(this, \"results\", _descriptor5, this);\n      _initializerDefineProperty(this, \"resultCount\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showResultModal\", _descriptor7, this);\n      _initializerDefineProperty(this, \"selectedResultId\", _descriptor8, this);\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/results?filter=network&limit=' + this.MaxResults;\n      const _this = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (results, status, xhr) {\n        if (_this.isDestroyed || _this.isDestroying) {\n          return;\n        }\n        const resultCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(resultCount)) {\n          _this.resultCount = Number(resultCount);\n        }\n        _this.results = results;\n        _this.resultsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        if (_this.isDestroyed || _this.isDestroying) {\n          return;\n        }\n        _this.results = [];\n        _this.resultCount = 0;\n        _this.resultsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n      const EventBus = this.EventBus;\n      const regionName = this.args.regionName;\n      EventBus.subscribe(regionName + '_executionResultsGrid.update', this, 'onResultUpdate');\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      const EventBus = this.EventBus;\n      const regionName = this.args.regionName;\n      EventBus.unsubscribe(regionName + '_executionResultsGrid.update', this, 'onResultUpdate');\n    }\n    get exportToCsvUrl() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/results.csv';\n      return _lib.default.toUrl(path);\n    }\n    get errorResultCount() {\n      if (!this.results?.length) {\n        return 0;\n      }\n      return _.filter(this.results, r => !r.success).length;\n    }\n    onResultUpdate(updates) {\n      let resultCount = this.resultCount || 0;\n      _.forEach(updates, update => {\n        if (update.action === 'Insert' && update.result.resource) {\n          resultCount++;\n        }\n      });\n      this.resultCount = resultCount;\n    }\n    resultSelected(result) {\n      this.selectedResultId = result ? result.id : null;\n      if (result) {\n        this.showResultModal = true;\n      }\n    }\n    resultModalClosed() {\n      this.showResultModal = false;\n      (0, _runloop.next)(this, function () {\n        this.selectedResultId = null;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"maxResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.MaxResults;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resultsFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"results\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"resultCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showResultModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"selectedResultId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"resultSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultModalClosed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionResultsComponent);\n});","define(\"@testable/shared-ui/components/execution-script\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"tracked-built-ins\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _trackedBuiltIns, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div {{did-update this.onShowScript @showScript}}>\n  {{#if @comparisonId}}\n    <div class=\"heading sticky-result-header mb-2\"><h4><strong>{{@title}}</strong></h4></div>{{/if}}\n  {{#if @showScript}}\n    {{#if this.scriptLoaded}}\n      {{#if this.fullScript}}\n        <TestScenario @model={{this.fullScript}}\n                    @uuid={{@uuid}}\n                    @uniqueId={{this.uniqueId}}\n                    @embeddedInExecution={{true}} />\n      {{else if this.recording}}\n        <RecordingContent @recording={{this.recording}} @embeddedInExecution={{true}} @hideActions={{true}} @readOnly={{true}} />\n      {{else}}\n        No Scenario Chosen!\n      {{/if}}\n    {{else}}\n      <span class=\"lead\">Loading scenario details...</span>\n    {{/if}}\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"onShowScript\\\"]],[30,1]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"heading sticky-result-header mb-2\\\"],[12],[10,\\\"h4\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,3]],[13],[13],[13]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,1],[[[41,[30,0,[\\\"scriptLoaded\\\"]],[[[41,[30,0,[\\\"fullScript\\\"]],[[[1,\\\"      \\\"],[8,[39,5],null,[[\\\"@model\\\",\\\"@uuid\\\",\\\"@uniqueId\\\",\\\"@embeddedInExecution\\\"],[[30,0,[\\\"fullScript\\\"]],[30,4],[30,0,[\\\"uniqueId\\\"]],true]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"recording\\\"]],[[[1,\\\"      \\\"],[8,[39,6],null,[[\\\"@recording\\\",\\\"@embeddedInExecution\\\",\\\"@hideActions\\\",\\\"@readOnly\\\"],[[30,0,[\\\"recording\\\"]],true,true,true]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      No Scenario Chosen!\\\\n    \\\"]],[]]]],[]]]],[]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading scenario details...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@showScript\\\",\\\"@comparisonId\\\",\\\"@title\\\",\\\"@uuid\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"h4\\\",\\\"strong\\\",\\\"test-scenario\\\",\\\"recording-content\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/execution-script.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExecutionScriptComponent = _exports.default = (_class = class ExecutionScriptComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"recording\", _descriptor, this);\n      _initializerDefineProperty(this, \"fullScript\", _descriptor2, this);\n      _initializerDefineProperty(this, \"scriptLoaded\", _descriptor3, this);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      this.onShowScript();\n    }\n    onShowScript() {\n      if (!this.args.showScript) return;\n      if (this.fullScript || this.recording) {\n        this.scriptLoaded = true;\n        return;\n      }\n      if (this.args.sourceType === 'Recording' && this.args.sourceId) {\n        _server.default.getRecording(this.args.sourceId, true).then(result => {\n          result.isResults = true;\n          this.recording = result;\n          this.scriptLoaded = true;\n          this.args.setRecording?.(result);\n        });\n      } else {\n        if (this.args.scriptId) {\n          this.args.uuid ? _server.default.getTokenContent(this.args.uuid, {\n            scriptId: this.args.scriptId,\n            down: true\n          }).then(fullScript => {\n            this.fullScript = new _trackedBuiltIns.TrackedObject(fullScript);\n            this.args.setFullScript?.(this.fullScript);\n            this.scriptLoaded = true;\n          }) : _server.default.getScript(this.args.scriptId).then(fullScript => {\n            this.fullScript = fullScript;\n            this.args.setFullScript?.(fullScript);\n            this.scriptLoaded = true;\n          });\n        } else {\n          this.scriptLoaded = true;\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"recording\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.recording;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"fullScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.fullScript;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"scriptLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onShowScript\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowScript\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExecutionScriptComponent);\n});","define(\"@testable/shared-ui/components/executions-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/helpers/to-html\"], function (_exports, _observers, _service, _dataGrid, _lib, _server, _loadTest, _toHtml) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/helpers/to-html\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let MaxRecords = 50;\n  function toColumns(config, now, metricDefs, scriptType, isLoad, showSelection) {\n    let columns = [];\n    if (showSelection) {\n      columns.push({\n        width: \"10px\",\n        orderable: false,\n        className: 'select-checkbox',\n        targets: 0\n      });\n    }\n    columns.push({\n      title: '',\n      data: 'id',\n      width: '25px',\n      render: (data, type, full, meta) => {\n        let answer = '<a data-ember-action=\"goToRoute\" data-ember-route=\"loadTestResults\" data-ember-id=\"' + full.id + '\"><i class=\"fa fa-search\"></i></a>';\n        if (full.execution.note && full.execution.note.contents && full.execution.note.contents.length > 0) {\n          answer += '<a class=\"m-l-10\" data-ember-action=\"goToRoute\" data-ember-route=\"loadTestResults\" data-ember-id=\"' + full.id + '\" data-bs-placement=\"top\" ' + 'data-bs-toggle=\"popover\" data-bs-html=\"true\" data-bs-title=\"Note\" data-bs-content=\"' + (0, _toHtml.sanitizeHtml)([full.execution.note.contentsHtml, 'tooltip']) + '\"><i class=\"far fa-sticky-note\"></i></a>';\n        }\n        if (full.execution.tags && full.execution.tags.length) {\n          answer += '<a class=\"m-l-10\" data-ember-action=\"goToRoute\" data-ember-route=\"loadTestResults\" data-ember-id=\"' + full.id + '\" data-bs-placement=\"top\" ' + 'data-bs-toggle=\"popover\" data-bs-html=\"true\" data-bs-title=\"Tags\" data-bs-content=\"';\n          full.execution.tags.forEach(tag => {\n            answer += `<span class='tags'>${tag.name}</span>`;\n          });\n          if (full.execution.tags.length === 1) {\n            answer += '\"><i class=\"fa fa-tag\"></i></a>';\n          } else {\n            answer += '\"><i class=\"fa fa-tags\"></i></a>';\n          }\n        }\n        answer += `<a class=\"m-l-10\" data-ember-action=\"copyToClipboard\" data-ember-id=\"${full.id}\" data-bs-placement=\"top\"\n                    data-bs-toggle=\"tooltip\" data-bs-html=\"true\" title=\"Copy to Clipboard\"><i class=\"fa fa-clipboard\"></i></a>`;\n        return answer;\n      }\n    });\n    columns.push({\n      title: 'P/F',\n      data: 'testOutcomeHtml',\n      width: '20px',\n      render: (data, type, full, meta) => {\n        return type === 'display' ? full.testOutcomeHtml : full.testOutcomeOrder;\n      }\n    });\n    columns.push({\n      title: 'Status',\n      data: 'status',\n      width: '100px',\n      render: (data, type, full, meta) => {\n        return '<span data-bs-placement=\"top\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\" data-bs-content=\"' + full.finishedPopover + '\">' + data + '</span>';\n      }\n    });\n    columns.push({\n      title: 'Started',\n      data: 'started',\n      width: '70px',\n      type: 'date',\n      render: (data, type, full, meta) => {\n        return type === 'display' ? '<span data-bs-placement=\"top\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\" data-bs-content=\"' + full.startedPopover + '\">' + _lib.default.liveRelativeDuration(data, true) + '</span>' : data;\n      }\n    });\n    if (isLoad) {\n      columns.push({\n        title: 'Concurrents',\n        data: 'maxConcurrentClients',\n        width: '70px',\n        defaultContent: '-',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.printMetric(full.summary, 'Testable', 'maxConcurrentClients', '', null, null, null, null, scriptType) : data;\n        }\n      });\n      _.forEach(config.metrics, columnConfig => {\n        if (columnConfig.isDefault) {\n          columns.push({\n            title: columnConfig.title,\n            data: _loadTest.default.toMetricKey(columnConfig.namespace, columnConfig.metric),\n            width: '70px',\n            render: (data, type, full, meta) => {\n              return type === 'display' ? _loadTest.default.printMetric(full.summary, columnConfig.namespace, columnConfig.metric, columnConfig.units, false, metricDefs, null, null, scriptType) : data;\n            },\n            defaultContent: '-'\n          });\n        }\n      });\n    } else {\n      columns.push({\n        title: 'Assertions Passed',\n        data: 'Testable-assertions-passed-percent',\n        width: '70px',\n        defaultContent: '-',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.printMetric(full.summary, 'Testable', 'assertions-passed-percent', '%', false, metricDefs, null, null, scriptType) : data;\n        }\n      });\n      columns.push({\n        title: 'Median Response Time',\n        data: 'Testable-firstReceivedMs-p50',\n        width: '70px',\n        defaultContent: '-',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.printMetric(full.summary, 'Testable', 'firstReceivedMs-p50', 'ms', false, metricDefs, null, null, scriptType) : data;\n        }\n      });\n      columns.push({\n        title: 'Request Success Rate',\n        data: 'Testable-outcome-success-percent',\n        width: '70px',\n        defaultContent: '-',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.printMetric(full.summary, 'Testable', 'outcome-success-percent', '%', false, metricDefs, null, null, scriptType) : data;\n        }\n      });\n    }\n    return columns;\n  }\n  let ExecutionsGrid = _exports.default = (_class = class ExecutionsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"testResults\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.onDataChanged);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.onDataChanged);\n    }\n    onDataChanged() {\n      this.refreshTable();\n    }\n    addTableOptions(options) {\n      if (this.args.showSelection) {\n        options.select = {\n          style: 'single',\n          selector: 'td:first-child'\n        };\n        options.scroller = true;\n      }\n      options.scrollY = '300px';\n      options.pageLength = 25;\n    }\n    getColumns() {\n      return toColumns(this.args.config, this.args.now, this.args.metricDefs, this.args.scriptType, this.args.isLoad, this.args.showSelection);\n    }\n    getInitialOrder(columns) {\n      return [[this.args.sortColumnIndex ?? 3, 'desc']];\n    }\n    createDataSource() {\n      return this.toExecutionRecords(this.args.data, this.args.config, this.args.now);\n    }\n    initTable(table) {\n      const _this = this;\n      $(\"#\" + this.args.id).on(\"dblclick\", \"tr\", function () {\n        if (typeof _this.args.showExecution === 'function') {\n          _this.args.showExecution(Number($(this).attr('id')));\n        }\n      });\n      $('#' + this.args.id).on('click', '[data-execution-id]', function (e) {\n        if (typeof _this.args.showTestOutcome === 'function') {\n          let table = $('#' + _this.args.id).DataTable();\n          let id = Number($(e.target).closest('span').data('execution-id'));\n          let record = _.find(table.rows().data(), record => {\n            return record.id === id;\n          });\n          if (record) {\n            _this.args.showTestOutcome(record.execution);\n          }\n        }\n      });\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        let id = Number($(e.target).closest('a').data('ember-id'));\n        let route = $(e.target).closest('a').data('ember-route');\n        let url = `${location.origin}/results/${id}`;\n        if (action === 'goToRoute') {\n          if (_this.args.showSelection) {\n            window.open(url, '_blank');\n          } else {\n            _this.router.transitionTo(route, id);\n          }\n        } else if (action === 'copyToClipboard') {\n          navigator.clipboard.writeText(url);\n        }\n      });\n      if (this.args.showSelection) {\n        const table = $('#' + this.args.id).DataTable();\n        table.on('select', function () {\n          const execution = table.rows({\n            selected: true\n          }).data().toArray();\n          _this.args.onSelect(execution);\n        }).on('deselect', function () {\n          const execution = table.rows({\n            selected: true\n          }).data().toArray();\n          _this.args.onSelect(execution);\n        });\n        if (this.args.preSelected) {\n          table.rows().data().each(function (row) {\n            if (row.id === Number(_this.args.preSelected)) {\n              table.row('#' + row.id).select().scrollTo();\n            }\n          });\n        }\n      }\n    }\n    toExecutionRecords(executions, config, now) {\n      return _.map(_.slice(executions, 0, MaxRecords), execution => {\n        return this.toExecutionRecord(execution, config, now);\n      });\n    }\n    toExecutionRecord(execution, config, now) {\n      let summary = execution.summary;\n      this.testResults.addMetricsToSummary(execution);\n      let record = {\n        id: execution.id,\n        status: _server.default.getLoadTestExecutionStatus(execution),\n        started: execution.startedAt,\n        startedPopover: _lib.default.displayDateTime(execution.startedAt),\n        finishedPopover: _lib.default.displayDateTime(execution.finishedAt),\n        summary: summary,\n        execution: execution,\n        testOutcomeHtml: _loadTest.default.getExecutionOutcomeHtml(execution, false),\n        testOutcomeOrder: _loadTest.default.getExecutionOutcomeOrder(execution)\n      };\n      _.forEach(config?.metrics, columnConfig => {\n        if (columnConfig.isDefault) {\n          let key = _loadTest.default.toMetricKey(columnConfig.namespace, columnConfig.metric);\n          record[key] = summary ? summary[key] : null;\n        }\n      });\n      return record;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/export-csv-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"exportCsvModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Export Results to CSV</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <a href=\"{{@exportToCsvUrl}}\" class=\"btn btn-lg btn-default width-full\">\n                <b>Export Network Results</b><br/>\n                <small>Each row will correspond to one request (i.e. HTTP, etc)</small>\n              </a>\n              <a href=\"{{this.exportAllToCsvUrl}}\" class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Export All Results</b><br/>\n                <small>Also include custom metrics and test runner utilization in the CSV</small>\n              </a>\n              <a href=\"{{this.exportUserMetricsToCsvUrl}}\" class=\"btn btn-lg btn-default width-full m-t-10\">\n                <b>Export User Metrics</b><br/>\n                <small>Only include user metrics in the CSV</small>\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"exportCsvModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Export Results to CSV\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[29,[[30,1]]]],[14,0,\\\"btn btn-lg btn-default width-full\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Export Network Results\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each row will correspond to one request (i.e. HTTP, etc)\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportAllToCsvUrl\\\"]]]]],[14,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Export All Results\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Also include custom metrics and test runner utilization in the CSV\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportUserMetricsToCsvUrl\\\"]]]]],[14,0,\\\"btn btn-lg btn-default width-full m-t-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Export User Metrics\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Only include user metrics in the CSV\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@exportToCsvUrl\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"a\\\",\\\"b\\\",\\\"br\\\",\\\"small\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/export-csv-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExportCsvModalComponent = _exports.default = (_class = class ExportCsvModalComponent extends _component2.default {\n    get exportAllToCsvUrl() {\n      let url = this.args.exportToCsvUrl;\n      return url + (url.indexOf('?') === -1 ? '?' : '') + 'filter=all';\n    }\n    get exportUserMetricsToCsvUrl() {\n      let url = this.args.exportToCsvUrl;\n      return url + (url.indexOf('?') === -1 ? '?' : '') + 'userMetrics=true';\n    }\n    didInsert() {\n      const _this = this;\n      $('#exportCsvModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#exportCsvModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExportCsvModalComponent);\n});","define(\"@testable/shared-ui/components/extend-test-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"extendTestModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Extend Test</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form id=\"extendTestForm\" {{on \"submit\" this.extend}} data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>Current {{this.lengthLabel}}</label>\n                  <div class=\"input-group\">\n                    <Input class=\"form-control\" @type=\"number\" @value={{this.currentTestLength}} disabled={{true}} />\n                    <span class=\"input-group-addon\">{{this.suffix}}</span>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label>New {{this.lengthLabel}}</label>\n                  <div class=\"input-group\">\n                    <Input id=\"newTestLength\" class=\"form-control\" @type=\"number\" placeholder={{this.newPlaceholder}} @value={{this.newTestLength}} data-parsley-min=\"1\" data-parsley-min-message={{concat this.lengthLabel \" must be greater than 0\"}} />\n                    <span class=\"input-group-addon\">{{this.suffix}}</span>\n                  </div>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" disabled={{this.isExtending}} class=\"btn btn-sm btn-success\"><strong>{{if this.isExtending\n                                                                                                             'Extending Test...'\n                                                                                                             'Extend Test'}}</strong>\n                  </button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"modal fade\\\"],[14,1,\\\"extendTestModal\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,\\\"role\\\",\\\"dialog\\\"],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Extend Test\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"extendTestForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,4],[\\\"submit\\\",[30,0,[\\\"extend\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Current \\\"],[1,[30,0,[\\\"lengthLabel\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,6],[[24,0,\\\"form-control\\\"],[16,\\\"disabled\\\",true]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"currentTestLength\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,[30,0,[\\\"suffix\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"New \\\"],[1,[30,0,[\\\"lengthLabel\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,6],[[24,1,\\\"newTestLength\\\"],[24,0,\\\"form-control\\\"],[16,\\\"placeholder\\\",[30,0,[\\\"newPlaceholder\\\"]]],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[16,\\\"data-parsley-min-message\\\",[28,[37,8],[[30,0,[\\\"lengthLabel\\\"]],\\\" must be greater than 0\\\"],null]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"newTestLength\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,[30,0,[\\\"suffix\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isExtending\\\"]]],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,[52,[30,0,[\\\"isExtending\\\"]],\\\"Extending Test...\\\",\\\"Extend Test\\\"]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"span\\\",\\\"concat\\\",\\\"strong\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/extend-test-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ExtendTestModal = _exports.default = (_class = class ExtendTestModal extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"lengthLabel\", _descriptor, this);\n      _initializerDefineProperty(this, \"currentTestLength\", _descriptor2, this);\n      _initializerDefineProperty(this, \"newPlaceholder\", _descriptor3, this);\n      _initializerDefineProperty(this, \"suffix\", _descriptor4, this);\n      _initializerDefineProperty(this, \"newTestLength\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isExtending\", _descriptor6, this);\n      const durationSecs = this.args.model.durationSecs;\n      const iterations = this.args.model.iterations;\n      this.lengthLabel = durationSecs > 0 ? 'Duration' : 'Iterations';\n      this.currentTestLength = durationSecs > 0 ? durationSecs / 60 : iterations;\n      this.newPlaceholder = durationSecs > 0 ? 'Duration (minutes)' : 'Iterations';\n      this.suffix = durationSecs > 0 ? 'minutes' : 'iterations';\n    }\n    didInsert() {\n      const _this = this;\n      $('#extendTestModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#extendTestModal').modal('show');\n      $('#extendTestModal').on('shown.bs.modal', function () {\n        $('#newTestLength').focus();\n        $('#extendTestForm').parsley();\n      });\n    }\n    extend(e) {\n      e.preventDefault();\n      if (!$('#extendTestForm').parsley().validate()) return;\n      const newLength = this.newTestLength;\n      const durationSecs = this.args.model.durationSecs;\n      const body = durationSecs > 0 ? {\n        newDuration: newLength * 60\n      } : {\n        newIterations: newLength\n      };\n      this.isExtending = true;\n      _server.default.liveExtendExecution(this.args.model.id, body).then(() => {\n        _lib.default.info('Test updated successfully');\n        this.isExtending = false;\n        $('#extendTestModal').modal('hide');\n      }, () => {\n        this.isExtending = false;\n        $('#extendTestModal').modal('hide');\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"lengthLabel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentTestLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"newPlaceholder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"suffix\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"newTestLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isExtending\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"extend\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"extend\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExtendTestModal);\n});","define(\"@testable/shared-ui/components/failed-results\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _tracking, _object, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"title-box m-t-10\">\n    {{#if this.resultsLoaded}}\n      {{#if (gt this.resultCount this.results.length)}}\n        <span class=\"semi-bold\">Only displaying the first {{print-number this.results.length}}\n          failed results out of {{print-number this.resultCount}} total failures. To view all failures <a\n                  href=\"{{this.exportToCsvUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> export to CSV</a>.</span>\n      {{/if}}\n      <p class=\"semi-bold\">Double click a failed result for details.</p>\n      <div class=\"overflow-auto\">\n        <GridSearch @onSearch={{fn (mut this.search)}} />\n        <ResultsTimelineGrid @id={{concat @regionName '_failedResultsGrid'}}\n                             @dblClickToSelect={{true}}\n                             @hideOverallResult={{true}}\n                             @firstTimestamp={{@overallModel.startedAt}}\n                             @lastTimestamp={{@overallModel.finishedAt}}\n                             @results={{this.results}}\n                             @scriptType={{@model.execution.script.scriptType}}\n                             @search={{this.search}}\n                             @resultSelected={{this.resultSelected}} />\n      </div>\n    {{else}}\n      Loading failed results...\n    {{/if}}\n  </div>\n  \n  {{#if this.showResultModal}}\n    <ResultModal @resultId={{this.selectedResultId}}\n                 @uuid={{@overallModel.uuid}}\n                 @scriptType={{@model.execution.script.scriptType}}\n                 @modalClosed={{this.resultModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"title-box m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"resultsLoaded\\\"]],[[[41,[28,[37,2],[[30,0,[\\\"resultCount\\\"]],[30,0,[\\\"results\\\",\\\"length\\\"]]],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Only displaying the first \\\"],[1,[28,[35,4],[[30,0,[\\\"results\\\",\\\"length\\\"]]],null]],[1,\\\"\\\\n        failed results out of \\\"],[1,[28,[35,4],[[30,0,[\\\"resultCount\\\"]]],null]],[1,\\\" total failures. To view all failures \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportToCsvUrl\\\"]]]]],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" export to CSV\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,2],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Double click a failed result for details.\\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],null,[[\\\"@onSearch\\\"],[[28,[37,9],[[28,[37,10],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@id\\\",\\\"@dblClickToSelect\\\",\\\"@hideOverallResult\\\",\\\"@firstTimestamp\\\",\\\"@lastTimestamp\\\",\\\"@results\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@resultSelected\\\"],[[28,[37,12],[[30,1],\\\"_failedResultsGrid\\\"],null],true,true,[30,2,[\\\"startedAt\\\"]],[30,2,[\\\"finishedAt\\\"]],[30,0,[\\\"results\\\"]],[30,3,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"resultSelected\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    Loading failed results...\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showResultModal\\\"]],[[[1,\\\"  \\\"],[8,[39,13],null,[[\\\"@resultId\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedResultId\\\"]],[30,2,[\\\"uuid\\\"]],[30,3,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"resultModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@model\\\"],[\\\"div\\\",\\\"if\\\",\\\"gt\\\",\\\"span\\\",\\\"print-number\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"p\\\",\\\"grid-search\\\",\\\"fn\\\",\\\"mut\\\",\\\"results-timeline-grid\\\",\\\"concat\\\",\\\"result-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/failed-results.hbs\",\n    \"isStrictMode\": false\n  });\n  let FailedResultsComponent = _exports.default = (_class = class FailedResultsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedResultId\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showResultModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"results\", _descriptor4, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor5, this);\n      _initializerDefineProperty(this, \"search\", _descriptor6, this);\n      this.load();\n      _lib.default.observeKeys(this, ['args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onSelectedResourceChange);\n    }\n    willDestroy() {\n      super.willDestroy();\n      _lib.default.unobserveKeys(this, ['args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onSelectedResourceChange);\n    }\n    get resultsPath() {\n      return _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model, this.args.selectedResource);\n    }\n    get exportToCsvUrl() {\n      return _lib.default.toUrl(this.resultsPath + '/failed-results.csv');\n    }\n    load() {\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      params.limit = 100;\n      const _this = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(this.resultsPath + '/failed-results', params),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (results, status, xhr) {\n        const resultCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(resultCount)) {\n          _this.resultCount = Number(resultCount);\n        }\n        _this.results = results;\n        _this.resultsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        _this.results = [];\n        _this.resultCount = 0;\n        _this.resultsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    onSelectedResourceChange() {\n      (0, _runloop.once)(this, 'load');\n    }\n    resultSelected(result) {\n      this.selectedResultId = result ? result.id : null;\n      if (result) {\n        this.showResultModal = true;\n      }\n    }\n    resultModalClosed() {\n      this.showResultModal = false;\n      (0, _runloop.next)(this, function () {\n        this.selectedResultId = null;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedResultId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showResultModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"results\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSelectedResourceChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectedResourceChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultModalClosed\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FailedResultsComponent);\n});","define(\"@testable/shared-ui/components/files-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/runloop\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _observers, _runloop, _service, _tracking, _dataGrid, _formatters, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let FilesGrid = _exports.default = (_class = class FilesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"hasSessionNum\", _descriptor3, this);\n      (0, _observers.addObserver)(this, 'args.outputFiles', this.onOutputFilesChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.outputFiles', this.onOutputFilesChange);\n    }\n    onOutputFilesChange() {\n      (0, _runloop.once)(this, 'refreshTable');\n    }\n    get agents() {\n      return _loadTest.default.getAgentsForRegion(this.args.overallModel.agents, this.args.region);\n    }\n    get agentsById() {\n      const answer = {};\n      _.forEach(this.agents, agentInfo => {\n        answer[agentInfo.id] = agentInfo.name;\n      });\n      return answer;\n    }\n    getColumns() {\n      const isMultiUser = this.args.isMultiUser;\n      const columns = [{\n        title: 'Thumbnail',\n        data: 'thumbnailUrl',\n        width: '80px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            const failureClass = _.isBoolean(full.isRelatedToFailure) ? full.isRelatedToFailure ? 'failure-image' : 'success-image' : null;\n            let result = '<a href=\"' + (full.isImage || full.isVideo ? full.viewUrl : full.url) + '\"';\n            if (full.isImage || full.isVideo) {\n              result += ' data-fancybox=\"thumbnails-' + full.regionName + '\" data-caption=\"' + full.name + '\"';\n            }\n            if (full.isVideo) {\n              result += ' data-type=\"video\"  ';\n            }\n            result += '><img data-src=\"' + data + '\"' + (failureClass ? ' class=\"lazy ' + failureClass + '\"' : '') + '>';\n            if (full.isVideo) {\n              result += ' <i class=\"fa fa-play-circle m-l-5 m-t-20 position-absolute\"></i> ';\n            }\n            result += '</a>';\n            result += \" <a href='javascript:;' data-ember-action='showShareMediaModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              type: full.isVideo ? 'video' : 'image',\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-share m-l-5 position-absolute\"></i></a> ';\n            return result;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'File',\n        data: 'name',\n        width: '200px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            let result = '<a href=\"' + (full.isImage ? 'javascript:;' : full.url) + '\"';\n            if (full.isImage) {\n              result += ' data-ember-action=\"showImageDetailsModal\" data-ember-action-type=\"number\" data-ember-action-id=\"' + full.id + '\"';\n            }\n            result += '>' + data + '</a>';\n            if (full.isPlaywrightTrace) {\n              const traceUrl = `https://trace.playwright.dev/?trace=${full.url}`;\n              result += `<a target=\"_blank\" href=\"${traceUrl}\" class=\"m-l-10\"><i class=\"fa fa-search m-r-5\"></i>View Trace</a>`;\n            }\n            return result;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Timestamp',\n        data: 'capturedAt',\n        width: '150px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _formatters.default.timestamp(data) : data ? data.valueOf() : 0;\n        }\n      }, {\n        title: 'Content Type',\n        data: 'type',\n        width: '80px'\n      }, {\n        title: 'Size',\n        data: 'size',\n        width: '60px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _formatters.default.bytes(data) : data;\n        }\n      }, {\n        title: isMultiUser ? 'Instance #' : 'User #',\n        data: 'globalConcurrentClientIndex',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' || type === 'filter' ? (isMultiUser ? 'Instance ' : 'User ') + _formatters.default.number(data) : data;\n        }\n      }, {\n        title: 'Iteration #',\n        data: 'iteration',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' || type === 'filter' ? _formatters.default.number(data) : data;\n        }\n      }];\n      if (this.hasSessionNum) {\n        columns.push({\n          title: 'Session #',\n          data: 'sessionNum',\n          width: '70px',\n          render: (data, type, full, meta) => {\n            return type === 'display' || type === 'filter' ? _formatters.default.number(data) : data;\n          }\n        });\n      }\n      columns.concat([{\n        title: 'Browser',\n        data: 'browser',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.toBrowserVersionLabel(data) : data;\n        }\n      }, {\n        title: 'Device',\n        data: 'device',\n        width: '70px'\n      }, {\n        title: 'Image Diff',\n        data: 'diffPercent',\n        width: '80px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return _.isNumber(data) && !_.isNaN(data) ? '<span class=\"m-r-5\"><a href=\"javascript:;\" data-ember-action=\"showImageDetailsModal\" data-ember-action-type=\"number\" data-ember-action-id=\"' + full.id + '\">' + '<i class=\"fa fa-search\"></i></span>' + data + '%</a>' : '-';\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Region',\n        data: 'fileRegion',\n        width: '100px'\n      }, {\n        title: 'Test Runner',\n        data: 'agentName',\n        width: '150px'\n      }]);\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[2, 'desc']];\n    }\n    createDataSource() {\n      const region = this.args.region;\n      const files = _.filter(this.args.outputFiles, file => {\n        return _loadTest.default.isFileRelevant(file, this.zoomInfo, region);\n      });\n      return _.map(files, file => {\n        if (file.sessionNum > 0) {\n          this.hasSessionNum = true;\n        }\n        return this.toRecord(file);\n      });\n    }\n    updateDataSource(update, isUpdate, toRemove) {\n      const table = $('#' + this.args.id).DataTable();\n      const region = this.args.region;\n      let redraw = false;\n      if (toRemove) {\n        const rowToRemove = table.row('#' + toRemove.id);\n        if (!_.isEmpty(rowToRemove)) {\n          rowToRemove.remove();\n          redraw = true;\n        }\n      }\n      if (update && _loadTest.default.isFileRelevant(update, this.zoomInfo, region)) {\n        const record = this.toRecord(update);\n        if (isUpdate) {\n          const row = table.row('#' + record.id);\n          if (!_.isEmpty(row)) {\n            const data = row.data();\n            if (!_.isEqual(data, record)) {\n              row.data(record);\n              redraw = true;\n            }\n          }\n        } else {\n          table.row.add(record);\n          redraw = true;\n        }\n      }\n      if (redraw) {\n        table.draw(false);\n      }\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No files yet.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        } else if (contentType === 'number') {\n          content = Number($(e.target).closest('a').data('ember-action-id'));\n        }\n        _this.args[action](content);\n      });\n    }\n    toRecord(file) {\n      const agentsById = this.agentsById;\n      const executionRegion = _.find(this.args.overallModel.regions, executionRegion => {\n        return executionRegion && executionRegion.region && executionRegion.region.id === file.regionId;\n      });\n      const isPlaywrightTrace = this.args.overallModel.script.scriptType === 'Playwright' && file.name.startsWith('trace') && file.name.endsWith('.zip');\n      return {\n        id: file.id,\n        name: file.name,\n        capturedAt: moment(file.capturedAt),\n        type: file.type,\n        isImage: file.type.indexOf('image/') === 0,\n        isVideo: file.type.indexOf('video/') === 0,\n        url: file.url,\n        viewUrl: file.viewUrl,\n        thumbnailUrl: file.thumbnailUrl,\n        size: file.size,\n        regionName: executionRegion ? executionRegion.region.name : '',\n        fileRegion: executionRegion ? executionRegion.region.description : '-',\n        diffPercent: _.isNumber(file.diffPercent) ? file.diffPercent : NaN,\n        suiteTestResultId: file.suiteTestResultId,\n        globalConcurrentClientIndex: file.globalConcurrentClientIndex,\n        iteration: file.iteration,\n        sessionNum: file.sessionNum ? file.sessionNum : '-',\n        agentName: file.agentId ? agentsById[file.agentId] || '-' : '-',\n        isRelatedToFailure: file.isRelatedToFailure,\n        browser: file.browser || '',\n        device: this.api.browserManager.toDeviceLabel(file.device),\n        isPlaywrightTrace\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"hasSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/filter-fields\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _component2, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span {{did-update this.onFileSessionsChange @filesSessions}}></span>\n  {{#if @showRegionFilter}}\n    <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}} \">\n      <div class=\"f-w-700 m-b-5\">Region</div>\n      <Ui::PSelect @options={{this.regions}}\n               @selected={{this.selectedRegion}}\n               class={{if @isVertical '' \"width-100\"}}\n               @onChange={{this.updateRegionAction}} as |regionInfo|>\n        {{regionInfo.region.description}}\n      </Ui::PSelect>\n    </div>\n  {{/if}}\n  {{#if @showTestRunnerFilter}}\n    <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}} \">\n      <div class=\"f-w-700 m-b-5\">Test Runner</div>\n      <Ui::PSelect @options={{this.agents}}\n               @selected={{this.selectedAgent}}\n               class={{if @isVertical '' \"width-100\"}}\n               @onChange={{this.updateAgentAction}} as |agentInfo|>\n        {{agentInfo.name}}\n      </Ui::PSelect>\n    </div>\n  {{/if}}\n  {{#if this.browsers}}\n    <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}} \">\n      <div class=\"f-w-700 m-b-5\">Browser</div>\n      <Ui::PSelect @options={{this.browsers}}\n               @selected={{this.selectedBrowser}}\n               @selectedItemComponent=\"print-selected-browser-option\"\n               class={{if @isVertical '' \"width-100\"}}\n               @onChange={{this.updateBrowserAction}} as |browser|>\n        <Ui::Icon @icon=\"fab {{browser.type}}\" class=\"m-r-5\"/> {{browser.name}}\n      </Ui::PSelect>\n    </div>\n  {{/if}}\n  {{#if @isLoad}}\n    <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}} \">\n      <div class=\"f-w-700 m-b-5\">{{if @isMultiUser 'Instance' 'User'}}</div>\n      {{#if this.userManuallyInputted}}\n        <InputSelectAll @type=\"text\" class=\"form-control form-control-sm width-100\" placeholder={{concat \"User \" this.userNumRangeText}} @value={{@user}} @onChange={{this.updateManualUser}} />\n      {{else}}\n        <Ui::PSelect @options={{this.users}}\n                 @selected={{this.selectedUser}}\n                 class={{if @isVertical '' \"width-100\"}}\n                 @onChange={{this.updateUserAction}} as |user|>\n          {{user}}\n        </Ui::PSelect>\n      {{/if}}\n    </div>\n    {{#if (gt @iterationsExecuted 0)}}\n      <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}} \">\n        <div class=\"f-w-700 m-b-5\">Iteration</div>\n        {{#if this.iterationManuallyInputted}}\n          <InputSelectAll @type=\"text\" class={{concat \"form-control form-control-sm \" (if @isVertical '' \"width-100\")}}\n                          placeholder={{concat \"Iteration \" this.iterationNumRangeText}}\n                          @value={{@iteration}}\n                          @onChange={{this.updateManualIteration}} />\n        {{else}}\n          <Ui::PSelect @options={{this.iterations}}\n                   @selected={{this.selectedIteration}}\n                   class={{if @isVertical '' \"width-100\"}}\n                   @onChange={{this.updateIterationAction}} as |iteration|>\n            {{iteration}}\n          </Ui::PSelect>\n        {{/if}}\n      </div>\n    {{/if}}\n  {{/if}}\n  {{#if @filesSessions.length}}\n    <div class=\"{{if @isVertical 'col-sm-4 col-md-3 m-b-10' 'm-r-20'}}\">\n      <div class=\"f-w-700 m-b-5\">Sessions</div>\n      <Ui::PSelect  @options={{@filesSessions}}\n                    @selected={{this.selectedSession}}\n                    @placeholder=\"Please select a session...\"\n                    @onChange={{this.onChangeSession}} as |option| >\n        {{option.title}}\n      </Ui::PSelect>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onFileSessionsChange\\\"]],[30,1]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],[[16,0,[52,[30,3],\\\"\\\",\\\"width-100\\\"]]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"regions\\\"]],[30,0,[\\\"selectedRegion\\\"]],[30,0,[\\\"updateRegionAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,4,[\\\"region\\\",\\\"description\\\"]]],[1,\\\"\\\\n    \\\"]],[4]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,5],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Test Runner\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],[[16,0,[52,[30,3],\\\"\\\",\\\"width-100\\\"]]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"agents\\\"]],[30,0,[\\\"selectedAgent\\\"]],[30,0,[\\\"updateAgentAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n    \\\"]],[6]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"browsers\\\"]],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Browser\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],[[16,0,[52,[30,3],\\\"\\\",\\\"width-100\\\"]]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@onChange\\\"],[[30,0,[\\\"browsers\\\"]],[30,0,[\\\"selectedBrowser\\\"]],\\\"print-selected-browser-option\\\",[30,0,[\\\"updateBrowserAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fab \\\",[30,7,[\\\"type\\\"]]]]]],null],[1,\\\" \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n    \\\"]],[7]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,8],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,[52,[30,9],\\\"Instance\\\",\\\"User\\\"]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"userManuallyInputted\\\"]],[[[1,\\\"      \\\"],[8,[39,6],[[24,0,\\\"form-control form-control-sm width-100\\\"],[16,\\\"placeholder\\\",[28,[37,7],[\\\"User \\\",[30,0,[\\\"userNumRangeText\\\"]]],null]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"text\\\",[30,10],[30,0,[\\\"updateManualUser\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,4],[[16,0,[52,[30,3],\\\"\\\",\\\"width-100\\\"]]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"users\\\"]],[30,0,[\\\"selectedUser\\\"]],[30,0,[\\\"updateUserAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,11]],[1,\\\"\\\\n      \\\"]],[11]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,12],0],null],[[[1,\\\"    \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Iteration\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"iterationManuallyInputted\\\"]],[[[1,\\\"        \\\"],[8,[39,6],[[16,0,[28,[37,7],[\\\"form-control form-control-sm \\\",[52,[30,3],\\\"\\\",\\\"width-100\\\"]],null]],[16,\\\"placeholder\\\",[28,[37,7],[\\\"Iteration \\\",[30,0,[\\\"iterationNumRangeText\\\"]]],null]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"text\\\",[30,13],[30,0,[\\\"updateManualIteration\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,4],[[16,0,[52,[30,3],\\\"\\\",\\\"width-100\\\"]]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],[30,0,[\\\"updateIterationAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,14]],[1,\\\"\\\\n        \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[41,[30,1,[\\\"length\\\"]],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[30,3],\\\"col-sm-4 col-md-3 m-b-10\\\",\\\"m-r-20\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Sessions\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,1],[30,0,[\\\"selectedSession\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,15,[\\\"title\\\"]]],[1,\\\"\\\\n    \\\"]],[15]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@filesSessions\\\",\\\"@showRegionFilter\\\",\\\"@isVertical\\\",\\\"regionInfo\\\",\\\"@showTestRunnerFilter\\\",\\\"agentInfo\\\",\\\"browser\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@user\\\",\\\"user\\\",\\\"@iterationsExecuted\\\",\\\"@iteration\\\",\\\"iteration\\\",\\\"option\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"ui/p-select\\\",\\\"ui/icon\\\",\\\"input-select-all\\\",\\\"concat\\\",\\\"gt\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/filter-fields.hbs\",\n    \"isStrictMode\": false\n  });\n  let FilterFields = _exports.default = (_dec = (0, _object.computed)('args.model.agents', 'regionInfo.region.id'), _class = class FilterFields extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"selectedRegion\", _descriptor, this);\n      _initializerDefineProperty(this, \"selectedAgent\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedBrowser\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedUser\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor6, this);\n      this.selectedRegion = this.regions?.[0];\n      this.selectedAgent = this.agents?.[0];\n      this.selectedSession = this.args.filesSessions?.[0];\n      this.selectedBrowser = this.browsers?.[0];\n    }\n    get userManuallyInputted() {\n      return !this.args.isMultiUser && this.args.concurrentClients > _loadTest.default.MaxUsersDropdown;\n    }\n    get userNumRangeText() {\n      return '[0,' + (Number(this.args.concurrentClients) - 1) + ']';\n    }\n    get iterationManuallyInputted() {\n      return !this.args.isMultiUser && this.args.executedIterationsPerClient > _loadTest.default.MaxUsersDropdown;\n    }\n    get iterationNumRangeText() {\n      return '[0,' + (Number(this.args.executedIterationsPerClient) - 1) + ']';\n    }\n    get users() {\n      let concurrentClients = this.args.concurrentClients;\n      let answer = ['ALL'];\n      if (concurrentClients <= _loadTest.default.MaxUsersDropdown) {\n        for (let i = 0; i < concurrentClients; i++) {\n          answer.push('' + i);\n        }\n      }\n      return answer;\n    }\n    get iterations() {\n      let iterations = this.args.executedIterationsPerClient;\n      let answer = ['ALL'];\n      if (iterations) {\n        for (let i = 0; i < iterations; i++) {\n          answer.push('' + i);\n        }\n      }\n      return answer;\n    }\n    get regions() {\n      return Array.from(this.args.byRegionId?.values() || []);\n    }\n    get regionInfo() {\n      return this.args.byRegionId?.get(this.args.region);\n    }\n    get agents() {\n      const agents = _loadTest.default.getAgentsForRegion(this.args.model?.agents, this.regionInfo?.region?.id);\n      agents.unshift({\n        id: 'ALL',\n        name: 'ALL'\n      });\n      return agents;\n    }\n    get browsers() {\n      if (this.args.isLoad && this.args.scriptBinary === 'Standard' && _lib.default.isVisualScriptType(this.args.scriptType) && this.args.browsers?.length) {\n        let browsers = [];\n        this.args.browsers.forEach(browser => {\n          browsers.push({\n            id: browser.browserKey,\n            type: _lib.default.toBrowserIcon(browser.browserType),\n            name: _lib.default.toBrowserVersionTitle(browser.browserKey),\n            version: _lib.default.toBrowserVersion(browser.browserKey)\n          });\n        });\n        _.sortBy(browsers, function (browser) {\n          return browser.name;\n        });\n        browsers.unshift({\n          id: 'ALL',\n          name: 'ALL'\n        });\n        return browsers;\n      }\n      return false;\n    }\n    onFileSessionsChange() {\n      if (!this.selectedSession) this.selectedSession = this.args.filesSessions?.[0];\n    }\n    updateRegionAction(value) {\n      this.selectedRegion = value;\n      if (value) {\n        this.args.updateRegion(value.region.id);\n      }\n    }\n    updateAgentAction(value) {\n      this.selectedAgent = value;\n      if (value) {\n        this.args.updateAgent(value.id);\n      }\n    }\n    onChangeSession(value) {\n      this.selectedSession = value;\n      if (value) {\n        this.args.updateSession(value.value);\n      }\n    }\n    updateUserAction(value) {\n      this.selectedUser = value;\n      this.args.updateUser(value === 'ALL' ? 'ALL' : Number(value));\n    }\n    updateIterationAction(value) {\n      this.selectedIteration = value;\n      this.args.updateIteration(value === 'ALL' ? 'ALL' : Number(value));\n    }\n    updateBrowserAction(value) {\n      this.selectedBrowser = value;\n      this.args.updateBrowser(value === 'ALL' ? 'ALL' : value.id);\n    }\n    updateManualUser(val) {\n      let value = val.target.value;\n      if (_.isEmpty(value) || value.toUpperCase() === 'ALL') {\n        this.args.updateUser('ALL');\n      } else {\n        const user = Number(value);\n        if (_.isNaN(user)) {\n          this.args.updateUser('ALL');\n        } else if (user < 0) {\n          this.args.updateUser('0');\n        } else if (user >= this.args.concurrentClients) {\n          this.args.updateUser(Number(this.args.concurrentClients) - 1);\n        } else {\n          this.args.updateUser(value);\n        }\n      }\n    }\n    updateManualIteration(val) {\n      let value = val.target.value;\n      if (_.isEmpty(value) || value.toUpperCase() === 'ALL') {\n        this.args.updateIteration('ALL');\n      } else {\n        const iteration = Number(value);\n        if (_.isNaN(iteration)) {\n          this.args.updateIteration('ALL');\n        } else if (iteration < 0) {\n          this.args.updateIteration('0');\n        } else if (iteration >= this.args.executedIterationsPerClient) {\n          this.args.updateIteration(Number(this.args.executedIterationsPerClient) - 1);\n        } else {\n          this.args.updateIteration(value);\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selectedRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedAgent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedBrowser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"agents\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"agents\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFileSessionsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFileSessionsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegionAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegionAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgentAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgentAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUserAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUserAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIterationAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIterationAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowserAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowserAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateManualUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateManualUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateManualIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateManualIteration\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FilterFields);\n});","define(\"@testable/shared-ui/components/forgot-password-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/login\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _login, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/login\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"forgotPasswordModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n  {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Forgot Password</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.forgotPassword}} class=\"form-horizontal\">\n                <div class=\"form-group\">\n                  <div class=\"input-group\">\n                    <input id=\"forgotEmail\" class=\"form-control\" type=\"email\" placeholder=\"Email Address\" minlength=\"1\"\n                           maxlength=\"1024\" required>\n                    <span class=\"input-group-append\">\n                      <button type=\"submit\" class=\"btn btn-default\">\n                        {{#if this.isSaving}}\n                          <Ui::Icon class=\"m-l-5\" @icon=\"fa fa-spinner fa-spin fa-lg\" />\n                        {{else}}\n                        <Ui::InfoIcon\n                          @icon=\"far fa-arrow-alt-circle-right fa-lg\"\n                          @content=\"We will send you an email with a link to reset your password.\"\n                        />\n                        {{/if}}\n                      </button>\n                    </span>\n                  </div>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"forgotPasswordModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Forgot Password\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"forgotPassword\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"input\\\"],[14,1,\\\"forgotEmail\\\"],[14,0,\\\"form-control\\\"],[14,\\\"placeholder\\\",\\\"Email Address\\\"],[14,\\\"minlength\\\",\\\"1\\\"],[14,\\\"maxlength\\\",\\\"1024\\\"],[14,\\\"required\\\",\\\"\\\"],[14,4,\\\"email\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"input-group-append\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-default\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSaving\\\"]],[[[1,\\\"                        \\\"],[8,[39,9],[[24,0,\\\"m-l-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin fa-lg\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[8,[39,10],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"far fa-arrow-alt-circle-right fa-lg\\\",\\\"We will send you an email with a link to reset your password.\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"input\\\",\\\"span\\\",\\\"if\\\",\\\"ui/icon\\\",\\\"ui/info-icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/forgot-password-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ForgotPasswordModalComponent = _exports.default = (_class = class ForgotPasswordModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor, this);\n    }\n    forgotPassword(e) {\n      e.preventDefault();\n      this.isSaving = true;\n      _login.default.requestPasswordReset($('#forgotEmail').val()).then(data => {\n        if (data.success) {\n          $('#forgotEmail').val('');\n          $('#forgotPasswordModal').modal('hide');\n          this.isSaving = false;\n          _lib.default.info('Email sent with link to reset your password.');\n        } else {\n          _lib.default.error('Failed to generate password reset email: ' + data.error);\n        }\n      });\n    }\n    didInsert() {\n      $('#forgotPasswordModal').on('hidden.bs.modal', () => {\n        if (typeof this.args.modalClosed === 'function') {\n          this.args.modalClosed();\n        }\n      });\n      $('#forgotPasswordModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"forgotPassword\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"forgotPassword\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ForgotPasswordModalComponent);\n});","define(\"@testable/shared-ui/components/forms/max-duration-input\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group\">\n    <label class=\"{{@labelClasses}}\">\n      Max Duration\n      <Ui::InfoIcon @content=\"Optionally set a maximum duration after which Testable will hard stop your scenario.\n                                      By default we let your scenario run to completion unless it times out.\"\n                    @placement=\"bottom\"/>\n    </label>\n    <div class=\"input-group\">\n      <Input @type=\"number\"\n             class=\"form-control\"\n             placeholder=\"Max Duration\"\n             @value={{@value}}\n             {{on \"change\" @onChange}}\n             step=\"0.01\"\n             min=\"0.01\"\n             data-parsley-min=\"0.01\"\n             data-parsley-min-message=\"Max duration must be at least 0.5 minutes\"\n             data-parsley-errors-container='#max-duration-error-container'\n      />\n      <div class=\"input-group-append\"><span class=\"input-group-text\">minutes</span></div>\n    </div>\n    <div id=\"max-duration-error-container\" class=\"m-b-5\"></div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,1]]]],[12],[1,\\\"\\\\n    Max Duration\\\\n    \\\"],[8,[39,2],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Optionally set a maximum duration after which Testable will hard stop your scenario.\\\\n                                    By default we let your scenario run to completion unless it times out.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Max Duration\\\"],[24,\\\"step\\\",\\\"0.01\\\"],[24,\\\"min\\\",\\\"0.01\\\"],[24,\\\"data-parsley-min\\\",\\\"0.01\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Max duration must be at least 0.5 minutes\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#max-duration-error-container\\\"],[4,[38,4],[\\\"change\\\",[30,3]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,2]]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"minutes\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"max-duration-error-container\\\"],[14,0,\\\"m-b-5\\\"],[12],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@labelClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"on\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/forms/max-duration-input.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"max-duration-input\"));\n});","define(\"@testable/shared-ui/components/forms/resource-parts-input\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group\" {{did-update this.updateFields @resourceParts @resourceNameMappings @overrideOrgDefault @resourceNameIgnoreNonMatch}}>\n    <label class=\"{{@labelClasses}}\">Resource Names\n      <Ui::InfoIcon @isHtml={{true}} @content={{this.resourceInfo}} @placement=\"bottom\" />\n    </label>\n    {{#unless @isOrg}}\n      <div class=\"{{@inputClasses}} m-t-5\">\n        <label class=\"normal\">\n          <Input @type=\"checkbox\" @checked={{this.overrideOrgDefault}} {{on \"change\" this.onChangeOverrideOrgDefault }} /> Override org default\n        </label>\n        <b class=\"cursor-pointer\" >\n        <Ui::Icon {{on \"click\" (fn (mut this.showMapping) (not this.showMapping))}} @icon=\"text-primary fa fa-{{if this.showMapping \"minus\" \"plus\"}}\" />\n      </b>\n      </div>\n    {{/unless}}\n    <div class=\"{{if (or @isOrg this.showMapping) \"show\" \"hidden\"}} m-l-10\">\n      <div class=\"{{@inputClasses}} m-t-5\">\n        <label class=\"normal\">\n          {{#unless @isOrg}}<Input @type=\"checkbox\" disabled={{this.disableFields}} @checked={{this.customResourceParts}} {{on \"change\" this.resourcePartsUpdate }} />{{/unless}} Base url +\n        </label>\n        <div class=\"inline-pselect\">\n          <Input @type=\"number\" class=\"form-control width-50\" placeholder=\"Resource path parts\" disabled={{this.disableFields}}\n                    @value={{this.numResourceParts}} {{on \"change\" this.updateNumResourceParts}} data-parsley-min=\"0\"\n                    data-parsley-min-message=\"Path parts must be >= 0\" />\n        </div>\n        path parts\n      </div>\n  \n      <div class=\"d-flex align-items-center gap-2 m-t-10\">\n        <label class=\"{{@labelClasses}} m-b-0\">Regex Mappings</label>\n        <div class=\"btn-group\" role=\"group\">\n          <button type=\"button\" class=\"btn btn-xs {{if (eq this.mappingViewMode 'list') 'btn-primary' 'btn-default'}}\"\n            disabled={{this.disableFields}}\n            {{on \"click\" (fn this.switchViewMode \"list\")}}>\n            List\n          </button>\n          <button type=\"button\" class=\"btn btn-xs {{if (eq this.mappingViewMode 'csv') 'btn-primary' 'btn-default'}}\"\n            disabled={{this.disableFields}}\n            {{on \"click\" (fn this.switchViewMode \"csv\")}}>\n            CSV\n          </button>\n        </div>\n      </div>\n  \n      {{#if (eq this.mappingViewMode \"list\")}}\n        <div class=\"d-flex gap-2 align-items-center m-t-5\">\n          <span>Examples</span>\n          <Ui::XSelect @class=\"form-control form-select w-250px\" disabled={{this.disableFields}} @value={{this.selectedExample}} @onChange={{this.onSelectExample}} as |xs| >\n            <xs.option>Select an example mapping</xs.option>\n            {{#each this.exampleResources as |resource|}}\n              <xs.option @value={{resource.pattern}}>\n                {{resource.title}}\n              </xs.option>\n            {{/each}}\n          </Ui::XSelect>\n          <button\n            type=\"button\"\n            class=\"btn btn-primary\"\n            {{on \"click\" (fn (mut this.showTestUrlModal) true)}}\n            disabled={{this.disableFields}}>Test Pattern</button>\n        </div>\n  \n        <table class=\"table resource-parts\">\n          <thead>\n            <tr>\n              <th style={{html-safe \"width: 5%; min-width: 50px;\"}}>\n                {{#if (and @editable (not this.disableFields))}}\n                  <button {{on \"click\" this.addRegex}} class=\"btn btn-xs btn-icon btn-primary\" data-bs-toggle=\"tooltip\"\n                    title=\"Add\" type=\"button\">\n                    <Ui::Icon @icon=\"fa fa-plus\" />\n                  </button>\n                {{/if}}\n              </th>\n              <th style={{html-safe \"width: 40%;\"}}>Pattern</th>\n              <th>Resource Name</th>\n            </tr>\n          </thead>\n          <tbody>\n            {{#each this.resourceNameMappings as |mapping|}}\n              <tr>\n                <td>\n                  {{#if (and @editable (not this.disableFields))}}\n                    <button {{on \"click\" (fn this.deleteRegex mapping)}}\n                            class=\"btn btn-sm btn-icon btn-circle text-danger m-t-5\"\n                            type=\"button\" data-bs-toggle=\"tooltip\" title=\"Delete pattern\">\n                      <Ui::Icon @icon=\"fa fa-trash\" />\n                    </button>\n                  {{/if}}\n                </td>\n                <td>\n                  <Input @type=\"text\" disabled={{this.disableFields}} class=\"form-control width-full\" {{on \"change\" this.onUpdateRegex}} @value={{mapping.pattern}} />\n                </td>\n                <td>\n                  <Input @type=\"text\" disabled={{this.disableFields}} class=\"form-control width-full\" {{on \"change\" this.onUpdateRegex}} @value={{mapping.result}} />\n                </td>\n              </tr>\n            {{else}}\n              <tr>\n                <td colspan=\"3\">No Pattern added yet.</td>\n              </tr>\n            {{/each}}\n          </tbody>\n        </table>\n      {{else}}\n        <div class=\"m-t-5\">\n          <small class=\"text-muted\">One row per regex mapping: [pattern],[resource-name]</small>\n          <textarea\n            class=\"form-control m-t-5\"\n            rows=\"10\"\n            disabled={{this.disableFields}}\n            {{on \"change\" this.onUpdateCsvText}}\n          >{{this.csvText}}</textarea>\n        </div>\n      {{/if}}\n  \n      <div class=\"form-group m-t-10\">\n        <label class=\"normal\">\n          <Input @type=\"checkbox\"\n            @checked={{this.resourceNameIgnoreNonMatch}}\n            {{on \"change\" this.onChangeIngoreCheckbox}}\n            disabled={{or this.disableFields (not this.resourceNameMappings)}} />\n          No by-resource aggregation for results that do not match any regex mapping\n        </label>\n      </div>\n  \n    </div>\n  </div>\n  \n  {{#if this.showTestUrlModal}}\n    <TestUrlModal\n      @numResourceParts={{this.numResourceParts}}\n      @resourceNameMappings={{this.resourceNameMappings}}\n      @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n      @closeModal={{fn (mut this.showTestUrlModal) false}}\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"form-group\\\"],[4,[38,1],[[30,0,[\\\"updateFields\\\"]],[30,1],[30,2],[30,3],[30,4]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,5]]]],[12],[1,\\\"Resource Names\\\\n    \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,[30,0,[\\\"resourceInfo\\\"]],\\\"bottom\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"    \\\"],[10,0],[15,0,[29,[[30,7],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[4,[38,6],[\\\"change\\\",[30,0,[\\\"onChangeOverrideOrgDefault\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"overrideOrgDefault\\\"]]]],null],[1,\\\" Override org default\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[14,0,\\\"cursor-pointer\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[4,[38,6],[\\\"click\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"showMapping\\\"]]],null],[28,[37,12],[[30,0,[\\\"showMapping\\\"]]],null]],null]],null]],[[\\\"@icon\\\"],[[29,[\\\"text-primary fa fa-\\\",[52,[30,0,[\\\"showMapping\\\"]],\\\"minus\\\",\\\"plus\\\"]]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[28,[37,13],[[30,6],[30,0,[\\\"showMapping\\\"]]],null],\\\"show\\\",\\\"hidden\\\"],\\\" m-l-10\\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[[30,7],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n        \\\"],[41,[51,[30,6]],[[[8,[39,5],[[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[4,[38,6],[\\\"change\\\",[30,0,[\\\"resourcePartsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"customResourceParts\\\"]]]],null]],[]],null],[1,\\\" Base url +\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"form-control width-50\\\"],[24,\\\"placeholder\\\",\\\"Resource path parts\\\"],[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Path parts must be >= 0\\\"],[4,[38,6],[\\\"change\\\",[30,0,[\\\"updateNumResourceParts\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"numResourceParts\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      path parts\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2 m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,5],\\\" m-b-0\\\"]]],[12],[1,\\\"Regex Mappings\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"btn-group\\\"],[14,\\\"role\\\",\\\"group\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-xs \\\",[52,[28,[37,15],[[30,0,[\\\"mappingViewMode\\\"]],\\\"list\\\"],null],\\\"btn-primary\\\",\\\"btn-default\\\"]]]],[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"switchViewMode\\\"]],\\\"list\\\"],null]],null],[12],[1,\\\"\\\\n          List\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-xs \\\",[52,[28,[37,15],[[30,0,[\\\"mappingViewMode\\\"]],\\\"csv\\\"],null],\\\"btn-primary\\\",\\\"btn-default\\\"]]]],[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"switchViewMode\\\"]],\\\"csv\\\"],null]],null],[12],[1,\\\"\\\\n          CSV\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"mappingViewMode\\\"]],\\\"list\\\"],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-flex gap-2 align-items-center m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,\\\"Examples\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,17],[[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select w-250px\\\",[30,0,[\\\"selectedExample\\\"]],[30,0,[\\\"onSelectExample\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"option\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"Select an example mapping\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,19],[[28,[37,19],[[30,0,[\\\"exampleResources\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,9,[\\\"pattern\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,9,[\\\"title\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"        \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"showTestUrlModal\\\"]]],null],true],null]],null],[12],[1,\\\"Test Pattern\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table resource-parts\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[15,5,[28,[37,24],[\\\"width: 5%; min-width: 50px;\\\"],null]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,25],[[30,10],[28,[37,12],[[30,0,[\\\"disableFields\\\"]]],null]],null],[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-icon btn-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Add\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"addRegex\\\"]]],null],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[15,5,[28,[37,24],[\\\"width: 40%;\\\"],null]],[12],[1,\\\"Pattern\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Resource Name\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,19],[[28,[37,19],[[30,0,[\\\"resourceNameMappings\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,25],[[30,10],[28,[37,12],[[30,0,[\\\"disableFields\\\"]]],null]],null],[[[1,\\\"                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger m-t-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete pattern\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"deleteRegex\\\"]],[30,11]],null]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,5],[[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,0,\\\"form-control width-full\\\"],[4,[38,6],[\\\"change\\\",[30,0,[\\\"onUpdateRegex\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,11,[\\\"pattern\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,5],[[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[24,0,\\\"form-control width-full\\\"],[4,[38,6],[\\\"change\\\",[30,0,[\\\"onUpdateRegex\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,11,[\\\"result\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[11]],[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,\\\"No Pattern added yet.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"small\\\"],[14,0,\\\"text-muted\\\"],[12],[1,\\\"One row per regex mapping: [pattern],[resource-name]\\\"],[13],[1,\\\"\\\\n        \\\"],[11,\\\"textarea\\\"],[24,0,\\\"form-control m-t-5\\\"],[24,\\\"rows\\\",\\\"10\\\"],[16,\\\"disabled\\\",[30,0,[\\\"disableFields\\\"]]],[4,[38,6],[\\\"change\\\",[30,0,[\\\"onUpdateCsvText\\\"]]],null],[12],[1,[30,0,[\\\"csvText\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[16,\\\"disabled\\\",[28,[37,13],[[30,0,[\\\"disableFields\\\"]],[28,[37,12],[[30,0,[\\\"resourceNameMappings\\\"]]],null]],null]],[4,[38,6],[\\\"change\\\",[30,0,[\\\"onChangeIngoreCheckbox\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]]]],null],[1,\\\"\\\\n        No by-resource aggregation for results that do not match any regex mapping\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showTestUrlModal\\\"]],[[[1,\\\"  \\\"],[8,[39,30],null,[[\\\"@numResourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@closeModal\\\"],[[30,0,[\\\"numResourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"showTestUrlModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@labelClasses\\\",\\\"@isOrg\\\",\\\"@inputClasses\\\",\\\"xs\\\",\\\"resource\\\",\\\"@editable\\\",\\\"mapping\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"unless\\\",\\\"input\\\",\\\"on\\\",\\\"b\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"fn\\\",\\\"mut\\\",\\\"not\\\",\\\"or\\\",\\\"button\\\",\\\"eq\\\",\\\"span\\\",\\\"ui/x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"html-safe\\\",\\\"and\\\",\\\"tbody\\\",\\\"td\\\",\\\"small\\\",\\\"textarea\\\",\\\"test-url-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/forms/resource-parts-input.hbs\",\n    \"isStrictMode\": false\n  });\n  const ResourceInfo = '<p>Testable will aggregate metrics for network requests by \"resource\". Resource names are determined differently depending on scenario type:</p>' + '<ul>' + '<li><strong>JMeter:</strong> Test plan element names</li>' + '<li><strong>Gatling:</strong> \"[scenario] - [request_name]\"</li>' + '<li><strong>Node.js Script:</strong> Provide a custom javascript function - <code>require(\\'testable-utils\\').results.toResourceName = (url, method) => { return `${method} ${url}`; }</code>. If not set the default behavior below applies.</li>' + '<li><strong>Default:</strong> Transform <code>[METHOD] [URL]</code> as the resource name:' + '  <ul>' + '    <li><strong>Regex Mappings:</strong> Define one or more regex patterns to apply on the <code>[METHOD] [URL]</code> resource name. If the pattern matches, define the resource name to use. This can include regex groups captured when matching the pattern. The first match will be used. If none match, we move onto the path parts approach.</li>' + '    <li><strong>Path Parts:</strong> Shorten the URL to a certain number of path parts (2 by default). For example <code>GET https://foo.com/a/b/c</code> with 2 path parts becomes <code>GET https://foo.com/a/b...</code></li>' + '  </ul>' + '</li>' + '</ul>';\n  const ExampleResources = [{\n    pattern: '.*\\\\/path\\\\/to\\\\/match\\\\/.*',\n    result: 'Resource Name',\n    title: `Use a fixed resource name for URLs with a certain path`\n  }, {\n    pattern: '.*\\\\/path\\\\/to\\\\/(?<symbol>.*)',\n    result: 'Symbol ${symbol}',\n    title: 'Match a path part with a named group and use it in the resource name' // This will be dynamic\n  }];\n  let ResourcePartsInput = _exports.default = (_class = class ResourcePartsInput extends _component2.default {\n    get disableFields() {\n      return !this.args.isOrg && !this.overrideOrgDefault;\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _defineProperty(this, \"resourceInfo\", ResourceInfo);\n      _defineProperty(this, \"exampleResources\", ExampleResources);\n      _initializerDefineProperty(this, \"customResourceParts\", _descriptor, this);\n      _initializerDefineProperty(this, \"numResourceParts\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedExample\", _descriptor4, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor5, this);\n      _initializerDefineProperty(this, \"showTestUrlModal\", _descriptor6, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showMapping\", _descriptor8, this);\n      _initializerDefineProperty(this, \"mappingViewMode\", _descriptor9, this);\n      _initializerDefineProperty(this, \"csvText\", _descriptor0, this);\n      this.updateFields();\n    }\n    updateFields() {\n      this.customResourceParts = _.isNumber(this.args.resourceParts);\n      this.overrideOrgDefault = this.args.overrideOrgDefault || false;\n      this.resourceNameIgnoreNonMatch = this.args.resourceNameIgnoreNonMatch || false;\n      this.numResourceParts = _.isNumber(this.args.resourceParts) ? this.args.resourceParts : this.getOrgParts();\n      this.resourceNameMappings = this.args.resourceNameMappings ? this.args.resourceNameMappings.map(rnm => {\n        return {\n          id: rnm.id,\n          pattern: atob(rnm.pattern),\n          result: atob(rnm.result)\n        };\n      }) : [];\n      if (this.mappingViewMode === 'csv') {\n        this.csvText = this.resourceNameMappings.map(m => `${m.pattern},${m.result}`).join('\\n');\n      } else {\n        this.csvText = '';\n      }\n      if (!this.overrideOrgDefault) {\n        this.setOrgParts();\n      } else {\n        this.showMapping = true;\n      }\n    }\n    onChangeOverrideOrgDefault(ckBox) {\n      this.overrideOrgDefault = ckBox.target.checked;\n      if (this.overrideOrgDefault) {\n        this.customResourceParts = true;\n        this.showMapping = true;\n      } else {\n        this.setOrgParts();\n      }\n      this.updateAttribute();\n    }\n    resourcePartsUpdate(ckBox) {\n      this.customResourceParts = ckBox.target.checked;\n      if (!this.customResourceParts) {\n        if (this.args.isOrg) {\n          this.numResourceParts = this.getOrgParts();\n        } else {\n          this.overrideOrgDefault = false;\n          this.setOrgParts();\n        }\n      }\n      this.updateAttribute();\n    }\n    updateNumResourceParts(e) {\n      this.numResourceParts = e.target.valueAsNumber;\n      this.updateAttribute();\n    }\n    onSelectExample(pattern) {\n      const regexMappings = this.resourceNameMappings;\n      const result = this.exampleResources.find(example => pattern === example.pattern).result;\n      regexMappings.push({\n        id: (0, _emberUuid.v4)(),\n        pattern,\n        result\n      });\n      this.resourceNameMappings = regexMappings;\n      this.selectedExample = null;\n      this.updateAttribute();\n    }\n    addRegex() {\n      const regexMappings = this.resourceNameMappings;\n      regexMappings.push({\n        id: (0, _emberUuid.v4)(),\n        pattern: '',\n        result: ''\n      });\n      this.resourceNameMappings = regexMappings;\n      this.updateAttribute();\n    }\n    deleteRegex(mapping) {\n      const regexMappings = this.resourceNameMappings.filter(regex => mapping.id !== regex.id);\n      this.resourceNameMappings = regexMappings;\n      if (this.resourceNameMappings.length === 0) {\n        this.resourceNameIgnoreNonMatch = false;\n      }\n      this.updateAttribute();\n    }\n    onChangeIngoreCheckbox(e) {\n      this.resourceNameIgnoreNonMatch = e.target.checked;\n      this.updateAttribute();\n    }\n    onUpdateRegex() {\n      this.updateAttribute();\n    }\n    switchViewMode(mode) {\n      if (mode === this.mappingViewMode) return;\n      if (mode === 'csv') {\n        this.csvText = this.resourceNameMappings.map(m => `${m.pattern},${m.result}`).join('\\n');\n      } else {\n        this.resourceNameMappings = this.parseCsvToMappings(this.csvText);\n      }\n      this.mappingViewMode = mode;\n    }\n    onUpdateCsvText(e) {\n      this.csvText = e.target.value;\n      this.resourceNameMappings = this.parseCsvToMappings(this.csvText);\n      this.updateAttribute();\n    }\n    parseCsvToMappings(text) {\n      return text.split('\\n').map(line => line.trim()).filter(line => line.length > 0).map(line => {\n        const commaIndex = line.indexOf(',');\n        if (commaIndex === -1) return {\n          id: (0, _emberUuid.v4)(),\n          pattern: line,\n          result: ''\n        };\n        return {\n          id: (0, _emberUuid.v4)(),\n          pattern: line.substring(0, commaIndex),\n          result: line.substring(commaIndex + 1)\n        };\n      });\n    }\n    getOrgParts() {\n      if (this.args.isOrg) return 2;\n      const orgParts = _environment.config.currentUser.org.settings.resourceParts;\n      return _.isNumber(orgParts) ? orgParts : 2;\n    }\n    setOrgParts() {\n      if (this.args.isOrg) return;\n      if (this.mappingViewMode !== 'list') {\n        this.mappingViewMode = 'list';\n      }\n      const {\n        resourceParts,\n        resourceNameMappings,\n        resourceNameIgnoreNonMatch\n      } = _environment.config.currentUser.org.settings;\n      this.numResourceParts = _.isNumber(resourceParts) ? resourceParts : 2;\n      this.resourceNameMappings = resourceNameMappings ? resourceNameMappings.map(rnm => {\n        return {\n          id: rnm.id,\n          pattern: atob(rnm.pattern),\n          result: atob(rnm.result)\n        };\n      }) : [];\n      this.resourceNameIgnoreNonMatch = resourceNameIgnoreNonMatch;\n      this.customResourceParts = true;\n    }\n    updateAttribute() {\n      const numResourceParts = this.customResourceParts ? this.numResourceParts : null;\n      const attributes = {\n        overrideOrgDefault: this.overrideOrgDefault,\n        resourceParts: numResourceParts,\n        resourceNameMappings: [...this.resourceNameMappings].map(rnm => {\n          return {\n            id: rnm.id,\n            pattern: btoa(rnm.pattern),\n            result: btoa(rnm.result)\n          };\n        }),\n        resourceNameIgnoreNonMatch: this.resourceNameIgnoreNonMatch\n      };\n      this.args.onChange(attributes);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"customResourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"numResourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedExample\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showTestUrlModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showMapping\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"mappingViewMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'list';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"csvText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateFields\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFields\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeOverrideOrgDefault\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeOverrideOrgDefault\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourcePartsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourcePartsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNumResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNumResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectExample\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectExample\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addRegex\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addRegex\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteRegex\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteRegex\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeIngoreCheckbox\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeIngoreCheckbox\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateRegex\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateRegex\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"switchViewMode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"switchViewMode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateCsvText\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateCsvText\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResourcePartsInput);\n});","define(\"@testable/shared-ui/components/grid-search\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/object/observers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _observers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/object/observers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div ...attributes class=\"float-right m-l-10 no-print\">\n    <div class=\"input-group input-group-sm\">\n      <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\" /></span>\n      <Input @type=\"text\" @value={{this.search}} placeholder=\"Search...\" class=\"form-control form-control-sm\"/>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[17,1],[24,0,\\\"float-right m-l-10 no-print\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"input-group input-group-sm\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,2],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[8,[39,3],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control form-control-sm\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"search\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\"],[\\\"div\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"input\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/grid-search.hbs\",\n    \"isStrictMode\": false\n  });\n  let GridSearchComponent = _exports.default = (_class = class GridSearchComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"inTab\", _descriptor, this);\n      _initializerDefineProperty(this, \"search\", _descriptor2, this);\n      _initializerDefineProperty(this, \"bottomMargin\", _descriptor3, this);\n      this.inTab = this.args.inTab;\n      this.bottomMargin = this.args.bottomMargin;\n      (0, _observers.addObserver)(this, 'search', this.searchChanged);\n    }\n    willDestroy() {\n      (0, _observers.removeObserver)(this, 'search', this.searchChanged);\n    }\n    searchChanged() {\n      if (typeof this.args.onSearch === 'function') {\n        this.args.onSearch(this.search);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"inTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"bottomMargin\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"searchChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"searchChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, GridSearchComponent);\n});","define(\"@testable/shared-ui/components/histogram-chart-per-bucket\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@ember/template\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object/observers\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/xy\", \"@amcharts/amcharts5/themes/Animated\", \"@testable/shared-ui/utils/amcharts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _template, _service, _tracking, _observers, _lib, _loadTest, am5, am5xy, _Animated, _amcharts2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/template\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/xy\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"chart\"\n    {{did-insert this.didInsert}}\n    {{will-destroy this.destructor}}\n  >\n    <div id=\"{{@id}}\" style={{this.style}}></div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"chart\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"destructor\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[[30,1]]]],[15,5,[30,0,[\\\"style\\\"]]],[12],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"will-destroy\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/histogram-chart-per-bucket.hbs\",\n    \"isStrictMode\": false\n  });\n  let HistogramChartPerBucketComponent = _exports.default = (_dec = (0, _object.computed)('args.data.intervals.0.granularity', 'args.selectedResource.{id,intervals.0.granularity}'), _class = class HistogramChartPerBucketComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor3, this);\n      _initializerDefineProperty(this, \"dataCache\", _descriptor4, this);\n      _initializerDefineProperty(this, \"chart\", _descriptor5, this);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chartData\", _descriptor7, this);\n      _initializerDefineProperty(this, \"currentMetrics\", _descriptor8, this);\n      _initializerDefineProperty(this, \"modelIntervals\", _descriptor9, this);\n      _initializerDefineProperty(this, \"updatingZoom\", _descriptor0, this);\n      // set an array of colors with 10 colors\n      _defineProperty(this, \"colors\", ['#0303c9', '#00B3E6', '#00E680', '#c4900c', '#bb96d0', '#b6b602', '#FF1A66', '#1AB399', '#b601b6', '#FFFF99', '#FFB399', '#FF99E6', '#FF6633', '#FF4D4D', '#FF33FF', '#3366E6', '#E6FF80', '#E6B3B3', '#E6B333', '#E666FF', '#E666B3', '#E64D66', '#CCCC00', '#33991A', '#CC9999', '#CC80CC', '#B3B31A', '#B366CC', '#B34D4D', '#B33300', '#999933', '#991AFF', '#9900B3', '#809980', '#66991A', '#6666FF', '#66664D', '#4DB3FF', '#4D80CC', '#33FFCC']);\n      this.EventBus.subscribe(this.args.regionName + \".rt.data.update\", this, 'onDataUpdated');\n      this.EventBus.subscribe(this.args.regionName + \".rt.data.refresh\", this, 'refreshChart');\n      (0, _observers.addObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.utilizationWarningThreshold', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.showHistory', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.period', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.currentTab', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.data.intervals', this.chartConfigChanged);\n\n      // Consume the getter so its observer attaches — a native getter only wires up once it is read\n      this.minPeriod;\n      (0, _observers.addObserver)(this, 'minPeriod', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.config.settings.showRelativeTime', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'currentMetrics.@each.selected', this.selectedChanged);\n      _lib.default.observeKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.selected', this.metricsChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.graphType', this.metricsChanged);\n    }\n    destructor() {\n      this.EventBus.unsubscribe(this.args.regionName + '.rt.data.update', this, 'onDataUpdated');\n      this.EventBus.unsubscribe(this.args.regionName + '.rt.data.refresh', this, 'refreshChart');\n      (0, _observers.removeObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.utilizationWarningThreshold', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.showHistory', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.period', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.currentTab', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.data.intervals', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'minPeriod', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.config.settings.showRelativeTime', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'currentMetrics.@each.selected', this.selectedChanged);\n      _lib.default.unobserveKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.selected', this.metricsChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.graphType', this.metricsChanged);\n      if (this.chartRoot) {\n        this.chartRoot.dispose();\n        this.chartRoot = null;\n      }\n      this.chart = null;\n    }\n    didInsert() {\n      this.currentMetrics = _.cloneDeep(this.args.metrics);\n      this.chart = this.makeChart(this.args.id);\n      _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n    }\n    get style() {\n      return (0, _template.htmlSafe)(`width: ${this.args.width || 100}%; height: 440px`);\n    }\n    get isRelativeTime() {\n      return !this.args.showHistory && this.args.config.settings.showRelativeTime && this.args.data.execution.configuration.testType === 'Load';\n    }\n    get granularity() {\n      const selector = this.args.selectedResource.id > 0 ? 'selectedResource' : 'data';\n      return this.args[selector]?.intervals?.[0]?.granularity || 'TenSeconds';\n    }\n    get minPeriod() {\n      switch (this.granularity) {\n        case 'OneMinute':\n          return '1mm';\n        case 'FiveMinutes':\n          return '5mm';\n        case 'TenSeconds':\n        default:\n          return '10ss';\n      }\n    }\n    get metrics() {\n      let data = this.getDataSource();\n      let metrics = this.currentMetrics;\n      let returnMetrics = [];\n      let indexForColor = 0;\n      _.forEach(metrics, metric => {\n        if (!metric.selected) {\n          return;\n        }\n        let key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        let isPercent;\n        if (_lib.default.endsWith(key, '-percent')) {\n          isPercent = true;\n          key = key.replace('-percent', '');\n        }\n        let bucketKey = key + '-buckets';\n        let uniqueValues = _.uniq(_.map(_.flatten(_.map(data, bucketKey)), 'key'));\n        _.forEach(uniqueValues, uniqueVal => {\n          if (!uniqueVal) {\n            return;\n          }\n          if (indexForColor >= this.colors.length) {\n            indexForColor = 0;\n          }\n          let name;\n          if (isPercent) {\n            name = metric.name.replace('-percent', '');\n            name += `-${uniqueVal}-percent`;\n          } else {\n            name = `${metric.name}-${uniqueVal}`;\n          }\n          returnMetrics.push({\n            ...metric,\n            name,\n            title: metric.title + ' ' + uniqueVal,\n            color: this.colors[indexForColor]\n          });\n          indexForColor = indexForColor + 1;\n        });\n      });\n      return returnMetrics;\n    }\n    getDataSource() {\n      let model = this.args.selectedResource.id > 0 ? this.args.selectedResource : this.args.data;\n      if (_.isEmpty(model)) {\n        return [];\n      } else if (this.args.showHistory) {\n        return this.prepareSummaryHistoryDataSource(model.summaryHistory);\n      } else {\n        this.modelIntervals = _.clone(model.intervals); //shallow copy\n      }\n      return model.intervals;\n    }\n    zoomOut() {\n      this.zoomOutAction();\n    }\n    zoomOutAction() {\n      this.updatingZoom = true;\n      this.zoomInfo.update({\n        startTimestamp: null,\n        endTimestamp: null,\n        isAll: true\n      });\n      this.updatingZoom = false;\n    }\n    onDataUpdated(intervals) {\n      let chart = this.chart;\n      if (_.isEmpty(chart)) {\n        chart = this.makeChart(this.args.id);\n        this.chart = chart;\n      }\n      if (!this.args.showHistory && _.isObject(chart)) {\n        this.updateDataProvider(chart, intervals, this.modelIntervals);\n      }\n    }\n\n    // observer\n    chartConfigChanged() {\n      this.refreshChart(true);\n    }\n\n    // observer\n    metricsChanged() {\n      if (!_.isEqual(this.currentMetrics, this.args.metrics)) {\n        this.refreshChart(true);\n      }\n    }\n\n    // observer\n    selectedChanged() {\n      this.refreshChart(false);\n    }\n\n    // observer\n    onZoomChanged() {\n      if (!this.updatingZoom) {\n        (0, _runloop.once)(this, 'doZoom');\n      }\n    }\n    refreshChart(cloneMetrics) {\n      let chart = this.chart;\n      if (chart) {\n        if (this.chartRoot) {\n          this.chartRoot.dispose();\n          this.chartRoot = null;\n        }\n        this.chart = null;\n      }\n      this.modelIntervals = null;\n      if (cloneMetrics) {\n        this.currentMetrics = _.cloneDeep(this.args.metrics);\n      }\n      this.chart = this.makeChart(this.args.id);\n      _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n    }\n    doZoom(chart) {\n      try {\n        chart = chart || this.chart;\n        const zoomInfo = this.zoomInfo;\n        if (chart) {\n          const dataProvider = this.getDataSource();\n          this.updatingZoom = true;\n          if (dataProvider && dataProvider.length > 0 && zoomInfo && zoomInfo.startTimestamp > 0 && zoomInfo.endTimestamp > 0) {\n            const startIndex = _.findLastIndex(dataProvider, interval => {\n              return interval.intervalStart <= zoomInfo.startTimestamp;\n            });\n            const endIndex = _.findLastIndex(dataProvider, interval => {\n              return interval.intervalStart < zoomInfo.endTimestamp;\n            });\n            if (startIndex >= 0 && endIndex >= 0 && startIndex <= endIndex) {\n              chart.xAxes.values[0].zoomToIndexes(startIndex, endIndex);\n            } else {\n              chart.zoomOut();\n            }\n          } else {\n            chart.zoomOut();\n          }\n          this.updatingZoom = false;\n        }\n      } catch (err) {\n        console.log('chart zoom failed');\n      }\n    }\n    makeChart(id) {\n      let data = this.getDataSource();\n      let currentTab = this.args.currentTab;\n      if (!data) return;\n      if (currentTab !== '#results-tab') {\n        let dataCache = this.dataCache;\n        this.dataCache = dataCache.concat(data);\n        return null;\n      } else {\n        data = data.concat(this.dataCache);\n        this.dataCache = [];\n      }\n      _amcharts2.default.initLicense();\n      let chartConfig = this.args.chartConfig;\n      let metrics = this.currentMetrics;\n      let utilizationWarningThreshold = Number(this.args.utilizationWarningThreshold);\n      let bucketAggregator = this.args.bucketAggregator;\n      let showHistory = this.args.showHistory;\n      let axes = this.createValueAxes(metrics, chartConfig?.chartType, utilizationWarningThreshold, bucketAggregator);\n      let lineGraphs = [];\n      let columnGraphs = [];\n      let indexForColor = 0;\n      _.forEach(metrics, metric => {\n        if (!metric.selected) {\n          return;\n        }\n        let orignalKey = _lib.default.toMetricKey(metric.namespace, metric.name);\n        let key = orignalKey;\n        let isPercent;\n        if (_lib.default.endsWith(orignalKey, '-percent')) {\n          isPercent = true;\n          key = orignalKey.replace('-percent', '');\n        }\n        let bucketKey = key + '-buckets';\n        let uniqueValues = _.uniq(_.map(_.flatten(_.map(data, bucketKey)), 'key'));\n        _.forEach(uniqueValues, uniqueVal => {\n          if (!uniqueVal) {\n            return;\n          }\n          let axis = axes.byMetric[orignalKey];\n          if (indexForColor >= this.colors.length) {\n            indexForColor = 0;\n          }\n          axis.color = this.colors[indexForColor];\n          indexForColor = indexForColor + 1;\n          let graph = {\n            \"name\": _lib.default.stripHtml(metric.title),\n            \"fill\": axis.color,\n            \"type\": 'line',\n            \"valueAxis\": axis,\n            \"valueField\": key + '-' + uniqueVal + (isPercent ? '-percent' : '')\n          };\n          graph.color = '#FF0000';\n          graph.bulletFill = am5.color(0xFFFFFF);\n          graph.bulletRadius = 2.5;\n          graph.bulletStrokeWidth = 2;\n          lineGraphs.push(graph);\n        });\n      });\n      const _this = this;\n      const isRelativeTime = this.isRelativeTime;\n      const categoryField = isRelativeTime ? \"_diff\" : \"date\";\n      let model = this.args.selectedResource.id > 0 ? this.args.selectedResource : this.args.data;\n      if (!model?.summary) return;\n\n      // Skip chart creation if container is hidden (0 width) — e.g. inactive tab\n      let el = document.getElementById(id);\n      if (!el || el.offsetWidth === 0) return;\n      let root = am5.Root.new(id);\n      root.setThemes([_Animated.default.new(root)]);\n      let chart = root.container.children.push(am5xy.XYChart.new(root, {\n        maxTooltipDistance: 0,\n        layout: root.verticalLayout\n      }));\n      chart.zoomOutButton.set(\"forceHidden\", true);\n      const categoryAxisType = isRelativeTime ? 'CategoryAxis' : 'CategoryDateAxis';\n      let xAxis = chart.xAxes.push(am5xy[categoryAxisType].new(root, {\n        marginTop: 15,\n        categoryField: categoryField,\n        baseInterval: {\n          timeUnit: \"second\",\n          count: 1\n        },\n        gridIntervals: [{\n          timeUnit: \"second\",\n          count: 30\n        }, {\n          timeUnit: \"minute\",\n          count: 1\n        }, {\n          timeUnit: \"minute\",\n          count: 5\n        }, {\n          timeUnit: \"minute\",\n          count: 10\n        }, {\n          timeUnit: \"minute\",\n          count: 15\n        }, {\n          timeUnit: \"minute\",\n          count: 30\n        }, {\n          timeUnit: \"hour\",\n          count: 1\n        }, {\n          timeUnit: \"hour\",\n          count: 3\n        }, {\n          timeUnit: \"hour\",\n          count: 6\n        }, {\n          timeUnit: \"hour\",\n          count: 12\n        }, {\n          timeUnit: \"day\",\n          count: 1\n        }, {\n          timeUnit: \"day\",\n          count: 3\n        }, {\n          timeUnit: \"day\",\n          count: 5\n        }],\n        layout: root.verticalLayout,\n        renderer: am5xy.AxisRendererX.new(root, {})\n      }));\n      xAxis.data.setAll(data);\n      let renderer = am5xy.AxisRendererY.new(root, {});\n      renderer.grid.template.set(\"strokeOpacity\", 0);\n      renderer.setAll({\n        strokeOpacity: 0,\n        opacity: 0\n      });\n      let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n        renderer\n      }));\n      yAxis.get(\"renderer\").labels.template.set(\"forceHidden\", true);\n      if (showHistory) {\n        let seriesDummy = chart.series.push(am5xy.ColumnSeries.new(root, {\n          xAxis: xAxis,\n          yAxis: yAxis,\n          valueYField: \"Testable-pf\",\n          categoryXField: categoryField,\n          clustered: false,\n          maskBullets: false\n        }));\n        seriesDummy.data.setAll(data);\n        seriesDummy.columns.template.setAll({\n          fill: am5.color(0xFF0000),\n          opacity: 0,\n          height: 600,\n          width: am5.percent(100),\n          cursorOverStyle: 'pointer'\n        });\n        seriesDummy.columns.template.states.create(\"mouseHover\", {\n          opacity: 0.1\n        });\n        seriesDummy.columns.template.states.create(\"mouseOut\", {\n          opacity: 0\n        });\n        seriesDummy.columns.template.events.on(\"pointerover\", ev => {\n          ev.target.states.applyAnimate(\"mouseHover\");\n        });\n        seriesDummy.columns.template.events.on(\"pointerout\", ev => {\n          ev.target.states.applyAnimate(\"mouseOut\");\n        });\n        seriesDummy.columns.template.events.once(\"click\", ev => {\n          if (ev.target.dataItem.dataContext.executionId) _this.router.transitionTo('loadTestResults', ev.target.dataItem.dataContext.executionId);\n        });\n      }\n      let yAxisArray = {};\n      _.forEach([...columnGraphs, ...lineGraphs], graph => {\n        let isLineChart = graph.type === 'line';\n        const seriesToUse = isLineChart ? 'LineSeries' : 'ColumnSeries';\n        let yAxis;\n        if (yAxisArray[graph.valueAxis.unit]) {\n          yAxis = yAxisArray[graph.valueAxis.unit];\n        } else {\n          let yRenderer = _amcharts2.default.getYRenderer(root, graph.valueAxis.fill, graph.valueAxis.opposite);\n          yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n            // we need all numbers in exact format, so we can implement our own label formatter\n            numberFormat: '###############',\n            min: graph.valueAxis.minimum,\n            max: graph.valueAxis.maximum,\n            renderer: yRenderer\n          }));\n          yRenderer.labels.template.adapters.add(\"text\", this.labelFunction.bind(this, graph.valueAxis.unit));\n          yAxisArray[graph.valueAxis.unit] = yAxis;\n        }\n        if (graph.valueAxis.guides) {\n          let rangeDataItem = yAxis.makeDataItem({\n            value: graph.valueAxis.guides.value,\n            endValue: graph.valueAxis.guides.endValue\n          });\n          yAxis.createAxisRange(rangeDataItem);\n          rangeDataItem.get(\"axisFill\").setAll({\n            fill: graph.valueAxis.guides.fill,\n            visible: true\n          });\n        }\n        if (graph.valueAxis?.labelsEnabled === false) yAxis.get(\"renderer\").labels.template.set(\"forceHidden\", true);\n        let series = chart.series.push(am5xy[seriesToUse].new(root, {\n          name: graph.name,\n          fill: graph.fill,\n          stroke: graph.fill,\n          strokeWidth: graph.valueAxis.strokeWidth,\n          xAxis: xAxis,\n          yAxis: yAxis,\n          valueYField: graph.valueField,\n          categoryXField: categoryField,\n          maskBullets: false,\n          minBulletDistance: 15\n        }));\n        series.bullets.push((root, series) => {\n          let circle = am5.Circle.new(root, {\n            radius: graph.bulletRadius,\n            fill: graph.bulletFill,\n            stroke: series.get(\"fill\"),\n            strokeWidth: graph.bulletStrokeWidth\n          });\n          return am5.Bullet.new(root, {\n            sprite: circle\n          });\n        });\n        series.data.setAll(data);\n        series.set(\"tooltip\", this.getChartToolTip(root));\n      });\n      let cursor = chart.set(\"cursor\", am5xy.XYCursor.new(root, {\n        xAxis: xAxis,\n        behavior: showHistory ? \"none\" : \"selectX\"\n      }));\n      cursor.lineY.setAll({\n        visible: false\n      }); // hide the cursor line on Y axes\n      cursor.lineX.setAll({\n        stroke: am5.color(0x000000),\n        strokeOpacity: 0.2\n      });\n      cursor.selection.setAll({\n        fill: am5.color(0x000055),\n        fillOpacity: 0.4\n      });\n      if (!showHistory) {\n        _this.doZoom(chart);\n        cursor.events.on(\"selectended\", function (ev) {\n          const downPositionX = xAxis.toAxisPosition(cursor.getPrivate(\"downPositionX\", 0));\n          const positionX = xAxis.toAxisPosition(cursor.getPrivate(\"positionX\", 0.5));\n          let startIndex = xAxis.axisPositionToIndex(downPositionX);\n          let endIndex = xAxis.axisPositionToIndex(positionX);\n          if (startIndex > endIndex) {\n            let tmp = startIndex;\n            startIndex = endIndex;\n            endIndex = tmp;\n          }\n          if (startIndex < 0) {\n            startIndex = 0;\n          } else if (startIndex >= data.length) {\n            startIndex = data.length - 1;\n          }\n          if (startIndex < 0) {\n            endIndex = 0;\n          } else if (endIndex >= data.length) {\n            endIndex = data.length - 1;\n          }\n          const zoomInfo = {\n            startTimestamp: startIndex !== -1 ? data[startIndex]?.intervalStart : null,\n            endTimestamp: endIndex !== -1 ? data[endIndex]?.intervalStart + data[endIndex]?.timespan : null,\n            isAll: startIndex === 0 && endIndex === data.length - 1\n          };\n          // if ( !_this.isDestroyed ) {\n          _this.updatingZoom = true;\n          _this.zoomInfo.update(zoomInfo);\n          _this.updatingZoom = false;\n          // }\n        });\n      }\n      if (showHistory) {\n        chart.children.unshift(am5.Label.new(root, {\n          text: _lib.default.displayPeriod(this.period) + ' Test History',\n          fontSize: 12,\n          fontWeight: \"600\",\n          textAlign: \"center\",\n          x: am5.percent(50),\n          centerX: am5.percent(50),\n          centerY: am5.percent(50)\n        }));\n      }\n      let legend = xAxis.children.push(am5.Legend.new(root, {\n        nameField: \"name\",\n        fillField: \"color\",\n        strokeField: \"stroke\",\n        strokeWidth: 4,\n        x: am5.percent(50),\n        centerX: am5.percent(50),\n        layout: root.gridLayout,\n        marginTop: 15,\n        cursorOverStyle: \"pointer\"\n      }));\n      const legendData = this.createLegend();\n      legend.data.setAll(legendData);\n      legend.eachChildren(item => {\n        item.events.on(\"click\", ev => {\n          if (ev.target.dataItem.dataContext.metric) {\n            (0, _object.set)(ev.target.dataItem.dataContext.metric, 'selected', !ev.target.dataItem.dataContext.metric.selected);\n          }\n        });\n      });\n      legend.markers.values.forEach(marker => {\n        const markerType = marker.dataItem.dataContext.markerType;\n        marker.children.values[0].adapters.add(\"cornerRadiusTL\", () => markerType !== 'line' ? 0 : 12);\n        marker.children.values[0].adapters.add(\"cornerRadiusTR\", () => markerType !== 'line' ? 0 : 12);\n        marker.children.values[0].adapters.add(\"cornerRadiusBL\", () => markerType !== 'line' ? 0 : 12);\n        marker.children.values[0].adapters.add(\"cornerRadiusBR\", () => markerType !== 'line' ? 0 : 12);\n      });\n      chart.legend = legend;\n      if (!this.zoomInfo.isAll) {\n        let button = chart.plotContainer.children.push(am5.Button.new(root, {\n          dx: 10,\n          cursorOverStyle: \"pointer\",\n          label: am5.Label.new(root, {\n            text: \"Zoom Out\",\n            fontSize: 12,\n            paddingTop: 1,\n            paddingRight: 2,\n            paddingBottom: 1,\n            paddingLeft: 2,\n            fill: am5.color(0x007bff)\n          })\n        }));\n        button.get(\"background\").setAll({\n          cornerRadiusTL: 3,\n          cornerRadiusTR: 3,\n          cornerRadiusBR: 3,\n          cornerRadiusBL: 3,\n          fill: am5.color(0xFFFFFF),\n          fillOpacity: 0.8,\n          stroke: am5.color(0x000000),\n          strokeOpacity: 0.2\n        });\n        button.get(\"background\").states.create(\"hover\", {}).setAll({\n          fill: am5.color(0x007bff),\n          fillOpacity: 0.2\n        });\n        button.get(\"background\").states.create(\"down\", {}).setAll({\n          fill: am5.color(0x007bff),\n          fillOpacity: 0.4\n        });\n        button.events.on(\"click\", () => {\n          _this.zoomOutAction();\n        });\n      }\n      this.chartData = data;\n      this.chartRoot = root;\n      _amcharts2.default.addExportOptions(root);\n      return chart;\n    }\n    prepareSummaryHistoryDataSource(summaryHistory) {\n      const failColorMetrics = this.getMetricsWithFailColor();\n      if (failColorMetrics.length > 0) {\n        return _.map(summaryHistory, summary => {\n          const answer = _.clone(summary);\n          _.forEach(failColorMetrics, metricInfo => {\n            const color = _.isBoolean(summary.executionSuccess) && !summary.executionSuccess ? metricInfo.metric.failColor : metricInfo.metric.color;\n            answer[metricInfo.colorKey] = {\n              fill: color,\n              stroke: color\n            };\n          });\n          return answer;\n        });\n      } else {\n        return summaryHistory;\n      }\n    }\n    getMetricsWithFailColor() {\n      const failMetrics = _.filter(this.currentMetrics, metric => {\n        return metric.useFailColor && metric.failColor;\n      });\n      return _.map(failMetrics, failMetric => {\n        return {\n          colorKey: this.toColorKey(failMetric),\n          metric: failMetric\n        };\n      });\n    }\n    getChartToolTip(root) {\n      const _this = this;\n      let tooltip = _amcharts2.default.getToolTipObj(root);\n      let currentText = '';\n      tooltip.label.adapters.add(\"text\", () => currentText);\n      tooltip.events.on(\"dataitemchanged\", () => {\n        if (tooltip.dataItem?.dataContext) {\n          const data = tooltip.dataItem.dataContext;\n          currentText = this.balloonText(data);\n        }\n      });\n      return tooltip;\n    }\n    createLegend() {\n      const isPrint = this.args.isPrint;\n      const answer = [];\n      _.forEach(this.metrics, metric => {\n        if (!isPrint || metric.selected) {\n          const color = metric.color;\n          const gray = \"#c5ced4\";\n          answer.push({\n            color: metric.graphType === 'column' ? metric.selected ? color : gray : 'white',\n            name: _lib.default.truncateString(_lib.default.stripHtml(metric.title), 50),\n            markerType: metric.graphType === 'column' ? 'square' : 'line',\n            stroke: metric.selected ? color : gray,\n            metric: metric\n          });\n        }\n      });\n      return answer;\n    }\n    labelFunction(unit, value) {\n      if (unit === 'bytes') {\n        return _lib.default.printBytes(value);\n      }\n      if (unit === 'bytes/sec') {\n        return _lib.default.printBitRate(value);\n      }\n      return _lib.default.printMetricValue(value, unit);\n    }\n    invalidateChart(chart, data) {\n      if (_.isObject(chart)) {\n        if (_.isObject(this.chartRoot)) {\n          _amcharts2.default.checkEmptyData(this.chartRoot, chart, data);\n        }\n      }\n    }\n    toColorKey(metric) {\n      return _lib.default.toMetricKey(metric.namespace, metric.name) + '-color';\n    }\n    createValueAxes(metrics, chartType, utilizationWarningThreshold, bucketAggregator) {\n      let axes = {};\n      let metricToAxis = {};\n      let numAxes = 0;\n      _.forEach(metrics, metric => {\n        if (!metric.selected) {\n          return;\n        }\n        let key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        let metricParts = _lib.default.splitMetricName(metric.name);\n        let units = metric.units;\n        if (!units || units === '%d') {\n          units = '';\n        }\n        let axis;\n        if (metricParts.isPercent) {\n          units = \"percent\";\n        }\n        axis = axes[units];\n        if (_.isUndefined(axis)) {\n          const isLeft = numAxes % 2 === 0;\n          axis = this.valueAxis(\"v\" + _.upperFirst(units), metric.color, metricParts.isPercent ? \"%\" : units, metric.hideAxis, isLeft, chartType, utilizationWarningThreshold, bucketAggregator);\n          axes[units] = axis;\n          numAxes++;\n        }\n        metricToAxis[key] = axis;\n      });\n      return {\n        byMetric: metricToAxis,\n        all: _.values(axes)\n      };\n    }\n    graphTitle(metric, typeAsTitle) {\n      let metricParts = _lib.default.splitMetricName(metric.name);\n      let type = _lib.default.camelCaseToTitleCase(metricParts.type);\n      let subtype = metricParts.subtype;\n      if (typeAsTitle || _.isEmpty(subtype) || metricParts.isPercent || metric.isMetered) {\n        return type;\n      } else if (subtype === 'total' || subtype === 'peak') {\n        return _.capitalize(subtype) + ' ' + type;\n      } else if (subtype.indexOf('p') === 0) {\n        return subtype.substring(1) + ' %tile';\n      } else {\n        return _.upperFirst(subtype);\n      }\n    }\n    valueAxis(id, color, units, hideAxis, isLeft, chartType, utilizationWarningThreshold, bucketAggregator) {\n      let axis = {\n        \"fill\": color,\n        \"strokeWidth\": 2,\n        \"opposite\": !isLeft,\n        \"unit\": units\n      };\n      if (units === \"%\" && chartType === \"Metered\" && _.isNumber(utilizationWarningThreshold) && bucketAggregator !== 'Peak') {\n        axis.guides = {\n          fill: \"rgba(255,128,0,0.05)\",\n          visible: true,\n          endValue: 100,\n          value: utilizationWarningThreshold\n        };\n        axis.minimum = 0;\n        axis.maximum = 100;\n      }\n      if (hideAxis || units === '__pf__') {\n        axis.labelsEnabled = false;\n      }\n      return axis;\n    }\n    balloonText(graphDataItem) {\n      const metricDefs = this.args.metricDefs;\n      const scriptType = this.args.scriptType;\n      let text = \"[bold]At: [/]\";\n      if (this.args.showHistory) {\n        text += _lib.default.displayDateTime(graphDataItem.date);\n        if (_.isBoolean(graphDataItem.executionSuccess)) {\n          text += \"\\n[bold]Outcome[/]: \" + _amcharts2.default.getOutcome(graphDataItem.executionSuccess);\n        }\n      } else {\n        text += _lib.default.displayDateTime(graphDataItem.intervalStart) + ' (' + _lib.default.printGranularity(graphDataItem.granularity) + ')';\n      }\n      _.forEach(this.metrics, metric => {\n        if (metric.excludeFromBalloon) {\n          return;\n        }\n        if (text.length > 0) {\n          text += \"\\n\";\n        }\n        const label = metric.title || this.graphTitle(metric, this.args.typeAsTitle);\n        const metricText = _loadTest.default.printMetric(graphDataItem, metric.namespace, metric.name, metric.units, false, metricDefs, false, null, scriptType);\n        text += \"[bold]\" + _lib.default.truncateString(label, 20) + \"[/]: \" + _lib.default.truncateString(metricText, 20);\n      });\n      return _lib.default.stripHtml(text);\n    }\n    updateDataProvider(chart, newIntervals, data) {\n      if (chart?.series?.values?.length > 0 && newIntervals?.length) {\n        newIntervals.forEach(nI => {\n          let index = data.findIndex(dI => dI.intervalStart === nI.intervalStart);\n          let intervalType = 'update';\n          let intervalIndex;\n          if (index === -1) {\n            // item not found\n            if (data.length === 0 || nI.intervalStart > data[data.length - 1].intervalStart) {\n              // add to end if intervalStart is greater than last item\n              data.push(nI);\n              intervalType = 'push';\n            } else {\n              // find the correct index to insert\n              let l = data.length - 1;\n              while (l >= 0 && nI.intervalStart > data[l].intervalStart) {\n                l--;\n              }\n              data.splice(l, 0, nI);\n              intervalType = 'insert';\n              intervalIndex = l;\n            }\n          } else {\n            // Item found, update the existing object\n            data[index] = nI;\n            intervalType = 'set';\n            intervalIndex = index;\n          }\n          _.forEach(chart.series.values, item => {\n            if (intervalType === 'push') item.data.push(nI);else if (intervalType === 'insert') item.data.insertIndex(intervalIndex, nI);else if (intervalType === 'set') item.data.setIndex(intervalIndex, nI);\n          });\n          if (intervalType === 'push') chart.xAxes.values[0].data.push(nI);else if (intervalType === 'insert') chart.xAxes.values[0].data.insertIndex(intervalIndex, nI);else if (intervalType === 'set') chart.xAxes.values[0].data.setIndex(intervalIndex, nI);\n        });\n      }\n      this.invalidateChart(chart, data);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"dataCache\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"chart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chartData\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"currentMetrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"modelIntervals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"updatingZoom\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"destructor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"destructor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"granularity\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"granularity\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"zoomOut\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"zoomOut\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"zoomOutAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"zoomOutAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDataUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refreshChart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshChart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"doZoom\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doZoom\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"makeChart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"makeChart\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, HistogramChartPerBucketComponent);\n});","define(\"@testable/shared-ui/components/histogram-chart\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"@ember/runloop\", \"@ember/service\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/percent\", \"@amcharts/amcharts5/themes/Animated\", \"@amcharts/amcharts5/themes/Responsive\", \"@testable/shared-ui/utils/amcharts\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _runloop, _service, am5, am5percent, _Animated, _Responsive, _amcharts2, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/percent\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@amcharts/amcharts5/themes/Responsive\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id={{@id}} class=\"chart {{if this.isMulti 'multi-chart'}}\" style={{html-safe \"width: 100%; height: 340px;\"}}\n    {{did-insert this.didInsert}}\n  >\n  \n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,1,[30,1]],[16,0,[29,[\\\"chart \\\",[52,[30,0,[\\\"isMulti\\\"]],\\\"multi-chart\\\"]]]],[16,5,[28,[37,2],[\\\"width: 100%; height: 340px;\\\"],null]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\"],[\\\"div\\\",\\\"if\\\",\\\"html-safe\\\",\\\"did-insert\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/histogram-chart.hbs\",\n    \"isStrictMode\": false\n  });\n  function invalidateChart(chartRoot, chart, chartData) {\n    if (_.isObject(chart) && _.isObject(chartRoot)) {\n      _amcharts2.default.checkEmptyData(chartRoot, chart, chartData);\n    }\n  }\n  function updateDataProvider(chartRoot, chart, legend, data = []) {\n    if (data && chart?.series?.values?.length > 0) {\n      _.forEach(chart.series.values, item => {\n        item.data.setAll(data);\n        legend.data.setAll(item.dataItems);\n      });\n    }\n    invalidateChart(chartRoot, chart, data);\n  }\n  let HistogramChartComponent = _exports.default = (_class = class HistogramChartComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _initializerDefineProperty(this, \"chart\", _descriptor3, this);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor4, this);\n      _initializerDefineProperty(this, \"chartLegend\", _descriptor5, this);\n      this.EventBus.subscribe(this.args.regionName + \".data.update\", this, 'onDataUpdated');\n      _lib.default.observeKeys(this, ['args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.filterChanged);\n      (0, _observers.addObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe(this.args.regionName + '.data.update', this, 'onDataUpdated');\n      if (this.chartRoot) this.chartRoot.dispose();\n      this.chart = null;\n      _lib.default.unobserveKeys(this, ['args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.filterChanged);\n      (0, _observers.removeObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n    }\n    filterChanged() {\n      (0, _runloop.once)(this, 'onDataUpdated');\n    }\n    chartConfigChanged() {\n      let chart = this.chart;\n      if (chart) {\n        if (this.chartRoot) {\n          this.chartRoot.dispose();\n          this.chartRoot = null;\n        }\n        this.chart = null;\n        this.chart = this.makeChart(this.args.id);\n        _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n      }\n    }\n    get isMulti() {\n      return this.args.chartConfig?.metrics?.length > 1;\n    }\n    get title() {\n      return this.args.metric.title || _lib.default.camelCaseToTitleCase(this.args.metric.name);\n    }\n    onDataUpdated() {\n      let chart = this.chart;\n      let chartRoot = this.chartRoot;\n      let selectedResource = this.args.selectedResource;\n      if (_.isEmpty(chart)) {\n        this.chart = this.makeChart(this.args.id);\n      }\n      if (_.isObject(chart)) {\n        updateDataProvider(chartRoot, chart, this.chartLegend, this.getDataSource(selectedResource && selectedResource.id > 0 ? selectedResource : this.args.data));\n      }\n    }\n    getDataSource(model) {\n      let chartConfig = this.args.chartConfig;\n      let metric = this.args.metric;\n      let key = _loadTest.default.toMetricKey(metric.namespace, metric.name);\n      return _.isObject(chartConfig) && _.isObject(model) && _.isObject(model.derivedSummary) && model.derivedSummary[key + '-buckets'];\n    }\n    makeChart(id) {\n      _amcharts2.default.initLicense();\n      const chartConfig = this.args.chartConfig;\n      if (_.isObject(chartConfig)) {\n        const data = this.getDataSource(this.args.data) || [];\n        this.chartData = data;\n        let root = am5.Root.new(id);\n        this.chartRoot = root;\n        root.setThemes([_Animated.default.new(root), _Responsive.default.new(root)]);\n        let chart = root.container.children.push(am5percent.PieChart.new(root, {\n          layout: root.verticalLayout\n        }));\n\n        // Create series\n        let series = chart.series.push(am5percent.PieSeries.new(root, {\n          valueField: \"val\",\n          categoryField: \"key\"\n        }));\n        series.data.setAll(data);\n        series.labels.template.set(\"forceHidden\", true);\n        series.ticks.template.set(\"forceHidden\", true);\n\n        // Add legend\n        let legend = chart.children.push(am5.Legend.new(root, {\n          x: am5.percent(50),\n          centerX: am5.percent(50),\n          layout: root.gridLayout\n        }));\n        legend.data.setAll(series.dataItems);\n        this.chartLegend = legend;\n        const title = this.title;\n        if (title) {\n          chart.children.unshift(am5.Label.new(root, {\n            text: title,\n            fontSize: 14,\n            fontWeight: \"600\",\n            textAlign: \"center\",\n            x: am5.percent(50),\n            centerX: am5.percent(50),\n            centerY: am5.percent(50)\n          }));\n        }\n        series.labelsContainer.set(\"paddingTop\", 30);\n        _amcharts2.default.addExportOptions(root);\n        return chart;\n      }\n      return null;\n    }\n    didInsert() {\n      this.chart = this.makeChart(this.args.id);\n      _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"chart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"chartLegend\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, HistogramChartComponent);\n});","define(\"@testable/shared-ui/components/histogram-grid\", [\"exports\", \"@ember/service\", \"@ember/object/observers\", \"@ember/object\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _service, _observers, _object, _dataGrid, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/object/observers\",0,\"@ember/object\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let HistogramGrid = _exports.default = (_class = class HistogramGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _lib.default.observeKeys(this, ['args.config.displayType', 'args.metric', 'args.selectedResources', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.selectedResource', this.onSelectedResource);\n    }\n    didInsert() {\n      super.didInsert();\n      this.EventBus.subscribe(this.args.regionName + \".data.update\", this, 'onDataUpdated');\n      this.EventBus.subscribe(this.args.regionName + \".charts.invalidate\", this, 'onInvalidate');\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      _lib.default.unobserveKeys(this, ['args.config.displayType', 'args.metric', 'args.selectedResources', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.selectedResource', this.onSelectedResource);\n      this.EventBus.unsubscribe(this.args.regionName + \".data.update\", this, 'onDataUpdated');\n      this.EventBus.unsubscribe(this.args.regionName + \".charts.invalidate\", this, 'onInvalidate');\n    }\n    onConfigUpdated() {\n      this.refreshTable();\n    }\n    onSelectedResource() {\n      this.refreshTable();\n    }\n    getColumns() {\n      return [{\n        data: 'key',\n        title: this.args.metric.title\n      }, {\n        data: 'val',\n        title: 'Count',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            const metric = this.args.metric;\n            const selectedResource = this.args.selectedResource;\n            const model = selectedResource && selectedResource.id > 0 ? selectedResource.derivedSummary : this.args.data.derivedSummary;\n            const metricDefs = this.args.metricDefs;\n            const scriptType = this.args.scriptType;\n            const showComparisons = this.args.config.showComparisons;\n            if (model) {\n              const key = metric.name + '-' + full.key;\n              let text = _loadTest.default.printMetric(model, metric.namespace, key, \"\", false, metricDefs, true, null, scriptType);\n              if (_.isUndefined(showComparisons) || showComparisons) {\n                text += ' (' + _loadTest.default.printMetric(model, metric.namespace, key + '-percent', \"%\", false, metricDefs, true, null, scriptType) + ')';\n              }\n              return text;\n            } else {\n              return '-';\n            }\n          } else {\n            return data;\n          }\n        }\n      }];\n    }\n    getInitialOrder(columns) {\n      return [[0, 'asc']];\n    }\n    createDataSource() {\n      return this.getBuckets();\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const newBuckets = this.getBuckets();\n      const toAdd = [];\n      _.forEach(newBuckets, bucket => {\n        const row = table.row((idx, data, node) => {\n          return data.key === bucket.key;\n        });\n        if (_.isEmpty(row)) {\n          toAdd.push(bucket);\n        } else {\n          row.data(bucket);\n        }\n      });\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    getBuckets() {\n      const selectedResource = this.args.selectedResource;\n      const model = selectedResource && selectedResource.id > 0 ? selectedResource : this.args.data;\n      const config = this.args.config;\n      const metric = this.args.metric;\n      const key = _loadTest.default.toMetricKey(metric.namespace, metric.name);\n      return _.isObject(config) && _.isObject(model) && _.isObject(model.derivedSummary) && _.cloneDeep(model.derivedSummary[key + '-buckets']) || [];\n    }\n    addTableOptions(options) {\n      if (options.paging) {\n        options.dom = 'BZtp';\n        options.language = {\n          emptyTable: \"No results yet.\"\n        };\n        options.buttons = [{\n          extend: 'copy',\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right m-l-10 m-t-5 m-b-5',\n          text: '<i class=\"fa fa-copy\"></i>'\n        }, {\n          extend: 'csv',\n          filename: this.args.regionName + '-' + this.args.metric.name,\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right m-t-5',\n          text: '<i class=\"fa fa-download\"></i>'\n        }];\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"willDestroy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"willDestroy\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/components/histogram-table\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"histogram-table\">\n  \n    {{#if @isPrint}}\n      <HistogramGrid @id={{this.gridId}}\n                     @config={{@config}}\n                     @selectedResource={{@selectedResource}}\n                     @data={{@data}}\n                     @metricDefs={{@metricDefs}}\n                     @metric={{@metric}}\n                     @scriptType={{@scriptType}}\n                     @regionName={{@regionName}} />\n    {{else}}\n      <div class=\"overflow-auto\">\n        <GridSearch @inTab={{false}} @onSearch={{fn (mut this.search)}} />\n        <HistogramGrid @id={{this.gridId}}\n                       @config={{@config}}\n                       @selectedResource={{@selectedResource}}\n                       @data={{@data}}\n                       @metricDefs={{@metricDefs}}\n                       @metric={{@metric}}\n                       @search={{this.search}}\n                       @scriptType={{@scriptType}}\n                       @regionName={{@regionName}} />\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"histogram-table\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[8,[39,2],null,[[\\\"@id\\\",\\\"@config\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metric\\\",\\\"@scriptType\\\",\\\"@regionName\\\"],[[30,0,[\\\"gridId\\\"]],[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@inTab\\\",\\\"@onSearch\\\"],[false,[28,[37,4],[[28,[37,5],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[8,[39,2],null,[[\\\"@id\\\",\\\"@config\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metric\\\",\\\"@search\\\",\\\"@scriptType\\\",\\\"@regionName\\\"],[[30,0,[\\\"gridId\\\"]],[30,2],[30,3],[30,4],[30,5],[30,6],[30,0,[\\\"search\\\"]],[30,7],[30,8]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@isPrint\\\",\\\"@config\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metric\\\",\\\"@scriptType\\\",\\\"@regionName\\\"],[\\\"div\\\",\\\"if\\\",\\\"histogram-grid\\\",\\\"grid-search\\\",\\\"fn\\\",\\\"mut\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/histogram-table.hbs\",\n    \"isStrictMode\": false\n  });\n  let HistogramTableComponent = _exports.default = (_class = class HistogramTableComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"gridId\", _descriptor, this);\n      this.gridId = \"grid_\" + Math.round(Math.random() * 10000000);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"gridId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, HistogramTableComponent);\n});","define(\"@testable/shared-ui/components/image-details-modal\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _lib, _loadTest, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade {{if this.isNested 'modal-above-modal'}}\" id=\"imageDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n       {{did-insert this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Image Details: {{@image.name}} <Ui::InfoIcon\n                  @content=\"See this image, the image it was compared against, and the comparison image with differences\n                  highlighted in red. The darker the red, the bigger the difference.\"\n                  @placement=\"bottom\" /></h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <ul class=\"nav nav-tabs\" role=\"tablist\" id=\"imageDetailsTabsNav\">\n            <li class=\"nav-item\"><a class=\"nav-link active\" href=\"#imageTab\" aria-controls=\"imageTab\" role=\"tab\" data-bs-toggle=\"tab\">\n                <strong>{{#if (is-number @image.diffPercent)}}\n                    Image Comparison\n                  {{else}}\n                    Image\n                  {{/if}}</strong>\n              </a></li>\n            <li class=\"nav-item no-print\"><a class=\"nav-link\" href=\"#imageInfoTab\"\n                aria-controls=\"imageInfoTab\" role=\"tab\" data-bs-toggle=\"tab\"><strong>Info</strong><Ui::InfoIcon\n                    @content=\"Details about this image including timestamp captured, size, thread ID, iteration ID, etc\"\n                    @placement=\"bottom\" /></a></li>\n            {{#if (and @image.iterationId @image.threadId @overallModel.completed)}}\n              <li class=\"nav-item no-print\"><a class=\"nav-link\" href=\"#relatedResultsTab\"\n                  aria-controls=\"relatedResultsTab\" role=\"tab\" data-bs-toggle=\"tab\"><strong>Analyze Related\n                    Results</strong><Ui::InfoIcon\n                      @content=\"Analyze all network requests, assertions, and files captured during the test iteration in which this image was captured\"\n                      @placement=\"bottom\" /></a></li>\n            {{/if}}\n          </ul>\n  \n          <div class=\"tab-content\">\n            <div role=\"tabpanel\" class=\"tab-pane show active\" id=\"imageTab\">\n              <div class=\"gallery\">\n                <div class=\"image gallery-images\">\n                  <div class=\"image-inner\">\n                    <a href=\"{{@image.viewUrl}}\" data-fancybox=\"gallery-diff-images\" data-caption=\"This Image\" data-modal-id=\"imageDetailsModal\">\n                      <img src=\"{{@image.viewUrl}}\" alt=\"\" role=\"none\" />\n                    </a>\n                    <p class=\"image-caption\">This Test</p>\n                  </div>\n                  <div class=\"image-info\">\n                    <h5 data-bs-toggle=\"popover\" data-bs-placement=\"top\" data-bs-trigger=\"hover\" data-bs-content=\"Captured @ {{print-datetime @image.capturedAt}} [{{print-bytes @image.size}}]\">\n                      {{@image.name}}\n                    </h5>\n                  </div>\n                </div>\n                {{#if (or @image.diffOutputFile @image.diffDataStore)}}\n                  <div class=\"image gallery-images\">\n                    <div class=\"image-inner\">\n                      <a href=\"{{this.diffViewUrl}}\" data-fancybox=\"gallery-diff-images\" data-caption=\"Previous Test\" data-modal-id=\"imageDetailsModal\">\n                        <img src=\"{{this.diffViewUrl}}\" alt=\"\" role=\"none\" />\n                      </a>\n                      <p class=\"image-caption\">{{if @image.diffOutputFile 'Previous Test' 'Scenario Baseline'}}</p>\n                    </div>\n                    <div class=\"image-info\">\n                      <h5 data-bs-toggle=\"popover\" data-bs-placement=\"top\" data-bs-trigger=\"hover\" data-bs-content=\"{{this.diffPopoverText}}\">\n                        <a target=\"_blank\" href=\"{{this.diffResultsUrl}}\" rel=\"noreferrer noopener\">{{this.diffName}}</a>\n                      </h5>\n                    </div>\n                  </div>\n                  <div class=\"image gallery-images\">\n                    <div class=\"image-inner\">\n                      <a href=\"{{this.diffUrl}}\" data-fancybox=\"gallery-diff-images\" data-caption=\"Difference\">\n                        <img src=\"{{this.diffUrl}}\" alt=\"\" role=\"none\" />\n                      </a>\n                      <p class=\"image-caption {{@image.diffClass}}\">Difference: {{@image.diffPercent}}% <Ui::InfoIcon\n                              @content=\"A calculation (0-100%) to indicate how far apart the two images are using a pixel-by-pixel comparison under the RGB color model. Differences are shaded in red. The bigger the difference, the less transparent the red color.\"\n                              data-bs-placement=\"bottom\" /></p>\n                    </div>\n                    <div class=\"image-info\">\n                      <h5>\n                        Difference Between Images\n                      </h5>\n                    </div>\n                  </div>\n                {{/if}}\n              </div>\n            </div>\n            <div role=\"tabpanel\" class=\"tab-pane\" id=\"imageInfoTab\">\n              <dl>\n                <dt>Captured At</dt>\n                <dd>{{print-datetime @image.capturedAt}}</dd>\n                <dt>Size</dt>\n                <dd>{{print-bytes @image.size}}</dd>\n                <dt>Region</dt>\n                <dd>{{or (print-region-info this.executionRegion.region) 'N/A'}}</dd>\n                {{#if @image.browser}}\n                  <dt>Browser</dt>\n                  <dd>{{print-browser @image.browser}}</dd>\n                {{/if}}\n                {{#if @image.device}}\n                  <dt>Device</dt>\n                  <dd>{{print-device @image.device}}</dd>\n                {{/if}}\n                <dt>Test Runner</dt>\n                <dd>{{this.agent}}</dd>\n                <dt>{{if (is-multi-user @overallModel.script.scriptType) 'Instance #' 'User #'}}</dt>\n                <dd>{{or (print-number @image.globalConcurrentClientIndex) 'N/A'}}</dd>\n                <dt>Iteration #</dt>\n                <dd>{{or (print-number @image.iteration) 'N/A'}}</dd>\n                <dt>Session #</dt>\n                <dd>{{or (print-number @image.sessionNum) 'N/A'}}</dd>\n                <dt>Thread ID</dt>\n                <dd>{{or @image.threadId 'N/A'}}</dd>\n                <dt>Iteration ID</dt>\n                <dd>{{or @image.iterationId 'N/A'}}</dd>\n              </dl>\n            </div>\n            {{#if (and @image.iterationId @image.threadId @overallModel.completed)}}\n              <div role=\"tabpanel\" class=\"tab-pane\" id=\"relatedResultsTab\">\n                {{#if this.relatedResultsVisible}}\n                  {{#if this.sessionsList.length}}\n                    <div class=\"d-flex justify-content-end align-items-center m-b-10\">\n                      <div class=\"f-w-700 m-r-5\">Sessions</div>\n                      <Ui::PSelect class=\"width-100\"\n                                   @options={{this.sessionsList}}\n                                   @selected={{this.selectedSession}}\n                                   @placeholder=\"Please select a session...\"\n                                   @onChange={{fn (mut this.selectedSession)}} as |option| >\n                        {{option.title}}\n                      </Ui::PSelect>\n                    </div>\n                  {{/if}}\n                  <IterationResults @overallModel={{@overallModel}}\n                                    @iteration={{@image.iterationId}}\n                                    @selectedSession={{this.selectedSession.value}}\n                                    @isInModal={{true}}\n                                    @regionName=\"imageDetails\"\n                                    @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                                    @containerModalId=\"imageDetailsModal\"\n                  />\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n          {{#if @image.suiteTestResultId}}\n            {{#if this.suiteResults}}\n              <SuiteResultsWidget @suiteResults={{this.suiteResults}}\n                                  @scriptType={{@overallModel.script.scriptType}}\n                                  @hasDuration={{true}}\n                                  @collapsible={{false}}\n                                  @suffix=\"ImageDetail\"\n                                  @titlePrefix=\"Related \" />\n            {{else}}\n              Loading related assertions...\n            {{/if}}\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"modal fade \\\",[52,[30,0,[\\\"isNested\\\"]],\\\"modal-above-modal\\\"]]]],[24,1,\\\"imageDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Image Details: \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\" \\\"],[8,[39,4],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"See this image, the image it was compared against, and the comparison image with differences\\\\n                highlighted in red. The darker the red, the bigger the difference.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-tabs\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[14,1,\\\"imageDetailsTabsNav\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[10,3],[14,0,\\\"nav-link active\\\"],[14,6,\\\"#imageTab\\\"],[14,\\\"aria-controls\\\",\\\"imageTab\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[41,[28,[37,10],[[30,1,[\\\"diffPercent\\\"]]],null],[[[1,\\\"\\\\n                  Image Comparison\\\\n\\\"]],[]],[[[1,\\\"                  Image\\\\n                \\\"]],[]]],[13],[1,\\\"\\\\n            \\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item no-print\\\"],[12],[10,3],[14,0,\\\"nav-link\\\"],[14,6,\\\"#imageInfoTab\\\"],[14,\\\"aria-controls\\\",\\\"imageInfoTab\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Info\\\"],[13],[8,[39,4],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Details about this image including timestamp captured, size, thread ID, iteration ID, etc\\\",\\\"bottom\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,1,[\\\"iterationId\\\"]],[30,1,[\\\"threadId\\\"]],[30,2,[\\\"completed\\\"]]],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item no-print\\\"],[12],[10,3],[14,0,\\\"nav-link\\\"],[14,6,\\\"#relatedResultsTab\\\"],[14,\\\"aria-controls\\\",\\\"relatedResultsTab\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Analyze Related\\\\n                  Results\\\"],[13],[8,[39,4],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Analyze all network requests, assertions, and files captured during the test iteration in which this image was captured\\\",\\\"bottom\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"tab-content\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane show active\\\"],[14,1,\\\"imageTab\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"gallery\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"image gallery-images\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,3],[15,6,[29,[[30,1,[\\\"viewUrl\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"gallery-diff-images\\\"],[14,\\\"data-caption\\\",\\\"This Image\\\"],[14,\\\"data-modal-id\\\",\\\"imageDetailsModal\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,1,[\\\"viewUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,2],[14,0,\\\"image-caption\\\"],[12],[1,\\\"This Test\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"image-info\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h5\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[\\\"Captured @ \\\",[28,[37,15],[[30,1,[\\\"capturedAt\\\"]]],null],\\\" [\\\",[28,[37,16],[[30,1,[\\\"size\\\"]]],null],\\\"]\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,1,[\\\"diffOutputFile\\\"]],[30,1,[\\\"diffDataStore\\\"]]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"image gallery-images\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,3],[15,6,[29,[[30,0,[\\\"diffViewUrl\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"gallery-diff-images\\\"],[14,\\\"data-caption\\\",\\\"Previous Test\\\"],[14,\\\"data-modal-id\\\",\\\"imageDetailsModal\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"diffViewUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,2],[14,0,\\\"image-caption\\\"],[12],[1,[52,[30,1,[\\\"diffOutputFile\\\"]],\\\"Previous Test\\\",\\\"Scenario Baseline\\\"]],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"image-info\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"h5\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[[30,0,[\\\"diffPopoverText\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"diffResultsUrl\\\"]]]]],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,[30,0,[\\\"diffName\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"image gallery-images\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,3],[15,6,[29,[[30,0,[\\\"diffUrl\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"gallery-diff-images\\\"],[14,\\\"data-caption\\\",\\\"Difference\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"diffUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,2],[15,0,[29,[\\\"image-caption \\\",[30,1,[\\\"diffClass\\\"]]]]],[12],[1,\\\"Difference: \\\"],[1,[30,1,[\\\"diffPercent\\\"]]],[1,\\\"% \\\"],[8,[39,4],[[24,\\\"data-bs-placement\\\",\\\"bottom\\\"]],[[\\\"@content\\\"],[\\\"A calculation (0-100%) to indicate how far apart the two images are using a pixel-by-pixel comparison under the RGB color model. Differences are shaded in red. The bigger the difference, the less transparent the red color.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"image-info\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"h5\\\"],[12],[1,\\\"\\\\n                      Difference Between Images\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane\\\"],[14,1,\\\"imageInfoTab\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"dl\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Captured At\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,15],[[30,1,[\\\"capturedAt\\\"]]],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Size\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,16],[[30,1,[\\\"size\\\"]]],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[28,[37,21],[[30,0,[\\\"executionRegion\\\",\\\"region\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"browser\\\"]],[[[1,\\\"                \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Browser\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,22],[[30,1,[\\\"browser\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"device\\\"]],[[[1,\\\"                \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Device\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,23],[[30,1,[\\\"device\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Test Runner\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[30,0,[\\\"agent\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,[52,[28,[37,24],[[30,2,[\\\"script\\\",\\\"scriptType\\\"]]],null],\\\"Instance #\\\",\\\"User #\\\"]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[28,[37,25],[[30,1,[\\\"globalConcurrentClientIndex\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Iteration #\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[28,[37,25],[[30,1,[\\\"iteration\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Session #\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[28,[37,25],[[30,1,[\\\"sessionNum\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Thread ID\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[30,1,[\\\"threadId\\\"]],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Iteration ID\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,17],[[30,1,[\\\"iterationId\\\"]],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,1,[\\\"iterationId\\\"]],[30,1,[\\\"threadId\\\"]],[30,2,[\\\"completed\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane\\\"],[14,1,\\\"relatedResultsTab\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"relatedResultsVisible\\\"]],[[[41,[30,0,[\\\"sessionsList\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"d-flex justify-content-end align-items-center m-b-10\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"f-w-700 m-r-5\\\"],[12],[1,\\\"Sessions\\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,26],[[24,0,\\\"width-100\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"sessionsList\\\"]],[30,0,[\\\"selectedSession\\\"]],\\\"Please select a session...\\\",[28,[37,27],[[28,[37,28],[[30,0,[\\\"selectedSession\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,3,[\\\"title\\\"]]],[1,\\\"\\\\n                    \\\"]],[3]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[8,[39,29],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedSession\\\",\\\"@isInModal\\\",\\\"@regionName\\\",\\\"@showImageDetailsModal\\\",\\\"@containerModalId\\\"],[[30,2],[30,1,[\\\"iterationId\\\"]],[30,0,[\\\"selectedSession\\\",\\\"value\\\"]],true,\\\"imageDetails\\\",[30,0,[\\\"showImageDetailsModalAction\\\"]],\\\"imageDetailsModal\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"suiteTestResultId\\\"]],[[[41,[30,0,[\\\"suiteResults\\\"]],[[[1,\\\"            \\\"],[8,[39,30],null,[[\\\"@suiteResults\\\",\\\"@scriptType\\\",\\\"@hasDuration\\\",\\\"@collapsible\\\",\\\"@suffix\\\",\\\"@titlePrefix\\\"],[[30,0,[\\\"suiteResults\\\"]],[30,2,[\\\"script\\\",\\\"scriptType\\\"]],true,false,\\\"ImageDetail\\\",\\\"Related \\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            Loading related assertions...\\\\n\\\"]],[]]]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@image\\\",\\\"@overallModel\\\",\\\"option\\\"],[\\\"div\\\",\\\"if\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"strong\\\",\\\"is-number\\\",\\\"and\\\",\\\"img\\\",\\\"p\\\",\\\"h5\\\",\\\"print-datetime\\\",\\\"print-bytes\\\",\\\"or\\\",\\\"dl\\\",\\\"dt\\\",\\\"dd\\\",\\\"print-region-info\\\",\\\"print-browser\\\",\\\"print-device\\\",\\\"is-multi-user\\\",\\\"print-number\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"iteration-results\\\",\\\"suite-results-widget\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/image-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ImageDetailsModalComponent = _exports.default = (_class = class ImageDetailsModalComponent extends _component2.default {\n    get diffViewUrl() {\n      return this.args.image?.diffOutputFile?.viewUrl || this.args.image?.diffDataStore?.viewUrl;\n    }\n    get diffName() {\n      return this.args.image?.diffOutputFile?.name || this.args.image?.diffDataStore?.name;\n    }\n    get diffPopoverText() {\n      if (this.args.image?.diffOutputFile) {\n        return 'Captured @ ' + _lib.default.displayTimestamp(this.args.image.diffOutputFile.capturedAt) + ' [' + _lib.default.printBytes(this.args.image.diffOutputFile.size) + ']';\n      } else {\n        return 'Created @ ' + _lib.default.displayTimestamp(this.args.image?.diffDataStore?.createdAt) + ' [' + _lib.default.printBytes(this.args.image?.diffDataStore?.size) + ']';\n      }\n    }\n    get diffUrl() {\n      const url = this.args.image?.viewUrl;\n      return url + (url.indexOf('?') === -1 ? '?' : '&') + 'diff=true';\n    }\n    get diffResultsUrl() {\n      if (this.args.image?.diffOutputFile) {\n        return '/results/' + this.args.image.diffOutputFile.executionId;\n      } else {\n        return '/file/' + this.args.image?.diffDataStore?.id;\n      }\n    }\n    get executionRegion() {\n      const executionRegionId = this.args.image?.executionRegionId;\n      return _.find(this.args.overallModel?.regions, r => {\n        return r.id === executionRegionId;\n      });\n    }\n    get agents() {\n      return _loadTest.default.getAgentsForRegion(this.args.overallModel?.agents);\n    }\n    get agent() {\n      const agentId = this.args.image?.agentId;\n      let agent;\n      if (agentId) {\n        agent = _.find(this.agents, agent => {\n          return agent.id === agentId;\n        });\n      }\n      return agent ? agent.name : '-';\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"isNested\", _descriptor, this);\n      _initializerDefineProperty(this, \"relatedResultsVisible\", _descriptor2, this);\n      _initializerDefineProperty(this, \"suiteResults\", _descriptor3, this);\n      _initializerDefineProperty(this, \"suiteTestResultLoading\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor5, this);\n      _initializerDefineProperty(this, \"sessionsList\", _descriptor6, this);\n      const maxSessionNum = this.args.overallModel?.maxSessionNum;\n      let selectedSession = {\n        value: this.args.image?.sessionNum\n      };\n      if (maxSessionNum) {\n        this.sessionsList = _lib.default.getSessionsList(maxSessionNum, true);\n        selectedSession = this.sessionsList.find(session => session.value === this.args.image?.sessionNum);\n      }\n      this.selectedSession = selectedSession;\n      if (this.args.image?.suiteTestResultId) {\n        const suiteTestResultId = this.args.image.suiteTestResultId;\n        this.suiteTestResultLoading = true;\n        (this.args.overallModel?.uuid ? _server.default.getTokenContent(this.args.overallModel.uuid, {\n          suiteTestResultId: suiteTestResultId\n        }) : _server.default.getSuiteTestResult(suiteTestResultId)).then(suiteTestResult => {\n          if (this.isDestroying || this.isDestroyed) return;\n          const suiteResult = suiteTestResult.suiteResult;\n          suiteResult.testResults.push(suiteTestResult);\n          this.suiteResults = [suiteResult];\n          this.suiteTestResultLoading = false;\n        }, () => {\n          if (this.isDestroying || this.isDestroyed) return;\n          this.suiteTestResultLoading = false;\n        });\n      }\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n      $('#imageDetailsTabsNav a[href=\"#imageTab\"]').tab('show');\n    }\n    didInsert() {\n      $('#imageDetailsModal').on('hidden.bs.modal', () => {\n        this.args.modalClosed();\n      });\n      // opened from inside another modal, so it has to stack above the one already showing\n      this.isNested = $('.modal.show').not('#imageDetailsModal').length > 0;\n      $('#imageDetailsModal').modal('show');\n      $('#imageDetailsTabsNav a').on('shown.bs.tab', e => {\n        if (!this.isDestroying && !this.isDestroyed) {\n          let href = $(e.target).attr('href'),\n            title = href.substring(1);\n          if (title === 'relatedResultsTab') {\n            this.relatedResultsVisible = true;\n          }\n        }\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      $('#imageDetailsModal').off('hidden.bs.modal');\n      $('#imageDetailsTabsNav a').off('shown.bs.tab');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isNested\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"relatedResultsVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"suiteResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"suiteTestResultLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"sessionsList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ImageDetailsModalComponent);\n});","define(\"@testable/shared-ui/components/image-widget-filters\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsButtonGroup class=\"no-print\" @value={{@viewLayout}} @type=\"radio\" @onChange={{@onViewLayoutChange}} as |bg|>\n    <bg.button @type=\"success\" @value=\"tile\" @size=\"xs\">Tile</bg.button>\n    <bg.button @type=\"success\" @value=\"grid\" @size=\"xs\">Grid</bg.button>\n  </BsButtonGroup>\n  \n  {{#if  (not-eq @overallModel.script.scriptType 'Live')}}\n    <BsButtonGroup @value={{@errorsOnly}} @type=\"radio\" class=\"m-l-10 no-print\" @onChange={{@onErrorsOnlyChange}}\n                   as |bg|>\n      <bg.button @type=\"success\" @value=\"all\" @size=\"xs\">\n        All {{#if @isLoaded}}({{print-number @imageCount}}){{/if}}</bg.button>\n      <bg.button @type=\"success\" @value=\"errors\" @size=\"xs\">\n        Errors {{#if (and @isLoaded @overallModel.completed (not @receivedRtUpdate))}}\n        ({{print-number @errorCount}}){{/if}}\n        <Ui::InfoIcon\n                @content=\"Only show images captured during test iterations where there was an assertion failure.\"/>\n      </bg.button>\n    </BsButtonGroup>\n    {{#if (and (not-eq @overallModel.script.scriptType 'Live') @isComparison)}}\n      <button type=\"button\" class=\"m-l-10 filter-btn btn btn-sm btn-success\" {{on \"click\" @filtersExpand}}>\n        <Ui::Icon @icon=\"fa fa-filter\" /> Filters {{if @hasFilter (concat '(' @hasFilter ')')}}\n        {{if @search (concat ' - Search Term: \"' @search '\"')}}\n        {{#if @filtersExpanded}}\n          <Ui::Icon @icon=\"fa fa-angle-up\" />\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-angle-down\" />\n        {{/if}}\n      </button>\n    {{/if}}\n  \n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,1],\\\"radio\\\",[30,2]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tile\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tile\\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"grid\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Grid\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,2],[[30,4,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[[[1,\\\"  \\\"],[8,[39,0],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,5],\\\"radio\\\",[30,6]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      All \\\"],[41,[30,8],[[[1,\\\"(\\\"],[1,[28,[35,3],[[30,9]],null]],[1,\\\")\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      Errors \\\"],[41,[28,[37,4],[[30,8],[30,4,[\\\"completed\\\"]],[28,[37,5],[[30,10]],null]],null],[[[1,\\\"\\\\n      (\\\"],[1,[28,[35,3],[[30,11]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"Only show images captured during test iterations where there was an assertion failure.\\\"]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[7]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,2],[[30,4,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[30,12]],null],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"m-l-10 filter-btn btn btn-sm btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,13]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[1,\\\" Filters \\\"],[1,[52,[30,14],[28,[37,10],[\\\"(\\\",[30,14],\\\")\\\"],null]]],[1,\\\"\\\\n      \\\"],[1,[52,[30,15],[28,[37,10],[\\\" - Search Term: \\\\\\\"\\\",[30,15],\\\"\\\\\\\"\\\"],null]]],[1,\\\"\\\\n\\\"],[41,[30,16],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-up\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-down\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@viewLayout\\\",\\\"@onViewLayoutChange\\\",\\\"bg\\\",\\\"@overallModel\\\",\\\"@errorsOnly\\\",\\\"@onErrorsOnlyChange\\\",\\\"bg\\\",\\\"@isLoaded\\\",\\\"@imageCount\\\",\\\"@receivedRtUpdate\\\",\\\"@errorCount\\\",\\\"@isComparison\\\",\\\"@filtersExpand\\\",\\\"@hasFilter\\\",\\\"@search\\\",\\\"@filtersExpanded\\\"],[\\\"bs-button-group\\\",\\\"if\\\",\\\"not-eq\\\",\\\"print-number\\\",\\\"and\\\",\\\"not\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"concat\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/image-widget-filters.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"image-widget-filters\"));\n});","define(\"@testable/shared-ui/components/images-widget-details\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"ember-uuid\", \"@ember/runloop\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _service, _emberUuid, _runloop, _trackedBuiltIns, _lib, _loadTest, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span\n    {{did-insert this.onDidInsert}}\n    {{did-update this.onImageReloadChange this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp this.errorsOnly @model this.selectedSession.value @sessionsList}}\n    {{did-update this.onParentErrorsOnlyChange @errorsOnly}}\n    {{did-update this.onViewLayoutChange this.viewLayout @viewLayout this.isLoaded @assertion.viewType}}\n    {{did-update this.onExecutionIdChange @overallModel.id}}\n    {{did-update this.onFilesDownloadUrlChanged this.filesDownloadUrl}}>\n  </span>\n  {{#if @isComparison}}\n    <div class=\"mb-1 heading\"><strong>{{@title}}</strong></div>\n  \n    {{#if (or this.hasFilter (gt this.images.length 0) (eq this.errorsOnly 'errors') (not this.isLoaded))}}\n      <div class=\"mb-1\">\n        <ImageWidgetFilters\n                @overallModel={{@overallModel}}\n                @viewLayout={{this.viewLayout}}\n                @isLoaded={{this.isLoaded}}\n                @errorsOnly={{this.errorsOnly}}\n                @imageCount={{this.images.length}}\n                @errorCount={{this.errorCount}}\n                @receivedRtUpdate={{this.receivedRtUpdate}}\n                @isComparison={{@isComparison}}\n                @search={{this.search}}\n                @filtersExpanded={{this.filtersExpanded}}\n                @hasFilter={{this.hasFilter}}\n                @filtersExpand={{this.filtersExpand}}\n                @onViewLayoutChange={{this.updateViewLayout}}\n                @onErrorsOnlyChange={{this.updateErrorsOnlyAction}}\n        />\n      </div>\n    {{/if}}\n  \n  \n  {{/if}}\n  \n  \n  <div class=\" m-b-20 no-print {{if (and this.isLoaded this.showFilterPanel (or this.hasFilter (gt this.images.length 0))) '' 'hidden'}} no-print\">\n    {{#if (and (not-eq @overallModel.script.scriptType 'Live') (not @isComparison) )}}\n      <button type=\"button\" class=\"btn btn-sm btn-success {{if this.filtersExpanded 'm-b-10'}}\" {{on \"click\" this.filtersExpand}}>\n        <Ui::Icon @icon=\"fa fa-filter\" /> Filters {{if this.hasFilter (concat '(' this.hasFilter ')')}}\n        {{if this.search (concat ' - Search Term: \"' this.search '\"')}}\n        {{#if this.filtersExpanded}}\n          <Ui::Icon @icon=\"fa fa-angle-up\" />\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-angle-down\" />\n        {{/if}}\n      </button>\n    {{/if}}\n  \n    <div class=\"row slow-animate {{if (or this.filtersExpanded (eq @overallModel.script.scriptType 'Live')) '' ' height-0 p-t-0 p-b-0'}}\">\n      {{#if @embedded}}\n        <div class=\"col-sm-4 col-md-3 m-b-10\">\n          <div class=\"f-w-700 m-b-5\">Options</div>\n          <BsButtonGroup @value={{this.viewLayout}} @type=\"radio\" class=\"width-100p\" @onChange={{this.updateViewLayout}} as |bg|>\n            {{#if this.filteredImages.length}}\n              <a target=\"_blank\" href=\"{{this.filesDownloadUrl}}\" class=\"btn btn-sm btn-success\" data-bs-toggle=\"tooltip\"\n                 title=\"Download All images\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n            {{/if}}\n            <bg.button @type=\"success\" @value=\"tile\" @size=\"sm\">Tile</bg.button>\n            <bg.button @type=\"success\" @value=\"grid\" @size=\"sm\">Grid</bg.button>\n          </BsButtonGroup>\n        </div>\n      {{/if}}\n      {{#if (not-eq @overallModel.script.scriptType 'Live')}}\n        <FilterFields @model={{@overallModel}}\n                      @iterationsExecuted={{@model.summary.iterationsExecuted}}\n                      @concurrentClients={{@overallModel.concurrentClients}}\n                      @executedIterationsPerClient={{@model.summary.executedIterationsPerClient}}\n                      @browsers={{@overallModel.browsers}}\n                      @scriptBinary={{@overallModel.script.metadata.binary}}\n                      @scriptType={{@overallModel.script.scriptType}}\n                      @byRegionId={{@byRegionId}}\n                      @showRegionFilter={{@isAll}}\n                      @showTestRunnerFilter={{true}}\n                      @isLoad={{@isLoad}}\n                      @isVertical={{true}}\n                      @isMultiUser={{this.isMultiUser}}\n                      @region={{this.region}}\n                      @user={{this.user}}\n                      @iteration={{this.iteration}}\n                      @updateRegion={{this.updateRegion}}\n                      @updateAgent={{this.updateAgent}}\n                      @updateUser={{this.updateUser}}\n                      @updateIteration={{this.updateIteration}}\n                      @updateBrowser={{this.updateBrowser}}\n        />\n        {{#if (and (not @assertion) (not @isCommandsRelated) (gt @model.suiteSummaries.length 0))}}\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Assertion</div>\n            <Ui::PSelect @options={{this.assertionOptions}}\n                         @selected={{this.selectedAssertion}}\n                         @selectedItemComponent=\"print-selected-assertion\"\n                         @placeholder=\"Select an assertion...\"\n                         @onChange={{this.updateAssertion}} as |assertionOption|>\n              <PrintAssertion @assertionOption={{assertionOption}} />\n            </Ui::PSelect>\n          </div>\n        {{/if}}\n        {{#if (and (not @suiteError) (not @isCommandsRelated) (gt @model.suiteErrors.length 0))}}\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Errors</div>\n            <Ui::PSelect @options={{this.errorOptions}}\n                         @selected={{this.selectedSuiteError}}\n                         @selectedItemComponent=\"print-selected-error\"\n                         @placeholder=\"Select an error...\"\n                         @onChange={{this.updateSuiteError}} as |errorOption|>\n              <span class=\"semi-bold\">{{html-safe (truncate-string errorOption.suiteError.name)}}</span>\n            </Ui::PSelect>\n          </div>\n        {{/if}}\n        {{#if @sessionsList.length}}\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Sessions</div>\n            <Ui::PSelect  @options={{@sessionsList}}\n                          @selected={{this.selectedSession}}\n                          @placeholder=\"Please select a session...\"\n                          @onChange={{this.onChangeSession}} as |option| >\n              {{option.title}}\n            </Ui::PSelect>\n          </div>\n        {{/if}}\n      {{/if}}\n      <div class=\"col-sm-4 col-md-3 m-b-10\">\n        {{#if (not-eq @overallModel.script.scriptType 'Live')}}\n          <div class=\"f-w-700 m-b-5\">Search</div>\n        {{/if}}\n        <div class=\"input-group\">\n          <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\" /></span>\n          <Input @type=\"text\" @value={{this.search}} placeholder=\"Search...\" class=\"form-control\" />\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  {{#if this.isLoaded}}\n    {{#if (gt this.filteredImages.length 0)}}\n      {{#if (gt this.images.length this.MaxImages)}}\n        <div class=\"m-b-10\">(Most recent 100 images shown)</div>\n      {{/if}}\n  \n      {{#if (or (eq this.viewLayout 'grid') (eq @viewLayout 'grid'))}}\n        <FilesGrid @id={{concat @widget.id '_' @regionName '_imagesGrid' this.uniqueId}}\n                   @overallModel={{@overallModel}}\n                   @region={{this.region}}\n                   @isMultiUser={{this.isMultiUser}}\n                   @search={{this.search}}\n                   @showImageDetailsModal={{this.showImageDetailsModalById}}\n                   @showShareMediaModal={{this.showShareMediaModal}}\n                   @outputFiles={{this.filteredImages}}\n        />\n      {{else}}\n        <div id={{concat \"panelDetail\" this.uniqueId}} class=\"gallery gallery-thumbnail\">\n          {{#each this.filteredImages as |image index|}}\n            <div {{did-insert (fn this.onLoadImages index)}}\n                    class=\"image gallery-images {{if @isComparison \"baseline\"}} {{if (is-undefined image.isRelatedToFailure) ''\n                                                     (if image.isRelatedToFailure 'failure-image' 'success-image') }}\">\n              <div class=\"image-inner\">\n                {{#if image.isImage}}\n                  <a {{on \"click\" (fn this.showImageDetailsModalAction image)}} data-bs-title={{print-image image @overallModel}}\n                                                              data-bs-html=\"true\" data-bs-toggle=\"tooltip\"\n                                                              data-bs-placement=\"top\" role=\"button\">\n                    {{#if @isPrint}}\n                      <img src=\"{{image.viewUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                    {{else}}\n                      <img data-src=\"{{image.viewUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                    {{/if}}\n                  </a>\n                  <p class=\"image-caption\">\n                    {{#if (or image.diffOutputFile image.diffDataStore)}}\n                      <a {{on \"click\" (fn this.showImageDetailsModalAction image)}} role=\"button\"\n                                                                  class=\"{{get-imagediffclass\n                                                                          image.diffPercent}}\">{{image.diffPercent}}%\n                        change</a>\n                      <Ui::InfoIcon\n                              @content=\"A measure of the pixel difference between this image and one from a previous\n                              test run or a scenario baseline image with a similar name. Click the image name for more\n                              details on the comparison.\"/>\n                    {{/if}}\n                    <Ui::Icon @icon=\"fa fa-share\" {{on \"click\" (fn this.showShareMediaModalAction image)}} class=\"m-l-3 pointer-cursor\"\n                                                              role=\"button\" />\n                  </p>\n                {{else}}\n                  <a data-fancybox data-type=\"video\"\n                     href=\"{{image.viewUrl}}\"\n                     data-bs-title={{print-image image @overallModel}}\n                     data-bs-html=\"true\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\">\n                    {{#if @isPrint}}\n                      <img src=\"{{image.thumbnailUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                    {{else}}\n                      <img data-src=\"{{image.thumbnailUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                    {{/if}}\n  \n                    <Ui::Icon @icon=\"fa fa-play-circle play-icon-overlay\" />\n                  </a>\n                  <p class=\"image-caption\">\n                    <Ui::Icon @icon=\"fa fa-share\" {{on \"click\" (fn this.showShareMediaModalAction image)}} class=\"m-l-3 pointer-cursor\"\n                                                              role=\"button\" />\n                  </p>\n                {{/if}}\n              </div>\n            </div>\n          {{/each}}\n        </div>\n      {{/if}}\n  \n    {{else if (or this.hasFilter (eq this.errorsOnly 'errors')) }}\n      No images match the current filter.\n    {{else if @overallModel.completed}}\n      Test run captured no images.\n    {{else}}\n      No images yet.\n    {{/if}}\n  {{else}}\n    Loading images...\n  {{/if}}\n  \n  {{#if this.showShareMediaModal}}\n    <ShareMediaModal @media={{this.mediaObject}}\n                     @model={{@overallModel}}\n                     @mediaType=\"media\"\n                     @onCloseModal={{this.closeShareMediaModal}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onDidInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onImageReloadChange\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,1],[30,0,[\\\"selectedSession\\\",\\\"value\\\"]],[30,2]],null],[4,[38,2],[[30,0,[\\\"onParentErrorsOnlyChange\\\"]],[30,3]],null],[4,[38,2],[[30,0,[\\\"onViewLayoutChange\\\"]],[30,0,[\\\"viewLayout\\\"]],[30,4],[30,0,[\\\"isLoaded\\\"]],[30,5,[\\\"viewType\\\"]]],null],[4,[38,2],[[30,0,[\\\"onExecutionIdChange\\\"]],[30,6,[\\\"id\\\"]]],null],[4,[38,2],[[30,0,[\\\"onFilesDownloadUrlChanged\\\"]],[30,0,[\\\"filesDownloadUrl\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-1 heading\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,8]],[13],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"hasFilter\\\"]],[28,[37,7],[[30,0,[\\\"images\\\",\\\"length\\\"]],0],null],[28,[37,8],[[30,0,[\\\"errorsOnly\\\"]],\\\"errors\\\"],null],[28,[37,9],[[30,0,[\\\"isLoaded\\\"]]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"mb-1\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,10],null,[[\\\"@overallModel\\\",\\\"@viewLayout\\\",\\\"@isLoaded\\\",\\\"@errorsOnly\\\",\\\"@imageCount\\\",\\\"@errorCount\\\",\\\"@receivedRtUpdate\\\",\\\"@isComparison\\\",\\\"@search\\\",\\\"@filtersExpanded\\\",\\\"@hasFilter\\\",\\\"@filtersExpand\\\",\\\"@onViewLayoutChange\\\",\\\"@onErrorsOnlyChange\\\"],[[30,6],[30,0,[\\\"viewLayout\\\"]],[30,0,[\\\"isLoaded\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,0,[\\\"images\\\",\\\"length\\\"]],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"receivedRtUpdate\\\"]],[30,7],[30,0,[\\\"search\\\"]],[30,0,[\\\"filtersExpanded\\\"]],[30,0,[\\\"hasFilter\\\"]],[30,0,[\\\"filtersExpand\\\"]],[30,0,[\\\"updateViewLayout\\\"]],[30,0,[\\\"updateErrorsOnlyAction\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\" m-b-20 no-print \\\",[52,[28,[37,11],[[30,0,[\\\"isLoaded\\\"]],[30,0,[\\\"showFilterPanel\\\"]],[28,[37,6],[[30,0,[\\\"hasFilter\\\"]],[28,[37,7],[[30,0,[\\\"images\\\",\\\"length\\\"]],0],null]],null]],null],\\\"\\\",\\\"hidden\\\"],\\\" no-print\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[28,[37,12],[[30,6,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[28,[37,9],[[30,7]],null]],null],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-sm btn-success \\\",[52,[30,0,[\\\"filtersExpanded\\\"]],\\\"m-b-10\\\"]]]],[24,4,\\\"button\\\"],[4,[38,14],[\\\"click\\\",[30,0,[\\\"filtersExpand\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[1,\\\" Filters \\\"],[1,[52,[30,0,[\\\"hasFilter\\\"]],[28,[37,16],[\\\"(\\\",[30,0,[\\\"hasFilter\\\"]],\\\")\\\"],null]]],[1,\\\"\\\\n      \\\"],[1,[52,[30,0,[\\\"search\\\"]],[28,[37,16],[\\\" - Search Term: \\\\\\\"\\\",[30,0,[\\\"search\\\"]],\\\"\\\\\\\"\\\"],null]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filtersExpanded\\\"]],[[[1,\\\"        \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-up\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-down\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"row slow-animate \\\",[52,[28,[37,6],[[30,0,[\\\"filtersExpanded\\\"]],[28,[37,8],[[30,6,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null]],null],\\\"\\\",\\\" height-0 p-t-0 p-b-0\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,9],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Options\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,17],[[24,0,\\\"width-100p\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewLayout\\\"]],\\\"radio\\\",[30,0,[\\\"updateViewLayout\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredImages\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"filesDownloadUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-success\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download All images\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tile\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tile\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"grid\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Grid\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,6,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[[[1,\\\"      \\\"],[8,[39,19],null,[[\\\"@model\\\",\\\"@iterationsExecuted\\\",\\\"@concurrentClients\\\",\\\"@executedIterationsPerClient\\\",\\\"@browsers\\\",\\\"@scriptBinary\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showRegionFilter\\\",\\\"@showTestRunnerFilter\\\",\\\"@isLoad\\\",\\\"@isVertical\\\",\\\"@isMultiUser\\\",\\\"@region\\\",\\\"@user\\\",\\\"@iteration\\\",\\\"@updateRegion\\\",\\\"@updateAgent\\\",\\\"@updateUser\\\",\\\"@updateIteration\\\",\\\"@updateBrowser\\\"],[[30,6],[30,1,[\\\"summary\\\",\\\"iterationsExecuted\\\"]],[30,6,[\\\"concurrentClients\\\"]],[30,1,[\\\"summary\\\",\\\"executedIterationsPerClient\\\"]],[30,6,[\\\"browsers\\\"]],[30,6,[\\\"script\\\",\\\"metadata\\\",\\\"binary\\\"]],[30,6,[\\\"script\\\",\\\"scriptType\\\"]],[30,11],[30,12],true,[30,13],true,[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"region\\\"]],[30,0,[\\\"user\\\"]],[30,0,[\\\"iteration\\\"]],[30,0,[\\\"updateRegion\\\"]],[30,0,[\\\"updateAgent\\\"]],[30,0,[\\\"updateUser\\\"]],[30,0,[\\\"updateIteration\\\"]],[30,0,[\\\"updateBrowser\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[28,[37,9],[[30,5]],null],[28,[37,9],[[30,14]],null],[28,[37,7],[[30,1,[\\\"suiteSummaries\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Assertion\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,20],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"assertionOptions\\\"]],[30,0,[\\\"selectedAssertion\\\"]],\\\"print-selected-assertion\\\",\\\"Select an assertion...\\\",[30,0,[\\\"updateAssertion\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,21],null,[[\\\"@assertionOption\\\"],[[30,15]]],null],[1,\\\"\\\\n          \\\"]],[15]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,11],[[28,[37,9],[[30,16]],null],[28,[37,9],[[30,14]],null],[28,[37,7],[[30,1,[\\\"suiteErrors\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Errors\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,20],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"errorOptions\\\"]],[30,0,[\\\"selectedSuiteError\\\"]],\\\"print-selected-error\\\",\\\"Select an error...\\\",[30,0,[\\\"updateSuiteError\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,22],[[28,[37,23],[[30,17,[\\\"suiteError\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n          \\\"]],[17]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"length\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Sessions\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,20],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,2],[30,0,[\\\"selectedSession\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,18,[\\\"title\\\"]]],[1,\\\"\\\\n          \\\"]],[18]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,6,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Search\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,15],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[8,[39,24],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"search\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[41,[28,[37,7],[[30,0,[\\\"filteredImages\\\",\\\"length\\\"]],0],null],[[[41,[28,[37,7],[[30,0,[\\\"images\\\",\\\"length\\\"]],[30,0,[\\\"MaxImages\\\"]]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"(Most recent 100 images shown)\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[28,[37,8],[[30,0,[\\\"viewLayout\\\"]],\\\"grid\\\"],null],[28,[37,8],[[30,4],\\\"grid\\\"],null]],null],[[[1,\\\"      \\\"],[8,[39,25],null,[[\\\"@id\\\",\\\"@overallModel\\\",\\\"@region\\\",\\\"@isMultiUser\\\",\\\"@search\\\",\\\"@showImageDetailsModal\\\",\\\"@showShareMediaModal\\\",\\\"@outputFiles\\\"],[[28,[37,16],[[30,19,[\\\"id\\\"]],\\\"_\\\",[30,20],\\\"_imagesGrid\\\",[30,0,[\\\"uniqueId\\\"]]],null],[30,6],[30,0,[\\\"region\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"showImageDetailsModalById\\\"]],[30,0,[\\\"showShareMediaModal\\\"]],[30,0,[\\\"filteredImages\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[15,1,[28,[37,16],[\\\"panelDetail\\\",[30,0,[\\\"uniqueId\\\"]]],null]],[14,0,\\\"gallery gallery-thumbnail\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,27],[[28,[37,27],[[30,0,[\\\"filteredImages\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[11,0],[16,0,[29,[\\\"image gallery-images \\\",[52,[30,7],\\\"baseline\\\"],\\\" \\\",[52,[28,[37,28],[[30,21,[\\\"isRelatedToFailure\\\"]]],null],\\\"\\\",[52,[30,21,[\\\"isRelatedToFailure\\\"]],\\\"failure-image\\\",\\\"success-image\\\"]]]]],[4,[38,1],[[28,[37,29],[[30,0,[\\\"onLoadImages\\\"]],[30,22]],null]],null],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,21,[\\\"isImage\\\"]],[[[1,\\\"                \\\"],[11,3],[16,\\\"data-bs-title\\\",[28,[37,30],[[30,21],[30,6]],null]],[24,\\\"data-bs-html\\\",\\\"true\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,14],[\\\"click\\\",[28,[37,29],[[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,21]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,23],[[[1,\\\"                    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,21,[\\\"viewUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,\\\"img\\\"],[15,\\\"data-src\\\",[29,[[30,21,[\\\"viewUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,2],[14,0,\\\"image-caption\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,21,[\\\"diffOutputFile\\\"]],[30,21,[\\\"diffDataStore\\\"]]],null],[[[1,\\\"                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[16,0,[29,[[28,[37,33],[[30,21,[\\\"diffPercent\\\"]]],null]]]],[4,[38,14],[\\\"click\\\",[28,[37,29],[[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,21]],null]],null],[12],[1,[30,21,[\\\"diffPercent\\\"]]],[1,\\\"%\\\\n                      change\\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,34],null,[[\\\"@content\\\"],[\\\"A measure of the pixel difference between this image and one from a previous\\\\n                            test run or a scenario baseline image with a similar name. Click the image name for more\\\\n                            details on the comparison.\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[8,[39,15],[[24,0,\\\"m-l-3 pointer-cursor\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,14],[\\\"click\\\",[28,[37,29],[[30,0,[\\\"showShareMediaModalAction\\\"]],[30,21]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-share\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,3],[14,\\\"data-fancybox\\\",\\\"\\\"],[14,\\\"data-type\\\",\\\"video\\\"],[15,6,[29,[[30,21,[\\\"viewUrl\\\"]]]]],[15,\\\"data-bs-title\\\",[28,[37,30],[[30,21],[30,6]],null]],[14,\\\"data-bs-html\\\",\\\"true\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,23],[[[1,\\\"                    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,21,[\\\"thumbnailUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,\\\"img\\\"],[15,\\\"data-src\\\",[29,[[30,21,[\\\"thumbnailUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n                  \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-play-circle play-icon-overlay\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,2],[14,0,\\\"image-caption\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,15],[[24,0,\\\"m-l-3 pointer-cursor\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,14],[\\\"click\\\",[28,[37,29],[[30,0,[\\\"showShareMediaModalAction\\\"]],[30,21]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-share\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[21,22]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,0,[\\\"hasFilter\\\"]],[28,[37,8],[[30,0,[\\\"errorsOnly\\\"]],\\\"errors\\\"],null]],null],[[[1,\\\"    No images match the current filter.\\\\n\\\"]],[]],[[[41,[30,6,[\\\"completed\\\"]],[[[1,\\\"    Test run captured no images.\\\\n\\\"]],[]],[[[1,\\\"    No images yet.\\\\n  \\\"]],[]]]],[]]]],[]]]],[]],[[[1,\\\"  Loading images...\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showShareMediaModal\\\"]],[[[1,\\\"  \\\"],[8,[39,35],null,[[\\\"@media\\\",\\\"@model\\\",\\\"@mediaType\\\",\\\"@onCloseModal\\\"],[[30,0,[\\\"mediaObject\\\"]],[30,6],\\\"media\\\",[30,0,[\\\"closeShareMediaModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"@sessionsList\\\",\\\"@errorsOnly\\\",\\\"@viewLayout\\\",\\\"@assertion\\\",\\\"@overallModel\\\",\\\"@isComparison\\\",\\\"@title\\\",\\\"@embedded\\\",\\\"bg\\\",\\\"@byRegionId\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isCommandsRelated\\\",\\\"assertionOption\\\",\\\"@suiteError\\\",\\\"errorOption\\\",\\\"option\\\",\\\"@widget\\\",\\\"@regionName\\\",\\\"image\\\",\\\"index\\\",\\\"@isPrint\\\"],[\\\"span\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"or\\\",\\\"gt\\\",\\\"eq\\\",\\\"not\\\",\\\"image-widget-filters\\\",\\\"and\\\",\\\"not-eq\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"concat\\\",\\\"bs-button-group\\\",\\\"a\\\",\\\"filter-fields\\\",\\\"ui/p-select\\\",\\\"print-assertion\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"input\\\",\\\"files-grid\\\",\\\"each\\\",\\\"-track-array\\\",\\\"is-undefined\\\",\\\"fn\\\",\\\"print-image\\\",\\\"img\\\",\\\"p\\\",\\\"get-imagediffclass\\\",\\\"ui/info-icon\\\",\\\"share-media-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/images-widget-details.hbs\",\n    \"isStrictMode\": false\n  });\n  const MaxImages = 100;\n  let ImagesWidgetDetails = _exports.default = (_class = class ImagesWidgetDetails extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _defineProperty(this, \"MaxImages\", MaxImages);\n      _defineProperty(this, \"isFirstLoad\", true);\n      _defineProperty(this, \"_initialLoadDone\", false);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"showFilterPanel\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor4, this);\n      _initializerDefineProperty(this, \"images\", _descriptor5, this);\n      _initializerDefineProperty(this, \"imageCount\", _descriptor6, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor8, this);\n      _initializerDefineProperty(this, \"search\", _descriptor9, this);\n      _initializerDefineProperty(this, \"region\", _descriptor0, this);\n      _initializerDefineProperty(this, \"agent\", _descriptor1, this);\n      _initializerDefineProperty(this, \"user\", _descriptor10, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor11, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor12, this);\n      _initializerDefineProperty(this, \"errorsOnly\", _descriptor13, this);\n      _initializerDefineProperty(this, \"selectedAssertion\", _descriptor14, this);\n      _initializerDefineProperty(this, \"selectedSuiteError\", _descriptor15, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor16, this);\n      _initializerDefineProperty(this, \"currentFilter\", _descriptor17, this);\n      _initializerDefineProperty(this, \"pendingUpdates\", _descriptor18, this);\n      _initializerDefineProperty(this, \"showShareMediaModal\", _descriptor19, this);\n      _initializerDefineProperty(this, \"mediaObject\", _descriptor20, this);\n      _initializerDefineProperty(this, \"mediaId\", _descriptor21, this);\n      _initializerDefineProperty(this, \"filtersExpanded\", _descriptor22, this);\n      _initializerDefineProperty(this, \"viewLayout\", _descriptor23, this);\n      this.resetFilters();\n      this.loadImages();\n      this.args.setFilesDownloadUrl?.(this.filesDownloadUrl);\n    }\n    get filesDownloadUrl() {\n      const path = this.args.overallModel?.uuid ? '/p/' + this.args.overallModel.uuid : '/executions/' + this.args.overallModel?.id + '/output-files/download';\n      const params = this.getParams();\n      if (this.args.overallModel?.uuid) {\n        params.download = true;\n      }\n      return _lib.default.toUrl(path, params);\n    }\n    onFilesDownloadUrlChanged() {\n      this.args.setFilesDownloadUrl?.(this.filesDownloadUrl);\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel?.script?.scriptType);\n    }\n    get assertionOptions() {\n      return _loadTest.default.getAssertionOptions(this.args.model?.suiteSummaries);\n    }\n    get errorOptions() {\n      return _loadTest.default.getErrorOptions(this.args.model?.suiteErrors);\n    }\n    get filteredImages() {\n      const search = this.search && this.search.toLowerCase();\n      const errorsOnly = this.errorsOnly === 'errors';\n      let images = this.images;\n      if (errorsOnly) {\n        images = _.filter(images, image => image.isRelatedToFailure);\n      }\n      if (search) {\n        return _.filter(images, function (image) {\n          return image.name.toLowerCase().indexOf(search) !== -1 || image.type && image.type.toLowerCase().indexOf(search) !== -1;\n        });\n      } else {\n        return images;\n      }\n    }\n    loadImages() {\n      this.isLoaded = false;\n      this.args.updateIsLoaded?.(false);\n      this.currentFilter = _.clone(this.filter);\n      const params = this.getParams();\n      params.limit = MaxImages;\n      const apiAction = this.args.overallModel?.uuid ? _server.default.getTokenContent(this.args.overallModel.uuid, params) : _server.default.getLoadTestExecutionOutputFiles(this.args.overallModel?.id, params);\n      apiAction.then(results => {\n        if (!this.isDestroyed) {\n          const images = results && results.files || [];\n          _.forEach(images, file => {\n            _lib.default.addAuthToOutputFile(file);\n            if (this.args.overallModel?.uuid && this.args.isBaseline) {\n              file.thumbnailUrl = `${file.thumbnailUrl}&comparison=true`;\n              file.viewUrl = `${file.viewUrl}&comparison=true`;\n            }\n          });\n          const imageCount = images.length || 0;\n          if (this.isFirstLoad) {\n            this.isFirstLoad = false;\n            this.imageCount = imageCount;\n          }\n          this.args.updateImageCount?.(imageCount);\n          const errorCount = images.filter(image => image.isRelatedToFailure).length || 0;\n          this.errorCount = errorCount;\n          this.args.updateErrorCount?.(errorCount);\n          this.images = new _trackedBuiltIns.TrackedArray(images);\n          this.args.setImagesLength?.(images.length);\n          if (!this.selectedSession) {\n            this.selectedSession = this.args.sessionsList?.find(session => session.value === -1);\n          }\n          this.isLoaded = true;\n          this.args.updateIsLoaded?.(true);\n          if (!images.length) this.args.imagesLoaded?.();\n          this.applyPendingUpdates();\n        }\n      }, () => {\n        this.imageCount = 0;\n        this.args.updateImageCount?.(0);\n        this.errorCount = 0;\n        this.args.updateErrorCount?.(0);\n        this.images = new _trackedBuiltIns.TrackedArray([]);\n        this.args.setImagesLength?.(0);\n        this.isLoaded = true;\n        this.args.updateIsLoaded?.(true);\n        this.args.imagesLoaded?.();\n        this.applyPendingUpdates();\n      });\n    }\n    getParams() {\n      const params = _loadTest.default.toFileFilterParams(this.filter, this.zoomInfo);\n      if (!this.args.model?.isAll) {\n        params.regions = this.args.model?.executionRegion?.id;\n      }\n      params.multimediaOnly = 'true';\n      if (this.args.overallModel?.uuid) {\n        params.outputFiles = true;\n        if (this.args.isBaseline) {\n          params.comparison = true;\n        }\n      }\n      if (this.args.commandError) {\n        params.commandErrorIds = this.args.commandError.commandErrorId;\n      }\n      if (this.selectedSession?.value != undefined && this.selectedSession?.value != -1 && this.args.sessionsList) {\n        params.sessionNum = this.selectedSession.value;\n      }\n      if (this.args.command) {\n        params.commandNameIds = this.args.command.commandNameId;\n      }\n      return params;\n    }\n    applyPendingUpdates() {\n      _.forEach(this.pendingUpdates, pending => {\n        if (pending.removedId) {\n          this.applyFileDelete(pending.removedId);\n        } else {\n          this.applyFileUpdate(pending.update, pending.isUpdate);\n        }\n      });\n      this.pendingUpdates = [];\n      this.applyLazyLoad();\n    }\n    onFileUpdated(update, isUpdate) {\n      if (this.isLoaded) {\n        this.applyFileUpdate(update, isUpdate);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          update: update,\n          isUpdate: isUpdate\n        });\n        this.pendingUpdates = pending;\n      }\n      this.applyLazyLoad();\n    }\n    onFileDeleted(fileId) {\n      if (this.isLoaded) {\n        this.applyFileDelete(fileId);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          removedId: fileId\n        });\n        this.pendingUpdates = pending;\n      }\n    }\n    applyFileDelete(fileId) {\n      if (!fileId) return;\n      const images = this.images;\n      const index = images.findIndex(image => image.id === fileId);\n      if (index === -1) return;\n      const [removedImage] = images.splice(index, 1);\n      this.imageCount -= 1;\n      this.args.updateImageCount?.(this.imageCount);\n      const id = `${this.args.widget?.id}_${this.args.regionName}_imagesGrid`;\n      this.EventBus.publish(id + '.update', null, null, removedImage);\n    }\n    applyFileUpdate(update, isUpdate) {\n      this.receivedRtUpdate = true;\n      this.args.updateReceivedRtUpdate?.(true);\n      const images = this.images;\n      const filter = this.filter;\n      let removedFile;\n      if (update && (update.isImage || update.type.indexOf('video/') === 0) && isUpdate) {\n        const existingImage = _.find(images, existingImage => {\n          return existingImage.id === update.id;\n        });\n        if (existingImage) {\n          (0, _object.setProperties)(existingImage, update);\n        }\n      } else if (update && (update.isImage || update.type.indexOf('video/') === 0) && _.findIndex(images, img => {\n        return img.id === update.id;\n      }) === -1 && _loadTest.default.doesFileMatchFilter(update, filter)) {\n        const imageCount = this.imageCount + 1;\n        this.imageCount = imageCount;\n        this.args.updateImageCount?.(imageCount);\n        if (images.length >= MaxImages) {\n          removedFile = images.pop();\n        }\n        images.unshift(update);\n        let id = `${this.args.widget?.id}_${this.args.regionName}_imagesGrid`;\n        this.EventBus.publish(id + '.update', update, isUpdate, removedFile);\n      }\n    }\n    resetFilters() {\n      this.region = 'ALL';\n      this.agent = 'ALL';\n      this.user = 'ALL';\n      this.iteration = 'ALL';\n      this.errorsOnly = 'all';\n      this.args.updateErrorsOnly?.('all');\n      this.browser = 'ALL';\n      this.selectedAssertion = _loadTest.default.findAssertionOption(this.args.assertion, this.assertionOptions);\n      this.selectedSuiteError = _loadTest.default.findSuiteErrorOption(this.args.suiteError, this.errorOptions);\n    }\n    get filter() {\n      const regionInfo = this.args.byRegionId?.get(this.region);\n      const selectedAssertion = this.selectedAssertion;\n      const selectedSuiteError = this.selectedSuiteError;\n      const commandNameId = this.args.command?.commandNameId;\n      const commandErrorId = this.args.commandError?.commandErrorId;\n      const region = this.args.isAll ? regionInfo && regionInfo.execRegionIds.join(',') : this.args.isBaseline ? this.args.regionBaselineId : this.args.model?.executionRegion?.id;\n      return {\n        region,\n        agent: this.agent,\n        user: this.user,\n        browser: this.browser,\n        iteration: this.iteration,\n        suiteTestIds: selectedAssertion && selectedAssertion.suiteTest.id >= 0 ? [selectedAssertion.suiteTest.id] : [],\n        suiteErrorIds: selectedSuiteError && selectedSuiteError.suiteError.id >= 0 ? [selectedSuiteError.suiteError.id] : [],\n        commandNameIds: commandNameId ? [Number(commandNameId)] : [],\n        commandErrorIds: commandErrorId ? [Number(commandErrorId)] : []\n      };\n    }\n    get hasFilter() {\n      let filterCount = 0;\n      let selectedSessionTitle = this.selectedSession?.title;\n      if (this.region !== 'ALL') filterCount++;\n      if (this.agent !== 'ALL') filterCount++;\n      if (this.user !== 'ALL') filterCount++;\n      if (this.iteration !== 'ALL') filterCount++;\n      if (this.browser !== 'ALL') filterCount++;\n      if (this.selectedAssertion?.suiteTest?.name !== 'ALL') filterCount++;\n      if (this.selectedSuiteError?.suiteError?.name !== 'ALL') filterCount++;\n      if (selectedSessionTitle && selectedSessionTitle !== 'ALL') filterCount++;\n      if (this.search) filterCount++;\n      return filterCount;\n    }\n    onParentErrorsOnlyChange() {\n      if (this.args.errorsOnly !== undefined && this.args.errorsOnly !== this.errorsOnly) {\n        this.errorsOnly = this.args.errorsOnly;\n      }\n    }\n    onImageReloadChange() {\n      if (!this._initialLoadDone) {\n        this._initialLoadDone = true;\n        return;\n      }\n      this.loadImages();\n    }\n    onViewLayoutChange() {\n      if (this.isLoaded && (!this.args.assertion?.viewType || this.args.assertion?.viewType === 'images')) {\n        (0, _runloop.later)(this, async () => {\n          this.applyLazyLoad();\n        }, 200);\n      }\n    }\n    onFiltersChanged() {\n      const currentFilter = this.currentFilter;\n      if (!_.isEqual(currentFilter, this.filter)) {\n        this.loadImages();\n      }\n    }\n    onExecutionIdChange() {\n      this.resetFilters();\n      this.loadImages();\n    }\n    applyLazyLoad() {\n      const container = `#panelDetail${this.uniqueId}`;\n      const settings = {\n        effect: 'fadeIn',\n        effectTime: 50,\n        threshold: 0\n      };\n      $(`${container} .lazy`).Lazy({\n        ...settings,\n        appendScroll: $(container)\n      });\n    }\n    showImageDetailsModalAction(image) {\n      this.args.showImageDetailsModal(image);\n    }\n    showImageDetailsModalById(imageId) {\n      this.args.showImageDetailsModal(this.images.find(i => i.id === imageId));\n    }\n    updateRegion(value) {\n      this.region = value;\n      this.onFiltersChanged();\n    }\n    updateAgent(value) {\n      this.agent = value;\n      this.onFiltersChanged();\n    }\n    updateUser(value) {\n      this.user = value;\n      this.onFiltersChanged();\n    }\n    updateIteration(value) {\n      this.iteration = value;\n      this.onFiltersChanged();\n    }\n    updateAssertion(value) {\n      this.selectedAssertion = value;\n      this.onFiltersChanged();\n    }\n    updateSuiteError(value) {\n      this.selectedSuiteError = value;\n      this.onFiltersChanged();\n    }\n    updateBrowser(value) {\n      this.browser = value;\n      this.onFiltersChanged();\n    }\n    showShareMediaModalAction(media) {\n      let mediaObj = {\n        type: media.isVideo ? 'video' : 'image',\n        id: media.id\n      };\n      this.mediaObject = mediaObj;\n      this.showShareMediaModal = true;\n    }\n    closeShareMediaModal() {\n      this.mediaId = null;\n      this.showShareMediaModal = false;\n    }\n    filtersExpand() {\n      this.filtersExpanded = !this.filtersExpanded;\n    }\n    updateErrorsOnlyAction(errorsOnly) {\n      this.errorsOnly = errorsOnly;\n      this.args.updateErrorsOnly?.(errorsOnly);\n    }\n    updateViewLayout(layout) {\n      this.viewLayout = layout;\n    }\n    onChangeSession(selectedSession) {\n      const selectedSessionNum = selectedSession.value || selectedSession.value == 0 ? selectedSession.value : -1;\n      this.selectedSession = this.args.sessionsList?.find(session => session.value === selectedSessionNum);\n    }\n    onLoadImages(index) {\n      if (this.filteredImages.length === index + 1) {\n        this.args.imagesLoaded?.();\n      }\n    }\n    onDidInsert() {\n      this.EventBus.subscribe('outputFile.update', this, 'onFileUpdated');\n      this.EventBus.subscribe('outputFile.delete', this, 'onFileDeleted');\n      if (!window.location.href.includes('print=true')) {\n        $(window).on(`scroll.imagesWidget${this.uniqueId}`, () => {\n          if (_lib.default.elementInView($(`#panelDetail${this.uniqueId}.gallery`))) {\n            this.applyLazyLoad();\n          }\n        });\n        this.applyLazyLoad();\n      }\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('outputFile.update', this, 'onFileUpdated');\n      this.EventBus.unsubscribe('outputFile.delete', this, 'onFileDeleted');\n      $(window).off(`scroll.imagesWidget${this.uniqueId}`);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showFilterPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"images\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"imageCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"agent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"user\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"errorsOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"selectedAssertion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"selectedSuiteError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"currentFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"pendingUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"mediaObject\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"mediaId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"filtersExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"viewLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onFilesDownloadUrlChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFilesDownloadUrlChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"assertionOptions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"assertionOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"errorOptions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"errorOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filteredImages\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"filteredImages\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParentErrorsOnlyChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParentErrorsOnlyChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onImageReloadChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onImageReloadChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onViewLayoutChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onViewLayoutChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onExecutionIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionIdChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalById\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalById\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAssertion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAssertion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSuiteError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSuiteError\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showShareMediaModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeShareMediaModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeShareMediaModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filtersExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"filtersExpand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateErrorsOnlyAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateErrorsOnlyAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateViewLayout\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateViewLayout\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLoadImages\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLoadImages\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDidInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDidInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ImagesWidgetDetails);\n});","define(\"@testable/shared-ui/components/images-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"ember-uuid\", \"@ember/object\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _emberUuid, _object, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container images-panel\" data-sortable-id=\"images\" data-type=\"Images\">\n  {{#unless @embedded}}\n    <div class=\"panel-heading block-sub-container-target\">\n      <div class=\"panel-heading-btn\">\n        {{#unless @minimalHeader}}\n          {{#if (gt this.imagesLength 0)}}\n            <a target=\"_blank\" href=\"{{this.filesDownloadUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\"\n               data-bs-toggle=\"tooltip\" title=\"Download Files\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n          {{/if}}\n          {{#if (and @removePanel (not @isViewer))}}\n            <a {{on \"click\" (fn this.removePanelAction \"images\" )}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                                  title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n          {{/if}}\n        {{/unless}}\n      </div>\n      <h4 class=\"panel-title\">\n  \n        <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n           class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n           aria-controls=\"panelBody{{this.uuid}}\">\n           <Ui::Icon @icon=\"fa fa-minus\" /></a>\n  \n        <strong>Images{{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}} {{#if (and (not @baselineExecution) this.isLoaded)}}\n          ({{print-number (if (eq this.errorsOnly 'errors') this.errorCount this.imageCount)}}){{/if}}</strong>\n        <Ui::InfoIcon\n                @content=\"Any screenshots taken in your tests will be shown here. Click the image\n                to compare it to previous test runs and see related results from the same test iteration.\"/>\n      </h4>\n  \n      {{#unless @baselineExecution}}\n        <div class=\"m-l-10 inline-link\">\n          <ImageWidgetFilters\n                  @overallModel={{@overallModel}}\n                  @viewLayout={{this.viewLayout}}\n                  @isLoaded={{this.isLoaded}}\n                  @errorsOnly={{this.errorsOnly}}\n                  @imageCount={{this.imageCount}}\n                  @errorCount={{this.errorCount}}\n                  @receivedRtUpdate={{this.receivedRtUpdate}}\n                  @onViewLayoutChange={{this.updateViewLayoutAction}}\n                  @onErrorsOnlyChange={{this.updateErrorsOnlyAction}}\n          />\n        </div>\n      {{/unless}}\n    </div>\n  {{/unless}}\n  \n  <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n    <div class=\"panel-body {{if @baselineExecution \"comparison-view\"}}\">\n    <ImagesWidgetDetails\n            @title=\"Current Test\"\n            @embedded={{@embedded}}\n            @overallModel={{@overallModel}}\n            @model={{@model}}\n            @byRegionId={{@byRegionId}}\n            @isAll={{@isAll}}\n            @isLoad={{@isLoad}}\n            @assertion={{@assertion}}\n            @isCommandsRelated={{@isCommandsRelated}}\n            @suiteError={{@suiteError}}\n            @widget={{@widget}}\n            @regionName={{@regionName}}\n            @isPrint={{@isPrint}}\n            @viewLayout={{unless @baselineExecution this.viewLayout}}\n            @errorsOnly={{this.errorsOnly}}\n            @imagesLoaded={{@imagesLoaded}}\n            @sessionsList={{@sessionsList}}\n            @setFilesDownloadUrl={{this.setFilesDownloadUrl}}\n            @setImagesLength={{this.setImagesLength}}\n            @updateErrorsOnly={{this.updateErrorsOnlyAction}}\n            @updateImageCount={{this.updateImageCountAction}}\n            @updateErrorCount={{this.updateErrorCountAction}}\n            @updateIsLoaded={{this.updateIsLoadedAction}}\n            @updateReceivedRtUpdate={{this.updateReceivedRtUpdateAction}}\n            @isComparison={{if @baselineExecution true}}\n            @commandError={{@commandError}}\n            @command={{@command}}\n            @showImageDetailsModal={{@showImageDetailsModal}}\n    />\n  \n    {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n      <div class=\"mt-3\"></div>\n      <ImagesWidgetDetails\n              @title=\"Baseline Test\"\n              @embedded={{@embedded}}\n              @overallModel={{@baselineExecution}}\n              @model={{@regionSummaryBaseline}}\n              @byRegionId={{@byRegionBaselineId}}\n              @isAll={{@isAll}}\n              @isLoad={{@isLoad}}\n              @assertion={{@assertion}}\n              @isCommandsRelated={{@isCommandsRelated}}\n              @suiteError={{@suiteError}}\n              @widget={{@widget}}\n              @regionName={{@regionName}}\n              @regionBaselineId={{@regionBaselineId}}\n              @sessionsList={{@sessionsList}}\n              @isPrint={{@isPrint}}\n              @viewLayout={{this.viewLayout}}\n              @imagesLoaded={{@baselineImagesLoaded}}\n              @isBaseline={{true}}\n              @isComparison={{true}}\n              @commandError={{@commandError}}\n              @command={{@command}}\n              @showImageDetailsModal={{@showImageDetailsModal}}\n      />\n    {{/if}}\n    </div>\n  </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel block-sub-container images-panel\\\"],[14,\\\"data-sortable-id\\\",\\\"images\\\"],[14,\\\"data-type\\\",\\\"Images\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[41,[28,[37,3],[[30,0,[\\\"imagesLength\\\"]],0],null],[[[1,\\\"          \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"filesDownloadUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download Files\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,3],[28,[37,7],[[30,4]],null]],null],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"removePanelAction\\\"]],\\\"images\\\"],null]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[1,\\\"\\\\n         \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Images\\\"],[41,[51,[30,5,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,5,[\\\"regionDescription\\\"]]]],[]],null],[1,\\\" \\\"],[41,[28,[37,6],[[28,[37,7],[[30,6]],null],[30,0,[\\\"isLoaded\\\"]]],null],[[[1,\\\"\\\\n        (\\\"],[1,[28,[35,12],[[52,[28,[37,13],[[30,0,[\\\"errorsOnly\\\"]],\\\"errors\\\"],null],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"imageCount\\\"]]]],null]],[1,\\\")\\\"]],[]],null],[13],[1,\\\"\\\\n      \\\"],[8,[39,14],null,[[\\\"@content\\\"],[\\\"Any screenshots taken in your tests will be shown here. Click the image\\\\n              to compare it to previous test runs and see related results from the same test iteration.\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-l-10 inline-link\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,15],null,[[\\\"@overallModel\\\",\\\"@viewLayout\\\",\\\"@isLoaded\\\",\\\"@errorsOnly\\\",\\\"@imageCount\\\",\\\"@errorCount\\\",\\\"@receivedRtUpdate\\\",\\\"@onViewLayoutChange\\\",\\\"@onErrorsOnlyChange\\\"],[[30,7],[30,0,[\\\"viewLayout\\\"]],[30,0,[\\\"isLoaded\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,0,[\\\"imageCount\\\"]],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"receivedRtUpdate\\\"]],[30,0,[\\\"updateViewLayoutAction\\\"]],[30,0,[\\\"updateErrorsOnlyAction\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"panel-body \\\",[52,[30,6],\\\"comparison-view\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[8,[39,16],null,[[\\\"@title\\\",\\\"@embedded\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@byRegionId\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@assertion\\\",\\\"@isCommandsRelated\\\",\\\"@suiteError\\\",\\\"@widget\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@viewLayout\\\",\\\"@errorsOnly\\\",\\\"@imagesLoaded\\\",\\\"@sessionsList\\\",\\\"@setFilesDownloadUrl\\\",\\\"@setImagesLength\\\",\\\"@updateErrorsOnly\\\",\\\"@updateImageCount\\\",\\\"@updateErrorCount\\\",\\\"@updateIsLoaded\\\",\\\"@updateReceivedRtUpdate\\\",\\\"@isComparison\\\",\\\"@commandError\\\",\\\"@command\\\",\\\"@showImageDetailsModal\\\"],[\\\"Current Test\\\",[30,1],[30,7],[30,5],[30,8],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[52,[51,[30,6]],[30,0,[\\\"viewLayout\\\"]]],[30,0,[\\\"errorsOnly\\\"]],[30,17],[30,18],[30,0,[\\\"setFilesDownloadUrl\\\"]],[30,0,[\\\"setImagesLength\\\"]],[30,0,[\\\"updateErrorsOnlyAction\\\"]],[30,0,[\\\"updateImageCountAction\\\"]],[30,0,[\\\"updateErrorCountAction\\\"]],[30,0,[\\\"updateIsLoadedAction\\\"]],[30,0,[\\\"updateReceivedRtUpdateAction\\\"]],[52,[30,6],true],[30,19],[30,20],[30,21]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,6],[[30,6],[28,[37,17],[[28,[37,13],[[30,15],\\\"ALL\\\"],null],[30,22]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"mt-3\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[8,[39,16],null,[[\\\"@title\\\",\\\"@embedded\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@byRegionId\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@assertion\\\",\\\"@isCommandsRelated\\\",\\\"@suiteError\\\",\\\"@widget\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@sessionsList\\\",\\\"@isPrint\\\",\\\"@viewLayout\\\",\\\"@imagesLoaded\\\",\\\"@isBaseline\\\",\\\"@isComparison\\\",\\\"@commandError\\\",\\\"@command\\\",\\\"@showImageDetailsModal\\\"],[\\\"Baseline Test\\\",[30,1],[30,6],[30,23],[30,24],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,22],[30,18],[30,16],[30,0,[\\\"viewLayout\\\"]],[30,25],true,true,[30,19],[30,20],[30,21]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@embedded\\\",\\\"@minimalHeader\\\",\\\"@removePanel\\\",\\\"@isViewer\\\",\\\"@model\\\",\\\"@baselineExecution\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@assertion\\\",\\\"@isCommandsRelated\\\",\\\"@suiteError\\\",\\\"@widget\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@imagesLoaded\\\",\\\"@sessionsList\\\",\\\"@commandError\\\",\\\"@command\\\",\\\"@showImageDetailsModal\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@byRegionBaselineId\\\",\\\"@baselineImagesLoaded\\\"],[\\\"div\\\",\\\"unless\\\",\\\"if\\\",\\\"gt\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"and\\\",\\\"not\\\",\\\"on\\\",\\\"fn\\\",\\\"h4\\\",\\\"strong\\\",\\\"print-number\\\",\\\"eq\\\",\\\"ui/info-icon\\\",\\\"image-widget-filters\\\",\\\"images-widget-details\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/images-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let ImagesWidget = _exports.default = (_class = class ImagesWidget extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"imageCount\", _descriptor2, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor3, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor5, this);\n      _initializerDefineProperty(this, \"viewLayout\", _descriptor6, this);\n      _initializerDefineProperty(this, \"errorsOnly\", _descriptor7, this);\n      _initializerDefineProperty(this, \"filesDownloadUrl\", _descriptor8, this);\n      _initializerDefineProperty(this, \"imagesLength\", _descriptor9, this);\n    }\n    setFilesDownloadUrl(url) {\n      this.filesDownloadUrl = url;\n    }\n    setImagesLength(length) {\n      this.imagesLength = length;\n    }\n    removePanelAction(widgetId) {\n      this.args.removePanel(widgetId);\n    }\n    updateErrorsOnlyAction(errorsOnly) {\n      (0, _runloop.next)(() => {\n        this.errorsOnly = errorsOnly;\n      });\n    }\n    updateImageCountAction(imageCount) {\n      (0, _runloop.next)(() => {\n        this.imageCount = imageCount;\n      });\n    }\n    updateErrorCountAction(errorCount) {\n      (0, _runloop.next)(() => {\n        this.errorCount = errorCount;\n      });\n    }\n    updateIsLoadedAction(isLoaded) {\n      (0, _runloop.next)(() => {\n        this.isLoaded = isLoaded;\n      });\n    }\n    updateViewLayoutAction(layout) {\n      this.viewLayout = layout;\n    }\n    updateReceivedRtUpdateAction(receivedRtUpdate) {\n      this.receivedRtUpdate = receivedRtUpdate;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"imageCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"viewLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'tile';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"errorsOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"filesDownloadUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"imagesLength\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"setFilesDownloadUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setFilesDownloadUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setImagesLength\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setImagesLength\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateErrorsOnlyAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateErrorsOnlyAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateImageCountAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateImageCountAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateErrorCountAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateErrorCountAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateViewLayoutAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateViewLayoutAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateReceivedRtUpdateAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateReceivedRtUpdateAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ImagesWidget);\n});","define(\"@testable/shared-ui/components/input-select-all\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Input\n    {{on 'focus' this.focusIn}}\n    {{on 'change' this.change}}\n    {{on 'blur' this.focusOut}}\n          @type={{@type}}\n          @value={{@value}}\n          ...attributes\n  />\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[17,1],[4,[38,1],[\\\"focus\\\",[30,0,[\\\"focusIn\\\"]]],null],[4,[38,1],[\\\"change\\\",[30,0,[\\\"change\\\"]]],null],[4,[38,1],[\\\"blur\\\",[30,0,[\\\"focusOut\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@type\\\",\\\"@value\\\"],[\\\"input\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/input-select-all.hbs\",\n    \"isStrictMode\": false\n  });\n  let InputSelectAllComponent = _exports.default = (_class = class InputSelectAllComponent extends _component2.default {\n    focusIn(e) {\n      if (e.target) {\n        e.target.select();\n      }\n    }\n    focusOut(e) {\n      if (e.target && typeof this.args.focusOut === 'function') {\n        this.args.focusOut(e.target.value);\n      }\n    }\n    change(e) {\n      if (e.target && typeof this.args.onChange === 'function') {\n        this.args.onChange(e.target.value);\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"focusIn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusIn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusOut\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusOut\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"change\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"change\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, InputSelectAllComponent);\n});","define(\"@testable/shared-ui/components/instance-logs-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"logsModal\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}} >\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{@instance}} - Logs</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <Ui::AceEditor @id=\"logsViewer\"\n                             @code={{this.logs}}\n                             @type=\"main\"\n                             @mode=\"ace/mode/text\"\n                             @readonly={{true}} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"logsModal\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,1]],[1,\\\" - Logs\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,4],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@type\\\",\\\"@mode\\\",\\\"@readonly\\\"],[\\\"logsViewer\\\",[30,0,[\\\"logs\\\"]],\\\"main\\\",\\\"ace/mode/text\\\",true]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@instance\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"ui/ace-editor\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/instance-logs-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let InstanceLogsModalComponent = _exports.default = (_class = class InstanceLogsModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"logs\", _descriptor2, this);\n    }\n    async loadLogs() {\n      try {\n        this.logs = await this.api.regions.getSystemLogs(this.args.instance);\n      } catch (e) {\n        console.log(e);\n        this.logs = 'No logs available';\n      }\n    }\n    didInsert() {\n      let _this = this;\n      $('#logsModal').on('hidden.bs.modal', function () {\n        _this.args.onClose();\n      });\n      $('#logsModal').modal('show');\n      $('#logsModal').on('shown.bs.modal', function () {\n        _this.loadLogs();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"logs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, InstanceLogsModalComponent);\n});","define(\"@testable/shared-ui/components/instances-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/runloop\", \"@ember/service\", \"@testable/shared-ui/components/data-grid\"], function (_exports, _observers, _runloop, _service, _dataGrid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@testable/shared-ui/components/data-grid\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let InstancesGrid = _exports.default = (_class = class InstancesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.regionSummary.instances.[]', this.instancesUpdates);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.regionSummary.instances.[]', this.instancesUpdates);\n    }\n    instancesUpdates() {\n      (0, _runloop.debounce)(this, this.updateDataSource, 250);\n    }\n    initTable(table) {\n      $('#' + this.args.id).on('click', '[data-ember-id]', e => {\n        let id = $(e.target).closest('i').data('ember-id');\n        if (id) {\n          this.args.onInstanceDetailsClick(id);\n        }\n      });\n    }\n    getColumns() {\n      let columns = [{\n        data: 'connectivity',\n        title: '',\n        width: '15px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            const text = _.isUndefined(data) ? '<i class=\"fa fa-ellipsis-h \"></i>' : data ? '<i class=\"fa fa-check-circle text-primary\"></i>' : '<i class=\"fa fa-exclamation-circle text-danger\"></i>';\n            return text + `<i data-ember-id=\"${full.name}\"  data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"View Logs\" aria-label=\"View Logs\"><i class=\"fa fa-bars text-primary cursor-pointer m-l-5\"></i></i>`;\n          } else {\n            return data;\n          }\n        }\n      }];\n      if (this.args.regionSummary.isAll) columns.push({\n        data: 'regionName',\n        title: 'Region',\n        width: '100px'\n      });\n      columns.push({\n        data: 'instanceType',\n        title: 'Type',\n        width: '70px'\n      }, {\n        data: 'host',\n        title: 'Host',\n        width: '250px'\n      }, {\n        data: 'state',\n        title: 'State',\n        width: '70px'\n      }, {\n        data: 'hasError',\n        title: 'Error',\n        width: '40px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return data ? '<i class=\"fa fa-exclamation-circle text-danger\"></i>' : '';\n          } else {\n            return data ? data : '';\n          }\n        }\n      }, {\n        data: 'spotId',\n        title: 'Spot',\n        width: '50px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return data ? '<i class=\"fa fa-check-circle\"></i>' : '';\n          } else {\n            return data ? data : '';\n          }\n        }\n      }, {\n        data: 'name',\n        title: 'Instance ID',\n        width: '130px'\n      }, {\n        data: 'networkId',\n        title: 'VPC',\n        width: '100px'\n      }, {\n        data: 'subnetId',\n        title: 'Subnet',\n        width: '100px'\n      }, {\n        data: 'publicIp',\n        title: 'Public IP',\n        width: '100px'\n      }, {\n        data: 'privateIp',\n        title: 'Private IP',\n        width: '100px'\n      });\n      if (this.args.showUsage) columns.push({\n        data: 'usage',\n        title: 'Usage',\n        width: '100px'\n      });\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[1, 'asc'], [2, 'asc']];\n    }\n    updateDataSource() {\n      const table = $('#instancesGrid').DataTable();\n      const tableRows = table.rows().data();\n      const instances = this.args.regionSummary.instances;\n      let toAdd = [];\n      _.forEach(tableRows, row => {\n        if (!_.find(instances, instance => instance.id === row.id)) {\n          table.row('#' + row.id).remove();\n        }\n      });\n      instances.forEach(record => {\n        if (!_.find(tableRows, instance => {\n          return record.id === instance.id;\n        })) {\n          toAdd.push(record);\n        } else {\n          let row = table.row('#' + record.id);\n          let data = row.data();\n          if (!_.isEqual(data, record)) {\n            row.data(record);\n          }\n        }\n      });\n      if (toAdd.length > 0) {\n        table.clear().rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    createDataSource() {\n      return this.args.regionSummary.instances;\n    }\n    addTableOptions(options) {\n      options.dom = 'BZtp';\n      options.select = {\n        style: 'single'\n      };\n      options.language = {\n        emptyTable: \"No instances yet.\"\n      };\n      options.buttons = [{\n        extend: 'copy',\n        className: 'btn btn-sm btn-icon btn-circle text-primary pull-right m-l-10 m-b-5',\n        text: '<i class=\"fa fa-copy\"></i>'\n      }, {\n        extend: 'csv',\n        filename: 'testable.instances.' + this.args.regionSummary.execution.id + '.' + this.args.regionSummary.regionName,\n        className: 'btn btn-sm btn-icon btn-circle text-primary pull-right',\n        text: '<i class=\"fa fa-download\"></i>'\n      }];\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/integration-slack\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (or (not @integration.active) (not this.settings.token))}}\n    <a\n      href=\"https://slack.com/oauth/v2/authorize?client_id=409997743874.409764340212&scope=channels:join,channels:read,chat:write,chat:write.public,groups:read&state={{this.orgId}}|{{this.sid}}&redirect_uri={{this.slackAuthUrl}}\">\n      <img alt=\"Add to Slack\" height=\"40\" width=\"139\" src=\"https://platform.slack-edge.com/img/add_to_slack.png\"\n        srcset=\"https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x\" /></a>\n  {{/if}}\n  {{#if this.settings.token}}\n    <form class=\"m-t-10\" {{on \"submit\" this.updateSlackIntegration}}>\n      <div class=\"form-group\">\n        <label>Status <Ui::InfoIcon\n                @content=\"State of the integration with Slack. To deactivate, delete the app from your Slack workspace and the next time you run a test on Testable the integration will be removed automatically.\" /></label>\n        <div>\n          <Input @type=\"text\" disabled={{true}} class=\"form-control\" @value={{if @integration.active \"Active\" \"Inactive\"}} />\n        </div>\n      </div>\n      <div class=\"form-group\">\n        <div class=\"alert alert-info\">\n          <strong>Note:</strong> Notification settings (when to send messages, channel, formatting options) are now configured in the <strong>Notifications</strong> section of Organization Settings or a test configuration. This integration only manages the connection to your Slack workspace.\n        </div>\n      </div>\n      <div class=\"form-group\">\n        <button type=\"submit\" class=\"btn btn-sm btn-success\">Save</button>\n      </div>\n    </form>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[28,[37,2],[[30,1,[\\\"active\\\"]]],null],[28,[37,2],[[30,0,[\\\"settings\\\",\\\"token\\\"]]],null]],null],[[[1,\\\"  \\\"],[10,3],[15,6,[29,[\\\"https://slack.com/oauth/v2/authorize?client_id=409997743874.409764340212&scope=channels:join,channels:read,chat:write,chat:write.public,groups:read&state=\\\",[30,0,[\\\"orgId\\\"]],\\\"|\\\",[30,0,[\\\"sid\\\"]],\\\"&redirect_uri=\\\",[30,0,[\\\"slackAuthUrl\\\"]]]]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Add to Slack\\\"],[14,\\\"height\\\",\\\"40\\\"],[14,\\\"width\\\",\\\"139\\\"],[14,\\\"src\\\",\\\"https://platform.slack-edge.com/img/add_to_slack.png\\\"],[14,\\\"srcset\\\",\\\"https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x\\\"],[12],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"settings\\\",\\\"token\\\"]],[[[1,\\\"  \\\"],[11,\\\"form\\\"],[24,0,\\\"m-t-10\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"updateSlackIntegration\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Status \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"State of the integration with Slack. To deactivate, delete the app from your Slack workspace and the next time you run a test on Testable the integration will be removed automatically.\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[8,[39,10],[[16,\\\"disabled\\\",true],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[52,[30,1,[\\\"active\\\"]],\\\"Active\\\",\\\"Inactive\\\"]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Note:\\\"],[13],[1,\\\" Notification settings (when to send messages, channel, formatting options) are now configured in the \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Notifications\\\"],[13],[1,\\\" section of Organization Settings or a test configuration. This integration only manages the connection to your Slack workspace.\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Save\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@integration\\\"],[\\\"if\\\",\\\"or\\\",\\\"not\\\",\\\"a\\\",\\\"img\\\",\\\"form\\\",\\\"on\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"strong\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/integration-slack.hbs\",\n    \"isStrictMode\": false\n  });\n  let IntegrationSlackComponent = _exports.default = (_class = class IntegrationSlackComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"orgId\", _descriptor, this);\n      _initializerDefineProperty(this, \"sid\", _descriptor2, this);\n      _initializerDefineProperty(this, \"slackAuthUrl\", _descriptor3, this);\n      _initializerDefineProperty(this, \"settings\", _descriptor4, this);\n      const settings = _lib.default.tryParseJson(this.args.integration.settings) || {};\n      this.settings = settings;\n    }\n    updateSlackIntegration(e) {\n      e.preventDefault();\n      this.args.updateIntegration(this.args.integration, JSON.stringify(this.settings));\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"orgId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser.orgId;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"sid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser.sid;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"slackAuthUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.websiteUrl + '/api/slack/auth';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"settings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateSlackIntegration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSlackIntegration\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, IntegrationSlackComponent);\n});","define(\"@testable/shared-ui/components/integration-teams\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (or (not @integration.active) (not this.settings.token))}}\n    <a href={{this.teamsUrl}} class=\"integration-button\">\n      <img alt=\"Add to Teams\" height=\"40\" width=\"40\"\n           src=\"https://cdn.cdnlogo.com/logos/m/47/microsoft-teams.png\"/> Add to <strong>Teams</strong></a>\n  {{/if}}\n  {{#if this.settings.token}}\n    <form class=\"m-t-10\" {{on \"submit\" this.updateTeamsIntegration}}>\n      <div class=\"form-group\">\n        <label>Status <Ui::InfoIcon\n                @content=\"State of the integration with Teams. To deactivate, delete the app from your Teams workspace and the next time you run a test on Testable the integration will be removed automatically.\" /></label>\n        <div>\n          <Input @type=\"text\" disabled={{true}} class=\"form-control\" @value={{if @integration.active \"Active\" \"Inactive\"}} />\n        </div>\n      </div>\n  \n      <div class=\"form-group\">\n        <label>Team <Ui::InfoIcon @content=\"Select the Microsoft Team to use for notifications.\" /></label>\n        {{#if this.isLoadingTeams}}\n          <div class=\"text-muted\">Loading teams...</div>\n        {{else}}\n          <Ui::PSelect\n            @options={{this.teams}}\n            @selected={{this.selectedTeam}}\n            @placeholder=\"Select a team...\"\n            @searchEnabled={{true}}\n            @searchField=\"name\"\n            @onChange={{this.onSelectTeam}}\n            as |team|>\n            {{team.name}}\n          </Ui::PSelect>\n          {{#unless this.selectedTeam}}\n            <div class=\"text-danger m-t-5\">A team must be selected for the integration to work.</div>\n          {{/unless}}\n        {{/if}}\n      </div>\n  \n      <div class=\"form-group\">\n        <div class=\"alert alert-info\">\n          <strong>Note:</strong> Notification settings (when to send messages, channel, formatting options) are now configured in the <strong>Notifications</strong> section of Organization Settings or a test configuration. This integration only manages the connection to your Teams workspace.\n        </div>\n      </div>\n      <div class=\"form-group\">\n        <button type=\"submit\" class=\"btn btn-sm btn-success\">Save</button>\n      </div>\n    </form>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[28,[37,2],[[30,1,[\\\"active\\\"]]],null],[28,[37,2],[[30,0,[\\\"settings\\\",\\\"token\\\"]]],null]],null],[[[1,\\\"  \\\"],[10,3],[15,6,[30,0,[\\\"teamsUrl\\\"]]],[14,0,\\\"integration-button\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Add to Teams\\\"],[14,\\\"height\\\",\\\"40\\\"],[14,\\\"width\\\",\\\"40\\\"],[14,\\\"src\\\",\\\"https://cdn.cdnlogo.com/logos/m/47/microsoft-teams.png\\\"],[12],[13],[1,\\\" Add to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Teams\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"settings\\\",\\\"token\\\"]],[[[1,\\\"  \\\"],[11,\\\"form\\\"],[24,0,\\\"m-t-10\\\"],[4,[38,7],[\\\"submit\\\",[30,0,[\\\"updateTeamsIntegration\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Status \\\"],[8,[39,10],null,[[\\\"@content\\\"],[\\\"State of the integration with Teams. To deactivate, delete the app from your Teams workspace and the next time you run a test on Testable the integration will be removed automatically.\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[8,[39,11],[[16,\\\"disabled\\\",true],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[52,[30,1,[\\\"active\\\"]],\\\"Active\\\",\\\"Inactive\\\"]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Team \\\"],[8,[39,10],null,[[\\\"@content\\\"],[\\\"Select the Microsoft Team to use for notifications.\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingTeams\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"Loading teams...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,12],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@onChange\\\"],[[30,0,[\\\"teams\\\"]],[30,0,[\\\"selectedTeam\\\"]],\\\"Select a team...\\\",true,\\\"name\\\",[30,0,[\\\"onSelectTeam\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[2]]]]],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"selectedTeam\\\"]]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text-danger m-t-5\\\"],[12],[1,\\\"A team must be selected for the integration to work.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Note:\\\"],[13],[1,\\\" Notification settings (when to send messages, channel, formatting options) are now configured in the \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Notifications\\\"],[13],[1,\\\" section of Organization Settings or a test configuration. This integration only manages the connection to your Teams workspace.\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Save\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@integration\\\",\\\"team\\\"],[\\\"if\\\",\\\"or\\\",\\\"not\\\",\\\"a\\\",\\\"img\\\",\\\"strong\\\",\\\"form\\\",\\\"on\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"unless\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/integration-teams.hbs\",\n    \"isStrictMode\": false\n  });\n  let IntegrationTeamsComponent = _exports.default = (_class = class IntegrationTeamsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"teamsUrl\", _descriptor2, this);\n      _initializerDefineProperty(this, \"settings\", _descriptor3, this);\n      _initializerDefineProperty(this, \"teams\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedTeam\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isLoadingTeams\", _descriptor6, this);\n      this.teamsUrl = this.api.integrations.teams.getAuthUrl();\n      const settings = _lib.default.tryParseJson(this.args.integration.settings) || {};\n      this.settings = settings;\n      if (settings.teams) {\n        this.selectedTeam = settings.teams;\n      }\n      if (settings.token) {\n        this.loadTeams();\n      }\n    }\n    async loadTeams() {\n      try {\n        this.isLoadingTeams = true;\n        this.teams = await this.api.integrations.teams.getTeams();\n      } catch (error) {\n        _lib.default.error('Failed to load teams');\n      } finally {\n        this.isLoadingTeams = false;\n      }\n    }\n    onSelectTeam(team) {\n      this.selectedTeam = team;\n      this.settings = {\n        ...this.settings,\n        teams: team ? {\n          id: team.id,\n          name: team.name\n        } : null\n      };\n    }\n    updateTeamsIntegration(e) {\n      e.preventDefault();\n      if (!this.selectedTeam) {\n        _lib.default.error('Please select a team');\n        return;\n      }\n      this.args.updateIntegration(this.args.integration, JSON.stringify(this.settings));\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"teamsUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"settings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"teams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedTeam\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingTeams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSelectTeam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectTeam\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeamsIntegration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeamsIntegration\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, IntegrationTeamsComponent);\n});","define(\"@testable/shared-ui/components/iteration-results\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/service\", \"@ember/runloop\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _component2, _lib, _loadTest, _service, _runloop, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span {{did-insert this.onChange}} {{did-update this.onChange @selectedSession @iteration @selectedResource this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp}}></span>\n  <span {{did-update this.onCommandDetailedChange this.showDetailedCommands this.failureOnly this.commandOrder}}></span>\n  {{#if @iteration}}\n    <div class=\"{{unless @isVideo 'title-box m-t-10 no-print'}}\" id=\"userIterationsContents{{this.uniqueId}}\">\n      {{#if this.videos}}\n        <div class=\"panel-heading\" role=\"tab\" id=\"headingVideo\">\n          <h4 class=\"panel-title\">\n            <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                href=\"#videoPanel{{this.uniqueId}}\" aria-expanded=\"false\" aria-controls=\"videoPanel{{this.uniqueId}}\">\n              <Ui::Icon @icon=\"fa fa-plus\" />\n            </a>\n            <strong>{{if (gt this.videos.length 1) \"Videos\" \"Video\"}}</strong>\n          </h4>\n        </div>\n        <div class=\"panel\">\n            <div id=\"videoPanel{{this.uniqueId}}\" class=\"panel-collapse collapse iterationVideoPanel\" role=\"tabpanel\" aria-labelledby=\"headingVideo\">\n              {{#each this.videos as |video|}}\n                <div class=\"panel-body\">\n                  <Ui::VideojsPlayer @src={{video.playlistUrl}} @videoSeekPosition={{this.videoSeekPosition}} />\n                </div>\n              {{/each}}\n          </div>\n        </div>\n      {{/if}}\n  \n      {{#if this.suiteResultsLoaded}}\n        {{#if (gt this.suiteResults.length 0)}}\n          <div class=\"m-t-10\">\n            <SuiteResultsWidget @suiteResults={{this.suiteResults}}\n                                @hasDuration={{this.suiteResultsHasDuration}}\n                                @scriptType={{@overallModel.script.scriptType}}\n                                @collapsible={{true}}\n                                @headerStyle=\"panel-info\"\n                                @suffix=\"SlowestIterations\"\n                                @collapsed={{true}}\n            />\n          </div>\n        {{/if}}\n      {{else}}\n        <div class=\"m-t-10\">Loading test framework suite results for iteration {{@iteration.id}}...</div>\n      {{/if}}\n  \n      {{#if this.commandsPanelLoaded}}\n        <div class=\"panel\">\n          <div class=\"panel-heading\" role=\"tab\" id=\"commandsPanel\">\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                 data-bs-parent=\"#userIterationsContents{{this.uniqueId}}\"\n                 href=\"#commandsPanelBody{{this.uniqueId}}\"\n                 aria-expanded=\"{{if this.commandsExpanded 'true' 'false'}}\"\n                 aria-controls=\"commandsPanelBody{{this.uniqueId}}\">\n                <Ui::Icon @icon=\"fa fa-{{if this.commandsExpanded 'minus' 'plus'}}\" />\n              </a>\n              <strong>Commands\n                ({{#if (lt this.streamCommands.length this.totalCommands)}}{{this.streamCommands.length}} / {{/if}}{{this.totalCommands}})\n              </strong>\n              <a role=\"button\" class=\"text-primary\n                                        {{if (gte this.streamCommands.length this.totalCommands) 'hidden'}}\n                                       \" {{on 'click' this.commandsLoadMore}}>\n                Load More</a>\n              <div class=\"panel-heading-btn\">\n                {{#if (and this.hasSelectedSession this.totalCommands)}}\n                  <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                     target=\"_blank\"\n                     title=\"Download details\" href={{this.commandDownloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n                {{/if}}\n                <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Passed\" class=\"m-l-10 saved-status m-r-5\">\n                  {{print-number this.commandStream.statePassed}}\n                </Ui::Icon>\n                <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands Failed\" class=\"m-l-10 saved-status m-r-5\">\n                  {{print-number this.commandStream.stateFailed}}\n                </Ui::Icon>\n                {{#if this.commandStream.stateInProgress}}\n                  <Ui::Icon @icon=\"fa fa-lg fa-spinner fa-spin\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Commands In Progress\" class=\"m-l-10 saved-status m-r-5\">\n                    {{print-number this.commandStream.stateInProgress}}\n                  </Ui::Icon>\n                {{/if}}\n                <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Duration\" class=\"m-l-10 saved-status m-r-5\">\n                  {{print-number this.commandStream.duration}}ms\n                </Ui::Icon>\n              </div>\n            </h4>\n  \n          </div>\n          <div id=\"commandsPanelBody{{this.uniqueId}}\" class=\"panel-collapse {{if this.commandsExpanded 'show' 'collapse'}} \" role=\"tabpanel\" aria-labelledby=\"commandsPanelBody\">\n            <div class=\"panel-body panel-500\">\n              <div class=\"m-b-10\">\n                <label class=\"normal m-l-10 m-b-0\">\n                  <Input @type=\"checkbox\" @checked={{this.showDetailedCommands}} /> Detailed View {{#unless this.showDetailedCommands}}({{this.detailedCommandCount}}){{/unless}}\n                </label>\n                <label class=\"normal m-l-10 m-b-0\">\n                  <Input @type=\"checkbox\" @checked={{this.failureOnly}} /> Failure Only {{#unless this.failureOnly}}({{print-number this.commandStream.stateFailed}}){{/unless}}\n                </label>\n                <span class=\"m-l-10\">\n                  <BsButtonGroup @value={{this.commandOrder}} @type=\"radio\" @onChange={{this.updateCommandOrder}} as |bg|>\n                    <bg.button @type=\"success width-100\" @value=\"chronological\" @size=\"xs\">Chronological</bg.button>\n                    <bg.button @type=\"success width-100\" @value=\"tail\" @size=\"xs\">Tail</bg.button>\n                  </BsButtonGroup>\n                </span>\n              </div>\n              {{#if this.streamCommands.length}}\n                <div class=\"suite-results\">\n                  <table class=\"table\">\n                    <tbody>\n                    {{#each this.streamCommands as |command index|}}\n                      <tr class=\"suite-row\">\n                        <td class=\"{{if (eq index 0) 'no-border'}}\">\n                          <CommandStreamCommand\n                                  @id={{command.id}}\n                                  @command={{command}}\n                                  @scriptType={{@overallModel.script.scriptType}}\n                                  @isPublic={{@overallModel.uuid}}\n                                  @showVideoPlayControls={{this.showVideoPlayControls}}\n                                  @videoSeekPosition={{this.videoSeekPositionFunction}}\n                                  @videoContainerSelector=\".iterationVideoPanel\"\n                                  @parentToScroll=\".modal\"\n                                  @containerModalId={{@containerModalId}}\n                          />\n                        </td>\n                      </tr>\n                    {{/each}}\n                    </tbody>\n                  </table>\n                </div>\n              {{else if (not this.commandsLoaded)}}\n                Loading commands during iteration {{@iteration.id}}...\n              {{else}}\n                No commands.\n              {{/if}}\n            </div>\n          </div>\n        </div>\n      {{else if (not this.commandsLoaded)}}\n        <div class=\"m-t-20 m-b-20\">Loading commands during iteration {{@iteration.id}}...</div>\n      {{/if}}\n  \n  \n  \n      {{#if (and this.outputFilesLoaded (gt this.files.length 0))}}\n        <div class=\"panel\">\n          <div class=\"panel-heading\" role=\"tab\" id=\"headingFiles\">\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                 data-bs-parent=\"#userIterationsContents{{this.uniqueId}}\" href=\"#files{{this.uniqueId}}\" aria-expanded=\"false\" aria-controls=\"files{{this.uniqueId}}\">\n                <Ui::Icon @icon=\"fa fa-plus\" />\n              </a>\n              <strong>Files ({{print-number this.files.length}})</strong>\n  \n              <div class=\"panel-heading-btn\">\n                {{#if (and this.hasSelectedSession this.totalCommands)}}\n                  <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                     target=\"_blank\"\n                     title=\"Download files\" href={{this.filesDownloadUrl}}><Ui::Icon @icon=\"fa fa-download\" /></a>\n                {{/if}}\n              </div>\n            </h4>\n          </div>\n          <div id=\"files{{this.uniqueId}}\" class=\"panel-collapse collapse\" role=\"tabpanel\" aria-labelledby=\"headingFiles\">\n            <div class=\"panel-body panel-500\">\n              <table class=\"table table-striped table-bordered table-no-top-bottom-padding\">\n                <thead>\n                <tr>\n                  <th>Preview</th>\n                  <th>Name</th>\n                  <th>Content Type</th>\n                  <th>Size</th>\n                  <th>Created At</th>\n                </tr>\n                </thead>\n                <tbody>\n                {{#each this.files as |file|}}\n                  <tr>\n                    <td>\n                      {{#if file.isImage}}\n                        <a {{on \"click\" (fn this.showImageDetailsModalAction file)}} role=\"button\">\n                          <img src=\"{{file.thumbnailUrl}}\" alt=\"\" role=\"none\">\n                        </a>\n                      {{else}}\n                        <a href=\"{{file.url}}\">\n                          <img src=\"{{file.thumbnailUrl}}\" alt=\"\" role=\"none\">\n                        </a>\n                      {{/if}}\n                    </td>\n                    <td>\n                      {{#if file.isImage}}\n                        <a {{on \"click\" (fn this.showImageDetailsModalAction file)}} role=\"button\">\n                          {{file.name}}\n                        </a>\n                      {{else}}\n                        <a href=\"{{file.url}}\">\n                          {{file.name}}\n                        </a>\n                      {{/if}}\n                    </td>\n                    <td>{{file.type}}</td>\n                    <td>{{print-bytes file.size}}</td>\n                    <td>{{print-datetime file.capturedAt}}</td>\n                  </tr>\n                {{/each}}\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n      {{else if (not this.outputFilesLoaded)}}\n        <div class=\"m-t-10\">Loading files captured during iteration {{@iteration.id}}...</div>\n      {{/if}}\n      {{#if this.customMetricsLoaded}}\n        {{#if (and this.hasSelectedSession this.hasMoreCustomMetrics)}}\n          <span class=\"semi-bold\">Not all custom metrics are displayed. To view all results from this iteration <a\n                  href=\"{{this.exportIterationToCsvUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> export to CSV</a>.</span>\n        {{/if}}\n        {{#if (gt this.customMetrics.length 0)}}\n          <CustomMetricsPanel @customMetrics={{this.customMetrics}}\n                              @parentElement=\"#userIterationsContents\" />\n        {{/if}}\n      {{else}}\n        <div class=\"m-t-10\">Load user defined metrics...</div>\n      {{/if}}\n      {{#if this.networkResultsLoaded}}\n        <div class=\"panel\">\n          <div class=\"panel-heading\" role=\"tab\" id=\"headingIterationResults\">\n            <div class=\"panel-heading-btn\"  >\n              <GridSearch @inTab={{false}} @bottomMargin={{false}} @onSearch={{fn (mut this.search)}} style={{html-safe 'margin-top: -4px'}} />\n              {{#if this.hasSelectedSession}}\n                <a target=\"_blank\" href=\"{{this.exportIterationToCsvUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\" title=\"Export iteration results to CSV\" rel=\"noreferrer noopener\">\n                  <Ui::Icon @icon=\"fa fa-download\" />\n                </a>\n              {{/if}}\n            </div>\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                 data-bs-parent=\"#userIterationsContents{{this.uniqueId}}\" href=\"#iterationResults{{this.uniqueId}}\" aria-expanded=\"false\"\n                 aria-controls=\"iterationResults{{this.uniqueId}}\" {{on \"click\" this.triggerResize}}>\n                <Ui::Icon @icon=\"fa fa-plus\" />\n              </a>\n              <strong>Network Requests (\n                {{#if (lt this.networkResults.length this.networkResultsCount)}}{{this.networkResults.length}}\n                  / {{/if}}\n                {{print-number this.networkResultsCount}}\n                )</strong>\n  \n              <a role=\"button\" class=\"text-primary {{unless this.showLoadMore 'hidden'}}\" {{on\n                      'click' this.loadMoreResults}}>\n                Load More</a>\n  \n              <span class=\"text-muted m-l-10\">{{if @isInModal 'Click' 'Double click'}} a network request for details.</span>\n            </h4>\n          </div>\n          <div id=\"iterationResults{{this.uniqueId}}\" class=\"panel-collapse collapse\" role=\"tabpanel\" aria-labelledby=\"headingIterationResults\">\n            <div class=\"panel-body\">\n              <div class=\"overflow-auto\">\n                <ResultsTimelineGrid @id={{concat @regionName '_iterationResultsGrid'}}\n                                     @dblClickToSelect={{not @isInModal}}\n                                     @hideOverallResult={{true}}\n                                     @results={{this.networkResults}}\n                                     @scriptType={{@overallModel.script.scriptType}}\n                                     @search={{this.search}}\n                                     @resultSelected={{this.resultSelected}} />\n              </div>\n            </div>\n          </div>\n        </div>\n        {{#if @isInModal}}\n          <div class=\"panel\">\n            <div class=\"panel-heading\" role=\"tab\" id=\"headingResultTrace\">\n              <h4 class=\"panel-title\">\n                <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                   data-bs-parent=\"#userIterationsContents{{this.uniqueId}}\" href=\"#trace{{this.uniqueId}}\" aria-expanded=\"false\" aria-controls=\"trace{{this.uniqueId}}\">\n                  <Ui::Icon @icon=\"fa fa-plus\" />\n                </a>\n              </h4>\n              <strong>Result Details, Metrics, and Trace</strong>\n            </div>\n            <div id=\"trace{{this.uniqueId}}\" class=\"panel-collapse collapse\" role=\"tabpanel\" aria-labelledby=\"headingResultTrace\">\n              <div class=\"panel-body\">\n                {{#if this.selectedResultId}}\n                  <SavedResultDetails\n                    @resultId={{this.selectedResultId}}\n                    @uuid={{@overallModel.uuid}}\n                    @scriptType={{@overallModel.script.scriptType}}\n                  />\n                {{else}}\n                  <span>Select a row in the results above to view details, metrics, assertions, and trace information.</span>\n                {{/if}}\n              </div>\n            </div>\n          </div>\n        {{/if}}\n      {{else}}\n        <div class=\"m-t-10\">Loading network requests made during iteration {{@iteration.id}}...</div>\n      {{/if}}\n    </div>\n  {{/if}}\n  \n  {{#if this.showResultModal}}\n    <ResultModal @resultId={{this.selectedResultId}}\n                 @uuid={{@overallModel.uuid}}\n                 @scriptType={{@overallModel.script.scriptType}}\n                 @modalClosed={{this.resultModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onChange\\\"]]],null],[4,[38,2],[[30,0,[\\\"onChange\\\"]],[30,1],[30,2],[30,3],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[11,1],[4,[38,2],[[30,0,[\\\"onCommandDetailedChange\\\"]],[30,0,[\\\"showDetailedCommands\\\"]],[30,0,[\\\"failureOnly\\\"]],[30,0,[\\\"commandOrder\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[51,[30,4]],\\\"title-box m-t-10 no-print\\\"]]]],[15,1,[29,[\\\"userIterationsContents\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videos\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingVideo\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#videoPanel\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[15,\\\"aria-controls\\\",[29,[\\\"videoPanel\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,[52,[28,[37,10],[[30,0,[\\\"videos\\\",\\\"length\\\"]],1],null],\\\"Videos\\\",\\\"Video\\\"]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,1,[29,[\\\"videoPanel\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"panel-collapse collapse iterationVideoPanel\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingVideo\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"videos\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,13],null,[[\\\"@src\\\",\\\"@videoSeekPosition\\\"],[[30,5,[\\\"playlistUrl\\\"]],[30,0,[\\\"videoSeekPosition\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"suiteResultsLoaded\\\"]],[[[41,[28,[37,10],[[30,0,[\\\"suiteResults\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,14],null,[[\\\"@suiteResults\\\",\\\"@hasDuration\\\",\\\"@scriptType\\\",\\\"@collapsible\\\",\\\"@headerStyle\\\",\\\"@suffix\\\",\\\"@collapsed\\\"],[[30,0,[\\\"suiteResults\\\"]],[30,0,[\\\"suiteResultsHasDuration\\\"]],[30,6,[\\\"script\\\",\\\"scriptType\\\"]],true,\\\"panel-info\\\",\\\"SlowestIterations\\\",true]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Loading test framework suite results for iteration \\\"],[1,[30,2,[\\\"id\\\"]]],[1,\\\"...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"commandsPanelLoaded\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"commandsPanel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-parent\\\",[29,[\\\"#userIterationsContents\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,6,[29,[\\\"#commandsPanelBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,\\\"aria-expanded\\\",[29,[[52,[30,0,[\\\"commandsExpanded\\\"]],\\\"true\\\",\\\"false\\\"]]]],[15,\\\"aria-controls\\\",[29,[\\\"commandsPanelBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-\\\",[52,[30,0,[\\\"commandsExpanded\\\"]],\\\"minus\\\",\\\"plus\\\"]]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Commands\\\\n              (\\\"],[41,[28,[37,15],[[30,0,[\\\"streamCommands\\\",\\\"length\\\"]],[30,0,[\\\"totalCommands\\\"]]],null],[[[1,[30,0,[\\\"streamCommands\\\",\\\"length\\\"]]],[1,\\\" / \\\"]],[]],null],[1,[30,0,[\\\"totalCommands\\\"]]],[1,\\\")\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[16,0,[29,[\\\"text-primary\\\\n                                      \\\",[52,[28,[37,16],[[30,0,[\\\"streamCommands\\\",\\\"length\\\"]],[30,0,[\\\"totalCommands\\\"]]],null],\\\"hidden\\\"],\\\"\\\\n                                     \\\"]]],[4,[38,17],[\\\"click\\\",[30,0,[\\\"commandsLoadMore\\\"]]],null],[12],[1,\\\"\\\\n              Load More\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"hasSelectedSession\\\"]],[30,0,[\\\"totalCommands\\\"]]],null],[[[1,\\\"                \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download details\\\"],[15,6,[30,0,[\\\"commandDownloadUrl\\\"]]],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Passed\\\"],[24,0,\\\"m-l-10 saved-status m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,19],[[30,0,[\\\"commandStream\\\",\\\"statePassed\\\"]]],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands Failed\\\"],[24,0,\\\"m-l-10 saved-status m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,19],[[30,0,[\\\"commandStream\\\",\\\"stateFailed\\\"]]],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"commandStream\\\",\\\"stateInProgress\\\"]],[[[1,\\\"                \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Commands In Progress\\\"],[24,0,\\\"m-l-10 saved-status m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[28,[35,19],[[30,0,[\\\"commandStream\\\",\\\"stateInProgress\\\"]]],null]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[8,[39,8],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"],[24,0,\\\"m-l-10 saved-status m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,19],[[30,0,[\\\"commandStream\\\",\\\"duration\\\"]]],null]],[1,\\\"ms\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[\\\"commandsPanelBody\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,0,[29,[\\\"panel-collapse \\\",[52,[30,0,[\\\"commandsExpanded\\\"]],\\\"show\\\",\\\"collapse\\\"],\\\" \\\"]]],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"commandsPanelBody\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body panel-500\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-l-10 m-b-0\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"showDetailedCommands\\\"]]]],null],[1,\\\" Detailed View \\\"],[41,[51,[30,0,[\\\"showDetailedCommands\\\"]]],[[[1,\\\"(\\\"],[1,[30,0,[\\\"detailedCommandCount\\\"]]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-l-10 m-b-0\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"failureOnly\\\"]]]],null],[1,\\\" Failure Only \\\"],[41,[51,[30,0,[\\\"failureOnly\\\"]]],[[[1,\\\"(\\\"],[1,[28,[35,19],[[30,0,[\\\"commandStream\\\",\\\"stateFailed\\\"]]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,22],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandOrder\\\"]],\\\"radio\\\",[30,0,[\\\"updateCommandOrder\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"chronological\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Chronological\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"tail\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tail\\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[7]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"streamCommands\\\",\\\"length\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"suite-results\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"streamCommands\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[10,\\\"tr\\\"],[14,0,\\\"suite-row\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[15,0,[29,[[52,[28,[37,27],[[30,9],0],null],\\\"no-border\\\"]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,28],null,[[\\\"@id\\\",\\\"@command\\\",\\\"@scriptType\\\",\\\"@isPublic\\\",\\\"@showVideoPlayControls\\\",\\\"@videoSeekPosition\\\",\\\"@videoContainerSelector\\\",\\\"@parentToScroll\\\",\\\"@containerModalId\\\"],[[30,8,[\\\"id\\\"]],[30,8],[30,6,[\\\"script\\\",\\\"scriptType\\\"]],[30,6,[\\\"uuid\\\"]],[30,0,[\\\"showVideoPlayControls\\\"]],[30,0,[\\\"videoSeekPositionFunction\\\"]],\\\".iterationVideoPanel\\\",\\\".modal\\\",[30,10]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[8,9]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,29],[[30,0,[\\\"commandsLoaded\\\"]]],null],[[[1,\\\"              Loading commands during iteration \\\"],[1,[30,2,[\\\"id\\\"]]],[1,\\\"...\\\\n\\\"]],[]],[[[1,\\\"              No commands.\\\\n            \\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,29],[[30,0,[\\\"commandsLoaded\\\"]]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-20 m-b-20\\\"],[12],[1,\\\"Loading commands during iteration \\\"],[1,[30,2,[\\\"id\\\"]]],[1,\\\"...\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"outputFilesLoaded\\\"]],[28,[37,10],[[30,0,[\\\"files\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingFiles\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-parent\\\",[29,[\\\"#userIterationsContents\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,6,[29,[\\\"#files\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[15,\\\"aria-controls\\\",[29,[\\\"files\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Files (\\\"],[1,[28,[35,19],[[30,0,[\\\"files\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"hasSelectedSession\\\"]],[30,0,[\\\"totalCommands\\\"]]],null],[[[1,\\\"                \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"title\\\",\\\"Download files\\\"],[15,6,[30,0,[\\\"filesDownloadUrl\\\"]]],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[\\\"files\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"panel-collapse collapse\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingFiles\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body panel-500\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-striped table-bordered table-no-top-bottom-padding\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Preview\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Content Type\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Size\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Created At\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"files\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,11,[\\\"isImage\\\"]],[[[1,\\\"                      \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,17],[\\\"click\\\",[28,[37,32],[[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,11]],null]],null],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,11,[\\\"thumbnailUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,3],[15,6,[29,[[30,11,[\\\"url\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,11,[\\\"thumbnailUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,11,[\\\"isImage\\\"]],[[[1,\\\"                      \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,17],[\\\"click\\\",[28,[37,32],[[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,11]],null]],null],[12],[1,\\\"\\\\n                        \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,3],[15,6,[29,[[30,11,[\\\"url\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,11,[\\\"type\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,34],[[30,11,[\\\"size\\\"]]],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,35],[[30,11,[\\\"capturedAt\\\"]]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,29],[[30,0,[\\\"outputFilesLoaded\\\"]]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Loading files captured during iteration \\\"],[1,[30,2,[\\\"id\\\"]]],[1,\\\"...\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]],[41,[30,0,[\\\"customMetricsLoaded\\\"]],[[[41,[28,[37,18],[[30,0,[\\\"hasSelectedSession\\\"]],[30,0,[\\\"hasMoreCustomMetrics\\\"]]],null],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Not all custom metrics are displayed. To view all results from this iteration \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportIterationToCsvUrl\\\"]]]]],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" export to CSV\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,10],[[30,0,[\\\"customMetrics\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,36],null,[[\\\"@customMetrics\\\",\\\"@parentElement\\\"],[[30,0,[\\\"customMetrics\\\"]],\\\"#userIterationsContents\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Load user defined metrics...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[30,0,[\\\"networkResultsLoaded\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingIterationResults\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,37],[[16,5,[28,[37,38],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@inTab\\\",\\\"@bottomMargin\\\",\\\"@onSearch\\\"],[false,false,[28,[37,32],[[28,[37,39],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasSelectedSession\\\"]],[[[1,\\\"              \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"exportIterationToCsvUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Export iteration results to CSV\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,\\\"data-bs-parent\\\",[29,[\\\"#userIterationsContents\\\",[30,0,[\\\"uniqueId\\\"]]]]],[16,6,[29,[\\\"#iterationResults\\\",[30,0,[\\\"uniqueId\\\"]]]]],[24,\\\"aria-expanded\\\",\\\"false\\\"],[16,\\\"aria-controls\\\",[29,[\\\"iterationResults\\\",[30,0,[\\\"uniqueId\\\"]]]]],[4,[38,17],[\\\"click\\\",[30,0,[\\\"triggerResize\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Network Requests (\\\\n              \\\"],[41,[28,[37,15],[[30,0,[\\\"networkResults\\\",\\\"length\\\"]],[30,0,[\\\"networkResultsCount\\\"]]],null],[[[1,[30,0,[\\\"networkResults\\\",\\\"length\\\"]]],[1,\\\"\\\\n                / \\\"]],[]],null],[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,0,[\\\"networkResultsCount\\\"]]],null]],[1,\\\"\\\\n              )\\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[16,0,[29,[\\\"text-primary \\\",[52,[51,[30,0,[\\\"showLoadMore\\\"]]],\\\"hidden\\\"]]]],[4,[38,17],[\\\"click\\\",[30,0,[\\\"loadMoreResults\\\"]]],null],[12],[1,\\\"\\\\n              Load More\\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,1],[14,0,\\\"text-muted m-l-10\\\"],[12],[1,[52,[30,12],\\\"Click\\\",\\\"Double click\\\"]],[1,\\\" a network request for details.\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[\\\"iterationResults\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"panel-collapse collapse\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingIterationResults\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,40],null,[[\\\"@id\\\",\\\"@dblClickToSelect\\\",\\\"@hideOverallResult\\\",\\\"@results\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@resultSelected\\\"],[[28,[37,41],[[30,13],\\\"_iterationResultsGrid\\\"],null],[28,[37,29],[[30,12]],null],true,[30,0,[\\\"networkResults\\\"]],[30,6,[\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"resultSelected\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,12],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingResultTrace\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n              \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-parent\\\",[29,[\\\"#userIterationsContents\\\",[30,0,[\\\"uniqueId\\\"]]]]],[15,6,[29,[\\\"#trace\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[15,\\\"aria-controls\\\",[29,[\\\"trace\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Result Details, Metrics, and Trace\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,1,[29,[\\\"trace\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"panel-collapse collapse\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingResultTrace\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedResultId\\\"]],[[[1,\\\"                \\\"],[8,[39,42],null,[[\\\"@resultId\\\",\\\"@uuid\\\",\\\"@scriptType\\\"],[[30,0,[\\\"selectedResultId\\\"]],[30,6,[\\\"uuid\\\"]],[30,6,[\\\"script\\\",\\\"scriptType\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,1],[12],[1,\\\"Select a row in the results above to view details, metrics, assertions, and trace information.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Loading network requests made during iteration \\\"],[1,[30,2,[\\\"id\\\"]]],[1,\\\"...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showResultModal\\\"]],[[[1,\\\"  \\\"],[8,[39,43],null,[[\\\"@resultId\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedResultId\\\"]],[30,6,[\\\"uuid\\\"]],[30,6,[\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"resultModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@selectedSession\\\",\\\"@iteration\\\",\\\"@selectedResource\\\",\\\"@isVideo\\\",\\\"video\\\",\\\"@overallModel\\\",\\\"bg\\\",\\\"command\\\",\\\"index\\\",\\\"@containerModalId\\\",\\\"file\\\",\\\"@isInModal\\\",\\\"@regionName\\\"],[\\\"span\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"unless\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"gt\\\",\\\"each\\\",\\\"-track-array\\\",\\\"ui/videojs-player\\\",\\\"suite-results-widget\\\",\\\"lt\\\",\\\"gte\\\",\\\"on\\\",\\\"and\\\",\\\"print-number\\\",\\\"label\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"table\\\",\\\"tbody\\\",\\\"tr\\\",\\\"td\\\",\\\"eq\\\",\\\"command-stream-command\\\",\\\"not\\\",\\\"thead\\\",\\\"th\\\",\\\"fn\\\",\\\"img\\\",\\\"print-bytes\\\",\\\"print-datetime\\\",\\\"custom-metrics-panel\\\",\\\"grid-search\\\",\\\"html-safe\\\",\\\"mut\\\",\\\"results-timeline-grid\\\",\\\"concat\\\",\\\"saved-result-details\\\",\\\"result-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/iteration-results.hbs\",\n    \"isStrictMode\": false\n  });\n  const MaxResults = 100;\n  function getCustomMetrics(results) {\n    const answer = [];\n    _.forEach(results, result => {\n      _.forEach(result.metrics, metric => {\n        if (metric && metric.namespace && metric.namespace !== _loadTest.default.SystemNs) {\n          answer.push({\n            metric: metric,\n            result: result\n          });\n        }\n      });\n    });\n    return answer;\n  }\n  let IterationResults = _exports.default = (_class = class IterationResults extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      // The panels below are collapse targets, and this component renders in the page and in\n      // several modals at once, so the ids have to be unique per instance or one copy's\n      // accordion drives another's\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"suiteResultsLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"outputFilesLoaded\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showDetailedCommands\", _descriptor5, this);\n      _initializerDefineProperty(this, \"failureOnly\", _descriptor6, this);\n      _initializerDefineProperty(this, \"networkResultsLoaded\", _descriptor7, this);\n      _initializerDefineProperty(this, \"networkResults\", _descriptor8, this);\n      _initializerDefineProperty(this, \"networkResultsCount\", _descriptor9, this);\n      _initializerDefineProperty(this, \"commandsLoaded\", _descriptor0, this);\n      _initializerDefineProperty(this, \"commandsPanelLoaded\", _descriptor1, this);\n      _initializerDefineProperty(this, \"commandOrder\", _descriptor10, this);\n      _initializerDefineProperty(this, \"totalCommands\", _descriptor11, this);\n      _initializerDefineProperty(this, \"loadedCommands\", _descriptor12, this);\n      _initializerDefineProperty(this, \"commandStream\", _descriptor13, this);\n      _initializerDefineProperty(this, \"maxSessionNum\", _descriptor14, this);\n      _initializerDefineProperty(this, \"commandsExpanded\", _descriptor15, this);\n      _initializerDefineProperty(this, \"suiteResults\", _descriptor16, this);\n      _initializerDefineProperty(this, \"files\", _descriptor17, this);\n      _initializerDefineProperty(this, \"videos\", _descriptor18, this);\n      _initializerDefineProperty(this, \"customMetrics\", _descriptor19, this);\n      _initializerDefineProperty(this, \"customMetricsLoaded\", _descriptor20, this);\n      _initializerDefineProperty(this, \"hasMoreCustomMetrics\", _descriptor21, this);\n      _initializerDefineProperty(this, \"streamCommands\", _descriptor22, this);\n      _initializerDefineProperty(this, \"commandDownloadUrl\", _descriptor23, this);\n      _initializerDefineProperty(this, \"detailedCommandCount\", _descriptor24, this);\n      _initializerDefineProperty(this, \"failedCommandCount\", _descriptor25, this);\n      _initializerDefineProperty(this, \"selectedResultId\", _descriptor26, this);\n      _initializerDefineProperty(this, \"showResultModal\", _descriptor27, this);\n      _initializerDefineProperty(this, \"videoSeekPosition\", _descriptor28, this);\n      _initializerDefineProperty(this, \"search\", _descriptor29, this);\n    }\n    get showVideoPlayControls() {\n      return this.videos?.length === 1;\n    }\n    get hasSelectedSession() {\n      return this.args.selectedSession > 0;\n    }\n    get suiteResultsHasDuration() {\n      return !this.args.isMultiUser;\n    }\n    getIterationResultsUrl(isCsv, filter, extraParams) {\n      const model = this.args.overallModel;\n      const selectedResource = this.args.selectedResource;\n      let path = model.uuid ? '/p/' + model.uuid : '/executions/' + model.id;\n      path += '/iterations/' + this.args.iteration;\n      path += '/results';\n      let params = _lib.default.getZoomParams(this.zoomInfo);\n      if (isCsv) {\n        path += '.csv';\n        params.filter = filter || 'all';\n      } else {\n        params.limit = MaxResults;\n        params.filter = filter || 'all';\n      }\n      const resource = selectedResource && selectedResource.id > 0 ? selectedResource.id : null;\n      if (resource) {\n        params.resource = resource;\n      }\n      if (extraParams) {\n        params = Object.assign(params, extraParams);\n      }\n      return _lib.default.toUrl(path, params);\n    }\n    get exportIterationToCsvUrl() {\n      return this.getIterationResultsUrl(true, 'all');\n    }\n    get filesDownloadUrl() {\n      const model = this.args.overallModel;\n      let path = model.uuid ? '/public/' + model.uuid + '?outputFiles=true&iterationId=' + this.args.iteration : '/executions/' + model.id + '/iterations/' + this.args.iteration + '/output-files/download';\n      return _lib.default.toUrl(path, _lib.default.getZoomParams(this.zoomInfo));\n    }\n    get showLoadMore() {\n      return this.networkResultsLoaded && this.networkResultsCount > this.networkResults?.length;\n    }\n    loadResults(shouldAllowResultsLoadedFalse) {\n      if (this.args.iteration) {\n        if (!shouldAllowResultsLoadedFalse) {\n          this.networkResultsLoaded = false;\n          this.networkResults = [];\n        }\n        const _this = this;\n        $.ajax({\n          type: \"GET\",\n          url: this.getIterationResultsUrl(false, 'network', {\n            limit: 100,\n            offset: this.networkResults?.length\n          }),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (results, status, xhr) {\n          const networkResultsCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(networkResultsCount)) {\n            _this.networkResultsCount = Number(networkResultsCount);\n          }\n          _this.networkResults = _this.networkResults.concat(results);\n          _this.networkResultsLoaded = true;\n        }, function (jqxhr, status, errMsg) {\n          _this.networkResults = [];\n          _this.networkResultsCount = 0;\n          _this.networkResultsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n        $.ajax({\n          type: \"GET\",\n          url: this.getIterationResultsUrl(false, 'other'),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (results, status, xhr) {\n          const resultCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(resultCount)) {\n            _this.hasMoreCustomMetrics = results && Number(resultCount) > results.length;\n          }\n          _this.customMetrics = getCustomMetrics(results);\n          _this.customMetricsLoaded = true;\n        }, function () {\n          _this.customMetrics = [];\n          _this.customMetricsLoaded = true;\n        });\n      } else {\n        this.networkResultsLoaded = false;\n        this.customMetricsLoaded = false;\n      }\n    }\n    loadSuiteResults() {\n      this.suiteResultsLoaded = false;\n      const model = this.args.overallModel;\n      let path = model.uuid ? '/p/' + model.uuid : '/executions/' + model.id;\n      path += '/iterations/' + this.args.iteration + '/suite-results';\n      const _this = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path, _lib.default.getZoomParams(this.zoomInfo)),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (results) {\n        _this.suiteResults = results;\n        _this.suiteResultsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        _this.suiteResults = [];\n        _this.suiteResultsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    loadOutputFiles() {\n      this.outputFilesLoaded = false;\n      const model = this.args.overallModel;\n      let path = model.uuid ? '/public/' + model.uuid + '?outputFiles=true&iterationId=' + this.args.iteration : '/executions/' + model.id + '/iterations/' + this.args.iteration + '/output-files';\n      const _this = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path, _lib.default.getZoomParams(this.zoomInfo)),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (results) {\n        results = _.sortBy(results, ['capturedAt']);\n        _.forEach(results, file => {\n          _lib.default.addAuthToOutputFile(file);\n        });\n        _this.setMaxSessionNum(results);\n        const files = _this.args.selectedSession > 0 ? results.filter(result => result.sessionNum === _this.args.selectedSession) : results;\n        _this.files = files;\n        _this.outputFilesLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        _this.files = [];\n        _this.outputFilesLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    loadVideos() {\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      const action = this.args.overallModel?.uuid ? this.api.liveVideos.getIterationVideos(this.args.overallModel.uuid, this.args.iteration, params, true) : this.api.liveVideos.getIterationVideos(this.args.overallModel.id, this.args.iteration, params);\n      action.then(results => {\n        results = _.sortBy(results, ['createdAt']);\n        _.forEach(results, file => {\n          _lib.default.addAuthToOutputFile(file);\n        });\n        this.setMaxSessionNum(results);\n        const videos = this.args.selectedSession > 0 ? results.filter(result => result.sessionNum === this.args.selectedSession) : results;\n        this.videos = videos;\n      }, () => {\n        this.videos = [];\n      });\n    }\n    async loadCommands(loadMore = false) {\n      const _this = this;\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      try {\n        const isPublic = !!this.args.overallModel?.uuid;\n        const id = isPublic ? this.args.overallModel.uuid : this.args.overallModel.id;\n        const iteration = this.args.iteration;\n        const commandStreams = await this.api.commandStreams.getIterationCommandStreams(id, iteration, params, isPublic);\n        if (commandStreams && commandStreams.length > 0) {\n          this.setMaxSessionNum(commandStreams);\n          const params = _lib.default.getZoomParams(this.zoomInfo);\n          let downloadUrl = this.api.commandStreams.getCommandsDownloadUrl(commandStreams[0].id, isPublic ? this.args.overallModel.uuid : null);\n          this.commandDownloadUrl = downloadUrl;\n          params.limit = this.api.commandStreams.defaultLimit;\n          params.offset = this.loadedCommands;\n          params.detailed = this.showDetailedCommands;\n          if (this.failureOnly) {\n            params.failuresOnly = true;\n          }\n          params.asc = this.commandOrder !== 'tail';\n          const sessionNum = this.args.selectedSession || -1;\n          let commandStreamIds = commandStreams.filter(stream => sessionNum === -1 ? true : sessionNum === 0 ? stream.id === commandStreams[0].id : stream.sessionNum === sessionNum).map(stream => stream.id);\n          let commands = [];\n          let totalCommands = loadMore ? this.totalCommands : 0;\n          let streamCommands = loadMore ? this.streamCommands : [];\n          for (const commandStreamId of commandStreamIds) {\n            const streamCommands = await _this.api.commandStreams.getCommands(commandStreamId, params, isPublic ? _this.args.overallModel.uuid : null, r => {\n              const count = Number(r.getResponseHeader('X-Testable-Count'));\n              totalCommands += count;\n              if (!_this.showDetailedCommands) _this.detailedCommandCount = Number(r.getResponseHeader('X-Testable-DetailedCount'));\n            });\n            commands = commands.concat(streamCommands);\n          }\n          this.totalCommands = totalCommands;\n          this.loadedCommands = commands.length + this.loadedCommands;\n          commands.forEach(command => {\n            streamCommands.push(command);\n          });\n          this.streamCommands = [...streamCommands];\n          const commandStream = commandStreams.filter(stream => commandStreamIds.includes(stream.id)).reduce((acc, stream) => {\n            acc.statePassed += stream.statePassed;\n            acc.stateFailed += stream.stateFailed;\n            acc.stateInProgress += stream.stateInProgress;\n            acc.duration += stream.duration;\n            return acc;\n          }, {\n            statePassed: 0,\n            stateFailed: 0,\n            stateInProgress: 0,\n            duration: 0\n          });\n          this.commandStream = commandStream;\n        }\n        this.commandsLoaded = true;\n        this.commandsPanelLoaded = true;\n        (0, _runloop.scheduleOnce)('afterRender', () => {\n          this.commandsPanelCollapseEventsManager();\n        });\n      } catch (e) {\n        console.log(e);\n        this.commandsLoaded = true;\n        this.commandsPanelLoaded = true;\n      }\n    }\n    setMaxSessionNum(results = []) {\n      const maxSessionNum = Math.max(...results.map(o => o.sessionNum));\n      if (maxSessionNum > this.maxSessionNum) {\n        this.maxSessionNum = maxSessionNum;\n        this.args.updateMaxSessionNum?.(maxSessionNum);\n      }\n    }\n    onChange() {\n      if (this.args.iteration) {\n        this.loadResults();\n        this.loadSuiteResults();\n        this.loadOutputFiles();\n        this.loadVideos();\n        this.commandsResetandLoad();\n      }\n    }\n    onCommandDetailedChange() {\n      this.commandsResetandLoad();\n    }\n    commandsResetandLoad() {\n      this.commandsLoaded = false;\n      this.streamCommands = [];\n      this.commandStream = null;\n      this.detailedCommandCount = 0;\n      this.failedCommandCount = 0;\n      this.loadedCommands = 0;\n      this.totalCommands = 0;\n      this.loadCommands();\n    }\n    resultSelected(result) {\n      this.selectedResultId = result ? result.id : null;\n      if (result) {\n        if (this.args.isInModal) {\n          $(`#trace${this.uniqueId}`).collapse(\"show\");\n        } else {\n          this.showResultModal = true;\n        }\n      }\n    }\n    resultModalClosed() {\n      this.showResultModal = false;\n      this.selectedResultId = null;\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n    }\n    triggerResize() {\n      (0, _runloop.later)(this, () => {\n        $(window).trigger('resize');\n      }, 50);\n    }\n    videoSeekPositionFunction(position) {\n      this.videoSeekPosition = position;\n      $(`#videoPanel${this.uniqueId}`).collapse(\"show\");\n    }\n    commandsLoadMore() {\n      this.loadCommands(true);\n    }\n    updateCommandOrder(order) {\n      this.commandOrder = order;\n    }\n    loadMoreResults() {\n      this.loadResults(true);\n    }\n    commandsPanelCollapseEventsManager() {\n      const _this = this;\n      const panelId = `commandsPanelBody${this.uniqueId}`;\n      const toggleId = `#${panelId}`;\n      $(toggleId).on('shown.bs.collapse', function (e) {\n        if (e.target.getAttribute('id') === panelId) {\n          _this.commandsExpanded = true;\n        }\n      });\n      $(toggleId).on('hidden.bs.collapse', function (e) {\n        if (e.target.getAttribute('id') === panelId) {\n          _this.commandsExpanded = false;\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"suiteResultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showDetailedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"failureOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"networkResultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"networkResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"networkResultsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"commandsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"commandsPanelLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"commandOrder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'chronological';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"totalCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"loadedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"commandStream\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"maxSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"commandsExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"suiteResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"files\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"videos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"customMetrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"customMetricsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"hasMoreCustomMetrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"streamCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"commandDownloadUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"detailedCommandCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"failedCommandCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"selectedResultId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"showResultModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"videoSeekPosition\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCommandDetailedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCommandDetailedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"triggerResize\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"triggerResize\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSeekPositionFunction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSeekPositionFunction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandsLoadMore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"commandsLoadMore\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCommandOrder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCommandOrder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, IterationResults);\n});","define(\"@testable/shared-ui/components/live-event-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"liveEventModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Send Live Event</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <div class=\"note note-info alert\">\n                <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n                <p>Tests that use Node.js can listen for live events during the test run. This screen is one way to send\n                  such a live event to all active virtual users. See <a target=\"_blank\"\n                                                                        href=\"https://docs.testable.io/scripts/write-script.html\" rel=\"noreferrer noopener\">our\n                    documentation</a> for more details. Example code to subscribe to an event:</p>\n                <p>\n                <pre>// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\n  const events = require('testable-utils').events;\n  const execute = require('testable-utils').execute;\n  execute(function(done) {\n      events.on('my-action', function() {\n          // perform some action here like an API call, call done() when finished\n          done();\n      });\n  });</pre>\n                </p>\n              </div>\n              <form id=\"liveEventForm\" {{on \"submit\" this.sendEvent}} data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>Event Name (required)</label>\n                  <Input class=\"form-control\" @type=\"text\" @value={{this.name}} data-parsley-required=\"true\" data-parsley-required-message=\"Event name is required\" />\n                </div>\n                <div class=\"form-group\">\n                  <label>Event Contents (optional)</label>\n                  <Textarea class=\"form-control\" @value={{this.contents}} rows=\"6\" />\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-success\"><strong>Send Event</strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"liveEventModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Send Live Event\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,\\\"Tests that use Node.js can listen for live events during the test run. This screen is one way to send\\\\n                such a live event to all active virtual users. See \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/scripts/write-script.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"our\\\\n                  documentation\\\"],[13],[1,\\\" for more details. Example code to subscribe to an event:\\\"],[13],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,\\\"\\\\n              \\\"],[10,\\\"pre\\\"],[12],[1,\\\"// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\\\\nconst events = require('testable-utils').events;\\\\nconst execute = require('testable-utils').execute;\\\\nexecute(function(done) {\\\\n    events.on('my-action', function() {\\\\n        // perform some action here like an API call, call done() when finished\\\\n        done();\\\\n    });\\\\n});\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"liveEventForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,9],[\\\"submit\\\",[30,0,[\\\"sendEvent\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Event Name (required)\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Event name is required\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Event Contents (optional)\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,12],[[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"6\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"contents\\\"]]]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Send Event\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"span\\\",\\\"p\\\",\\\"a\\\",\\\"pre\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"textarea\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/live-event-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let LiveEventModal = _exports.default = (_class = class LiveEventModal extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"name\", _descriptor, this);\n      _initializerDefineProperty(this, \"contents\", _descriptor2, this);\n    }\n    didInsert() {\n      const _this = this;\n      $('#liveEventModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#liveEventModal').modal('show');\n      $('#liveEventModal').on('shown.bs.modal', function () {\n        $('#eventName').focus();\n        $('#liveEventForm').parsley();\n      });\n    }\n    sendEvent(e) {\n      e.preventDefault();\n      if (!$('#liveEventForm').parsley().validate()) return;\n      const name = this.name;\n      const contents = this.contents;\n      _server.default.liveEvent(this.args.execution, {\n        name: name,\n        contents: contents\n      }).then(() => {\n        _lib.default.info('Live event sent successfully');\n        $('#liveEventModal').modal('hide');\n      }, () => {\n        $('#liveEventModal').modal('hide');\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"contents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sendEvent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sendEvent\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LiveEventModal);\n});","define(\"@testable/shared-ui/components/live-session\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"novnc-sockjs/core/rfb\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _rfb, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"novnc-sockjs/core/rfb\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.isConnecting}}\n    <h5>Initializing live session...</h5>\n  {{/if}}\n  <div class=\"label {{if this.isConnected 'label-primary' 'label-danger'}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.didInsert @info.id}}\n  >\n    {{if this.isConnected 'Connected' 'Disconnected'}}\n  </div>\n  {{#if (or this.isConnected this.isConnecting)}}\n    <div class=\"live-session\">\n      <div id=\"vnc-{{@info.id}}\" class=\"height-full\">\n      </div>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"isConnecting\\\"]],[[[1,\\\"  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Initializing live session...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[11,0],[16,0,[29,[\\\"label \\\",[52,[30,0,[\\\"isConnected\\\"]],\\\"label-primary\\\",\\\"label-danger\\\"]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"didInsert\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[1,[52,[30,0,[\\\"isConnected\\\"]],\\\"Connected\\\",\\\"Disconnected\\\"]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,0,[\\\"isConnected\\\"]],[30,0,[\\\"isConnecting\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"live-session\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,1,[29,[\\\"vnc-\\\",[30,1,[\\\"id\\\"]]]]],[14,0,\\\"height-full\\\"],[12],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@info\\\"],[\\\"if\\\",\\\"h5\\\",\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/live-session.hbs\",\n    \"isStrictMode\": false\n  });\n  let LiveSessionComponent = _exports.default = (_class = class LiveSessionComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isConnected\", _descriptor, this);\n      _initializerDefineProperty(this, \"isConnecting\", _descriptor2, this);\n      _initializerDefineProperty(this, \"rfb\", _descriptor3, this);\n    }\n    get vncUrl() {\n      return _environment.config.testRunnerServerUrl + _lib.default.addAuthToUrl(`/real-time/client/vnc?id=${this.args.info.id}&execution=${this.args.info.execution}`);\n    }\n    didInsert() {\n      const _this = this;\n      if (this.args.info.id) {\n        const rfb = new _rfb.default(document.getElementById(`vnc-${this.args.info.id}`), this.vncUrl);\n        rfb.scaleViewport = true;\n        rfb.resizeSession = true;\n        rfb.addEventListener('connect', function () {\n          _this.isConnecting = false;\n          _this.isConnected = true;\n        });\n        rfb.addEventListener('disconnect', function () {\n          if (!_this.isDestroyed) {\n            _this.isConnecting = false;\n            _this.isConnected = false;\n          }\n        });\n        this.rfb = rfb;\n      }\n    }\n    willDestroy() {\n      this._disconnect();\n    }\n    _disconnect() {\n      if (this.isConnected && this.rfb) {\n        this.rfb.disconnect();\n        this.rfb = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isConnected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isConnecting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"rfb\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LiveSessionComponent);\n});","define(\"@testable/shared-ui/components/live-videos-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/runloop\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _observers, _runloop, _service, _tracking, _dataGrid, _formatters, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LiveVideosGrid = _exports.default = (_class = class LiveVideosGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"hasSessionNum\", _descriptor3, this);\n      (0, _observers.addObserver)(this, 'args.videos', this.onVideosChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.videos', this.onVideosChange);\n    }\n    onVideosChange() {\n      (0, _runloop.once)(this, 'refreshTable');\n    }\n    get agents() {\n      return _loadTest.default.getAgentsForRegion(this.args.overallModel.agents, this.args.region);\n    }\n    get agentsById() {\n      const answer = {};\n      _.forEach(this.agents, agentInfo => {\n        answer[agentInfo.id] = agentInfo.name;\n      });\n      return answer;\n    }\n    getColumns() {\n      const isMultiUser = this.args.isMultiUser;\n      const columns = [{\n        title: 'Thumbnail',\n        data: 'thumbnailUrl',\n        width: '80px',\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            const failureClass = _.isBoolean(full.isRelatedToFailure) ? full.isRelatedToFailure ? 'failure-image' : 'success-image' : null;\n            let result = '<a data-ember-action=\"playlistUrlChange\" data-ember-action-type=\"json\" ';\n            result += ' data-ember-action-json=\"' + full.viewUrl + '\" ';\n            result += ' class=\"image\" ><img src=\"' + data + '\"' + (failureClass ? ' class=\"' + failureClass + '\"' : '') + '>';\n            result += ' <i class=\"fa fa-play-circle m-l-5 m-t-20 position-absolute\"></i> ';\n            result += '</a>';\n            result += \" <a href='javascript:;' data-ember-action='showShareMediaModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n              id: full.id\n            }) + \"'>\" + '<i class=\"fa fa-share m-l-5 position-absolute\"></i></a> ';\n            if (full.exportUrl) {\n              result += ` <a target=\"_blank\" href=\"${full.exportUrl}\"><i class=\"fa fa-download m-l-5 m-t-40 position-absolute\"></i></a>`;\n            }\n            return result;\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Timestamp',\n        data: 'capturedAt',\n        width: '150px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _formatters.default.timestamp(data) : data ? data.valueOf() : 0;\n        }\n      }, {\n        title: isMultiUser ? 'Instance #' : 'User #',\n        data: 'globalConcurrentClientIndex',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' || type === 'filter' ? (isMultiUser ? 'Instance ' : 'User ') + _formatters.default.number(data) : data;\n        }\n      }, {\n        title: 'Iteration #',\n        data: 'iteration',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' || type === 'filter' ? _formatters.default.number(data) : data;\n        }\n      }];\n      if (this.hasSessionNum) {\n        columns.push({\n          title: 'Session #',\n          data: 'sessionNum',\n          width: '70px',\n          render: (data, type, full, meta) => {\n            return type === 'display' || type === 'filter' ? _formatters.default.number(data) : data;\n          }\n        });\n      }\n      columns.push({\n        title: 'Browser',\n        data: 'browser',\n        width: '70px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? _lib.default.toBrowserVersionLabel(data) : data;\n        }\n      });\n      columns.push({\n        title: 'Device',\n        data: 'device',\n        width: '70px'\n      });\n      columns.push({\n        title: 'Duration',\n        data: 'duration',\n        width: '70px'\n      });\n      columns.push({\n        title: 'Region',\n        data: 'videoRegion',\n        width: '100px'\n      });\n      columns.push({\n        title: 'Test Runner',\n        data: 'agentName',\n        width: '150px'\n      });\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[2, 'desc']];\n    }\n    createDataSource() {\n      const region = this.args.region;\n      const videos = _.filter(this.args.videos, video => {\n        return _loadTest.default.isFileRelevant(video, this.zoomInfo, region);\n      });\n      return _.map(videos, video => {\n        if (video.sessionNum > 0) {\n          this.hasSessionNum = true;\n        }\n        return this.toRecord(video);\n      });\n    }\n    updateDataSource(update, isUpdate, toRemove) {\n      const table = $('#' + this.args.id).DataTable();\n      const region = this.args.region;\n      let redraw = false;\n      if (toRemove) {\n        const rowToRemove = table.row('#' + toRemove.id);\n        if (!_.isEmpty(rowToRemove)) {\n          rowToRemove.remove();\n          redraw = true;\n        }\n      }\n      if (update && _loadTest.default.isFileRelevant(update, this.zoomInfo, region)) {\n        const record = this.toRecord(update);\n        if (isUpdate) {\n          const row = table.row('#' + record.id);\n          if (!_.isEmpty(row)) {\n            const data = row.data();\n            if (!_.isEqual(data, record)) {\n              row.data(record);\n              redraw = true;\n            }\n          }\n        } else {\n          table.row.add(record);\n          redraw = true;\n        }\n      }\n      if (redraw) {\n        table.draw(false);\n      }\n    }\n    addTableOptions(options) {\n      options.language = {\n        emptyTable: \"No videos yet.\"\n      };\n      options.scrollY = \"400px\";\n    }\n    initTable(table) {\n      const _this = this;\n      $('#' + this.args.id).on('click', '[data-ember-action]', function (e) {\n        const action = $(e.target).closest('a').data('ember-action');\n        const contentType = $(e.target).closest('a').data('ember-action-type');\n        let content;\n        if (contentType === 'json') {\n          content = $(e.target).closest('a').data('ember-action-json');\n        }\n        _this.args[action](content);\n      });\n    }\n    toRecord(video) {\n      const executionRegion = _.find(this.args.overallModel.regions, executionRegion => {\n        return executionRegion && executionRegion.region && executionRegion.region.id === video.regionId;\n      });\n      return {\n        id: video.id,\n        capturedAt: moment(video.createdAt),\n        viewUrl: video.playlistUrl,\n        thumbnailUrl: video.thumbnailUrl,\n        exportUrl: video.exportUrl,\n        regionName: executionRegion ? executionRegion.region.name : '',\n        videoRegion: executionRegion ? executionRegion.region.description : '-',\n        globalConcurrentClientIndex: video.globalConcurrentClientIndex,\n        iteration: video.iteration,\n        sessionNum: video.sessionNum ? video.sessionNum : '-',\n        agentName: video.agentId ? this.agentsById[video.agentId] || '-' : '-',\n        isRelatedToFailure: video.isRelatedToFailure,\n        browser: video.browser || '',\n        device: this.api.browserManager.toDeviceLabel(video.device),\n        duration: _lib.default.printDurationFromMS(video.duration)\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"hasSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/load-results-widget-header\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <ul class=\"nav nav-tabs\" role=\"tablist\" id=\"{{@regionName}}_resultsTabsNav\">\n    <li class=\"nav-item\">\n      <a class=\"nav-link active\" href=\"#{{@regionName}}_resourcesTab\"\n         aria-controls=\"{{@regionName}}_resourcesTab\" role=\"tab\"\n         data-bs-toggle=\"tab\"><strong>By Resource ({{@model.numResources}})</strong><Ui::InfoIcon @title=\"Resources\"\n                                                                                               @content=\"An aggregated summary for each resource tested during test execution (e.g. GET https://google.com).\"\n                                                                                               @placement=\"bottom\" /></a></li>\n  \n    {{#if @showAnalysis}}\n      <li class=\"nav-item no-print\"><a class=\"nav-link\" href=\"#{{@regionName}}_analysisTab\"\n                                       aria-controls=\"{{@regionName}}_analysisTab\" role=\"tab\"\n                                       data-bs-toggle=\"tab\"><strong>Result Analysis</strong><Ui::InfoIcon\n              @title=\"Result Analysis\"\n              @content=\"Drilldown and analyize the results in detail including the slowest network calls, failed results, and slowest scenario iterations.\"\n              @placement=\"bottom\" /></a></li>\n    {{/if}}\n    {{#if @overallModel.tracesEnabled}}\n      <li class=\"nav-item no-print \"><a class=\"nav-link\" href=\"#{{@regionName}}_tracesTab\"\n                                        aria-controls=\"{{@regionName}}_tracesTab\" role=\"tab\"\n                                        data-bs-toggle=\"tab\"><strong>Traces ({{@traceCount}})\n      </strong><Ui::InfoIcon @title=\"Traces\"\n                             @content=\"View full details for some requests made during test execution. See the request, response, timings, and metrics to help track down hard to debug issues.\"\n                             @placement=\"bottom\" /></a></li>\n    {{/if}}\n  </ul>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"ul\\\"],[14,0,\\\"nav nav-tabs\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[15,1,[29,[[30,1],\\\"_resultsTabsNav\\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,0,\\\"nav-link active\\\"],[15,6,[29,[\\\"#\\\",[30,1],\\\"_resourcesTab\\\"]]],[15,\\\"aria-controls\\\",[29,[[30,1],\\\"_resourcesTab\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"By Resource (\\\"],[1,[30,2,[\\\"numResources\\\"]]],[1,\\\")\\\"],[13],[8,[39,4],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[\\\"Resources\\\",\\\"An aggregated summary for each resource tested during test execution (e.g. GET https://google.com).\\\",\\\"bottom\\\"]],null],[13],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3],[[[1,\\\"    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item no-print\\\"],[12],[10,3],[14,0,\\\"nav-link\\\"],[15,6,[29,[\\\"#\\\",[30,1],\\\"_analysisTab\\\"]]],[15,\\\"aria-controls\\\",[29,[[30,1],\\\"_analysisTab\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Result Analysis\\\"],[13],[8,[39,4],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[\\\"Result Analysis\\\",\\\"Drilldown and analyize the results in detail including the slowest network calls, failed results, and slowest scenario iterations.\\\",\\\"bottom\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,4,[\\\"tracesEnabled\\\"]],[[[1,\\\"    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item no-print \\\"],[12],[10,3],[14,0,\\\"nav-link\\\"],[15,6,[29,[\\\"#\\\",[30,1],\\\"_tracesTab\\\"]]],[15,\\\"aria-controls\\\",[29,[[30,1],\\\"_tracesTab\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Traces (\\\"],[1,[30,5]],[1,\\\")\\\\n    \\\"],[13],[8,[39,4],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[\\\"Traces\\\",\\\"View full details for some requests made during test execution. See the request, response, timings, and metrics to help track down hard to debug issues.\\\",\\\"bottom\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@regionName\\\",\\\"@model\\\",\\\"@showAnalysis\\\",\\\"@overallModel\\\",\\\"@traceCount\\\"],[\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-results-widget-header.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"load-results-widget-header\"));\n});","define(\"@testable/shared-ui/components/load-results-widget-resources\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @resourcesLoaded}}\n    <div class='overflow-auto'>\n      <span class='no-print'>\n        (Select a row to drill into the performance of a single resource)\n      </span>\n      <div class='m-b-10'>\n        {{#if @model.hasTransactions}}\n          <BsButtonGroup\n                  @value={{this.resourceTypeFilter}}\n                  @type='radio'\n                  class='float-left m-b-5'\n                  @onChange={{fn (mut this.resourceTypeFilter)}} as |bg|\n          >\n            <bg.button @type='success' @value='All' @size='sm'>\n              All ({{@model.numResources}})\n            </bg.button>\n            <bg.button @type='success' @value='Transactions' @size='sm'>\n              Transactions ({{@model.numTransactions}})\n              <Ui::InfoIcon\n                      @content='Only show the rows that correspond to transactions not individual requests. Some tools like JMeter support capturing metrics on a transaction that includes one or more individual requests.'\n                      @placement='bottom'\n              />\n            </bg.button>\n            <bg.button @type='success' @value='Requests' @size='sm'>\n              Requests ({{@model.numRequests}})\n              <Ui::InfoIcon\n                      @content='Only show the rows that correspond to individual requests and not transactions. Some tools like JMeter support capturing metrics on a transaction that includes one or more individual requests.'\n                      @placement='bottom'\n              />\n            </bg.button>\n          </BsButtonGroup>\n        {{/if}}\n        <div class='m-t-5'>\n          <GridSearch\n                  @onSearch={{fn (mut this.resourceSearch)}}\n                  @inTab={{not @model.hasTransactions}}\n          />\n        </div>\n      </div>\n      <div class='m-t-5'>\n        <ResourcesGrid\n                @id={{@gridId}}\n                @data={{@model}}\n                @regionName={{@regionName}}\n                @resources={{@model.resources}}\n                @config={{@gridConfig}}\n                @metricDefs={{@metricDefs}}\n                @search={{this.resourceSearch}}\n                @resourceTypeFilter={{this.resourceTypeFilter}}\n                @scriptType={{@model.execution.script.scriptType}}\n                @selectedResource={{@selectedResource}}\n                @isPrint={{@isPrint}}\n                @resourceSelected={{@resourceSelected}}\n        />\n      </div>\n    </div>\n  {{else}}\n    Loading...\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"no-print\\\"],[12],[1,\\\"\\\\n      (Select a row to drill into the performance of a single resource)\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"hasTransactions\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,0,\\\"float-left m-b-5\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"resourceTypeFilter\\\"]],\\\"radio\\\",[28,[37,4],[[28,[37,5],[[30,0,[\\\"resourceTypeFilter\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"All\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            All (\\\"],[1,[30,2,[\\\"numResources\\\"]]],[1,\\\")\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Transactions\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Transactions (\\\"],[1,[30,2,[\\\"numTransactions\\\"]]],[1,\\\")\\\\n            \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Only show the rows that correspond to transactions not individual requests. Some tools like JMeter support capturing metrics on a transaction that includes one or more individual requests.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Requests\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Requests (\\\"],[1,[30,2,[\\\"numRequests\\\"]]],[1,\\\")\\\\n            \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Only show the rows that correspond to individual requests and not transactions. Some tools like JMeter support capturing metrics on a transaction that includes one or more individual requests.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[3]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,7],null,[[\\\"@onSearch\\\",\\\"@inTab\\\"],[[28,[37,4],[[28,[37,5],[[30,0,[\\\"resourceSearch\\\"]]],null]],null],[28,[37,8],[[30,2,[\\\"hasTransactions\\\"]]],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@id\\\",\\\"@data\\\",\\\"@regionName\\\",\\\"@resources\\\",\\\"@config\\\",\\\"@metricDefs\\\",\\\"@search\\\",\\\"@resourceTypeFilter\\\",\\\"@scriptType\\\",\\\"@selectedResource\\\",\\\"@isPrint\\\",\\\"@resourceSelected\\\"],[[30,4],[30,2],[30,5],[30,2,[\\\"resources\\\"]],[30,6],[30,7],[30,0,[\\\"resourceSearch\\\"]],[30,0,[\\\"resourceTypeFilter\\\"]],[30,2,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,8],[30,9],[30,10]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  Loading...\\\\n\\\"]],[]]]],[\\\"@resourcesLoaded\\\",\\\"@model\\\",\\\"bg\\\",\\\"@gridId\\\",\\\"@regionName\\\",\\\"@gridConfig\\\",\\\"@metricDefs\\\",\\\"@selectedResource\\\",\\\"@isPrint\\\",\\\"@resourceSelected\\\"],[\\\"if\\\",\\\"div\\\",\\\"span\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"ui/info-icon\\\",\\\"grid-search\\\",\\\"not\\\",\\\"resources-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-results-widget-resources.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadResultsWidgetResourcesComponent = _exports.default = (_class = class LoadResultsWidgetResourcesComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"resourceTypeFilter\", _descriptor, this);\n      _initializerDefineProperty(this, \"resourceSearch\", _descriptor2, this);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"resourceTypeFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'All';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resourceSearch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadResultsWidgetResourcesComponent);\n});","define(\"@testable/shared-ui/components/load-results-widget-traces\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _trackedBuiltIns, _lib, _server, _loadTest, _environment, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span hidden {{did-update this.onTraceCountChange this.traceCount}}></span>\n  {{#if this.tracesLoaded}}\n    <div class='overflow-auto'>\n      {{#if @overallModel.completed}}\n        <BsButtonGroup\n                @value={{this.traceFilter}}\n                @type='radio'\n                @onChange={{fn (mut this.traceFilter)}} as |bg|\n        >\n          <bg.button @type='success' @value='all' @size='sm'>\n            All ({{print-number this.traceCount}})\n          </bg.button>\n          <bg.button @type='success' @value='errors' @size='sm'>\n            Errors Only ({{print-number (or this.errorTraceCount 0)}})\n          </bg.button>\n        </BsButtonGroup>\n        <br />\n      {{/if}}\n      (Double click a row to view trace details)\n      <div class=\"d-flex align-items-center justify-content-end m-b-2\">\n        <a\n                target='_blank'\n                href='{{this.exportTracesUrl}}'\n                class='btn btn-sm btn-icon btn-circle text-primary pull-right'\n                data-bs-toggle='tooltip'\n                title='Download All Traces'\n                rel='noreferrer noopener'\n        >\n          <Ui::Icon @icon='fa fa-download' />\n        </a>\n        <GridSearch @onSearch={{fn (mut this.tracesSearch)}} />\n      </div>\n      <TracesGrid\n              @id={{@gridId}}\n              @overallModel={{@overallModel}}\n              @model={{@model}}\n              @isAll={{@model.isAll}}\n              @isPrint={{@isPrint}}\n              @region={{@model.executionRegion.region}}\n              @traceFilter={{this.traceFilter}}\n              @selectedResource={{@selectedResource}}\n              @scriptType={{@model.execution.script.scriptType}}\n              @search={{this.tracesSearch}}\n              @dblClick={{this.traceDblClick}}\n      />\n    </div>\n  {{else}}\n    Loading...\n  {{/if}}\n  \n  {{#if this.showTraceModal}}\n    <TraceModal @traceId={{this.selectedTraceId}}\n                @uuid={{@overallModel.uuid}}\n                @scriptType={{@model.execution.script.scriptType}}\n                @modalClosed={{this.traceModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[24,\\\"hidden\\\",\\\"\\\"],[4,[38,1],[[30,0,[\\\"onTraceCountChange\\\"]],[30,0,[\\\"traceCount\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"tracesLoaded\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"completed\\\"]],[[[1,\\\"      \\\"],[8,[39,4],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"traceFilter\\\"]],\\\"radio\\\",[28,[37,5],[[28,[37,6],[[30,0,[\\\"traceFilter\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          All (\\\"],[1,[28,[35,7],[[30,0,[\\\"traceCount\\\"]]],null]],[1,\\\")\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          Errors Only (\\\"],[1,[28,[35,7],[[28,[37,8],[[30,0,[\\\"errorTraceCount\\\"]],0],null]],null]],[1,\\\")\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[2]]]]],[1,\\\"\\\\n      \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    (Double click a row to view trace details)\\\\n    \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-end m-b-2\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"exportTracesUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary pull-right\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download All Traces\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,12],null,[[\\\"@onSearch\\\"],[[28,[37,5],[[28,[37,6],[[30,0,[\\\"tracesSearch\\\"]]],null]],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@isAll\\\",\\\"@isPrint\\\",\\\"@region\\\",\\\"@traceFilter\\\",\\\"@selectedResource\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@dblClick\\\"],[[30,3],[30,1],[30,4],[30,4,[\\\"isAll\\\"]],[30,5],[30,4,[\\\"executionRegion\\\",\\\"region\\\"]],[30,0,[\\\"traceFilter\\\"]],[30,6],[30,4,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"tracesSearch\\\"]],[30,0,[\\\"traceDblClick\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  Loading...\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTraceModal\\\"]],[[[1,\\\"  \\\"],[8,[39,14],null,[[\\\"@traceId\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedTraceId\\\"]],[30,1,[\\\"uuid\\\"]],[30,4,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"traceModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@overallModel\\\",\\\"bg\\\",\\\"@gridId\\\",\\\"@model\\\",\\\"@isPrint\\\",\\\"@selectedResource\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"print-number\\\",\\\"or\\\",\\\"br\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"grid-search\\\",\\\"traces-grid\\\",\\\"trace-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-results-widget-traces.hbs\",\n    \"isStrictMode\": false\n  });\n  let getTraces = component => {\n    let executionId = component.args.model?.execution?.id;\n    let isAll = component.args.regionName === 'ALL';\n    let executionRegionId;\n    if (component.args.isBaseline) {\n      const overallModel = component.args.overallModel;\n      executionRegionId = overallModel.regions[0]?.id;\n    } else {\n      executionRegionId = component.args.model?.executionRegion?.id;\n    }\n    if (component.args.uuid) {\n      const params = {\n        traces: true\n      };\n      if (!isAll) {\n        params.executionRegionId = executionRegionId;\n      }\n      if (component.args.isBaseline) {\n        params.comparison = true;\n      }\n      return _server.default.getTokenContent(component.args.uuid, params);\n    } else {\n      return isAll ? _server.default.getLoadTestExecutionTraces(executionId) : _server.default.getLoadTestExecutionRegionTraces(executionId, executionRegionId);\n    }\n  };\n  let LoadResultsWidgetTracesComponent = _exports.default = (_class = class LoadResultsWidgetTracesComponent extends _component2.default {\n    get baseExportPath() {\n      return _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model, this.args.selectedResource, this.args.uuid);\n    }\n    get exportTracesUrl() {\n      let path = this.baseExportPath;\n      path += '/traces.zip';\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      return _lib.default.toUrl(path, params);\n    }\n    get traceCount() {\n      const selectedResource = this.args.selectedResource;\n      let answer = 0;\n      _.forEach(this.args.model?.traces, trace => {\n        answer += _loadTest.default.isTraceRelevant(trace, this.zoomInfo, selectedResource) ? 1 : 0;\n      });\n      return answer;\n    }\n    get errorTraceCount() {\n      const selectedResource = this.args.selectedResource;\n      return _.sumBy(this.args.model?.traces, t => {\n        return _loadTest.default.isTraceRelevant(t, this.zoomInfo, selectedResource) && !t.success ? 1 : 0;\n      });\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _initializerDefineProperty(this, \"testResults\", _descriptor3, this);\n      _defineProperty(this, \"maxResources\", _environment.config.maxResources);\n      _initializerDefineProperty(this, \"tracesLoaded\", _descriptor4, this);\n      _initializerDefineProperty(this, \"traceFilter\", _descriptor5, this);\n      _initializerDefineProperty(this, \"resourceTypeFilter\", _descriptor6, this);\n      _initializerDefineProperty(this, \"selectedTraceId\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showTraceModal\", _descriptor8, this);\n      _initializerDefineProperty(this, \"tracesSearch\", _descriptor9, this);\n      this.loadTraces();\n    }\n    onTraceCountChange() {\n      (0, _runloop.next)(this, () => {\n        this.args.setTraceCount?.(this.traceCount);\n      });\n    }\n    loadTraces() {\n      this.tracesLoaded = false;\n      getTraces(this).then(traces => {\n        if (this.isDestroyed) return;\n        this.args.model.traces = new _trackedBuiltIns.TrackedArray(traces);\n        this.tracesLoaded = true;\n        this.traceFilter = 'all';\n      });\n    }\n    traceDblClick(id) {\n      this.selectedTraceId = id;\n      this.showTraceModal = true;\n    }\n    traceModalClosed() {\n      this.showTraceModal = false;\n      this.selectedTraceId = -1;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"tracesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"traceFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"resourceTypeFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'All';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"selectedTraceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showTraceModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"tracesSearch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"traceCount\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"traceCount\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"errorTraceCount\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"errorTraceCount\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onTraceCountChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onTraceCountChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"traceDblClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"traceDblClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"traceModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"traceModalClosed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadResultsWidgetTracesComponent);\n});","define(\"@testable/shared-ui/components/load-results-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _lib, _environment, _service, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container tab-pane fade {{unless @selectedWidget \"active show\"}}\"\n       data-sortable-id=\"grid\" data-type=\"Grid\" id={{this.widgetId}}\n       {{did-insert this.didInsert}}>\n  <div class=\"panel-heading block-sub-container-target\">\n    <div class=\"panel-heading-btn\">\n      <a target=\"_blank\" href=\"{{this.exportToCsvUrl}}\" class=\"btn btn-sm btn-icon btn-circle  text-primary\"\n         data-bs-toggle=\"tooltip\" title=\"Download All Results\" rel=\"noreferrer noopener\">\n         <Ui::Icon @icon=\"fa fa-download\" class=\"text-primary\"/></a>\n      {{#unless (or @isBrowserBased @minimalHeader @isViewer)}}\n        <a {{on \"click\" this.showConfigureGridModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary\" role=\"button\">\n          <Ui::Icon @icon=\"fa fa-cog\" /></a>\n        <a {{on \"click\" (fn this.removePanelAction \"grid\")}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                          title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n      {{/unless}}\n    </div>\n    {{#unless @isBrowserBased}}\n      <h4 class=\"panel-title\">\n        <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n          class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n          aria-controls=\"panelBody{{this.uuid}}\"><Ui::Icon @icon=\"fa fa-minus\" /></a>\n  \n        <strong>Results {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}}</strong>\n      </h4>\n    {{/unless}}\n  </div>\n  <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n    <div class=\"panel-body\">\n    <MaxResourcesWarning @confId={{@model.execution.confId}}\n                         @numResources={{@model.numResources}}\n                         @maxResources={{this.maxResources}}\n                         @scriptType={{@model.execution.script.scriptType}} />\n    {{!-- {{#if @isPrint}}\n      {{#if @resourcesLoaded}}\n        <ResourcesGrid @id={{concat @regionName '_resultsGrid'}}\n                       @data={{@model}}\n                       @regionName={{@regionName}}\n                       @resources={{@model.resources}}\n                       @config={{@gridConfig}}\n                       @metricDefs={{@metricDefs}}\n                       @search={{this.resourceSearch}}\n                       @scriptType={{@model.execution.script.scriptType}}\n                       @selectedResource={{@selectedResource}}\n                       @isPrint={{@isPrint}}\n                       @resourceSelected={{this.resourceSelectedAction}} />\n      {{else}}\n        Loading...\n      {{/if}}\n    {{else}} --}}\n    {{#if @comparisonId}}\n      <strong>Current Test</strong>\n    {{else}}\n      {{#if (gt @selectedResource.id 0)}}\n        <div class=\"mb-2\">\n          <strong>Selected Resource:</strong> {{@selectedResource.resource}}\n          <button type=\"button\" {{on \"click\" this.clearSelectedResourceAction}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button>\n        </div>\n      {{/if}}\n    {{/if}}\n  \n    {{#unless @isPrint}}\n      <LoadResultsWidgetHeader\n              @regionName={{@regionName}}\n              @model={{@model}}\n              @overallModel={{@overallModel}}\n              @traceCount={{this.traceCount}}\n              @showAnalysis={{not @comparisonId}}\n      />\n    {{/unless}}\n  \n    <div class=\"tab-content p-l-0\">\n      <div role=\"tabpanel\" class=\"tab-pane show active\" id=\"{{@regionName}}_resourcesTab\">\n        {{#if @comparisonId}}\n          {{#if (gt @selectedResource.id 0)}}\n            <div class=\"mb-2\">\n              <strong>Selected Current Resource:</strong> {{@selectedResource.resource}}\n              <button type=\"button\" {{on \"click\" this.clearSelectedResourceAction}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button>\n            </div>\n          {{/if}}\n        {{/if}}\n        <LoadResultsWidgetResources\n                @gridId={{concat @regionName \"_resultsGrid\"}}\n                @resourcesLoaded={{@resourcesLoaded}}\n                @gridConfig={{@gridConfig}}\n                @metricDefs={{@metricDefs}}\n                @regionName={{@regionName}}\n                @model={{@model}}\n                @isPrint={{@isPrint}}\n                @selectedResource={{@selectedResource}}\n                @resourceSelected={{@resourceSelected}}\n        />\n      </div>\n  \n      {{#if @overallModel.tracesEnabled}}\n        <div role=\"tabpanel\" class=\"tab-pane no-print\" id=\"{{@regionName}}_tracesTab\">\n          <LoadResultsWidgetTraces\n                  @gridId={{concat @regionName \"_tracesGrid\"}}\n                  @regionName={{@regionName}}\n                  @uuid={{@overallModel.uuid}}\n                  @overallModel={{@overallModel}}\n                  @model={{@model}}\n                  @isPrint={{@isPrint}}\n                  @selectedResource={{@selectedResource}}\n                  @setTraceCount={{this.setTraceCountAction}}\n          />\n        </div>\n      {{/if}}\n  \n      {{#unless @comparisonId}}\n        <div role=\"tabpanel\" class=\"tab-pane no-print\" id=\"{{@regionName}}_analysisTab\">\n          {{#if @overallModel.completed}}\n            {{#unless this.analysisType}}\n              <div class=\"m-b-5\">Please choose an analysis type.</div>\n            {{/unless}}\n            <BsButtonGroup @value={{this.analysisType}} @type=\"radio\" @onChange={{this.setAnalysisType}} as\n                           |bg|>\n              <bg.button @type=\"success\" @value=\"slowResults\" @size=\"sm\">Slow Requests</bg.button>\n              <bg.button @type=\"success\" @value=\"failedResults\" @size=\"sm\">\n                Failed Requests\n              </bg.button>\n              <bg.button @type=\"success\" @value=\"slowIterations\" @size=\"sm\">\n                Slow Test Iterations\n              </bg.button>\n              <bg.button @type=\"success\" @value=\"iteration\" @size=\"sm\">By Iteration ID</bg.button>\n              {{#if @model.isAll}}\n                <bg.button @type=\"success\" @value=\"byUser\" @size=\"sm\">By User</bg.button>\n              {{/if}}\n              {{#if (and (gt @model.suiteSummaries.length 0) @model.isAll)}}\n                <bg.button @type=\"success\" @value=\"assertionFailure\" @size=\"sm\">\n                  Assertion Failures\n                </bg.button>\n              {{/if}}\n            </BsButtonGroup>\n            {{#if (eq this.analysisType 'slowResults')}}\n              <SlowestResults @overallModel={{@overallModel}}\n                              @model={{@model}}\n                              @regionName={{@regionName}}\n                              @selectedResource={{@selectedResource}}\n                              @exportToCsvUrl={{this.exportToCsvUrl}} />\n            {{else if (eq this.analysisType 'failedResults')}}\n              <FailedResults @overallModel={{@overallModel}}\n                             @model={{@model}}\n                             @regionName={{@regionName}}\n                             @selectedResource={{@selectedResource}} />\n            {{else if (eq this.analysisType 'slowIterations')}}\n              <SlowestIterations @overallModel={{@overallModel}}\n                                 @model={{@model}}\n                                 @regionName={{@regionName}}\n                                 @selectedResource={{@selectedResource}}\n                                 @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else if (eq this.analysisType 'iteration')}}\n              <ByIteration @overallModel={{@overallModel}}\n                           @model={{@model}}\n                           @regionName={{@regionName}}\n                           @selectedResource={{@selectedResource}}\n                           @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else if (eq this.analysisType 'byUser')}}\n              <ResultsByUser @overallModel={{@overallModel}}\n                             @concurrentClients={{@overallModel.concurrentClients}}\n                             @scriptType={{@overallModel.script.scriptType}}\n                             @model={{@model}}\n                             @regionName={{@regionName}}\n                             @selectedResource={{@selectedResource}}\n                             @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else if (eq this.analysisType 'assertionFailure')}}\n              <ResultsByAssertionFailure @overallModel={{@overallModel}}\n                                         @model={{@model}}\n                                         @regionName={{@regionName}}\n                                         @selectedResource={{@selectedResource}}\n                                         @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{/if}}\n          {{else}}\n            Result analysis will be available once this test finishes.\n          {{/if}}\n        </div>\n      {{/unless}}\n    </div>\n    {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n      <div class=\"tab-content p-l-0\">\n        <strong>Baseline Test</strong>\n        {{#unless @isPrint}}\n          <LoadResultsWidgetHeader\n                  @regionName={{concat @regionName \"_baseline\"}}\n                  @model={{@regionSummaryBaseline}}\n                  @overallModel={{@baselineExecution}}\n                  @traceCount={{this.baselineTraceCount}}\n          />\n        {{/unless}}\n  \n        <div role=\"tabpanel\" class=\"tab-pane show active\" id=\"{{@regionName}}_baseline_resourcesTab\">\n          <div class='m-t-5'>\n            {{#if (gt @baselineSelectedResource.id 0)}}\n              <div class=\"mb-2\">\n                <strong>Selected Baseline Resource:</strong> {{@baselineSelectedResource.resource}}\n                <button type=\"button\" {{on \"click\" this.clearBaselineSelectedResourceAction}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button>\n              </div>\n            {{/if}}\n          </div>\n          <LoadResultsWidgetResources\n                  @gridId={{concat @regionName \"_resultsGridBaseline\"}}\n                  @resourcesLoaded={{@baselineResourcesLoaded}}\n                  @resourceSelected={{@baselineResourceSelected}}\n                  @selectedResource={{@baselineSelectedResource}}\n                  @gridConfig={{@gridConfig}}\n                  @metricDefs={{@metricDefs}}\n                  @regionName={{@regionName}}\n                  @isPrint={{@isPrint}}\n                  @model={{@regionSummaryBaseline}}\n                  @isBaseline={{true}}\n          />\n        </div>\n  \n        <div role=\"tabpanel\" class=\"tab-pane no-print mt-3\" id=\"{{@regionName}}_baseline_tracesTab\">\n          <LoadResultsWidgetTraces\n                  @gridId={{concat @regionName \"_tracesGridBaseline\"}}\n                  @regionName={{@regionName}}\n                  @isBaseline={{true}}\n                  @uuid={{@overallModel.uuid}}\n                  @overallModel={{@baselineExecution}}\n                  @model={{@regionSummaryBaseline}}\n                  @isPrint={{@isPrint}}\n                  @selectedResource={{@selectedResource}}\n                  @setTraceCount={{this.setBaselineTraceCount}}\n          />\n        </div>\n      </div>\n    {{/if}}\n    {{!-- {{/if}} --}}\n    </div>\n  </div>\n  \n  {{#if this.showConfigureGridModal}}\n    <ConfigureColumns @type=\"Grid\"\n                      @config={{@gridConfig}}\n                      @metricDefs={{@metricDefs}}\n                      @summary={{@model.summary}}\n                      @percentiles={{@model.execution.percentiles}}\n                      @scriptType={{@model.execution.script.scriptType}}\n                      @showSelectedCheckbox={{false}}\n                      @isLoad={{true}}\n                      @configChanged={{this.gridConfigChanged}}\n                      @modalClosed={{this.configureGridModalClosed}} />\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"panel block-sub-container tab-pane fade \\\",[52,[51,[30,1]],\\\"active show\\\"]]]],[24,\\\"data-sortable-id\\\",\\\"grid\\\"],[24,\\\"data-type\\\",\\\"Grid\\\"],[16,1,[30,0,[\\\"widgetId\\\"]]],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"exportToCsvUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle  text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download All Results\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n       \\\"],[8,[39,4],[[24,0,\\\"text-primary\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,5],[[30,2],[30,3],[30,4]],null]],[[[1,\\\"      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showConfigureGridModalAction\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"removePanelAction\\\"]],\\\"grid\\\"],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Results \\\"],[41,[51,[30,5,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,5,[\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,10],null,[[\\\"@confId\\\",\\\"@numResources\\\",\\\"@maxResources\\\",\\\"@scriptType\\\"],[[30,5,[\\\"execution\\\",\\\"confId\\\"]],[30,5,[\\\"numResources\\\"]],[30,0,[\\\"maxResources\\\"]],[30,5,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,6],[[[1,\\\"    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Current Test\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[30,7,[\\\"id\\\"]],0],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"mb-2\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Selected Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,7,[\\\"resource\\\"]]],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"clearSelectedResourceAction\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\"\\\\n\\\"],[41,[51,[30,8]],[[[1,\\\"    \\\"],[8,[39,14],null,[[\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@traceCount\\\",\\\"@showAnalysis\\\"],[[30,9],[30,5],[30,10],[30,0,[\\\"traceCount\\\"]],[28,[37,15],[[30,6]],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"tab-content p-l-0\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane show active\\\"],[15,1,[29,[[30,9],\\\"_resourcesTab\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,6],[[[41,[28,[37,12],[[30,7,[\\\"id\\\"]],0],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"mb-2\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Selected Current Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,7,[\\\"resource\\\"]]],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"clearSelectedResourceAction\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[8,[39,16],null,[[\\\"@gridId\\\",\\\"@resourcesLoaded\\\",\\\"@gridConfig\\\",\\\"@metricDefs\\\",\\\"@regionName\\\",\\\"@model\\\",\\\"@isPrint\\\",\\\"@selectedResource\\\",\\\"@resourceSelected\\\"],[[28,[37,17],[[30,9],\\\"_resultsGrid\\\"],null],[30,11],[30,12],[30,13],[30,9],[30,5],[30,8],[30,7],[30,14]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,10,[\\\"tracesEnabled\\\"]],[[[1,\\\"      \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane no-print\\\"],[15,1,[29,[[30,9],\\\"_tracesTab\\\"]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,18],null,[[\\\"@gridId\\\",\\\"@regionName\\\",\\\"@uuid\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@isPrint\\\",\\\"@selectedResource\\\",\\\"@setTraceCount\\\"],[[28,[37,17],[[30,9],\\\"_tracesGrid\\\"],null],[30,9],[30,10,[\\\"uuid\\\"]],[30,10],[30,5],[30,8],[30,7],[30,0,[\\\"setTraceCountAction\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"      \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane no-print\\\"],[15,1,[29,[[30,9],\\\"_analysisTab\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,10,[\\\"completed\\\"]],[[[41,[51,[30,0,[\\\"analysisType\\\"]]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"Please choose an analysis type.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,19],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"analysisType\\\"]],\\\"radio\\\",[30,0,[\\\"setAnalysisType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"slowResults\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Slow Requests\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"failedResults\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Failed Requests\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"slowIterations\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Slow Test Iterations\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"iteration\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"By Iteration ID\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,5,[\\\"isAll\\\"]],[[[1,\\\"              \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"byUser\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"By User\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,20],[[28,[37,12],[[30,5,[\\\"suiteSummaries\\\",\\\"length\\\"]],0],null],[30,5,[\\\"isAll\\\"]]],null],[[[1,\\\"              \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"assertionFailure\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                Assertion Failures\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"]],[15]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"slowResults\\\"],null],[[[1,\\\"            \\\"],[8,[39,22],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@exportToCsvUrl\\\"],[[30,10],[30,5],[30,9],[30,7],[30,0,[\\\"exportToCsvUrl\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"failedResults\\\"],null],[[[1,\\\"            \\\"],[8,[39,23],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\"],[[30,10],[30,5],[30,9],[30,7]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"slowIterations\\\"],null],[[[1,\\\"            \\\"],[8,[39,24],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,10],[30,5],[30,9],[30,7],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"iteration\\\"],null],[[[1,\\\"            \\\"],[8,[39,25],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,10],[30,5],[30,9],[30,7],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"byUser\\\"],null],[[[1,\\\"            \\\"],[8,[39,26],null,[[\\\"@overallModel\\\",\\\"@concurrentClients\\\",\\\"@scriptType\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,10],[30,10,[\\\"concurrentClients\\\"]],[30,10,[\\\"script\\\",\\\"scriptType\\\"]],[30,5],[30,9],[30,7],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"analysisType\\\"]],\\\"assertionFailure\\\"],null],[[[1,\\\"            \\\"],[8,[39,27],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,10],[30,5],[30,9],[30,7],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]]],[]],[[[1,\\\"          Result analysis will be available once this test finishes.\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[30,16],[28,[37,5],[[28,[37,21],[[30,9],\\\"ALL\\\"],null],[30,17]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"tab-content p-l-0\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Baseline Test\\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,8]],[[[1,\\\"        \\\"],[8,[39,14],null,[[\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@traceCount\\\"],[[28,[37,17],[[30,9],\\\"_baseline\\\"],null],[30,18],[30,16],[30,0,[\\\"baselineTraceCount\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane show active\\\"],[15,1,[29,[[30,9],\\\"_baseline_resourcesTab\\\"]]],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,19,[\\\"id\\\"]],0],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"mb-2\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Selected Baseline Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,19,[\\\"resource\\\"]]],[1,\\\"\\\\n              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"clearBaselineSelectedResourceAction\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@gridId\\\",\\\"@resourcesLoaded\\\",\\\"@resourceSelected\\\",\\\"@selectedResource\\\",\\\"@gridConfig\\\",\\\"@metricDefs\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@model\\\",\\\"@isBaseline\\\"],[[28,[37,17],[[30,9],\\\"_resultsGridBaseline\\\"],null],[30,20],[30,21],[30,19],[30,12],[30,13],[30,9],[30,8],[30,18],true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,0,\\\"tab-pane no-print mt-3\\\"],[15,1,[29,[[30,9],\\\"_baseline_tracesTab\\\"]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,18],null,[[\\\"@gridId\\\",\\\"@regionName\\\",\\\"@isBaseline\\\",\\\"@uuid\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@isPrint\\\",\\\"@selectedResource\\\",\\\"@setTraceCount\\\"],[[28,[37,17],[[30,9],\\\"_tracesGridBaseline\\\"],null],[30,9],true,[30,10,[\\\"uuid\\\"]],[30,16],[30,18],[30,8],[30,7],[30,0,[\\\"setBaselineTraceCount\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showConfigureGridModal\\\"]],[[[1,\\\"  \\\"],[8,[39,28],null,[[\\\"@type\\\",\\\"@config\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@showSelectedCheckbox\\\",\\\"@isLoad\\\",\\\"@configChanged\\\",\\\"@modalClosed\\\"],[\\\"Grid\\\",[30,12],[30,13],[30,5,[\\\"summary\\\"]],[30,5,[\\\"execution\\\",\\\"percentiles\\\"]],[30,5,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],false,true,[30,0,[\\\"gridConfigChanged\\\"]],[30,0,[\\\"configureGridModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@selectedWidget\\\",\\\"@isBrowserBased\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\",\\\"@model\\\",\\\"@comparisonId\\\",\\\"@selectedResource\\\",\\\"@isPrint\\\",\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@resourcesLoaded\\\",\\\"@gridConfig\\\",\\\"@metricDefs\\\",\\\"@resourceSelected\\\",\\\"bg\\\",\\\"@baselineExecution\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@baselineSelectedResource\\\",\\\"@baselineResourcesLoaded\\\",\\\"@baselineResourceSelected\\\"],[\\\"div\\\",\\\"unless\\\",\\\"did-insert\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"or\\\",\\\"on\\\",\\\"fn\\\",\\\"h4\\\",\\\"strong\\\",\\\"max-resources-warning\\\",\\\"if\\\",\\\"gt\\\",\\\"button\\\",\\\"load-results-widget-header\\\",\\\"not\\\",\\\"load-results-widget-resources\\\",\\\"concat\\\",\\\"load-results-widget-traces\\\",\\\"bs-button-group\\\",\\\"and\\\",\\\"eq\\\",\\\"slowest-results\\\",\\\"failed-results\\\",\\\"slowest-iterations\\\",\\\"by-iteration\\\",\\\"results-by-user\\\",\\\"results-by-assertion-failure\\\",\\\"configure-columns\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-results-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadResultsWidget = _exports.default = (_class = class LoadResultsWidget extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _initializerDefineProperty(this, \"testResults\", _descriptor3, this);\n      _defineProperty(this, \"maxResources\", _environment.config.maxResources);\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"resourceTypeFilter\", _descriptor4, this);\n      _initializerDefineProperty(this, \"traceCount\", _descriptor5, this);\n      _initializerDefineProperty(this, \"baselineTraceCount\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showConfigureGridModal\", _descriptor7, this);\n      _initializerDefineProperty(this, \"analysisType\", _descriptor8, this);\n    }\n    get widgetId() {\n      return this.args.widget?.id;\n    }\n    get baseExportPath() {\n      return _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model, this.args.selectedResource);\n    }\n    get exportToCsvUrl() {\n      let path = this.baseExportPath;\n      path += '/results.csv';\n      const params = _lib.default.getZoomParams(this.zoomInfo);\n      return _lib.default.toUrl(path, params);\n    }\n    showConfigureGridModalAction() {\n      this.showConfigureGridModal = true;\n    }\n    configureGridModalClosed() {\n      this.showConfigureGridModal = false;\n    }\n    gridConfigChanged(newConfig) {\n      this.args.configChanged(newConfig);\n    }\n    resourceSelectedAction(resource) {\n      this.args.resourceSelected(resource);\n    }\n    clearSelectedResourceAction() {\n      this.args.clearSelectedResource();\n    }\n    clearBaselineSelectedResourceAction() {\n      this.args.clearBaselineSelectedResource();\n    }\n    removePanelAction(widgetId) {\n      this.args.removePanel(widgetId);\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n    }\n    setTraceCountAction(count) {\n      this.traceCount = count;\n    }\n    setBaselineTraceCount(count) {\n      this.baselineTraceCount = count;\n    }\n    setAnalysisType(value) {\n      this.analysisType = value;\n    }\n    didInsert(element) {\n      const regionName = this.args.regionName;\n      const EventBus = this.EventBus;\n      const _this = this;\n      $(\"#\" + regionName + \"_resultsTabsNav a\").on(\"shown.bs.tab\", function () {\n        const href = $(this).attr('href');\n        if (href === '#' + regionName + '_resourcesTab') {\n          EventBus.publish(regionName + \"_resultsGrid.invalidate\");\n        } else if (href === '#' + regionName + '_tracesTab') {\n          EventBus.publish(regionName + \"_tracesGrid.invalidate\");\n        } else if (href === '#' + regionName + '_analysisTab') {\n          EventBus.publish(regionName + \"_slowestResultsGrid.invalidate\");\n          EventBus.publish(regionName + \"_failedResultsGrid.invalidate\");\n          EventBus.publish(regionName + \"_iterationResultsGrid.invalidate\");\n        } else {\n          _this.testResults.invalidateResultsGrids(regionName);\n        }\n      });\n      $(\"#\" + regionName + \"_baseline_resultsTabsNav a\").on(\"shown.bs.tab\", function () {\n        const href = $(this).attr('href');\n        if (href === '#' + regionName + '_baseline_resourcesTab') {\n          EventBus.publish(regionName + \"_resultsGridBaseline.invalidate\");\n        } else if (href === '#' + regionName + '_baseline_tracesTab') {\n          EventBus.publish(regionName + \"_tracesGridBaseline.invalidate\");\n        } else {\n          _this.testResults.invalidateResultsGrids(regionName);\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resourceTypeFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'All';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"traceCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"baselineTraceCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showConfigureGridModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"analysisType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showConfigureGridModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showConfigureGridModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configureGridModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configureGridModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gridConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gridConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourceSelectedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourceSelectedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearSelectedResourceAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearSelectedResourceAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearBaselineSelectedResourceAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearBaselineSelectedResourceAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setTraceCountAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setTraceCountAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setBaselineTraceCount\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setBaselineTraceCount\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setAnalysisType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setAnalysisType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadResultsWidget);\n});","define(\"@testable/shared-ui/components/load-test-regional-dashboard-browser\", [\"exports\", \"@ember/component\", \"@testable/shared-ui/components/load-test-regional-dashboard\", \"@ember/template-factory\"], function (_exports, _component, _loadTestRegionalDashboard, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/components/load-test-regional-dashboard\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-insert this.didInsert}}\n    {{did-update this.onImagesRelatedChange this.hasImagesWidget @overallModel.id}}\n  >\n  {{#if (gt @selectedResource.id 0)}}\n    <span class=\"text-heading no-print\"><strong>Selected Resource:</strong> {{@selectedResource.resource}}\n      <button type=\"button\" {{on \"click\" this.clearSelectedResource}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button></span>\n    <h4 class=\"print-only m-b-20\">Selected Resource: {{@selectedResource.resource}}</h4>\n  {{/if}}\n  <div class=\"row sub-row {{if @isPrint 'tab-pane'}}\">\n      <div class=\"col-md-12\">\n        {{#if @isLoad}}\n          <span class=\"d-none\" {{did-insert @onSuiteImagesLoaded}}></span>\n          <SuiteSummariesWidget @minimalHeader={{@minimalHeader}}\n                                @model={{@model}}\n                                @overallModel={{@overallModel}}\n                                @byRegionId={{@byRegionId}}\n                                @regionName={{@regionName}}\n                                @showDownloadAssertionModal={{this.showDownloadAssertionModal}}\n                                @isPrint={{@isPrint}}\n                                @isViewer={{@isViewer}}\n                                @suiteSummariesLoaded={{@suiteSummariesLoaded}}\n                                @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n  \n  \n        {{else}}\n          <ExecutionRegionSuiteResults  @regionSummaries={{this.matchingRegionSummaries}}\n                                        @regionName={{@regionName}}\n                                        @model={{@model}}\n                                        @overallModel={{@overallModel}}\n                                        @scriptType={{@model.execution.script.scriptType}}\n                                        @isAll={{@model.isAll}}\n                                        @isMultiUser={{@isMultiUser}}\n                                        @isRemovable={{not @minimalHeader}}\n                                        @isPrint={{@isPrint}}\n                                        @isViewer={{@isViewer}}\n                                        @onSuiteImagesLoaded={{@onSuiteImagesLoaded}}\n          />\n  \n        {{/if}}\n  \n        <ImagesWidget @minimalHeader={{@minimalHeader}}\n                      @model={{@model}}\n                      @overallModel={{@overallModel}}\n                      @byRegionId={{@byRegionId}}\n                      @regionName={{@regionName}}\n                      @isAll={{@model.isAll}}\n                      @sessionsList={{this.sessionsList}}\n                      @isLoad={{@isLoad}}\n                      @isPrint={{@isPrint}}\n                      @isViewer={{@isViewer}}\n                      @imagesLoaded={{@onImagesLoaded}}\n                      @showImageDetailsModal={{this.showImageDetailsModalAction}}\n        />\n      {{#if (and this.isVisualScriptType (or this.videosCount.length (not this.videosLoaded)))}}\n        <VideosWidget @minimalHeader={{@minimalHeader}}\n                      @testType={{@overallModel.configuration.testType}}\n                      @uuid={{@overallModel.uuid}}\n                      @running={{@overallModel.running}}\n                      @completed={{@model.completed}}\n                      @model={{@model}}\n                      @overallModel={{@overallModel}}\n                      @byRegionId={{@byRegionId}}\n                      @regionName={{@regionName}}\n                      @isLoad={{@isLoad}}\n                      @scriptType={{@model.execution.script.scriptType}}\n                      @onSelectSession={{fn this.sessionSelected \"video\"}}\n                      @sessionsList={{this.sessionsList}}\n                      @selectedSessionNum={{this.selectedVideoSessionNum}}\n                      @isViewer={{@isViewer}}\n                      @imagesLoaded={{@onVideoImagesLoaded}}\n                      @videosLoaded={{this.videosLoadedAction}}\n                      @selectedVideo={{fn (mut this.selectedVideo)}}\n                      @showVideoDetailsModal={{this.showVideoDetailsModalAction}}\n                      @videoSeekPosition={{this.videoSeekPositionAction}}\n        />\n      {{/if}}\n  \n      {{#if @isLoad}}\n        <CommandStreamSummariesWidget @minimalHeader={{@minimalHeader}}\n                                        @model={{@model}}\n                                        @overallModel={{@overallModel}}\n                                        @scriptType={{@model.execution.script.scriptType}}\n                                        @byRegionId={{@byRegionId}}\n                                        @regionName={{@regionName}}\n                                        @isAll={{@model.isAll}}\n                                        @isLoad={{@isLoad}}\n                                        @isViewer={{@isViewer}}\n                                        @isMultiUser={{@isMultiUser}}\n                                        @commandStream={{this.commandStreamSummary}}\n                                        @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                                        @openCommandResultsDownloadUrl={{this.openCommandResultsDownloadUrl}}\n        />\n      {{else}}\n        <CommandStreamWidget @minimalHeader={{@minimalHeader}}\n                                @model={{@model}}\n                                @overallModel={{@overallModel}}\n                                @scriptType={{@model.execution.script.scriptType}}\n                                @executionId={{@model.execution.id}}\n                                @executionRegionId={{@model.executionRegion.id}}\n                                @regionName={{@regionName}}\n                                @isPrint={{@isPrint}}\n                                @commandStream={{this.commandStreams}}\n                                @command={{@command}}\n                                @selectedSessionNum={{this.selectedSessionNum}}\n                                @regionSummaries={{this.matchingRegionSummaries}}\n                                @isViewer={{@isViewer}}\n                                @selectedStream={{fn this.sessionSelected \"command\"}}\n                                @videoSeekPosition={{this.videoSeekPositionAction}}\n                                @videoWidgetAvailable={{and (lodash-function 'find' @config.order (hash type='Videos')) this.selectedVideo}}\n          />\n      {{/if}}\n      </div>\n  \n      <div class=\"col-md-12 other-widgets\" id=\"other-widgets\">\n        {{#unless @isPrint}}\n          <ul class=\"nav nav-tabs\" role=\"tablist\">\n            {{#each this.otherWidgets as |widget index|}}\n              {{#if (or widget.show (not-eq widget.type \"Chart\"))}}\n                <li class=\"nav-item\">\n                  <a class=\"nav-link {{if (eq index 0) \"active\"}}\" data-bs-toggle=\"tab\" href=\"#{{widget.id}}\">{{widget.name}}</a>\n                </li>\n              {{/if}}\n            {{/each}}\n            <li class=\"nav-item\">\n              <a href=\"#files-tab\" data-bs-toggle=\"tab\" class=\"nav-link\">\n                <span class=\"d-sm-none\">Files</span>\n                <span class=\"d-sm-block d-none\"><Ui::Icon @icon=\"fa fa-file\" class=\"m-r-10\" />Files {{#if @outputFilesLoaded}}\n                  ({{print-number @outputFileCount}})\n                {{else}}(...){{/if}} <Ui::InfoIcon\n                        @content='See all output files (e.g. screenshots) captured during this test' /></span>\n              </a>\n            </li>\n          </ul>\n        {{/unless}}\n        {{#each this.otherWidgets as |widget index|}}\n          {{#if (eq widget.type \"Chart\")}}\n            <MetricsWidget @minimalHeader={{@minimalHeader}}\n                          @metricDefs={{@metricDefs}}\n                          @model={{@model}}\n  \n                          @summary={{this.summary}}\n                          @summaryHistory={{this.summaryHistory}}\n                          @buckets={{this.buckets}}\n                          @intervals={{this.intervals}}\n  \n                          @overallModel={{@overallModel}}\n                          @chartsConfig={{@chartsConfig}}\n                          @config={{@config}}\n                          @regionName={{@regionName}}\n                          @widget={{widget}}\n                          @selectedWidget={{and (not-eq index 0) (not @isPrint)}}\n                          @bucketsLoaded={{this.bucketsLoaded}}\n                          @intervalsLoaded={{this.intervalsLoaded}}\n                          @summaryHistoryLoaded={{this.summaryHistoryLoaded}}\n                          @selectedResource={{@selectedResource}}\n                          @utilizationWarning={{this.utilizationWarning}}\n                          @isPrint={{@isPrint}}\n                          @isLoad={{@isLoad}}\n                          @isHistory={{@isHistory}}\n                          @requiresIntervals={{@requiresIntervals}}\n                          @resultsType=\"thisRun\"\n                          @isBaseline={{@isBaseline}}\n                          @period={{@period}}\n                          @agentSearchMap={{@agentSearchMap}}\n                          @isViewer={{@isViewer}}\n                          @isBrowserBased={{@isBrowserBased}}\n                          @configChanged={{this.chartUpdatedAction}}\n                          @transitionTo={{@transitionTo}}\n                          @onShow={{fn (mut widget.show) true}}\n                          @currentTab={{@currentTab}} />\n          {{else if (and (or (not @isPrint) (eq @selectedResource.id -1)) (eq widget.type \"Grid\"))}}\n            {{#if @isLoad}}\n              <LoadResultsWidget @minimalHeader={{@minimalHeader}}\n                                 @model={{@model}}\n                                 @overallModel={{@overallModel}}\n                                 @gridConfig={{@gridConfig}}\n                                 @regionName={{@regionName}}\n                                 @selectedResource={{@selectedResource}}\n                                 @resourcesLoaded={{this.resourcesLoaded}}\n                                 @metricDefs={{@metricDefs}}\n                                 @isPrint={{@isPrint}}\n                                 @isViewer={{@isViewer}}\n                                 @isBrowserBased={{@isBrowserBased}}\n                                 @widget={{widget}}\n                                 @selectedWidget={{and (not-eq index 0) (not @isPrint)}}\n                                 @configChanged={{this.gridConfigChangedAction}}\n                                 @clearSelectedResource={{this.clearSelectedResource}}\n                                 @resourceSelected={{this.resourceSelectedAction}}\n                                 @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else}}\n              <NetworkResultsWidget @minimalHeader={{@minimalHeader}}\n                                    @model={{@model}}\n                                    @overallModel={{@overallModel}}\n                                    @regionName={{@regionName}}\n                                    @isPrint={{@isPrint}}\n                                    @isViewer={{@isViewer}}\n                                    @isBrowserBased={{@isBrowserBased}}\n                                    @widget={{widget}}\n                                    @selectedWidget={{or (eq index 0) @isPrint}} />\n            {{/if}}\n          {{/if}}\n        {{/each}}\n      </div>\n  </div>\n  {{#if this.downloadAssertionsModal}}\n    <AssertionsResultDownloadModal\n            @openSuiteResultsDownloadUrl={{this.openSuiteResultsDownloadUrl}}\n            @modalClosed={{fn (mut this.downloadAssertionsModal) false}} />\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onImagesRelatedChange\\\"]],[30,0,[\\\"hasImagesWidget\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,2,[\\\"id\\\"]],0],null],[[[1,\\\"  \\\"],[10,1],[14,0,\\\"text-heading no-print\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Selected Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,2,[\\\"resource\\\"]]],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"clearSelectedResource\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[14,0,\\\"print-only m-b-20\\\"],[12],[1,\\\"Selected Resource: \\\"],[1,[30,2,[\\\"resource\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[15,0,[29,[\\\"row sub-row \\\",[52,[30,3],\\\"tab-pane\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"        \\\"],[11,1],[24,0,\\\"d-none\\\"],[4,[38,1],[[30,5]],null],[12],[13],[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@showDownloadAssertionModal\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@suiteSummariesLoaded\\\",\\\"@showImageDetailsModal\\\"],[[30,6],[30,7],[30,1],[30,8],[30,9],[30,0,[\\\"showDownloadAssertionModal\\\"]],[30,3],[30,10],[30,11],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,11],null,[[\\\"@regionSummaries\\\",\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@isAll\\\",\\\"@isMultiUser\\\",\\\"@isRemovable\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@onSuiteImagesLoaded\\\"],[[30,0,[\\\"matchingRegionSummaries\\\"]],[30,9],[30,7],[30,1],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,7,[\\\"isAll\\\"]],[30,12],[28,[37,12],[[30,6]],null],[30,3],[30,10],[30,5]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\"\\\\n      \\\"],[8,[39,13],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@sessionsList\\\",\\\"@isLoad\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@imagesLoaded\\\",\\\"@showImageDetailsModal\\\"],[[30,6],[30,7],[30,1],[30,8],[30,9],[30,7,[\\\"isAll\\\"]],[30,0,[\\\"sessionsList\\\"]],[30,4],[30,3],[30,10],[30,13],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"isVisualScriptType\\\"]],[28,[37,15],[[30,0,[\\\"videosCount\\\",\\\"length\\\"]],[28,[37,12],[[30,0,[\\\"videosLoaded\\\"]]],null]],null]],null],[[[1,\\\"      \\\"],[8,[39,16],null,[[\\\"@minimalHeader\\\",\\\"@testType\\\",\\\"@uuid\\\",\\\"@running\\\",\\\"@completed\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isLoad\\\",\\\"@scriptType\\\",\\\"@onSelectSession\\\",\\\"@sessionsList\\\",\\\"@selectedSessionNum\\\",\\\"@isViewer\\\",\\\"@imagesLoaded\\\",\\\"@videosLoaded\\\",\\\"@selectedVideo\\\",\\\"@showVideoDetailsModal\\\",\\\"@videoSeekPosition\\\"],[[30,6],[30,1,[\\\"configuration\\\",\\\"testType\\\"]],[30,1,[\\\"uuid\\\"]],[30,1,[\\\"running\\\"]],[30,7,[\\\"completed\\\"]],[30,7],[30,1],[30,8],[30,9],[30,4],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[28,[37,17],[[30,0,[\\\"sessionSelected\\\"]],\\\"video\\\"],null],[30,0,[\\\"sessionsList\\\"]],[30,0,[\\\"selectedVideoSessionNum\\\"]],[30,10],[30,14],[30,0,[\\\"videosLoadedAction\\\"]],[28,[37,17],[[28,[37,18],[[30,0,[\\\"selectedVideo\\\"]]],null]],null],[30,0,[\\\"showVideoDetailsModalAction\\\"]],[30,0,[\\\"videoSeekPositionAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"      \\\"],[8,[39,19],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isViewer\\\",\\\"@isMultiUser\\\",\\\"@commandStream\\\",\\\"@showImageDetailsModal\\\",\\\"@openCommandResultsDownloadUrl\\\"],[[30,6],[30,7],[30,1],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,8],[30,9],[30,7,[\\\"isAll\\\"]],[30,4],[30,10],[30,12],[30,0,[\\\"commandStreamSummary\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,0,[\\\"openCommandResultsDownloadUrl\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,20],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@commandStream\\\",\\\"@command\\\",\\\"@selectedSessionNum\\\",\\\"@regionSummaries\\\",\\\"@isViewer\\\",\\\"@selectedStream\\\",\\\"@videoSeekPosition\\\",\\\"@videoWidgetAvailable\\\"],[[30,6],[30,7],[30,1],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,7,[\\\"execution\\\",\\\"id\\\"]],[30,7,[\\\"executionRegion\\\",\\\"id\\\"]],[30,9],[30,3],[30,0,[\\\"commandStreams\\\"]],[30,15],[30,0,[\\\"selectedSessionNum\\\"]],[30,0,[\\\"matchingRegionSummaries\\\"]],[30,10],[28,[37,17],[[30,0,[\\\"sessionSelected\\\"]],\\\"command\\\"],null],[30,0,[\\\"videoSeekPositionAction\\\"]],[28,[37,14],[[28,[37,21],[\\\"find\\\",[30,16,[\\\"order\\\"]],[28,[37,22],null,[[\\\"type\\\"],[\\\"Videos\\\"]]]],null],[30,0,[\\\"selectedVideo\\\"]]],null]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12 other-widgets\\\"],[14,1,\\\"other-widgets\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,3]],[[[1,\\\"        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-tabs\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,26],[[28,[37,26],[[30,0,[\\\"otherWidgets\\\"]]],null]],null],null,[[[41,[28,[37,15],[[30,17,[\\\"show\\\"]],[28,[37,27],[[30,17,[\\\"type\\\"]],\\\"Chart\\\"],null]],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n                \\\"],[10,3],[15,0,[29,[\\\"nav-link \\\",[52,[28,[37,30],[[30,18],0],null],\\\"active\\\"]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[15,6,[29,[\\\"#\\\",[30,17,[\\\"id\\\"]]]]],[12],[1,[30,17,[\\\"name\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[17,18]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,6,\\\"#files-tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Files\\\"],[13],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[8,[39,31],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\"Files \\\"],[41,[30,19],[[[1,\\\"\\\\n                (\\\"],[1,[28,[35,32],[[30,20]],null]],[1,\\\")\\\\n              \\\"]],[]],[[[1,\\\"(...)\\\"]],[]]],[1,\\\" \\\"],[8,[39,33],null,[[\\\"@content\\\"],[\\\"See all output files (e.g. screenshots) captured during this test\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,26],[[28,[37,26],[[30,0,[\\\"otherWidgets\\\"]]],null]],null],null,[[[41,[28,[37,30],[[30,21,[\\\"type\\\"]],\\\"Chart\\\"],null],[[[1,\\\"          \\\"],[8,[39,34],null,[[\\\"@minimalHeader\\\",\\\"@metricDefs\\\",\\\"@model\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@overallModel\\\",\\\"@chartsConfig\\\",\\\"@config\\\",\\\"@regionName\\\",\\\"@widget\\\",\\\"@selectedWidget\\\",\\\"@bucketsLoaded\\\",\\\"@intervalsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@selectedResource\\\",\\\"@utilizationWarning\\\",\\\"@isPrint\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@isBaseline\\\",\\\"@period\\\",\\\"@agentSearchMap\\\",\\\"@isViewer\\\",\\\"@isBrowserBased\\\",\\\"@configChanged\\\",\\\"@transitionTo\\\",\\\"@onShow\\\",\\\"@currentTab\\\"],[[30,6],[30,23],[30,7],[30,0,[\\\"summary\\\"]],[30,0,[\\\"summaryHistory\\\"]],[30,0,[\\\"buckets\\\"]],[30,0,[\\\"intervals\\\"]],[30,1],[30,24],[30,16],[30,9],[30,21],[28,[37,14],[[28,[37,27],[[30,22],0],null],[28,[37,12],[[30,3]],null]],null],[30,0,[\\\"bucketsLoaded\\\"]],[30,0,[\\\"intervalsLoaded\\\"]],[30,0,[\\\"summaryHistoryLoaded\\\"]],[30,2],[30,0,[\\\"utilizationWarning\\\"]],[30,3],[30,4],[30,25],[30,26],\\\"thisRun\\\",[30,27],[30,28],[30,29],[30,10],[30,30],[30,0,[\\\"chartUpdatedAction\\\"]],[30,31],[28,[37,17],[[28,[37,18],[[30,21,[\\\"show\\\"]]],null],true],null],[30,32]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[28,[37,15],[[28,[37,12],[[30,3]],null],[28,[37,30],[[30,2,[\\\"id\\\"]],-1],null]],null],[28,[37,30],[[30,21,[\\\"type\\\"]],\\\"Grid\\\"],null]],null],[[[41,[30,4],[[[1,\\\"            \\\"],[8,[39,35],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@gridConfig\\\",\\\"@regionName\\\",\\\"@selectedResource\\\",\\\"@resourcesLoaded\\\",\\\"@metricDefs\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@isBrowserBased\\\",\\\"@widget\\\",\\\"@selectedWidget\\\",\\\"@configChanged\\\",\\\"@clearSelectedResource\\\",\\\"@resourceSelected\\\",\\\"@showImageDetailsModal\\\"],[[30,6],[30,7],[30,1],[30,33],[30,9],[30,2],[30,0,[\\\"resourcesLoaded\\\"]],[30,23],[30,3],[30,10],[30,30],[30,21],[28,[37,14],[[28,[37,27],[[30,22],0],null],[28,[37,12],[[30,3]],null]],null],[30,0,[\\\"gridConfigChangedAction\\\"]],[30,0,[\\\"clearSelectedResource\\\"]],[30,0,[\\\"resourceSelectedAction\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,36],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@isBrowserBased\\\",\\\"@widget\\\",\\\"@selectedWidget\\\"],[[30,6],[30,7],[30,1],[30,9],[30,3],[30,10],[30,30],[30,21],[28,[37,15],[[28,[37,30],[[30,22],0],null],[30,3]],null]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"]],[]],null]],[]]]],[21,22]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"downloadAssertionsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,37],null,[[\\\"@openSuiteResultsDownloadUrl\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"openSuiteResultsDownloadUrl\\\"]],[28,[37,17],[[28,[37,18],[[30,0,[\\\"downloadAssertionsModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@overallModel\\\",\\\"@selectedResource\\\",\\\"@isPrint\\\",\\\"@isLoad\\\",\\\"@onSuiteImagesLoaded\\\",\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@suiteSummariesLoaded\\\",\\\"@isMultiUser\\\",\\\"@onImagesLoaded\\\",\\\"@onVideoImagesLoaded\\\",\\\"@command\\\",\\\"@config\\\",\\\"widget\\\",\\\"index\\\",\\\"@outputFilesLoaded\\\",\\\"@outputFileCount\\\",\\\"widget\\\",\\\"index\\\",\\\"@metricDefs\\\",\\\"@chartsConfig\\\",\\\"@isHistory\\\",\\\"@requiresIntervals\\\",\\\"@isBaseline\\\",\\\"@period\\\",\\\"@agentSearchMap\\\",\\\"@isBrowserBased\\\",\\\"@transitionTo\\\",\\\"@currentTab\\\",\\\"@gridConfig\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"gt\\\",\\\"span\\\",\\\"strong\\\",\\\"button\\\",\\\"on\\\",\\\"h4\\\",\\\"suite-summaries-widget\\\",\\\"execution-region-suite-results\\\",\\\"not\\\",\\\"images-widget\\\",\\\"and\\\",\\\"or\\\",\\\"videos-widget\\\",\\\"fn\\\",\\\"mut\\\",\\\"command-stream-summaries-widget\\\",\\\"command-stream-widget\\\",\\\"lodash-function\\\",\\\"hash\\\",\\\"unless\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"not-eq\\\",\\\"li\\\",\\\"a\\\",\\\"eq\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"ui/info-icon\\\",\\\"metrics-widget\\\",\\\"load-results-widget\\\",\\\"network-results-widget\\\",\\\"assertions-result-download-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-regional-dashboard-browser.hbs\",\n    \"isStrictMode\": false\n  });\n  const OtherWidgets = [{\n    id: 'browserPerformanceMetrics',\n    type: 'Chart',\n    name: 'Perf Metrics'\n  }, {\n    id: 'latencyChart',\n    type: 'Chart',\n    name: 'Network Metrics'\n  }, {\n    id: 'overviewChart',\n    type: 'Chart',\n    name: 'Network Metrics'\n  }, {\n    id: 'grid',\n    type: 'Grid',\n    name: 'Network Requests'\n  }];\n  class LoadTestRegionalDashboardBrowser extends _loadTestRegionalDashboard.default {\n    get otherWidgets() {\n      return OtherWidgets.filter(widget => this.args.chartsConfig.find(config => config.id === widget.id) || widget.type !== \"Chart\");\n    }\n  }\n  _exports.default = LoadTestRegionalDashboardBrowser;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestRegionalDashboardBrowser);\n});","define(\"@testable/shared-ui/components/load-test-regional-dashboard\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/dashboards\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/utilization\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _trackedBuiltIns, _server, _lib, _dashboards, _loadTest, _utilization, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/dashboards\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/utilization\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-insert this.didInsert}}\n    {{did-update this.onImagesRelatedChange this.hasImagesWidget @overallModel.id}}\n  >\n  {{#if (gt @selectedResource.id 0)}}\n    <span class=\"text-heading no-print\"><strong>Selected {{if @comparisonId \"Current\"}} Resource:</strong> {{@selectedResource.resource}}\n      <button type=\"button\" {{on \"click\" this.clearSelectedResource}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button></span>\n    <h4 class=\"print-only m-b-20\">Selected {{if @comparisonId \"Current\"}} Resource: {{@selectedResource.resource}}</h4>\n  {{/if}}\n  {{#if (gt @baselineSelectedResource.id 0)}}\n    <span class=\"text-heading no-print\"><strong>Selected Baseline Resource:</strong> {{@baselineSelectedResource.resource}}\n      <button type=\"button\" {{on \"click\" this.clearBaselineSelectedResource}} class=\"btn btn-danger btn-xs m-l-5\">Clear</button></span>\n    <h4 class=\"print-only m-b-20\">Selected Baseline Resource: {{@baselineSelectedResource.resource}}</h4>\n  {{/if}}\n  <div class=\"row sub-row {{if @isPrint 'tab-pane'}}\">\n    {{#if (or (not @comparisonId) (and @baselineExecution this.baselineExecutionSummaryHistory))}}\n      <span {{did-insert this.handleDraggablePanelAction}}></span>\n      <div class=\"col-md-12\">\n        {{#each @config.order as |widget|}}\n          {{#if (eq widget.type \"Chart\")}}\n            <MetricsWidget @minimalHeader={{@minimalHeader}}\n                           @metricDefs={{@metricDefs}}\n                           @model={{@model}}\n                           @baselineExecution={{@baselineExecution}}\n  \n                           @baselineExecutionSummary={{this.baselineExecutionSummary}}\n                           @baselineExecutionSummaryHistory={{this.baselineExecutionSummaryHistory}}\n  \n                           @summary={{this.summary}}\n                           @summaryHistory={{this.summaryHistory}}\n                           @buckets={{this.buckets}}\n                           @intervals={{this.intervals}}\n  \n                           @overallModel={{@overallModel}}\n                           @chartsConfig={{@chartsConfig}}\n                           @config={{@config}}\n                           @regionName={{@regionName}}\n                           @regionBaselineId={{@regionBaselineId}}\n                           @widget={{widget}}\n                           @bucketsLoaded={{this.bucketsLoaded}}\n                           @intervalsLoaded={{this.intervalsLoaded}}\n                           @summaryHistoryLoaded={{this.summaryHistoryLoaded}}\n                           @selectedResource={{@selectedResource}}\n                           @baselineSelectedResource={{@baselineSelectedResource}}\n                           @utilizationWarning={{this.utilizationWarning}}\n                           @isPrint={{@isPrint}}\n                           @isLoad={{@isLoad}}\n                           @isHistory={{@isHistory}}\n                           @requiresIntervals={{@requiresIntervals}}\n                           @resultsType={{@resultsType}}\n                           @isBaseline={{@isBaseline}}\n                           @period={{@period}}\n                           @agentSearchMap={{@agentSearchMap}}\n                           @isViewer={{@isViewer}}\n                           @configChanged={{this.chartUpdatedAction}}\n                           @transitionTo={{@transitionTo}}\n                           @removePanel={{this.removePanel}}\n                           @currentTab={{@currentTab}} />\n          {{else if (eq widget.type \"Glance\")}}\n            <TestGlance @summary={{this.summary}}\n                        @summaryBaseline={{this.summaryBaseline}}\n                        @bucketsBaseline={{this.bucketsBaseline}}\n                        @intervalsBaseline={{this.intervalsBaseline}}\n                        @model={{@model}}\n                        @regionSummaryBaseline={{@regionSummaryBaseline}}\n                        @execution={{@overallModel}}\n                        @baselineExecution={{@baselineExecution}}\n                        @config={{@config}}\n                        @glanceVisibility={{@config.glance.visibility}}\n                        @metricDefs={{@metricDefs}}\n                        @selectedResource={{@selectedResource}}\n                        @baselineSelectedResource={{@baselineSelectedResource}}\n                        @isLoad={{@isLoad}}\n                        @resultsType={{@resultsType}}\n                        @bucketsLoaded={{this.bucketsLoaded}}\n                        @fromResultsTab={{false}}\n                        @regionName={{@regionName}}\n                        @regionBaselineId={{@regionBaselineId}}\n                        @comparisonId={{@comparisonId}}\n                        @isViewer={{@isViewer}}\n                        @glanceConfigChanged={{this.glanceConfigChangedAction}}\n                        @clearSelectedResource={{this.clearSelectedResource}}\n                        @removePanel={{this.removePanel}}\n                        @showTestOutcomeModal={{this.showTestOutcomeModalAction}} />\n          {{else if (eq widget.type \"SuiteSummaries\")}}\n            {{#if @isLoad}}\n              <span class=\"d-none\" {{did-insert @onSuiteImagesLoaded}}></span>\n              {{#if @comparisonId}}\n                <span class=\"d-none\" {{did-insert @onBaselineSuiteImagesLoaded}}></span>\n              {{/if}}\n              <SuiteSummariesWidget @minimalHeader={{@minimalHeader}}\n                                    @model={{@model}}\n                                    @overallModel={{@overallModel}}\n                                    @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                    @baselineExecution={{@baselineExecution}}\n                                    @byRegionId={{@byRegionId}}\n                                    @byRegionBaselineId={{@byRegionBaselineId}}\n                                    @regionName={{@regionName}}\n                                    @regionBaselineId={{@regionBaselineId}}\n                                    @widget={{widget}}\n                                    @showDownloadAssertionModal={{this.showDownloadAssertionModal}}\n                                    @isPrint={{@isPrint}}\n                                    @isViewer={{@isViewer}}\n                                    @suiteSummariesLoaded={{@suiteSummariesLoaded}}\n                                    @removePanel={{this.removePanel}}\n                                    @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else}}\n              <ExecutionRegionSuiteResults  @regionSummaries={{this.matchingRegionSummaries}}\n                                            @regionSummariesBaseline={{this.matchingRegionSummariesBaseline}}\n                                            @regionName={{@regionName}}\n                                            @regionBaselineId={{@regionBaselineId}}\n                                            @model={{@model}}\n                                            @overallModel={{@overallModel}}\n                                            @scriptType={{@model.execution.script.scriptType}}\n                                            @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                            @baselineExecution={{@baselineExecution}}\n                                            @isAll={{@model.isAll}}\n                                            @isMultiUser={{@isMultiUser}}\n                                            @isRemovable={{not @minimalHeader}}\n                                            @isPrint={{@isPrint}}\n                                            @isViewer={{@isViewer}}\n                                            @comparisonId={{@comparisonId}}\n                                            @onSuiteImagesLoaded={{@onSuiteImagesLoaded}}\n                                            @onBaselineSuiteImagesLoaded={{@onBaselineSuiteImagesLoaded}}\n                                            @removePanel={{this.removePanel}}\n              />\n            {{/if}}\n          {{else if (eq widget.type \"CommandSummaries\")}}\n            {{#if @isLoad}}\n              <CommandStreamSummariesWidget @minimalHeader={{@minimalHeader}}\n                                            @baselineExecution={{@baselineExecution}}\n                                            @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                            @model={{@model}}\n                                            @overallModel={{@overallModel}}\n                                            @scriptType={{@model.execution.script.scriptType}}\n                                            @byRegionId={{@byRegionId}}\n                                            @byRegionBaselineId={{@byRegionBaselineId}}\n                                            @regionName={{@regionName}}\n                                            @regionBaselineId={{@regionBaselineId}}\n                                            @widget={{widget}}\n                                            @isAll={{@model.isAll}}\n                                            @isLoad={{@isLoad}}\n                                            @isViewer={{@isViewer}}\n                                            @isMultiUser={{@isMultiUser}}\n                                            @commandStream={{this.commandStreamSummary}}\n                                            @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                                            @openCommandResultsDownloadUrl={{this.openCommandResultsDownloadUrl}}\n                                            @removePanel={{this.removePanel}} />\n            {{else}}\n              <CommandStreamWidget @minimalHeader={{@minimalHeader}}\n                                   @model={{@model}}\n                                   @overallModel={{@overallModel}}\n                                   @scriptType={{@model.execution.script.scriptType}}\n                                   @executionId={{@model.execution.id}}\n                                   @executionRegionId={{@model.executionRegion.id}}\n                                   @regionName={{@regionName}}\n                                   @regionBaselineId={{@regionBaselineId}}\n                                   @baselineExecution={{@baselineExecution}}\n                                   @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                   @widget={{widget}}\n                                   @isPrint={{@isPrint}}\n                                   @commandStream={{this.commandStreams}}\n                                   @command={{this.command}}\n                                   @selectedSessionNum={{this.selectedSessionNum}}\n                                   @baselineSelectedSessionNum={{this.baselineSelectedSessionNum}}\n                                   @regionSummaries={{this.matchingRegionSummaries}}\n                                   @isViewer={{@isViewer}}\n                                   @selectedStream={{fn this.sessionSelected \"command\"}}\n                                   @baselineSelectedStream={{this.baselineSessionSelected}}\n                                   @removePanel={{this.removePanel}}\n                                   @videoSeekPosition={{this.videoSeekPositionAction}}\n                                   @baselineVideoSeekPosition={{this.baselineVideoSeekPositionAction}}\n                                   @videoWidgetAvailable={{and (lodash-function 'find' @config.order (hash type='Videos')) this.selectedVideo}}\n              />\n            {{/if}}\n          {{else if (eq widget.type \"Images\")}}\n            <ImagesWidget @minimalHeader={{@minimalHeader}}\n                          @model={{@model}}\n                          @overallModel={{@overallModel}}\n                          @baselineExecution={{@baselineExecution}}\n                          @regionSummaryBaseline={{@regionSummaryBaseline}}\n                          @byRegionId={{@byRegionId}}\n                          @byRegionBaselineId={{@byRegionBaselineId}}\n                          @regionName={{@regionName}}\n                          @regionBaselineId={{@regionBaselineId}}\n                          @isAll={{@model.isAll}}\n                          @sessionsList={{this.sessionsList}}\n                          @baselineSelectedSessionNum={{this.baselineSelectedSessionNum}}\n                          @isLoad={{@isLoad}}\n                          @widget={{widget}}\n                          @isPrint={{@isPrint}}\n                          @isViewer={{@isViewer}}\n                          @removePanel={{this.removePanel}}\n                          @imagesLoaded={{@onImagesLoaded}}\n                          @baselineImagesLoaded={{@onBaselineImagesLoaded}}\n                          @showImageDetailsModal={{this.showImageDetailsModalAction}}\n            />\n          {{else if (and (eq widget.type \"Videos\") this.isVisualScriptType)}}\n            <VideosWidget @minimalHeader={{@minimalHeader}}\n                          @testType={{@overallModel.configuration.testType}}\n                          @uuid={{@overallModel.uuid}}\n                          @running={{@overallModel.running}}\n                          @completed={{@model.completed}}\n                          @model={{@model}}\n                          @overallModel={{@overallModel}}\n                          @baselineExecution={{@baselineExecution}}\n                          @regionSummaryBaseline={{@regionSummaryBaseline}}\n                          @byRegionId={{@byRegionId}}\n                          @byRegionBaselineId={{@byRegionBaselineId}}\n                          @regionName={{@regionName}}\n                          @regionBaselineId={{@regionBaselineId}}\n                          @isLoad={{@isLoad}}\n                          @scriptType={{@model.execution.script.scriptType}}\n                          @onSelectSession={{fn this.sessionSelected \"video\"}}\n                          @onSelectBaselineSession={{this.baselineSessionSelected}}\n                          @sessionsList={{this.sessionsList}}\n                          @selectedSessionNum={{this.selectedVideoSessionNum}}\n                          @baselineSelectedSessionNum={{this.baselineSelectedSessionNum}}\n                          @isViewer={{@isViewer}}\n                          @removePanel={{this.removePanel}}\n                          @imagesLoaded={{@onVideoImagesLoaded}}\n                          @baselineImagesLoaded={{@onVideoBaselineImagesLoaded}}\n                          @videosLoaded={{this.videosLoadedAction}}\n                          @selectedVideo={{fn (mut this.selectedVideo)}}\n                          @showVideoDetailsModal={{this.showVideoDetailsModalAction}}\n                          @videoSeekPosition={{this.videoSeekPosition}}\n                          @baselineVideoSeekPosition={{this.baselineVideoSeekPosition}}\n            />\n          {{else if (and (or (not @isPrint) (eq @selectedResource.id -1)) (eq widget.type \"Grid\"))}}\n            {{#if @isLoad}}\n              <LoadResultsWidget @minimalHeader={{@minimalHeader}}\n                                 @model={{@model}}\n                                 @overallModel={{@overallModel}}\n                                 @baselineExecution={{@baselineExecution}}\n                                 @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                 @gridConfig={{@gridConfig}}\n                                 @comparisonId={{@comparisonId}}\n                                 @regionName={{@regionName}}\n                                 @regionBaselineId={{@regionBaselineId}}\n                                 @selectedResource={{@selectedResource}}\n                                 @baselineSelectedResource={{@baselineSelectedResource}}\n                                 @resourcesLoaded={{this.resourcesLoaded}}\n                                 @baselineResourcesLoaded={{this.baselineResourcesLoaded}}\n                                 @metricDefs={{@metricDefs}}\n                                 @isPrint={{@isPrint}}\n                                 @isViewer={{@isViewer}}\n                                 @configChanged={{this.gridConfigChangedAction}}\n                                 @clearSelectedResource={{this.clearSelectedResource}}\n                                 @resourceSelected={{this.resourceSelectedAction}}\n                                 @clearBaselineSelectedResource={{this.clearBaselineSelectedResource}}\n                                 @baselineResourceSelected={{this.baselineResourceSelectedAction}}\n                                 @removePanel={{this.removePanel}}\n                                 @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n            {{else}}\n              <NetworkResultsWidget @minimalHeader={{@minimalHeader}}\n                                    @model={{@model}}\n                                    @overallModel={{@overallModel}}\n                                    @baselineExecution={{@baselineExecution}}\n                                    @regionSummaryBaseline={{@regionSummaryBaseline}}\n                                    @regionName={{@regionName}}\n                                    @regionBaselineId={{@regionBaselineId}}\n                                    @isPrint={{@isPrint}}\n                                    @isViewer={{@isViewer}}\n                                    @removePanel={{this.removePanel}} />\n            {{/if}}\n          {{/if}}\n        {{/each}}\n      </div>\n    {{else}}\n      <span class=\"lead\">Loading results...</span>\n    {{/if}}\n  </div>\n  {{#if this.downloadAssertionsModal}}\n    <AssertionsResultDownloadModal\n            @openSuiteResultsDownloadUrl={{this.openSuiteResultsDownloadUrl}}\n            @modalClosed={{fn (mut this.downloadAssertionsModal) false}} />\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onImagesRelatedChange\\\"]],[30,0,[\\\"hasImagesWidget\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,2,[\\\"id\\\"]],0],null],[[[1,\\\"  \\\"],[10,1],[14,0,\\\"text-heading no-print\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Selected \\\"],[1,[52,[30,3],\\\"Current\\\"]],[1,\\\" Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,2,[\\\"resource\\\"]]],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"clearSelectedResource\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[14,0,\\\"print-only m-b-20\\\"],[12],[1,\\\"Selected \\\"],[1,[52,[30,3],\\\"Current\\\"]],[1,\\\" Resource: \\\"],[1,[30,2,[\\\"resource\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,4,[\\\"id\\\"]],0],null],[[[1,\\\"  \\\"],[10,1],[14,0,\\\"text-heading no-print\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Selected Baseline Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,4,[\\\"resource\\\"]]],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"clearBaselineSelectedResource\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[14,0,\\\"print-only m-b-20\\\"],[12],[1,\\\"Selected Baseline Resource: \\\"],[1,[30,4,[\\\"resource\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[15,0,[29,[\\\"row sub-row \\\",[52,[30,5],\\\"tab-pane\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[28,[37,11],[[30,3]],null],[28,[37,12],[[30,6],[30,0,[\\\"baselineExecutionSummaryHistory\\\"]]],null]],null],[[[1,\\\"    \\\"],[11,1],[4,[38,1],[[30,0,[\\\"handleDraggablePanelAction\\\"]]],null],[12],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,7,[\\\"order\\\"]]],null]],null],null,[[[41,[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"Chart\\\"],null],[[[1,\\\"          \\\"],[8,[39,16],null,[[\\\"@minimalHeader\\\",\\\"@metricDefs\\\",\\\"@model\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummary\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@overallModel\\\",\\\"@chartsConfig\\\",\\\"@config\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@widget\\\",\\\"@bucketsLoaded\\\",\\\"@intervalsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@selectedResource\\\",\\\"@baselineSelectedResource\\\",\\\"@utilizationWarning\\\",\\\"@isPrint\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@isBaseline\\\",\\\"@period\\\",\\\"@agentSearchMap\\\",\\\"@isViewer\\\",\\\"@configChanged\\\",\\\"@transitionTo\\\",\\\"@removePanel\\\",\\\"@currentTab\\\"],[[30,9],[30,10],[30,11],[30,6],[30,0,[\\\"baselineExecutionSummary\\\"]],[30,0,[\\\"baselineExecutionSummaryHistory\\\"]],[30,0,[\\\"summary\\\"]],[30,0,[\\\"summaryHistory\\\"]],[30,0,[\\\"buckets\\\"]],[30,0,[\\\"intervals\\\"]],[30,1],[30,12],[30,7],[30,13],[30,14],[30,8],[30,0,[\\\"bucketsLoaded\\\"]],[30,0,[\\\"intervalsLoaded\\\"]],[30,0,[\\\"summaryHistoryLoaded\\\"]],[30,2],[30,4],[30,0,[\\\"utilizationWarning\\\"]],[30,5],[30,15],[30,16],[30,17],[30,18],[30,19],[30,20],[30,21],[30,22],[30,0,[\\\"chartUpdatedAction\\\"]],[30,23],[30,0,[\\\"removePanel\\\"]],[30,24]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"Glance\\\"],null],[[[1,\\\"          \\\"],[8,[39,17],null,[[\\\"@summary\\\",\\\"@summaryBaseline\\\",\\\"@bucketsBaseline\\\",\\\"@intervalsBaseline\\\",\\\"@model\\\",\\\"@regionSummaryBaseline\\\",\\\"@execution\\\",\\\"@baselineExecution\\\",\\\"@config\\\",\\\"@glanceVisibility\\\",\\\"@metricDefs\\\",\\\"@selectedResource\\\",\\\"@baselineSelectedResource\\\",\\\"@isLoad\\\",\\\"@resultsType\\\",\\\"@bucketsLoaded\\\",\\\"@fromResultsTab\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@comparisonId\\\",\\\"@isViewer\\\",\\\"@glanceConfigChanged\\\",\\\"@clearSelectedResource\\\",\\\"@removePanel\\\",\\\"@showTestOutcomeModal\\\"],[[30,0,[\\\"summary\\\"]],[30,0,[\\\"summaryBaseline\\\"]],[30,0,[\\\"bucketsBaseline\\\"]],[30,0,[\\\"intervalsBaseline\\\"]],[30,11],[30,25],[30,1],[30,6],[30,7],[30,7,[\\\"glance\\\",\\\"visibility\\\"]],[30,10],[30,2],[30,4],[30,15],[30,18],[30,0,[\\\"bucketsLoaded\\\"]],false,[30,13],[30,14],[30,3],[30,22],[30,0,[\\\"glanceConfigChangedAction\\\"]],[30,0,[\\\"clearSelectedResource\\\"]],[30,0,[\\\"removePanel\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"SuiteSummaries\\\"],null],[[[41,[30,15],[[[1,\\\"            \\\"],[11,1],[24,0,\\\"d-none\\\"],[4,[38,1],[[30,26]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"              \\\"],[11,1],[24,0,\\\"d-none\\\"],[4,[38,1],[[30,27]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[8,[39,18],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@regionSummaryBaseline\\\",\\\"@baselineExecution\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@widget\\\",\\\"@showDownloadAssertionModal\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@suiteSummariesLoaded\\\",\\\"@removePanel\\\",\\\"@showImageDetailsModal\\\"],[[30,9],[30,11],[30,1],[30,25],[30,6],[30,28],[30,29],[30,13],[30,14],[30,8],[30,0,[\\\"showDownloadAssertionModal\\\"]],[30,5],[30,22],[30,30],[30,0,[\\\"removePanel\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,19],null,[[\\\"@regionSummaries\\\",\\\"@regionSummariesBaseline\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@regionSummaryBaseline\\\",\\\"@baselineExecution\\\",\\\"@isAll\\\",\\\"@isMultiUser\\\",\\\"@isRemovable\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@comparisonId\\\",\\\"@onSuiteImagesLoaded\\\",\\\"@onBaselineSuiteImagesLoaded\\\",\\\"@removePanel\\\"],[[30,0,[\\\"matchingRegionSummaries\\\"]],[30,0,[\\\"matchingRegionSummariesBaseline\\\"]],[30,13],[30,14],[30,11],[30,1],[30,11,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,25],[30,6],[30,11,[\\\"isAll\\\"]],[30,31],[28,[37,11],[[30,9]],null],[30,5],[30,22],[30,3],[30,26],[30,27],[30,0,[\\\"removePanel\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[41,[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"CommandSummaries\\\"],null],[[[41,[30,15],[[[1,\\\"            \\\"],[8,[39,20],null,[[\\\"@minimalHeader\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@widget\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isViewer\\\",\\\"@isMultiUser\\\",\\\"@commandStream\\\",\\\"@showImageDetailsModal\\\",\\\"@openCommandResultsDownloadUrl\\\",\\\"@removePanel\\\"],[[30,9],[30,6],[30,25],[30,11],[30,1],[30,11,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,28],[30,29],[30,13],[30,14],[30,8],[30,11,[\\\"isAll\\\"]],[30,15],[30,22],[30,31],[30,0,[\\\"commandStreamSummary\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,0,[\\\"openCommandResultsDownloadUrl\\\"]],[30,0,[\\\"removePanel\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,21],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@scriptType\\\",\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@widget\\\",\\\"@isPrint\\\",\\\"@commandStream\\\",\\\"@command\\\",\\\"@selectedSessionNum\\\",\\\"@baselineSelectedSessionNum\\\",\\\"@regionSummaries\\\",\\\"@isViewer\\\",\\\"@selectedStream\\\",\\\"@baselineSelectedStream\\\",\\\"@removePanel\\\",\\\"@videoSeekPosition\\\",\\\"@baselineVideoSeekPosition\\\",\\\"@videoWidgetAvailable\\\"],[[30,9],[30,11],[30,1],[30,11,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,11,[\\\"execution\\\",\\\"id\\\"]],[30,11,[\\\"executionRegion\\\",\\\"id\\\"]],[30,13],[30,14],[30,6],[30,25],[30,8],[30,5],[30,0,[\\\"commandStreams\\\"]],[30,0,[\\\"command\\\"]],[30,0,[\\\"selectedSessionNum\\\"]],[30,0,[\\\"baselineSelectedSessionNum\\\"]],[30,0,[\\\"matchingRegionSummaries\\\"]],[30,22],[28,[37,22],[[30,0,[\\\"sessionSelected\\\"]],\\\"command\\\"],null],[30,0,[\\\"baselineSessionSelected\\\"]],[30,0,[\\\"removePanel\\\"]],[30,0,[\\\"videoSeekPositionAction\\\"]],[30,0,[\\\"baselineVideoSeekPositionAction\\\"]],[28,[37,12],[[28,[37,23],[\\\"find\\\",[30,7,[\\\"order\\\"]],[28,[37,24],null,[[\\\"type\\\"],[\\\"Videos\\\"]]]],null],[30,0,[\\\"selectedVideo\\\"]]],null]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[41,[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"Images\\\"],null],[[[1,\\\"          \\\"],[8,[39,25],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@isAll\\\",\\\"@sessionsList\\\",\\\"@baselineSelectedSessionNum\\\",\\\"@isLoad\\\",\\\"@widget\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@removePanel\\\",\\\"@imagesLoaded\\\",\\\"@baselineImagesLoaded\\\",\\\"@showImageDetailsModal\\\"],[[30,9],[30,11],[30,1],[30,6],[30,25],[30,28],[30,29],[30,13],[30,14],[30,11,[\\\"isAll\\\"]],[30,0,[\\\"sessionsList\\\"]],[30,0,[\\\"baselineSelectedSessionNum\\\"]],[30,15],[30,8],[30,5],[30,22],[30,0,[\\\"removePanel\\\"]],[30,32],[30,33],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"Videos\\\"],null],[30,0,[\\\"isVisualScriptType\\\"]]],null],[[[1,\\\"          \\\"],[8,[39,26],null,[[\\\"@minimalHeader\\\",\\\"@testType\\\",\\\"@uuid\\\",\\\"@running\\\",\\\"@completed\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@isLoad\\\",\\\"@scriptType\\\",\\\"@onSelectSession\\\",\\\"@onSelectBaselineSession\\\",\\\"@sessionsList\\\",\\\"@selectedSessionNum\\\",\\\"@baselineSelectedSessionNum\\\",\\\"@isViewer\\\",\\\"@removePanel\\\",\\\"@imagesLoaded\\\",\\\"@baselineImagesLoaded\\\",\\\"@videosLoaded\\\",\\\"@selectedVideo\\\",\\\"@showVideoDetailsModal\\\",\\\"@videoSeekPosition\\\",\\\"@baselineVideoSeekPosition\\\"],[[30,9],[30,1,[\\\"configuration\\\",\\\"testType\\\"]],[30,1,[\\\"uuid\\\"]],[30,1,[\\\"running\\\"]],[30,11,[\\\"completed\\\"]],[30,11],[30,1],[30,6],[30,25],[30,28],[30,29],[30,13],[30,14],[30,15],[30,11,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[28,[37,22],[[30,0,[\\\"sessionSelected\\\"]],\\\"video\\\"],null],[30,0,[\\\"baselineSessionSelected\\\"]],[30,0,[\\\"sessionsList\\\"]],[30,0,[\\\"selectedVideoSessionNum\\\"]],[30,0,[\\\"baselineSelectedSessionNum\\\"]],[30,22],[30,0,[\\\"removePanel\\\"]],[30,34],[30,35],[30,0,[\\\"videosLoadedAction\\\"]],[28,[37,22],[[28,[37,27],[[30,0,[\\\"selectedVideo\\\"]]],null]],null],[30,0,[\\\"showVideoDetailsModalAction\\\"]],[30,0,[\\\"videoSeekPosition\\\"]],[30,0,[\\\"baselineVideoSeekPosition\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[28,[37,10],[[28,[37,11],[[30,5]],null],[28,[37,15],[[30,2,[\\\"id\\\"]],-1],null]],null],[28,[37,15],[[30,8,[\\\"type\\\"]],\\\"Grid\\\"],null]],null],[[[41,[30,15],[[[1,\\\"            \\\"],[8,[39,28],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@gridConfig\\\",\\\"@comparisonId\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@selectedResource\\\",\\\"@baselineSelectedResource\\\",\\\"@resourcesLoaded\\\",\\\"@baselineResourcesLoaded\\\",\\\"@metricDefs\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@configChanged\\\",\\\"@clearSelectedResource\\\",\\\"@resourceSelected\\\",\\\"@clearBaselineSelectedResource\\\",\\\"@baselineResourceSelected\\\",\\\"@removePanel\\\",\\\"@showImageDetailsModal\\\"],[[30,9],[30,11],[30,1],[30,6],[30,25],[30,36],[30,3],[30,13],[30,14],[30,2],[30,4],[30,0,[\\\"resourcesLoaded\\\"]],[30,0,[\\\"baselineResourcesLoaded\\\"]],[30,10],[30,5],[30,22],[30,0,[\\\"gridConfigChangedAction\\\"]],[30,0,[\\\"clearSelectedResource\\\"]],[30,0,[\\\"resourceSelectedAction\\\"]],[30,0,[\\\"clearBaselineSelectedResource\\\"]],[30,0,[\\\"baselineResourceSelectedAction\\\"]],[30,0,[\\\"removePanel\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,29],null,[[\\\"@minimalHeader\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@regionSummaryBaseline\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@removePanel\\\"],[[30,9],[30,11],[30,1],[30,6],[30,25],[30,13],[30,14],[30,5],[30,22],[30,0,[\\\"removePanel\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[8]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading results...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"downloadAssertionsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,30],null,[[\\\"@openSuiteResultsDownloadUrl\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"openSuiteResultsDownloadUrl\\\"]],[28,[37,22],[[28,[37,27],[[30,0,[\\\"downloadAssertionsModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@overallModel\\\",\\\"@selectedResource\\\",\\\"@comparisonId\\\",\\\"@baselineSelectedResource\\\",\\\"@isPrint\\\",\\\"@baselineExecution\\\",\\\"@config\\\",\\\"widget\\\",\\\"@minimalHeader\\\",\\\"@metricDefs\\\",\\\"@model\\\",\\\"@chartsConfig\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@isBaseline\\\",\\\"@period\\\",\\\"@agentSearchMap\\\",\\\"@isViewer\\\",\\\"@transitionTo\\\",\\\"@currentTab\\\",\\\"@regionSummaryBaseline\\\",\\\"@onSuiteImagesLoaded\\\",\\\"@onBaselineSuiteImagesLoaded\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@suiteSummariesLoaded\\\",\\\"@isMultiUser\\\",\\\"@onImagesLoaded\\\",\\\"@onBaselineImagesLoaded\\\",\\\"@onVideoImagesLoaded\\\",\\\"@onVideoBaselineImagesLoaded\\\",\\\"@gridConfig\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"gt\\\",\\\"span\\\",\\\"strong\\\",\\\"button\\\",\\\"on\\\",\\\"h4\\\",\\\"or\\\",\\\"not\\\",\\\"and\\\",\\\"each\\\",\\\"-track-array\\\",\\\"eq\\\",\\\"metrics-widget\\\",\\\"test-glance\\\",\\\"suite-summaries-widget\\\",\\\"execution-region-suite-results\\\",\\\"command-stream-summaries-widget\\\",\\\"command-stream-widget\\\",\\\"fn\\\",\\\"lodash-function\\\",\\\"hash\\\",\\\"images-widget\\\",\\\"videos-widget\\\",\\\"mut\\\",\\\"load-results-widget\\\",\\\"network-results-widget\\\",\\\"assertions-result-download-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-regional-dashboard.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadTestRegionalDashboard = _exports.default = (_dec = (0, _object.computed)('args.baselineSelectedResource.{id,derivedSummary}', 'args.baselineExecution.{summary,intervals}', 'zoomInfo.{isAll,startTimestamp,endTimestamp}'), _dec2 = (0, _object.computed)('args.baselineExecution.summaryHistory', 'args.baselineSelectedResource.summaryHistory'), _dec3 = (0, _object.computed)('args.model.summaryHistory', 'args.selectedResource.{id,summaryHistory}'), _dec4 = (0, _object.computed)('args.model.intervals', 'args.selectedResource.{id,intervals}'), _dec5 = (0, _object.computed)('args.regionSummaryBaseline.intervals', 'args.baselineSelectedResource.{id,intervals}'), _dec6 = (0, _object.computed)('args.model.buckets', 'args.selectedResource.{buckets,id}'), _dec7 = (0, _object.computed)('args.regionSummaryBaseline.buckets', 'args.baselineSelectedResource.{buckets,id}'), _class = class LoadTestRegionalDashboard extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"testResults\", _descriptor2, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor3, this);\n      _initializerDefineProperty(this, \"command\", _descriptor4, this);\n      _initializerDefineProperty(this, \"commandStreams\", _descriptor5, this);\n      _initializerDefineProperty(this, \"commandStreamSummary\", _descriptor6, this);\n      _initializerDefineProperty(this, \"resourcesLoaded\", _descriptor7, this);\n      _initializerDefineProperty(this, \"baselineResourcesLoaded\", _descriptor8, this);\n      _initializerDefineProperty(this, \"intervalsLoaded\", _descriptor9, this);\n      _initializerDefineProperty(this, \"bucketsLoaded\", _descriptor0, this);\n      _initializerDefineProperty(this, \"summaryHistoryLoaded\", _descriptor1, this);\n      _initializerDefineProperty(this, \"sessionsList\", _descriptor10, this);\n      _initializerDefineProperty(this, \"selectedSessionNum\", _descriptor11, this);\n      _initializerDefineProperty(this, \"selectedVideoSessionNum\", _descriptor12, this);\n      _initializerDefineProperty(this, \"baselineSelectedSessionNum\", _descriptor13, this);\n      _initializerDefineProperty(this, \"firstAttemptCommandSessionSelected\", _descriptor14, this);\n      _initializerDefineProperty(this, \"videosCount\", _descriptor15, this);\n      _initializerDefineProperty(this, \"videosLoaded\", _descriptor16, this);\n      _initializerDefineProperty(this, \"videoSeekPosition\", _descriptor17, this);\n      _initializerDefineProperty(this, \"baselineVideoSeekPosition\", _descriptor18, this);\n      _initializerDefineProperty(this, \"downloadAssertionsModal\", _descriptor19, this);\n      _initializerDefineProperty(this, \"baselineAssertionsModal\", _descriptor20, this);\n      _initializerDefineProperty(this, \"selectedVideo\", _descriptor21, this);\n      this.widgetsWhereBucketsLoaded = new Set();\n\n      // Shared observers (inherited by browser subclass)\n      _lib.default.observeKeys(this, ['args.model.execution.maxSessionNum'], this.onUpdateSessionNum);\n      _lib.default.observeKeys(this, ['args.model.execution.completed'], this.onExecutionCompleted);\n      _lib.default.observeKeys(this, ['args.isHistory', 'args.isBaseline', 'args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onIntervalsRelatedChange);\n      _lib.default.observeKeys(this, ['args.resultsType', 'args.period', 'args.limit'], this.onHistoryRelatedChange);\n\n      // Baseline-only observers (not needed in browser subclass, no-op when baseline args absent)\n      _lib.default.observeKeys(this, ['baselineExecutionSummary'], this.onSetBaselineExecutionSummaryOnModel);\n      _lib.default.observeKeys(this, ['args.isHistory', 'args.isBaseline', 'args.baselineSelectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onBaselineIntervalsRelatedChange);\n\n      // on('init', ...) replacements\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if (this.isDestroyed) return;\n        this.onImagesRelatedChange();\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      _lib.default.unobserveKeys(this, ['args.model.execution.maxSessionNum'], this.onUpdateSessionNum);\n      _lib.default.unobserveKeys(this, ['args.model.execution.completed'], this.onExecutionCompleted);\n      _lib.default.unobserveKeys(this, ['args.isHistory', 'args.isBaseline', 'args.selectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onIntervalsRelatedChange);\n      _lib.default.unobserveKeys(this, ['args.resultsType', 'args.period', 'args.limit'], this.onHistoryRelatedChange);\n      _lib.default.unobserveKeys(this, ['baselineExecutionSummary'], this.onSetBaselineExecutionSummaryOnModel);\n      _lib.default.unobserveKeys(this, ['args.isHistory', 'args.isBaseline', 'args.baselineSelectedResource', 'zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onBaselineIntervalsRelatedChange);\n      if (this.args.isLoad) {\n        this.EventBus.unsubscribe('onCommandStreamSummaryEvent', this, 'onCommandStreamSummaryEvent');\n        this.EventBus.unsubscribe('onCommandStreamErrorsEvent', this, 'onCommandStreamErrorsEvent');\n      } else {\n        this.EventBus.unsubscribe('onCommandEvent', this, 'onCommandEvent');\n        this.EventBus.unsubscribe('onCommandStreamEvent', this, 'onCommandStreamEvent');\n      }\n    }\n    get isVisualScriptType() {\n      return _lib.default.isVisualScriptType(this.args.overallModel?.script?.scriptType);\n    }\n    get hasImagesWidget() {\n      return _.findIndex(this.args.config?.order, widget => {\n        return widget.type === 'Images';\n      }) >= 0;\n    }\n    get meteredWidgetsWithBucketsTable() {\n      const answer = [];\n      const charts = this.args.config?.charts;\n      _.forEach(this.args.config?.order, widget => {\n        if (widget.type === 'Chart') {\n          const chart = _.find(charts, chart => {\n            return chart.id === widget.id;\n          });\n          if (chart && chart.chartType === 'Metered' && (_.isUndefined(chart.showBucketTable) || chart.showBucketTable)) {\n            answer.push(widget.id);\n          }\n        }\n      });\n      return answer;\n    }\n    get matchingRegionSummaries() {\n      return this.args.model?.isAll ? _.filter(this.args.regionSummaries, regionSummary => {\n        return !regionSummary?.isAll || this.args.overallModel?.isParent;\n      }) : [this.args.model];\n    }\n    get matchingRegionSummariesBaseline() {\n      return this.args.regionSummaryBaseline?.isAll ? _.filter(this.args.regionSummariesBaseline, regionSummary => {\n        return !regionSummary?.isAll;\n      }) : [this.args.regionSummaryBaseline];\n    }\n    get utilizationWarning() {\n      return this.bucketsLoaded ? _utilization.default.getUtilizationWarning(this.args.model?.buckets, this.args.config) : null;\n    }\n    get summary() {\n      return this.args.selectedResource?.id > 0 ? this.args.selectedResource?.derivedSummary : this.args.model?.derivedSummary;\n    }\n    get summaryBaseline() {\n      return this.args.baselineSelectedResource?.id > 0 ? this.args.baselineSelectedResource?.derivedSummary : this.args.regionSummaryBaseline?.derivedSummary;\n    }\n    get baselineExecutionSummary() {\n      if (this.args.baselineSelectedResource?.id > 0) {\n        return this.args.baselineSelectedResource?.derivedSummary;\n      }\n      const intervals = this.args.baselineExecution?.intervals;\n      let summary = this.args.baselineExecution?.summary;\n      this.testResults.processSummary(summary, true);\n      return _loadTest.default.deriveSummary(summary, intervals, this.zoomInfo);\n    }\n    get baselineExecutionSummaryHistory() {\n      return this.args.baselineSelectedResource?.id && this.args.baselineSelectedResource?.summaryHistory > 0 ? this.args.baselineSelectedResource?.summaryHistory : this.args.baselineExecution?.summaryHistory;\n    }\n    get summaryHistory() {\n      return this.args.selectedResource?.id > 0 ? this.args.selectedResource?.summaryHistory : this.args.model?.summaryHistory;\n    }\n    get intervals() {\n      return this.args.selectedResource?.id > 0 ? this.args.selectedResource?.intervals : this.args.model?.intervals;\n    }\n    get intervalsBaseline() {\n      return this.args.baselineSelectedResource?.id > 0 ? this.args.baselineSelectedResource?.intervals : this.args.regionSummaryBaseline?.intervals;\n    }\n    get buckets() {\n      return this.args.selectedResource?.id > 0 ? this.args.selectedResource?.buckets : this.args.model?.buckets;\n    }\n    get bucketsBaseline() {\n      return this.args.baselineSelectedResource?.id > 0 ? this.args.baselineSelectedResource?.buckets : this.args.regionSummaryBaseline?.buckets;\n    }\n\n    // Observer replacements (called via did-update modifiers in template)\n\n    onSetBaselineExecutionSummaryOnModel() {\n      if (this.args.regionSummaryBaseline) (0, _object.set)(this.args.regionSummaryBaseline, 'summary', this.baselineExecutionSummary);\n    }\n    onUpdateSessionNum() {\n      this.setSessionsList(this.args.model?.execution?.maxSessionNum);\n    }\n    onExecutionCompleted() {\n      if (this.summaryHistoryLoaded && this.args.model?.execution?.completed && this.args.model?.summary) {\n        const summary = this.args.model?.summary;\n        summary.executionSuccess = this.args.model?.execution?.success;\n        this.args.model?.summaryHistory?.push(summary);\n      }\n    }\n    onIntervalsRelatedChange() {\n      (0, _runloop.once)(this, 'loadIntervals');\n    }\n    onBaselineIntervalsRelatedChange() {\n      if (this.args.baselineExecution) {\n        (0, _runloop.once)(this, 'loadBaselineIntervals');\n      }\n    }\n    onImagesRelatedChange() {\n      if (!this.hasImagesWidget) {\n        this.args.onImagesLoaded?.();\n        this.args.onBaselineImagesLoaded?.();\n      }\n    }\n    onHistoryRelatedChange() {\n      this.loadSummaryHistory();\n    }\n    setSessionsList(maxSessionNum) {\n      if (maxSessionNum) {\n        this.sessionsList = _lib.default.getSessionsList(maxSessionNum);\n      }\n    }\n    loadIntervals() {\n      const resource = this.args.selectedResource;\n      if (resource && resource.id > 0) {\n        this.loadResource(resource);\n      } else {\n        this.reloadIntervals();\n        if (this.args.isHistory) {\n          this.summaryHistoryLoaded = false;\n          (0, _runloop.scheduleOnce)('afterRender', this, function () {\n            if (!this.isDestroyed) {\n              this.summaryHistoryLoaded = true;\n              this.args.onSummaryHistoryLoaded?.(this.args.model);\n              this.EventBus.publish(this.args.regionName + \".data.update\");\n            }\n          });\n        }\n      }\n    }\n    loadBaselineIntervals() {\n      const resource = this.args.baselineSelectedResource;\n      if (resource && resource.id > 0) {\n        this.loadBaselineResource(resource);\n      } else {\n        this.reloadIntervals();\n      }\n    }\n    removePanel(name) {\n      let panel = $('[data-sortable-id=' + name + ']');\n      let element = panel.parent();\n      panel.closest('.panel').remove();\n      this.args.orderChanged?.(this.getDashboardOrder(element));\n      (0, _runloop.scheduleOnce)('afterRender', this, this.handleDraggablePanel);\n    }\n    chartUpdatedAction(newChart, oldChart) {\n      this.args.chartUpdated?.(newChart, oldChart);\n      // The updated panel re-renders with fresh DOM, which drops its sortable\n      // binding. Re-initialise once the new markup is in place.\n      (0, _runloop.scheduleOnce)('afterRender', this, this.handleDraggablePanel);\n    }\n    gridConfigChangedAction(newConfig) {\n      this.args.gridConfigChanged?.(newConfig);\n    }\n    resourceSelectedAction(resource) {\n      this.args.resourceSelected?.(resource);\n    }\n    baselineResourceSelectedAction(resource) {\n      this.args.baselineResourceSelected?.(resource);\n    }\n    clearSelectedResource() {\n      this.args.resourceSelected?.(_loadTest.default.OverallResource);\n    }\n    clearBaselineSelectedResource() {\n      this.args.baselineResourceSelected?.(_loadTest.default.OverallResource);\n    }\n    showImageDetailsModalAction(image) {\n      this.args.showImageDetailsModal?.(image);\n    }\n    showVideoDetailsModalAction(image) {\n      this.args.showVideoDetailsModal?.(image);\n    }\n    showTestOutcomeModalAction(selected, isRegion) {\n      this.args.showTestOutcomeModal?.(selected, isRegion);\n    }\n    glanceConfigChangedAction(newConfig) {\n      this.args.glanceConfigChanged?.(newConfig);\n    }\n    videosLoadedAction(count) {\n      if (this.videosLoaded) return;\n      this.videosCount = count;\n      this.videosLoaded = true;\n      this.args.onVideosLoaded?.(count);\n    }\n    sessionSelected(type, selectedSession) {\n      if (type === 'command' && !this.firstAttemptCommandSessionSelected) {\n        this.firstAttemptCommandSessionSelected = true;\n      }\n      if (!selectedSession || !('value' in selectedSession || 'sessionNum' in selectedSession)) {\n        return;\n      }\n      const selectedSessionNum = selectedSession.sessionNum ?? selectedSession.value;\n      this.selectedSessionNum = selectedSessionNum;\n      if (!this.firstAttemptCommandSessionSelected) {\n        this.selectedVideoSessionNum = selectedSessionNum;\n      } else if (type === 'command') {\n        this.firstAttemptCommandSessionSelected = false;\n      }\n    }\n    baselineSessionSelected(selectedSession) {\n      if (selectedSession && ('value' in selectedSession || 'sessionNum' in selectedSession)) this.baselineSelectedSessionNum = selectedSession.sessionNum || selectedSession.value;\n    }\n    bucketsLoadedAction(widgetId) {\n      const loaded = this.widgetsWhereBucketsLoaded;\n      if (!loaded.has(widgetId)) {\n        loaded.add(widgetId);\n        if (loaded.size === this.meteredWidgetsWithBucketsTable?.length) {\n          this.args.onBucketsLoaded?.();\n        }\n      }\n    }\n    showDownloadAssertionModal(isBaseline) {\n      this.baselineAssertionsModal = isBaseline;\n      this.downloadAssertionsModal = true;\n    }\n    openSuiteResultsDownloadUrl(option) {\n      let isAll = this.args.regionName === 'ALL';\n      const executionId = this.baselineAssertionsModal ? this.args.regionSummaryBaseline?.execution?.id : this.args.model?.execution?.id;\n      const executionRegionId = this.baselineAssertionsModal ? isAll ? 'ALL' : this.args.regionBaselineId : this.args.model?.executionRegion?.id;\n      let url = (this.args.overallModel?.uuid ? '/p/' + this.args.overallModel?.uuid : '/executions/' + executionId) + (isAll ? '' : '/regions/' + executionRegionId);\n      switch (option) {\n        case 'summary':\n          url += '/suite-summaries.csv';\n          break;\n        case 'summary-with-errors':\n          url += '/suite-summaries.csv?includeErrors=true';\n          break;\n        case 'errors':\n          url += '/suite-errors.csv';\n          break;\n        case 'results':\n          url += '/suite-results.csv';\n          break;\n      }\n      if (this.args.overallModel?.uuid && this.baselineAssertionsModal) {\n        url += 'comparison=true';\n      }\n      window.open(_lib.default.toUrl(url), '_blank');\n    }\n    openCommandResultsDownloadUrl(option) {\n      let isAll = this.args.regionName === 'ALL';\n      const executionId = this.baselineAssertionsModal ? this.args.regionSummaryBaseline?.execution?.id : this.args.model?.execution?.id;\n      const executionRegionId = this.baselineAssertionsModal ? isAll ? 'ALL' : this.args.regionBaselineId : this.args.model?.executionRegion?.id;\n      let url = (this.args.overallModel?.uuid ? '/p/' + this.args.overallModel?.uuid : '/executions/' + executionId) + (isAll ? '' : '/regions/' + executionRegionId);\n      switch (option) {\n        case 'command':\n          url += '/command-stream-summaries.csv';\n          break;\n        case 'command-with-errors':\n          url += '/command-stream-summaries.csv?includeErrors=true';\n          break;\n        case 'errors':\n          url += '/command-stream-errors.csv';\n          break;\n        case 'results':\n          url += '/command-streams.csv';\n          break;\n      }\n      if (this.args.overallModel?.uuid && this.baselineAssertionsModal) {\n        url += 'comparison=true';\n      }\n      window.open(_lib.default.toUrl(url), '_blank');\n    }\n    videoSeekPositionAction(position) {\n      this.videoSeekPosition = position;\n      $('.videos-widget-panel-body').collapse(\"show\");\n    }\n    baselineVideoSeekPositionAction(position) {\n      this.baselineVideoSeekPosition = position;\n      $('.videos-widget-panel-body').collapse(\"show\");\n    }\n    handleDraggablePanelAction() {\n      this.handleDraggablePanel();\n    }\n    didInsert() {\n      const _this = this;\n      this.handleDraggablePanel();\n      this.testResults.invalidateRegionalResults();\n      this.loadAsyncResources();\n      if (this.meteredWidgetsWithBucketsTable?.length === 0) {\n        this.args.onBucketsLoaded?.();\n      }\n      this.setSessionsList(this.args.model?.execution?.maxSessionNum);\n      if (this.args.isLoad) {\n        this.EventBus.subscribe('onCommandStreamSummaryEvent', this, 'onCommandStreamSummaryEvent');\n        this.EventBus.subscribe('onCommandStreamErrorsEvent', this, 'onCommandStreamErrorsEvent');\n      } else {\n        this.EventBus.subscribe('onCommandEvent', this, 'onCommandEvent');\n        this.EventBus.subscribe('onCommandStreamEvent', this, 'onCommandStreamEvent');\n      }\n      $(\"#other-widgets ul a\").on(\"shown.bs.tab\", function () {\n        const href = $(this).attr('href');\n        if (href === '#files-tab') {\n          _this.args.setShowFiles?.(href);\n          _this.EventBus.publish('filesGrid.invalidate');\n        }\n      });\n    }\n    onCommandStreamErrorsEvent(errors) {\n      if (errors) {\n        this.commandStreamSummary = new _trackedBuiltIns.TrackedObject({\n          ...this.commandStreamSummary,\n          errors\n        });\n      }\n    }\n    onCommandStreamSummaryEvent(overallSummary) {\n      if (overallSummary) {\n        this.commandStreamSummary = new _trackedBuiltIns.TrackedObject({\n          ...this.commandStreamSummary,\n          overallSummary\n        });\n      }\n    }\n    onCommandStreamEvent(stream) {\n      let existingCommandStreams = this.commandStreams;\n      if (!_.find(existingCommandStreams, existingCmd => existingCmd.id === stream.id)) {\n        existingCommandStreams.push(stream);\n      } else {\n        let existingCommandStreamIndex = existingCommandStreams.findIndex(command => command.id === stream.id);\n        if (existingCommandStreamIndex > -1) {\n          existingCommandStreams[existingCommandStreamIndex] = stream;\n        }\n      }\n      this.commandStreams = [...existingCommandStreams];\n    }\n    onCommandEvent(cmd) {\n      this.command = cmd;\n    }\n    handleDraggablePanel() {\n      if (this.args.isViewer || this.args.minimalHeader || this.args.isBrowserBased) return;\n      const target = $('.block-sub-container').parent('[class*=col]');\n      const targetHandle = '.block-sub-container-target';\n      const connectedTarget = '.sub-row > [class*=col]';\n      const _this = this;\n      // Re-rendering a panel replaces its DOM, so any existing sortable is stale.\n      // Destroy it first, otherwise the new nodes end up with no working handle.\n      $(target).each(function () {\n        if ($(this).data('ui-sortable')) {\n          $(this).sortable('destroy');\n        }\n      });\n      $(target).sortable({\n        handle: targetHandle,\n        connectWith: connectedTarget,\n        stop: function (event) {\n          _this.args.orderChanged?.(_this.getDashboardOrder(event.target));\n        }\n      });\n    }\n    getDashboardOrder(element) {\n      return _dashboards.default.getDashboardOrder($(element).parents('.sub-row'), '.block-sub-container');\n    }\n    getIntervals(execution) {\n      const executionId = execution ? execution.id : this.args.model?.execution?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const executionRegionId = execution ? isAll ? 'ALL' : this.args.regionBaselineId : this.args.model?.executionRegion?.id;\n      if (!executionRegionId) return;\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        intervals: true\n      };\n      if (!isAll && executionRegionId) {\n        params.executionRegionId = executionRegionId;\n      }\n      if (this.args.overallModel?.uuid) {\n        if (execution) params.comparison = true;\n        return _server.default.getTokenContent(this.args.overallModel?.uuid, params, zoomInfo);\n      } else if (executionId) {\n        return isAll ? _server.default.getLoadTestExecutionIntervals(executionId, zoomInfo) : _server.default.getLoadTestExecutionRegionIntervals(executionId, executionRegionId, zoomInfo);\n      }\n    }\n    getResources() {\n      const executionId = this.args.model?.execution?.id;\n      const executionRegionId = this.args.model?.executionRegion?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const params = {\n        resources: true\n      };\n      if (!isAll) {\n        params.executionRegionId = executionRegionId;\n      }\n      if (this.args.model?.execution?.uuid) {\n        return _server.default.getTokenContent(this.args.model?.execution?.uuid, params);\n      } else {\n        return isAll ? _server.default.getLoadTestExecutionResources(executionId) : _server.default.getLoadTestExecutionRegionResources(executionId, executionRegionId);\n      }\n    }\n    getBaselineResources() {\n      const executionId = this.args.regionSummaryBaseline?.execution?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const executionRegionId = isAll ? 'ALL' : this.args.regionBaselineId;\n      if (!executionRegionId) return;\n      if (this.args.model?.execution?.uuid) {\n        const params = {\n          resources: true\n        };\n        if (!isAll) {\n          params.executionRegionId = executionRegionId;\n        }\n        params.comparison = true;\n        return _server.default.getTokenContent(this.args.model?.execution?.uuid, params);\n      } else {\n        return isAll ? _server.default.getLoadTestExecutionResources(executionId) : _server.default.getLoadTestExecutionRegionResources(executionId, executionRegionId);\n      }\n    }\n    getTimespanParams() {\n      switch (this.args.resultsType) {\n        case 'history':\n          return {\n            period: this.args.period,\n            limit: this.args.limit || 15\n          };\n        default:\n          return {\n            limit: 10\n          };\n      }\n    }\n    getSummaryHistory(execution) {\n      const model = execution || this.args.model;\n      const executionId = execution ? execution.id : model?.execution?.id;\n      const testConfId = execution ? execution.confId : model?.execution?.confId;\n      const isAll = this.args.regionName === 'ALL';\n      const regionId = this.baselineAssertionsModal ? isAll ? 'ALL' : this.args.regionBaselineId : model?.executionRegion?.region?.id;\n      const resourceId = this.args.selectedResource?.id;\n      const baselineResourceId = this.args.baselineSelectedResource?.id;\n      const spanParams = this.getTimespanParams();\n      const params = {\n        down: true,\n        maxExecutionId: executionId\n      };\n      if (!isAll && regionId) {\n        params.region = regionId;\n      }\n      if (resourceId >= 0) {\n        params.resourceId = resourceId;\n      }\n      if (execution && baselineResourceId >= 0) {\n        params.baselineResourceId = baselineResourceId;\n      }\n      _.merge(params, spanParams);\n      if (this.args.overallModel?.uuid) {\n        params.summaryHistory = true;\n        params.testConfId = testConfId;\n        if (execution) params.comparison = true;\n        return _server.default.getTokenContent(this.args.overallModel?.uuid, params);\n      } else {\n        return _server.default.getLoadTestSummaryHistory(testConfId, params);\n      }\n    }\n    reloadIntervals() {\n      if (this.args.isLoad && !this.args.isHistory && !this.isIntervalLoading) {\n        this.isIntervalLoading = true;\n        this.intervalsLoaded = false;\n        if (this.args.baselineExecution) {\n          this.getIntervals(this.args.baselineExecution)?.then(intervals => {\n            this.testResults.processIntervals(intervals, this.args.metricDefsByName, this.args.baselineExecution?.summary);\n            let newSummary = _.cloneDeep(this.args.baselineExecution?.summary);\n            this.testResults.processSummary(newSummary);\n            (0, _object.set)(this.args.baselineExecution, 'summary', newSummary);\n            if (this.args.regionSummaryBaseline) (0, _object.set)(this.args.regionSummaryBaseline, 'summary', newSummary);\n            (0, _object.set)(this.args.baselineExecution, 'intervals', _lib.default.addHistoryToIntervals(intervals));\n            if (this.args.baselineSelectedResource?.id === -1) {\n              this.args.onBaselineIntervalsLoaded?.();\n            }\n          });\n        }\n        this.getIntervals()?.then(intervals => {\n          this.isIntervalLoading = false;\n          this.testResults.processIntervals(intervals, this.args.metricDefsByName, this.args.model?.summary);\n          let newSummary = _.cloneDeep(this.args.model?.summary);\n          if (this.isDestroyed) return;\n          this.args.model.summary = newSummary;\n          this.args.model.intervals = intervals;\n          if (this.args.selectedResource?.id === -1 || this.args.baselineSelectedResource?.id === -1) {\n            this.intervalsLoaded = true;\n            this.args.onIntervalsLoaded?.(this.args.model);\n          }\n        }, () => {\n          this.isIntervalLoading = false;\n          if (this.args.selectedResource?.id === -1) {\n            this.intervalsLoaded = true;\n            this.args.onIntervalsLoaded?.(this.args.model);\n          }\n          if (this.args.baselineSelectedResource?.id === -1) {\n            this.args.onBaselineIntervalsLoaded?.();\n          }\n        });\n      } else {\n        this.intervalsLoaded = true;\n        this.isIntervalLoading = false;\n        this.args.onIntervalsLoaded?.(this.args.model);\n        if (this.args.baselineExecution) {\n          this.args.onBaselineIntervalsLoaded?.();\n        }\n      }\n    }\n    loadIntervalsAndResources() {\n      this.reloadIntervals();\n      this.getResources().then(resources => {\n        if (this.isDestroyed) return;\n        this.testResults.updateResources(this, resources, this.args.model?.resources, null, this.args.metricDefsByName, this.zoomInfo);\n        this.resourcesLoaded = true;\n        (0, _object.set)(this.args.model, 'numResources', _.size(this.args.model?.resources));\n        this.args.onResourcesLoaded?.(_.values(this.args.model?.resources));\n        this.loadBuckets();\n      }, () => {\n        if (this.isDestroyed) return;\n        (0, _object.set)(this.args.model, 'numResources', 0);\n        this.resourcesLoaded = true;\n        this.args.onResourcesLoaded?.([]);\n      });\n      this.loadSummaryHistory();\n      if (this.args.baselineExecution) {\n        this.loadSummaryHistoryBaseline();\n        this.getBaselineResources()?.then(resources => {\n          this.testResults.updateResources(this, resources, this.args.regionSummaryBaseline?.resources, null, this.args.metricDefsByName, this.zoomInfo);\n          this.baselineResourcesLoaded = true;\n          if (this.args.regionSummaryBaseline) (0, _object.set)(this.args.regionSummaryBaseline, 'numResources', _.size(this.args.regionSummaryBaseline?.resources));\n          this.args.onBaselineResourcesLoaded?.(_.values(this.args.regionSummaryBaseline?.resources));\n          this.loadBucketsBaseline();\n        }, () => {\n          if (this.args.regionSummaryBaseline) (0, _object.set)(this.args.regionSummaryBaseline, 'numResources', 0);\n          this.baselineResourcesLoaded = true;\n          this.args.onBaselineResourcesLoaded?.([]);\n        });\n      }\n    }\n    loadSummaryHistory() {\n      this.summaryHistoryLoaded = false;\n      this.getSummaryHistory().then(summaries => {\n        if (this.isDestroyed) return;\n        if (summaries.length) {\n          let startDate = _lib.default.intervalFor(moment(summaries[summaries.length - 1].firstResultAt).valueOf(), summaries[summaries.length - 1].granularity);\n          _.forEach(summaries, summary => {\n            this.testResults.processSummary(summary);\n            summary._diff = _lib.default.printDurationFromMS(summary.date - startDate);\n            // summary._diffms = summary.date - startDate;\n          });\n        }\n        (0, _object.set)(this.args.model, 'summaryHistory', new _trackedBuiltIns.TrackedArray(summaries.reverse()));\n        if (this.args.selectedResource?.id === -1) {\n          this.summaryHistoryLoaded = true;\n          this.args.onSummaryHistoryLoaded?.(this.args.model);\n          this.EventBus.publish(this.args.regionName + \".data.update\");\n        }\n      }, () => {\n        if (this.isDestroyed) return;\n        (0, _object.set)(this.args.model, 'summaryHistory', new _trackedBuiltIns.TrackedArray([]));\n        this.summaryHistoryLoaded = true;\n      });\n    }\n    loadSummaryHistoryBaseline() {\n      this.summaryHistoryLoaded = false;\n      this.getSummaryHistory(this.args.baselineExecution).then(summaries => {\n        if (summaries.length) {\n          let startDate = _lib.default.intervalFor(moment(summaries[summaries.length - 1].firstResultAt).valueOf(), summaries[summaries.length - 1].granularity);\n          _.forEach(summaries, summary => {\n            this.testResults.processSummary(summary);\n            summary._diff = _lib.default.printDurationFromMS(summary.date - startDate);\n            // summary._diffms = summary.date - startDate;\n          });\n        }\n        (0, _object.set)(this.args.baselineExecution, 'summaryHistory', _lib.default.addHistoryToIntervals(summaries).reverse());\n        if (this.args.baselineSelectedResource?.id === -1) {\n          this.summaryHistoryLoaded = true;\n          this.args.onBaselineSummaryHistoryLoaded?.();\n        }\n      }, () => {\n        (0, _object.set)(this.args.baselineExecution, 'summaryHistory', []);\n      });\n    }\n    loadBuckets() {\n      const uuid = this.args.model?.execution?.uuid;\n      const resource = this.args.selectedResource;\n      const resourceId = this.args.selectedResource?.id;\n      const isResource = resourceId >= 0;\n      const execId = this.args.model?.execution?.id;\n      if (!execId && !uuid) return; // no need to load buckets if there is no execution id or uuid\n\n      const execRegionId = this.args.model?.executionRegion?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        buckets: true\n      };\n      if (!isAll) {\n        params.executionRegionId = execRegionId;\n      }\n      if (resourceId >= 0) {\n        params.resourceId = resourceId;\n      }\n      this.bucketsLoaded = false;\n      const getBuckets = _.isString(uuid) ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getBuckets(execId, execRegionId, resourceId, zoomInfo);\n      getBuckets.then(results => {\n        if (this.isDestroyed) return;\n        _.forEach(results, bucket => {\n          this.testResults.processBucket(bucket);\n        });\n        if (isResource) {\n          (0, _object.set)(resource, 'buckets', new _trackedBuiltIns.TrackedArray(results));\n        } else {\n          this.args.model.buckets = new _trackedBuiltIns.TrackedArray(results);\n        }\n        this.bucketsLoaded = true;\n        this.args.onBucketsLoaded?.(this.args.model);\n      }, () => {\n        if (this.isDestroyed) return;\n        if (isResource) {\n          (0, _object.set)(resource, 'buckets', new _trackedBuiltIns.TrackedArray([]));\n        } else {\n          this.args.model.buckets = new _trackedBuiltIns.TrackedArray([]);\n        }\n        this.bucketsLoaded = true;\n        this.args.onBucketsLoaded?.(this.args.model);\n      });\n    }\n    loadBucketsBaseline() {\n      const resource = this.args.baselineSelectedResource;\n      const resourceId = this.args.baselineSelectedResource?.id;\n      const uuid = this.args.model?.execution?.uuid;\n      const isResource = resourceId >= 0;\n      const execId = this.args.baselineExecution?.id;\n      if (!execId && !uuid) return; // no need to load buckets if there is no execution id or uuid\n\n      const execRegionId = this.args.regionName === 'ALL' ? 'ALL' : this.args.regionBaselineId;\n      const isAll = this.args.regionName === 'ALL';\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        buckets: true\n      };\n      if (!isAll) {\n        params.executionRegionId = execRegionId;\n      }\n      if (resourceId >= 0) {\n        params.resourceId = resourceId;\n      }\n      const hasUuid = _.isString(uuid);\n      if (hasUuid) params.comparison = true;\n      this.bucketsLoaded = false;\n      const getBuckets = hasUuid ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getBuckets(execId, execRegionId, resourceId, zoomInfo);\n      getBuckets.then(results => {\n        if (this.isDestroyed) return;\n        _.forEach(results, bucket => {\n          this.testResults.processBucket(bucket);\n        });\n\n        // check resoures exists or not\n        if (isResource) {\n          (0, _object.set)(resource, 'baselineBuckets', results);\n        } else {\n          (0, _object.set)(this.args.baselineExecution, 'buckets', new _trackedBuiltIns.TrackedArray(results));\n        }\n        this.bucketsLoaded = true;\n        this.args.onBaselineBucketsLoaded?.();\n      }, () => {\n        if (this.isDestroyed) return;\n        if (isResource) {\n          (0, _object.set)(resource, 'buckets', new _trackedBuiltIns.TrackedArray([]));\n        } else {\n          (0, _object.set)(this.args.baselineExecution, 'buckets', new _trackedBuiltIns.TrackedArray([]));\n        }\n        this.bucketsLoaded = true;\n        this.args.onBaselineBucketsLoaded?.();\n      });\n    }\n    loadAsyncResources() {\n      if (this.args.isLoad) {\n        this.loadIntervalsAndResources();\n      } else {\n        this.intervalsLoaded = true;\n        this.args.onIntervalsLoaded?.(this.args.model);\n        this.resourcesLoaded = true;\n        (0, _object.set)(this.args.model, 'numResources', 0);\n        this.args.onResourcesLoaded?.([]);\n        this.args.onSuiteSummariesLoaded?.(this.args.model);\n        this.loadBuckets();\n        this.loadSummaryHistory();\n        if (this.args.baselineExecution) {\n          this.args.onBaselineIntervalsLoaded?.();\n          this.args.onBaselineSuiteSummariesLoaded?.();\n          this.baselineResourcesLoaded = true;\n          this.loadBucketsBaseline();\n          this.loadSummaryHistoryBaseline();\n        }\n      }\n    }\n    loadResource(resource) {\n      this.intervalsLoaded = false;\n      this.summaryHistoryLoaded = false;\n      const execId = this.args.model?.execution?.id;\n      const execRegionId = this.args.model?.executionRegion?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const uuid = this.args.model?.execution?.uuid;\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        resourceId: resource.id\n      };\n      if (!isAll) {\n        params.executionRegionId = execRegionId;\n      }\n      const getResource = _.isString(uuid) ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getLoadTestResource(execId, execRegionId, resource.id, zoomInfo);\n      getResource.then(results => {\n        if (this.isDestroyed) return;\n        if (results.summary) {\n          this.testResults.processSummary(results.summary);\n          (0, _object.set)(resource, 'summary', results.summary);\n        }\n        if (_.isArray(results.intervals)) {\n          (0, _object.set)(resource, 'intervals', results.intervals);\n          this.testResults.processIntervals(resource?.intervals, this.args.metricDefsByName, this.args.model?.summary || resource?.summary);\n        } else {\n          (0, _object.set)(resource, 'intervals', []);\n        }\n        this.intervalsLoaded = true;\n        this.args.onIntervalsLoaded?.(this.args.model);\n        this.getSummaryHistory().then(summaries => {\n          if (this.isDestroyed) return;\n          _.forEach(summaries, summary => {\n            this.testResults.processSummary(summary);\n          });\n          (0, _object.set)(resource, 'summaryHistory', summaries.reverse());\n          this.summaryHistoryLoaded = true;\n          this.args.onSummaryHistoryLoaded?.(this.args.model);\n          this.EventBus.publish(this.args.regionName + \".data.update\");\n        }, () => {\n          if (this.isDestroyed) return;\n          (0, _object.set)(resource, 'summaryHistory', []);\n          this.summaryHistoryLoaded = true;\n          this.args.onSummaryHistoryLoaded?.(this.args.model);\n          this.EventBus.publish(this.args.regionName + \".data.update\");\n        });\n      }, () => {\n        if (this.isDestroyed) return;\n        (0, _object.set)(resource, 'intervals', []);\n        this.intervalsLoaded = true;\n        this.summaryHistoryLoaded = true;\n        this.args.onIntervalsLoaded?.(this.args.model);\n        this.args.onSummaryHistoryLoaded?.(this.args.model);\n        this.EventBus.publish(this.args.regionName + \".data.update\");\n      });\n    }\n    loadBaselineResource(resource) {\n      this.intervalsLoaded = false;\n      this.summaryHistoryLoaded = false;\n      const execId = this.args.regionSummaryBaseline?.execution?.id;\n      const execRegionId = this.args.regionSummaryBaseline?.executionRegion?.id;\n      const isAll = this.args.regionName === 'ALL';\n      const uuid = this.args.regionSummaryBaseline?.execution?.uuid;\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        resourceId: resource.id\n      };\n      if (!isAll) {\n        params.executionRegionId = execRegionId;\n      }\n      const hasUuid = _.isString(uuid);\n      if (hasUuid) params.comparison = true;\n      const getResource = hasUuid ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getLoadTestResource(execId, execRegionId, resource.id, zoomInfo);\n      getResource.then(results => {\n        if (this.isDestroyed) return;\n        if (results.summary) {\n          this.testResults.processSummary(results.summary);\n          (0, _object.set)(resource, 'summary', results.summary);\n        }\n        if (_.isArray(results.intervals)) {\n          this.testResults.processIntervals(results.intervals, this.args.metricDefsByName, this.args.regionSummaryBaseline?.summary || results.summary);\n          (0, _object.set)(resource, 'intervals', _lib.default.addHistoryToIntervals(results.intervals));\n        } else {\n          (0, _object.set)(resource, 'intervals', []);\n        }\n        this.intervalsLoaded = true;\n        this.args.onBaselineIntervalsLoaded?.();\n        this.getSummaryHistory(this.args.baselineExecution).then(summaries => {\n          if (this.isDestroyed) return;\n          _.forEach(summaries, summary => {\n            this.testResults.processSummary(summary);\n          });\n          (0, _object.set)(resource, 'summaryHistory', summaries.reverse());\n          this.summaryHistoryLoaded = true;\n          this.args.onBaselineSummaryHistoryLoaded?.();\n        }, () => {\n          // this.intervalsLoaded = true;\n          // this.args.onBaselineIntervalsLoaded?.();\n          if (this.isDestroyed) return;\n          this.summaryHistoryLoaded = true;\n          this.args.onBaselineSummaryHistoryLoaded?.();\n          (0, _object.set)(resource, 'summaryHistory', []);\n        });\n      }, () => {\n        if (this.isDestroyed) return;\n        this.intervalsLoaded = true;\n        this.args.onBaselineIntervalsLoaded?.();\n        this.summaryHistoryLoaded = true;\n        this.args.onBaselineSummaryHistoryLoaded?.();\n        (0, _object.set)(resource, 'intervals', []);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"command\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"commandStreams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"commandStreamSummary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedObject({});\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"resourcesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"baselineResourcesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"intervalsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"bucketsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"summaryHistoryLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"sessionsList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"selectedSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"selectedVideoSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"baselineSelectedSessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"firstAttemptCommandSessionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"videosCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"videosLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"videoSeekPosition\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"baselineVideoSeekPosition\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"downloadAssertionsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"baselineAssertionsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"selectedVideo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"meteredWidgetsWithBucketsTable\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"meteredWidgetsWithBucketsTable\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineExecutionSummary\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineExecutionSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineExecutionSummaryHistory\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineExecutionSummaryHistory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"summaryHistory\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"summaryHistory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"intervals\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"intervals\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"intervalsBaseline\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"intervalsBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"buckets\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"buckets\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketsBaseline\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketsBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSetBaselineExecutionSummaryOnModel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSetBaselineExecutionSummaryOnModel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateSessionNum\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateSessionNum\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onExecutionCompleted\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionCompleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onIntervalsRelatedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onIntervalsRelatedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBaselineIntervalsRelatedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBaselineIntervalsRelatedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onImagesRelatedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onImagesRelatedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHistoryRelatedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHistoryRelatedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chartUpdatedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chartUpdatedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gridConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gridConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourceSelectedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourceSelectedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineResourceSelectedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineResourceSelectedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearSelectedResource\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearSelectedResource\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearBaselineSelectedResource\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearBaselineSelectedResource\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showVideoDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showVideoDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcomeModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcomeModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"glanceConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"glanceConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videosLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videosLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sessionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sessionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineSessionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineSessionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDownloadAssertionModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDownloadAssertionModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openSuiteResultsDownloadUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openSuiteResultsDownloadUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openCommandResultsDownloadUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openCommandResultsDownloadUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSeekPositionAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSeekPositionAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineVideoSeekPositionAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineVideoSeekPositionAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleDraggablePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleDraggablePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestRegionalDashboard);\n});","define(\"@testable/shared-ui/components/load-test-result/action-menu\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _server, _environment, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex flex-wrap gap-1 justify-content-end\">\n  \n    {{#if this.showViewLayoutButton}}\n      <BsButtonGroup class=\"no-print\" @value={{this.viewLayout}} @type=\"radio\" @onChange={{@onChangeViewLayout}} as |bg|>\n        <bg.button @type=\"success\" @value=\"loadTestResults\">Standard View</bg.button>\n        <bg.button @type=\"success\" @value=\"loadTestResultsView\">Customizable View</bg.button>\n      </BsButtonGroup>\n    {{/if}}\n  \n    <div class='btn-group no-print text-nowrap'>\n      {{#if (eq @model.configuration.script.metadata.bindings 'remote')}}\n        {{#if @model.completed}}\n          <button {{on 'click' this.showShareModal}} type='button' class='btn btn-primary'><Ui::Icon @icon='fa fa-share' />\n            Share Results\n          </button>\n        {{else if @model.finishedAt}}\n          <button type='button' class='btn btn-primary' disabled><Ui::Icon @icon='fa fa-stop' /> Stop</button>\n        {{else}}\n          <button {{on 'click' this.stopExecution}} type='button' class='btn btn-primary'><Ui::Icon @icon='fa fa-stop' />\n            Stop</button>\n        {{/if}}\n      {{else}}\n        {{#if (or @model.minimalHeader @isViewer)}}\n          <button type='button' {{on 'click' this.exportToPdf}} class='btn btn-primary'><Ui::Icon @icon='fa fa-file-pdf' />\n            Export to PDF</button>\n        {{else}}\n          {{#if @model.completed}}\n            <button {{on 'click' (fn (mut this.showTestSummaryModal) true)}} type='button' class='btn btn-primary'><Ui::Icon\n                @icon='fa fa-play'\n              />\n              Repeat\n            </button>\n          {{else if @model.finishedAt}}\n            <button type='button' class='btn btn-primary' disabled><Ui::Icon @icon='fa fa-stop' /> Stop</button>\n          {{else}}\n            <button {{on 'click' this.stopExecution}} type='button' class='btn btn-primary'><Ui::Icon @icon='fa fa-stop' />\n              Stop\n            </button>\n          {{/if}}\n        {{/if}}\n      {{/if}}\n      <button type='button' class='btn btn-primary dropdown-toggle' data-bs-toggle='dropdown'>\n        <span class='sr-only'>Toggle Dropdown</span>\n      </button>\n      <ul class='dropdown-menu dropdown-menu-end' role='menu'>\n        {{#unless @model.minimalHeader}}\n          {{#if (and (not @model.finishedAt) (not @model.completed))}}\n            <li class='dropdown-header'>Live Actions</li>\n            <li><a {{on 'click' this.stopExecution}} role='button'>\n              <Ui::Icon role=\"presentation\" @icon='fa fa-stop' />Stop</a>\n            </li>\n            {{#if (not-eq @model.configuration.script.metadata.bindings 'remote')}}\n              {{#unless @isMultiUser}}\n                <li class='{{if @model.running \"\" \"disabled\"}}'><a {{on 'click' (fn (mut this.showExtendTestModal) true)}} role='button'>\n                  <Ui::Icon role=\"presentation\" @icon='fa fa-expand' />Extend</a>\n                </li>\n              {{/unless}}\n              <li class='{{if @model.running \"\" \"disabled\"}}'><a {{on 'click' this.addUsers}} role='button'>\n                <Ui::Icon role=\"presentation\" @icon='fa fa-plus' />\n                  Add\n                  {{if @isMultiUser 'Engines' 'Users'}}</a></li>\n              {{#if (or (eq @model.script.scriptType 'Selenium') (eq @model.script.scriptType 'Code'))}}\n                <li class='{{if @model.running \"\" \"disabled\"}}'><a {{on 'click' (fn (mut this.showLiveEventModal) true)}} role='button'>\n                  <Ui::Icon role=\"presentation\" @icon='fa fa-bolt'/>\n                    Send Live Event</a>\n                </li>\n              {{/if}}\n            {{/if}}\n            <li class='divider'></li>\n          {{/if}}\n          <li class='dropdown-header'>Test Related</li>\n  \n          {{#unless @isViewer}}\n            {{#if (not-eq @model.configuration.script.metadata.bindings 'remote')}}\n              <li><a {{on 'click' (fn (mut this.showTestSummaryModal) true)}} role='button'>\n                <Ui::Icon role=\"presentation\" @icon='fa fa-play' /> Repeat</a></li>\n              {{#unless this.isMonitoring}}\n                <li>\n                  <LinkTo @route='update-test' @model={{@model.confId}}>\n                    <Ui::Icon @icon='fa fa-edit' /> Edit Configuration\n                  </LinkTo>\n                </li>\n              {{/unless}}\n              <li>\n                <LinkTo @route='scenario' @model={{@model.configuration.script.id}}>\n                  <Ui::Icon @icon='fa fa-edit' /> Edit Scenario\n                </LinkTo>\n              </li>\n            {{/if}}\n  \n            {{#unless this.isMonitoring}}\n              <li>\n                <LinkTo @route='loadTest' @model={{@model.confId}}>\n                  <Ui::Icon @icon='fa fa-history' /> History\n                </LinkTo>\n              </li>\n            {{/unless}}\n            <li><a {{on 'click' this.showShareModal}} role='button'>\n              <Ui::Icon role=\"presentation\" @icon='fa fa-share' /> Share Results</a></li>\n          {{/unless}}\n  \n          {{#if @model.completed}}\n            {{#unless @isBrowserBased}}\n              <li><a {{on 'click' @compareResults}} role='button'>\n                <Ui::Icon role=\"presentation\" @icon='fa fa-object-ungroup' />\n                  Compare Results</a></li>\n            {{/unless}}\n            {{#unless @isViewer}}\n              <li><a {{on 'click' this.deleteExecution}} role='button'>\n                <Ui::Icon role=\"presentation\" @icon='fa fa-trash' />\n                  Delete Execution</a></li>\n            {{/unless}}\n          {{/if}}\n        {{/unless}}\n        {{#unless (or @model.minimalHeader @isViewer)}}\n          <li>\n            <a {{on 'click' (fn (mut this.showTestResultBaselineModal) true)}} role='button'>\n              {{#if @model.isBaseline}}\n                <Ui::Icon role=\"presentation\" @icon='fa fa-trash' /> Unset As Baseline\n              {{else}}\n                <Ui::Icon role=\"presentation\" @icon='fa fa-history' /> Set As Baseline\n              {{/if}}\n            </a>\n          </li>\n        {{/unless}}\n        {{#unless @model.minimalHeader}}\n          <li class='divider'></li>\n          <li class='dropdown-header'>Export</li>\n        {{/unless}}\n        <li><a {{on 'click' this.exportToPdf}} role='button'>\n          <Ui::Icon role=\"presentation\" @icon='fa fa-file-pdf' /> Export to PDF</a></li>\n        {{#if @hasResourcesGrid}}\n          <li><a {{on 'click' this.exportSummaryToCsv}} role='button'>\n            <Ui::Icon role=\"presentation\" @icon='fa fa-download' />\n              Export Summary to CSV</a></li>\n        {{/if}}\n        <li>\n          <a {{on 'click' (fn (mut this.showExportCsvModal) true)}} role='button'>\n            <Ui::Icon role=\"presentation\" @icon='fa fa-file-excel' />\n            Export Results to CSV\n          </a>\n        </li>\n  \n        {{yield (hash ViewManagement=(component \"empty\" ))}}\n  \n        {{#if @isSuperAdmin}}\n          <li class='divider'></li>\n          <li class='dropdown-header'>Admin Options</li>\n          {{#if (and (not @model.running) (not @model.completed))}}\n            <li><a {{on 'click' this.recalculateSummary}} role='button'>\n              <Ui::Icon role=\"presentation\" @icon='fa fa-tired' /> Force Finish</a></li>\n          {{/if}}\n          {{#if @model.completed}}\n            <li><a {{on 'click' this.recalculateAggregations}} role='button'>\n              <Ui::Icon role=\"presentation\" @icon='fa fa-calculator' />\n                Recalculate Aggregations</a></li>\n          {{/if}}\n        {{/if}}\n      </ul>\n      <span class='m-l-10 {{if @model.completed \"hidden\"}}'>\n        <input\n          id='connectionState'\n          type='checkbox'\n          data-bs-toggle='toggle'\n          data-on='Connected'\n          data-off='Disconnected'\n          data-width='100'\n          data-onstyle='success'\n          data-offstyle='danger'\n        />\n      </span>\n  \n    </div>\n  </div>\n  \n  \n  {{#if this.showExtendTestModal}}\n    <ExtendTestModal @model={{@model}}\n                     @modalClosed={{fn (mut this.showExtendTestModal) false}} />\n  {{/if}}\n  \n  {{#if this.showAddUsersModal}}\n    <TestAddUserModal @model={{@model}}\n                      @regionSummaries={{@regionSummaries}}\n                      @selectedRegionSummary={{@regionSummary}}\n                      @onClose={{fn (mut this.showAddUsersModal) false}} />\n  {{/if}}\n  \n  {{#if this.showLiveEventModal}}\n    <LiveEventModal @execution={{@model.id}}\n                    @modalClosed={{fn (mut this.showLiveEventModal) false}} />\n  {{/if}}\n  \n  {{#if this.showTestResultBaselineModal}}\n    <TestResultBaselineModal\n            @model={{@model}}\n            @closeModal={{this.testResultBaselineModalClosed}}\n    />\n  {{/if}}\n  \n  {{#if this.showWaitingModal}}\n    <WaitingModal @message={{this.waitingMessage}}\n                  @promise={{this.pendingAction}}\n                  @modalClosed={{this.waitingModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showExportCsvModal}}\n    <ExportCsvModal @exportToCsvUrl={{@exportToCsvUrl}}\n                    @modalClosed={{fn (mut this.showExportCsvModal) false}} />\n  {{/if}}\n  \n  {{#if this.showTestSummaryModal}}\n    <TestSummaryModal @confId={{@model.confId}}\n                      @gotoExec={{@executionStarted}}\n                      @gotoConf={{this.gotoUpdateConf}}\n                      @modalClosed={{this.testSummaryModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"d-flex flex-wrap gap-1 justify-content-end\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showViewLayoutButton\\\"]],[[[1,\\\"    \\\"],[8,[39,2],[[24,0,\\\"no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewLayout\\\"]],\\\"radio\\\",[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"loadTestResults\\\"]],[[\\\"default\\\"],[[[[1,\\\"Standard View\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\"],[\\\"success\\\",\\\"loadTestResultsView\\\"]],[[\\\"default\\\"],[[[[1,\\\"Customizable View\\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"btn-group no-print text-nowrap\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3,[\\\"configuration\\\",\\\"script\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[41,[30,3,[\\\"completed\\\"]],[[[1,\\\"        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"showShareModal\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-share\\\"]],null],[1,\\\"\\\\n          Share Results\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"finishedAt\\\"]],[[[1,\\\"        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\" Stop\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"stopExecution\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\"\\\\n          Stop\\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]],[]]]],[]],[[[41,[28,[37,7],[[30,3,[\\\"minimalHeader\\\"]],[30,4]],null],[[[1,\\\"        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"exportToPdf\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-file-pdf\\\"]],null],[1,\\\"\\\\n          Export to PDF\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"completed\\\"]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showTestSummaryModal\\\"]]],null],true],null]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\"\\\\n            Repeat\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"finishedAt\\\"]],[[[1,\\\"          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\" Stop\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"stopExecution\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\"\\\\n            Stop\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]],[]]]],[]]]],[]]],[1,\\\"    \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary dropdown-toggle\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Toggle Dropdown\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,3,[\\\"minimalHeader\\\"]]],[[[41,[28,[37,13],[[28,[37,14],[[30,3,[\\\"finishedAt\\\"]]],null],[28,[37,14],[[30,3,[\\\"completed\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Live Actions\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"stopExecution\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\"Stop\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,3,[\\\"configuration\\\",\\\"script\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[41,[51,[30,5]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[30,3,[\\\"running\\\"]],\\\"\\\",\\\"disabled\\\"]]]],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showExtendTestModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[1,\\\"Extend\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[30,3,[\\\"running\\\"]],\\\"\\\",\\\"disabled\\\"]]]],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"addUsers\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n                Add\\\\n                \\\"],[1,[52,[30,5],\\\"Engines\\\",\\\"Users\\\"]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[28,[37,3],[[30,3,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Selenium\\\"],null],[28,[37,3],[[30,3,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Code\\\"],null]],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[30,3,[\\\"running\\\"]],\\\"\\\",\\\"disabled\\\"]]]],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showLiveEventModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-bolt\\\"]],null],[1,\\\"\\\\n                  Send Live Event\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Test Related\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4]],[[[41,[28,[37,17],[[30,3,[\\\"configuration\\\",\\\"script\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showTestSummaryModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\" Repeat\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,3,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit Configuration\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario\\\",[30,3,[\\\"configuration\\\",\\\"script\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit Scenario\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,3,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-history\\\"]],null],[1,\\\" History\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"showShareModal\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-share\\\"]],null],[1,\\\" Share Results\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"completed\\\"]],[[[41,[51,[30,6]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,7]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-object-ungroup\\\"]],null],[1,\\\"\\\\n                Compare Results\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,4]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"deleteExecution\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n                Delete Execution\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]],null],[41,[51,[28,[37,7],[[30,3,[\\\"minimalHeader\\\"]],[30,4]],null]],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n          \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showTestResultBaselineModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"isBaseline\\\"]],[[[1,\\\"              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Unset As Baseline\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-history\\\"]],null],[1,\\\" Set As Baseline\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,3,[\\\"minimalHeader\\\"]]],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Export\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"exportToPdf\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file-pdf\\\"]],null],[1,\\\" Export to PDF\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[30,8],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"exportSummaryToCsv\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n            Export Summary to CSV\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"showExportCsvModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file-excel\\\"]],null],[1,\\\"\\\\n          Export Results to CSV\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[18,14,[[28,[37,20],null,[[\\\"ViewManagement\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,9],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Admin Options\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[28,[37,14],[[30,3,[\\\"running\\\"]]],null],[28,[37,14],[[30,3,[\\\"completed\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"recalculateSummary\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-tired\\\"]],null],[1,\\\" Force Finish\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3,[\\\"completed\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"recalculateAggregations\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-calculator\\\"]],null],[1,\\\"\\\\n              Recalculate Aggregations\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,1],[15,0,[29,[\\\"m-l-10 \\\",[52,[30,3,[\\\"completed\\\"]],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,\\\"input\\\"],[14,1,\\\"connectionState\\\"],[14,\\\"data-bs-toggle\\\",\\\"toggle\\\"],[14,\\\"data-on\\\",\\\"Connected\\\"],[14,\\\"data-off\\\",\\\"Disconnected\\\"],[14,\\\"data-width\\\",\\\"100\\\"],[14,\\\"data-onstyle\\\",\\\"success\\\"],[14,\\\"data-offstyle\\\",\\\"danger\\\"],[14,4,\\\"checkbox\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[30,0,[\\\"showExtendTestModal\\\"]],[[[1,\\\"  \\\"],[8,[39,23],null,[[\\\"@model\\\",\\\"@modalClosed\\\"],[[30,3],[28,[37,8],[[28,[37,9],[[30,0,[\\\"showExtendTestModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAddUsersModal\\\"]],[[[1,\\\"  \\\"],[8,[39,24],null,[[\\\"@model\\\",\\\"@regionSummaries\\\",\\\"@selectedRegionSummary\\\",\\\"@onClose\\\"],[[30,3],[30,10],[30,11],[28,[37,8],[[28,[37,9],[[30,0,[\\\"showAddUsersModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLiveEventModal\\\"]],[[[1,\\\"  \\\"],[8,[39,25],null,[[\\\"@execution\\\",\\\"@modalClosed\\\"],[[30,3,[\\\"id\\\"]],[28,[37,8],[[28,[37,9],[[30,0,[\\\"showLiveEventModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestResultBaselineModal\\\"]],[[[1,\\\"  \\\"],[8,[39,26],null,[[\\\"@model\\\",\\\"@closeModal\\\"],[[30,3],[30,0,[\\\"testResultBaselineModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showWaitingModal\\\"]],[[[1,\\\"  \\\"],[8,[39,27],null,[[\\\"@message\\\",\\\"@promise\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"waitingMessage\\\"]],[30,0,[\\\"pendingAction\\\"]],[30,0,[\\\"waitingModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showExportCsvModal\\\"]],[[[1,\\\"  \\\"],[8,[39,28],null,[[\\\"@exportToCsvUrl\\\",\\\"@modalClosed\\\"],[[30,12],[28,[37,8],[[28,[37,9],[[30,0,[\\\"showExportCsvModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestSummaryModal\\\"]],[[[1,\\\"  \\\"],[8,[39,29],null,[[\\\"@confId\\\",\\\"@gotoExec\\\",\\\"@gotoConf\\\",\\\"@modalClosed\\\"],[[30,3,[\\\"confId\\\"]],[30,13],[30,0,[\\\"gotoUpdateConf\\\"]],[30,0,[\\\"testSummaryModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@onChangeViewLayout\\\",\\\"bg\\\",\\\"@model\\\",\\\"@isViewer\\\",\\\"@isMultiUser\\\",\\\"@isBrowserBased\\\",\\\"@compareResults\\\",\\\"@hasResourcesGrid\\\",\\\"@isSuperAdmin\\\",\\\"@regionSummaries\\\",\\\"@regionSummary\\\",\\\"@exportToCsvUrl\\\",\\\"@executionStarted\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-button-group\\\",\\\"eq\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"or\\\",\\\"fn\\\",\\\"mut\\\",\\\"span\\\",\\\"ul\\\",\\\"unless\\\",\\\"and\\\",\\\"not\\\",\\\"li\\\",\\\"a\\\",\\\"not-eq\\\",\\\"link-to\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"input\\\",\\\"extend-test-modal\\\",\\\"test-add-user-modal\\\",\\\"live-event-modal\\\",\\\"test-result-baseline-modal\\\",\\\"waiting-modal\\\",\\\"export-csv-modal\\\",\\\"test-summary-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/action-menu.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadTestResultActionMenuComponent = _exports.default = (_class = class LoadTestResultActionMenuComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"showAddUsersModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showTestResultBaselineModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showTestSummaryModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showWaitingModal\", _descriptor5, this);\n      _initializerDefineProperty(this, \"waitingMessage\", _descriptor6, this);\n      _initializerDefineProperty(this, \"pendingAction\", _descriptor7, this);\n    }\n    get viewLayout() {\n      if (this.args.qpViewLayout) {\n        return this.args.qpViewLayout === 'customizable' ? 'loadTestResultsView' : 'loadTestResults';\n      }\n      return this.args.isBrowserBased ? 'loadTestResults' : 'loadTestResultsView';\n    }\n    get showViewLayoutButton() {\n      return !this.args.model?.uuid && this.args.model.testType !== 'Load' && ['Selenium', 'Puppeteer', 'Playwright'].includes(this.args.model?.script?.scriptType);\n    }\n    showShareModal() {\n      $('#shareResultsModal').modal('show');\n    }\n    stopExecution() {\n      _lib.default.confirm('Are you sure you want to stop this test execution?', 'OK', () => {\n        _server.default.stopLoadTestExecution(this.args.model.id).then(() => {\n          _lib.default.info(\"Execution stop requested\");\n        });\n      }, 'Cancel');\n    }\n    deleteExecution() {\n      let msg = '';\n      if (this.args.model.isBaseline) {\n        msg = `This test result is the baseline for this test configuration. Deleting it will result in future test\n            runs being compared against a weighted average of the 10 most recent test runs unless a new baseline is set. `;\n      }\n      msg += 'Are you sure you want to delete this execution?';\n      _lib.default.confirm(msg, 'OK', () => {\n        _server.default.deleteLoadTestExecution(this.args.model.id).then(() => {\n          this.args.executionDeleted?.(this.args.model.id);\n        });\n      }, 'Cancel');\n    }\n    testResultBaselineModalClosed(isBaseline) {\n      this.showTestResultBaselineModal = false;\n      if (isBaseline) {\n        this.args.updateIsBaseline(!this.args.model.isBaseline);\n      }\n    }\n    exportSummaryToCsv() {\n      let table = $('#ALL_resultsGrid').DataTable();\n      table.button(1).trigger();\n    }\n    addUsers() {\n      if (this.args.model.running) this.showAddUsersModal = true;\n    }\n    recalculateSummary() {\n      this.api.testCases.recalculateSummary(this.args.model.id).then(() => {\n        _lib.default.info('Force finish requested');\n      });\n    }\n    recalculateAggregations() {\n      this.api.testCases.recalculateAggregations(this.args.model.id).then(() => {\n        _lib.default.info('Recalculation of aggregations requested');\n      });\n    }\n    exportToPdf() {\n      const id = this.args.model.id;\n      const uuid = this.args.model.uuid;\n      this.waitingMessage = 'Generating PDF...';\n      this.pendingAction = uuid ? _server.default.exportPublicToPdf(uuid, id, this.args.viewRelatedParams) : _server.default.exportToPdf(id, this.args.viewRelatedParams);\n      this.showWaitingModal = true;\n    }\n    waitingModalClosed() {\n      this.showWaitingModal = false;\n      this.waitingMessage = null;\n      this.pendingAction = null;\n    }\n    testSummaryModalClosed() {\n      if (!this.isDestroyed) {\n        this.showTestSummaryModal = false;\n      }\n    }\n    gotoUpdateConf(conf) {\n      this.showTestSummaryModal = false;\n      this.args.gotoUpdateConf(conf);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showAddUsersModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showTestResultBaselineModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showTestSummaryModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showWaitingModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"waitingMessage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"pendingAction\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showShareModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showShareModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopExecution\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopExecution\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteExecution\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteExecution\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testResultBaselineModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testResultBaselineModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"exportSummaryToCsv\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"exportSummaryToCsv\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addUsers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addUsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"recalculateSummary\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"recalculateSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"recalculateAggregations\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"recalculateAggregations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"exportToPdf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"exportToPdf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"waitingModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"waitingModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testSummaryModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testSummaryModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoUpdateConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoUpdateConf\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestResultActionMenuComponent);\n});","define(\"@testable/shared-ui/components/load-test-result/child-executions\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template\", \"@testable/shared-ui/utils/lib\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _template, _lib, _tracking, _service, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template\",0,\"@testable/shared-ui/utils/lib\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @showResults}}\n    <div class=\"panel\" {{did-insert this.loadChildExecutions}}>\n      <div class=\"panel-body\">\n        {{#if @comparisonId}}\n        <div class=\"text-center\"><h5>{{@title}}</h5></div>\n        {{/if}}\n        <table class=\"table table-hover\">\n          <thead>\n            <tr>\n              <th width=\"50\"></th>\n              <th class=\"text-center\" width=\"90\">Outcome</th>\n              <th>Run At</th>\n              <th width=\"100\">Browsers</th>\n              <th>Tags</th>\n              <th>Conf</th>\n              <th>Scenario</th>\n            </tr>\n          </thead>\n          <tbody>\n            {{#each this.executionsList as |execution|}}\n              <tr>\n                <td>\n                  <LinkTo @route='loadTestResults' @model={{execution.id}} target=\"_blank\">\n                    <i class=\"fa fa-search\"></i>\n                  </LinkTo>\n                </td>\n                <td>\n                  <a role=\"button\" {{on \"click\" (fn @showTestOutcomeModal execution false)}}>{{this.getOutcome execution}}</a>\n                </td>\n                <td>{{this.getDateTime execution}}</td>\n                <td>{{this.getBrowsers execution}}</td>\n                <td>\n                  {{#each execution.tags as |tag|}}\n                    <LinkTo @route=\"reports.by-tag\" @model={{tag.id}} target=\"_blank\" class=\"tags\">{{tag.name}}</LinkTo>\n                  {{/each}}\n                </td>\n                <td>\n                  <LinkTo @route='loadTest' @model={{execution.confId}} target=\"_blank\">\n                    <span>{{execution.confName}}</span>\n                  </LinkTo>\n                </td>\n                <td>\n                  <LinkTo @route='scenario' @model={{execution.scenarioId}} target=\"_blank\">\n                    <span>{{execution.scenarioName}}</span>\n                  </LinkTo>\n                </td>\n              </tr>\n            {{else if this.isLoading}}\n              <tr><td colspan=\"7\">Loading...</td></tr>\n            {{/each}}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"panel\\\"],[4,[38,2],[[30,0,[\\\"loadChildExecutions\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[10,\\\"h5\\\"],[12],[1,[30,3]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-hover\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"50\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,0,\\\"text-center\\\"],[14,\\\"width\\\",\\\"90\\\"],[12],[1,\\\"Outcome\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Run At\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"100\\\"],[12],[1,\\\"Browsers\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Tags\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Conf\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Scenario\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"executionsList\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,12],[[24,\\\"target\\\",\\\"_blank\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,4,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,\\\"i\\\"],[14,0,\\\"fa fa-search\\\"],[12],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,15],[\\\"click\\\",[28,[37,16],[[30,5],[30,4],false],null]],null],[12],[1,[28,[30,0,[\\\"getOutcome\\\"]],[[30,4]],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,[28,[30,0,[\\\"getDateTime\\\"]],[[30,4]],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,[28,[30,0,[\\\"getBrowsers\\\"]],[[30,4]],null]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,4,[\\\"tags\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[39,12],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"tags\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"reports.by-tag\\\",[30,6,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,6,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,12],[[24,\\\"target\\\",\\\"_blank\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,4,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,[30,4,[\\\"confName\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,12],[[24,\\\"target\\\",\\\"_blank\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario\\\",[30,4,[\\\"scenarioId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,[30,4,[\\\"scenarioName\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"7\\\"],[12],[1,\\\"Loading...\\\"],[13],[13],[1,\\\"\\\\n          \\\"]],[]],null]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@showResults\\\",\\\"@comparisonId\\\",\\\"@title\\\",\\\"execution\\\",\\\"@showTestOutcomeModal\\\",\\\"tag\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"h5\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"link-to\\\",\\\"i\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/child-executions.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadTestResultChildExecutionsComponent = _exports.default = (_class = class LoadTestResultChildExecutionsComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"executionsList\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n    }\n    getDateTime(execution) {\n      return _lib.default.displayDateTime(execution.startedAt || execution.createdAt);\n    }\n    getOutcome(execution) {\n      return _loadTest.default.getExecutionOutcomeHtml(execution, false);\n    }\n    getBrowsers(execution) {\n      const {\n        browsers,\n        browsersExecuted\n      } = execution;\n      const keys = browsersExecuted.length ? browsersExecuted : browsers.map(b => b.browserKey);\n      if (keys.length) {\n        return (0, _template.htmlSafe)(keys.map(k => _lib.default.toBrowserVersionLabel(k)).join(''));\n      }\n      return '-';\n    }\n    async loadChildExecutions() {\n      if (this.executionsList) return;\n      this.isLoading = true;\n      const {\n        id,\n        uuid\n      } = this.args.model;\n      let response = await this.api.executions.getExecutionChildResults(id, uuid);\n      this.executionsList = response;\n      this.isLoading = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"executionsList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadChildExecutions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadChildExecutions\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestResultChildExecutionsComponent);\n});","define(\"@testable/shared-ui/components/load-test-result/create-test\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (or @isBaselineActive @isBaseline)}}\n    <div class=\"heading sticky-result-header\"><h4><strong>{{if @isBaseline \"Baseline\" \"Current\"}} Test</strong></h4></div>\n  {{/if}}\n  {{#if (and (not @isPublic) (not-eq @model.script.metadata.bindings 'remote'))}}\n    {{#unless (or @publicView @isViewer)}}\n      <LinkTo\n        @route='update-test'\n        @model={{@model.confId}}\n        target=\"_blank\"\n        class=\"btn btn-primary m-t-10\">\n        <Ui::Icon @icon=\"fa fa-edit\" class=\"m-r-5\" />Edit Latest Configuration</LinkTo>\n    {{/unless}}\n  {{/if}}\n  \n  <CreateTest @testId={{@model.confId}}\n    @name={{@model.confName}}\n    @testType={{@model.testType}}\n    @concurrentClients={{if (not-eq @model.profileType 'BreakingPoint') @model.concurrentClients}}\n    @iterationSleepSecs={{@model.iterationSleepSecs}}\n    @modelProviders={{@model.configuration.providers}}\n    @rampupSecs={{@model.rampupSecs}}\n    @iterations={{@model.iterations}}\n    @durationSecs={{@model.durationSecs}}\n    @executionRegions={{@model.regions}}\n    @execution={{@model}}\n    @testCaseId={{@model.testCaseId}}\n    @orgId={{@model.configuration.testCase.organization.id}}\n    @modelMetricDefs={{@model.configuration.testCase.metricDefs}}\n    @scripts={{@model.scripts}}\n    @selectedScript={{@model.script}}\n    @scriptParamsOut={{@scriptParamsObj}}\n    @percentiles={{@model.percentiles}}\n    @triggers={{@model.triggers}}\n    @testLengthType={{if @model.durationSecs 'duration' 'iterations'}}\n    @profileType={{@model.profileType}}\n    @startConcurrentClients={{@model.startConcurrentClients}}\n    @step={{@model.step}}\n    @outputFileRetention={{@model.outputFileRetention}}\n    @outputFileMaxCount={{@model.outputFileMaxCount}}\n    @tracesEnabled={{@model.tracesEnabled}}\n    @onlyCaptureFailure={{@model.onlyCaptureFailure}}\n    @schedules={{@model.schedules}}\n    @lastSummary={{@model.summary}}\n    @notifications={{@notifications}}\n    @ipFilters={{@model.ipFilters}}\n    @network={{@model.network}}\n    @imageDiffMode={{@model.imageDiffMode}}\n    @manualStart={{@model.manualStart}}\n    @hasOverriddenHostFiles={{true}}\n    @hostsFile={{@model.hostsFile}}\n    @hostAliasesFile={{@model.hostAliasesFile}}\n    @reassignOnFail={{@model.reassignOnFail}}\n    @viewOnly={{true}}\n    @browsers={{@model.browsers}}\n    @locationsDistribution={{@model.locationsDistribution}}\n    @maxDuration={{@model.maxDuration}}\n    @executionDetails={{true}}\n    @showCancel={{false}}\n    @allowScenarioModal={{false}}\n    @testRunnerSettingsServer={{@model.configuration.testRunnerSettings}}\n    @loadType={{@model.loadType}}\n    @showUsageHistoryAction={{@showUsageHistoryAction}}\n    @publicView={{@publicView}}\n    @isBaseline={{@isBaseline}}\n  />\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[30,2]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"heading sticky-result-header\\\"],[12],[10,\\\"h4\\\"],[12],[10,\\\"strong\\\"],[12],[1,[52,[30,2],\\\"Baseline\\\",\\\"Current\\\"]],[1,\\\" Test\\\"],[13],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,5],[[28,[37,6],[[30,3]],null],[28,[37,7],[[30,4,[\\\"script\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null]],null],[[[41,[51,[28,[37,1],[[30,5],[30,6]],null]],[[[1,\\\"    \\\"],[8,[39,9],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"btn btn-primary m-t-10\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,4,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[39,10],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\"Edit Latest Configuration\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[8,[39,11],null,[[\\\"@testId\\\",\\\"@name\\\",\\\"@testType\\\",\\\"@concurrentClients\\\",\\\"@iterationSleepSecs\\\",\\\"@modelProviders\\\",\\\"@rampupSecs\\\",\\\"@iterations\\\",\\\"@durationSecs\\\",\\\"@executionRegions\\\",\\\"@execution\\\",\\\"@testCaseId\\\",\\\"@orgId\\\",\\\"@modelMetricDefs\\\",\\\"@scripts\\\",\\\"@selectedScript\\\",\\\"@scriptParamsOut\\\",\\\"@percentiles\\\",\\\"@triggers\\\",\\\"@testLengthType\\\",\\\"@profileType\\\",\\\"@startConcurrentClients\\\",\\\"@step\\\",\\\"@outputFileRetention\\\",\\\"@outputFileMaxCount\\\",\\\"@tracesEnabled\\\",\\\"@onlyCaptureFailure\\\",\\\"@schedules\\\",\\\"@lastSummary\\\",\\\"@notifications\\\",\\\"@ipFilters\\\",\\\"@network\\\",\\\"@imageDiffMode\\\",\\\"@manualStart\\\",\\\"@hasOverriddenHostFiles\\\",\\\"@hostsFile\\\",\\\"@hostAliasesFile\\\",\\\"@reassignOnFail\\\",\\\"@viewOnly\\\",\\\"@browsers\\\",\\\"@locationsDistribution\\\",\\\"@maxDuration\\\",\\\"@executionDetails\\\",\\\"@showCancel\\\",\\\"@allowScenarioModal\\\",\\\"@testRunnerSettingsServer\\\",\\\"@loadType\\\",\\\"@showUsageHistoryAction\\\",\\\"@publicView\\\",\\\"@isBaseline\\\"],[[30,4,[\\\"confId\\\"]],[30,4,[\\\"confName\\\"]],[30,4,[\\\"testType\\\"]],[52,[28,[37,7],[[30,4,[\\\"profileType\\\"]],\\\"BreakingPoint\\\"],null],[30,4,[\\\"concurrentClients\\\"]]],[30,4,[\\\"iterationSleepSecs\\\"]],[30,4,[\\\"configuration\\\",\\\"providers\\\"]],[30,4,[\\\"rampupSecs\\\"]],[30,4,[\\\"iterations\\\"]],[30,4,[\\\"durationSecs\\\"]],[30,4,[\\\"regions\\\"]],[30,4],[30,4,[\\\"testCaseId\\\"]],[30,4,[\\\"configuration\\\",\\\"testCase\\\",\\\"organization\\\",\\\"id\\\"]],[30,4,[\\\"configuration\\\",\\\"testCase\\\",\\\"metricDefs\\\"]],[30,4,[\\\"scripts\\\"]],[30,4,[\\\"script\\\"]],[30,7],[30,4,[\\\"percentiles\\\"]],[30,4,[\\\"triggers\\\"]],[52,[30,4,[\\\"durationSecs\\\"]],\\\"duration\\\",\\\"iterations\\\"],[30,4,[\\\"profileType\\\"]],[30,4,[\\\"startConcurrentClients\\\"]],[30,4,[\\\"step\\\"]],[30,4,[\\\"outputFileRetention\\\"]],[30,4,[\\\"outputFileMaxCount\\\"]],[30,4,[\\\"tracesEnabled\\\"]],[30,4,[\\\"onlyCaptureFailure\\\"]],[30,4,[\\\"schedules\\\"]],[30,4,[\\\"summary\\\"]],[30,8],[30,4,[\\\"ipFilters\\\"]],[30,4,[\\\"network\\\"]],[30,4,[\\\"imageDiffMode\\\"]],[30,4,[\\\"manualStart\\\"]],true,[30,4,[\\\"hostsFile\\\"]],[30,4,[\\\"hostAliasesFile\\\"]],[30,4,[\\\"reassignOnFail\\\"]],true,[30,4,[\\\"browsers\\\"]],[30,4,[\\\"locationsDistribution\\\"]],[30,4,[\\\"maxDuration\\\"]],true,false,false,[30,4,[\\\"configuration\\\",\\\"testRunnerSettings\\\"]],[30,4,[\\\"loadType\\\"]],[30,9],[30,5],[30,2]]],null],[1,\\\"\\\\n\\\"]],[\\\"@isBaselineActive\\\",\\\"@isBaseline\\\",\\\"@isPublic\\\",\\\"@model\\\",\\\"@publicView\\\",\\\"@isViewer\\\",\\\"@scriptParamsObj\\\",\\\"@notifications\\\",\\\"@showUsageHistoryAction\\\"],[\\\"if\\\",\\\"or\\\",\\\"div\\\",\\\"h4\\\",\\\"strong\\\",\\\"and\\\",\\\"not\\\",\\\"not-eq\\\",\\\"unless\\\",\\\"link-to\\\",\\\"ui/icon\\\",\\\"create-test\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/create-test.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"create-test\"));\n});","define(\"@testable/shared-ui/components/load-test-result/info-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _template, _lib, _loadTest, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"tab-detail flex-wrap flex-sm-nowrap\">\n    <div class=\"w-100\">\n      <div class=\"text-right\">\n        <b>Test Case</b>\n        {{#if this.isMonitoring}}\n          {{@model.testCaseName}}\n        {{else}}\n          <LinkTo @route='view' @model={{@model.testCaseId}}><span\n                class=\"test-result-title-ellipsis\">{{@model.testCaseName}}</span></LinkTo>\n        {{/if}}\n      </div>\n      {{#if @model.isParent}}\n        <div class=\"text-right\"><b># of Child Results</b>{{@model.childExecutionCount}}</div>\n      {{else}}\n        <div class=\"text-right\">\n          <b>Scenario</b>\n          {{#if (and this.isMonitoring (eq @model.script.sourceType \"Recording\"))}}\n            {{@model.scenarioName}}\n          {{else}}\n            <a href=\"javascript:\" role=\"button\" {{on \"click\" (fn (mut this.showScenarioModal) true)}}>\n              {{@model.scenarioName}}\n            </a>\n          {{/if}}\n        </div>\n        <div class=\"text-right\">\n          <b>Configuration</b>\n          <div class=\"d-flex\">\n            {{#if this.isMonitoring}}\n              {{@model.confName}}\n            {{else}}\n              <LinkTo @route=\"loadTest\" @model={{@model.confId}}>\n                <Ui::Icon @icon=\"fa-history\" />\n              </LinkTo>\n              <a class=\"ml-2\" href=\"javascript:\" role=\"button\" {{on \"click\" (fn (mut this.showConfigurationModal) true)}}>\n                {{@model.confName}}\n              </a>\n            {{/if}}\n          </div>\n        </div>\n      {{/if}}\n      {{#if (or @mapRegions @mapRegionsBaseline)}}\n        <div class=\"text-right\">\n          <b>Locations</b>\n          {{if @baselineExecution \"Current:\"}}\n          {{#each @mapRegions as |location index|}}\n            {{if index ', '}}{{location.description}}\n          {{/each}}\n          {{#if @baselineExecution}}, Baseline:\n            {{#each @mapRegionsBaseline as |location index|}}\n              {{if index ', '}}{{location.description}}\n            {{/each}}\n          {{/if}}\n        </div>\n      {{/if}}\n  \n      <div class=\"text-right\">\n        <b>Cost</b>\n        <a href=\"javascript:\" role=\"button\" {{on \"click\" (fn @showUsageHistory @model.usageRecord.id)}}>\n          {{print-ccy @model.usageRecord.charge}}\n        </a>\n      </div>\n  \n      {{#if @model.parentExecutionId}}\n        <div class=\"text-right\">\n          <b>Parent Result</b>\n          <LinkTo @route='loadTestResults' @model={{@model.parentExecutionId}} class=\"test-result-title-ellipsis\">\n            View Parent >>>\n          </LinkTo>\n        </div>\n      {{/if}}\n  \n    </div>\n    <div class=\"w-100\">\n      <div class=\"text-right\">\n        <b>{{if @model.completed \"Outcome\" \"Status\"}}</b>\n        <div class=\"d-flex text-right\">\n          {{#if @model.completed}}\n            <a href=\"javascript:\" {{on \"click\" (fn @showTestOutcomeModal null false)}} role=\"button\">{{html-safe @outcomeHtml}}</a>\n          {{/if}}\n          <span class=\"align-content-center outcome-content m-l-5 label label-success no-print\">{{@status}}</span>\n          {{#if this.queuedRegions.length}}\n            <button\n              type=\"button\"\n              class=\"btn btn-link align-content-center m-l-5 no-print p-0\"\n              title=\"View test runner queues\"\n              {{on \"click\" (fn (mut this.showQueueModal) true)}}\n            >\n              <Ui::Icon @icon=\"fa fa-list-ol\" />\n            </button>\n          {{/if}}\n        </div>\n      </div>\n      <div class=\"text-right\">\n        <b>Run At</b>\n        <div class=\"m-r-4\">\n          <span class=\"outcome-content m-l-5 active\" data-bs-placement=\"bottom\" data-bs-toggle=\"popover\"\n            data-bs-trigger=\"hover\"\n            data-bs-content=\"{{started-at-popover\n                              @model.createdAt\n                              @model.startedAt\n                              @model.finishedAt\n                              @model.queueStartedAt\n                              @model.queueFinishedAt}}\"\n            data-bs-html=\"true\">{{#if @model.finishedAt}}{{@finishedAt}}{{else}}{{@startedAt}}{{/if}}\n          </span>\n  \n          {{#if this.showLatestRun}}\n            <LinkTo @route='loadTestResults' @model={{@model.configuration.lastRunExecutionId}} class=\"outcome-content m-l-5 no-print\">\n              View latest run >>\n            </LinkTo>\n          {{/if}}\n        </div>\n      </div>\n      {{#if this.browsers}}\n        <div class=\"text-right\"><b>Browsers</b><div>{{this.browsers}}</div></div>\n      {{/if}}\n      {{#if this.repoCommit}}\n        <div class=\"text-right\"><b>Commit</b>{{this.repoCommit}}</div>\n      {{/if}}\n      <div class=\"text-right\">\n        <b>Tags</b>\n        <TagsEditor\n          class=\"m-r-4 text-right\"\n          @model={{@model}}\n          @type=\"executions\"\n          @showIcon={{true}}\n        />\n      </div>\n    </div>\n  </div>\n  \n  \n  <Ui::ModalWrapper\n    class=\"full-view\"\n    @closeModal={{fn (mut this.showScenarioModal) false}}\n    @showModal={{this.showScenarioModal}}\n    @title=\"Scenario Details\"\n  >\n    <ExecutionScript @title=\"Current Test\"\n                    @scriptId={{@model.script.id}}\n                    @sourceType={{@model.script.sourceType}}\n                    @sourceId={{@model.script.sourceId}}\n                    @uuid={{@model.uuid}}\n                    @showScript={{this.showScenarioModal}}\n                    @comparisonId={{@comparisonId}}\n                    @recording={{this.recording}}\n                    @fullScript={{this.fullScript}}\n                    @setRecording={{fn (mut this.recording)}}\n                    @setFullScript={{fn (mut this.fullScript)}}\n    />\n    {{#if @baselineExecution}}\n      <ExecutionScript @title=\"Baseline Test\"\n                      @scriptId={{@baselineExecution.script.id}}\n                      @sourceType={{@baselineExecution.script.sourceType}}\n                      @sourceId={{@baselineExecution.script.sourceId}}\n                      @uuid={{@baselineExecution.uuid}}\n                      @showScript={{this.showScenarioModal}}\n                      @comparisonId={{@comparisonId}}\n                      @recording={{this.baselineRecording}}\n                      @fullScript={{this.baselineFullScript}}\n                      @setRecording={{fn (mut this.baselineRecording)}}\n                      @setFullScript={{fn (mut this.baselineFullScript)}}\n                      @isBaseline={{true}}\n      />\n    {{/if}}\n  </Ui::ModalWrapper>\n  \n  {{#if this.showConfigurationModal}}\n    <Ui::ModalWrapper\n      class=\"full-view\"\n      @closeModal={{fn (mut this.showConfigurationModal) false}}\n      @showModal={{this.showConfigurationModal}}\n      @title=\"Configuration Details\"\n    >\n  \n      <LoadTestResult::CreateTest\n        @model={{@model}}\n        @publicView={{@publicView}}\n        @isPublic={{@isPublic}}\n        @isViewer={{@isViewer}}\n        @scriptParamsObj={{this.scriptParamsObj}}\n        @notifications={{this.notifications}}\n        @isBaselineActive={{if @baselineExecution true}}\n        @showUsageHistoryAction={{@showUsageHistory}}\n      />\n  \n      {{#if @baselineExecution}}\n        <LoadTestResult::CreateTest\n          @model={{@baselineExecution}}\n          @publicView={{@publicView}}\n          @isPublic={{@isPublic}}\n          @isViewer={{@isViewer}}\n          @isBaseline={{true}}\n          @showUsageHistoryAction={{@showUsageHistory}}\n        />\n      {{/if}}\n  \n    </Ui::ModalWrapper>\n  \n  {{/if}}\n  \n  {{#if this.queuedRegions.length}}\n    <Ui::ModalWrapper\n      @closeModal={{fn (mut this.showQueueModal) false}}\n      @showModal={{this.showQueueModal}}\n      @size=\"xl\"\n      @title=\"Test Runner Queues\"\n    >\n      <RegionQueue\n        @regions={{this.queuedRegions}}\n        @currentExecutionId={{@model.id}}\n        @showRunnerSummary={{true}}\n      />\n    </Ui::ModalWrapper>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"tab-detail flex-wrap flex-sm-nowrap\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,\\\"Test Case\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMonitoring\\\"]],[[[1,\\\"        \\\"],[1,[30,1,[\\\"testCaseName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,3],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"testCaseId\\\"]]]],[[\\\"default\\\"],[[[[10,1],[14,0,\\\"test-result-title-ellipsis\\\"],[12],[1,[30,1,[\\\"testCaseName\\\"]]],[13]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"isParent\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"# of Child Results\\\"],[13],[1,[30,1,[\\\"childExecutionCount\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"b\\\"],[12],[1,\\\"Scenario\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,0,[\\\"isMonitoring\\\"]],[28,[37,6],[[30,1,[\\\"script\\\",\\\"sourceType\\\"]],\\\"Recording\\\"],null]],null],[[[1,\\\"          \\\"],[1,[30,1,[\\\"scenarioName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"showScenarioModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n            \\\"],[1,[30,1,[\\\"scenarioName\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"b\\\"],[12],[1,\\\"Configuration\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMonitoring\\\"]],[[[1,\\\"            \\\"],[1,[30,1,[\\\"confName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,3],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,1,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fa-history\\\"]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[11,3],[24,0,\\\"ml-2\\\"],[24,6,\\\"javascript:\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"showConfigurationModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n              \\\"],[1,[30,1,[\\\"confName\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[28,[37,12],[[30,2],[30,3]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"b\\\"],[12],[1,\\\"Locations\\\"],[13],[1,\\\"\\\\n        \\\"],[1,[52,[30,4],\\\"Current:\\\"]],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,2]],null]],null],null,[[[1,\\\"          \\\"],[1,[52,[30,6],\\\", \\\"]],[1,[30,5,[\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[5,6]],null],[1,\\\"        \\\"],[41,[30,4],[[[1,\\\", Baseline:\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,3]],null]],null],null,[[[1,\\\"            \\\"],[1,[52,[30,8],\\\", \\\"]],[1,[30,7,[\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[7,8]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,\\\"Cost\\\"],[13],[1,\\\"\\\\n      \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,9],[30,1,[\\\"usageRecord\\\",\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,15],[[30,1,[\\\"usageRecord\\\",\\\"charge\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1,[\\\"parentExecutionId\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"b\\\"],[12],[1,\\\"Parent Result\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,3],[[24,0,\\\"test-result-title-ellipsis\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"parentExecutionId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          View Parent >>>\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,[52,[30,1,[\\\"completed\\\"]],\\\"Outcome\\\",\\\"Status\\\"]],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex text-right\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"completed\\\"]],[[[1,\\\"          \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,10],null,false],null]],null],[12],[1,[28,[35,16],[[30,11]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,1],[14,0,\\\"align-content-center outcome-content m-l-5 label label-success no-print\\\"],[12],[1,[30,12]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"queuedRegions\\\",\\\"length\\\"]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link align-content-center m-l-5 no-print p-0\\\"],[24,\\\"title\\\",\\\"View test runner queues\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"showQueueModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fa fa-list-ol\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,\\\"Run At\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-r-4\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"outcome-content m-l-5 active\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[[28,[37,18],[[30,1,[\\\"createdAt\\\"]],[30,1,[\\\"startedAt\\\"]],[30,1,[\\\"finishedAt\\\"]],[30,1,[\\\"queueStartedAt\\\"]],[30,1,[\\\"queueFinishedAt\\\"]]],null]]]],[14,\\\"data-bs-html\\\",\\\"true\\\"],[12],[41,[30,1,[\\\"finishedAt\\\"]],[[[1,[30,13]]],[]],[[[1,[30,14]]],[]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showLatestRun\\\"]],[[[1,\\\"          \\\"],[8,[39,3],[[24,0,\\\"outcome-content m-l-5 no-print\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"configuration\\\",\\\"lastRunExecutionId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            View latest run >>\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"browsers\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Browsers\\\"],[13],[10,0],[12],[1,[30,0,[\\\"browsers\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"repoCommit\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Commit\\\"],[13],[1,[30,0,[\\\"repoCommit\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"text-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,\\\"Tags\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,19],[[24,0,\\\"m-r-4 text-right\\\"]],[[\\\"@model\\\",\\\"@type\\\",\\\"@showIcon\\\"],[[30,1],\\\"executions\\\",true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\"],[8,[39,20],[[24,0,\\\"full-view\\\"]],[[\\\"@closeModal\\\",\\\"@showModal\\\",\\\"@title\\\"],[[28,[37,9],[[28,[37,10],[[30,0,[\\\"showScenarioModal\\\"]]],null],false],null],[30,0,[\\\"showScenarioModal\\\"]],\\\"Scenario Details\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[39,21],null,[[\\\"@title\\\",\\\"@scriptId\\\",\\\"@sourceType\\\",\\\"@sourceId\\\",\\\"@uuid\\\",\\\"@showScript\\\",\\\"@comparisonId\\\",\\\"@recording\\\",\\\"@fullScript\\\",\\\"@setRecording\\\",\\\"@setFullScript\\\"],[\\\"Current Test\\\",[30,1,[\\\"script\\\",\\\"id\\\"]],[30,1,[\\\"script\\\",\\\"sourceType\\\"]],[30,1,[\\\"script\\\",\\\"sourceId\\\"]],[30,1,[\\\"uuid\\\"]],[30,0,[\\\"showScenarioModal\\\"]],[30,15],[30,0,[\\\"recording\\\"]],[30,0,[\\\"fullScript\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"recording\\\"]]],null]],null],[28,[37,9],[[28,[37,10],[[30,0,[\\\"fullScript\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"    \\\"],[8,[39,21],null,[[\\\"@title\\\",\\\"@scriptId\\\",\\\"@sourceType\\\",\\\"@sourceId\\\",\\\"@uuid\\\",\\\"@showScript\\\",\\\"@comparisonId\\\",\\\"@recording\\\",\\\"@fullScript\\\",\\\"@setRecording\\\",\\\"@setFullScript\\\",\\\"@isBaseline\\\"],[\\\"Baseline Test\\\",[30,4,[\\\"script\\\",\\\"id\\\"]],[30,4,[\\\"script\\\",\\\"sourceType\\\"]],[30,4,[\\\"script\\\",\\\"sourceId\\\"]],[30,4,[\\\"uuid\\\"]],[30,0,[\\\"showScenarioModal\\\"]],[30,15],[30,0,[\\\"baselineRecording\\\"]],[30,0,[\\\"baselineFullScript\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"baselineRecording\\\"]]],null]],null],[28,[37,9],[[28,[37,10],[[30,0,[\\\"baselineFullScript\\\"]]],null]],null],true]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showConfigurationModal\\\"]],[[[1,\\\"  \\\"],[8,[39,20],[[24,0,\\\"full-view\\\"]],[[\\\"@closeModal\\\",\\\"@showModal\\\",\\\"@title\\\"],[[28,[37,9],[[28,[37,10],[[30,0,[\\\"showConfigurationModal\\\"]]],null],false],null],[30,0,[\\\"showConfigurationModal\\\"]],\\\"Configuration Details\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n    \\\"],[8,[39,22],null,[[\\\"@model\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@isViewer\\\",\\\"@scriptParamsObj\\\",\\\"@notifications\\\",\\\"@isBaselineActive\\\",\\\"@showUsageHistoryAction\\\"],[[30,1],[30,16],[30,17],[30,18],[30,0,[\\\"scriptParamsObj\\\"]],[30,0,[\\\"notifications\\\"]],[52,[30,4],true],[30,9]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,4],[[[1,\\\"      \\\"],[8,[39,22],null,[[\\\"@model\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@isViewer\\\",\\\"@isBaseline\\\",\\\"@showUsageHistoryAction\\\"],[[30,4],[30,16],[30,17],[30,18],true,[30,9]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"queuedRegions\\\",\\\"length\\\"]],[[[1,\\\"  \\\"],[8,[39,20],null,[[\\\"@closeModal\\\",\\\"@showModal\\\",\\\"@size\\\",\\\"@title\\\"],[[28,[37,9],[[28,[37,10],[[30,0,[\\\"showQueueModal\\\"]]],null],false],null],[30,0,[\\\"showQueueModal\\\"]],\\\"xl\\\",\\\"Test Runner Queues\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[39,23],null,[[\\\"@regions\\\",\\\"@currentExecutionId\\\",\\\"@showRunnerSummary\\\"],[[30,0,[\\\"queuedRegions\\\"]],[30,1,[\\\"id\\\"]],true]],null],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"@mapRegions\\\",\\\"@mapRegionsBaseline\\\",\\\"@baselineExecution\\\",\\\"location\\\",\\\"index\\\",\\\"location\\\",\\\"index\\\",\\\"@showUsageHistory\\\",\\\"@showTestOutcomeModal\\\",\\\"@outcomeHtml\\\",\\\"@status\\\",\\\"@finishedAt\\\",\\\"@startedAt\\\",\\\"@comparisonId\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@isViewer\\\"],[\\\"div\\\",\\\"b\\\",\\\"if\\\",\\\"link-to\\\",\\\"span\\\",\\\"and\\\",\\\"eq\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"mut\\\",\\\"ui/icon\\\",\\\"or\\\",\\\"each\\\",\\\"-track-array\\\",\\\"print-ccy\\\",\\\"html-safe\\\",\\\"button\\\",\\\"started-at-popover\\\",\\\"tags-editor\\\",\\\"ui/modal-wrapper\\\",\\\"execution-script\\\",\\\"load-test-result/create-test\\\",\\\"region-queue\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/info-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadTestResultInfoPanelComponent = _exports.default = (_class = class LoadTestResultInfoPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"showScenarioModal\", _descriptor, this);\n      _initializerDefineProperty(this, \"showConfigurationModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showQueueModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"recording\", _descriptor4, this);\n      _initializerDefineProperty(this, \"fullScript\", _descriptor5, this);\n      _initializerDefineProperty(this, \"baselineRecording\", _descriptor6, this);\n      _initializerDefineProperty(this, \"baselineFullScript\", _descriptor7, this);\n    }\n    get repoCommit() {\n      return (0, _template.htmlSafe)(_lib.default.getRepoLink(this.args.model.vcsRoot));\n    }\n    get showLatestRun() {\n      const {\n        id,\n        completed,\n        minimalHeader,\n        configuration\n      } = this.args.model;\n      return completed && !minimalHeader && id !== configuration.lastRunExecutionId && id < configuration.lastRunExecutionId;\n    }\n    get queuedRegions() {\n      return (this.args.model.regions || []).filter(executionRegion => {\n        const region = executionRegion.region;\n        const provider = executionRegion.region?.location?.provider;\n        const isShared = region?.isShared === true || provider?.providerType === 'Shared';\n        return executionRegion.queued && isShared;\n      }).map(executionRegion => executionRegion.region);\n    }\n    get browsers() {\n      const {\n        browsers,\n        browsersExecuted\n      } = this.args.model;\n      const keys = browsersExecuted.length ? browsersExecuted : browsers.map(b => b.browserKey);\n      if (keys.length) {\n        return (0, _template.htmlSafe)(keys.map(k => _lib.default.toBrowserVersionLabel(k)).join(''));\n      }\n    }\n    get scriptParamsObj() {\n      let scriptParams = this.args.model.scriptParams;\n      if (scriptParams) {\n        return JSON.parse(scriptParams);\n      } else {\n        return {};\n      }\n    }\n    get successTrigger() {\n      return _loadTest.default.findTrigger(this.args.model.triggers, 'OnTestFinish');\n    }\n    get notifications() {\n      // TODO: DRY THIS\n      const notifications = {};\n      _.forEach(this.successTrigger?.actions, function (action) {\n        if (action.notificationMedium) {\n          var notification = notifications[action.notificationMedium];\n          if (!notification) {\n            notification = {\n              notificationMedium: action.notificationMedium,\n              customNotificationList: action.data,\n              successNotificationStyle: 'None',\n              failureNotificationStyle: 'None'\n            };\n            notifications[action.notificationMedium] = notification;\n          }\n          switch (action.actionType) {\n            case 'SuccessNotification':\n              notification.successNotificationStyle = 'Always';\n              break;\n            case 'FirstSuccessNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.successNotificationStyle = 'First';\n              break;\n            case 'FailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'Always';\n              break;\n            case 'FirstFailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'First';\n              break;\n          }\n        }\n      });\n      return _.values(notifications);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"showScenarioModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showConfigurationModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showQueueModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"recording\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"fullScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"baselineRecording\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"baselineFullScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestResultInfoPanelComponent);\n});","define(\"@testable/shared-ui/components/load-test-result/tabs\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#unless @isPrint}}\n    <ul class=\"nav nav-pills nav-fill\" id=\"resultsTabsNav\" ...attributes>\n      <li class=\"nav-items\">\n        <a href=\"#results-tab\" data-bs-toggle=\"tab\" class=\"nav-link active\">\n          <span class=\"d-sm-none\">Results</span>\n          <span class=\"d-sm-block d-none\"><Ui::Icon @icon=\"fa fa-chart-line\" class=\"m-r-10\" />Results</span>\n        </a>\n      </li>\n      {{#if @model.isParent}}\n        <li class=\"nav-items\">\n          <a href=\"#child-results-tab\" data-bs-toggle=\"tab\" class=\"nav-link\">\n            <span class=\"d-sm-none\">Child Results</span>\n            <span class=\"d-sm-block d-none\"><Ui::Icon @icon=\"fa fa-list-alt\" class=\"m-r-10\" />Child Results ({{@model.childExecutionCount}})</span>\n          </a>\n        </li>\n      {{/if}}\n      {{#unless @showLoggingPanel}}\n        <li class=\"nav-items \">\n          <a href=\"#logging-tab\" data-bs-toggle=\"tab\" class=\"nav-link\">\n            <span class=\"d-sm-none\">Logging</span>\n            <span class=\"d-sm-block d-none {{if @logInfo.hasErrors ' red'}}\">\n              <Ui::Icon @icon=\"fa fa-terminal\" class=\"m-r-10\" />\n              Logging {{if @logInfo.hasErrors ' (Errors Occurred)'}} ({{if @logInfo.isLoaded (or @logInfo.logCount 0)\n                                                                          '...'}}{{if (gte @logInfo.logCount 1000)\n                                                                                      '+'}}) <Ui::InfoIcon\n                    @isHtml={{true}}\n                    @content='All logging related to execution.  By default only logging at INFO or ERROR will appear\n                    here (i.e. not DEBUG).  Click the configure icon <i class=\"fa fa-cog text-primary\"></i> to\n                    change the logging level or the filter icon <i class=\"fa fa-filter text-primary\"></i></button> to\n                    apply temporary filters.'\n                    @placement=\"bottom\" />\n            </span>\n          </a>\n        </li>\n      {{/unless}}\n      <li class=\"nav-items\">\n        <a href=\"#test-runners\" data-bs-toggle=\"tab\" class=\"nav-link\">\n          <span class=\"d-sm-none\">Test Runners</span>\n          <span class=\"d-sm-block d-none\"><Ui::Icon @icon=\"fa fa-play\" class=\"m-r-10\" />Test Runners\n            ({{print-number @testRunnersNumber }})\n            <Ui::InfoIcon @content='Information about the test runner agents assigned to run your test and any per-test\n            instances that were spun up for this test run.' />\n          </span>\n        </a>\n      </li>\n      {{#unless @isBrowserBased}}\n        <li class=\"nav-items\">\n          <a href=\"#files-tab\" data-bs-toggle=\"tab\" class=\"nav-link\">\n            <span class=\"d-sm-none\">Files</span>\n            <span class=\"d-sm-block d-none\"><Ui::Icon @icon=\"fa fa-file\" class=\"m-r-10\" />Output Files {{#if @outputFilesLoaded}}\n              ({{print-number @outputFileCount}})\n            {{else}}(...){{/if}} <Ui::InfoIcon\n                    @content='See all output files (e.g. screenshots) captured during this test' /></span>\n          </a>\n        </li>\n      {{/unless}}\n    </ul>\n  {{/unless}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[51,[30,1]],[[[1,\\\"  \\\"],[11,\\\"ul\\\"],[24,0,\\\"nav nav-pills nav-fill\\\"],[24,1,\\\"resultsTabsNav\\\"],[17,2],[12],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"#results-tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link active\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Results\\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[8,[39,5],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-chart-line\\\"]],null],[1,\\\"Results\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"isParent\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"#child-results-tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Child Results\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[8,[39,5],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-list-alt\\\"]],null],[1,\\\"Child Results (\\\"],[1,[30,3,[\\\"childExecutionCount\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,4]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items \\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"#logging-tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Logging\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[15,0,[29,[\\\"d-sm-block d-none \\\",[52,[30,5,[\\\"hasErrors\\\"]],\\\" red\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-terminal\\\"]],null],[1,\\\"\\\\n            Logging \\\"],[1,[52,[30,5,[\\\"hasErrors\\\"]],\\\" (Errors Occurred)\\\"]],[1,\\\" (\\\"],[1,[52,[30,5,[\\\"isLoaded\\\"]],[28,[37,7],[[30,5,[\\\"logCount\\\"]],0],null],\\\"...\\\"]],[1,[52,[28,[37,8],[[30,5,[\\\"logCount\\\"]],1000],null],\\\"+\\\"]],[1,\\\") \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"All logging related to execution.  By default only logging at INFO or ERROR will appear\\\\n                  here (i.e. not DEBUG).  Click the configure icon <i class=\\\\\\\"fa fa-cog text-primary\\\\\\\"></i> to\\\\n                  change the logging level or the filter icon <i class=\\\\\\\"fa fa-filter text-primary\\\\\\\"></i></button> to\\\\n                  apply temporary filters.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"#test-runners\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Test Runners\\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[8,[39,5],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\"Test Runners\\\\n          (\\\"],[1,[28,[35,10],[[30,6]],null]],[1,\\\")\\\\n          \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Information about the test runner agents assigned to run your test and any per-test\\\\n          instances that were spun up for this test run.\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,7]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"#files-tab\\\"],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Files\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[8,[39,5],[[24,0,\\\"m-r-10\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\"Output Files \\\"],[41,[30,8],[[[1,\\\"\\\\n            (\\\"],[1,[28,[35,10],[[30,9]],null]],[1,\\\")\\\\n          \\\"]],[]],[[[1,\\\"(...)\\\"]],[]]],[1,\\\" \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"See all output files (e.g. screenshots) captured during this test\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isPrint\\\",\\\"&attrs\\\",\\\"@model\\\",\\\"@showLoggingPanel\\\",\\\"@logInfo\\\",\\\"@testRunnersNumber\\\",\\\"@isBrowserBased\\\",\\\"@outputFilesLoaded\\\",\\\"@outputFileCount\\\"],[\\\"unless\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"or\\\",\\\"gte\\\",\\\"ui/info-icon\\\",\\\"print-number\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/tabs.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"tabs\"));\n});","define(\"@testable/shared-ui/components/load-test-result/wrapper\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"test-result-page\" ...attributes {{did-insert @ctx.onInsert}}>\n    {{yield}}\n  </div>\n  \n  {{#if @ctx.showImageDetailsModal}}\n    <ImageDetailsModal @image={{@ctx.selectedImage}}\n                       @overallModel={{@model}}\n                       @showImageDetailsModal={{@ctx.showImageDetailsModalAction}}\n                       @modalClosed={{@ctx.imageDetailsModalClosed}} />\n  {{/if}}\n  {{#if @ctx.showVideoDetailsModal}}\n    <VideoDetailsModal @video={{@ctx.selectedVideo}}\n                       @overallModel={{@model}}\n                       @showVideoDetailsModal={{@ctx.showVideoDetailsModalAction}}\n                       @showImageDetailsModal={{@ctx.showImageDetailsModalAction}}\n                       @modalClosed={{@ctx.videoDetailsModalClosed}} />\n  {{/if}}\n  {{#if @ctx.showTestOutcomeModal}}\n    <TestOutcomeModal @model={{@ctx.testOutcomeSelected}}\n                      @isRegion={{@ctx.testOutcomeIsRegion}}\n                      @testType={{@ctx.testOutcomeSelected.testType}}\n                      @scriptType={{@ctx.testOutcomeSelected.script.scriptType}}\n                      @metricDefs={{@ctx.metricDefs}}\n                      @executionId={{@ctx.testOutcomeSelected.id}}\n                      @confId={{@ctx.testOutcomeSelected.confId}}\n                      @testCaseId={{@model.testCaseId}}\n                      @modalClosed={{@ctx.testOutcomeModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"test-result-page\\\"],[17,1],[4,[38,1],[[30,2,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[18,4,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2,[\\\"showImageDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,4],null,[[\\\"@image\\\",\\\"@overallModel\\\",\\\"@showImageDetailsModal\\\",\\\"@modalClosed\\\"],[[30,2,[\\\"selectedImage\\\"]],[30,3],[30,2,[\\\"showImageDetailsModalAction\\\"]],[30,2,[\\\"imageDetailsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"showVideoDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,5],null,[[\\\"@video\\\",\\\"@overallModel\\\",\\\"@showVideoDetailsModal\\\",\\\"@showImageDetailsModal\\\",\\\"@modalClosed\\\"],[[30,2,[\\\"selectedVideo\\\"]],[30,3],[30,2,[\\\"showVideoDetailsModalAction\\\"]],[30,2,[\\\"showImageDetailsModalAction\\\"]],[30,2,[\\\"videoDetailsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"showTestOutcomeModal\\\"]],[[[1,\\\"  \\\"],[8,[39,6],null,[[\\\"@model\\\",\\\"@isRegion\\\",\\\"@testType\\\",\\\"@scriptType\\\",\\\"@metricDefs\\\",\\\"@executionId\\\",\\\"@confId\\\",\\\"@testCaseId\\\",\\\"@modalClosed\\\"],[[30,2,[\\\"testOutcomeSelected\\\"]],[30,2,[\\\"testOutcomeIsRegion\\\"]],[30,2,[\\\"testOutcomeSelected\\\",\\\"testType\\\"]],[30,2,[\\\"testOutcomeSelected\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,2,[\\\"metricDefs\\\"]],[30,2,[\\\"testOutcomeSelected\\\",\\\"id\\\"]],[30,2,[\\\"testOutcomeSelected\\\",\\\"confId\\\"]],[30,3,[\\\"testCaseId\\\"]],[30,2,[\\\"testOutcomeModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"&attrs\\\",\\\"@ctx\\\",\\\"@model\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"yield\\\",\\\"if\\\",\\\"image-details-modal\\\",\\\"video-details-modal\\\",\\\"test-outcome-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-result/wrapper.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"wrapper\"));\n});","define(\"@testable/shared-ui/components/load-test-results-base\", [\"exports\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/array\", \"tracked-built-ins\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/dashboards\", \"@testable/shared-ui/models/load-test-regional-results\", \"@testable/shared-ui/utils/starts-with-key-map\", \"@testable/shared-ui/utils/utilization\", \"ember-uuid\"], function (_exports, _object, _runloop, _component, _tracking, _array, _trackedBuiltIns, _service, _lib, _server, _environment, _loadTest, _dashboards, _loadTestRegionalResults, _startsWithKeyMap, _utilization, _emberUuid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43, _descriptor44, _descriptor45, _descriptor46, _descriptor47, _descriptor48, _descriptor49, _descriptor50, _descriptor51, _descriptor52, _descriptor53, _descriptor54, _descriptor55, _descriptor56, _descriptor57, _descriptor58, _descriptor59, _descriptor60, _descriptor61, _descriptor62, _descriptor63, _descriptor64, _descriptor65, _descriptor66, _descriptor67, _descriptor68, _descriptor69, _descriptor70, _descriptor71, _descriptor72, _descriptor73;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/array\",0,\"tracked-built-ins\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/dashboards\",0,\"@testable/shared-ui/models/load-test-regional-results\",0,\"@testable/shared-ui/utils/starts-with-key-map\",0,\"@testable/shared-ui/utils/utilization\",0,\"ember-uuid\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let DefaultDashboards = {\n    OpenFin: 'OpenFin Default',\n    Selenium: 'Selenium Default',\n    PhantomJs: 'PhantomJs Default',\n    JMeter: 'JMeter Default',\n    Gatling: 'Gatling Default',\n    Locust: 'Locust Default',\n    Postman: 'Postman Default',\n    Puppeteer: 'Puppeteer Default',\n    Playwright: 'Playwright Default',\n    Java: 'Java Default',\n    Kafka: 'Kafka Default'\n  };\n  let updateDefaultDashboard = (component, defaultTypes) => {\n    defaultTypes = defaultTypes || [];\n    let confId = component.args.model?.confId;\n    let testCaseId = component.args.model?.testCaseId;\n    let orgId = component.args.model?.orgId;\n    let dashboardId = component.dashboard?.id;\n    let isTestConfDefault = component.isTestConfDefaultDashboard;\n    let isTestCaseDefault = component.isTestCaseDefaultDashboard;\n    let isOrgDefault = component.isOrgDefaultDashboard;\n    let requestTestConfDefault = defaultTypes.includes('testConf');\n    let requestTestCaseDefault = defaultTypes.includes('testCase');\n    let requestOrgDefault = defaultTypes.includes('acct');\n    let isLoad = component.isLoad;\n    if (isTestConfDefault !== requestTestConfDefault) {\n      _server.default.updateTestConfigurationDashboard(confId, requestTestConfDefault ? dashboardId : 0).then(result => {\n        (0, _object.set)(component.args.model.configuration, 'dashboard', result.dashboard);\n      });\n    }\n    if (isTestCaseDefault !== requestTestCaseDefault) {\n      _server.default.updateTestCaseDashboard(testCaseId, requestTestCaseDefault ? dashboardId : 0, isLoad).then(result => {\n        (0, _object.set)(component.args.model.configuration.testCase, 'dashboard' + (isLoad ? '' : 'Functional'), result.dashboard);\n      });\n    }\n    if (isOrgDefault !== requestOrgDefault) {\n      _server.default.updateOrgDashboard(orgId, requestOrgDefault ? dashboardId : 0, isLoad).then(result => {\n        (0, _object.set)(component.args.model.configuration.testCase.organization, 'dashboard' + (isLoad ? '' : 'Functional'), result.dashboard);\n      });\n    }\n  };\n  let showRegionalPanel = (component, elem) => {\n    component.dashboard?.config?.order?.splice(0, 0, elem);\n    component.refreshReportSettingsChanged();\n  };\n  let currentViewState = (component, useSavedSettings) => {\n    const config = component.dashboard?.config || {};\n    const saved = config.settings || {};\n    return _dashboards.default.toComparableState(config, {\n      resultsType: useSavedSettings ? saved.resultsType || 'thisRun' : component.resultsType,\n      period: useSavedSettings ? saved.period || 'recent' : component.period,\n      limit: Number(useSavedSettings ? saved.limit || 15 : component.limit)\n    });\n  };\n  let LoadTestResultsBase = _exports.default = (_dec = (0, _object.computed)('applicationState.lastUpdated'), _dec2 = (0, _object.computed)('args.model.configuration.isTryItOut', 'args.model.note', 'args.isPrint', 'showNoteEditor'), _dec3 = (0, _object.computed)('args.model.{completed,note}', 'showNoteEditor', 'showReportSetupPanel', 'showZoomBar', 'allowZoomBar'), _dec4 = (0, _object.computed)('zoomInfo.{isAll,startTimestamp,endTimestamp}', 'dashboard.config.settings.showRelativeTime', 'args.model.{summary.firstResultAt,startedAt,summary.granularity}'), _dec5 = (0, _object.computed)('requiresIntervals', 'regionSummary.summary', 'args.model.{completed,finishedAt,startedAt}'), _dec6 = (0, _object.computed)('args.model.{id,uuid}', 'zoomInfo.{isAll,startTimestamp,endTimestamp}'), _dec7 = (0, _object.computed)('args.model.{script.scriptType,configuration.testCase.metricDefs}'), _dec8 = (0, _object.computed)('args.model.triggers'), _dec9 = (0, _object.computed)('args.model.{completed,success}'), _dec0 = (0, _object.computed)('applicationState.lastUpdated', 'args.model.startedAt'), _dec1 = (0, _object.computed)('applicationState.lastUpdated', 'args.model.finishedAt'), _dec10 = (0, _object.computed)('args.model.summary', 'regionSummary.{completed,suiteSummaries}', 'outputFileCount', 'outputVideosCount'), _dec11 = (0, _object.computed)('args.model.durationSecs'), _dec12 = (0, _object.computed)('args.model.iterations'), _dec13 = (0, _object.computed)('args.model.concurrentClients'), _dec14 = (0, _object.computed)('args.model.actualConcurrentClients'), _dec15 = (0, _object.computed)('args.model.{cancelledByUser,finishedAt,running,limitBreached,limit,aggregated,immediateContentSaved,diffsCalculated,summarySaved,summaryCalculated,completed,summary.count,allocatingInfra,hasSavedSummaries,numRedisSummaries}'), _dec16 = (0, _object.computed)('dashboard.id', 'isLoad', 'args.model.configuration.{dashboard.id,dashboardFunctional.id}'), _dec17 = (0, _object.computed)('dashboard.id', 'isLoad', 'args.model.configuration.testCase.{dashboard.id,dashboardFunctional.id}'), _dec18 = (0, _object.computed)('dashboard.id', 'isLoad', 'args.model.configuration.testCase.organization.{dashboard.id,dashboardFunctional.id}'), _dec19 = (0, _object.computed)('regionSummaries', 'regionSummaries.[]'), _dec20 = (0, _object.computed)('regionSummariesBaseline', 'regionSummariesBaseline.[]'), _dec21 = (0, _object.computed)('args.model', 'zoomInfo'), _dec22 = (0, _object.computed)('baselineExecution', 'zoomInfo'), _dec23 = (0, _object.computed)('regionSummaries', 'regionSummaries.[]'), _dec24 = (0, _object.computed)('regionSummariesBaseline', 'regionSummariesBaseline.[]'), _dec25 = (0, _object.computed)('regionSummary.executionRegion.region.name'), _dec26 = (0, _object.computed)('regionSummary.executionRegion.baseline'), _dec27 = (0, _object.computed)('regionSummaries.@each.isVisible'), _dec28 = (0, _object.computed)('regionSummaries', 'regionSummaries.[]'), _dec29 = (0, _object.computed)('regionSummariesBaseline', 'regionSummariesBaseline.[]'), _dec30 = (0, _object.computed)('regionSummary.{agents.length,instances.length}'), _dec31 = (0, _object.computed)('regionSummary.buckets', 'selectedResource.{buckets,id}'), _dec32 = (0, _object.computed)('regionSummary.intervals', 'selectedResource.{id,intervals}'), _dec33 = (0, _object.computed)('widgetUsageChart', 'regionSummary.agents.length', 'args.model.testType'), _class = class LoadTestResultsBase extends _component.default {\n    constructor() {\n      super(...arguments);\n\n      // QP two-way bound copies from args\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor2, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor3, this);\n      _initializerDefineProperty(this, \"testResults\", _descriptor4, this);\n      _initializerDefineProperty(this, \"router\", _descriptor5, this);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor6, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"pendingTraces\", _descriptor7, this);\n      _initializerDefineProperty(this, \"pendingResults\", _descriptor8, this);\n      _initializerDefineProperty(this, \"applyTraces\", _descriptor9, this);\n      _initializerDefineProperty(this, \"currentLogLevel\", _descriptor0, this);\n      // Static properties\n      _initializerDefineProperty(this, \"currentTab\", _descriptor1, this);\n      _initializerDefineProperty(this, \"regionLoaded\", _descriptor10, this);\n      _initializerDefineProperty(this, \"showFilterBar\", _descriptor11, this);\n      _initializerDefineProperty(this, \"showReportSetupPanel\", _descriptor12, this);\n      _initializerDefineProperty(this, \"showZoomBar\", _descriptor13, this);\n      _initializerDefineProperty(this, \"showTestResultBaselineModal\", _descriptor14, this);\n      _initializerDefineProperty(this, \"baselineStatus\", _descriptor15, this);\n      _initializerDefineProperty(this, \"currentTestTitle\", _descriptor16, this);\n      _initializerDefineProperty(this, \"baselineTestTitle\", _descriptor17, this);\n      _initializerDefineProperty(this, \"hasDashboardChanges\", _descriptor18, this);\n      _initializerDefineProperty(this, \"dashboard\", _descriptor19, this);\n      _initializerDefineProperty(this, \"showNoteEditor\", _descriptor20, this);\n      // QP two-way bound props (local tracked copies)\n      _initializerDefineProperty(this, \"comparisonId\", _descriptor21, this);\n      _initializerDefineProperty(this, \"dashboardId\", _descriptor22, this);\n      _initializerDefineProperty(this, \"qpDashboardId\", _descriptor23, this);\n      _initializerDefineProperty(this, \"qpResultsType\", _descriptor24, this);\n      _initializerDefineProperty(this, \"qpPeriod\", _descriptor25, this);\n      _initializerDefineProperty(this, \"qpLimit\", _descriptor26, this);\n      _initializerDefineProperty(this, \"qpResourceId\", _descriptor27, this);\n      _initializerDefineProperty(this, \"qpBaselineResourceId\", _descriptor28, this);\n      _initializerDefineProperty(this, \"qpRegionId\", _descriptor29, this);\n      _initializerDefineProperty(this, \"qpRegionBaselineId\", _descriptor30, this);\n      // Component-local tracked properties\n      _initializerDefineProperty(this, \"bucketsLoaded\", _descriptor31, this);\n      _initializerDefineProperty(this, \"outputFilesLoaded\", _descriptor32, this);\n      _initializerDefineProperty(this, \"intervalsLoaded\", _descriptor33, this);\n      _initializerDefineProperty(this, \"suiteSummariesLoaded\", _descriptor34, this);\n      _initializerDefineProperty(this, \"loadingDashboards\", _descriptor35, this);\n      _initializerDefineProperty(this, \"dashboards\", _descriptor36, this);\n      _initializerDefineProperty(this, \"displayedResources\", _descriptor37, this);\n      _initializerDefineProperty(this, \"regionSummary\", _descriptor38, this);\n      _initializerDefineProperty(this, \"resultsType\", _descriptor39, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor40, this);\n      _initializerDefineProperty(this, \"latestLimit\", _descriptor41, this);\n      _initializerDefineProperty(this, \"period\", _descriptor42, this);\n      _initializerDefineProperty(this, \"baselineExecution\", _descriptor43, this);\n      _initializerDefineProperty(this, \"regionSummaryBaseline\", _descriptor44, this);\n      _initializerDefineProperty(this, \"selectedResource\", _descriptor45, this);\n      _initializerDefineProperty(this, \"baselineSelectedResource\", _descriptor46, this);\n      _initializerDefineProperty(this, \"showDashboardModal\", _descriptor47, this);\n      _initializerDefineProperty(this, \"showTestOutcomeModal\", _descriptor48, this);\n      _initializerDefineProperty(this, \"testOutcomeSelected\", _descriptor49, this);\n      _initializerDefineProperty(this, \"testOutcomeIsRegion\", _descriptor50, this);\n      _initializerDefineProperty(this, \"showDashboardSettingsModal\", _descriptor51, this);\n      _initializerDefineProperty(this, \"logInfo\", _descriptor52, this);\n      _initializerDefineProperty(this, \"baselineLogInfo\", _descriptor53, this);\n      _initializerDefineProperty(this, \"showConfBaseLineModal\", _descriptor54, this);\n      _initializerDefineProperty(this, \"isCompareResults\", _descriptor55, this);\n      _initializerDefineProperty(this, \"outputFileCount\", _descriptor56, this);\n      _initializerDefineProperty(this, \"outputFileCountBaseline\", _descriptor57, this);\n      _initializerDefineProperty(this, \"outputVideosCount\", _descriptor58, this);\n      _initializerDefineProperty(this, \"outputVideosLoaded\", _descriptor59, this);\n      _initializerDefineProperty(this, \"hasResourcesGrid\", _descriptor60, this);\n      _initializerDefineProperty(this, \"showTestRunners\", _descriptor61, this);\n      _initializerDefineProperty(this, \"showFiles\", _descriptor62, this);\n      _initializerDefineProperty(this, \"showChildResults\", _descriptor63, this);\n      _initializerDefineProperty(this, \"showDetailsModal\", _descriptor64, this);\n      _initializerDefineProperty(this, \"selectedUsageObjId\", _descriptor65, this);\n      _initializerDefineProperty(this, \"showImageDetailsModal\", _descriptor66, this);\n      _initializerDefineProperty(this, \"selectedImage\", _descriptor67, this);\n      _initializerDefineProperty(this, \"showVideoDetailsModal\", _descriptor68, this);\n      _initializerDefineProperty(this, \"selectedVideo\", _descriptor69, this);\n      _initializerDefineProperty(this, \"isSystemConnectionToggle\", _descriptor70, this);\n      _initializerDefineProperty(this, \"currentSubTab\", _descriptor71, this);\n      _initializerDefineProperty(this, \"showMakeDefaultDashboard\", _descriptor72, this);\n      _initializerDefineProperty(this, \"showAddChartModal\", _descriptor73, this);\n      // Non-tracked properties\n      _defineProperty(this, \"agentSearchMap\", void 0);\n      this.comparisonId = this.args.comparisonId;\n      this.dashboardId = this.args.dashboardId;\n      this.qpDashboardId = this.args.qpDashboardId;\n      this.qpResultsType = this.args.qpResultsType;\n      this.qpPeriod = this.args.qpPeriod;\n      this.qpLimit = this.args.qpLimit;\n      this.qpResourceId = this.args.qpResourceId;\n      this.qpBaselineResourceId = this.args.qpBaselineResourceId;\n      this.qpRegionId = this.args.qpRegionId;\n      this.qpRegionBaselineId = this.args.qpRegionBaselineId;\n\n      // init() logic\n      this.regionLoaded = true;\n      this.selectedResource = _loadTest.default.OverallResource;\n      this.baselineSelectedResource = _loadTest.default.OverallResource;\n      this.agentSearchMap = new _startsWithKeyMap.default(this.args.model?.agents, a => a?.agent?.host);\n      this.zoomInfo.reset();\n      this.testResults.updateStreamingRegions(this);\n      this.EventBus.subscribe('onNewAgent', this, 'onNewAgent');\n      _lib.default.observeKeys(this, ['args.model.id'], this.onModelIdChanged);\n      _lib.default.observeKeys(this, ['comparisonId', 'qpResultsType'], this.onComparisonIdOrResultsTypeChanged);\n      _lib.default.observeKeys(this, ['hasDashboardChanges'], this.onHasDashboardChangesChanged);\n      _lib.default.observeKeys(this, ['showLoggingPanel'], this.onShowLoggingPanelChanged);\n      _lib.default.observeKeys(this, ['dashboard'], this.onDashboardChange);\n      _lib.default.observeKeys(this, ['args.model', 'dashboardId'], this.onDashboardRelatedChange);\n      _lib.default.observeKeys(this, ['regionSummaries.@each.isVisible'], this.onRegionVisibilityChanged);\n      _lib.default.observeKeys(this, ['regionSummary.resources', 'args.model.completed', 'regionSummary.numResources'], this.onResourcesChanged);\n      _lib.default.observeKeys(this, ['args.model'], this.onModelChanged);\n      _lib.default.observeKeys(this, ['args.qpRegionId'], this.onArgRegionIdChanged);\n      _lib.default.observeKeys(this, ['args.qpDashboardId'], this.onArgDashboardIdChanged);\n      _lib.default.observeKeys(this, ['args.qpResourceId'], this.onArgResourceIdChanged);\n      _lib.default.observeKeys(this, ['args.qpPeriod', 'args.qpLimit'], this.onArgPeriodOrLimitChanged);\n\n      // Defer to avoid autotracking assertion\n      // (dashboard/regionSummaries are read during render, can't be set in same cycle)\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if (this.isDestroyed) return;\n        this._setRegionFromModel();\n        this.onDashboardChange();\n        this.loadDashboard();\n        this.loadDashboards();\n      });\n    }\n    _setQp(prop, value) {\n      this[prop] = value;\n      const callbackName = 'on' + prop.charAt(0).toUpperCase() + prop.slice(1) + 'Changed';\n      this.args[callbackName]?.(value);\n    }\n\n    // Computed macros replacements\n    get isSuperAdmin() {\n      return this.currentUser?.isAdmin;\n    }\n    get isViewer() {\n      return this.currentUser?.isViewer;\n    }\n    get now() {\n      return this.applicationState?.lastUpdated;\n    }\n\n    // Computed properties\n    get noteClass() {\n      let classes = [];\n      const {\n        configuration,\n        note\n      } = this.args.model;\n      const isPrint = this.args.isPrint;\n      if (configuration?.isTryItOut || note || this.showNoteEditor) {\n        classes.push('note-editor');\n      }\n      if (isPrint) {\n        classes.push('border-bottom');\n      }\n      return classes.join(' ');\n    }\n    get resultsTypeText() {\n      let answer = '<strong>Report Type: </strong>';\n      if (this.resultsType === 'thisRun') {\n        answer += 'This Test Run';\n      } else if (this.resultsType === 'baseline') {\n        answer += 'Comparison to #' + this.comparisonId;\n      } else {\n        answer += 'Comparison vs ';\n        switch (this.period) {\n          case '7d':\n            answer += '7 day history';\n            break;\n          case '1m':\n            answer += '1 month history';\n            break;\n          case '3m':\n            answer += '3 month history';\n            break;\n          default:\n            answer += this.limit + ' recent test runs';\n            break;\n        }\n      }\n      return answer;\n    }\n    get showTopBar() {\n      const completed = this.args.model?.completed;\n      return !this.args.model?.note && !this.showNoteEditor || completed && !this.showReportSetupPanel || completed && this.allowZoomBar && !this.showZoomBar;\n    }\n    get zoomText() {\n      let answer = '<strong>Zoom: </strong>';\n      if (this.zoomInfo?.isAll) {\n        answer += 'ALL';\n      } else {\n        let startTime;\n        let endTime;\n        if (this.dashboard?.config?.settings?.showRelativeTime) {\n          const _startedAt = this.args.model?.summary?.firstResultAt || this.args.model?.startedAt;\n          let startedAt = 0;\n          if (_startedAt) {\n            startedAt = _lib.default.intervalFor(moment(_startedAt).valueOf(), this.args.model?.summary?.granularity);\n          }\n          startTime = _lib.default.printDurationFromMS(moment(this.zoomInfo?.startTimestamp) - moment(startedAt));\n          endTime = _lib.default.printDurationFromMS(moment(this.zoomInfo?.endTimestamp) - moment(startedAt));\n        } else {\n          startTime = _lib.default.displayMilitaryTime(this.zoomInfo?.startTimestamp);\n          endTime = _lib.default.displayMilitaryTime(this.zoomInfo?.endTimestamp);\n        }\n        answer += startTime + ' - ' + endTime;\n      }\n      return answer;\n    }\n\n    // `regionSummary.summary` rather than `.hasResults`: hasResults is now a plain\n    // getter, and a @computed key naming a plain getter never invalidates.\n    get allowZoomBar() {\n      return this.requiresIntervals && this.regionSummary?.hasResults && this.args.model?.completed && this.args.model?.finishedAt && this.args.model?.startedAt;\n    }\n    get requiresIntervals() {\n      return this.isLoad && this.resultsType !== 'history';\n    }\n    get isHistory() {\n      return this.resultsType === 'history';\n    }\n    get isBaseline() {\n      return this.resultsType === 'baseline';\n    }\n    get exportToCsvUrl() {\n      let path = this.args.model?.uuid ? '/p/' + this.args.model.uuid + '/results.csv' : '/executions/' + this.args.model?.id + '/results.csv';\n      const zoomInfo = this.zoomInfo;\n      const params = _lib.default.getZoomParams(zoomInfo);\n      return _lib.default.toUrl(path, params);\n    }\n    get exportViewUrl() {\n      return _lib.default.toUrl(`/dashboards/${this.dashboard?.id}/download`);\n    }\n    get metricDefs() {\n      return _loadTest.default.getMetricDefs(this.args.model?.script?.scriptType, this.args.model?.configuration?.testCase?.metricDefs);\n    }\n    get metricDefsByName() {\n      const answer = {};\n      _.forEach(this.metricDefs, metricDef => {\n        answer[_lib.default.toMetricKey(metricDef.namespace, metricDef.name)] = metricDef;\n      });\n      return answer;\n    }\n    get successTrigger() {\n      return _loadTest.default.findTrigger(this.args.model?.triggers, 'OnTestFinish');\n    }\n    get successTriggerBaseline() {\n      return _loadTest.default.findTrigger(this.regionSummariesBaseline?.triggers, 'OnTestFinish');\n    }\n    findFilter(type) {\n      return _.find(this.args.model?.ipFilters, filter => {\n        return filter.filterType === type;\n      });\n    }\n    get outcomeHtml() {\n      return _loadTest.default.getExecutionOutcomeHtml(this.args.model);\n    }\n    get startedAt() {\n      return _lib.default.getRelativeDuration(this.args.model?.startedAt, this.applicationState?.lastUpdated);\n    }\n    get finishedAt() {\n      return _lib.default.getRelativeDuration(this.args.model?.finishedAt, this.applicationState?.lastUpdated);\n    }\n    get showLoggingPanel() {\n      const summary = this.args.model?.summary;\n      const suiteSummaries = this.regionSummary?.suiteSummaries || [];\n      const testCompleted = this.regionSummary?.completed;\n      if (!testCompleted) {\n        return false;\n      } else {\n        return !summary || _loadTest.default.getSummaryCount(summary) === 0 && suiteSummaries && suiteSummaries.length === 0 && (this.outputFileCount === undefined || this.outputFileCount === 0) && (this.outputVideosCount === undefined || this.outputVideosCount === 0);\n      }\n    }\n    setDashboard(dashboard, useDefaultView, force) {\n      if (dashboard && dashboard.version >= _dashboards.default.DashboardVersion) {\n        if (_.isObject(dashboard) && _.isString(dashboard.config)) {\n          dashboard.config = JSON.parse(dashboard.config);\n          dashboard.config.baselineConsole = dashboard.config.console;\n        }\n        if (dashboard.config) {\n          _dashboards.default.prepare(dashboard);\n        }\n        if (force || dashboard === null || this.dashboard === null || this.dashboard?.id !== dashboard.id) {\n          this.dashboard = dashboard;\n        }\n      } else if (useDefaultView) {\n        this.dashboard = _dashboards.default.createDefaultDashboard(this.args.model?.testType);\n      } else {\n        this.setDefaultDashboard(force);\n      }\n    }\n    captureViewSnapshot() {\n      this.pristineView = currentViewState(this, true);\n    }\n    refreshReportSettingsChanged() {\n      if (!this.pristineView) return;\n      this.hasDashboardChanges = currentViewState(this) !== this.pristineView;\n    }\n    setResultsTypeRelatedField(field, qpField, defaultVal) {\n      const dashboardSettings = this.dashboard?.config?.settings || {};\n      if (this[qpField]) {\n        this[field] = this[qpField];\n      } else if (dashboardSettings[field]) {\n        this[field] = dashboardSettings[field];\n      } else {\n        this[field] = defaultVal;\n      }\n    }\n    setDefaultDashboard(force) {\n      const orgId = _environment.config.currentUser.orgId;\n      let scriptType = this.args.model?.script?.scriptType;\n      if (scriptType === 'Java' && this.args.model?.summary?.metrics && this.args.model.summary.metrics.filter(m => m.metricDef.includes('kafka')).length) {\n        scriptType = 'Kafka';\n      }\n      const isLoad = this.isLoad;\n      if (this.dashboardId !== 0 && DefaultDashboards[scriptType]) {\n        const params = {\n          dashboard: true,\n          dashboardName: DefaultDashboards[scriptType],\n          isLoad: isLoad\n        };\n        const action = this.args.model?.uuid ? _server.default.getTokenContent(this.args.model.uuid, params) : _server.default.getDashboardByName(orgId, DefaultDashboards[scriptType], isLoad);\n        action.then(dashboard => {\n          this.setDashboard(dashboard, true, force);\n        }, () => {\n          this.dashboard = _dashboards.default.createDefaultDashboard(this.args.model?.testType);\n        });\n      } else {\n        this.dashboard = _dashboards.default.createDefaultDashboard(this.args.model?.testType);\n      }\n    }\n    loadDashboard(force) {\n      if (force) {\n        this._setQp('qpResultsType', undefined);\n        this._setQp('qpPeriod', undefined);\n        this._setQp('qpLimit', undefined);\n      }\n      if (this.args.model === null) {\n        return;\n      }\n      const dashboardId = this.dashboardId >= 0 ? this.dashboardId : this.args.model?.tokenDashboardId || -1;\n      if (!force && (this.dashboard?.id === dashboardId || this.dashboard?.id === 0 && dashboardId === -1)) {\n        return;\n      }\n      if (dashboardId === 0) {\n        this.setDashboard();\n      } else if (dashboardId > 0) {\n        const resultPromise = this.args.model?.uuid ? _server.default.getTokenContent(this.args.model.uuid, {\n          dashboard: true,\n          dashboardId: dashboardId\n        }) : _server.default.getDashboard(dashboardId);\n        resultPromise.then(dashboard => {\n          this.setDashboard(_.isObject(dashboard) ? dashboard : _dashboards.default.createDefaultDashboard(this.args.model?.testType));\n        }, () => {\n          this.setDashboard();\n        });\n      } else {\n        this.setDashboard(_dashboards.default.getTestConfDashboard(this.args.model?.configuration), false, force);\n      }\n    }\n\n    // isRegionalPanelVisible replacements\n    get isGlanceVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'glance');\n    }\n    get isGridVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'grid');\n    }\n    get isImageViewerVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'images');\n    }\n    get isVideoViewerVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'videos');\n    }\n    get isSuiteSummariesVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'suiteSummaries');\n    }\n    get isCommandSummariesVisible() {\n      return _lib.default.hasId(this.dashboard?.config?.order, 'commandSummaries');\n    }\n    get rampup() {\n      let rampupSecs = this.args.model?.rampupSecs;\n      if (_.isUndefined(rampupSecs)) {\n        return '0 minutes';\n      }\n      let rampup = Math.ceil(rampupSecs / 60);\n      return rampup + (rampup === 1 ? ' minute' : ' minutes');\n    }\n    get iterationSleepSecs() {\n      let iterationSleepSecs = this.args.model?.iterationSleepSecs;\n      if (_.isUndefined(iterationSleepSecs)) {\n        return '';\n      }\n      return iterationSleepSecs + ' seconds';\n    }\n    get duration() {\n      let duration = this.args.model?.durationSecs;\n      if (_.isUndefined(duration)) {\n        return '';\n      }\n      return duration / 60 + (duration === 60 ? ' minute' : ' minutes');\n    }\n    get iterations() {\n      return _lib.default.printNumber(this.args.model?.iterations);\n    }\n    get concurrentClients() {\n      return _lib.default.printNumber(this.args.model?.concurrentClients);\n    }\n    get startConcurrentClients() {\n      return _lib.default.printNumber(this.args.model?.startConcurrentClients);\n    }\n    get step() {\n      return _lib.default.printNumber(this.args.model?.step);\n    }\n    get actualConcurrentClients() {\n      return _lib.default.printNumber(this.args.model?.actualConcurrentClients);\n    }\n    get scriptParamsObj() {\n      let scriptParams = this.args.model?.scriptParams;\n      if (scriptParams) {\n        return JSON.parse(scriptParams);\n      } else {\n        return {};\n      }\n    }\n    get scriptParamsObjBaseline() {\n      let scriptParams = this.regionSummariesBaseline?.scriptParams;\n      if (scriptParams) {\n        return JSON.parse(scriptParams);\n      } else {\n        return {};\n      }\n    }\n    get scriptParams() {\n      let scriptParamsObj = this.scriptParamsObj;\n      if (scriptParamsObj) {\n        let answer = [];\n        _.forEach(scriptParamsObj, (val, key) => {\n          answer.push({\n            key: key,\n            val: val\n          });\n        });\n        return answer;\n      } else {\n        return null;\n      }\n    }\n    get isLoad() {\n      const testType = this.args.model?.testType;\n      return !testType || testType === 'Load';\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.model?.script?.scriptType);\n    }\n    get status() {\n      return _server.default.getLoadTestExecutionStatus(this.args.model);\n    }\n    get isTestConfDefaultDashboard() {\n      const dashboardId = this.isLoad ? this.args.model?.configuration?.dashboard?.id : this.args.model?.configuration?.dashboardFunctional?.id;\n      return this.dashboard?.id === (dashboardId || 0);\n    }\n    get isTestCaseDefaultDashboard() {\n      const dashboardId = this.isLoad ? this.args.model?.configuration?.testCase?.dashboard?.id : this.args.model?.configuration?.testCase?.dashboardFunctional?.id;\n      return this.dashboard?.id === (dashboardId || 0);\n    }\n    get isOrgDefaultDashboard() {\n      const dashboardId = this.isLoad ? this.args.model?.configuration?.testCase?.organization?.dashboard?.id : this.args.model?.configuration?.testCase?.organization?.dashboardFunctional?.id;\n      return this.dashboard?.id === (dashboardId || 0);\n    }\n    get mapRegions() {\n      let answer = [];\n      _.forEach(this.regionSummaries, regionSummary => {\n        if (!regionSummary.isAll) {\n          let executionRegion = regionSummary.executionRegion;\n          answer.push({\n            region: executionRegion.region.name,\n            description: executionRegion.region.description,\n            latitude: executionRegion.region.location.latitude,\n            longitude: executionRegion.region.location.longitude,\n            value: _.isEmpty(executionRegion.summary) ? 0 : executionRegion.summary.iterationsExecuted,\n            expected: executionRegion.expectedResultCount,\n            summary: executionRegion.summary\n          });\n        }\n      });\n      return answer;\n    }\n    get mapRegionsBaseline() {\n      let answer = [];\n      _.forEach(this.regionSummariesBaseline, regionSummary => {\n        if (!regionSummary.isAll) {\n          let executionRegion = regionSummary.executionRegion;\n          answer.push({\n            region: executionRegion.region.name,\n            description: executionRegion.region.description,\n            latitude: executionRegion.region.location.latitude,\n            longitude: executionRegion.region.location.longitude,\n            value: _.isEmpty(executionRegion.summary) ? 0 : executionRegion.summary.iterationsExecuted,\n            expected: executionRegion.expectedResultCount,\n            summary: executionRegion.summary\n          });\n        }\n      });\n      return answer;\n    }\n    get regionSummaries() {\n      // Ember 6.12: A() wraps array for pushObject/removeObject support\n      let answer = (0, _array.A)([]);\n      let execution = this.args.model;\n      if (!_.isEmpty(execution)) {\n        let allRegion = _loadTestRegionalResults.default.create({\n          isFirst: true,\n          isVisible: true,\n          execution: execution,\n          executionRegion: {\n            id: \"ALL\",\n            region: {\n              id: \"ALL\",\n              name: \"ALL\",\n              description: \"ALL\",\n              isAll: true\n            },\n            expectedResultCount: execution.expectedResultCount\n          },\n          resources: {},\n          numResources: 0,\n          zoomInfo: this.zoomInfo,\n          parent: answer\n        });\n        answer.push(allRegion);\n        _.forEach(execution.regions, executionRegion => {\n          answer.push(this.testResults.toRegionSummary(execution, executionRegion, answer));\n        });\n      }\n      return answer;\n    }\n    get regionSummariesBaseline() {\n      let answer = [];\n      let execution = this.baselineExecution;\n      if (!_.isEmpty(execution)) {\n        let allRegion = _loadTestRegionalResults.default.create({\n          isFirst: true,\n          isVisible: true,\n          execution: execution,\n          executionRegion: {\n            id: \"ALL\",\n            region: {\n              id: \"ALL\",\n              name: \"ALL\",\n              description: \"ALL\",\n              isAll: true\n            },\n            expectedResultCount: execution.expectedResultCount\n          },\n          resources: {},\n          numResources: 0,\n          zoomInfo: this.zoomInfo,\n          parent: answer\n        });\n        answer.push(allRegion);\n        _.forEach(execution.regions, executionRegion => {\n          answer.push(this.testResults.toRegionSummary(execution, executionRegion, answer));\n        });\n      }\n      return answer;\n    }\n    get byRegionId() {\n      return _loadTest.default.buildRegionMap(this.regionSummaries);\n    }\n    get byRegionBaselineId() {\n      return _loadTest.default.buildRegionMap(this.regionSummariesBaseline);\n    }\n    get regionName() {\n      return this.regionSummary?.executionRegion?.region?.name;\n    }\n    get regionBaselineId() {\n      return this.regionSummary?.executionRegion?.baseline;\n    }\n    get visibleRegionIds() {\n      const regions = this.regionSummaries;\n      return _.map(_.filter(regions, region => {\n        return region.isVisible && !region.isAll;\n      }), visibleRegion => {\n        return visibleRegion.executionRegion.id;\n      });\n    }\n    get allRegion() {\n      return _.find(this.regionSummaries, regionSummary => {\n        return regionSummary.isAll;\n      });\n    }\n    get allRegionBaseline() {\n      return _.find(this.regionSummariesBaseline, regionSummary => {\n        return regionSummary.isAll;\n      });\n    }\n    get testRunnersNumber() {\n      return Math.max(Number(this.regionSummary?.agents?.length), Number(this.regionSummary?.instances?.length));\n    }\n    saveDashboard() {\n      const dashboard = this.dashboard;\n      _server.default.updateDashboardConfig(dashboard.id, dashboard.config).then(result => {\n        if (_.isObject(result)) {\n          {\n            this.captureViewSnapshot();\n            this.hasDashboardChanges = false;\n          }\n        }\n      });\n    }\n    loadDashboards() {\n      if (!this.args.model?.uuid) {\n        const testType = this.args.model?.testType;\n        const orgId = _environment.config.currentUser.orgId;\n        const isLoad = this.isLoad;\n        this.loadingDashboards = true;\n        _server.default.getDashboards(orgId, isLoad).then(results => {\n          results.push(_dashboards.default.getDefaultDashboard(testType));\n          if (this.isDestroyed) return;\n          this.dashboards = _.sortBy(results, 'name');\n          this.loadingDashboards = false;\n        }, () => {\n          if (this.isDestroyed) return;\n          this.loadingDashboards = false;\n        });\n      }\n    }\n    onNewAgent(agent) {\n      this.agentSearchMap?.add(agent);\n    }\n    get viewRelatedParams() {\n      const params = {};\n      const dashboardId = this.dashboard?.id;\n      if (dashboardId >= 0) {\n        params.dashboardId = dashboardId;\n      }\n      if (this.qpResultsType) {\n        params.resultsType = this.qpResultsType;\n      }\n      if (this.qpPeriod) {\n        params.period = this.qpPeriod;\n      }\n      if (this.qpLimit) {\n        params.limit = this.qpLimit;\n      }\n      if (this.qpResourceId) {\n        params.resourceId = this.qpResourceId;\n      }\n      if (this.qpBaselineResourceId) {\n        params.baselineResourceId = this.qpBaselineResourceId;\n      }\n      if (this.comparisonId) {\n        params.compare = this.comparisonId;\n      }\n      if (this.qpRegionId) {\n        params.regionId = this.qpRegionId;\n      }\n      const tz = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n      if (tz) params.tz = tz;\n      return params;\n    }\n    get notifications() {\n      const notifications = {};\n      _.forEach(this.successTrigger?.actions, function (action) {\n        if (action.notificationMedium) {\n          var notification = notifications[action.notificationMedium];\n          if (!notification) {\n            notification = {\n              notificationMedium: action.notificationMedium,\n              customNotificationList: action.data,\n              successNotificationStyle: 'None',\n              failureNotificationStyle: 'None'\n            };\n            notifications[action.notificationMedium] = notification;\n          }\n          switch (action.actionType) {\n            case 'SuccessNotification':\n              notification.successNotificationStyle = 'Always';\n              break;\n            case 'FirstSuccessNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.successNotificationStyle = 'First';\n              break;\n            case 'FailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'Always';\n              break;\n            case 'FirstFailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'First';\n              break;\n          }\n        }\n      });\n      return _.values(notifications);\n    }\n    get notificationsBaseline() {\n      const notifications = {};\n      _.forEach(this.successTriggerBaseline?.actions, function (action) {\n        if (action.notificationMedium) {\n          var notification = notifications[action.notificationMedium];\n          if (!notification) {\n            notification = {\n              notificationMedium: action.notificationMedium,\n              customNotificationList: action.data,\n              successNotificationStyle: 'None',\n              failureNotificationStyle: 'None'\n            };\n            notifications[action.notificationMedium] = notification;\n          }\n          switch (action.actionType) {\n            case 'SuccessNotification':\n              notification.successNotificationStyle = 'Always';\n              break;\n            case 'FirstSuccessNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.successNotificationStyle = 'First';\n              break;\n            case 'FailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'Always';\n              break;\n            case 'FirstFailureNotification':\n              notification.failureNotificationConsecutiveTimes = (action.minRecurrence || 0) + 1;\n              notification.failureNotificationStyle = 'First';\n              break;\n          }\n        }\n      });\n      return _.values(notifications);\n    }\n    get buckets() {\n      return this.selectedResource?.id > 0 ? this.selectedResource?.buckets : this.regionSummary?.buckets;\n    }\n    get intervals() {\n      return this.selectedResource?.id > 0 ? this.selectedResource?.intervals : this.regionSummary?.intervals;\n    }\n    get utilizationWarning() {\n      return this.bucketsLoaded ? _utilization.default.getUtilizationWarning(this.regionSummary?.buckets, this.dashboard?.config) : null;\n    }\n    get widgetUsageChart() {\n      const testType = this.args.model?.testType;\n      const config = _dashboards.default.getDefaultDashboard(testType);\n      let chart;\n      if (config?.config?.order) {\n        const charts = config.config.order.filter(i => i.id === 'usageChart');\n        if (charts.length) {\n          chart = charts[0];\n        }\n      }\n      return chart;\n    }\n    reloadIntervals() {\n      if (this.isLoad && !this.isHistory) {\n        const executionId = this.regionSummary?.execution?.id;\n        const zoomInfo = this.zoomInfo;\n        const params = {\n          intervals: true\n        };\n        let getIntervals;\n        if (this.args.model?.uuid) {\n          getIntervals = _server.default.getTokenContent(this.args.model.uuid, params, zoomInfo);\n        } else {\n          getIntervals = _server.default.getLoadTestExecutionIntervals(executionId, zoomInfo);\n        }\n        this.intervalsLoaded = false;\n        getIntervals.then(intervals => {\n          this.testResults.processIntervals(intervals, this.metricDefsByName, this.regionSummary?.summary);\n          let newSummary = _.cloneDeep(this.regionSummary?.summary);\n          this.regionSummary.summary = newSummary;\n          this.regionSummary.intervals = intervals;\n          if (this.selectedResource?.id === -1) {\n            this.intervalsLoaded = true;\n          }\n        }, () => {\n          if (this.selectedResource?.id === -1) {\n            this.intervalsLoaded = true;\n          }\n        });\n      } else {\n        this.intervalsLoaded = true;\n      }\n    }\n    get showUsageWidget() {\n      return this.widgetUsageChart && this.args.model?.testType === 'Load' && this.regionSummary?.agents?.length > 0;\n    }\n    loadBuckets() {\n      const uuid = this.regionSummary?.execution?.uuid;\n      const resourceId = this.selectedResource?.id;\n      const execId = this.regionSummary?.execution?.id;\n      const execRegionId = this.regionSummary?.executionRegion?.id;\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        buckets: true\n      };\n      this.bucketsLoaded = false;\n      if (uuid || execId) {\n        const getBuckets = _.isString(uuid) ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getBuckets(execId, execRegionId, resourceId, zoomInfo);\n        getBuckets.then(results => {\n          _.forEach(results, bucket => {\n            this.testResults.processBucket(bucket);\n          });\n          this.regionSummary.buckets = new _trackedBuiltIns.TrackedArray(results);\n          this.bucketsLoaded = true;\n        }, () => {\n          this.regionSummary.buckets = new _trackedBuiltIns.TrackedArray([]);\n          this.bucketsLoaded = true;\n        });\n      } else {\n        this.regionSummary.buckets = new _trackedBuiltIns.TrackedArray([]);\n        this.bucketsLoaded = true;\n      }\n    }\n    getSuiteRelated() {\n      if (!this.isLoad) return;\n      const executionId = this.regionSummary?.execution?.id;\n      const executionRegionId = this.regionSummary?.executionRegion?.id;\n      const isAll = this.regionName === 'ALL';\n      const params = {\n        suiteRelated: true\n      };\n      if (!isAll) {\n        params.executionRegionId = executionRegionId;\n      }\n      let output;\n      if (this.args.model?.uuid) {\n        output = _server.default.getTokenContent(this.args.model.uuid, params);\n      } else {\n        output = isAll ? _server.default.getLoadTestExecutionSuiteRelated(executionId) : _server.default.getLoadTestExecutionRegionSuiteRelated(executionId, executionRegionId);\n      }\n      output.then(results => {\n        if (this.isDestroyed) return;\n        this.regionSummary.suiteSummaries = results.summaries;\n        this.regionSummary.suiteErrors = results.errors;\n        this.suiteSummariesLoaded = true;\n        this.onSuiteSummariesLoadedCallback(this.regionSummary);\n      }, () => {\n        if (this.isDestroyed) return;\n        this.regionSummary.suiteSummaries = [];\n        this.regionSummary.suiteErrors = [];\n        this.suiteSummariesLoaded = true;\n        this.onSuiteSummariesLoadedCallback(this.regionSummary);\n      });\n    }\n    getBaselineSuiteRelated() {\n      if (!this.isLoad) return;\n      const executionId = this.regionSummaryBaseline?.execution?.id;\n      const isAll = this.regionName === 'ALL';\n      const executionRegionId = isAll ? 'ALL' : this.regionBaselineId;\n      if (!executionRegionId) return;\n      const params = {\n        suiteRelated: true\n      };\n      if (!isAll) {\n        params.executionRegionId = executionRegionId;\n      }\n      let output;\n      if (this.args.model?.uuid) {\n        params.comparison = true;\n        output = _server.default.getTokenContent(this.args.model.uuid, params);\n      } else {\n        output = isAll ? _server.default.getLoadTestExecutionSuiteRelated(executionId) : _server.default.getLoadTestExecutionRegionSuiteRelated(executionId, executionRegionId);\n      }\n      output.then(results => {\n        this.regionSummaryBaseline.suiteSummaries = results.summaries;\n        this.regionSummaryBaseline.suiteErrors = results.errors;\n        this.args.onBaselineSuiteSummariesLoaded?.(this.regionSummaryBaseline);\n      }, () => {\n        this.regionSummaryBaseline.suiteSummaries = [];\n        this.regionSummaryBaseline.suiteErrors = [];\n        this.args.onBaselineSuiteSummariesLoaded?.(this.regionSummaryBaseline);\n      });\n    }\n    onSuiteSummariesLoadedCallback(regionSummary) {\n      this.args.onSuiteSummariesLoaded?.(regionSummary);\n    }\n    loadComparisonResult() {\n      const comparisonTest = this.args.model?.uuid ? _server.default.getTokenContent(this.args.model.uuid, {\n        comparison: true\n      }) : _server.default.getLoadTestExecution(this.comparisonId);\n      comparisonTest.then(result => {\n        const currentTestType = this.args.model?.testType;\n        const compareTestType = result.testType;\n        if (currentTestType === 'Load' ? compareTestType === 'Load' : compareTestType !== 'Load') {\n          this.baselineExecution = result;\n          const allRegionBaseline = _.find(this.regionSummariesBaseline, regionSummary => {\n            return regionSummary.isAll;\n          });\n          if (this.args.model?.uuid) {\n            (0, _object.set)(allRegionBaseline, 'execution.uuid', this.args.model.uuid);\n          }\n          this.regionSummaryBaseline = allRegionBaseline;\n          this.getBaselineSuiteRelated();\n        } else {\n          _lib.default.error(`${currentTestType} test is not allowed to compare with ${compareTestType} test!`);\n          this._setQp('comparisonId', undefined);\n        }\n      });\n    }\n    getBaselineSelectedResource(resources, resourceId) {\n      return _.find(resources, resource => resource.id === resourceId);\n    }\n    baselineResultStateMgt() {\n      this.baselineSelectedResource = _loadTest.default.OverallResource;\n      this.resultsType = 'baseline';\n      this.baselineExecution = null;\n      this.regionSummaryBaseline = null;\n      this.loadComparisonResult();\n    }\n    _setRegionFromModel() {\n      const regionId = this.qpRegionId || 'ALL';\n      this.regionSummary = _.find(this.regionSummaries, rs => {\n        return rs.executionRegion?.id === Number(regionId);\n      }) || this.allRegion;\n    }\n\n    // Observer replacements (called from did-update modifiers in templates)\n    onArgRegionIdChanged() {\n      if (this.qpRegionId === this.args.qpRegionId) return;\n      this.qpRegionId = this.args.qpRegionId;\n      this.regionLoaded = false;\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if (this.isDestroyed) return;\n        this._setRegionFromModel();\n        if (this.regionSummary) this.regionSummary.isVisible = true;\n        this.getSuiteRelated();\n        this.regionLoaded = true;\n      });\n    }\n    onArgDashboardIdChanged() {\n      if (this.qpDashboardId === this.args.qpDashboardId) return;\n      this.qpDashboardId = this.args.qpDashboardId;\n      this.dashboardId = this.qpDashboardId >= 0 ? this.qpDashboardId : -1;\n    }\n    onArgPeriodOrLimitChanged() {\n      const periodChanged = this.qpPeriod !== this.args.qpPeriod;\n      const limitChanged = this.qpLimit !== this.args.qpLimit;\n      if (!periodChanged && !limitChanged) return;\n      this.qpPeriod = this.args.qpPeriod;\n      this.qpLimit = this.args.qpLimit;\n      this.setResultsTypeRelatedField('limit', 'qpLimit', 15);\n      this.setResultsTypeRelatedField('period', 'qpPeriod', 'recent');\n      this.latestLimit = this.limit;\n    }\n    onArgResourceIdChanged() {\n      if (this.qpResourceId === this.args.qpResourceId) return;\n      this.qpResourceId = this.args.qpResourceId;\n      const resourceId = Number(this.qpResourceId);\n      const resources = this.regionSummary?.resources;\n      const found = resourceId && resourceId !== -1 ? _.find(resources, r => r.id === resourceId) : null;\n      this.selectedResource = found || _loadTest.default.OverallResource;\n    }\n    onModelIdChanged() {\n      if (_.isNumber(this.args.model?.id)) {\n        this.testResults.destroyResultsView(this);\n        this.testResults.initComponent(this);\n        this.bucketsLoaded = false;\n        this.outputFilesLoaded = false;\n        this.regionLoaded = true;\n      }\n    }\n    onComparisonIdOrResultsTypeChanged() {\n      if (!this.comparisonId) {\n        this.resultsType = this.qpResultsType;\n        this.baselineExecution = null;\n        this.updateResultsType(this.resultsType);\n      } else {\n        this.baselineResultStateMgt();\n      }\n    }\n    onHasDashboardChangesChanged() {\n      this.args.hasDashboardChanged?.(this.hasDashboardChanges);\n    }\n    onShowLoggingPanelChanged() {\n      if (this.showLoggingPanel) {\n        if (this.currentTab === '#results-tab') {\n          this.reloadIntervals();\n          this.loadBuckets();\n        }\n        if (this.currentTab === '#logging-tab') {\n          $('[href=\"#results-tab\"]').tab('show');\n        }\n      }\n    }\n    onRegionVisibilityChanged() {\n      this.testResults.updateStreamingRegions(this);\n    }\n    onDashboardRelatedChange() {\n      this.loadDashboard();\n    }\n    onDashboardChange() {\n      this.setResultsTypeRelatedField('resultsType', 'qpResultsType', 'thisRun');\n      this.setResultsTypeRelatedField('limit', 'qpLimit', 15);\n      this.setResultsTypeRelatedField('period', 'qpPeriod', 'recent');\n      this.latestLimit = this.limit;\n      this.captureViewSnapshot();\n      this.refreshReportSettingsChanged();\n\n      // todo: forcing resultType as setResultsTypeRelatedField forces from dashboardSettings on page load\n      if (this.comparisonId) {\n        this.resultsType = 'baseline';\n      }\n    }\n    onModelChanged() {\n      this._setRegionFromModel();\n    }\n    onResourcesChanged() {\n      const resources = this.regionSummary?.resources;\n      const filteredResources = _.filter(_.values(resources), resource => {\n        return !_.isEmpty(resource.resource);\n      });\n      filteredResources.push(_loadTest.default.OverallResource);\n      this.displayedResources = _.sortBy(filteredResources, resource => {\n        return resource.resource;\n      });\n    }\n\n    // Lifecycle: didInsertElement replacement\n    onInsert() {\n      const _this = this;\n      this.hasDashboardChanges = false;\n      if (this.comparisonId) {\n        this.loadComparisonResult();\n      }\n      if (this.isLoad) this.args.suiteImagesLoaded?.();\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        this.applicationState.setProp('selectedId', this.args.model?.testCaseId);\n        this.testResults.initComponent(this);\n        this.getSuiteRelated();\n        $('#connectionState').bootstrapToggle();\n        $('#connectionState').change(function () {\n          if (!_this.isSystemConnectionToggle) {\n            let connected = $(this).prop('checked');\n            if (connected) {\n              _this.testResults.connect(_this);\n            } else {\n              _this.testResults.disconnect(_this);\n            }\n          }\n        });\n        if (this.showLoggingPanel) {\n          this.reloadIntervals();\n          this.loadBuckets();\n        }\n      });\n      $(\"#resultsTabsNav a\").on(\"shown.bs.tab\", function () {\n        const href = $(this).attr('href');\n        _this.currentTab = href;\n        if (href === '#test-runners') {\n          _this.showTestRunners = true;\n        } else if (href === '#files-tab') {\n          _this.showFiles = true;\n          _this.EventBus.publish('filesGrid.invalidate');\n        } else if (href === '#child-results-tab') {\n          _this.showChildResults = true;\n          _this.EventBus.publish('filesGrid.invalidate');\n        } else if (href === '#results-tab') {\n          _this.EventBus.publish(_this.regionName + '.charts.invalidate');\n          _this.EventBus.publish(_this.regionName + '_resultsGrid.invalidate');\n          _this.EventBus.publish(_this.regionName + '_tracesGrid.invalidate');\n          _this.EventBus.publish(_this.regionName + '_executionResultsGrid.invalidate');\n        }\n      });\n    }\n\n    // Lifecycle: willDestroyElement replacement\n    willDestroy() {\n      super.willDestroy(...arguments);\n      $('#connectionState').unbind('change');\n      this.testResults.disconnect(this);\n      this.testResults.destroyResultsView(this);\n      this.EventBus.unsubscribe('onNewAgent', this, 'onNewAgent');\n      _lib.default.unobserveKeys(this, ['regionSummaries.@each.isVisible'], this.onRegionVisibilityChanged);\n      _lib.default.unobserveKeys(this, ['regionSummary.resources', 'args.model.completed', 'regionSummary.numResources'], this.onResourcesChanged);\n      _lib.default.unobserveKeys(this, ['args.model.id'], this.onModelIdChanged);\n      _lib.default.unobserveKeys(this, ['comparisonId', 'qpResultsType'], this.onComparisonIdOrResultsTypeChanged);\n      _lib.default.unobserveKeys(this, ['hasDashboardChanges'], this.onHasDashboardChangesChanged);\n      _lib.default.unobserveKeys(this, ['showLoggingPanel'], this.onShowLoggingPanelChanged);\n      _lib.default.unobserveKeys(this, ['args.model', 'dashboardId'], this.onDashboardRelatedChange);\n      _lib.default.unobserveKeys(this, ['dashboard'], this.onDashboardChange);\n      _lib.default.unobserveKeys(this, ['args.model'], this.onModelChanged);\n      _lib.default.unobserveKeys(this, ['args.qpRegionId'], this.onArgRegionIdChanged);\n      _lib.default.unobserveKeys(this, ['args.qpDashboardId'], this.onArgDashboardIdChanged);\n      _lib.default.unobserveKeys(this, ['args.qpResourceId'], this.onArgResourceIdChanged);\n      _lib.default.unobserveKeys(this, ['args.qpPeriod', 'args.qpLimit'], this.onArgPeriodOrLimitChanged);\n    }\n\n    // Actions\n    regionSelected(regionSummary) {\n      this.regionLoaded = false;\n      this._setQp('qpRegionId', regionSummary && regionSummary.executionRegion?.id !== 'ALL' ? regionSummary.executionRegion?.id : undefined);\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        this.regionSummary = regionSummary;\n        regionSummary.isVisible = true;\n        this.getSuiteRelated();\n        this.regionLoaded = true;\n      });\n    }\n    regionSelectedBaseline(regionSummary) {\n      this.qpRegionBaselineId = regionSummary && regionSummary.executionRegion?.id !== 'ALL' ? regionSummary.executionRegion?.id : undefined;\n    }\n    orderChanged(newOrder) {\n      let dashboardConfig = this.dashboard?.config;\n      if (!_.isEqual(dashboardConfig?.order, newOrder)) {\n        this.dashboard.config.order = new _trackedBuiltIns.TrackedArray(newOrder);\n        this.refreshReportSettingsChanged();\n      }\n    }\n    chartUpdated(newChart, oldChart) {\n      let index;\n      let charts = this.dashboard?.config?.charts;\n      let order = this.dashboard?.config?.order;\n      if (_.isObject(oldChart)) {\n        let existingId = oldChart.id;\n        let existing = _.find(charts, chart => {\n          return chart.id === existingId;\n        });\n        (0, _object.setProperties)(existing, newChart);\n        index = _.findIndex(order, widget => {\n          return widget.id === existingId;\n        });\n        if (index !== -1) {\n          order.splice(index, 1);\n        }\n      } else {\n        charts.splice(charts.length, 0, newChart);\n        index = _.findIndex(order, item => {\n          return item.type === 'Chart';\n        });\n      }\n      order.splice(index >= 0 ? index : 0, 0, {\n        type: 'Chart',\n        id: newChart.id\n      });\n      this.dashboard.config.charts = charts;\n      this.refreshReportSettingsChanged();\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if ($('[data-sortable-id=\"' + newChart.id + '\"]')[0]) {\n          _lib.default.scrollTo('[data-sortable-id=\"' + newChart.id + '\"]');\n        }\n      });\n    }\n    gridConfigChanged(newConfig) {\n      this.dashboard.config.grid = newConfig;\n      this.refreshReportSettingsChanged();\n    }\n    glanceConfigChanged(newConfig) {\n      this.dashboard.config.glance = newConfig;\n      this.refreshReportSettingsChanged();\n    }\n    consoleConfigChanged(newConfig) {\n      let config = this.dashboard?.config?.console;\n      if (!_.isEqual(config, newConfig)) {\n        this.dashboard.config.console = newConfig;\n        this.refreshReportSettingsChanged();\n      }\n    }\n    consoleConfigChangedBaseline(newConfig) {\n      this.dashboard.config.baselineConsole = newConfig;\n    }\n    logInfoChanged(info) {\n      this.logInfo = info;\n    }\n    baselineLogInfoChanged(info) {\n      this.baselineLogInfo = info;\n    }\n    logLevelChanged(level) {\n      this.testResults.logLevelChanged(this, level);\n    }\n    logLevelChangedBaseline(level) {\n      // this.testResults.logLevelChanged(this, level);\n    }\n    showDashboardModalAction() {\n      this.showDashboardModal = true;\n    }\n    dashboardModalClosed() {\n      this.showDashboardModal = false;\n    }\n    _switchDashboard(dashboard) {\n      const dashboardId = dashboard ? dashboard.id : -1;\n      this._setQp('dashboardId', dashboardId);\n      if (dashboardId === 0 || dashboardId === -1) {\n        this.setDashboard();\n        this._setQp('qpDashboardId', undefined);\n      } else {\n        this._setQp('qpDashboardId', dashboardId);\n      }\n      this.hasDashboardChanges = false;\n    }\n    dashboardSelected(dashboard) {\n      if (!this.hasDashboardChanges) {\n        this._switchDashboard(dashboard);\n        return;\n      }\n      _lib.default.confirm('You have unsaved changes to this view. Are you sure you want to discard them?', 'Discard', () => {\n        this._switchDashboard(dashboard);\n      }, 'Cancel', () => {}, 'Discard View Changes');\n    }\n    revertDashboardChanges() {\n      _lib.default.confirm('Are you sure you want to discard your changes to this view?', 'OK', () => {\n        this.loadDashboard(true);\n        this.hasDashboardChanges = false;\n      }, 'Cancel', () => {}, 'Discard View Changes');\n    }\n    saveDashboardAs(name, description, defaultTypes, isPublic) {\n      let orgId = _environment.config.currentUser.orgId;\n      let dashboard = this.dashboard;\n      let isLoad = this.isLoad;\n      _server.default.getDashboardByName(orgId, name, isLoad).then(existing => {\n        _lib.default.confirm('Are you sure you want to overwrite the <strong>' + name + '</strong> view?', 'OK', () => {\n          _server.default.updateDashboardConfig(existing.id, dashboard.config, description, isPublic).then(result => {\n            if (_.isObject(result)) {\n              this.hasDashboardChanges = false;\n              this._setQp('dashboardId', existing.id);\n              (0, _object.set)(existing, 'config', dashboard.config);\n              (0, _object.set)(existing, 'description', result.description);\n              (0, _object.set)(existing, 'public', result.public);\n              updateDefaultDashboard(this, defaultTypes);\n            }\n          });\n        }, 'Cancel', () => {}, 'Overwrite View');\n      }, () => {\n        _server.default.createDashboard(orgId, name, dashboard.config, description, isLoad, isPublic).then(result => {\n          if (_.isObject(result)) {\n            this.hasDashboardChanges = false;\n            this.setDashboard(result);\n            this._setQp('dashboardId', result.id);\n            this.dashboards = _.sortBy([...(this.dashboards || []), result], 'name');\n            updateDefaultDashboard(this, defaultTypes);\n          }\n        });\n      });\n    }\n    saveDashboardAction() {\n      this.saveDashboard();\n    }\n    updateDashboard(name, description, settings) {\n      const dashboardId = this.dashboard?.id;\n      _server.default.updateDashboardName(dashboardId, name, description, this).then(data => {\n        if (this.isDestroyed || !data) return;\n        const listed = _.find(this.dashboards, d => d.id === dashboardId);\n        if (listed && listed !== this.dashboard) {\n          (0, _object.set)(listed, 'name', data.name);\n          (0, _object.set)(listed, 'description', data.description);\n        }\n        this.dashboards = _.sortBy(this.dashboards, 'name');\n      });\n      const configSettings = this.dashboard?.config?.settings;\n      if (!_.isEqual(settings, {\n        ...configSettings\n      })) {\n        _.forEach(settings, (value, key) => {\n          (0, _object.set)(configSettings, key, value);\n        });\n        this.hasDashboardChanges = true;\n        this.saveDashboard();\n      }\n    }\n    makeDefaultDashboard(defaultTypes) {\n      updateDefaultDashboard(this, defaultTypes);\n    }\n    deleteDashboard() {\n      _lib.default.confirm('Are you sure you want to delete the <strong>' + this.dashboard?.name + '</strong> view?', 'OK', () => {\n        const deletedId = this.dashboard?.id;\n        const deletedName = this.dashboard?.name;\n        _server.default.deleteDashboard(deletedId).then(() => {\n          _lib.default.info(\"<strong>\" + deletedName + \"</strong> view deleted successfully\");\n          this.dashboards = _.filter(this.dashboards, d => d.id !== deletedId);\n          this._setQp('dashboardId', -1);\n          this.setDashboard();\n        });\n      }, 'Cancel', () => {}, 'Delete View');\n    }\n    showGlance() {\n      showRegionalPanel(this, {\n        type: 'Glance',\n        id: 'glance'\n      }, true);\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.scrollTo('[data-sortable-id=\"glance\"]');\n      });\n    }\n    showSuiteSummaries() {\n      showRegionalPanel(this, {\n        type: 'SuiteSummaries',\n        id: 'suiteSummaries'\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if ($('[data-sortable-id=\"suiteSummaries\"]')[0]) {\n          _lib.default.scrollTo('[data-sortable-id=\"suiteSummaries\"]');\n        }\n      });\n    }\n    showCommandsSummaries() {\n      showRegionalPanel(this, {\n        type: 'CommandSummaries',\n        id: 'commandSummaries'\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if ($('[data-sortable-id=\"commandSummaries\"]')[0]) {\n          _lib.default.scrollTo('[data-sortable-id=\"commandSummaries\"]');\n        }\n      });\n    }\n    showImageViewer() {\n      showRegionalPanel(this, {\n        type: 'Images',\n        id: 'images'\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if ($('[data-sortable-id=\"images\"]')[0]) {\n          _lib.default.scrollTo('[data-sortable-id=\"images\"]');\n        }\n      });\n    }\n    showVideoViewer() {\n      showRegionalPanel(this, {\n        type: 'Videos',\n        id: 'videos'\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if ($('[data-sortable-id=\"videos\"]')[0]) {\n          _lib.default.scrollTo('[data-sortable-id=\"videos\"]');\n        }\n      });\n    }\n    showResultsGrid() {\n      showRegionalPanel(this, {\n        type: 'Grid',\n        id: 'grid'\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.scrollTo('[data-sortable-id=\"grid\"]');\n      });\n    }\n    showTestOutcomeModalAction(selected, isRegion) {\n      this.testOutcomeSelected = selected || this.args.model;\n      this.testOutcomeIsRegion = isRegion;\n      this.showTestOutcomeModal = true;\n    }\n    testOutcomeModalClosed() {\n      if (!this.isDestroyed) {\n        this.showTestOutcomeModal = false;\n        this.testOutcomeSelected = null;\n        this.testOutcomeIsRegion = null;\n      }\n    }\n    showDashboardSettingsModalAction() {\n      this.showDashboardSettingsModal = true;\n    }\n    dashboardSettingsModalClosed() {\n      if (!this.isDestroyed) {\n        this.showDashboardSettingsModal = false;\n      }\n    }\n    intervalsLoadedAction() {\n      if (this.args.intervalsLoadedFunc) this.args.intervalsLoadedFunc();\n    }\n    baselineIntervalsLoadedAction() {\n      this.args.baselineIntervalsLoaded?.();\n    }\n    onImagesLoadedAction() {\n      this.args.imagesLoaded?.();\n    }\n    onVideoImagesLoadedAction() {\n      this.args.videosImagesLoaded?.();\n    }\n    onVideoBaselineImagesLoadedAction() {\n      this.args.videoBaselineImagesLoaded?.();\n    }\n    baselineImagesLoadedAction() {\n      if (this.args.baselineImagesLoaded) {\n        this.args.baselineImagesLoaded();\n      }\n    }\n    onSuiteImagesLoadedAction() {\n      this.args.suiteImagesLoaded?.();\n    }\n    onBaselineSuiteImagesLoadedAction() {\n      this.args.baselineSuiteImagesLoaded?.();\n    }\n    videosLoadedAction(count) {\n      this.outputVideosCount = count;\n      this.outputVideosLoaded = count;\n      if (this.args.videosLoaded) {\n        this.args.videosLoaded();\n      }\n    }\n    onSummaryHistoryLoadedAction() {\n      this.args.summaryHistoryLoaded?.();\n    }\n    baselineSummaryHistoryLoadedAction() {\n      this.args.baselineSummaryHistoryLoaded?.();\n    }\n    onSuiteSummariesLoadedAction(regionSummary) {\n      this.onSuiteSummariesLoadedCallback(regionSummary);\n    }\n    onBaselineSuiteSummariesLoadedAction(regionSummary) {\n      this.args.onBaselineSuiteSummariesLoaded?.(regionSummary);\n    }\n    outputFilesLoading() {\n      this.outputFilesLoaded = false;\n    }\n    outputFilesLoadedAction(outputFileCount) {\n      this.outputFileCount = outputFileCount;\n      this.outputFilesLoaded = true;\n    }\n    outputFilesLoadedBaseline(outputFileCount) {\n      this.outputFileCountBaseline = outputFileCount;\n      this.outputFilesLoaded = true;\n    }\n    resourcesLoadedAction(resources) {\n      const resourceId = Number(this.qpResourceId);\n      if (resourceId && resourceId !== -1) {\n        this.selectedResource = _.find(resources, resource => {\n          return resource.id === resourceId;\n        }) || _loadTest.default.OverallResource;\n      }\n      this.args.resourcesLoadedFunc?.(this.selectedResource);\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        this.hasResourcesGrid = $('#' + this.regionName + '_resultsGrid').length !== 0;\n      });\n    }\n    baselineResourcesLoaded(resources) {\n      const resourceId = Number(this.qpBaselineResourceId);\n      if (resourceId && resourceId !== -1) {\n        this.baselineSelectedResource = this.getBaselineSelectedResource(resources, resourceId) || _loadTest.default.OverallResource;\n      }\n      this.args.baselineResourcesLoadedFunc?.(this.baselineSelectedResource);\n    }\n    bucketsLoadedAction() {\n      this.bucketsLoaded = true;\n      this.args.bucketsLoadedFunc?.();\n    }\n    baselineBucketsLoadedAction() {\n      this.args.baselineBucketsLoadedFunc?.();\n    }\n    resourceSelected(setBaselineResource = true, resource) {\n      this.selectedResource = resource;\n      this._setQp('qpResourceId', resource && resource.id > -1 ? resource.id : undefined);\n      if (setBaselineResource && this.args.model?.baseline) {\n        const resources = this.regionSummaryBaseline?.resources;\n        const selectedResource = this.getBaselineSelectedResource(resources, resource.id);\n        this.baselineSelectedResource = selectedResource;\n        this._setQp('qpBaselineResourceId', selectedResource && selectedResource.id > -1 ? selectedResource.id : undefined);\n      }\n    }\n    baselineResourceSelected(resource) {\n      this.baselineSelectedResource = resource;\n      this._setQp('qpBaselineResourceId', resource && resource.id > -1 ? resource.id : undefined);\n    }\n    saveDefaultView() {\n      const contents = JSON.stringify(_dashboards.default.getDefaultDashboard(this.testType));\n      saveAs(new Blob([contents], {\n        type: \"application/json;charset=utf-8\"\n      }), 'default-view.json');\n    }\n    transitionToAction(path, id, params) {\n      this.args.transitionTo?.(path, id, params);\n    }\n    showImageDetailsModalAction(image) {\n      this.showImageDetailsModal = false;\n      if (image) {\n        this.selectedImage = image;\n        this.showImageDetailsModal = true;\n      }\n    }\n    imageDetailsModalClosed() {\n      this.showImageDetailsModal = false;\n      this.selectedImage = null;\n    }\n    showVideoDetailsModalAction(video) {\n      this.showVideoDetailsModal = false;\n      if (video) {\n        this.selectedVideo = video;\n        this.showVideoDetailsModal = true;\n      }\n    }\n    videoDetailsModalClosed() {\n      this.showVideoDetailsModal = false;\n      this.selectedVideo = null;\n    }\n    updateResultsType(newResultsType) {\n      if (newResultsType === 'compare') {\n        this._setQp('qpPeriod', undefined);\n        this._setQp('qpLimit', undefined);\n        this.compareResults();\n        return;\n      }\n      if (this.resultsType !== newResultsType) {\n        this.resultsType = newResultsType;\n        this._setQp('qpResultsType', newResultsType);\n        this.dashboard.config.settings.resultsType = newResultsType;\n        if (newResultsType === 'thisRun') {\n          this._setQp('qpPeriod', undefined);\n          this._setQp('comparisonId', undefined);\n          this._setQp('qpLimit', undefined);\n        }\n        this.refreshReportSettingsChanged();\n      }\n    }\n    updatePeriod(newPeriod) {\n      if (this.period !== newPeriod) {\n        this.period = newPeriod;\n        this._setQp('qpPeriod', newPeriod);\n        this.dashboard.config.settings.period = newPeriod;\n        if (newPeriod !== 'recent') {\n          this._setQp('qpLimit', undefined);\n        }\n        this.refreshReportSettingsChanged();\n      }\n    }\n    updateLimit(val) {\n      let newLimit = val.target.value;\n      if (Number(this.latestLimit) !== Number(newLimit)) {\n        this.latestLimit = Number(newLimit);\n        this.limit = Number(newLimit);\n        this._setQp('qpLimit', Number(newLimit));\n        this.dashboard.config.settings.limit = Number(newLimit);\n        this.refreshReportSettingsChanged();\n      }\n    }\n    toggleReportSetupPanel() {\n      this.showReportSetupPanel = !this.showReportSetupPanel;\n    }\n    hideReportSetupPanel() {\n      this.showReportSetupPanel = false;\n    }\n    toggleZoomBar() {\n      this.showZoomBar = !this.showZoomBar;\n    }\n    hideZoomBar() {\n      this.showZoomBar = false;\n    }\n    showUsageHistory(usageId) {\n      this.showDetailsModal = true;\n      this.selectedUsageObjId = usageId;\n    }\n    usageDetailsModalClose() {\n      this.showDetailsModal = null;\n      this.selectedUsageObjId = null;\n    }\n    configBaseLineResultSet() {\n      this.isCompareResults = false;\n      this.showConfBaseLineModal = true;\n    }\n    confBaseLineModalClosed(baseline, doUpdate) {\n      if (!doUpdate || this.router.currentRoute.queryParams.compare == baseline) {\n        this.showConfBaseLineModal = false;\n        return;\n      }\n      if (baseline) {\n        if (this.isCompareResults) {\n          this._setQp('comparisonId', baseline);\n          this._setQp('qpResultsType', undefined);\n        } else {\n          (0, _object.set)(this.args.model, 'baseline', baseline);\n          this._setQp('comparisonId', undefined);\n        }\n      }\n      this.showConfBaseLineModal = false;\n      this.isCompareResults = false;\n    }\n    compareResults() {\n      this.isCompareResults = true;\n      this.showConfBaseLineModal = true;\n    }\n    addTokenToExecution(token) {\n      (0, _object.set)(this.args.model, 'tokens', [...(this.args.model?.tokens || []), token]);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"pendingTraces\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"pendingResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"applyTraces\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"currentLogLevel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"currentTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '#results-tab';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"regionLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"showFilterBar\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"showReportSetupPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"showZoomBar\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"showTestResultBaselineModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"baselineStatus\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"currentTestTitle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Current Test';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"baselineTestTitle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Baseline Test';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"hasDashboardChanges\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"dashboard\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"showNoteEditor\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"comparisonId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"dashboardId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"qpDashboardId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"qpResultsType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"qpPeriod\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"qpLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"qpResourceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"qpBaselineResourceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"qpRegionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"qpRegionBaselineId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"bucketsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"intervalsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"suiteSummariesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"loadingDashboards\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"dashboards\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"displayedResources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"regionSummary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"resultsType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"latestLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"period\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"baselineExecution\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor44 = _applyDecoratedDescriptor(_class.prototype, \"regionSummaryBaseline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor45 = _applyDecoratedDescriptor(_class.prototype, \"selectedResource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor46 = _applyDecoratedDescriptor(_class.prototype, \"baselineSelectedResource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor47 = _applyDecoratedDescriptor(_class.prototype, \"showDashboardModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor48 = _applyDecoratedDescriptor(_class.prototype, \"showTestOutcomeModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor49 = _applyDecoratedDescriptor(_class.prototype, \"testOutcomeSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor50 = _applyDecoratedDescriptor(_class.prototype, \"testOutcomeIsRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor51 = _applyDecoratedDescriptor(_class.prototype, \"showDashboardSettingsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor52 = _applyDecoratedDescriptor(_class.prototype, \"logInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor53 = _applyDecoratedDescriptor(_class.prototype, \"baselineLogInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor54 = _applyDecoratedDescriptor(_class.prototype, \"showConfBaseLineModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor55 = _applyDecoratedDescriptor(_class.prototype, \"isCompareResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor56 = _applyDecoratedDescriptor(_class.prototype, \"outputFileCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor57 = _applyDecoratedDescriptor(_class.prototype, \"outputFileCountBaseline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor58 = _applyDecoratedDescriptor(_class.prototype, \"outputVideosCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor59 = _applyDecoratedDescriptor(_class.prototype, \"outputVideosLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor60 = _applyDecoratedDescriptor(_class.prototype, \"hasResourcesGrid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor61 = _applyDecoratedDescriptor(_class.prototype, \"showTestRunners\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor62 = _applyDecoratedDescriptor(_class.prototype, \"showFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor63 = _applyDecoratedDescriptor(_class.prototype, \"showChildResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor64 = _applyDecoratedDescriptor(_class.prototype, \"showDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor65 = _applyDecoratedDescriptor(_class.prototype, \"selectedUsageObjId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor66 = _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor67 = _applyDecoratedDescriptor(_class.prototype, \"selectedImage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor68 = _applyDecoratedDescriptor(_class.prototype, \"showVideoDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor69 = _applyDecoratedDescriptor(_class.prototype, \"selectedVideo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor70 = _applyDecoratedDescriptor(_class.prototype, \"isSystemConnectionToggle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor71 = _applyDecoratedDescriptor(_class.prototype, \"currentSubTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor72 = _applyDecoratedDescriptor(_class.prototype, \"showMakeDefaultDashboard\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor73 = _applyDecoratedDescriptor(_class.prototype, \"showAddChartModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"now\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"now\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"noteClass\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"noteClass\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTopBar\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"showTopBar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"zoomText\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"zoomText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"allowZoomBar\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"allowZoomBar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"exportToCsvUrl\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"exportToCsvUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDefs\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDefs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"successTrigger\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"successTrigger\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outcomeHtml\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"outcomeHtml\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"startedAt\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"startedAt\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"finishedAt\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"finishedAt\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showLoggingPanel\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"showLoggingPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"duration\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"duration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, \"iterations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"concurrentClients\", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, \"concurrentClients\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"actualConcurrentClients\", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, \"actualConcurrentClients\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"status\", [_dec15], Object.getOwnPropertyDescriptor(_class.prototype, \"status\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isTestConfDefaultDashboard\", [_dec16], Object.getOwnPropertyDescriptor(_class.prototype, \"isTestConfDefaultDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isTestCaseDefaultDashboard\", [_dec17], Object.getOwnPropertyDescriptor(_class.prototype, \"isTestCaseDefaultDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isOrgDefaultDashboard\", [_dec18], Object.getOwnPropertyDescriptor(_class.prototype, \"isOrgDefaultDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"mapRegions\", [_dec19], Object.getOwnPropertyDescriptor(_class.prototype, \"mapRegions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"mapRegionsBaseline\", [_dec20], Object.getOwnPropertyDescriptor(_class.prototype, \"mapRegionsBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSummaries\", [_dec21], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSummariesBaseline\", [_dec22], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSummariesBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"byRegionId\", [_dec23], Object.getOwnPropertyDescriptor(_class.prototype, \"byRegionId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"byRegionBaselineId\", [_dec24], Object.getOwnPropertyDescriptor(_class.prototype, \"byRegionBaselineId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionName\", [_dec25], Object.getOwnPropertyDescriptor(_class.prototype, \"regionName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionBaselineId\", [_dec26], Object.getOwnPropertyDescriptor(_class.prototype, \"regionBaselineId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"visibleRegionIds\", [_dec27], Object.getOwnPropertyDescriptor(_class.prototype, \"visibleRegionIds\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"allRegion\", [_dec28], Object.getOwnPropertyDescriptor(_class.prototype, \"allRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"allRegionBaseline\", [_dec29], Object.getOwnPropertyDescriptor(_class.prototype, \"allRegionBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testRunnersNumber\", [_dec30], Object.getOwnPropertyDescriptor(_class.prototype, \"testRunnersNumber\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"buckets\", [_dec31], Object.getOwnPropertyDescriptor(_class.prototype, \"buckets\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"intervals\", [_dec32], Object.getOwnPropertyDescriptor(_class.prototype, \"intervals\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showUsageWidget\", [_dec33], Object.getOwnPropertyDescriptor(_class.prototype, \"showUsageWidget\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onArgRegionIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onArgRegionIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onArgDashboardIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onArgDashboardIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onArgPeriodOrLimitChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onArgPeriodOrLimitChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onArgResourceIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onArgResourceIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onModelIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onModelIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onComparisonIdOrResultsTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onComparisonIdOrResultsTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHasDashboardChangesChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHasDashboardChangesChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowLoggingPanelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowLoggingPanelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onRegionVisibilityChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRegionVisibilityChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDashboardRelatedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDashboardRelatedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDashboardChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDashboardChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onModelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onModelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onResourcesChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onResourcesChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSelectedBaseline\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelectedBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"orderChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orderChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chartUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chartUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gridConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gridConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"glanceConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"glanceConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"consoleConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"consoleConfigChangedBaseline\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleConfigChangedBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logInfoChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logInfoChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineLogInfoChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineLogInfoChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logLevelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logLevelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logLevelChangedBaseline\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logLevelChangedBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDashboardModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDashboardModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dashboardModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dashboardModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dashboardSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dashboardSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"revertDashboardChanges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"revertDashboardChanges\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveDashboardAs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveDashboardAs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveDashboardAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveDashboardAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDashboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"makeDefaultDashboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"makeDefaultDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteDashboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showGlance\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showGlance\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showSuiteSummaries\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showSuiteSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCommandsSummaries\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showCommandsSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageViewer\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageViewer\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showVideoViewer\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showVideoViewer\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showResultsGrid\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showResultsGrid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcomeModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcomeModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testOutcomeModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testOutcomeModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDashboardSettingsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDashboardSettingsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dashboardSettingsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dashboardSettingsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"intervalsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"intervalsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineIntervalsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineIntervalsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideoImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideoImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideoBaselineImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideoBaselineImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSuiteImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSuiteImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBaselineSuiteImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBaselineSuiteImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videosLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videosLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSummaryHistoryLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSummaryHistoryLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineSummaryHistoryLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineSummaryHistoryLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSuiteSummariesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSuiteSummariesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBaselineSuiteSummariesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBaselineSuiteSummariesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoading\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"outputFilesLoading\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"outputFilesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoadedBaseline\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"outputFilesLoadedBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourcesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourcesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineResourcesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineResourcesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineBucketsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineBucketsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourceSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourceSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineResourceSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineResourceSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveDefaultView\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveDefaultView\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"transitionToAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"transitionToAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"imageDetailsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"imageDetailsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showVideoDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showVideoDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoDetailsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoDetailsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResultsType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResultsType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePeriod\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePeriod\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLimit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLimit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleReportSetupPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleReportSetupPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hideReportSetupPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hideReportSetupPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleZoomBar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleZoomBar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hideZoomBar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hideZoomBar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showUsageHistory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showUsageHistory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"usageDetailsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"usageDetailsModalClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configBaseLineResultSet\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configBaseLineResultSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"confBaseLineModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"confBaseLineModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"compareResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"compareResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addTokenToExecution\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addTokenToExecution\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/components/load-test-results-browser\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@testable/shared-ui/components/load-test-results-base\", \"@ember/template-factory\"], function (_exports, _component, _object, _loadTestResultsBase, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@testable/shared-ui/components/load-test-results-base\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <LoadTestResult::Wrapper @ctx={{this}} @model={{@model}}>\n    <div class=\"d-flex align-items-start justify-content-between\">\n      <LoadTestResult::Tabs\n        @isPrint={{@isPrint}}\n        @model={{@model}}\n        @logInfo={{this.logInfo}}\n        @showLoggingPanel={{this.showLoggingPanel}}\n        @isBrowserBased={{this.isBrowserBased}}\n        @testRunnersNumber={{this.testRunnersNumber}}\n      />\n  \n      <LoadTestResult::ActionMenu\n        @model={{@model}}\n        @isMultiUser={{this.isMultiUser}}\n        @isBrowserBased={{this.isBrowserBased}}\n        @onChangeViewLayout={{@onChangeLayout}}\n        @regionSummary={{this.regionSummary}}\n        @isSuperAdmin={{this.isSuperAdmin}}\n        @isViewer={{this.isViewer}}\n        @hasResourcesGrid={{this.hasResourcesGrid}}\n        @viewRelatedParams={{this.viewRelatedParams}}\n        @exportToCsvUrl={{this.exportToCsvUrl}}\n        @gotoUpdateConf={{@gotoUpdateConf}}\n        @executionDeleted={{@executionDeleted}}\n        @executionStarted={{@executionStarted}}\n        @updateIsBaseline={{fn (mut @model.isBaseline)}}\n        @qpViewLayout={{@qpViewLayout}}\n      />\n    </div>\n  \n    <LoadTestResult::InfoPanel\n      @model={{@model}}\n      @mapRegions={{this.mapRegions}}\n      @status={{this.status}}\n      @finishedAt={{this.finishedAt}}\n      @startedAt={{this.startedAt}}\n      @isViewer={{this.isViewer}}\n      @outcomeHtml={{this.outcomeHtml}}\n      @scriptParamsObj={{this.scriptParamsObj}}\n      @notifications={{this.notifications}}\n      @publicView={{@publicView}}\n      @isPublic={{@isPublic}}\n      @showUsageHistory={{this.showUsageHistory}}\n      @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n    />\n  \n    <div class=\"note-editor\">\n      {{#if @model.configuration.isTryItOut}}\n        <div class=\"note note-info\">\n          <LinkTo @route=\"new\" @query={{hash folderPath=null}} class=\"float-right btn btn-primary m-l-10\"><strong>New Test Case</strong></LinkTo>\n          <p>\n            This test simulates <strong>{{@model.concurrentClients}}</strong> concurrent users each loading\n            <strong>{{@model.url}}</strong> in a Chrome browser\n            <strong>{{@model.iterations}}</strong> times across the regions shown below. Click the\n            <Scenario::Link @isInline={{true}} @script={{@model.script}} />\n            scenario for the detailed steps or browse below for the test results.\n          </p>\n        </div>\n      {{/if}}\n  \n      {{#if @isPrint}}\n        {{#if @model.note}}\n          <div class=\"m-t-10 m-b-10\">\n            <strong>Note: </strong>{{html-safe (to-html @model.note.contentsHtml 'html')}}\n          </div>\n        {{/if}}\n      {{else}}\n        {{#unless this.isViewer}}\n          {{#if (and (is-empty @model.uuid) (not @model.note.contents) (not this.showNoteEditor))}}\n            <a {{on \"click\" (fn (mut this.showNoteEditor) true)}} class=\"editable-click m-r-20\" role=\"button\">Add note...</a>\n          {{/if}}\n        {{/unless}}\n        <NoteInfo @model={{@model}}\n                    @type=\"execution\"\n                    @showAddNoteText={{false}}\n                    @showNoteEditor={{this.showNoteEditor}}\n                    @updateEditor={{fn (mut this.showNoteEditor)}}\n                    @updateNote={{fn (mut @model.note)}}/>\n      {{/if}}\n    </div>\n  \n    <h5 class=\"print-only\">{{html-safe this.resultsTypeText}}</h5>\n  \n    <div class=\"result-view {{if @isPrint '' 'tab-content bg-transparent p-0'}}\">\n      {{!-- begin tab-pane --}}\n      <div class=\"{{if @isPrint '' 'tab-pane fade active show'}}\" id=\"results-tab\">\n  \n        {{#if this.showLoggingPanel}}\n          <LoggingPanel @model={{@model}}\n                        @regionName={{this.regionName}}\n                        @summary={{this.allRegion.summary}}\n                        @byRegionId={{this.byRegionId}}\n                        @config={{this.dashboard.config}}\n                        @logInfo={{this.logInfo}}\n                        @isMultiUser={{this.isMultiUser}}\n                        @isLoad={{this.isLoad}}\n                        @fromResultsTab={{true}}\n                        @initLevel=\"Debug\"\n                        @consoleConfigChanged={{this.consoleConfigChanged}}\n                        @logInfoChanged={{this.logInfoChanged}}\n                        @logLevelChanged={{this.logLevelChanged}} />\n  \n          {{#if this.showUsageWidget}}\n            <MetricsWidget @minimalHeader={{@minimalHeader}}\n                          @metricDefs={{this.metricDefs}}\n                          @model={{this.regionSummary}}\n                          @summary={{this.allRegion.summary}}\n                          @summaryHistory={{this.allRegion.summaryHistory}}\n                          @buckets={{this.buckets}}\n                          @intervals={{this.intervals}}\n                          @overallModel={{this.regionSummary}}\n                          @chartsConfig={{this.dashboard.config.charts}}\n                          @config={{this.dashboard.config}}\n                          @regionName={{this.regionName}}\n                          @widget={{this.widgetUsageChart}}\n                          @bucketsLoaded={{this.bucketsLoaded}}\n                          @intervalsLoaded={{true}}\n                          @summaryHistoryLoaded={{true}}\n                          @fromResultsTab={{true}}\n                          @selectedResource={{this.selectedResource}}\n                          @utilizationWarning={{this.utilizationWarning}}\n                          @isPrint={{@isPrint}}\n                          @isLoad={{this.isLoad}}\n                          @isHistory={{this.isHistory}}\n                          @isBaseline={{this.isBaseline}}\n                          @requiresIntervals={{this.requiresIntervals}}\n                          @resultsType={{this.resultsType}}\n                          @period={{this.period}}\n                          @isViewer={{this.isViewer}}\n                          @agentSearchMap={{this.agentSearchMap}}\n            />\n          {{/if}}\n  \n        {{else}}\n  \n          <ExecutionProgress @regionSummary={{this.regionSummary}}\n                            @regionSummaries={{this.regionSummaries}}\n                            @hasErrors={{this.logInfo.hasErrors}}\n                            @now={{this.now}} />\n  \n          {{#if this.regionSummary.hasResults}}\n            {{#if (and this.regionLoaded this.dashboard)}}\n              <LoadTestRegionalDashboardBrowser @model={{this.regionSummary}}\n                                        @overallModel={{@model}}\n                                        @regionSummaries={{this.regionSummaries}}\n                                        @config={{this.dashboard.config}}\n                                        @chartsConfig={{this.dashboard.config.charts}}\n                                        @gridConfig={{this.dashboard.config.grid}}\n                                        @regionName={{this.regionName}}\n                                        @metricDefs={{this.metricDefs}}\n                                        @metricDefsByName={{this.metricDefsByName}}\n                                        @minimalHeader={{@model.minimalHeader}}\n                                        @selectedResource={{this.selectedResource}}\n                                        @isPrint={{@isPrint}}\n                                        @isMultiUser={{this.isMultiUser}}\n                                        @isBrowserBased={{this.isBrowserBased}}\n                                        @isLoad={{this.isLoad}}\n                                        @isHistory={{this.isHistory}}\n                                        @isBaseline={{this.isBaseline}}\n                                        @requiresIntervals={{this.requiresIntervals}}\n                                        @resultsType={{this.resultsType}}\n                                        @period={{this.period}}\n                                        @limit={{this.latestLimit}}\n                                        @byRegionId={{this.byRegionId}}\n                                        @agentSearchMap={{this.agentSearchMap}}\n                                        @suiteSummariesLoaded={{this.suiteSummariesLoaded}}\n                                        @isViewer={{this.isViewer}}\n                                        @outputFileCount={{this.outputFileCount}}\n                                        @outputFilesLoaded={{this.outputFilesLoaded}}\n                                        @transitionTo={{@transitionTo}}\n                                        @onResourcesLoaded={{this.resourcesLoadedAction}}\n                                        @onIntervalsLoaded={{this.intervalsLoadedAction}}\n                                        @onImagesLoaded={{this.onImagesLoadedAction}}\n                                        @onVideoImagesLoaded={{this.onVideoImagesLoadedAction}}\n                                        @onSuiteImagesLoaded={{this.onSuiteImagesLoadedAction}}\n                                        @onVideosLoaded={{this.videosLoadedAction}}\n                                        @onSummaryHistoryLoaded={{this.onSummaryHistoryLoadedAction}}\n                                        @onSuiteSummariesLoaded={{this.onSuiteSummariesLoadedAction}}\n                                        @onBucketsLoaded={{this.bucketsLoadedAction}}\n                                        @resourceSelected={{fn this.resourceSelected false}}\n                                        @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n                                        @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                                        @showVideoDetailsModal={{this.showVideoDetailsModalAction}}\n                                        @setShowFiles={{this.setShowFiles}}\n                                        @currentSubTab={{fn (mut this.currentSubTab)}}\n                                        @currentTab={{this.currentTab}}\n              />\n            {{else}}\n              <span class=\"lead\">Loading results...</span>\n            {{/if}}\n          {{else}}\n            No results yet!\n          {{/if}}\n        {{/if}}\n  \n      </div>\n      {{!-- end tab-pane --}}\n      {{#unless @isPrint}}\n        {{!-- begin tab-pane --}}\n        <div class=\"tab-pane fade\" id=\"logging-tab\">\n          {{#if this.dashboard}}\n            <LoggingPanel @model={{@model}}\n                          @regionName={{this.regionName}}\n                          @summary={{this.allRegion.summary}}\n                          @byRegionId={{this.byRegionId}}\n                          @config={{this.dashboard.config}}\n                          @logInfo={{this.logInfo}}\n                          @isMultiUser={{this.isMultiUser}}\n                          @isLoad={{this.isLoad}}\n                          @logInfoChanged={{this.logInfoChanged}}\n                          @logLevelChanged={{this.logLevelChanged}} />\n          {{else}}\n            <span class=\"lead\">Loading results...</span>\n          {{/if}}\n        </div>\n        {{!-- end tab-pane --}}\n        <div class=\"tab-pane fade no-print other-widgets\" id=\"files-tab\">\n          {{#if (eq this.currentTab '#results-tab')}}\n            <OutputFilesWidget @overallModel={{@model}}\n                              @summary={{this.allRegion.summary}}\n                              @byRegionId={{this.byRegionId}}\n                              @showFiles={{this.showFiles}}\n                              @isMultiUser={{this.isMultiUser}}\n                              @isLoad={{this.isLoad}}\n                              @currentTab={{this.currentSubTab}}\n                              @isBaseline={{false}}\n                              @onOutputFilesLoaded={{this.outputFilesLoadedAction}}\n                              @onOutputFilesLoading={{this.outputFilesLoading}}\n                              @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n  \n          {{/if}}\n        </div>\n  \n        <div class=\"tab-pane fade bordered-panels\" id=\"test-runners\">\n          {{#if this.showTestRunners}}\n            <TestRunners @regionSummaries={{this.regionSummaries}}\n                        @allRegion={{this.allRegion}}\n                        @qpRegionId={{this.qpRegionId}}\n                        @regionSelectedAction={{this.regionSelected}}\n            />\n          {{/if}}\n        </div>\n      {{/unless}}\n    </div>\n  </LoadTestResult::Wrapper>\n  \n  \n  <ShareResultsModal\n          @execution={{@model}}\n          @viewRelatedParams={{this.viewRelatedParams}}\n          @shareType=\"GetLoadTestExecution\"\n          @addToken={{this.addTokenToExecution}}\n  />\n  \n  \n  {{#if this.showDetailsModal}}\n    <Account::Billing::HistoryUsageDetailsModal\n            @historyObjId={{this.selectedUsageObjId}}\n            @onClose={{this.usageDetailsModalClose}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@ctx\\\",\\\"@model\\\"],[[30,0],[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-start justify-content-between\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@isPrint\\\",\\\"@model\\\",\\\"@logInfo\\\",\\\"@showLoggingPanel\\\",\\\"@isBrowserBased\\\",\\\"@testRunnersNumber\\\"],[[30,2],[30,1],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"showLoggingPanel\\\"]],[30,0,[\\\"isBrowserBased\\\"]],[30,0,[\\\"testRunnersNumber\\\"]]]],null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,3],null,[[\\\"@model\\\",\\\"@isMultiUser\\\",\\\"@isBrowserBased\\\",\\\"@onChangeViewLayout\\\",\\\"@regionSummary\\\",\\\"@isSuperAdmin\\\",\\\"@isViewer\\\",\\\"@hasResourcesGrid\\\",\\\"@viewRelatedParams\\\",\\\"@exportToCsvUrl\\\",\\\"@gotoUpdateConf\\\",\\\"@executionDeleted\\\",\\\"@executionStarted\\\",\\\"@updateIsBaseline\\\",\\\"@qpViewLayout\\\"],[[30,1],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isBrowserBased\\\"]],[30,3],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"isSuperAdmin\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"hasResourcesGrid\\\"]],[30,0,[\\\"viewRelatedParams\\\"]],[30,0,[\\\"exportToCsvUrl\\\"]],[30,4],[30,5],[30,6],[28,[37,4],[[28,[37,5],[[30,1,[\\\"isBaseline\\\"]]],null]],null],[30,7]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[8,[39,6],null,[[\\\"@model\\\",\\\"@mapRegions\\\",\\\"@status\\\",\\\"@finishedAt\\\",\\\"@startedAt\\\",\\\"@isViewer\\\",\\\"@outcomeHtml\\\",\\\"@scriptParamsObj\\\",\\\"@notifications\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@showUsageHistory\\\",\\\"@showTestOutcomeModal\\\"],[[30,1],[30,0,[\\\"mapRegions\\\"]],[30,0,[\\\"status\\\"]],[30,0,[\\\"finishedAt\\\"]],[30,0,[\\\"startedAt\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"outcomeHtml\\\"]],[30,0,[\\\"scriptParamsObj\\\"]],[30,0,[\\\"notifications\\\"]],[30,8],[30,9],[30,0,[\\\"showUsageHistory\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"note-editor\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"configuration\\\",\\\"isTryItOut\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"note note-info\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],[[24,0,\\\"float-right btn btn-primary m-l-10\\\"]],[[\\\"@route\\\",\\\"@query\\\"],[\\\"new\\\",[28,[37,9],null,[[\\\"folderPath\\\"],[null]]]]],[[\\\"default\\\"],[[[[10,\\\"strong\\\"],[12],[1,\\\"New Test Case\\\"],[13]],[]]]]],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          This test simulates \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"concurrentClients\\\"]]],[13],[1,\\\" concurrent users each loading\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"url\\\"]]],[13],[1,\\\" in a Chrome browser\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"iterations\\\"]]],[13],[1,\\\" times across the regions shown below. Click the\\\\n          \\\"],[8,[39,12],null,[[\\\"@isInline\\\",\\\"@script\\\"],[true,[30,1,[\\\"script\\\"]]]],null],[1,\\\"\\\\n          scenario for the detailed steps or browse below for the test results.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,2],[[[41,[30,1,[\\\"note\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Note: \\\"],[13],[1,[28,[35,13],[[28,[37,14],[[30,1,[\\\"note\\\",\\\"contentsHtml\\\"]],\\\"html\\\"],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[41,[28,[37,16],[[28,[37,17],[[30,1,[\\\"uuid\\\"]]],null],[28,[37,18],[[30,1,[\\\"note\\\",\\\"contents\\\"]]],null],[28,[37,18],[[30,0,[\\\"showNoteEditor\\\"]]],null]],null],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"editable-click m-r-20\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,20],[\\\"click\\\",[28,[37,4],[[28,[37,5],[[30,0,[\\\"showNoteEditor\\\"]]],null],true],null]],null],[12],[1,\\\"Add note...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[8,[39,21],null,[[\\\"@model\\\",\\\"@type\\\",\\\"@showAddNoteText\\\",\\\"@showNoteEditor\\\",\\\"@updateEditor\\\",\\\"@updateNote\\\"],[[30,1],\\\"execution\\\",false,[30,0,[\\\"showNoteEditor\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"showNoteEditor\\\"]]],null]],null],[28,[37,4],[[28,[37,5],[[30,1,[\\\"note\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"h5\\\"],[14,0,\\\"print-only\\\"],[12],[1,[28,[35,13],[[30,0,[\\\"resultsTypeText\\\"]]],null]],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[15,0,[29,[\\\"result-view \\\",[52,[30,2],\\\"\\\",\\\"tab-content bg-transparent p-0\\\"]]]],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[15,0,[29,[[52,[30,2],\\\"\\\",\\\"tab-pane fade active show\\\"]]]],[14,1,\\\"results-tab\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showLoggingPanel\\\"]],[[[1,\\\"        \\\"],[8,[39,23],null,[[\\\"@model\\\",\\\"@regionName\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@config\\\",\\\"@logInfo\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@fromResultsTab\\\",\\\"@initLevel\\\",\\\"@consoleConfigChanged\\\",\\\"@logInfoChanged\\\",\\\"@logLevelChanged\\\"],[[30,1],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],true,\\\"Debug\\\",[30,0,[\\\"consoleConfigChanged\\\"]],[30,0,[\\\"logInfoChanged\\\"]],[30,0,[\\\"logLevelChanged\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showUsageWidget\\\"]],[[[1,\\\"          \\\"],[8,[39,24],null,[[\\\"@minimalHeader\\\",\\\"@metricDefs\\\",\\\"@model\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@overallModel\\\",\\\"@chartsConfig\\\",\\\"@config\\\",\\\"@regionName\\\",\\\"@widget\\\",\\\"@bucketsLoaded\\\",\\\"@intervalsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@fromResultsTab\\\",\\\"@selectedResource\\\",\\\"@utilizationWarning\\\",\\\"@isPrint\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@isBaseline\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@period\\\",\\\"@isViewer\\\",\\\"@agentSearchMap\\\"],[[30,10],[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"allRegion\\\",\\\"summaryHistory\\\"]],[30,0,[\\\"buckets\\\"]],[30,0,[\\\"intervals\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"charts\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"widgetUsageChart\\\"]],[30,0,[\\\"bucketsLoaded\\\"]],true,true,true,[30,0,[\\\"selectedResource\\\"]],[30,0,[\\\"utilizationWarning\\\"]],[30,2],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"isHistory\\\"]],[30,0,[\\\"isBaseline\\\"]],[30,0,[\\\"requiresIntervals\\\"]],[30,0,[\\\"resultsType\\\"]],[30,0,[\\\"period\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"agentSearchMap\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[39,25],null,[[\\\"@regionSummary\\\",\\\"@regionSummaries\\\",\\\"@hasErrors\\\",\\\"@now\\\"],[[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"logInfo\\\",\\\"hasErrors\\\"]],[30,0,[\\\"now\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"regionSummary\\\",\\\"hasResults\\\"]],[[[41,[28,[37,16],[[30,0,[\\\"regionLoaded\\\"]],[30,0,[\\\"dashboard\\\"]]],null],[[[1,\\\"            \\\"],[8,[39,26],null,[[\\\"@model\\\",\\\"@overallModel\\\",\\\"@regionSummaries\\\",\\\"@config\\\",\\\"@chartsConfig\\\",\\\"@gridConfig\\\",\\\"@regionName\\\",\\\"@metricDefs\\\",\\\"@metricDefsByName\\\",\\\"@minimalHeader\\\",\\\"@selectedResource\\\",\\\"@isPrint\\\",\\\"@isMultiUser\\\",\\\"@isBrowserBased\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@isBaseline\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@period\\\",\\\"@limit\\\",\\\"@byRegionId\\\",\\\"@agentSearchMap\\\",\\\"@suiteSummariesLoaded\\\",\\\"@isViewer\\\",\\\"@outputFileCount\\\",\\\"@outputFilesLoaded\\\",\\\"@transitionTo\\\",\\\"@onResourcesLoaded\\\",\\\"@onIntervalsLoaded\\\",\\\"@onImagesLoaded\\\",\\\"@onVideoImagesLoaded\\\",\\\"@onSuiteImagesLoaded\\\",\\\"@onVideosLoaded\\\",\\\"@onSummaryHistoryLoaded\\\",\\\"@onSuiteSummariesLoaded\\\",\\\"@onBucketsLoaded\\\",\\\"@resourceSelected\\\",\\\"@showTestOutcomeModal\\\",\\\"@showImageDetailsModal\\\",\\\"@showVideoDetailsModal\\\",\\\"@setShowFiles\\\",\\\"@currentSubTab\\\",\\\"@currentTab\\\"],[[30,0,[\\\"regionSummary\\\"]],[30,1],[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"charts\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"grid\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"metricDefsByName\\\"]],[30,1,[\\\"minimalHeader\\\"]],[30,0,[\\\"selectedResource\\\"]],[30,2],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isBrowserBased\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"isHistory\\\"]],[30,0,[\\\"isBaseline\\\"]],[30,0,[\\\"requiresIntervals\\\"]],[30,0,[\\\"resultsType\\\"]],[30,0,[\\\"period\\\"]],[30,0,[\\\"latestLimit\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"agentSearchMap\\\"]],[30,0,[\\\"suiteSummariesLoaded\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"outputFileCount\\\"]],[30,0,[\\\"outputFilesLoaded\\\"]],[30,11],[30,0,[\\\"resourcesLoadedAction\\\"]],[30,0,[\\\"intervalsLoadedAction\\\"]],[30,0,[\\\"onImagesLoadedAction\\\"]],[30,0,[\\\"onVideoImagesLoadedAction\\\"]],[30,0,[\\\"onSuiteImagesLoadedAction\\\"]],[30,0,[\\\"videosLoadedAction\\\"]],[30,0,[\\\"onSummaryHistoryLoadedAction\\\"]],[30,0,[\\\"onSuiteSummariesLoadedAction\\\"]],[30,0,[\\\"bucketsLoadedAction\\\"]],[28,[37,4],[[30,0,[\\\"resourceSelected\\\"]],false],null],[30,0,[\\\"showTestOutcomeModalAction\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,0,[\\\"showVideoDetailsModalAction\\\"]],[30,0,[\\\"setShowFiles\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"currentSubTab\\\"]]],null]],null],[30,0,[\\\"currentTab\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading results...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"          No results yet!\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"tab-pane fade\\\"],[14,1,\\\"logging-tab\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"dashboard\\\"]],[[[1,\\\"          \\\"],[8,[39,23],null,[[\\\"@model\\\",\\\"@regionName\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@config\\\",\\\"@logInfo\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@logInfoChanged\\\",\\\"@logLevelChanged\\\"],[[30,1],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"logInfoChanged\\\"]],[30,0,[\\\"logLevelChanged\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading results...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"      \\\"],[10,0],[14,0,\\\"tab-pane fade no-print other-widgets\\\"],[14,1,\\\"files-tab\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,28],[[30,0,[\\\"currentTab\\\"]],\\\"#results-tab\\\"],null],[[[1,\\\"          \\\"],[8,[39,29],null,[[\\\"@overallModel\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@showFiles\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@currentTab\\\",\\\"@isBaseline\\\",\\\"@onOutputFilesLoaded\\\",\\\"@onOutputFilesLoading\\\",\\\"@showImageDetailsModal\\\"],[[30,1],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"showFiles\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"currentSubTab\\\"]],false,[30,0,[\\\"outputFilesLoadedAction\\\"]],[30,0,[\\\"outputFilesLoading\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"tab-pane fade bordered-panels\\\"],[14,1,\\\"test-runners\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestRunners\\\"]],[[[1,\\\"          \\\"],[8,[39,30],null,[[\\\"@regionSummaries\\\",\\\"@allRegion\\\",\\\"@qpRegionId\\\",\\\"@regionSelectedAction\\\"],[[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"allRegion\\\"]],[30,0,[\\\"qpRegionId\\\"]],[30,0,[\\\"regionSelected\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"],[8,[39,31],null,[[\\\"@execution\\\",\\\"@viewRelatedParams\\\",\\\"@shareType\\\",\\\"@addToken\\\"],[[30,1],[30,0,[\\\"viewRelatedParams\\\"]],\\\"GetLoadTestExecution\\\",[30,0,[\\\"addTokenToExecution\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,32],null,[[\\\"@historyObjId\\\",\\\"@onClose\\\"],[[30,0,[\\\"selectedUsageObjId\\\"]],[30,0,[\\\"usageDetailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"@isPrint\\\",\\\"@onChangeLayout\\\",\\\"@gotoUpdateConf\\\",\\\"@executionDeleted\\\",\\\"@executionStarted\\\",\\\"@qpViewLayout\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@minimalHeader\\\",\\\"@transitionTo\\\"],[\\\"load-test-result/wrapper\\\",\\\"div\\\",\\\"load-test-result/tabs\\\",\\\"load-test-result/action-menu\\\",\\\"fn\\\",\\\"mut\\\",\\\"load-test-result/info-panel\\\",\\\"if\\\",\\\"link-to\\\",\\\"hash\\\",\\\"strong\\\",\\\"p\\\",\\\"scenario/link\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"unless\\\",\\\"and\\\",\\\"is-empty\\\",\\\"not\\\",\\\"a\\\",\\\"on\\\",\\\"note-info\\\",\\\"h5\\\",\\\"logging-panel\\\",\\\"metrics-widget\\\",\\\"execution-progress\\\",\\\"load-test-regional-dashboard-browser\\\",\\\"span\\\",\\\"eq\\\",\\\"output-files-widget\\\",\\\"test-runners\\\",\\\"share-results-modal\\\",\\\"account/billing/history-usage-details-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-results-browser.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoadTestResultsBrowser = _exports.default = (_class = class LoadTestResultsBrowser extends _loadTestResultsBase.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"isBrowserBased\", true);\n    }\n    setShowFiles(href) {\n      this.showFiles = true;\n      this.currentSubTab = href;\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"setShowFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setShowFiles\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestResultsBrowser);\n});","define(\"@testable/shared-ui/components/load-test-results\", [\"exports\", \"@ember/component\", \"@testable/shared-ui/components/load-test-results-base\", \"@ember/template-factory\"], function (_exports, _component, _loadTestResultsBase, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/components/load-test-results-base\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <LoadTestResult::Wrapper @ctx={{this}} @model={{@model}}>\n    <div class=\"d-flex align-items-start justify-content-between\">\n      <LoadTestResult::Tabs\n        @isPrint={{@isPrint}}\n        @model={{@model}}\n        @logInfo={{this.logInfo}}\n        @outputFileCount={{this.outputFileCount}}\n        @showLoggingPanel={{this.showLoggingPanel}}\n        @outputFilesLoaded={{this.outputFilesLoaded}}\n        @testRunnersNumber={{this.testRunnersNumber}}\n      />\n  \n      <LoadTestResult::ActionMenu\n      @model={{@model}}\n      @isMultiUser={{this.isMultiUser}}\n      @isSuperAdmin={{this.isSuperAdmin}}\n      @isViewer={{this.isViewer}}\n      @hasResourcesGrid={{this.hasResourcesGrid}}\n      @viewRelatedParams={{this.viewRelatedParams}}\n      @exportToCsvUrl={{this.exportToCsvUrl}}\n      @regionSummary={{this.regionSummary}}\n      @gotoUpdateConf={{@gotoUpdateConf}}\n      @executionDeleted={{@executionDeleted}}\n      @executionStarted={{@executionStarted}}\n      @onChangeViewLayout={{@onChangeLayout}}\n      @updateIsBaseline={{fn (mut @model.isBaseline)}}\n      @compareResults={{this.compareResults}}\n      @qpViewLayout={{@qpViewLayout}}\n      as |Action|>\n        <Action.ViewManagement>\n          {{#unless @model.minimalHeader}}\n            <li class=\"divider\"></li>\n            <li class=\"dropdown-header\">View Management</li>\n            {{#unless this.isViewer}}\n              {{#if (or (not this.dashboard.public) this.currentUser.isAdmin)}}\n                <li><a {{on \"click\" this.showDashboardSettingsModalAction}} role=\"button\"><Ui::Icon @icon=\"fa fa-edit\" /> Edit Settings</a></li>\n                <li><a {{on \"click\" this.saveDashboardAction}} role=\"button\"><Ui::Icon @icon=\"fa fa-save\" /> Save</a></li>\n              {{/if}}\n              <li><a {{on \"click\" this.showDashboardModalAction}} role=\"button\"><Ui::Icon @icon=\"fa fa-copy\" /> Save As</a></li>\n              {{#if (or (not this.dashboard.public) this.isSuperAdmin)}}\n                <li><a {{on \"click\" this.deleteDashboard}} role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /> Delete</a></li>\n              {{/if}}\n              <li><a {{on \"click\" (fn (mut this.showMakeDefaultDashboard) true)}} role=\"button\"><Ui::Icon @icon=\"fa fa-check-circle\" /> Make Default View</a></li>\n            {{/unless}}\n            {{#if (eq this.dashboard.id 0)}}\n              <li><a {{on \"click\" this.saveDefaultView}} role=\"button\"><Ui::Icon @icon=\"fa fa-download\" /> Export View Definition</a></li>\n            {{else}}\n              <li><a href=\"{{this.exportViewUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> Export View Definition</a></li>\n            {{/if}}\n            <li class=\"divider\"></li>\n            {{#unless this.isViewer}}\n              <li class=\"dropdown-header\">Add Widgets</li>\n              <li><a {{on \"click\" (fn (mut this.showAddChartModal) true)}} role=\"button\"><Ui::Icon @icon=\"fa fa-chart-line\" /> Add Chart</a></li>\n              {{#unless this.isSuiteSummariesVisible}}\n                <li><a {{on \"click\" this.showSuiteSummaries}} role=\"button\"><Ui::Icon @icon=\"far fa-check-square\" /> Show Assertions</a></li>\n              {{/unless}}\n              {{#unless this.isCommandSummariesVisible}}\n                <li><a {{on \"click\" this.showCommandsSummaries}} role=\"button\"><Ui::Icon @icon=\"far fa-check-square\" /> Show Commands</a></li>\n              {{/unless}}\n              {{#unless this.isGlanceVisible}}\n                <li><a {{on \"click\" this.showGlance}} role=\"button\"><Ui::Icon @icon=\"fa fa-tachometer-alt\" /> Show Summary</a></li>\n              {{/unless}}\n              {{#unless this.isGridVisible}}\n                <li><a {{on \"click\" this.showResultsGrid}} role=\"button\"><Ui::Icon @icon=\"fa fa-table\" /> Show Results</a></li>\n              {{/unless}}\n              {{#unless this.isImageViewerVisible}}\n                <li><a {{on \"click\" this.showImageViewer}} role=\"button\"><Ui::Icon @icon=\"far fa-images\" /> Show Images</a></li>\n              {{/unless}}\n              {{#if @model.script.metadata.recordVideos}}\n                {{#unless this.isVideoViewerVisible}}\n                  <li><a {{on \"click\" this.showVideoViewer}} role=\"button\"><Ui::Icon @icon=\"far fa-images\" /> Show Videos</a></li>\n                {{/unless}}\n              {{/if}}\n            {{/unless}}\n          {{/unless}}\n        </Action.ViewManagement>\n      </LoadTestResult::ActionMenu>\n    </div>\n  \n    <LoadTestResult::InfoPanel\n      @model={{@model}}\n      @baselineExecution={{this.baselineExecution}}\n      @mapRegions={{this.mapRegions}}\n      @mapRegionsBaseline={{this.mapRegionsBaseline}}\n      @status={{this.status}}\n      @finishedAt={{this.finishedAt}}\n      @startedAt={{this.startedAt}}\n      @comparisonId={{this.comparisonId}}\n      @isViewer={{this.isViewer}}\n      @outcomeHtml={{this.outcomeHtml}}\n      @scriptParamsObj={{this.scriptParamsObj}}\n      @scriptParamsObjBaseline={{this.scriptParamsObjBaseline}}\n      @notifications={{this.notifications}}\n      @hideBrowsers={{and (not @model.browsers.length) (not @model.browsersExecuted.length)}}\n      @notificationsBaseline={{this.notificationsBaseline}}\n      @publicView={{@publicView}}\n      @isPublic={{@isPublic}}\n      @showUsageHistory={{this.showUsageHistory}}\n      @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n    />\n  \n    <div class={{this.noteClass}}>\n      {{#if @model.configuration.isTryItOut}}\n        <div class=\"note note-info\">\n          <LinkTo @route=\"new\" @query={{hash folderPath=null}} class=\"float-right btn btn-primary m-l-10\"><strong>New Test Case</strong></LinkTo>\n          <p>\n            This test simulates <strong>{{@model.concurrentClients}}</strong> concurrent users each loading\n            <strong>{{@model.url}}</strong> in a Chrome browser\n            <strong>{{@model.iterations}}</strong> times across the regions shown below. Click the\n            <Scenario::Link @isInline={{true}} @script={{@model.script}} />\n            scenario for the detailed steps or browse below for the test results.\n          </p>\n        </div>\n      {{/if}}\n  \n      {{#if @isPrint}}\n        {{#if @model.note}}\n          <div class=\"m-t-10 m-b-10\">\n            <strong>Note: </strong>{{html-safe (to-html @model.note.contentsHtml 'html')}}\n          </div>\n        {{/if}}\n      {{else}}\n        <NoteInfo @model={{@model}}\n                      @type=\"execution\"\n                      @showAddNoteText={{false}}\n                      @showNoteEditor={{this.showNoteEditor}}\n                      @updateEditor={{fn (mut this.showNoteEditor)}}\n                      @updateNote={{fn (mut @model.note)}}/>\n      {{/if}}\n    </div>\n  \n    {{#unless @isPrint}}\n      {{#if (or (not @model.note) (and this.showTopBar @model.completed))}}\n        <div class=\"results-top-bar\">\n          {{#if (and @model.baseline (not this.comparisonId))}}\n            <span class=\"m-r-20\">\n              <a {{on \"click\" this.configBaseLineResultSet}} role=\"button\"><span class=\"editable-click\">\n                <strong>Baseline: </strong> #{{@model.baseline}}\n              </span></a>\n              <a href=\"/results/{{@model.baseline}}\" target=\"_blank\"><Ui::Icon @icon=\"fa fa-search\" /></a>\n            </span>\n          {{/if}}\n          {{#unless this.showReportSetupPanel}}\n            <a {{on \"click\" this.toggleReportSetupPanel}} class=\"m-r-20\" role=\"button\"><span class=\"editable-click\">{{html-safe this.resultsTypeText}} {{if\n                    this.hasDashboardChanges '*'}}</span></a>\n          {{/unless}}\n          {{#if (and this.allowZoomBar (not this.showZoomBar))}}\n            <a {{on \"click\" this.toggleZoomBar}} role=\"button\"><span class=\"editable-click m-r-20\">{{html-safe this.zoomText}}</span></a>\n          {{/if}}\n  \n          {{#unless this.isViewer}}\n            {{#if (and (is-empty @model.uuid) (not @model.note.contents) (not this.showNoteEditor))}}\n              <a {{on \"click\" (fn (mut this.showNoteEditor) true)}} class=\"editable-click m-r-20\" role=\"button\">Add note...</a>\n            {{/if}}\n          {{/unless}}\n        </div>\n      {{/if}}\n  \n      {{#if this.showReportSetupPanel}}\n        <div class=\"results-top-bar\">\n          <a href=\"javascript:\" {{on \"click\" this.hideReportSetupPanel}}\n            class=\"btn btn-white btn-sm btn-circle btn-icon text-danger pull-right\" data-bs-toggle=\"tooltip\"\n            role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n          <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n            {{#if (and this.regionLoaded this.dashboard)}}\n              <div>\n                <div class=\"f-w-700 m-b-5\">Report Type</div>\n                {{#if this.comparisonId}}\n                  <a class=\"m-r-5\" href=\"javascript:\" {{on \"click\" (fn this.updateResultsType \"compare\")}}>\n                    <Ui::InfoIcon @icon='fa-edit' @content=\"Make new comparison\"/>\n                  </a>\n  \n                  <a class=\"m-r-5\" href=\"/results/{{this.comparisonId}}\" target=\"_blank\">\n                    <Ui::InfoIcon @icon='fa-search' @content=\"View baseline result\"/>\n                  </a>\n                {{/if}}\n                <BsButtonGroup @value={{this.resultsType}} @type=\"radio\" @onChange={{this.updateResultsType}} as |bg|>\n                  {{#if this.comparisonId}}\n                    <bg.button @type=\"success\" @value=\"baseline\" @size=\"sm\" name=\"resultsType-{{this.uuid}}\">Comparison to # {{this.comparisonId}} <Ui::InfoIcon\n                            @content=\"In all charts, plot the value across the duration of this test run. Only available for load tests.\" /></bg.button>\n                  {{else}}\n                    <bg.button @type=\"success\" @value=\"compare\" @size=\"sm\" name=\"resultsType-{{this.uuid}}\">Comparison Report<Ui::InfoIcon\n                            @content=\"Compare this test run to another test run of your choosing\" /></bg.button>\n                  {{/if}}\n                  <bg.button @type=\"success\" @value=\"thisRun\" @size=\"sm\" name=\"resultsType-{{this.uuid}}\">This Test Run <Ui::InfoIcon\n                          @content=\"In all charts, plot the value across the duration of this test run. Only available for load tests.\" /></bg.button>\n                  <bg.button @type=\"success\" @value=\"history\" @size=\"sm\" name=\"resultsType-{{this.uuid}}\">Test Run History <Ui::InfoIcon\n                          @content=\"In all charts, plot the value across test runs of this test configuration.\" /></bg.button>\n                </BsButtonGroup>\n              </div>\n              {{#if (eq this.resultsType \"history\")}}\n                <div class=\"m-l-20\">\n                  <div class=\"f-w-700 m-b-5\">Comparison Period</div>\n                  <BsButtonGroup @value={{this.period}} @type=\"radio\" @onChange={{this.updatePeriod}} as |bg|>\n                    <bg.button @type=\"success\" @value=\"recent\" @size=\"sm\" name=\"period-{{this.uuid}}\">Recent</bg.button>\n                    <bg.button @type=\"success\" @value=\"7d\" @size=\"sm\" name=\"period-{{this.uuid}}\">7 days</bg.button>\n                    <bg.button @type=\"success\" @value=\"1m\" @size=\"sm\" name=\"period-{{this.uuid}}\">1 month</bg.button>\n                    <bg.button @type=\"success\" @value=\"3m\" @size=\"sm\" name=\"period-{{this.uuid}}\">3 months</bg.button>\n                  </BsButtonGroup>\n                </div>\n                {{#if (eq this.period \"recent\")}}\n                  <div class=\"m-l-20\">\n                    <div class=\"f-w-700 m-b-5\"># of Past Runs</div>\n                    <InputSelectAll @type=\"number\"\n                                    class=\"width-80 form-control form-control-sm\"\n                                    placeholder=\"# of runs\"\n                                    @value={{this.limit}}\n                                    @onChange={{this.updateLimit}}\n                                    min={{0}}\n                                    max={{500}} />\n                  </div>\n                {{/if}}\n              {{else}}\n              {{!-- TODO: button group toggle between granularities --}}\n              {{/if}}\n            {{/if}}\n          </div>\n        </div>\n      {{/if}}\n  \n      {{#if this.showZoomBar}}\n        <ResultFilterBar @model={{@model}}\n                        @config={{this.dashboard.config}}\n                        @intervals={{this.intervals}}\n                        @selectedResource={{this.selectedResource}}\n                        @hideFilterBar={{this.hideZoomBar}} />\n      {{/if}}\n    {{/unless}}\n  \n    <h5 class=\"print-only mt-3\">{{html-safe this.resultsTypeText}}</h5>\n  \n    <div class=\"result-view {{if @isPrint '' 'tab-content bg-transparent p-0'}}\">\n      {{!-- begin tab-pane --}}\n      <div class=\"{{if @isPrint '' 'tab-pane fade active show'}}\" id=\"results-tab\">\n        {{#if this.showLoggingPanel}}\n          <TestGlance @summary={{this.allRegion.summary}}\n                      @model={{this.regionSummary}}\n                      @execution={{@model}}\n                      @config={{this.dashboard.config}}\n                      @glanceVisibility={{this.dashboard.config.glance.visibility}}\n                      @metricDefs={{this.metricDefs}}\n                      @selectedResource={{this.selectedResource}}\n                      @isLoad={{this.isLoad}}\n                      @resultsType={{this.resultsType}}\n                      @bucketsLoaded={{this.bucketsLoadedAction}}\n                      @fromResultsTab={{true}}\n                      @isViewer={{this.isViewer}}\n                      @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n          />\n  \n          <LoggingPanel @model={{@model}}\n                        @baselineExecution={{this.baselineExecution}}\n                        @regionBaselineId={{this.regionBaselineId}}\n                        @regionName={{this.regionName}}\n                        @comparisonId={{this.comparisonId}}\n                        @baselineLogInfo={{this.baselineLogInfo}}\n                        @summary={{this.allRegion.summary}}\n                        @byRegionId={{this.byRegionId}}\n                        @byRegionBaselineId={{this.byRegionBaselineId}}\n                        @config={{this.dashboard.config}}\n                        @logInfo={{this.logInfo}}\n                        @isMultiUser={{this.isMultiUser}}\n                        @isLoad={{this.isLoad}}\n                        @fromResultsTab={{true}}\n                        @initLevel=\"Debug\"\n                        @baselineLogInfoChanged={{this.baselineLogInfoChanged}}\n                        @consoleConfigChangedBaseline={{this.consoleConfigChangedBaseline}}\n                        @consoleConfigChanged={{this.consoleConfigChanged}}\n                        @logInfoChanged={{this.logInfoChanged}}\n                        @logLevelChanged={{this.logLevelChanged}} />\n  \n          {{#if this.showUsageWidget}}\n            <MetricsWidget @minimalHeader={{@model.minimalHeader}}\n                          @metricDefs={{this.metricDefs}}\n                          @model={{this.regionSummary}}\n                          @summary={{this.allRegion.summary}}\n                          @summaryHistory={{this.allRegion.summaryHistory}}\n                          @buckets={{this.buckets}}\n                          @intervals={{this.intervals}}\n                          @overallModel={{this.regionSummary}}\n                          @chartsConfig={{this.dashboard.config.charts}}\n                          @config={{this.dashboard.config}}\n                          @regionName={{this.regionName}}\n                          @widget={{this.widgetUsageChart}}\n                          @bucketsLoaded={{this.bucketsLoadedAction}}\n                          @intervalsLoaded={{true}}\n                          @summaryHistoryLoaded={{true}}\n                          @fromResultsTab={{true}}\n                          @selectedResource={{this.selectedResource}}\n                          @utilizationWarning={{this.utilizationWarning}}\n                          @isPrint={{@isPrint}}\n                          @isLoad={{this.isLoad}}\n                          @isHistory={{this.isHistory}}\n                          @isBaseline={{this.isBaseline}}\n                          @requiresIntervals={{this.requiresIntervals}}\n                          @resultsType={{this.resultsType}}\n                          @period={{this.period}}\n                          @isViewer={{this.isViewer}}\n                          @agentSearchMap={{this.agentSearchMap}}\n            />\n          {{/if}}\n        {{else}}\n          {{#if @isPrint}}\n            <div class=\"panel block-container\">\n              <div class=\"panel-heading block-container-target\">\n                <h4 class=\"panel-title\"><strong>Test Locations</strong></h4>\n              </div>\n              <div class=\"panel-body\">\n                <dl>\n                  {{#each this.regionSummaries as |regionSummary|}}\n                    {{#unless regionSummary.isAll}}\n                      <dt><PrintRegionSummary @regionSummary={{regionSummary}} /></dt>\n                      <dd>{{html-safe (to-html regionSummary.providerPopoverText)}}</dd>\n                    {{/unless}}\n                  {{/each}}\n                </dl>\n              </div>\n            </div>\n          {{/if}}\n  \n          {{#unless @isPrint}}\n            <div class=\"row\">\n              <div class=\"col-sm-12 col-md-6 col-lg-3\">\n                <div class=\"form-group m-b-10\">\n                  <label>View {{if this.hasDashboardChanges '*'}}</label>\n                  {{#if this.dashboard}}\n                    <Ui::PSelect @disabled={{not (is-empty @model.uuid)}} @options={{this.dashboards}} @selected={{this.dashboard}}\n                                @placeholder=\"Please select a view...\" @onChange={{this.dashboardSelected}} as |dashboardOpt|>\n                      <strong>{{dashboardOpt.name}}</strong>\n                      <small>{{dashboardOpt.description}}</small>\n                    </Ui::PSelect>\n                  {{/if}}\n                </div>\n              </div>\n              {{#unless @model.isParent}}\n                <div class=\"col-sm-12 col-md-6 col-lg-3\">\n                  <div class=\"form-group m-b-10\">\n                    <label>\n                      Region\n                      {{#if (and this.baselineExecution (not-eq this.regionName 'ALL') (not this.regionBaselineId))}}\n                        <Ui::InfoIcon @content='Baseline test was not run in the same location so there is no region level comparison available' class=\"text-danger\"/>\n                      {{/if}}\n  \n                    </label>\n                    <Ui::PSelect @options={{this.regionSummaries}} @selected={{this.regionSummary}} @placeholder=\"Please select a region...\"\n                                @onChange={{this.regionSelected}}\n                                @selectedItemComponent=\"print-selected-region-summary\" as |regionSummaryOpt|>\n                      <PrintRegionSummary @regionSummary={{regionSummaryOpt}} @bold={{true}} />\n                    </Ui::PSelect>\n                  </div>\n                </div>\n              {{/unless}}\n              {{#if (and this.isLoad @model.completed)}}\n                <div class=\"col-md-6 col-sm-12\">\n                  <div class=\"form-group\">\n                    <label>Resource</label>\n                    <Ui::PSelect @options={{this.displayedResources}} @selected={{this.selectedResource}}\n                                @placeholder=\"Please select a resource...\"\n                                @onChange={{fn this.resourceSelected true}} as |record|>\n                      <strong>\n                        {{#if (eq record.resource '!overall!')}}\n                          Overall\n                        {{else}}\n                          {{record.resource}}\n                        {{/if}}\n                      </strong>\n                    </Ui::PSelect>\n                  </div>\n                </div>\n              {{/if}}\n            </div>\n            {{#if this.hasDashboardChanges}}\n              <div class=\"note note-info\">\n                <p>You have made changes to the results view that are not yet saved.\n                  {{#if (and this.dashboard.public (not this.currentUser.isAdmin))}}\n                    Changes to a system view must be saved as a new view that is private to your organization.{{/if}}</p>\n                {{#if (or (not this.dashboard.public) this.currentUser.isAdmin)}}\n                  <button type=\"button\" class=\"btn btn-sm btn-primary\" {{on \"click\" this.saveDashboardAction}}>Save View Changes</button>\n                {{/if}}\n                <button type=\"button\" class=\"btn btn-sm btn-primary\" {{on \"click\" this.showDashboardModalAction}}>Save As New View</button>\n                <button type=\"button\" class=\"btn btn-sm btn-danger\" {{on \"click\" this.revertDashboardChanges}}>Discard View Changes</button>\n              </div>\n            {{/if}}\n          {{/unless}}\n  \n          <ExecutionProgress @regionSummary={{this.regionSummary}}\n                            @regionSummaries={{this.regionSummaries}}\n                            @hasErrors={{this.logInfo.hasErrors}}\n                            @now={{this.now}} />\n  \n          {{#if this.regionSummary.hasResults}}\n            {{#if (and this.regionLoaded this.dashboard (or (not this.comparisonId) this.baselineExecution ))}}\n              <LoadTestRegionalDashboard @model={{this.regionSummary}}\n                                        @regionSummaryBaseline={{this.regionSummaryBaseline}}\n                                        @overallModel={{@model}}\n                                        @comparisonId={{this.comparisonId}}\n                                        @baselineExecution={{this.baselineExecution}}\n                                        @regionSummaries={{this.regionSummaries}}\n                                        @regionSummariesBaseline={{this.regionSummariesBaseline}}\n                                        @config={{this.dashboard.config}}\n                                        @chartsConfig={{this.dashboard.config.charts}}\n                                        @gridConfig={{this.dashboard.config.grid}}\n                                        @regionName={{this.regionName}}\n                                        @regionBaselineId={{this.regionBaselineId}}\n                                        @metricDefs={{this.metricDefs}}\n                                        @metricDefsByName={{this.metricDefsByName}}\n                                        @minimalHeader={{@model.minimalHeader}}\n                                        @selectedResource={{this.selectedResource}}\n                                        @baselineSelectedResource={{this.baselineSelectedResource}}\n                                        @isPrint={{@isPrint}}\n                                        @isMultiUser={{this.isMultiUser}}\n                                        @isLoad={{this.isLoad}}\n                                        @isHistory={{this.isHistory}}\n                                        @isBaseline={{this.isBaseline}}\n                                        @requiresIntervals={{this.requiresIntervals}}\n                                        @resultsType={{this.resultsType}}\n                                        @period={{this.period}}\n                                        @limit={{this.latestLimit}}\n                                        @byRegionId={{this.byRegionId}}\n                                        @byRegionBaselineId={{this.byRegionBaselineId}}\n                                        @agentSearchMap={{this.agentSearchMap}}\n                                        @suiteSummariesLoaded={{this.suiteSummariesLoaded}}\n                                        @isViewer={{this.isViewer}}\n                                        @orderChanged={{this.orderChanged}}\n                                        @gridConfigChanged={{this.gridConfigChanged}}\n                                        @glanceConfigChanged={{this.glanceConfigChanged}}\n                                        @chartUpdated={{this.chartUpdated}}\n                                        @transitionTo={{@transitionTo}}\n                                        @onResourcesLoaded={{this.resourcesLoadedAction}}\n                                        @onBaselineResourcesLoaded={{this.baselineResourcesLoaded}}\n                                        @onIntervalsLoaded={{this.intervalsLoadedAction}}\n                                        @onBaselineIntervalsLoaded={{this.baselineIntervalsLoadedAction}}\n                                        @onImagesLoaded={{this.onImagesLoadedAction}}\n                                        @onVideoImagesLoaded={{this.onVideoImagesLoadedAction}}\n                                        @onVideoBaselineImagesLoaded={{this.onVideoBaselineImagesLoadedAction}}\n                                        @onBaselineImagesLoaded={{this.baselineImagesLoadedAction}}\n                                        @onSuiteImagesLoaded={{this.onSuiteImagesLoadedAction}}\n                                        @onBaselineSuiteImagesLoaded={{this.onBaselineSuiteImagesLoadedAction}}\n                                        @onVideosLoaded={{this.videosLoadedAction}}\n                                        @onSummaryHistoryLoaded={{this.onSummaryHistoryLoadedAction}}\n                                        @onBaselineSummaryHistoryLoaded={{this.baselineSummaryHistoryLoadedAction}}\n                                        @onSuiteSummariesLoaded={{this.onSuiteSummariesLoadedAction}}\n                                        @onBaselineSuiteSummariesLoaded={{this.onBaselineSuiteSummariesLoadedAction}}\n                                        @onBucketsLoaded={{this.bucketsLoadedAction}}\n                                        @onBaselineBucketsLoaded={{this.baselineBucketsLoadedAction}}\n                                        @resourceSelected={{fn this.resourceSelected false}}\n                                        @baselineResourceSelected={{this.baselineResourceSelected}}\n                                        @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n                                        @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                                        @showVideoDetailsModal={{this.showVideoDetailsModalAction}}\n                                        @currentTab={{this.currentTab}}\n              />\n            {{else}}\n              <span class=\"lead\">Loading results...</span>\n            {{/if}}\n          {{else}}\n            No results yet!\n          {{/if}}\n        {{/if}}\n  \n      </div>\n      {{!-- end tab-pane --}}\n      {{#unless @isPrint}}\n        {{#unless this.showLoggingPanel}}\n        {{!-- begin tab-pane --}}\n          <div class=\"tab-pane fade\" id=\"logging-tab\">\n            {{#if this.dashboard}}\n              <LoggingPanel @model={{@model}}\n                            @title={{this.currentTestTitle}}\n                            @isTabComparison={{if this.comparisonId true}}\n                            @regionName={{this.regionName}}\n                            @summary={{this.allRegion.summary}}\n                            @byRegionId={{this.byRegionId}}\n                            @byRegionBaselineId={{this.byRegionBaselineId}}\n                            @config={{this.dashboard.config}}\n                            @logInfo={{this.logInfo}}\n                            @isMultiUser={{this.isMultiUser}}\n                            @isLoad={{this.isLoad}}\n                            @baselineLogInfoChanged={{this.baselineLogInfoChanged}}\n                            @consoleConfigChanged={{this.consoleConfigChanged}}\n                            @consoleConfigChangedBaseline={{this.consoleConfigChangedBaseline}}\n                            @logInfoChanged={{this.logInfoChanged}}\n                            @logLevelChanged={{this.logLevelChanged}} />\n              {{#if (and this.baselineExecution (or (eq this.regionName 'ALL') this.regionBaselineId)) }}\n                <LoggingPanel @model={{this.baselineExecution}}\n                              @title={{this.baselineTestTitle}}\n                              @isTabComparison={{true}}\n                              @regionBaselineId={{this.regionBaselineId}}\n                              @regionName={{this.regionName}}\n                              @baselineLogInfo={{this.baselineLogInfo}}\n                              @summary={{this.allRegion.summary}}\n                              @byRegionId={{this.byRegionId}}\n                              @byRegionBaselineId={{this.byRegionBaselineId}}\n                              @config={{this.dashboard.config}}\n                              @logInfo={{this.baselineLogInfo}}\n                              @isMultiUser={{this.isMultiUser}}\n                              @isLoad={{this.isLoad}}\n                              @baselineLogInfoChanged={{this.baselineLogInfoChanged}}\n                              @consoleConfigChangedBaseline={{this.consoleConfigChangedBaseline}}\n                              @logLevelChanged={{this.logLevelChangedBaseline}}\n                />\n              {{/if}}\n            {{else}}\n              <span class=\"lead\">Loading results...</span>\n            {{/if}}\n          </div>\n        {{!-- end tab-pane --}}\n        {{/unless}}\n        <div class=\"tab-pane fade\" id=\"child-results-tab\">\n          <LoadTestResult::ChildExecutions\n            @model={{@model}}\n            @title={{this.currentTestTitle}}\n            @comparisonId={{this.comparisonId}}\n            @showResults={{this.showChildResults}}\n            @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n          />\n  \n          {{#if this.baselineExecution}}\n            <LoadTestResult::ChildExecutions\n              @model={{this.baselineExecution}}\n              @title={{this.baselineTestTitle}}\n              @comparisonId={{this.comparisonId}}\n              @showResults={{this.showChildResults}}\n              @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n            />\n          {{/if}}\n        </div>\n        <div class=\"tab-pane fade no-print\" id=\"files-tab\">\n          <OutputFilesWidget @overallModel={{@model}}\n                            @title={{this.currentTestTitle}}\n                            @comparisonId={{this.comparisonId}}\n                            @summary={{this.allRegion.summary}}\n                            @byRegionId={{this.byRegionId}}\n                            @showFiles={{this.showFiles}}\n                            @isMultiUser={{this.isMultiUser}}\n                            @isLoad={{this.isLoad}}\n                            @currentTab={{this.currentTab}}\n                            @isBaseline={{false}}\n                            @onOutputFilesLoaded={{this.outputFilesLoadedAction}}\n                            @onOutputFilesLoading={{this.outputFilesLoading}}\n                            @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n  \n          {{#if this.baselineExecution}}\n            <OutputFilesWidget @overallModel={{this.baselineExecution}}\n                              @title={{this.baselineTestTitle}}\n                              @comparisonId={{this.comparisonId}}\n                              @summary={{this.allRegionBaseline.summary}}\n                              @byRegionId={{this.byRegionBaselineId}}\n                              @showFiles={{this.showFiles}}\n                              @isMultiUser={{this.isMultiUser}}\n                              @isLoad={{this.isLoad}}\n                              @currentTab={{this.currentTab}}\n                              @isBaseline={{true}}\n                              @onOutputFilesLoaded={{this.outputFilesLoadedBaseline}}\n                              @onOutputFilesLoading={{this.outputFilesLoading}}\n                              @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n          {{/if}}\n        </div>\n  \n        <div class=\"tab-pane fade bordered-panels\" id=\"test-runners\">\n          {{#if this.showTestRunners}}\n            <TestRunners @title={{this.currentTestTitle}}\n                        @regionSummaries={{this.regionSummaries}}\n                        @allRegion={{this.allRegion}}\n                        @qpRegionId={{this.qpRegionId}}\n                        @regionSelectedAction={{this.regionSelected}}\n                        @isComparison={{if this.comparisonId true}}\n            />\n            {{#if this.baselineExecution}}\n              {{#if (not (and (not-eq this.regionName 'ALL') (not this.regionBaselineId)))}}\n                <TestRunners @title={{this.baselineTestTitle}}\n                            @regionSummaries={{this.regionSummariesBaseline}}\n                            @allRegion={{this.allRegionBaseline}}\n                            @qpRegionId={{this.qpRegionBaselineId}}\n                            @regionSelectedAction={{this.regionSelectedBaseline}}\n                            @isComparison={{true}}\n                            @isBaseline={{true}}\n                />\n              {{/if}}\n            {{/if}}\n          {{/if}}\n        </div>\n      {{/unless}}\n    </div>\n  </LoadTestResult::Wrapper>\n  \n  \n  <ShareResultsModal\n          @execution={{@model}}\n          @viewRelatedParams={{this.viewRelatedParams}}\n          @shareType={{if this.comparisonId \"comparison\" \"GetLoadTestExecution\"}}\n          @baselineExecution={{this.baselineExecution}}\n          @addToken={{this.addTokenToExecution}}\n  />\n  \n  {{#if this.showMakeDefaultDashboard}}\n    <MakeDefaultDashboard @isTestConfDefault={{this.isTestConfDefaultDashboard}}\n                          @isTestCaseDefault={{this.isTestCaseDefaultDashboard}}\n                          @isOrgDefault={{this.isOrgDefaultDashboard}}\n                          @makeDefaultDashboard={{this.makeDefaultDashboard}}\n                          @modalClosed={{fn (mut this.showMakeDefaultDashboard) false}} />\n  {{/if}}\n  \n  {{#if this.showDashboardModal}}\n    <DashboardModal @dashboard={{this.dashboard}}\n                    @isLoad={{this.isLoad}}\n                    @isTestConfDefault={{this.isTestConfDefaultDashboard}}\n                    @isTestCaseDefault={{this.isTestCaseDefaultDashboard}}\n                    @isOrgDefault={{this.isOrgDefaultDashboard}}\n                    @modalTitle=\"Save View As\"\n                    @save={{this.saveDashboardAs}}\n                    @modalClosed={{this.dashboardModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showDashboardSettingsModal}}\n    <DashboardSettingsModal @dashboard={{this.dashboard}}\n                            @save={{this.updateDashboard}}\n                            @modalClosed={{this.dashboardSettingsModalClosed}} />\n  {{/if}}\n  \n  \n  {{#if this.showAddChartModal}}\n    <ConfigureChart @metricDefs={{this.metricDefs}}\n                    @summary={{@model.summary}}\n                    @percentiles={{@model.percentiles}}\n                    @scriptType={{@model.script.scriptType}}\n                    @hasTransactions={{this.regionSummary.hasTransactions}}\n                    @isLoad={{this.isLoad}}\n                    @configChanged={{this.chartUpdated}}\n                    @modalClosed={{fn (mut this.showAddChartModal) false}} />\n  {{/if}}\n  \n  {{#if this.showDetailsModal}}\n    <Account::Billing::HistoryUsageDetailsModal\n            @historyObjId={{this.selectedUsageObjId}}\n            @onClose={{this.usageDetailsModalClose}} />\n  {{/if}}\n  {{#if this.showConfBaseLineModal}}\n    <TestCaseBaselineModal\n            @isCompareResults={{this.isCompareResults}}\n            @currentResultId={{@model.id}}\n            @selectedExecution={{this.comparisonId}}\n            @testCase={{@model.configuration.testCase}}\n            @testScript={{@model.configuration.script}}\n            @testConf={{@model.configuration}}\n            @now={{this.now}}\n            @modalClosed={{this.confBaseLineModalClosed}}\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@ctx\\\",\\\"@model\\\"],[[30,0],[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-start justify-content-between\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@isPrint\\\",\\\"@model\\\",\\\"@logInfo\\\",\\\"@outputFileCount\\\",\\\"@showLoggingPanel\\\",\\\"@outputFilesLoaded\\\",\\\"@testRunnersNumber\\\"],[[30,2],[30,1],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"outputFileCount\\\"]],[30,0,[\\\"showLoggingPanel\\\"]],[30,0,[\\\"outputFilesLoaded\\\"]],[30,0,[\\\"testRunnersNumber\\\"]]]],null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,3],null,[[\\\"@model\\\",\\\"@isMultiUser\\\",\\\"@isSuperAdmin\\\",\\\"@isViewer\\\",\\\"@hasResourcesGrid\\\",\\\"@viewRelatedParams\\\",\\\"@exportToCsvUrl\\\",\\\"@regionSummary\\\",\\\"@gotoUpdateConf\\\",\\\"@executionDeleted\\\",\\\"@executionStarted\\\",\\\"@onChangeViewLayout\\\",\\\"@updateIsBaseline\\\",\\\"@compareResults\\\",\\\"@qpViewLayout\\\"],[[30,1],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isSuperAdmin\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"hasResourcesGrid\\\"]],[30,0,[\\\"viewRelatedParams\\\"]],[30,0,[\\\"exportToCsvUrl\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,3],[30,4],[30,5],[30,6],[28,[37,4],[[28,[37,5],[[30,1,[\\\"isBaseline\\\"]]],null]],null],[30,0,[\\\"compareResults\\\"]],[30,7]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,8,[\\\"ViewManagement\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"minimalHeader\\\"]]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"View Management\\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[41,[28,[37,9],[[28,[37,10],[[30,0,[\\\"dashboard\\\",\\\"public\\\"]]],null],[30,0,[\\\"currentUser\\\",\\\"isAdmin\\\"]]],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showDashboardSettingsModalAction\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit Settings\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"saveDashboardAction\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-save\\\"]],null],[1,\\\" Save\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showDashboardModalAction\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-copy\\\"]],null],[1,\\\" Save As\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[28,[37,10],[[30,0,[\\\"dashboard\\\",\\\"public\\\"]]],null],[30,0,[\\\"isSuperAdmin\\\"]]],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"deleteDashboard\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[28,[37,4],[[28,[37,5],[[30,0,[\\\"showMakeDefaultDashboard\\\"]]],null],true],null]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-check-circle\\\"]],null],[1,\\\" Make Default View\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,14],[[30,0,[\\\"dashboard\\\",\\\"id\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"saveDefaultView\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" Export View Definition\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[10,3],[15,6,[29,[[30,0,[\\\"exportViewUrl\\\"]]]]],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" Export View Definition\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Add Widgets\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[28,[37,4],[[28,[37,5],[[30,0,[\\\"showAddChartModal\\\"]]],null],true],null]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-chart-line\\\"]],null],[1,\\\" Add Chart\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isSuiteSummariesVisible\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showSuiteSummaries\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"far fa-check-square\\\"]],null],[1,\\\" Show Assertions\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"isCommandSummariesVisible\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showCommandsSummaries\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"far fa-check-square\\\"]],null],[1,\\\" Show Commands\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"isGlanceVisible\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showGlance\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-tachometer-alt\\\"]],null],[1,\\\" Show Summary\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"isGridVisible\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showResultsGrid\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-table\\\"]],null],[1,\\\" Show Results\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"isImageViewerVisible\\\"]]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showImageViewer\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"far fa-images\\\"]],null],[1,\\\" Show Images\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"script\\\",\\\"metadata\\\",\\\"recordVideos\\\"]],[[[41,[51,[30,0,[\\\"isVideoViewerVisible\\\"]]],[[[1,\\\"                \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showVideoViewer\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"far fa-images\\\"]],null],[1,\\\" Show Videos\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]],null]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[8]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[8,[39,15],null,[[\\\"@model\\\",\\\"@baselineExecution\\\",\\\"@mapRegions\\\",\\\"@mapRegionsBaseline\\\",\\\"@status\\\",\\\"@finishedAt\\\",\\\"@startedAt\\\",\\\"@comparisonId\\\",\\\"@isViewer\\\",\\\"@outcomeHtml\\\",\\\"@scriptParamsObj\\\",\\\"@scriptParamsObjBaseline\\\",\\\"@notifications\\\",\\\"@hideBrowsers\\\",\\\"@notificationsBaseline\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"@showUsageHistory\\\",\\\"@showTestOutcomeModal\\\"],[[30,1],[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"mapRegions\\\"]],[30,0,[\\\"mapRegionsBaseline\\\"]],[30,0,[\\\"status\\\"]],[30,0,[\\\"finishedAt\\\"]],[30,0,[\\\"startedAt\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"outcomeHtml\\\"]],[30,0,[\\\"scriptParamsObj\\\"]],[30,0,[\\\"scriptParamsObjBaseline\\\"]],[30,0,[\\\"notifications\\\"]],[28,[37,16],[[28,[37,10],[[30,1,[\\\"browsers\\\",\\\"length\\\"]]],null],[28,[37,10],[[30,1,[\\\"browsersExecuted\\\",\\\"length\\\"]]],null]],null],[30,0,[\\\"notificationsBaseline\\\"]],[30,9],[30,10],[30,0,[\\\"showUsageHistory\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[15,0,[30,0,[\\\"noteClass\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"configuration\\\",\\\"isTryItOut\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"note note-info\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,17],[[24,0,\\\"float-right btn btn-primary m-l-10\\\"]],[[\\\"@route\\\",\\\"@query\\\"],[\\\"new\\\",[28,[37,18],null,[[\\\"folderPath\\\"],[null]]]]],[[\\\"default\\\"],[[[[10,\\\"strong\\\"],[12],[1,\\\"New Test Case\\\"],[13]],[]]]]],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          This test simulates \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"concurrentClients\\\"]]],[13],[1,\\\" concurrent users each loading\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"url\\\"]]],[13],[1,\\\" in a Chrome browser\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"iterations\\\"]]],[13],[1,\\\" times across the regions shown below. Click the\\\\n          \\\"],[8,[39,21],null,[[\\\"@isInline\\\",\\\"@script\\\"],[true,[30,1,[\\\"script\\\"]]]],null],[1,\\\"\\\\n          scenario for the detailed steps or browse below for the test results.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,2],[[[41,[30,1,[\\\"note\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Note: \\\"],[13],[1,[28,[35,22],[[28,[37,23],[[30,1,[\\\"note\\\",\\\"contentsHtml\\\"]],\\\"html\\\"],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"      \\\"],[8,[39,24],null,[[\\\"@model\\\",\\\"@type\\\",\\\"@showAddNoteText\\\",\\\"@showNoteEditor\\\",\\\"@updateEditor\\\",\\\"@updateNote\\\"],[[30,1],\\\"execution\\\",false,[30,0,[\\\"showNoteEditor\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"showNoteEditor\\\"]]],null]],null],[28,[37,4],[[28,[37,5],[[30,1,[\\\"note\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,2]],[[[41,[28,[37,9],[[28,[37,10],[[30,1,[\\\"note\\\"]]],null],[28,[37,16],[[30,0,[\\\"showTopBar\\\"]],[30,1,[\\\"completed\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"results-top-bar\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,1,[\\\"baseline\\\"]],[28,[37,10],[[30,0,[\\\"comparisonId\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"configBaseLineResultSet\\\"]]],null],[12],[10,1],[14,0,\\\"editable-click\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Baseline: \\\"],[13],[1,\\\" #\\\"],[1,[30,1,[\\\"baseline\\\"]]],[1,\\\"\\\\n            \\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[29,[\\\"/results/\\\",[30,1,[\\\"baseline\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"showReportSetupPanel\\\"]]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"m-r-20\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"toggleReportSetupPanel\\\"]]],null],[12],[10,1],[14,0,\\\"editable-click\\\"],[12],[1,[28,[35,22],[[30,0,[\\\"resultsTypeText\\\"]]],null]],[1,\\\" \\\"],[1,[52,[30,0,[\\\"hasDashboardChanges\\\"]],\\\"*\\\"]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,16],[[30,0,[\\\"allowZoomBar\\\"]],[28,[37,10],[[30,0,[\\\"showZoomBar\\\"]]],null]],null],[[[1,\\\"          \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"toggleZoomBar\\\"]]],null],[12],[10,1],[14,0,\\\"editable-click m-r-20\\\"],[12],[1,[28,[35,22],[[30,0,[\\\"zoomText\\\"]]],null]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[41,[28,[37,16],[[28,[37,26],[[30,1,[\\\"uuid\\\"]]],null],[28,[37,10],[[30,1,[\\\"note\\\",\\\"contents\\\"]]],null],[28,[37,10],[[30,0,[\\\"showNoteEditor\\\"]]],null]],null],[[[1,\\\"            \\\"],[11,3],[24,0,\\\"editable-click m-r-20\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[28,[37,4],[[28,[37,5],[[30,0,[\\\"showNoteEditor\\\"]]],null],true],null]],null],[12],[1,\\\"Add note...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showReportSetupPanel\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"results-top-bar\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-white btn-sm btn-circle btn-icon text-danger pull-right\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"hideReportSetupPanel\\\"]]],null],[12],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"regionLoaded\\\"]],[30,0,[\\\"dashboard\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Report Type\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"comparisonId\\\"]],[[[1,\\\"                \\\"],[11,3],[24,0,\\\"m-r-5\\\"],[24,6,\\\"javascript:\\\"],[4,[38,12],[\\\"click\\\",[28,[37,4],[[30,0,[\\\"updateResultsType\\\"]],\\\"compare\\\"],null]],null],[12],[1,\\\"\\\\n                  \\\"],[8,[39,27],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"fa-edit\\\",\\\"Make new comparison\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,3],[14,0,\\\"m-r-5\\\"],[15,6,[29,[\\\"/results/\\\",[30,0,[\\\"comparisonId\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,27],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"fa-search\\\",\\\"View baseline result\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"resultsType\\\"]],\\\"radio\\\",[30,0,[\\\"updateResultsType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"comparisonId\\\"]],[[[1,\\\"                  \\\"],[8,[30,11,[\\\"button\\\"]],[[16,3,[29,[\\\"resultsType-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"baseline\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Comparison to # \\\"],[1,[30,0,[\\\"comparisonId\\\"]]],[1,\\\" \\\"],[8,[39,27],null,[[\\\"@content\\\"],[\\\"In all charts, plot the value across the duration of this test run. Only available for load tests.\\\"]],null]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[8,[30,11,[\\\"button\\\"]],[[16,3,[29,[\\\"resultsType-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"compare\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Comparison Report\\\"],[8,[39,27],null,[[\\\"@content\\\"],[\\\"Compare this test run to another test run of your choosing\\\"]],null]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[8,[30,11,[\\\"button\\\"]],[[16,3,[29,[\\\"resultsType-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"thisRun\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"This Test Run \\\"],[8,[39,27],null,[[\\\"@content\\\"],[\\\"In all charts, plot the value across the duration of this test run. Only available for load tests.\\\"]],null]],[]]]]],[1,\\\"\\\\n                \\\"],[8,[30,11,[\\\"button\\\"]],[[16,3,[29,[\\\"resultsType-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"history\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Test Run History \\\"],[8,[39,27],null,[[\\\"@content\\\"],[\\\"In all charts, plot the value across test runs of this test configuration.\\\"]],null]],[]]]]],[1,\\\"\\\\n              \\\"]],[11]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"resultsType\\\"]],\\\"history\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"m-l-20\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Comparison Period\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"period\\\"]],\\\"radio\\\",[30,0,[\\\"updatePeriod\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,12,[\\\"button\\\"]],[[16,3,[29,[\\\"period-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"recent\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Recent\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,12,[\\\"button\\\"]],[[16,3,[29,[\\\"period-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"7d\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"7 days\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,12,[\\\"button\\\"]],[[16,3,[29,[\\\"period-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"1m\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"1 month\\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,12,[\\\"button\\\"]],[[16,3,[29,[\\\"period-\\\",[30,0,[\\\"uuid\\\"]]]]]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"3m\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"3 months\\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[12]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"period\\\"]],\\\"recent\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"m-l-20\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"# of Past Runs\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,29],[[24,0,\\\"width-80 form-control form-control-sm\\\"],[24,\\\"placeholder\\\",\\\"# of runs\\\"],[16,\\\"min\\\",0],[16,\\\"max\\\",500]],[[\\\"@type\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"number\\\",[30,0,[\\\"limit\\\"]],[30,0,[\\\"updateLimit\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[],[]]]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showZoomBar\\\"]],[[[1,\\\"      \\\"],[8,[39,30],null,[[\\\"@model\\\",\\\"@config\\\",\\\"@intervals\\\",\\\"@selectedResource\\\",\\\"@hideFilterBar\\\"],[[30,1],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"intervals\\\"]],[30,0,[\\\"selectedResource\\\"]],[30,0,[\\\"hideZoomBar\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n  \\\"],[10,\\\"h5\\\"],[14,0,\\\"print-only mt-3\\\"],[12],[1,[28,[35,22],[[30,0,[\\\"resultsTypeText\\\"]]],null]],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[15,0,[29,[\\\"result-view \\\",[52,[30,2],\\\"\\\",\\\"tab-content bg-transparent p-0\\\"]]]],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[15,0,[29,[[52,[30,2],\\\"\\\",\\\"tab-pane fade active show\\\"]]]],[14,1,\\\"results-tab\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLoggingPanel\\\"]],[[[1,\\\"        \\\"],[8,[39,32],null,[[\\\"@summary\\\",\\\"@model\\\",\\\"@execution\\\",\\\"@config\\\",\\\"@glanceVisibility\\\",\\\"@metricDefs\\\",\\\"@selectedResource\\\",\\\"@isLoad\\\",\\\"@resultsType\\\",\\\"@bucketsLoaded\\\",\\\"@fromResultsTab\\\",\\\"@isViewer\\\",\\\"@showTestOutcomeModal\\\"],[[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,1],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"glance\\\",\\\"visibility\\\"]],[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"selectedResource\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"resultsType\\\"]],[30,0,[\\\"bucketsLoadedAction\\\"]],true,[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[39,33],null,[[\\\"@model\\\",\\\"@baselineExecution\\\",\\\"@regionBaselineId\\\",\\\"@regionName\\\",\\\"@comparisonId\\\",\\\"@baselineLogInfo\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@config\\\",\\\"@logInfo\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@fromResultsTab\\\",\\\"@initLevel\\\",\\\"@baselineLogInfoChanged\\\",\\\"@consoleConfigChangedBaseline\\\",\\\"@consoleConfigChanged\\\",\\\"@logInfoChanged\\\",\\\"@logLevelChanged\\\"],[[30,1],[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"regionBaselineId\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"baselineLogInfo\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"byRegionBaselineId\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],true,\\\"Debug\\\",[30,0,[\\\"baselineLogInfoChanged\\\"]],[30,0,[\\\"consoleConfigChangedBaseline\\\"]],[30,0,[\\\"consoleConfigChanged\\\"]],[30,0,[\\\"logInfoChanged\\\"]],[30,0,[\\\"logLevelChanged\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showUsageWidget\\\"]],[[[1,\\\"          \\\"],[8,[39,34],null,[[\\\"@minimalHeader\\\",\\\"@metricDefs\\\",\\\"@model\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@overallModel\\\",\\\"@chartsConfig\\\",\\\"@config\\\",\\\"@regionName\\\",\\\"@widget\\\",\\\"@bucketsLoaded\\\",\\\"@intervalsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@fromResultsTab\\\",\\\"@selectedResource\\\",\\\"@utilizationWarning\\\",\\\"@isPrint\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@isBaseline\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@period\\\",\\\"@isViewer\\\",\\\"@agentSearchMap\\\"],[[30,1,[\\\"minimalHeader\\\"]],[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"allRegion\\\",\\\"summaryHistory\\\"]],[30,0,[\\\"buckets\\\"]],[30,0,[\\\"intervals\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"charts\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"widgetUsageChart\\\"]],[30,0,[\\\"bucketsLoadedAction\\\"]],true,true,true,[30,0,[\\\"selectedResource\\\"]],[30,0,[\\\"utilizationWarning\\\"]],[30,2],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"isHistory\\\"]],[30,0,[\\\"isBaseline\\\"]],[30,0,[\\\"requiresIntervals\\\"]],[30,0,[\\\"resultsType\\\"]],[30,0,[\\\"period\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"agentSearchMap\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[30,2],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"panel block-container\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"panel-heading block-container-target\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Test Locations\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"dl\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,38],[[28,[37,38],[[30,0,[\\\"regionSummaries\\\"]]],null]],null],null,[[[41,[51,[30,13,[\\\"isAll\\\"]]],[[[1,\\\"                    \\\"],[10,\\\"dt\\\"],[12],[8,[39,40],null,[[\\\"@regionSummary\\\"],[[30,13]]],null],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,22],[[28,[37,23],[[30,13,[\\\"providerPopoverText\\\"]]],null]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[13]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 col-lg-3\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-b-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"View \\\"],[1,[52,[30,0,[\\\"hasDashboardChanges\\\"]],\\\"*\\\"]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"dashboard\\\"]],[[[1,\\\"                  \\\"],[8,[39,43],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[28,[37,10],[[28,[37,26],[[30,1,[\\\"uuid\\\"]]],null]],null],[30,0,[\\\"dashboards\\\"]],[30,0,[\\\"dashboard\\\"]],\\\"Please select a view...\\\",[30,0,[\\\"dashboardSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[10,\\\"strong\\\"],[12],[1,[30,14,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"small\\\"],[12],[1,[30,14,[\\\"description\\\"]]],[13],[1,\\\"\\\\n                  \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"isParent\\\"]]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 col-lg-3\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group m-b-10\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n                    Region\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"baselineExecution\\\"]],[28,[37,45],[[30,0,[\\\"regionName\\\"]],\\\"ALL\\\"],null],[28,[37,10],[[30,0,[\\\"regionBaselineId\\\"]]],null]],null],[[[1,\\\"                      \\\"],[8,[39,27],[[24,0,\\\"text-danger\\\"]],[[\\\"@content\\\"],[\\\"Baseline test was not run in the same location so there is no region level comparison available\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,43],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\",\\\"@selectedItemComponent\\\"],[[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"regionSummary\\\"]],\\\"Please select a region...\\\",[30,0,[\\\"regionSelected\\\"]],\\\"print-selected-region-summary\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[39,40],null,[[\\\"@regionSummary\\\",\\\"@bold\\\"],[[30,15],true]],null],[1,\\\"\\\\n                  \\\"]],[15]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,16],[[30,0,[\\\"isLoad\\\"]],[30,1,[\\\"completed\\\"]]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-12\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Resource\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,43],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"displayedResources\\\"]],[30,0,[\\\"selectedResource\\\"]],\\\"Please select a resource...\\\",[28,[37,4],[[30,0,[\\\"resourceSelected\\\"]],true],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,16,[\\\"resource\\\"]],\\\"!overall!\\\"],null],[[[1,\\\"                        Overall\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[1,[30,16,[\\\"resource\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[16]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasDashboardChanges\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-info\\\"],[12],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,\\\"You have made changes to the results view that are not yet saved.\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"dashboard\\\",\\\"public\\\"]],[28,[37,10],[[30,0,[\\\"currentUser\\\",\\\"isAdmin\\\"]]],null]],null],[[[1,\\\"                  Changes to a system view must be saved as a new view that is private to your organization.\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[28,[37,10],[[30,0,[\\\"dashboard\\\",\\\"public\\\"]]],null],[30,0,[\\\"currentUser\\\",\\\"isAdmin\\\"]]],null],[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"saveDashboardAction\\\"]]],null],[12],[1,\\\"Save View Changes\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"showDashboardModalAction\\\"]]],null],[12],[1,\\\"Save As New View\\\"],[13],[1,\\\"\\\\n              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-danger\\\"],[24,4,\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"revertDashboardChanges\\\"]]],null],[12],[1,\\\"Discard View Changes\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n        \\\"],[8,[39,47],null,[[\\\"@regionSummary\\\",\\\"@regionSummaries\\\",\\\"@hasErrors\\\",\\\"@now\\\"],[[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"logInfo\\\",\\\"hasErrors\\\"]],[30,0,[\\\"now\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"regionSummary\\\",\\\"hasResults\\\"]],[[[41,[28,[37,16],[[30,0,[\\\"regionLoaded\\\"]],[30,0,[\\\"dashboard\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"comparisonId\\\"]]],null],[30,0,[\\\"baselineExecution\\\"]]],null]],null],[[[1,\\\"            \\\"],[8,[39,48],null,[[\\\"@model\\\",\\\"@regionSummaryBaseline\\\",\\\"@overallModel\\\",\\\"@comparisonId\\\",\\\"@baselineExecution\\\",\\\"@regionSummaries\\\",\\\"@regionSummariesBaseline\\\",\\\"@config\\\",\\\"@chartsConfig\\\",\\\"@gridConfig\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@metricDefs\\\",\\\"@metricDefsByName\\\",\\\"@minimalHeader\\\",\\\"@selectedResource\\\",\\\"@baselineSelectedResource\\\",\\\"@isPrint\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@isHistory\\\",\\\"@isBaseline\\\",\\\"@requiresIntervals\\\",\\\"@resultsType\\\",\\\"@period\\\",\\\"@limit\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@agentSearchMap\\\",\\\"@suiteSummariesLoaded\\\",\\\"@isViewer\\\",\\\"@orderChanged\\\",\\\"@gridConfigChanged\\\",\\\"@glanceConfigChanged\\\",\\\"@chartUpdated\\\",\\\"@transitionTo\\\",\\\"@onResourcesLoaded\\\",\\\"@onBaselineResourcesLoaded\\\",\\\"@onIntervalsLoaded\\\",\\\"@onBaselineIntervalsLoaded\\\",\\\"@onImagesLoaded\\\",\\\"@onVideoImagesLoaded\\\",\\\"@onVideoBaselineImagesLoaded\\\",\\\"@onBaselineImagesLoaded\\\",\\\"@onSuiteImagesLoaded\\\",\\\"@onBaselineSuiteImagesLoaded\\\",\\\"@onVideosLoaded\\\",\\\"@onSummaryHistoryLoaded\\\",\\\"@onBaselineSummaryHistoryLoaded\\\",\\\"@onSuiteSummariesLoaded\\\",\\\"@onBaselineSuiteSummariesLoaded\\\",\\\"@onBucketsLoaded\\\",\\\"@onBaselineBucketsLoaded\\\",\\\"@resourceSelected\\\",\\\"@baselineResourceSelected\\\",\\\"@showTestOutcomeModal\\\",\\\"@showImageDetailsModal\\\",\\\"@showVideoDetailsModal\\\",\\\"@currentTab\\\"],[[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"regionSummaryBaseline\\\"]],[30,1],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"regionSummariesBaseline\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"charts\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\",\\\"grid\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"regionBaselineId\\\"]],[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"metricDefsByName\\\"]],[30,1,[\\\"minimalHeader\\\"]],[30,0,[\\\"selectedResource\\\"]],[30,0,[\\\"baselineSelectedResource\\\"]],[30,2],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"isHistory\\\"]],[30,0,[\\\"isBaseline\\\"]],[30,0,[\\\"requiresIntervals\\\"]],[30,0,[\\\"resultsType\\\"]],[30,0,[\\\"period\\\"]],[30,0,[\\\"latestLimit\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"byRegionBaselineId\\\"]],[30,0,[\\\"agentSearchMap\\\"]],[30,0,[\\\"suiteSummariesLoaded\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"orderChanged\\\"]],[30,0,[\\\"gridConfigChanged\\\"]],[30,0,[\\\"glanceConfigChanged\\\"]],[30,0,[\\\"chartUpdated\\\"]],[30,17],[30,0,[\\\"resourcesLoadedAction\\\"]],[30,0,[\\\"baselineResourcesLoaded\\\"]],[30,0,[\\\"intervalsLoadedAction\\\"]],[30,0,[\\\"baselineIntervalsLoadedAction\\\"]],[30,0,[\\\"onImagesLoadedAction\\\"]],[30,0,[\\\"onVideoImagesLoadedAction\\\"]],[30,0,[\\\"onVideoBaselineImagesLoadedAction\\\"]],[30,0,[\\\"baselineImagesLoadedAction\\\"]],[30,0,[\\\"onSuiteImagesLoadedAction\\\"]],[30,0,[\\\"onBaselineSuiteImagesLoadedAction\\\"]],[30,0,[\\\"videosLoadedAction\\\"]],[30,0,[\\\"onSummaryHistoryLoadedAction\\\"]],[30,0,[\\\"baselineSummaryHistoryLoadedAction\\\"]],[30,0,[\\\"onSuiteSummariesLoadedAction\\\"]],[30,0,[\\\"onBaselineSuiteSummariesLoadedAction\\\"]],[30,0,[\\\"bucketsLoadedAction\\\"]],[30,0,[\\\"baselineBucketsLoadedAction\\\"]],[28,[37,4],[[30,0,[\\\"resourceSelected\\\"]],false],null],[30,0,[\\\"baselineResourceSelected\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,0,[\\\"showVideoDetailsModalAction\\\"]],[30,0,[\\\"currentTab\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading results...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"          No results yet!\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[41,[51,[30,0,[\\\"showLoggingPanel\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"tab-pane fade\\\"],[14,1,\\\"logging-tab\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"dashboard\\\"]],[[[1,\\\"            \\\"],[8,[39,33],null,[[\\\"@model\\\",\\\"@title\\\",\\\"@isTabComparison\\\",\\\"@regionName\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@config\\\",\\\"@logInfo\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@baselineLogInfoChanged\\\",\\\"@consoleConfigChanged\\\",\\\"@consoleConfigChangedBaseline\\\",\\\"@logInfoChanged\\\",\\\"@logLevelChanged\\\"],[[30,1],[30,0,[\\\"currentTestTitle\\\"]],[52,[30,0,[\\\"comparisonId\\\"]],true],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"byRegionBaselineId\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"logInfo\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"baselineLogInfoChanged\\\"]],[30,0,[\\\"consoleConfigChanged\\\"]],[30,0,[\\\"consoleConfigChangedBaseline\\\"]],[30,0,[\\\"logInfoChanged\\\"]],[30,0,[\\\"logLevelChanged\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"baselineExecution\\\"]],[28,[37,9],[[28,[37,14],[[30,0,[\\\"regionName\\\"]],\\\"ALL\\\"],null],[30,0,[\\\"regionBaselineId\\\"]]],null]],null],[[[1,\\\"              \\\"],[8,[39,33],null,[[\\\"@model\\\",\\\"@title\\\",\\\"@isTabComparison\\\",\\\"@regionBaselineId\\\",\\\"@regionName\\\",\\\"@baselineLogInfo\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@byRegionBaselineId\\\",\\\"@config\\\",\\\"@logInfo\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@baselineLogInfoChanged\\\",\\\"@consoleConfigChangedBaseline\\\",\\\"@logLevelChanged\\\"],[[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"baselineTestTitle\\\"]],true,[30,0,[\\\"regionBaselineId\\\"]],[30,0,[\\\"regionName\\\"]],[30,0,[\\\"baselineLogInfo\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"byRegionBaselineId\\\"]],[30,0,[\\\"dashboard\\\",\\\"config\\\"]],[30,0,[\\\"baselineLogInfo\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"baselineLogInfoChanged\\\"]],[30,0,[\\\"consoleConfigChangedBaseline\\\"]],[30,0,[\\\"logLevelChangedBaseline\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading results...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"tab-pane fade\\\"],[14,1,\\\"child-results-tab\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,49],null,[[\\\"@model\\\",\\\"@title\\\",\\\"@comparisonId\\\",\\\"@showResults\\\",\\\"@showTestOutcomeModal\\\"],[[30,1],[30,0,[\\\"currentTestTitle\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"showChildResults\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"baselineExecution\\\"]],[[[1,\\\"          \\\"],[8,[39,49],null,[[\\\"@model\\\",\\\"@title\\\",\\\"@comparisonId\\\",\\\"@showResults\\\",\\\"@showTestOutcomeModal\\\"],[[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"baselineTestTitle\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"showChildResults\\\"]],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"tab-pane fade no-print\\\"],[14,1,\\\"files-tab\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,50],null,[[\\\"@overallModel\\\",\\\"@title\\\",\\\"@comparisonId\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@showFiles\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@currentTab\\\",\\\"@isBaseline\\\",\\\"@onOutputFilesLoaded\\\",\\\"@onOutputFilesLoading\\\",\\\"@showImageDetailsModal\\\"],[[30,1],[30,0,[\\\"currentTestTitle\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"allRegion\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionId\\\"]],[30,0,[\\\"showFiles\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"currentTab\\\"]],false,[30,0,[\\\"outputFilesLoadedAction\\\"]],[30,0,[\\\"outputFilesLoading\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"baselineExecution\\\"]],[[[1,\\\"          \\\"],[8,[39,50],null,[[\\\"@overallModel\\\",\\\"@title\\\",\\\"@comparisonId\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@showFiles\\\",\\\"@isMultiUser\\\",\\\"@isLoad\\\",\\\"@currentTab\\\",\\\"@isBaseline\\\",\\\"@onOutputFilesLoaded\\\",\\\"@onOutputFilesLoading\\\",\\\"@showImageDetailsModal\\\"],[[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"baselineTestTitle\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,0,[\\\"allRegionBaseline\\\",\\\"summary\\\"]],[30,0,[\\\"byRegionBaselineId\\\"]],[30,0,[\\\"showFiles\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"currentTab\\\"]],true,[30,0,[\\\"outputFilesLoadedBaseline\\\"]],[30,0,[\\\"outputFilesLoading\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"tab-pane fade bordered-panels\\\"],[14,1,\\\"test-runners\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestRunners\\\"]],[[[1,\\\"          \\\"],[8,[39,51],null,[[\\\"@title\\\",\\\"@regionSummaries\\\",\\\"@allRegion\\\",\\\"@qpRegionId\\\",\\\"@regionSelectedAction\\\",\\\"@isComparison\\\"],[[30,0,[\\\"currentTestTitle\\\"]],[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"allRegion\\\"]],[30,0,[\\\"qpRegionId\\\"]],[30,0,[\\\"regionSelected\\\"]],[52,[30,0,[\\\"comparisonId\\\"]],true]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"baselineExecution\\\"]],[[[41,[28,[37,10],[[28,[37,16],[[28,[37,45],[[30,0,[\\\"regionName\\\"]],\\\"ALL\\\"],null],[28,[37,10],[[30,0,[\\\"regionBaselineId\\\"]]],null]],null]],null],[[[1,\\\"              \\\"],[8,[39,51],null,[[\\\"@title\\\",\\\"@regionSummaries\\\",\\\"@allRegion\\\",\\\"@qpRegionId\\\",\\\"@regionSelectedAction\\\",\\\"@isComparison\\\",\\\"@isBaseline\\\"],[[30,0,[\\\"baselineTestTitle\\\"]],[30,0,[\\\"regionSummariesBaseline\\\"]],[30,0,[\\\"allRegionBaseline\\\"]],[30,0,[\\\"qpRegionBaselineId\\\"]],[30,0,[\\\"regionSelectedBaseline\\\"]],true,true]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"],[8,[39,52],null,[[\\\"@execution\\\",\\\"@viewRelatedParams\\\",\\\"@shareType\\\",\\\"@baselineExecution\\\",\\\"@addToken\\\"],[[30,1],[30,0,[\\\"viewRelatedParams\\\"]],[52,[30,0,[\\\"comparisonId\\\"]],\\\"comparison\\\",\\\"GetLoadTestExecution\\\"],[30,0,[\\\"baselineExecution\\\"]],[30,0,[\\\"addTokenToExecution\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showMakeDefaultDashboard\\\"]],[[[1,\\\"  \\\"],[8,[39,53],null,[[\\\"@isTestConfDefault\\\",\\\"@isTestCaseDefault\\\",\\\"@isOrgDefault\\\",\\\"@makeDefaultDashboard\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"isTestConfDefaultDashboard\\\"]],[30,0,[\\\"isTestCaseDefaultDashboard\\\"]],[30,0,[\\\"isOrgDefaultDashboard\\\"]],[30,0,[\\\"makeDefaultDashboard\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"showMakeDefaultDashboard\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDashboardModal\\\"]],[[[1,\\\"  \\\"],[8,[39,54],null,[[\\\"@dashboard\\\",\\\"@isLoad\\\",\\\"@isTestConfDefault\\\",\\\"@isTestCaseDefault\\\",\\\"@isOrgDefault\\\",\\\"@modalTitle\\\",\\\"@save\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"dashboard\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"isTestConfDefaultDashboard\\\"]],[30,0,[\\\"isTestCaseDefaultDashboard\\\"]],[30,0,[\\\"isOrgDefaultDashboard\\\"]],\\\"Save View As\\\",[30,0,[\\\"saveDashboardAs\\\"]],[30,0,[\\\"dashboardModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDashboardSettingsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,55],null,[[\\\"@dashboard\\\",\\\"@save\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"dashboard\\\"]],[30,0,[\\\"updateDashboard\\\"]],[30,0,[\\\"dashboardSettingsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showAddChartModal\\\"]],[[[1,\\\"  \\\"],[8,[39,56],null,[[\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@hasTransactions\\\",\\\"@isLoad\\\",\\\"@configChanged\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"metricDefs\\\"]],[30,1,[\\\"summary\\\"]],[30,1,[\\\"percentiles\\\"]],[30,1,[\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"regionSummary\\\",\\\"hasTransactions\\\"]],[30,0,[\\\"isLoad\\\"]],[30,0,[\\\"chartUpdated\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"showAddChartModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,57],null,[[\\\"@historyObjId\\\",\\\"@onClose\\\"],[[30,0,[\\\"selectedUsageObjId\\\"]],[30,0,[\\\"usageDetailsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showConfBaseLineModal\\\"]],[[[1,\\\"  \\\"],[8,[39,58],null,[[\\\"@isCompareResults\\\",\\\"@currentResultId\\\",\\\"@selectedExecution\\\",\\\"@testCase\\\",\\\"@testScript\\\",\\\"@testConf\\\",\\\"@now\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"isCompareResults\\\"]],[30,1,[\\\"id\\\"]],[30,0,[\\\"comparisonId\\\"]],[30,1,[\\\"configuration\\\",\\\"testCase\\\"]],[30,1,[\\\"configuration\\\",\\\"script\\\"]],[30,1,[\\\"configuration\\\"]],[30,0,[\\\"now\\\"]],[30,0,[\\\"confBaseLineModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"@isPrint\\\",\\\"@gotoUpdateConf\\\",\\\"@executionDeleted\\\",\\\"@executionStarted\\\",\\\"@onChangeLayout\\\",\\\"@qpViewLayout\\\",\\\"Action\\\",\\\"@publicView\\\",\\\"@isPublic\\\",\\\"bg\\\",\\\"bg\\\",\\\"regionSummary\\\",\\\"dashboardOpt\\\",\\\"regionSummaryOpt\\\",\\\"record\\\",\\\"@transitionTo\\\"],[\\\"load-test-result/wrapper\\\",\\\"div\\\",\\\"load-test-result/tabs\\\",\\\"load-test-result/action-menu\\\",\\\"fn\\\",\\\"mut\\\",\\\"unless\\\",\\\"li\\\",\\\"if\\\",\\\"or\\\",\\\"not\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"eq\\\",\\\"load-test-result/info-panel\\\",\\\"and\\\",\\\"link-to\\\",\\\"hash\\\",\\\"strong\\\",\\\"p\\\",\\\"scenario/link\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"note-info\\\",\\\"span\\\",\\\"is-empty\\\",\\\"ui/info-icon\\\",\\\"bs-button-group\\\",\\\"input-select-all\\\",\\\"result-filter-bar\\\",\\\"h5\\\",\\\"test-glance\\\",\\\"logging-panel\\\",\\\"metrics-widget\\\",\\\"h4\\\",\\\"dl\\\",\\\"each\\\",\\\"-track-array\\\",\\\"dt\\\",\\\"print-region-summary\\\",\\\"dd\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"small\\\",\\\"not-eq\\\",\\\"button\\\",\\\"execution-progress\\\",\\\"load-test-regional-dashboard\\\",\\\"load-test-result/child-executions\\\",\\\"output-files-widget\\\",\\\"test-runners\\\",\\\"share-results-modal\\\",\\\"make-default-dashboard\\\",\\\"dashboard-modal\\\",\\\"dashboard-settings-modal\\\",\\\"configure-chart\\\",\\\"account/billing/history-usage-details-modal\\\",\\\"test-case-baseline-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/load-test-results.hbs\",\n    \"isStrictMode\": false\n  });\n  class LoadTestResults extends _loadTestResultsBase.default {}\n  _exports.default = LoadTestResults;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoadTestResults);\n});","define(\"@testable/shared-ui/components/logging-panel-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"ember-uuid\", \"@testable/shared-ui/utils/dashboards\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _environment, _lib, _server, _emberUuid, _dashboards, _service, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"ember-uuid\",0,\"@testable/shared-ui/utils/dashboards\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-update this.onZoomInfoChanged this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp}}\n    {{did-update this.onConfigChange @config}}\n    {{did-update this.onLogInfoChange this.isLoaded this.logCount this.hasErrors}}\n    {{did-update this.onExecutionIdChange @model.id}}\n    {{did-update this.onParentConsoleModeChanged @parentConsoleMode}}\n    {{did-update this.onParentShowFilterPanelChanged @parentShowFilterPanel}}\n    {{did-update this.onParentShowConfigureConsoleModalChanged @parentShowConfigureConsoleModal}}\n  >\n  {{#if @isComparison}}\n    <div class=\"ml-2 p-5 d-flex justify-content-between\">\n      <div>\n        <LoggingPanelStats\n                @title={{@title}}\n                @logInfo={{@logInfo}}\n                @showStats={{true}}\n                @consoleMode={{this.consoleMode}}\n                @consoleModeChanged={{this.consoleModeChanged}}\n        />\n      </div>\n      <div class=\"pr-2\">\n        <a {{on \"click\" this.toggleFilterPanel}} class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                                          title=\"Show/Hide Filters\" role=\"button\"><Ui::Icon @icon=\"fa fa-filter\" /></a>\n        {{#unless (or @model.minimalHeader this.isViewer)}}\n          <a {{on \"click\" this.showConfigureConsoleModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary \"\n                                                    data-bs-toggle=\"tooltip\" title=\"Configure Logging\" role=\"button\"><Ui::Icon @icon=\"fa fa-cog\" /></a>\n        {{/unless}}\n        <a target=\"_blank\" href=\"{{this.downloadLogsUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\"\n           data-bs-toggle=\"tooltip\" title=\"Download Log\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n      </div>\n  \n    </div>\n  {{/if}}\n  \n  <div class=\"panel-toolbar {{if this.showFilterPanel '' 'height-0 p-t-0 p-b-0'}}\">\n    <a class=\"btn btn-circle btn-sm btn-icon text-danger close float-end\" role=\"button\"\n      {{on \"click\" this.toggleFilterPanel}} ><Ui::Icon @icon=\"fa fa-times\" /></a>\n  \n    <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n      <div class=\"m-r-20\">\n        <div class=\"f-w-700 m-b-5\">Min Level</div>\n        <Ui::PSelect @options={{this.levels}}\n                     @selected={{this.level}}\n                     class=\"width-100\"\n                     @onChange={{this.updateLevel}} as |level|>\n          {{level}}\n        </Ui::PSelect>\n      </div>\n      <div class=\"m-r-20\">\n        <div class=\"f-w-700 m-b-5\">Group</div>\n        <Ui::PSelect @options={{this.logGroups}}\n                     @selected={{this.logGroup}}\n                     class=\"width-100\"\n                     @onChange={{this.updateLogGroup}} as |logGroup|>\n          {{logGroup.name}}\n        </Ui::PSelect>\n      </div>\n      {{#if (not-eq @model.script.scriptType 'Live')}}\n        <FilterFields @model={{@model}}\n                      @iterationsExecuted={{@summary.iterationsExecuted}}\n                      @concurrentClients={{@model.concurrentClients}}\n                      @executedIterationsPerClient={{@summary.executedIterationsPerClient}}\n                      @browsers={{@model.browsers}}\n                      @scriptBinary={{@model.script.metadata.binary}}\n                      @scriptType={{@model.script.scriptType}}\n                      @byRegionId={{@byRegionId}}\n                      @showRegionFilter={{true}}\n                      @showTestRunnerFilter={{true}}\n                      @isLoad={{@isLoad}}\n                      @isMultiUser={{@isMultiUser}}\n                      @region={{this.region}}\n                      @user={{this.user}}\n                      @iteration={{this.iteration}}\n                      @doesSupportAgentsFilter={{true}}\n                      @updateRegion={{this.updateRegion}}\n                      @updateAgent={{this.updateAgent}}\n                      @updateUser={{this.updateUser}}\n                      @updateIteration={{this.updateIteration}} />\n      {{/if}}\n      <div class=\"m-r-20 m-t-20\">\n        <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.systemOnly}} class=\"m-r-5\" {{on \"click\" this.systemOnlyChanged}} /> System Logging Only</label>\n      </div>\n  \n    </div>\n  </div>\n  <div class=\"panel-body\">\n    <Ui::AceEditor @id={{this.loggingPanelId}}\n                   @readonly={{true}}\n                   @code={{this.consoleText}}\n                   @wrap={{@config.console.wrap}}\n                   @resizeAble={{true}}\n                   @mode=\"ace/mode/sh\"\n                   @height=\"500\" />\n  </div>\n  \n  {{#if this.showConfigureConsoleModal}}\n    <ConfigureConsole @config={{this.configConsole}}\n                      @configChanged={{this.consoleConfigChangedAction}}\n                      @modalClosed={{this.configureConsoleModalClosed}} />\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"onZoomInfoChanged\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]]],null],[4,[38,1],[[30,0,[\\\"onConfigChange\\\"]],[30,1]],null],[4,[38,1],[[30,0,[\\\"onLogInfoChange\\\"]],[30,0,[\\\"isLoaded\\\"]],[30,0,[\\\"logCount\\\"]],[30,0,[\\\"hasErrors\\\"]]],null],[4,[38,1],[[30,0,[\\\"onExecutionIdChange\\\"]],[30,2,[\\\"id\\\"]]],null],[4,[38,1],[[30,0,[\\\"onParentConsoleModeChanged\\\"]],[30,3]],null],[4,[38,1],[[30,0,[\\\"onParentShowFilterPanelChanged\\\"]],[30,4]],null],[4,[38,1],[[30,0,[\\\"onParentShowConfigureConsoleModalChanged\\\"]],[30,5]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,6],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"ml-2 p-5 d-flex justify-content-between\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@title\\\",\\\"@logInfo\\\",\\\"@showStats\\\",\\\"@consoleMode\\\",\\\"@consoleModeChanged\\\"],[[30,7],[30,8],true,[30,0,[\\\"consoleMode\\\"]],[30,0,[\\\"consoleModeChanged\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"pr-2\\\"],[12],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Show/Hide Filters\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"toggleFilterPanel\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,8],[[30,2,[\\\"minimalHeader\\\"]],[30,0,[\\\"isViewer\\\"]]],null]],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary \\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Configure Logging\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"showConfigureConsoleModalAction\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"downloadLogsUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download Log\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[15,0,[29,[\\\"panel-toolbar \\\",[52,[30,0,[\\\"showFilterPanel\\\"]],\\\"\\\",\\\"height-0 p-t-0 p-b-0\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[11,3],[24,0,\\\"btn btn-circle btn-sm btn-icon text-danger close float-end\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"toggleFilterPanel\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Min Level\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,9],[[24,0,\\\"width-100\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"levels\\\"]],[30,0,[\\\"level\\\"]],[30,0,[\\\"updateLevel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,9]],[1,\\\"\\\\n      \\\"]],[9]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Group\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,9],[[24,0,\\\"width-100\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"logGroups\\\"]],[30,0,[\\\"logGroup\\\"]],[30,0,[\\\"updateLogGroup\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,10,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[10]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,2,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[[[1,\\\"      \\\"],[8,[39,11],null,[[\\\"@model\\\",\\\"@iterationsExecuted\\\",\\\"@concurrentClients\\\",\\\"@executedIterationsPerClient\\\",\\\"@browsers\\\",\\\"@scriptBinary\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showRegionFilter\\\",\\\"@showTestRunnerFilter\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@region\\\",\\\"@user\\\",\\\"@iteration\\\",\\\"@doesSupportAgentsFilter\\\",\\\"@updateRegion\\\",\\\"@updateAgent\\\",\\\"@updateUser\\\",\\\"@updateIteration\\\"],[[30,2],[30,11,[\\\"iterationsExecuted\\\"]],[30,2,[\\\"concurrentClients\\\"]],[30,11,[\\\"executedIterationsPerClient\\\"]],[30,2,[\\\"browsers\\\"]],[30,2,[\\\"script\\\",\\\"metadata\\\",\\\"binary\\\"]],[30,2,[\\\"script\\\",\\\"scriptType\\\"]],[30,12],true,true,[30,13],[30,14],[30,0,[\\\"region\\\"]],[30,0,[\\\"user\\\"]],[30,0,[\\\"iteration\\\"]],true,[30,0,[\\\"updateRegion\\\"]],[30,0,[\\\"updateAgent\\\"]],[30,0,[\\\"updateUser\\\"]],[30,0,[\\\"updateIteration\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"m-r-20 m-t-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,13],[[24,0,\\\"m-r-5\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"systemOnlyChanged\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"systemOnly\\\"]]]],null],[1,\\\" System Logging Only\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,14],null,[[\\\"@id\\\",\\\"@readonly\\\",\\\"@code\\\",\\\"@wrap\\\",\\\"@resizeAble\\\",\\\"@mode\\\",\\\"@height\\\"],[[30,0,[\\\"loggingPanelId\\\"]],true,[30,0,[\\\"consoleText\\\"]],[30,1,[\\\"console\\\",\\\"wrap\\\"]],true,\\\"ace/mode/sh\\\",\\\"500\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showConfigureConsoleModal\\\"]],[[[1,\\\"  \\\"],[8,[39,15],null,[[\\\"@config\\\",\\\"@configChanged\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"configConsole\\\"]],[30,0,[\\\"consoleConfigChangedAction\\\"]],[30,0,[\\\"configureConsoleModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@config\\\",\\\"@model\\\",\\\"@parentConsoleMode\\\",\\\"@parentShowFilterPanel\\\",\\\"@parentShowConfigureConsoleModal\\\",\\\"@isComparison\\\",\\\"@title\\\",\\\"@logInfo\\\",\\\"level\\\",\\\"logGroup\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"logging-panel-stats\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"or\\\",\\\"ui/p-select\\\",\\\"not-eq\\\",\\\"filter-fields\\\",\\\"label\\\",\\\"input\\\",\\\"ui/ace-editor\\\",\\\"configure-console\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/logging-panel-details.hbs\",\n    \"isStrictMode\": false\n  });\n  const LoadingText = 'Loading...';\n  const LogLimit = 1000;\n  const LogSizeLimit = 5 * 1024 * 1024;\n  function printLog(log) {\n    return _lib.default.displayTimestamp(log.loggedAt) + ' ' + log.level.toUpperCase() + ' ' + log.msg + '\\n';\n  }\n  function toLogLevel(level) {\n    switch (level) {\n      case \"Fatal\":\n        return 3;\n      case \"Error\":\n        return 2;\n      case \"Info\":\n        return 1;\n      default:\n        return 0;\n    }\n  }\n  let LoggingPanelDetails = _exports.default = (_dec = (0, _object.computed)('args.model.{id,uuid}', 'commonParams'), _dec2 = (0, _object.computed)('args.model.logGroups'), _dec3 = (0, _object.computed)('level', 'systemOnly', 'region', 'agent', 'logGroup', 'user', 'iteration', 'configConsole', 'args.byRegionId'), _dec4 = (0, _object.computed)('filter', 'zoomInfo.{isAll,startTimestamp,endTimestamp}', 'args.model.id', 'consoleMode'), _class = class LoggingPanelDetails extends _component2.default {\n    get isViewer() {\n      return this.currentUser?.isViewer;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _defineProperty(this, \"pendingLogs\", []);\n      _initializerDefineProperty(this, \"showFilterPanel\", _descriptor3, this);\n      _initializerDefineProperty(this, \"consoleMode\", _descriptor4, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"levels\", ['Debug', 'Info', 'Error']);\n      _defineProperty(this, \"loggingPanelId\", 'loggingConsole_' + (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"level\", _descriptor5, this);\n      _initializerDefineProperty(this, \"systemOnly\", _descriptor6, this);\n      _initializerDefineProperty(this, \"region\", _descriptor7, this);\n      _initializerDefineProperty(this, \"logGroup\", _descriptor8, this);\n      _initializerDefineProperty(this, \"agent\", _descriptor9, this);\n      _initializerDefineProperty(this, \"user\", _descriptor0, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor1, this);\n      _initializerDefineProperty(this, \"currentZoomInfo\", _descriptor10, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor11, this);\n      _initializerDefineProperty(this, \"logCount\", _descriptor12, this);\n      _initializerDefineProperty(this, \"hasErrors\", _descriptor13, this);\n      _initializerDefineProperty(this, \"logSizeCount\", _descriptor14, this);\n      _initializerDefineProperty(this, \"logEntries\", _descriptor15, this);\n      _initializerDefineProperty(this, \"loggedLimitMsg\", _descriptor16, this);\n      _initializerDefineProperty(this, \"consoleText\", _descriptor17, this);\n      _initializerDefineProperty(this, \"isInitialized\", _descriptor18, this);\n      _initializerDefineProperty(this, \"showConfigureConsoleModal\", _descriptor19, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor20, this);\n      _defineProperty(this, \"_applyLogsInterval\", null);\n      this.resetFilters();\n      this.EventBus.subscribe('log.update', this, 'onLogUpdate');\n      this._applyLogsInterval = setInterval(() => {\n        this.applyLogUpdates();\n      }, 1000);\n      (0, _runloop.next)(this, () => {\n        if (this.isDestroyed || this.isDestroying) {\n          return;\n        }\n        this._onConfigChange();\n        if (!this.args.isComparison && typeof this.args.updateDownloadLogsUrl === 'function') {\n          this.downloadLogsUrl;\n        }\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('log.update', this, 'onLogUpdate');\n      clearInterval(this._applyLogsInterval);\n      this.pendingLogs = [];\n    }\n    get downloadLogsUrl() {\n      const params = _.clone(this.commonParams);\n      if (this.args.model?.uuid) {\n        params.logs = true;\n        params.download = true;\n      }\n      let url = _.isString(this.args.model?.uuid) ? '/public/' + this.args.model?.uuid : '/executions/' + this.args.model?.id + '/logs.txt';\n      const fullUrl = _lib.default.toUrl(url, params);\n      if (!this.args.isComparison && typeof this.args.updateDownloadLogsUrl === 'function') {\n        this.args.updateDownloadLogsUrl(fullUrl);\n      }\n      return fullUrl;\n    }\n    get logGroups() {\n      let answer = _.map(this.args.model?.logGroups, logGroup => {\n        return {\n          id: logGroup.id,\n          name: logGroup.name\n        };\n      });\n      answer = _.sortBy(answer, answer => {\n        return answer.name.toLowerCase();\n      });\n      answer.unshift({\n        id: 'ALL',\n        name: 'ALL'\n      });\n      return answer;\n    }\n    get configConsole() {\n      let congConsole = this.args.isBaseline ? this.args.config?.baselineConsole : this.args.config?.console;\n      if (!congConsole) {\n        congConsole = _dashboards.default.getDefaultDashboard().config.console;\n      }\n      return congConsole;\n    }\n    get filter() {\n      const regionInfo = this.args.byRegionId?.get(this.region);\n      return {\n        level: this.level,\n        systemOnly: this.systemOnly,\n        region: regionInfo?.execRegionIds?.join(','),\n        agent: this.agent,\n        logGroup: this.logGroup?.id,\n        user: this.user,\n        iteration: this.iteration\n      };\n    }\n    get commonParams() {\n      const filter = this.filter;\n      const execId = this.args.model?.id;\n      const answer = {};\n      if (filter.level) {\n        answer.level = filter.level;\n      }\n      if (filter.systemOnly) {\n        answer.systemOnly = filter.systemOnly;\n      }\n      if (filter.agent && filter.agent !== 'ALL') {\n        answer.agents = filter.agent;\n      }\n      if (execId >= _environment.config.minExecutionIdLoggingRegionFilterEnabled && filter.region && filter.region !== 'ALL') {\n        answer.regions = filter.region;\n      }\n      if (filter.logGroup && filter.logGroup !== 'ALL') {\n        answer.groups = filter.logGroup;\n      }\n      if (!_.isUndefined(filter.user) && filter.user !== 'ALL') {\n        answer.client = filter.user;\n      }\n      if (!_.isUndefined(filter.iteration) && filter.iteration !== 'ALL') {\n        answer.iteration = filter.iteration;\n      }\n      _.merge(answer, _lib.default.getZoomParams(this.zoomInfo));\n      answer.asc = this.consoleMode === 'chronological';\n      return answer;\n    }\n    updateConfigFilters(config, initLevel) {\n      if (config) {\n        this.level = initLevel || config.level || 'Info';\n        this.systemOnly = config.systemOnly || false;\n      }\n    }\n    onZoomInfoChanged() {\n      if (this.isLoaded && this.currentZoomInfo?.isAll !== this.zoomInfo?.isAll && !_.isEqual(this.currentZoomInfo, this.zoomInfo)) {\n        this.currentZoomInfo = _.clone(this.zoomInfo);\n        (0, _runloop.once)(this, 'loadLogs');\n      }\n    }\n    onConfigChange() {\n      this._onConfigChange();\n    }\n    _onConfigChange() {\n      if (!this.args.config) {\n        return;\n      }\n      const prevLevel = this.level;\n      const prevSystemOnly = this.systemOnly;\n      let initLevel;\n      if (!this.isInitialized) {\n        initLevel = this.args.initLevel;\n        this.isInitialized = true;\n      }\n      this.updateConfigFilters(this.configConsole, initLevel);\n      if (prevLevel !== this.level || prevSystemOnly !== this.systemOnly) {\n        this.loadLogs();\n        this.args.logLevelChanged?.(this.level);\n      }\n    }\n    onLogInfoChange() {\n      (0, _runloop.once)(this, 'sendLogInfoChange');\n    }\n    onExecutionIdChange() {\n      this.pendingLogs = [];\n      this.resetFilters();\n      this.loadLogs();\n    }\n    onParentConsoleModeChanged() {\n      if (!this.args.isComparison) {\n        if (this.args.parentConsoleMode !== this.consoleMode) {\n          this.updateConsoleModeChange(this.args.parentConsoleMode);\n        }\n      }\n    }\n    onParentShowFilterPanelChanged() {\n      if (!this.args.isComparison) {\n        if (this.args.parentShowFilterPanel !== this.showFilterPanel) {\n          this.showFilterPanel = this.args.parentShowFilterPanel;\n        }\n      }\n    }\n    onParentShowConfigureConsoleModalChanged() {\n      if (!this.args.isComparison) {\n        if (this.args.parentShowConfigureConsoleModal !== this.showConfigureConsoleModal) {\n          this.showConfigureConsoleModal = this.args.parentShowConfigureConsoleModal;\n        }\n      }\n    }\n    loadLogs() {\n      this.consoleText = LoadingText;\n      this.isLoaded = false;\n      this.hasErrors = false;\n      this.logCount = 0;\n      this.logSizeCount = 0;\n      this.logEntries = [];\n      this.loggedLimitMsg = false;\n      const params = _.clone(this.commonParams);\n      params.limit = LogLimit;\n      params.sizeLimit = LogSizeLimit;\n      if (this.args.model?.uuid) {\n        params.logs = true;\n      }\n      if (this.args.isBaseline) {\n        params.comparison = true;\n      }\n      const getLogs = _.isString(this.args.model?.uuid) ? _server.default.getTokenContent(this.args.model?.uuid, params) : _server.default.getLoadTestExecutionLogs(this.args.model?.id, params);\n      getLogs.then(results => {\n        if (!this.isDestroyed) {\n          if (results && results.logs) {\n            this.updateLogs(results.logs, true);\n          } else {\n            this.updateLogs([], true);\n          }\n          this.isLoaded = true;\n        }\n      }, () => {\n        this.isLoaded = true;\n      });\n    }\n    onLogUpdate(log) {\n      this.pendingLogs.push(log);\n    }\n    applyLogUpdates() {\n      let logs = this.pendingLogs;\n      if (logs && logs.length > 0 && !this.isDestroyed) {\n        this.pendingLogs = [];\n        this.updateLogs(logs);\n      }\n    }\n    updateLogs(logs, prepend) {\n      if (this.isDestroyed) {\n        return;\n      }\n      const asc = this.consoleMode === 'chronological';\n      const loggedLimitMsg = this.loggedLimitMsg;\n      let count = this.logCount;\n      let hasErrors = this.hasErrors;\n      let sizeCount = this.logSizeCount;\n      if (_.isUndefined(prepend) && !asc) {\n        logs.reverse();\n      }\n      prepend = prepend || false;\n      if (!asc) {\n        prepend = !prepend;\n      }\n      let newText = '';\n      let currentText = this.consoleText;\n      if (currentText === LoadingText) {\n        currentText = '';\n      }\n      if (asc && (count >= LogLimit || sizeCount >= LogSizeLimit) && loggedLimitMsg) {\n        return;\n      }\n      _.forEach(logs, log => {\n        let willLog = (!asc || count < LogLimit && sizeCount < LogSizeLimit) && this.shouldLog(log);\n        if (!asc && willLog && (count >= LogLimit || sizeCount >= LogSizeLimit)) {\n          let toRemove = this.logEntries.shift();\n          let textToRemove = printLog(toRemove);\n          let index = currentText.lastIndexOf(textToRemove);\n          let newTextIndex = newText.lastIndexOf(textToRemove);\n          if (index !== -1) {\n            currentText = currentText.substring(0, index) + (index + textToRemove.length < currentText.length ? currentText.substring(index + textToRemove.length) : \"\");\n            count--;\n            sizeCount -= textToRemove.length;\n          } else if (newTextIndex !== -1) {\n            newText = newText.substring(0, newTextIndex) + (newTextIndex + textToRemove.length < newText.length ? newText.substring(newTextIndex + textToRemove.length) : \"\");\n            count--;\n            sizeCount -= textToRemove.length;\n          }\n        }\n        if (willLog) {\n          let text = printLog(log);\n          if (currentText.indexOf(text) === -1) {\n            this.logEntries.push(log);\n            newText += text;\n            count++;\n            sizeCount += text.length;\n          }\n        }\n        if ((log.level === \"Error\" || log.level === \"Fatal\") && log.isSystem) {\n          hasErrors = true;\n        }\n      });\n      let trailingText = \"\";\n      if ((count >= LogLimit || sizeCount >= LogSizeLimit) && !loggedLimitMsg) {\n        this.loggedLimitMsg = true;\n        trailingText = \"[Log contains additional rows. Download to  view the entire log.]\";\n      }\n      this.logCount = count;\n      this.logSizeCount = sizeCount;\n      this.hasErrors = hasErrors;\n      this.consoleText = prepend ? newText + currentText + trailingText : currentText + newText + trailingText;\n    }\n    shouldLog(log) {\n      const filter = this.filter;\n      const level = toLogLevel(filter.level || 'Info');\n      const systemOnly = filter.systemOnly || false;\n      const executionId = this.args.model?.id;\n      if (executionId && log.parentId && executionId !== log.parentId) {\n        return false;\n      }\n      if (toLogLevel(log.level) < level) {\n        return false;\n      }\n      if (systemOnly && !log.isSystem) {\n        return false;\n      }\n      if (filter.region && filter.region !== 'ALL') {\n        const execRegionIds = filter.region.split(',');\n        if (log.executionRegionId && !execRegionIds.includes('' + log.executionRegionId)) {\n          return false;\n        }\n      }\n      if (!_.isUndefined(filter.agent) && filter.agent !== 'ALL' && (_.isUndefined(log.agentId) || Number(filter.agent) !== log.agentId)) {\n        return false;\n      }\n      if (!_.isUndefined(filter.logGroup) && filter.logGroup !== 'ALL' && (_.isUndefined(log.logGroupId) || Number(filter.logGroup) !== log.logGroupId)) {\n        return false;\n      }\n      if (!_.isUndefined(filter.user) && filter.user !== 'ALL' && (_.isUndefined(log.concurrentClient) || Number(filter.user) !== log.concurrentClient)) {\n        return false;\n      }\n      if (!_.isUndefined(filter.iteration) && filter.iteration !== 'ALL' && (_.isUndefined(log.iteration) || Number(filter.iteration) !== log.iteration)) {\n        return false;\n      }\n      return true;\n    }\n    sendLogInfoChange() {\n      if (this.args.logInfoChanged) {\n        this.args.logInfoChanged({\n          isLoaded: this.isLoaded,\n          logCount: this.logCount,\n          hasErrors: this.hasErrors\n        });\n      }\n    }\n    toggleFilterPanel() {\n      this.showFilterPanel = !this.showFilterPanel;\n    }\n    showConfigureConsoleModalAction() {\n      this.showConfigureConsoleModal = true;\n    }\n    configureConsoleModalClosed() {\n      this.showConfigureConsoleModal = false;\n      if (typeof this.args.showConfigureConsoleModalParentCloseAction === 'function') {\n        this.args.showConfigureConsoleModalParentCloseAction();\n      }\n    }\n    consoleConfigChangedAction(newConfig) {\n      this.updateConfigFilters(newConfig);\n      const existingConfig = this.configConsole;\n      if (!_.isEqual(newConfig, existingConfig)) {\n        this.args.consoleConfigChanged?.(newConfig);\n        if (_.isUndefined(newConfig) || newConfig.level !== existingConfig.level || newConfig.systemOnly !== existingConfig.systemOnly) {\n          this.loadLogs();\n        }\n      }\n    }\n    consoleModeChanged(mode) {\n      this.updateConsoleModeChange(mode);\n    }\n    systemOnlyChanged(e) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.systemOnly = e.target.checked;\n      this.loadLogs();\n    }\n    updateLevel(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.level = value;\n      this.loadLogs();\n      this.args.logLevelChanged?.(value);\n    }\n    updateRegion(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.region = value;\n      if (value && value !== 'ALL') {\n        this.level = 'Debug';\n      }\n      this.loadLogs();\n    }\n    updateAgent(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.agent = value;\n      if (value && value !== 'ALL') {\n        this.level = 'Debug';\n      }\n      this.loadLogs();\n    }\n    updateLogGroup(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.logGroup = value;\n      if (value && value.id !== 'ALL') {\n        this.level = 'Debug';\n      }\n      this.loadLogs();\n    }\n    updateUser(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.user = value;\n      if (_.isNumber(value)) {\n        this.level = 'Debug';\n      }\n      if (this.region !== 'ALL') {\n        this.region = 'ALL';\n      }\n      this.loadLogs();\n    }\n    updateIteration(value) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.iteration = value;\n      if (_.isNumber(value)) {\n        this.level = 'Debug';\n      }\n      this.loadLogs();\n    }\n    updateConsoleModeChange(mode) {\n      if (!this.isLoaded) {\n        return;\n      }\n      this.consoleMode = mode;\n      this.loadLogs();\n    }\n    resetFilters() {\n      this.region = 'ALL';\n      this.logGroup = this.logGroups?.[0];\n      this.agent = 'ALL';\n      this.user = 'ALL';\n      this.iteration = 'ALL';\n      this.currentZoomInfo = _.clone(this.zoomInfo);\n      this.isLoaded = false;\n      this.logCount = 0;\n      this.hasErrors = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showFilterPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"consoleMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'chronological';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"level\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"systemOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"logGroup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"agent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"user\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"currentZoomInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"logCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"hasErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"logSizeCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"logEntries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"loggedLimitMsg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"consoleText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return LoadingText;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"isInitialized\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"showConfigureConsoleModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"downloadLogsUrl\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadLogsUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logGroups\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"logGroups\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filter\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"filter\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commonParams\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"commonParams\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onZoomInfoChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onZoomInfoChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onConfigChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onConfigChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLogInfoChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLogInfoChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onExecutionIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionIdChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParentConsoleModeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParentConsoleModeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParentShowFilterPanelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParentShowFilterPanelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onParentShowConfigureConsoleModalChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onParentShowConfigureConsoleModalChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleFilterPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleFilterPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showConfigureConsoleModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showConfigureConsoleModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configureConsoleModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configureConsoleModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"consoleConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"consoleModeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleModeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemOnlyChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemOnlyChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLevel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLevel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLogGroup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLogGroup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoggingPanelDetails);\n});","define(\"@testable/shared-ui/components/logging-panel-stats\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <strong class=\"{{if @logInfo.hasErrors ' red'}}\">\n    {{@title}}\n    {{#if @showStats}}\n      {{if @logInfo.hasErrors ' (Errors Occurred)'}}\n      ({{if @logInfo.isLoaded (or @logInfo.logCount 0) '...'}}{{if (gte @logInfo.logCount 1000)\n                                                                   '+'}})\n    {{/if}}\n  </strong>\n  \n  {{yield}}\n  \n  {{#if @showStats}}\n    <BsButtonGroup class=\"m-l-10\" @value={{@consoleMode}} @type=\"radio\" @onChange={{@consoleModeChanged}} as |bg|>\n      <bg.button @type=\"success\" @value=\"chronological\" @size=\"xs\" class=\"width-100\">\n        Chronological</bg.button>\n      <bg.button @type=\"success\" @value=\"tail\" @size=\"xs\" class=\"width-100\">Tail</bg.button>\n    </BsButtonGroup>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"strong\\\"],[15,0,[29,[[52,[30,1,[\\\"hasErrors\\\"]],\\\" red\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"    \\\"],[1,[52,[30,1,[\\\"hasErrors\\\"]],\\\" (Errors Occurred)\\\"]],[1,\\\"\\\\n    (\\\"],[1,[52,[30,1,[\\\"isLoaded\\\"]],[28,[37,2],[[30,1,[\\\"logCount\\\"]],0],null],\\\"...\\\"]],[1,[52,[28,[37,3],[[30,1,[\\\"logCount\\\"]],1000],null],\\\"+\\\"]],[1,\\\")\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[18,7,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3],[[[1,\\\"  \\\"],[8,[39,5],[[24,0,\\\"m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,4],\\\"radio\\\",[30,5]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,6,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"chronological\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      Chronological\\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,6,[\\\"button\\\"]],[[24,0,\\\"width-100\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tail\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tail\\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@logInfo\\\",\\\"@title\\\",\\\"@showStats\\\",\\\"@consoleMode\\\",\\\"@consoleModeChanged\\\",\\\"bg\\\",\\\"&default\\\"],[\\\"strong\\\",\\\"if\\\",\\\"or\\\",\\\"gte\\\",\\\"yield\\\",\\\"bs-button-group\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/logging-panel-stats.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"logging-panel-stats\"));\n});","define(\"@testable/shared-ui/components/logging-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/environment\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _runloop, _environment, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- begin panel --}}\n  <div class=\"panel no-print\">\n    <div class=\"panel-heading\">\n      <div class=\"panel-heading-btn\">\n        {{#unless @comparisonId}}\n          <a {{on \"click\" this.toggleFilterPanel}} class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                                            title=\"Show/Hide Filters\" role=\"button\"><Ui::Icon @icon=\"fa fa-filter\" /></a>\n          {{#unless (or @model.minimalHeader this.isViewer)}}\n            <a {{on \"click\" this.showConfigureConsoleModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary \"\n                                                      data-bs-toggle=\"tooltip\" title=\"Configure Logging\" role=\"button\"><Ui::Icon @icon=\"fa fa-cog\" /></a>\n          {{/unless}}\n          <a target=\"_blank\" href=\"{{this.downloadLogsUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\"\n             data-bs-toggle=\"tooltip\" title=\"Download Log\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{/unless}}\n        <a href=\"javascript:\" class=\"btn btn-icon btn-sm btn-circle text-primary\" data-click=\"panel-expand\">\n          <Ui::Icon @icon=\"fa fa-expand\" /></a>\n  \n      </div>\n      <h4 class=\"panel-title\">\n        <a href=\"javascript:\" class=\"btn btn-sm  btn-icon btn-circle text-primary\" data-click=\"panel-collapse\">\n          <Ui::Icon @icon=\"fa fa-minus\" /></a>\n  \n      {{#if @comparisonId}}\n        <strong class=\"{{if @logInfo.hasErrors ' red'}}\">Logging</strong>\n      {{else}}\n        {{#if @fromResultsTab}}\n          <strong class=\"{{if @logInfo.hasErrors ' red'}}\">Logging\n            {{if @logInfo.hasErrors ' (Errors Occurred)'}}\n            ({{if @logInfo.isLoaded (or @logInfo.logCount 0) '...'}}{{if (gte @logInfo.logCount 1000)\n                                                                         '+'}})\n          </strong>\n          <Ui::InfoIcon\n                  @isHtml={{true}}\n                  @content='All logging related to execution.  By default only logging at INFO or ERROR will appear here\n                  (i.e. not DEBUG).  Click the configure icon\n                  <i class=\"fa fa-cog text-primary\"></i> to change the logging level or the filter icon\n                  <i class=\"fa fa-filter text-primary\"></i> to apply temporary filters.'\n                  @placement=\"bottom\" />\n  \n        {{/if}}\n        {{#if @isTabComparison}}\n          <strong class=\"{{if @logInfo.hasErrors ' red'}}\">{{@title}}</strong>\n        {{/if}}\n        <BsButtonGroup class=\"m-l-10\" @value={{this.consoleMode}} @type=\"radio\" @onChange={{this.consoleModeChanged}} as |bg|>\n          <bg.button @type=\"success width-100\" @value=\"chronological\" @size=\"xs\">\n            Chronological</bg.button>\n          <bg.button @type=\"success width-100\" @value=\"tail\" @size=\"xs\">Tail</bg.button>\n        </BsButtonGroup>\n      {{/if}}\n      </h4>\n  \n    </div>\n    <LoggingPanelDetails\n            @title=\"Current Test\"\n            @model={{@model}}\n            @summary={{@summary}}\n            @logInfo={{@logInfo}}\n            @byRegionId={{@byRegionId}}\n            @isLoad={{@isLoad}}\n            @isMultiUser={{@isMultiUser}}\n            @config={{@config}}\n            @initLevel={{@initLevel}}\n            @fromResultsTab={{@fromResultsTab}}\n            @parentConsoleMode={{this.consoleMode}}\n            @parentShowFilterPanel={{this.showFilterPanel}}\n            @logLevelChanged={{@logLevelChanged}}\n            @logInfoChanged={{@logInfoChanged}}\n            @consoleConfigChanged={{@consoleConfigChanged}}\n            @parentShowConfigureConsoleModal={{this.showConfigureConsoleModal}}\n            @showConfigureConsoleModalParentCloseAction={{mut this.showConfigureConsoleModal false}}\n            @updateDownloadLogsUrl={{this.updateDownloadLogsUrl}}\n            @isComparison={{if @comparisonId true}}\n    />\n  \n    {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n      <LoggingPanelDetails\n              @title=\"Baseline Test\"\n              @model={{@baselineExecution}}\n              @summary={{@summary}}\n              @logInfo={{@baselineLogInfo}}\n              @byRegionId={{@byRegionBaselineId}}\n              @isLoad={{@isLoad}}\n              @isMultiUser={{@isMultiUser}}\n              @config={{@config}}\n              @initLevel={{@initLevel}}\n              @logLevelChanged={{@logLevelChanged}}\n              @logInfoChanged={{@baselineLogInfoChanged}}\n              @consoleConfigChanged={{@consoleConfigChangedBaseline}}\n              @isComparison={{true}}\n              @isBaseline={{true}}\n      />\n    {{/if}}\n  \n  </div>\n  {{!-- end panel --}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel no-print\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Show/Hide Filters\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"toggleFilterPanel\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,5],[[30,2,[\\\"minimalHeader\\\"]],[30,0,[\\\"isViewer\\\"]]],null]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary \\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Configure Logging\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"showConfigureConsoleModalAction\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"downloadLogsUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download Log\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,0,\\\"btn btn-icon btn-sm btn-circle text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-expand\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,0,\\\"btn btn-sm  btn-icon btn-circle text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-collapse\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,\\\"strong\\\"],[15,0,[29,[[52,[30,3,[\\\"hasErrors\\\"]],\\\" red\\\"]]]],[12],[1,\\\"Logging\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,4],[[[1,\\\"        \\\"],[10,\\\"strong\\\"],[15,0,[29,[[52,[30,3,[\\\"hasErrors\\\"]],\\\" red\\\"]]]],[12],[1,\\\"Logging\\\\n          \\\"],[1,[52,[30,3,[\\\"hasErrors\\\"]],\\\" (Errors Occurred)\\\"]],[1,\\\"\\\\n          (\\\"],[1,[52,[30,3,[\\\"isLoaded\\\"]],[28,[37,5],[[30,3,[\\\"logCount\\\"]],0],null],\\\"...\\\"]],[1,[52,[28,[37,9],[[30,3,[\\\"logCount\\\"]],1000],null],\\\"+\\\"]],[1,\\\")\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"All logging related to execution.  By default only logging at INFO or ERROR will appear here\\\\n                (i.e. not DEBUG).  Click the configure icon\\\\n                <i class=\\\\\\\"fa fa-cog text-primary\\\\\\\"></i> to change the logging level or the filter icon\\\\n                <i class=\\\\\\\"fa fa-filter text-primary\\\\\\\"></i> to apply temporary filters.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[41,[30,5],[[[1,\\\"        \\\"],[10,\\\"strong\\\"],[15,0,[29,[[52,[30,3,[\\\"hasErrors\\\"]],\\\" red\\\"]]]],[12],[1,[30,6]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,11],[[24,0,\\\"m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"consoleMode\\\"]],\\\"radio\\\",[30,0,[\\\"consoleModeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"chronological\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          Chronological\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"tail\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tail\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,12],null,[[\\\"@title\\\",\\\"@model\\\",\\\"@summary\\\",\\\"@logInfo\\\",\\\"@byRegionId\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@config\\\",\\\"@initLevel\\\",\\\"@fromResultsTab\\\",\\\"@parentConsoleMode\\\",\\\"@parentShowFilterPanel\\\",\\\"@logLevelChanged\\\",\\\"@logInfoChanged\\\",\\\"@consoleConfigChanged\\\",\\\"@parentShowConfigureConsoleModal\\\",\\\"@showConfigureConsoleModalParentCloseAction\\\",\\\"@updateDownloadLogsUrl\\\",\\\"@isComparison\\\"],[\\\"Current Test\\\",[30,2],[30,8],[30,3],[30,9],[30,10],[30,11],[30,12],[30,13],[30,4],[30,0,[\\\"consoleMode\\\"]],[30,0,[\\\"showFilterPanel\\\"]],[30,14],[30,15],[30,16],[30,0,[\\\"showConfigureConsoleModal\\\"]],[28,[37,13],[[30,0,[\\\"showConfigureConsoleModal\\\"]],false],null],[30,0,[\\\"updateDownloadLogsUrl\\\"]],[52,[30,1],true]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,14],[[30,17],[28,[37,5],[[28,[37,15],[[30,18],\\\"ALL\\\"],null],[30,19]],null]],null],[[[1,\\\"    \\\"],[8,[39,12],null,[[\\\"@title\\\",\\\"@model\\\",\\\"@summary\\\",\\\"@logInfo\\\",\\\"@byRegionId\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@config\\\",\\\"@initLevel\\\",\\\"@logLevelChanged\\\",\\\"@logInfoChanged\\\",\\\"@consoleConfigChanged\\\",\\\"@isComparison\\\",\\\"@isBaseline\\\"],[\\\"Baseline Test\\\",[30,17],[30,8],[30,20],[30,21],[30,10],[30,11],[30,12],[30,13],[30,14],[30,22],[30,23],true,true]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@comparisonId\\\",\\\"@model\\\",\\\"@logInfo\\\",\\\"@fromResultsTab\\\",\\\"@isTabComparison\\\",\\\"@title\\\",\\\"bg\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@config\\\",\\\"@initLevel\\\",\\\"@logLevelChanged\\\",\\\"@logInfoChanged\\\",\\\"@consoleConfigChanged\\\",\\\"@baselineExecution\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@baselineLogInfo\\\",\\\"@byRegionBaselineId\\\",\\\"@baselineLogInfoChanged\\\",\\\"@consoleConfigChangedBaseline\\\"],[\\\"div\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"or\\\",\\\"h4\\\",\\\"if\\\",\\\"strong\\\",\\\"gte\\\",\\\"ui/info-icon\\\",\\\"bs-button-group\\\",\\\"logging-panel-details\\\",\\\"mut\\\",\\\"and\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/logging-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoggingPanelComponent = _exports.default = (_class = class LoggingPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"consoleMode\", _descriptor, this);\n      _initializerDefineProperty(this, \"showFilterPanel\", _descriptor2, this);\n      _initializerDefineProperty(this, \"downloadLogsUrl\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showConfigureConsoleModal\", _descriptor4, this);\n    }\n    get isViewer() {\n      return _environment.config.currentUser && _environment.config.currentUser.isViewer;\n    }\n    consoleModeChanged(mode) {\n      this.consoleMode = mode;\n    }\n    toggleFilterPanel() {\n      this.showFilterPanel = !this.showFilterPanel;\n    }\n    updateDownloadLogsUrl(url) {\n      (0, _runloop.next)(this, () => {\n        if (!this.isDestroying && !this.isDestroyed) this.downloadLogsUrl = url;\n      });\n    }\n    showConfigureConsoleModalAction() {\n      this.showConfigureConsoleModal = true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"consoleMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'chronological';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showFilterPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"downloadLogsUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showConfigureConsoleModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"consoleModeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"consoleModeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleFilterPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleFilterPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDownloadLogsUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDownloadLogsUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showConfigureConsoleModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showConfigureConsoleModalAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoggingPanelComponent);\n});","define(\"@testable/shared-ui/components/login-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _login, _environment, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"login login-v2\" {{did-insert this.didInsert}}>\n    <div class=\"login-content\">\n      <form {{on \"submit\" this.login}} data-parsley-trigger=\"focusout\" id=\"loginForm\" class=\"margin-bottom-0\">\n        {{#if (is-awslink-pending '')}}\n          <div class=\"form-group\">\n            Please login or register a new account to finalize the link to your AWS account.\n          </div>\n        {{/if}}\n        {{#if (is-number @model.id)}}\n          <p class=\"lead text-center m-t-20\">Login to {{this.orgName}}</p>\n          <p class=\"text-center m-t-20\">This organization requires you to login with your\n            {{html-safe (truncate-string @model.provider 100 true null 'truncate-inline') }} account</p>\n          <div class=\"login-buttons\">\n            <a href={{this.samlLoginUrl}} class=\"btn btn-success btn-block btn-lg\"><Ui::Icon @icon=\"fa fa-user\" /> Login\n              {{#unless this.envConfig.isOnPrem}}\n                with {{html-safe (truncate-string @model.provider 41 true null 'truncate-inline') }}\n              {{/unless}}\n            </a>\n          </div>\n        {{else}}\n          <div class=\"form-group m-b-20\">\n            <input type=\"email\" class=\"form-control input-lg\" placeholder=\"Email Address\" id=\"email\"\n              data-parsley-type=\"email\" data-parsley-required=\"true\"\n              data-parsley-required-message=\"Email address is required.\" />\n          </div>\n          <div class=\"form-group m-b-20\">\n            <input class=\"form-control input-lg\" type=\"password\" id=\"password\" placeholder=\"Password\"\n              data-parsley-required=\"true\" data-parsley-minlength=\"6\" data-parsley-maxlength=\"100\"\n              data-parsley-required-message=\"Password is required.\"\n              data-parsley-minlength-message=\"Password must be at least 6 characters.\"\n              data-parsley-maxlength-message=\"Password must no longer than 100 characters.\" />\n            <a {{on 'click' this.showForgotPasswordModal}} class=\"m-t-5 below-input\" role=\"button\">Forgot Password?</a>\n          </div>\n          <div class=\"login-buttons\">\n            <button type=\"submit\" disabled={{this.isSubmitted}} class=\"btn btn-success btn-block btn-lg\">\n              <Ui::Icon @icon=\"fa fa-key\" /> {{if this.isSubmitted 'Signing In...' 'Sign me in'}}</button>\n          </div>\n          {{#if this.isRegistrationAllowed}}\n            <div class=\"m-t-15\">\n              Not a member yet? Click <LinkTo @route='register' @query={{hash redirect=undefined}}>here</LinkTo> to register.\n            </div>\n          {{/if}}\n          {{#if this.isGoogleAuthEnabled}}\n            <div class=\"login-or-divider\" aria-hidden=\"true\"><span>or</span></div>\n            <div class=\"login-buttons\">\n              <a href={{this.googleLoginUrl}} class=\"btn btn-default btn-block btn-lg login-google-btn\">\n                <Ui::Icon @icon=\"fab fa-google\" /> Login with Google\n              </a>\n            </div>\n          {{/if}}\n        {{/if}}\n      </form>\n    </div>\n  </div>\n  \n  {{#if this.isShowForgotPasswordModal}}\n    <ForgotPasswordModal @modalClosed={{this.forgotPasswordModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"login login-v2\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"login-content\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[24,1,\\\"loginForm\\\"],[24,0,\\\"margin-bottom-0\\\"],[4,[38,3],[\\\"submit\\\",[30,0,[\\\"login\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[\\\"\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          Please login or register a new account to finalize the link to your AWS account.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,1,[\\\"id\\\"]]],null],[[[1,\\\"        \\\"],[10,2],[14,0,\\\"lead text-center m-t-20\\\"],[12],[1,\\\"Login to \\\"],[1,[30,0,[\\\"orgName\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"text-center m-t-20\\\"],[12],[1,\\\"This organization requires you to login with your\\\\n          \\\"],[1,[28,[35,8],[[28,[37,9],[[30,1,[\\\"provider\\\"]],100,true,null,\\\"truncate-inline\\\"],null]],null]],[1,\\\" account\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"login-buttons\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[15,6,[30,0,[\\\"samlLoginUrl\\\"]]],[14,0,\\\"btn btn-success btn-block btn-lg\\\"],[12],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fa fa-user\\\"]],null],[1,\\\" Login\\\\n\\\"],[41,[51,[30,0,[\\\"envConfig\\\",\\\"isOnPrem\\\"]]],[[[1,\\\"              with \\\"],[1,[28,[35,8],[[28,[37,9],[[30,1,[\\\"provider\\\"]],41,true,null,\\\"truncate-inline\\\"],null]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control input-lg\\\"],[14,\\\"placeholder\\\",\\\"Email Address\\\"],[14,1,\\\"email\\\"],[14,\\\"data-parsley-type\\\",\\\"email\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Email address is required.\\\"],[14,4,\\\"email\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control input-lg\\\"],[14,1,\\\"password\\\"],[14,\\\"placeholder\\\",\\\"Password\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-minlength\\\",\\\"6\\\"],[14,\\\"data-parsley-maxlength\\\",\\\"100\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Password is required.\\\"],[14,\\\"data-parsley-minlength-message\\\",\\\"Password must be at least 6 characters.\\\"],[14,\\\"data-parsley-maxlength-message\\\",\\\"Password must no longer than 100 characters.\\\"],[14,4,\\\"password\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[11,3],[24,0,\\\"m-t-5 below-input\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"showForgotPasswordModal\\\"]]],null],[12],[1,\\\"Forgot Password?\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"login-buttons\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSubmitted\\\"]]],[14,0,\\\"btn btn-success btn-block btn-lg\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fa fa-key\\\"]],null],[1,\\\" \\\"],[1,[52,[30,0,[\\\"isSubmitted\\\"]],\\\"Signing In...\\\",\\\"Sign me in\\\"]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isRegistrationAllowed\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-15\\\"],[12],[1,\\\"\\\\n            Not a member yet? Click \\\"],[8,[39,15],null,[[\\\"@route\\\",\\\"@query\\\"],[\\\"register\\\",[28,[37,16],null,[[\\\"redirect\\\"],[[27]]]]]],[[\\\"default\\\"],[[[[1,\\\"here\\\"]],[]]]]],[1,\\\" to register.\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isGoogleAuthEnabled\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"login-or-divider\\\"],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[10,1],[12],[1,\\\"or\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"login-buttons\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[15,6,[30,0,[\\\"googleLoginUrl\\\"]]],[14,0,\\\"btn btn-default btn-block btn-lg login-google-btn\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,11],null,[[\\\"@icon\\\"],[\\\"fab fa-google\\\"]],null],[1,\\\" Login with Google\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isShowForgotPasswordModal\\\"]],[[[1,\\\"  \\\"],[8,[39,18],null,[[\\\"@modalClosed\\\"],[[30,0,[\\\"forgotPasswordModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"form\\\",\\\"on\\\",\\\"if\\\",\\\"is-awslink-pending\\\",\\\"is-number\\\",\\\"p\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"input\\\",\\\"button\\\",\\\"link-to\\\",\\\"hash\\\",\\\"span\\\",\\\"forgot-password-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/login-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let LoginPanelComponent = _exports.default = (_class = class LoginPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isSubmitted\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isShowForgotPasswordModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isRegistrationAllowed\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isGoogleAuthEnabled\", _descriptor6, this);\n    }\n    didInsert() {\n      $('#loginForm').parsley();\n    }\n    get orgName() {\n      return _environment.config.isOnPrem ? 'Testable' : this.args.model.organization.name || window.location.hostname;\n    }\n    get googleLoginUrl() {\n      const redirect = this.args.redirect;\n      return redirect ? `/api/login/ext/google?redirect=${encodeURIComponent(redirect)}` : '/api/login/ext/google';\n    }\n    get samlLoginUrl() {\n      const redirect = this.args.redirect;\n      return redirect ? `/api/login/ext/saml?redirect=${encodeURIComponent(redirect)}` : '/api/login/ext/saml';\n    }\n    login(e) {\n      e.preventDefault();\n      if (!_login.default.validateAllowedDomain($('#email').val())) {\n        _lib.default.error('Email address with valid domain is required.');\n        return;\n      }\n      if (!$('#loginForm').parsley().validate()) {\n        return;\n      }\n      this.isSubmitted = true;\n      _login.default.login(_environment.config.currentUser).then(result => {\n        if (_environment.config.currentUser.isLoggedIn) {\n          _lib.default.trackEvent('login');\n          this.args.loggedIn();\n        }\n        if (result?.errorCode === 'UNCONFIRMED') {\n          this.router.transitionTo('confirm-email-address', $('#email').val());\n        }\n        this.isSubmitted = false;\n      }, () => {\n        this.isSubmitted = false;\n      });\n    }\n    showForgotPasswordModal() {\n      this.isShowForgotPasswordModal = true;\n    }\n    forgotPasswordModalClosed() {\n      this.isShowForgotPasswordModal = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isSubmitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isShowForgotPasswordModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isRegistrationAllowed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.isRegistrationAllowed;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isGoogleAuthEnabled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.isGoogleAuthEnabled;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"login\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"login\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showForgotPasswordModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showForgotPasswordModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"forgotPasswordModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"forgotPasswordModalClosed\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LoginPanelComponent);\n});","define(\"@testable/shared-ui/components/make-default-dashboard\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"makeDefaultDashboard\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Make Default View</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form {{on \"submit\" this.makeDefaultDashboard}}>\n                <div class=\"form-group\">\n                  <label>Make default for <Ui::InfoIcon\n                          @content=\"If specified, the default view for this test configuration has highest priority followed by test case and organization. If no default view is specified at any of those levels, the system default view is used.\" /></label>\n                  <Ui::PSelectMultiple @options={{this.options}} @selected={{this.selected}} @onChange={{fn (mut this.selected)}} as |option|>\n                    {{option.name}}\n                  </Ui::PSelectMultiple>\n                </div>\n                <div class=\"form-group\">\n                  <button type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>\n                    Update\n                  </strong></button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"makeDefaultDashboard\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Make Default View\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"makeDefaultDashboard\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Make default for \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"If specified, the default view for this test configuration has highest priority followed by test case and organization. If no default view is specified at any of those levels, the system default view is used.\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"options\\\"]],[30,0,[\\\"selected\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"selected\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n                \\\"]],[1]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                  Update\\\\n                \\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"option\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select-multiple\\\",\\\"fn\\\",\\\"mut\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/make-default-dashboard.hbs\",\n    \"isStrictMode\": false\n  });\n  const TestConfOption = {\n    id: 'testConf',\n    name: 'Test Configuration'\n  };\n  const TestCaseOption = {\n    id: 'testCase',\n    name: 'Test Case'\n  };\n  const OrgOption = {\n    id: 'acct',\n    name: 'Organization'\n  };\n  let MakeDefaultDashboardComponent = _exports.default = (_class = class MakeDefaultDashboardComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"options\", [TestConfOption, TestCaseOption, OrgOption]);\n      _initializerDefineProperty(this, \"selected\", _descriptor, this);\n    }\n    get selectedValue() {\n      let selected = [];\n      if (this.args.isTestConfDefault) selected.push(TestConfOption);\n      if (this.args.isTestCaseDefault) selected.push(TestCaseOption);\n      if (this.args.isOrgDefault) selected.push(OrgOption);\n      return selected;\n    }\n    makeDefaultDashboard(e) {\n      e.preventDefault();\n      $('#makeDefaultDashboard').modal('hide');\n      this.args.makeDefaultDashboard(_.map(this.selected, option => option.id));\n    }\n    didInsert() {\n      const _this = this;\n      $('#makeDefaultDashboard').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#makeDefaultDashboard').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.selectedValue;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"makeDefaultDashboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"makeDefaultDashboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MakeDefaultDashboardComponent);\n});","define(\"@testable/shared-ui/components/max-resources-warning\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (gte @numResources @maxResources)}}\n    <div class=\"note note-warning\">\n      <h4>Resources Count Warning</h4>\n      <p>This test produced more resources than we currently allow ({{@maxResources}}). This will not affect the overall\n        test results in any way, but the breakdown by resource will only be available for the first {{@maxResources}}\n        resources in the results.</p>\n      {{#if (eq @scriptType 'JMeter')}}\n        <p>For JMeter scenarios, the resources correspond to <strong>labels</strong>.</p>\n      {{else if (eq @scriptType 'Gatling')}}\n        <p>For Gatling scenarios, the resources correspond to <strong>request names</strong>.</p>\n      {{else if (eq @scriptType 'Locust')}}\n        <p>For Locust.io scenarios, the resources correspond to <strong>response names</strong>.</p>\n      {{else if (eq @scriptType 'Selenium')}}\n        <p>For Selenium scripts the resource name is the base URL plus the first 2 parts of the path. See <a\n                target=\"_blank\" href=\"https://docs.testable.io/selenium/wdio.html#resources\" rel=\"noreferrer noopener\">our documentation for a\n          way to override this.</a></p>\n      {{else if (eq @scriptType 'Code')}}\n        <p>For Node.js scripts the resource name is the base URL plus the first 2 parts of the path. See <a\n                target=\"_blank\" href=\"https://docs.testable.io/scripts/custom-metrics.html#custom-grouping\" rel=\"noreferrer noopener\">our\n          documentation for a way to override this.</a></p>\n      {{else if (eq @scriptType 'Har')}}\n        <p>For HAR file replay scenarios the resource name is the base URL plus the first 2 parts of the path. There is\n          not yet any way for users to override this default behavior.</p>\n      {{/if}}\n      <p>Also consider adding <strong>Result Collection Filters</strong> to filter the results by URL (e.g. 3rd party\n        calls like Google Analytics). To add a filter, go to <LinkTo\n                @route='update-test' @model={{@confId}}>Edit Configuration => Advanced Options => Result Collection Filters</LinkTo>.</p>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[30,2]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-warning\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Resources Count Warning\\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"This test produced more resources than we currently allow (\\\"],[1,[30,2]],[1,\\\"). This will not affect the overall\\\\n      test results in any way, but the breakdown by resource will only be available for the first \\\"],[1,[30,2]],[1,\\\"\\\\n      resources in the results.\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,3],\\\"JMeter\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For JMeter scenarios, the resources correspond to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"labels\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,3],\\\"Gatling\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For Gatling scenarios, the resources correspond to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"request names\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,3],\\\"Locust\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For Locust.io scenarios, the resources correspond to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"response names\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,3],\\\"Selenium\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For Selenium scripts the resource name is the base URL plus the first 2 parts of the path. See \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/selenium/wdio.html#resources\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"our documentation for a\\\\n        way to override this.\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,3],\\\"Code\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For Node.js scripts the resource name is the base URL plus the first 2 parts of the path. See \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/scripts/custom-metrics.html#custom-grouping\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"our\\\\n        documentation for a way to override this.\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,3],\\\"Har\\\"],null],[[[1,\\\"      \\\"],[10,2],[12],[1,\\\"For HAR file replay scenarios the resource name is the base URL plus the first 2 parts of the path. There is\\\\n        not yet any way for users to override this default behavior.\\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"    \\\"],[10,2],[12],[1,\\\"Also consider adding \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Result Collection Filters\\\"],[13],[1,\\\" to filter the results by URL (e.g. 3rd party\\\\n      calls like Google Analytics). To add a filter, go to \\\"],[8,[39,8],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,4]]],[[\\\"default\\\"],[[[[1,\\\"Edit Configuration => Advanced Options => Result Collection Filters\\\"]],[]]]]],[1,\\\".\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@numResources\\\",\\\"@maxResources\\\",\\\"@scriptType\\\",\\\"@confId\\\"],[\\\"if\\\",\\\"gte\\\",\\\"div\\\",\\\"h4\\\",\\\"p\\\",\\\"eq\\\",\\\"strong\\\",\\\"a\\\",\\\"link-to\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/max-resources-warning.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"max-resources-warning\"));\n});","define(\"@testable/shared-ui/components/metered-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/utilization\"], function (_exports, _observers, _service, _tracking, _runloop, _dataGrid, _formatters, _lib, _loadTest, _utilization) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/utilization\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  function findExecutionRegion(execution, agentInfo) {\n    if (agentInfo && agentInfo.executionRegionId) {\n      return _.find(execution.regions, er => {\n        return er.id === agentInfo.executionRegionId;\n      });\n    }\n  }\n  function getInstanceType(executionRegion) {\n    const instances = executionRegion?.region?.instances || [];\n    return instances.length > 0 ? instances[0].instanceType : executionRegion?.provider ? executionRegion.provider?.params?.instanceType || 'Shared' : '-';\n  }\n  function getRegionName(executionRegion) {\n    return executionRegion && executionRegion.region && executionRegion.region.description || '-';\n  }\n  function applyWarning(row, warning) {\n    if (warning) {\n      $(row).addClass('text-red');\n    } else {\n      $(row).removeClass('text-red');\n    }\n  }\n  function applyWarnings(table) {\n    if (table) {\n      table.rows().every(function () {\n        const data = this.data();\n        if (data) {\n          applyWarning(this.node(), data.warning);\n        }\n      });\n    }\n  }\n  let MeteredGrid = _exports.default = (_class = class MeteredGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"ignoreBucketSelect\", _descriptor2, this);\n      this.EventBus.subscribe('buckets.grid-update', this, 'updateDataSource');\n      (0, _observers.addObserver)(this, 'args.buckets', this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.chartConfig', this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.testRunnersFilter', this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.hasUtilizationMetrics', this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.selectedBucket', this.onSelectedBucketChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('buckets.grid-update', this, 'updateDataSource');\n      (0, _observers.removeObserver)(this, 'args.buckets', this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.chartConfig', this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.testRunnersFilter', this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.hasUtilizationMetrics', this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.selectedBucket', this.onSelectedBucketChange);\n    }\n    onConfigUpdated() {\n      (0, _runloop.debounce)(this, this.refreshTable, 250);\n    }\n    onSelectedBucketChange() {\n      const selectedBucket = this.args.selectedBucket;\n      const table = $('#' + this.args.id).DataTable();\n      this.ignoreBucketSelect = true;\n      if (selectedBucket && selectedBucket.id >= 0) {\n        table.row('#' + selectedBucket.id).select();\n      } else {\n        table.rows().deselect();\n      }\n      this.ignoreBucketSelect = false;\n    }\n    getColumns() {\n      const columns = [];\n      if (this.args.hasUtilizationMetrics) {\n        columns.push({\n          data: 'warning',\n          title: '',\n          width: '10px',\n          render: (data, type, full, meta) => {\n            if (type === 'display') {\n              return _formatters.default.icon(true, data ? 'fa fa-exclamation' : 'fa fa-check');\n            } else {\n              return data;\n            }\n          }\n        });\n      }\n      columns.push({\n        data: 'bucket',\n        title: this.args.label,\n        width: \"250px\",\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            return '<span class=\"truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"' + data + '\">' + data + '</span>';\n          } else {\n            return data;\n          }\n        }\n      });\n      const isTestRunnerLabel = this.args.label === 'Test Runner';\n      if (isTestRunnerLabel) {\n        columns.push({\n          data: 'instanceType',\n          title: 'Instance Type',\n          width: \"70px\"\n        });\n      }\n      if (isTestRunnerLabel && this.args.regionName === 'ALL') {\n        columns.push({\n          data: 'regionName',\n          title: 'Region',\n          width: \"70px\"\n        });\n      }\n      const metrics = this.args.chartConfig.metrics;\n      const threshold = this.args.utilizationWarningThreshold;\n      _.forEach(metrics, metric => {\n        const key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        const relatedKey = key + '-related';\n        const isUtilizationMetric = _lib.default.isUtilizationMetric(metric.name);\n        columns.push({\n          data: key,\n          title: metric.title || _loadTest.default.MetricDictionary[metric.name] || _lib.default.camelCaseToTitleCase(metric.name),\n          width: \"70px\",\n          render: (data, type, full, meta) => {\n            if (type === 'display') {\n              let related = full[relatedKey];\n              let color;\n              if (isUtilizationMetric && data >= threshold || !isUtilizationMetric && related && related.val >= threshold) {\n                color = 'red';\n              }\n              return _lib.default.toText(data, null, metric.units, false, related ? related.val : null, related ? related.units : null, color);\n            } else {\n              return data;\n            }\n          }\n        });\n      });\n      return columns;\n    }\n    getInitialOrder() {\n      return [[this.args.hasUtilizationMetrics ? 1 : 0, 'asc']];\n    }\n    createDataSource() {\n      const hasUtilizationMetrics = this.args.hasUtilizationMetrics;\n      const showAll = this.args.testRunnersFilter === 'all';\n      const buckets = _utilization.default.getBucketsWithMetrics(this.args.buckets, this.args.chartConfig.metrics);\n      const records = [];\n      _.forEach(buckets, bucket => {\n        const record = this.toRecord(bucket);\n        if (!hasUtilizationMetrics || showAll || record.warning) {\n          records.push(record);\n        }\n      });\n      return records;\n    }\n    updateDataSource(updates) {\n      const table = $('#' + this.args.id).DataTable();\n      const added = _utilization.default.getBucketsWithMetrics(updates.added, this.args.chartConfig.metrics);\n      const updated = _utilization.default.getBucketsWithMetrics(updates.updated, this.args.chartConfig.metrics);\n      _.forEach(updated, bucket => {\n        this.updateBucket(table, bucket);\n      });\n      if (added.length > 0) {\n        table.rows.add(_.map(updates.added, bucket => {\n          return this.toRecord(bucket);\n        }));\n      }\n      table.draw(false);\n      applyWarnings(table);\n    }\n    updateBucket(table, bucket) {\n      const record = this.toRecord(bucket);\n      const row = table.row('#' + record.id);\n      if (!_.isEmpty(row)) {\n        const data = row.data();\n        if (!_.isEqual(data, record)) {\n          row.data(record);\n        }\n      }\n    }\n    toRecord(bucket) {\n      const execution = this.args.model.execution;\n      const metrics = this.args.chartConfig.metrics;\n      const metricDefs = this.args.metricDefs;\n      const scriptType = this.args.scriptType;\n      const bucketsWithWarning = this.args.bucketsWithWarning;\n      const agentInfo = this.args.agentSearchMap.find(bucket.bucket);\n      const executionRegion = findExecutionRegion(execution, agentInfo);\n      const record = {\n        id: bucket.id,\n        bucket: _lib.default.htmlEncode(bucket.bucket),\n        warning: bucketsWithWarning.has(bucket.bucket),\n        regionName: getRegionName(executionRegion),\n        instanceType: getInstanceType(executionRegion)\n      };\n      _.forEach(metrics, metric => {\n        let key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        record[key] = bucket[key] || '';\n        record[key + '-peak'] = bucket[key] || '';\n        record[key + '-largest'] = bucket[key] || '';\n        let related = _lib.default.getRelatedMetric(metric.name);\n        let relatedMetricDef = _loadTest.default.findMetricDef(metric.namespace, related.name, metricDefs);\n        if (relatedMetricDef) {\n          let relatedKey = _lib.default.toMetricKey(metric.namespace, related.name);\n          record[relatedKey] = bucket[relatedKey] || '';\n          record[relatedKey + '-peak'] = bucket[relatedKey] || '';\n          record[relatedKey + '-largest'] = bucket[relatedKey] || '';\n          record[key + '-related'] = {\n            val: bucket[relatedKey],\n            units: _loadTest.default.getUnits(metric.namespace, relatedKey, relatedMetricDef, scriptType)\n          };\n        }\n      });\n      return record;\n    }\n    addTableOptions(options) {\n      if (options.paging) {\n        options.dom = 'BZtp';\n        options.select = {\n          style: 'single'\n        };\n        options.language = {\n          emptyTable: \"No data to display yet.\"\n        };\n        options.buttons = [{\n          extend: 'copy',\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right m-l-10 m-b-5',\n          text: '<i class=\"fa fa-copy\"></i>'\n        }, {\n          extend: 'csv',\n          filename: 'testable.resources.' + this.args.model.execution.id + '.' + this.args.regionName,\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right',\n          text: '<i class=\"fa fa-download\"></i>'\n        }];\n      }\n    }\n    initTable(table) {\n      const _this = this;\n      table.on('select', function (e, dt, type, indexes) {\n        if (!_this.ignoreBucketSelect) {\n          const rowData = table.row(indexes[0]).data();\n          if (rowData) {\n            _this.args.rowSelected(rowData);\n          }\n        }\n      }).on('deselect', function (e, dt, type, indexes) {\n        if (!_this.ignoreBucketSelect) {\n          _this.args.rowSelected(null);\n        }\n      });\n      applyWarnings(table);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"ignoreBucketSelect\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/metered-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/utilization\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _lib, _loadTest, _server, _utilization, _environment, _service, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/utilization\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-update this.onSrcMetricsChange @srcMetrics}}\n    {{did-update this.onMetricsChanged this.metrics}}\n    {{did-update this.onSelectedBucketChanged this.selectedBucket @model.execution.id @model.executionRegion.id this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp}}\n    {{did-update this.onSelectedBaselineBucketChanged this.baselineBucketSelectedInternal @model.execution.id @model.executionRegion.id this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp}}\n  >\n  {{#if (and (not this.isMonitoring) (not @isHistory) this.hasUtilizationMetrics @utilizationWarning)}}\n    <div class=\"note note-warning\">\n      <p>{{html-safe @utilizationWarning}} Consider <LinkTo @route='update-test' @model={{@model.execution.confId}}>adding\n        test runner instances or reducing the number of virtual users</LinkTo> if using the long running test runner region.</p>\n    </div>\n  {{/if}}\n  \n  {{#if (or this.selectedBucket this.baselineBucketSelected)}}\n    {{#if this.selectedBucket}}\n      <div class=\"m-b-5\">\n        <strong>Selected\n          {{#if @baselineExecution.buckets}}Current{{/if}}\n          {{this.label}}:</strong> {{this.selectedBucket.bucket}}\n        <button type=\"button\" class='btn btn-danger btn-xs m-l-5' {{on \"click\" this.clearSelectedRow}} >Clear</button>\n      </div>\n    {{/if}}\n    {{#if this.baselineBucketSelected}}\n      <div>\n        <strong>Selected Baseline {{this.label}}:</strong> {{this.baselineBucketSelected.bucket}}\n        <button type=\"button\" class='btn btn-danger btn-xs m-l-5' {{on \"click\" this.clearSelectedBaselineRow}} >Clear</button>\n      </div>\n    {{/if}}\n  {{/if}}\n  \n  {{#if @showMetricValues}}\n    <div class=\"text-center m-b-10\">\n          <span class=\"widget-header m-r-30\">\n            {{#if this.selectedBucket}}\n              Peak On Selected {{this.label}}\n            {{else if (eq this.bucketAggregator 'Largest')}}\n              Peak On Single {{this.label}}\n            {{else}}\n              Peak Totals\n            {{/if}}\n          </span>\n    </div>\n    <MetricsTable @prefix={{@widget.id}}\n                  @metrics={{this.metrics}}\n                  @metricDefs={{@metricDefs}}\n                  @summary={{if (gt this.selectedBucket.id 0) this.selectedBucket @summary}}\n                  @summaryHistory={{if (gt this.selectedBucket.id 0) null @summaryHistory}}\n                  @isBaseline={{@isBaseline}}\n                  @baselineExecutionSummary={{@baselineExecutionSummary}}\n                  @regionName={{@regionName}}\n                  @model={{@model}}\n                  @overallModel={{@overallModel}}\n                  @utilizationWarningThreshold={{@utilizationWarningThreshold}}\n                  @scriptType={{@scriptType}}\n                  @showHistory={{@showHistory}}\n                  @widgetId={{this.widgetId}}\n    />\n  {{/if}}\n  \n  <div class=\"m-t-10\">\n    {{#if (and this.showChart this.chartDataLoaded this.doRenderChart)}}\n      {{#if (and @isBaseline (or (eq @regionName 'ALL') @regionBaselineId)) }}\n        <div class=\"clear-fix\">\n          {{#unless @isPrint}}\n            <BsButtonGroup @value={{this.chartType}} @type=\"radio\" @onChange={{this.changeChartType}} class=\"m-b-10 pull-right\" as |bg|>\n              <bg.button @type=\"success\" @value=\"separate\" @size=\"sm\">Separate</bg.button>\n              <bg.button @type=\"success\" @value=\"combined\" @size=\"sm\">Combined</bg.button>\n            </BsButtonGroup>\n          {{/unless}}\n          {{#if (and @isBaseline (eq this.chartType 'separate'))}}\n            <strong>Current Test</strong>\n          {{/if}}\n        </div>\n      {{/if}}\n  \n      <MetricChart @id={{concat @widget.id '_' @regionName '_overview'}}\n                   @chartConfig={{this.overviewChartConfig}}\n                   @metrics={{this.metrics}}\n                   @config={{@config}}\n                   @bucketAggregator={{this.bucketAggregator}}\n                   @utilizationWarningThreshold={{@utilizationWarningThreshold}}\n                   @selectedBucketId={{this.selectedBucket.id}}\n                   @isBaselineBucket={{gte this.baselineBucketSelected.id 0}}\n                   @data={{if (gte this.selectedBucket.id 0) this.bucketDetails @model}}\n                   @baselineExecution={{if (gte this.baselineBucketSelected.id 0) this.baselineBucketDetails @baselineExecution}}\n                   @baselineExecutionSummaryHistory={{@baselineExecutionSummaryHistory}}\n                   @isBaseline={{if (eq this.chartType 'combined') @isBaseline}}\n                   @metricDefs={{@metricDefs}}\n                   @scriptType={{@scriptType}}\n                   @width='100'\n                   @typeAsTitle={{true}}\n                   @regionName={{@regionName}}\n                   @showHistory={{@showHistory}}\n                   @showMetricValues={{@showMetricValues}}\n                   @period={{@period}}\n                   @isPrint={{@isPrint}}\n                   @currentTab={{@currentTab}}\n                   @chartType={{this.chartType}}\n                   @forceIsBaseline={{if @isBaseline true}}\n      />\n  \n      {{#if (and @isBaseline (eq this.chartType 'separate') (or (eq @regionName 'ALL') @regionBaselineId)) }}\n        <strong>Baseline Test</strong>\n        <MetricChart @id={{concat @widget.id '_' @regionName '_overview_baseline'}}\n                     @chartConfig={{this.overviewChartConfig}}\n                     @metrics={{this.metrics}}\n                     @config={{@config}}\n                     @bucketAggregator={{this.bucketAggregator}}\n                     @utilizationWarningThreshold={{@utilizationWarningThreshold}}\n                     @selectedBucketId={{this.selectedBucket.id}}\n                     @isBaselineBucket={{gte this.baselineBucketSelected.id 0}}\n                     @baselineExecution={{if (gte this.baselineBucketSelected.id 0) this.baselineBucketDetails @baselineExecution}}\n                     @baselineExecutionSummaryHistory={{@baselineExecutionSummaryHistory}}\n                     @isBaseline={{@isBaseline}}\n                     @metricDefs={{@metricDefs}}\n                     @scriptType={{@scriptType}}\n                     @width='100'\n                     @typeAsTitle={{true}}\n                     @regionName={{@regionName}}\n                     @showHistory={{@showHistory}}\n                     @showMetricValues={{@showMetricValues}}\n                     @period={{@period}}\n                     @isPrint={{@isPrint}}\n                     @currentTab={{@currentTab}}\n                     @chartType='separate'\n                     @forceIsBaseline={{if @isBaseline true}}\n        />\n      {{/if}}\n    {{else if this.showChart}}\n      <div style={{html-safe \"width: 100%; height: 340px;\"}}>\n        <p class=\"chart-loading\">Loading {{if @showHistory 'historical' 'interval'}} data...</p>\n      </div>\n    {{/if}}\n  </div>\n  {{#if (and @showBucketTable this.hasMeteredMetric)}}\n    <div class=\"text-center m-b-10 m-t-10\">\n      <span class=\"widget-header m-r-30\">\n        By {{this.label}}{{#if @baselineExecution.buckets}}: <strong>Current Test</strong>{{/if}}\n      </span>\n    </div>\n    {{#if @bucketsLoaded}}\n      {{#unless @isPrint}}\n        {{#if (and @model.execution.completed this.hasUtilizationMetrics)}}\n          <BsButtonGroup @value={{this.testRunnersFilter}} @type=\"radio\" class=\"m-b-5\"\n                         @onChange={{fn (mut this.testRunnersFilter)}} as |bg|>\n            <bg.button @type=\"success\" @value=\"all\" @size=\"sm\">All ({{print-number\n                    @bucketCount}})</bg.button>\n            <bg.button @type=\"success\" @value=\"overUtilized\" @size=\"sm\">CPU/Memory Warning ({{print-number\n                    this.bucketsWithWarning.size}})</bg.button>\n          </BsButtonGroup>\n          <br/>\n        {{/if}}\n        <span class=\"no-print\">(Select a row to drill down)</span>\n        <div class=\"m-t-5\">\n          <GridSearch @onSearch={{fn (mut this.search)}} />\n        </div>\n      {{/unless}}\n      <div class=\"m-t-10\">\n        <MeteredGrid @id={{this.widgetId}}\n                   @buckets={{@buckets}}\n                   @model={{@model}}\n                   @testRunnersFilter={{this.testRunnersFilter}}\n                   @regionName={{@regionName}}\n                   @chartConfig={{@chartConfig}}\n                   @hasUtilizationMetrics={{this.hasUtilizationMetrics}}\n                   @bucketsWithWarning={{this.bucketsWithWarning}}\n                   @metricDefs={{@metricDefs}}\n                   @scriptType={{@scriptType}}\n                   @label={{this.label}}\n                   @search={{this.search}}\n                   @utilizationWarningThreshold={{@utilizationWarningThreshold}}\n                   @isPrint={{@isPrint}}\n                   @agentSearchMap={{@agentSearchMap}}\n                   @selectedBucket={{this.selectedBucket}}\n                   @rowSelected={{this.rowSelected}} />\n      </div>\n      {{#if @baselineExecution.buckets}}\n        <div class=\"text-center m-b-10 m-t-10\">\n          <span class=\"widget-header m-r-30\">\n            By {{this.label}}: <strong>Baseline Test</strong>\n          </span>\n        </div>\n  \n        {{#unless @isPrint}}\n          {{#if (and @model.execution.completed this.hasUtilizationMetrics)}}\n            <BsButtonGroup @value={{this.testBaselineRunnersFilter}} @type=\"radio\" class=\"m-b-5\"\n                           @onChange={{fn (mut this.testBaselineRunnersFilter)}} as |bg|>\n              <bg.button @type=\"success\" @value=\"all\" @size=\"sm\">All ({{print-number\n                      this.baselineBucketCount}})</bg.button>\n              <bg.button @type=\"success\" @value=\"overUtilized\" @size=\"sm\">CPU/Memory Warning ({{print-number\n                      this.baselineBucketsWithWarning.size}})</bg.button>\n            </BsButtonGroup>\n            <br/>\n          {{/if}}\n          <span class=\"no-print\">(Select a row to drill down)</span>\n          <div class=\"m-t-5\">\n            <GridSearch @onSearch={{fn (mut this.baselineSearch)}} />\n          </div>\n        {{/unless}}\n        <div class=\"m-t-10\">\n          <MeteredGrid @id={{this.baselineWidgetId}}\n                       @buckets={{@baselineExecution.buckets}}\n                       @model={{@model}}\n                       @testRunnersFilter={{this.testBaselineRunnersFilter}}\n                       @regionName={{@regionName}}\n                       @chartConfig={{@chartConfig}}\n                       @hasUtilizationMetrics={{this.hasUtilizationMetrics}}\n                       @bucketsWithWarning={{this.baselineBucketsWithWarning}}\n                       @metricDefs={{@metricDefs}}\n                       @scriptType={{@scriptType}}\n                       @label={{this.label}}\n                       @search={{this.baselineSearch}}\n                       @utilizationWarningThreshold={{@utilizationWarningThreshold}}\n                       @isPrint={{@isPrint}}\n                       @isBaseline={{true}}\n                       @agentSearchMap={{@agentSearchMap}}\n                       @selectedBucket={{this.baselineBucketSelected}}\n                       @rowSelected={{this.rowSelectedBaseline}} />\n        </div>\n      {{/if}}\n  \n    {{else}}\n      <span class=\"lead\">Loading {{this.label}}s...</span>\n    {{/if}}\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"onSrcMetricsChange\\\"]],[30,1]],null],[4,[38,1],[[30,0,[\\\"onMetricsChanged\\\"]],[30,0,[\\\"metrics\\\"]]],null],[4,[38,1],[[30,0,[\\\"onSelectedBucketChanged\\\"]],[30,0,[\\\"selectedBucket\\\"]],[30,2,[\\\"execution\\\",\\\"id\\\"]],[30,2,[\\\"executionRegion\\\",\\\"id\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]]],null],[4,[38,1],[[30,0,[\\\"onSelectedBaselineBucketChanged\\\"]],[30,0,[\\\"baselineBucketSelectedInternal\\\"]],[30,2,[\\\"execution\\\",\\\"id\\\"]],[30,2,[\\\"executionRegion\\\",\\\"id\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[28,[37,4],[[30,0,[\\\"isMonitoring\\\"]]],null],[28,[37,4],[[30,3]],null],[30,0,[\\\"hasUtilizationMetrics\\\"]],[30,4]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-warning\\\"],[12],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,[28,[35,6],[[30,4]],null]],[1,\\\" Consider \\\"],[8,[39,7],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,2,[\\\"execution\\\",\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"adding\\\\n      test runner instances or reducing the number of virtual users\\\"]],[]]]]],[1,\\\" if using the long running test runner region.\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,0,[\\\"selectedBucket\\\"]],[30,0,[\\\"baselineBucketSelected\\\"]]],null],[[[41,[30,0,[\\\"selectedBucket\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Selected\\\\n        \\\"],[41,[30,5,[\\\"buckets\\\"]],[[[1,\\\"Current\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\":\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"selectedBucket\\\",\\\"bucket\\\"]]],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[30,0,[\\\"clearSelectedRow\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"baselineBucketSelected\\\"]],[[[1,\\\"    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Selected Baseline \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\":\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"baselineBucketSelected\\\",\\\"bucket\\\"]]],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-xs m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[30,0,[\\\"clearSelectedBaselineRow\\\"]]],null],[12],[1,\\\"Clear\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,6],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"text-center m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"widget-header m-r-30\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedBucket\\\"]],[[[1,\\\"            Peak On Selected \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,0,[\\\"bucketAggregator\\\"]],\\\"Largest\\\"],null],[[[1,\\\"            Peak On Single \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            Peak Totals\\\\n          \\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,14],null,[[\\\"@prefix\\\",\\\"@metrics\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummary\\\",\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@utilizationWarningThreshold\\\",\\\"@scriptType\\\",\\\"@showHistory\\\",\\\"@widgetId\\\"],[[30,7,[\\\"id\\\"]],[30,0,[\\\"metrics\\\"]],[30,8],[52,[28,[37,15],[[30,0,[\\\"selectedBucket\\\",\\\"id\\\"]],0],null],[30,0,[\\\"selectedBucket\\\"]],[30,9]],[52,[28,[37,15],[[30,0,[\\\"selectedBucket\\\",\\\"id\\\"]],0],null],null,[30,10]],[30,11],[30,12],[30,13],[30,2],[30,14],[30,15],[30,16],[30,17],[30,0,[\\\"widgetId\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"showChart\\\"]],[30,0,[\\\"chartDataLoaded\\\"]],[30,0,[\\\"doRenderChart\\\"]]],null],[[[41,[28,[37,3],[[30,11],[28,[37,8],[[28,[37,13],[[30,13],\\\"ALL\\\"],null],[30,18]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"clear-fix\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,19]],[[[1,\\\"          \\\"],[8,[39,17],[[24,0,\\\"m-b-10 pull-right\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"chartType\\\"]],\\\"radio\\\",[30,0,[\\\"changeChartType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,20,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"separate\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Separate\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,20,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"combined\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Combined\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[20]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,11],[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"separate\\\"],null]],null],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Current Test\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[8,[39,18],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@metrics\\\",\\\"@config\\\",\\\"@bucketAggregator\\\",\\\"@utilizationWarningThreshold\\\",\\\"@selectedBucketId\\\",\\\"@isBaselineBucket\\\",\\\"@data\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@isBaseline\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@width\\\",\\\"@typeAsTitle\\\",\\\"@regionName\\\",\\\"@showHistory\\\",\\\"@showMetricValues\\\",\\\"@period\\\",\\\"@isPrint\\\",\\\"@currentTab\\\",\\\"@chartType\\\",\\\"@forceIsBaseline\\\"],[[28,[37,19],[[30,7,[\\\"id\\\"]],\\\"_\\\",[30,13],\\\"_overview\\\"],null],[30,0,[\\\"overviewChartConfig\\\"]],[30,0,[\\\"metrics\\\"]],[30,21],[30,0,[\\\"bucketAggregator\\\"]],[30,15],[30,0,[\\\"selectedBucket\\\",\\\"id\\\"]],[28,[37,20],[[30,0,[\\\"baselineBucketSelected\\\",\\\"id\\\"]],0],null],[52,[28,[37,20],[[30,0,[\\\"selectedBucket\\\",\\\"id\\\"]],0],null],[30,0,[\\\"bucketDetails\\\"]],[30,2]],[52,[28,[37,20],[[30,0,[\\\"baselineBucketSelected\\\",\\\"id\\\"]],0],null],[30,0,[\\\"baselineBucketDetails\\\"]],[30,5]],[30,22],[52,[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"combined\\\"],null],[30,11]],[30,8],[30,16],\\\"100\\\",true,[30,13],[30,17],[30,6],[30,23],[30,19],[30,24],[30,0,[\\\"chartType\\\"]],[52,[30,11],true]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,3],[[30,11],[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"separate\\\"],null],[28,[37,8],[[28,[37,13],[[30,13],\\\"ALL\\\"],null],[30,18]],null]],null],[[[1,\\\"      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Baseline Test\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,18],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@metrics\\\",\\\"@config\\\",\\\"@bucketAggregator\\\",\\\"@utilizationWarningThreshold\\\",\\\"@selectedBucketId\\\",\\\"@isBaselineBucket\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@isBaseline\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@width\\\",\\\"@typeAsTitle\\\",\\\"@regionName\\\",\\\"@showHistory\\\",\\\"@showMetricValues\\\",\\\"@period\\\",\\\"@isPrint\\\",\\\"@currentTab\\\",\\\"@chartType\\\",\\\"@forceIsBaseline\\\"],[[28,[37,19],[[30,7,[\\\"id\\\"]],\\\"_\\\",[30,13],\\\"_overview_baseline\\\"],null],[30,0,[\\\"overviewChartConfig\\\"]],[30,0,[\\\"metrics\\\"]],[30,21],[30,0,[\\\"bucketAggregator\\\"]],[30,15],[30,0,[\\\"selectedBucket\\\",\\\"id\\\"]],[28,[37,20],[[30,0,[\\\"baselineBucketSelected\\\",\\\"id\\\"]],0],null],[52,[28,[37,20],[[30,0,[\\\"baselineBucketSelected\\\",\\\"id\\\"]],0],null],[30,0,[\\\"baselineBucketDetails\\\"]],[30,5]],[30,22],[30,11],[30,8],[30,16],\\\"100\\\",true,[30,13],[30,17],[30,6],[30,23],[30,19],[30,24],\\\"separate\\\",[52,[30,11],true]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[30,0,[\\\"showChart\\\"]],[[[1,\\\"    \\\"],[10,0],[15,5,[28,[37,6],[\\\"width: 100%; height: 340px;\\\"],null]],[12],[1,\\\"\\\\n      \\\"],[10,2],[14,0,\\\"chart-loading\\\"],[12],[1,\\\"Loading \\\"],[1,[52,[30,17],\\\"historical\\\",\\\"interval\\\"]],[1,\\\" data...\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]],null]],[]]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,25],[30,0,[\\\"hasMeteredMetric\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"text-center m-b-10 m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"widget-header m-r-30\\\"],[12],[1,\\\"\\\\n      By \\\"],[1,[30,0,[\\\"label\\\"]]],[41,[30,5,[\\\"buckets\\\"]],[[[1,\\\": \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Current Test\\\"],[13]],[]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,26],[[[41,[51,[30,19]],[[[41,[28,[37,3],[[30,2,[\\\"execution\\\",\\\"completed\\\"]],[30,0,[\\\"hasUtilizationMetrics\\\"]]],null],[[[1,\\\"        \\\"],[8,[39,17],[[24,0,\\\"m-b-5\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"testRunnersFilter\\\"]],\\\"radio\\\",[28,[37,21],[[28,[37,22],[[30,0,[\\\"testRunnersFilter\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,27,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"All (\\\"],[1,[28,[35,23],[[30,28]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,27,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"overUtilized\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"CPU/Memory Warning (\\\"],[1,[28,[35,23],[[30,0,[\\\"bucketsWithWarning\\\",\\\"size\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[27]]]]],[1,\\\"\\\\n        \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,1],[14,0,\\\"no-print\\\"],[12],[1,\\\"(Select a row to drill down)\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,25],null,[[\\\"@onSearch\\\"],[[28,[37,21],[[28,[37,22],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,26],null,[[\\\"@id\\\",\\\"@buckets\\\",\\\"@model\\\",\\\"@testRunnersFilter\\\",\\\"@regionName\\\",\\\"@chartConfig\\\",\\\"@hasUtilizationMetrics\\\",\\\"@bucketsWithWarning\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@label\\\",\\\"@search\\\",\\\"@utilizationWarningThreshold\\\",\\\"@isPrint\\\",\\\"@agentSearchMap\\\",\\\"@selectedBucket\\\",\\\"@rowSelected\\\"],[[30,0,[\\\"widgetId\\\"]],[30,29],[30,2],[30,0,[\\\"testRunnersFilter\\\"]],[30,13],[30,30],[30,0,[\\\"hasUtilizationMetrics\\\"]],[30,0,[\\\"bucketsWithWarning\\\"]],[30,8],[30,16],[30,0,[\\\"label\\\"]],[30,0,[\\\"search\\\"]],[30,15],[30,19],[30,31],[30,0,[\\\"selectedBucket\\\"]],[30,0,[\\\"rowSelected\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,5,[\\\"buckets\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-center m-b-10 m-t-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"widget-header m-r-30\\\"],[12],[1,\\\"\\\\n          By \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\": \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Baseline Test\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,19]],[[[41,[28,[37,3],[[30,2,[\\\"execution\\\",\\\"completed\\\"]],[30,0,[\\\"hasUtilizationMetrics\\\"]]],null],[[[1,\\\"          \\\"],[8,[39,17],[[24,0,\\\"m-b-5\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"testBaselineRunnersFilter\\\"]],\\\"radio\\\",[28,[37,21],[[28,[37,22],[[30,0,[\\\"testBaselineRunnersFilter\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,32,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"All (\\\"],[1,[28,[35,23],[[30,0,[\\\"baselineBucketCount\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,32,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"overUtilized\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"CPU/Memory Warning (\\\"],[1,[28,[35,23],[[30,0,[\\\"baselineBucketsWithWarning\\\",\\\"size\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[32]]]]],[1,\\\"\\\\n          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,1],[14,0,\\\"no-print\\\"],[12],[1,\\\"(Select a row to drill down)\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,25],null,[[\\\"@onSearch\\\"],[[28,[37,21],[[28,[37,22],[[30,0,[\\\"baselineSearch\\\"]]],null]],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,26],null,[[\\\"@id\\\",\\\"@buckets\\\",\\\"@model\\\",\\\"@testRunnersFilter\\\",\\\"@regionName\\\",\\\"@chartConfig\\\",\\\"@hasUtilizationMetrics\\\",\\\"@bucketsWithWarning\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@label\\\",\\\"@search\\\",\\\"@utilizationWarningThreshold\\\",\\\"@isPrint\\\",\\\"@isBaseline\\\",\\\"@agentSearchMap\\\",\\\"@selectedBucket\\\",\\\"@rowSelected\\\"],[[30,0,[\\\"baselineWidgetId\\\"]],[30,5,[\\\"buckets\\\"]],[30,2],[30,0,[\\\"testBaselineRunnersFilter\\\"]],[30,13],[30,30],[30,0,[\\\"hasUtilizationMetrics\\\"]],[30,0,[\\\"baselineBucketsWithWarning\\\"]],[30,8],[30,16],[30,0,[\\\"label\\\"]],[30,0,[\\\"baselineSearch\\\"]],[30,15],[30,19],true,[30,31],[30,0,[\\\"baselineBucketSelected\\\"]],[30,0,[\\\"rowSelectedBaseline\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Loading \\\"],[1,[30,0,[\\\"label\\\"]]],[1,\\\"s...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@srcMetrics\\\",\\\"@model\\\",\\\"@isHistory\\\",\\\"@utilizationWarning\\\",\\\"@baselineExecution\\\",\\\"@showMetricValues\\\",\\\"@widget\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummary\\\",\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@utilizationWarningThreshold\\\",\\\"@scriptType\\\",\\\"@showHistory\\\",\\\"@regionBaselineId\\\",\\\"@isPrint\\\",\\\"bg\\\",\\\"@config\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@period\\\",\\\"@currentTab\\\",\\\"@showBucketTable\\\",\\\"@bucketsLoaded\\\",\\\"bg\\\",\\\"@bucketCount\\\",\\\"@buckets\\\",\\\"@chartConfig\\\",\\\"@agentSearchMap\\\",\\\"bg\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"p\\\",\\\"html-safe\\\",\\\"link-to\\\",\\\"or\\\",\\\"strong\\\",\\\"button\\\",\\\"on\\\",\\\"span\\\",\\\"eq\\\",\\\"metrics-table\\\",\\\"gt\\\",\\\"unless\\\",\\\"bs-button-group\\\",\\\"metric-chart\\\",\\\"concat\\\",\\\"gte\\\",\\\"fn\\\",\\\"mut\\\",\\\"print-number\\\",\\\"br\\\",\\\"grid-search\\\",\\\"metered-grid\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metered-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  const UtilizationMetrics = ['cpuUtilization', 'cpu1mMAUtilization', 'cpu5mMAUtilization', 'memoryUtilization', 'memory1mMAUtilization', 'memory5mMAUtilization'];\n  let MeteredWidget = _exports.default = (_dec = (0, _object.computed)('metrics.@each.name'), _dec2 = (0, _object.computed)('hasUtilizationMetrics', 'args.bucketsLoaded', 'args.buckets', 'args.config', 'args.config.settings'), _dec3 = (0, _object.computed)('hasUtilizationMetrics', 'args.bucketsLoaded', 'args.baselineExecution.buckets', 'args.config', 'args.config.settings'), _dec4 = (0, _object.computed)('metrics.@each.selected'), _dec5 = (0, _object.computed)('args.showBucketTable', 'args.bucketsLoaded', 'args.baselineExecution.buckets', 'metrics'), _class = class MeteredWidget extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _initializerDefineProperty(this, \"testResults\", _descriptor3, this);\n      _initializerDefineProperty(this, \"doRenderChart\", _descriptor4, this);\n      _initializerDefineProperty(this, \"baselineBucketSelected\", _descriptor5, this);\n      _initializerDefineProperty(this, \"chartType\", _descriptor6, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _defineProperty(this, \"widgetId\", `grid_${(0, _emberUuid.v4)()}`);\n      _defineProperty(this, \"baselineWidgetId\", `grid_${(0, _emberUuid.v4)()}`);\n      _initializerDefineProperty(this, \"testRunnersFilter\", _descriptor7, this);\n      _initializerDefineProperty(this, \"testBaselineRunnersFilter\", _descriptor8, this);\n      _initializerDefineProperty(this, \"selectedBucket\", _descriptor9, this);\n      _initializerDefineProperty(this, \"baselineBucketSelectedInternal\", _descriptor0, this);\n      _initializerDefineProperty(this, \"isLoadingBucketDetails\", _descriptor1, this);\n      _initializerDefineProperty(this, \"bucketDetails\", _descriptor10, this);\n      _initializerDefineProperty(this, \"baselineBucketDetails\", _descriptor11, this);\n      _initializerDefineProperty(this, \"metrics\", _descriptor12, this);\n      _initializerDefineProperty(this, \"currentSrcMetrics\", _descriptor13, this);\n      _initializerDefineProperty(this, \"search\", _descriptor14, this);\n      _initializerDefineProperty(this, \"baselineSearch\", _descriptor15, this);\n      this.EventBus.subscribe('buckets.update', this, 'onBucketUpdates');\n      (0, _runloop.next)(() => {\n        this._onSrcMetricsChange();\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('buckets.update', this, 'onBucketUpdates');\n    }\n    get hasMeteredMetric() {\n      return _.isObject(_.find(this.metrics, metric => {\n        return this.isMetered(metric);\n      }));\n    }\n    get hasUtilizationMetrics() {\n      return _.findIndex(this.metrics, metric => {\n        return (!metric.namespace || metric.namespace === _loadTest.default.SystemNs) && UtilizationMetrics.includes(_lib.default.getMetricName(metric.name));\n      }) >= 0;\n    }\n    get bucketsWithWarning() {\n      return this.hasUtilizationMetrics && this.args.bucketsLoaded ? _utilization.default.getBucketsExceedingThreshold(this.args.buckets, this.args.config) : new Set();\n    }\n    get baselineBucketsWithWarning() {\n      return this.hasUtilizationMetrics && this.args.bucketsLoaded ? _utilization.default.getBucketsExceedingThreshold(this.args.baselineExecution?.buckets, this.args.config) : new Set();\n    }\n    get chartDataLoaded() {\n      if (this.selectedBucket?.id >= 0) {\n        return !this.isLoadingBucketDetails;\n      } else if (this.args.showHistory) {\n        return this.args.summaryHistoryLoaded;\n      } else {\n        return this.args.intervalsLoaded;\n      }\n    }\n    get overviewChartConfig() {\n      return {\n        id: 'usageOverviewChart',\n        chartType: 'Metered',\n        metrics: _.clone(this.metrics)\n      };\n    }\n    get label() {\n      return this.args.chartConfig?.label || 'Test Runner';\n    }\n    get bucketAggregator() {\n      return this.args.chartConfig?.bucketAggregator || 'Largest';\n    }\n    get showChart() {\n      return _.findIndex(this.metrics, metric => {\n        return metric.selected;\n      }) !== -1;\n    }\n    get baselineBucketCount() {\n      if (this.args.showBucketTable && this.args.bucketsLoaded) {\n        return _utilization.default.getBucketCount(this.args.baselineExecution?.buckets, this.metrics);\n      }\n      return 0;\n    }\n    isMetered(metric) {\n      let metricDefs = this.args.metricDefs;\n      let metricDef = _loadTest.default.findMetricDef(metric.namespace, metric.name, metricDefs);\n      return metricDef && metricDef.metricType === 'Metered';\n    }\n    onBucketUpdates(updates) {\n      if (this.isDestroyed) return;\n      if (this.args.bucketsLoaded && this.hasUtilizationMetrics) {\n        const affectedBuckets = _.concat(updates.added, updates.updated);\n        const bucketsExceeding = _utilization.default.getBucketsExceedingThreshold(affectedBuckets, this.args.config);\n        const bucketsWithWarning = this.bucketsWithWarning;\n        bucketsExceeding.forEach(b => {\n          bucketsWithWarning.add(b);\n        });\n      }\n      this.EventBus.publish('buckets.grid-update', updates);\n    }\n    onSrcMetricsChange() {\n      this._onSrcMetricsChange();\n    }\n    _onSrcMetricsChange() {\n      if (!this.currentSrcMetrics || !_.isEqual(this.currentSrcMetrics, this.args.srcMetrics)) {\n        this.currentSrcMetrics = this.args.srcMetrics;\n        this.metrics = _.cloneDeep(this.args.srcMetrics);\n      }\n    }\n    onMetricsChanged() {\n      this.doRenderChart = false;\n      const metrics = this.metrics;\n      const srcMetrics = this.args.srcMetrics;\n      if (!metrics || !srcMetrics || metrics.length !== srcMetrics.length) {\n        return;\n      }\n      for (let i = 0; i < metrics.length; i++) {\n        const metric = metrics[i];\n        const srcMetric = srcMetrics[i];\n        (0, _object.set)(metric, 'name', srcMetric.name + '-' + this.bucketAggregator.toLowerCase());\n      }\n      (0, _runloop.next)(this, () => {\n        if (!this.isDestroyed) this.doRenderChart = true;\n      });\n    }\n    onSelectedBucketChanged() {\n      const selectedBucket = this.selectedBucket;\n      if (selectedBucket && this.args.showHistory) {\n        this.getBucketHistory(selectedBucket);\n      } else if (selectedBucket) {\n        this.getBucketIntervals(selectedBucket);\n      }\n    }\n    onSelectedBaselineBucketChanged() {\n      const selectedBucket = this.baselineBucketSelectedInternal;\n      if (selectedBucket && this.args.showHistory) {\n        this.getBucketHistory(selectedBucket, true);\n      } else if (selectedBucket) {\n        this.getBucketIntervals(selectedBucket, true);\n      }\n    }\n\n    // TODO\n    getBucketHistory(selectedBucket, baseline = null) {\n      const executionId = this.args.model?.execution?.id;\n      const testConfId = this.args.model?.execution?.confId;\n      const regionId = this.args.model?.executionRegion?.region?.id;\n      const uuid = this.args.model?.execution?.uuid;\n      const isAll = this.args.regionName === 'ALL';\n      const params = {\n        bucket: selectedBucket.bucket,\n        bucketHistory: true,\n        limit: 10,\n        maxExecutionId: executionId,\n        testConfId: testConfId\n      };\n      if (!isAll) {\n        params.region = regionId;\n      }\n      const getAction = uuid ? _server.default.getTokenContent(uuid, params) : _server.default.getBucketHistory(testConfId, executionId, isAll ? null : regionId, selectedBucket.bucket);\n      this.isLoadingBucketDetails = true;\n      getAction.then(results => {\n        const history = _.map(results, bucketSummary => {\n          this.testResults.processBucket(bucketSummary.bucket);\n          bucketSummary.bucket.date = new Date(bucketSummary.timestamp);\n          bucketSummary.bucket.granularity = bucketSummary.granularity;\n          return bucketSummary.bucket;\n        });\n        this.bucketDetails = {\n          summaryHistory: history,\n          summary: this.args.model?.execution?.summary,\n          execution: this.args.model?.execution\n        };\n        this.isLoadingBucketDetails = false;\n      }, () => {\n        this.bucketDetails = {\n          summaryHistory: [],\n          summary: this.args.model?.execution?.summary,\n          execution: this.args.model?.execution\n        };\n        this.isLoadingBucketDetails = false;\n      });\n    }\n    getBucketIntervals(selectedBucket, baseline = null) {\n      const execution = baseline ? this.args.baselineExecution : this.args.model?.execution;\n      const executionId = execution.id;\n      const execRegionId = baseline ? null : this.args.model?.executionRegion?.id;\n      const summary = baseline ? this.args.baselineExecutionSummary : this.args.model?.summary;\n      const uuid = this.args.model?.execution?.uuid; // TODO: Public URL\n      const zoomInfo = this.zoomInfo;\n      const params = {\n        bucket: selectedBucket.bucket,\n        bucketIntervals: true\n      };\n      if (execRegionId && execRegionId !== 'ALL') {\n        params.execRegionId = execRegionId;\n      }\n      const getAction = uuid ? _server.default.getTokenContent(uuid, params, zoomInfo) : _server.default.getBucketIntervals(executionId, execRegionId, selectedBucket.bucket, zoomInfo);\n      this.isLoadingBucketDetails = true;\n      getAction.then(results => {\n        let startDate = summary?.firstResultAt ? _lib.default.intervalFor(moment(summary.firstResultAt).valueOf(), summary.granularity) : results.length > 0 ? results[0].intervalStart : 0;\n        let intervals = _.map(results, bucketInterval => {\n          this.testResults.processBucket(bucketInterval.bucket);\n          bucketInterval.bucket.date = new Date(bucketInterval.intervalStart);\n          bucketInterval.bucket.intervalStart = bucketInterval.intervalStart;\n          bucketInterval.bucket.granularity = bucketInterval.granularity;\n          bucketInterval.bucket.timespan = _lib.default.intervalMs(bucketInterval.granularity);\n          bucketInterval.bucket._diff = _lib.default.printDurationFromMS(bucketInterval.intervalStart - startDate);\n          return bucketInterval.bucket;\n        });\n        if (baseline) {\n          intervals = _lib.default.addHistoryToIntervals(intervals);\n        }\n        if (baseline) {\n          this.baselineBucketDetails = {\n            intervals,\n            summary,\n            execution\n          };\n          this.baselineBucketSelected = this.baselineBucketSelectedInternal;\n        } else {\n          this.bucketDetails = {\n            intervals,\n            summary,\n            execution\n          };\n        }\n        this.isLoadingBucketDetails = false;\n      }, () => {\n        if (baseline) {\n          this.baselineBucketDetails = {\n            intervals: [],\n            summary,\n            execution\n          };\n          this.baselineBucketSelected = this.baselineBucketSelectedInternal;\n        } else {\n          this.bucketDetails = {\n            intervals: [],\n            summary,\n            execution\n          };\n        }\n        this.isLoadingBucketDetails = false;\n      });\n    }\n    rowSelected(bucket) {\n      this.selectedBucket = bucket;\n    }\n    rowSelectedBaseline(bucket) {\n      this.baselineBucketSelectedInternal = bucket;\n      if (!bucket) {\n        this.baselineBucketSelected = null;\n      }\n    }\n    clearSelectedRow() {\n      this.selectedBucket = null;\n    }\n    clearSelectedBaselineRow() {\n      this.baselineBucketSelectedInternal = null;\n      this.baselineBucketSelected = null;\n    }\n    changeChartType(type) {\n      this.chartType = type;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"doRenderChart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"baselineBucketSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"chartType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'separate';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"testRunnersFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"testBaselineRunnersFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"selectedBucket\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"baselineBucketSelectedInternal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingBucketDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"bucketDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"baselineBucketDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"metrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"currentSrcMetrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"baselineSearch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"hasUtilizationMetrics\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"hasUtilizationMetrics\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketsWithWarning\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketsWithWarning\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineBucketsWithWarning\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineBucketsWithWarning\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showChart\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"showChart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineBucketCount\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineBucketCount\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSrcMetricsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSrcMetricsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMetricsChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetricsChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectedBucketChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectedBucketChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectedBaselineBucketChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectedBaselineBucketChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"rowSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"rowSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"rowSelectedBaseline\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"rowSelectedBaseline\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearSelectedRow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearSelectedRow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearSelectedBaselineRow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearSelectedBaselineRow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeChartType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeChartType\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MeteredWidget);\n});","define(\"@testable/shared-ui/components/metric-chart\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@ember/template\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object/observers\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/xy\", \"@amcharts/amcharts5/themes/Animated\", \"@testable/shared-ui/utils/amcharts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _template, _service, _tracking, _observers, _lib, _loadTest, am5, am5xy, _Animated, _amcharts2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/template\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/xy\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"chart\"\n    {{did-insert this.didInsert}}\n    {{will-destroy this.destructor}}\n  >\n    <div id=\"{{@id}}\" style={{this.style}}></div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"chart\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"destructor\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[[30,1]]]],[15,5,[30,0,[\\\"style\\\"]]],[12],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"will-destroy\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metric-chart.hbs\",\n    \"isStrictMode\": false\n  });\n  const lineColors = [\"#FCD202\", \"#cadef6\"]; // match this with css .line-current and .line-baseline\n  let MetricChartComponent = _exports.default = (_dec = (0, _object.computed)('args.data.intervals.0.granularity', 'args.selectedResource.{id,intervals.0.granularity}'), _class = class MetricChartComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor3, this);\n      _initializerDefineProperty(this, \"dataCache\", _descriptor4, this);\n      _initializerDefineProperty(this, \"chart\", _descriptor5, this);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chartData\", _descriptor7, this);\n      _initializerDefineProperty(this, \"currentMetrics\", _descriptor8, this);\n      _initializerDefineProperty(this, \"modelIntervals\", _descriptor9, this);\n      _initializerDefineProperty(this, \"updatingZoom\", _descriptor0, this);\n      this.EventBus.subscribe(this.args.regionName + \".rt.data.update\", this, 'onDataUpdated');\n      this.EventBus.subscribe(this.args.regionName + \".rt.data.refresh\", this, 'refreshChart');\n      (0, _observers.addObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.utilizationWarningThreshold', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.showHistory', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.period', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.currentTab', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.selectedBucketId', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.baselineExecution', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.chartType', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.data.intervals', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.baselineSelectedResource.intervals', this.chartConfigChanged);\n\n      // Consume the getter so its observer attaches — a native getter only wires up once it is read\n      this.minPeriod;\n      (0, _observers.addObserver)(this, 'minPeriod', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'args.config.settings.showRelativeTime', this.chartConfigChanged);\n      (0, _observers.addObserver)(this, 'currentMetrics.@each.selected', this.selectedChanged);\n      _lib.default.observeKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.selected', this.metricsChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.graphType', this.metricsChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.color', this.metricsChanged);\n      (0, _observers.addObserver)(this, 'args.metrics.@each.failColor', this.metricsChanged);\n    }\n    destructor() {\n      this.EventBus.unsubscribe(this.args.regionName + '.rt.data.update', this, 'onDataUpdated');\n      this.EventBus.unsubscribe(this.args.regionName + '.rt.data.refresh', this, 'refreshChart');\n      (0, _observers.removeObserver)(this, 'args.chartConfig', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.utilizationWarningThreshold', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.showHistory', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.period', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.currentTab', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.selectedBucketId', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.baselineExecution', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.chartType', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.data.intervals', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.baselineSelectedResource.intervals', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'minPeriod', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'args.config.settings.showRelativeTime', this.chartConfigChanged);\n      (0, _observers.removeObserver)(this, 'currentMetrics.@each.selected', this.selectedChanged);\n      _lib.default.unobserveKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.selected', this.metricsChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.graphType', this.metricsChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.color', this.metricsChanged);\n      (0, _observers.removeObserver)(this, 'args.metrics.@each.failColor', this.metricsChanged);\n      if (this.tabTrigger && this.onTabShown) {\n        this.tabTrigger.off('shown.bs.tab', this.onTabShown);\n        this.tabTrigger = null;\n        this.onTabShown = null;\n      }\n      this.disposeChart();\n    }\n    didInsert(element) {\n      this.currentMetrics = _.cloneDeep(this.args.metrics);\n      this.chart = this.makeChart(this.args.id);\n      _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n      const paneId = element?.closest('.tab-pane')?.id;\n      if (paneId) {\n        this.tabTrigger = $('a[data-bs-toggle=\"tab\"][href=\"#' + paneId + '\"]');\n        this.onTabShown = () => this.waitForVisible(0);\n        this.tabTrigger.on('shown.bs.tab', this.onTabShown);\n      }\n    }\n    waitForVisible(attempt) {\n      if (this.isDestroyed || this.isDestroying) {\n        return;\n      }\n      const el = document.getElementById(this.args.id);\n      if (el && el.offsetWidth > 0) {\n        this.refreshChart(false);\n      } else if (attempt < 120) {\n        requestAnimationFrame(() => this.waitForVisible(attempt + 1));\n      }\n    }\n\n    // Tear down the amCharts root. Keyed on the root, not on this.chart, because\n    // makeChart can create a root and then bail without returning a chart.\n    disposeChart() {\n      if (this.chartRoot) {\n        if (!this.chartRoot.isDisposed()) {\n          this.chartRoot.dispose();\n        }\n        this.chartRoot = null;\n      }\n      this.chart = null;\n    }\n    get style() {\n      return (0, _template.htmlSafe)(`width: ${this.args.width || 100}%; height: 340px`);\n    }\n    get isRelativeTime() {\n      return !this.args.showHistory && this.args.config.settings.showRelativeTime && this.args.data.execution.configuration.testType === 'Load';\n    }\n    get granularity() {\n      const selector = this.args.selectedResource?.id > 0 ? 'selectedResource' : 'data';\n      return this.args[selector]?.intervals?.[0]?.granularity || 'TenSeconds';\n    }\n    get minPeriod() {\n      switch (this.granularity) {\n        case 'OneMinute':\n          return '1mm';\n        case 'FiveMinutes':\n          return '5mm';\n        case 'TenSeconds':\n        default:\n          return '10ss';\n      }\n    }\n    getDataSource() {\n      let model = this.args.selectedResource?.id > 0 ? this.args.selectedResource : this.args.data;\n      if (_.isEmpty(model)) {\n        return [];\n      } else if (this.args.showHistory) {\n        return this.prepareSummaryHistoryDataSource(model.summaryHistory);\n      } else {\n        this.modelIntervals = _.clone(model.intervals); //shallow copy\n        return model.intervals;\n      }\n    }\n    zoomOut() {\n      this.zoomOutAction();\n    }\n    zoomOutAction() {\n      this.updatingZoom = true;\n      this.zoomInfo.update({\n        startTimestamp: null,\n        endTimestamp: null,\n        isAll: true\n      });\n      this.updatingZoom = false;\n    }\n    onDataUpdated(intervals) {\n      if (_.isEmpty(this.chart)) {\n        this.chart = this.makeChart(this.args.id);\n      }\n      if (!this.args.showHistory && _.isObject(this.chart)) {\n        this.updateDataProvider(this.chart, intervals, this.modelIntervals);\n      }\n    }\n\n    // observer\n    chartConfigChanged() {\n      this.refreshChart(true);\n    }\n\n    // observer\n    metricsChanged() {\n      if (!_.isEqual(this.currentMetrics, this.args.metrics)) {\n        this.refreshChart(true);\n      }\n    }\n\n    // observer\n    selectedChanged() {\n      this.refreshChart(false);\n    }\n\n    // observer\n    onZoomChanged() {\n      if (!this.updatingZoom) {\n        (0, _runloop.once)(this, 'doZoom');\n      }\n    }\n    refreshChart(cloneMetrics) {\n      // Dispose on the root's own existence, not on this.chart — makeChart can\n      // create a root and still bail before returning a chart. A root left behind\n      // keeps ticking against a detached element and throws in getComputedStyle.\n      this.disposeChart();\n      this.modelIntervals = null;\n      if (cloneMetrics) {\n        this.currentMetrics = _.cloneDeep(this.args.metrics);\n      }\n      this.chart = this.makeChart(this.args.id);\n      _amcharts2.default.checkEmptyData(this.chartRoot, this.chart, this.chartData);\n    }\n    doZoom(chart) {\n      try {\n        chart = chart || this.chart;\n        const zoomInfo = this.zoomInfo;\n        if (chart) {\n          const dataProvider = this.getDataSource();\n          this.updatingZoom = true;\n          if (dataProvider && dataProvider.length > 0 && zoomInfo && zoomInfo.startTimestamp > 0 && zoomInfo.endTimestamp > 0) {\n            const startIndex = _.findLastIndex(dataProvider, interval => {\n              return interval.intervalStart <= zoomInfo.startTimestamp;\n            });\n            const endIndex = _.findLastIndex(dataProvider, interval => {\n              return interval.intervalStart < zoomInfo.endTimestamp;\n            });\n            if (startIndex >= 0 && endIndex >= 0 && startIndex <= endIndex) {\n              chart.xAxes.values[0].zoomToIndexes(startIndex, endIndex);\n            } else {\n              chart.zoomOut();\n            }\n          } else {\n            chart.zoomOut();\n          }\n          this.updatingZoom = false;\n        }\n      } catch (err) {\n        console.log('chart zoom failed');\n      }\n    }\n    makeChart(id) {\n      let data = (this.args.isBaseline && this.args.chartType === 'separate' ? [] : this.getDataSource()) || [];\n      let currentTab = this.args.currentTab;\n      if (currentTab !== '#results-tab') {\n        let dataCache = this.dataCache;\n        this.dataCache = dataCache.concat(data);\n        return null;\n      } else {\n        data = data.concat(this.dataCache);\n        this.dataCache = [];\n      }\n      _amcharts2.default.initLicense();\n      let chartConfig = this.args.chartConfig;\n      let metrics = this.currentMetrics;\n      let utilizationWarningThreshold = Number(this.args.utilizationWarningThreshold);\n      let bucketAggregator = this.args.bucketAggregator;\n      let showHistory = this.args.showHistory;\n      let index = 0;\n      let axes = this.createValueAxes(metrics, chartConfig?.chartType, utilizationWarningThreshold, bucketAggregator);\n      let lineGraphs = [];\n      let columnGraphs = [];\n      let showBaseLineComparison = !!this.args.isBaseline;\n      _.forEach(metrics, metric => {\n        if (!metric.selected) {\n          return;\n        }\n        let key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        let axis = axes.byMetric[key];\n        let graph = {\n          \"name\": _lib.default.stripHtml(metric.title),\n          \"fill\": metric.color,\n          \"type\": metric.graphType,\n          \"valueAxis\": axis,\n          \"valueField\": key\n        };\n        graph.colorField = this.toColorKey(metric);\n        if (metric.graphType === 'line') {\n          // graph.bulletFill = am5.color(0xFFFFFF);\n          graph.bulletRadius = showBaseLineComparison && this.args.chartType === 'combined' ? 5 : 2.5;\n          graph.bulletStrokeWidth = 2;\n          lineGraphs.push(graph);\n        } else {\n          columnGraphs.push(graph);\n        }\n        index++;\n      });\n      let chartData = [];\n      if (this.args.selectedBucketId || !this.args.selectedBucketId && !this.args.isBaselineBucket || !this.args.selectedBucketId && this.args.isBaselineBucket) {\n        chartData = data;\n      }\n      if (showBaseLineComparison && (!this.args.selectedBucketId || this.args.isBaselineBucket || this.args.selectedBucketId || !this.args.isBaselineBucket)) {\n        let mergedArr = [];\n        // showBaseLineComparison = true;\n        const hasBaselineResource = this.args.baselineSelectedResource?.id > 0;\n        if (hasBaselineResource && !this.args.showHistory && this.args.baselineSelectedResource?.intervals) {\n          mergedArr = _lib.default.mergeArrayOfObjects(chartData, this.args.baselineSelectedResource.intervals, '_diff');\n        } else if (!hasBaselineResource && !this.args.showHistory && this.args.baselineExecution?.intervals?.length) {\n          mergedArr = _lib.default.mergeArrayOfObjects(chartData, this.args.baselineExecution.intervals, '_diff');\n        } else if (this.args.showHistory && this.args.baselineExecutionSummaryHistory) {\n          let baselineSummaryData = this.prepareSummaryHistoryDataSource(this.args.baselineExecutionSummaryHistory);\n          mergedArr = _lib.default.mergeArrayOfObjects(chartData, baselineSummaryData, '_diff');\n        }\n        // we do need to sort by _diff field to properly show the columns\n        chartData = mergedArr.sort((a, b) => {\n          return _lib.default.msFromDuration(...a._diff.split(':').reverse()) - _lib.default.msFromDuration(...b._diff.split(':').reverse());\n        });\n      }\n      const _this = this;\n      const isRelativeTime = this.args.forceIsBaseline || showBaseLineComparison || this.isRelativeTime;\n      const categoryField = isRelativeTime ? \"_diff\" : \"date\";\n      let model = this.args.selectedResource?.id > 0 ? this.args.selectedResource : this.args.data;\n      if (!this.args.forceIsBaseline && !model?.summary) return;\n\n      // Skip chart creation if container is hidden (0 width) — e.g. inactive tab\n      let el = document.getElementById(id);\n      if (!el || el.offsetWidth === 0) return;\n      let root = am5.Root.new(id);\n      root.setThemes([_Animated.default.new(root)]);\n      let chart = root.container.children.push(am5xy.XYChart.new(root, {\n        maxTooltipDistance: 0,\n        layout: root.verticalLayout\n      }));\n      chart.zoomOutButton.set(\"forceHidden\", true);\n      const categoryAxisType = isRelativeTime ? 'CategoryAxis' : 'CategoryDateAxis';\n      let xAxis = chart.xAxes.push(am5xy[categoryAxisType].new(root, {\n        marginTop: 15,\n        categoryField: categoryField,\n        baseInterval: {\n          timeUnit: \"second\",\n          count: 1\n        },\n        gridIntervals: [{\n          timeUnit: \"second\",\n          count: 30\n        }, {\n          timeUnit: \"minute\",\n          count: 1\n        }, {\n          timeUnit: \"minute\",\n          count: 5\n        }, {\n          timeUnit: \"minute\",\n          count: 10\n        }, {\n          timeUnit: \"minute\",\n          count: 15\n        }, {\n          timeUnit: \"minute\",\n          count: 30\n        }, {\n          timeUnit: \"hour\",\n          count: 1\n        }, {\n          timeUnit: \"hour\",\n          count: 3\n        }, {\n          timeUnit: \"hour\",\n          count: 6\n        }, {\n          timeUnit: \"hour\",\n          count: 12\n        }, {\n          timeUnit: \"day\",\n          count: 1\n        }, {\n          timeUnit: \"day\",\n          count: 3\n        }, {\n          timeUnit: \"day\",\n          count: 5\n        }],\n        layout: root.verticalLayout,\n        renderer: am5xy.AxisRendererX.new(root, {})\n      }));\n      xAxis.data.setAll(chartData);\n      let renderer = am5xy.AxisRendererY.new(root, {});\n      renderer.grid.template.set(\"strokeOpacity\", 0);\n      renderer.setAll({\n        strokeOpacity: 0,\n        opacity: 0\n      });\n      let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n        renderer\n      }));\n      yAxis.get(\"renderer\").labels.template.set(\"forceHidden\", true);\n      if (showHistory) {\n        let seriesDummy = chart.series.push(am5xy.ColumnSeries.new(root, {\n          xAxis: xAxis,\n          yAxis: yAxis,\n          valueYField: \"Testable-pf\",\n          categoryXField: categoryField,\n          clustered: false,\n          maskBullets: false\n        }));\n        seriesDummy.data.setAll(data);\n        seriesDummy.columns.template.setAll({\n          fill: am5.color(0xff0000),\n          opacity: 0,\n          height: 600,\n          width: am5.percent(100),\n          cursorOverStyle: 'pointer'\n        });\n        seriesDummy.columns.template.states.create('mouseHover', {\n          opacity: 0.1\n        });\n        seriesDummy.columns.template.states.create('mouseOut', {\n          opacity: 0\n        });\n        seriesDummy.columns.template.events.on('pointerover', ev => {\n          ev.target.states.applyAnimate('mouseHover');\n        });\n        seriesDummy.columns.template.events.on('pointerout', ev => {\n          ev.target.states.applyAnimate('mouseOut');\n        });\n        seriesDummy.columns.template.events.once('click', ev => {\n          if (ev.target.dataItem.dataContext.executionId) _this.router.transitionTo('loadTestResults', ev.target.dataItem.dataContext.executionId);\n        });\n      }\n      let yAxisArray = {};\n      _.forEach([...columnGraphs, ...lineGraphs], graph => {\n        let isLineChart = graph.type === 'line';\n        const seriesToUse = isLineChart ? 'LineSeries' : 'ColumnSeries';\n        let yAxis;\n        if (yAxisArray[graph.valueAxis.unit]) {\n          yAxis = yAxisArray[graph.valueAxis.unit];\n        } else {\n          let yRenderer = _amcharts2.default.getYRenderer(root, graph.valueAxis.fill, graph.valueAxis.opposite);\n          yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n            // we need all numbers in exact format, so we can implement our own label formatter\n            numberFormat: '###############',\n            min: graph.valueAxis.minimum,\n            max: graph.valueAxis.maximum,\n            renderer: yRenderer\n          }));\n          yRenderer.labels.template.adapters.add('text', this.labelFunction.bind(this, graph.valueAxis.unit));\n          yAxisArray[graph.valueAxis.unit] = yAxis;\n        }\n        if (graph.valueAxis.guides) {\n          let rangeDataItem = yAxis.makeDataItem({\n            value: graph.valueAxis.guides.value,\n            endValue: graph.valueAxis.guides.endValue\n          });\n          yAxis.createAxisRange(rangeDataItem);\n          rangeDataItem.get(\"axisFill\").setAll({\n            fill: graph.valueAxis.guides.fill,\n            visible: true\n          });\n        }\n        if (graph.valueAxis?.labelsEnabled === false) yAxis.get(\"renderer\").labels.template.set(\"forceHidden\", true);\n        if (!(this.args.isBaseline && this.args.forceIsBaseline && this.args.chartType !== 'combined')) {\n          let series = chart.series.push(am5xy[seriesToUse].new(root, {\n            name: graph.name,\n            fill: graph.fill,\n            stroke: !isLineChart && showBaseLineComparison && this.args.chartType === 'combined' ? lineColors[0] : graph.fill,\n            strokeWidth: graph.valueAxis.strokeWidth,\n            xAxis: xAxis,\n            yAxis: yAxis,\n            valueYField: graph.valueField,\n            categoryXField: categoryField,\n            maskBullets: false,\n            minBulletDistance: 15\n          }));\n          if (!isLineChart) {\n            series?.columns?.template?.setAll({\n              strokeWidth: showBaseLineComparison && this.args.chartType === 'combined' ? 2 : 0,\n              templateField: graph.colorField,\n              width: am5.percent(80)\n            });\n          } else {\n            series.bullets.push((root, series) => {\n              let circle = am5.Circle.new(root, {\n                radius: graph.bulletRadius,\n                fill: showBaseLineComparison && this.args.chartType === 'combined' ? lineColors[0] : series.get(\"fill\"),\n                stroke: series.get(\"fill\"),\n                strokeWidth: graph.bulletStrokeWidth\n              });\n              return am5.Bullet.new(root, {\n                sprite: circle\n              });\n            });\n          }\n          series.data.setAll(chartData);\n          series.set(\"tooltip\", this.getChartToolTip(root, showBaseLineComparison && this.args.chartType === 'combined' ? 'Current ' : ''));\n        }\n        if (showBaseLineComparison) {\n          let series2 = chart.series.push(am5xy[seriesToUse].new(root, {\n            name: graph.name,\n            fill: graph.fill,\n            stroke: !isLineChart && showBaseLineComparison && this.args.chartType === 'combined' ? lineColors[1] : graph.fill,\n            strokeWidth: graph.valueAxis.strokeWidth,\n            xAxis: xAxis,\n            yAxis: yAxis,\n            valueYField: graph.valueField + '-history',\n            categoryXField: categoryField,\n            maskBullets: false,\n            minBulletDistance: 15\n          }));\n          if (!isLineChart) {\n            series2?.columns?.template?.setAll({\n              strokeWidth: showBaseLineComparison && this.args.chartType === 'combined' ? 2 : 0,\n              templateField: graph.colorField,\n              width: am5.percent(80)\n            });\n          } else {\n            series2.bullets.push((root, series2) => {\n              let circle = am5.Circle.new(root, {\n                radius: graph.bulletRadius,\n                fill: showBaseLineComparison && this.args.chartType === 'combined' ? lineColors[1] : series2.get(\"fill\"),\n                stroke: series2.get(\"fill\"),\n                strokeWidth: graph.bulletStrokeWidth\n              });\n              return am5.Bullet.new(root, {\n                sprite: circle\n              });\n            });\n          }\n          series2.data.setAll(chartData);\n          series2.set(\"tooltip\", this.getChartToolTip(root, showBaseLineComparison && this.args.chartType === 'combined' ? 'Baseline ' : '', true));\n        }\n      });\n      let cursor = chart.set(\"cursor\", am5xy.XYCursor.new(root, {\n        xAxis: xAxis,\n        behavior: showHistory ? \"none\" : \"selectX\"\n      }));\n      cursor.lineY.setAll({\n        visible: false\n      }); // hide the cursor line on Y axes\n      cursor.lineX.setAll({\n        stroke: am5.color(0x000000),\n        strokeOpacity: 0.2\n      });\n      cursor.selection.setAll({\n        fill: am5.color(0x000055),\n        fillOpacity: 0.4\n      });\n      if (!showHistory) {\n        _this.doZoom(chart);\n        cursor.events.on(\"selectended\", function (ev) {\n          const downPositionX = xAxis.toAxisPosition(cursor.getPrivate(\"downPositionX\", 0));\n          const positionX = xAxis.toAxisPosition(cursor.getPrivate(\"positionX\", 0.5));\n          let startIndex = xAxis.axisPositionToIndex(downPositionX);\n          let endIndex = xAxis.axisPositionToIndex(positionX);\n          if (startIndex > endIndex) {\n            let tmp = startIndex;\n            startIndex = endIndex;\n            endIndex = tmp;\n          }\n          if (startIndex < 0) {\n            startIndex = 0;\n          } else if (startIndex >= data.length) {\n            startIndex = data.length - 1;\n          }\n          if (startIndex < 0) {\n            endIndex = 0;\n          } else if (endIndex >= data.length) {\n            endIndex = data.length - 1;\n          }\n          const zoomInfo = {\n            startTimestamp: startIndex !== -1 ? data[startIndex]?.intervalStart : null,\n            endTimestamp: endIndex !== -1 ? data[endIndex]?.intervalStart + data[endIndex]?.timespan : null,\n            isAll: startIndex === 0 && endIndex === data.length - 1\n          };\n          // if ( !_this.isDestroyed ) {\n          _this.updatingZoom = true;\n          _this.zoomInfo.update(zoomInfo);\n          _this.updatingZoom = false;\n          // }\n        });\n      }\n      if (showHistory) {\n        chart.children.unshift(am5.Label.new(root, {\n          text: _lib.default.displayPeriod(this.period) + ' Test History',\n          fontSize: 12,\n          fontWeight: \"600\",\n          textAlign: \"center\",\n          x: am5.percent(50),\n          centerX: am5.percent(50),\n          centerY: am5.percent(50)\n        }));\n      }\n      if (!this.args.showMetricValues) {\n        let legend = xAxis.children.push(am5.Legend.new(root, {\n          nameField: \"name\",\n          fillField: \"color\",\n          strokeField: \"stroke\",\n          strokeWidth: 4,\n          x: am5.percent(50),\n          centerX: am5.percent(50),\n          layout: root.gridLayout,\n          marginTop: 15,\n          cursorOverStyle: \"pointer\"\n        }));\n        const legendData = this.createLegend();\n        legend.data.setAll(legendData);\n        legend.eachChildren(item => {\n          item.events.on(\"click\", ev => {\n            if (ev.target.dataItem.dataContext.metric) {\n              (0, _object.set)(ev.target.dataItem.dataContext.metric, 'selected', !ev.target.dataItem.dataContext.metric.selected);\n            }\n          });\n        });\n        legend.markers.values.forEach(marker => {\n          const markerType = marker.dataItem.dataContext.markerType;\n          marker.children.values[0].adapters.add(\"cornerRadiusTL\", () => markerType !== 'line' ? 0 : 12);\n          marker.children.values[0].adapters.add(\"cornerRadiusTR\", () => markerType !== 'line' ? 0 : 12);\n          marker.children.values[0].adapters.add(\"cornerRadiusBL\", () => markerType !== 'line' ? 0 : 12);\n          marker.children.values[0].adapters.add(\"cornerRadiusBR\", () => markerType !== 'line' ? 0 : 12);\n        });\n        chart.legend = legend;\n      }\n      if (!this.zoomInfo.isAll) {\n        let button = chart.plotContainer.children.push(am5.Button.new(root, {\n          dx: 10,\n          cursorOverStyle: \"pointer\",\n          label: am5.Label.new(root, {\n            text: \"Zoom Out\",\n            fontSize: 12,\n            paddingTop: 1,\n            paddingRight: 2,\n            paddingBottom: 1,\n            paddingLeft: 2,\n            fill: am5.color(0x007bff)\n          })\n        }));\n        button.get(\"background\").setAll({\n          cornerRadiusTL: 3,\n          cornerRadiusTR: 3,\n          cornerRadiusBR: 3,\n          cornerRadiusBL: 3,\n          fill: am5.color(0xFFFFFF),\n          fillOpacity: 0.8,\n          stroke: am5.color(0x000000),\n          strokeOpacity: 0.2\n        });\n        button.get(\"background\").states.create(\"hover\", {}).setAll({\n          fill: am5.color(0x007bff),\n          fillOpacity: 0.2\n        });\n        button.get(\"background\").states.create(\"down\", {}).setAll({\n          fill: am5.color(0x007bff),\n          fillOpacity: 0.4\n        });\n        button.events.on(\"click\", () => {\n          _this.zoomOutAction();\n        });\n      }\n      this.chartData = chartData;\n      this.chartRoot = root;\n      _amcharts2.default.addExportOptions(root);\n      return chart;\n    }\n    prepareSummaryHistoryDataSource(summaryHistory) {\n      const failColorMetrics = this.getMetricsWithFailColor();\n      let showBaseLineComparison = !!this.args.isBaseline;\n      if (failColorMetrics.length > 0) {\n        return _.map(summaryHistory, summary => {\n          const answer = _.clone(summary);\n          _.forEach(failColorMetrics, metricInfo => {\n            const color = _.isBoolean(summary.executionSuccess) && !summary.executionSuccess ? metricInfo.metric.failColor : metricInfo.metric.color;\n            const colorObj = {\n              fill: color\n            };\n            if (!showBaseLineComparison) colorObj.stroke = color;\n            answer[metricInfo.colorKey] = colorObj;\n          });\n          return answer;\n        });\n      } else {\n        return summaryHistory;\n      }\n    }\n    getMetricsWithFailColor() {\n      const failMetrics = _.filter(this.currentMetrics, metric => {\n        return metric.useFailColor && metric.failColor;\n      });\n      return _.map(failMetrics, failMetric => {\n        return {\n          colorKey: this.toColorKey(failMetric),\n          metric: failMetric\n        };\n      });\n    }\n    getChartToolTip(root, prefix, isHistory) {\n      const _this = this;\n      let tooltip = _amcharts2.default.getToolTipObj(root);\n      let currentText = '';\n      tooltip.label.adapters.add(\"text\", () => currentText);\n      tooltip.events.on(\"dataitemchanged\", () => {\n        if (tooltip.dataItem?.dataContext) {\n          const data = tooltip.dataItem.dataContext;\n          currentText = this.balloonText(data, prefix, isHistory);\n        }\n      });\n      return tooltip;\n    }\n    createLegend() {\n      const isPrint = this.args.isPrint;\n      const answer = [];\n      _.forEach(this.currentMetrics, metric => {\n        if (!isPrint || metric.selected) {\n          const color = metric.color;\n          const gray = \"#c5ced4\";\n          answer.push({\n            color: metric.graphType === 'column' ? metric.selected ? color : gray : 'white',\n            name: _lib.default.stripHtml(metric.title),\n            markerType: metric.graphType === 'column' ? 'square' : 'line',\n            stroke: metric.selected ? color : gray,\n            metric: metric\n          });\n        }\n      });\n      return answer;\n    }\n    labelFunction(unit, value) {\n      if (unit === 'bytes') {\n        return _lib.default.printBytes(value);\n      }\n      if (unit === 'bytes/sec') {\n        return _lib.default.printBitRate(value);\n      }\n      return _lib.default.printMetricValue(value, unit);\n    }\n    invalidateChart(chart, data) {\n      if (_.isObject(chart)) {\n        if (_.isObject(this.chartRoot)) {\n          _amcharts2.default.checkEmptyData(this.chartRoot, chart, data);\n        }\n      }\n    }\n    toColorKey(metric) {\n      return _lib.default.toMetricKey(metric.namespace, metric.name) + '-color';\n    }\n    createValueAxes(metrics, chartType, utilizationWarningThreshold, bucketAggregator) {\n      let axes = {};\n      let metricToAxis = {};\n      let numAxes = 0;\n      _.forEach(metrics, metric => {\n        if (!metric.selected) {\n          return;\n        }\n        let key = _lib.default.toMetricKey(metric.namespace, metric.name);\n        let metricParts = _lib.default.splitMetricName(metric.name);\n        let units = metric.units;\n        if (!units || units === '%d') {\n          units = '';\n        }\n        let axis;\n        if (metricParts.isPercent) {\n          units = \"percent\";\n        }\n        axis = axes[units];\n        if (_.isUndefined(axis)) {\n          const isLeft = numAxes % 2 === 0;\n          axis = this.valueAxis(\"v\" + _.upperFirst(units), metric.color, metricParts.isPercent ? \"%\" : units, metric.hideAxis, isLeft, chartType, utilizationWarningThreshold, bucketAggregator);\n          axes[units] = axis;\n          numAxes++;\n        }\n        metricToAxis[key] = axis;\n      });\n      return {\n        byMetric: metricToAxis,\n        all: _.values(axes)\n      };\n    }\n    graphTitle(metric, typeAsTitle) {\n      let metricParts = _lib.default.splitMetricName(metric.name);\n      let type = _lib.default.camelCaseToTitleCase(metricParts.type);\n      let subtype = metricParts.subtype;\n      if (typeAsTitle || _.isEmpty(subtype) || metricParts.isPercent || metric.isMetered) {\n        return type;\n      } else if (subtype === 'total' || subtype === 'peak') {\n        return _.capitalize(subtype) + ' ' + type;\n      } else if (subtype.indexOf('p') === 0) {\n        return subtype.substring(1) + ' %tile';\n      } else {\n        return _.upperFirst(subtype);\n      }\n    }\n    valueAxis(id, color, units, hideAxis, isLeft, chartType, utilizationWarningThreshold, bucketAggregator) {\n      let axis = {\n        \"fill\": color,\n        \"strokeWidth\": 2,\n        \"opposite\": !isLeft,\n        \"unit\": units\n      };\n      if (units === \"%\" && chartType === \"Metered\" && _.isNumber(utilizationWarningThreshold) && bucketAggregator !== 'Peak') {\n        axis.guides = {\n          fill: \"rgba(255,128,0,0.05)\",\n          visible: true,\n          endValue: 100,\n          value: utilizationWarningThreshold\n        };\n        axis.minimum = 0;\n        axis.maximum = 100;\n      }\n      if (hideAxis || units === '__pf__') {\n        axis.labelsEnabled = false;\n      }\n      return axis;\n    }\n    balloonText(graphDataItem, prefix, isHistory) {\n      const metricDefs = this.args.metricDefs;\n      const scriptType = this.args.scriptType;\n      let text = \"[bold]At: [/]\";\n      if (this.args.showHistory) {\n        text += _lib.default.displayDateTime(graphDataItem.date);\n        if (_.isBoolean(graphDataItem.executionSuccess)) {\n          text += \"\\n[bold]Outcome[/]: \" + _amcharts2.default.getOutcome(graphDataItem.executionSuccess);\n        }\n      } else {\n        text += _lib.default.displayDateTime(graphDataItem.intervalStart) + ' (' + _lib.default.printGranularity(graphDataItem.granularity) + ')';\n      }\n      _.forEach(this.args.metrics, metric => {\n        if (metric.excludeFromBalloon) {\n          return;\n        }\n        if (text.length > 0) {\n          text += \"\\n\";\n        }\n        const label = metric.title || this.graphTitle(metric, this.args.typeAsTitle);\n        const metricText = _loadTest.default.printMetric(graphDataItem, metric.namespace, metric.name + (isHistory ? '-history' : ''), metric.units, false, metricDefs, false, null, scriptType);\n        text += \"[bold]\" + prefix + label + \"[/]: \" + metricText;\n      });\n      return _lib.default.stripHtml(text);\n    }\n    updateDataProvider(chart, newIntervals, data) {\n      if (chart?.series?.values?.length > 0 && newIntervals?.length) {\n        newIntervals.forEach(nI => {\n          let index = data.findIndex(dI => dI.intervalStart === nI.intervalStart);\n          let intervalType = 'update';\n          let intervalIndex;\n          if (index === -1) {\n            // item not found\n            if (data.length === 0 || nI.intervalStart > data[data.length - 1].intervalStart) {\n              // add to end if intervalStart is greater than last item\n              data.push(nI);\n              intervalType = 'push';\n            } else {\n              // find the correct index to insert\n              let l = data.length - 1;\n              while (l >= 0 && nI.intervalStart > data[l].intervalStart) {\n                l--;\n              }\n              data.splice(l, 0, nI);\n              intervalType = 'insert';\n              intervalIndex = l;\n            }\n          } else {\n            // Item found, update the existing object\n            data[index] = nI;\n            intervalType = 'set';\n            intervalIndex = index;\n          }\n          _.forEach(chart.series.values, item => {\n            if (intervalType === 'push') item.data.push(nI);else if (intervalType === 'insert') item.data.insertIndex(intervalIndex, nI);else if (intervalType === 'set') item.data.setIndex(intervalIndex, nI);\n          });\n          if (intervalType === 'push') chart.xAxes.values[0].data.push(nI);else if (intervalType === 'insert') chart.xAxes.values[0].data.insertIndex(intervalIndex, nI);else if (intervalType === 'set') chart.xAxes.values[0].data.setIndex(intervalIndex, nI);\n        });\n      }\n      this.invalidateChart(chart, data);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"dataCache\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"chart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chartData\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"currentMetrics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"modelIntervals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"updatingZoom\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"destructor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"destructor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"granularity\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"granularity\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"zoomOut\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"zoomOut\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"zoomOutAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"zoomOutAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDataUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refreshChart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshChart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"doZoom\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doZoom\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"makeChart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"makeChart\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricChartComponent);\n});","define(\"@testable/shared-ui/components/metric-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _loadTest, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"metricDetails\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n       {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Details: {{to-metric-name @metricDef @scriptType}}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          {{#if @metric}}\n            {{#if @metric.metricDefId}}\n              <div>\n                <a href=\"{{this.downloadUrl}}\" class=\"btn btn-sm btn-icon btn-circle pull-right text-primary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Download raw metrics that were captured during the test run\">\n                  <Ui::Icon @icon=\"fa fa-download\" />\n                </a>\n              </div>\n            {{/if}}\n            <table class=\"table\">\n              <thead>\n              <tr>\n                <th>{{if (eq @metric.metricType 'Histogram') 'Bucket' 'Aggregator'}}</th>\n                <th>Value{{if (eq @metric.metricType 'Histogram') ' (% of Total)'}}</th>\n              </tr>\n              </thead>\n              <tbody>\n              {{#each this.values as |bucket|}}\n                <tr>\n                  <td>{{bucket.key}}</td>\n                  <td>{{html-safe bucket.val}} {{html-safe (if (eq @metric.metricType 'Histogram')\n                                             (concat '(' bucket.percent ')'))}}</td>\n                </tr>\n              {{/each}}\n              </tbody>\n            </table>\n          {{else}}\n            No values found for this test run.\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"metricDetails\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Details: \\\"],[1,[28,[35,3],[[30,1],[30,2]],null]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[41,[30,3,[\\\"metricDefId\\\"]],[[[1,\\\"            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,3],[15,6,[29,[[30,0,[\\\"downloadUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle pull-right text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"title\\\",\\\"Download raw metrics that were captured during the test run\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,[52,[28,[37,12],[[30,3,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],\\\"Bucket\\\",\\\"Aggregator\\\"]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,\\\"Value\\\"],[1,[52,[28,[37,12],[[30,3,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],\\\" (% of Total)\\\"]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,15],[[28,[37,15],[[30,0,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,[30,4,[\\\"key\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,17],[[30,4,[\\\"val\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,17],[[52,[28,[37,12],[[30,3,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],[28,[37,18],[\\\"(\\\",[30,4,[\\\"percent\\\"]],\\\")\\\"],null]]],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          No values found for this test run.\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@metricDef\\\",\\\"@scriptType\\\",\\\"@metric\\\",\\\"bucket\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"to-metric-name\\\",\\\"button\\\",\\\"if\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"eq\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"html-safe\\\",\\\"concat\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metric-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let MetricDetailsModalComponent = _exports.default = (_class = class MetricDetailsModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n    }\n    get downloadUrl() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model, this.args.selectedResource);\n      path += '/results.csv';\n      const zoomInfo = this.zoomInfo;\n      const params = _lib.default.getZoomParams(zoomInfo);\n      params.metricDefId = this.args.metric?.metricDefId;\n      return _lib.default.toUrl(path, params);\n    }\n    get values() {\n      const zoomInfo = this.zoomInfo;\n      const showComparisons = !zoomInfo || zoomInfo.isAll;\n      const metricDefs = this.args.metricDefs;\n      const summary = this.args.summary;\n      const metric = this.args.metric;\n      const metricType = metric?.metricType;\n      const addPercents = metricType === 'Histogram';\n      const metricValueMap = metric?.metricValueMap;\n      const keys = _.filter(_.keys(metricValueMap).sort(), key => {\n        return key !== 'sum' && key !== 'let' && key !== 'sqdiffs';\n      });\n      if (metricType === 'Counter') {\n        keys.push('total');\n        if (keys.includes('peak')) {\n          keys.push('peakCountPerSec');\n        }\n        keys.push('countPerSec');\n      } else if (metricType === 'Metered') {\n        keys.push('peak');\n      }\n      let total = 0;\n      const answer = _.map(keys, key => {\n        const units = _lib.default.toMetricUnits(metric, key);\n        if (addPercents) {\n          total += Number(metricValueMap[key]);\n        }\n        return {\n          rawKey: key,\n          key: _loadTest.default.printAggregator(key, metricType) || key,\n          rawVal: metricValueMap ? _lib.default.toMetricValue(metricValueMap[key], metric) : null,\n          val: _loadTest.default.printMetric(summary, metric.namespace, metric.metricDef + '-' + key, units, false, metricDefs, showComparisons)\n        };\n      });\n      if (addPercents) {\n        _.forEach(answer, bucket => {\n          bucket.percent = _lib.default.printPercent(bucket.rawVal / total);\n          if (summary && summary.comparisons && summary.comparisons[metric.namespace]) {\n            const percentChange = summary.comparisons[metric.namespace][metric.metricDef + '-' + bucket.key + '-percent'];\n            if (percentChange) {\n              bucket.percent += _lib.default.printChange(percentChange);\n            }\n          }\n        });\n      }\n      return answer;\n    }\n    didInsert() {\n      $('#metricDetails').on('hidden.bs.modal', () => {\n        this.args.modalClosed();\n      });\n      $('#metricDetails').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricDetailsModalComponent);\n});","define(\"@testable/shared-ui/components/metric-history-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"metricHistory\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{html-safe @metric.title}} History</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <SparklineChart @id={{concat @metric.name '-modal-' @regionName}}\n                          @summaries={{@summaries}}\n                          @namespace={{@metric.namespace}}\n                          @metric={{@metric.name}} />\n          <table class=\"table\">\n            <thead>\n            <tr>\n              <th>Test Run At</th>\n              <th>\n                {{html-safe @metric.title}}\n              </th>\n            </tr>\n            </thead>\n            <tbody>\n            {{#each this.reverseSummaries as |summary index|}}\n              <tr>\n                <td>\n                  <a {{on \"click\" (fn this.transitionTo \"loadTestResults\" summary.executionId)}} role=\"button\">{{print-datetime\n                          summary.createdAt}}</a>\n                </td>\n                <td>{{html-safe (print-metric summary @metric.namespace @metric.name @metric.units false @metricDefs null null @scriptType)}}</td>\n              </tr>\n            {{/each}}\n            </tbody>\n          </table>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"metricHistory\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[28,[35,3],[[30,1,[\\\"title\\\"]]],null]],[1,\\\" History\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@id\\\",\\\"@summaries\\\",\\\"@namespace\\\",\\\"@metric\\\"],[[28,[37,6],[[30,1,[\\\"name\\\"]],\\\"-modal-\\\",[30,2]],null],[30,3],[30,1,[\\\"namespace\\\"]],[30,1,[\\\"name\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"Test Run At\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[35,3],[[30,1,[\\\"title\\\"]]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"reverseSummaries\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,16],[\\\"click\\\",[28,[37,17],[[30,0,[\\\"transitionTo\\\"]],\\\"loadTestResults\\\",[30,4,[\\\"executionId\\\"]]],null]],null],[12],[1,[28,[35,18],[[30,4,[\\\"createdAt\\\"]]],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,3],[[28,[37,19],[[30,4],[30,1,[\\\"namespace\\\"]],[30,1,[\\\"name\\\"]],[30,1,[\\\"units\\\"]],false,[30,6],null,null,[30,7]],null]],null]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[4,5]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@metric\\\",\\\"@regionName\\\",\\\"@summaries\\\",\\\"summary\\\",\\\"index\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"html-safe\\\",\\\"button\\\",\\\"sparkline-chart\\\",\\\"concat\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"print-datetime\\\",\\\"print-metric\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metric-history-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let MetricHistoryModalComponent = _exports.default = (_class = class MetricHistoryModalComponent extends _component2.default {\n    transitionTo(path, id) {\n      $('#metricHistory').modal('hide');\n      this.router.transitionTo(path, id);\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"reverseSummaries\", _descriptor3, this);\n      if (_.isArray(this.args.summaries)) {\n        this.reverseSummaries = [...this.args.summaries].reverse();\n      }\n    }\n    didInsert() {\n      const _this = this;\n      $('#metricHistory').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#metricHistory').on('shown.bs.modal', function () {\n        _this.EventBus.publish(_this.args.metric.name + '-modal-' + _this.args.regionName + '.invalidate');\n      });\n      $('#metricHistory').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"reverseSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"transitionTo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"transitionTo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricHistoryModalComponent);\n});","define(\"@testable/shared-ui/components/metric-picker\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex flex-row align-items-baseline align-items-md-center flex-wrap form-inline\"\n    {{did-update this.onMetricChanged @metric}}\n    {{did-update this.onNamespaceChanged @namespace}}\n    {{did-update this.onIsPercentageOrCumulativeChanged this.isPercentage this.isCumulative}}\n    {{did-update this.onFailColorChange @columnConfig.useFailColor}}\n    ...attributes>\n  <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\">\n    <Ui::PSelect @options={{this.groupedMetricDefOptions}} @disabled={{@isReadOnly}} @selected={{this.metricDef}} @placeholder=\"Metric...\"\n             @searchEnabled={{true}} @searchField=\"displayName\" @onChange={{this.metricChosen}} as |metricDefOpt|>\n      {{metricDefOpt.displayName}}\n    </Ui::PSelect>\n    <a target=\"_blank\" href=\"https://docs.testable.io/guides/metrics.html\" rel=\"noreferrer noopener\">\n      <Ui::Icon @icon=\"fa fa-question-circle\" class=\"m-l-5 m-r-5\"/></a>\n    <Input class=\"hidden\" disabled={{true}} @value={{this.metricDef.name}} data-parsley-required=\"true\"\n           data-parsley-required-message=\"Metric must be specified.\"\n           data-parsley-errors-container={{concat \"#\" @errorsElementId}} />\n  </div>\n  \n  {{#if (and (is-empty @metricType) this.metricDef)}}\n    {{#if this.showAggregator}}\n      <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\">\n        <Ui::PSelect @options={{this.aggregators}} @disabled={{@isReadOnly}} @selected={{this.aggregator}} @placeholder=\"Aggregator...\"\n                 @searchField=\"name\" @onChange={{this.aggregatorUpdated}} as |choice|>\n          {{choice.name}}\n        </Ui::PSelect>\n        <Input class=\"hidden\" disabled={{true}} @value={{this.aggregator.name}} data-parsley-required=\"true\"\n               data-parsley-required-message=\"Aggregator must be specified.\"\n               data-parsley-errors-container={{concat \"#\" @errorsElementId}} />\n      </div>\n    {{/if}}\n    {{#if (eq this.aggregator.key 'other')}}\n      <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\">\n        {{#if (eq this.metricDef.metricType 'Timing')}}\n          <Input @type=\"number\" placeholder=\"%-ile...\" class=\"form-control width-75\" @value={{this.otherAggregator}}\n                 disabled={{@isReadOnly}}\n                 data-parsley-required={{true}} data-parsley-required-message=\"%-ile must be specified.\"\n                 data-parsley-errors-container={{concat \"#\" @errorsElementId}} {{on \"change\" this.otherAggregatorUpdated}} />\n        {{else}}\n          <Input @type=\"text\" placeholder=\"Bucket...\" class=\"form-control width-75\" @value={{this.otherAggregator}}\n                 disabled={{@isReadOnly}}\n                 data-parsley-required={{true}} data-parsley-required-message=\"Bucket must be specified.\"\n                 data-parsley-errors-container={{concat \"#\" @errorsElementId}} {{on \"change\" this.otherAggregatorUpdated}} />\n        {{/if}}\n      </div>\n    {{/if}}\n    {{#if (and (eq this.metricDef.metricType 'Histogram') @showCumulativeCheckbox)}}\n      <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\">\n        <label class=\"normal\">\n          <Input @type=\"checkbox\" @checked={{this.isCumulative}} class=\"m-r-5\" disabled={{@isReadOnly}} /> Cumulative <Ui::InfoIcon\n              @content=\"The cumulative sum across all intervals up to and including the current one for the chosen bucket.\" />\n        </label>\n      </div>\n    {{/if}}\n  {{/if}}\n  \n  {{#if (or @forcePercentage (and (is-empty @metricType) this.metricDef this.showPercentageCheckbox) )}}\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\">\n      <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{this.isPercentage}} class=\"m-r-5\" disabled={{@isReadOnly}} />\n        % of {{if (eq this.metricDef.metricType 'Counter') 'reqs' 'total'}} <Ui::InfoIcon\n              @content=\"The selected bucket's percentage of the total sum across all buckets.\" @isHtml={{true}} />\n      </label>\n    </div>\n  {{/if}}\n  \n  {{#if @showGraphType}}\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\">\n      <Ui::PSelect @options={{this.GraphTypes}} @disabled={{@isReadOnly}} @selected={{this.graphType}} @placeholder=\"Graph Type...\"\n               @onChange={{this.graphTypeUpdated}} as |choice|>\n        {{capitalize-text choice}}\n      </Ui::PSelect>\n    </div>\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-10\">\n      <Ui::SpectrumColorPicker @color={{this.color}}\n                           @preferredFormat=\"hex\"\n                           @showInput={{true}}\n                           @showPalette={{true}}\n                           @showPaletteOnly={{true}}\n                           @togglePaletteOnly={{true}}\n                           @palette={{this.Palette}}\n                           @allowEmpty={{true}}\n                           @showAlpha={{true}}\n                           @showInitial={{true}}\n                           @clickoutFiresChange={{true}}\n                           @onChange={{this.colorUpdated}} />\n    </div>\n    {{#if @columnConfig.useFailColor}}\n      <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-10\">\n        <Ui::SpectrumColorPicker @color={{this.failColor}}\n                             @preferredFormat=\"hex\"\n                             @showInput={{true}}\n                             @showPalette={{true}}\n                             @showPaletteOnly={{true}}\n                             @togglePaletteOnly={{true}}\n                             @palette={{this.Palette}}\n                             @allowEmpty={{true}}\n                             @showAlpha={{true}}\n                             @showInitial={{true}}\n                             @clickoutFiresChange={{true}}\n                             @onChange={{this.failColorUpdated}} />\n      </div>\n    {{/if}}\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"d-flex flex-row align-items-baseline align-items-md-center flex-wrap form-inline\\\"],[17,1],[4,[38,1],[[30,0,[\\\"onMetricChanged\\\"]],[30,2]],null],[4,[38,1],[[30,0,[\\\"onNamespaceChanged\\\"]],[30,3]],null],[4,[38,1],[[30,0,[\\\"onIsPercentageOrCumulativeChanged\\\"]],[30,0,[\\\"isPercentage\\\"]],[30,0,[\\\"isCumulative\\\"]]],null],[4,[38,1],[[30,0,[\\\"onFailColorChange\\\"]],[30,4,[\\\"useFailColor\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@disabled\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@onChange\\\"],[[30,0,[\\\"groupedMetricDefOptions\\\"]],[30,5],[30,0,[\\\"metricDef\\\"]],\\\"Metric...\\\",true,\\\"displayName\\\",[30,0,[\\\"metricChosen\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[1,[30,6,[\\\"displayName\\\"]]],[1,\\\"\\\\n  \\\"]],[6]]]]],[1,\\\"\\\\n  \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/guides/metrics.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,0,\\\"m-l-5 m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-question-circle\\\"]],null],[13],[1,\\\"\\\\n  \\\"],[8,[39,5],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Metric must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,6],[\\\"#\\\",[30,7]],null]]],[[\\\"@value\\\"],[[30,0,[\\\"metricDef\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,8],[[28,[37,9],[[30,8]],null],[30,0,[\\\"metricDef\\\"]]],null],[[[41,[30,0,[\\\"showAggregator\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@disabled\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@searchField\\\",\\\"@onChange\\\"],[[30,0,[\\\"aggregators\\\"]],[30,5],[30,0,[\\\"aggregator\\\"]],\\\"Aggregator...\\\",\\\"name\\\",[30,0,[\\\"aggregatorUpdated\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[9]]]]],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Aggregator must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,6],[\\\"#\\\",[30,7]],null]]],[[\\\"@value\\\"],[[30,0,[\\\"aggregator\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,10],[[30,0,[\\\"aggregator\\\",\\\"key\\\"]],\\\"other\\\"],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-0 m-r-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"metricDef\\\",\\\"metricType\\\"]],\\\"Timing\\\"],null],[[[1,\\\"        \\\"],[8,[39,5],[[24,\\\"placeholder\\\",\\\"%-ile...\\\"],[24,0,\\\"form-control width-75\\\"],[16,\\\"disabled\\\",[30,5]],[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"%-ile must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,6],[\\\"#\\\",[30,7]],null]],[4,[38,11],[\\\"change\\\",[30,0,[\\\"otherAggregatorUpdated\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"otherAggregator\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,5],[[24,\\\"placeholder\\\",\\\"Bucket...\\\"],[24,0,\\\"form-control width-75\\\"],[16,\\\"disabled\\\",[30,5]],[16,\\\"data-parsley-required\\\",true],[24,\\\"data-parsley-required-message\\\",\\\"Bucket must be specified.\\\"],[16,\\\"data-parsley-errors-container\\\",[28,[37,6],[\\\"#\\\",[30,7]],null]],[4,[38,11],[\\\"change\\\",[30,0,[\\\"otherAggregatorUpdated\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"otherAggregator\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[28,[37,10],[[30,0,[\\\"metricDef\\\",\\\"metricType\\\"]],\\\"Histogram\\\"],null],[30,10]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,0,\\\"m-r-5\\\"],[16,\\\"disabled\\\",[30,5]]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"isCumulative\\\"]]]],null],[1,\\\" Cumulative \\\"],[8,[39,13],null,[[\\\"@content\\\"],[\\\"The cumulative sum across all intervals up to and including the current one for the chosen bucket.\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,11],[28,[37,8],[[28,[37,9],[[30,8]],null],[30,0,[\\\"metricDef\\\"]],[30,0,[\\\"showPercentageCheckbox\\\"]]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"m-r-5\\\"],[16,\\\"disabled\\\",[30,5]]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"isPercentage\\\"]]]],null],[1,\\\"\\\\n      % of \\\"],[1,[52,[28,[37,10],[[30,0,[\\\"metricDef\\\",\\\"metricType\\\"]],\\\"Counter\\\"],null],\\\"reqs\\\",\\\"total\\\"]],[1,\\\" \\\"],[8,[39,13],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"The selected bucket's percentage of the total sum across all buckets.\\\",true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,12],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-5\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@disabled\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"GraphTypes\\\"]],[30,5],[30,0,[\\\"graphType\\\"]],\\\"Graph Type...\\\",[30,0,[\\\"graphTypeUpdated\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[28,[35,15],[[30,13]],null]],[1,\\\"\\\\n    \\\"]],[13]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-10\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,16],null,[[\\\"@color\\\",\\\"@preferredFormat\\\",\\\"@showInput\\\",\\\"@showPalette\\\",\\\"@showPaletteOnly\\\",\\\"@togglePaletteOnly\\\",\\\"@palette\\\",\\\"@allowEmpty\\\",\\\"@showAlpha\\\",\\\"@showInitial\\\",\\\"@clickoutFiresChange\\\",\\\"@onChange\\\"],[[30,0,[\\\"color\\\"]],\\\"hex\\\",true,true,true,true,[30,0,[\\\"Palette\\\"]],true,true,true,true,[30,0,[\\\"colorUpdated\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"useFailColor\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-l-10\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,16],null,[[\\\"@color\\\",\\\"@preferredFormat\\\",\\\"@showInput\\\",\\\"@showPalette\\\",\\\"@showPaletteOnly\\\",\\\"@togglePaletteOnly\\\",\\\"@palette\\\",\\\"@allowEmpty\\\",\\\"@showAlpha\\\",\\\"@showInitial\\\",\\\"@clickoutFiresChange\\\",\\\"@onChange\\\"],[[30,0,[\\\"failColor\\\"]],\\\"hex\\\",true,true,true,true,[30,0,[\\\"Palette\\\"]],true,true,true,true,[30,0,[\\\"failColorUpdated\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@metric\\\",\\\"@namespace\\\",\\\"@columnConfig\\\",\\\"@isReadOnly\\\",\\\"metricDefOpt\\\",\\\"@errorsElementId\\\",\\\"@metricType\\\",\\\"choice\\\",\\\"@showCumulativeCheckbox\\\",\\\"@forcePercentage\\\",\\\"@showGraphType\\\",\\\"choice\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"ui/p-select\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"concat\\\",\\\"if\\\",\\\"and\\\",\\\"is-empty\\\",\\\"eq\\\",\\\"on\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"or\\\",\\\"capitalize-text\\\",\\\"ui/spectrum-color-picker\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metric-picker.hbs\",\n    \"isStrictMode\": false\n  });\n  const PercentSuffix = '-percent';\n  const TotalSuffix = '-total';\n  const MetricsWithoutAggregator = ['concurrentClients', 'maxConcurrentClients', 'actualConcurrentClients', 'requestsPerSec', 'peakRequestsPerSec', 'throughput'];\n  const Palette = [[\"#1702FC\", \"#FF6600\", \"#3880BA\", \"#0C5AA6\"], [\"#00AB6F\", \"#CCFFFF\", \"#FFCCCC\", \"#E3FFCC\"]];\n  let MetricPicker = _exports.default = (_dec = (0, _object.computed)('args.showCounterTotal', 'args.showCounterOverallAggregators', 'metricDef.metricType', 'metricDef.name'), _dec2 = (0, _object.computed)('aggregator.key', 'metricDef'), _dec3 = (0, _object.computed)('args.metricDefs', 'args.metricType'), _dec4 = (0, _object.computed)('metricDefOptions', 'args.scriptType'), _dec5 = (0, _object.computed)('args.metricDefs', 'metricName', 'namespace'), _dec6 = (0, _object.computed)('metricDef', 'metricResult', 'args.percentiles', 'args.showCounterTotal'), _dec7 = (0, _object.computed)('metricName', 'args.summary'), _class = class MetricPicker extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"Palette\", Palette);\n      _defineProperty(this, \"GraphTypes\", ['line', 'column']);\n      _initializerDefineProperty(this, \"namespace\", _descriptor, this);\n      _initializerDefineProperty(this, \"metricName\", _descriptor2, this);\n      _initializerDefineProperty(this, \"aggregator\", _descriptor3, this);\n      _initializerDefineProperty(this, \"otherAggregator\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isPercentage\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isCumulative\", _descriptor6, this);\n      _initializerDefineProperty(this, \"graphType\", _descriptor7, this);\n      _initializerDefineProperty(this, \"color\", _descriptor8, this);\n      _initializerDefineProperty(this, \"failColor\", _descriptor9, this);\n      _defineProperty(this, \"isUpdating\", false);\n      _defineProperty(this, \"_prevIsPercentage\", undefined);\n      _defineProperty(this, \"_prevIsCumulative\", undefined);\n      this.namespace = this.args.namespace;\n      this._initMetricFields();\n      this._initFailColor();\n      this._prevIsPercentage = this.isPercentage;\n      this._prevIsCumulative = this.isCumulative;\n    }\n    get showAggregator() {\n      let showCounterTotal = this.args.showCounterTotal;\n      let showCounterOverallAggregators = this.args.showCounterOverallAggregators;\n      let name = this.metricDef?.name;\n      let metricType = this.metricDef?.metricType;\n      return metricType !== 'Counter' || (showCounterTotal || showCounterOverallAggregators) && !MetricsWithoutAggregator.includes(name);\n    }\n    get showPercentageCheckbox() {\n      let metricDef = this.metricDef;\n      let aggregator = this.aggregator?.key;\n      return metricDef?.metricType === 'Histogram' && aggregator && aggregator !== 'total';\n    }\n    get metricDefOptions() {\n      const metricType = this.args.metricType;\n      const metricDefs = this.args.metricDefs;\n      if (metricType) {\n        return _.filter(metricDefs, metricDef => {\n          return metricDef.metricType === metricType;\n        });\n      } else {\n        return metricDefs;\n      }\n    }\n    get groupedMetricDefOptions() {\n      const scriptType = this.args.scriptType;\n      const options = this.metricDefOptions;\n      const grouped = {};\n      _.forEach(options, metricDef => {\n        (0, _object.set)(metricDef, 'displayName', _loadTest.default.toMetricName(metricDef, scriptType));\n        let ns = grouped[metricDef.namespace];\n        if (!ns) {\n          ns = [];\n          grouped[metricDef.namespace] = ns;\n        }\n        ns.push(metricDef);\n      });\n      const answer = [];\n      _.forEach(grouped, (metricDefs, ns) => {\n        answer.push({\n          groupName: ns,\n          options: metricDefs\n        });\n      });\n      return answer;\n    }\n    get metricDef() {\n      const name = this.metricName;\n      const ns = this.namespace;\n      return _.find(this.args.metricDefs, metricDef => {\n        return metricDef.namespace === ns && metricDef.name === name;\n      });\n    }\n    addAggregator(answer, metricDef, key, name) {\n      if (!metricDef.excludedAggregators || !metricDef.excludedAggregators.includes(key)) {\n        answer.push({\n          key: key,\n          name: name\n        });\n      }\n    }\n    get aggregators() {\n      let metricDef = this.metricDef;\n      let metricResult = this.metricResult;\n      let answer = [];\n      if (metricDef) {\n        switch (metricDef.metricType) {\n          case 'Counter':\n            this.addAggregator(answer, metricDef, 'count', 'Count');\n            if (this.args.showCounterTotal) {\n              this.addAggregator(answer, metricDef, 'total', 'Total');\n            }\n            this.addAggregator(answer, metricDef, 'peak', 'Peak In Interval');\n            this.addAggregator(answer, metricDef, 'peakCountPerSec', 'Peak Rate');\n            this.addAggregator(answer, metricDef, 'countPerSec', 'Average Rate');\n            break;\n          case 'Timing':\n            {\n              let percentiles = _.isString(this.args.percentiles) ? this.args.percentiles.split(',') : [];\n              answer.push({\n                key: 'p50',\n                name: 'Median'\n              }, {\n                key: 'mean',\n                name: 'Average'\n              });\n              _.forEach(percentiles, percentile => {\n                if (Number(percentile) !== 50) {\n                  answer.push({\n                    key: 'p' + percentile,\n                    name: percentile + ' %-ile'\n                  });\n                }\n              });\n              if (metricResult && metricResult.metricValueMap) {\n                _.forEach(_.keys(metricResult.metricValueMap), key => {\n                  if (key.charAt(0) === 'p' && !percentiles.includes(key.substring(1))) {\n                    answer.push({\n                      key: key,\n                      name: key.substring(1) + ' %-ile'\n                    });\n                  }\n                });\n              }\n              answer.push({\n                key: 'other',\n                name: 'Other %-ile'\n              }, {\n                key: 'min',\n                name: 'Min'\n              }, {\n                key: 'max',\n                name: 'Max'\n              }, {\n                key: 'count',\n                name: 'Count'\n              }, {\n                key: 'sd',\n                name: 'Std Dev'\n              }, {\n                key: 'var',\n                name: 'Variance'\n              });\n              break;\n            }\n          case 'Histogram':\n            {\n              answer.push({\n                key: 'total',\n                name: 'Total'\n              }, {\n                key: 'other',\n                name: 'Specify Bucket'\n              });\n              let buckets = [];\n              if (metricResult && metricResult.metricValueMap) {\n                buckets = _.keys(metricResult.metricValueMap);\n              }\n              if (metricDef.defaultBuckets) {\n                buckets = _.union(buckets, metricDef.defaultBuckets);\n              }\n              _.forEach(buckets, bucket => {\n                answer.push({\n                  key: bucket,\n                  name: bucket\n                });\n              });\n              break;\n            }\n          case 'Metered':\n            answer.push({\n              key: 'peak',\n              name: 'Peak Total'\n            }, {\n              key: 'largest',\n              name: 'Peak Test Runner'\n            });\n            break;\n        }\n      }\n      return answer;\n    }\n    onMetricChanged() {\n      this._initMetricFields();\n    }\n    onNamespaceChanged() {\n      this.namespace = this.args.namespace;\n    }\n    _initMetricFields() {\n      this.isUpdating = true;\n      let metric = this.args.metric;\n      if (metric) {\n        let metricDetails = _loadTest.default.parseMetric(metric);\n        this.isPercentage = metricDetails.isPercentage;\n        this.isCumulative = metricDetails.isCumulative;\n        this.metricName = metricDetails.name;\n        let metricType = this.metricDef?.metricType;\n        if (metricDetails.key) {\n          let aggregator = this.findAggregator(metricDetails.key) || this.findAggregator('other');\n          this.aggregator = aggregator;\n          if (aggregator && aggregator.key === 'other') {\n            this.otherAggregator = metricType === 'Timing' ? Number(metricDetails.key.substring(1)) : metricDetails.key;\n          }\n        } else if (metricType === 'Counter') {\n          this.aggregator = this.findAggregator('count');\n        }\n        if (this.args.showGraphType) {\n          this.graphType = this.args.columnConfig?.graphType;\n          this.color = this.args.columnConfig?.color;\n        }\n      }\n      this._prevIsPercentage = this.isPercentage;\n      this._prevIsCumulative = this.isCumulative;\n      this.isUpdating = false;\n    }\n    onFailColorChange() {\n      this._initFailColor();\n    }\n    _initFailColor() {\n      if (this.args.columnConfig?.useFailColor) {\n        this.failColor = this.args.columnConfig?.failColor;\n      }\n    }\n    findAggregator(key) {\n      return _.find(this.aggregators, candidate => {\n        return candidate.key === key;\n      });\n    }\n    toMetricText() {\n      let metricType = this.metricDef?.metricType;\n      let name = this.metricName;\n      let aggregator = this.aggregator?.key;\n      let isPercentage = this.isPercentage && (this.showPercentageCheckbox || this.args.forcePercentage);\n      let isCumulative = this.isCumulative && metricType === 'Histogram';\n      let otherAggregator = this.otherAggregator;\n      let result = name;\n      if (aggregator && aggregator !== 'other' && (metricType !== 'Counter' || aggregator !== 'count')) {\n        result += '-' + aggregator;\n      } else if (aggregator && otherAggregator && (metricType !== 'Counter' || aggregator !== 'count')) {\n        result += '-' + (metricType === 'Timing' ? 'p' : '') + otherAggregator;\n      }\n      if (isCumulative) {\n        result += TotalSuffix;\n      }\n      if (isPercentage) {\n        result += PercentSuffix;\n      }\n      return result;\n    }\n    get metricResult() {\n      let name = this.metricName;\n      let summary = this.args.summary;\n      if (summary) {\n        return _.find(summary.metrics, metricResult => {\n          return metricResult.metricDef === name;\n        });\n      }\n      return null;\n    }\n    onIsPercentageOrCumulativeChanged() {\n      if (this.isPercentage === this._prevIsPercentage && this.isCumulative === this._prevIsCumulative) {\n        return;\n      }\n      this._prevIsPercentage = this.isPercentage;\n      this._prevIsCumulative = this.isCumulative;\n      this.sendMetricUpdated();\n    }\n    colorUpdated(color) {\n      this.color = color;\n      this.sendMetricUpdated();\n    }\n    failColorUpdated(color) {\n      this.failColor = color;\n      this.sendMetricUpdated();\n    }\n    sendMetricUpdated() {\n      if (!this.isUpdating) {\n        this.args.metricUpdated({\n          metricDef: this.metricDef,\n          metric: this.toMetricText(),\n          graphType: this.graphType,\n          color: this.color,\n          failColor: this.failColor\n        });\n      }\n    }\n    aggregatorUpdated(newVal) {\n      this.aggregator = newVal;\n      this.sendMetricUpdated();\n    }\n    graphTypeUpdated(newVal) {\n      this.graphType = newVal;\n      if (newVal === 'line') {\n        (0, _object.set)(this.args.columnConfig, 'useFailColor', false);\n      }\n      this.sendMetricUpdated();\n    }\n    metricChosen(metricDef) {\n      this.namespace = metricDef.namespace;\n      this.metricName = metricDef.name;\n      this.aggregator = '';\n      this.otherAggregator = '';\n      this.isCumulative = false;\n      this.isPercentage = false;\n      this._prevIsPercentage = this.isPercentage;\n      this._prevIsCumulative = this.isCumulative;\n      this.sendMetricUpdated();\n    }\n    otherAggregatorUpdated() {\n      this.sendMetricUpdated();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"namespace\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"metricName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"aggregator\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"otherAggregator\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isPercentage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isCumulative\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"graphType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"color\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"failColor\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showAggregator\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"showAggregator\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showPercentageCheckbox\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"showPercentageCheckbox\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDefOptions\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDefOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"groupedMetricDefOptions\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"groupedMetricDefOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDef\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDef\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"aggregators\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"aggregators\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMetricChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetricChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onNamespaceChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onNamespaceChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFailColorChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFailColorChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricResult\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"metricResult\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onIsPercentageOrCumulativeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onIsPercentageOrCumulativeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"colorUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"colorUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"failColorUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"failColorUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"aggregatorUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"aggregatorUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"graphTypeUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"graphTypeUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricChosen\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricChosen\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"otherAggregatorUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"otherAggregatorUpdated\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricPicker);\n});","define(\"@testable/shared-ui/components/metrics-table\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"table-responsive p-b-20\" {{did-insert this.didInsert}}>\n    <table id=\"{{@prefix}}Table\" class=\"table table-bordered table-separate\">\n      <tbody>\n      {{#each this.metricsWithRows as |metrics|}}\n        <tr>\n          {{#each metrics as |metric|}}\n            <td class=\"text-center\" style={{to-metric-style metric.selected metric.color}}\n                data-namespace=\"{{metric.namespace}}\" data-metric=\"{{metric.name}}\">\n              <div style={{html-safe \"position: relative;\"}}>\n                <div>{{metric.title}}</div>\n                <div class=\"summary-content-small\">\n                  {{#if (and @isBaseline @baselineExecutionSummary)}} <span class=\"line-base line-current\">Current:</span> {{/if}}\n                  {{html-safe (print-metric @summary metric.namespace metric.name metric.units true @metricDefs\n                                      (or (not this.zoomInfo) this.zoomInfo.isAll) @utilizationWarningThreshold @scriptType)}}\n  \n                  {{#if (and @isBaseline @baselineExecutionSummary)}}\n                    <br/><span class=\"line-base line-baseline\">Baseline: </span>\n                    {{html-safe (print-metric @baselineExecutionSummary metric.namespace metric.name metric.units true @metricDefs\n                                        false false @scriptType)}}\n                  {{/if}}\n                  {{#if (has-aggregators metric.namespace metric.name @metricDefs)}}\n                    <div class=\"subtext inline-text no-print\"><a {{on \"click\" (fn this.metricDetailsSelected metric)}} role=\"button\">\n                      <Ui::Icon @noRender={{true}} @icon=\"fa fa-search\" /></a></div>\n                  {{/if}}\n                  {{#if (and (or (not this.zoomInfo) this.zoomInfo.isAll) (gt @summaryHistory.length 1))}}\n                    <div class=\"subtext inline-text no-print\"><a {{on \"click\" (fn this.metricHistorySelected metric)}} role=\"button\">\n                      <Ui::Icon @noRender={{true}} @icon=\"fa fa-history\" /></a></div>\n                  {{/if}}\n                </div>\n                {{#if (and @model.completed (or (not this.zoomInfo) this.zoomInfo.isAll) (gt @summaryHistory.length 1))}}\n                  <div class=\"no-print\">\n                    <a {{on \"click\" (fn this.metricHistorySelected metric)}} role=\"button\">\n                      <SparklineChart @id={{concat @prefix metric.name '-' @regionName @widgetId}}\n                                      @summaries={{@summaryHistory}}\n                                      @namespace={{metric.namespace}}\n                                      @metric={{metric.name}} />\n                    </a>\n                  </div>\n                {{/if}}\n              </div>\n            </td>\n          {{/each}}\n        </tr>\n      {{/each}}\n      </tbody>\n    </table>\n  </div>\n  \n  {{#if this.showMetricHistoryModal}}\n    <MetricHistoryModal @summaries={{@summaryHistory}}\n                        @metric={{this.selectedMetric}}\n                        @metricDefs={{@metricDefs}}\n                        @scriptType={{@scriptType}}\n                        @regionName={{@regionName}}\n                        @modalClosed={{this.metricHistoryModalClosed}}\n    />\n  {{/if}}\n  \n  {{#if this.showMetricDetailsModal}}\n    <MetricDetailsModal @summary={{@summary}}\n                        @metricDef={{this.selectedMetric}}\n                        @metric={{find-metric @summary this.selectedMetric.namespace this.selectedMetric.name}}\n                        @metricDefs={{@metricDefs}}\n                        @regionName={{@regionName}}\n                        @model={{@model}}\n                        @overallModel={{@overallModel}}\n                        @selectedResource={{@selectedResource}}\n                        @scriptType={{@scriptType}}\n                        @modalClosed={{this.metricDetailsModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"table-responsive p-b-20\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"table\\\"],[15,1,[29,[[30,1],\\\"Table\\\"]]],[14,0,\\\"table table-bordered table-separate\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,0,[\\\"metricsWithRows\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,2]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[15,5,[28,[37,8],[[30,3,[\\\"selected\\\"]],[30,3,[\\\"color\\\"]]],null]],[15,\\\"data-namespace\\\",[29,[[30,3,[\\\"namespace\\\"]]]]],[15,\\\"data-metric\\\",[29,[[30,3,[\\\"name\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,5,[28,[37,9],[\\\"position: relative;\\\"],null]],[12],[1,\\\"\\\\n              \\\"],[10,0],[12],[1,[30,3,[\\\"title\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"summary-content-small\\\"],[12],[1,\\\"\\\\n                \\\"],[41,[28,[37,11],[[30,4],[30,5]],null],[[[1,\\\" \\\"],[10,1],[14,0,\\\"line-base line-current\\\"],[12],[1,\\\"Current:\\\"],[13],[1,\\\" \\\"]],[]],null],[1,\\\"\\\\n                \\\"],[1,[28,[35,9],[[28,[37,13],[[30,6],[30,3,[\\\"namespace\\\"]],[30,3,[\\\"name\\\"]],[30,3,[\\\"units\\\"]],true,[30,7],[28,[37,14],[[28,[37,15],[[30,0,[\\\"zoomInfo\\\"]]],null],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]]],null],[30,8],[30,9]],null]],null]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,11],[[30,4],[30,5]],null],[[[1,\\\"                  \\\"],[10,\\\"br\\\"],[12],[13],[10,1],[14,0,\\\"line-base line-baseline\\\"],[12],[1,\\\"Baseline: \\\"],[13],[1,\\\"\\\\n                  \\\"],[1,[28,[35,9],[[28,[37,13],[[30,5],[30,3,[\\\"namespace\\\"]],[30,3,[\\\"name\\\"]],[30,3,[\\\"units\\\"]],true,[30,7],false,false,[30,9]],null]],null]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,17],[[30,3,[\\\"namespace\\\"]],[30,3,[\\\"name\\\"]],[30,7]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"subtext inline-text no-print\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,19],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"metricDetailsSelected\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,21],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[true,\\\"fa fa-search\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,11],[[28,[37,14],[[28,[37,15],[[30,0,[\\\"zoomInfo\\\"]]],null],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]]],null],[28,[37,22],[[30,10,[\\\"length\\\"]],1],null]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"subtext inline-text no-print\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,19],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"metricHistorySelected\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,21],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[true,\\\"fa fa-history\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,11,[\\\"completed\\\"]],[28,[37,14],[[28,[37,15],[[30,0,[\\\"zoomInfo\\\"]]],null],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]]],null],[28,[37,22],[[30,10,[\\\"length\\\"]],1],null]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"no-print\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,19],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"metricHistorySelected\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,23],null,[[\\\"@id\\\",\\\"@summaries\\\",\\\"@namespace\\\",\\\"@metric\\\"],[[28,[37,24],[[30,1],[30,3,[\\\"name\\\"]],\\\"-\\\",[30,12],[30,13]],null],[30,10],[30,3,[\\\"namespace\\\"]],[30,3,[\\\"name\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showMetricHistoryModal\\\"]],[[[1,\\\"  \\\"],[8,[39,25],null,[[\\\"@summaries\\\",\\\"@metric\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@modalClosed\\\"],[[30,10],[30,0,[\\\"selectedMetric\\\"]],[30,7],[30,9],[30,12],[30,0,[\\\"metricHistoryModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showMetricDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,26],null,[[\\\"@summary\\\",\\\"@metricDef\\\",\\\"@metric\\\",\\\"@metricDefs\\\",\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@selectedResource\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,6],[30,0,[\\\"selectedMetric\\\"]],[28,[37,27],[[30,6],[30,0,[\\\"selectedMetric\\\",\\\"namespace\\\"]],[30,0,[\\\"selectedMetric\\\",\\\"name\\\"]]],null],[30,7],[30,12],[30,11],[30,14],[30,15],[30,9],[30,0,[\\\"metricDetailsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@prefix\\\",\\\"metrics\\\",\\\"metric\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummary\\\",\\\"@summary\\\",\\\"@metricDefs\\\",\\\"@utilizationWarningThreshold\\\",\\\"@scriptType\\\",\\\"@summaryHistory\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@widgetId\\\",\\\"@overallModel\\\",\\\"@selectedResource\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"tr\\\",\\\"td\\\",\\\"to-metric-style\\\",\\\"html-safe\\\",\\\"if\\\",\\\"and\\\",\\\"span\\\",\\\"print-metric\\\",\\\"or\\\",\\\"not\\\",\\\"br\\\",\\\"has-aggregators\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"gt\\\",\\\"sparkline-chart\\\",\\\"concat\\\",\\\"metric-history-modal\\\",\\\"metric-details-modal\\\",\\\"find-metric\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metrics-table.hbs\",\n    \"isStrictMode\": false\n  });\n  const SummaryMaxColumns = 6;\n  let MetricsTableComponent = _exports.default = (_class = class MetricsTableComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"showMetricHistoryModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showMetricDetailsModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedMetric\", _descriptor4, this);\n    }\n    get metricsWithRows() {\n      const metrics = _.filter(this.args.metrics, metric => {\n        return !metric.excludeFromBalloon;\n      });\n      return _lib.default.splitArray(metrics, SummaryMaxColumns);\n    }\n    metricHistoryModalClosed() {\n      if (!this.isDestroyed) {\n        this.showMetricHistoryModal = false;\n      }\n    }\n    metricDetailsModalClosed() {\n      this.showMetricDetailsModal = false;\n    }\n    metricHistorySelected(metric) {\n      this.selectedMetric = metric;\n      this.showMetricHistoryModal = true;\n    }\n    metricDetailsSelected(metric) {\n      this.selectedMetric = metric;\n      this.showMetricDetailsModal = true;\n    }\n    didInsert() {\n      const _this = this;\n      $(document).on('click', '#' + this.args.prefix + 'Table td', function (e) {\n        let isClick = $(e.target).closest('a').length === 0;\n        if (isClick) {\n          let metricName = $(e.target).closest('td').data('metric');\n          let metricNamespace = $(e.target).closest('td').data('namespace');\n          let metric = _.find(_this.args.metrics, function (metric) {\n            return metric.namespace === metricNamespace && metric.name === metricName;\n          });\n          if (metric) {\n            (0, _object.set)(metric, 'selected', !metric.selected);\n            _this.args.onSelectionChanged?.();\n          }\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showMetricHistoryModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showMetricDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedMetric\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"metricHistoryModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricHistoryModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDetailsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDetailsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricHistorySelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricHistorySelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDetailsSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDetailsSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricsTableComponent);\n});","define(\"@testable/shared-ui/components/metrics-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/utilization\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _runloop, _component2, _lib, _loadTest, _utilization, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/utilization\",0,\"ember-uuid\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container tab-pane fade {{unless @selectedWidget \"active show\"}} {{unless this.show \"hidden\"}}\"\n       data-sortable-id={{@widget.id}} data-type=\"Chart\" id={{@widget.id}}>\n  {{#if this.show}}\n    <div class=\"panel-heading block-sub-container-target\" {{did-insert this.onShowAction}}>\n      <div class=\"panel-heading-btn\">\n        {{#if (not (or @isBrowserBased @minimalHeader @fromResultsTab @isViewer))}}\n          <a {{on \"click\" this.showConfigureChartModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary\" role=\"button\">\n            <Ui::Icon @icon=\"fa fa-cog\" /></a>\n          <a {{on \"click\" (fn this.removePanelAction @widget.id)}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n            title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n        {{/if}}\n      </div>\n      <h4 class=\"panel-title\">\n        {{#unless @isBrowserBased}}\n          <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n            class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n            aria-controls=\"panelBody{{this.uuid}}\">\n            <Ui::Icon role=\"presentation\" @icon=\"fa fa-minus\"/>\n          </a>\n          <strong>\n            {{this.chartConfig.name}}\n            {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}}\n          </strong>\n        {{/unless}}\n        {{#if (and @bucketsLoaded this.showBucketTable (eq this.chartConfig.chartType \"Metered\"))}} ({{print-number this.bucketCount}}){{/if}}\n          {{#if (eq this.chartConfig.chartType 'Histogram')}}\n            <BsButtonGroup @value={{this.chartConfig.displayType}} @type=\"radio\" class=\"m-l-10 no-print\"\n                           @onChange={{fn (mut this.chartConfig.displayType)}} as |bg|>\n              <bg.button @type=\"success\" @value=\"Pie\" @size=\"xs\">Pie</bg.button>\n              <bg.button @type=\"success\" @value=\"Table\" @size=\"xs\">Table</bg.button>\n              <bg.button @type=\"success\" @value=\"LinePerBucket\" @size=\"xs\">Line Per Bucket</bg.button>\n            </BsButtonGroup>\n          {{/if}}\n      </h4>\n    </div>\n    <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n      <div class=\"panel-body p-l-5 p-r-5\">\n      {{#if (eq this.chartConfig.chartType 'Line')}}\n        {{#if this.showMetricValues}}\n          <MetricsTable @prefix={{@widget.id}}\n                        @onSelectionChanged={{this.metricSelectionChanged}}\n                        @metrics={{this.metrics}}\n                        @metricDefs={{@metricDefs}}\n                        @summary={{@summary}}\n                        @summaryHistory={{@summaryHistory}}\n                        @selectedResource={{@selectedResource}}\n                        @regionName={{@regionName}}\n                        @model={{@model}}\n                        @overallModel={{@overallModel}}\n                        @isBaseline={{@isBaseline}}\n                        @baselineExecutionSummary={{@baselineExecutionSummary}}\n                        @utilizationWarningThreshold={{this.utilizationWarningThreshold}}\n                        @scriptType={{@model.execution.script.scriptType}}\n                        />\n        {{/if}}\n        {{#if (and this.showChart this.isChartApplicable (if @requiresIntervals @intervalsLoaded @summaryHistoryLoaded))}}\n          {{#if (and @isBaseline (or (eq @regionName 'ALL') @regionBaselineId)) }}\n            <div class=\"clear-fix\">\n              {{#unless @isPrint}}\n                <BsButtonGroup @value={{this.chartType}} @type=\"radio\" @onChange={{this.changeChartType}} class=\"m-b-10 pull-right\" as |bg|>\n                  <bg.button @type=\"success\" @value=\"separate\" @size=\"sm\">Separate</bg.button>\n                  <bg.button @type=\"success\" @value=\"combined\" @size=\"sm\">Combined</bg.button>\n                </BsButtonGroup>\n              {{/unless}}\n              {{#if (and @isBaseline (eq this.chartType 'separate'))}}\n                <strong>Current Test</strong>\n              {{/if}}\n            </div>\n          {{/if}}\n  \n  \n          <MetricChart @id={{concat @widget.id '_chart_' @regionName}}\n                       @chartConfig={{this.chartConfig}}\n                       @metrics={{this.metrics}}\n                       @config={{@config}}\n                       @selectedResource={{@selectedResource}}\n                       @data={{@model}}\n                       @baselineExecution={{@baselineExecution}}\n                       @baselineExecutionSummaryHistory={{@baselineExecutionSummaryHistory}}\n                       @baselineSelectedResource={{@baselineSelectedResource}}\n                       @metricDefs={{@metricDefs}}\n                       @scriptType={{@model.execution.script.scriptType}}\n                       @isPrint={{@isPrint}}\n                       @width='100'\n                       @regionName={{@regionName}}\n                       @showHistory={{not @requiresIntervals}}\n                       @showMetricValues={{this.showMetricValues}}\n                       @period={{@period}}\n                       @currentTab={{@currentTab}}\n                       @chartType={{this.chartType}}\n                       @isBaseline={{if (eq this.chartType 'combined') @isBaseline}}\n                       @forceIsBaseline={{@isBaseline}}\n          />\n  \n          {{#if (and @isBaseline (eq this.chartType 'separate') (or (eq @regionName 'ALL') @regionBaselineId)) }}\n            <strong>Baseline Test</strong>\n            <MetricChart @id={{concat @widget.id '_chart_baseline_' @regionName}}\n                         @chartConfig={{this.chartConfig}}\n                         @metrics={{this.metrics}}\n                         @config={{@config}}\n                         @baselineExecution={{@baselineExecution}}\n                         @baselineExecutionSummaryHistory={{@baselineExecutionSummaryHistory}}\n                         @baselineSelectedResource={{@baselineSelectedResource}}\n                         @metricDefs={{@metricDefs}}\n                         @scriptType={{@model.execution.script.scriptType}}\n                         @isPrint={{@isPrint}}\n                         @width='100'\n                         @regionName={{@regionName}}\n                         @showHistory={{not @requiresIntervals}}\n                         @showMetricValues={{this.showMetricValues}}\n                         @period={{@period}}\n                         @currentTab={{@currentTab}}\n                         @chartType=\"separate\"\n                         @isBaseline={{true}}\n                         @forceIsBaseline={{true}}\n            />\n          {{/if}}\n        {{else if (and this.showChart this.isChartApplicable)}}\n          <div style={{html-safe \"width: 100%; height: 340px;\"}}>\n            <p class=\"chart-loading\">Loading {{if @requiresIntervals 'interval' 'historical'}} data...</p>\n          </div>\n        {{/if}}\n      {{else if (eq this.chartConfig.chartType 'Histogram')}}\n        {{#if (or (eq this.chartConfig.displayType 'Table') (eq this.chartConfig.displayType 'Pie'))}}\n          {{#each this.groupedHistogramMetrics as |metricGroup|}}\n            <div class=\"row\">\n              {{#each metricGroup as |metric|}}\n                <div class=\"col-sm-12 {{if (gt this.chartConfig.metrics.length 1) 'col-md-6'}}\">\n                  {{#if (eq this.chartConfig.displayType 'Table')}}\n                    <HistogramTable @config={{this.chartConfig}}\n                                    @selectedResource={{@selectedResource}}\n                                    @data={{@model}}\n                                    @metricDefs={{@metricDefs}}\n                                    @metric={{metric}}\n                                    @scriptType={{@model.execution.script.scriptType}}\n                                    @regionName={{@regionName}}\n                                    @isPrint={{@isPrint }} />\n                  {{else if (eq this.chartConfig.displayType 'Pie')}}\n                    <HistogramChart @id={{concat @widget.id '.' metric.uid '.' @regionName}}\n                                    @chartConfig={{this.chartConfig}}\n                                    @widgetId={{@widget.id}}\n                                    @selectedResource={{@selectedResource}}\n                                    @data={{@model}}\n                                    @metricDefs={{@metricDefs}}\n                                    @metric={{metric}}\n                                    @scriptType={{@model.execution.script.scriptType}}\n                                    @regionName={{@regionName}} />\n                  {{/if}}\n                </div>\n              {{/each}}\n            </div>\n          {{/each}}\n        {{else}}\n          <HistogramChartPerBucket @id={{concat @widget.id '_chart_1_' @regionName}}\n                                   @chartConfig={{this.chartConfig}}\n                                   @widgetId={{@widget.id}}\n                                   @selectedResource={{@selectedResource}}\n                                   @data={{@model}}\n                                   @metricDefs={{@metricDefs}}\n                                   @metrics={{this.metrics}}\n                                   @scriptType={{@model.execution.script.scriptType}}\n                                   @regionName={{@regionName}}\n  \n                                   @config={{@config}}\n                                   @isPrint={{@isPrint}}\n                                   @width='100'\n                                   @showHistory={{not @requiresIntervals}}\n                                   @period={{@period}}\n                                   @transitionTo={{this.transitionToAction}}\n                                   @currentTab={{@currentTab}}\n          />\n        {{/if}}\n      {{else}}\n        <MeteredWidget @config={{@config}}\n                       @chartConfig={{this.chartConfig}}\n                       @widget={{@widget}}\n                       @srcMetrics={{this.metrics}}\n                       @utilizationWarning={{@utilizationWarning}}\n                       @utilizationWarningThreshold={{this.utilizationWarningThreshold}}\n                       @showBucketTable={{this.showBucketTable}}\n                       @bucketCount={{this.bucketCount}}\n                       @model={{@model}}\n                       @overallModel={{@overallModel}}\n                       @baselineExecution={{@baselineExecution}}\n                       @isBaseline={{@isBaseline}}\n                       @baselineExecutionSummaryHistory={{@baselineExecutionSummaryHistory}}\n                       @baselineExecutionSummary={{@baselineExecutionSummary}}\n                       @summary={{@summary}}\n                       @summaryHistory={{@summaryHistory}}\n                       @buckets={{@buckets}}\n                       @intervals={{@intervals}}\n                       @metricDefs={{@metricDefs}}\n                       @regionName={{@regionName}}\n                       @scriptType={{@model.execution.script.scriptType}}\n                       @intervalsLoaded={{@intervalsLoaded}}\n                       @bucketsLoaded={{@bucketsLoaded}}\n                       @summaryHistoryLoaded={{@summaryHistoryLoaded}}\n                       @agentSearchMap={{@agentSearchMap}}\n                       @period={{@period}}\n                       @showHistory={{not @requiresIntervals}}\n                       @showMetricValues={{this.showMetricValues}}\n                       @isPrint={{@isPrint}}\n                       @isHistory={{@isHistory}}\n                       @currentTab={{@currentTab}}\n                       @regionBaselineId={{@regionBaselineId}}\n        />\n      {{/if}}\n      </div>\n    </div>\n  \n  \n    {{#if this.showConfigureChartModal}}\n      <ConfigureChart @config={{this.chartConfig}}\n                      @metricDefs={{@metricDefs}}\n                      @summary={{@summary}}\n                      @hasTransactions={{@model.hasTransactions}}\n                      @percentiles={{@model.execution.percentiles}}\n                      @scriptType={{@model.execution.script.scriptType}}\n                      @isLoad={{@isLoad}}\n                      @configChanged={{this.configChangedAction}}\n                      @modalClosed={{this.configureChartModalClosed}} />\n    {{/if}}\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"panel block-sub-container tab-pane fade \\\",[52,[51,[30,1]],\\\"active show\\\"],\\\" \\\",[52,[51,[30,0,[\\\"show\\\"]]],\\\"hidden\\\"]]]],[15,\\\"data-sortable-id\\\",[30,2,[\\\"id\\\"]]],[14,\\\"data-type\\\",\\\"Chart\\\"],[15,1,[30,2,[\\\"id\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"show\\\"]],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"panel-heading block-sub-container-target\\\"],[4,[38,3],[[30,0,[\\\"onShowAction\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,5],[[30,3],[30,4],[30,5],[30,6]],null]],null],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"showConfigureChartModalAction\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"removePanelAction\\\"]],[30,2,[\\\"id\\\"]]],null]],null],[12],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,3]],[[[1,\\\"        \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"chartConfig\\\",\\\"name\\\"]]],[1,\\\"\\\\n          \\\"],[41,[51,[30,7,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,7,[\\\"regionDescription\\\"]]]],[]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[41,[28,[37,12],[[30,8],[30,0,[\\\"showBucketTable\\\"]],[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"chartType\\\"]],\\\"Metered\\\"],null]],null],[[[1,\\\" (\\\"],[1,[28,[35,14],[[30,0,[\\\"bucketCount\\\"]]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"chartType\\\"]],\\\"Histogram\\\"],null],[[[1,\\\"          \\\"],[8,[39,15],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]],\\\"radio\\\",[28,[37,9],[[28,[37,16],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Pie\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Pie\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Table\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Table\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"LinePerBucket\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Line Per Bucket\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[9]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body p-l-5 p-r-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"chartType\\\"]],\\\"Line\\\"],null],[[[41,[30,0,[\\\"showMetricValues\\\"]],[[[1,\\\"        \\\"],[8,[39,17],null,[[\\\"@prefix\\\",\\\"@onSelectionChanged\\\",\\\"@metrics\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@selectedResource\\\",\\\"@regionName\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummary\\\",\\\"@utilizationWarningThreshold\\\",\\\"@scriptType\\\"],[[30,2,[\\\"id\\\"]],[30,0,[\\\"metricSelectionChanged\\\"]],[30,0,[\\\"metrics\\\"]],[30,10],[30,11],[30,12],[30,13],[30,14],[30,7],[30,15],[30,16],[30,17],[30,0,[\\\"utilizationWarningThreshold\\\"]],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,0,[\\\"showChart\\\"]],[30,0,[\\\"isChartApplicable\\\"]],[52,[30,18],[30,19],[30,20]]],null],[[[41,[28,[37,12],[[30,16],[28,[37,5],[[28,[37,13],[[30,14],\\\"ALL\\\"],null],[30,21]],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"clear-fix\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,22]],[[[1,\\\"              \\\"],[8,[39,15],[[24,0,\\\"m-b-10 pull-right\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"chartType\\\"]],\\\"radio\\\",[30,0,[\\\"changeChartType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,23,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"separate\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Separate\\\"]],[]]]]],[1,\\\"\\\\n                \\\"],[8,[30,23,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"combined\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Combined\\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[23]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,16],[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"separate\\\"],null]],null],[[[1,\\\"              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Current Test\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[39,18],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@metrics\\\",\\\"@config\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@baselineSelectedResource\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@isPrint\\\",\\\"@width\\\",\\\"@regionName\\\",\\\"@showHistory\\\",\\\"@showMetricValues\\\",\\\"@period\\\",\\\"@currentTab\\\",\\\"@chartType\\\",\\\"@isBaseline\\\",\\\"@forceIsBaseline\\\"],[[28,[37,19],[[30,2,[\\\"id\\\"]],\\\"_chart_\\\",[30,14]],null],[30,0,[\\\"chartConfig\\\"]],[30,0,[\\\"metrics\\\"]],[30,24],[30,13],[30,7],[30,25],[30,26],[30,27],[30,10],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,22],\\\"100\\\",[30,14],[28,[37,4],[[30,18]],null],[30,0,[\\\"showMetricValues\\\"]],[30,28],[30,29],[30,0,[\\\"chartType\\\"]],[52,[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"combined\\\"],null],[30,16]],[30,16]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[30,16],[28,[37,13],[[30,0,[\\\"chartType\\\"]],\\\"separate\\\"],null],[28,[37,5],[[28,[37,13],[[30,14],\\\"ALL\\\"],null],[30,21]],null]],null],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Baseline Test\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,18],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@metrics\\\",\\\"@config\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@baselineSelectedResource\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@isPrint\\\",\\\"@width\\\",\\\"@regionName\\\",\\\"@showHistory\\\",\\\"@showMetricValues\\\",\\\"@period\\\",\\\"@currentTab\\\",\\\"@chartType\\\",\\\"@isBaseline\\\",\\\"@forceIsBaseline\\\"],[[28,[37,19],[[30,2,[\\\"id\\\"]],\\\"_chart_baseline_\\\",[30,14]],null],[30,0,[\\\"chartConfig\\\"]],[30,0,[\\\"metrics\\\"]],[30,24],[30,25],[30,26],[30,27],[30,10],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,22],\\\"100\\\",[30,14],[28,[37,4],[[30,18]],null],[30,0,[\\\"showMetricValues\\\"]],[30,28],[30,29],\\\"separate\\\",true,true]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[28,[37,12],[[30,0,[\\\"showChart\\\"]],[30,0,[\\\"isChartApplicable\\\"]]],null],[[[1,\\\"        \\\"],[10,0],[15,5,[28,[37,20],[\\\"width: 100%; height: 340px;\\\"],null]],[12],[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"chart-loading\\\"],[12],[1,\\\"Loading \\\"],[1,[52,[30,18],\\\"interval\\\",\\\"historical\\\"]],[1,\\\" data...\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]]],[]],[[[41,[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"chartType\\\"]],\\\"Histogram\\\"],null],[[[41,[28,[37,5],[[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]],\\\"Table\\\"],null],[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]],\\\"Pie\\\"],null]],null],[[[42,[28,[37,23],[[28,[37,23],[[30,0,[\\\"groupedHistogramMetrics\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,23],[[28,[37,23],[[30,30]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[15,0,[29,[\\\"col-sm-12 \\\",[52,[28,[37,24],[[30,0,[\\\"chartConfig\\\",\\\"metrics\\\",\\\"length\\\"]],1],null],\\\"col-md-6\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]],\\\"Table\\\"],null],[[[1,\\\"                  \\\"],[8,[39,25],null,[[\\\"@config\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metric\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@isPrint\\\"],[[30,0,[\\\"chartConfig\\\"]],[30,13],[30,7],[30,10],[30,31],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,14],[30,22]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,0,[\\\"chartConfig\\\",\\\"displayType\\\"]],\\\"Pie\\\"],null],[[[1,\\\"                  \\\"],[8,[39,26],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@widgetId\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metric\\\",\\\"@scriptType\\\",\\\"@regionName\\\"],[[28,[37,19],[[30,2,[\\\"id\\\"]],\\\".\\\",[30,31,[\\\"uid\\\"]],\\\".\\\",[30,14]],null],[30,0,[\\\"chartConfig\\\"]],[30,2,[\\\"id\\\"]],[30,13],[30,7],[30,10],[30,31],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,14]]],null],[1,\\\"\\\\n                \\\"]],[]],null]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[31]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[30]],null]],[]],[[[1,\\\"        \\\"],[8,[39,27],null,[[\\\"@id\\\",\\\"@chartConfig\\\",\\\"@widgetId\\\",\\\"@selectedResource\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@metrics\\\",\\\"@scriptType\\\",\\\"@regionName\\\",\\\"@config\\\",\\\"@isPrint\\\",\\\"@width\\\",\\\"@showHistory\\\",\\\"@period\\\",\\\"@transitionTo\\\",\\\"@currentTab\\\"],[[28,[37,19],[[30,2,[\\\"id\\\"]],\\\"_chart_1_\\\",[30,14]],null],[30,0,[\\\"chartConfig\\\"]],[30,2,[\\\"id\\\"]],[30,13],[30,7],[30,10],[30,0,[\\\"metrics\\\"]],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,14],[30,24],[30,22],\\\"100\\\",[28,[37,4],[[30,18]],null],[30,28],[30,0,[\\\"transitionToAction\\\"]],[30,29]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"      \\\"],[8,[39,28],null,[[\\\"@config\\\",\\\"@chartConfig\\\",\\\"@widget\\\",\\\"@srcMetrics\\\",\\\"@utilizationWarning\\\",\\\"@utilizationWarningThreshold\\\",\\\"@showBucketTable\\\",\\\"@bucketCount\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@baselineExecutionSummary\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@metricDefs\\\",\\\"@regionName\\\",\\\"@scriptType\\\",\\\"@intervalsLoaded\\\",\\\"@bucketsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@agentSearchMap\\\",\\\"@period\\\",\\\"@showHistory\\\",\\\"@showMetricValues\\\",\\\"@isPrint\\\",\\\"@isHistory\\\",\\\"@currentTab\\\",\\\"@regionBaselineId\\\"],[[30,24],[30,0,[\\\"chartConfig\\\"]],[30,2],[30,0,[\\\"metrics\\\"]],[30,32],[30,0,[\\\"utilizationWarningThreshold\\\"]],[30,0,[\\\"showBucketTable\\\"]],[30,0,[\\\"bucketCount\\\"]],[30,7],[30,15],[30,25],[30,16],[30,26],[30,17],[30,11],[30,12],[30,33],[30,34],[30,10],[30,14],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,19],[30,8],[30,20],[30,35],[30,28],[28,[37,4],[[30,18]],null],[30,0,[\\\"showMetricValues\\\"]],[30,22],[30,36],[30,29],[30,21]]],null],[1,\\\"\\\\n    \\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[30,0,[\\\"showConfigureChartModal\\\"]],[[[1,\\\"    \\\"],[8,[39,29],null,[[\\\"@config\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@hasTransactions\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@configChanged\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"chartConfig\\\"]],[30,10],[30,11],[30,7,[\\\"hasTransactions\\\"]],[30,7,[\\\"execution\\\",\\\"percentiles\\\"]],[30,7,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,37],[30,0,[\\\"configChangedAction\\\"]],[30,0,[\\\"configureChartModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@selectedWidget\\\",\\\"@widget\\\",\\\"@isBrowserBased\\\",\\\"@minimalHeader\\\",\\\"@fromResultsTab\\\",\\\"@isViewer\\\",\\\"@model\\\",\\\"@bucketsLoaded\\\",\\\"bg\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@summaryHistory\\\",\\\"@selectedResource\\\",\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@isBaseline\\\",\\\"@baselineExecutionSummary\\\",\\\"@requiresIntervals\\\",\\\"@intervalsLoaded\\\",\\\"@summaryHistoryLoaded\\\",\\\"@regionBaselineId\\\",\\\"@isPrint\\\",\\\"bg\\\",\\\"@config\\\",\\\"@baselineExecution\\\",\\\"@baselineExecutionSummaryHistory\\\",\\\"@baselineSelectedResource\\\",\\\"@period\\\",\\\"@currentTab\\\",\\\"metricGroup\\\",\\\"metric\\\",\\\"@utilizationWarning\\\",\\\"@buckets\\\",\\\"@intervals\\\",\\\"@agentSearchMap\\\",\\\"@isHistory\\\",\\\"@isLoad\\\"],[\\\"div\\\",\\\"unless\\\",\\\"if\\\",\\\"did-insert\\\",\\\"not\\\",\\\"or\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"fn\\\",\\\"h4\\\",\\\"strong\\\",\\\"and\\\",\\\"eq\\\",\\\"print-number\\\",\\\"bs-button-group\\\",\\\"mut\\\",\\\"metrics-table\\\",\\\"metric-chart\\\",\\\"concat\\\",\\\"html-safe\\\",\\\"p\\\",\\\"each\\\",\\\"-track-array\\\",\\\"gt\\\",\\\"histogram-table\\\",\\\"histogram-chart\\\",\\\"histogram-chart-per-bucket\\\",\\\"metered-widget\\\",\\\"configure-chart\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/metrics-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  const PFIndicatorMetric = {\n    title: 'P/F',\n    namespace: 'Testable',\n    name: 'pf',\n    units: '__pf__',\n    selected: true,\n    excludeFromBalloon: true,\n    useFailColor: true,\n    color: 'rgba(52,143,226,.3)',\n    failColor: 'rgba(255,91,87,.3)',\n    graphType: 'column'\n  };\n  const lineColors = [\"#1702FC\", \"#FF6600\", \"#3880BA\", \"#0C5AA6\", \"#00AB6F\"];\n  const barColors = [\"rgba(52,143,226,.3)\", \"#FFCCCC\", \"#E3FFCC\"];\n  let MetricsWidget = _exports.default = (_class = class MetricsWidget extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"searches\", {});\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"chartType\", _descriptor, this);\n      _initializerDefineProperty(this, \"showConfigureChartModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectionVersion\", _descriptor3, this);\n    }\n    get show() {\n      const visibility = this.chartConfig?.visibility || (this.chartConfig?.chartType === 'Histogram' ? 'thisRun' : 'always');\n      const resourceTypeVisibility = this.chartConfig?.resourceTypeVisibility || 'always';\n      const summary = this.args.summary;\n      return (visibility === 'always' || visibility === this.args.resultsType) && (resourceTypeVisibility === 'always' || resourceTypeVisibility === 'tx' && summary.hasTxnMetrics || resourceTypeVisibility === 'req' && summary.hasRequestMetrics);\n    }\n    get chartConfig() {\n      let config = this.args.chartsConfig;\n      let id = this.args.widget?.id;\n      if (_.isArray(config) && _.isString(id)) {\n        let result = _.cloneDeep(_.find(config, chartConfig => {\n          return chartConfig.id === id;\n        }));\n        if (result && !result.displayType) {\n          result.displayType = 'Pie';\n        }\n        return result;\n      }\n      return null;\n    }\n    get groupedHistogramMetrics() {\n      let metrics = _.cloneDeep(this.chartConfig?.metrics);\n      metrics.forEach(m => {\n        if (_lib.default.endsWith(m.name, '-percent')) {\n          m.name = m.name.replace('-percent', '');\n        }\n        m.uid = (0, _emberUuid.v4)();\n      });\n      return _lib.default.group(metrics, 2);\n    }\n    get bucketCount() {\n      if (this.showBucketTable && this.args.bucketsLoaded) {\n        return _utilization.default.getBucketCount(this.args.buckets, this.metrics);\n      }\n      return 0;\n    }\n    get showBucketTable() {\n      return this.chartConfig?.chartType === 'Metered' && _.isUndefined(this.chartConfig?.showBucketTable) ? true : this.chartConfig?.showBucketTable;\n    }\n    get metrics() {\n      const answer = _.clone(this.chartConfig?.metrics);\n      const scriptType = this.args.model?.execution?.script?.scriptType;\n      const config = this.chartConfig;\n      if (!config) return;\n      const summary = this.args.summary;\n      const metricDefs = this.args.metricDefs;\n      if (config && config.showUserMetrics && summary) {\n        const userMetrics = [];\n        _.forEach(summary.metrics, metric => {\n          if (metric.namespace !== _loadTest.default.SystemNs && (metric.metricType === 'Counter' || metric.metricType === 'Timing')) {\n            const existing = _.find(answer, existingMetric => {\n              return existingMetric.namespace === metric.namespace && existingMetric.metric === metric.metricDef;\n            });\n            if (!existing) {\n              const metricName = metric.metricType === 'Counter' ? metric.metricDef : metric.metricDef + '-p50';\n              const metricConfig = {\n                title: metric.metricType === 'Counter' ? metric.metricDef : _lib.default.camelCaseToTitleCase(metric.metricDef) + ' [Median]',\n                namespace: metric.namespace,\n                metricType: metric.metricType,\n                name: metricName,\n                units: _loadTest.default.getUnits(metric.namespace, metricName, metric, scriptType),\n                selected: false\n              };\n              userMetrics.push(metricConfig);\n            }\n          }\n        });\n        answer.push.apply(answer, _.sortBy(userMetrics, m => {\n          return m.title.toLowerCase();\n        }));\n      }\n      if (config.showPFIndicator && !this.args.requiresIntervals) {\n        answer.push(PFIndicatorMetric);\n      }\n      let lineIndex = 0;\n      let barIndex = 0;\n      _.forEach(answer, metricConfig => {\n        let metricDef = _loadTest.default.findMetricDef(metricConfig.namespace, metricConfig.name, metricDefs);\n        if (!metricConfig.graphType) {\n          const isLine = metricConfig.name.indexOf('-') !== -1 && metricConfig.name.indexOf('-total') === -1 || _.isUndefined(metricDef) || metricDef.metricType !== 'Counter' || metricConfig.name === 'memory' || metricConfig.name === 'cpu';\n          metricConfig.graphType = isLine ? 'line' : 'column';\n        }\n        if (metricConfig.graphType === 'line' && !metricConfig.color) {\n          metricConfig.color = lineColors[lineIndex % lineColors.length];\n          lineIndex++;\n        } else if (!metricConfig.color) {\n          metricConfig.color = barColors[barIndex % barColors.length];\n          barIndex++;\n        }\n        if (_.isUndefined(metricConfig.selected)) {\n          metricConfig.selected = true;\n        }\n        if (metricDef) {\n          metricConfig.metricDefId = metricDef.id;\n        }\n      });\n      return answer;\n    }\n    get selectedMetricsWatcher() {\n      return this.metrics?.map(metric => metric.selected ? '1' : '0').join('');\n    }\n    get showChart() {\n      void this.selectedMetricsWatcher;\n      return this.selectionVersion >= 0 && _.findIndex(this.metrics, metric => {\n        return metric.selected;\n      }) !== -1;\n    }\n    get showMetricValues() {\n      const hideInHistory = _.isBoolean(this.chartConfig?.hideMetricValuesInHistoryReport) ? this.chartConfig?.hideMetricValuesInHistoryReport : this.showChart;\n      return this.chartConfig?.showMetricValues && (!this.args.isHistory || !hideInHistory);\n    }\n    get isChartApplicable() {\n      if (this.args.isLoad) {\n        return true;\n      } else {\n        return this.args.overallModel?.completed && (!this.args.summaryHistoryLoaded || this.args.model?.summaryHistory?.length > 0);\n      }\n    }\n    get utilizationWarningThreshold() {\n      return _utilization.default.getThreshold(this.args.config);\n    }\n    metricSelectionChanged() {\n      this.selectionVersion++;\n    }\n    onShowAction() {\n      (0, _runloop.next)(this, () => this.args.onShow?.());\n    }\n    showConfigureChartModalAction() {\n      this.showConfigureChartModal = true;\n    }\n    configureChartModalClosed() {\n      if (!this.isDestroyed) {\n        this.showConfigureChartModal = false;\n      }\n    }\n    configChangedAction(newConfig, oldConfig) {\n      if (this.args.configChanged) this.args.configChanged(newConfig, oldConfig);\n    }\n    removePanelAction(widgetId) {\n      if (this.args.removePanel) this.args.removePanel(widgetId);\n    }\n    transitionToAction(path, id, params) {\n      if (this.args.transitionTo) this.args.transitionTo(path, id, params);\n    }\n    changeChartType(type) {\n      this.chartType = type;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"chartType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'separate';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showConfigureChartModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectionVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"chartConfig\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"chartConfig\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"groupedHistogramMetrics\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"groupedHistogramMetrics\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metrics\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"metrics\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showChart\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"showChart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricSelectionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricSelectionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showConfigureChartModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showConfigureChartModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configureChartModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configureChartModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"transitionToAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"transitionToAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeChartType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeChartType\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MetricsWidget);\n});","define(\"@testable/shared-ui/components/monitor-item\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@testable/shared-ui/utils/monitor\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _monitor, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/monitor\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div role=\"button\" class=\"monitor-item cursor-pointer text-start\" {{on \"click\" this.goToMonitor}} {{on \"auxclick\" this.onMiddleClick}} ...attributes>\n    <div class=\"d-flex align-items-center gap-2\">\n      <Ui::Icon role=\"presentation\" class=\"static\" @icon=\"fa fa-xl {{this.iconClass}}\" />\n      <span class=\"fw-bold fs-6 text-primary\">{{@monitor.name}}</span>\n    </div>\n    <span class=\"small\">\n      {{this.monitorTypeDisplay}}\n      {{this.currentStatus}} {{live-relative-duration @monitor.lastStateChange}}\n    </span>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"monitor-item cursor-pointer text-start\\\"],[17,1],[4,[38,1],[\\\"click\\\",[30,0,[\\\"goToMonitor\\\"]]],null],[4,[38,1],[\\\"auxclick\\\",[30,0,[\\\"onMiddleClick\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],[[24,\\\"role\\\",\\\"presentation\\\"],[24,0,\\\"static\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa fa-xl \\\",[30,0,[\\\"iconClass\\\"]]]]]],null],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"fw-bold fs-6 text-primary\\\"],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[30,0,[\\\"monitorTypeDisplay\\\"]]],[1,\\\"\\\\n    \\\"],[1,[30,0,[\\\"currentStatus\\\"]]],[1,\\\" \\\"],[1,[28,[35,4],[[30,2,[\\\"lastStateChange\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@monitor\\\"],[\\\"div\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"live-relative-duration\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/monitor-item.hbs\",\n    \"isStrictMode\": false\n  });\n  let MonitorItemComponent = _exports.default = (_class = class MonitorItemComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    get monitor() {\n      return this.args.monitor;\n    }\n    get isUp() {\n      return this.monitor.up;\n    }\n    get isActive() {\n      return this.monitor.active;\n    }\n    get monitorTypeDisplay() {\n      return _monitor.default.getMonitorTypeDisplay(this.args.monitor);\n    }\n    get currentStatus() {\n      const status = _monitor.default.getMonitorStatus(this.isActive, this.isUp);\n      return _.capitalize(status.toLowerCase());\n    }\n    get iconClass() {\n      return this.isActive ? this.isUp ? 'fa-circle-check text-success' : 'fa-times-circle text-danger' : 'fa-circle-pause';\n    }\n    goToMonitor() {\n      this.router.transitionTo('monitors.view', this.monitor.id);\n    }\n    onMiddleClick(event) {\n      _monitor.default.transitionToNewTab(this.router, event, 'monitors.view', this.monitor.id);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"goToMonitor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToMonitor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onMiddleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMiddleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MonitorItemComponent);\n});","define(\"@testable/shared-ui/components/monitor-metrics-chart\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/xy\", \"@amcharts/amcharts5/themes/Animated\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, am5, am5xy, _Animated, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/xy\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"monitor-metrics-chart-wrapper\" ...attributes>\n    {{#if @isLoading}}\n      <div class=\"d-flex align-items-center justify-content-center flex-grow-1 py-4\">\n        <div class=\"text-muted\">\n          <span class=\"fa fa-spinner fa-spin me-2\"></span>\n          Loading Metrics...\n        </div>\n      </div>\n    {{else if this.hasData}}\n      <div class=\"chart-container\">\n        <div\n          id={{this.chartElementId}}\n          class=\"metrics-chart\"\n          {{did-insert this.createChart}}\n          {{did-update this.createChart @metricsData}}\n        ></div>\n      </div>\n  \n      <div class=\"d-flex justify-content-between mt-3 metric-stats\">\n        <span class=\"text-center metric-stat\">\n          <div class=\"stat-value\">{{this.meanFormatted}}</div>\n          <p class=\"stat-label mb-0\">Average</p>\n        </span>\n        <span class=\"text-center metric-stat\">\n          <div class=\"stat-value\">{{this.minFormatted}}</div>\n          <p class=\"stat-label mb-0\">Minimum</p>\n        </span>\n        <span class=\"text-center metric-stat\">\n          <div class=\"stat-value\">{{this.maxFormatted}}</div>\n          <p class=\"stat-label mb-0\">Maximum</p>\n        </span>\n      </div>\n    {{else}}\n      <div class=\"d-flex align-items-center justify-content-center flex-grow-1 py-4\">\n        <div class=\"text-muted\">No metrics data available.</div>\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"monitor-metrics-chart-wrapper\\\"],[17,1],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-center flex-grow-1 py-4\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"fa fa-spinner fa-spin me-2\\\"],[12],[13],[1,\\\"\\\\n        Loading Metrics...\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"hasData\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"chart-container\\\"],[12],[1,\\\"\\\\n      \\\"],[11,0],[16,1,[30,0,[\\\"chartElementId\\\"]]],[24,0,\\\"metrics-chart\\\"],[4,[38,3],[[30,0,[\\\"createChart\\\"]]],null],[4,[38,4],[[30,0,[\\\"createChart\\\"]],[30,3]],null],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"d-flex justify-content-between mt-3 metric-stats\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"text-center metric-stat\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"stat-value\\\"],[12],[1,[30,0,[\\\"meanFormatted\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"stat-label mb-0\\\"],[12],[1,\\\"Average\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"text-center metric-stat\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"stat-value\\\"],[12],[1,[30,0,[\\\"minFormatted\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"stat-label mb-0\\\"],[12],[1,\\\"Minimum\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"text-center metric-stat\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"stat-value\\\"],[12],[1,[30,0,[\\\"maxFormatted\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"stat-label mb-0\\\"],[12],[1,\\\"Maximum\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-center flex-grow-1 py-4\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No metrics data available.\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@isLoading\\\",\\\"@metricsData\\\"],[\\\"div\\\",\\\"if\\\",\\\"span\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"p\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/monitor-metrics-chart.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   * Shared Monitor Metrics Chart Component\n   *\n   * @arg {Array} metricsData - The metrics data with { data: [], mean, min, max }\n   * @arg {Boolean} isLoading - Whether metrics are loading\n   * @arg {String} chartId - Unique chart element ID\n   * @arg {String} metricLabel - Label for the metric being displayed\n   * @arg {String} metricUnit - Unit for the metric (optional)\n   * @arg {String} bodyTextColor - Color for axis labels (optional)\n   */\n  let MonitorMetricsChartComponent = _exports.default = (_class = class MonitorMetricsChartComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor, this);\n    }\n    get chartElementId() {\n      return this.args.chartId || 'monitor-metrics-chart';\n    }\n    get hasData() {\n      return this.args.metricsData?.data?.length > 0;\n    }\n    get chartData() {\n      if (!this.args.metricsData?.data) return [];\n      return this.args.metricsData.data.map(item => ({\n        ...item,\n        date: item.date || new Date(item.metricAt).getTime()\n      }));\n    }\n    get meanFormatted() {\n      return this.formatValue(this.args.metricsData?.mean);\n    }\n    get minFormatted() {\n      return this.formatValue(this.args.metricsData?.min);\n    }\n    get maxFormatted() {\n      return this.formatValue(this.args.metricsData?.max);\n    }\n    formatValue(value) {\n      if (value === undefined || value === null) return '-';\n      return this.args.metricUnit ? _lib.default.print(value, this.args.metricUnit) : Math.round(value);\n    }\n    createChart() {\n      if (!this.hasData) return;\n      const chartElement = document.getElementById(this.chartElementId);\n      if (!chartElement) return;\n      if (this.chartRoot) {\n        this.chartRoot.dispose();\n      }\n      const root = am5.Root.new(this.chartElementId);\n      root.setThemes([_Animated.default.new(root)]);\n      root._logo?.dispose();\n      const chart = root.container.children.push(am5xy.XYChart.new(root, {\n        panX: false,\n        panY: false,\n        layout: root.verticalLayout\n      }));\n      const labelColor = this.args.bodyTextColor ? am5.color(this.args.bodyTextColor) : am5.color(0x000000);\n      const xRenderer = am5xy.AxisRendererX.new(root, {\n        minorGridEnabled: true\n      });\n      xRenderer.labels.template.setAll({\n        fill: labelColor\n      });\n      const xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, {\n        maxZoomCount: 1000,\n        baseInterval: {\n          timeUnit: \"minute\",\n          count: 1\n        },\n        renderer: xRenderer\n      }));\n      const yRenderer = am5xy.AxisRendererY.new(root, {\n        strokeOpacity: 0.1\n      });\n      yRenderer.labels.template.setAll({\n        fill: labelColor\n      });\n      const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n        renderer: yRenderer\n      }));\n      if (this.args.metricUnit) {\n        yAxis.get(\"renderer\").labels.template.adapters.add(\"text\", (text, target) => {\n          const value = target.dataItem?.get(\"value\");\n          if (value !== undefined) {\n            return this.formatValue(value).toString();\n          }\n          return text;\n        });\n      }\n      const series = chart.series.push(am5xy.LineSeries.new(root, {\n        name: this.args.metricLabel || 'Value',\n        xAxis: xAxis,\n        yAxis: yAxis,\n        valueYField: \"mean\",\n        valueXField: \"date\",\n        stroke: am5.color(0x348fe2),\n        fill: am5.color(0x348fe2)\n      }));\n      series.strokes.template.setAll({\n        strokeWidth: 2\n      });\n      series.bullets.push(() => {\n        return am5.Bullet.new(root, {\n          sprite: am5.Circle.new(root, {\n            radius: 4,\n            fill: series.get(\"fill\")\n          })\n        });\n      });\n\n      // Tooltip\n      const tooltip = am5.Tooltip.new(root, {\n        getFillFromSprite: false,\n        getStrokeFromSprite: true,\n        autoTextColor: false,\n        pointerOrientation: \"horizontal\"\n      });\n      tooltip.get(\"background\").setAll({\n        fill: am5.color(0xffffff)\n      });\n      tooltip.label.setAll({\n        fill: am5.color(0x000000)\n      });\n      let currentText = '';\n      tooltip.label.adapters.add(\"text\", () => currentText);\n      tooltip.events.on(\"dataitemchanged\", () => {\n        if (tooltip.dataItem?.dataContext) {\n          const data = tooltip.dataItem.dataContext;\n          currentText = this.buildTooltipText(data);\n        }\n      });\n      series.set(\"tooltip\", tooltip);\n      series.data.setAll(this.chartData);\n      const cursor = chart.set(\"cursor\", am5xy.XYCursor.new(root, {\n        behavior: \"none\",\n        xAxis: xAxis\n      }));\n      cursor.lineY.set(\"visible\", false);\n      cursor.lineX.set(\"visible\", true);\n      cursor.set(\"snapToSeries\", [series]);\n      this.chartRoot = root;\n      series.appear(1000);\n      chart.appear(1000, 100);\n    }\n    buildTooltipText(data) {\n      const formattedDate = new Date(data.date).toLocaleString();\n      let text = `[bold]At:[/] ${formattedDate}\\n[bold]Mean:[/] ${this.formatValue(data.mean)}`;\n      if (data.min !== undefined) {\n        text += `\\n[bold]Min:[/] ${this.formatValue(data.min)}`;\n      }\n      if (data.max !== undefined) {\n        text += `\\n[bold]Max:[/] ${this.formatValue(data.max)}`;\n      }\n      return text;\n    }\n    willDestroy() {\n      super.willDestroy();\n      if (this.chartRoot) {\n        this.chartRoot.dispose();\n        this.chartRoot = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"createChart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createChart\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MonitorMetricsChartComponent);\n});","define(\"@testable/shared-ui/components/monitor-type-description\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (eq @monitor.monitorType \"PortMonitor\")}}\n    Monitor port\n  {{else}}\n     {{@monitor.monitorType}}\n  {{/if}}\n  \n  {{#if (eq @monitor.monitorType \"HTTP\")}}\n    monitor for {{@monitor.monitorParams.method}} {{@monitor.monitorParams.url}}\n  {{else if (eq @monitor.monitorType \"Ping\")}}\n    {{@monitor.monitorParams.host}}\n  {{else if (eq @monitor.monitorType \"PortMonitor\")}}\n    {{@monitor.monitorParams.port}} on {{@monitor.monitorParams.host}}\n  {{else if (eq @monitor.monitorType \"Heartbeat\")}}\n    monitor\n  {{else if (eq @monitor.monitorType \"Custom\")}}\n    scenario monitor\n    {{#if @monitor.customScenarioName}}\n      ({{#if @onScenarioClick}}<a href=\"javascript:;\" {{on \"click\" @onScenarioClick}}>{{@monitor.customScenarioName}}</a>{{else}}{{@monitor.customScenarioName}}{{/if}})\n    {{/if}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"PortMonitor\\\"],null],[[[1,\\\"  Monitor port\\\\n\\\"]],[]],[[[1,\\\"   \\\"],[1,[30,1,[\\\"monitorType\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"HTTP\\\"],null],[[[1,\\\"  monitor for \\\"],[1,[30,1,[\\\"monitorParams\\\",\\\"method\\\"]]],[1,\\\" \\\"],[1,[30,1,[\\\"monitorParams\\\",\\\"url\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"Ping\\\"],null],[[[1,\\\"  \\\"],[1,[30,1,[\\\"monitorParams\\\",\\\"host\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"PortMonitor\\\"],null],[[[1,\\\"  \\\"],[1,[30,1,[\\\"monitorParams\\\",\\\"port\\\"]]],[1,\\\" on \\\"],[1,[30,1,[\\\"monitorParams\\\",\\\"host\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"Heartbeat\\\"],null],[[[1,\\\"  monitor\\\\n\\\"]],[]],[[[41,[28,[37,1],[[30,1,[\\\"monitorType\\\"]],\\\"Custom\\\"],null],[[[1,\\\"  scenario monitor\\\\n\\\"],[41,[30,1,[\\\"customScenarioName\\\"]],[[[1,\\\"    (\\\"],[41,[30,2],[[[11,3],[24,6,\\\"javascript:;\\\"],[4,[38,3],[\\\"click\\\",[30,2]],null],[12],[1,[30,1,[\\\"customScenarioName\\\"]]],[13]],[]],[[[1,[30,1,[\\\"customScenarioName\\\"]]]],[]]],[1,\\\")\\\\n\\\"]],[]],null]],[]],null]],[]]]],[]]]],[]]]],[]]]],[\\\"@monitor\\\",\\\"@onScenarioClick\\\"],[\\\"if\\\",\\\"eq\\\",\\\"a\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/monitor-type-description.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"monitor-type-description\"));\n});","define(\"@testable/shared-ui/components/network-results-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"ember-uuid\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _emberUuid, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"ember-uuid\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container {{if @widget \"tab-pane fade\"}} {{if @selectedWidget \"active show\"}}\" id=\"grid\" data-sortable-id=\"grid\" data-type=\"Grid\" {{did-insert this.didInsert}}>\n    <div class=\"panel-heading block-sub-container-target\">\n      <div class=\"panel-heading-btn\">\n        <a target=\"_blank\" href=\"{{this.exportToCsvUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\"\n           data-bs-toggle=\"tooltip\" title=\"Download All Results\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{#if (and @removePanel (not (or @minimalHeader @isViewer)))}}\n          <a {{on \"click\" (fn this.removePanel \"grid\")}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                             title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n        {{/if}}\n      </div>\n      {{#unless @isBrowserBased}}\n        <h4 class=\"panel-title\">\n          <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n            class=\"btn btn-sm btn-icon btn-circle text-primary no-print\" aria-controls=\"panelBody{{this.uuid}}\">\n            <Ui::Icon @icon=\"fa fa-minus \" /></a>\n  \n          <strong>Network {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}}</strong>\n        </h4>\n      {{/unless}}\n    </div>\n    <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n      <div class=\"panel-body\">\n      <ExecutionResults @id={{concat @regionName '_executionResultsGrid'}}\n                        @title=\"Current Title\"\n                        @overallModel={{@overallModel}}\n                        @model={{@model}}\n                        @isComparison={{if @baselineExecution true}}\n                        @regionName={{@regionName}}\n                        @isPrint={{@isPrint}} />\n  \n      {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n        <ExecutionResults @id={{concat @regionName '_baseline_executionResultsGrid'}}\n                          @title=\"Baseline Title\"\n                          @overallModel={{@baselineExecution}}\n                          @model={{@regionSummaryBaseline}}\n                          @isComparison={{true}}\n                          @regionName={{@regionName}}\n                          @isPrint={{@isPrint}} />\n      {{/if}}\n  \n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"panel block-sub-container \\\",[52,[30,1],\\\"tab-pane fade\\\"],\\\" \\\",[52,[30,2],\\\"active show\\\"]]]],[24,1,\\\"grid\\\"],[24,\\\"data-sortable-id\\\",\\\"grid\\\"],[24,\\\"data-type\\\",\\\"Grid\\\"],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"exportToCsvUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download All Results\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,3],[28,[37,6],[[28,[37,7],[[30,4],[30,5]],null]],null]],null],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"removePanel\\\"]],\\\"grid\\\"],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-minus \\\"]],null],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Network \\\"],[41,[51,[30,7,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,7,[\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@title\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@isComparison\\\",\\\"@regionName\\\",\\\"@isPrint\\\"],[[28,[37,14],[[30,8],\\\"_executionResultsGrid\\\"],null],\\\"Current Title\\\",[30,9],[30,7],[52,[30,10],true],[30,8],[30,11]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,5],[[30,10],[28,[37,7],[[28,[37,15],[[30,8],\\\"ALL\\\"],null],[30,12]],null]],null],[[[1,\\\"      \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@title\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@isComparison\\\",\\\"@regionName\\\",\\\"@isPrint\\\"],[[28,[37,14],[[30,8],\\\"_baseline_executionResultsGrid\\\"],null],\\\"Baseline Title\\\",[30,10],[30,13],true,[30,8],[30,11]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@widget\\\",\\\"@selectedWidget\\\",\\\"@removePanel\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\",\\\"@isBrowserBased\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@baselineExecution\\\",\\\"@isPrint\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\"],[\\\"div\\\",\\\"if\\\",\\\"did-insert\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"and\\\",\\\"not\\\",\\\"or\\\",\\\"on\\\",\\\"fn\\\",\\\"unless\\\",\\\"h4\\\",\\\"strong\\\",\\\"execution-results\\\",\\\"concat\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/network-results-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let NetworkResultsWidgetComponent = _exports.default = (_class = class NetworkResultsWidgetComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n    }\n    get exportToCsvUrl() {\n      const path = `${_lib.default.toBaseResultUrl(this.args.overallModel, this.args.model)}/results.csv`;\n      return _lib.default.toUrl(path);\n    }\n    removePanel(widgetId) {\n      this.args.removePanel(widgetId);\n    }\n    didInsert() {\n      this.uuid = (0, _emberUuid.v4)();\n      const regionName = this.args.regionName;\n      this.EventBus.publish(regionName + \"_executionResultsGrid.invalidate\");\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"removePanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NetworkResultsWidgetComponent);\n});","define(\"@testable/shared-ui/components/no-plan-page\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"no-plan-page container m-t-30\">\n    <div class=\"row justify-content-center\">\n      <div class=\"col-md-12\">\n        {{#if this.showPlanPurchase}}\n          <Account::Billing::PlanPurchase @ungroupedFilters={{true}} @onBack={{this.goBack}} />\n        {{else}}\n          <div class=\"panel\" data-sortable=\"false\">\n            <div class=\"panel-body text-center py-5\">\n              <Ui::Icon @icon=\"fa fa-lock fa-3x text-muted mb-3\" />\n              <h3 class=\"m-t-20\">{{if this.activationMessage \"Enable Monitoring\" \"Plan Required\"}}</h3>\n              <p class=\"text-muted m-t-10 m-b-20\">\n                {{#if this.activationMessage}}\n                  {{this.activationMessage}}\n                {{else}}\n                  Your plan does not grant you access to our {{@appName}} app.\n                  Consider adding a {{@appName}} plan or\n                  <a href=\"mailto:support@testable.io\">contact sales</a>.\n                {{/if}}\n              </p>\n              <div class=\"d-flex justify-content-center gap-3 m-t-20\">\n                {{#unless this.activationMessage}}\n                  <button class=\"btn btn-primary m-r-10\" type=\"button\" {{on \"click\" this.addPlan}}>\n                    Add {{@appName}} Plan\n                  </button>\n                {{/unless}}\n                <a class=\"btn btn-default\" href={{@otherAppUrl}}>\n                  Go to {{@otherAppName}} App\n                </a>\n              </div>\n            </div>\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"no-plan-page container m-t-30\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row justify-content-center\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPlanPurchase\\\"]],[[[1,\\\"        \\\"],[8,[39,2],null,[[\\\"@ungroupedFilters\\\",\\\"@onBack\\\"],[true,[30,0,[\\\"goBack\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body text-center py-5\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-lock fa-3x text-muted mb-3\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-t-20\\\"],[12],[1,[52,[30,0,[\\\"activationMessage\\\"]],\\\"Enable Monitoring\\\",\\\"Plan Required\\\"]],[13],[1,\\\"\\\\n            \\\"],[10,2],[14,0,\\\"text-muted m-t-10 m-b-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"activationMessage\\\"]],[[[1,\\\"                \\\"],[1,[30,0,[\\\"activationMessage\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                Your plan does not grant you access to our \\\"],[1,[30,1]],[1,\\\" app.\\\\n                Consider adding a \\\"],[1,[30,1]],[1,\\\" plan or\\\\n                \\\"],[10,3],[14,6,\\\"mailto:support@testable.io\\\"],[12],[1,\\\"contact sales\\\"],[13],[1,\\\".\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"d-flex justify-content-center gap-3 m-t-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"activationMessage\\\"]]],[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary m-r-10\\\"],[24,4,\\\"button\\\"],[4,[38,9],[\\\"click\\\",[30,0,[\\\"addPlan\\\"]]],null],[12],[1,\\\"\\\\n                  Add \\\"],[1,[30,1]],[1,\\\" Plan\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,3],[14,0,\\\"btn btn-default\\\"],[15,6,[30,2]],[12],[1,\\\"\\\\n                Go to \\\"],[1,[30,3]],[1,\\\" App\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@appName\\\",\\\"@otherAppUrl\\\",\\\"@otherAppName\\\"],[\\\"div\\\",\\\"if\\\",\\\"account/billing/plan-purchase\\\",\\\"ui/icon\\\",\\\"h3\\\",\\\"p\\\",\\\"a\\\",\\\"unless\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/no-plan-page.hbs\",\n    \"isStrictMode\": false\n  });\n  let NoPlanPageComponent = _exports.default = (_class = class NoPlanPageComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"showPlanPurchase\", _descriptor, this);\n    }\n    get activationMessage() {\n      return _environment.config.isMonitoring ? _environment.config.currentUser.monitoringActivationError : null;\n    }\n    addPlan() {\n      this.showPlanPurchase = true;\n    }\n    goBack() {\n      this.showPlanPurchase = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"showPlanPurchase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"addPlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addPlan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goBack\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goBack\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NoPlanPageComponent);\n});","define(\"@testable/shared-ui/components/note-info-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"noteInfoModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}} >\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Update Notes</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          {{#if @model}}\n            <div class=\"m-t-10 m-b-10\">\n              <strong>Notes:</strong>\n              <NoteInfo @model={{@model}}\n                        @type={{this.type}}\n                        @showAddNoteText={{@showAddNoteText}}\n                        @showNoteEditor={{true}}\n                        @updateEditor={{this.updateEditor}}\n                        @value={{@model.note.contents}}\n                        @updateNote={{this.updateNote}}/>\n            </div>\n          {{else}}\n            Loading...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"noteInfoModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Update Notes\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Notes:\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,6],null,[[\\\"@model\\\",\\\"@type\\\",\\\"@showAddNoteText\\\",\\\"@showNoteEditor\\\",\\\"@updateEditor\\\",\\\"@value\\\",\\\"@updateNote\\\"],[[30,1],[30,0,[\\\"type\\\"]],[30,2],true,[30,0,[\\\"updateEditor\\\"]],[30,1,[\\\"note\\\",\\\"contents\\\"]],[30,0,[\\\"updateNote\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          Loading...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@showAddNoteText\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"strong\\\",\\\"note-info\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/note-info-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let NoteInfoModalComponent = _exports.default = (_class = class NoteInfoModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"updatedNote\", _descriptor2, this);\n      _initializerDefineProperty(this, \"type\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showAddNoteText\", _descriptor4, this);\n    }\n    didInsert() {\n      const _this = this;\n      $('#noteInfoModal').on('hidden.bs.modal', function () {\n        _this.args.closeModal(_this.updatedNote);\n      });\n      $('#noteInfoModal').modal('show');\n    }\n    updateNote(note) {\n      this.updatedNote = note?.contents !== this.args.model.note?.contents ? note : '';\n      if (this.updatedNote) {\n        if (this.args.updateNote) {\n          this.args.updateNote(this.updatedNote);\n        }\n        _lib.default.info('Notes updated successfully.');\n      }\n    }\n    updateEditor() {\n      $('#noteInfoModal .close').click();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"updatedNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.type || \"execution\";\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showAddNoteText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return !!this.args.showAddNoteText;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNote\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNote\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEditor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEditor\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NoteInfoModalComponent);\n});","define(\"@testable/shared-ui/components/note-info\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @showNoteEditor}}\n    <fieldset disabled={{this.savingNote}}>\n      <div class=\"m-t-10\">\n        <Textarea class=\"form-control height-100\" placeholder=\"Add note...\" @value={{this.editNoteValue}} />\n      </div>\n      <div class=\"m-t-5 m-b-10\">\n        <button type=\"button\" {{on \"click\" this.updateNote}} class=\"btn btn-xs btn-success width-25 m-r-5\"><Ui::Icon @icon=\"fa fa-check\" /></button>\n        <button type=\"button\" {{on \"click\" this.cancelNote}} class=\"btn btn-xs btn-danger width-25\"><Ui::Icon @icon=\"fa fa-times\" /></button>\n      </div>\n    </fieldset>\n  {{else if @model.note.contents}}\n    <div class=\"note note-info m-t-10 m-b-10\">\n      {{#if (and (is-empty @model.uuid) (not this.isViewer))}}\n        <button type=\"button\" {{on \"click\" this.deleteNote}} class=\"btn btn-xs btn-danger pull-right m-l-5\">\n          <Ui::Icon @icon=\"fa fa-trash\" /></button>\n        <button type=\"button\" {{on \"click\" this.showNoteEditor}} class=\"btn btn-xs btn-primary pull-right\"><Ui::Icon @icon=\"fa fa-edit\" /></button>\n      {{/if}}\n      {{html-safe (to-html @model.note.contentsHtml 'html')}}\n    </div>\n  {{else if (and (is-empty @model.uuid) @showAddNoteText (not this.isViewer))}}\n    <div class=\"m-t-10 m-b-10\"><a {{on \"click\" this.showNoteEditor}} class=\"editable-click\" role=\"button\">Add Note...</a></div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"savingNote\\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"form-control height-100\\\"],[24,\\\"placeholder\\\",\\\"Add note...\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"editNoteValue\\\"]]]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-t-5 m-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-success width-25 m-r-5\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"updateNote\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-danger width-25\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"cancelNote\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,2,[\\\"note\\\",\\\"contents\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[28,[37,8],[[30,2,[\\\"uuid\\\"]]],null],[28,[37,9],[[30,0,[\\\"isViewer\\\"]]],null]],null],[[[1,\\\"      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-danger pull-right m-l-5\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"deleteNote\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary pull-right\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"showNoteEditor\\\"]]],null],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[1,[28,[35,10],[[28,[37,11],[[30,2,[\\\"note\\\",\\\"contentsHtml\\\"]],\\\"html\\\"],null]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,7],[[28,[37,8],[[30,2,[\\\"uuid\\\"]]],null],[30,3],[28,[37,9],[[30,0,[\\\"isViewer\\\"]]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[11,3],[24,0,\\\"editable-click\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"showNoteEditor\\\"]]],null],[12],[1,\\\"Add Note...\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[]]]],[\\\"@showNoteEditor\\\",\\\"@model\\\",\\\"@showAddNoteText\\\"],[\\\"if\\\",\\\"fieldset\\\",\\\"div\\\",\\\"textarea\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"and\\\",\\\"is-empty\\\",\\\"not\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/note-info.hbs\",\n    \"isStrictMode\": false\n  });\n  let NoteInfoComponent = _exports.default = (_class = class NoteInfoComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"editNoteValue\", _descriptor, this);\n      _initializerDefineProperty(this, \"savingNote\", _descriptor2, this);\n    }\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get createAction() {\n      switch (this.args.type) {\n        case 'org':\n          return 'createOrgNote';\n        case 'testCase':\n          return 'createTestCaseNote';\n        case 'testConf':\n          return 'createTestConfNote';\n        case 'script':\n          return 'createScriptNote';\n        default:\n          return 'createExecutionNote';\n      }\n    }\n    showNoteEditor() {\n      this.editNoteValue = this.args.model?.note?.contents || '';\n      this.args.updateEditor(true);\n    }\n    updateNote(newNote) {\n      const action = this.args?.model?.note?.id ? _server.default.updateNote(this.args.model.note.id, this.editNoteValue || '') : _server.default[this.createAction](this.args.model.id, this.editNoteValue || '');\n      this.savingNote = true;\n      action.then(note => {\n        this.args.updateNote(note);\n        this.args.updateEditor(false);\n        this.savingNote = false;\n      }, () => {\n        this.savingNote = false;\n      });\n    }\n    deleteNote() {\n      _lib.default.confirm('Are you sure you want to delete this note?', 'Delete', () => {\n        this.savingNote = true;\n        _server.default.deleteNote(this.args.model.note.id).then(note => {\n          this.args.updateNote(null);\n          this.args.updateEditor(false);\n          this.savingNote = false;\n        }, () => {\n          this.savingNote = false;\n        });\n      }, 'Cancel', () => {}, 'Delete Note?');\n    }\n    cancelNote() {\n      this.editNoteValue = '';\n      this.args.updateEditor(false);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"editNoteValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.value || '';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"savingNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showNoteEditor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showNoteEditor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNote\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNote\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteNote\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteNote\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelNote\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelNote\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NoteInfoComponent);\n});","define(\"@testable/shared-ui/components/notifications-table\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/providers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _environment, _providers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/providers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @editable}}\n    <button {{on \"click\" this.addNotification}} class=\"btn btn-sm btn-icon btn-primary\" data-bs-toggle=\"tooltip\"\n      title=\"Add notification\" type=\"button\">\n      <Ui::Icon @icon=\"fa fa-plus\" />\n    </button>\n  {{/if}}\n  <div class=\"table-responsive\">\n    <table class=\"table mw-640\">\n      <thead>\n        <tr>\n          {{#if @editable}}\n            <th style={{html-safe \"width: 5%;\"}}></th>\n          {{/if}}\n          <th>Type</th>\n          {{#unless @isMonitor}}\n            <th style={{html-safe \"width: 15%;\"}}>On Success</th>\n            <th style={{html-safe \"width: 15%;\"}}>On Failure</th>\n            <th>Consecutive\n              <Ui::InfoIcon @content=\"How many consecutive failures of a test configuration must occur before a failure alert is sent.\" />\n            </th>\n          {{/unless}}\n          <th style={{html-safe \"width: 35%\"}}>Configuration\n            <Ui::InfoIcon @isHtml={{true}}\n                          @placement=\"bottom\"\n                          @content=\"The target(s) for the notification. Either a comma separated list of email addresses, phone numbers, or URLs depending on the medium. For HTTP notifications you can optionally choose to mask certain sensitive parts of a URL when it's printed to the test log. To do this instead of <strong>https://foo.com/bar?key=sensitivetext</strong> you would specify <strong>secure:https://foo.com/bar?key=[sensitivetext]</strong>. In secure URLs you can escape the <strong>[</strong> character with a backslash before it (<strong>\\[</strong>).\"\n            />\n          </th>\n          {{#if @isMonitor}}\n            <th style={{html-safe \"width: 15%;\"}}>Repeat</th>\n            <th style={{html-safe \"width: 15%;\"}}>Delay</th>\n          {{/if}}\n        </tr>\n      </thead>\n      <tbody>\n        {{#each @notifications as |notification index|}}\n          <tr>\n            {{#if @editable}}\n              <td>\n                <button {{on \"click\" (fn this.deleteNotification notification)}}\n                        class=\"btn btn-sm btn-icon btn-circle text-danger m-t-5\"\n                        type=\"button\" data-bs-toggle=\"tooltip\" title=\"Delete notification\">\n                  <Ui::Icon @icon=\"fa fa-trash\" />\n                </button>\n              </td>\n            {{/if}}\n            <td>\n              {{#if (gt this.notificationMediums.length 1)}}\n                <Ui::PSelect @disabled={{not @editable}} @options={{this.notificationMediums}} @selected={{notification.notificationMedium}}\n                  @onChange={{fn this.updateNotificationMedium notification}} as |option|>\n                  {{#if (and (eq option \"HTTP\") this.isHttpDisabled)}}\n                    <span class=\"text-muted\">{{option}}</span>\n                    <small class=\"text-warning\">Requires <LinkTo @route=\"account.billing.subscription\">plan upgrade</LinkTo></small>\n                  {{else}}\n                    {{option}}\n                  {{/if}}\n                </Ui::PSelect>\n              {{else}}\n                <label class=\"normal m-t-10\"> {{notification.notificationMedium}}</label>\n              {{/if}}\n            </td>\n            {{#unless @isMonitor}}\n            <td>\n              <Ui::PSelect @disabled={{not @editable}} @options={{this.notificationStyles}} @selected={{notification.successNotificationStyle}}\n                @onChange={{fn (mut notification.successNotificationStyle)}} as |option|>\n                {{if (eq option 'First') 'When Resolving Failure' option}}\n              </Ui::PSelect>\n            </td>\n            <td>\n              <Ui::PSelect @disabled={{not @editable}} @options={{this.notificationStyles}} @selected={{notification.failureNotificationStyle}}\n                @onChange={{fn (mut notification.failureNotificationStyle)}} as |option|>\n                {{if (eq option 'First') 'First Failure' option}}\n              </Ui::PSelect>\n            </td>\n            <td>\n              <Input disabled={{not @editable}} @type=\"number\" class=\"form-control\" @value={{notification.failureNotificationConsecutiveTimes}} min={{1}} />\n            </td>\n            {{/unless}}\n            <td>\n              {{#if (eq notification.notificationMedium 'Email')}}\n                <div class=\"d-flex\">\n                  {{#unless (or @executionDetails @isMonitor)}}\n                    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\">\n                      <Ui::PSelect @disabled={{not @editable}} @options={{this.notificationTargets}} @selected={{notification.notificationTarget}}\n                        @onChange={{fn (mut notification.notificationTarget)}} as |option|>\n                        {{if (eq option 'CustomList') 'Custom' (concat 'Org Email')}}\n                      </Ui::PSelect>\n                    </div>\n                  {{/unless}}\n                  <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-2 mb-md-0 flex-grow-100\">\n                    {{#if (and (not @isMonitor) (eq notification.notificationTarget 'OrgEmail'))}}\n                      <Input @type=\"text\" class=\"form-control width-full\" disabled={{true}} @value={{this.orgEmail}} />\n                    {{else}}\n                      <Input @type=\"text\"\n                        class=\"form-control width-full\"\n                        placeholder=\"Comma separated email list (e.g. a@a.com,b@b.com)\"\n                        disabled={{not @editable}}\n                        @value={{notification.customNotificationList}} />\n                      <input\n                        class=\"hidden\"\n                        value={{notification.customNotificationList}}\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Email list is required.\"\n                        data-parsley-emaillist=\"true\"\n                        data-parsley-emaillist-message=\"Email list must be a comma separated list of valid email addresses.\"\n                        data-parsley-errors-container=\"#notificationEmailErrors-{{index}}\" />\n                    {{/if}}\n                  </div>\n                </div>\n                <div id=\"notificationEmailErrors-{{index}}\"></div>\n              {{else if (eq notification.notificationMedium 'HTTP')}}\n                <div class=\"d-flex flex-row\">\n                  {{#unless @isMonitor}}\n                    <label class=\"m-r-10 m-t-8 text-nowrap align-items-center mw-100px\">Target URL</label>\n                  {{/unless}}\n                  <div class=\"w-100\">\n                    <Input @type=\"text\"\n                          @value={{this.getTargetUrl notification}}\n                          disabled={{not @editable}}\n                          {{on \"change\" (pick \"target.value\" (fn this.updateCustomNotificationList notification))}}\n                          placeholder=\"URL to send HTTP POST with execution json as body\"\n                          class=\"form-control\" />\n  \n                    <div class=\"m-t-5\">\n                      <label class=\"normal\"><Input @type=\"checkbox\" disabled={{not @editable}} @checked={{this.getSendViaRunner notification}} {{on \"input\" (fn this.onChangeSendViaRunner notification)}} /> Send via runner if possible</label>\n                      <Ui::InfoIcon @isHtml={{true}}\n                                    @placement=\"bottom\"\n                                    @content=\"If checked and the test was run on at least one self-hosted test runner,\n                                    the notification will be triggered from a test runner in that region on test completion.\n                                    This can be useful if you need the notification to come from inside your network and not from Testable Cloud.\"\n                      />\n                    </div>\n                  </div>\n                </div>\n  \n              {{else if (eq notification.notificationMedium 'Slack')}}\n                <SlackNotificationConfig\n                  @customNotificationList={{notification.customNotificationList}}\n                  @onSave={{mut notification.customNotificationList}}\n                  @slackChannels={{this.slackChannels}}\n                  @onLoadChannels={{fn (mut this.slackChannels)}}\n                  @editable={{@editable}} />\n              {{else if (eq notification.notificationMedium 'Teams')}}\n                <TeamsNotificationConfig\n                  @customNotificationList={{notification.customNotificationList}}\n                  @onSave={{mut notification.customNotificationList}}\n                  @teamsChannels={{this.teamsChannels}}\n                  @onLoadChannels={{fn (mut this.teamsChannels)}}\n                  @editable={{@editable}} />\n              {{else if (eq notification.notificationMedium 'SNS')}}\n                <SnsNotificationConfig\n                  @customNotificationList={{notification.customNotificationList}}\n                  @awsRegions={{this.awsRegions}}\n                  @onSave={{mut notification.customNotificationList}}\n                  @editable={{@editable}} />\n              {{else}}\n                <div class=\"d-flex\">\n                  {{#if (and (not @isMonitor) (eq notification.notificationMedium 'Text'))}}\n                    <label class=\"m-r-10 m-t-8 text-nowrap align-items-center mw-100px\">Phone Numbers</label>\n                  {{/if}}\n                  <Input @type=\"text\"\n                        @value={{notification.customNotificationList}}\n                        disabled={{not @editable}}\n                        placeholder=\"Comma separated phone number list (e.g. +15554443333,+440207765118)\"\n                        class=\"form-control\"\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Number list is required.\"\n                        data-parsley-phonelist=\"true\"\n                        data-parsley-phonelist-message=\"Number list must be a comma separated list of valid numbers.\" />\n                </div>\n              {{/if}}\n            </td>\n            {{#if @isMonitor}}\n              <td>\n                <Ui::PSelect @disabled={{or (not @editable) this.isRecurringDisabled}} @options={{this.monitorRepeatOptions}}\n                  @selected={{this.getSelectedRepeatOption notification.repeat}}\n                  @onChange={{fn this.updateRepeat notification}} as |option|>\n                  {{option.label}}\n                </Ui::PSelect>\n                {{#if this.isRecurringDisabled}}\n                  <small class=\"text-warning d-block m-t-5\">Requires <LinkTo @route=\"account.billing.subscription\">plan upgrade</LinkTo></small>\n                {{/if}}\n              </td>\n              <td>\n                <Ui::PSelect @disabled={{or (not @editable) this.isRecurringDisabled}} @options={{this.monitorDelayOptions}}\n                  @selected={{this.getSelectedDelayOption notification.delay}}\n                  @onChange={{fn this.updateDelay notification}} as |option|>\n                  {{option.label}}\n                </Ui::PSelect>\n                {{#if this.isRecurringDisabled}}\n                  <small class=\"text-warning d-block m-t-5\">Requires <LinkTo @route=\"account.billing.subscription\">plan upgrade</LinkTo></small>\n                {{/if}}\n              </td>\n            {{/if}}\n          </tr>\n          {{#if (and (eq notification.notificationMedium 'Text') (or (not notification.id) (not-eq notification.customNotificationList notification.defaultNotificationList) ) )}}\n            <tr>\n              <td colspan={{if @isMonitor \"5\" \"6\"}}>\n                <label class=\"normal mb-0\">\n                  <Input @type=\"checkbox\" @checked={{notification.agreeTerms}}  />\n                  I agree to receive text messages from Testable LLC. Message &#38; data rates may apply.\n                  <Input class=\"hidden\" disabled={{true}} @checked={{notification.agreeTerms}}\n                        @type=\"checkbox\"\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Please select this checkbox\" />\n                </label>\n              </td>\n            </tr>\n          {{/if}}\n        {{else}}\n          <tr>\n            <td colspan=\"{{if @editable (if @isMonitor '5' '6') (if @isMonitor '4' '5')}}\">No notifications configured yet.</td>\n          </tr>\n        {{/each}}\n      </tbody>\n    </table>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Add notification\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"addNotification\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"table\\\"],[14,0,\\\"table mw-640\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 5%;\\\"],null]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"th\\\"],[12],[1,\\\"Type\\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 15%;\\\"],null]],[12],[1,\\\"On Success\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 15%;\\\"],null]],[12],[1,\\\"On Failure\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Consecutive\\\\n            \\\"],[8,[39,11],null,[[\\\"@content\\\"],[\\\"How many consecutive failures of a test configuration must occur before a failure alert is sent.\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 35%\\\"],null]],[12],[1,\\\"Configuration\\\\n          \\\"],[8,[39,11],null,[[\\\"@isHtml\\\",\\\"@placement\\\",\\\"@content\\\"],[true,\\\"bottom\\\",\\\"The target(s) for the notification. Either a comma separated list of email addresses, phone numbers, or URLs depending on the medium. For HTTP notifications you can optionally choose to mask certain sensitive parts of a URL when it's printed to the test log. To do this instead of <strong>https://foo.com/bar?key=sensitivetext</strong> you would specify <strong>secure:https://foo.com/bar?key=[sensitivetext]</strong>. In secure URLs you can escape the <strong>[</strong> character with a backslash before it (<strong>\\\\\\\\[</strong>).\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 15%;\\\"],null]],[12],[1,\\\"Repeat\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 15%;\\\"],null]],[12],[1,\\\"Delay\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,3]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger m-t-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete notification\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"deleteNotification\\\"]],[30,4]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"notificationMediums\\\",\\\"length\\\"]],1],null],[[[1,\\\"              \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,19],[[30,1]],null],[30,0,[\\\"notificationMediums\\\"]],[30,4,[\\\"notificationMedium\\\"]],[28,[37,16],[[30,0,[\\\"updateNotificationMedium\\\"]],[30,4]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[28,[37,21],[[30,6],\\\"HTTP\\\"],null],[30,0,[\\\"isHttpDisabled\\\"]]],null],[[[1,\\\"                  \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,[30,6]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"small\\\"],[14,0,\\\"text-warning\\\"],[12],[1,\\\"Requires \\\"],[8,[39,24],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"plan upgrade\\\"]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[1,[30,6]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal m-t-10\\\"],[12],[1,\\\" \\\"],[1,[30,4,[\\\"notificationMedium\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,19],[[30,1]],null],[30,0,[\\\"notificationStyles\\\"]],[30,4,[\\\"successNotificationStyle\\\"]],[28,[37,16],[[28,[37,26],[[30,4,[\\\"successNotificationStyle\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[52,[28,[37,21],[[30,7],\\\"First\\\"],null],\\\"When Resolving Failure\\\",[30,7]]],[1,\\\"\\\\n            \\\"]],[7]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,19],[[30,1]],null],[30,0,[\\\"notificationStyles\\\"]],[30,4,[\\\"failureNotificationStyle\\\"]],[28,[37,16],[[28,[37,26],[[30,4,[\\\"failureNotificationStyle\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[52,[28,[37,21],[[30,8],\\\"First\\\"],null],\\\"First Failure\\\",[30,8]]],[1,\\\"\\\\n            \\\"]],[8]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,27],[[16,\\\"disabled\\\",[28,[37,19],[[30,1]],null]],[24,0,\\\"form-control\\\"],[16,\\\"min\\\",1]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,4,[\\\"failureNotificationConsecutiveTimes\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"Email\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,28],[[30,9],[30,2]],null]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,19],[[30,1]],null],[30,0,[\\\"notificationTargets\\\"]],[30,4,[\\\"notificationTarget\\\"]],[28,[37,16],[[28,[37,26],[[30,4,[\\\"notificationTarget\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[52,[28,[37,21],[[30,10],\\\"CustomList\\\"],null],\\\"Custom\\\",[28,[37,29],[\\\"Org Email\\\"],null]]],[1,\\\"\\\\n                    \\\"]],[10]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-2 mb-md-0 flex-grow-100\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[28,[37,19],[[30,2]],null],[28,[37,21],[[30,4,[\\\"notificationTarget\\\"]],\\\"OrgEmail\\\"],null]],null],[[[1,\\\"                    \\\"],[8,[39,27],[[24,0,\\\"form-control width-full\\\"],[16,\\\"disabled\\\",true]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"orgEmail\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[8,[39,27],[[24,0,\\\"form-control width-full\\\"],[24,\\\"placeholder\\\",\\\"Comma separated email list (e.g. a@a.com,b@b.com)\\\"],[16,\\\"disabled\\\",[28,[37,19],[[30,1]],null]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,4,[\\\"customNotificationList\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[10,\\\"input\\\"],[14,0,\\\"hidden\\\"],[15,2,[30,4,[\\\"customNotificationList\\\"]]],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Email list is required.\\\"],[14,\\\"data-parsley-emaillist\\\",\\\"true\\\"],[14,\\\"data-parsley-emaillist-message\\\",\\\"Email list must be a comma separated list of valid email addresses.\\\"],[15,\\\"data-parsley-errors-container\\\",[29,[\\\"#notificationEmailErrors-\\\",[30,5]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,1,[29,[\\\"notificationEmailErrors-\\\",[30,5]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"HTTP\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"d-flex flex-row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"                  \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 m-t-8 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Target URL\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,27],[[16,\\\"disabled\\\",[28,[37,19],[[30,1]],null]],[24,\\\"placeholder\\\",\\\"URL to send HTTP POST with execution json as body\\\"],[24,0,\\\"form-control\\\"],[4,[38,2],[\\\"change\\\",[28,[37,30],[\\\"target.value\\\",[28,[37,16],[[30,0,[\\\"updateCustomNotificationList\\\"]],[30,4]],null]],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[28,[30,0,[\\\"getTargetUrl\\\"]],[[30,4]],null]]],null],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,27],[[16,\\\"disabled\\\",[28,[37,19],[[30,1]],null]],[4,[38,2],[\\\"input\\\",[28,[37,16],[[30,0,[\\\"onChangeSendViaRunner\\\"]],[30,4]],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[30,0,[\\\"getSendViaRunner\\\"]],[[30,4]],null]]],null],[1,\\\" Send via runner if possible\\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,11],null,[[\\\"@isHtml\\\",\\\"@placement\\\",\\\"@content\\\"],[true,\\\"bottom\\\",\\\"If checked and the test was run on at least one self-hosted test runner,\\\\n                                  the notification will be triggered from a test runner in that region on test completion.\\\\n                                  This can be useful if you need the notification to come from inside your network and not from Testable Cloud.\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"Slack\\\"],null],[[[1,\\\"              \\\"],[8,[39,31],null,[[\\\"@customNotificationList\\\",\\\"@onSave\\\",\\\"@slackChannels\\\",\\\"@onLoadChannels\\\",\\\"@editable\\\"],[[30,4,[\\\"customNotificationList\\\"]],[28,[37,26],[[30,4,[\\\"customNotificationList\\\"]]],null],[30,0,[\\\"slackChannels\\\"]],[28,[37,16],[[28,[37,26],[[30,0,[\\\"slackChannels\\\"]]],null]],null],[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"Teams\\\"],null],[[[1,\\\"              \\\"],[8,[39,32],null,[[\\\"@customNotificationList\\\",\\\"@onSave\\\",\\\"@teamsChannels\\\",\\\"@onLoadChannels\\\",\\\"@editable\\\"],[[30,4,[\\\"customNotificationList\\\"]],[28,[37,26],[[30,4,[\\\"customNotificationList\\\"]]],null],[30,0,[\\\"teamsChannels\\\"]],[28,[37,16],[[28,[37,26],[[30,0,[\\\"teamsChannels\\\"]]],null]],null],[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"SNS\\\"],null],[[[1,\\\"              \\\"],[8,[39,33],null,[[\\\"@customNotificationList\\\",\\\"@awsRegions\\\",\\\"@onSave\\\",\\\"@editable\\\"],[[30,4,[\\\"customNotificationList\\\"]],[30,0,[\\\"awsRegions\\\"]],[28,[37,26],[[30,4,[\\\"customNotificationList\\\"]]],null],[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[28,[37,19],[[30,2]],null],[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"Text\\\"],null]],null],[[[1,\\\"                  \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 m-t-8 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Phone Numbers\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[8,[39,27],[[16,\\\"disabled\\\",[28,[37,19],[[30,1]],null]],[24,\\\"placeholder\\\",\\\"Comma separated phone number list (e.g. +15554443333,+440207765118)\\\"],[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Number list is required.\\\"],[24,\\\"data-parsley-phonelist\\\",\\\"true\\\"],[24,\\\"data-parsley-phonelist-message\\\",\\\"Number list must be a comma separated list of valid numbers.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,4,[\\\"customNotificationList\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,28],[[28,[37,19],[[30,1]],null],[30,0,[\\\"isRecurringDisabled\\\"]]],null],[30,0,[\\\"monitorRepeatOptions\\\"]],[28,[30,0,[\\\"getSelectedRepeatOption\\\"]],[[30,4,[\\\"repeat\\\"]]],null],[28,[37,16],[[30,0,[\\\"updateRepeat\\\"]],[30,4]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,11,[\\\"label\\\"]]],[1,\\\"\\\\n              \\\"]],[11]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isRecurringDisabled\\\"]],[[[1,\\\"                \\\"],[10,\\\"small\\\"],[14,0,\\\"text-warning d-block m-t-5\\\"],[12],[1,\\\"Requires \\\"],[8,[39,24],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"plan upgrade\\\"]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,28],[[28,[37,19],[[30,1]],null],[30,0,[\\\"isRecurringDisabled\\\"]]],null],[30,0,[\\\"monitorDelayOptions\\\"]],[28,[30,0,[\\\"getSelectedDelayOption\\\"]],[[30,4,[\\\"delay\\\"]]],null],[28,[37,16],[[30,0,[\\\"updateDelay\\\"]],[30,4]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,12,[\\\"label\\\"]]],[1,\\\"\\\\n              \\\"]],[12]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isRecurringDisabled\\\"]],[[[1,\\\"                \\\"],[10,\\\"small\\\"],[14,0,\\\"text-warning d-block m-t-5\\\"],[12],[1,\\\"Requires \\\"],[8,[39,24],null,[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"plan upgrade\\\"]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[28,[37,21],[[30,4,[\\\"notificationMedium\\\"]],\\\"Text\\\"],null],[28,[37,28],[[28,[37,19],[[30,4,[\\\"id\\\"]]],null],[28,[37,34],[[30,4,[\\\"customNotificationList\\\"]],[30,4,[\\\"defaultNotificationList\\\"]]],null]],null]],null],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[15,\\\"colspan\\\",[52,[30,2],\\\"5\\\",\\\"6\\\"]],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal mb-0\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,27],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,4,[\\\"agreeTerms\\\"]]]],null],[1,\\\"\\\\n                I agree to receive text messages from Testable LLC. Message & data rates may apply.\\\\n                \\\"],[8,[39,27],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select this checkbox\\\"]],[[\\\"@checked\\\",\\\"@type\\\"],[[30,4,[\\\"agreeTerms\\\"]],\\\"checkbox\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[4,5]],[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[15,\\\"colspan\\\",[29,[[52,[30,1],[52,[30,2],\\\"5\\\",\\\"6\\\"],[52,[30,2],\\\"4\\\",\\\"5\\\"]]]]],[12],[1,\\\"No notifications configured yet.\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@editable\\\",\\\"@isMonitor\\\",\\\"@notifications\\\",\\\"notification\\\",\\\"index\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"@executionDetails\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],[\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"div\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"html-safe\\\",\\\"unless\\\",\\\"ui/info-icon\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"fn\\\",\\\"gt\\\",\\\"ui/p-select\\\",\\\"not\\\",\\\"and\\\",\\\"eq\\\",\\\"span\\\",\\\"small\\\",\\\"link-to\\\",\\\"label\\\",\\\"mut\\\",\\\"input\\\",\\\"or\\\",\\\"concat\\\",\\\"pick\\\",\\\"slack-notification-config\\\",\\\"teams-notification-config\\\",\\\"sns-notification-config\\\",\\\"not-eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/notifications-table.hbs\",\n    \"isStrictMode\": false\n  });\n  const prefix = '__runner@';\n  let NotificationsTableComponent = _exports.default = (_class = class NotificationsTableComponent extends _component2.default {\n    get monitorRepeatOptions() {\n      const options = [{\n        value: 0,\n        label: 'No repeat'\n      }, {\n        value: -1,\n        label: 'Each check failure'\n      }, {\n        value: 1,\n        label: '1 time'\n      }, {\n        value: 2,\n        label: '2 times'\n      }, {\n        value: 3,\n        label: '3 times'\n      }, {\n        value: 5,\n        label: '5 times'\n      }, {\n        value: 10,\n        label: '10 times'\n      }];\n      return options.filter(opt => this.args.isHeartbeat ? opt.value !== -1 : true);\n    }\n    get awsRegions() {\n      return _environment.config.isMonitoring ? this.args.awsRegions : _providers.default.getAwsRegions();\n    }\n    getSendViaRunner(notification) {\n      return notification.customNotificationList.startsWith(prefix);\n    }\n    getTargetUrl(notification) {\n      let targetUrl = notification.customNotificationList;\n      if (notification.notificationMedium === 'HTTP' && targetUrl.startsWith(prefix)) {\n        targetUrl = targetUrl.split(prefix)[1];\n      }\n      return targetUrl;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"orgAcl\", _descriptor, this);\n      _initializerDefineProperty(this, \"notificationMediums\", _descriptor2, this);\n      _initializerDefineProperty(this, \"notificationStyles\", _descriptor3, this);\n      _initializerDefineProperty(this, \"notificationTargets\", _descriptor4, this);\n      _initializerDefineProperty(this, \"integrations\", _descriptor5, this);\n      _initializerDefineProperty(this, \"orgEmail\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isOnPrem\", _descriptor7, this);\n      _initializerDefineProperty(this, \"monitorDelayOptions\", _descriptor8, this);\n      _defineProperty(this, \"getSelectedRepeatOption\", repeatValue => {\n        return this.monitorRepeatOptions.find(option => option.value === repeatValue) || this.monitorRepeatOptions[0];\n      });\n      _defineProperty(this, \"getSelectedDelayOption\", delayValue => {\n        return this.monitorDelayOptions.find(option => option.value === delayValue) || this.monitorDelayOptions[0];\n      });\n      this.buildNotificationMediums();\n    }\n    findActiveIntegration(integrationType) {\n      return !!_.find(this.integrations, i => i === integrationType);\n    }\n    get hasFeatureHttpIntegration() {\n      const feature = this.orgAcl.lookup('monitor.integrations.http');\n      return !feature.feature || feature.match;\n    }\n    get isHttpDisabled() {\n      return _environment.config.isMonitoring && !this.hasFeatureHttpIntegration;\n    }\n    get hasFeatureRecurringNotifications() {\n      const feature = this.orgAcl.lookup('monitor.notifications.recurring');\n      return !feature.feature || feature.match;\n    }\n    get isRecurringDisabled() {\n      return _environment.config.isMonitoring && !this.hasFeatureRecurringNotifications;\n    }\n    buildNotificationMediums() {\n      const notificationMediums = [];\n      notificationMediums.push('Email');\n      if (_environment.config.isSmsEnabled) {\n        notificationMediums.push('Text');\n        notificationMediums.push('Voice');\n      }\n      if (!_environment.config.isOnPrem) {\n        notificationMediums.push('WhatsApp');\n      }\n      notificationMediums.push('HTTP');\n      if (this.findActiveIntegration('Slack')) {\n        notificationMediums.push('Slack');\n      }\n      if (this.findActiveIntegration('Teams')) {\n        notificationMediums.push('Teams');\n      }\n      if (this.findActiveIntegration('SNS')) {\n        notificationMediums.push('SNS');\n      }\n      this.notificationMediums = notificationMediums;\n    }\n    addNotification() {\n      this.args.notifications.push({\n        notificationMedium: 'Email',\n        successNotificationStyle: 'First',\n        failureNotificationStyle: 'First',\n        failureNotificationConsecutiveTimes: 1,\n        notificationTarget: 'OrgEmail',\n        customNotificationList: ''\n      });\n    }\n    updateCustomNotificationList(notification, value) {\n      let targetUrl = value;\n      if (targetUrl) {\n        if (notification.sendViaRunner && !targetUrl.startsWith(prefix)) {\n          targetUrl = `__runner@${targetUrl}`;\n        } else if (!notification.sendViaRunner && targetUrl.startsWith(prefix)) {\n          targetUrl = targetUrl.split(prefix)[1];\n        }\n      }\n      (0, _object.set)(notification, 'customNotificationList', targetUrl);\n    }\n    onChangeSendViaRunner(notification, event) {\n      let targetUrl = notification.customNotificationList;\n      (0, _object.set)(notification, 'sendViaRunner', event.target.checked);\n      this.updateCustomNotificationList(notification, targetUrl);\n    }\n    updateNotificationMedium(notification, selectedMedium) {\n      if (selectedMedium === 'HTTP' && this.isHttpDisabled) return;\n      (0, _object.set)(notification, 'notificationMedium', selectedMedium);\n      if (selectedMedium === 'Slack' || selectedMedium === 'Teams' || selectedMedium === 'SNS') {\n        (0, _object.set)(notification, 'notificationTarget', 'CustomList');\n        (0, _object.set)(notification, 'customNotificationList', '{}');\n      }\n    }\n    deleteNotification(notification) {\n      // todo: this is not DDAU but still working so leaving it like this\n      const idx = this.args.notifications.indexOf(notification);\n      if (idx > -1) this.args.notifications.splice(idx, 1);\n    }\n    updateRepeat(notification, selectedOption) {\n      (0, _object.set)(notification, 'repeat', selectedOption.value);\n    }\n    updateDelay(notification, selectedOption) {\n      (0, _object.set)(notification, 'delay', selectedOption.value);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"orgAcl\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"notificationMediums\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"notificationStyles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['None', 'Always', 'First'];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"notificationTargets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['CustomList', 'OrgEmail'];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"integrations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser.activeIntegrations || [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"orgEmail\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser.org.email;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isOnPrem\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.isOnPrem;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"monitorDelayOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [{\n        value: 0,\n        label: 'No delay'\n      }, {\n        value: 5,\n        label: '5 minutes'\n      }, {\n        value: 10,\n        label: '10 minutes'\n      }, {\n        value: 15,\n        label: '15 minutes'\n      }, {\n        value: 30,\n        label: '30 minutes'\n      }, {\n        value: 60,\n        label: '1 hour'\n      }, {\n        value: 120,\n        label: '2 hours'\n      }, {\n        value: 240,\n        label: '4 hours'\n      }, {\n        value: 480,\n        label: '8 hours'\n      }, {\n        value: 1440,\n        label: '24 hours'\n      }];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"addNotification\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addNotification\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCustomNotificationList\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCustomNotificationList\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSendViaRunner\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSendViaRunner\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNotificationMedium\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNotificationMedium\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteNotification\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteNotification\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRepeat\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRepeat\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDelay\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDelay\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NotificationsTableComponent);\n});","define(\"@testable/shared-ui/components/npm-modules-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"npmModulesModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Available NPM Modules</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <ul>\n            {{#each this.modules as |module|}}\n              <li><a target=\"_blank\" href=\"https://www.npmjs.com/package/{{module}}\" rel=\"noreferrer noopener\">{{module}}</a></li>\n            {{else}}\n              <li>Loading available NPM modules...</li>\n            {{/each}}\n          </ul>\n          <span>See the <a target=\"_blank\" href=\"https://docs.testable.io/scripts/write-script.html\" rel=\"noreferrer noopener\">documentation</a> for more details on writing a script.</span>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"npmModulesModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Available NPM Modules\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"modules\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[\\\"https://www.npmjs.com/package/\\\",[30,1]]]],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,[30,1]],[13],[13],[1,\\\"\\\\n\\\"]],[1]],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"Loading available NPM modules...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,\\\"See the \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/scripts/write-script.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"documentation\\\"],[13],[1,\\\" for more details on writing a script.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"module\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"a\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/npm-modules-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let CoreModules = ['async', 'fs', 'http', 'https', 'net', 'tls', 'ws', 'engine.io-client', 'socket.io-client', 'socket.io-client-v2', 'lodash', 'moment', 'process', 'util', 'url', 'uuid', 'request', 'jsonfile', 'har-replay', 'crypto', 'request-promise'];\n  let NpmModulesModalComponent = _exports.default = (_class = class NpmModulesModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"modules\", _descriptor, this);\n      _server.default.getNpmModules().then(results => {\n        this.modules = [..._.keys(results), ...CoreModules].sort();\n      });\n    }\n    didInsert() {\n      const _this = this;\n      $('#npmModulesModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#npmModulesModal').on('shown.bs.modal', function () {\n        $('#runInRegion').focus();\n      });\n      $('#npmModulesModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modules\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NpmModulesModalComponent);\n});","define(\"@testable/shared-ui/components/oauth-org-chooser\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/login-redirect\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _environment, _lib, _loginRedirect, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/login-redirect\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"container m-t-30\">\n    <div class=\"row justify-content-center\">\n      <div class=\"col-md-8 col-lg-6\">\n        <div class=\"panel panel-inverse\">\n          <div class=\"panel-heading\">\n            <h4 class=\"panel-title\">Choose Organization</h4>\n          </div>\n          <div class=\"panel-body\">\n            {{#if this.hasMultipleOrgs}}\n              <p class=\"m-b-20\">\n                Select the Testable organization to connect via this MCP server.\n              </p>\n              <div class=\"list-group\">\n                {{#each this.orgs as |assoc|}}\n                  <button\n                    type=\"button\"\n                    class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n                    {{on \"click\" (fn this.selectOrg assoc)}}\n                  >\n                    <span>{{assoc.organization.name}}</span>\n                    <Ui::Icon @icon=\"fa fa-chevron-right\" />\n                  </button>\n                {{/each}}\n              </div>\n            {{else}}\n              <p class=\"m-b-0\">No additional organization choice is required.</p>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"container m-t-30\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row justify-content-center\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-8 col-lg-6\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel panel-inverse\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"Choose Organization\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasMultipleOrgs\\\"]],[[[1,\\\"            \\\"],[10,2],[14,0,\\\"m-b-20\\\"],[12],[1,\\\"\\\\n              Select the Testable organization to connect via this MCP server.\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"list-group\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,0,[\\\"orgs\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"selectOrg\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,[30,1,[\\\"organization\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-chevron-right\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,2],[14,0,\\\"m-b-0\\\"],[12],[1,\\\"No additional organization choice is required.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"assoc\\\"],[\\\"div\\\",\\\"h4\\\",\\\"if\\\",\\\"p\\\",\\\"each\\\",\\\"-track-array\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"span\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/oauth-org-chooser.hbs\",\n    \"isStrictMode\": false\n  });\n  let OauthOrgChooserComponent = _exports.default = (_class = class OauthOrgChooserComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n    }\n    get orgs() {\n      return _.sortBy((this.currentUser.orgs || []).filter(assoc => assoc.organization), assoc => assoc.organization.name.toUpperCase());\n    }\n    get hasMultipleOrgs() {\n      return this.orgs.length > 1;\n    }\n    selectOrg(assoc) {\n      try {\n        const redirectUrl = new URL(this.args.redirect);\n        if (!(0, _loginRedirect.isSafeAuthorizeRedirect)(redirectUrl)) {\n          _lib.default.error('Unable to continue OAuth authorization for this URL.');\n          return;\n        }\n        redirectUrl.searchParams.set('orgId', assoc.organization.id);\n        window.setTimeout(() => {\n          window.location.assign('/');\n        }, 1500);\n        window.location.assign((0, _loginRedirect.prepareSafeAuthorizeRedirect)(redirectUrl));\n      } catch (e) {\n        _lib.default.error('Unable to continue OAuth authorization.');\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"selectOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"selectOrg\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OauthOrgChooserComponent);\n});","define(\"@testable/shared-ui/components/org-link-info\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.selectedOrg.primaryOrgId}}\n    <div class=\"note note-info pull-left\">\n      <p>Linked to <strong>\n        <LinkTo @route='account.organization'\n                @model={{this.selectedOrg.primaryOrgId}}>{{this.selectedOrg.primaryOrgName}}</LinkTo>\n      </strong>\n        for billing, plan, limits, and monthly credits.\n      </p>\n      <p class=\"f-s-11\">Contact support@testable.io to unlink or change</p>\n    </div>\n    <div class=\"clear-fix\"></div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"selectedOrg\\\",\\\"primaryOrgId\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info pull-left\\\"],[12],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"Linked to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.organization\\\",[30,0,[\\\"selectedOrg\\\",\\\"primaryOrgId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"selectedOrg\\\",\\\"primaryOrgName\\\"]]]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n      for billing, plan, limits, and monthly credits.\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[14,0,\\\"f-s-11\\\"],[12],[1,\\\"Contact support@testable.io to unlink or change\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"clear-fix\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"if\\\",\\\"div\\\",\\\"p\\\",\\\"strong\\\",\\\"link-to\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/org-link-info.hbs\",\n    \"isStrictMode\": false\n  });\n  class OrgLinkInfoComponent extends _component2.default {\n    get selectedOrg() {\n      return this.args.org || _environment.config.currentUser.org;\n    }\n  }\n  _exports.default = OrgLinkInfoComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OrgLinkInfoComponent);\n});","define(\"@testable/shared-ui/components/organization-details\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"lodash-es\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _trackedBuiltIns, _environment, _server, _lib, _lodashEs, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"lodash-es\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    \n  <div class=\"heading-wrapper m-b-10\">\n    <div class=\"settings-organization__dropdown-container\">\n      <h1 class=\"page-header m-b-10 m-t-10\">\n        {{#if (and this.isAdmin this.organization.hasLinkedOrgs)}}\n          {{#if this.isLoadingLinkedOrgs}}\n            Loading linked organizations...\n          {{else}}\n            <Ui::PSelect @disabled={{not (is-empty this.organization.uuid)}} @options={{this.linkedOrgs}} @selected={{this.selectedOrg}}\n                     @placeholder=\"Please select an organization...\" @onChange={{this.setSelectedOrgAction}} as |orgOpt|>\n              <strong>{{orgOpt.name}}</strong>\n              <small>{{orgOpt.email}}</small>\n            </Ui::PSelect>\n          {{/if}}\n        {{else}}\n          {{this.organization.name}}\n          <Ui::DeleteLoadingIndicator @isDeleting={{this.isDeletingOrg}} @class=\"fs-6\" />\n          <small>{{this.organization.email}}</small>\n        {{/if}}\n      </h1>\n      {{#unless this.isLoadingLinkedOrgs}}\n      <div class=\"panel-heading-btn m-t-5\">\n        <a href=\"{{this.downloadAccessReportUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n          title=\"Download Access Report\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{#if (and this.isSelectedOrgAdmin this.canDelete)}}\n          <a {{on \"click\" this.showCreateOrgModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n            title=\"Edit Organization\" role=\"button\"><Ui::Icon @icon=\"fa fa-edit\" /></a>\n          <a {{on \"click\" this.deleteOrg}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n            title=\"Delete Organization\" role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n        {{/if}}\n      </div>\n    {{/unless}}\n    </div>\n  \n    <div class=\"row p-b-10\">\n        <div class=\"col-md-12\">\n          <ol class=\"breadcrumb pull-right\">\n            <li class=\"breadcrumb-item\">Account</li>\n            <li class=\"breadcrumb-item\"><LinkTo @route='account.organizations' >Organizations</LinkTo></li>\n            <li class=\"breadcrumb-item active\">{{this.organization.name}}</li>\n          </ol>\n        </div>\n      </div>\n  </div>\n  <OrgLinkInfo @org={{this.organization}} />\n  \n  {{!-- begin panel --}}\n  <div class=\"panel\">\n    <div class=\"panel-heading\">\n      {{#if this.isSelectedOrgAdmin}}\n        <div class=\"panel-heading-btn\">\n          <a {{on \"click\" this.addMember}} class=\"btn btn-primary btn-xs\" role=\"button\">Add Member</a>\n        </div>\n      {{/if}}\n      <h4 class=\"panel-title\"><strong>Members</strong></h4>\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"table-responsive\">\n        <table class=\"table mw-640\">\n          <thead>\n            <tr>\n              <td><strong>Name</strong></td>\n              {{#if this.hasLoginFeild}}\n                <td><strong>Login</strong></td>\n              {{/if}}\n              <td><strong>Email</strong></td>\n              {{#if this.hasAlternateEmailsFeild}}\n                <td><strong>Alternate Emails</strong></td>\n              {{/if}}\n              <td width=\"200\"><strong>Role</strong></td>\n              <td class=\"width-100\"><strong>Actions</strong></td>\n            </tr>\n          </thead>\n          <tbody>\n          {{#if this.loadingUsers}}\n            <tr>\n              <td class=\"text-center\" colspan=\"4\"><Ui::Icon @icon=\"fas fa-sync fa-spin\" class=\"text-primary m-r-5\" /> Loading members... </td>\n            </tr>\n          {{else if this.users}}\n            {{#each this.users as |userAssoc|}}\n              <tr>\n                <td>{{userAssoc.user.name}}</td>\n                {{#if this.hasLoginFeild}}\n                  <td>{{userAssoc.user.login}}</td>\n                {{/if}}\n                <td>\n                  {{userAssoc.user.email}}\n                </td>\n                {{#if this.hasAlternateEmailsFeild}}\n                  <td>{{userAssoc.user.alternateEmails}}</td>\n                {{/if}}\n                <td>\n                  {{#if (and this.isSelectedOrgAdmin userAssoc.isEditingRole)}}\n                    <div class=\"d-flex align-items-center\">\n                      <Ui::XSelect @class=\"form-control form-select\" @value={{userAssoc.customRole}} @onChange={{fn (mut userAssoc.customRole)}} as |xs| >\n                        {{#each this.userRoles as |role|}}\n                          <xs.option @value={{role}}>{{role}}</xs.option>\n                        {{/each}}\n                      </Ui::XSelect>\n                      <div class=\"d-flex panel-heading-btn\">\n                        <a {{on \"click\" (fn this.updateRole userAssoc)}} class=\"btn btn-sm btn-icon btn-success\" data-bs-toggle=\"tooltip\"\n                                                  title=\"Update\" role=\"button\"><Ui::Icon role=\"presentation\" @icon=\"fa fa-check\" /></a>\n                        <a {{on \"click\" (fn this.escPress userAssoc)}} class=\"btn btn-sm btn-icon btn-danger\" data-bs-toggle=\"tooltip\"\n                                                title=\"Cancel\" role=\"button\"><Ui::Icon role=\"presentation\" @icon=\"fa fa-times\" /></a>\n                      </div>\n                    </div>\n                  {{else if this.isSelectedOrgAdmin}}\n                    <a {{on \"click\" (fn this.editRole userAssoc)}} role=\"button\">{{userAssoc.userRole}}</a>\n                  {{else}}\n                    {{userAssoc.userRole}}\n                  {{/if}}\n                </td>\n                <td>\n                  {{#if (can-remove-user this.selectedOrg userAssoc this.isSelectedOrgAdmin)}}\n                    <button {{on \"click\" (fn this.removeMember userAssoc)}} type=\"button\" disabled={{userAssoc.isDeleting}} class=\"btn btn-danger btn-sm\">{{#if userAssoc.isDeleting}}<Ui::Icon @icon=\"fa-spinner fa-spin\" />{{else}}Remove{{/if}}</button>\n                  {{/if}}\n                </td>\n              </tr>\n            {{/each}}\n          {{else}}\n            <tr>\n              <td class=\"text-center\" colspan=\"4\">No members found.</td>\n            </tr>\n          {{/if}}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n  \n  {{#if this.showAddMemberModal}}\n    <AddMemberModal @org={{this.selectedOrg}}\n                       @modalClosed={{this.addMemberModalClosed}}\n                       @memberAdded={{this.memberAdded}} />\n  {{/if}}\n  \n  {{#if this.showCreateOrgModal}}\n    <CreateOrgModal @org={{this.selectedOrg}}\n                    @modalClosed={{this.createOrgModalClosed}}\n                    @orgSaved={{this.orgSaved}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"heading-wrapper m-b-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"settings-organization__dropdown-container\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-10 m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"isAdmin\\\"]],[30,0,[\\\"organization\\\",\\\"hasLinkedOrgs\\\"]]],null],[[[41,[30,0,[\\\"isLoadingLinkedOrgs\\\"]],[[[1,\\\"          Loading linked organizations...\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,4],null,[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[28,[37,5],[[28,[37,6],[[30,0,[\\\"organization\\\",\\\"uuid\\\"]]],null]],null],[30,0,[\\\"linkedOrgs\\\"]],[30,0,[\\\"selectedOrg\\\"]],\\\"Please select an organization...\\\",[30,0,[\\\"setSelectedOrgAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,[30,1,[\\\"email\\\"]]],[13],[1,\\\"\\\\n          \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"        \\\"],[1,[30,0,[\\\"organization\\\",\\\"name\\\"]]],[1,\\\"\\\\n        \\\"],[8,[39,9],null,[[\\\"@isDeleting\\\",\\\"@class\\\"],[[30,0,[\\\"isDeletingOrg\\\"]],\\\"fs-6\\\"]],null],[1,\\\"\\\\n        \\\"],[10,\\\"small\\\"],[12],[1,[30,0,[\\\"organization\\\",\\\"email\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isLoadingLinkedOrgs\\\"]]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"panel-heading-btn m-t-5\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[15,6,[29,[[30,0,[\\\"downloadAccessReportUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download Access Report\\\"],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"isSelectedOrgAdmin\\\"]],[30,0,[\\\"canDelete\\\"]]],null],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Edit Organization\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"showCreateOrgModalAction\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Organization\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"deleteOrg\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"row p-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ol\\\"],[14,0,\\\"breadcrumb pull-right\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item\\\"],[12],[1,\\\"Account\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item\\\"],[12],[8,[39,16],null,[[\\\"@route\\\"],[\\\"account.organizations\\\"]],[[\\\"default\\\"],[[[[1,\\\"Organizations\\\"]],[]]]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item active\\\"],[12],[1,[30,0,[\\\"organization\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,17],null,[[\\\"@org\\\"],[[30,0,[\\\"organization\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSelectedOrgAdmin\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,0,\\\"btn btn-primary btn-xs\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"addMember\\\"]]],null],[12],[1,\\\"Add Member\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Members\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table mw-640\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Name\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLoginFeild\\\"]],[[[1,\\\"              \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Login\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Email\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasAlternateEmailsFeild\\\"]],[[[1,\\\"              \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Alternate Emails\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"td\\\"],[14,\\\"width\\\",\\\"200\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Role\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,0,\\\"width-100\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Actions\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingUsers\\\"]],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[8,[39,12],[[24,0,\\\"text-primary m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fas fa-sync fa-spin\\\"]],null],[1,\\\" Loading members... \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"users\\\"]],[[[42,[28,[37,25],[[28,[37,25],[[30,0,[\\\"users\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,[30,2,[\\\"user\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLoginFeild\\\"]],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[12],[1,[30,2,[\\\"user\\\",\\\"login\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[30,2,[\\\"user\\\",\\\"email\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasAlternateEmailsFeild\\\"]],[[[1,\\\"                \\\"],[10,\\\"td\\\"],[12],[1,[30,2,[\\\"user\\\",\\\"alternateEmails\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"isSelectedOrgAdmin\\\"]],[30,2,[\\\"isEditingRole\\\"]]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,26],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,2,[\\\"customRole\\\"]],[28,[37,27],[[28,[37,28],[[30,2,[\\\"customRole\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,25],[[28,[37,25],[[30,0,[\\\"userRoles\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,4]]],[[\\\"default\\\"],[[[[1,[30,4]]],[]]]]],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"                    \\\"]],[3]]]]],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"d-flex panel-heading-btn\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-success\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Update\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,27],[[30,0,[\\\"updateRole\\\"]],[30,2]],null]],null],[12],[8,[39,12],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Cancel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,27],[[30,0,[\\\"escPress\\\"]],[30,2]],null]],null],[12],[8,[39,12],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isSelectedOrgAdmin\\\"]],[[[1,\\\"                  \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,27],[[30,0,[\\\"editRole\\\"]],[30,2]],null]],null],[12],[1,[30,2,[\\\"userRole\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[1,[30,2,[\\\"userRole\\\"]]],[1,\\\"\\\\n                \\\"]],[]]]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,29],[[30,0,[\\\"selectedOrg\\\"]],[30,2],[30,0,[\\\"isSelectedOrgAdmin\\\"]]],null],[[[1,\\\"                  \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,2,[\\\"isDeleting\\\"]]],[24,0,\\\"btn btn-danger btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,27],[[30,0,[\\\"removeMember\\\"]],[30,2]],null]],null],[12],[41,[30,2,[\\\"isDeleting\\\"]],[[[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa-spinner fa-spin\\\"]],null]],[]],[[[1,\\\"Remove\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null]],[]],[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,\\\"No members found.\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showAddMemberModal\\\"]],[[[1,\\\"  \\\"],[8,[39,31],null,[[\\\"@org\\\",\\\"@modalClosed\\\",\\\"@memberAdded\\\"],[[30,0,[\\\"selectedOrg\\\"]],[30,0,[\\\"addMemberModalClosed\\\"]],[30,0,[\\\"memberAdded\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCreateOrgModal\\\"]],[[[1,\\\"  \\\"],[8,[39,32],null,[[\\\"@org\\\",\\\"@modalClosed\\\",\\\"@orgSaved\\\"],[[30,0,[\\\"selectedOrg\\\"]],[30,0,[\\\"createOrgModalClosed\\\"]],[30,0,[\\\"orgSaved\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"orgOpt\\\",\\\"userAssoc\\\",\\\"xs\\\",\\\"role\\\"],[\\\"div\\\",\\\"h1\\\",\\\"if\\\",\\\"and\\\",\\\"ui/p-select\\\",\\\"not\\\",\\\"is-empty\\\",\\\"strong\\\",\\\"small\\\",\\\"ui/delete-loading-indicator\\\",\\\"unless\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"on\\\",\\\"ol\\\",\\\"li\\\",\\\"link-to\\\",\\\"org-link-info\\\",\\\"h4\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"td\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"ui/x-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"can-remove-user\\\",\\\"button\\\",\\\"add-member-modal\\\",\\\"create-org-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/organization-details.hbs\",\n    \"isStrictMode\": false\n  });\n  let OrganizationDetailsComponent = _exports.default = (_class = class OrganizationDetailsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"loadingUsers\", _descriptor2, this);\n      _initializerDefineProperty(this, \"orgUsers\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isDeletingOrg\", _descriptor4, this);\n      _initializerDefineProperty(this, \"linkedOrgs\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedOrg\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isLoadingLinkedOrgs\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showAddMemberModal\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showCreateOrgModal\", _descriptor9, this);\n      _initializerDefineProperty(this, \"organization\", _descriptor0, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"userRoles\", _lib.default.userRoles());\n      this.loadOrganization();\n    }\n    get downloadAccessReportUrl() {\n      return _lib.default.toUrl('/orgs/' + this.organization?.id + '/access.csv?includeLinkedOrgs=' + this.isAdmin);\n    }\n    get isAdmin() {\n      return this.isAdminInOrg(this.organization?.id);\n    }\n    get isSelectedOrgAdmin() {\n      return _environment.config.currentUser.isAdmin || this.isAdminInOrg(this.selectedOrg?.id) || this.isAdmin && this.organization?.hasLinkedOrgs;\n    }\n    get hasLoginFeild() {\n      return this.users.some(assoc => assoc.user.hasOwnProperty('login'));\n    }\n    get hasAlternateEmailsFeild() {\n      return this.users.some(assoc => assoc.user.hasOwnProperty('alternateEmails'));\n    }\n    isAdminInOrg(orgId) {\n      let assoc = _lodashEs.default.find(this.currentUser?.orgs, orgAssoc => {\n        return orgAssoc.organization.id === orgId;\n      });\n      return assoc && assoc.userRole === 'Admin';\n    }\n    get canDelete() {\n      let myOrg = this.currentUser?.myOrg;\n      return this.isSelectedOrgAdmin && this.selectedOrg?.shared && (_lodashEs.default.isUndefined(myOrg) || myOrg.id !== this.selectedOrg?.id);\n    }\n    get users() {\n      return _lodashEs.default.sortBy(this.orgUsers, userAssoc => {\n        return userAssoc.user.name.toUpperCase();\n      });\n    }\n    loadLinkedOrgs() {\n      _server.default.getLinkedOrgs(this.organization?.id, false).then(results => {\n        const linkedOrgs = [{\n          groupName: 'Primary Org',\n          options: results.filter(r => r.id === _environment.config.currentUser.org.id).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1)\n        }, {\n          groupName: 'Linked Orgs',\n          options: results.filter(r => r.id !== _environment.config.currentUser.org.id && r.shared).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1)\n        }, {\n          groupName: 'Linked Users',\n          options: results.filter(r => r.id !== _environment.config.currentUser.org.id && !r.shared).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1)\n        }];\n        this.linkedOrgs = linkedOrgs;\n        const selectedOrg = _lodashEs.default.find(results, o => {\n          return o.id === this.organization?.id;\n        }) || this.organization;\n        this.selectedOrg = new _trackedBuiltIns.TrackedObject(selectedOrg);\n        this.isLoadingLinkedOrgs = false;\n      }, () => {\n        this.linkedOrgs = [this.organization];\n        this.isLoadingLinkedOrgs = false;\n      });\n    }\n    async setSelectedOrg(org) {\n      this.loadingUsers = true;\n      let users = await _server.default.getOrgMembers(org.id);\n      this.orgUsers = _lib.default.toTrackedObjects(users);\n      const tracked = new _trackedBuiltIns.TrackedObject(org);\n      tracked.users = users;\n      (0, _runloop.later)(this, () => {\n        this.selectedOrg = tracked;\n        this.loadingUsers = false;\n      }, 250);\n    }\n    memberAdded(userAssoc) {\n      this.orgUsers = [...this.orgUsers, new _trackedBuiltIns.TrackedObject(userAssoc)];\n    }\n    addMember() {\n      this.showAddMemberModal = true;\n    }\n    addMemberModalClosed() {\n      this.showAddMemberModal = false;\n    }\n    showCreateOrgModalAction() {\n      this.showCreateOrgModal = true;\n    }\n    createOrgModalClosed() {\n      this.showCreateOrgModal = false;\n    }\n    orgSaved(org) {\n      this.showCreateOrgModal = false;\n      this.selectedOrg.name = org.name;\n      this.selectedOrg.email = org.email;\n      _lodashEs.default.forEach(_environment.config.currentUser.orgs, candidate => {\n        if (candidate.organization.id === org.id) {\n          candidate.organization.name = org.name;\n          candidate.organization.email = org.email;\n        }\n      });\n    }\n    removeMember(userAssoc) {\n      let org = this.selectedOrg;\n      let user = userAssoc.user;\n      let isMe = user.id === _environment.config.currentUser.id;\n      let text = 'Are you sure you want to remove ' + (isMe ? 'yourself' : '<strong>' + user.email + '</strong>') + ' from this organization?';\n      _lib.default.confirm(text, 'Remove', () => {\n        userAssoc.isDeleting = true;\n        _server.default.removeUserFromOrg(org.id, user.id).then(() => {\n          _lib.default.info(\"Successfully removed <strong>\" + user.name + \"</strong>.\");\n          this.orgUsers = this.orgUsers.filter(u => u !== userAssoc);\n          if (isMe) {\n            location.reload();\n          }\n        }).catch(() => {\n          userAssoc.isDeleting = false;\n        });\n      }, 'Cancel', () => {}, 'Remove Member');\n    }\n    deleteOrg() {\n      _lib.default.confirm('Are you sure you want to delete <strong>' + this.selectedOrg?.name + '</strong>? ' + '<strong>This action cannot be undone and will delete all test cases within the organization as well!</strong>', 'Delete', () => {\n        this.isDeletingOrg = true;\n        _server.default.deleteOrg(this.selectedOrg?.id).then(() => {\n          _lib.default.info(\"Target <strong>\" + this.selectedOrg?.name + \"</strong> deleted successfully\");\n          let org = _lodashEs.default.find(_environment.config.currentUser.orgs, assoc => {\n            return assoc.organization.id === this.selectedOrg?.id;\n          });\n          if (org) {\n            const index = _environment.config.currentUser.orgs.indexOf(org);\n            if (index !== -1) {\n              _environment.config.currentUser.orgs.splice(index, 1);\n            }\n          }\n          this.args.gotoOrgs();\n          setTimeout(() => {\n            if (this.selectedOrg?.id === _environment.config.currentUser.orgId) {\n              location.reload();\n            }\n          }, 1500);\n        }).catch(() => {\n          this.isDeletingOrg = false;\n        });\n      }, 'Cancel', () => {}, 'Delete Organization');\n    }\n    setSelectedOrgAction(org) {\n      this.setSelectedOrg(org);\n    }\n    editRole(userAssoc) {\n      if (!this.isSelectedOrgAdmin) {\n        return;\n      }\n      userAssoc.customRole = userAssoc.userRole;\n      userAssoc.isEditingRole = true;\n    }\n    updateRole(org) {\n      if (!this.isSelectedOrgAdmin) {\n        return;\n      }\n      const {\n        user,\n        isEditingRole,\n        customRole,\n        userRole\n      } = org;\n      if (!isEditingRole) {\n        return;\n      }\n      if (customRole === userRole) {\n        org.isEditingRole = false;\n        return;\n      }\n      _lib.default.confirm(`Are you sure you want to update <strong>${user.name}</strong> role to <strong>${customRole}</strong>?`, 'Update', () => {\n        _server.default.updateOrgUserRole(this.selectedOrg?.id, user.id, customRole).then(() => {\n          org.userRole = customRole;\n          org.isEditingRole = false;\n          _lib.default.info('Successfully updated <strong>' + user.name + '</strong> role.');\n        });\n      }, 'Cancel', () => {}, 'Update User Role');\n    }\n    escPress(userAssoc) {\n      userAssoc.isEditingRole = false;\n    }\n    async loadOrganization() {\n      this.isLoadingLinkedOrgs = true;\n      const org = await _server.default.getOrg(this.router.currentRoute.params.orgId);\n      this.organization = org;\n      $(document).attr('title', org.name + ' - Testable');\n      this.setSelectedOrg(org);\n      if (this.isAdmin && org.hasLinkedOrgs) {\n        this.loadLinkedOrgs();\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"loadingUsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"orgUsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isDeletingOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"linkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingLinkedOrgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showAddMemberModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showCreateOrgModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"organization\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"memberAdded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"memberAdded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addMember\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addMember\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addMemberModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addMemberModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCreateOrgModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showCreateOrgModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createOrgModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createOrgModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"orgSaved\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orgSaved\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeMember\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeMember\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteOrg\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setSelectedOrgAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setSelectedOrgAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"editRole\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editRole\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRole\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRole\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"escPress\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"escPress\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OrganizationDetailsComponent);\n});","define(\"@testable/shared-ui/components/organizations-dropdown\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/login\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _tracking, _service, _environment, _login, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/login\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <li\n    id=\"organizations-list\"\n    class=\"has-sub closed\"\n    {{did-insert this.floatingMenuClickBinding}}\n  >\n    <a href=\"javascript:\" class=\"dropdown-toggle\" aria-expanded=\"false\">\n      <Ui::Icon @icon=\"fa fa-users fa-fw\" />\n      <span class=\"nav-list\">\n        {{this.currentUser.org.name}}\n      </span>\n      {{#if @sidebarCollapsed}}\n        <div class=\"show\">{{this.currentUser.org.name}}</div>\n      {{/if}}\n    </a>\n    <ul class=\"sub-menu animated fadeIn down\" style={{if (not @sidebarCollapsed) (html-safe \"display: none;\")}} role=\"menu\">\n      {{#if this.isSuperAdmin}}\n        <li>\n          <a href=\"javascript:;\"\n            data-org-sidebar-ember-action=\"showSwitchOrgModal\"\n            {{on \"click\" (fn (mut this.showSwitchOrgModal) true)}}\n          >\n            Switch Organization...</a></li>\n        <li class=\"in-menu-divider-dashed\"></li>\n      {{/if}}\n      <div style=\"max-height: 50dvh; overflow-y: auto;\">\n        <ul class=\"org-list\">\n          {{#each this.orgs as |org|}}\n            <li>\n              <a\n                href=\"javascript:;\"\n                class=\"{{if (eq org.organization.id this.currentUser.org.id) 'active'}}\"\n                data-org-sidebar-ember-action=\"orgSelected\"\n                data-org-sidebar-ember-value={{org.organization.id}}\n                {{on \"click\" (fn this.orgSelected org.organization)}}>{{org.organization.name}}</a>\n            </li>\n          {{/each}}\n        </ul>\n      </div>\n      {{#unless this.isViewer}}\n        <li class=\"in-menu-divider-dashed\"></li>\n        <li>\n          <a href=\"javascript:;\"\n            data-org-sidebar-ember-action=\"showCreateOrgModal\"\n            {{on \"click\" (fn (mut this.showCreateOrgModal) true)}}\n  \n          >Add Organization...</a></li>\n      {{/unless}}\n    </ul>\n  </li>\n  \n  {{#if this.showCreateOrgModal}}\n    <CreateOrgModal @modalClosed={{fn (mut this.showCreateOrgModal) false}} @orgSaved={{this.orgCreated}} />\n  {{/if}}\n  \n  {{#if this.showSwitchOrgModal}}\n    <SwitchOrgModal\n      @modalClosed={{fn (mut this.showSwitchOrgModal) false}}\n      @switchOrg={{this.switchOrg}}\n    />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"li\\\"],[24,1,\\\"organizations-list\\\"],[24,0,\\\"has-sub closed\\\"],[4,[38,1],[[30,0,[\\\"floatingMenuClickBinding\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,0,\\\"dropdown-toggle\\\"],[14,\\\"aria-expanded\\\",\\\"false\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-users fa-fw\\\"]],null],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"nav-list\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[30,0,[\\\"currentUser\\\",\\\"org\\\",\\\"name\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"show\\\"],[12],[1,[30,0,[\\\"currentUser\\\",\\\"org\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"sub-menu animated fadeIn down\\\"],[15,5,[52,[28,[37,8],[[30,1]],null],[28,[37,9],[\\\"display: none;\\\"],null]]],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSuperAdmin\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[24,\\\"data-org-sidebar-ember-action\\\",\\\"showSwitchOrgModal\\\"],[4,[38,10],[\\\"click\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"showSwitchOrgModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n          Switch Organization...\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[14,0,\\\"in-menu-divider-dashed\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,5,\\\"max-height: 50dvh; overflow-y: auto;\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"org-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"orgs\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[16,0,[29,[[52,[28,[37,15],[[30,2,[\\\"organization\\\",\\\"id\\\"]],[30,0,[\\\"currentUser\\\",\\\"org\\\",\\\"id\\\"]]],null],\\\"active\\\"]]]],[24,\\\"data-org-sidebar-ember-action\\\",\\\"orgSelected\\\"],[16,\\\"data-org-sidebar-ember-value\\\",[30,2,[\\\"organization\\\",\\\"id\\\"]]],[4,[38,10],[\\\"click\\\",[28,[37,11],[[30,0,[\\\"orgSelected\\\"]],[30,2,[\\\"organization\\\"]]],null]],null],[12],[1,[30,2,[\\\"organization\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"in-menu-divider-dashed\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[24,\\\"data-org-sidebar-ember-action\\\",\\\"showCreateOrgModal\\\"],[4,[38,10],[\\\"click\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"showCreateOrgModal\\\"]]],null],true],null]],null],[12],[1,\\\"Add Organization...\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateOrgModal\\\"]],[[[1,\\\"  \\\"],[8,[39,17],null,[[\\\"@modalClosed\\\",\\\"@orgSaved\\\"],[[28,[37,11],[[28,[37,12],[[30,0,[\\\"showCreateOrgModal\\\"]]],null],false],null],[30,0,[\\\"orgCreated\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSwitchOrgModal\\\"]],[[[1,\\\"  \\\"],[8,[39,18],null,[[\\\"@modalClosed\\\",\\\"@switchOrg\\\"],[[28,[37,11],[[28,[37,12],[[30,0,[\\\"showSwitchOrgModal\\\"]]],null],false],null],[30,0,[\\\"switchOrg\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@sidebarCollapsed\\\",\\\"org\\\"],[\\\"li\\\",\\\"did-insert\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"if\\\",\\\"div\\\",\\\"ul\\\",\\\"not\\\",\\\"html-safe\\\",\\\"on\\\",\\\"fn\\\",\\\"mut\\\",\\\"each\\\",\\\"-track-array\\\",\\\"eq\\\",\\\"unless\\\",\\\"create-org-modal\\\",\\\"switch-org-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/organizations-dropdown.hbs\",\n    \"isStrictMode\": false\n  });\n  let OrganizationsDropdownComponent = _exports.default = (_class = class OrganizationsDropdownComponent extends _component2.default {\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get isSuperAdmin() {\n      return _environment.config.currentUser?.isAdmin;\n    }\n    get organizations() {\n      return _environment.config.currentUser?.orgs;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _initializerDefineProperty(this, \"showSwitchOrgModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showCreateOrgModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"orgs\", _descriptor4, this);\n      this.orgs = [...this.organizations].sort((a, b) => a.organization.name.localeCompare(b.organization.name));\n    }\n    orgSelected(organization) {\n      this.showCreateOrgModal = false;\n      _login.default.setOrgCookie(organization.id);\n      this.router.transitionTo('index');\n      setTimeout(function () {\n        location.reload();\n      }, 500);\n    }\n    orgCreated(org) {\n      this.showCreateOrgModal = false;\n      _environment.config.currentUser.orgs.push({\n        userRole: 'Admin',\n        organization: org\n      });\n      this.router.transitionTo('account.organization', org.id);\n      _login.default.setOrgCookie(org.id);\n      setTimeout(() => {\n        location.reload();\n      }, 500);\n    }\n    switchOrg(org) {\n      this.showSwitchOrgModal = false;\n      _environment.config.currentUser.orgs.push({\n        userRole: 'Admin',\n        organization: org\n      });\n      _login.default.setOrgCookie(org.id);\n      setTimeout(() => {\n        location.reload();\n      }, 500);\n    }\n    floatingMenuClickBinding() {\n      (0, _runloop.later)(() => {\n        $('#page-container').on('click', '.float-sub-menu  [data-org-sidebar-ember-action]', e => {\n          const action = $(e.target).closest('a').data('org-sidebar-ember-action');\n          const value = $(e.target).closest('a').data('org-sidebar-ember-value');\n          if (action === 'showCreateOrgModal') {\n            this.showCreateOrgModal = true;\n          } else if (action === 'showSwitchOrgModal') {\n            this.showSwitchOrgModal = true;\n          } else if (action === 'orgSelected') {\n            const org = this.orgs.find(org => org.organization.id == value);\n            this.orgSelected(org.organization);\n          }\n        });\n      }, 50);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showSwitchOrgModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showCreateOrgModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"orgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"orgSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orgSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"orgCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orgCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"switchOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"switchOrg\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"floatingMenuClickBinding\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"floatingMenuClickBinding\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OrganizationsDropdownComponent);\n});","define(\"@testable/shared-ui/components/organizations-list\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _trackedBuiltIns, _server, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- begin breadcrumb --}}\n  <div class=\"heading-wrapper\">\n    <h1 class=\"page-header m-b-10 m-t-10\">Organizations</h1>\n    <div class=\"row p-b-10\">\n      <div class=\"col-md-12\">\n        <ol class=\"breadcrumb pull-right\">\n          <li class=\"breadcrumb-item\">Account</li>\n          <li class=\"breadcrumb-item active\">Organizations</li>\n        </ol>\n      </div>\n    </div>\n  </div>\n  <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <div class=\"panel-heading-btn\">\n        <span {{on \"click\" (fn (mut this.showCreateOrgModal) true)}} class=\"btn btn-primary btn-xs\" role=\"button\">New Organization</span>\n      </div>\n      <h4 class=\"panel-title\"><strong>Organizations</strong></h4>\n      <Ui::InfoIcon @isHtml={{true}}\n                @content=\"Create and manage your organizations. See the <strong>Documentation</strong> for more details.\"\n                @placement=\"bottom\" />\n    </div>\n    <div class=\"panel-body\">\n      <table class=\"table\">\n        <thead>\n          <tr>\n            <td><strong>Name</strong></td>\n            <td><strong>Email</strong></td>\n            <td><strong>Role</strong></td>\n            <td><strong>Billing Link</strong></td>\n            <td class=\"width-100\"><strong>Actions</strong></td>\n          </tr>\n        </thead>\n        <tbody>\n        {{#each this.currentUser.orgs as |orgAssoc|}}\n          <tr>\n            <td><LinkTo @route='account.organization'\n                        @model={{orgAssoc.organization.id}}>{{orgAssoc.organization.name}}</LinkTo><Ui::NoteIcon\n                        @large={{true}} @note={{orgAssoc.organization.note}} /></td>\n            <td><LinkTo @route='account.organization'\n                        @model={{orgAssoc.organization.id}}>{{orgAssoc.organization.email}}</LinkTo></td>\n            <td>{{orgAssoc.userRole}}</td>\n            <td>\n              {{#if orgAssoc.organization.primaryOrgId}}\n                <LinkTo @route='account.organization'\n                        @model={{orgAssoc.organization.primaryOrgId}}>{{orgAssoc.organization.primaryOrgName}}</LinkTo>\n              {{/if}}\n            </td>\n            <td>\n              {{#if (not-eq this.currentUser.myOrg.id orgAssoc.organization.id)}}\n                <button {{on \"click\" (fn this.leaveOrg orgAssoc)}} type=\"button\" class=\"btn btn-danger btn-sm\">Leave</button>\n              {{/if}}\n            </td>\n          </tr>\n        {{/each}}\n        </tbody>\n      </table>\n    </div>\n  </div>\n  {{!-- end panel --}}\n  \n  {{#if this.showCreateOrgModal}}\n    <CreateOrgModal @modalClosed={{fn (mut this.showCreateOrgModal) false}}\n                       @orgSaved={{this.orgCreated}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"heading-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-10 m-t-10\\\"],[12],[1,\\\"Organizations\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row p-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"ol\\\"],[14,0,\\\"breadcrumb pull-right\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item\\\"],[12],[1,\\\"Account\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"breadcrumb-item active\\\"],[12],[1,\\\"Organizations\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"btn btn-primary btn-xs\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[28,[37,7],[[30,0,[\\\"showCreateOrgModal\\\"]]],null],true],null]],null],[12],[1,\\\"New Organization\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Organizations\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[8,[39,10],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Create and manage your organizations. See the <strong>Documentation</strong> for more details.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Name\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Email\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Role\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Billing Link\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"width-100\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Actions\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,0,[\\\"currentUser\\\",\\\"orgs\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.organization\\\",[30,1,[\\\"organization\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"organization\\\",\\\"name\\\"]]]],[]]]]],[8,[39,19],null,[[\\\"@large\\\",\\\"@note\\\"],[true,[30,1,[\\\"organization\\\",\\\"note\\\"]]]],null],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.organization\\\",[30,1,[\\\"organization\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"organization\\\",\\\"email\\\"]]]],[]]]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"userRole\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"organization\\\",\\\"primaryOrgId\\\"]],[[[1,\\\"              \\\"],[8,[39,18],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"account.organization\\\",[30,1,[\\\"organization\\\",\\\"primaryOrgId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,1,[\\\"organization\\\",\\\"primaryOrgName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"currentUser\\\",\\\"myOrg\\\",\\\"id\\\"]],[30,1,[\\\"organization\\\",\\\"id\\\"]]],null],[[[1,\\\"              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"leaveOrg\\\"]],[30,1]],null]],null],[12],[1,\\\"Leave\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCreateOrgModal\\\"]],[[[1,\\\"  \\\"],[8,[39,23],null,[[\\\"@modalClosed\\\",\\\"@orgSaved\\\"],[[28,[37,6],[[28,[37,7],[[30,0,[\\\"showCreateOrgModal\\\"]]],null],false],null],[30,0,[\\\"orgCreated\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"orgAssoc\\\"],[\\\"div\\\",\\\"h1\\\",\\\"ol\\\",\\\"li\\\",\\\"span\\\",\\\"on\\\",\\\"fn\\\",\\\"mut\\\",\\\"h4\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"td\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"link-to\\\",\\\"ui/note-icon\\\",\\\"if\\\",\\\"not-eq\\\",\\\"button\\\",\\\"create-org-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/organizations-list.hbs\",\n    \"isStrictMode\": false\n  });\n  let OrganizationsListComponent = _exports.default = (_class = class OrganizationsListComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"showCreateOrgModal\", _descriptor2, this);\n    }\n    get currentUser() {\n      return _environment.config.currentUser;\n    }\n    orgCreated(org) {\n      this.showCreateOrgModal = false;\n      _environment.config.currentUser.orgs.push({\n        userRole: 'Admin',\n        organization: new _trackedBuiltIns.TrackedObject(org)\n      });\n      this.router.transitionTo('account.organization', org.id);\n    }\n    leaveOrg(orgAssoc) {\n      const org = orgAssoc.organization;\n      _lib.default.confirm(`Are you sure you want to leave <strong>${org.name}</strong>?`, 'Leave', () => {\n        _server.default.removeUserFromOrg(org.id, _environment.config.currentUser.id).then(() => {\n          _lib.default.info(`Successfully left <strong>${org.name}</strong>.`);\n          const index = _environment.config.currentUser.orgs.indexOf(orgAssoc);\n          if (index !== -1) {\n            _environment.config.currentUser.orgs.splice(index, 1);\n          }\n          if (org.id === _environment.config.currentUser.orgId) {\n            location.reload();\n          }\n        });\n      }, 'Cancel', () => {}, 'Leave Organization');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showCreateOrgModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"orgCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"orgCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"leaveOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"leaveOrg\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OrganizationsListComponent);\n});","define(\"@testable/shared-ui/components/output-files-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@ember/service\", \"tracked-built-ins\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _lib, _loadTest, _server, _service, _trackedBuiltIns, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/service\",0,\"tracked-built-ins\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-insert this.didInsert}}\n    {{did-update this.onShowFilesChange @showFiles}}\n    {{did-update this.onUpdateSessionNum @overallModel.maxSessionNum}}\n    {{did-update this.onReloadChange this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp this.errorsOnly}}\n    {{did-update this.onExecutionIdChange @overallModel.id}}\n  >\n  {{#if @showFiles}}\n    <div class=\"panel no-print\">\n      <div class=\"panel-heading d-flex justify-content-between\">\n        <div class=\"d-flex align-items-center\">\n          {{#if @comparisonId}}\n            <div class=\"heading mr-2\"><strong>{{@title}}</strong></div>\n          {{/if}}\n          <button type=\"button\" class=\"btn btn-sm btn-success\" {{on \"click\" this.filtersExpand}}>\n            <Ui::Icon @icon=\"fa fa-filter\" /> Filters  {{if this.hasFilter (concat '(' this.hasFilter ')')}} {{if this.filesSearch (concat ' - Search Term: \"' this.filesSearch '\"')}}\n            {{#if this.filtersExpanded}}\n              <Ui::Icon @icon=\"fa fa-angle-up\" />\n            {{else}}\n              <Ui::Icon @icon=\"fa fa-angle-down\" />\n            {{/if}}\n          </button>\n        </div>\n        <div class=\"panel-heading-btn\">\n          {{#if this.showDownloadButton}}\n            <a target=\"_blank\" href=\"{{this.filesDownloadUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\"\n              data-bs-toggle=\"tooltip\" title=\"Download Files\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n          {{/if}}\n        </div>\n      </div>\n      <div class=\"panel-toolbar {{if this.filtersExpanded '' 'height-0 p-t-0 p-b-0'}}\">\n        <div class=\"row\">\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Options</div>\n            <BsButtonGroup @value={{this.errorsOnly}} class=\"width-100p\" @type=\"radio\" @onChange={{fn (mut this.errorsOnly)}} as |bg|>\n              <bg.button @type=\"success width-50p\" @value=\"all\" @size=\"sm\">\n                All {{#if this.outputFilesLoaded}}({{print-number this.outputFileCount}}){{/if}}</bg.button>\n              <bg.button @type=\"success width-50p\" @value=\"errors\" @size=\"sm\">\n                Errors {{#if (and this.outputFilesLoaded @overallModel.completed (not this.receivedRtUpdate))}}\n                ({{print-number this.errorCount}}){{/if}} <Ui::InfoIcon\n                      @content='Only show files captured during iterations of this test where an assertion failure occurred' /></bg.button>\n            </BsButtonGroup>\n          </div>\n  \n          <FilterFields @model={{@overallModel}}\n                        @iterationsExecuted={{@summary.iterationsExecuted}}\n                        @concurrentClients={{@overallModel.concurrentClients}}\n                        @executedIterationsPerClient={{@summary.executedIterationsPerClient}}\n                        @browsers={{@overallModel.browsers}}\n                        @scriptBinary={{@overallModel.script.metadata.binary}}\n                        @scriptType={{@overallModel.script.scriptType}}\n                        @byRegionId={{@byRegionId}}\n                        @showRegionFilter={{true}}\n                        @showTestRunnerFilter={{true}}\n                        @filesSessions={{this.filesSessions}}\n                        @isVertical={{true}}\n                        @region={{this.region}}\n                        @user={{this.user}}\n                        @iteration={{this.iteration}}\n                        @isLoad={{@isLoad}}\n                        @isMultiUser={{@isMultiUser}}\n                        @updateSession={{this.updateSession}}\n                        @updateRegion={{this.updateRegion}}\n                        @updateAgent={{this.updateAgent}}\n                        @updateUser={{this.updateUser}}\n                        @updateBrowser={{this.updateBrowser}}\n                        @updateIteration={{this.updateIteration}} />\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Search</div>\n            <div class=\"input-group\">\n              <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\"/></span>\n              <Input @type=\"text\" @value={{this.filesSearch}} placeholder=\"Search...\" class=\"form-control\" />\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"panel-body\">\n        {{#if this.outputFilesLoaded}}\n          {{#if (gt this.outputFileCount this.outputFiles.length)}}\n            <div class=\"m-b-10\">(Most recent 500 files shown)</div>\n          {{/if}}\n          <div class=\"overflow-auto\">\n            {{#if (eq @currentTab '#files-tab')}}\n              <FilesGrid @id={{this.fileGridId}}\n                         @overallModel={{@overallModel}}\n                         @region={{this.region}}\n                         @isMultiUser={{@isMultiUser}}\n                         @outputFiles={{this.outputFiles}}\n                         @search={{this.filesSearch}}\n                         @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                         @showShareMediaModal={{this.showShareMediaModalAction}} />\n            {{/if}}\n          </div>\n        {{else}}\n          <h5>Loading output files...</h5>\n        {{/if}}\n      </div>\n    </div>\n    {{#if this.showShareMediaModal}}\n      <ShareMediaModal @media={{this.mediaObject}}\n                       @model={{@overallModel}}\n                       @mediaType=\"media\"\n                       @onCloseModal={{this.closeShareMediaModal}} />\n    {{/if}}\n  {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onShowFilesChange\\\"]],[30,1]],null],[4,[38,2],[[30,0,[\\\"onUpdateSessionNum\\\"]],[30,2,[\\\"maxSessionNum\\\"]]],null],[4,[38,2],[[30,0,[\\\"onReloadChange\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]],[30,0,[\\\"errorsOnly\\\"]]],null],[4,[38,2],[[30,0,[\\\"onExecutionIdChange\\\"]],[30,2,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"panel no-print\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading d-flex justify-content-between\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"heading mr-2\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,4]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"filtersExpand\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[1,\\\" Filters  \\\"],[1,[52,[30,0,[\\\"hasFilter\\\"]],[28,[37,8],[\\\"(\\\",[30,0,[\\\"hasFilter\\\"]],\\\")\\\"],null]]],[1,\\\" \\\"],[1,[52,[30,0,[\\\"filesSearch\\\"]],[28,[37,8],[\\\" - Search Term: \\\\\\\"\\\",[30,0,[\\\"filesSearch\\\"]],\\\"\\\\\\\"\\\"],null]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filtersExpanded\\\"]],[[[1,\\\"            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-up\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-down\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDownloadButton\\\"]],[[[1,\\\"          \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"filesDownloadUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download Files\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"panel-toolbar \\\",[52,[30,0,[\\\"filtersExpanded\\\"]],\\\"\\\",\\\"height-0 p-t-0 p-b-0\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Options\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,0,\\\"width-100p\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"errorsOnly\\\"]],\\\"radio\\\",[28,[37,11],[[28,[37,12],[[30,0,[\\\"errorsOnly\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-50p\\\",\\\"all\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              All \\\"],[41,[30,0,[\\\"outputFilesLoaded\\\"]],[[[1,\\\"(\\\"],[1,[28,[35,13],[[30,0,[\\\"outputFileCount\\\"]]],null]],[1,\\\")\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-50p\\\",\\\"errors\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Errors \\\"],[41,[28,[37,14],[[30,0,[\\\"outputFilesLoaded\\\"]],[30,2,[\\\"completed\\\"]],[28,[37,15],[[30,0,[\\\"receivedRtUpdate\\\"]]],null]],null],[[[1,\\\"\\\\n              (\\\"],[1,[28,[35,13],[[30,0,[\\\"errorCount\\\"]]],null]],[1,\\\")\\\"]],[]],null],[1,\\\" \\\"],[8,[39,16],null,[[\\\"@content\\\"],[\\\"Only show files captured during iterations of this test where an assertion failure occurred\\\"]],null]],[]]]]],[1,\\\"\\\\n          \\\"]],[5]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[39,17],null,[[\\\"@model\\\",\\\"@iterationsExecuted\\\",\\\"@concurrentClients\\\",\\\"@executedIterationsPerClient\\\",\\\"@browsers\\\",\\\"@scriptBinary\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showRegionFilter\\\",\\\"@showTestRunnerFilter\\\",\\\"@filesSessions\\\",\\\"@isVertical\\\",\\\"@region\\\",\\\"@user\\\",\\\"@iteration\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@updateSession\\\",\\\"@updateRegion\\\",\\\"@updateAgent\\\",\\\"@updateUser\\\",\\\"@updateBrowser\\\",\\\"@updateIteration\\\"],[[30,2],[30,6,[\\\"iterationsExecuted\\\"]],[30,2,[\\\"concurrentClients\\\"]],[30,6,[\\\"executedIterationsPerClient\\\"]],[30,2,[\\\"browsers\\\"]],[30,2,[\\\"script\\\",\\\"metadata\\\",\\\"binary\\\"]],[30,2,[\\\"script\\\",\\\"scriptType\\\"]],[30,7],true,true,[30,0,[\\\"filesSessions\\\"]],true,[30,0,[\\\"region\\\"]],[30,0,[\\\"user\\\"]],[30,0,[\\\"iteration\\\"]],[30,8],[30,9],[30,0,[\\\"updateSession\\\"]],[30,0,[\\\"updateRegion\\\"]],[30,0,[\\\"updateAgent\\\"]],[30,0,[\\\"updateUser\\\"]],[30,0,[\\\"updateBrowser\\\"]],[30,0,[\\\"updateIteration\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Search\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,7],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[8,[39,19],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"filesSearch\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"outputFilesLoaded\\\"]],[[[41,[28,[37,20],[[30,0,[\\\"outputFileCount\\\"]],[30,0,[\\\"outputFiles\\\",\\\"length\\\"]]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"(Most recent 500 files shown)\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,10],\\\"#files-tab\\\"],null],[[[1,\\\"            \\\"],[8,[39,22],null,[[\\\"@id\\\",\\\"@overallModel\\\",\\\"@region\\\",\\\"@isMultiUser\\\",\\\"@outputFiles\\\",\\\"@search\\\",\\\"@showImageDetailsModal\\\",\\\"@showShareMediaModal\\\"],[[30,0,[\\\"fileGridId\\\"]],[30,2],[30,0,[\\\"region\\\"]],[30,9],[30,0,[\\\"outputFiles\\\"]],[30,0,[\\\"filesSearch\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]],[30,0,[\\\"showShareMediaModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Loading output files...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showShareMediaModal\\\"]],[[[1,\\\"    \\\"],[8,[39,24],null,[[\\\"@media\\\",\\\"@model\\\",\\\"@mediaType\\\",\\\"@onCloseModal\\\"],[[30,0,[\\\"mediaObject\\\"]],[30,2],\\\"media\\\",[30,0,[\\\"closeShareMediaModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@showFiles\\\",\\\"@overallModel\\\",\\\"@comparisonId\\\",\\\"@title\\\",\\\"bg\\\",\\\"@summary\\\",\\\"@byRegionId\\\",\\\"@isLoad\\\",\\\"@isMultiUser\\\",\\\"@currentTab\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"strong\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"concat\\\",\\\"a\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"print-number\\\",\\\"and\\\",\\\"not\\\",\\\"ui/info-icon\\\",\\\"filter-fields\\\",\\\"span\\\",\\\"input\\\",\\\"gt\\\",\\\"eq\\\",\\\"files-grid\\\",\\\"h5\\\",\\\"share-media-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/output-files-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  const MaxOutputFiles = 500;\n  let OutputFilesWidget = _exports.default = (_class = class OutputFilesWidget extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showFilterPanel\", _descriptor3, this);\n      _initializerDefineProperty(this, \"filtersExpanded\", _descriptor4, this);\n      _initializerDefineProperty(this, \"sessionNum\", _descriptor5, this);\n      _initializerDefineProperty(this, \"outputFiles\", _descriptor6, this);\n      _initializerDefineProperty(this, \"outputFileCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor8, this);\n      _initializerDefineProperty(this, \"outputFilesLoaded\", _descriptor9, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor0, this);\n      _initializerDefineProperty(this, \"pendingUpdates\", _descriptor1, this);\n      _initializerDefineProperty(this, \"currentFilter\", _descriptor10, this);\n      _initializerDefineProperty(this, \"filesSessions\", _descriptor11, this);\n      _initializerDefineProperty(this, \"region\", _descriptor12, this);\n      _initializerDefineProperty(this, \"agent\", _descriptor13, this);\n      _initializerDefineProperty(this, \"user\", _descriptor14, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor15, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor16, this);\n      _initializerDefineProperty(this, \"errorsOnly\", _descriptor17, this);\n      _initializerDefineProperty(this, \"filesSearch\", _descriptor18, this);\n      _initializerDefineProperty(this, \"mediaObject\", _descriptor19, this);\n      _initializerDefineProperty(this, \"showShareMediaModal\", _descriptor20, this);\n      _initializerDefineProperty(this, \"mediaId\", _descriptor21, this);\n      _defineProperty(this, \"fileGridId\", void 0);\n      this.fileGridId = this.args.isBaseline ? 'filesGridBaseline' : 'filesGrid';\n      this.setSessionList(this.args.overallModel?.maxSessionNum);\n      this.loadOutputFiles();\n    }\n    didInsert() {\n      this.EventBus.subscribe('outputFile.update', this, 'updateOutputFiles');\n      this.EventBus.subscribe('outputFile.delete', this, 'deleteOutputFile');\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.EventBus.unsubscribe('outputFile.update', this, 'updateOutputFiles');\n      this.EventBus.unsubscribe('outputFile.delete', this, 'deleteOutputFile');\n    }\n    get showDownloadButton() {\n      return this.errorsOnly === 'all' ? !!this.outputFileCount : !!this.errorCount;\n    }\n    get filesDownloadUrl() {\n      const params = _loadTest.default.toFileFilterParams(this.filter, this.zoomInfo, this.args.overallModel?.id);\n      if (this.args.overallModel?.uuid) {\n        params.outputFiles = true;\n        params.download = true;\n        if (this.args.isBaseline) {\n          params.comparison = true;\n        }\n      }\n      let url = this.args.overallModel?.uuid ? '/public/' + this.args.overallModel?.uuid : '/executions/' + this.args.overallModel?.id + '/output-files/download';\n      return _lib.default.toUrl(url, params);\n    }\n    get hasFilter() {\n      let filterCount = 0;\n      if (this.region !== 'ALL') filterCount++;\n      if (this.agent !== 'ALL') filterCount++;\n      if (this.user !== 'ALL') filterCount++;\n      if (this.iteration !== 'ALL') filterCount++;\n      if (this.browser !== 'ALL') filterCount++;\n      if (this.errorsOnly !== 'all') filterCount++;\n      return filterCount;\n    }\n    get filter() {\n      const regionInfo = this.args.byRegionId?.get(this.region);\n      return {\n        region: regionInfo && regionInfo.execRegionIds.join(','),\n        agent: this.agent,\n        browser: this.browser,\n        user: this.user,\n        iteration: this.iteration,\n        failuresOnly: this.errorsOnly === 'errors'\n      };\n    }\n    loadOutputFiles() {\n      this.currentFilter = _.clone(this.filter);\n      const executionId = this.args.overallModel?.id;\n      const params = _loadTest.default.toFileFilterParams(this.filter, this.zoomInfo, this.args.overallModel?.id);\n      params.limit = MaxOutputFiles;\n      if (this.sessionNum != -1 && this.filesSessions) {\n        params.sessionNum = this.sessionNum;\n      }\n      let action;\n      if (this.args.overallModel?.uuid) {\n        params.outputFiles = true;\n        if (this.args.isBaseline) {\n          params.comparison = true;\n        }\n        action = _server.default.getTokenContent(this.args.overallModel?.uuid, params);\n      } else {\n        action = _server.default.getLoadTestExecutionOutputFiles(executionId, params);\n      }\n      if (this.outputFilesLoaded) {\n        this.outputFilesLoaded = false;\n        this.args.onOutputFilesLoading?.();\n      }\n      action.then(results => {\n        if (this.isDestroyed) return;\n        const outputFiles = results && results.files || [];\n        _.forEach(outputFiles, file => {\n          _lib.default.addAuthToOutputFile(file);\n        });\n        this.outputFiles = new _trackedBuiltIns.TrackedArray(outputFiles);\n        this.outputFileCount = results.size || 0;\n        this.errorCount = results.failures || 0;\n        this.outputFilesLoaded = true;\n        this.args.onOutputFilesLoaded?.(results.size || 0);\n        this.applyPendingUpdates();\n      }, () => {\n        this.outputFiles = new _trackedBuiltIns.TrackedArray([]);\n        this.outputFileCount = 0;\n        this.errorCount = 0;\n        this.outputFilesLoaded = true;\n        this.args.onOutputFilesLoaded?.(0);\n        this.applyPendingUpdates();\n      });\n    }\n    onShowFilesChange() {\n      if (this.args.showFiles) {\n        this.EventBus.publish(`${this.fileGridId}.invalidate`);\n      }\n    }\n    onUpdateSessionNum() {\n      this.setSessionList(this.args.overallModel?.maxSessionNum);\n    }\n    setSessionList(maxSessionNum) {\n      if (maxSessionNum) {\n        this.filesSessions = _lib.default.getSessionsList(maxSessionNum);\n      }\n    }\n    toggleFilterPanel() {\n      this.showFilterPanel = !this.showFilterPanel;\n    }\n    showImageDetailsModalAction(imageId) {\n      const image = _.find(this.outputFiles, file => {\n        return file.id === Number(imageId);\n      });\n      this.args.showImageDetailsModal?.(image);\n    }\n    updateRegion(value) {\n      this.region = value;\n      this.onFiltersChanged();\n    }\n    updateSession(value) {\n      this.sessionNum = value;\n      this.loadOutputFiles();\n    }\n    updateAgent(value) {\n      this.agent = value;\n      this.onFiltersChanged();\n    }\n    updateUser(value) {\n      this.user = value;\n      this.onFiltersChanged();\n    }\n    updateIteration(value) {\n      this.iteration = value;\n      this.onFiltersChanged();\n    }\n    updateBrowser(value) {\n      this.browser = value;\n      this.onFiltersChanged();\n    }\n    showShareMediaModalAction(mediaObject) {\n      this.mediaObject = mediaObject;\n      this.showShareMediaModal = true;\n    }\n    closeShareMediaModal() {\n      this.mediaId = null;\n      this.showShareMediaModal = false;\n    }\n    filtersExpand() {\n      this.filtersExpanded = !this.filtersExpanded;\n    }\n    resetFilters() {\n      this.errorsOnly = 'all';\n      this.region = 'ALL';\n      this.agent = 'ALL';\n      this.user = 'ALL';\n      this.iteration = 'ALL';\n      this.browser = 'ALL';\n    }\n    onReloadChange() {\n      (0, _runloop.debounce)(this, this.loadOutputFiles, 100);\n    }\n    onFiltersChanged() {\n      const currentFilter = this.currentFilter;\n      if (!_.isEqual(currentFilter, this.filter)) {\n        this.loadOutputFiles();\n      }\n    }\n    onExecutionIdChange() {\n      this.resetFilters();\n    }\n    applyPendingUpdates() {\n      _.forEach(this.pendingUpdates, pending => {\n        if (pending.removeId) {\n          this.applyDelete(pending.fileId);\n        } else {\n          this.applyUpdate(pending.update, pending.isUpdate);\n        }\n      });\n      this.pendingUpdates = [];\n    }\n    updateOutputFiles(update, isUpdate) {\n      if (!update) {\n        return;\n      }\n      if (this.outputFilesLoaded) {\n        this.applyUpdate(update, isUpdate);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          update: update,\n          isUpdate: isUpdate\n        });\n        this.pendingUpdates = pending;\n      }\n    }\n    deleteOutputFile(fileId) {\n      if (!fileId) {\n        return;\n      }\n      if (this.outputFilesLoaded) {\n        this.applyDelete(fileId);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          removedId: fileId\n        });\n        this.pendingUpdates = pending;\n      }\n    }\n    applyDelete(fileId) {\n      const outputFiles = this.outputFiles;\n      const index = outputFiles.findIndex(file => file.id === fileId);\n      if (index === -1) return;\n      const [removedFile] = outputFiles.splice(index, 1);\n      this.outputFileCount = this.outputFileCount - 1;\n      this.args.onOutputFilesLoaded?.(this.outputFileCount);\n      this.EventBus.publish('filesGrid.update', null, null, removedFile);\n    }\n    applyUpdate(update, isUpdate) {\n      this.receivedRtUpdate = true;\n      const outputFiles = this.outputFiles;\n      const filter = this.filter;\n      let removedFile;\n      if (isUpdate) {\n        const existingFile = _.find(outputFiles, existingFile => {\n          return existingFile.id === update.id;\n        });\n        if (existingFile) {\n          (0, _object.setProperties)(existingFile, update);\n        }\n      } else if (_.findIndex(outputFiles, f => {\n        return f.id === update.id;\n      }) === -1 && _loadTest.default.doesFileMatchFilter(update, filter)) {\n        if (outputFiles.length >= MaxOutputFiles) {\n          removedFile = outputFiles.pop();\n        }\n        outputFiles.unshift(update);\n        this.outputFileCount = this.outputFileCount + 1;\n        this.args.onOutputFilesLoaded?.(this.outputFileCount);\n      }\n      this.EventBus.publish(`${this.fileGridId}.update`, update, isUpdate, removedFile);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showFilterPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"filtersExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"sessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"outputFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"outputFileCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"outputFilesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"pendingUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"currentFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"filesSessions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"agent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"user\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"errorsOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"filesSearch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"mediaObject\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"mediaId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowFilesChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowFilesChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateSessionNum\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateSessionNum\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleFilterPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleFilterPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showShareMediaModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeShareMediaModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeShareMediaModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filtersExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"filtersExpand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onReloadChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onReloadChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onExecutionIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionIdChange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, OutputFilesWidget);\n});","define(\"@testable/shared-ui/components/print-assertion\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (gte @assertionOption.suiteTest.id 0)}}\n      <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" class=\"green m-r-15\">\n          {{@assertionOption.statePassed}}\n      </Ui::Icon>\n      <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" class=\"red m-r-15\">\n          {{@assertionOption.stateFailed}}\n      </Ui::Icon>\n      <Ui::Icon @icon=\"fa fa-lg fa-file-image\" class=\"m-r-15\">\n          {{@assertionOption.images}}\n      </Ui::Icon>\n  {{/if}}\n  {{@assertionOption.suiteTest.name}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1,[\\\"suiteTest\\\",\\\"id\\\"]],0],null],[[[1,\\\"    \\\"],[8,[39,2],[[24,0,\\\"green m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"statePassed\\\"]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[39,2],[[24,0,\\\"red m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"stateFailed\\\"]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[39,2],[[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"images\\\"]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,[30,1,[\\\"suiteTest\\\",\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[\\\"@assertionOption\\\"],[\\\"if\\\",\\\"gte\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-assertion.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-assertion\"));\n});","define(\"@testable/shared-ui/components/print-region-summary\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"inline-text\">\n    {{#if @regionSummary.execution.completed}}\n      <div class=\"m-r-5 inline-text\">{{html-safe (to-execution-outcome-html\n                                                         (if @regionSummary.isAll @regionSummary.execution @regionSummary.executionRegion) false false)}}</div>\n    {{/if}}\n    {{#if @bold}}\n      <strong>{{@regionSummary.executionRegion.region.description}}</strong>\n    {{else}}\n      {{@regionSummary.executionRegion.region.description}}\n    {{/if}}\n    {{#unless @regionSummary.isAll}}\n      <span data-bs-placement=\"bottom\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\"\n            data-bs-content=\"{{@regionSummary.providerPopoverText}}\" data-bs-container=\"body\" data-bs-html=\"true\">\n        {{#if (or @regionSummary.executionRegion.running (and @regionSummary.executionRegion.startedAt @regionSummary.executionRegion.completed))}}\n          <Ui::Icon @icon=\"fa fa-check-circle\" />\n        {{else if (and (not @regionSummary.executionRegion.running) @regionSummary.executionRegion.finishedAt)}}\n          <Ui::Icon @icon=\"fa fa-exclamation-circle\" />\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n        {{/if}}\n      </span>\n      <span class=\"label label-success m-l-10\" data-bs-placement=\"bottom\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\"\n            data-bs-content=\"{{@regionSummary.providerPopoverText}}\" data-bs-container=\"body\"\n            data-bs-html=\"true\">{{@regionSummary.providerType}}</span>\n      {{#if @regionSummary.executionRegion.region.isPaidExternally}}{{html-safe (print-unlimited-badge true)}}{{/if}}\n    {{/unless}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"inline-text\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"execution\\\",\\\"completed\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-r-5 inline-text\\\"],[12],[1,[28,[35,2],[[28,[37,3],[[52,[30,1,[\\\"isAll\\\"]],[30,1,[\\\"execution\\\"]],[30,1,[\\\"executionRegion\\\"]]],false,false],null]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2],[[[1,\\\"    \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"executionRegion\\\",\\\"region\\\",\\\"description\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[1,[30,1,[\\\"executionRegion\\\",\\\"region\\\",\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[41,[51,[30,1,[\\\"isAll\\\"]]],[[[1,\\\"    \\\"],[10,1],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[[30,1,[\\\"providerPopoverText\\\"]]]]],[14,\\\"data-bs-container\\\",\\\"body\\\"],[14,\\\"data-bs-html\\\",\\\"true\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,1,[\\\"executionRegion\\\",\\\"running\\\"]],[28,[37,8],[[30,1,[\\\"executionRegion\\\",\\\"startedAt\\\"]],[30,1,[\\\"executionRegion\\\",\\\"completed\\\"]]],null]],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-check-circle\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[28,[37,10],[[30,1,[\\\"executionRegion\\\",\\\"running\\\"]]],null],[30,1,[\\\"executionRegion\\\",\\\"finishedAt\\\"]]],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-exclamation-circle\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover\\\"],[15,\\\"data-bs-content\\\",[29,[[30,1,[\\\"providerPopoverText\\\"]]]]],[14,\\\"data-bs-container\\\",\\\"body\\\"],[14,\\\"data-bs-html\\\",\\\"true\\\"],[12],[1,[30,1,[\\\"providerType\\\"]]],[13],[1,\\\"\\\\n    \\\"],[41,[30,1,[\\\"executionRegion\\\",\\\"region\\\",\\\"isPaidExternally\\\"]],[[[1,[28,[35,2],[[28,[37,11],[true],null]],null]]],[]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@regionSummary\\\",\\\"@bold\\\"],[\\\"div\\\",\\\"if\\\",\\\"html-safe\\\",\\\"to-execution-outcome-html\\\",\\\"strong\\\",\\\"unless\\\",\\\"span\\\",\\\"or\\\",\\\"and\\\",\\\"ui/icon\\\",\\\"not\\\",\\\"print-unlimited-badge\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-region-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-region-summary\"));\n});","define(\"@testable/shared-ui/components/print-selected-assertion\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ember-power-select-selected-item\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n    title=\"{{@option.suiteTest.name}}\" data-original-title=\"{{@option.suiteTest.name}}\">\n    <span class=\"semi-bold\">{{ @option.suiteTest.name }}</span>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"ember-power-select-selected-item\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[30,1,[\\\"suiteTest\\\",\\\"name\\\"]]]]],[15,\\\"data-original-title\\\",[29,[[30,1,[\\\"suiteTest\\\",\\\"name\\\"]]]]],[12],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[30,1,[\\\"suiteTest\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@option\\\"],[\\\"div\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-selected-assertion.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-selected-assertion\"));\n});","define(\"@testable/shared-ui/components/print-selected-command-error\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ember-power-select-selected-item\">\n    <span class=\"semi-bold\">{{html-safe (truncate-string @option.commandError.name)}}</span>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"ember-power-select-selected-item\\\"],[12],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,2],[[28,[37,3],[[30,1,[\\\"commandError\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@option\\\"],[\\\"div\\\",\\\"span\\\",\\\"html-safe\\\",\\\"truncate-string\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-selected-command-error.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-selected-command-error\"));\n});","define(\"@testable/shared-ui/components/print-selected-error\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ember-power-select-selected-item\">\n    <span class=\"semi-bold\">{{html-safe (truncate-string @option.suiteError.name)}}</span>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"ember-power-select-selected-item\\\"],[12],[1,\\\"\\\\n  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,2],[[28,[37,3],[[30,1,[\\\"suiteError\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@option\\\"],[\\\"div\\\",\\\"span\\\",\\\"html-safe\\\",\\\"truncate-string\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-selected-error.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-selected-error\"));\n});","define(\"@testable/shared-ui/components/print-selected-region-summary\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ember-power-select-selected-item\">\n    <PrintRegionSummary @regionSummary={{@option}} @bold={{true}} />\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"ember-power-select-selected-item\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,1],null,[[\\\"@regionSummary\\\",\\\"@bold\\\"],[[30,1],true]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@option\\\"],[\\\"div\\\",\\\"print-region-summary\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/print-selected-region-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"print-selected-region-summary\"));\n});","define(\"@testable/shared-ui/components/providers/add-testrunner-modal\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/service\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _runloop, _service, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@modalClosed}}\n    @title={{if @isMonitor \"Add Runner\" \"Add Test Runner\"}}\n    @size=\"md\">\n          <p>\n            {{#if @isMonitor}}\n              Generates the command to start a new runner via the chosen container runtime. \n              Runners are grouped into regions. Monitors are then assigned to run checks via one or more regions. \n              <a target=\"_blank\" href=\"https://docs.testable.io/enterprise/running-agent.html\" rel=\"noreferrer noopener\">\n                Read the documentation for more details and a complete set of options.\n              </a>\n            {{else}}\n              Select or create a region to generate the docker command to run a new test runner. Docker is a prerequisite\n              for running tests from your own infrastructure.\n              <a target=\"_blank\" href=\"https://docs.testable.io/enterprise/running-agent.html\" rel=\"noreferrer noopener\">Read\n              the documentation for more details and a complete set of options.</a>\n            {{/if}}\n          </p>\n          <div class=\"form-group\">\n            <label>\n              <strong>Region</strong>\n              <Ui::InfoIcon @isHtml={{true}}\n                        @content=\"Tests get assigned to regions. A region can be made up of one or more test runners.\n                        Tests will be evenly distributed across all available test runners in the chosen region. Choose an\n                        existing region or create a new one.\"\n                        @placement=\"bottom\" />\n            </label>\n            <PowerSelectWithCreate\n                    @options={{this.regions}}\n                    @searchEnabled={{true}}\n                    @searchField=\"description\"\n                    @selected={{this.region}}\n                    @placeholder=\"Please select or create a new region by typing the desired name\"\n                    @renderInPlace={{true}}\n                    @verticalPosition=\"below\"\n                    @buildSuggestion={{this.regionSuggestion}}\n                    @onChange={{this.updateRegion}}\n                    @onCreate={{this.createRegion}} as |region|\n            >\n              {{region.name}}\n            </PowerSelectWithCreate>\n          </div>\n          <div class=\"form-group\">\n            <label>\n              <strong>Deployment Type</strong>\n              <Ui::InfoIcon\n                      @content=\"Choose between various container deployment options including docker run, docker compose,\n                      and a Kubernetes pod.\" />\n            </label>\n            <Ui::PSelect @options={{this.cmdOptions}}\n                     @selected={{this.cmdOption}}\n                     @placeholder=\"Please select a deployment type...\"\n                     @onChange={{fn (mut this.cmdOption)}} as |option|>\n              {{option.text}}\n            </Ui::PSelect>\n          </div>\n          <div class=\"form-group\">\n            <Ui::CopyText class=\"btn-success\" @placement=\"bottom\" @lgIcon={{true}} @title=\"Copied!\" @trigger=\"click\" @target=\"#copyCmd\" />\n            <pre id=\"copyCmd\" class=\"m-t-10\">{{this.resolvedCmd}}</pre>\n          </div>\n          {{#if this.cmdOption}}\n            <div class=\"form-group\">\n              {{#if (eq this.cmdOption.id 'docker-run')}}\n                To apply resource constraints to the container (i.e. memory/cpu) see\n                <a target=\"_blank\" href=\"https://docs.docker.com/config/containers/resource_constraints/\" rel=\"noreferrer noopener\">\n                  this Docker guide.\n                </a>\n              {{else if (eq this.cmdOption.id 'kubernetes')}}\n                To apply resource constraints to the pod (i.e. memory/cpu) see\n                <a target=\"_blank\"\n                   href=\"https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/\" rel=\"noreferrer noopener\">\n                  this Kubernetes guide.\n                </a>\n              {{/if}}\n            </div>\n          {{/if}}\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],[52,[30,2],\\\"Add Runner\\\",\\\"Add Test Runner\\\"],\\\"md\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"            Generates the command to start a new runner via the chosen container runtime. \\\\n            Runners are grouped into regions. Monitors are then assigned to run checks via one or more regions. \\\\n            \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/enterprise/running-agent.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n              Read the documentation for more details and a complete set of options.\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            Select or create a region to generate the docker command to run a new test runner. Docker is a prerequisite\\\\n            for running tests from your own infrastructure.\\\\n            \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/enterprise/running-agent.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"Read\\\\n            the documentation for more details and a complete set of options.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Tests get assigned to regions. A region can be made up of one or more test runners.\\\\n                      Tests will be evenly distributed across all available test runners in the chosen region. Choose an\\\\n                      existing region or create a new one.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@renderInPlace\\\",\\\"@verticalPosition\\\",\\\"@buildSuggestion\\\",\\\"@onChange\\\",\\\"@onCreate\\\"],[[30,0,[\\\"regions\\\"]],true,\\\"description\\\",[30,0,[\\\"region\\\"]],\\\"Please select or create a new region by typing the desired name\\\",true,\\\"below\\\",[30,0,[\\\"regionSuggestion\\\"]],[30,0,[\\\"updateRegion\\\"]],[30,0,[\\\"createRegion\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Deployment Type\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Choose between various container deployment options including docker run, docker compose,\\\\n                    and a Kubernetes pod.\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"cmdOptions\\\"]],[30,0,[\\\"cmdOption\\\"]],\\\"Please select a deployment type...\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"cmdOption\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,4,[\\\"text\\\"]]],[1,\\\"\\\\n          \\\"]],[4]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,12],[[24,0,\\\"btn-success\\\"]],[[\\\"@placement\\\",\\\"@lgIcon\\\",\\\"@title\\\",\\\"@trigger\\\",\\\"@target\\\"],[\\\"bottom\\\",true,\\\"Copied!\\\",\\\"click\\\",\\\"#copyCmd\\\"]],null],[1,\\\"\\\\n          \\\"],[10,\\\"pre\\\"],[14,1,\\\"copyCmd\\\"],[14,0,\\\"m-t-10\\\"],[12],[1,[30,0,[\\\"resolvedCmd\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"cmdOption\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"cmdOption\\\",\\\"id\\\"]],\\\"docker-run\\\"],null],[[[1,\\\"              To apply resource constraints to the container (i.e. memory/cpu) see\\\\n              \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.docker.com/config/containers/resource_constraints/\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n                this Docker guide.\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,14],[[30,0,[\\\"cmdOption\\\",\\\"id\\\"]],\\\"kubernetes\\\"],null],[[[1,\\\"              To apply resource constraints to the pod (i.e. memory/cpu) see\\\\n              \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n                this Kubernetes guide.\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]],null]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"@isMonitor\\\",\\\"region\\\",\\\"option\\\"],[\\\"ui/modal-wrapper\\\",\\\"if\\\",\\\"p\\\",\\\"a\\\",\\\"div\\\",\\\"label\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"power-select-with-create\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"ui/copy-text\\\",\\\"pre\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/add-testrunner-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  const DockerCmdTemplate = 'docker run \\\\\\n' + '  -e AGENT_REGION_NAME=\"${region-name}\" \\\\\\n' + '  -e AGENT_KEY=${key} \\\\\\n${extra-params}' + '  -v /logs --privileged --security-opt seccomp:unconfined \\\\\\n' + '  -d testable/runner:${tag}';\n  const DockerComposeCmdTemplate = 'version: \"3.7\"\\n' + 'services:\\n' + '  testrunners:\\n' + '    image: testable/runner:${tag}\\n' + '    environment:\\n' + '    - AGENT_REGION_NAME=${region-name}\\n' + '    - AGENT_KEY=${key}\\n${extra-params}' + '    volumes:\\n' + '    - data:/logs\\n' + '    security_opt:\\n' + '    - seccomp:unconfined\\n' + '    privileged: true\\n' + 'volumes:\\n' + '  data: {}';\n  const KubernetesPodTemplate = 'apiVersion: v1\\n' + 'kind: Pod\\n' + 'metadata:\\n' + '  name: testable-testrunner\\n' + 'spec:\\n' + '  containers:\\n' + '  - name: testable-testrunner-ctr\\n' + '    image: testable/runner:${tag}\\n' + '    volumeMounts:\\n' + '    - name: logs\\n' + '      mountPath: /logs\\n' + '    env:\\n' + '    - name: AGENT_REGION_NAME\\n' + '      value: \"${region-name}\"\\n' + '    - name: AGENT_KEY\\n' + '      value: ${key}\\n${extra-params}' + '    securityContext:\\n' + '      privileged: true\\n' + '  volumes:\\n' + '   - name: logs\\n' + '     emptyDir: {}';\n  const EcsTaskDefinition = '{\\n' + '  \"containerDefinitions\": [\\n' + '    {\\n' + '      \"environment\": [\\n' + '        {\\n' + '          \"name\": \"AGENT_KEY\",\\n' + '          \"value\": \"${key}\"\\n' + '        },\\n' + '        {\\n' + '          \"name\": \"AGENT_REGION_NAME\",\\n' + '          \"value\": \"${region-name}\"\\n' + '        }${extra-params}\\n' + '      ],\\n' + '      \"image\": \"testable/runner:${tag}\",\\n' + '      \"name\": \"testable\"\\n' + '    }\\n' + '  ],\\n' + '  \"family\": \"testable-testrunner\",\\n' + '  \"requiresCompatibilities\": [\\n' + '    \"FARGATE\"\\n' + '  ],\\n' + '  \"networkMode\": \"awsvpc\"\\n' + '}';\n  const CmdOptions = [{\n    id: 'docker-run',\n    cmd: DockerCmdTemplate,\n    text: 'docker run',\n    extraParams: '  -e AGENT_SERVER_URL=${serverUrl} \\\\\\n'\n  }, {\n    id: 'docker-compose',\n    cmd: DockerComposeCmdTemplate,\n    text: 'docker compose',\n    extraParams: '    - AGENT_SERVER_URL=${serverUrl}\\n'\n  }, {\n    id: 'kubernetes',\n    cmd: KubernetesPodTemplate,\n    text: 'kubernetes pod',\n    extraParams: '    - name: AGENT_SERVER_URL\\n      value: ${serverUrl}\\n'\n  }, {\n    id: 'ecs',\n    cmd: EcsTaskDefinition,\n    text: 'AWS ECS task definition',\n    extraParams: ',\\n' + '        {\\n' + '          \"name\": \"AGENT_SERVER_URL\",\\n' + '          \"value\": \"${serverUrl}\"\\n' + '        }'\n  }];\n  const ServerUrl = _environment.config.testRunnerServerUrl.indexOf('/') === 0 ? window.location.origin + _environment.config.testRunnerServerUrl : _environment.config.testRunnerServerUrl;\n  let AddTestrunnerModal = _exports.default = (_class = class AddTestrunnerModal extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _defineProperty(this, \"providers\", _environment.config.providers);\n      _initializerDefineProperty(this, \"region\", _descriptor2, this);\n      _initializerDefineProperty(this, \"key\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedRegions\", _descriptor4, this);\n      _initializerDefineProperty(this, \"cmdOption\", _descriptor5, this);\n      _defineProperty(this, \"cmdOptionsAll\", CmdOptions);\n      if (this.args.region) {\n        this.region = this.args.region;\n      }\n      this.selectedRegions = [...(this.args.selectedRegions || [])];\n      (0, _runloop.next)(this, () => {\n        _server.default.lookupOrCreateApiKey(_environment.config.currentUser.orgId, 'Test Runners').then(result => {\n          this.key = result.name;\n        });\n      });\n    }\n    get privateSharedGrid() {\n      const providers = this.providers;\n      return _.find(providers, provider => {\n        return !provider.public && provider.providerType === 'Shared';\n      });\n    }\n    get regions() {\n      const privateGrid = this.privateSharedGrid;\n      const regions = [];\n      if (privateGrid) {\n        _.forEach(privateGrid.locations, location => {\n          regions.push(...location.regions);\n        });\n      }\n      return regions;\n    }\n    get resolvedCmd() {\n      const cmdOption = this.cmdOption;\n      const isNonProd = _environment.config.environment !== 'production' && _environment.config.environment !== 'alpha' && _environment.config.environment !== 'onprem';\n      const isOnPrem = _environment.config.environment === 'onprem';\n      const region = this.region;\n      const key = this.key || '[api-key]';\n      if (cmdOption && region) {\n        const extraParams = isNonProd || isOnPrem ? cmdOption.extraParams.replace('${serverUrl}', ServerUrl) : '';\n        return cmdOption.cmd.replace('${region-name}', region.name).replace('${key}', key).replace('${tag}', isNonProd ? 'dev' : 'prod_latest').replace('${extra-params}', extraParams);\n      }\n      if (!this.region) {\n        return 'Please select a Region above...';\n      } else if (!this.cmdOption) {\n        return 'Please select a Deployment Type above...';\n      }\n      return '';\n    }\n    get cmdOptions() {\n      if (!this.envConfig?.isAwsEnabled) {\n        return this.cmdOptionsAll.filter(opt => opt.id !== 'ecs');\n      }\n      return this.cmdOptionsAll;\n    }\n    regionSelected(region) {\n      this.region = region;\n    }\n    createRegion(name) {\n      const region = {\n        id: -1,\n        name: name,\n        description: name\n      };\n      this.region = region;\n      const existing = this.selectedRegions?.length ? this.selectedRegions : this.regions;\n      this.selectedRegions = [...existing, region];\n      this.args.onRegionCreated?.(this.selectedRegions);\n    }\n    updateRegion(region) {\n      this.region = region;\n    }\n    regionSuggestion(term) {\n      return `Press enter or select to create region ${term}...`;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"key\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"cmdOption\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return CmdOptions[0];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSuggestion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSuggestion\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AddTestrunnerModal);\n});","define(\"@testable/shared-ui/components/providers/edit-provider-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@ember/utils\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/providers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _trackedBuiltIns, _object, _service, _runloop, _utils, _environment, _lib, _server, _providers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/providers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"createProviderModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n   {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{if @provider 'Update' 'Create'}} Test Runner Source</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form id=\"createProviderForm\" {{on \"submit\" this.createOrUpdate}} data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label><strong>Name</strong></label>\n                  <div>\n                    <Input @type=\"text\" class=\"form-control\" minlength=\"1\" maxlength=\"255\" placeholder=\"Name\" @value={{this.name}}\n                           data-parsley-required=\"true\" data-parsley-minlength=\"1\" data-parsley-maxlength=\"255\"\n                           data-parsley-required-message=\"Name is required.\"\n                           data-parsley-minlength-message=\"Name must be at least 1 character.\"\n                           data-parsley-maxlength-message=\"Name cannot be longer than 255 characters.\" />\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label><strong>Source</strong></label>\n                  <div>\n                    <Ui::PSelect @options={{this.sourceOptions}}\n                                 @selected={{this.source}}\n                                 @disabled={{if (or @provider @lockedSource) true false}}\n                                 @required=\"true\"\n                                 @placeholder=\"Select a source ...\"\n                                 @onChange={{this.sourceUpdated}} as |opt|>\n                      {{opt}}\n                      </Ui::PSelect>\n                    <Input class=\"hidden\" disabled={{true}} @value={{this.source}}\n                           data-parsley-required=\"true\"\n                           data-parsley-required-message=\"Please select a source.\" />\n  \n                  </div>\n                </div>\n  \n                {{#if (and (eq this.providerType 'OnDemand') (eq this.source 'Aws'))}}\n                  <Providers::FormAws\n                          @metadata={{this.metadata}}\n                          @source={{this.source}}\n                          @awsTags={{this.awsTags}}\n                          @inputClasses={{this.inputClasses}}\n                          @addTag={{this.addTag}}\n                          @deleteTag={{this.deleteTag}}\n                  />\n                {{else if (and (eq this.providerType 'OnDemand') (eq this.source 'Azure'))}}\n                  <Providers::FormAzure\n                          @metadata={{this.metadata}}\n                          @azureTags={{this.azureTags}}\n                          @addTag={{this.addTag}}\n                          @deleteTag={{this.deleteTag}}\n                  />\n                {{else if (and (eq this.providerType 'OnDemand') (eq this.source 'Gcp'))}}\n                  <Providers::FormGcp\n                          @metadata={{this.metadata}}\n                          @gcpTags={{this.gcpTags}}\n                          @addTag={{this.addTag}}\n                          @deleteTag={{this.deleteTag}}\n                  />\n                {{/if}}\n  \n                <div class=\"form-group\">\n                  <div>\n                    <button type=\"button\" disabled={{this.saveInProgress}} {{on \"click\" this.createOrUpdate}}\n                            class=\"btn btn-sm btn-primary\"><strong>\n                      {{if this.saveInProgress 'Processing...' this.saveText}}\n                    </strong></button>\n                  </div>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"createProviderModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[52,[30,1],\\\"Update\\\",\\\"Create\\\"]],[1,\\\" Test Runner Source\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"createProviderForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"createOrUpdate\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Name\\\"],[13],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Name\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Name is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Name must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Name cannot be longer than 255 characters.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Source\\\"],[13],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@required\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceOptions\\\"]],[30,0,[\\\"source\\\"]],[52,[28,[37,11],[[30,1],[30,2]],null],true,false],\\\"true\\\",\\\"Select a source ...\\\",[30,0,[\\\"sourceUpdated\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,3]],[1,\\\"\\\\n                    \\\"]],[3]]]]],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"source\\\"]]]],null],[1,\\\"\\\\n\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[28,[37,13],[[30,0,[\\\"providerType\\\"]],\\\"OnDemand\\\"],null],[28,[37,13],[[30,0,[\\\"source\\\"]],\\\"Aws\\\"],null]],null],[[[1,\\\"                \\\"],[8,[39,14],null,[[\\\"@metadata\\\",\\\"@source\\\",\\\"@awsTags\\\",\\\"@inputClasses\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,0,[\\\"metadata\\\"]],[30,0,[\\\"source\\\"]],[30,0,[\\\"awsTags\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"addTag\\\"]],[30,0,[\\\"deleteTag\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[28,[37,13],[[30,0,[\\\"providerType\\\"]],\\\"OnDemand\\\"],null],[28,[37,13],[[30,0,[\\\"source\\\"]],\\\"Azure\\\"],null]],null],[[[1,\\\"                \\\"],[8,[39,15],null,[[\\\"@metadata\\\",\\\"@azureTags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,0,[\\\"metadata\\\"]],[30,0,[\\\"azureTags\\\"]],[30,0,[\\\"addTag\\\"]],[30,0,[\\\"deleteTag\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[28,[37,13],[[30,0,[\\\"providerType\\\"]],\\\"OnDemand\\\"],null],[28,[37,13],[[30,0,[\\\"source\\\"]],\\\"Gcp\\\"],null]],null],[[[1,\\\"                \\\"],[8,[39,16],null,[[\\\"@metadata\\\",\\\"@gcpTags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,0,[\\\"metadata\\\"]],[30,0,[\\\"gcpTags\\\"]],[30,0,[\\\"addTag\\\"]],[30,0,[\\\"deleteTag\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]],null]],[]]]],[]]],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"saveInProgress\\\"]]],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"createOrUpdate\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[52,[30,0,[\\\"saveInProgress\\\"]],\\\"Processing...\\\",[30,0,[\\\"saveText\\\"]]]],[1,\\\"\\\\n                  \\\"],[13],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@provider\\\",\\\"@lockedSource\\\",\\\"opt\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"strong\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"or\\\",\\\"and\\\",\\\"eq\\\",\\\"providers/form-aws\\\",\\\"providers/form-azure\\\",\\\"providers/form-gcp\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/edit-provider-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let EditProviderModalComponent = _exports.default = (_class = class EditProviderModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"saveInProgress\", _descriptor2, this);\n      _initializerDefineProperty(this, \"name\", _descriptor3, this);\n      _initializerDefineProperty(this, \"id\", _descriptor4, this);\n      _initializerDefineProperty(this, \"providerType\", _descriptor5, this);\n      _initializerDefineProperty(this, \"source\", _descriptor6, this);\n      _initializerDefineProperty(this, \"metadata\", _descriptor7, this);\n      _initializerDefineProperty(this, \"lockChoices\", _descriptor8, this);\n      _initializerDefineProperty(this, \"awsTags\", _descriptor9, this);\n      _initializerDefineProperty(this, \"azureTags\", _descriptor0, this);\n      _initializerDefineProperty(this, \"gcpTags\", _descriptor1, this);\n      _defineProperty(this, \"awsRegions\", _providers.default.getAwsRegions());\n      _defineProperty(this, \"sourceOptions\", ['Aws', 'Azure', 'Gcp']);\n      const provider = this.args.provider;\n      if (provider) {\n        const metadata = _.cloneDeep(provider.metadata);\n        this.name = provider.name;\n        this.id = provider.id;\n        this.providerType = provider.providerType;\n        this.source = provider.source;\n        this.metadata = metadata;\n        this.lockChoices = (0, _utils.isNone)(metadata.lockChoices) || metadata.lockChoices === 'true';\n        this.awsTags = new _trackedBuiltIns.TrackedArray(metadata.awsTags ? _lib.default.tryParseJson(metadata.awsTags) || [] : []);\n        this.azureTags = new _trackedBuiltIns.TrackedArray(metadata.azureTags ? _lib.default.tryParseJson(metadata.azureTags) || [] : []);\n        this.gcpTags = new _trackedBuiltIns.TrackedArray(metadata.gcpTags ? _lib.default.tryParseJson(metadata.gcpTags) || [] : []);\n      } else {\n        this.providerType = 'OnDemand';\n        this.source = this.args.lockedSource;\n        this.metadata = {};\n        this.awsTags = new _trackedBuiltIns.TrackedArray();\n        this.azureTags = new _trackedBuiltIns.TrackedArray();\n        this.gcpTags = new _trackedBuiltIns.TrackedArray();\n      }\n    }\n    get saveText() {\n      return this.args.provider ? 'Update' : 'Create';\n    }\n    getTagsField() {\n      switch (this.source) {\n        case 'Azure':\n          return 'azureTags';\n        case 'Gcp':\n          return 'gcpTags';\n        case 'Aws':\n        default:\n          return 'awsTags';\n      }\n    }\n    updateProviders() {\n      return _server.default.getProviders(_environment.config.currentUser.orgId).then(providers => {\n        _environment.config.providers.splice(0, _environment.config.providers.length);\n        _environment.config.providersAll.splice(0, _environment.config.providersAll.length);\n        _environment.config.providersAll.push(...providers);\n        ['Aws', 'Azure', 'Gcp'].forEach(source => {\n          if (!this.envConfig.isCloudSourceEnabled(source)) {\n            providers = providers.filter(p => p.source !== source);\n          }\n        });\n        _environment.config.providers.push(...providers);\n      });\n    }\n    didInsert() {\n      const _this = this;\n      $('#createProviderModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#createProviderModal').modal('show');\n      $('#createProviderForm').parsley();\n    }\n    sourceUpdated(src) {\n      this._sourceUpdated(src);\n    }\n    createOrUpdate(e) {\n      e.preventDefault();\n      if (!$('#createProviderForm').parsley().validate()) {\n        return;\n      }\n      const self = this;\n      let provider = this.args.provider;\n      let name = this.name;\n      let providerType = this.providerType;\n      let source = this.source;\n      let metadata = this.metadata;\n      let tagsField = this.getTagsField();\n      let tags = this[tagsField];\n      metadata[tagsField] = JSON.stringify(tags || []);\n      let details = {\n        name: name,\n        metadata: metadata\n      };\n      this.saveInProgress = true;\n      if (provider) {\n        _server.default.updateProvider(provider.id, details).then(result => {\n          self.updateProviders();\n          self.args.providerUpdated(result);\n          $('#createProviderModal').modal('hide');\n          self.saveInProgress = false;\n        }, () => {\n          self.saveInProgress = false;\n        });\n      } else {\n        details.providerType = providerType;\n        details.source = source;\n        details.organizationId = _environment.config.currentUser.orgId;\n        _server.default.createProvider(details).then(result => {\n          self.updateProviders();\n          self.args.providerUpdated(result);\n          $('#createProviderModal').modal('hide');\n          self.saveInProgress = false;\n        }, () => {\n          self.saveInProgress = false;\n        });\n      }\n    }\n    addTag() {\n      const tagsField = this.getTagsField();\n      this[tagsField].push({\n        key: '',\n        value: ''\n      });\n      (0, _runloop.schedule)('afterRender', this, () => {\n        this.refreshFormValidation();\n      });\n    }\n    deleteTag(tag) {\n      const tagsField = this.getTagsField();\n      const idx = this[tagsField].indexOf(tag);\n      if (idx > -1) this[tagsField].splice(idx, 1);\n      (0, _runloop.schedule)('afterRender', this, () => {\n        this.refreshFormValidation();\n      });\n    }\n    _sourceUpdated(src) {\n      this.source = src;\n      (0, _runloop.schedule)('afterRender', this, () => {\n        this.refreshFormValidation();\n      });\n    }\n    refreshFormValidation() {\n      $('#createProviderForm').parsley().destroy();\n      $('#createProviderForm').parsley();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"saveInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"providerType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"source\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"metadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"lockChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"awsTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"azureTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"gcpTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createOrUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createOrUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addTag\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addTag\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteTag\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteTag\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, EditProviderModalComponent);\n});","define(\"@testable/shared-ui/components/providers/form-aws\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/providers\", \"@ember/utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _server, _providers, _utils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/providers\",0,\"@ember/utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"note note-info fade show m-b-10\">\n    See our <a target=\"_blank\" href=\"https://docs.testable.io/guides/self-hosted-aws.html\" rel=\"noreferrer noopener\">self hosted AWS\n    guide</a> for more details on the permissions that Testable requires.\n    {{#if (eq this.accessType 'role')}}\n      <br><br>The cross-account role should grant access to AWS account <strong>220197662125</strong>.\n    {{/if}}\n  </div>\n  \n  <div class=\"form-group\">\n    <label><strong>Access Type</strong></label>\n    <div class=\"{{@inputClasses}}\">\n      <BsButtonGroup @value={{this.accessType}} @type=\"radio\" @onChange={{this.updateAccessType}} class='m-t-10' as |bs|>\n        <bs.button @type=\"success\" @value=\"credentials\" @size=\"sm\" >Credentials</bs.button>\n        <bs.button @type=\"success\" @value=\"role\" @size=\"sm\" >Cross-Account Role</bs.button>\n      </BsButtonGroup>\n    </div>\n  </div>\n  \n  {{#if (eq this.accessType 'credentials')}}\n    <div class=\"form-group\">\n      <label><strong>AWS Access Key Id</strong></label>\n      <div>\n        <Input @type=\"text\" class=\"form-control\" placeholder=\"AWS Access Key Id\"\n               @value={{@metadata.awsAccessKeyId}} data-parsley-required=\"true\" data-parsley-minlength=\"16\"\n               data-parsley-maxlength=\"32\" data-parsley-required-message=\"AWS Access Key Id is required.\"\n               data-parsley-minlength-message=\"AWS Access Key Id must be at least 16 characters.\"\n               data-parsley-maxlength-message=\"AWS Access Key Id cannot be longer than 32 characters.\"\n               {{on \"change\" this.awsFieldUpdated}} />\n      </div>\n    </div>\n    <div class=\"form-group\">\n      <label><strong>AWS Secret Access Key</strong></label>\n      <div>\n        <Ui::PasswordInput placeholder=\"AWS Secret Access Key\"\n               @value={{@metadata.awsSecretAccessKey}} data-parsley-required=\"true\"\n               data-parsley-required-message=\"AWS Secret Access Key is required.\"\n               {{on \"change\" this.awsFieldUpdated}} />\n      </div>\n    </div>\n  {{else}}\n    <div class=\"form-group\">\n      <label><strong>Role ARN</strong></label>\n      <div>\n        <Input @type=\"text\" class=\"form-control\" placeholder=\"Role ARN\"\n               @value={{@metadata.awsRoleARN}} data-parsley-required=\"true\"\n               data-parsley-required-message=\"Role ARN is required.\"\n               {{on \"change\" this.awsFieldUpdated}} />\n      </div>\n    </div>\n    <div class=\"form-group\">\n      <label><strong>External ID</strong></label>\n      <div>\n        <Input @type=\"text\" class=\"form-control\" placeholder=\"Role External ID\"\n               @value={{@metadata.awsRoleExternalId}}\n               {{on \"change\" this.awsFieldUpdated}} />\n      </div>\n    </div>\n  {{/if}}\n  <div class=\"form-group\">\n    <label><strong>Tags</strong> <Ui::InfoIcon\n            @content=\"These tags will be added to any EC2 instances created when this test runner is used in a test\n            configuration. This can be overridden in any test configuration as well.\" />\n    </label>\n    <Providers::TagsManager\n            @tags={{@awsTags}}\n            @addTag={{@addTag}}\n            @deleteTag={{@deleteTag}}\n    />\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Inbound Runner Access</strong></label>\n    <div class=\"m-t-10\">\n      <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{this.inboundSsh}} {{on \"click\" this.onInboundSshChanged}} />\n        Allow SSH or RDP access to test runners\n      </label>\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Region Specific Defaults</strong></label>\n    <div>\n      <Ui::PSelect @options={{this.awsRegions}}\n                   @selected={{this.selectedRegionObj}}\n                   @placeholder=\"Select AWS region...\"\n                   @onChange={{this.regionSelected}} as |awsRegion|>\n        {{awsRegion.description}} ({{awsRegion.name}})\n      </Ui::PSelect>\n    </div>\n    <div class=\"m-t-10\">\n      <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{this.lockChoices}} {{on \"click\" this.onLockChoicesChanged}} />\n        Do not allow changes from the chosen default values\n        when this test runner source is chosen for a test configuration\n      </label>\n    </div>\n    {{#if this.selectedRegion}}\n      <div class=\"m-t-10 m-l-20\">\n        {{#if this.loadingAwsMetadata}}\n          <div class=\"form-group\">\n            Loading AWS details...\n          </div>\n        {{else if this.awsMetadataLoaded}}\n          <div class=\"form-group\">\n            <label><strong>VPC</strong></label>\n            <Ui::XSelect @class=\"form-control form-select\" @value={{this.selectedVpcId}} @onChange={{this.vpcSelected}} as |xs| >\n              <xs.option @value=''>No default VPC</xs.option>\n              {{#each this.awsMetadata.vpcs as |vpc|}}\n                <xs.option @value={{vpc.vpcId}}>\n                  {{or vpc.name 'Default'}} | {{vpc.vpcId}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n          <div class=\"form-group\">\n            <label><strong>Subnet</strong></label>\n            <Ui::XSelect @class=\"form-control form-select\" @value={{this.selectedSubnetId}} @onChange={{this.subnetSelected}} as |xs| >\n              <xs.option @value=''>Select VPC first...</xs.option>\n              {{#if this.selectedVpcId}}\n                <xs.option @value='any'>{{if this.selectedVpcId 'Any subnet'\n                                          'Select VPC first...'}}</xs.option>\n              {{/if}}\n              {{#each this.selectedVpc.subnets as |subnet|}}\n                <xs.option @value={{subnet.subnetId}}>\n                  {{if subnet.name (concat subnet.name ' | ') ''}}{{subnet.availabilityZone}}\n                  | {{subnet.subnetId}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n          <div class=\"form-group\">\n            <label><strong>Key Pair</strong></label>\n            <Ui::XSelect @class=\"form-control form-select\" @value={{this.selectedKeyPair}} @onChange={{this.keyPairSelected}} as |xs| >\n              <xs.option @value=''>No default key pair</xs.option>\n              {{#each this.awsMetadata.keyPairs as |keyPair|}}\n                <xs.option @value={{keyPair}}>\n                  {{keyPair}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n        {{/if}}\n        {{#if this.awsError}}\n          <div class=\"form-group\">\n            <p>Error loading AWS account details.</p>\n            <p class=\"bg-silver p-5 f-s-11 text-break\">{{this.awsError}}</p>\n          </div>\n        {{/if}}\n        <div class=\"form-group\">\n          <label><strong>Elastic IPs</strong> <Ui::InfoIcon\n                  @content=\"We will automatically try to assign the chosen elastic ips to test runs when this source is\n                  chosen in the test configuration. This choice can be overridden in each test configuration as well.\" />\n          </label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\" @checked={{this.selectedEnableElasticIps}} {{on \"click\" this.onAwsEnableElasticIpsChange}}/>\n              Enable Elastic IPs\n            </label>\n          </div>\n          {{#if this.selectedEnableElasticIps}}\n            <div class=\"m-t-5\">\n              <label class=\"normal\">\n                <Input @type=\"checkbox\" @checked={{this.forceAssociateElasticIps}} {{on \"click\" this.onAwsForceReassociateElasticIpsChange }} /> Re-associate in-use Elastic\n                IPs <Ui::InfoIcon @isHtml={{true}}\n                            @content=\"If checked, Testable will reassociate elastic IPs as necessary to run your test.\n                            If a specific set of Elastic IPs is chosen it will only attempt to reassociate Elastic IPs from that set.\" />\n              </label>\n            </div>\n            <div class=\"m-t-5\">\n              <label class=\"normal\">\n                <Input @type=\"checkbox\" @checked={{this.chooseAnyElasticIp}} {{on \"change\" this.onAwsChooseElasticIpsChange }}/>\n                Choose any available Elastic IPs <Ui::InfoIcon @isHtml={{true}} @content=\"<p>If checked,\n                any Elastic IP  available in this region of your AWS account will be associated with the test runner instance(s).<p>\n                <p>If unchecked, you can choose specific elastic IPs to assign test runner instance(s).\n                The same Elastic IP can be associated with multiple Testable organizations.</p>\" />\n              </label>\n            </div>\n          {{/if}}\n          {{#if (and this.selectedEnableElasticIps (not this.chooseAnyElasticIp))}}\n            <div class=\"m-l-20 m-t-5 overflow-y-auto max-height-300\">\n              {{#if this.loadingAwsElasticIps}}\n                Loading elastic ips...\n              {{else}}\n                {{#each this.awsAvailableElasticIps as |record|}}\n                  <div class=\"m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" data-id={{record.id}} @checked={{record.selected}} {{on \"click\" this.onAwsChosenElasticIpChange }} />\n                      <span class=\"label label-success fixed-width-span width-60 m-l-5\">{{if\n                              record.instanceId 'In Use' 'Available'}}</span>\n                      {{record.publicIp}}\n                    </label>\n                    <Ui::InfoIcon @isHtml={{true}} @content={{record.popoverText}} @title=\"Elastic IP Details\"\n                              @icon=\"fa-search\" />\n                  </div>\n                {{else}}\n                  No elastic ips available\n                {{/each}}\n              {{/if}}\n            </div>\n          {{/if}}\n        </div>\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"note note-info fade show m-b-10\\\"],[12],[1,\\\"\\\\n  See our \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/guides/self-hosted-aws.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"self hosted AWS\\\\n  guide\\\"],[13],[1,\\\" for more details on the permissions that Testable requires.\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"accessType\\\"]],\\\"role\\\"],null],[[[1,\\\"    \\\"],[10,\\\"br\\\"],[12],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"The cross-account role should grant access to AWS account \\\"],[10,\\\"strong\\\"],[12],[1,\\\"220197662125\\\"],[13],[1,\\\".\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Access Type\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[30,1]]]],[12],[1,\\\"\\\\n    \\\"],[8,[39,7],[[24,0,\\\"m-t-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"accessType\\\"]],\\\"radio\\\",[30,0,[\\\"updateAccessType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"credentials\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Credentials\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,2,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"role\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Cross-Account Role\\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,3],[[30,0,[\\\"accessType\\\"]],\\\"credentials\\\"],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"AWS Access Key Id\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"AWS Access Key Id\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"16\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"32\\\"],[24,\\\"data-parsley-required-message\\\",\\\"AWS Access Key Id is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"AWS Access Key Id must be at least 16 characters.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"AWS Access Key Id cannot be longer than 32 characters.\\\"],[4,[38,9],[\\\"change\\\",[30,0,[\\\"awsFieldUpdated\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,3,[\\\"awsAccessKeyId\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"AWS Secret Access Key\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,10],[[24,\\\"placeholder\\\",\\\"AWS Secret Access Key\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"AWS Secret Access Key is required.\\\"],[4,[38,9],[\\\"change\\\",[30,0,[\\\"awsFieldUpdated\\\"]]],null]],[[\\\"@value\\\"],[[30,3,[\\\"awsSecretAccessKey\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Role ARN\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Role ARN\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Role ARN is required.\\\"],[4,[38,9],[\\\"change\\\",[30,0,[\\\"awsFieldUpdated\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,3,[\\\"awsRoleARN\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"External ID\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Role External ID\\\"],[4,[38,9],[\\\"change\\\",[30,0,[\\\"awsFieldUpdated\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,3,[\\\"awsRoleExternalId\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Tags\\\"],[13],[1,\\\" \\\"],[8,[39,11],null,[[\\\"@content\\\"],[\\\"These tags will be added to any EC2 instances created when this test runner is used in a test\\\\n          configuration. This can be overridden in any test configuration as well.\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,12],null,[[\\\"@tags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,4],[30,5],[30,6]]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Inbound Runner Access\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onInboundSshChanged\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"inboundSsh\\\"]]]],null],[1,\\\"\\\\n      Allow SSH or RDP access to test runners\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Region Specific Defaults\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,13],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"awsRegions\\\"]],[30,0,[\\\"selectedRegionObj\\\"]],\\\"Select AWS region...\\\",[30,0,[\\\"regionSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,7,[\\\"description\\\"]]],[1,\\\" (\\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\")\\\\n    \\\"]],[7]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onLockChoicesChanged\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"lockChoices\\\"]]]],null],[1,\\\"\\\\n      Do not allow changes from the chosen default values\\\\n      when this test runner source is chosen for a test configuration\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedRegion\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-t-10 m-l-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingAwsMetadata\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          Loading AWS details...\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"awsMetadataLoaded\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"VPC\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[8,[39,14],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,0,[\\\"selectedVpcId\\\"]],[30,0,[\\\"vpcSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"No default VPC\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"awsMetadata\\\",\\\"vpcs\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,9,[\\\"vpcId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,17],[[30,9,[\\\"name\\\"]],\\\"Default\\\"],null]],[1,\\\" | \\\"],[1,[30,9,[\\\"vpcId\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Subnet\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[8,[39,14],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,0,[\\\"selectedSubnetId\\\"]],[30,0,[\\\"subnetSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,10,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"Select VPC first...\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedVpcId\\\"]],[[[1,\\\"              \\\"],[8,[30,10,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"any\\\"]],[[\\\"default\\\"],[[[[1,[52,[30,0,[\\\"selectedVpcId\\\"]],\\\"Any subnet\\\",\\\"Select VPC first...\\\"]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"selectedVpc\\\",\\\"subnets\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,10,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,11,[\\\"subnetId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[52,[30,11,[\\\"name\\\"]],[28,[37,18],[[30,11,[\\\"name\\\"]],\\\" | \\\"],null],\\\"\\\"]],[1,[30,11,[\\\"availabilityZone\\\"]]],[1,\\\"\\\\n                | \\\"],[1,[30,11,[\\\"subnetId\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"          \\\"]],[10]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Key Pair\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[8,[39,14],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,0,[\\\"selectedKeyPair\\\"]],[30,0,[\\\"keyPairSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,12,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"No default key pair\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"awsMetadata\\\",\\\"keyPairs\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,12,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,13]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,13]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[13]],null],[1,\\\"          \\\"]],[12]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[41,[30,0,[\\\"awsError\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,2],[12],[1,\\\"Error loading AWS account details.\\\"],[13],[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"bg-silver p-5 f-s-11 text-break\\\"],[12],[1,[30,0,[\\\"awsError\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Elastic IPs\\\"],[13],[1,\\\" \\\"],[8,[39,11],null,[[\\\"@content\\\"],[\\\"We will automatically try to assign the chosen elastic ips to test runs when this source is\\\\n                chosen in the test configuration. This choice can be overridden in each test configuration as well.\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAwsEnableElasticIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"selectedEnableElasticIps\\\"]]]],null],[1,\\\"\\\\n            Enable Elastic IPs\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedEnableElasticIps\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAwsForceReassociateElasticIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"forceAssociateElasticIps\\\"]]]],null],[1,\\\" Re-associate in-use Elastic\\\\n              IPs \\\"],[8,[39,11],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"If checked, Testable will reassociate elastic IPs as necessary to run your test.\\\\n                          If a specific set of Elastic IPs is chosen it will only attempt to reassociate Elastic IPs from that set.\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,8],[[4,[38,9],[\\\"change\\\",[30,0,[\\\"onAwsChooseElasticIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"chooseAnyElasticIp\\\"]]]],null],[1,\\\"\\\\n              Choose any available Elastic IPs \\\"],[8,[39,11],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"<p>If checked,\\\\n              any Elastic IP  available in this region of your AWS account will be associated with the test runner instance(s).<p>\\\\n              <p>If unchecked, you can choose specific elastic IPs to assign test runner instance(s).\\\\n              The same Elastic IP can be associated with multiple Testable organizations.</p>\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,20],[[30,0,[\\\"selectedEnableElasticIps\\\"]],[28,[37,21],[[30,0,[\\\"chooseAnyElasticIp\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-l-20 m-t-5 overflow-y-auto max-height-300\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingAwsElasticIps\\\"]],[[[1,\\\"              Loading elastic ips...\\\\n\\\"]],[]],[[[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"awsAvailableElasticIps\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[16,\\\"data-id\\\",[30,14,[\\\"id\\\"]]],[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAwsChosenElasticIpChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,14,[\\\"selected\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"label label-success fixed-width-span width-60 m-l-5\\\"],[12],[1,[52,[30,14,[\\\"instanceId\\\"]],\\\"In Use\\\",\\\"Available\\\"]],[13],[1,\\\"\\\\n                    \\\"],[1,[30,14,[\\\"publicIp\\\"]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,11],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@title\\\",\\\"@icon\\\"],[true,[30,14,[\\\"popoverText\\\"]],\\\"Elastic IP Details\\\",\\\"fa-search\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[14]],[[[1,\\\"                No elastic ips available\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@inputClasses\\\",\\\"bs\\\",\\\"@metadata\\\",\\\"@awsTags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\",\\\"awsRegion\\\",\\\"xs\\\",\\\"vpc\\\",\\\"xs\\\",\\\"subnet\\\",\\\"xs\\\",\\\"keyPair\\\",\\\"record\\\"],[\\\"div\\\",\\\"a\\\",\\\"if\\\",\\\"eq\\\",\\\"br\\\",\\\"strong\\\",\\\"label\\\",\\\"bs-button-group\\\",\\\"input\\\",\\\"on\\\",\\\"ui/password-input\\\",\\\"ui/info-icon\\\",\\\"providers/tags-manager\\\",\\\"ui/p-select\\\",\\\"ui/x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"or\\\",\\\"concat\\\",\\\"p\\\",\\\"and\\\",\\\"not\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/form-aws.hbs\",\n    \"isStrictMode\": false\n  });\n  let ProvidersFormAwsComponent = _exports.default = (_class = class ProvidersFormAwsComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"accessType\", _descriptor, this);\n      _initializerDefineProperty(this, \"awsAvailableElasticIps\", _descriptor2, this);\n      _initializerDefineProperty(this, \"awsError\", _descriptor3, this);\n      _initializerDefineProperty(this, \"awsMetadata\", _descriptor4, this);\n      _initializerDefineProperty(this, \"awsMetadataLoaded\", _descriptor5, this);\n      _initializerDefineProperty(this, \"awsRegions\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chooseAnyElasticIp\", _descriptor7, this);\n      _initializerDefineProperty(this, \"forceAssociateElasticIps\", _descriptor8, this);\n      _initializerDefineProperty(this, \"loadingAwsElasticIps\", _descriptor9, this);\n      _initializerDefineProperty(this, \"loadingAwsMetadata\", _descriptor0, this);\n      _initializerDefineProperty(this, \"lockChoices\", _descriptor1, this);\n      _initializerDefineProperty(this, \"inboundSsh\", _descriptor10, this);\n      _initializerDefineProperty(this, \"selectedEnableElasticIps\", _descriptor11, this);\n      _initializerDefineProperty(this, \"selectedKeyPair\", _descriptor12, this);\n      _initializerDefineProperty(this, \"selectedSubnetId\", _descriptor13, this);\n      _initializerDefineProperty(this, \"selectedRegion\", _descriptor14, this);\n      _initializerDefineProperty(this, \"selectedRegionObj\", _descriptor15, this);\n      _initializerDefineProperty(this, \"selectedVpcId\", _descriptor16, this);\n      this.accessType = this.args.metadata.accessType || 'credentials';\n      this.chooseAnyElasticIp = this.args.metadata.accessType;\n      this.lockChoices = (0, _utils.isNone)(this.args.metadata.lockChoices) || this.args.metadata.lockChoices === 'true';\n      this.inboundSsh = this.args.metadata.inboundSsh === 'true';\n      if (!this.args.metadata.inboundSsh) this.args.metadata.inboundSsh = 'false';\n      this.selectedRegion = this.args.metadata.selectedRegion;\n      this.selectedRegionObj = this.awsRegions.find(region => region.name === this.selectedRegion);\n      this.selectedEnableElasticIps = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':enableElasticIps']) || this.args.metadata[this.selectedRegion + ':enableElasticIps'] === 'true';\n      this.forceAssociateElasticIps = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':forceAssociateElasticIps']) || this.args.metadata[this.selectedRegion + ':forceAssociateElasticIps'] === 'true';\n      this.chooseAnyElasticIp = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':chooseAnyElasticIp']) || this.args.metadata[this.selectedRegion + ':chooseAnyElasticIp'] === 'true';\n      if (this.selectedRegion) {\n        this.updateAwsMetadata();\n        if (!this.chooseAnyElasticIp) {\n          this.updateAwsElasticIps();\n        }\n      }\n    }\n    get selectedVpc() {\n      const selectedVpcId = this.selectedVpcId;\n      const awsMetadata = this.awsMetadata;\n      if (selectedVpcId && awsMetadata) {\n        return awsMetadata.vpcs.find(v => v.vpcId === selectedVpcId);\n      }\n      return null;\n    }\n    onAwsChooseElasticIpsChange(event) {\n      this.chooseAnyElasticIp = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const choose = this.chooseAnyElasticIp;\n        this.args.metadata[region + ':chooseAnyElasticIp'] = '' + choose;\n        this.updateAwsElasticIps();\n      }\n    }\n    onAwsForceReassociateElasticIpsChange(event) {\n      this.forceAssociateElasticIps = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const value = this.forceAssociateElasticIps;\n        this.args.metadata[region + ':forceAssociateElasticIps'] = '' + value;\n      }\n    }\n    onAwsChosenElasticIpChange(event) {\n      const eventID = event.target.dataset.id;\n      const checked = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const selected = [];\n        this.awsAvailableElasticIps.forEach(eip => {\n          if (eip.id === eventID) {\n            eip.selected = checked;\n          }\n          if (eip.selected) {\n            selected.push(eip.publicIp);\n          }\n        });\n        this.args.metadata[region + ':chosenElasticIps'] = selected.join(',');\n      }\n    }\n    onLockChoicesChanged(event) {\n      this.lockChoices = event.target.checked;\n      this.args.metadata.lockChoices = '' + this.lockChoices;\n    }\n    onInboundSshChanged(event) {\n      this.inboundSsh = event.target.checked;\n      this.args.metadata.inboundSsh = '' + this.inboundSsh;\n    }\n    onAwsEnableElasticIpsChange(event) {\n      const region = this.selectedRegion;\n      this.selectedEnableElasticIps = event.target.checked;\n      if (region) {\n        const enable = this.selectedEnableElasticIps;\n        this.args.metadata[region + ':enableElasticIps'] = '' + enable;\n        this.chooseAnyElasticIp = this.getBooleanValue(region, 'chooseAnyElasticIp', true);\n        this.forceAssociateElasticIps = this.getBooleanValue(region, 'forceAssociateElasticIps', false);\n      }\n    }\n    updateAccessType(type) {\n      this.args.metadata.accessType = type;\n      this.accessType = type;\n      this.refreshFormValidation();\n    }\n    awsFieldUpdated() {\n      this.updateAwsMetadata();\n    }\n    regionSelected(region) {\n      this.selectedRegionObj = this.awsRegions.find(r => r.name === region.name);\n      this.selectedRegion = region.name;\n      this.args.metadata.selectedRegion = region.name;\n      this.updateAwsMetadata();\n      this.updateAwsElasticIps();\n    }\n    vpcSelected(vpcId) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedVpcId = vpcId;\n        this.selectedSubnetId = '';\n        this.args.metadata[region + ':vpcId'] = vpcId;\n        this.args.metadata[region + ':subnetId'] = '';\n      }\n    }\n    subnetSelected(subnetId) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedSubnetId = subnetId;\n        this.args.metadata[region + ':subnetId'] = subnetId;\n      }\n    }\n    keyPairSelected(keyPair) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedKeyPair = keyPair;\n        this.args.metadata[region + ':keyPair'] = keyPair;\n      }\n    }\n    updateAwsMetadata() {\n      const self = this;\n      const region = this.selectedRegion;\n      if (region && this.isAwsMetadataValid()) {\n        this.loadingAwsMetadata = true;\n        this.updateAwsElasticIpReleatedFields();\n        _server.default.getAwsMetadata(region, this.args.metadata).then(result => {\n          self.awsMetadata = result;\n          self.loadingAwsMetadata = false;\n          self.awsMetadataLoaded = true;\n          self.updateSelectedVpc();\n        }, (jqxhr, status, errMsg) => {\n          self.loadingAwsMetadata = false;\n          self.awsError = errMsg;\n        });\n      }\n    }\n    updateAwsElasticIpReleatedFields() {\n      const region = this.selectedRegion;\n      const selectedEnableElasticIps = this.args.metadata[region + ':enableElasticIps'];\n      this.selectedEnableElasticIps = selectedEnableElasticIps === 'true';\n    }\n    isAwsMetadataValid() {\n      const accessType = this.args.metadata.accessType || 'credentials';\n      if (accessType === 'credentials') return !!(this.args.metadata.awsAccessKeyId && this.args.metadata.awsSecretAccessKey);\n      return !!this.args.metadata.awsRoleARN;\n    }\n    updateSelectedVpc() {\n      const region = this.selectedRegion;\n      const awsMetadata = this.awsMetadata;\n      if (region && awsMetadata) {\n        this.selectedVpcId = this.args.metadata[region + ':vpcId'];\n        this.selectedSubnetId = this.args.metadata[region + ':subnetId'];\n        this.selectedKeyPair = this.args.metadata[region + ':keyPair'];\n      }\n    }\n    updateAwsElasticIps() {\n      if (this.chooseAnyElasticIp) {\n        return;\n      }\n      const self = this;\n      const region = this.selectedRegion;\n      if (region && this.isAwsMetadataValid()) {\n        this.loadingAwsElasticIps = true;\n        _server.default.getAwsElasticIps(region, this.args.metadata).then(result => {\n          const chosenKey = region + ':chosenElasticIps';\n          const chosenElasticIps = self.args.metadata[chosenKey] && self.args.metadata[chosenKey].split(',') || [];\n          result.forEach(eip => {\n            eip.popoverText = _lib.default.toIpPopoverText(eip);\n            eip.selected = chosenElasticIps.includes(eip.publicIp);\n          });\n          self.awsAvailableElasticIps = _lib.default.sortRegionIps(result);\n          self.loadingAwsElasticIps = false;\n          self.updateSelectedVpc();\n        }, (jqxhr, status, errMsg) => {\n          self.awsAvailableElasticIps = [];\n          self.loadingAwsElasticIps = false;\n          self.awsError = errMsg;\n        });\n      }\n    }\n    refreshFormValidation() {\n      $('#createProviderForm').parsley().destroy();\n      $('#createProviderForm').parsley();\n    }\n    getBooleanValue(region, field, defaultVal) {\n      const val = this.args.metadata[region + ':' + field];\n      return (0, _utils.isNone)(val) ? defaultVal : val === 'true';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"accessType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"awsAvailableElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"awsError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"awsMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"awsMetadataLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"awsRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _providers.default.getAwsRegions();\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chooseAnyElasticIp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"forceAssociateElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"loadingAwsElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"loadingAwsMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"lockChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"inboundSsh\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"selectedEnableElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"selectedKeyPair\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedSubnetId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegionObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"selectedVpcId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onAwsChooseElasticIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAwsChooseElasticIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAwsForceReassociateElasticIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAwsForceReassociateElasticIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAwsChosenElasticIpChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAwsChosenElasticIpChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLockChoicesChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLockChoicesChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInboundSshChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInboundSshChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAwsEnableElasticIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAwsEnableElasticIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAccessType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAccessType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"awsFieldUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"awsFieldUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vpcSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vpcSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"subnetSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"subnetSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"keyPairSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"keyPairSelected\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProvidersFormAwsComponent);\n});","define(\"@testable/shared-ui/components/providers/form-azure\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/providers\", \"@ember/utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _server, _providers, _utils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/providers\",0,\"@ember/utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"note note-info fade show m-b-10\">\n    See our <a target=\"_blank\" href=\"https://docs.testable.io/guides/self-hosted-azure.html\" rel=\"noreferrer noopener\">self hosted\n    Azure guide</a> for more details on the permissions that Testable requires.\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Azure Tenant Id</strong></label>\n    <div>\n      <Input @type=\"text\" class=\"form-control\" placeholder=\"Azure Id\" @value={{@metadata.azureTenantId}}\n             data-parsley-required=\"true\" data-parsley-minlength=\"36\" data-parsley-maxlength=\"36\"\n             data-parsley-required-message=\"Azure Tenant Id is required.\"\n             data-parsley-minlength-message=\"Azure Tenant Id must be a UUID (36 characters)\"\n             data-parsley-maxlength-message=\"Azure Tenant Id must be a UUID (36 characters)\"\n              />\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Azure Subscription Id</strong></label>\n    <div>\n      <Input @type=\"text\" class=\"form-control\" placeholder=\"Azure Id\" @value={{@metadata.azureSubscriptionId}}\n             data-parsley-required=\"true\" data-parsley-minlength=\"36\" data-parsley-maxlength=\"36\"\n             data-parsley-required-message=\"Azure Subscription Id is required.\"\n             data-parsley-minlength-message=\"Azure Subscription Id must be a UUID (36 characters)\"\n             data-parsley-maxlength-message=\"Azure Subscription Id must be a UUID (36 characters)\"\n              />\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Azure Client Id</strong></label>\n    <div>\n      <Input @type=\"text\" class=\"form-control\" placeholder=\"Azure Id\" @value={{@metadata.azureClientId}}\n             data-parsley-required=\"true\" data-parsley-required-message=\"Azure Client Id is required.\"\n              />\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Azure Client Secret</strong></label>\n    <div>\n      <Ui::PasswordInput placeholder=\"Azure Id\" @value={{@metadata.azureClientSecret}}\n             data-parsley-required=\"true\"\n             data-parsley-required-message=\"Azure Client Secret is required.\"\n             />\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label><strong>Tags</strong> <Ui::InfoIcon\n            @content=\"These tags will be added to any VM Scale Set created when this test runner is used in a test configuration. This can be overridden in any test configuration as well.\" />\n    </label>\n    <Providers::TagsManager\n            @tags={{@azureTags}}\n            @addTag={{@addTag}}\n            @deleteTag={{@deleteTag}}\n    />\n  </div>\n  \n  <div class=\"form-group\">\n    <label><strong>Region Specific Defaults</strong></label>\n    <div>\n      <Ui::PSelect @options={{this.azureRegions}}\n                   @selected={{this.selectedRegionObj}}\n                   @placeholder=\"Select Azure region...\"\n                   @onChange={{this.regionSelected}} as |azureRegion|>\n        {{azureRegion.description}} ({{azureRegion.name}})\n      </Ui::PSelect>\n    </div>\n    <div class=\"m-t-10\">\n      <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{this.lockChoices}} {{on \"click\" this.onLockChoicesChanged}} />\n        Do not allow changes from the chosen default values\n        when this test runner source is chosen for a test configuration\n      </label>\n    </div>\n    {{#if this.selectedRegion}}\n      <div class=\"m-t-10 m-l-20\">\n        {{#if this.loadingAzureMetadata}}\n          <div class=\"form-group\">\n            Loading Azure details...\n          </div>\n        {{else if this.azureMetadataLoaded}}\n          <div class=\"form-group\">\n            <label>Resource Group</label>\n            <Ui::XSelect @class=\"form-control\"\n              @value={{this.selectedResourceGroup.id}}\n              @onChange={{this.updateResourceGroup}} as |xs| >\n              <xs.option @value=''>[Automatic]</xs.option>\n              {{#each this.azureMetadata.resourceGroups as |resourceGroup|}}\n                <xs.option @value={{resourceGroup.id}}>\n                  {{resourceGroup.name}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n          <div class=\"form-group\">\n            <label>Network</label>\n            <Ui::XSelect @class=\"form-control\"\n              @value={{this.selectedNetwork.id}}\n              @onChange={{this.updateNetwork}} as |xs| >\n              <xs.option @value=''>[Automatic]</xs.option>\n              {{#each this.selectedResourceGroup.networks as |network|}}\n                <xs.option @value={{network.id}}>\n                  {{network.name}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n          <div class=\"form-group\">\n            <label>Subnet</label>\n            <Ui::XSelect @class=\"form-control\"\n              @value={{this.selectedSubnet.name}}\n              @onChange={{this.updateSubnet}} as |xs| >\n              <xs.option @value=''>[Automatic]</xs.option>\n              {{#each this.selectedNetwork.subnets as |subnet|}}\n                <xs.option @value={{subnet.name}}>\n                  {{subnet.name}}\n                </xs.option>\n              {{/each}}\n            </Ui::XSelect>\n          </div>\n        {{/if}}\n        {{#if this.azureError}}\n          <div class=\"form-group\">\n            <p>Error loading Azure account details.</p>\n            <p class=\"bg-silver p-5 f-s-11 text-break\">{{this.azureError}}</p>\n          </div>\n        {{/if}}\n        <div class=\"form-group\">\n          <label><strong>Public IPs</strong> <Ui::InfoIcon\n                  @content=\"We will automatically try to assign the chosen public ips to test runs when this source is\n                  chosen in the test configuration. This choice can be overridden in each test configuration as well.\" />\n          </label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\" @checked={{this.selectedEnablePublicIps}} {{on \"click\" this.onAzureEnablePublicIpsChange}}/>\n              Enable Public IPs\n            </label>\n          </div>\n          {{#if this.selectedEnablePublicIps}}\n            <div class=\"m-t-5\">\n              <label class=\"normal\">\n                <Input @type=\"checkbox\" @checked={{this.forceAssociatePublicIps}} {{on \"click\" this.onAzureForceReassociatePublicIpsChange }} /> Re-associate in-use Public\n                IPs <Ui::InfoIcon @isHtml={{true}}\n                                  @content=\"If checked, Testable will reassociate public IPs as necessary to run your test.\n                            If a specific set of Public IPs is chosen it will only attempt to reassociate Public IPs from that set.\" />\n              </label>\n            </div>\n            <div class=\"m-t-5\">\n              <label class=\"normal\">\n                <Input @type=\"checkbox\" @checked={{this.chooseAnyPublicIp}} {{on \"change\" this.onAzureChoosePublicIpsChange }}/>\n                Choose any available Public IPs <Ui::InfoIcon @isHtml={{true}} @content=\"<p>If checked,\n                any Public IP  available in this region of your Azure account will be associated with the test runner instance(s).<p>\n                <p>If unchecked, you can choose specific public IPs to assign test runner instance(s).\n                The same Public IP can be associated with multiple Testable organizations.</p>\" />\n              </label>\n            </div>\n          {{/if}}\n          {{#if (and this.selectedEnablePublicIps (not this.chooseAnyPublicIp))}}\n            <div class=\"m-l-20 m-t-5 overflow-y-auto max-height-300\">\n              {{#if this.loadingAzurePublicIps}}\n                Loading public ips...\n              {{else}}\n                {{#each this.azureAvailablePublicIps as |record|}}\n                  <div class=\"m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" data-id={{record.id}} @checked={{record.selected}} {{on \"click\" this.onAzureChosenPublicIpChange }} />\n                      <span class=\"label label-success fixed-width-span width-60 m-l-5\">{{if\n                              record.instanceId 'In Use' 'Available'}}</span>\n                      {{record.publicIp}}\n                    </label>\n                    <Ui::InfoIcon @isHtml={{true}} @content={{record.popoverText}} @title=\"Public IP Details\"\n                                  @icon=\"fa-search\" />\n                  </div>\n                {{else}}\n                  No public ips available\n                {{/each}}\n              {{/if}}\n            </div>\n          {{/if}}\n        </div>\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"note note-info fade show m-b-10\\\"],[12],[1,\\\"\\\\n  See our \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/guides/self-hosted-azure.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"self hosted\\\\n  Azure guide\\\"],[13],[1,\\\" for more details on the permissions that Testable requires.\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Azure Tenant Id\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Azure Id\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"36\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"36\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Azure Tenant Id is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Azure Tenant Id must be a UUID (36 characters)\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Azure Tenant Id must be a UUID (36 characters)\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,1,[\\\"azureTenantId\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Azure Subscription Id\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Azure Id\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"36\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"36\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Azure Subscription Id is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Azure Subscription Id must be a UUID (36 characters)\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Azure Subscription Id must be a UUID (36 characters)\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,1,[\\\"azureSubscriptionId\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Azure Client Id\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Azure Id\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Azure Client Id is required.\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,1,[\\\"azureClientId\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Azure Client Secret\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,5],[[24,\\\"placeholder\\\",\\\"Azure Id\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Azure Client Secret is required.\\\"]],[[\\\"@value\\\"],[[30,1,[\\\"azureClientSecret\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Tags\\\"],[13],[1,\\\" \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"These tags will be added to any VM Scale Set created when this test runner is used in a test configuration. This can be overridden in any test configuration as well.\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,7],null,[[\\\"@tags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,2],[30,3],[30,4]]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Region Specific Defaults\\\"],[13],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"azureRegions\\\"]],[30,0,[\\\"selectedRegionObj\\\"]],\\\"Select Azure region...\\\",[30,0,[\\\"regionSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,5,[\\\"description\\\"]]],[1,\\\" (\\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\")\\\\n    \\\"]],[5]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onLockChoicesChanged\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"lockChoices\\\"]]]],null],[1,\\\"\\\\n      Do not allow changes from the chosen default values\\\\n      when this test runner source is chosen for a test configuration\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedRegion\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"m-t-10 m-l-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingAzureMetadata\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          Loading Azure details...\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"azureMetadataLoaded\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"Resource Group\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,11],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control\\\",[30,0,[\\\"selectedResourceGroup\\\",\\\"id\\\"]],[30,0,[\\\"updateResourceGroup\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"[Automatic]\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"azureMetadata\\\",\\\"resourceGroups\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,7,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"          \\\"]],[6]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"Network\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,11],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control\\\",[30,0,[\\\"selectedNetwork\\\",\\\"id\\\"]],[30,0,[\\\"updateNetwork\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"[Automatic]\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"selectedResourceGroup\\\",\\\"networks\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,9,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"Subnet\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,11],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control\\\",[30,0,[\\\"selectedSubnet\\\",\\\"name\\\"]],[30,0,[\\\"updateSubnet\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,10,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"[Automatic]\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"selectedNetwork\\\",\\\"subnets\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,10,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,11,[\\\"name\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"          \\\"]],[10]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[41,[30,0,[\\\"azureError\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,2],[12],[1,\\\"Error loading Azure account details.\\\"],[13],[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"bg-silver p-5 f-s-11 text-break\\\"],[12],[1,[30,0,[\\\"azureError\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Public IPs\\\"],[13],[1,\\\" \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"We will automatically try to assign the chosen public ips to test runs when this source is\\\\n                chosen in the test configuration. This choice can be overridden in each test configuration as well.\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,4],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAzureEnablePublicIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"selectedEnablePublicIps\\\"]]]],null],[1,\\\"\\\\n            Enable Public IPs\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedEnablePublicIps\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,4],[[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAzureForceReassociatePublicIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"forceAssociatePublicIps\\\"]]]],null],[1,\\\" Re-associate in-use Public\\\\n              IPs \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"If checked, Testable will reassociate public IPs as necessary to run your test.\\\\n                          If a specific set of Public IPs is chosen it will only attempt to reassociate Public IPs from that set.\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,4],[[4,[38,9],[\\\"change\\\",[30,0,[\\\"onAzureChoosePublicIpsChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"chooseAnyPublicIp\\\"]]]],null],[1,\\\"\\\\n              Choose any available Public IPs \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"<p>If checked,\\\\n              any Public IP  available in this region of your Azure account will be associated with the test runner instance(s).<p>\\\\n              <p>If unchecked, you can choose specific public IPs to assign test runner instance(s).\\\\n              The same Public IP can be associated with multiple Testable organizations.</p>\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[30,0,[\\\"selectedEnablePublicIps\\\"]],[28,[37,16],[[30,0,[\\\"chooseAnyPublicIp\\\"]]],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-l-20 m-t-5 overflow-y-auto max-height-300\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingAzurePublicIps\\\"]],[[[1,\\\"              Loading public ips...\\\\n\\\"]],[]],[[[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"azureAvailablePublicIps\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,4],[[16,\\\"data-id\\\",[30,12,[\\\"id\\\"]]],[4,[38,9],[\\\"click\\\",[30,0,[\\\"onAzureChosenPublicIpChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,12,[\\\"selected\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"label label-success fixed-width-span width-60 m-l-5\\\"],[12],[1,[52,[30,12,[\\\"instanceId\\\"]],\\\"In Use\\\",\\\"Available\\\"]],[13],[1,\\\"\\\\n                    \\\"],[1,[30,12,[\\\"publicIp\\\"]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,6],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@title\\\",\\\"@icon\\\"],[true,[30,12,[\\\"popoverText\\\"]],\\\"Public IP Details\\\",\\\"fa-search\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[12]],[[[1,\\\"                No public ips available\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@metadata\\\",\\\"@azureTags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\",\\\"azureRegion\\\",\\\"xs\\\",\\\"resourceGroup\\\",\\\"xs\\\",\\\"network\\\",\\\"xs\\\",\\\"subnet\\\",\\\"record\\\"],[\\\"div\\\",\\\"a\\\",\\\"label\\\",\\\"strong\\\",\\\"input\\\",\\\"ui/password-input\\\",\\\"ui/info-icon\\\",\\\"providers/tags-manager\\\",\\\"ui/p-select\\\",\\\"on\\\",\\\"if\\\",\\\"ui/x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"p\\\",\\\"and\\\",\\\"not\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/form-azure.hbs\",\n    \"isStrictMode\": false\n  });\n  let ProvidersFormAzureComponent = _exports.default = (_class = class ProvidersFormAzureComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"accessType\", _descriptor, this);\n      _initializerDefineProperty(this, \"azureAvailablePublicIps\", _descriptor2, this);\n      _initializerDefineProperty(this, \"azureError\", _descriptor3, this);\n      _initializerDefineProperty(this, \"azureMetadata\", _descriptor4, this);\n      _initializerDefineProperty(this, \"azureMetadataLoaded\", _descriptor5, this);\n      _initializerDefineProperty(this, \"azureRegions\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chooseAnyPublicIp\", _descriptor7, this);\n      _initializerDefineProperty(this, \"forceAssociatePublicIps\", _descriptor8, this);\n      _initializerDefineProperty(this, \"loadingAzurePublicIps\", _descriptor9, this);\n      _initializerDefineProperty(this, \"loadingAzureMetadata\", _descriptor0, this);\n      _initializerDefineProperty(this, \"lockChoices\", _descriptor1, this);\n      _initializerDefineProperty(this, \"selectedEnablePublicIps\", _descriptor10, this);\n      _initializerDefineProperty(this, \"selectedSubnet\", _descriptor11, this);\n      _initializerDefineProperty(this, \"selectedNetwork\", _descriptor12, this);\n      _initializerDefineProperty(this, \"selectedRegion\", _descriptor13, this);\n      _initializerDefineProperty(this, \"selectedRegionObj\", _descriptor14, this);\n      _initializerDefineProperty(this, \"selectedResourceGroup\", _descriptor15, this);\n      this.accessType = this.args.metadata.accessType || 'credentials';\n      this.chooseAnyPublicIp = this.args.metadata.accessType;\n      this.lockChoices = (0, _utils.isNone)(this.args.metadata.lockChoices) || this.args.metadata.lockChoices === 'true';\n      this.selectedRegion = this.args.metadata.region;\n      this.selectedRegionObj = this.azureRegions.find(region => region.name === this.selectedRegion);\n      this.selectedEnablePublicIps = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':enablePublicIps']) || this.args.metadata[this.selectedRegion + ':enablePublicIps'] === 'true';\n      this.forceAssociatePublicIps = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':forceAssociatePublicIps']) || this.args.metadata[this.selectedRegion + ':forceAssociatePublicIps'] === 'true';\n      this.chooseAnyPublicIp = (0, _utils.isNone)(this.args.metadata[this.selectedRegion + ':chooseAnyPublicIp']) || this.args.metadata[this.selectedRegion + ':chooseAnyPublicIp'] === 'true';\n      if (this.selectedRegion) {\n        this.updateAzureMetadata();\n        if (!this.chooseAnyPublicIp) {\n          this.updateAzurePublicIps();\n        }\n      }\n    }\n    onAzureChoosePublicIpsChange(event) {\n      this.chooseAnyPublicIp = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const choose = this.chooseAnyPublicIp;\n        this.args.metadata[region + ':chooseAnyPublicIp'] = '' + choose;\n        this.updateAzurePublicIps();\n      }\n    }\n    onAzureForceReassociatePublicIpsChange(event) {\n      this.forceAssociatePublicIps = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const value = this.forceAssociatePublicIps;\n        this.args.metadata[region + ':forceAssociatePublicIps'] = '' + value;\n      }\n    }\n    onAzureChosenPublicIpChange(event) {\n      const eventID = event.target.dataset.id;\n      const checked = event.target.checked;\n      const region = this.selectedRegion;\n      if (region) {\n        const selected = [];\n        this.azureAvailablePublicIps.forEach(eip => {\n          if (eip.id === eventID) {\n            eip.selected = checked;\n          }\n          if (eip.selected) {\n            selected.push(eip.publicIp);\n          }\n        });\n        this.args.metadata[region + ':chosenPublicIps'] = selected.join(',');\n      }\n    }\n    onLockChoicesChanged(event) {\n      this.lockChoices = event.target.checked;\n      this.args.metadata.lockChoices = '' + this.lockChoices;\n    }\n    onAzureEnablePublicIpsChange(event) {\n      const region = this.selectedRegion;\n      this.selectedEnablePublicIps = event.target.checked;\n      if (region) {\n        const enable = this.selectedEnablePublicIps;\n        this.args.metadata[region + ':enablePublicIps'] = '' + enable;\n        this.chooseAnyPublicIp = this.getBooleanValue(region, 'chooseAnyPublicIp', true);\n        this.forceAssociatePublicIps = this.getBooleanValue(region, 'forceAssociatePublicIps', false);\n      }\n    }\n    regionSelected(region) {\n      this.selectedRegionObj = this.azureRegions.find(r => r.name === region.name);\n      this.selectedRegion = region.name;\n      this.args.metadata.region = region.name;\n      this.updateAzureMetadata();\n      this.updateAzurePublicIps();\n    }\n    updateResourceGroup(resourceGroupId) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedResourceGroup = this.azureMetadata.resourceGroups.find(rg => rg.id === resourceGroupId);\n        this.args.metadata[region + ':resourceGroup'] = resourceGroupId;\n        if (!resourceGroupId) {\n          this.selectedNetwork = null;\n          this.args.metadata[region + ':network'] = null;\n          this.selectedSubnet = null;\n          this.args.metadata[region + ':subnetId'] = null;\n        }\n      }\n    }\n    updateNetwork(networkId) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedNetwork = this.selectedResourceGroup.networks.find(netw => netw.id === networkId);\n        this.args.metadata[region + ':network'] = networkId;\n      }\n    }\n    updateSubnet(subnetId) {\n      const region = this.selectedRegion;\n      if (region) {\n        this.selectedSubnet = this.selectedNetwork.subnets.find(sn => sn.name === subnetId);\n        this.args.metadata[region + ':subnetId'] = subnetId;\n      }\n    }\n    updateAzureMetadata() {\n      const self = this;\n      const region = this.selectedRegion;\n      if (region && this.isAzureMetadataValid()) {\n        this.loadingAzureMetadata = true;\n        this.updateAzurePublicIpReleatedFields();\n        _server.default.getAzureMetadata(this.args.metadata).then(result => {\n          self.azureMetadata = result;\n          self.loadingAzureMetadata = false;\n          self.azureMetadataLoaded = true;\n          self.updateSelectedResource();\n        }, (jqxhr, status, errMsg) => {\n          self.loadingAzureMetadata = false;\n          self.azureError = errMsg;\n        });\n      }\n    }\n    updateAzurePublicIpReleatedFields() {\n      const region = this.selectedRegion;\n      const selectedEnablePublicIps = this.args.metadata[region + ':enablePublicIps'];\n      this.selectedEnablePublicIps = selectedEnablePublicIps === 'true';\n    }\n    isAzureMetadataValid() {\n      const accessType = this.args.metadata.accessType || 'credentials';\n      if (accessType === 'credentials') return !!(this.args.metadata.azureClientId && this.args.metadata.azureClientSecret);\n      return !!this.args.metadata.azureRoleARN;\n    }\n    updateSelectedResource() {\n      const region = this.selectedRegion;\n      const azureMetadata = this.azureMetadata;\n      if (region && azureMetadata) {\n        this.selectedResourceGroup = this.azureMetadata.resourceGroups.find(rg => rg.id === this.args.metadata[region + ':resourceGroup']);\n        this.selectedNetwork = this.selectedResourceGroup?.networks?.find(netw => netw.id === this.args.metadata[region + ':network']);\n        this.selectedSubnet = this.selectedNetwork?.subnets?.find(sn => sn.name === this.args.metadata[region + ':subnetId']);\n      }\n    }\n    updateAzurePublicIps() {\n      if (this.chooseAnyPublicIp) {\n        return;\n      }\n      const self = this;\n      const region = this.selectedRegion;\n      if (region && this.isAzureMetadataValid()) {\n        this.loadingAzurePublicIps = true;\n        _server.default.getAzurePublicIps(region, this.args.metadata).then(result => {\n          const chosenKey = region + ':chosenPublicIps';\n          const chosenPublicIps = self.args.metadata[chosenKey] && self.args.metadata[chosenKey].split(',') || [];\n          result.forEach(pip => {\n            pip.popoverText = _lib.default.toIpPopoverText(pip);\n            pip.selected = chosenPublicIps.includes(pip.publicIp);\n          });\n          self.azureAvailablePublicIps = _lib.default.sortRegionIps(result);\n          self.loadingAzurePublicIps = false;\n          self.updateSelectedResource();\n        }, (jqxhr, status, errMsg) => {\n          self.azureAvailablePublicIps = [];\n          self.loadingAzurePublicIps = false;\n          self.azureError = errMsg;\n        });\n      }\n    }\n    refreshFormValidation() {\n      $('#createProviderForm').parsley().destroy();\n      $('#createProviderForm').parsley();\n    }\n    getBooleanValue(region, field, defaultVal) {\n      const val = this.args.metadata[region + ':' + field];\n      return (0, _utils.isNone)(val) ? defaultVal : val === 'true';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"accessType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"azureAvailablePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"azureError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"azureMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"azureMetadataLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"azureRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _providers.default.getAzureRegions();\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chooseAnyPublicIp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"forceAssociatePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"loadingAzurePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"loadingAzureMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"lockChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"selectedEnablePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"selectedSubnet\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"selectedNetwork\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegionObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"selectedResourceGroup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onAzureChoosePublicIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAzureChoosePublicIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAzureForceReassociatePublicIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAzureForceReassociatePublicIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAzureChosenPublicIpChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAzureChosenPublicIpChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLockChoicesChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLockChoicesChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAzureEnablePublicIpsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAzureEnablePublicIpsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceGroup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceGroup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateNetwork\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateNetwork\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSubnet\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSubnet\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProvidersFormAzureComponent);\n});","define(\"@testable/shared-ui/components/providers/form-gcp\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"note note-info fade show m-b-10\">\n    See our <a target=\"_blank\" href=\"https://docs.testable.io/guides/self-hosted-gcp.html\" rel=\"noreferrer noopener\">self\n    hosted GCP guide</a> for more details on the permissions that Testable requires.\n  </div>\n  \n  <label><strong>Service Account JSON</strong></label>\n  <Ui::AceEditor @id=\"gcpServiceAccountEdit\"\n             @code={{@metadata.serviceAccount}}\n             @placeholderText=\"\"\n             @codeChanged={{this.updateServiceAccount}}\n             @wrap={{true}}\n             @height={{150}}\n             @mode=\"ace/mode/json\"\n  />\n  \n  <div class=\"form-group m-t-10\">\n    <label><strong>Tags</strong>\n      <Ui::InfoIcon @content=\"These tags will be added to any EC2 instances created when this test runner is used in a test\n                        configuration. This can be overridden in any test configuration as well.\"/>\n    </label>\n    <Providers::TagsManager\n            @tags={{@gcpTags}}\n            @addTag={{@addTag}}\n            @deleteTag={{@deleteTag}}\n    />\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"note note-info fade show m-b-10\\\"],[12],[1,\\\"\\\\n  See our \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/guides/self-hosted-gcp.html\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"self\\\\n  hosted GCP guide\\\"],[13],[1,\\\" for more details on the permissions that Testable requires.\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Service Account JSON\\\"],[13],[13],[1,\\\"\\\\n\\\"],[8,[39,4],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@placeholderText\\\",\\\"@codeChanged\\\",\\\"@wrap\\\",\\\"@height\\\",\\\"@mode\\\"],[\\\"gcpServiceAccountEdit\\\",[30,1,[\\\"serviceAccount\\\"]],\\\"\\\",[30,0,[\\\"updateServiceAccount\\\"]],true,150,\\\"ace/mode/json\\\"]],null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Tags\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,5],null,[[\\\"@content\\\"],[\\\"These tags will be added to any EC2 instances created when this test runner is used in a test\\\\n                      configuration. This can be overridden in any test configuration as well.\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[8,[39,6],null,[[\\\"@tags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[[30,2],[30,3],[30,4]]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@metadata\\\",\\\"@gcpTags\\\",\\\"@addTag\\\",\\\"@deleteTag\\\"],[\\\"div\\\",\\\"a\\\",\\\"label\\\",\\\"strong\\\",\\\"ui/ace-editor\\\",\\\"ui/info-icon\\\",\\\"providers/tags-manager\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/form-gcp.hbs\",\n    \"isStrictMode\": false\n  });\n  let ProvidersFormGcpComponent = _exports.default = (_class = class ProvidersFormGcpComponent extends _component2.default {\n    updateServiceAccount(type, content) {\n      this.args.metadata.serviceAccount = content;\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"updateServiceAccount\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateServiceAccount\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProvidersFormGcpComponent);\n});","define(\"@testable/shared-ui/components/providers/provider-info-awsondemand\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/providers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _toHtml, _environment, _lib, _server, _providers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/providers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <div class=\"panel-heading-btn\">\n        {{#if this.currentUser.isOrgAdmin}}\n          {{#unless @provider.public}}\n            <a {{on \"click\" this.edit}} class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n                                 title=\"Configure\"\n                                 role=\"button\"><Ui::Icon @icon=\"fa fa-cog\" /></a>\n            <a {{on \"click\" this.delete}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\" title=\"Delete\"\n                                   role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n          {{/unless}}\n        {{/if}}\n      </div>\n      <h4 class=\"panel-title\">\n        <strong>{{@provider.name}}</strong>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Visibility\"\n              data-bs-content=\"{{this.visibilityText}}\">{{if @provider.public 'Public' 'Private'}}</span>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Type\"\n              data-bs-content=\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\">On Demand</span>\n      </h4>\n    </div>\n    <div class=\"panel-body\">\n      <div>\n        {{#if this.currentUser.isOrgAdmin}}\n          {{#unless @provider.public}}\n            <dt>Access Key Id</dt>\n            <dd>{{@provider.metadata.awsAccessKeyId}}</dd>\n            <dt>Secret Access Key</dt>\n            <dd>********************</dd>\n          {{/unless}}\n        {{/if}}\n        <dt>Regions</dt>\n        <dd>{{this.regions}}</dd>\n        {{#if (gt this.regionsWithDetaults.length 0)}}\n          <dt>Region Specific Defaults</dt>\n          <div class=\"m-l-10\">\n          <dd>\n            {{#each this.regionsWithDetaults as |info|}}\n              <dt>{{info.description}}</dt>\n              <dd>{{html-safe info.defaultsText}}</dd>\n            {{/each}}\n            </dd>\n          </div>\n        {{/if}}\n        {{#if (gt this.tags.length 0)}}\n          <dt>Default Tags</dt>\n          <dd>{{html-safe this.tagsText}}</dd>\n        {{/if}}\n        {{#if @provider.public}}\n          {{#if this.availablePublicElasticIps}}\n            <dt>Elastic IPs</dt>\n            <div class=\"m-l-10\">\n            <dd>\n              {{#each this.availablePublicElasticIps as |regionInfo|}}\n                <dt>{{regionInfo.region}}</dt>\n                <dd>{{regionInfo.ips}}</dd>\n              {{/each}}\n              </dd>\n            </div>\n          {{/if}}\n          <div class=\"m-t-5 text-muted\"><a target=\"_blank\" href=\"mailto:support@testable.io?subject=Elastic IP Inquiry\"\n                                           rel=\"noreferrer noopener\">Need\n            elastic IPs? Contact us.</a>\n            <Ui::InfoIcon\n                    @content=\"Our test runner EC2 instances are allocated dynamic IP addresses by default by AWS. If the target application requires whitelisting specific client IP addresses and you need us to host the test runner instances, please get in touch to purchase some dedicated elastic IPs. If you self-host the test runner instances in your AWS account you can choose to use your own allocated elastic IPs for no additional cost.\"/>\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Configure\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"edit\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"delete\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Visibility\\\"],[15,\\\"data-bs-content\\\",[29,[[30,0,[\\\"visibilityText\\\"]]]]],[12],[1,[52,[30,1,[\\\"public\\\"]],\\\"Public\\\",\\\"Private\\\"]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Type\\\"],[14,\\\"data-bs-content\\\",\\\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\\\"],[12],[1,\\\"On Demand\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Access Key Id\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,[30,1,[\\\"metadata\\\",\\\"awsAccessKeyId\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Secret Access Key\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,\\\"********************\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Regions\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"dd\\\"],[12],[1,[30,0,[\\\"regions\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"regionsWithDetaults\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Region Specific Defaults\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"dd\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"regionsWithDetaults\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"dt\\\"],[12],[1,[30,2,[\\\"description\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,14],[[30,2,[\\\"defaultsText\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,11],[[30,0,[\\\"tags\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Default Tags\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,14],[[30,0,[\\\"tagsText\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"public\\\"]],[[[41,[30,0,[\\\"availablePublicElasticIps\\\"]],[[[1,\\\"          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Elastic IPs\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-l-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"availablePublicElasticIps\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"dt\\\"],[12],[1,[30,3,[\\\"region\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"dd\\\"],[12],[1,[30,3,[\\\"ips\\\"]]],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[14,0,\\\"m-t-5 text-muted\\\"],[12],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"mailto:support@testable.io?subject=Elastic IP Inquiry\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"Need\\\\n          elastic IPs? Contact us.\\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Our test runner EC2 instances are allocated dynamic IP addresses by default by AWS. If the target application requires whitelisting specific client IP addresses and you need us to host the test runner instances, please get in touch to purchase some dedicated elastic IPs. If you self-host the test runner instances in your AWS account you can choose to use your own allocated elastic IPs for no additional cost.\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@provider\\\",\\\"info\\\",\\\"regionInfo\\\"],[\\\"div\\\",\\\"if\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"strong\\\",\\\"span\\\",\\\"dt\\\",\\\"dd\\\",\\\"gt\\\",\\\"each\\\",\\\"-track-array\\\",\\\"html-safe\\\",\\\"ui/info-icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/provider-info-awsondemand.hbs\",\n    \"isStrictMode\": false\n  });\n  function toRegionsText() {\n    let answer = '';\n    const regions = _.map(_providers.default.getAwsRegions(), awsRegion => {\n      return awsRegion.description;\n    });\n    regions.sort();\n    _.forEach(regions, region => {\n      answer += region + ', ';\n    });\n    return answer.length > 0 ? answer.substring(0, answer.length - 2) : '';\n  }\n  function getRegionDescription(region) {\n    const entry = _.find(_providers.default.getAwsRegions(), awsRegion => {\n      return awsRegion.name === region;\n    });\n    return entry && entry.description || region;\n  }\n  function toRegionDefaultsText(region, metadata) {\n    let answer = '';\n    if (metadata[region + ':vpcId']) {\n      answer += '<strong>VPC:</strong> ' + metadata[region + ':vpcId'];\n    }\n    if (metadata[region + ':subnetId']) {\n      answer += ', <strong>Subnet:</strong> ' + metadata[region + ':subnetId'];\n    }\n    if (metadata[region + ':keyPair']) {\n      answer += (answer.length > 0 ? ', ' : '') + '<strong>Key Pair:</strong> ' + metadata[region + ':keyPair'];\n    }\n    if (metadata[region + ':enableElasticIps'] === 'true') {\n      answer += (answer.length > 0 ? ', ' : '') + '<strong>Elastic IPs:</strong> ';\n      const chooseAny = metadata[region + ':chooseAnyElasticIp'] === 'true';\n      const forceAssociateElasticIps = metadata[region + ':forceAssociateElasticIps'] === 'true';\n      if (chooseAny) {\n        answer += 'any available';\n      } else {\n        answer += metadata[region + ':chosenElasticIps'] || 'none';\n      }\n      if (forceAssociateElasticIps) {\n        answer += ' [force]';\n      }\n    }\n    return answer;\n  }\n  let ProviderInfoAwsondemandComponent = _exports.default = (_class = class ProviderInfoAwsondemandComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor, this);\n      _defineProperty(this, \"regions\", toRegionsText());\n    }\n    get availablePublicElasticIps() {\n      let subscriptions = this.currentUser.org?.account?.subscriptions;\n      let availablePublicElasticIps = [];\n      subscriptions.forEach(sub => {\n        if (sub.active && sub.planProduct.product.code === 'EIP') {\n          if (sub.resources && sub.resources.length > 0) {\n            sub.resources.map(function (ip) {\n              availablePublicElasticIps.push({\n                region: sub.metadata.region,\n                ips: ip.split('|')[1]\n              });\n            });\n          }\n        }\n      });\n      return availablePublicElasticIps;\n    }\n    get visibilityText() {\n      return this.args.provider.public ? 'Shared across all Testable customers' : 'Only available to tests run within your organization';\n    }\n    get regionsWithDetaults() {\n      const metadata = this.args.provider.metadata;\n      const regions = new Set();\n      _.forEach(metadata, (val, key) => {\n        const index = key.indexOf(':');\n        if (index !== -1) {\n          regions.add(key.substring(0, index));\n        }\n      }) >= 0;\n      return _.map(Array.from(regions).sort(), region => {\n        return {\n          name: region,\n          description: getRegionDescription(region),\n          defaultsText: toRegionDefaultsText(region, metadata)\n        };\n      });\n    }\n    get tags() {\n      return _lib.default.tryParseJson(this.args.provider.metadata.awsTags || '[]');\n    }\n    get tagsText() {\n      return _.map(this.tags, tag => {\n        return '<strong>' + (0, _toHtml.sanitizeHtml)([tag.key]) + '</strong> = ' + (0, _toHtml.sanitizeHtml)([tag.value]);\n      }).join(', ');\n    }\n    edit() {\n      this.args.edit(this.args.provider);\n    }\n    delete() {\n      const provider = this.args.provider;\n      _lib.default.confirm('Are you sure you want to delete the <strong>' + provider.name + '</strong> test runner?', 'OK', () => {\n        _server.default.deleteProvider(provider.id).then(() => {\n          _lib.default.info(\"<strong>\" + provider.name + \"</strong> test runner deleted successfully\");\n          const idx = _environment.config.providers.findIndex(p => p.id === provider.id);\n          if (idx > -1) {\n            _environment.config.providers.splice(idx, 1);\n          }\n          this.args.providerDeleted?.(provider.id);\n        });\n      }, 'Cancel', () => {}, 'Delete Test Runner');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"edit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"edit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"delete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"delete\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProviderInfoAwsondemandComponent);\n});","define(\"@testable/shared-ui/components/providers/provider-info-azureondemand\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/azure\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _toHtml, _environment, _lib, _server, _azure, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/azure\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <div class=\"panel-heading-btn\">\n        {{#if this.currentUser.isOrgAdmin}}\n          {{#unless @provider.public}}\n            <a {{on \"click\" this.edit}} class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\" title=\"Configure\"\n                                 role=\"button\"><Ui::Icon @icon=\"fa fa-cog\" /></a>\n            <a {{on \"click\" this.delete}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\" title=\"Delete\"\n                                   role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n          {{/unless}}\n        {{/if}}\n      </div>\n      <h4 class=\"panel-title\">\n        <strong>{{@provider.name}}</strong>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Visibility\"\n              data-bs-content=\"{{this.visibilityText}}\">{{if @provider.public 'Public' 'Private'}}</span>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Type\"\n              data-bs-content=\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\">On Demand</span>\n      </h4>\n    </div>\n    <div class=\"panel-body\">\n      <div>\n        {{#if this.currentUser.isOrgAdmin}}\n          {{#unless @provider.public}}\n            <dt>Tenant Id</dt>\n            <dd>{{@provider.metadata.azureTenantId}}</dd>\n            <dt>Subscription Id</dt>\n            <dd>{{@provider.metadata.azureSubscriptionId}}</dd>\n            <dt>Client Id</dt>\n            <dd>{{@provider.metadata.azureClientId}}</dd>\n            <dt>Client Secret</dt>\n            <dd>********************</dd>\n          {{/unless}}\n        {{/if}}\n        <dt>Regions</dt>\n        <dd>{{this.regions}}</dd>\n        {{#if (gt this.tags.length 0)}}\n          <dt>Default Tags</dt>\n          <dd>{{html-safe this.tagsText}}</dd>\n        {{/if}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Configure\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"edit\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"delete\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Visibility\\\"],[15,\\\"data-bs-content\\\",[29,[[30,0,[\\\"visibilityText\\\"]]]]],[12],[1,[52,[30,1,[\\\"public\\\"]],\\\"Public\\\",\\\"Private\\\"]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Type\\\"],[14,\\\"data-bs-content\\\",\\\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\\\"],[12],[1,\\\"On Demand\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Tenant Id\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,[30,1,[\\\"metadata\\\",\\\"azureTenantId\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Subscription Id\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,[30,1,[\\\"metadata\\\",\\\"azureSubscriptionId\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Client Id\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,[30,1,[\\\"metadata\\\",\\\"azureClientId\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Client Secret\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"dd\\\"],[12],[1,\\\"********************\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Regions\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"dd\\\"],[12],[1,[30,0,[\\\"regions\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"tags\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Default Tags\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,12],[[30,0,[\\\"tagsText\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@provider\\\"],[\\\"div\\\",\\\"if\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"strong\\\",\\\"span\\\",\\\"dt\\\",\\\"dd\\\",\\\"gt\\\",\\\"html-safe\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/provider-info-azureondemand.hbs\",\n    \"isStrictMode\": false\n  });\n  function toRegionsText(azureProvider) {\n    let answer = '';\n    if (azureProvider && azureProvider.locations) {\n      const regions = _.map(azureProvider.locations, location => {\n        return location.description.substring('Azure '.length);\n      });\n      regions.sort();\n      _.forEach(regions, region => {\n        answer += region + ', ';\n      });\n    }\n    return answer.length > 0 ? answer.substring(0, answer.length - 2) : '';\n  }\n  let ProviderInfoAzureondemandComponent = _exports.default = (_class = class ProviderInfoAzureondemandComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"providers\", _descriptor, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor2, this);\n    }\n    get regions() {\n      return toRegionsText(_azure.default.findAzurePublicProvider(this.providers));\n    }\n    get visibilityText() {\n      return this.args.provider.public ? 'Shared across all Testable customers' : 'Only available to tests run within your organization';\n    }\n    get tags() {\n      return _lib.default.tryParseJson(this.args.provider.metadata.azureTags || '[]');\n    }\n    get tagsText() {\n      return _.map(this.tags, tag => {\n        return '<strong>' + (0, _toHtml.sanitizeHtml)([tag.key]) + '</strong> = ' + (0, _toHtml.sanitizeHtml)([tag.value]);\n      }).join(', ');\n    }\n    edit() {\n      this.args.edit(this.args.provider);\n    }\n    delete() {\n      let provider = this.args.provider;\n      _lib.default.confirm('Are you sure you want to delete the <strong>' + provider.name + '</strong> test runner?', 'OK', () => {\n        _server.default.deleteProvider(provider.id).then(() => {\n          _lib.default.info(\"<strong>\" + provider.name + \"</strong> test runner deleted successfully\");\n          const idx = _environment.config.providers.findIndex(p => p.id === provider.id);\n          if (idx > -1) {\n            _environment.config.providers.splice(idx, 1);\n          }\n          this.args.providerDeleted?.(provider.id);\n        });\n      }, 'Cancel', () => {}, 'Delete Test Runner');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"providers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.providers;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"edit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"edit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"delete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"delete\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProviderInfoAzureondemandComponent);\n});","define(\"@testable/shared-ui/components/providers/provider-info-gcpondemand\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/gcp\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _toHtml, _lib, _environment, _server, _gcp, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/gcp\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <div class=\"panel-heading-btn\">\n        {{#if this.currentUser.isOrgAdmin}}\n          {{#unless @provider.public}}\n            <a {{on 'click' this.edit}} class=\"btn btn-sm btn-icon text-primary\" data-bs-toggle=\"tooltip\" title=\"Configure\"\n                                 role=\"button\"><Ui::Icon @icon=\"fa fa-cog\" /></a>\n            <a {{on 'click' this.delete}} class=\"btn btn-sm btn-icon text-danger\" data-bs-toggle=\"tooltip\" title=\"Delete\"\n                                   role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n          {{/unless}}\n        {{/if}}\n  \n      </div>\n      <h4 class=\"panel-title\">\n        <strong>{{@provider.name}}</strong>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Visibility\"\n              data-bs-content=\"{{this.visibilityText}}\">{{if @provider.public 'Public' 'Private'}}</span>\n        <span class=\"label label-success m-l-10\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-title=\"Type\"\n              data-bs-content=\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\">On Demand</span>\n  \n      </h4>\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.currentUser.isOrgAdmin}}\n        {{#unless @provider.public}}\n          <dt>Service Account</dt>\n          <dd>\n            <Ui::AceEditor @id=\"gcpServiceAccountPreview\"\n                       @code={{@provider.metadata.serviceAccount}}\n                       @readonly={{true}}\n                       @wrap={{true}}\n                       @height={{250}}\n                       @mode=\"ace/mode/json\"\n            />\n          </dd>\n        {{/unless}}\n      {{/if}}\n      <dt>Regions</dt>\n      <dd>{{this.regions}}</dd>\n      {{#if (gt this.tags.length 0)}}\n        <dt>Default Tags</dt>\n        <dd>{{html-safe this.tagsText}}</dd>\n      {{/if}}\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Configure\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"edit\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"delete\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Visibility\\\"],[15,\\\"data-bs-content\\\",[29,[[30,0,[\\\"visibilityText\\\"]]]]],[12],[1,[52,[30,1,[\\\"public\\\"]],\\\"Public\\\",\\\"Private\\\"]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"label label-success m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,\\\"data-bs-trigger\\\",\\\"hover focus\\\"],[14,\\\"data-bs-title\\\",\\\"Type\\\"],[14,\\\"data-bs-content\\\",\\\"On Demand test runners are spun up as part of running a test and terminated once the test finishes running\\\"],[12],[1,\\\"On Demand\\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"isOrgAdmin\\\"]],[[[41,[51,[30,1,[\\\"public\\\"]]],[[[1,\\\"        \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Service Account\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"dd\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,11],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@readonly\\\",\\\"@wrap\\\",\\\"@height\\\",\\\"@mode\\\"],[\\\"gcpServiceAccountPreview\\\",[30,1,[\\\"metadata\\\",\\\"serviceAccount\\\"]],true,true,250,\\\"ace/mode/json\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"    \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Regions\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"dd\\\"],[12],[1,[30,0,[\\\"regions\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"tags\\\",\\\"length\\\"]],0],null],[[[1,\\\"      \\\"],[10,\\\"dt\\\"],[12],[1,\\\"Default Tags\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"dd\\\"],[12],[1,[28,[35,13],[[30,0,[\\\"tagsText\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@provider\\\"],[\\\"div\\\",\\\"if\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"strong\\\",\\\"span\\\",\\\"dt\\\",\\\"dd\\\",\\\"ui/ace-editor\\\",\\\"gt\\\",\\\"html-safe\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/provider-info-gcpondemand.hbs\",\n    \"isStrictMode\": false\n  });\n  let ProvidersProviderInfoGcpondemandComponent = _exports.default = (_class = class ProvidersProviderInfoGcpondemandComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"providers\", _descriptor, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor2, this);\n    }\n    get regions() {\n      return this.toRegionsText(_gcp.default.findGcpPublicProvider(this.providers));\n    }\n    get visibilityText() {\n      return this.args.provider.public ? 'Shared across all Testable customers' : 'Only available to tests run within your organization';\n    }\n    get tags() {\n      return _lib.default.tryParseJson(this.args.provider.metadata.gcpTags) || [];\n    }\n    get tagsText() {\n      return _.map(this.tags, tag => {\n        return '<strong>' + (0, _toHtml.sanitizeHtml)([tag.key]) + '</strong> = ' + (0, _toHtml.sanitizeHtml)([tag.value]);\n      }).join(', ');\n    }\n    toRegionsText(gcpProvider) {\n      let answer = '';\n      if (gcpProvider && gcpProvider.locations) {\n        const regions = _.map(gcpProvider.locations, location => {\n          return location.description.substring('Gcp '.length);\n        });\n        regions.sort();\n        _.forEach(regions, region => {\n          answer += region + ', ';\n        });\n      }\n      return answer.length > 0 ? answer.substring(0, answer.length - 2) : '';\n    }\n    edit() {\n      this.args.edit(this.args.provider);\n    }\n    delete() {\n      _lib.default.confirm('Are you sure you want to delete the <strong>' + this.args.provider.name + '</strong> test runner?', 'OK', () => {\n        _server.default.deleteProvider(this.args.provider.id).then(() => {\n          _lib.default.info(\"<strong>\" + this.args.provider.name + \"</strong> test runner deleted successfully\");\n          const idx = _environment.config.providers.findIndex(p => p.id === this.args.provider.id);\n          if (idx > -1) {\n            _environment.config.providers.splice(idx, 1);\n          }\n          this.args.providerDeleted?.(this.args.provider.id);\n        });\n      }, 'Cancel', () => {}, 'Delete Test Runner');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"providers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.providers;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"edit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"edit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"delete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"delete\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProvidersProviderInfoGcpondemandComponent);\n});","define(\"@testable/shared-ui/components/providers/tags-manager\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div>\n    {{#unless @viewOnly}}\n      <button {{on 'click' @addTag}} type=\"button\" class=\"btn btn-xs btn-primary dropdown-toggle\">\n        <Ui::Icon @icon=\"fa fa-plus\" /></button>\n    {{/unless}}\n    {{#each @tags as |tag|}}\n      <div class=\"row m-t-10\">\n        <div class=\"col-md-4\">\n          <div class=\"input-group input-group-sm\">\n            {{#unless @viewOnly}}\n              <div class=\"input-group-prepend\">\n                <a {{on 'click' (fn @deleteTag tag)}} class=\"btn btn-icon btn-danger\"\n                                                      data-bs-toggle=\"tooltip\" title=\"Delete Tag\" role=\"button\">\n                  <Ui::Icon @icon=\"fa fa-trash\" /></a>\n              </div>\n            {{/unless}}\n            <Input @type=\"text\" class=\"form-control\" data-parsley-minlength=\"1\"\n                   data-parsley-required=\"true\" data-parsley-maxlength=\"128\"\n                   data-parsley-required-message=\"Tag key is required.\"\n                   data-parsley-minlength-message=\"Tag key must be at least 1 character.\"\n                   data-parsley-maxlength-message=\"Tag key cannot be longer than 128 characters.\"\n                   placeholder=\"Tag key\" @value={{tag.key}}\n                   />\n          </div>\n        </div>\n        <div class=\"col-md-8\">\n          <Input @type=\"text\" class=\"form-control\" data-parsley-minlength=\"1\"\n                 data-parsley-required=\"true\" data-parsley-maxlength=\"256\"\n                 data-parsley-required-message=\"Tag value is required.\"\n                 data-parsley-minlength-message=\"Tag value must be at least 1 character.\"\n                 data-parsley-maxlength-message=\"Tag value cannot be longer than 256 characters.\"\n                 placeholder=\"Tag value\" @value={{tag.value}}\n              />\n        </div>\n      </div>\n    {{else}}\n      <span class=\"m-l-10 m-t-5\">No tags currently defined!</span>\n    {{/each}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary dropdown-toggle\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,2]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,6],[[28,[37,6],[[30,3]],null]],null],null,[[[1,\\\"    \\\"],[10,0],[14,0,\\\"row m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group input-group-sm\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,0,\\\"btn btn-icon btn-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Tag\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,8],[[30,5],[30,4]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"128\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Tag key is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Tag key must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Tag key cannot be longer than 128 characters.\\\"],[24,\\\"placeholder\\\",\\\"Tag key\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,4,[\\\"key\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"256\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Tag value is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Tag value must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Tag value cannot be longer than 256 characters.\\\"],[24,\\\"placeholder\\\",\\\"Tag value\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,4,[\\\"value\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"m-l-10 m-t-5\\\"],[12],[1,\\\"No tags currently defined!\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@viewOnly\\\",\\\"@addTag\\\",\\\"@tags\\\",\\\"tag\\\",\\\"@deleteTag\\\"],[\\\"div\\\",\\\"unless\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"a\\\",\\\"fn\\\",\\\"input\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/providers/tags-manager.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"tags-manager\"));\n});","define(\"@testable/shared-ui/components/region-queue\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class='region-queue'\n    {{did-insert this.didInsert}}\n    {{did-update this.regionsChanged @region @regions}}\n    {{did-update this.realTimeQueueChanged this.realTimeQueueSignature}}\n  >\n    <div class='d-flex align-items-center justify-content-between m-b-10'>\n      <h5 class='m-0'>Queued Tests</h5>\n      <button\n        type='button'\n        class='btn btn-sm btn-icon btn-circle text-primary'\n        title='Refresh queue'\n        disabled={{this.isLoading}}\n        {{on 'click' this.refresh}}\n      >\n        <Ui::Icon @icon='fa fa-sync {{if this.isLoading \"fa-spin\"}}' />\n      </button>\n    </div>\n  \n    {{#each this.queues as |queue|}}\n      <h5 class='f-w-600 m-t-15'>\n        {{or queue.region.description queue.region.name}}\n      </h5>\n  \n      {{#if @showRunnerSummary}}\n        {{#if queue.runnerError}}\n          <div class='alert alert-warning m-b-10'>Test runner availability could not be loaded.</div>\n        {{else}}\n          <div class='row m-b-10'>\n            <div class='col-md-4'>\n              <strong>Available Test Runners</strong>\n              <div>\n                {{queue.runnerSummary.availableRunners}} of {{queue.runnerSummary.totalRunners}}\n                {{#if queue.runnerSummary.busyRunners}}\n                  <span class='text-muted'>({{queue.runnerSummary.busyRunners}} busy)</span>\n                {{/if}}\n              </div>\n            </div>\n            <div class='col-md-4'>\n              <strong>Running Tests</strong>\n              <div>\n                {{#if queue.runnerSummary.runningExecutions.length}}\n                  {{#each queue.runnerSummary.runningExecutions as |executionId index|}}\n                    {{#if index}}, {{/if}}<LinkTo\n                      @route='loadTestResults'\n                      @model={{executionId}}\n                      target='_blank'\n                      rel='noopener noreferrer'\n                    >#{{executionId}}</LinkTo>\n                  {{/each}}\n                {{else}}\n                  None\n                {{/if}}\n              </div>\n            </div>\n            <div class='col-md-4'>\n              <strong>Queued Tests</strong>\n              <div>{{queue.count}}</div>\n            </div>\n          </div>\n        {{/if}}\n      {{/if}}\n  \n      {{#if queue.error}}\n        <div class='alert alert-warning m-b-10'>The queue could not be loaded.</div>\n      {{else if queue.executions.length}}\n        <div class='table-responsive'>\n          <table class='table table-sm table-striped m-b-10'>\n            <thead>\n              <tr>\n                <th class='width-80'>Position</th>\n                <th>Execution</th>\n                <th>Test</th>\n                <th>Queued At</th>\n              </tr>\n            </thead>\n            <tbody>\n              {{#each queue.executions as |execution index|}}\n                <tr class={{if (eq execution.id @currentExecutionId) 'table-info f-w-600'}}>\n                  <td>{{math-op index '+' 1}}</td>\n                  <td>\n                    {{#if execution.detailsVisible}}\n                      <LinkTo\n                        @route='loadTestResults'\n                        @model={{execution.id}}\n                        target='_blank'\n                        rel='noopener noreferrer'\n                      >#{{execution.id}}</LinkTo>\n                    {{else}}\n                      <span class='text-muted'>Private</span>\n                    {{/if}}\n                  </td>\n                  <td>\n                    <div>{{execution.testCaseName}}</div>\n                    {{#if execution.confName}}\n                      <small class='text-muted'>{{execution.confName}}</small>\n                    {{/if}}\n                  </td>\n                  <td>{{print-datetime (or execution.queueStartedAt execution.createdAt)}}</td>\n                </tr>\n              {{/each}}\n            </tbody>\n          </table>\n        </div>\n        {{#if queue.loadMoreError}}\n          <div class='text-danger text-center m-b-10'>Additional queued tests could not be loaded.</div>\n        {{/if}}\n        {{#if (lt queue.executions.length queue.count)}}\n          <div class='text-center m-b-10'>\n            <button\n              type='button'\n              class='btn btn-sm btn-outline-primary'\n              disabled={{queue.isLoadingMore}}\n              {{on 'click' (fn this.loadMore queue.region.id)}}\n            >\n              {{#if queue.isLoadingMore}}\n                <Ui::Icon @icon='fa fa-sync fa-spin' /> Loading...\n              {{else}}\n                Load more\n              {{/if}}\n            </button>\n          </div>\n        {{/if}}\n      {{else}}\n        {{#unless this.isLoading}}\n          <div class='text-muted m-b-10'>No tests are currently queued in this region.</div>\n        {{/unless}}\n      {{/if}}\n    {{/each}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"region-queue\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"regionsChanged\\\"]],[30,1],[30,2]],null],[4,[38,2],[[30,0,[\\\"realTimeQueueChanged\\\"]],[30,0,[\\\"realTimeQueueSignature\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h5\\\"],[14,0,\\\"m-0\\\"],[12],[1,\\\"Queued Tests\\\"],[13],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"title\\\",\\\"Refresh queue\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isLoading\\\"]]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"refresh\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-sync \\\",[52,[30,0,[\\\"isLoading\\\"]],\\\"fa-spin\\\"]]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"queues\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[14,0,\\\"f-w-600 m-t-15\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,10],[[30,3,[\\\"region\\\",\\\"description\\\"]],[30,3,[\\\"region\\\",\\\"name\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,4],[[[41,[30,3,[\\\"runnerError\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"alert alert-warning m-b-10\\\"],[12],[1,\\\"Test runner availability could not be loaded.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"row m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Available Test Runners\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[1,[30,3,[\\\"runnerSummary\\\",\\\"availableRunners\\\"]]],[1,\\\" of \\\"],[1,[30,3,[\\\"runnerSummary\\\",\\\"totalRunners\\\"]]],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"runnerSummary\\\",\\\"busyRunners\\\"]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"(\\\"],[1,[30,3,[\\\"runnerSummary\\\",\\\"busyRunners\\\"]]],[1,\\\" busy)\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Running Tests\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"runnerSummary\\\",\\\"runningExecutions\\\",\\\"length\\\"]],[[[42,[28,[37,9],[[28,[37,9],[[30,3,[\\\"runnerSummary\\\",\\\"runningExecutions\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[41,[30,6],[[[1,\\\", \\\"]],[]],null],[8,[39,13],[[24,\\\"target\\\",\\\"_blank\\\"],[24,\\\"rel\\\",\\\"noopener noreferrer\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,5]]],[[\\\"default\\\"],[[[[1,\\\"#\\\"],[1,[30,5]]],[]]]]],[1,\\\"\\\\n\\\"]],[5,6]],null]],[]],[[[1,\\\"                None\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Queued Tests\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,[30,3,[\\\"count\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"error\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"alert alert-warning m-b-10\\\"],[12],[1,\\\"The queue could not be loaded.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"executions\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sm table-striped m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[14,0,\\\"width-80\\\"],[12],[1,\\\"Position\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,\\\"Execution\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,\\\"Test\\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"th\\\"],[12],[1,\\\"Queued At\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,3,[\\\"executions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[15,0,[52,[28,[37,19],[[30,7,[\\\"id\\\"]],[30,9]],null],\\\"table-info f-w-600\\\"]],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,21],[[30,8],\\\"+\\\",1],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,7,[\\\"detailsVisible\\\"]],[[[1,\\\"                    \\\"],[8,[39,13],[[24,\\\"target\\\",\\\"_blank\\\"],[24,\\\"rel\\\",\\\"noopener noreferrer\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,7,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"#\\\"],[1,[30,7,[\\\"id\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,1],[14,0,\\\"text-muted\\\"],[12],[1,\\\"Private\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,[30,7,[\\\"testCaseName\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,7,[\\\"confName\\\"]],[[[1,\\\"                    \\\"],[10,\\\"small\\\"],[14,0,\\\"text-muted\\\"],[12],[1,[30,7,[\\\"confName\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,23],[[28,[37,10],[[30,7,[\\\"queueStartedAt\\\"]],[30,7,[\\\"createdAt\\\"]]],null]],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[7,8]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"loadMoreError\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-danger text-center m-b-10\\\"],[12],[1,\\\"Additional queued tests could not be loaded.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,24],[[30,3,[\\\"executions\\\",\\\"length\\\"]],[30,3,[\\\"count\\\"]]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-center m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-outline-primary\\\"],[16,\\\"disabled\\\",[30,3,[\\\"isLoadingMore\\\"]]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,25],[[30,0,[\\\"loadMore\\\"]],[30,3,[\\\"region\\\",\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"isLoadingMore\\\"]],[[[1,\\\"              \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-sync fa-spin\\\"]],null],[1,\\\" Loading...\\\\n\\\"]],[]],[[[1,\\\"              Load more\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[51,[30,0,[\\\"isLoading\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"text-muted m-b-10\\\"],[12],[1,\\\"No tests are currently queued in this region.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"]],[]]]],[]]]],[3]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@region\\\",\\\"@regions\\\",\\\"queue\\\",\\\"@showRunnerSummary\\\",\\\"executionId\\\",\\\"index\\\",\\\"execution\\\",\\\"index\\\",\\\"@currentExecutionId\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"h5\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"or\\\",\\\"strong\\\",\\\"span\\\",\\\"link-to\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"eq\\\",\\\"td\\\",\\\"math-op\\\",\\\"small\\\",\\\"print-datetime\\\",\\\"lt\\\",\\\"fn\\\",\\\"unless\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/region-queue.hbs\",\n    \"isStrictMode\": false\n  });\n  let RegionQueueComponent = _exports.default = (_class = class RegionQueueComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"pageSize\", 10);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor2, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor3, this);\n      _initializerDefineProperty(this, \"queues\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor5, this);\n      _defineProperty(this, \"loadSequence\", 0);\n      this.EventBus.subscribe('executionQueue.invalidate', this, 'queueInvalidated');\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.loadSequence += 1;\n      this.EventBus.unsubscribe('executionQueue.invalidate', this, 'queueInvalidated');\n    }\n    get regions() {\n      const regions = this.args.regions || (this.args.region ? [this.args.region] : []);\n      return [...new Map(regions.filter(Boolean).map(region => [region.id, region])).values()];\n    }\n    get realTimeQueueSignature() {\n      const visibleRegionIds = new Set(this.regions.map(region => Number(region.id)));\n      const entries = [];\n      for (const execution of this.applicationState.runningTests || []) {\n        for (const executionRegion of execution.regions || []) {\n          const regionId = Number(executionRegion.region?.id);\n          if ((executionRegion.queued || executionRegion.running) && visibleRegionIds.has(regionId)) {\n            entries.push(`${regionId}:${execution.id}:${executionRegion.queued ? 'queued' : 'running'}`);\n          }\n        }\n      }\n      return entries.sort().join('|');\n    }\n    didInsert() {\n      this.loadQueue();\n    }\n    regionsChanged() {\n      this.loadQueue();\n    }\n    realTimeQueueChanged() {\n      this.scheduleRefresh();\n    }\n    queueInvalidated() {\n      this.scheduleRefresh();\n    }\n    scheduleRefresh() {\n      (0, _runloop.debounce)(this, this.loadQueue, 500);\n    }\n    refresh() {\n      this.loadQueue();\n    }\n    async loadMore(regionId) {\n      const queueIndex = this.queues.findIndex(queue => queue.region.id === regionId);\n      const queue = this.queues[queueIndex];\n      if (!queue || queue.isLoadingMore || queue.executions.length >= queue.count) {\n        return;\n      }\n      const loadSequence = this.loadSequence;\n      this.replaceQueue(queueIndex, {\n        ...queue,\n        isLoadingMore: true,\n        loadMoreError: false\n      });\n      try {\n        const response = await this.api.regions.getQueuedExecutions(regionId, queue.executions.length, this.pageSize);\n        const page = this.normalizeResponse(response);\n        if (loadSequence !== this.loadSequence) {\n          return;\n        }\n        this.replaceQueue(queueIndex, {\n          ...queue,\n          executions: [...queue.executions, ...page.executions],\n          count: page.count,\n          isLoadingMore: false,\n          loadMoreError: false\n        });\n      } catch (_error) {\n        if (loadSequence === this.loadSequence) {\n          this.replaceQueue(queueIndex, {\n            ...queue,\n            isLoadingMore: false,\n            loadMoreError: true\n          });\n        }\n      }\n    }\n    replaceQueue(index, queue) {\n      this.queues = [...this.queues.slice(0, index), queue, ...this.queues.slice(index + 1)];\n    }\n    normalizeResponse(response) {\n      const executions = Array.isArray(response) ? response : response.executions || [];\n      return {\n        executions,\n        count: Array.isArray(response) ? executions.length : response.count || 0\n      };\n    }\n    normalizeRunnerSummary(response, regionId) {\n      const regionSummary = (response?.regions || []).find(summary => Number(summary.region?.id) === Number(regionId));\n      const agents = regionSummary?.agents || [];\n      const totalRunners = regionSummary?.numAgents ?? agents.length;\n      const busyRunners = agents.filter(agent => Number(agent.currentUsage || 0) > 0).length;\n      const runningExecutions = [...new Set(regionSummary?.runningExecutions || agents.flatMap(agent => agent.runningExecutions || []))];\n      return {\n        totalRunners,\n        availableRunners: Math.max(0, totalRunners - busyRunners),\n        busyRunners,\n        runningExecutions\n      };\n    }\n    async loadQueue() {\n      const regions = this.regions;\n      const loadSequence = ++this.loadSequence;\n      if (regions.length === 0) {\n        this.queues = [];\n        this.isLoading = false;\n        return;\n      }\n      this.isLoading = true;\n      const queues = await Promise.all(regions.map(async region => {\n        const queueRequest = this.api.regions.getQueuedExecutions(region.id, 0, this.pageSize).then(response => ({\n          page: this.normalizeResponse(response),\n          error: false\n        })).catch(() => ({\n          page: {\n            executions: [],\n            count: 0\n          },\n          error: true\n        }));\n        const runnerRequest = this.args.showRunnerSummary ? this.api.regions.getAgents(region.id).then(response => ({\n          summary: this.normalizeRunnerSummary(response, region.id),\n          error: false\n        })).catch(() => ({\n          summary: null,\n          error: true\n        })) : Promise.resolve({\n          summary: null,\n          error: false\n        });\n        const [queueResult, runnerResult] = await Promise.all([queueRequest, runnerRequest]);\n        return {\n          region,\n          executions: queueResult.page.executions,\n          count: queueResult.page.count,\n          error: queueResult.error,\n          runnerSummary: runnerResult.summary,\n          runnerError: runnerResult.error,\n          isLoadingMore: false,\n          loadMoreError: false\n        };\n      }));\n      if (loadSequence === this.loadSequence) {\n        this.queues = queues;\n        this.isLoading = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"queues\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionsChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionsChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"realTimeQueueChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"realTimeQueueChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refresh\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refresh\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMore\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, RegionQueueComponent);\n});","define(\"@testable/shared-ui/components/reset-password-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/login\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _lib, _login, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/login\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <form {{on \"submit\" this.resetPassword}} data-parsley-trigger=\"focusout\" id=\"resetPasswordForm\" {{did-insert this.didInsert}}>\n    <div class=\"form-group\">\n      <label class=\"control-label\">New Password</label>\n        <Ui::PasswordInput class=\"input-lg\" id=\"newPassword\" placeholder=\"Password\"\n               data-parsley-required=\"true\" data-parsley-minlength=\"6\" data-parsley-maxlength=\"100\"\n               data-parsley-required-message=\"Password is required.\"\n               data-parsley-minlength-message=\"Password must be at least 6 characters long.\"\n               data-parsley-maxlength-message=\"Password must be no longer than 100 characters.\"/>\n    </div>\n    <div class=\"form-group\">\n      <label class=\"control-label\">Confirm New Password</label>\n        <Ui::PasswordInput class=\"input-lg\" placeholder=\"Confirm Password\" data-parsley-required=\"true\"\n               data-parsley-equalto=\"#newPassword\" data-parsley-equalto-message=\"Passwords do not match.\"\n               data-parsley-required-message=\"Confirm password please.\"/>\n    </div>\n    <div class=\"form-group\">\n      <button type=\"submit\" class=\"btn btn-success btn-block btn-lg\">Reset Password</button>\n    </div>\n  </form>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"form\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[24,1,\\\"resetPasswordForm\\\"],[4,[38,1],[\\\"submit\\\",[30,0,[\\\"resetPassword\\\"]]],null],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"control-label\\\"],[12],[1,\\\"New Password\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"input-lg\\\"],[24,1,\\\"newPassword\\\"],[24,\\\"placeholder\\\",\\\"Password\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"6\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"100\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Password is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Password must be at least 6 characters long.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Password must be no longer than 100 characters.\\\"]],null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"control-label\\\"],[12],[1,\\\"Confirm New Password\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"input-lg\\\"],[24,\\\"placeholder\\\",\\\"Confirm Password\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-equalto\\\",\\\"#newPassword\\\"],[24,\\\"data-parsley-equalto-message\\\",\\\"Passwords do not match.\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Confirm password please.\\\"]],null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success btn-block btn-lg\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Reset Password\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"form\\\",\\\"on\\\",\\\"did-insert\\\",\\\"div\\\",\\\"label\\\",\\\"ui/password-input\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/reset-password-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResetPasswordPanelComponent = _exports.default = (_class = class ResetPasswordPanelComponent extends _component2.default {\n    didInsert() {\n      $('#resetPasswordForm').parsley();\n    }\n    resetPassword(e) {\n      e.preventDefault();\n      if (!$('#resetPasswordForm').parsley().validate()) return;\n      let newPassword = $('#newPassword').val();\n      _login.default.resetPassword(this.args.code, newPassword).then(data => {\n        if (data.success) {\n          _lib.default.info('Successfully reset password');\n          this.args.passwordReset();\n        }\n      });\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resetPassword\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetPassword\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResetPasswordPanelComponent);\n});","define(\"@testable/shared-ui/components/resources-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@ember/runloop\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _observers, _service, _runloop, _tracking, _lib, _dataGrid, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  function toRecords(resource, config, resourceTypeFilter, summaryContainer) {\n    summaryContainer = summaryContainer || resource;\n    const record = {\n      id: resource.id,\n      resource: _.isEmpty(resource.resource) ? '[blank]' : _lib.default.htmlEncode(resource.resource),\n      summaryContainer: summaryContainer,\n      data: resource\n    };\n    const summary = summaryContainer ? summaryContainer.summary : null;\n    if (config && config.metrics) {\n      _.forEach(config.metrics, columnConfig => {\n        const key = _loadTest.default.toMetricKey(columnConfig.namespace, columnConfig.metric);\n        record[key] = summary && summary[key] || NaN;\n      });\n    }\n    return splitRecordIfRequired(record, summaryContainer, resourceTypeFilter);\n  }\n  function matchesFilter(resourceTypeFilter, resource) {\n    if (resourceTypeFilter === 'Transactions') {\n      return resource.hasTransactions;\n    } else if (resourceTypeFilter === 'Requests') {\n      return resource.hasRequests;\n    }\n    return true;\n  }\n  function splitRecordIfRequired(record, summaryContainer, resourceTypeFilter) {\n    const summary = summaryContainer ? summaryContainer.summary : record.data.summary;\n    if (summary && summary.hasTxnMetrics && summary.hasRequestMetrics) {\n      const txnOnlyRecord = _.clone(record);\n      const reqOnlyRecord = record;\n      const answer = [];\n      if (!resourceTypeFilter || resourceTypeFilter !== 'Transactions') {\n        reqOnlyRecord.reqOnly = true;\n        answer.push(reqOnlyRecord);\n      }\n      if (!resourceTypeFilter || resourceTypeFilter !== 'Requests') {\n        txnOnlyRecord.txnOnly = true;\n        txnOnlyRecord.id = record.id + 'txn';\n        answer.push(txnOnlyRecord);\n      }\n      return answer;\n    } else {\n      if (summary && summary.hasRequestMetrics) record.reqOnly = true;\n      if (summary && summary.hasTxnMetrics) {\n        record.txnOnly = true;\n        record.id = record.id + 'txn';\n      }\n      return [record];\n    }\n  }\n  function toResourceText(record) {\n    return record.resource === _loadTest.default.OverallResource.resource ? 'Overall' : record.resource;\n  }\n  let ResourcesGrid = _exports.default = (_class = class ResourcesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"ignoreResourceSelect\", _descriptor2, this);\n      (0, _observers.addObserver)(this, 'args.selectedResource', this.onSelectedResource);\n      (0, _observers.addObserver)(this, 'args.config.{orderBy,showComparisons,metrics.[]}', this.onConfigUpdated);\n      (0, _observers.addObserver)(this, 'args.resourceTypeFilter', this.onConfigUpdated);\n      _lib.default.observeKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onConfigUpdated);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.selectedResource', this.onSelectedResource);\n      (0, _observers.removeObserver)(this, 'args.config.{orderBy,showComparisons,metrics.[]}', this.onConfigUpdated);\n      (0, _observers.removeObserver)(this, 'args.resourceTypeFilter', this.onConfigUpdated);\n      _lib.default.unobserveKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onConfigUpdated);\n    }\n    onConfigUpdated() {\n      (0, _runloop.once)(this, 'refreshTable');\n    }\n    onSelectedResource() {\n      const selectedResource = this.args.selectedResource;\n      const table = $('#' + this.args.id).DataTable();\n      this.ignoreResourceSelect = true;\n      this.updateSelectedResource(table);\n      this.ignoreResourceSelect = false;\n    }\n    getColumns() {\n      const self = this;\n      const resourceType = $.fn.dataTable.absoluteOrder(_loadTest.default.OverallResource.resource);\n      const metricDefs = this.args.metricDefs;\n      const config = this.args.config;\n      const orderBy = this.args.config?.orderBy || 'resource';\n      const showComparisons = this.args.config?.showComparisons;\n      const scriptType = this.args.scriptType;\n      const isPrint = this.args.isPrint;\n      const transactionsOnly = this.args.resourceTypeFilter === 'Transactions';\n      const columns = [];\n      if (!isPrint) {\n        columns.push({\n          width: \"10px\",\n          orderable: false,\n          className: 'select-checkbox',\n          targets: 0,\n          render: (data, type, full, meta) => {\n            return '';\n          }\n        });\n      }\n      columns.push({\n        data: 'resource',\n        title: 'Resource',\n        width: \"250px\",\n        type: resourceType,\n        render: (data, type, full, meta) => {\n          if (type === 'display') {\n            const resource = toResourceText(full);\n            return '<span class=\"truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"' + resource + '\">' + resource + '</span>';\n          } else if (type === 'sort' && orderBy !== 'resource') {\n            const summary = full.summaryContainer.summary;\n            return data === _loadTest.default.OverallResource.resource ? '' : summary.firstResultAt || data;\n          } else {\n            return data;\n          }\n        }\n      });\n      // Todo\n      // Need to verify\n      _.forEach(config?.metrics, columnConfig => {\n        columns.push({\n          data: _loadTest.default.toMetricKey(columnConfig.namespace, columnConfig.metric),\n          title: columnConfig.title,\n          width: \"70px\",\n          render: (data, type, full, meta) => {\n            if (type === 'display') {\n              const summary = full.summaryContainer.summary;\n              const ns = columnConfig.namespace;\n              const metric = (full.txnOnly || transactionsOnly) && ns === _lib.default.SystemNs && columnConfig.metric.indexOf(_lib.default.JMeterTxnPrefix) !== 0 ? _lib.default.JMeterTxnPrefix + _.upperFirst(columnConfig.metric) : columnConfig.metric;\n              return _loadTest.default.printMetric(summary, ns, metric, columnConfig.units, showComparisons, metricDefs, null, null, scriptType);\n            } else {\n              return data;\n            }\n          }\n        });\n      });\n      return columns;\n    }\n    getInitialOrder(columns) {\n      return [[this.args.isPrint ? 0 : 1, 'asc']];\n    }\n    createDataSource() {\n      const resources = this.args.resources;\n      const config = this.args.config;\n      const resourceTypeFilter = this.args.resourceTypeFilter;\n      const records = toRecords(_loadTest.default.OverallResource, config, resourceTypeFilter, this.args.data);\n      _.forEach(resources, function (resource) {\n        if (!_.isEmpty(resource.resource) && matchesFilter(resourceTypeFilter, resource)) records.push.apply(records, toRecords(resource, config, resourceTypeFilter));\n      });\n      return records;\n    }\n    updateDataSource() {\n      const table = $('#' + this.args.id).DataTable();\n      const resources = this.args.resources;\n      const resourceTypeFilter = this.args.resourceTypeFilter;\n      const config = this.args.config;\n      const toAdd = [];\n      _.forEach(resources, resource => {\n        if (!_.isEmpty(resource.resource) && matchesFilter(resourceTypeFilter, resource)) {\n          this.updateResource(table, resource, config, toAdd);\n        }\n      });\n      this.updateResource(table, _loadTest.default.OverallResource, config, toAdd);\n      if (toAdd.length > 0) {\n        table.rows.add(toAdd);\n      }\n      table.draw(false);\n    }\n    updateResource(table, resource, config, toAdd) {\n      _.forEach(toRecords(resource, config, this.args.resourceTypeFilter, resource.id >= 0 ? resource : this.args.data), record => {\n        const row = table.row('#' + record.id);\n        if (_.isEmpty(row)) toAdd.push(record);else {\n          const data = row.data();\n          if (!_.isEqual(data, record)) row.data(record);\n        }\n      });\n    }\n    addTableOptions(options) {\n      options.autoWidth = false;\n      if (options.paging) {\n        options.dom = 'BZtp';\n        options.select = {\n          style: 'single'\n        };\n        options.language = {\n          emptyTable: \"No resources level results yet.\"\n        };\n        options.buttons = [{\n          extend: 'copy',\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right m-l-10 m-b-5',\n          text: '<i class=\"fa fa-copy\"></i>',\n          exportOptions: {\n            modifier: {\n              selected: null\n            }\n          }\n        }, {\n          extend: 'csv',\n          filename: 'testable.resources.' + this.args.data.execution.id + '.' + this.args.regionName,\n          className: 'btn btn-sm btn-icon btn-circle text-primary pull-right',\n          text: '<i class=\"fa fa-download\"></i>',\n          exportOptions: {\n            modifier: {\n              selected: null\n            }\n          }\n        }];\n      }\n    }\n    updateSelectedResource(table) {\n      const selectedResource = this.args.selectedResource;\n      $(`#${this.args.id} tr`).removeClass('selected');\n      if (selectedResource && selectedResource.id > 0) {\n        $(`#${this.args.id} #-1` + (this.args.resourceTypeFilter === 'Transactions' ? 'txn' : '')).removeClass('selected');\n        $(`#${this.args.id} #` + selectedResource.id).addClass('selected');\n      } else {\n        this.selectDefaultRow(table);\n      }\n    }\n    initTable(table) {\n      this.updateSelectedResource(table);\n      const _this = this;\n      table.on('select', function (e, dt, type, indexes) {\n        if (!_this.args.ignoreResourceSelect) {\n          const rowData = table.row(indexes[0]).data();\n          if (rowData) _this.args.resourceSelected(rowData.data);\n        }\n      }).on('deselect', function (e, dt, type, indexes) {\n        if (!_this.args.ignoreResourceSelect) {\n          const rowData = table.row(indexes[0]).data();\n          if (rowData && rowData.id === -1) _this.selectDefaultRow(table);\n          _this.args.resourceSelected(_loadTest.default.OverallResource);\n        }\n      });\n    }\n    selectDefaultRow(table) {\n      table.row('#-1' + (this.args.resourceTypeFilter === 'Transactions' ? 'txn' : '')).select();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"ignoreResourceSelect\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/result-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row\"\n       {{did-update this.processMetrics @result.metrics}}\n       {{did-update this.processTrace @result.trace}}>\n    <div class=\"col-md-6 col-sm-6 col-xs-12\">\n      <div class=\"panel block-sub-container\">\n        <div class=\"panel-heading block-sub-container-target\">\n          <strong>Summary</strong>\n        </div>\n        <div class=\"panel-body wrapped-text\">\n          <strong>Captured At:</strong> {{print-datetime @result.timestamp}}<br/>\n          <strong>Region:</strong> {{@region}}<br/>\n          {{#if @result.resource}}\n            <strong>Resource:</strong> {{@result.resource}}<br/>\n          {{/if}}\n          {{#if @result.url}}\n            <strong>URL:</strong> {{@result.url}}<br/>\n          {{/if}}\n          {{#if @result.trace}}\n            <strong>Status:</strong> {{@result.trace.status}}<br/>\n            {{#if @result.trace.statusMsg}}\n              <strong>Status Message:</strong> {{@result.trace.statusMsg}}<br/>\n            {{/if}}\n            <strong>Size:</strong> {{print-bytes @result.trace.length}}<br/>\n          {{/if}}\n          {{#if @result.connectionId}}\n            <strong>Connection:</strong> {{@result.connectionId}}<br/>\n          {{/if}}\n          {{#if @result.threadId}}\n            <strong>Concurrent User:</strong> {{@result.threadId}}<br/>\n          {{/if}}\n          {{#if @result.iterationId}}\n            <strong>Iteration:</strong> {{@result.iterationId}}<br/>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n    <div class=\"col-md-6 col-sm-6 col-xs-12\">\n      <ResultMetrics @metrics={{@result.metrics}} @scriptType={{@scriptType}} />\n    </div>\n  </div>\n  {{#if (gt @result.suiteResults.length 0)}}\n    <div class=\"row\">\n      <div class=\"col-md-12 col-sm-12 col-xs-12\">\n        <SuiteResultsWidget @suiteResults={{@result.suiteResults}}\n                            @hasDuration={{false}}\n                            @collapsible={{false}}\n                            @scriptType={{@scriptType}}\n                            @suffix=\"ResultDetails\" />\n      </div>\n    </div>\n  {{/if}}\n  {{#if (is-object @result.trace)}}\n    <div class=\"row\">\n      <div class=\"col-md-12 col-sm-12 col-xs-12\">\n        <TraceTimeline @packets={{this.packets}}\n                       @packetCount={{this.packets.length}}\n                       @traceAt={{@result.timestamp}} />\n      </div>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"row\\\"],[4,[38,1],[[30,0,[\\\"processMetrics\\\"]],[30,1,[\\\"metrics\\\"]]],null],[4,[38,1],[[30,0,[\\\"processTrace\\\"]],[30,1,[\\\"trace\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel block-sub-container\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Summary\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body wrapped-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Captured At:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,3],[[30,1,[\\\"timestamp\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Region:\\\"],[13],[1,\\\" \\\"],[1,[30,2]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"resource\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"resource\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"url\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"URL:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"url\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"trace\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"trace\\\",\\\"status\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"trace\\\",\\\"statusMsg\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status Message:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"trace\\\",\\\"statusMsg\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Size:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,6],[[30,1,[\\\"trace\\\",\\\"length\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"connectionId\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Connection:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"connectionId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"threadId\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Concurrent User:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"threadId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"iterationId\\\"]],[[[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Iteration:\\\"],[13],[1,\\\" \\\"],[1,[30,1,[\\\"iterationId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,7],null,[[\\\"@metrics\\\",\\\"@scriptType\\\"],[[30,1,[\\\"metrics\\\"]],[30,3]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,1,[\\\"suiteResults\\\",\\\"length\\\"]],0],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@suiteResults\\\",\\\"@hasDuration\\\",\\\"@collapsible\\\",\\\"@scriptType\\\",\\\"@suffix\\\"],[[30,1,[\\\"suiteResults\\\"]],false,false,[30,3],\\\"ResultDetails\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,10],[[30,1,[\\\"trace\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@packets\\\",\\\"@packetCount\\\",\\\"@traceAt\\\"],[[30,0,[\\\"packets\\\"]],[30,0,[\\\"packets\\\",\\\"length\\\"]],[30,1,[\\\"timestamp\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@result\\\",\\\"@region\\\",\\\"@scriptType\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"strong\\\",\\\"print-datetime\\\",\\\"br\\\",\\\"if\\\",\\\"print-bytes\\\",\\\"result-metrics\\\",\\\"gt\\\",\\\"suite-results-widget\\\",\\\"is-object\\\",\\\"trace-timeline\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/result-details.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResultDetailsComponent = _exports.default = (_class = class ResultDetailsComponent extends _component2.default {\n    get packets() {\n      return _.map(this.args.result?.trace?.packets, packet => {\n        let result = {\n          packetType: packet.type,\n          bodyTooLarge: packet.bodyTooLarge,\n          packetAt: packet.timestamp,\n          lastPacketAt: packet.lastTimestamp,\n          length: packet.length\n        };\n        if (packet.headers) result.headers = packet.headers;\n        if (packet.body) result.data = packet.body.data;\n        return result;\n      });\n    }\n    constructor() {\n      super(...arguments);\n      this.processMetrics();\n      this.processTrace();\n    }\n    processMetrics() {\n      _.forEach(this.args.result?.metrics, metric => {\n        (0, _object.set)(metric, 'metricDef', metric.name);\n      });\n    }\n    processTrace() {\n      let trace = this.args.result?.trace;\n      if (trace) {\n        (0, _object.set)(trace, 'length', _.reduce(trace.packets, (sum, packet) => {\n          return sum + packet.length;\n        }, 0));\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"processMetrics\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"processMetrics\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"processTrace\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"processTrace\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultDetailsComponent);\n});","define(\"@testable/shared-ui/components/result-filter-bar\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _runloop, _component2, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-insert this.onInsertOrUpdate}}\n    class=\"results-top-bar m-b-10 no-print\">\n    <a href=\"javascript:\" {{on \"click\" this.hideFilterBarAction}}\n       class=\"btn btn-sm btn-white btn-circle btn-icon text-danger pull-right\" data-bs-toggle=\"tooltip\"\n       role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n  \n    <div class=\"row m-r-20 m-l-20\">\n      <div class=\"col-md-12 col-sm-12\">\n        <input type=\"text\" id=\"testTimelineSlider\" name=\"testTimelineSlider\" value=\"\"/>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"results-top-bar m-b-10 no-print\\\"],[4,[38,1],[[30,0,[\\\"onInsertOrUpdate\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-sm btn-white btn-circle btn-icon text-danger pull-right\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"hideFilterBarAction\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"row m-r-20 m-l-20\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"input\\\"],[14,1,\\\"testTimelineSlider\\\"],[14,3,\\\"testTimelineSlider\\\"],[14,2,\\\"\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"input\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/result-filter-bar.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResultFilterBar = _exports.default = (_dec = (0, _object.computed)('args.model.summary.firstResultAt', 'args.model.startedAt', 'granularity'), _dec2 = (0, _object.computed)('args.model.summary.timespan', 'args.model.finishedAt', 'args.model.startedAt', 'granularity', 'args.selectedResource.summary.timespan'), _dec3 = (0, _object.computed)('timespan', 'granularity'), _dec4 = (0, _object.computed)('args.intervals', 'args.model.summary.granularity'), _dec5 = (0, _object.computed)('args.model.summary.{count,concurrentClients,metrics.length}'), _class = class ResultFilterBar extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _defineProperty(this, \"isUpdatingZoom\", false);\n      _defineProperty(this, \"lastSliderFrom\", null);\n      _defineProperty(this, \"lastSliderTo\", null);\n      _lib.default.observeKeys(this, ['args.model.id', 'args.model.completed', 'granularity', 'args.config'], this.onInsertOrUpdate);\n      _lib.default.observeKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      _lib.default.unobserveKeys(this, ['args.model.id', 'args.model.completed', 'granularity', 'args.config'], this.onInsertOrUpdate);\n      _lib.default.unobserveKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onZoomChange);\n      $('#testTimelineSlider').data('ionRangeSlider')?.destroy();\n    }\n    get startInterval() {\n      const startedAt = this.args.model?.summary?.firstResultAt || this.args.model?.startedAt;\n      if (startedAt) {\n        return _lib.default.intervalFor(moment(startedAt).valueOf(), this.granularity);\n      }\n      return 0;\n    }\n    get timespan() {\n      const selectedResource = this.args.selectedResource;\n      let timespan = selectedResource && selectedResource.id > 0 ? selectedResource.summary?.timespan : this.args.model?.summary?.timespan;\n      if (!timespan && this.args.model?.startedAt && this.args.model?.finishedAt) {\n        timespan = _lib.default.intervalFor(moment(this.args.model.finishedAt).diff(moment(this.args.model.startedAt)), this.granularity);\n      }\n      return timespan;\n    }\n    get isZoomable() {\n      const timespan = this.timespan;\n      return !!timespan && timespan > _lib.default.intervalMs(this.granularity);\n    }\n    get granularity() {\n      const intervalMs = this.args.intervals?.[0]?.timespan;\n      return intervalMs ? _lib.default.granularityForTimespan(intervalMs) : this.args.model?.summary?.granularity;\n    }\n    get hasResults() {\n      return _loadTest.default.hasResults(this.args.model?.summary);\n    }\n    _applyZoomToSlider(slider) {\n      const zoomInfo = this.zoomInfo;\n      if (!zoomInfo || zoomInfo.isAll || !(zoomInfo.startTimestamp > 0) || !(zoomInfo.endTimestamp > 0)) {\n        this.lastSliderFrom = null;\n        this.lastSliderTo = null;\n        slider.update({\n          from: slider.options.min,\n          to: slider.options.max\n        });\n        return;\n      }\n      const min = slider.options.min;\n      const max = slider.options.max;\n      let from = this.lastSliderFrom;\n      let to = this.lastSliderTo;\n      if (from === null || to === null) {\n        const startInterval = this.startInterval;\n        from = zoomInfo.startTimestamp - startInterval;\n        to = zoomInfo.endTimestamp - startInterval;\n      }\n      slider.update({\n        from: Math.min(Math.max(from, min), max),\n        to: Math.min(Math.max(to, min), max)\n      });\n    }\n    doZoom() {\n      const slider = $('#testTimelineSlider').data('ionRangeSlider');\n      if (slider) {\n        this._applyZoomToSlider(slider);\n      }\n    }\n    onZoomChange() {\n      if (!this.isUpdatingZoom) {\n        (0, _runloop.once)(this, 'doZoom');\n      }\n    }\n    createSlider() {\n      const showRelativeTime = this.args.config?.settings?.showRelativeTime;\n      const timespan = this.timespan;\n      const granularity = this.granularity;\n      const intervalMs = _lib.default.intervalMs(granularity);\n      const _this = this;\n      const existing = $('#testTimelineSlider').data('ionRangeSlider');\n      if (existing) {\n        existing.destroy();\n      }\n      $('#testTimelineSlider').ionRangeSlider({\n        min: 0,\n        max: timespan,\n        step: intervalMs,\n        min_interval: intervalMs,\n        type: 'double',\n        prettify: function (time) {\n          let momentTime;\n          if (showRelativeTime) {\n            momentTime = moment(time);\n            momentTime.utc();\n          } else {\n            momentTime = moment(_this.startInterval + time);\n          }\n          return momentTime.format('HH:mm:ss');\n        },\n        grid: false,\n        skin: 'round',\n        // hide_min_max: true,\n\n        force_edges: true,\n        // force UI in the box\n        // hide_min_max: false,    // show/hide MIN and MAX labels\n        hide_from_to: false,\n        // show/hide FROM and TO labels\n        block: !this.isZoomable,\n        onFinish: function (data) {\n          const isAll = data.from === data.min && data.to === data.max;\n          const updated = isAll ? {\n            isAll: true,\n            startTimestamp: -1,\n            endTimestamp: -1\n          } : {\n            isAll: false,\n            startTimestamp: _this.startInterval + data.from,\n            endTimestamp: _this.startInterval + data.to\n          };\n          const unchanged = _this.zoomInfo.isAll === updated.isAll && _this.zoomInfo.startTimestamp === updated.startTimestamp && _this.zoomInfo.endTimestamp === updated.endTimestamp;\n          if (unchanged) {\n            return;\n          }\n          _this.isUpdatingZoom = true;\n          _this.lastSliderFrom = isAll ? null : data.from;\n          _this.lastSliderTo = isAll ? null : data.to;\n          _this.zoomInfo.update(updated);\n          (0, _runloop.next)(_this, () => {\n            if (_this.isDestroying || _this.isDestroyed) return;\n            _this.isUpdatingZoom = false;\n          });\n        }\n      });\n      if (existing) {\n        const newData = $('#testTimelineSlider').data('ionRangeSlider');\n        (0, _runloop.scheduleOnce)('afterRender', this, () => {\n          this._applyZoomToSlider(newData);\n        });\n      }\n    }\n    hideFilterBarAction() {\n      this.args.hideFilterBar();\n    }\n    onInsertOrUpdate() {\n      if (!this.isUpdatingZoom && this.args.model?.completed && this.args.model?.startedAt && this.args.model?.finishedAt) {\n        (0, _runloop.scheduleOnce)('afterRender', this, () => {\n          this.createSlider();\n          this.doZoom();\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"startInterval\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"startInterval\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"timespan\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"timespan\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isZoomable\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"isZoomable\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"granularity\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"granularity\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasResults\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"hasResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onZoomChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onZoomChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hideFilterBarAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hideFilterBarAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInsertOrUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsertOrUpdate\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultFilterBar);\n});","define(\"@testable/shared-ui/components/result-metrics\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if @disableDrag 'panel-no-drag' 'panel block-sub-container'}} \">\n    <div class=\"panel-heading {{if @disableDrag '' 'block-sub-container-target'}}\">\n      <strong>Metrics ({{or this.sortedMetrics.length 0}})</strong>\n    </div>\n    <div class=\"panel-body\">\n      {{#each this.sortedMetrics as |metric|}}\n        <strong><span class=\"label {{metric-label-class\n                metric.metricType}} metric-type\">{{metric.metricType}}</span> {{metric.title}}: </strong>\n        {{#if (eq metric.metricType 'Histogram')}}\n          {{metric.metricKey}} (+{{print-val metric.metricValue metric.units}})\n        {{else if (eq metric.metricType 'Metered')}}\n          {{metric.metricKey}} = {{print-val metric.metricValue metric.units}}\n        {{else}}\n          {{print-val metric.metricValue metric.units}}\n        {{/if}}\n        <br/>\n      {{else}}\n        No metrics captured.\n      {{/each}}\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,1],\\\"panel-no-drag\\\",\\\"panel block-sub-container\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"panel-heading \\\",[52,[30,1],\\\"\\\",\\\"block-sub-container-target\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Metrics (\\\"],[1,[28,[35,3],[[30,0,[\\\"sortedMetrics\\\",\\\"length\\\"]],0],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,0,[\\\"sortedMetrics\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,\\\"strong\\\"],[12],[10,1],[15,0,[29,[\\\"label \\\",[28,[37,7],[[30,2,[\\\"metricType\\\"]]],null],\\\" metric-type\\\"]]],[12],[1,[30,2,[\\\"metricType\\\"]]],[13],[1,\\\" \\\"],[1,[30,2,[\\\"title\\\"]]],[1,\\\": \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,2,[\\\"metricType\\\"]],\\\"Histogram\\\"],null],[[[1,\\\"        \\\"],[1,[30,2,[\\\"metricKey\\\"]]],[1,\\\" (+\\\"],[1,[28,[35,9],[[30,2,[\\\"metricValue\\\"]],[30,2,[\\\"units\\\"]]],null]],[1,\\\")\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,2,[\\\"metricType\\\"]],\\\"Metered\\\"],null],[[[1,\\\"        \\\"],[1,[30,2,[\\\"metricKey\\\"]]],[1,\\\" = \\\"],[1,[28,[35,9],[[30,2,[\\\"metricValue\\\"]],[30,2,[\\\"units\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[28,[35,9],[[30,2,[\\\"metricValue\\\"]],[30,2,[\\\"units\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]],[]]],[1,\\\"      \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[2]],[[[1,\\\"      No metrics captured.\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@disableDrag\\\",\\\"metric\\\"],[\\\"div\\\",\\\"if\\\",\\\"strong\\\",\\\"or\\\",\\\"each\\\",\\\"-track-array\\\",\\\"span\\\",\\\"metric-label-class\\\",\\\"eq\\\",\\\"print-val\\\",\\\"br\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/result-metrics.hbs\",\n    \"isStrictMode\": false\n  });\n  class ResultMetricsComponent extends _component2.default {\n    get sortedMetrics() {\n      const scriptType = this.args.scriptType;\n      const metrics = _.cloneDeep(this.args.metrics);\n      _.forEach(metrics, metric => {\n        const name = metric.name || metric.metricDef;\n        metric.title = _loadTest.default.getMetricTitle(metric.namespace, name, scriptType, true);\n        metric.units = metric.metricUnits || _loadTest.default.getUnits(metric.namespace, name, null, scriptType);\n      });\n      return _.sortBy(metrics, metric => {\n        return metric.title;\n      });\n    }\n  }\n  _exports.default = ResultMetricsComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultMetricsComponent);\n});","define(\"@testable/shared-ui/components/result-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"resultModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Request Details</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <SavedResultDetails @scriptType={{@scriptType}} @resultId={{@resultId}} @uuid={{@uuid}} />\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"resultModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Request Details\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],null,[[\\\"@scriptType\\\",\\\"@resultId\\\",\\\"@uuid\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@scriptType\\\",\\\"@resultId\\\",\\\"@uuid\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"saved-result-details\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/result-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResultModalComponent = _exports.default = (_class = class ResultModalComponent extends _component2.default {\n    didInsert() {\n      const _this = this;\n      $('#resultModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#resultModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultModalComponent);\n});","define(\"@testable/shared-ui/components/results-by-assertion-failure\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _component2, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span\n    {{did-insert this.onDidInsert}}\n    {{did-update this.onThreadChanged this.thread}}>\n  </span>\n  <div class=\"m-t-10\" id=\"userIterationsContents\">\n    <form id=\"resultsByUserForm\" class=\"d-flex flex-row align-items-center flex-wrap form-inline\" data-parsley-trigger=\"focusout\" data-parsley-focus=\"none\">\n      <div class=\"width-full\">\n        <div class=\"input-group\">\n          <div class=\"input-group-prepend\">\n            <span class=\"width-150 input-group-text\">\n              {{#if this.isMultiUser}}\n                {{@overallModel.script.scriptType}} Instance #\n              {{else}}\n                User #\n              {{/if}}\n              {{if (gt this.usersCount this.users.length)\n                             (concat ' (' this.users.length '/' (print-number this.usersCount) ')')}}\n            </span>\n          </div>\n          {{#if this.concurrentClientsLoaded}}\n            <Ui::PSelect @options={{this.users}} @selected={{this.globalConcurrentClientIndex}} @placeholder=\"Please select a user...\"\n                     @onChange={{this.loadThreadIds}} as |user|>\n              {{#if this.isMultiUser}}\n                {{@overallModel.script.scriptType}} Instance {{user}}\n              {{else}}\n                User {{user}}\n              {{/if}}\n            </Ui::PSelect>\n          {{else}}\n            Loading users...\n          {{/if}}\n        </div>\n      </div>\n      {{#if this.isMultiUser}}\n        <div class=\"width-full m-t-10\">\n          {{#if (is-number this.globalConcurrentClientIndex)}}\n            {{#if this.threadsLoaded}}\n              {{#if (gt this.threads.length 0)}}\n                <div class=\"input-group\">\n                  <div class=\"input-group-prepend\">\n                    <span\n                      class=\"width-150 input-group-text\">Thread{{if (gt this.threadsCount this.threads.length)\n                                                                        (concat ' (' this.threads.length '/' (print-number this.threadsCount) ')')}}</span>\n                  </div>\n                  <Ui::PSelect @options={{this.threads}} @selected={{this.thread}} @placeholder=\"Please select a thread...\"\n                           @onChange={{this.updateThread}} as |thread|>\n                    {{thread.threadId}}\n                  </Ui::PSelect>\n                </div>\n              {{else}}\n                No threads found for this {{@overallModel.script.scriptType}} instance.\n              {{/if}}\n            {{else}}\n              Loading threads for chosen {{@overallModel.script.scriptType}} instance...\n            {{/if}}\n          {{/if}}\n        </div>\n      {{/if}}\n      <div class=\"width-full m-t-10\">\n        {{#if (is-number this.globalConcurrentClientIndex)}}\n          {{#if (and this.threadsLoaded this.iterationsLoaded)}}\n            {{#if (gt this.iterations.length 0)}}\n              <div class=\"input-group\">\n                <div class=\"input-group-prepend\">\n                  <span\n                    class=\"width-150 input-group-text\">Iteration{{if (gt this.iterationCount this.iterations.length)\n                                                                         (concat ' (' this.iterations.length '/' (print-number this.iterationCount) ')')}}</span>\n                </div>\n                <Ui::PSelect @options={{this.iterations}} @selected={{this.selectedIteration}} @placeholder=\"Please select an iteration...\" @onChange={{this.updateSelectedIteration}} as |iteration|>\n                  {{#if (is-number iteration.iteration)}}\n                    {{#if this.isMultiUser}}{{iteration.threadId}}{{else}}\n                      User {{print-number iteration.user}}{{/if}} Iteration {{print-number\n                          iteration.iteration}} {{print-number iteration.totalTimeMs}}ms ({{iteration.id}})\n                  {{else}}\n                    {{iteration.id}}\n                  {{/if}}\n                </Ui::PSelect>\n              </div>\n            {{else}}\n              No test iterations found for this user.\n            {{/if}}\n          {{else if this.thread}}\n            Loading user iterations...\n          {{else if (and (not this.isMultiUser) (not this.threadsLoaded))}}\n            Loading threads...\n          {{/if}}\n        {{/if}}\n      </div>\n    </form>\n    <div id=\"userChoiceErrors\" class=\"m-t-10 m-b-10\"></div>\n    {{#if this.selectedIteration}}\n      <IterationResults @overallModel={{@overallModel}}\n                        @iteration={{this.selectedIteration.id}}\n                        @selectedResource={{@selectedResource}}\n                        @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                        @containerModalId=\"suiteRelatedResultsModal\"\n      />\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onDidInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onThreadChanged\\\"]],[30,0,[\\\"thread\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"m-t-10\\\"],[14,1,\\\"userIterationsContents\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"form\\\"],[14,1,\\\"resultsByUserForm\\\"],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[14,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[14,\\\"data-parsley-focus\\\",\\\"none\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"width-full\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"              \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance #\\\\n\\\"]],[]],[[[1,\\\"              User #\\\\n\\\"]],[]]],[1,\\\"            \\\"],[1,[52,[28,[37,6],[[30,0,[\\\"usersCount\\\"]],[30,0,[\\\"users\\\",\\\"length\\\"]]],null],[28,[37,7],[\\\" (\\\",[30,0,[\\\"users\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,8],[[30,0,[\\\"usersCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"concurrentClientsLoaded\\\"]],[[[1,\\\"          \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"users\\\"]],[30,0,[\\\"globalConcurrentClientIndex\\\"]],\\\"Please select a user...\\\",[30,0,[\\\"loadThreadIds\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"              \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              User \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          Loading users...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"width-full m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null],[[[41,[30,0,[\\\"threadsLoaded\\\"]],[[[41,[28,[37,6],[[30,0,[\\\"threads\\\",\\\"length\\\"]],0],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"Thread\\\"],[1,[52,[28,[37,6],[[30,0,[\\\"threadsCount\\\"]],[30,0,[\\\"threads\\\",\\\"length\\\"]]],null],[28,[37,7],[\\\" (\\\",[30,0,[\\\"threads\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,8],[[30,0,[\\\"threadsCount\\\"]]],null],\\\")\\\"],null]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"threads\\\"]],[30,0,[\\\"thread\\\"]],\\\"Please select a thread...\\\",[30,0,[\\\"updateThread\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"threadId\\\"]]],[1,\\\"\\\\n                \\\"]],[3]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              No threads found for this \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" instance.\\\\n\\\"]],[]]]],[]],[[[1,\\\"            Loading threads for chosen \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" instance...\\\\n\\\"]],[]]]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"width-full m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null],[[[41,[28,[37,11],[[30,0,[\\\"threadsLoaded\\\"]],[30,0,[\\\"iterationsLoaded\\\"]]],null],[[[41,[28,[37,6],[[30,0,[\\\"iterations\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"Iteration\\\"],[1,[52,[28,[37,6],[[30,0,[\\\"iterationCount\\\"]],[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null],[28,[37,7],[\\\" (\\\",[30,0,[\\\"iterations\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,8],[[30,0,[\\\"iterationCount\\\"]]],null],\\\")\\\"],null]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],\\\"Please select an iteration...\\\",[30,0,[\\\"updateSelectedIteration\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,4,[\\\"iteration\\\"]]],null],[[[1,\\\"                  \\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,[30,4,[\\\"threadId\\\"]]]],[]],[[[1,\\\"\\\\n                    User \\\"],[1,[28,[35,8],[[30,4,[\\\"user\\\"]]],null]]],[]]],[1,\\\" Iteration \\\"],[1,[28,[35,8],[[30,4,[\\\"iteration\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,8],[[30,4,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,4,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[1,[30,4,[\\\"id\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"]],[4]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            No test iterations found for this user.\\\\n\\\"]],[]]]],[]],[[[41,[30,0,[\\\"thread\\\"]],[[[1,\\\"          Loading user iterations...\\\\n\\\"]],[]],[[[41,[28,[37,11],[[28,[37,12],[[30,0,[\\\"isMultiUser\\\"]]],null],[28,[37,12],[[30,0,[\\\"threadsLoaded\\\"]]],null]],null],[[[1,\\\"          Loading threads...\\\\n        \\\"]],[]],null]],[]]]],[]]]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"userChoiceErrors\\\"],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedIteration\\\"]],[[[1,\\\"    \\\"],[8,[39,13],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\",\\\"@containerModalId\\\"],[[30,1],[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[30,5],[30,0,[\\\"showImageDetailsModalAction\\\"]],\\\"suiteRelatedResultsModal\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@overallModel\\\",\\\"user\\\",\\\"thread\\\",\\\"iteration\\\",\\\"@selectedResource\\\"],[\\\"span\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"div\\\",\\\"form\\\",\\\"if\\\",\\\"gt\\\",\\\"concat\\\",\\\"print-number\\\",\\\"ui/p-select\\\",\\\"is-number\\\",\\\"and\\\",\\\"not\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/results-by-assertion-failure.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResultsByAssertionFailure = _exports.default = (_class = class ResultsByAssertionFailure extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"iterationsLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"threadsLoaded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"concurrentClientsLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"globalConcurrentClientIndex\", _descriptor4, this);\n      _initializerDefineProperty(this, \"thread\", _descriptor5, this);\n      _initializerDefineProperty(this, \"threads\", _descriptor6, this);\n      _initializerDefineProperty(this, \"threadsCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor8, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor9, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor0, this);\n      _initializerDefineProperty(this, \"users\", _descriptor1, this);\n      _initializerDefineProperty(this, \"usersCount\", _descriptor10, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor11, this);\n      this.loadConcurrentClientOptions();\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel?.script?.scriptType);\n    }\n    onThreadChanged() {\n      if (this.thread) {\n        this.selectedIteration = null;\n        this.resultsLoaded = false;\n        this.iterationsLoaded = false;\n        this.iterationCount = 0;\n        this.iterations = [];\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/failed-iterations?limit=500';\n        const _this = this;\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path, {\n            threadId: this.thread.threadId\n          }),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (iterations, status, xhr) {\n          const iterationCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(iterationCount)) {\n            _this.iterationCount = Number(iterationCount);\n          } else {\n            _this.iterationCount = 0;\n          }\n          _this.iterations = iterations;\n          if (iterations && iterations.length === 1) {\n            _this.selectedIteration = iterations[0];\n          }\n          _this.iterationsLoaded = true;\n        }, function (jqxhr, status, errMsg) {\n          _this.iterations = [];\n          _this.iterationCount = 0;\n          _this.iterationsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      } else {\n        this.iterations = [];\n        this.iterationCount = 0;\n        this.iterationsLoaded = false;\n      }\n    }\n    loadThreadIds(user) {\n      this.globalConcurrentClientIndex = user;\n      const isMultiUser = this.isMultiUser;\n      if (_lib.default.isNumber(user)) {\n        this.threadsLoaded = false;\n        this.thread = null;\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/users/' + user + '/failed-threads?limit=500';\n        const _this = this;\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (threads, status, xhr) {\n          const threadsCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(threadsCount)) {\n            _this.threadsCount = Number(threadsCount);\n          }\n          _this.threads = _.sortBy(threads, ['threadId']);\n          if (!isMultiUser && threads.length > 0) {\n            _this.thread = threads[0];\n          } else {\n            _this.thread = null;\n          }\n          _this.threadsLoaded = true;\n        }, function (jqxhr, status, errMsg) {\n          _this.threads = [];\n          _this.threadsCount = 0;\n          _this.threadsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      }\n    }\n    loadConcurrentClientOptions() {\n      this.concurrentClientsLoaded = false;\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/failed-users?limit=500';\n      const _this = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (users, status, xhr) {\n        const usersCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(usersCount)) {\n          _this.usersCount = Number(usersCount);\n        }\n        _this.users = _.map(users, user => {\n          return '' + user;\n        });\n        _this.concurrentClientsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        _this.users = [];\n        _this.usersCount = 0;\n        _this.concurrentClientsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n    }\n    updateThread(thread) {\n      this.thread = thread;\n    }\n    updateSelectedIteration(iteration) {\n      this.selectedIteration = iteration;\n    }\n    onDidInsert() {\n      $('#resultsByUserForm').parsley();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"iterationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"threadsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"concurrentClientsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"globalConcurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"thread\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"threads\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"threadsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"users\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"usersCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onThreadChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onThreadChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadThreadIds\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadThreadIds\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateThread\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateThread\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDidInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDidInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultsByAssertionFailure);\n});","define(\"@testable/shared-ui/components/results-by-user\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"m-t-10\" id=\"userIterationsContents\" {{did-insert this.didInsert}} {{did-update this.onThreadChanged this.thread}}>\n    <form id=\"resultsByUserForm\" class=\"d-flex flex-row align-items-center flex-wrap form-inline\" data-parsley-trigger=\"focusout\" data-parsley-focus=\"none\">\n      <div class=\"width-full\">\n        <div class=\"input-group\">\n          <div class=\"input-group-prepend\">\n                      <span class=\"width-150 input-group-text\">\n                        {{#if this.isMultiUser}}\n                          {{@overallModel.script.scriptType}} Instance #\n                        {{else}}\n                          User #\n                        {{/if}}\n                      </span>\n          </div>\n          {{#if this.userManuallyInputted}}\n            <InputSelectAll @type=\"number\" class=\"form-control width-200\"\n                            placeholder={{concat \"User number \" this.userNumRangeText}}\n                            @value={{this.globalConcurrentClientIndex}}\n                            data-parsley-required=\"true\"\n                            data-parsley-min=\"0\"\n                            data-parsley-max={{math-op @overallModel.concurrentClients \"-\" 1}}\n                            data-parsley-required-message=\"User # must be specified\"\n                            data-parsley-min-message={{concat \"User # should be in the range \" this.userNumRangeText}}\n                            data-parsley-max-message={{concat \"User # should be in the range \" this.userNumRangeText}}\n                            data-parsley-errors-container=\"#userChoiceErrors\"\n                            @onChange={{this.updateUser}} />\n          {{else}}\n            <Ui::PSelect @options={{this.concurrentClientOptions}} @selected={{this.globalConcurrentClientIndex}}\n                     @placeholder=\"Please select a user...\" @onChange={{this.updateUser}} as |concurrentClient|>\n              {{#if this.isMultiUser}}\n                {{@overallModel.script.scriptType}} Instance {{concurrentClient}}\n              {{else}}\n                User {{concurrentClient}}\n              {{/if}}\n            </Ui::PSelect>\n          {{/if}}\n        </div>\n      </div>\n      {{#if this.isMultiUser}}\n        <div class=\"width-full m-t-10\">\n          {{#if this.userSet}}\n            {{#if this.threadsLoaded}}\n              {{#if (gt this.threads.length 0)}}\n                <div class=\"input-group\">\n                  <div class=\"input-group-prepend\">\n                    <span class=\"width-150 input-group-text\">Thread{{if (gt this.threadsCount this.threads.length)\n                                                                        (concat ' (' this.threads.length '/' (print-number this.threadsCount) ')')}}</span>\n                  </div>\n                  <Ui::PSelect @options={{this.threads}} @selected={{this.thread}} @placeholder=\"Please select a thread...\"\n                           @onChange={{fn (mut this.thread)}} as |thread|>\n                    {{thread.threadId}}\n                  </Ui::PSelect>\n                </div>\n              {{else}}\n                No threads found for this {{@overallModel.script.scriptType}} instance.\n              {{/if}}\n            {{else}}\n              Loading threads for chosen {{@overallModel.script.scriptType}} instance...\n            {{/if}}\n          {{/if}}\n        </div>\n      {{/if}}\n      <div class=\"width-full m-t-10\">\n        {{#if this.userSet}}\n          {{#if (and this.threadsLoaded this.iterationsLoaded)}}\n            {{#if (gt this.iterations.length 0)}}\n              <div class=\"input-group\">\n                <div class=\"input-group-prepend\">\n                  <span class=\"width-150 input-group-text\">Iteration{{if (gt this.iterationCount this.iterations.length)\n                                                                         (concat ' (' this.iterations.length '/' (print-number this.iterationCount) ')')}}</span>\n                </div>\n                <Ui::PSelect @options={{this.iterations}} @selected={{this.selectedIteration}} @placeholder=\"Please select an iteration...\"\n                         @onChange={{fn (mut this.selectedIteration)}} as |iteration|>\n                  {{#if (is-number iteration.iteration)}}\n                    {{#if this.isMultiUser}}{{iteration.threadId}}{{else}}\n                      User {{print-number iteration.user}}{{/if}} Iteration {{print-number\n                          iteration.iteration}} {{print-number iteration.totalTimeMs}}ms ({{iteration.id}})\n                  {{else}}\n                    {{iteration.id}}\n                  {{/if}}\n                </Ui::PSelect>\n              </div>\n            {{else}}\n              No test iterations found for this user.\n            {{/if}}\n          {{else if this.thread}}\n            Loading user iterations...\n          {{else if (and (not this.isMultiUser) (not this.threadsLoaded))}}\n            Loading threads...\n          {{/if}}\n        {{/if}}\n      </div>\n    </form>\n    <div id=\"userChoiceErrors\" class=\"m-t-10 m-b-10\"></div>\n    {{#if this.selectedIteration}}\n      <IterationResults @overallModel={{@overallModel}}\n                        @iteration={{this.selectedIteration.id}}\n                        @selectedResource={{@selectedResource}}\n                        @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"m-t-10\\\"],[24,1,\\\"userIterationsContents\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onThreadChanged\\\"]],[30,0,[\\\"thread\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"form\\\"],[14,1,\\\"resultsByUserForm\\\"],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[14,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[14,\\\"data-parsley-focus\\\",\\\"none\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"width-full\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"                        \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance #\\\\n\\\"]],[]],[[[1,\\\"                        User #\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"userManuallyInputted\\\"]],[[[1,\\\"          \\\"],[8,[39,6],[[24,0,\\\"form-control width-200\\\"],[16,\\\"placeholder\\\",[28,[37,7],[\\\"User number \\\",[30,0,[\\\"userNumRangeText\\\"]]],null]],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[16,\\\"data-parsley-max\\\",[28,[37,8],[[30,1,[\\\"concurrentClients\\\"]],\\\"-\\\",1],null]],[24,\\\"data-parsley-required-message\\\",\\\"User # must be specified\\\"],[16,\\\"data-parsley-min-message\\\",[28,[37,7],[\\\"User # should be in the range \\\",[30,0,[\\\"userNumRangeText\\\"]]],null]],[16,\\\"data-parsley-max-message\\\",[28,[37,7],[\\\"User # should be in the range \\\",[30,0,[\\\"userNumRangeText\\\"]]],null]],[24,\\\"data-parsley-errors-container\\\",\\\"#userChoiceErrors\\\"]],[[\\\"@type\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"number\\\",[30,0,[\\\"globalConcurrentClientIndex\\\"]],[30,0,[\\\"updateUser\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"concurrentClientOptions\\\"]],[30,0,[\\\"globalConcurrentClientIndex\\\"]],\\\"Please select a user...\\\",[30,0,[\\\"updateUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"              \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              User \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"width-full m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"userSet\\\"]],[[[41,[30,0,[\\\"threadsLoaded\\\"]],[[[41,[28,[37,10],[[30,0,[\\\"threads\\\",\\\"length\\\"]],0],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"Thread\\\"],[1,[52,[28,[37,10],[[30,0,[\\\"threadsCount\\\"]],[30,0,[\\\"threads\\\",\\\"length\\\"]]],null],[28,[37,7],[\\\" (\\\",[30,0,[\\\"threads\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,11],[[30,0,[\\\"threadsCount\\\"]]],null],\\\")\\\"],null]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"threads\\\"]],[30,0,[\\\"thread\\\"]],\\\"Please select a thread...\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"thread\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"threadId\\\"]]],[1,\\\"\\\\n                \\\"]],[3]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              No threads found for this \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" instance.\\\\n\\\"]],[]]]],[]],[[[1,\\\"            Loading threads for chosen \\\"],[1,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" instance...\\\\n\\\"]],[]]]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"width-full m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"userSet\\\"]],[[[41,[28,[37,14],[[30,0,[\\\"threadsLoaded\\\"]],[30,0,[\\\"iterationsLoaded\\\"]]],null],[[[41,[28,[37,10],[[30,0,[\\\"iterations\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"width-150 input-group-text\\\"],[12],[1,\\\"Iteration\\\"],[1,[52,[28,[37,10],[[30,0,[\\\"iterationCount\\\"]],[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null],[28,[37,7],[\\\" (\\\",[30,0,[\\\"iterations\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,11],[[30,0,[\\\"iterationCount\\\"]]],null],\\\")\\\"],null]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],\\\"Please select an iteration...\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"selectedIteration\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,4,[\\\"iteration\\\"]]],null],[[[1,\\\"                  \\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,[30,4,[\\\"threadId\\\"]]]],[]],[[[1,\\\"\\\\n                    User \\\"],[1,[28,[35,11],[[30,4,[\\\"user\\\"]]],null]]],[]]],[1,\\\" Iteration \\\"],[1,[28,[35,11],[[30,4,[\\\"iteration\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,11],[[30,4,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,4,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[1,[30,4,[\\\"id\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"]],[4]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            No test iterations found for this user.\\\\n\\\"]],[]]]],[]],[[[41,[30,0,[\\\"thread\\\"]],[[[1,\\\"          Loading user iterations...\\\\n\\\"]],[]],[[[41,[28,[37,14],[[28,[37,16],[[30,0,[\\\"isMultiUser\\\"]]],null],[28,[37,16],[[30,0,[\\\"threadsLoaded\\\"]]],null]],null],[[[1,\\\"          Loading threads...\\\\n        \\\"]],[]],null]],[]]]],[]]]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"userChoiceErrors\\\"],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedIteration\\\"]],[[[1,\\\"    \\\"],[8,[39,17],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,1],[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[30,5],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@overallModel\\\",\\\"concurrentClient\\\",\\\"thread\\\",\\\"iteration\\\",\\\"@selectedResource\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"form\\\",\\\"span\\\",\\\"if\\\",\\\"input-select-all\\\",\\\"concat\\\",\\\"math-op\\\",\\\"ui/p-select\\\",\\\"gt\\\",\\\"print-number\\\",\\\"fn\\\",\\\"mut\\\",\\\"and\\\",\\\"is-number\\\",\\\"not\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/results-by-user.hbs\",\n    \"isStrictMode\": false\n  });\n  let ResultsByUser = _exports.default = (_class = class ResultsByUser extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"iterationsLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"threadsLoaded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"globalConcurrentClientIndex\", _descriptor3, this);\n      _initializerDefineProperty(this, \"userSet\", _descriptor4, this);\n      _initializerDefineProperty(this, \"threads\", _descriptor5, this);\n      _initializerDefineProperty(this, \"threadsCount\", _descriptor6, this);\n      _initializerDefineProperty(this, \"thread\", _descriptor7, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor8, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor9, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor0, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor1, this);\n      _defineProperty(this, \"_pendingLoadThreadIds\", null);\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.scriptType);\n    }\n    get userManuallyInputted() {\n      return !this.isMultiUser && this.args.concurrentClients > _loadTest.default.MaxUsersDropdown;\n    }\n    get concurrentClientOptions() {\n      const answer = [];\n      const cnt = this.args.concurrentClients;\n      if (cnt <= _loadTest.default.MaxUsersDropdown) {\n        for (let i = 0; i < cnt; i++) {\n          answer.push('' + i);\n        }\n      }\n      return answer;\n    }\n    get userNumRangeText() {\n      return '[0,' + (Number(this.args.concurrentClients) - 1) + ']';\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n    }\n    updateUser(value) {\n      this.globalConcurrentClientIndex = value;\n      this.userSet = _lib.default.isNumber(value);\n      this.loadThreadIds();\n    }\n    didInsert() {\n      $('#resultsByUserForm').parsley();\n    }\n    onThreadChanged() {\n      const thread = this.thread;\n      if (thread) {\n        this.selectedIteration = null;\n        this.resultsLoaded = false;\n        this.iterationsLoaded = false;\n        this.iterationCount = 0;\n        this.iterations = [];\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/threads/' + encodeURIComponent(thread.threadId) + '/iterations?limit=500';\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path),\n          contentType: \"application/json; charset=utf-8\"\n        }).then((iterations, status, xhr) => {\n          const iterationCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(iterationCount)) {\n            this.iterationCount = Number(iterationCount);\n          } else {\n            this.iterationCount = 0;\n          }\n          this.iterations = iterations;\n          if (iterations.length === 1) {\n            this.selectedIteration = iterations[0];\n          }\n          this.iterationsLoaded = true;\n        }, (jqxhr, status, errMsg) => {\n          this.iterations = [];\n          this.iterationCount = 0;\n          this.iterationsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      } else {\n        this.iterations = [];\n        this.iterationCount = 0;\n        this.iterationsLoaded = false;\n        this.selectedIteration = null;\n      }\n    }\n    loadThreadIds() {\n      const user = this.globalConcurrentClientIndex;\n      if (_lib.default.isNumber(user)) {\n        if (this.userManuallyInputted) {\n          this.threadsLoaded = false;\n          this.thread = null;\n          clearTimeout(this._pendingLoadThreadIds);\n          this._pendingLoadThreadIds = setTimeout(() => {\n            this.doLoadThreadIds();\n          }, 1000);\n        } else {\n          this.doLoadThreadIds();\n        }\n      } else {\n        this.thread = null;\n        this.selectedIteration = null;\n      }\n    }\n    doLoadThreadIds() {\n      const user = this.globalConcurrentClientIndex;\n      const isMultiUser = this.isMultiUser;\n      if (_lib.default.isNumber(user)) {\n        this.threadsLoaded = false;\n        this.thread = null;\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/users/' + user + '/threads?limit=500';\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path),\n          contentType: \"application/json; charset=utf-8\"\n        }).then((threads, status, xhr) => {\n          const threadsCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(threadsCount)) {\n            this.threadsCount = Number(threadsCount);\n          }\n          this.threads = _.sortBy(threads, ['threadId']);\n          if (!isMultiUser && threads.length > 0) {\n            this.thread = threads[0];\n          } else {\n            this.thread = null;\n          }\n          this.threadsLoaded = true;\n        }, (jqxhr, status, errMsg) => {\n          this.threads = [];\n          this.threadsCount = 0;\n          this.threadsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"iterationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"threadsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"globalConcurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"userSet\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"threads\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"threadsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"thread\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"concurrentClientOptions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"concurrentClientOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onThreadChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onThreadChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ResultsByUser);\n});","define(\"@testable/shared-ui/components/results-timeline-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\"], function (_exports, _observers, _object, _tracking, _dataGrid, _formatters, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const SystemNs = 'Testable';\n  function getResource(result) {\n    if (_.isString(result.resource)) {\n      return result.resource;\n    }\n    if (_.isObject(result.resource)) {\n      return result.resource.resource;\n    }\n    return null;\n  }\n  function getRowId(result) {\n    const resource = getResource(result);\n    return _.isEmpty(result) || _.isEmpty(resource) && _.isEmpty(result.url) ? '__overall__' : result.connectionId;\n  }\n  function getDetailsHtml(connection) {\n    let answer = '';\n    if (connection.timestamp) {\n      answer += '<p><strong>Started At: </strong>' + connection.timestamp.format('YYYY-MM-DD HH:mm:ss.SSS') + '</p>';\n    }\n    if (_.isNumber(connection.openedLatency)) {\n      answer += '<p><strong>Opened After: </strong>' + connection.openedLatency + 'ms</p>';\n    }\n    if (_.isNumber(connection.firstReceivedLatency)) {\n      answer += '<p><strong>Waited For Response: </strong>' + connection.firstReceivedLatency + 'ms</p>';\n    }\n    if (_.isNumber(connection.closedLatency)) {\n      answer += '<p><strong>Closed After: </strong>' + connection.closedLatency + 'ms</p>';\n    }\n    if (answer.length === 0) {\n      answer += '<p>No details availabe</p>';\n    }\n    return answer;\n  }\n  const ResourcesColumn = {\n    title: 'Resource',\n    data: 'resource',\n    width: '200px',\n    render: (data, type, full) => {\n      if (type === 'display') {\n        let resource = !full.phase || full.phase === 'Main' ? data : '<span class=\"label label-primary m-r-10\">' + full.phase + '</span>' + data;\n        return '<span class=\"truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"' + data + '\">' + (resource.length <= 50 ? resource : resource.slice(0, 47) + '...') + '</span>';\n      } else {\n        return data === 'Overall Results' ? '____overall' : data;\n      }\n    }\n  };\n  const ResourcesPrintColumn = {\n    title: 'Resource',\n    data: 'url',\n    width: '200px'\n  };\n  let ResultsTimelineGrid = _exports.default = (_class = class ResultsTimelineGrid extends _dataGrid.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"connections\", _descriptor, this);\n      _initializerDefineProperty(this, \"results\", _descriptor2, this);\n      _defineProperty(this, \"firstTimestamp\", void 0);\n      _defineProperty(this, \"lastTimestamp\", void 0);\n      this.firstTimestamp = this.args.firstTimestamp ? moment(this.args.firstTimestamp) : null;\n      this.lastTimestamp = this.args.lastTimestamp ? moment(this.args.lastTimestamp) : null;\n      (0, _observers.addObserver)(this, 'args.results', this.onNewResults);\n      (0, _observers.addObserver)(this, 'args.resultsFilter', this.onNewResults);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.results', this.onNewResults);\n      (0, _observers.removeObserver)(this, 'args.resultsFilter', this.onNewResults);\n    }\n    onNewResults() {\n      this.refreshTable();\n    }\n    get showAssertions() {\n      return this.args.scriptType === 'JMeter';\n    }\n    getColumns() {\n      let _this = this;\n      const showAssertions = this.showAssertions;\n      const dblClickToSelect = this.args.dblClickToSelect;\n      const isPrint = this.args.isPrint;\n      const columns = [];\n      if (!isPrint && dblClickToSelect) {\n        columns.push({\n          data: 'id',\n          width: '10px',\n          sortable: false,\n          render: data => {\n            return '<a data-id=\"' + data + '\"><i class=\"fa fa-search\"></i></a>';\n          }\n        });\n      }\n      columns.push(isPrint ? ResourcesPrintColumn : ResourcesColumn);\n      if (!this.args.hideTraceColumn) {\n        columns.push({\n          title: 'Trace',\n          data: 'hasTrace',\n          width: '40px',\n          render: (data, type) => {\n            return type === 'display' ? data ? '<i class=\"fa fa-check-circle\"></i>' : '' : data;\n          }\n        });\n      }\n      columns.push({\n        title: 'Content Type',\n        data: 'contentType',\n        width: '60px',\n        render: (data, type) => {\n          const contentType = data || '-';\n          return type === 'display' ? '<span class=\"truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"' + data + '\">' + contentType + '</span>' : contentType;\n        }\n      }, {\n        title: 'Size',\n        data: 'size',\n        width: '40px',\n        render: (data, type) => {\n          return type === 'display' ? data > 0 ? _formatters.default.bytes(data) : '-' : data;\n        }\n      }, {\n        title: 'Time',\n        data: 'time',\n        width: '40px',\n        render: (data, type) => {\n          return type === 'display' ? _formatters.default.milliseconds(data) || '-' : data;\n        }\n      }, {\n        title: 'Status',\n        data: 'status',\n        width: '40px'\n      }, {\n        title: 'P/F',\n        data: 'outcome',\n        width: '40px',\n        render: (data, type) => {\n          if (type === 'display') {\n            if (_.isBoolean(data)) {\n              return '<i class=\"fa ' + (data ? 'fa-check-circle' : 'fa-times-circle') + '\"></i>';\n            }\n            return '';\n          } else {\n            return data;\n          }\n        }\n      });\n      if (showAssertions) {\n        columns.push({\n          title: 'Asrtns',\n          data: 'assertions',\n          width: '60px'\n        });\n      }\n      if (!this.args.isPrint) {\n        columns.push({\n          title: 'Timeline',\n          data: 'opened',\n          width: '150px',\n          render: (data, type, full) => {\n            if (type === 'display') {\n              return full.overall ? '' : _formatters.default.timeline(_this.firstTimestamp, _this.lastTimestamp, full, getDetailsHtml(full), 'Request Timing');\n            } else {\n              return data.valueOf();\n            }\n          }\n        });\n      }\n      return columns;\n    }\n    getInitialOrder() {\n      if (this.args.isPrint) {\n        return [];\n      }\n      const sortByTime = this.args.sortBy === 'time';\n      let index = sortByTime ? 4 : 7;\n      if (this.args.hideTraceColumn) {\n        index--;\n      }\n      if (!sortByTime && this.showAssertions) {\n        index++;\n      }\n      if (!this.args.isPrint && this.args.dblClickToSelect) {\n        index++;\n      }\n      const direction = sortByTime ? 'desc' : 'asc';\n      return [[index, direction]];\n    }\n    createDataSource() {\n      let connections = {};\n      this.connections = connections;\n      this.results = this.args.results ?? [];\n      let errorsOnly = this.args.resultsFilter === 'errors';\n      _.forEach(this.results, result => {\n        if (!errorsOnly || !result.success) {\n          this.processResult(result);\n        }\n      });\n      return _.values(connections);\n    }\n    updateDataSource(updates) {\n      let _this = this;\n      let table = $('#' + this.args.id).DataTable();\n      let connections = this.connections;\n      _.forEach(updates, update => {\n        if (update && update.action) {\n          let resource = getResource(update.result);\n          if (_this.args.hideOverallResult && !resource) {\n            return;\n          }\n          switch (update.action) {\n            case 'Insert':\n            case 'Update':\n              {\n                let rowId = getRowId(update.result);\n                _this.processResult(update.result, table);\n                if (connections[rowId]) {\n                  let row = table.row('#' + rowId);\n                  if (row.length > 0) {\n                    // Row exists, update it\n                    row.data(connections[rowId]).invalidate();\n                  } else if (!this.args.maxResults || this.results.length < this.args.maxResults) {\n                    // Row does not exist, add it\n                    table.row.add(connections[rowId]);\n                    this.results.push(update.result);\n                  }\n                }\n                break;\n              }\n          }\n        }\n      });\n      table.draw(false);\n    }\n    processResult(result, table) {\n      if (_.isUndefined(result)) {\n        return;\n      }\n      let resource = getResource(result);\n      if (this.args.hideOverallResult && !resource && !result.url) {\n        return;\n      }\n      let connections = this.connections;\n      let rowId = getRowId(result);\n      let connection = connections[rowId];\n      let isNew = _.isEmpty(connection);\n      let timestamp = moment(result.timestamp);\n      if (isNew) {\n        connection = {\n          phase: result.phase,\n          id: rowId,\n          resource: resource && resource.length > 0 ? _lib.default.htmlEncode(resource) : result.url ? '' : 'Overall Results',\n          url: result.url,\n          connectionId: result.connectionId,\n          timestamp: timestamp,\n          opened: timestamp,\n          closed: null,\n          outcome: null,\n          size: 0,\n          time: null,\n          status: '-',\n          contentType: '-',\n          overall: _.isEmpty(resource) && _.isEmpty(result.url),\n          result: _.cloneDeep(result),\n          hasTrace: result.hasTrace,\n          assertions: '-'\n        };\n        connections[rowId] = connection;\n      } else {\n        _.forEach(result.metrics, metric => {\n          let existingMetric = _.find(connection.result.metrics, existingMetric => {\n            return (existingMetric.name || existingMetric.metricDef) === (metric.name || metric.metricDef) && existingMetric.metricKey === metric.metricKey;\n          });\n          switch (metric.metricType) {\n            case 'Metered':\n              if (existingMetric && metric.metricValue > existingMetric.metricValue) {\n                (0, _object.set)(existingMetric, 'metricValue', metric.metricValue);\n              } else if (!existingMetric) {\n                connection.result.metrics.push(metric);\n              }\n              break;\n            case 'Counter':\n            case 'Histogram':\n              if (existingMetric) {\n                (0, _object.set)(existingMetric, 'metricValue', existingMetric.metricValue + metric.metricValue);\n              } else {\n                connection.result.metrics.push(metric);\n              }\n              break;\n            default:\n              connection.result.metrics.push(metric);\n              break;\n          }\n        });\n        if (result.trace) {\n          (0, _object.set)(connection.result, 'trace', result.trace);\n        }\n      }\n      let openMetric = this.findMetric('connectionOpenMs', connection.result.metrics);\n      let firstReceivedMetric = this.findMetric('firstReceivedMs', connection.result.metrics);\n      let closeMetric = this.findMetric('connectionCloseMs', connection.result.metrics) || firstReceivedMetric;\n      let bandwidthMetric = this.findMetric('bandwidth', connection.result.metrics);\n      if (openMetric) {\n        connection.openedLatency = openMetric.metricValue;\n        connection.opened = moment(connection.timestamp.valueOf() + openMetric.metricValue);\n      }\n      if (firstReceivedMetric) {\n        connection.firstReceivedLatency = firstReceivedMetric.metricValue;\n        connection.time = firstReceivedMetric.metricValue;\n      }\n      if (closeMetric) {\n        connection.closedLatency = closeMetric.metricValue;\n        connection.closed = moment(timestamp.valueOf() + closeMetric.metricValue);\n        if (!connection.time) {\n          connection.time = closeMetric.metricValue;\n        }\n      }\n      if (bandwidthMetric) {\n        connection.size += bandwidthMetric.metricValue;\n      }\n      if (result.trace && result.trace.status) {\n        connection.status = result.trace.status;\n      } else {\n        let responseCodeMetric = this.findMetric('responseCode', connection.result.metrics);\n        if (responseCodeMetric && responseCodeMetric.metricKey) {\n          connection.status = responseCodeMetric.metricKey;\n        }\n      }\n      let httpContentTypeMetric = this.findMetric('httpContentType', connection.result.metrics);\n      if (httpContentTypeMetric) {\n        connection.contentType = httpContentTypeMetric.metricKey;\n      }\n      let httpMethodMetric = this.findMetric('httpMethod', connection.result.metrics);\n      if (httpMethodMetric) {\n        connection.method = httpMethodMetric.metricKey;\n      }\n      let outcome = this.findMetric('outcome', connection.result.metrics);\n      if (outcome) {\n        connection.outcome = outcome.metricKey === 'success';\n      }\n      let passed = this.findMetric('assertions', connection.result.metrics, 'passed');\n      let passedCount = passed ? passed.metricValue || 0 : 0;\n      let failed = this.findMetric('assertions', connection.result.metrics, 'failed');\n      let failedCount = failed ? failed.metricValue || 0 : 0;\n      if (passedCount > 0 || failedCount > 0) {\n        connection.assertions = passedCount + ' / ' + (passedCount + failedCount);\n      }\n      let firstTimestamp = this.firstTimestamp;\n      let lastTimestamp = this.lastTimestamp;\n      let shouldInvalidate = false;\n      if (!connection.overall && !_.isEmpty(connection.closed) && (!lastTimestamp || connection.closed.isAfter(lastTimestamp))) {\n        this.lastTimestamp = connection.closed;\n        shouldInvalidate = true;\n      }\n      if (!connection.overall && !_.isEmpty(connection.opened) && (!firstTimestamp || connection.opened.isBefore(firstTimestamp))) {\n        this.firstTimestamp = connection.opened;\n        shouldInvalidate = true;\n      }\n      if (table && shouldInvalidate) {\n        table.rows().invalidate();\n      }\n    }\n    findMetric(name, metrics, key) {\n      const isJMeter = this.showAssertions;\n      let answer;\n      if (isJMeter && name) {\n        answer = this.searchMetrics('jmeterTxn' + _.upperFirst(name), metrics, key);\n      }\n      if (!answer) {\n        answer = this.searchMetrics(name, metrics, key);\n      }\n      return answer;\n    }\n    searchMetrics(name, metrics, key) {\n      return _.find(metrics, metric => {\n        return metric.namespace === SystemNs && (metric.name || metric.metricDef) === name && (_.isUndefined(key) || key === metric.metricKey);\n      });\n    }\n    initTable(table) {\n      const _this = this;\n      if (this.args.dblClickToSelect && !this.args.isPrint) {\n        $(\"#\" + this.args.id).on(\"dblclick\", \"tr\", function () {\n          _this.args.resultSelected($('#' + _this.args.id).DataTable().row('#' + $(this).attr('id')).data().result);\n        });\n        $(\"#\" + this.args.id).on(\"click\", \"a\", function () {\n          _this.args.resultSelected($('#' + _this.args.id).DataTable().row('#' + $(this).attr('data-id')).data().result);\n        });\n      } else {\n        table.on('select', function (e, dt, type, indexes) {\n          _this.args.resultSelected($('#' + _this.args.id).DataTable().row(indexes[0]).data().result);\n        }).on('deselect', function () {\n          _this.args.resultSelected(null);\n        });\n      }\n    }\n    addTableOptions(options) {\n      if (options.paging) {\n        options.scrollY = '300px';\n        if (!this.args.dblClickToSelect) {\n          options.select = {\n            style: 'single'\n          };\n        }\n        options.language = {\n          emptyTable: \"No results yet!\"\n        };\n      }\n    }\n    clearTable() {\n      this.connections = {};\n      this.results = [];\n      this.refreshTable();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"connections\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"results\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/run-in-region-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"runInRegionModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-medium-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Smoke Test</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          {{#if (gt @filteredRegions.length 0)}}\n            <form {{on \"submit\" this.runInRegion}} id=\"runInRegionForm\" data-parsley-trigger=\"focusout\"\n                                                   data-parsley-focus=\"none\">\n              <div class=\"form-group m-r-5\">\n                <label>Region</label>\n                <div class=\"input-group\">\n                  <Ui::PSelect @options={{this.groupedRegions}} @selected={{this.region}} @searchEnabled={{true}}\n                               @searchField=\"description\"\n                               @placeholder=\"Please select a region...\" class=\"p-control\"\n                               @matchTriggerWidth={{true}}\n                               @onChange={{fn (mut this.region)}} as |r|>\n                    <span class=\"{{r.textClass}}\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                          title=\"{{r.message}}\">\n                                        {{#if r.description}}\n                                          {{r.description}}\n                                        {{else}}\n                                          {{r.name}}\n                                        {{/if}}\n                      ({{r.agents}} test runners)\n                    </span>\n                  </Ui::PSelect>\n                  <Input class=\"hidden\" disabled={{true}} @value={{this.region}} data-parsley-required=\"true\"\n                         data-parsley-required-message=\"Please select a region.\"/>\n                </div>\n              </div>\n              {{#if (gt this.region.windowsAgents 0)}}\n                <div class=\"form-group m-r-5\">\n                  <label>Platform</label>\n                  <div>\n                    <BsButtonGroup @value={{this.platform}} @type=\"radio\" @onChange={{fn (mut this.platform)}} as\n                                   |bg|>\n                      <bg.button @type=\"success\" @value=\"\" @size=\"sm\">\n                        Any\n                        <Ui::InfoIcon @content=\"Runs on any available test runner regardless of OS\"/>\n                      </bg.button>\n                      <bg.button @type=\"success\" @value=\"linux\" @size=\"sm\">\n                        Linux ({{this.region.linuxAgents}})\n                        <Ui::InfoIcon\n                                @content=\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\"/>\n                      </bg.button>\n                      <bg.button @type=\"success\" @value=\"win32\" @size=\"sm\">\n                        Windows ({{this.region.windowsAgents}})\n                        <Ui::InfoIcon\n                                @content=\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\"/>\n                      </bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </div>\n              {{/if}}\n              <div class=\"form-group\">\n                <button type=\"submit\" class=\"btn btn-sm btn-primary\">Start Smoke Test</button>\n              </div>\n            </form>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"runInRegionModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-medium-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Smoke Test\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,1,[\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[11,\\\"form\\\"],[24,1,\\\"runInRegionForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[24,\\\"data-parsley-focus\\\",\\\"none\\\"],[4,[38,7],[\\\"submit\\\",[30,0,[\\\"runInRegion\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group m-r-5\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"p-control\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@placeholder\\\",\\\"@matchTriggerWidth\\\",\\\"@onChange\\\"],[[30,0,[\\\"groupedRegions\\\"]],[30,0,[\\\"region\\\"]],true,\\\"description\\\",\\\"Please select a region...\\\",true,[28,[37,10],[[28,[37,11],[[30,0,[\\\"region\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[15,0,[29,[[30,2,[\\\"textClass\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[15,\\\"title\\\",[29,[[30,2,[\\\"message\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"description\\\"]],[[[1,\\\"                                        \\\"],[1,[30,2,[\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                                        \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    (\\\"],[1,[30,2,[\\\"agents\\\"]]],[1,\\\" test runners)\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"]],[2]]]]],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a region.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"region\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,0,[\\\"region\\\",\\\"windowsAgents\\\"]],0],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group m-r-5\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Platform\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,14],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"platform\\\"]],\\\"radio\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"platform\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Any\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Runs on any available test runner regardless of OS\\\"]],null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"linux\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Linux (\\\"],[1,[30,0,[\\\"region\\\",\\\"linuxAgents\\\"]]],[1,\\\")\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\\\"]],null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"win32\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Windows (\\\"],[1,[30,0,[\\\"region\\\",\\\"windowsAgents\\\"]]],[1,\\\")\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\\\"]],null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[3]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Start Smoke Test\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@filteredRegions\\\",\\\"r\\\",\\\"bg\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"gt\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"span\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"ui/info-icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/run-in-region-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let RunInRegionModalComponent = _exports.default = (_class = class RunInRegionModalComponent extends _component2.default {\n    get groupedRegions() {\n      const grouped = _.groupBy(this.args.filteredRegions, region => {\n        return region.org ? 'Self Hosted: ' + region.org.name : 'Public Shared Grid';\n      });\n      return _.map(grouped, (regions, org) => {\n        return {\n          groupName: org,\n          options: regions\n        };\n      });\n    }\n    runInRegion(e) {\n      e.preventDefault();\n      let regionId = this.region.id;\n      let platform = this.args.platform;\n      $('#runInRegionModal').modal('hide');\n      if (typeof this.args.runInRegion === 'function') {\n        this.args.runInRegion(regionId, platform);\n      }\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"region\", _descriptor, this);\n      const defaultRegionId = this.args.defaultRegion;\n      this.region = _.find(this.args.filteredRegions, region => region.id === defaultRegionId);\n    }\n    didInsert() {\n      let _this = this;\n      $('#runInRegionModal').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#runInRegionModal').on('shown.bs.modal', function () {\n        $('#runInRegion').focus();\n        $('#runInRegionForm').parsley({});\n      });\n      $('#runInRegionModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"runInRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runInRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, RunInRegionModalComponent);\n});","define(\"@testable/shared-ui/components/saml-configuration\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _runloop, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"authToggle\" class=\"panel\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <Ui::Icon @icon=\"fa fa-plus\" role=\"button\" data-bs-toggle=\"collapse\" href=\"#samlAuthPanel\" aria-expanded=\"false\" aria-controls=\"samlAuthPanel\"\n              class=\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\" />\n        <strong>Authentication</strong>\n      </h4>\n    </div>\n    <div id=\"samlAuthPanel\" class=\"collapse\">\n      <div class=\"panel-body\">\n      <div class=\"form-group\">\n        <Ui::FeatureFlagContainer @feature=\"enterprise.sso\" as |feature|>\n          <label class=\"normal\">\n            <Input @type=\"checkbox\" @checked={{this.samlEnabled}} disabled={{not feature.allowed}} {{on \"change\" this.toggleSaml}} />\n            SAML 2.0 Authentication\n            <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Configure the method of authentication for this organization. Default is to use Testable password authentication.\"\n                          @placement=\"bottom\" />\n          </label>\n        </Ui::FeatureFlagContainer>\n      </div>\n  \n      {{#if this.samlEnabled}}\n    <div class=\"m-l-20\">\n      <div class=\"form-group\">\n        <label>Default Access Type\n          <Ui::InfoIcon\n                        @content=\"When a user logs in for the first time to Testable via SSO an account is automatically set up for them and access is granted to this organization.\n                        This determines the access type they are granted by default. Admin users have full access in the org.\n                        Regular users have full access but cannot add/remove users, change user access type, edit integrations or edit billing related information.\n                        Viewer users cannot create/edit/delete anything or see any of the Org Management pages.\"\n                        @placement=\"bottom\" /></label>\n        <Ui::XSelect @class=\"form-control form-select\" @value={{this.defaultAccessType}} @onChange={{this.updateAccessType}} as |xs| >\n          {{#each this.accessTypes as |accessType|}}\n            <xs.option @value={{accessType}}>\n              {{accessType}}\n            </xs.option>\n          {{/each}}\n        </Ui::XSelect>\n      </div>\n  \n      <div class=\"form-group\">\n        <label>\n          Attribute Mappings <Ui::InfoIcon @content=\"Indicate which IDP attribute maps to each required Testable attribute.\" />\n        </label>\n        <table class=\"table table-bordered widget-table widget-table-rounded\">\n          <thead>\n            <tr>\n              <th style={{html-safe \"width: 120px;\"}}><strong>{{if this.isMonitoring \"Monitoring\" \"Testable\"}} Attribute</strong></th>\n              <th><strong>IDP Attribute</strong></th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>Email <Ui::InfoIcon @content=\"Which attribute to use as the email associated with the user. Testable grabs it from the NameID if the specified field is not found.\" /></td>\n              <td>\n                <Input class=\"form-control\"\n                     placeholder='Attribute to use as the Testable email'\n                     @value={{this.mappings.email}}\n                     data-parsley-required=\"true\"\n                     data-parsley-required-message=\"Email is required.\"\n                     {{on \"input\" (fn this.updateMapping \"email\")}}\n                />\n              </td>\n            </tr>\n            <tr>\n              <td>Login</td>\n              <td>\n                <Input class=\"form-control\"\n                     placeholder='Attribute to use as the Testable login (optional)'\n                     @value={{this.mappings.login}}\n                     {{on \"input\" (fn this.updateMapping \"login\")}}\n                />\n              </td>\n            </tr>\n            <tr>\n              <td>First Name</td>\n              <td><Input class=\"form-control\"\n                     placeholder='Attribute to use as the Testable first name (optional)'\n                     @value={{this.mappings.firstName}}\n                     {{on \"input\" (fn this.updateMapping \"firstName\")}}\n                /></td>\n            </tr>\n            <tr>\n              <td>Last Name</td>\n              <td><Input class=\"form-control\"\n                     placeholder='Attribute to use as the Testable last name (optional)'\n                     @value={{this.mappings.lastName}}\n                     {{on \"input\" (fn this.updateMapping \"lastName\")}}\n                /></td>\n            </tr>\n            <tr>\n              <td>Full Name</td>\n              <td><Input class=\"form-control\"\n                     placeholder='Attribute to use as the Testable full name (optional)'\n                     @value={{this.mappings.fullName}}\n                     {{on \"input\" (fn this.updateMapping \"fullName\")}}\n                /></td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n  \n      <div class=\"form-group m-t-10\">\n        <label class=\"normal\">\n        <Input @type=\"checkbox\" @checked={{this.samlAutoGenKeystore}} {{on \"change\" this.toggleAutoGenKeystore}} />\n        Auto-generate keystore\n        <Ui::InfoIcon @isHtml={{true}}\n                  @content=\"If checked the keystore used to login with the SAML identity provider will be auto-generated. If unchecked, you must upload a keystore and specify a storepass and keypass.\"\n                  @placement=\"bottom\" />\n        </label>\n      </div>\n      {{#unless this.samlAutoGenKeystore}}\n        <div class=\"form-group\">\n          {{#if @samlConfig}}\n            <button class=\"btn btn-sm btn-secondary\" type=\"button\" onclick=\"document.getElementById('samlKeystore').click(); return false;\">Upload New Keystore\n            </button>\n            {{#if this.samlKeystore}}Keystore uploaded{{/if}}\n              <input type=\"file\" onchange={{this.uploadKeystore}} id=\"samlKeystore\" style={{html-safe \"display:none\"}} />\n            {{else}}\n              <button class=\"btn btn-sm btn-secondary\" type=\"button\" onclick=\"document.getElementById('samlKeystore').click(); return false;\">Upload Keystore\n              </button>\n              {{#if this.samlKeystore}}Keystore uploaded{{/if}}\n                <input onchange={{this.uploadKeystore}} id=\"samlKeystore\" type=\"file\"\n                  data-parsley-required=\"true\" data-parsley-required-message=\"Keystore file is required.\"\n                  style={{html-safe \"display:none\"}} />\n              {{/if}}\n        </div>\n        <div class=\"form-group\">\n          <label>Keystore storepass <Ui::InfoIcon @isHtml={{true}}\n                                              @content=\"The storepass option when generating a keystore using keytool.\"\n                                              @placement=\"bottom\" /></label>\n          <Ui::PasswordInput\n                 @value={{this.samlStorepass}}\n                 placeholder=\"Keystore storepass\"\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"Keystore storepass is required.\"\n                 {{on \"input\" (fn this.updateField \"samlStorepass\")}}\n          />\n        </div>\n        <div class=\"form-group\">\n          <label>\n            Keystore keypass <Ui::InfoIcon @isHtml={{true}}\n                                       @content=\"The keypass option when generating a keystore using keytool.\"\n                                       @placement=\"bottom\" />\n          </label>\n          <Ui::PasswordInput\n                 @value={{this.samlKeypass}}\n                 placeholder=\"Keystore keypass\"\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"Keystore keypass is required.\"\n                 {{on \"input\" (fn this.updateField \"samlKeypass\")}}\n          />\n        </div>\n      {{/unless}}\n      <div class=\"form-group\">\n        <label>\n          Provider <Ui::InfoIcon @isHtml={{true}}\n                             @content=\"Choose your identity provider (IDP).\"\n                             @placement=\"bottom\" />\n        </label>\n        <Ui::XSelect @class=\"form-control form-select\" @value={{this.samlProvider}} @onChange={{this.updateProvider}} as |xs| >\n          <xs.option @value='Okta'>Okta</xs.option>\n          <xs.option @value='OneLogin'>OneLogin</xs.option>\n          <xs.option @value='IBM'>IBM</xs.option>\n          <xs.option @value='Other'>Other</xs.option>\n        </Ui::XSelect>\n      </div>\n      {{#if (eq this.samlProvider 'Other')}}\n        <div class=\"form-group\">\n          <Input @type=\"text\"\n                 @value={{this.otherSamlProvider}}\n                 placeholder=\"SAML Provider\"\n                 class=\"form-control\"\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"SAML Provider is required.\"\n                 {{on \"input\" (fn this.updateField \"otherSamlProvider\")}}\n          />\n        </div>\n      {{/if}}\n      <div class=\"form-group\">\n        <label>\n          IDP Metadata <Ui::InfoIcon @isHtml={{true}}\n                                 @content=\"Identity provider metadata that includes the entity ID, SSO URL, and certificate\"\n                                 @placement=\"bottom\" />\n        </label>\n        <Textarea @value={{this.idpMetadata}}\n                  placeholder=\"IDP metadata (entity ID, SSO URL, and certificate)\"\n                  class=\"form-control\"\n                  rows=\"10\"\n                  data-parsley-required=\"true\"\n                  data-parsley-required-message=\"IDP Metadata is required.\"\n                  {{on \"input\" (fn this.updateField \"idpMetadata\")}}\n        />\n      </div>\n      <div class=\"form-group\">\n        <label>\n          Team Login <Ui::InfoIcon @isHtml={{true}}\n                               @content=\"Login to Testable via the specified subdomain (e.g. acme.testable.io)\"\n                               @placement=\"bottom\" />\n        </label>\n        <div class=\"input-group\">\n          <span class=\"input-group-addon\">https://</span>\n          <Input @type=\"text\"\n                 @value={{this.samlSubdomain}}\n                 placeholder=\"Login subdomain\"\n                 class=\"form-control\"\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"Login subdomain is required.\"\n                 data-parsley-minlength=\"3\"\n                 data-parsley-minlength-message=\"Login subdomain must be at least 3 characters.\"\n                 {{on \"input\" (fn this.updateField \"samlSubdomain\")}}\n          />\n          <span class=\"input-group-addon\">.testable.io</span>\n        </div>\n      </div>\n    </div>\n      {{/if}}\n    </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,1,\\\"authToggle\\\"],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[24,6,\\\"#samlAuthPanel\\\"],[24,\\\"aria-expanded\\\",\\\"false\\\"],[24,\\\"aria-controls\\\",\\\"samlAuthPanel\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Authentication\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"samlAuthPanel\\\"],[14,0,\\\"collapse\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@feature\\\"],[\\\"enterprise.sso\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],[[16,\\\"disabled\\\",[28,[37,7],[[30,1,[\\\"allowed\\\"]]],null]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"toggleSaml\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"samlEnabled\\\"]]]],null],[1,\\\"\\\\n          SAML 2.0 Authentication\\\\n          \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Configure the method of authentication for this organization. Default is to use Testable password authentication.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[1]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"samlEnabled\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-l-20\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Default Access Type\\\\n        \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"When a user logs in for the first time to Testable via SSO an account is automatically set up for them and access is granted to this organization.\\\\n                      This determines the access type they are granted by default. Admin users have full access in the org.\\\\n                      Regular users have full access but cannot add/remove users, change user access type, edit integrations or edit billing related information.\\\\n                      Viewer users cannot create/edit/delete anything or see any of the Org Management pages.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,0,[\\\"defaultAccessType\\\"]],[30,0,[\\\"updateAccessType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,0,[\\\"accessTypes\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,3]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"      \\\"]],[2]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Attribute Mappings \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Indicate which IDP attribute maps to each required Testable attribute.\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered widget-table widget-table-rounded\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[15,5,[28,[37,18],[\\\"width: 120px;\\\"],null]],[12],[10,\\\"strong\\\"],[12],[1,[52,[30,0,[\\\"isMonitoring\\\"]],\\\"Monitoring\\\",\\\"Testable\\\"]],[1,\\\" Attribute\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"IDP Attribute\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"Email \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Which attribute to use as the email associated with the user. Testable grabs it from the NameID if the specified field is not found.\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Attribute to use as the Testable email\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Email is required.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateMapping\\\"]],\\\"email\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mappings\\\",\\\"email\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"Login\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Attribute to use as the Testable login (optional)\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateMapping\\\"]],\\\"login\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mappings\\\",\\\"login\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"First Name\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Attribute to use as the Testable first name (optional)\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateMapping\\\"]],\\\"firstName\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mappings\\\",\\\"firstName\\\"]]]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"Last Name\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Attribute to use as the Testable last name (optional)\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateMapping\\\"]],\\\"lastName\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mappings\\\",\\\"lastName\\\"]]]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"Full Name\\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[8,[39,6],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Attribute to use as the Testable full name (optional)\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateMapping\\\"]],\\\"fullName\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"mappings\\\",\\\"fullName\\\"]]]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"toggleAutoGenKeystore\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"samlAutoGenKeystore\\\"]]]],null],[1,\\\"\\\\n      Auto-generate keystore\\\\n      \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"If checked the keystore used to login with the SAML identity provider will be auto-generated. If unchecked, you must upload a keystore and specify a storepass and keypass.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"samlAutoGenKeystore\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-secondary\\\"],[14,\\\"onclick\\\",\\\"document.getElementById('samlKeystore').click(); return false;\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Upload New Keystore\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[41,[30,0,[\\\"samlKeystore\\\"]],[[[1,\\\"Keystore uploaded\\\"]],[]],null],[1,\\\"\\\\n            \\\"],[10,\\\"input\\\"],[15,\\\"onchange\\\",[30,0,[\\\"uploadKeystore\\\"]]],[14,1,\\\"samlKeystore\\\"],[15,5,[28,[37,18],[\\\"display:none\\\"],null]],[14,4,\\\"file\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-secondary\\\"],[14,\\\"onclick\\\",\\\"document.getElementById('samlKeystore').click(); return false;\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Upload Keystore\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[41,[30,0,[\\\"samlKeystore\\\"]],[[[1,\\\"Keystore uploaded\\\"]],[]],null],[1,\\\"\\\\n              \\\"],[10,\\\"input\\\"],[15,\\\"onchange\\\",[30,0,[\\\"uploadKeystore\\\"]]],[14,1,\\\"samlKeystore\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Keystore file is required.\\\"],[15,5,[28,[37,18],[\\\"display:none\\\"],null]],[14,4,\\\"file\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Keystore storepass \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"The storepass option when generating a keystore using keytool.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[8,[39,24],[[24,\\\"placeholder\\\",\\\"Keystore storepass\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Keystore storepass is required.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateField\\\"]],\\\"samlStorepass\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"samlStorepass\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n          Keystore keypass \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"The keypass option when generating a keystore using keytool.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,24],[[24,\\\"placeholder\\\",\\\"Keystore keypass\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Keystore keypass is required.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateField\\\"]],\\\"samlKeypass\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"samlKeypass\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Provider \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Choose your identity provider (IDP).\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select\\\",[30,0,[\\\"samlProvider\\\"]],[30,0,[\\\"updateProvider\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Okta\\\"]],[[\\\"default\\\"],[[[[1,\\\"Okta\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"OneLogin\\\"]],[[\\\"default\\\"],[[[[1,\\\"OneLogin\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"IBM\\\"]],[[\\\"default\\\"],[[[[1,\\\"IBM\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"Other\\\"]],[[\\\"default\\\"],[[[[1,\\\"Other\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,25],[[30,0,[\\\"samlProvider\\\"]],\\\"Other\\\"],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],[[24,\\\"placeholder\\\",\\\"SAML Provider\\\"],[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"SAML Provider is required.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateField\\\"]],\\\"otherSamlProvider\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"otherSamlProvider\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        IDP Metadata \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Identity provider metadata that includes the entity ID, SSO URL, and certificate\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,26],[[24,\\\"placeholder\\\",\\\"IDP metadata (entity ID, SSO URL, and certificate)\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"10\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"IDP Metadata is required.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateField\\\"]],\\\"idpMetadata\\\"],null]],null]],[[\\\"@value\\\"],[[30,0,[\\\"idpMetadata\\\"]]]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        Team Login \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Login to Testable via the specified subdomain (e.g. acme.testable.io)\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\"https://\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,6],[[24,\\\"placeholder\\\",\\\"Login subdomain\\\"],[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Login subdomain is required.\\\"],[24,\\\"data-parsley-minlength\\\",\\\"3\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Login subdomain must be at least 3 characters.\\\"],[4,[38,8],[\\\"input\\\",[28,[37,21],[[30,0,[\\\"updateField\\\"]],\\\"samlSubdomain\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"samlSubdomain\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,\\\".testable.io\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"feature\\\",\\\"xs\\\",\\\"accessType\\\",\\\"@samlConfig\\\",\\\"xs\\\"],[\\\"div\\\",\\\"h4\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"ui/feature-flag-container\\\",\\\"label\\\",\\\"input\\\",\\\"not\\\",\\\"on\\\",\\\"ui/info-icon\\\",\\\"if\\\",\\\"ui/x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"html-safe\\\",\\\"tbody\\\",\\\"td\\\",\\\"fn\\\",\\\"unless\\\",\\\"button\\\",\\\"ui/password-input\\\",\\\"eq\\\",\\\"textarea\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/saml-configuration.hbs\",\n    \"isStrictMode\": false\n  });\n  const BuiltInProviders = ['Okta', 'OneLogin', 'IBM'];\n  let SamlConfigurationComponent = _exports.default = (_class = class SamlConfigurationComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"samlEnabled\", _descriptor, this);\n      _initializerDefineProperty(this, \"samlProvider\", _descriptor2, this);\n      _initializerDefineProperty(this, \"otherSamlProvider\", _descriptor3, this);\n      _initializerDefineProperty(this, \"idpMetadata\", _descriptor4, this);\n      _initializerDefineProperty(this, \"samlSubdomain\", _descriptor5, this);\n      _initializerDefineProperty(this, \"samlAutoGenKeystore\", _descriptor6, this);\n      _initializerDefineProperty(this, \"samlKeypass\", _descriptor7, this);\n      _initializerDefineProperty(this, \"samlStorepass\", _descriptor8, this);\n      _initializerDefineProperty(this, \"samlKeystore\", _descriptor9, this);\n      _initializerDefineProperty(this, \"defaultAccessType\", _descriptor0, this);\n      _initializerDefineProperty(this, \"mappings\", _descriptor1, this);\n      _defineProperty(this, \"accessTypes\", _lib.default.userRoles());\n      this.loadSamlConfig();\n      this.expandPanelIfEnabled();\n    }\n    expandPanelIfEnabled() {\n      if (this.samlEnabled) {\n        (0, _runloop.next)(() => {\n          $('#samlAuthPanel').collapse('show');\n        });\n      }\n    }\n    loadSamlConfig() {\n      const samlConfig = this.args.samlConfig;\n      this.samlEnabled = _.isObject(samlConfig);\n      if (this.samlEnabled) {\n        const isBuiltInProvider = BuiltInProviders.includes(samlConfig.provider);\n        this.samlProvider = isBuiltInProvider ? samlConfig.provider : 'Other';\n        if (!isBuiltInProvider) {\n          this.otherSamlProvider = samlConfig.provider;\n        }\n        this.idpMetadata = samlConfig.idpMetadata || '';\n        this.samlSubdomain = samlConfig.name || '';\n        this.samlAutoGenKeystore = !samlConfig.keypass && !samlConfig.storepass;\n        this.defaultAccessType = samlConfig.defaultAccessType || 'Regular';\n        if (!_.isEmpty(samlConfig.mappings)) {\n          this.mappings = samlConfig.mappings;\n        }\n        if (!this.samlAutoGenKeystore) {\n          this.samlKeypass = samlConfig.keypass || '';\n          this.samlStorepass = samlConfig.storepass || '';\n        }\n      }\n    }\n    onChangeConfig() {\n      if (!this.samlEnabled) {\n        this.args.onChange(null);\n        return;\n      }\n      const mappings = {\n        ...this.mappings\n      };\n      if (!mappings.login) delete mappings.login;\n      if (!mappings.firstName) delete mappings.firstName;\n      if (!mappings.lastName) delete mappings.lastName;\n      if (!mappings.fullName) delete mappings.fullName;\n      const config = {\n        provider: BuiltInProviders.includes(this.samlProvider) ? this.samlProvider : this.otherSamlProvider || 'Okta',\n        idpMetadata: this.idpMetadata,\n        name: this.samlSubdomain,\n        autogenKeystore: this.samlAutoGenKeystore,\n        defaultAccessType: this.defaultAccessType,\n        mappings\n      };\n      if (!config.autogenKeystore) {\n        config.keypass = this.samlKeypass;\n        config.storepass = this.samlStorepass;\n        config.keystore = this.samlKeystore;\n      }\n      this.args.onChange(config);\n    }\n    toggleSaml() {\n      this.samlEnabled = !this.samlEnabled;\n      this.onChangeConfig();\n    }\n    toggleAutoGenKeystore() {\n      this.samlAutoGenKeystore = !this.samlAutoGenKeystore;\n      this.onChangeConfig();\n    }\n    updateAccessType(value) {\n      this.defaultAccessType = value;\n      this.onChangeConfig();\n    }\n    updateMapping(field, event) {\n      this.mappings = {\n        ...this.mappings,\n        [field]: event.target.value\n      };\n      this.onChangeConfig();\n    }\n    updateField(field, event) {\n      this[field] = event.target.value;\n      this.onChangeConfig();\n    }\n    updateProvider(value) {\n      this.samlProvider = value;\n      this.onChangeConfig();\n    }\n    uploadKeystore(event) {\n      const input = event.target;\n      const reader = new FileReader();\n      reader.onload = () => {\n        this.samlKeystore = _lib.default.binaryToBase64(new Uint8Array(reader.result));\n        this.onChangeConfig();\n      };\n      reader.readAsArrayBuffer(input.files[0]);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"samlEnabled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"samlProvider\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Okta';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"otherSamlProvider\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"idpMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"samlSubdomain\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"samlAutoGenKeystore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"samlKeypass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"samlStorepass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"samlKeystore\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"defaultAccessType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Regular';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"mappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {\n        email: 'email',\n        login: 'email',\n        firstName: '',\n        lastName: '',\n        fullName: 'fullName'\n      };\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleSaml\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleSaml\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleAutoGenKeystore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleAutoGenKeystore\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAccessType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAccessType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMapping\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMapping\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateField\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateField\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateProvider\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateProvider\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadKeystore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadKeystore\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SamlConfigurationComponent);\n});","define(\"@testable/shared-ui/components/saved-result-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object/observers\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _observers, _tracking, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object/observers\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.resultLoaded}}\n    <div class=\"row\">\n      <div class=\"col-md-6 col-sm-6 col-xs-12\">\n        <div class=\"panel-no-drag\">\n          <div class=\"panel-heading\">\n            <strong>Summary</strong>\n          </div>\n          <div class=\"panel-body wrapped-text\">\n            <strong>Captured At:</strong> {{print-datetime this.result.timestamp}}<br/>\n            <strong>Region:</strong> {{this.result.region.description}} ({{this.result.region.name}})<br/>\n            {{#if this.result.resource}}\n              <strong>Resource:</strong> {{this.result.resource.resource}}<br/>\n            {{/if}}\n            {{#if this.result.url}}\n              <strong>URL:</strong> {{this.result.url}}<br/>\n            {{/if}}\n            {{#if this.result.trace}}\n              <strong>Status:</strong> {{this.result.trace.status}}<br/>\n              {{#if this.result.trace.statusMsg}}\n                <strong>Status Message:</strong> {{this.result.trace.statusMsg}}<br/>\n              {{/if}}\n              <strong>Size:</strong> {{print-bytes this.result.trace.length}}<br/>\n            {{/if}}\n            {{#if this.result.threadId}}\n              <strong>Concurrent User:</strong> {{this.result.threadId}}<br/>\n            {{/if}}\n            {{#if this.result.iterationId}}\n              <strong>Iteration:</strong> {{this.result.iterationId}}<br/>\n            {{/if}}\n            {{#if this.result.connectionId}}\n              <strong>Connection:</strong> {{this.result.connectionId}}<br/>\n            {{/if}}\n            <strong>Result ID:</strong> {{this.result.id}}<br/>\n          </div>\n        </div>\n      </div>\n      <div class=\"col-md-6 col-sm-6 col-xs-12\">\n        <ResultMetrics @metrics={{this.result.metrics}} @scriptType={{@scriptType}} @disableDrag={{true}} />\n      </div>\n    </div>\n    {{#if (gt this.result.suiteResults.length 0)}}\n      <div class=\"row\">\n        <div class=\"col-md-12 col-sm-12 col-xs-12\">\n          <SuiteResultsWidget @suiteResults={{this.result.suiteResults}}\n                              @hasDuration={{false}}\n                              @collapsible={{false}}\n                              @scriptType={{@scriptType}}\n                              @suffix=\"ResultModal\"\n                              @disableDrag={{true}}\n          />\n        </div>\n      </div>\n    {{/if}}\n    <div class=\"row\">\n      <div class=\"col-md-12 col-sm-12 col-xs-12\">\n        <TraceTimeline @traceId={{this.result.trace.id}}\n                       @uuid={{@uuid}}\n                       @packetCount={{this.result.trace.packetCount}}\n                       @traceAt={{this.result.trace.traceAt}}\n                       @disableDrag={{true}}\n        />\n      </div>\n    </div>\n  {{else}}\n    Loading result details...\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"resultLoaded\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-no-drag\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Summary\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body wrapped-text\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Captured At:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,3],[[30,0,[\\\"result\\\",\\\"timestamp\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Region:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"region\\\",\\\"description\\\"]]],[1,\\\" (\\\"],[1,[30,0,[\\\"result\\\",\\\"region\\\",\\\"name\\\"]]],[1,\\\")\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"result\\\",\\\"resource\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"resource\\\",\\\"resource\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"result\\\",\\\"url\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"URL:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"url\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"result\\\",\\\"trace\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"trace\\\",\\\"status\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"result\\\",\\\"trace\\\",\\\"statusMsg\\\"]],[[[1,\\\"              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status Message:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"trace\\\",\\\"statusMsg\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Size:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,5],[[30,0,[\\\"result\\\",\\\"trace\\\",\\\"length\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"result\\\",\\\"threadId\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Concurrent User:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"threadId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"result\\\",\\\"iterationId\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Iteration:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"iterationId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"result\\\",\\\"connectionId\\\"]],[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Connection:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"connectionId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Result ID:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"result\\\",\\\"id\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@metrics\\\",\\\"@scriptType\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"result\\\",\\\"metrics\\\"]],[30,1],true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,0,[\\\"result\\\",\\\"suiteResults\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],null,[[\\\"@suiteResults\\\",\\\"@hasDuration\\\",\\\"@collapsible\\\",\\\"@scriptType\\\",\\\"@suffix\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"result\\\",\\\"suiteResults\\\"]],false,false,[30,1],\\\"ResultModal\\\",true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@traceId\\\",\\\"@uuid\\\",\\\"@packetCount\\\",\\\"@traceAt\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"result\\\",\\\"trace\\\",\\\"id\\\"]],[30,2],[30,0,[\\\"result\\\",\\\"trace\\\",\\\"packetCount\\\"]],[30,0,[\\\"result\\\",\\\"trace\\\",\\\"traceAt\\\"]],true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  Loading result details...\\\\n\\\"]],[]]]],[\\\"@scriptType\\\",\\\"@uuid\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"print-datetime\\\",\\\"br\\\",\\\"print-bytes\\\",\\\"result-metrics\\\",\\\"gt\\\",\\\"suite-results-widget\\\",\\\"trace-timeline\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/saved-result-details.hbs\",\n    \"isStrictMode\": false\n  });\n  let SavedResultDetailsComponent = _exports.default = (_class = class SavedResultDetailsComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"resultLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"result\", _descriptor2, this);\n      this.resultLoaded = false;\n      this.loadFunction();\n      (0, _observers.addObserver)(this, 'args.resultId', this.loadFunction);\n      (0, _observers.addObserver)(this, 'args.uuid', this.loadFunction);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.resultId', this.loadFunction);\n      (0, _observers.removeObserver)(this, 'args.uuid', this.loadFunction);\n    }\n    loadFunction() {\n      let uuid = this.args.uuid;\n      let resultId = this.args.resultId;\n      this.resultLoaded = false;\n      let getResult = _.isString(uuid) ? _server.default.getTokenContent(uuid, {\n        resultId: resultId\n      }) : _server.default.getLoadTestExecutionResult(resultId);\n      getResult.then(result => {\n        this.result = result;\n        this.resultLoaded = true;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"resultLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"result\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SavedResultDetailsComponent);\n});","define(\"@testable/shared-ui/components/scenario/ai\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/scenario\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _server, _scenario, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/scenario\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    class=\"ai-scenario\"\n    id=\"updateAiScenarioForm{{@uniqueId}}\" as |Wrapper|\n  >\n    <Wrapper.Filters>\n      <Scenario::Ai::Fields\n        @script={{@script}}\n        @readonly={{@readonly}}\n        @onChange={{this.aiFieldsChanged}}\n      />\n    </Wrapper.Filters>\n  \n    <Wrapper.LeftPanel @panelClass={{if (eq this.activePanel 'uploadedFilesTab') '' 'px-2 py-2'}} >\n      <:filesTab>\n        <div class=\"panel {{if (eq this.activePanel 'tagsTab') '' 'hidden'}}\"\n          {{did-update this._onDataStoreUpdates this.realtimeService.dataStoreUpdates}}\n          {{did-update this._onRemovedDataStores this.realtimeService.removedDataStoreIds}}\n        >\n          {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n        </div>\n        <div class=\"panel {{if (eq this.activePanel 'paramsTab') '' 'hidden'}}\">\n          <Scenario::ParamsConfigEditor\n            @paramsConfig={{@script.paramsConfig}}\n            @uniqueId={{@uniqueId}}\n            @readonly={{@script.readonly}}\n            @isSaving={{@isSaving}}\n            @noteText=\"Parameters can be referenced in your instructions using the <strong>${paramName}</strong> syntax. It will be replaced with the parameter value on the test runner, both when running via AI and via the generated script.\"\n            @configChanged={{this.paramsConfigChanged}}\n          />\n        </div>\n        <div class=\"panel {{if (or (not this.activePanel) (eq this.activePanel 'instructionsTab')) '' 'hidden'}}\">\n          <Scenario::Ai::Instructions\n            @script={{@script}}\n            @readonly={{@readonly}}\n            @selectedPanel={{this.selectedPanel}}\n            @onCountChanged={{fn (mut this.instructionsCount)}}\n          />\n        </div>\n        <div class=\"panel {{if (eq this.activePanel 'uploadedFilesTab') '' 'hidden'}}\">\n          <Scenario::Ai::UploadedFiles\n            @script={{@script}}\n            @readonly={{@readonly}}\n            @onStoreUpdate={{@onStoreUpdate}}\n          />\n        </div>\n  \n        {{#if this.shouldShowGeneratedFiles}}\n          <div class=\"panel {{if (eq this.activePanel 'generatedFilesTab') '' 'hidden'}}\">\n            <div class=\"mb-3 mt-1\">\n              <div class=\"d-flex justify-content-between align-items-center\">\n                <h5 class=\"mb-0\">Generated Files</h5>\n                <div class=\"d-flex gap-2\">\n                  {{#if this.filteredDataStores.length}}\n                    <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" {{on \"click\" this.downloadGeneratedFiles}} disabled={{@readonly}}>\n                      <Ui::Icon @icon=\"fa fa-download\" /> Download\n                    </button>\n                  {{/if}}\n                  <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" {{on \"click\" this.refreshGeneratedFiles}} disabled={{or @readonly this.isRefreshing}}>\n                    <Ui::Icon @icon=\"fa fa-refresh{{if this.isRefreshing ' fa-spin'}}\" /> Refresh\n                  </button>\n                  {{#if this.filteredDataStores.length}}\n                    <button type=\"button\" class=\"btn btn-outline-danger btn-sm\" {{on \"click\" this.deleteGeneratedFiles}} disabled={{or @readonly this.isDeleting}}>\n                      <Ui::Icon @icon=\"fa {{if this.isDeleting 'fa-spinner fa-spin' 'fa-trash'}}\" /> Delete All\n                    </button>\n                  {{/if}}\n                </div>\n              </div>\n              <p class=\"text-muted small mt-2 mb-0\">Read-only view of generated files</p>\n            </div>\n            {{#if this.filteredDataStores.length}}\n              <div class=\"generated-files-view\">\n                {{#if this.hasExpiredDataStores}}\n                  <div class=\"alert alert-warning\" role=\"alert\">\n                    <strong>NOTE:</strong> The generated files are older than the maximum valid time specified above and will be regenerated via AI on the next run.\n                  </div>\n                {{/if}}\n                {{#if this.filteredDataStores}}\n                  <div class=\"data-stores-list\">\n                    {{#each this.filteredDataStores as |dataStore|}}\n                      <div class=\"data-store-item mb-3\" {{did-insert (fn this.loadDataStoreContent dataStore)}}>\n                        <div class=\"data-store-header mb-2 d-flex justify-content-between align-items-center\">\n                          <div class=\"flex-grow-1\">\n                            <strong>{{dataStore.name}}</strong>\n                            {{#if dataStore.size}}\n                              <span class=\"text-muted small\">({{dataStore.size}} bytes)</span>\n                            {{/if}}\n                            {{#if dataStore.createdAt}}\n                              <div class=\"text-muted small\">{{moment-format dataStore.createdAt \"MMM D, YYYY h:mm A\"}}</div>\n                            {{/if}}\n                          </div>\n                          <div class=\"d-flex align-items-center gap-2\">\n                            {{#if dataStore.content}}\n                              <Ui::CopyText\n                                @text={{dataStore.content}}\n                                @title=\"Copy file contents\"\n                                @trigger=\"hover\"\n                              />\n                            {{/if}}\n                          </div>\n                        </div>\n                        {{#if dataStore.content}}\n                          <pre class=\"bg-light p-2 rounded generated-file-preview\"><code>{{dataStore.content}}</code></pre>\n                        {{else if dataStore.isLoading}}\n                          <div class=\"text-muted p-2\">Loading file content...</div>\n                        {{else}}\n                          <div class=\"text-muted p-2\">Failed to load content</div>\n                        {{/if}}\n                      </div>\n                    {{/each}}\n                  </div>\n                {{else}}\n                  <div class=\"text-muted\">No generated files available ({{this.instructionsFilePath}} excluded)</div>\n                {{/if}}\n              </div>\n            {{else}}\n              <div class=\"text-muted p-3\">No generated files yet. Run the scenario to generate files.</div>\n            {{/if}}\n          </div>\n        {{/if}}\n      </:filesTab>\n  \n      <:runConsoleTab>\n        {{yield (hash Siblings=(component \"empty\"))}}\n      </:runConsoleTab>\n    </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel\n      @activeTab={{this.activePanel}}\n      @model={{@script}}\n      @selectedPanel={{fn (mut this.selectedPanel)}}\n      @hideGeneratedFilesTab={{not this.shouldShowGeneratedFiles}}\n      @instructionsCount={{this.instructionsCount}}\n      @uploadedFilesCount={{this.uploadedFilesCount}}\n      @generatedFilesCount={{this.generatedFilesCount}}\n    >\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:instructionsTab></:instructionsTab>\n      <:uploadedFilesTab></:uploadedFilesTab>\n      <:generatedFilesTab></:generatedFilesTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"ai-scenario\\\"],[16,1,[29,[\\\"updateAiScenarioForm\\\",[30,1]]]]],[[\\\"@model\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[39,1],null,[[\\\"@script\\\",\\\"@readonly\\\",\\\"@onChange\\\"],[[30,2],[30,3],[30,0,[\\\"aiFieldsChanged\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,[[\\\"@panelClass\\\"],[[52,[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"uploadedFilesTab\\\"],null],\\\"\\\",\\\"px-2 py-2\\\"]]],[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n      \\\"],[11,0],[16,0,[29,[\\\"panel \\\",[52,[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"tagsTab\\\"],null],\\\"\\\",\\\"hidden\\\"]]]],[4,[38,6],[[30,0,[\\\"_onDataStoreUpdates\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreUpdates\\\"]]],null],[4,[38,6],[[30,0,[\\\"_onRemovedDataStores\\\"]],[30,0,[\\\"realtimeService\\\",\\\"removedDataStoreIds\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[18,9,[[28,[37,8],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"paramsTab\\\"],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,1],[30,2,[\\\"readonly\\\"]],[30,6],\\\"Parameters can be referenced in your instructions using the <strong>${paramName}</strong> syntax. It will be replaced with the parameter value on the test runner, both when running via AI and via the generated script.\\\",[30,0,[\\\"paramsConfigChanged\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,11],[[28,[37,12],[[30,0,[\\\"activePanel\\\"]]],null],[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"instructionsTab\\\"],null]],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,13],null,[[\\\"@script\\\",\\\"@readonly\\\",\\\"@selectedPanel\\\",\\\"@onCountChanged\\\"],[[30,2],[30,3],[30,0,[\\\"selectedPanel\\\"]],[28,[37,14],[[28,[37,15],[[30,0,[\\\"instructionsCount\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"uploadedFilesTab\\\"],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@script\\\",\\\"@readonly\\\",\\\"@onStoreUpdate\\\"],[[30,2],[30,3],[30,7]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"shouldShowGeneratedFiles\\\"]],[[[1,\\\"        \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,3],[[30,0,[\\\"activePanel\\\"]],\\\"generatedFilesTab\\\"],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"mb-3 mt-1\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"d-flex justify-content-between align-items-center\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h5\\\"],[14,0,\\\"mb-0\\\"],[12],[1,\\\"Generated Files\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredDataStores\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-primary btn-sm\\\"],[16,\\\"disabled\\\",[30,3]],[24,4,\\\"button\\\"],[4,[38,19],[\\\"click\\\",[30,0,[\\\"downloadGeneratedFiles\\\"]]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,20],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" Download\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-secondary btn-sm\\\"],[16,\\\"disabled\\\",[28,[37,11],[[30,3],[30,0,[\\\"isRefreshing\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,19],[\\\"click\\\",[30,0,[\\\"refreshGeneratedFiles\\\"]]],null],[12],[1,\\\"\\\\n                  \\\"],[8,[39,20],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-refresh\\\",[52,[30,0,[\\\"isRefreshing\\\"]],\\\" fa-spin\\\"]]]]],null],[1,\\\" Refresh\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredDataStores\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-danger btn-sm\\\"],[16,\\\"disabled\\\",[28,[37,11],[[30,3],[30,0,[\\\"isDeleting\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,19],[\\\"click\\\",[30,0,[\\\"deleteGeneratedFiles\\\"]]],null],[12],[1,\\\"\\\\n                    \\\"],[8,[39,20],null,[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,0,[\\\"isDeleting\\\"]],\\\"fa-spinner fa-spin\\\",\\\"fa-trash\\\"]]]]],null],[1,\\\" Delete All\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,2],[14,0,\\\"text-muted small mt-2 mb-0\\\"],[12],[1,\\\"Read-only view of generated files\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredDataStores\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"generated-files-view\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasExpiredDataStores\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"alert alert-warning\\\"],[14,\\\"role\\\",\\\"alert\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"NOTE:\\\"],[13],[1,\\\" The generated files are older than the maximum valid time specified above and will be regenerated via AI on the next run.\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"filteredDataStores\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"data-stores-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,24],[[28,[37,24],[[30,0,[\\\"filteredDataStores\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[11,0],[24,0,\\\"data-store-item mb-3\\\"],[4,[38,25],[[28,[37,14],[[30,0,[\\\"loadDataStoreContent\\\"]],[30,8]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"data-store-header mb-2 d-flex justify-content-between align-items-center\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,0],[14,0,\\\"flex-grow-1\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"strong\\\"],[12],[1,[30,8,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"size\\\"]],[[[1,\\\"                            \\\"],[10,1],[14,0,\\\"text-muted small\\\"],[12],[1,\\\"(\\\"],[1,[30,8,[\\\"size\\\"]]],[1,\\\" bytes)\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,8,[\\\"createdAt\\\"]],[[[1,\\\"                            \\\"],[10,0],[14,0,\\\"text-muted small\\\"],[12],[1,[28,[35,27],[[30,8,[\\\"createdAt\\\"]],\\\"MMM D, YYYY h:mm A\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n                        \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"content\\\"]],[[[1,\\\"                            \\\"],[8,[39,28],null,[[\\\"@text\\\",\\\"@title\\\",\\\"@trigger\\\"],[[30,8,[\\\"content\\\"]],\\\"Copy file contents\\\",\\\"hover\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"content\\\"]],[[[1,\\\"                        \\\"],[10,\\\"pre\\\"],[14,0,\\\"bg-light p-2 rounded generated-file-preview\\\"],[12],[10,\\\"code\\\"],[12],[1,[30,8,[\\\"content\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,8,[\\\"isLoading\\\"]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"text-muted p-2\\\"],[12],[1,\\\"Loading file content...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"text-muted p-2\\\"],[12],[1,\\\"Failed to load content\\\"],[13],[1,\\\"\\\\n                      \\\"]],[]]]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"text-muted\\\"],[12],[1,\\\"No generated files available (\\\"],[1,[30,0,[\\\"instructionsFilePath\\\"]]],[1,\\\" excluded)\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"text-muted p-3\\\"],[12],[1,\\\"No generated files yet. Run the scenario to generate files.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"]],[]],[[[1,\\\"\\\\n      \\\"],[18,9,[[28,[37,8],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\",\\\"@hideGeneratedFilesTab\\\",\\\"@instructionsCount\\\",\\\"@uploadedFilesCount\\\",\\\"@generatedFilesCount\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,14],[[28,[37,15],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[28,[37,12],[[30,0,[\\\"shouldShowGeneratedFiles\\\"]]],null],[30,0,[\\\"instructionsCount\\\"]],[30,0,[\\\"uploadedFilesCount\\\"]],[30,0,[\\\"generatedFilesCount\\\"]]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"instructionsTab\\\",\\\"uploadedFilesTab\\\",\\\"generatedFilesTab\\\"],[[[],[]],[[],[]],[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"@isSaving\\\",\\\"@onStoreUpdate\\\",\\\"dataStore\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"scenario/ai/fields\\\",\\\"if\\\",\\\"eq\\\",\\\":filesTab\\\",\\\"div\\\",\\\"did-update\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"or\\\",\\\"not\\\",\\\"scenario/ai/instructions\\\",\\\"fn\\\",\\\"mut\\\",\\\"scenario/ai/uploaded-files\\\",\\\"h5\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"p\\\",\\\"strong\\\",\\\"each\\\",\\\"-track-array\\\",\\\"did-insert\\\",\\\"span\\\",\\\"moment-format\\\",\\\"ui/copy-text\\\",\\\"pre\\\",\\\"code\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":instructionsTab\\\",\\\":uploadedFilesTab\\\",\\\":generatedFilesTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ai.hbs\",\n    \"isStrictMode\": false\n  });\n  function normalizeRelativePath(path) {\n    return String(path || '').replace(/^\\/+/, '').replace(/\\/+$/, '');\n  }\n  let ScenarioAiComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class ScenarioAiComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor3, this);\n      _initializerDefineProperty(this, \"dataStoreContents\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadingDataStores\", _descriptor5, this);\n      _initializerDefineProperty(this, \"_aiMetadata\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isRefreshing\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isDeleting\", _descriptor8, this);\n      _initializerDefineProperty(this, \"instructionsCount\", _descriptor9, this);\n    }\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    get dataStores() {\n      return this.args.script?.dataStores;\n    }\n    get instructionsFilePath() {\n      return _scenario.default.getInstructionsFilePath(this.args.script);\n    }\n\n    // Generated files: stored under /generated/ path\n    get filteredDataStores() {\n      if (!this.dataStores) return [];\n      return this.dataStores.filter(ds => {\n        const p = normalizeRelativePath(ds.path || '');\n        return p.startsWith('generated/');\n      }).map(ds => ({\n        ...ds,\n        content: this.dataStoreContents[ds.id],\n        isLoading: this.loadingDataStores.has(ds.id)\n      }));\n    }\n    get hasExpiredDataStores() {\n      const maxAge = this.args.script?.metadata?.maxAge;\n      if (!maxAge || !this.filteredDataStores.length) return false;\n      const now = moment();\n      return this.filteredDataStores.some(ds => {\n        if (!ds.createdAt) return false;\n        const fileAge = now.diff(moment(ds.createdAt), 'seconds');\n        return fileAge > maxAge;\n      });\n    }\n    get uploadedFilesCount() {\n      const instructionsPath = normalizeRelativePath(this.instructionsFilePath);\n      return (this.dataStores || []).filter(ds => {\n        const p = normalizeRelativePath(ds.path || '');\n        return p && !p.startsWith('generated/') && !ds.isFolder && p !== instructionsPath;\n      }).length;\n    }\n    get generatedFilesCount() {\n      return this.filteredDataStores.length;\n    }\n    get shouldShowGeneratedFiles() {\n      const maxAge = this._aiMetadata?.maxAge ?? this.args.script?.metadata?.maxAge;\n      return maxAge !== 0;\n    }\n    async loadDataStoreContent(dataStore) {\n      if (this.dataStoreContents[dataStore.id] !== undefined || this.loadingDataStores.has(dataStore.id)) {\n        return;\n      }\n      this.loadingDataStores = new Set([...this.loadingDataStores, dataStore.id]);\n      try {\n        const content = await this.api.dataStores.download(dataStore);\n        this.dataStoreContents = {\n          ...this.dataStoreContents,\n          [dataStore.id]: content\n        };\n      } catch (error) {\n        console.error(`Failed to load data store ${dataStore.name}:`, error);\n        this.dataStoreContents = {\n          ...this.dataStoreContents,\n          [dataStore.id]: 'Error loading content'\n        };\n      } finally {\n        const updated = new Set(this.loadingDataStores);\n        updated.delete(dataStore.id);\n        this.loadingDataStores = updated;\n      }\n    }\n    aiFieldsChanged(aiMetadata) {\n      this._aiMetadata = aiMetadata;\n      if (aiMetadata.maxAge === 0 && this.activePanel === 'generatedFilesTab') {\n        this.selectedPanel = 'instructionsTab';\n      }\n      this.saveScript();\n    }\n    paramsConfigChanged(paramsConfig) {\n      if (this.args.paramsConfigChanged) {\n        this.args.paramsConfigChanged(paramsConfig);\n      }\n    }\n    downloadGeneratedFiles() {\n      const url = _lib.default.toUrl('/scripts/' + this.args.script?.id + '/data-stores/download?generated=true');\n      window.open(url, '_blank');\n    }\n    async refreshGeneratedFiles() {\n      this.isRefreshing = true;\n      this.dataStoreContents = {};\n      const currentIds = (this.dataStores || []).map(ds => ds.id);\n      this.loadingDataStores = new Set(currentIds);\n      try {\n        const script = await _server.default.getScript(this.args.script?.id);\n        if (script.dataStores) {\n          const dataStores = _.sortBy(script.dataStores, ['name']);\n          _.forEach(dataStores, ds => _lib.default.addAuthToDataStore(ds));\n          this.args.onStoreUpdate(dataStores, script.updatedAt);\n        }\n        this.loadingDataStores = new Set();\n      } catch (error) {\n        console.error('Failed to refresh generated files:', error);\n      } finally {\n        this.isRefreshing = false;\n      }\n    }\n    deleteGeneratedFiles() {\n      _lib.default.confirm('Are you sure you want to delete all generated files?', 'Delete All', () => this._doDeleteGeneratedFiles(), 'Cancel');\n    }\n    async _doDeleteGeneratedFiles() {\n      this.isDeleting = true;\n      try {\n        await this.api.dataStores.deleteGeneratedFiles(this.args.script?.id);\n        const remaining = (this.args.script?.dataStores || []).filter(ds => !normalizeRelativePath(ds.path || '').startsWith('generated/'));\n        this.args.onStoreUpdate(remaining, this.args.script?.updatedAt);\n        this.dataStoreContents = {};\n        this.loadingDataStores = new Set();\n      } catch (error) {\n        console.error('Failed to delete generated files:', error);\n      } finally {\n        this.isDeleting = false;\n      }\n    }\n    _onDataStoreUpdates() {\n      const updates = this.realtimeService.dataStoreUpdates;\n      if (!updates || _.isEmpty(updates)) return;\n      const generatedIdsToReload = Object.values(updates).filter(ds => normalizeRelativePath(ds.path || '').startsWith('generated/')).map(ds => ds.id);\n      if (!generatedIdsToReload.length) return;\n      const contents = {\n        ...this.dataStoreContents\n      };\n      generatedIdsToReload.forEach(id => delete contents[id]);\n      this.dataStoreContents = contents;\n      const allDataStores = this.args.script?.dataStores || [];\n      generatedIdsToReload.forEach(id => {\n        const ds = allDataStores.find(d => d.id === id);\n        if (ds) this.loadDataStoreContent(ds);\n      });\n    }\n    _onRemovedDataStores() {\n      const removedIds = this.realtimeService.removedDataStoreIds;\n      if (!removedIds || !removedIds.length) return;\n      const contents = {\n        ...this.dataStoreContents\n      };\n      let changed = false;\n      removedIds.forEach(id => {\n        if (id in contents) {\n          delete contents[id];\n          changed = true;\n        }\n      });\n      if (changed) {\n        this.dataStoreContents = contents;\n      }\n    }\n    toMetadata() {\n      const metadata = {\n        ...(this.args.script?.metadata || {})\n      };\n      if (this._aiMetadata) {\n        Object.assign(metadata, this._aiMetadata);\n      }\n      return metadata;\n    }\n    saveScript() {\n      if (this.args.saveMetadata) {\n        this.args.saveMetadata(this.toMetadata());\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'instructionsTab';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"dataStoreContents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadingDataStores\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new Set();\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"_aiMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isRefreshing\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isDeleting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"instructionsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"filteredDataStores\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"filteredDataStores\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadDataStoreContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadDataStoreContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"aiFieldsChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"aiFieldsChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadGeneratedFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadGeneratedFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refreshGeneratedFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshGeneratedFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteGeneratedFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteGeneratedFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onDataStoreUpdates\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onDataStoreUpdates\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onRemovedDataStores\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onRemovedDataStores\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioAiComponent);\n});","define(\"@testable/shared-ui/components/scenario/ai/fields\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group\" {{did-update this.onMetadataChange @script.metadata}}>\n    <label>Model</label>\n    <div>\n      <Ui::PSelect\n        @options={{this.modelOptions}}\n        @selected={{this.model}}\n        @disabled={{@readonly}}\n        @onChange={{this.modelChanged}}\n        as |option|\n      >\n        {{this.modelLabel option}}\n      </Ui::PSelect>\n    </div>\n  </div>\n  \n  <div class=\"form-group\">\n    <label>Tool</label>\n    <div>\n      <Ui::PSelect\n        @options={{this.aiTools}}\n        @selected={{this.tool}}\n        @disabled={{@readonly}}\n        @onChange={{this.toolChanged}}\n        as |option|\n      >\n        {{option.name}}\n      </Ui::PSelect>\n    </div>\n  </div>\n  \n  {{#if this.isPlaywright}}\n    <div class=\"form-group\">\n      <label>Browser Type</label>\n      <div>\n        <Ui::PSelect\n          @options={{this.aiBrowserTypes}}\n          @selected={{this.browserType}}\n          @disabled={{@readonly}}\n          @onChange={{this.browserTypeChanged}}\n          as |option|\n        >\n          {{option.name}}\n        </Ui::PSelect>\n      </div>\n    </div>\n  {{/if}}\n  \n  <div class=\"form-group\">\n    <label>Reuse</label>\n    <div>\n      <Ui::PSelect\n        @options={{this.aiReuseOptions}}\n        @selected={{this.reuseOption}}\n        @disabled={{@readonly}}\n        @onChange={{this.reuseChanged}}\n        as |option|\n      >\n        {{option.name}}\n      </Ui::PSelect>\n    </div>\n  </div>\n  \n  {{#if this.isReuse}}\n    <div class=\"form-group\">\n      <label>Generated script valid for</label>\n      <div class=\"d-flex gap-2\">\n        <Input\n          @type=\"number\"\n          class=\"form-control\"\n          @value={{this.maxAgeQty}}\n          min=\"1\"\n          disabled={{@readonly}}\n          {{on \"focusout\" this.maxAgeQtyChanged}}\n        />\n        <Ui::PSelect\n          @options={{this.aiMaxAgeTypes}}\n          @selected={{this.maxAgeType}}\n          @disabled={{@readonly}}\n          @onChange={{this.maxAgeTypeChanged}}\n          as |option|\n        >\n          {{option.name}}\n        </Ui::PSelect>\n      </div>\n    </div>\n  \n    <div class=\"form-group d-flex align-items-end mb-2\">\n      <label class=\"normal mb-0 text-nowrap\">\n        <Input @type=\"checkbox\" @checked={{this.enableAiRetry}} {{on \"change\" this.toggleEnableAiRetry}} />\n        Regenerate script on failure\n      </label>\n    </div>\n  {{/if}}\n  \n  {{#if this.hasGeneratedFiles}}\n    <div class=\"form-group\">\n      <div>\n        <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" {{on \"click\" this.downloadGeneratedScript}} disabled={{@readonly}}>\n          <Ui::Icon @icon=\"fa fa-download\" /> Download Generated Script\n        </button>\n      </div>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"form-group\\\"],[4,[38,1],[[30,0,[\\\"onMetadataChange\\\"]],[30,1,[\\\"metadata\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Model\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"modelOptions\\\"]],[30,0,[\\\"model\\\"]],[30,2],[30,0,[\\\"modelChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[28,[30,0,[\\\"modelLabel\\\"]],[[30,3]],null]],[1,\\\"\\\\n    \\\"]],[3]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Tool\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"aiTools\\\"]],[30,0,[\\\"tool\\\"]],[30,2],[30,0,[\\\"toolChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\"\\\\n    \\\"]],[4]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isPlaywright\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Browser Type\\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"aiBrowserTypes\\\"]],[30,0,[\\\"browserType\\\"]],[30,2],[30,0,[\\\"browserTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Reuse\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"aiReuseOptions\\\"]],[30,0,[\\\"reuseOption\\\"]],[30,2],[30,0,[\\\"reuseChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n    \\\"]],[6]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isReuse\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Generated script valid for\\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"d-flex gap-2\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"1\\\"],[16,\\\"disabled\\\",[30,2]],[4,[38,6],[\\\"focusout\\\",[30,0,[\\\"maxAgeQtyChanged\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"maxAgeQty\\\"]]]],null],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"aiMaxAgeTypes\\\"]],[30,0,[\\\"maxAgeType\\\"]],[30,2],[30,0,[\\\"maxAgeTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[7]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"form-group d-flex align-items-end mb-2\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal mb-0 text-nowrap\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,5],[[4,[38,6],[\\\"change\\\",[30,0,[\\\"toggleEnableAiRetry\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"enableAiRetry\\\"]]]],null],[1,\\\"\\\\n      Regenerate script on failure\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasGeneratedFiles\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-primary btn-sm\\\"],[16,\\\"disabled\\\",[30,2]],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"downloadGeneratedScript\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" Download Generated Script\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@script\\\",\\\"@readonly\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"input\\\",\\\"on\\\",\\\"button\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ai/fields.hbs\",\n    \"isStrictMode\": false\n  });\n  const AiTools = [{\n    id: 'playwright',\n    name: 'Playwright'\n  }];\n  const AiBrowserTypes = [{\n    id: 'chromium',\n    name: 'Chromium'\n  }, {\n    id: 'firefox',\n    name: 'Firefox'\n  }, {\n    id: 'webkit',\n    name: 'Webkit'\n  }];\n  const AiReuseOptions = [{\n    id: 'reuse',\n    name: 'Reuse generated script'\n  }, {\n    id: 'always',\n    name: 'Always run via AI'\n  }];\n  const AiMaxAgeTypes = [{\n    id: 'minutes',\n    name: 'minutes',\n    ms: 60000\n  }, {\n    id: 'hours',\n    name: 'hours',\n    ms: 3600000\n  }, {\n    id: 'days',\n    name: 'days',\n    ms: 86400000\n  }];\n  const AutoModel = {\n    id: '',\n    name: 'Auto',\n    description: 'Auto (default model based on your account)',\n    contextWindow: 4096\n  };\n  let ScenarioAiFieldsComponent = _exports.default = (_class = class ScenarioAiFieldsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiModels\", _descriptor2, this);\n      _initializerDefineProperty(this, \"model\", _descriptor3, this);\n      _initializerDefineProperty(this, \"tool\", _descriptor4, this);\n      _initializerDefineProperty(this, \"browserType\", _descriptor5, this);\n      _initializerDefineProperty(this, \"reuseOption\", _descriptor6, this);\n      _initializerDefineProperty(this, \"maxAgeQty\", _descriptor7, this);\n      _initializerDefineProperty(this, \"maxAgeType\", _descriptor8, this);\n      _initializerDefineProperty(this, \"enableAiRetry\", _descriptor9, this);\n      _defineProperty(this, \"aiTools\", AiTools);\n      _defineProperty(this, \"aiBrowserTypes\", AiBrowserTypes);\n      _defineProperty(this, \"aiReuseOptions\", AiReuseOptions);\n      _defineProperty(this, \"aiMaxAgeTypes\", AiMaxAgeTypes);\n      _defineProperty(this, \"modelLabel\", model => {\n        return [model?.description || model?.name, model?.contextWindow && _lib.default.printContextWindow(model.contextWindow)].filter(Boolean).join(' · ');\n      });\n      this.fromMetadata();\n      this.loadModels();\n    }\n    onMetadataChange() {\n      this.fromMetadata();\n    }\n    get modelOptions() {\n      return [AutoModel, ...this.aiModels];\n    }\n    get isPlaywright() {\n      return this.tool?.id === 'playwright';\n    }\n    get isReuse() {\n      return this.reuseOption?.id === 'reuse';\n    }\n    get maxAge() {\n      if (!this.isReuse) return 0;\n      return (this.maxAgeQty || 1) * (this.maxAgeType?.ms || 86400000);\n    }\n    get hasGeneratedFiles() {\n      return this.args.script?.hasGeneratedFiles;\n    }\n    get downloadUrl() {\n      return _lib.default.toUrl('/scripts/' + this.args.script?.id + '/data-stores/download?generated=true');\n    }\n    async loadModels() {\n      try {\n        this.aiModels = await this.api.conversations.getAiModels();\n        const m = this.args.script?.metadata;\n        if (m?.model) {\n          this.model = this.modelOptions.find(mod => mod.name === m.model || mod.id === m.model) || AutoModel;\n        }\n      } catch (e) {\n        console.error('Failed to load AI models:', e);\n      }\n    }\n    fromMetadata() {\n      const m = this.args.script?.metadata;\n      if (!m) return;\n      this.model = m.model ? this.modelOptions.find(mod => mod.name === m.model || mod.id === m.model) : this.modelOptions[0];\n      this.tool = AiTools.find(t => t.id === m.tool) || AiTools[0];\n      this.browserType = AiBrowserTypes.find(b => b.id === m.browserType) || AiBrowserTypes[0];\n      if (m.maxAge > 0) {\n        this.reuseOption = AiReuseOptions[0];\n        const parsed = this._maxAgeToQtyAndType(m.maxAge);\n        this.maxAgeQty = m.maxAgeQty || parsed.qty;\n        this.maxAgeType = m.maxAgeType ? AiMaxAgeTypes.find(t => t.id === m.maxAgeType) || parsed.type : parsed.type;\n      } else if (m.maxAge === 0) {\n        this.reuseOption = AiReuseOptions[1];\n      }\n      this.enableAiRetry = m.enableAiRetry !== false;\n    }\n    toMetadata() {\n      return {\n        model: this.model?.id ?? this.model?.name ?? '',\n        tool: this.tool?.id || 'playwright',\n        browserType: this.browserType?.id || 'chromium',\n        maxAge: this.maxAge,\n        maxAgeQty: this.maxAgeQty,\n        maxAgeType: this.maxAgeType?.id || 'days',\n        enableAiRetry: this.enableAiRetry\n      };\n    }\n    _save() {\n      if (this.args.onChange) {\n        this.args.onChange(this.toMetadata());\n      }\n    }\n    _maxAgeToQtyAndType(maxAge) {\n      if (!maxAge || maxAge <= 0) return {\n        qty: 1,\n        type: AiMaxAgeTypes[2]\n      };\n      for (let i = AiMaxAgeTypes.length - 1; i >= 0; i--) {\n        const t = AiMaxAgeTypes[i];\n        if (maxAge % t.ms === 0) return {\n          qty: maxAge / t.ms,\n          type: t\n        };\n      }\n      return {\n        qty: Math.round(maxAge / 60000),\n        type: AiMaxAgeTypes[0]\n      };\n    }\n    modelChanged(selected) {\n      this.model = selected;\n      this._save();\n    }\n    toolChanged(selected) {\n      this.tool = selected;\n      this._save();\n    }\n    browserTypeChanged(selected) {\n      this.browserType = selected;\n      this._save();\n    }\n    reuseChanged(selected) {\n      this.reuseOption = selected;\n      this._save();\n    }\n    maxAgeQtyChanged(event) {\n      this.maxAgeQty = Math.max(1, parseInt(event.target.value) || 1);\n      this._save();\n    }\n    maxAgeTypeChanged(selected) {\n      this.maxAgeType = selected;\n      this._save();\n    }\n    toggleEnableAiRetry(event) {\n      this.enableAiRetry = event.target.checked;\n      this._save();\n    }\n    downloadGeneratedScript() {\n      window.open(this.downloadUrl, '_blank');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiModels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"model\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return AutoModel;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"tool\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return AiTools[0];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"browserType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return AiBrowserTypes[0];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"reuseOption\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return AiReuseOptions[0];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"maxAgeQty\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"maxAgeType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return AiMaxAgeTypes[2];\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"enableAiRetry\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onMetadataChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetadataChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"modelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"modelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toolChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toolChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"browserTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"browserTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"reuseChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"reuseChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"maxAgeQtyChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"maxAgeQtyChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"maxAgeTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"maxAgeTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleEnableAiRetry\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleEnableAiRetry\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadGeneratedScript\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadGeneratedScript\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioAiFieldsComponent);\n});","define(\"@testable/shared-ui/components/scenario/ai/instructions\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/ai-instruction-templates\", \"@testable/shared-ui/utils/scenario\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _runloop, _aiInstructionTemplates, _scenario, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/ai-instruction-templates\",0,\"@testable/shared-ui/utils/scenario\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ai-instructions-panel\" {{did-update this.onScriptUpdated this.realtimeService.scriptUpdates}}>\n    <div class=\"d-flex align-items-center justify-content-between mb-3\">\n      <h5 class=\"mb-0\"><strong>Instructions</strong></h5>\n      <div class=\"d-flex align-items-center gap-2\">\n        {{#if this.isSaving}}\n          <span class=\"text-muted small\"><Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Saving...</span>\n        {{/if}}\n        {{#unless @readonly}}\n          <div class=\"btn-group\">\n            <button type=\"button\" class=\"btn btn-primary btn-sm dropdown-toggle\" data-bs-toggle=\"dropdown\">\n              <Ui::Icon @icon=\"fa fa-plus\" /> Add Step\n            </button>\n            <ul class=\"dropdown-menu dropdown-menu-end\">\n              <li>\n                <button type=\"button\" class=\"dropdown-item\" {{on \"click\" (fn this.addStep null)}}>Empty</button>\n              </li>\n              {{#each this.instructionTemplates as |group|}}\n                <li><hr class=\"dropdown-divider\"></li>\n                <li><h6 class=\"dropdown-header\">{{group.group}}</h6></li>\n                {{#each group.templates as |template|}}\n                  <li>\n                    <button type=\"button\" class=\"dropdown-item\" {{on \"click\" (fn this.addStep template)}}>{{template.title}}</button>\n                  </li>\n                {{/each}}\n              {{/each}}\n            </ul>\n          </div>\n        {{/unless}}\n      </div>\n    </div>\n  \n    {{#if this.isLoading}}\n      <div class=\"text-center p-4 text-muted\">\n        <Ui::Icon @icon=\"fa fa-spinner fa-spin fa-2x\" />\n        <div class=\"mt-2\">Loading instructions...</div>\n      </div>\n    {{else}}\n      {{#if (and (not @readonly) (gt this.instructions.length 1))}}\n        <div class=\"text-muted small mb-2\">Drag to reorder steps</div>\n      {{/if}}\n      <div class=\"instructions-sortable\" {{did-insert this.applySortable}} {{did-update this.onInstructionsChange this.instructions}}>\n        {{#each this.stepsWithMeta as |step|}}\n          <div class=\"card mb-2 instruction-item\" data-step-index={{step.index}}>\n            <div class=\"card-header d-flex align-items-center gap-2 py-2 px-3\">\n              {{#if (and (not @readonly) (gt this.instructions.length 1))}}\n                <span class=\"instruction-drag-handle text-muted\">\n                  <Ui::Icon @icon=\"fa fa-grip-vertical\" />\n                </span>\n              {{/if}}\n              <input\n                type=\"text\"\n                class=\"form-control form-control-sm flex-grow-1\"\n                placeholder=\"Step title\"\n                value={{step.title}}\n                disabled={{@readonly}}\n                {{on \"change\" (fn this.updateTitle step.index)}}\n              />\n              {{#unless @readonly}}\n                <button type=\"button\" class=\"btn btn-sm btn-icon p-0 text-danger\" title=\"Remove step\"\n                  disabled={{eq this.instructions.length 1}}\n                  {{on \"click\" (fn this.removeStep step.index)}}>\n                  <Ui::Icon @icon=\"fa fa-trash\" />\n                </button>\n              {{/unless}}\n            </div>\n            <div class=\"card-body p-2\">\n              <textarea\n                class=\"form-control\"\n                rows=\"4\"\n                placeholder=\"Enter instructions for this step...\"\n                disabled={{@readonly}}\n                {{on \"change\" (fn this.updateContents step.index)}}\n              >{{step.contents}}</textarea>\n            </div>\n          </div>\n        {{/each}}\n      </div>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"ai-instructions-panel\\\"],[4,[38,1],[[30,0,[\\\"onScriptUpdated\\\"]],[30,0,[\\\"realtimeService\\\",\\\"scriptUpdates\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center justify-content-between mb-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h5\\\"],[14,0,\\\"mb-0\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Instructions\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-2\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isSaving\\\"]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"text-muted small\\\"],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Saving...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,1]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"btn-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary btn-sm dropdown-toggle\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Add Step\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[28,[37,12],[[30,0,[\\\"addStep\\\"]],null],null]],null],[12],[1,\\\"Empty\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"instructionTemplates\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"li\\\"],[12],[10,\\\"hr\\\"],[14,0,\\\"dropdown-divider\\\"],[12],[13],[13],[1,\\\"\\\\n              \\\"],[10,\\\"li\\\"],[12],[10,\\\"h6\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,[30,2,[\\\"group\\\"]]],[13],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,2,[\\\"templates\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[28,[37,12],[[30,0,[\\\"addStep\\\"]],[30,3]],null]],null],[12],[1,[30,3,[\\\"title\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"text-center p-4 text-muted\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin fa-2x\\\"]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"mt-2\\\"],[12],[1,\\\"Loading instructions...\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[28,[37,18],[[30,1]],null],[28,[37,19],[[30,0,[\\\"instructions\\\",\\\"length\\\"]],1],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"text-muted small mb-2\\\"],[12],[1,\\\"Drag to reorder steps\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[11,0],[24,0,\\\"instructions-sortable\\\"],[4,[38,20],[[30,0,[\\\"applySortable\\\"]]],null],[4,[38,1],[[30,0,[\\\"onInstructionsChange\\\"]],[30,0,[\\\"instructions\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"stepsWithMeta\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"card mb-2 instruction-item\\\"],[15,\\\"data-step-index\\\",[30,4,[\\\"index\\\"]]],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"card-header d-flex align-items-center gap-2 py-2 px-3\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[28,[37,18],[[30,1]],null],[28,[37,19],[[30,0,[\\\"instructions\\\",\\\"length\\\"]],1],null]],null],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"instruction-drag-handle text-muted\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-grip-vertical\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[11,\\\"input\\\"],[24,0,\\\"form-control form-control-sm flex-grow-1\\\"],[24,\\\"placeholder\\\",\\\"Step title\\\"],[16,2,[30,4,[\\\"title\\\"]]],[16,\\\"disabled\\\",[30,1]],[24,4,\\\"text\\\"],[4,[38,11],[\\\"change\\\",[28,[37,12],[[30,0,[\\\"updateTitle\\\"]],[30,4,[\\\"index\\\"]]],null]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon p-0 text-danger\\\"],[24,\\\"title\\\",\\\"Remove step\\\"],[16,\\\"disabled\\\",[28,[37,22],[[30,0,[\\\"instructions\\\",\\\"length\\\"]],1],null]],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[28,[37,12],[[30,0,[\\\"removeStep\\\"]],[30,4,[\\\"index\\\"]]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"card-body p-2\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"textarea\\\"],[24,0,\\\"form-control\\\"],[24,\\\"rows\\\",\\\"4\\\"],[24,\\\"placeholder\\\",\\\"Enter instructions for this step...\\\"],[16,\\\"disabled\\\",[30,1]],[4,[38,11],[\\\"change\\\",[28,[37,12],[[30,0,[\\\"updateContents\\\"]],[30,4,[\\\"index\\\"]]],null]],null],[12],[1,[30,4,[\\\"contents\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@readonly\\\",\\\"group\\\",\\\"template\\\",\\\"step\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"h5\\\",\\\"strong\\\",\\\"if\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"button\\\",\\\"ul\\\",\\\"li\\\",\\\"on\\\",\\\"fn\\\",\\\"each\\\",\\\"-track-array\\\",\\\"hr\\\",\\\"h6\\\",\\\"and\\\",\\\"not\\\",\\\"gt\\\",\\\"did-insert\\\",\\\"input\\\",\\\"eq\\\",\\\"textarea\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ai/instructions.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioAiInstructionsComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class ScenarioAiInstructionsComponent extends _component2.default {\n    get instructionsFilePath() {\n      return _scenario.default.getInstructionsFilePath(this.args.script);\n    }\n    findInstrDataStore(dataStores) {\n      const instrPath = '/' + this.instructionsFilePath.replace(/^\\/+/, '');\n      return dataStores?.find(ds => ds.path === instrPath || ds.name === this.instructionsFilePath);\n    }\n    get stepsWithMeta() {\n      return this.instructions.map((step, i) => ({\n        ...step,\n        index: i\n      }));\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor2, this);\n      _initializerDefineProperty(this, \"instructions\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor5, this);\n      _defineProperty(this, \"instructionTemplates\", _aiInstructionTemplates.default);\n      _defineProperty(this, \"_loadedInstrUpdatedAt\", null);\n      this.loadInstructions();\n    }\n    _notifyCount() {\n      this.args.onCountChanged?.(this.instructions.length || 0);\n    }\n    onScriptUpdated() {\n      const updated = this.realtimeService.scriptUpdates?.find(u => u.id === this.args.script?.id);\n      if (!updated?.dataStores) return;\n      const changed = this.findInstrDataStore(updated.dataStores);\n      const wasDeleted = this._loadedInstrUpdatedAt && !changed;\n      const wasUpdated = changed && changed.updatedAt !== this._loadedInstrUpdatedAt;\n      if (wasDeleted || wasUpdated) {\n        this.loadInstructions();\n      }\n    }\n    async loadInstructions() {\n      try {\n        const data = await this.api.testScenarios.getInstructions(this.args.script.id);\n        if (data && data.length > 0) {\n          this.instructions = data.map(i => ({\n            title: i.title || '',\n            contents: i.contents || ''\n          }));\n        }\n        this._loadedInstrUpdatedAt = this.findInstrDataStore(this.args.script?.dataStores)?.updatedAt ?? null;\n      } catch (e) {\n        console.error('Failed to load instructions:', e);\n      } finally {\n        this.isLoading = false;\n        this._notifyCount();\n      }\n    }\n    _save() {\n      (0, _runloop.debounce)(this, this._doSave, 1000);\n    }\n    async _doSave() {\n      if (this.isDestroyed || this.isDestroying) return;\n      this.isSaving = true;\n      try {\n        await this.api.testScenarios.saveInstructions(this.args.script.id, this.instructions);\n      } catch (e) {\n        console.error('Failed to save instructions:', e);\n      } finally {\n        if (!this.isDestroyed && !this.isDestroying) {\n          this.isSaving = false;\n        }\n      }\n    }\n    applySortable() {\n      if (this.args.readonly) return;\n      const $container = $('.instructions-sortable');\n      this.destroySortable();\n      $container.sortable({\n        handle: '.instruction-drag-handle',\n        items: '.instruction-item',\n        axis: 'y',\n        placeholder: 'instruction-item-placeholder',\n        forcePlaceholderSize: true,\n        stop: () => {\n          const indices = $container.sortable('toArray', {\n            attribute: 'data-step-index'\n          });\n          const reordered = indices.map(idx => this.instructions[parseInt(idx, 10)]);\n          this.instructions = reordered;\n          this._save();\n        }\n      });\n    }\n    onInstructionsChange() {\n      if (!this.args.readonly) {\n        this.applySortable();\n      }\n    }\n    destroySortable() {\n      const $container = $('.instructions-sortable');\n      if ($container.data('ui-sortable')) {\n        $container.sortable('destroy');\n      }\n    }\n    addStep(template) {\n      const step = template && template.contents ? {\n        title: template.title,\n        contents: template.contents\n      } : {\n        title: '',\n        contents: ''\n      };\n      this.instructions = [...this.instructions, step];\n      this._notifyCount();\n      this._save();\n    }\n    removeStep(index) {\n      if (this.instructions.length <= 1) return;\n      this.instructions = this.instructions.filter((_, i) => i !== index);\n      this._notifyCount();\n      this._save();\n    }\n    updateTitle(index, event) {\n      const updated = [...this.instructions];\n      updated[index] = {\n        ...updated[index],\n        title: event.target.value\n      };\n      this.instructions = updated;\n      this._save();\n    }\n    updateContents(index, event) {\n      const updated = [...this.instructions];\n      updated[index] = {\n        ...updated[index],\n        contents: event.target.value\n      };\n      this.instructions = updated;\n      this._save();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"instructions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [{\n        title: '',\n        contents: ''\n      }];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onScriptUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onScriptUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadInstructions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadInstructions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"applySortable\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"applySortable\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInstructionsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInstructionsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addStep\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addStep\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeStep\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeStep\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTitle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTitle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateContents\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateContents\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioAiInstructionsComponent);\n});","define(\"@testable/shared-ui/components/scenario/ai/uploaded-files\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@ember/object\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/data-store-utils\", \"@testable/shared-ui/utils/scenario\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _trackedBuiltIns, _object, _service, _runloop, _lib, _dataStoreUtils, _scenario, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/data-store-utils\",0,\"@testable/shared-ui/utils/scenario\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel files-panel\"\n    {{did-update this._onContentDiff this.realtimeService.dataStoreContentDiffs}}\n    {{did-update this._onContentRefreshRequired this.realtimeService.dataStoreContentRefreshRequiredIds}}\n    {{did-update this._onDataStoreRemoved this.realtimeService.removedDataStoreIds}}\n    {{did-update this._onFolderDirectoryUpdated this.folderDirectoryData}}\n  >\n    <div id=\"files\">\n      <div id=\"files-container\" class=\"files-container\">\n        <div id=\"vs-sidebar\" class=\"vs-sidebar\">\n          <div class=\"icons\">\n            <div class=\"pull-left m-t-3\">\n              {{#if this.isUploading}}\n                <span class=\"alert alert-info p-5\">Uploading... <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /></span>\n              {{else if this.isSavingContent}}\n                <span class=\"alert alert-info p-5\">Saving... <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /></span>\n              {{else if this.isDeleting}}\n                <span class=\"alert alert-warning p-5\">Deleting... <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /></span>\n              {{/if}}\n            </div>\n            <div class=\"pull-right\">\n              <label class=\"btn btn-icon btn-circle text-primary ms-0 {{if this.isUploading 'disabled'}}\" title=\"Upload File\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\">\n                <Ui::Icon @icon=\"fa fa-file-upload\" />\n                <input id=\"ai-uploaded-files-input\" type=\"file\" hidden {{on \"change\" this.uploadFile}} disabled={{or @readonly this.isUploading}}>\n              </label>\n              <input id=\"ai-uploaded-folder-input\" type=\"file\" webkitdirectory multiple hidden {{on \"change\" this.uploadFolder}} disabled={{or @readonly this.isUploading}}>\n  \n              {{#unless @readonly}}\n                <Ui::Icon @icon=\"fa fa-folder-plus\" {{on \"click\" (fn this.uploadFolderInDirectory (hash path=\"/\"))}}\n                  class=\"btn btn-icon btn-circle text-primary\"\n                  data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  role=\"button\" title=\"Upload Folder\" />\n  \n                <Ui::Icon @icon=\"fa fa-file\" {{on \"click\" (fn this.setInputType \"createFile\")}}\n                  class=\"btn btn-icon btn-circle text-primary\"\n                  data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  role=\"button\" title=\"New File\" />\n  \n                <Ui::Icon @icon=\"fa fa-folder\" {{on \"click\" (fn this.setInputType \"createFolder\")}}\n                  class=\"btn btn-icon btn-circle text-primary\"\n                  data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  role=\"button\" title=\"New Folder\" />\n              {{/unless}}\n  \n              {{#if this.uploadedDataStores.length}}\n                <a target=\"_blank\" href=\"{{this.filesDownloadUrl}}\"\n                  class=\"btn btn-icon btn-circle text-primary ms-0\"\n                  data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  title=\"Download All Files\"\n                  rel=\"noopener noreferrer\">\n                  <Ui::Icon @icon=\"fa fa-download\" />\n                </a>\n              {{/if}}\n            </div>\n          </div>\n  \n          <p class=\"text-muted small mx-2 mb-2\">Upload files to reference in your instructions using <code>${__readcsv(file.csv,[col],[next|random|index])}</code></p>\n  \n          <ul class=\"file-list text-truncate\">\n            <Ui::FolderDirectory\n              @data={{this.folderDirectoryData}}\n              @openFile={{this.openFile}}\n              @inputAction={{this.inputAction}}\n              @deleteFile={{this.deleteFile}}\n              @deleteFolder={{this.deleteFolder}}\n              @addDragDropFolder={{this.noop}}\n              @uploadFileInDirectory={{this.uploadFileInDirectory}}\n              @uploadFolderInDirectory={{this.uploadFolderInDirectory}}\n              @readonly={{@readonly}}\n              @actionType={{this.actionType}}\n              @updateInputType={{this.setInputType}}\n            />\n          </ul>\n        </div>\n  \n        <div class=\"split-bar\" {{on \"mousedown\" this.resizeContent}}></div>\n  \n        <div class=\"editor-container\">\n          <div id=\"tabs\" class=\"tabs d-flex\">\n            {{#each this.loadedFiles as |file|}}\n              <span class=\"{{if file.status \"selected-file\"}}\" {{on \"click\" (fn this.openFile file)}}>\n                <span class=\"file-name\">{{file.name}}</span>\n                <span class=\"file-close\" {{on \"click\" (fn this.closeFile file.id)}}>\n                  <Ui::Icon class=\"stats-icon\" @icon=\"ms-1 fa fa-times\" />\n                </span>\n              </span>\n            {{/each}}\n          </div>\n  \n          <div id=\"editor-instance\">\n            {{#if this.loadingFileContents}}\n              <div class=\"text\">Loading file...</div>\n            {{else if (eq this.aceEditor.fileType \"image\")}}\n              <img src=\"{{this.aceEditor.url}}\" alt=\"\" role=\"none\">\n            {{else if (or (eq this.aceEditor.fileType \"download\") (gt this.aceEditor.size 1048575))}}\n              <div class=\"text\">\n                <p>\n                  <a href=\"{{this.aceEditor.url}}\" target=\"_blank\">Download</a> this file to see its contents\n                </p>\n              </div>\n            {{else if this.showEditorInstance}}\n              <Ui::AceEditor\n                @id=\"uploadedFile{{this.aceEditor.id}}\"\n                @editorInstance={{this.aceEditor}}\n                @code={{this.aceEditor.code}}\n                @type={{this.aceEditor.type}}\n                @style={{this.aceEditor.style}}\n                @readonly={{@readonly}}\n                @codeChangedQuiet={{this.updateFileContent}}\n                @mode={{this.aceEditor.mode}}\n              />\n            {{else if (not this.editorInstance)}}\n              <div class=\"text\">Select a file to view...</div>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"panel files-panel\\\"],[4,[38,1],[[30,0,[\\\"_onContentDiff\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreContentDiffs\\\"]]],null],[4,[38,1],[[30,0,[\\\"_onContentRefreshRequired\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreContentRefreshRequiredIds\\\"]]],null],[4,[38,1],[[30,0,[\\\"_onDataStoreRemoved\\\"]],[30,0,[\\\"realtimeService\\\",\\\"removedDataStoreIds\\\"]]],null],[4,[38,1],[[30,0,[\\\"_onFolderDirectoryUpdated\\\"]],[30,0,[\\\"folderDirectoryData\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,1,\\\"files\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,1,\\\"files-container\\\"],[14,0,\\\"files-container\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,1,\\\"vs-sidebar\\\"],[14,0,\\\"vs-sidebar\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"icons\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"pull-left m-t-3\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isUploading\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"alert alert-info p-5\\\"],[12],[1,\\\"Uploading... \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isSavingContent\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"alert alert-info p-5\\\"],[12],[1,\\\"Saving... \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isDeleting\\\"]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"alert alert-warning p-5\\\"],[12],[1,\\\"Deleting... \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[13],[1,\\\"\\\\n            \\\"]],[]],null]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[\\\"btn btn-icon btn-circle text-primary ms-0 \\\",[52,[30,0,[\\\"isUploading\\\"]],\\\"disabled\\\"]]]],[14,\\\"title\\\",\\\"Upload File\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-file-upload\\\"]],null],[1,\\\"\\\\n              \\\"],[11,\\\"input\\\"],[24,1,\\\"ai-uploaded-files-input\\\"],[24,\\\"hidden\\\",\\\"\\\"],[16,\\\"disabled\\\",[28,[37,7],[[30,1],[30,0,[\\\"isUploading\\\"]]],null]],[24,4,\\\"file\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"uploadFile\\\"]]],null],[12],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[24,1,\\\"ai-uploaded-folder-input\\\"],[24,\\\"webkitdirectory\\\",\\\"\\\"],[24,\\\"multiple\\\",\\\"\\\"],[24,\\\"hidden\\\",\\\"\\\"],[16,\\\"disabled\\\",[28,[37,7],[[30,1],[30,0,[\\\"isUploading\\\"]]],null]],[24,4,\\\"file\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"uploadFolder\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"              \\\"],[8,[39,4],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"Upload Folder\\\"],[4,[38,8],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"uploadFolderInDirectory\\\"]],[28,[37,11],null,[[\\\"path\\\"],[\\\"/\\\"]]]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-folder-plus\\\"]],null],[1,\\\"\\\\n\\\\n              \\\"],[8,[39,4],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"New File\\\"],[4,[38,8],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"setInputType\\\"]],\\\"createFile\\\"],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\"\\\\n\\\\n              \\\"],[8,[39,4],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"New Folder\\\"],[4,[38,8],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"setInputType\\\"]],\\\"createFolder\\\"],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-folder\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"uploadedDataStores\\\",\\\"length\\\"]],[[[1,\\\"              \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"filesDownloadUrl\\\"]]]]],[14,0,\\\"btn btn-icon btn-circle text-primary ms-0\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"title\\\",\\\"Download All Files\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,0,\\\"text-muted small mx-2 mb-2\\\"],[12],[1,\\\"Upload files to reference in your instructions using \\\"],[10,\\\"code\\\"],[12],[1,\\\"${__readcsv(file.csv,[col],[next|random|index])}\\\"],[13],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"file-list text-truncate\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@data\\\",\\\"@openFile\\\",\\\"@inputAction\\\",\\\"@deleteFile\\\",\\\"@deleteFolder\\\",\\\"@addDragDropFolder\\\",\\\"@uploadFileInDirectory\\\",\\\"@uploadFolderInDirectory\\\",\\\"@readonly\\\",\\\"@actionType\\\",\\\"@updateInputType\\\"],[[30,0,[\\\"folderDirectoryData\\\"]],[30,0,[\\\"openFile\\\"]],[30,0,[\\\"inputAction\\\"]],[30,0,[\\\"deleteFile\\\"]],[30,0,[\\\"deleteFolder\\\"]],[30,0,[\\\"noop\\\"]],[30,0,[\\\"uploadFileInDirectory\\\"]],[30,0,[\\\"uploadFolderInDirectory\\\"]],[30,1],[30,0,[\\\"actionType\\\"]],[30,0,[\\\"setInputType\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[11,0],[24,0,\\\"split-bar\\\"],[4,[38,8],[\\\"mousedown\\\",[30,0,[\\\"resizeContent\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"editor-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"tabs\\\"],[14,0,\\\"tabs d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"loadedFiles\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[11,1],[16,0,[29,[[52,[30,2,[\\\"status\\\"]],\\\"selected-file\\\"]]]],[4,[38,8],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"openFile\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"file-name\\\"],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n              \\\"],[11,1],[24,0,\\\"file-close\\\"],[4,[38,8],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"closeFile\\\"]],[30,2,[\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,4],[[24,0,\\\"stats-icon\\\"]],[[\\\"@icon\\\"],[\\\"ms-1 fa fa-times\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,1,\\\"editor-instance\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingFileContents\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"Loading file...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,19],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"image\\\"],null],[[[1,\\\"            \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"aceEditor\\\",\\\"url\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,7],[[28,[37,19],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"download\\\"],null],[28,[37,21],[[30,0,[\\\"aceEditor\\\",\\\"size\\\"]],1048575],null]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,\\\"\\\\n                \\\"],[10,3],[15,6,[29,[[30,0,[\\\"aceEditor\\\",\\\"url\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"Download\\\"],[13],[1,\\\" this file to see its contents\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"showEditorInstance\\\"]],[[[1,\\\"            \\\"],[8,[39,22],null,[[\\\"@id\\\",\\\"@editorInstance\\\",\\\"@code\\\",\\\"@type\\\",\\\"@style\\\",\\\"@readonly\\\",\\\"@codeChangedQuiet\\\",\\\"@mode\\\"],[[29,[\\\"uploadedFile\\\",[30,0,[\\\"aceEditor\\\",\\\"id\\\"]]]],[30,0,[\\\"aceEditor\\\"]],[30,0,[\\\"aceEditor\\\",\\\"code\\\"]],[30,0,[\\\"aceEditor\\\",\\\"type\\\"]],[30,0,[\\\"aceEditor\\\",\\\"style\\\"]],[30,1],[30,0,[\\\"updateFileContent\\\"]],[30,0,[\\\"aceEditor\\\",\\\"mode\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,23],[[30,0,[\\\"editorInstance\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"Select a file to view...\\\"],[13],[1,\\\"\\\\n          \\\"]],[]],null]],[]]]],[]]]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@readonly\\\",\\\"file\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"label\\\",\\\"input\\\",\\\"or\\\",\\\"on\\\",\\\"unless\\\",\\\"fn\\\",\\\"hash\\\",\\\"a\\\",\\\"p\\\",\\\"code\\\",\\\"ul\\\",\\\"ui/folder-directory\\\",\\\"each\\\",\\\"-track-array\\\",\\\"eq\\\",\\\"img\\\",\\\"gt\\\",\\\"ui/ace-editor\\\",\\\"not\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ai/uploaded-files.hbs\",\n    \"isStrictMode\": false\n  });\n  function normalizeRelativePath(path) {\n    return String(path || '').replace(/^\\/+/, '').replace(/\\/+$/, '');\n  }\n  const DOWNLOAD_EXTS = ['doc', 'docx', 'ppt', 'pdf', 'gif', 'mp3', 'mp4', 'exe', 'rar', 'jar', 'zip', 'xls', 'xlsx'];\n  const IMAGE_EXTS = ['jpg', 'jpeg', 'png'];\n  const ACE_MODES = ['abap', 'abc', 'ada', 'alda', 'applescript', 'aql', 'asl', 'c9search', 'cirru', 'coffee', 'csp', 'css', 'curly', 'd', 'dart', 'diff', 'django', 'dot', 'ejs', 'elm', 'fsl', 'ftl', 'gcode', 'gitignore', 'glsl', 'groovy', 'haml', 'hjson', 'html', 'ini', 'io', 'jack', 'jade', 'java', 'json', 'json5', 'jsoniq', 'jsp', 'jssm', 'jsx', 'less', 'liquid', 'lisp', 'lsl', 'lua', 'lucene', 'mask', 'matlab', 'mel', 'mixal', 'mysql', 'nginx', 'nim', 'nix', 'nsis', 'pgsql', 'php', 'pig', 'praat', 'prisma', 'properties', 'qml', 'r', 'rdoc', 'red', 'redshift', 'rhtml', 'rst', 'sass', 'scad', 'scala', 'scss', 'sh', 'sjs', 'slim', 'snippets', 'space', 'sparql', 'sql', 'svg', 'swift', 'tcl', 'tex', 'textile', 'toml', 'tsx', 'twig', 'vala', 'xml', 'zeek'];\n  const ACE_MODES_NONSTANDARD = [{\n    mode: 'markdown',\n    ext: ['md', 'mdx']\n  }, {\n    mode: 'javascript',\n    ext: ['js', 'cjs', 'mjs']\n  }, {\n    mode: 'typescript',\n    ext: ['ts']\n  }, {\n    mode: 'python',\n    ext: ['py']\n  }, {\n    mode: 'ruby',\n    ext: ['rb']\n  }, {\n    mode: 'golang',\n    ext: ['go']\n  }, {\n    mode: 'plain_text',\n    ext: ['txt', 'csv', 'tsv', 'log']\n  }];\n  let ScenarioAiUploadedFilesComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class ScenarioAiUploadedFilesComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isUploading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"editorInstance\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadedFiles\", _descriptor5, this);\n      _initializerDefineProperty(this, \"loadingFileContents\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showEditorInstance\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isSavingContent\", _descriptor8, this);\n      _initializerDefineProperty(this, \"isDeleting\", _descriptor9, this);\n      _initializerDefineProperty(this, \"actionType\", _descriptor0, this);\n      _defineProperty(this, \"_remoteContent\", null);\n      _defineProperty(this, \"_lastViewingDataStoreIds\", undefined);\n      _defineProperty(this, \"_leftDivWidth\", null);\n      _defineProperty(this, \"_handleMouseMove\", null);\n      _defineProperty(this, \"_handleMouseUp\", null);\n      _defineProperty(this, \"_uploadFolderBasePath\", null);\n    }\n    get filesDownloadUrl() {\n      return _lib.default.toUrl('/scripts/' + this.args.script?.id + '/data-stores/download');\n    }\n    setInputType(val) {\n      this.actionType = val;\n    }\n    _onContentDiff() {\n      _dataStoreUtils.default.handleContentDiff(this.realtimeService.dataStoreContentDiffs, this.loadedFiles, (file, content) => this._setContentFromRemote(file, content), file => this._refetchFileContent(file));\n    }\n    _onContentRefreshRequired() {\n      _dataStoreUtils.default.handleContentRefreshRequired(this.realtimeService.dataStoreContentRefreshRequiredIds, this.editorInstance, file => this._refetchFileContent(file));\n    }\n    _onFolderDirectoryUpdated() {\n      if (this.editorInstance?.id) {\n        this._setSelectedFile(this.folderDirectoryData, this.editorInstance.id);\n      }\n    }\n    _onDataStoreRemoved() {\n      const ids = this.realtimeService.removedDataStoreIds;\n      if (!ids?.length) return;\n      const deletedIds = this.loadedFiles.filter(f => ids.includes(f.id)).map(f => f.id);\n      if (!deletedIds.length) return;\n      deletedIds.forEach(id => this.closeFile(id));\n    }\n    _refetchFileContent(file) {\n      _dataStoreUtils.default.refetchFileContent(this.api, file, (f, c) => this._setContentFromRemote(f, c));\n    }\n    _updateViewingState() {\n      const ids = this.loadedFiles.filter(f => typeof f.id === 'number').map(f => f.id);\n      const newViewingIds = ids.length ? ids.join(',') : null;\n      if (this._lastViewingDataStoreIds !== newViewingIds) {\n        this._lastViewingDataStoreIds = newViewingIds;\n        this.realtimeService.updateViewingState({\n          viewingScriptId: this.args.script?.id,\n          viewingDataStoreIds: newViewingIds\n        });\n      }\n    }\n    _setContentFromRemote(file, content) {\n      const loadedFile = this.loadedFiles.find(f => f.id === file.id);\n      if (loadedFile) loadedFile.code = content;\n      if (this.editorInstance?.id === file.id) {\n        this._remoteContent = content;\n        this.editorInstance = {\n          ...this.editorInstance,\n          code: content\n        };\n      }\n    }\n    get instructionsFilePath() {\n      return _scenario.default.getInstructionsFilePath(this.args.script);\n    }\n    get uploadedDataStores() {\n      const dataStores = this.args.script?.dataStores;\n      if (!dataStores) return [];\n      const instructionsPath = normalizeRelativePath(this.instructionsFilePath);\n      return dataStores.filter(ds => {\n        const p = normalizeRelativePath(ds.path || '');\n        if (!p) return false;\n        return !p.startsWith('generated/') && p !== instructionsPath;\n      });\n    }\n    get folderDirectoryData() {\n      const root = {\n        id: 'base',\n        name: '/',\n        isFolder: true,\n        path: '/',\n        baseFolder: true,\n        isClosed: false,\n        readOnly: true,\n        children: {}\n      };\n      this.uploadedDataStores.forEach(ds => {\n        const normalizedPath = normalizeRelativePath(ds.path || ds.name);\n        const parts = normalizedPath.split('/').filter(Boolean);\n        let current = root;\n        // Walk/create intermediate folder nodes\n        parts.slice(0, -1).forEach((part, i) => {\n          if (!current.children[part]) {\n            const folderPath = '/' + parts.slice(0, i + 1).join('/');\n            const existing = this.uploadedDataStores.find(d => normalizeRelativePath(d.path || '') === parts.slice(0, i + 1).join('/') && d.isFolder);\n            current.children[part] = {\n              ...(existing || {}),\n              id: existing?.id || 'folder-' + folderPath,\n              name: part,\n              isFolder: true,\n              path: folderPath,\n              isClosed: false,\n              children: {}\n            };\n          }\n          current = current.children[part];\n        });\n        // Place the item itself\n        const lastName = parts[parts.length - 1];\n        if (lastName && !current.children[lastName]) {\n          current.children[lastName] = {\n            ...ds,\n            path: normalizedPath,\n            isFolder: !!ds.isFolder,\n            fileType: ds.isFolder ? 'folder' : this._getFileType(ds.name, ds.fileType),\n            isClosed: false,\n            children: ds.isFolder ? {} : undefined\n          };\n        }\n      });\n      const toArray = node => {\n        return Object.values(node.children).map(child => {\n          if (child.isFolder) {\n            return new _trackedBuiltIns.TrackedObject({\n              ...child,\n              children: toArray(child)\n            });\n          }\n          return new _trackedBuiltIns.TrackedObject(child);\n        });\n      };\n      return [new _trackedBuiltIns.TrackedObject({\n        ...root,\n        children: toArray(root)\n      })];\n    }\n    get aceEditor() {\n      if (!this.editorInstance?.name) return;\n      const ext = this.editorInstance.name.split('.').pop();\n      const style = 'overflow-x: auto; min-height: 400px; height: calc(100vh - 390px);';\n      const mode = 'ace/mode/' + this._getMode(ext);\n      return {\n        ...this.editorInstance,\n        type: 'main',\n        style,\n        mode,\n        ext\n      };\n    }\n    _getFileType(name, type) {\n      if (type) return type;\n      const ext = name.split('.').pop();\n      return IMAGE_EXTS.includes(ext) ? 'image' : DOWNLOAD_EXTS.includes(ext) ? 'download' : 'file';\n    }\n    _getMode(ext) {\n      if (ACE_MODES.includes(ext)) return ext;\n      return ACE_MODES_NONSTANDARD.find(m => m.ext.includes(ext))?.mode || 'text';\n    }\n    async openFile(...args) {\n      const file = args[args.length - 2];\n      if (!file || file.isFolder || this.editorInstance?.id === file.id || this.loadingFileContents) return;\n      this.showEditorInstance = false;\n      this.loadingFileContents = true;\n      const loadedFiles = this.loadedFiles;\n      let loadedFile = loadedFiles.find(lf => lf.id === file.id);\n      if (!loadedFile) {\n        let code = '';\n        if (file.fileType !== 'download' && file.size < 1048576) {\n          code = await this.api.dataStores.download(file);\n        }\n        loadedFile = new _trackedBuiltIns.TrackedObject({\n          ...file,\n          code\n        });\n        loadedFiles.push(loadedFile);\n      }\n      (0, _runloop.next)(this, () => {\n        this.loadedFiles = [...loadedFiles];\n        this.editorInstance = loadedFile;\n        this._updateViewingState();\n        this.loadedFiles.forEach(f => f.status = f.id === loadedFile.id);\n        this._setSelectedFile(this.folderDirectoryData, loadedFile.id);\n        this.loadingFileContents = false;\n        (0, _runloop.later)(() => {\n          this.showEditorInstance = Boolean(loadedFile.id && loadedFile.size < 1048576 && !['image', 'download'].includes(this.aceEditor?.fileType));\n        }, 100);\n      });\n    }\n    closeFile(id) {\n      this.loadedFiles = this.loadedFiles.filter(f => f.id !== id);\n      if (this.editorInstance?.id === id) {\n        this.showEditorInstance = false;\n        (0, _runloop.next)(this, () => {\n          const nextFile = this.loadedFiles.length ? this.loadedFiles.slice(-1)[0] : null;\n          this.editorInstance = nextFile;\n          this._updateViewingState();\n          this.loadedFiles.forEach(f => f.status = f.id === nextFile?.id);\n          this._setSelectedFile(this.folderDirectoryData, nextFile?.id);\n          (0, _runloop.later)(() => {\n            this.showEditorInstance = Boolean(nextFile);\n          }, 100);\n        });\n      }\n    }\n    async updateFileContent(_type, content, {\n      id\n    }) {\n      if (this.editorInstance?.id !== id) return;\n      if (this._remoteContent !== null && this._remoteContent === content) {\n        this._remoteContent = null;\n        return;\n      }\n      this._remoteContent = null;\n      this.isSavingContent = true;\n      const loadedFile = this.loadedFiles.find(f => f.id === id);\n      if (loadedFile) loadedFile.code = content;\n      this.editorInstance = {\n        ...this.editorInstance,\n        code: content\n      };\n      try {\n        const loadedFile = this.loadedFiles.find(f => f.id === id);\n        const filePath = loadedFile.path?.startsWith('/') ? loadedFile.path : `/${loadedFile.path || loadedFile.name}`;\n        const result = await this.api.dataStores.updateContents(id, loadedFile.name, filePath, content);\n        this.args.onStoreUpdate(true, result.updatedAt);\n      } catch (error) {\n        console.error('Failed to save file:', error);\n      } finally {\n        this.isSavingContent = false;\n      }\n    }\n    async uploadFile(event) {\n      const file = event.target.files[0];\n      if (!file) return;\n      this.isUploading = true;\n      try {\n        const body = await this.api.dataStores.uploadFile(this.args.script?.id, file, file.name, '/' + file.name);\n        const uploadedFile = body.files[0];\n        const current = this.args.script?.dataStores || [];\n        if (!current.find(ds => ds.id === uploadedFile.id)) {\n          _.forEach(body.files, ds => _lib.default.addAuthToDataStore(ds));\n          const dataStores = _.sortBy(current.concat(body.files), ['name']);\n          this.args.onStoreUpdate(dataStores, uploadedFile.script.updatedAt);\n        }\n      } catch (error) {\n        console.error('Failed to upload file:', error);\n      } finally {\n        this.isUploading = false;\n        event.target.value = '';\n      }\n    }\n    async deleteFile(...args) {\n      const id = args[args.length - 1];\n      if (this.editorInstance?.id === id) {\n        this.closeFile(id);\n      }\n      this.isDeleting = true;\n      try {\n        const file = await this.api.dataStores.deleteFile(id);\n        const updated = (this.args.script?.dataStores || []).filter(ds => ds.id !== id);\n        this.args.onStoreUpdate(updated, file.script.updatedAt);\n      } finally {\n        this.isDeleting = false;\n      }\n    }\n    inputAction(...args) {\n      const obj = args[args.length - 1];\n      this[obj.actionType](obj);\n    }\n    async renameFile(selectedDir) {\n      const {\n        id,\n        name,\n        path\n      } = selectedDir;\n      const updatedPath = path.substring(0, path.lastIndexOf('/') + 1) + name;\n      try {\n        const response = await this.api.dataStores.updateRelativePaths(this.args.script?.id, [{\n          oldPath: path,\n          newPath: updatedPath\n        }]);\n        const file = response.files.find(fl => fl.id === id);\n        const ds = this.args.script?.dataStores?.find(ds => ds.id === id);\n        if (ds) {\n          ds.name = name;\n          ds.path = updatedPath;\n        }\n        this.loadedFiles = this.loadedFiles.map(f => f.id === id ? {\n          ...f,\n          name,\n          path: updatedPath\n        } : f);\n        if (this.editorInstance?.id === id) {\n          this.editorInstance = {\n            ...this.editorInstance,\n            name,\n            path: updatedPath\n          };\n        }\n        this.args.onStoreUpdate([...this.args.script?.dataStores], file.updatedAt);\n      } catch (e) {\n        console.log(e);\n      }\n    }\n    async renameFolder(selectedDir) {\n      const {\n        id,\n        name,\n        path\n      } = selectedDir;\n      const updatedPath = path.substring(0, path.lastIndexOf('/') + 1) + name;\n      try {\n        const response = await this.api.dataStores.updateRelativePaths(this.args.script?.id, [{\n          oldPath: path,\n          newPath: updatedPath\n        }]);\n        const file = response.files.find(fl => fl.id === id || fl.path.split('/' + fl.name)[0] === updatedPath);\n        this.args.onStoreUpdate(response.files, file.updatedAt);\n      } catch (e) {\n        console.log(e);\n      }\n    }\n    async createFile(fileData) {\n      const {\n        name,\n        path\n      } = fileData;\n      const newPath = `${path !== '/' ? path + '/' : '/'}${name}`;\n      this.isSavingContent = true;\n      try {\n        const file = await this.api.dataStores.create(this.args.script?.id, name, '', false, newPath);\n        _lib.default.addAuthToDataStore(file);\n        file.fileType = this._getFileType(file.name, file.fileType);\n        const current = this.args.script?.dataStores || [];\n        if (!current.find(ds => ds.id === file.id)) {\n          const dataStores = _.sortBy(current.concat([file]), ['name']);\n          this.args.onStoreUpdate(dataStores, file.script.updatedAt);\n        }\n        (0, _runloop.next)(this, () => this.openFile(file, null));\n      } finally {\n        this.isSavingContent = false;\n      }\n    }\n    async createFolder(fileData) {\n      const {\n        name,\n        path\n      } = fileData;\n      const newPath = `${path !== '/' ? path + '/' : '/'}${name}`;\n      this.isSavingContent = true;\n      try {\n        const file = await this.api.dataStores.create(this.args.script?.id, name, '', true, newPath);\n        _lib.default.addAuthToDataStore(file);\n        const current = this.args.script?.dataStores || [];\n        if (!current.find(ds => ds.id === file.id)) {\n          const dataStores = _.sortBy(current.concat([file]), ['name']);\n          this.args.onStoreUpdate(dataStores, file.script.updatedAt);\n        }\n      } finally {\n        this.isSavingContent = false;\n      }\n    }\n    uploadFileInDirectory() {\n      document.getElementById('ai-uploaded-files-input')?.click();\n    }\n    uploadFolderInDirectory(file) {\n      this._uploadFolderBasePath = file?.path !== '/' ? file?.path || '' : '';\n      document.getElementById('ai-uploaded-folder-input')?.click();\n    }\n    async uploadFolder(event) {\n      const files = Array.from(event.target.files || []);\n      if (!files.length) return;\n      this.isUploading = true;\n      try {\n        for (const file of files) {\n          const relativePath = file.webkitRelativePath || file.name;\n          const parts = relativePath.split('/');\n          const name = parts[parts.length - 1];\n          const base = this._uploadFolderBasePath ? `/${this._uploadFolderBasePath}` : '';\n          const filePath = `${base}/${relativePath}`;\n          const body = await this.api.dataStores.uploadFile(this.args.script?.id, file, name, filePath);\n          _.forEach(body.files, ds => _lib.default.addAuthToDataStore(ds));\n          const current = this.args.script?.dataStores || [];\n          const newFiles = body.files.filter(ds => !current.find(c => c.id === ds.id));\n          if (newFiles.length) {\n            const dataStores = _.sortBy(current.concat(newFiles), ['name']);\n            this.args.onStoreUpdate(dataStores, body.files[0]?.script?.updatedAt);\n          }\n        }\n      } catch (error) {\n        console.error('Failed to upload folder:', error);\n      } finally {\n        this.isUploading = false;\n        event.target.value = '';\n        this._uploadFolderBasePath = null;\n      }\n    }\n    resizeContent() {\n      this._leftDivWidth = document.getElementById('vs-sidebar')?.clientWidth || null;\n      const leftSpace = document.querySelector('#test-panel.panel-expand') ? 0 : 90;\n      const handleMouseMove = event => {\n        if (this._leftDivWidth !== null) {\n          let newWidth = this._leftDivWidth + (event.clientX - leftSpace - document.getElementById('files-container').offsetLeft - this._leftDivWidth);\n          if (newWidth < 290) newWidth = 290;else if (newWidth > 700) newWidth = 700;\n          document.getElementById('vs-sidebar').style.width = `${newWidth}px`;\n        }\n      };\n      const handleMouseUp = () => {\n        this._leftDivWidth = null;\n        document.removeEventListener('mousemove', this._handleMouseMove);\n        document.removeEventListener('mouseup', this._handleMouseUp);\n      };\n      this._handleMouseMove = handleMouseMove;\n      this._handleMouseUp = handleMouseUp;\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n    }\n    async deleteFolder(...args) {\n      const {\n        path\n      } = args[args.length - 1];\n      const folderPath = _lib.default.sanitizeFolderName(path);\n      this.isDeleting = true;\n      try {\n        if (folderPath === '/') {\n          // deleteAll would also wipe generated files — delete only uploaded files instead\n          await Promise.all(this.uploadedDataStores.map(ds => this.api.dataStores.deleteFile(ds.id)));\n          this.loadedFiles.forEach(f => this.closeFile(f.id));\n          this.args.onStoreUpdate((this.args.script?.dataStores || []).filter(ds => !this.uploadedDataStores.find(u => u.id === ds.id)), this.args.script?.updatedAt);\n        } else {\n          await this.api.dataStores.deleteFolder(this.args.script?.id, folderPath);\n          const folderNormalized = normalizeRelativePath(folderPath);\n          const prefix = folderNormalized + '/';\n          const updated = (this.args.script?.dataStores || []).filter(ds => {\n            const p = normalizeRelativePath(ds.path || ds.name);\n            return !p.startsWith(prefix) && p !== folderNormalized;\n          });\n          const deletedIds = (this.args.script?.dataStores || []).filter(ds => !updated.find(u => u.id === ds.id)).map(ds => ds.id);\n          deletedIds.forEach(id => this.closeFile(id));\n          this.args.onStoreUpdate(updated, this.args.script?.updatedAt);\n        }\n      } catch (error) {\n        console.error('Failed to delete folder:', error);\n      } finally {\n        this.isDeleting = false;\n      }\n    }\n    _setSelectedFile(tree, id) {\n      tree.forEach(node => {\n        node.selected = node.id === id;\n        if (node.children?.length) this._setSelectedFile(node.children, id);\n      });\n    }\n    noop() {}\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isUploading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"editorInstance\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadedFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"loadingFileContents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showEditorInstance\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isSavingContent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"isDeleting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"actionType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setInputType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setInputType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onContentDiff\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onContentDiff\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onContentRefreshRequired\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onContentRefreshRequired\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onFolderDirectoryUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onFolderDirectoryUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onDataStoreRemoved\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onDataStoreRemoved\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"folderDirectoryData\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"folderDirectoryData\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFileContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFileContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"inputAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"inputAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFileInDirectory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFileInDirectory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFolderInDirectory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFolderInDirectory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resizeContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resizeContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"noop\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"noop\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioAiUploadedFilesComponent);\n});","define(\"@testable/shared-ui/components/scenario/change-type-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/scenario\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _scenario, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/scenario\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"changeScenarioTypeModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Change Scenario Type</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          {{!-- begin panel --}}\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <Scenario::TypePicker @changeEligibleOnly={{true}}\n                                  @scenarioType={{this.selectedType}}\n                                  @disabledTypes={{this.disabledTypes}}\n                                  @scenarioTypeSelected={{this.updateScenarioType}} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"changeScenarioTypeModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Change Scenario Type\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,4],null,[[\\\"@changeEligibleOnly\\\",\\\"@scenarioType\\\",\\\"@disabledTypes\\\",\\\"@scenarioTypeSelected\\\"],[true,[30,0,[\\\"selectedType\\\"]],[30,0,[\\\"disabledTypes\\\"]],[30,0,[\\\"updateScenarioType\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"scenario/type-picker\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/change-type-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioChangeTypeModalComponent = _exports.default = (_class = class ScenarioChangeTypeModalComponent extends _component2.default {\n    get selectedType() {\n      return _.findKey(_scenario.default.scenarioTypes, v => v === this.args.scenarioType) || null;\n    }\n    get disabledTypes() {\n      return this.selectedType ? [this.selectedType] : [];\n    }\n    updateScenarioType(value) {\n      this.args.updateScenarioType(value);\n      $('#changeScenarioTypeModal').modal('hide');\n    }\n    didInsert() {\n      const _this = this;\n      $('#changeScenarioTypeModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#changeScenarioTypeModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"updateScenarioType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateScenarioType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioChangeTypeModalComponent);\n});","define(\"@testable/shared-ui/components/scenario/code\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/utils\", \"@testable/shared-ui/utils/environment\", \"@ember/runloop\", \"@testable/shared-ui/utils/templates/script-code-templates\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _utils, _environment, _runloop, _scriptCodeTemplates, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/utils\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/templates/script-code-templates\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    {{did-update this.fromMetadata @script.metadata}}\n    id=\"updateCodeScenarioForm{{@uniqueId}}\" as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source\n            <Ui::InfoIcon @content=\"Choose the source of the code that defines this scenario\" @placement=\"bottom\" />\n          </label>\n          <div class=\"row\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceType}}\n                          @placeholder=\"Please select a source...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.sourceTypeChanged}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType.id}} data-parsley-required=\"true\"\n              data-parsley-required-message=\"Please select a source type.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Language</label>\n          <div class=\"row\">\n            <Ui::PSelect @options={{this.languages}} @selected={{this.languageObj}}\n                          @placeholder=\"Please select a Language...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.updateLanguage}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Node Version</label>\n          <Ui::PSelect @options={{this.nodeVersions}} @selected={{this.nodeVersionSelected}} @disabled={{@readonly}} @onChange={{this.nodeVersionChanged}} as\n            |version|>\n            {{version.name}}\n          </Ui::PSelect>\n        </div>\n  \n      </Wrapper.Filters>\n  \n      <Wrapper.LeftPanel>\n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType.id 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @templates={{this.templates}}\n            @selectedTemplate={{this.templateSelected}}\n            @defaultFiles={{this.defaultFiles}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @defaultFileId={{this.defaultFileId}}\n            @model={{@script}}\n            @language={{this.language}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @updateContent={{this.updateContent}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor\n                @paramsConfig={{@script.paramsConfig}}\n                @readonly={{@script.readonly}}\n                @isSaving={{@isSaving}}\n                @uniqueId={{@uniqueId}} @infoText=\"Scenarios can declare parameters for which they expect the test configuration to\n                        provide a value. Parameters are then referenced within your code using params['myParamName'] or\n                        process.env.MYPARAMNAME syntax.\" @noteText=\"Scenarios can declare parameters for which they expect the test configuration to\n                        provide a value. Parameter values are passed as both environment variables (e.g. myParamName is\n                        passed as environment variable MYPARAMNAME) and as a <strong>params</strong> object (e.g.\n                        myParamName can be referenced as <strong>params['myParamName']</strong>).\"\n                @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <Forms::MaxDurationInput @labelClasses={{this.labelClasses}} @inputClasses={{this.inputClasses}}\n                @value={{this.maxDuration}} @onChange={{this.updateMaxDuration}} />\n  \n              <Forms::ResourcePartsInput\n                      @labelClasses={{this.labelClasses}}\n                      @inputClasses={{this.inputClasses}}\n                      @resourceParts={{this.resourceParts}}\n                      @resourceNameMappings={{this.resourceNameMappings}}\n                      @overrideOrgDefault={{this.overrideOrgDefault}}\n                      @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                      @onChange={{this.updateResourceParts}}\n                      @editable={{not @readonly}}\n              />\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Additional Setup Command\n                  <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Additional Setup Command\"\n                          @value={{this.additionalSetupCommand}} {{on \"change\" this.saveMeta}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Teardown Command\n                  <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Teardown Command\"\n                          @value={{this.teardownCommand}} {{on \"change\" this.saveMeta}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                        @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                        @placement=\"bottom\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.rootFolder}}\n                        {{on \"change\" this.updateRootFolder}} />\n                </div>\n              </div>\n              {{#if (eq this.sourceType.id 'upload')}}\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                          class=\"form-control\"\n                          placeholder=\"\"\n                          @value={{this.sourceRepositoryUrl}}\n                          {{on \"change\" this.saveMeta}} />\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                          class=\"form-control\"\n                          placeholder=\"\"\n                          @value={{this.sourceBranch}}\n                          {{on \"change\" this.saveMeta}} />\n                  </div>\n                </div>\n              {{/if}}\n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}} @repositoryUrl={{this.repositoryUrl}} @readonly={{@readonly}}\n                    @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}}\n                    data-parsley-required=\"true\" data-parsley-required-message=\"Please provide branch.\" {{on \"change\"\n                    this.saveMeta}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Main Code File</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Main Code File\" @value={{this.mainCodeFile}}\n                    data-parsley-required=\"true\" data-parsley-required-message=\"Please provide main code file to execute.\"\n                    {{on \"change\" this.saveMeta}} />\n                </div>\n              </div>\n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updateCodeScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"fromMetadata\\\"]],[30,2,[\\\"metadata\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source\\\\n          \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the source of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceType\\\"]],\\\"Please select a source...\\\",[30,3],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Language\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"languages\\\"]],[30,0,[\\\"languageObj\\\"]],\\\"Please select a Language...\\\",[30,3],[30,0,[\\\"updateLanguage\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Node Version\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"nodeVersions\\\"]],[30,0,[\\\"nodeVersionSelected\\\"]],[30,3],[30,0,[\\\"nodeVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[8]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,10],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@defaultFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@defaultFileId\\\",\\\"@model\\\",\\\"@language\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"templates\\\"]],[30,0,[\\\"templateSelected\\\"]],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,0,[\\\"defaultFileId\\\"]],[30,2],[30,0,[\\\"language\\\"]],[30,9],[30,0,[\\\"updateContent\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,12,[[28,[37,13],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,15],null,[[\\\"@paramsConfig\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@uniqueId\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,2,[\\\"readonly\\\"]],[30,11],[30,1],\\\"Scenarios can declare parameters for which they expect the test configuration to\\\\n                      provide a value. Parameters are then referenced within your code using params['myParamName'] or\\\\n                      process.env.MYPARAMNAME syntax.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to\\\\n                      provide a value. Parameter values are passed as both environment variables (e.g. myParamName is\\\\n                      passed as environment variable MYPARAMNAME) and as a <strong>params</strong> object (e.g.\\\\n                      myParamName can be referenced as <strong>params['myParamName']</strong>).\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n\\\\n            \\\"],[8,[39,17],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,18],[[30,3]],null]]],null],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Additional Setup Command\\\\n                \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Teardown Command\\\\n                \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,21],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,3],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide branch.\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Main Code File\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Main Code File\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide main code file to execute.\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"saveMeta\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"mainCodeFile\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,12,[[28,[37,13],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-update\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"eq\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"forms/max-duration-input\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\"on\\\",\\\"if\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/code.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioCode = _exports.default = (_class = class ScenarioCode extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"templates\", _scriptCodeTemplates.Options);\n      _initializerDefineProperty(this, \"language\", _descriptor, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor2, this);\n      _defineProperty(this, \"nodeVersions\", _environment.config.nodeVersions);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor4, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor5, this);\n      _defineProperty(this, \"defaultFileNames\", ['main', 'init', 'teardown']);\n      _defineProperty(this, \"sourceTypes\", [{\n        id: 'upload',\n        name: 'Upload'\n      }, {\n        id: 'vcs',\n        name: 'Version Control'\n      }]);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor6, this);\n      _initializerDefineProperty(this, \"nodeVersionSelected\", _descriptor7, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor8, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor9, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor0, this);\n      _initializerDefineProperty(this, \"mainCodeFile\", _descriptor1, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor10, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor11, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor12, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor13, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor14, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor15, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor16, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor17, this);\n      _defineProperty(this, \"languages\", [{\n        value: 'javascript',\n        name: 'JavaScript'\n      }, {\n        value: 'typescript',\n        name: 'TypeScript'\n      }]);\n      if (!this.args.script?.metadata) {\n        this._saveMetadata();\n      }\n      (0, _runloop.next)(this, () => this._fromMetadata());\n    }\n    get defaultFiles() {\n      const ext = this.language === 'javascript' ? 'js' : 'ts';\n      return this.sourceType?.id !== 'vcs' ? this.defaultFileNames.map(file => ({\n        id: file,\n        name: `${file}.${ext}`,\n        path: `/${file}.${ext}`,\n        type: file,\n        fileType: 'system',\n        isFolder: false,\n        code: this.args.script?.[file]\n      })) : [];\n    }\n    get defaultFileId() {\n      return this.defaultFiles[0]?.id;\n    }\n    get languageObj() {\n      return this.languages.find(ba => this.language === ba.value);\n    }\n    get metadata() {\n      const metadata = this.args.script?.metadata;\n      return (0, _utils.isEmpty)(metadata) ? _object.default.create({}) : _object.default.create(metadata);\n    }\n    updateContent(type, code) {\n      this.args.saveCode(type, code);\n    }\n    updateLanguage({\n      value\n    }) {\n      this.language = value;\n      this._saveMetadata();\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    templateSelected(editor, selection) {\n      let templateContent = this.language === 'javascript' ? _scriptCodeTemplates.TemplatesJS[selection.id] : _scriptCodeTemplates.TemplatesTS[selection.id];\n      editor.insert('\\n' + templateContent + '\\n');\n    }\n    nodeVersionChanged(selection) {\n      this.nodeVersionSelected = selection;\n      this._saveMetadata();\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this._saveMetadata();\n    }\n    sourceTypeChanged(selection) {\n      this.sourceType = selection;\n      this._saveMetadata();\n\n      // Need to improve it... (code re-usability and duplication)\n      (0, _runloop.next)(this, () => {\n        var parentElement = document.getElementById('codeTabNav');\n        var activeAnchor = parentElement.querySelector('a.active');\n        if (!activeAnchor) {\n          parentElement.firstElementChild.firstElementChild.click();\n        }\n      });\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this._saveMetadata();\n      }\n    }\n    updateMaxDuration(e) {\n      this.maxDuration = e.target.valueAsNumber;\n      this._saveMetadata();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this._saveMetadata();\n    }\n    saveMeta() {\n      this._saveMetadata();\n    }\n    _saveMetadata() {\n      if (this.args.saveMetadata) {\n        this.args.saveMetadata(this.toMetadata());\n      }\n    }\n    toMetadata() {\n      const metadata = {};\n      metadata.language = this.language;\n      metadata.sourceType = this.sourceType?.id;\n      metadata.nodeVersion = this.nodeVersionSelected?.id;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        if (this.branch) metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      if (metadata.sourceType !== 'upload') {\n        if (this.mainCodeFile) metadata.mainCodeFile = this.mainCodeFile;\n      }\n      metadata.maxDuration = this.maxDuration;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      const metadata = this.metadata;\n      if (metadata.language) {\n        this.language = metadata.language;\n      }\n      const sourceType = this.sourceTypes.filter(version => version.id === metadata.sourceType)[0];\n      this.sourceType = sourceType || this.sourceTypes[0];\n      const nodeVersion = this.nodeVersions.filter(version => version.id === metadata.nodeVersion)[0];\n      this.nodeVersionSelected = nodeVersion || this.nodeVersions[0];\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.mainCodeFile = metadata.mainCodeFile;\n      this.maxDuration = metadata.maxDuration;\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'javascript';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"mainCodeFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLanguage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLanguage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"templateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"templateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"nodeVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"nodeVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveMeta\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveMeta\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioCode);\n});","define(\"@testable/shared-ui/components/scenario/copy-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _lib, _server, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal\n          @onSubmit={{this.submit}}\n          @onHidden={{@modalClosed}}\n          @onShown={{this.onShow}}\n          as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">Copy Test Scenario</h4>\n    </Modal.header>\n    <Modal.body>\n      <form id=\"copyTestScriptForm\" {{on \"submit\" (fn this.submit Modal)}} data-parsley-trigger=\"focusout\">\n        <div class=\"form-group\">\n          <label>Name </label>\n          <Input @type=\"text\"\n                 class=\"form-control\"\n                 placeholder=\"Copied Test Scenario Name\"\n                 @value={{this.name}}\n                 autofocus={{true}}\n                 data-parsley-required=\"true\"\n                 data-parsley-required-message=\"New test scenario name is required\"\n          />\n        </div>\n  \n        <div class=\"form-group\">\n          <label>Organization </label>\n          <Ui::PSelect @options={{this.organizations}}\n                       @selected={{this.targetOrg}}\n                       @onChange={{this.targetOrgChange}} as |option|>\n            {{option.organization.name}}\n          </Ui::PSelect>\n        </div>\n  \n        <div class=\"form-group\">\n          <label>Test Case </label>\n          {{#if this.loadingTestCases}}\n            <br />\n            Loading test cases ...\n          {{else}}\n            <Ui::PSelect @options={{this.orgTestCases}}\n                         @selected={{this.targetTestCase}}\n                         @onChange={{this.testCaseChange}}\n                         @placeholder=\"Select test case to copy to ...\" as |option|>\n              <span class=\"semi-bold\">{{decode-test-case-name option.path}}</span>\n            </Ui::PSelect>\n  \n            <Input class=\"hidden\"\n                   disabled={{true}}\n                   @value={{this.targetTestCase.name}}\n                   data-parsley-required=\"true\"\n                   data-parsley-required-message=\"A test case is required\"\n            />\n          {{/if}}\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"normal\">\n            <Input @type=\"checkbox\" @checked={{this.copyConfs}} /> Copy all test configurations that run this scenario\n          </label>\n        </div>\n  \n        <div class=\"form-group\">\n          <div>\n            <button disabled={{this.submitInProgress}}\n                    type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>\n              {{if this.submitInProgress 'Processing...' 'Make Copy'}}\n            </strong></button>\n          </div>\n        </div>\n      </form>\n    </Modal.body>\n  </BsModal>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@onSubmit\\\",\\\"@onHidden\\\",\\\"@onShown\\\"],[[30,0,[\\\"submit\\\"]],[30,1],[30,0,[\\\"onShow\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Copy Test Scenario\\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,1,\\\"copyTestScriptForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,3],[\\\"submit\\\",[28,[37,4],[[30,0,[\\\"submit\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Name \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Copied Test Scenario Name\\\"],[16,\\\"autofocus\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"New test scenario name is required\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Organization \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"organizations\\\"]],[30,0,[\\\"targetOrg\\\"]],[30,0,[\\\"targetOrgChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,3,[\\\"organization\\\",\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[3]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Case \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingTestCases\\\"]],[[[1,\\\"          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          Loading test cases ...\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@placeholder\\\"],[[30,0,[\\\"orgTestCases\\\"]],[30,0,[\\\"targetTestCase\\\"]],[30,0,[\\\"testCaseChange\\\"]],\\\"Select test case to copy to ...\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,12],[[30,4,[\\\"path\\\"]]],null]],[13],[1,\\\"\\\\n          \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[39,7],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"A test case is required\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"targetTestCase\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"copyConfs\\\"]]]],null],[1,\\\" Copy all test configurations that run this scenario\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[52,[30,0,[\\\"submitInProgress\\\"]],\\\"Processing...\\\",\\\"Make Copy\\\"]],[1,\\\"\\\\n          \\\"],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"Modal\\\",\\\"option\\\",\\\"option\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"form\\\",\\\"on\\\",\\\"fn\\\",\\\"div\\\",\\\"label\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"br\\\",\\\"span\\\",\\\"decode-test-case-name\\\",\\\"button\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/copy-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioCopyModalComponent = _exports.default = (_class = class ScenarioCopyModalComponent extends _component2.default {\n    get orgTestCases() {\n      return this.testCases.filter(testCase => !testCase.isFolder);\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor, this);\n      _initializerDefineProperty(this, \"submitInProgress\", _descriptor2, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor3, this);\n      _initializerDefineProperty(this, \"name\", _descriptor4, this);\n      _initializerDefineProperty(this, \"targetOrg\", _descriptor5, this);\n      _initializerDefineProperty(this, \"testCases\", _descriptor6, this);\n      _initializerDefineProperty(this, \"targetTestCase\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loadingTestCases\", _descriptor8, this);\n      const userOrg = this.currentUser.orgs.filter(org => {\n        return org.organization.id === this.currentUser.org.id;\n      })[0];\n      this.targetOrg = userOrg;\n      this.testCases = _.sortBy(this.applicationState.applications, 'name');\n      let filteredCases = this.testCases.filter(i => i.id === this.args.testCase.id);\n      if (filteredCases.length) {\n        this.targetTestCase = filteredCases[0];\n      }\n    }\n    get organizations() {\n      return _.sortBy(this.currentUser.orgs, assoc => {\n        return assoc.organization.name.toUpperCase();\n      });\n    }\n    submit(Modal, e) {\n      this.submitInProgress = true;\n      e.preventDefault();\n      if ($('#copyTestScriptForm').parsley().validate()) {\n        const _this = this;\n        let params = {};\n        params.name = this.name;\n        params.targetTestCase = this.targetTestCase.id;\n        params.copyConfs = this.copyConfs ? true : false;\n        $.ajax({\n          method: 'POST',\n          url: _lib.default.toUrl('/scripts/' + _this.args.testScript.id + '/copy', params),\n          contentType: \"application/json; charset=utf-8\",\n          dataType: \"json\"\n        }).then(res => {\n          _this.submitInProgress = false;\n          _this.args.modalClosed(res);\n        }, () => {\n          _this.submitInProgress = false;\n        });\n      } else {\n        this.submitInProgress = false;\n      }\n    }\n    onShow() {\n      $('#copyTestScriptForm').parsley();\n    }\n    targetOrgChange(org) {\n      this.targetOrg = org;\n      let params = {\n        includeRunning: true,\n        includeLatestExecution: false\n      };\n      this.loadingTestCases = true;\n      _server.default.getTestCases(org.organization.id, params).then(result => {\n        this.testCases = _.sortBy(result.testCases, 'name');\n        this.targetTestCase = null;\n        this.loadingTestCases = false;\n      }, () => {\n        this.testCases = [];\n        this.targetTestCase = null;\n        this.loadingTestCases = false;\n      });\n    }\n    testCaseChange(testCase) {\n      this.targetTestCase = testCase;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"submitInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"targetOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"testCases\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"targetTestCase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loadingTestCases\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"submit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"submit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"targetOrgChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"targetOrgChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testCaseChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testCaseChange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioCopyModalComponent);\n});","define(\"@testable/shared-ui/components/scenario/device-dropdown\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group {{if (or (eq @device.displaySize 'custom') (eq @device.displaySize 'customDevice') @showFullInfo) 'p-b-0'}}\">\n    {{#if (or (not @slimVersion) @showLabel)}}\n      <label class=\"{{@labelClasses}}\">Device {{#if @labelInfo}}<Ui::InfoIcon\n                    @content=\"{{@labelInfo}}\"\n                    @placement=\"bottom\" />{{/if}}</label>\n    {{/if}}\n    <Ui::PSelect @options={{@deviceOptions}} @selected={{@device}}\n                 @placeholder=\"Please select a screen size ...\"\n                 @disabled={{@disabled}} @onChange={{@onchange}} as |option|>\n      {{option.name}}\n    </Ui::PSelect>\n    <Input class=\"hidden\"\n           disabled={{true}}\n           @value={{@device.displaySize}}\n           data-parsley-required=\"true\"\n           data-parsley-required-message=\"Please select a device.\"/>\n  \n  </div>\n  <div class=\"form-group\n              {{if (not-eq @device.displaySize 'customDevice') 'm-b-0'}}\n              {{if (not (or (eq @device.displaySize 'custom') (eq @device.displaySize 'customDevice') @showFullInfo)) 'hidden'}}\n              \">\n    <div class=\"row m-0 {{if @slimVersion '' 'm-b-10' }}\">\n      <div class=\"col {{if @slimVersion 'col-6 p-l-0' 'col-3 p-l-0'}} \">\n        <div class=\"input-group\">\n          <div class=\"input-group-prepend\"><span class=\"input-group-text\">Width</span></div>\n          <Input @type=\"number\" class=\"form-control\" @value={{@device.width}} placeholder=\"Width\"\n                 {{on \"change\" @saveAction}}\n                 data-parsley-required=\"true\"\n                 data-parsley-errors-container=\"#{{this.uuid}}-widthErrors\"\n                 data-parsley-required-message=\"Please provide screen width.\"/>\n          <div class=\"input-group-append\"><span class=\"input-group-text\">px</span></div>\n          <div id=\"{{this.uuid}}-widthErrors\"></div>\n        </div>\n      </div>\n      <div class=\"col {{if @slimVersion 'col-6 p-r-0 p-l-0' 'col-3 p-l-0'}} \">\n        <div class=\"input-group\">\n          <div class=\"input-group-prepend\"><span class=\"input-group-text\">Height</span></div>\n          <Input @type=\"number\" class=\"form-control\" @value={{@device.height}} placeholder=\"Height\"\n                 {{on \"change\" @saveAction}}\n                 data-parsley-required=\"true\"\n                 data-parsley-errors-container=\"#{{this.uuid}}-heightErrors\"\n                 data-parsley-required-message=\"Please provide screen height.\"/>\n          <div class=\"input-group-append\"><span class=\"input-group-text\">px</span></div>\n          <div id=\"{{this.uuid}}-heightErrors\"></div>\n        </div>\n      </div>\n  \n      <div class=\"col {{if @slimVersion 'col-12 p-0' 'col-6 p-l-0'}} \">\n        <div class=\"{{if (not (or @showFullInfo (eq @device.displaySize 'customDevice'))) 'hidden'}}\">\n          <div class=\"row m-0\">\n            <div class=\"col col-4 {{if @slimVersion 'p-l-0 p-r-0'}}\">\n              <div class=\"{{@inputClasses}} m-t-5\">\n                <label class=\"normal\" ><Input @type=\"checkbox\" @checked={{@device.isMobile}} {{on \"change\" (fn this.checkboxUpdated 'mobile')}} /> Mobile</label>\n              </div>\n            </div>\n            <div class=\"col col-4 {{if @slimVersion 'p-l-0 p-r-0'}}\">\n              <div class=\"{{@inputClasses}} m-t-5\">\n                <label class=\"normal\" ><Input @type=\"checkbox\" @checked={{@device.isTouch}} {{on \"change\" (fn this.checkboxUpdated 'touch')}} /> Touch</label>\n              </div>\n            </div>\n            <div class=\"col col-4 {{if @slimVersion 'p-l-0 p-r-0'}}\">\n              <div class=\"{{@inputClasses}} m-t-5\">\n                <label class=\"normal\" ><Input @type=\"checkbox\" @checked={{@device.isLandscape}} {{on \"change\" (fn this.checkboxUpdated 'landscape')}} /> Landscape</label>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n  \n    </div>\n    <div class=\"row m-0\">\n  \n      <div class=\"col {{if @slimVersion 'col-12 m-b-10 p-0' 'col-6 p-l-0'}} \">\n        <div class=\"{{if (not (or @showFullInfo (eq @device.displaySize 'customDevice'))) 'hidden'}}\">\n          <div class=\"input-group\">\n            <div class=\"input-group-prepend\"><span class=\"input-group-text\">User Agent</span></div>\n            <Input @type=\"text\" class=\"form-control\" @value={{@device.userAgent}} placeholder=\"User Agent\"\n                   {{on \"change\" @saveAction}}/>\n          </div>\n        </div>\n      </div>\n  \n      <div class=\"col {{if @slimVersion 'col-12 p-0' 'col-6 p-l-0'}}\">\n        <div class=\"{{if (not (or @showFullInfo (eq @device.displaySize 'customDevice'))) 'hidden'}}\">\n          <div class=\"input-group\">\n            <div class=\"input-group-prepend\"><span class=\"input-group-text\">Scale Factor</span></div>\n            <Input @type=\"number\" step=\"0.001\" class=\"form-control\" @value={{@device.scaleFactor}} placeholder=\"Scale Factor\"\n                   {{on \"change\" @saveAction}}\n                   data-parsley-required=\"true\"\n                   data-parsley-errors-container=\"#{{this.uuid}}-scaleFactorErrors\"\n                   data-parsley-required-message=\"Please provide scale factor.\"/>\n          </div>\n          <div id=\"{{this.uuid}}-scaleFactorErrors\"></div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"form-group \\\",[52,[28,[37,2],[[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"custom\\\"],null],[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null],[30,2]],null],\\\"p-b-0\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[28,[37,4],[[30,3]],null],[30,4]],null],[[[1,\\\"    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,5]]]],[12],[1,\\\"Device \\\"],[41,[30,6],[[[8,[39,6],null,[[\\\"@content\\\",\\\"@placement\\\"],[[29,[[30,6]]],\\\"bottom\\\"]],null]],[]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,7],[30,1],\\\"Please select a screen size ...\\\",[30,8],[30,9]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[1,[30,10,[\\\"name\\\"]]],[1,\\\"\\\\n  \\\"]],[10]]]]],[1,\\\"\\\\n  \\\"],[8,[39,8],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a device.\\\"]],[[\\\"@value\\\"],[[30,1,[\\\"displaySize\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,0,[29,[\\\"form-group\\\\n            \\\",[52,[28,[37,9],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null],\\\"m-b-0\\\"],\\\"\\\\n            \\\",[52,[28,[37,4],[[28,[37,2],[[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"custom\\\"],null],[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null],[30,2]],null]],null],\\\"hidden\\\"],\\\"\\\\n            \\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"row m-0 \\\",[52,[30,3],\\\"\\\",\\\"m-b-10\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"col \\\",[52,[30,3],\\\"col-6 p-l-0\\\",\\\"col-3 p-l-0\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"Width\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Width\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"uuid\\\"]],\\\"-widthErrors\\\"]]],[24,\\\"data-parsley-required-message\\\",\\\"Please provide screen width.\\\"],[4,[38,11],[\\\"change\\\",[30,11]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"width\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"px\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[[30,0,[\\\"uuid\\\"]],\\\"-widthErrors\\\"]]],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"col \\\",[52,[30,3],\\\"col-6 p-r-0 p-l-0\\\",\\\"col-3 p-l-0\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"Height\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Height\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"uuid\\\"]],\\\"-heightErrors\\\"]]],[24,\\\"data-parsley-required-message\\\",\\\"Please provide screen height.\\\"],[4,[38,11],[\\\"change\\\",[30,11]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"height\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"px\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[[30,0,[\\\"uuid\\\"]],\\\"-heightErrors\\\"]]],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"col \\\",[52,[30,3],\\\"col-12 p-0\\\",\\\"col-6 p-l-0\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[[52,[28,[37,4],[[28,[37,2],[[30,2],[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null]],null]],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"row m-0\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"col col-4 \\\",[52,[30,3],\\\"p-l-0 p-r-0\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,12],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,11],[\\\"change\\\",[28,[37,12],[[30,0,[\\\"checkboxUpdated\\\"]],\\\"mobile\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,1,[\\\"isMobile\\\"]]]],null],[1,\\\" Mobile\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"col col-4 \\\",[52,[30,3],\\\"p-l-0 p-r-0\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,12],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,11],[\\\"change\\\",[28,[37,12],[[30,0,[\\\"checkboxUpdated\\\"]],\\\"touch\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,1,[\\\"isTouch\\\"]]]],null],[1,\\\" Touch\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"col col-4 \\\",[52,[30,3],\\\"p-l-0 p-r-0\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,12],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],[[4,[38,11],[\\\"change\\\",[28,[37,12],[[30,0,[\\\"checkboxUpdated\\\"]],\\\"landscape\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,1,[\\\"isLandscape\\\"]]]],null],[1,\\\" Landscape\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row m-0\\\"],[12],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"col \\\",[52,[30,3],\\\"col-12 m-b-10 p-0\\\",\\\"col-6 p-l-0\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[[52,[28,[37,4],[[28,[37,2],[[30,2],[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null]],null]],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"User Agent\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"User Agent\\\"],[4,[38,11],[\\\"change\\\",[30,11]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,1,[\\\"userAgent\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"col \\\",[52,[30,3],\\\"col-12 p-0\\\",\\\"col-6 p-l-0\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[[52,[28,[37,4],[[28,[37,2],[[30,2],[28,[37,3],[[30,1,[\\\"displaySize\\\"]],\\\"customDevice\\\"],null]],null]],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group-prepend\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"Scale Factor\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,\\\"step\\\",\\\"0.001\\\"],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Scale Factor\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"uuid\\\"]],\\\"-scaleFactorErrors\\\"]]],[24,\\\"data-parsley-required-message\\\",\\\"Please provide scale factor.\\\"],[4,[38,11],[\\\"change\\\",[30,11]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"scaleFactor\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,1,[29,[[30,0,[\\\"uuid\\\"]],\\\"-scaleFactorErrors\\\"]]],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@device\\\",\\\"@showFullInfo\\\",\\\"@slimVersion\\\",\\\"@showLabel\\\",\\\"@labelClasses\\\",\\\"@labelInfo\\\",\\\"@deviceOptions\\\",\\\"@disabled\\\",\\\"@onchange\\\",\\\"option\\\",\\\"@saveAction\\\",\\\"@inputClasses\\\"],[\\\"div\\\",\\\"if\\\",\\\"or\\\",\\\"eq\\\",\\\"not\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"not-eq\\\",\\\"span\\\",\\\"on\\\",\\\"fn\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/device-dropdown.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioDeviceDropdownComponent = _exports.default = (_class = class ScenarioDeviceDropdownComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"uuid\", _descriptor, this);\n      this.uuid = (0, _emberUuid.v4)();\n    }\n    checkboxUpdated(field, val) {\n      let value = val.target.checked;\n      this.args.updateProperty(`is${_lib.default.ucFirst(field)}`, value);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"uuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"checkboxUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"checkboxUpdated\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioDeviceDropdownComponent);\n});","define(\"@testable/shared-ui/components/scenario/gatling\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/runloop\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/templates/script-code-templates\", \"@ember/template-factory\"], function (_exports, _component, _component2, _runloop, _object, _tracking, _lib, _environment, _scriptCodeTemplates, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/templates/script-code-templates\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updateGatlingScenarioForm{{@uniqueId}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.fromMetadata @script.metadata}}\n    {{did-update this.onSplitCsvsUpdated this.splitCsvs}}\n    as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source</label>\n          <div class=\"{{this.inputClasses}}\">\n  \n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceTypeObj}}\n                          @placeholder=\"Please select a source...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.updateSourceType}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType}} data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Must choose source for scenario.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">\n            Gatling Version\n            <Ui::InfoIcon\n                      @content=\"For version 3.11+ you can specify the version via your pom.xml or build.gradle depending on build tool.\n                      For earlier versions, Testable needs to know the version in advance.\"\n                      @placement=\"bottom\"/>\n          </label>\n          <div class=\"{{this.inputClasses}}\">\n  \n            <BsButtonGroup @disabled={{@readonly}} @value={{this.defaultGatlingVersion}} @type=\"radio\" @onChange={{this.updateGatlingVersionType}} as |bg|>\n              {{#each this.priorGatlingVersions as |version| }}\n                <bg.button @type=\"success\" @value={{version}} @size=\"sm\">{{version}}</bg.button>\n              {{/each}}\n            </BsButtonGroup>\n          </div>\n        </div>\n  \n        {{#if (eq this.defaultGatlingVersion this.preventedVersion)}}\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Build Tool</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.buildTools}} @selected={{this.buildToolObj}}\n                            @placeholder=\"Please select Build Tool...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updateBuildTool}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Build Args\n              <Ui::InfoIcon\n                      @content=\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"input-group\">\n              <div class=\"input-group-append\"><span class=\"input-group-text\">{{if (eq this.buildTool \"maven\") \"mvn\" \"gradle\"}}</span></div>\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Build Args\"\n                      @value={{this.buildToolArgs}}\n                      {{on \"change\" this.updateMetadata}} />\n            </div>\n          </div>\n  \n        {{else}}\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">&nbsp;</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.gatlingVersions}} @selected={{this.gatlingVersion}} @disabled={{@readonly}}\n                            @onChange={{this.updateGatlingVersion}} as |version|>\n                {{version}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Simulation Class Name(s) <Ui::InfoIcon\n                    @content=\"<p>One or more simulation class names to run (full name including package name).\n                    Multiple names should be comma separated.</p><p>If a single simulation is provided it will be\n                    passed as the -s parameter to Gatling.</p><p>If multiple are provided in a comma-separated list\n                    they will be distributed across the Gatling instances that are part of a test configuration.\n                    For example if you have two simulations and set the value to\n                    'com.mypackage.Simulation1,com.mypackage.Simulation2' and a test configuration with Gatling\n                    Instances = 4, then two of the Gatling instances will run com.mypackage.Simulation1 and two\n                    will run com.mypackage.Simulation2. If you have less Gatling instances in your test\n                    configuration than simulations listed in this field, then not all the simulations will be\n                    run.</p><p>If left blank Gatling will run all simulations it finds.</p>\"\n                    @isHtml={{true}} /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\" class=\"form-control\" placeholder=\"Simulation Class Name(s)\" @value={{this.simulationName}}\n                      {{on \"change\" this.updateMetadata}} />\n            </div>\n          </div>\n  \n        {{/if}}\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Concurrent Users\n            <Ui::InfoIcon @isHtml={{true}}\n            @content=\"The number of concurrent users will be available as the system property <strong>users</strong> within\n              your simulation. Access it via <strong>Integer.getInteger('users')</strong> in your simulation code.\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Input @type=\"number\" class=\"form-control\" placeholder=\"Concurrent Users per Gatling Instance\" @value={{this.users}}\n                    {{on \"change\" this.updateMetadata}} data-parsley-required=\"true\" data-parsley-min=\"1\"\n                    data-parsley-required-message=\"Concurrent users must be specified.\"\n                    data-parsley-min-message=\"Minimum concurrent users is 1.\"  />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Java Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.javaVersions}} @selected={{this.javaVersionSelected}}\n                          @disabled={{@readonly}}\n                          @onChange={{this.javaVersionChanged}} as |version|>\n              {{version.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @defaultFileId={{this.defaultFile.id}}\n            @model={{@script}}\n            @templates={{this.templates}}\n            @selectedTemplate={{this.templateSelected}}\n            @generateExampleFiles={{this.initGatlingTemplate}}\n            @enableGenerateExample={{this.shouldEditFilesOnPage}}\n            @generatingFiles={{this.generatingFiles}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                      @uniqueId={{@uniqueId}}\n                      @readonly={{@script.readonly}}\n                      @isSaving={{@isSaving}}\n                      @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are passed into the Gatling runtime as system properties.\"\n                      @noteText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your Gatling simulation code as system properties. For example, integer parameter <strong>Abc</strong> is available as <strong>Integer.getInteger('Abc')</strong>.\"\n                      @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <Scenario::Ui::AdditionalPanelWrapper @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                <:content>\n                  <div class=\"form-group\">\n                    <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.splitCsvs}} /> Split CSVs across test runners</label>\n                    <Ui::InfoIcon @content={{this.splitCsvText}} @isHtml={{true}} />\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                            @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                            @placement=\"bottom\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"\"\n                            @value={{this.rootFolder}}\n                            {{on \"change\" this.updateRootFolder}} />\n                    </div>\n                  </div>\n                  {{#if (eq this.sourceType 'upload')}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceRepositoryUrl}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceBranch}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                <:content>\n                  {{#if (not-eq this.defaultGatlingVersion this.preventedVersion)}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Simulations Directory</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Simulations Directory\" @value={{this.simulationsDir}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                  {{#if this.isV2}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Bodies Directory</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Bodies Directory\" @value={{this.bodiesDir}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Data Directory</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Data Directory\" @value={{this.dataDir}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                  {{#if (eq this.defaultGatlingVersion this.preventedVersion)}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Java Options <Ui::InfoIcon\n                              @content=\"System properties and other command line options to use when running Gatling.\n                              Passed as JVM args to the Gatling process via Maven/Gradle.\"\n                              @isHtml={{true}} @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Java Options\" @value={{this.javaOpts}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{else}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Additional Libs</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Additional Libs Directory\" @value={{this.additionalLibs}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Java Options <Ui::InfoIcon\n                              @content=\"System properties and other command line options to use when running Gatling. Passed to\n                              gatling.sh as the JAVA_OPTS environment variable. Use <strong>${cwd}</strong> if you need to\n                              reference the current directory in a property. It will be replaced with the working directory\n                              with all of your uploaded files at runtime.\"\n                              @isHtml={{true}} @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Java Options\" @value={{this.javaOpts}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Setup Command\n                      <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Additional Setup Command\"\n                              @value={{this.additionalSetupCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Teardown Command\n                      <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Teardown Command\"\n                              @value={{this.teardownCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n  \n                </:content>\n              </Yield.AdditionalWrapper>\n              </Scenario::Ui::AdditionalPanelWrapper>\n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                            @repositoryUrl={{this.repositoryUrl}}\n                            @readonly={{@readonly}}\n                            @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}} />\n                </div>\n              </div>\n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updateGatlingScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"fromMetadata\\\"]],[30,2,[\\\"metadata\\\"]]],null],[4,[38,4],[[30,0,[\\\"onSplitCsvsUpdated\\\"]],[30,0,[\\\"splitCsvs\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceTypeObj\\\"]],\\\"Please select a source...\\\",[30,3],[30,0,[\\\"updateSourceType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Must choose source for scenario.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n          Gatling Version\\\\n          \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"For version 3.11+ you can specify the version via your pom.xml or build.gradle depending on build tool.\\\\n                    For earlier versions, Testable needs to know the version in advance.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\\n          \\\"],[8,[39,10],null,[[\\\"@disabled\\\",\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,3],[30,0,[\\\"defaultGatlingVersion\\\"]],\\\"radio\\\",[30,0,[\\\"updateGatlingVersionType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"priorGatlingVersions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",[30,8],\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,[30,8]]],[]]]]],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"          \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"defaultGatlingVersion\\\"]],[30,0,[\\\"preventedVersion\\\"]]],null],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Build Tool\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"buildTools\\\"]],[30,0,[\\\"buildToolObj\\\"]],\\\"Please select Build Tool...\\\",[30,3],[30,0,[\\\"updateBuildTool\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[9]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Build Args\\\\n            \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,[52,[28,[37,14],[[30,0,[\\\"buildTool\\\"]],\\\"maven\\\"],null],\\\"mvn\\\",\\\"gradle\\\"]],[13],[13],[1,\\\"\\\\n            \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Build Args\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"buildToolArgs\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"gatlingVersions\\\"]],[30,0,[\\\"gatlingVersion\\\"]],[30,3],[30,0,[\\\"updateGatlingVersion\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,10]],[1,\\\"\\\\n            \\\"]],[10]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Simulation Class Name(s) \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"<p>One or more simulation class names to run (full name including package name).\\\\n                  Multiple names should be comma separated.</p><p>If a single simulation is provided it will be\\\\n                  passed as the -s parameter to Gatling.</p><p>If multiple are provided in a comma-separated list\\\\n                  they will be distributed across the Gatling instances that are part of a test configuration.\\\\n                  For example if you have two simulations and set the value to\\\\n                  'com.mypackage.Simulation1,com.mypackage.Simulation2' and a test configuration with Gatling\\\\n                  Instances = 4, then two of the Gatling instances will run com.mypackage.Simulation1 and two\\\\n                  will run com.mypackage.Simulation2. If you have less Gatling instances in your test\\\\n                  configuration than simulations listed in this field, then not all the simulations will be\\\\n                  run.</p><p>If left blank Gatling will run all simulations it finds.</p>\\\",true]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Simulation Class Name(s)\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"simulationName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Concurrent Users\\\\n          \\\"],[8,[39,9],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"The number of concurrent users will be available as the system property <strong>users</strong> within\\\\n            your simulation. Access it via <strong>Integer.getInteger('users')</strong> in your simulation code.\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Concurrent Users per Gatling Instance\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Concurrent users must be specified.\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Minimum concurrent users is 1.\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"users\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"javaVersions\\\"]],[30,0,[\\\"javaVersionSelected\\\"]],[30,3],[30,0,[\\\"javaVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[11]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,18],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@defaultFileId\\\",\\\"@model\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@onStoreUpdate\\\"],[[28,[37,14],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"defaultFile\\\",\\\"id\\\"]],[30,2],[30,0,[\\\"templates\\\"]],[30,0,[\\\"templateSelected\\\"]],[30,0,[\\\"initGatlingTemplate\\\"]],[30,0,[\\\"shouldEditFilesOnPage\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,12]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,13,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,16,[[28,[37,20],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,13,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,22],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,1],[30,2,[\\\"readonly\\\"]],[30,14],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are passed into the Gatling runtime as system properties.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your Gatling simulation code as system properties. For example, integer parameter <strong>Abc</strong> is available as <strong>Integer.getInteger('Abc')</strong>.\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,13,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,23],null,[[\\\"@additionalWrappers\\\"],[[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,24],[[28,[37,24],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,24],[[28,[37,24],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"splitCsvs\\\"]]]],null],[1,\\\" Split CSVs across test runners\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[[30,0,[\\\"splitCsvText\\\"]],true]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,15,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,24],[[28,[37,24],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,24],[[28,[37,24],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\"],[41,[28,[37,27],[[30,0,[\\\"defaultGatlingVersion\\\"]],[30,0,[\\\"preventedVersion\\\"]]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Simulations Directory\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Simulations Directory\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"simulationsDir\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"isV2\\\"]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Bodies Directory\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Bodies Directory\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"bodiesDir\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Data Directory\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Data Directory\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"dataDir\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,14],[[30,0,[\\\"defaultGatlingVersion\\\"]],[30,0,[\\\"preventedVersion\\\"]]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Options \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"System properties and other command line options to use when running Gatling.\\\\n                            Passed as JVM args to the Gatling process via Maven/Gradle.\\\",true,\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Java Options\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"javaOpts\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Additional Libs\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Libs Directory\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalLibs\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Options \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"System properties and other command line options to use when running Gatling. Passed to\\\\n                            gatling.sh as the JAVA_OPTS environment variable. Use <strong>${cwd}</strong> if you need to\\\\n                            reference the current directory in a property. It will be replaced with the working directory\\\\n                            with all of your uploaded files at runtime.\\\",true,\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Java Options\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"javaOpts\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Setup Command\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Teardown Command\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,16],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[15]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,13,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,28],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,3],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[13]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,16,[[28,[37,20],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"bg\\\",\\\"version\\\",\\\"option\\\",\\\"version\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"ui/info-icon\\\",\\\"bs-button-group\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"eq\\\",\\\"span\\\",\\\"on\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"not-eq\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/gatling.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultVersion = _environment.config.defaultGatlingVersion;\n  const JavaVersions = _environment.config.javaVersions;\n  const DefaultSimulationDir = 'user-files/simulations';\n  const PriorGatlingVersions = ['3.11+', 'Older Version'];\n  let ScenarioGatling = _exports.default = (_class = class ScenarioGatling extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"templates\", _scriptCodeTemplates.Options);\n      _defineProperty(this, \"splitCsvText\", _lib.default.SplitCsvText);\n      _defineProperty(this, \"sourceTypes\", [{\n        id: 'upload',\n        name: 'Upload'\n      }, {\n        id: 'vcs',\n        name: 'Version Control'\n      }]);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }]);\n      _defineProperty(this, \"buildTools\", [{\n        value: 'maven',\n        name: 'Maven'\n      }, {\n        value: 'gradle',\n        name: 'Gradle'\n      }]);\n      _defineProperty(this, \"gatlingVersions\", _environment.config.gatlingVersions);\n      _initializerDefineProperty(this, \"javaVersions\", _descriptor, this);\n      _defineProperty(this, \"defaultVersion\", '17');\n      _defineProperty(this, \"priorGatlingVersions\", PriorGatlingVersions);\n      _defineProperty(this, \"preventedVersion\", '3.11+');\n      _initializerDefineProperty(this, \"buildTool\", _descriptor2, this);\n      _initializerDefineProperty(this, \"buildToolArgs\", _descriptor3, this);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor4, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor5, this);\n      _initializerDefineProperty(this, \"gatlingVersion\", _descriptor6, this);\n      _initializerDefineProperty(this, \"defaultGatlingVersion\", _descriptor7, this);\n      _initializerDefineProperty(this, \"users\", _descriptor8, this);\n      _initializerDefineProperty(this, \"simulationName\", _descriptor9, this);\n      _initializerDefineProperty(this, \"simulationsDir\", _descriptor0, this);\n      _initializerDefineProperty(this, \"bodiesDir\", _descriptor1, this);\n      _initializerDefineProperty(this, \"dataDir\", _descriptor10, this);\n      _initializerDefineProperty(this, \"additionalLibs\", _descriptor11, this);\n      _initializerDefineProperty(this, \"javaOpts\", _descriptor12, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor13, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor14, this);\n      _initializerDefineProperty(this, \"javaVersionSelected\", _descriptor15, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor16, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor17, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor18, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor19, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor20, this);\n      _initializerDefineProperty(this, \"splitCsvs\", _descriptor21, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor22, this);\n      _initializerDefineProperty(this, \"defaultFile\", _descriptor23, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor24, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor25, this);\n      _defineProperty(this, \"isInit\", false);\n      (0, _runloop.next)(this, () => {\n        this._fromMetadata();\n      });\n    }\n    get sourceTypeObj() {\n      return this.sourceTypes.find(st => this.sourceType === st.id);\n    }\n    get metadata() {\n      let metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    get isV2() {\n      const version = this.gatlingVersion;\n      return !version || version.indexOf('2.') === 0;\n    }\n    get buildToolObj() {\n      return this.buildTools.find(ba => this.buildTool === ba.value);\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType === 'upload';\n    }\n    onSplitCsvsUpdated() {\n      this.save();\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    updateMetadata() {\n      this.save();\n    }\n    updateGatlingVersion(value) {\n      this.gatlingVersion = value;\n      if (!this.isV2) {\n        this.simulationsDir = DefaultSimulationDir;\n      }\n      this.save();\n    }\n    updateGatlingVersionType(value) {\n      this.defaultGatlingVersion = value;\n      this.save();\n    }\n    updateBuildTool({\n      value\n    }) {\n      this.buildTool = value;\n      this.buildToolArgs = value === 'maven' ? 'gatling:test' : 'gatlingRun --all';\n      this.save();\n    }\n    updateSourceType({\n      id\n    }) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        const resultType = this.args.uniqueId;\n        $(`#updateGatlingScenarioForm${resultType}`).parsley().validate();\n      }, 250);\n      this.sourceType = id;\n      this.save();\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.save();\n      }\n    }\n    javaVersionChanged(selection) {\n      this.javaVersionSelected = selection;\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.save();\n    }\n    templateSelected(editor, selection, aceEditor) {\n      let templateContent = aceEditor.ext === 'ts' ? _scriptCodeTemplates.TemplatesTS[selection.id] : _scriptCodeTemplates.TemplatesJS[selection.id];\n      editor.insert('\\n' + templateContent + '\\n');\n    }\n    initGatlingTemplate() {\n      const scalaTemplate = \"import io.gatling.core.Predef._\\n\" + \"import io.gatling.http.Predef._\\n\" + \"import scala.concurrent.duration._\\n\" + \"\\n\" + \"class DemoSimulation extends Simulation {\\n\" + \"\\n\" + \"  val httpConf = http\\n\" + \"    .baseUrl(\\\"http://sample.testable.io\\\") // Here is the root for all relative URLs\\n\" + \"    .userAgentHeader(\\\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0\\\")\\n\" + \"\\n\" + \"  val duration = Duration.apply(Integer.getInteger(\\\"duration\\\", 60).toLong, \\\"seconds\\\")\\n\" + \"\\n\" + \"  val scn = scenario(\\\"Testable Demo\\\") // A scenario is a chain of requests and pauses\\n\" + \"    .exec(http(\\\"request_1\\\")\\n\" + \"    .get(\\\"/stocks/IBM\\\"))\\n\" + \"\\n\" + \"  setUp(scn.inject(constantUsersPerSec(Integer.getInteger(\\\"users\\\", 1).toDouble) during (duration)).protocols(httpConf))\\n\" + \"}\";\n      this.createFile('Simulation.scala', scalaTemplate);\n    }\n    didInsert() {\n      (0, _runloop.schedule)('afterRender', this, () => {\n        const resultType = this.args.uniqueId;\n        $(`#updateGatlingScenarioForm${resultType}`).parsley().validate();\n        const files = this.args.script?.dataStores?.filter(ds => _lib.default.endsWith(ds.name, '.scala'));\n        if (files?.length === 1) {\n          this.defaultFile = files[0];\n        }\n      });\n    }\n    save() {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script?.metadata;\n      if (this.isInit && origMetadata) {\n        return;\n      }\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n    toMetadata() {\n      const metadata = {};\n      const isV2 = this.isV2;\n      metadata.users = Number(this.users || 1);\n      metadata.simulation = this.simulationName;\n      metadata.simulationsDir = this.simulationsDir || DefaultSimulationDir;\n      metadata.bodiesDir = this.bodiesDir || 'user-files/bodies';\n      metadata.dataDir = this.dataDir || 'user-files/data';\n      metadata.additionalLibs = this.additionalLibs || 'lib';\n      metadata.javaOpts = this.javaOpts;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      if (this.defaultGatlingVersion === this.preventedVersion) {\n        metadata.buildTool = this.buildTool;\n        metadata.buildToolArgs = this.buildToolArgs;\n      } else {\n        metadata.version = this.gatlingVersion;\n      }\n      metadata.javaVersion = this.javaVersionSelected?.id;\n      metadata.sourceType = this.sourceType;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      metadata.splitCsvs = this.splitCsvs;\n      metadata.rootFolder = this.rootFolder;\n      return metadata;\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      this.isInit = true;\n      const metadata = this.metadata;\n      this.gatlingVersion = metadata.version || DefaultVersion;\n      this.defaultGatlingVersion = metadata.version ? PriorGatlingVersions[1] : PriorGatlingVersions[0];\n      if (this.defaultGatlingVersion === this.preventedVersion) {\n        this.buildTool = metadata.buildTool || this.buildTool;\n        this.buildToolArgs = metadata.buildToolArgs || this.buildToolArgs;\n      }\n      const isV2 = this.isV2;\n      this.sourceType = metadata.sourceType === 'vcs' ? 'vcs' : 'upload';\n      this.users = metadata.users || 1;\n      this.simulationName = metadata.simulation || '';\n      this.simulationsDir = metadata.simulationsDir || DefaultSimulationDir;\n      this.bodiesDir = metadata.bodiesDir || 'user-files/bodies';\n      this.dataDir = metadata.dataDir || 'user-files/data';\n      this.additionalLibs = metadata.additionalLibs || 'lib';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.javaVersions = JavaVersions.filter(version => !(version.id === '1.8' && (this.defaultGatlingVersion === PriorGatlingVersions[0] || this.gatlingVersion === '3.10.5')));\n      this.javaVersionSelected = this.javaVersions.find(version => version.id === metadata.javaVersion) || this.javaVersions.find(version => version.id === this.defaultVersion);\n      this.javaOpts = metadata.javaOpts || '';\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.splitCsvs = _.isBoolean(metadata.splitCsvs) ? metadata.splitCsvs : false;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        this.isInit = false;\n      });\n    }\n    async createFile(fileName, defaultContents) {\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script?.dataStores, scriptDs => scriptDs.name === fileName);\n        if (!ds && !this.args.script?.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore(fileName, defaultContents).then(() => {\n            this.generatingFiles = false;\n            resolve();\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"javaVersions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return JavaVersions;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"buildTool\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'maven';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"buildToolArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'gatling:test';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"gatlingVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"defaultGatlingVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"users\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"simulationName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"simulationsDir\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"bodiesDir\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"dataDir\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"additionalLibs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"javaOpts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"javaVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"splitCsvs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"defaultFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSplitCsvsUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSplitCsvsUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateGatlingVersion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateGatlingVersion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateGatlingVersionType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateGatlingVersionType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBuildTool\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBuildTool\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSourceType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSourceType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"javaVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"javaVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"templateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"templateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initGatlingTemplate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initGatlingTemplate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioGatling);\n});","define(\"@testable/shared-ui/components/scenario/har\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@ember/template\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _lib, _template, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updateHarScenarioForm{{@uniqueId}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.fromMetadata @script.metadata}}\n    {{did-update this.onDataStoreUpdated this.harFiles}}\n    {{did-update this.onHarFileUpdated this.harFile}}\n    as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">HAR to Replay</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.harFiles}} @selected={{this.harFile}}\n                      @placeholder={{if (gt this.harFiles.length 0) \"Please select a HAR file...\" \"Please upload a HAR file above (*.har).\"}}\n                      @disabled={{@readonly}}\n                      @onChange={{this.harFileChanged}} as |option|>\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\"\n                    disabled={{true}}\n                    @value={{this.harFile.name}}\n                    data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Please select a HAR file.\" />\n          </div>\n        </div>\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @selectedPanel={{this.selectedRightPanel}}\n            @onPanelChange={{fn (mut this.selectedRightPanel)}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{this.defaultFileId}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @model={{@script}}\n            @convertToScript={{this.convertToScript}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @updateContent={{@saveCode}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.AdditionalPanel>\n              <Forms::MaxDurationInput\n                      @labelClasses={{this.labelClasses}}\n                      @inputClasses={{this.inputClasses}}\n                      @value={{this.maxDuration}}\n                      @onChange={{this.updateMaxDuration}}\n              />\n  \n              <Forms::ResourcePartsInput\n                      @labelClasses={{this.labelClasses}}\n                      @inputClasses={{this.inputClasses}}\n                      @resourceParts={{this.resourceParts}}\n                      @resourceNameMappings={{this.resourceNameMappings}}\n                      @overrideOrgDefault={{this.overrideOrgDefault}}\n                      @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                      @onChange={{this.updateResourceParts}}\n                      @editable={{not @readonly}}\n              />\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Additional Setup Command\n                  <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Additional Setup Command\"\n                          @value={{this.additionalSetupCommand}} {{on \"change\" this.updateAdditionalSetupCommand}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Teardown Command\n                  <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Teardown Command\"\n                          @value={{this.teardownCommand}} {{on \"change\" this.updateTeardownCommand}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                        @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                        @placement=\"bottom\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.rootFolder}}\n                        {{on \"change\" this.updateRootFolder}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.sourceRepositoryUrl}}\n                        {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.sourceBranch}}\n                        {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n  \n            </Yield.AdditionalPanel>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedRightPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updateHarScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"fromMetadata\\\"]],[30,2,[\\\"metadata\\\"]]],null],[4,[38,4],[[30,0,[\\\"onDataStoreUpdated\\\"]],[30,0,[\\\"harFiles\\\"]]],null],[4,[38,4],[[30,0,[\\\"onHarFileUpdated\\\"]],[30,0,[\\\"harFile\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"HAR to Replay\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"harFiles\\\"]],[30,0,[\\\"harFile\\\"]],[52,[28,[37,9],[[30,0,[\\\"harFiles\\\",\\\"length\\\"]],0],null],\\\"Please select a HAR file...\\\",\\\"Please upload a HAR file above (*.har).\\\"],[30,3],[30,0,[\\\"harFileChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a HAR file.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"harFile\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,12],null,[[\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@convertToScript\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[30,0,[\\\"selectedRightPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedRightPanel\\\"]]],null]],null],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFileId\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,2],[30,0,[\\\"convertToScript\\\"]],[30,7],[30,8]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,9,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,10,[[28,[37,14],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n\\\\n            \\\"],[8,[39,17],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,18],[[30,3]],null]]],null],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Additional Setup Command\\\\n                \\\"],[8,[39,19],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,20],[\\\"change\\\",[30,0,[\\\"updateAdditionalSetupCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Teardown Command\\\\n                \\\"],[8,[39,19],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,20],[\\\"change\\\",[30,0,[\\\"updateTeardownCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,19],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,20],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,19],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,20],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,19],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,20],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,10,[[28,[37,14],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedRightPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"@onStoreUpdate\\\",\\\"@saveCode\\\",\\\"Yield\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"gt\\\",\\\"input\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"forms/max-duration-input\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\"ui/info-icon\\\",\\\"on\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/har.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioHar = _exports.default = (_class = class ScenarioHar extends _component2.default {\n    get activePanel() {\n      return this.selectedRightPanel ? this.selectedRightPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor4, this);\n      _initializerDefineProperty(this, \"harFile\", _descriptor5, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor6, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor7, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor8, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor9, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedRightPanel\", _descriptor1, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor10, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor11, this);\n      (0, _runloop.next)(this, () => {\n        this._fromMetadata();\n        this._onDataStoreUpdated();\n        this.onHarFileUpdated();\n      });\n    }\n    get defaultFiles() {\n      const files = [{\n        id: 'note',\n        type: 'note',\n        name: 'NOTE',\n        path: '/NOTE',\n        readonly: true,\n        isFolder: false,\n        fileType: 'note',\n        code: (0, _template.htmlSafe)(`<div class=\"note note-info alert\">\n      <p>Requests and responses in the HAR file can be manipulated during replay by <a data-action=\"convertToScript\" role=\"button\">converting this scenario into a Node.js script</a> and using the <a\n        target=\"_blank\" href=\"https://www.npmjs.com/package/har-replay\" rel=\"noreferrer noopener\">har-replay</a> module.</p>\n      </div>`)\n      }];\n      if (_.isEmpty(this.args.script?.dataStores)) {\n        files.push({\n          id: 'uploadBtn',\n          type: 'uploadBtn',\n          name: 'Upload HAR File',\n          path: '',\n          readonly: true,\n          isFolder: false,\n          fileType: 'button'\n        });\n      }\n      return files;\n    }\n    get defaultFileId() {\n      return this.harFile?.id || this.defaultFiles[0]?.id;\n    }\n    get metadata() {\n      let metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    get harFiles() {\n      return _lib.default.getFilesWithExt(this.args.script?.dataStores, '.har');\n    }\n    onDataStoreUpdated() {\n      this._onDataStoreUpdated();\n    }\n    _onDataStoreUpdated() {\n      if (this.harFiles?.length === 1) {\n        this.harFile = this.harFiles[0];\n        this.save();\n      } else if (this.harFiles?.length === 0) {\n        this.harFile = null;\n        this.save();\n      }\n    }\n    onHarFileUpdated() {\n      (0, _runloop.scheduleOnce)('afterRender', () => {\n        $(`#updateHarScenarioForm${this.args.uniqueId}`).parsley().validate();\n      });\n    }\n    didInsert() {\n      const resultType = this.args.uniqueId;\n      $(`#updateHarScenarioForm${resultType}`).parsley().validate();\n    }\n    harFileChanged(value) {\n      if (value.name !== this.metadata?.harFile) {\n        this.updateValue('harFile', value);\n      }\n    }\n    convertToScript() {\n      _lib.default.confirm('Are you surey you want to convert this scenario to a Node.js script?', 'Convert', () => {\n        this.args.convertToCode();\n      }, 'Cancel', () => {}, 'Convert to Node.js');\n    }\n    updateMaxDuration(e) {\n      this.updateValue('maxDuration', e.target.valueAsNumber);\n    }\n    updateAdditionalSetupCommand() {\n      this.args.hasUnsavedChanges();\n      this.save();\n    }\n    updateTeardownCommand() {\n      this.args.hasUnsavedChanges();\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.save();\n    }\n    updateMetadata() {\n      this.save();\n    }\n    updateValue(name, newVal) {\n      this[name] = newVal;\n      this.args.hasUnsavedChanges();\n      this.save();\n    }\n    save() {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script?.metadata;\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata, null, true);\n      }\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      let metadata = this.metadata;\n      this.harFile = _.find(this.harFiles, harFile => harFile.name === metadata.harFile);\n      this.maxDuration = metadata.maxDuration;\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n      this.sourceBranch = metadata.sourceBranch;\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n    }\n    toMetadata() {\n      let metadata = {};\n      if (this.harFile) {\n        metadata.harFile = this.harFile.name;\n      }\n      metadata.maxDuration = this.maxDuration;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n      metadata.sourceBranch = this.sourceBranch;\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"harFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedRightPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onDataStoreUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataStoreUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHarFileUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHarFileUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"harFileChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"harFileChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"convertToScript\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"convertToScript\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAdditionalSetupCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAdditionalSetupCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeardownCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeardownCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioHar);\n});","define(\"@testable/shared-ui/components/scenario/java\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@ember/utils\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/templates/java-templates\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _utils, _lib, _environment, _javaTemplates, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/templates/java-templates\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updateJavaScenarioForm{{@uniqueId}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.onMetadataChange @script.metadata}}\n    as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Framework <Ui::InfoIcon\n                  @isHtml={{true}}\n                  @content=\"Choose <code>None</code> if you want Testable to run a main class otherwise choose the\n                    framework that needs to be used to execute your tests.\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.frameworks}} @selected={{this.framework}}\n                          @placeholder=\"Please select Framework...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.frameworkChanged}} as |option| >\n              {{option}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source\n            <Ui::InfoIcon\n                    @content=\"Choose the source of the code that defines this scenario\" @placement=\"bottom\"/>\n          </label>\n          <div class=\"{{this.inputClasses}}\">\n  \n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceType}}\n                            @placeholder=\"Please select a source...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.sourceTypeChanged}} as |option|>\n                {{option.name}}\n              </Ui::PSelect>\n              <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType.id}} data-parsley-required=\"true\"\n                      data-parsley-required-message=\"Please select a source type.\"/>\n            </div>\n          </div>\n        </div>\n  \n        {{#if (or (eq this.sourceType.id 'vcs') (eq this.sourceType.id 'uploadZip') ) }}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Build Tool</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.buildTools}} @selected={{this.buildToolObj}}\n                            @placeholder=\"Please select Build Tool...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updateBuildTool}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Build Args\n              <Ui::InfoIcon\n                      @content=\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"input-group\">\n              <div class=\"input-group-append\"><span class=\"input-group-text\">{{if (eq this.buildTool \"maven\") \"mvn\" \"gradle\"}}</span></div>\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Build Args\"\n                      @value={{this.buildToolArgs}}\n                      {{on \"change\" this.saveMetadata}} />\n            </div>\n          </div>\n        {{else if (and (not-eq this.framework 'None') (not-eq this.sourceType.id 'vcs') (not-eq this.sourceType.id 'uploadZip'))}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Test Classes\n              <Ui::InfoIcon\n                      @content=\"Comma separated list of <code>JUnit</code> or <code>TestNG</code> fully qualified class names to execute\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"Test Classes\"\n                        @value={{this.testClasses}}\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Please provide test classes to run.\"\n                        {{on \"change\" this.saveMetadata}} />\n              </div>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (or this.shouldEditFilesOnPage (and (eq this.framework 'None')\n                    (eq this.sourceType.id 'uploadAll')\n              ))\n        }}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              {{#if this.shouldEditFilesOnPage}}\n                {{#if (eq this.framework 'None')}}\n                  Main Class\n                {{else}}\n                  Class\n                {{/if}}\n              {{else}}\n                Main Class Name\n              {{/if}}\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Main class name\"\n                      @value={{this.primarySpecName}}\n                      data-parsley-required=\"true\"\n                      data-parsley-required-message=\"Please select main class name.\"\n                      {{on \"change\" this.updatePrimarySpec}} />\n            </div>\n          </div>\n        {{/if}}\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Java Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.javaVersions}} @selected={{this.javaVersionSelected}}\n                          @disabled={{@readonly}}\n                          @onChange={{this.javaVersionChanged}} as |version|>\n              {{version.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType.id 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @templates={{this.specTemplateOptions}}\n            @defaultFileId={{this.primarySpec.id}}\n            @selectedTemplate={{this.templateSelected}}\n            @generateExampleFiles={{this.initJavaFile}}\n            @enableGenerateExample={{this.shouldEditFilesOnPage}}\n            @generatingFiles={{this.generatingFiles}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @model={{@script}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                          @uniqueId={{@uniqueId}}\n                          @readonly={{@readonly}}\n                          @isSaving={{@isSaving}}\n                          @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible as system properties in your Java code.\"\n                          @noteText={{concat \"Scenarios can declare parameters for which they expect the test configuration to provide a value.\n                                     Parameters can be referenced in your code using system properties. For example, parameter Abc is available\n                                     as system property Abc (System.getProperty(\\\"Abc\\\")).\"}}\n                          @configChanged={{this.paramsConfigChanged}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              {{#if (or (eq this.framework 'TestNG') (eq this.framework 'JUnit'))}}\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">\n                    Test Reporting Filters\n                    <Ui::InfoIcon\n                            @content=\"Specify a comma separated list of tests to filter out of the assertion reporting into the\n                            Testable test results. Filters should be specified as a comma separated list of regular expressions\n                            (e.g. .*testMyServer.*) that will be compared against each test method using the format\n                            [test-class].[test-method] (e.g. MyTestClass.testAbc). Alternatively mark your test methods with the\n                            annotation @TestableIgnoreForReporting by importing testable-java.\"\n                            @isHtml={{true}}\n                            @placement=\"bottom\"/>\n                  </label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"Test Reporting Filters\"\n                            @value={{this.skipTestableReporting}}\n                            {{on \"change\" this.saveMetadata}} />\n                  </div>\n                </div>\n  \n                {{#if (eq this.framework 'TestNG')}}\n                  <div class=\"form-group\">\n                    <label class=\"normal\" >\n                      <Input @type=\"checkbox\" @checked={{this.skipTestReporting}}\n                        {{on \"change\" this.skipTestReportingUpdate}} />\n                      Do not report on skipped tests\n                    </label>\n                  </div>\n                {{/if}}\n              {{/if}}\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">System Properties <Ui::InfoIcon\n                        @content=\"Additional system properties to pass Java. Example: -Dfoo=bar -Dabc=xyz\" /></label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" maxlength=\"2048\" placeholder=\"System Properties (e.g. -Dfoo=bar)\"\n                    @value={{this.systemProperties}} data-parsley-maxlength=\"2048\"\n                    data-parsley-maxlength-message=\"System properties cannot be longer than 2048 characters.\"\n                    data-parsley-java-props=\"-D\"\n                    {{on \"change\" this.systemPropertiesChange}}\n                  />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Additional Setup Command\n                  <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Additional Setup Command\"\n                          @value={{this.additionalSetupCommand}} {{on \"change\" this.saveMetadata}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Teardown Command\n                  <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Teardown Command\"\n                          @value={{this.teardownCommand}} {{on \"change\" this.saveMetadata}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                        @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                        @placement=\"bottom\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.rootFolder}}\n                    {{on \"change\" this.updateRootFolder}} />\n                </div>\n              </div>\n              {{#if (eq this.sourceType.id 'upload')}}\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                          @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                          @placement=\"bottom\" /></label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                          class=\"form-control\"\n                          placeholder=\"\"\n                          @value={{this.sourceRepositoryUrl}}\n                          {{on \"change\" this.saveMetadata}} />\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                          @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                          @placement=\"bottom\" /></label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                          class=\"form-control\"\n                          placeholder=\"\"\n                          @value={{this.sourceBranch}}\n                          {{on \"change\" this.saveMetadata}} />\n                  </div>\n                </div>\n              {{/if}}\n              <Forms::ResourcePartsInput\n                      @labelClasses={{this.labelClasses}}\n                      @inputClasses={{this.inputClasses}}\n                      @resourceParts={{this.resourceParts}}\n                      @resourceNameMappings={{this.resourceNameMappings}}\n                      @overrideOrgDefault={{this.overrideOrgDefault}}\n                      @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                      @onChange={{this.updateResourceParts}}\n                      @editable={{not @readonly}}\n              />\n            </Yield.AdditionalPanel>\n            <Yield.VcsTab>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                              @repositoryUrl={{this.repositoryUrl}}\n                              @readonly={{@readonly}}\n                              @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}}\n                          {{on \"change\" this.saveMetadata}} />\n                </div>\n              </div>\n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  {{#if this.showCreateSpecModal}}\n    <CreateSpecModal @scriptId={{@script.id}}\n                     @contents={{this.specDefaultContents}}\n                     @created={{this.specCreated}}\n                     @modalClosed={{this.createSpecModalClosed}}\n                     @modelTitle=\"Create Test Java Class\"\n                     @inputTitle=\"Test Java Class (*.java)\"\n                     @inputPlaceholder=\"Java Class (*.java)\"\n                     @buttonLabel=\"Create Java Class\"\n    />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updateJavaScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"onMetadataChange\\\"]],[30,2,[\\\"metadata\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Framework \\\"],[8,[39,7],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Choose <code>None</code> if you want Testable to run a main class otherwise choose the\\\\n                  framework that needs to be used to execute your tests.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"frameworks\\\"]],[30,0,[\\\"framework\\\"]],\\\"Please select Framework...\\\",[30,3],[30,0,[\\\"frameworkChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,6]],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source\\\\n          \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the source of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceType\\\"]],\\\"Please select a source...\\\",[30,3],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[7]]]]],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,11],[[28,[37,12],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[28,[37,12],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"uploadZip\\\"],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Build Tool\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"buildTools\\\"]],[30,0,[\\\"buildToolObj\\\"]],\\\"Please select Build Tool...\\\",[30,3],[30,0,[\\\"updateBuildTool\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[8]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Build Args\\\\n            \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,[52,[28,[37,12],[[30,0,[\\\"buildTool\\\"]],\\\"maven\\\"],null],\\\"mvn\\\",\\\"gradle\\\"]],[13],[13],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Build Args\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"buildToolArgs\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,15],[[28,[37,16],[[30,0,[\\\"framework\\\"]],\\\"None\\\"],null],[28,[37,16],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[28,[37,16],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"uploadZip\\\"],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Test Classes\\\\n            \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Comma separated list of <code>JUnit</code> or <code>TestNG</code> fully qualified class names to execute\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Classes\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide test classes to run.\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"testClasses\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"shouldEditFilesOnPage\\\"]],[28,[37,15],[[28,[37,12],[[30,0,[\\\"framework\\\"]],\\\"None\\\"],null],[28,[37,12],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"uploadAll\\\"],null]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldEditFilesOnPage\\\"]],[[[41,[28,[37,12],[[30,0,[\\\"framework\\\"]],\\\"None\\\"],null],[[[1,\\\"                Main Class\\\\n\\\"]],[]],[[[1,\\\"                Class\\\\n\\\"]],[]]]],[]],[[[1,\\\"              Main Class Name\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Main class name\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select main class name.\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"updatePrimarySpec\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"primarySpecName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"javaVersions\\\"]],[30,0,[\\\"javaVersionSelected\\\"]],[30,3],[30,0,[\\\"javaVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[9]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,18],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@templates\\\",\\\"@defaultFileId\\\",\\\"@selectedTemplate\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@onStoreUpdate\\\"],[[28,[37,12],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"specTemplateOptions\\\"]],[30,0,[\\\"primarySpec\\\",\\\"id\\\"]],[30,0,[\\\"templateSelected\\\"]],[30,0,[\\\"initJavaFile\\\"]],[30,0,[\\\"shouldEditFilesOnPage\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,2],[30,10]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,11,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,13,[[28,[37,20],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,11,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,22],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,1],[30,3],[30,12],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible as system properties in your Java code.\\\",[28,[37,23],[\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value.\\\\n                                   Parameters can be referenced in your code using system properties. For example, parameter Abc is available\\\\n                                   as system property Abc (System.getProperty(\\\\\\\"Abc\\\\\\\")).\\\"],null],[30,0,[\\\"paramsConfigChanged\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,11,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[28,[37,12],[[30,0,[\\\"framework\\\"]],\\\"TestNG\\\"],null],[28,[37,12],[[30,0,[\\\"framework\\\"]],\\\"JUnit\\\"],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                  Test Reporting Filters\\\\n                  \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify a comma separated list of tests to filter out of the assertion reporting into the\\\\n                          Testable test results. Filters should be specified as a comma separated list of regular expressions\\\\n                          (e.g. .*testMyServer.*) that will be compared against each test method using the format\\\\n                          [test-class].[test-method] (e.g. MyTestClass.testAbc). Alternatively mark your test methods with the\\\\n                          annotation @TestableIgnoreForReporting by importing testable-java.\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Reporting Filters\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"skipTestableReporting\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"framework\\\"]],\\\"TestNG\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[4,[38,14],[\\\"change\\\",[30,0,[\\\"skipTestReportingUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"skipTestReporting\\\"]]]],null],[1,\\\"\\\\n                    Do not report on skipped tests\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"System Properties \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Additional system properties to pass Java. Example: -Dfoo=bar -Dabc=xyz\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"maxlength\\\",\\\"2048\\\"],[24,\\\"placeholder\\\",\\\"System Properties (e.g. -Dfoo=bar)\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"2048\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"System properties cannot be longer than 2048 characters.\\\"],[24,\\\"data-parsley-java-props\\\",\\\"-D\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"systemPropertiesChange\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"systemProperties\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Additional Setup Command\\\\n                \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Teardown Command\\\\n                \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[8,[39,24],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,25],[[30,3]],null]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,11,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,26],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,3],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[11]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,13,[[28,[37,20],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateSpecModal\\\"]],[[[1,\\\"  \\\"],[8,[39,31],null,[[\\\"@scriptId\\\",\\\"@contents\\\",\\\"@created\\\",\\\"@modalClosed\\\",\\\"@modelTitle\\\",\\\"@inputTitle\\\",\\\"@inputPlaceholder\\\",\\\"@buttonLabel\\\"],[[30,2,[\\\"id\\\"]],[30,0,[\\\"specDefaultContents\\\"]],[30,0,[\\\"specCreated\\\"]],[30,0,[\\\"createSpecModalClosed\\\"]],\\\"Create Test Java Class\\\",\\\"Test Java Class (*.java)\\\",\\\"Java Class (*.java)\\\",\\\"Create Java Class\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"if\\\",\\\"or\\\",\\\"eq\\\",\\\"span\\\",\\\"on\\\",\\\"and\\\",\\\"not-eq\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"concat\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\",\\\"create-spec-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/java.hbs\",\n    \"isStrictMode\": false\n  });\n  const CreatePrimarySpecOption = 'Create new test class...';\n  let ScenarioJavaComponent = _exports.default = (_class = class ScenarioJavaComponent extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    get javaVersions() {\n      return _environment.config.javaVersions;\n    }\n    /**\n     * Constructor\n     * @param owner\n     * @param args\n     */\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"branch\", _descriptor, this);\n      _initializerDefineProperty(this, \"framework\", _descriptor2, this);\n      _initializerDefineProperty(this, \"buildTool\", _descriptor3, this);\n      _initializerDefineProperty(this, \"buildToolArgs\", _descriptor4, this);\n      _initializerDefineProperty(this, \"skipTestableReporting\", _descriptor5, this);\n      _initializerDefineProperty(this, \"skipTestReporting\", _descriptor6, this);\n      _initializerDefineProperty(this, \"inputClasses\", _descriptor7, this);\n      _initializerDefineProperty(this, \"labelClasses\", _descriptor8, this);\n      _initializerDefineProperty(this, \"primarySpecName\", _descriptor9, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor0, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor1, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor10, this);\n      _initializerDefineProperty(this, \"showCreateSpecModal\", _descriptor11, this);\n      _initializerDefineProperty(this, \"showNote\", _descriptor12, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor13, this);\n      _initializerDefineProperty(this, \"testClasses\", _descriptor14, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor15, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor16, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor17, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor18, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor19, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor20, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor21, this);\n      _initializerDefineProperty(this, \"javaVersionSelected\", _descriptor22, this);\n      _initializerDefineProperty(this, \"systemProperties\", _descriptor23, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor24, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor25, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor26, this);\n      _defineProperty(this, \"buildTools\", [{\n        value: 'maven',\n        name: 'Maven'\n      }, {\n        value: 'gradle',\n        name: 'Gradle'\n      }]);\n      _defineProperty(this, \"buildToolDefaults\", ['exec:java -Dexec.mainClass=\"com.acme.MyTestClass\"', 'run', 'clean test']);\n      _defineProperty(this, \"JavaFrameworks\", ['None', 'JUnit', 'TestNG']);\n      (0, _runloop.later)(this, () => {\n        this.fromMetadata();\n        if (!this.args.script.metadata) {\n          this.saveScript();\n        }\n      }, 250);\n      if (this.args.script.dataStores.find(ds => ds.name === 'build.gradle')) {\n        this.buildTool = 'gradle';\n      }\n    }\n\n    /**\n     * did-update on @script.metadata: when metadata is changed\n     */\n    onMetadataChange() {\n      this.fromMetadata();\n    }\n    get frameworks() {\n      return this.JavaFrameworks;\n    }\n    get sourceTypes() {\n      return [{\n        id: 'uploadExecutable',\n        name: 'Upload Executable Jar'\n      }, {\n        id: 'uploadAll',\n        name: this.framework === 'None' ? 'Upload Jars + Specify Main Class' : 'Upload Jars + Specify Test Classes'\n      }, {\n        id: 'upload',\n        name: 'Upload and Compile'\n      }, {\n        id: 'uploadZip',\n        name: 'Upload and Build (Maven/Gradle)'\n      }, {\n        id: 'vcs',\n        name: 'Build from Version Control'\n      }];\n    }\n    get specTemplateOptions() {\n      switch (this.framework) {\n        case 'None':\n          return _javaTemplates.default.javaOptions;\n        case 'JUnit':\n          return _javaTemplates.default.junitOptions;\n        case 'TestNG':\n          return _javaTemplates.default.testNGOptions;\n      }\n    }\n    get templateType() {\n      switch (this.framework) {\n        case 'None':\n          return 'java';\n        case 'JUnit':\n          return 'junit';\n        case 'TestNG':\n          return 'testNG';\n      }\n    }\n    get buildToolObj() {\n      return this.buildTools.find(ba => this.buildTool === ba.value);\n    }\n    get specDefaultContents() {\n      const framework = this.framework;\n      return framework === 'None' ? _javaTemplates.default.java['skeleton'] : framework === 'JUnit' ? _javaTemplates.default.junit['skeleton'] : _javaTemplates.default.testNG['skeleton'];\n    }\n    get metadata() {\n      const metadata = this.args.script.metadata;\n      return (0, _utils.isEmpty)(metadata) ? {} : metadata;\n    }\n    get primarySpec() {\n      const name = this.primarySpecName;\n      if (name) {\n        return _.find(this.args.script.dataStores, ds => {\n          return ds.name === name;\n        });\n      }\n      return '';\n    }\n    get primarySpecOptions() {\n      const existing = [];\n      if (!this.args.script?.dataStores) return '';\n      this.args.script.dataStores.forEach(ds => {\n        if (_lib.default.endsWith(ds.name, '.java')) {\n          existing.push(ds.name);\n        }\n      });\n      return [{\n        groupName: 'Existing',\n        options: existing\n      }, {\n        groupName: 'New',\n        options: [CreatePrimarySpecOption]\n      }];\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType?.id === 'upload' && this.framework;\n    }\n\n    /**\n     * Update parent component with latest paramsConfig\n     * @param {Object} paramsConfig\n     */\n    paramsConfigChanged(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n\n    /**\n     * Update framework and save\n     * @param {String} framework\n     */\n    async frameworkChanged(framework) {\n      this.framework = framework;\n      this.setDefaultBuildArgs();\n      this.saveScript();\n    }\n\n    /**\n     * Update build tool and saveScript()\n     */\n    updateBuildTool({\n      value\n    }) {\n      this.buildTool = value;\n      this.setDefaultBuildArgs();\n      this.saveScript();\n    }\n\n    /**\n     * Update selection and save the script\n     * @param {String} selection\n     */\n    async sourceTypeChanged(selection) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        $(`#updateJavaScenarioForm${this.args.uniqueId}`).parsley().validate();\n      }, 250);\n      this.sourceType = selection;\n      this.setDefaultBuildArgs();\n      this.saveScript();\n    }\n\n    /**\n     * Update repository details\n     * @param {Object} repository\n     */\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Primary Spec\n     * @param {Object} event\n     */\n    updatePrimarySpec(event) {\n      let value = event.target?.value;\n      if (value === CreatePrimarySpecOption) {\n        this.showCreateSpecModal = true;\n      } else if (value !== '') {\n        this.primarySpecName = value;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Test Classes Name\n     */\n    saveMetadata() {\n      this.saveScript();\n    }\n\n    /**\n     * Update Datastore and primary Spec name\n     * @param {Object} ds\n     */\n    specCreated(ds) {\n      if (ds) {\n        this.args.dataStoreUpdate(null, ds);\n        this.primarySpecName = ds.name;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Called when Create Spec model is closed\n     */\n    createSpecModalClosed() {\n      this.showCreateSpecModal = false;\n    }\n    javaVersionChanged(javaVersion) {\n      this.javaVersionSelected = javaVersion;\n      this.saveScript();\n    }\n    skipTestReportingUpdate(ckBox) {\n      this.skipTestReporting = ckBox.target.checked;\n      this.saveScript();\n    }\n    systemPropertiesChange(val) {\n      let value = val.target.value;\n      if (!_.isEqual(value, _lib.default.javaPropertiesToString('-D', this.metadata?.systemProperties))) {\n        this.systemProperties = value;\n        this.saveScript();\n      }\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.saveScript();\n    }\n    async initJavaFile() {\n      const framework = this.framework;\n      await this.createFile('TestClass.java', framework === 'None' ? _javaTemplates.default.java['skeleton'] : framework === 'JUnit' ? _javaTemplates.default.junit['skeleton'] : _javaTemplates.default.testNG['skeleton']);\n      this.saveScript();\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.saveScript();\n    }\n    templateSelected(editor, selection) {\n      let templateContent = _javaTemplates.default[this.templateType][selection.id];\n      editor.insert('\\n' + templateContent + '\\n');\n    }\n\n    /**\n     * Save metadata on the server\n     */\n    saveScript() {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script.metadata;\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n\n    /**\n     * Create metadata object\n     * @returns {{}}\n     */\n    toMetadata() {\n      let metadata = {};\n      metadata.sourceType = this.sourceType?.id;\n      if (this.framework) {\n        metadata.framework = this.framework;\n      }\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      if (this.primarySpecName) {\n        metadata.primarySpec = this.primarySpecName;\n      }\n      if (this.testClasses) {\n        metadata.testClasses = this.testClasses;\n      }\n      if (this.framework !== \"None\") {\n        metadata.skipTestableReporting = this.skipTestableReporting;\n      }\n      if (metadata.framework === 'TestNG') {\n        metadata.skipTestReporting = this.skipTestReporting;\n      }\n      if (metadata.sourceType === 'vcs' || metadata.sourceType === 'uploadZip') {\n        if (this.buildTool) metadata.buildTool = this.buildTool;\n        if (this.buildToolArgs) metadata.buildToolArgs = this.buildToolArgs;\n      }\n      metadata.systemProperties = _lib.default.splitJavaProperties('-D', this.systemProperties);\n      metadata.javaVersion = this.javaVersionSelected.id;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (this.resourceParts) {\n        metadata.resourceParts = this.resourceParts;\n      }\n      if (this.resourceNameMappings) {\n        metadata.resourceNameMappings = this.resourceNameMappings;\n      }\n      if (this.overrideOrgDefault) {\n        metadata.overrideOrgDefault = this.overrideOrgDefault;\n      }\n      if (this.resourceNameIgnoreNonMatch) {\n        metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      }\n      return metadata;\n    }\n\n    /**\n     * Populate values from metadata to component properties\n     * @returns {Promise<void>}\n     */\n    async fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      const metadata = this.metadata;\n      if (!_.isEmpty(metadata)) {\n        if (metadata.framework) {\n          this.framework = metadata.framework;\n        }\n        if (metadata.sourceType) {\n          this.sourceType = this.sourceTypes.filter(type => type.id === metadata.sourceType)[0];\n        }\n      }\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      if (metadata.primarySpec) {\n        this.primarySpecName = metadata.primarySpec;\n      }\n      if (metadata.testClasses) {\n        this.testClasses = metadata.testClasses;\n      }\n      if (this.framework !== \"None\") {\n        this.skipTestableReporting = metadata.skipTestableReporting;\n      }\n      if (metadata.sourceType === 'vcs' || metadata.sourceType === 'uploadZip') {\n        if (metadata.buildTool) this.buildTool = metadata.buildTool;\n        if (metadata.buildToolArgs) this.buildToolArgs = metadata.buildToolArgs;\n      }\n      if (metadata.framework === 'TestNG') {\n        this.skipTestReporting = metadata.skipTestReporting;\n      }\n      this.systemProperties = _lib.default.javaPropertiesToString('-D', metadata.systemProperties);\n      const javaVersion = this.javaVersions.filter(version => version.id === metadata.javaVersion)[0];\n      this.javaVersionSelected = javaVersion || this.javaVersions[0];\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        $(`#updateJavaScenarioForm${this.args.uniqueId}`).parsley().validate();\n      });\n    }\n\n    /**\n     * Create a new file\n     * @param {String} fileName\n     * @param {String} defaultContents\n     */\n    async createFile(fileName, defaultContents) {\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script.dataStores, scriptDs => scriptDs.name === fileName);\n        if (!ds && !this.args.script.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore(fileName, defaultContents).then(result => {\n            this.generatingFiles = false;\n            this.primarySpecName = result.name;\n            resolve();\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n    setDefaultBuildArgs() {\n      if (this.buildToolDefaults.includes(this.buildToolArgs)) {\n        if (this.framework === 'None') {\n          if (this.buildTool === 'maven') {\n            this.buildToolArgs = this.buildToolDefaults[0];\n          } else {\n            this.buildToolArgs = this.buildToolDefaults[1];\n          }\n        } else {\n          this.buildToolArgs = this.buildToolDefaults[2];\n        }\n      }\n    }\n    didInsert() {\n      const resultType = this.args.uniqueId;\n      $(`#updateJavaScenarioForm${resultType}`).parsley().validate();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"framework\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'None';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"buildTool\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'maven';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"buildToolArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'run';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"skipTestableReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"skipTestReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"inputClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"labelClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"primarySpecName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"showCreateSpecModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"showNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"testClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'TestClass';\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"javaVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"systemProperties\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onMetadataChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetadataChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"frameworkChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"frameworkChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBuildTool\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBuildTool\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePrimarySpec\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePrimarySpec\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createSpecModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createSpecModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"javaVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"javaVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"skipTestReportingUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"skipTestReportingUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemPropertiesChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemPropertiesChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initJavaFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initJavaFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"templateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"templateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioJavaComponent);\n});","define(\"@testable/shared-ui/components/scenario/jmeter\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id={{this.formId}}\n    {{did-insert this.didInsert}}\n    {{did-update this.fromMetadata @script.metadata}}\n    {{did-update this.onDataStoreUpdated this.jmxDataStores}}\n    {{did-update this.onTestPlansUpdated this.testPlans}}\n    {{did-update this.onSplitCsvsUpdated this.splitCsvs}}\n    as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceType}} @placeholder=\"Please select source...\"\n                    @disabled={{@readonly}} @onChange={{this.updateSourceType}} as |option|>\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType.id}} data-parsley-required=\"true\"\n                  data-parsley-required-message=\"Must choose source for scenario.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Test Plans <Ui::InfoIcon\n                  @content=\"<p>One or more JMeter test plans to run.</p><p>If multiple test plans are chosen they will be distributed across the JMeter instances that are part of a test configuration. For example if you select two test plans a test configuration with JMeter Instances = 4, then two of the JMeter instances will run the first test plan and two will run the second. If you have less JMeter instances in your test configuration than selected test plans, then not all the test plans will be run.</p>\"\n                  @isHtml={{true}} /></label>\n          <div class=\"{{this.inputClasses}} mw-215px\">\n  \n            {{#if (eq @script.metadata.sourceType 'vcs')}}\n              <Input @type=\"text\" class=\"form-control\"\n                      placeholder=\"Please specify a comma separated list of relative paths to test plans in your repository.\"\n                      @value={{this.testPlans}} {{on \"change\" this.updateMetadata}} />\n  \n            {{else}}\n              <Ui::PSelectMultiple @options={{this.jmxDataStores}} @selected={{this.testPlans}}\n                                @placeholder={{if (gt this.jmxDataStores.length 0) \"Please select one or more test plans.\" \"Please upload a test plan below (*.jmx).\"}}\n                                @disabled={{@readonly}} @onChange={{this.testPlanChange}} as |option|>\n                {{option.path}}\n              </Ui::PSelectMultiple>\n            {{/if}}\n  \n  \n            <Input class=\"hidden\" disabled={{true}} @value={{this.testPlans.length}} data-parsley-min=\"1\"\n                    data-parsley-min-message=\"Please select a test plan.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">JMeter Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.jmeterVersions}} @selected={{this.jmeterVersion}} @disabled={{@readonly}}\n                          @onChange={{this.jmeterVersionChange}} as |version|>\n              {{#if (eq version \"auto\")}}\n                Auto Detect\n              {{else}}\n                JMeter {{version}}\n              {{/if}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Java Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.javaVersions}} @selected={{this.javaVersionSelected}}\n                          @disabled={{@readonly}}\n                          @onChange={{this.javaVersionChanged}} as |version|>\n              {{version.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType.id 'vcs'}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{get (get this.testPlans \"0\") \"id\"}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @model={{@script}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                        @uniqueId={{@uniqueId}}\n                        @readonly={{@script.readonly}}\n                        @isSaving={{@isSaving}}\n                        @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are passed into the JMeter runtime as JMeter properties. You can also reference their value within any configuration above using the ${paramName} syntax.\"\n                        @noteText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your test plan as JMeter properties (<code>${__P(param,5)}</code>). Parameters can also be referenced as <strong>${paramName}</strong> within other configuration items above.\"\n                        @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <Scenario::Ui::AdditionalPanelWrapper @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                <:content>\n  \n                  <div class=\"form-group\">\n                    <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.splitCsvs}} /> Split CSVs across test runners</label>\n                    <Ui::InfoIcon @content={{this.splitCsvText}} @isHtml={{true}} />\n                  </div>\n  \n                  <h4 class=\"m-t-20\">Properties</h4>\n                  <fieldset disabled={{@script.readonly}}>\n                    <div class=\"alert alert-info\">\n                      <strong>Pro Tip!</strong> Reference a <a target=\"_blank\"\n                        href=\"https://docs.testable.io/jmeter/options.html#params\" rel=\"noreferrer noopener\">Testable\n                        parameter</a> using the <code>${paramName}</code> syntax. Use <strong>${cwd}</strong> if you need to\n                      reference the current directory in a property. It will be replaced with the working directory with all of\n                      your uploaded files at runtime.\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">System Properties <Ui::InfoIcon\n                              @content=\"Additional system properties to pass JMeter. Example: -Dfoo=bar -Dabc=xyz\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" maxlength=\"2048\" placeholder=\"System Properties (e.g. -Dfoo=bar)\"\n                                @value={{this.systemProperties}} data-parsley-maxlength=\"2048\"\n                                data-parsley-maxlength-message=\"System properties cannot be longer than 2048 characters.\"\n                                data-parsley-java-props=\"-D\"\n                                {{on \"change\" this.systemPropertiesChange}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">JMeter Properties <Ui::InfoIcon\n                              @content=\"JMeter properties to specify or override the default.\n                              Example: -Jhttp.java.sampler.retries=5\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" maxlength=\"2048\"\n                                placeholder=\"JMeter Properties (e.g. -Jhttp.java.sampler.retries=5)\" @value={{this.jmeterProperties}}\n                                data-parsley-maxlength=\"2048\"\n                                data-parsley-maxlength-message=\"JMeter properties cannot be longer than 2048 characters.\"\n                                data-parsley-java-props=\"-J\"\n                                {{on \"change\" this.jmeterPropertiesChange}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Additional Arguments <Ui::InfoIcon\n                              @content=\"Define any extra arguments you want to pass to the JMeter engine. Example: -LWARN to set the log level to WARN\"\n                              @isHtml={{true}}\n                      /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                                placeholder=\"Additional Arguments\"\n                                @value={{this.additionalArgs}}\n                                {{on \"change\" this.updateMetadata}}\n                        />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">System Properties Files <Ui::InfoIcon\n                              @content=\"Upload a file with system properties that will be passed to JMeter at runtime. This is\n                              convenient if you have many settings. Click to select one or more properties files from the list.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        {{#if this.propertiesDataStores}}\n                          <Ui::PSelectMultiple @options={{this.propertiesDataStores}} @selected={{this.systemPropertiesFiles}}\n                                            @placeholder=\"Select one or more properties files...\" @disabled={{@script.readonly}}\n                                            @onChange={{this.systemPropertiesFilesChanges}} as |ds|>\n                            {{ds.name}}\n                          </Ui::PSelectMultiple>\n                        {{else}}\n                          <span class=\"m-t-5\">Please upload a properties file above first.</span>\n                        {{/if}}\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">JMeter Properties Files <Ui::InfoIcon\n                              @content=\"Upload a file with JMeter properties that will be passed at runtime. This is\n                              convenient if you have many settings. Click to select one or more properties files from\n                              the list.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        {{#if this.propertiesDataStores}}\n                          <Ui::PSelectMultiple @options={{this.propertiesDataStores}} @selected={{this.jmeterPropertiesFiles}}\n                                            @placeholder=\"Select one or more properties files...\" @disabled={{@script.readonly}}\n                                            @onChange={{this.jmeterPropertiesFilesChanges}} as |ds|>\n                            {{ds.name}}\n                          </Ui::PSelectMultiple>\n                        {{else}}\n                          <span class=\"m-t-5\">Please upload a properties file above first.</span>\n                        {{/if}}\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                              @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                              @placement=\"bottom\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.rootFolder}}\n                              {{on \"change\" this.updateRootFolder}} />\n                      </div>\n                    </div>\n                    {{#if (eq this.sourceType.id 'upload')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceRepositoryUrl}}\n                                {{on \"change\" this.updateMetadata}} />\n                        </div>\n                      </div>\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceBranch}}\n                                {{on \"change\" this.updateMetadata}} />\n                        </div>\n                      </div>\n                    {{/if}}\n                  </fieldset>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                <:content>\n  \n                <fieldset disabled={{@script.readonly}}>\n                  <div class=\"form-group\">\n                    <div>\n                      <label>Plugin Repos:</label>\n                      {{this.jmeterPluginRepos}}\n                      <Ui::InfoIcon\n                        @content=\"Update via Org Mgmt => Settings => Package Managers\" />\n                    </div>\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.installPlugins}} {{on \"change\" this.onClickInstallPluginsCheckbox}} /> Automatically install plugins\n                    </label>\n                    {{#if this.installPlugins}}\n                      <div class=\"d-grid m-l-10\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.installJmxPlugins}} {{on \"change\" this.onClickInstallJmxPluginsCheckbox}} /> Download plugins required by your test plan\n                        </label>\n                        <div class=\"d-flex\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.showAdditionalPlugins}} />\n                              Specify additional plugins\n                          </label>\n                          <Ui::InfoIcon\n                                  @content=\"comma separated list of additional plugins to install from the plugin repositories\" />\n                        </div>\n                        {{#if this.showAdditionalPlugins}}\n                            <Input class=\"form-control\" placeholder=\"Additional plugins...\" @value={{this.additionalPlugins}} {{on \"change\" this.updateMetadata}} />\n                        {{/if}}\n                      </div>\n                      {{/if}}\n                  </div>\n                  <div class=\"alert alert-info\">\n                    In addition to automatic plugin installation you can create a lib and lib/ext folder in your scenario for utilities and plugins.\n                    These will be automatically copied into the JMeter installation before running your test plan.\n                    You can also upload a zip file that has lib and lib/ext folders in it and this will be automatically unzipped and copied on the test runner.\n                  </div>\n                </fieldset>\n  \n  \n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 2) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 2) \"name\"}}</:title>\n                <:content>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Setup Command\n                      <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Additional Setup Command\"\n                              @value={{this.additionalSetupCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Teardown Command\n                      <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Teardown Command\"\n                              @value={{this.teardownCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 3) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 3) \"name\"}}</:title>\n                <:content>\n                  <fieldset disabled={{@script.readonly}}>\n                    <div class=\"form-group\">\n                      <div class=\"{{this.inputClasses}}\">\n                        <div class=\"m-t-10\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.txOnly}} {{on 'change' this.txOnlyUpdate}} /> Report transactions only\n                            <div data-bs-placement=\"auto\" data-bs-content=\"If checked, only top level transaction and request metrics are\n                            captured and any metrics for sub requests are not. If unchecked, Testable offers several additional filter\n                            options below.\" data-bs-toggle=\"popover\"\n                                class=\"inline-info-icon no-print\"><Ui::Icon @icon=\"fa fa-info-circle\" /></div>\n                          </label>\n                        </div>\n                        <div class=\"m-t-10\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.reportTxSubRequestsSeparatelyWhenParentChecked}}\n                                    {{on \"change\" this.reportTxSubRequestsSeparatelyWhenParentCheckedUpdate}}\n                            disabled={{this.txOnly}} /> Aggregate each sub request of a transaction separately when \"generate parent sample\" is checked\n                            <div data-bs-placement=\"auto\" data-bs-content='If your test plan includes transaction controllers with\n                            \"generate parent sample\" checked, JMeter will report the transaction metrics as the parent of the sub\n                            requests that comprise the transaction. If you check this box each sub request will be reported separately\n                            (e.g. Tx Name -> Request 123). If you uncheck this box, the sub requests will be aggregated together\n                            (e.g. Tx Name [Results]).'\n                                data-bs-toggle=\"popover\"\n                                class=\"inline-info-icon no-print\"><Ui::Icon @icon=\"fa fa-info-circle\" /></div>\n                          </label>\n                        </div>\n                        <div class=\"m-t-10\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.txWhenParentUnchecked}}\n                                    {{on \"change\" this.txWhenParentUncheckedUpdate}}\n                            disabled={{this.txOnly}} /> Report transaction metrics when \"generate parent sample\" is unchecked\n                            <div data-bs-placement=\"auto\" data-bs-content='If your test plan includes transaction controllers\n                            with \"generate parent sample\" unchecked, all sub requests of the transaction are reported as top level\n                            results. But JMeter will then also report the transaction metrics separately from the sub requests. If\n                              you uncheck this box, the transaction metrics will be excluded from the Testable results in this case.'\n                                data-bs-toggle=\"popover\"\n                                class=\"inline-info-icon no-print\"><Ui::Icon @icon=\"fa fa-info-circle\" /></div>\n                          </label>\n                        </div>\n                      </div>\n                    </div>\n                  </fieldset>\n                </:content>\n              </Yield.AdditionalWrapper>\n              </Scenario::Ui::AdditionalPanelWrapper>\n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                            @repositoryUrl={{this.repositoryUrl}}\n                            @readonly={{@readonly}}\n                            @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}} {{on \"change\" this.updateBranch}} />\n                </div>\n              </div>\n  \n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[30,0,[\\\"formId\\\"]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"fromMetadata\\\"]],[30,1,[\\\"metadata\\\"]]],null],[4,[38,4],[[30,0,[\\\"onDataStoreUpdated\\\"]],[30,0,[\\\"jmxDataStores\\\"]]],null],[4,[38,4],[[30,0,[\\\"onTestPlansUpdated\\\"]],[30,0,[\\\"testPlans\\\"]]],null],[4,[38,4],[[30,0,[\\\"onSplitCsvsUpdated\\\"]],[30,0,[\\\"splitCsvs\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,1],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,2],[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,4,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceType\\\"]],\\\"Please select source...\\\",[30,2],[30,0,[\\\"updateSourceType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[5]]]]],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Must choose source for scenario.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Test Plans \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"<p>One or more JMeter test plans to run.</p><p>If multiple test plans are chosen they will be distributed across the JMeter instances that are part of a test configuration. For example if you select two test plans a test configuration with JMeter Instances = 4, then two of the JMeter instances will run the first test plan and two will run the second. If you have less JMeter instances in your test configuration than selected test plans, then not all the test plans will be run.</p>\\\",true]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" mw-215px\\\"]]],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,11],[[30,1,[\\\"metadata\\\",\\\"sourceType\\\"]],\\\"vcs\\\"],null],[[[1,\\\"            \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Please specify a comma separated list of relative paths to test plans in your repository.\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"testPlans\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,13],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"jmxDataStores\\\"]],[30,0,[\\\"testPlans\\\"]],[52,[28,[37,14],[[30,0,[\\\"jmxDataStores\\\",\\\"length\\\"]],0],null],\\\"Please select one or more test plans.\\\",\\\"Please upload a test plan below (*.jmx).\\\"],[30,2],[30,0,[\\\"testPlanChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,6,[\\\"path\\\"]]],[1,\\\"\\\\n            \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[39,8],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Please select a test plan.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"testPlans\\\",\\\"length\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"JMeter Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"jmeterVersions\\\"]],[30,0,[\\\"jmeterVersion\\\"]],[30,2],[30,0,[\\\"jmeterVersionChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,7],\\\"auto\\\"],null],[[[1,\\\"              Auto Detect\\\\n\\\"]],[]],[[[1,\\\"              JMeter \\\"],[1,[30,7]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"javaVersions\\\"]],[30,0,[\\\"javaVersionSelected\\\"]],[30,2],[30,0,[\\\"javaVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,4,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@showVcsTab\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@model\\\",\\\"@onStoreUpdate\\\",\\\"@filesPanelExpanded\\\"],[[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"defaultFiles\\\"]],[28,[37,17],[[28,[37,17],[[30,0,[\\\"testPlans\\\"]],\\\"0\\\"],null],\\\"id\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,1],[30,9],[30,0,[\\\"filesPanelExpanded\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,16,[[28,[37,19],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,21],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,1,[\\\"paramsConfig\\\"]],[30,11],[30,1,[\\\"readonly\\\"]],[30,12],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are passed into the JMeter runtime as JMeter properties. You can also reference their value within any configuration above using the ${paramName} syntax.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your test plan as JMeter properties (<code>${__P(param,5)}</code>). Parameters can also be referenced as <strong>${paramName}</strong> within other configuration items above.\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,22],null,[[\\\"@additionalWrappers\\\"],[[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,13,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,8],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"splitCsvs\\\"]]]],null],[1,\\\" Split CSVs across test runners\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[[30,0,[\\\"splitCsvText\\\"]],true]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-20\\\"],[12],[1,\\\"Properties\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,1,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Pro Tip!\\\"],[13],[1,\\\" Reference a \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.testable.io/jmeter/options.html#params\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"Testable\\\\n                      parameter\\\"],[13],[1,\\\" using the \\\"],[10,\\\"code\\\"],[12],[1,\\\"${paramName}\\\"],[13],[1,\\\" syntax. Use \\\"],[10,\\\"strong\\\"],[12],[1,\\\"${cwd}\\\"],[13],[1,\\\" if you need to\\\\n                    reference the current directory in a property. It will be replaced with the working directory with all of\\\\n                    your uploaded files at runtime.\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"System Properties \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Additional system properties to pass JMeter. Example: -Dfoo=bar -Dabc=xyz\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"maxlength\\\",\\\"2048\\\"],[24,\\\"placeholder\\\",\\\"System Properties (e.g. -Dfoo=bar)\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"2048\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"System properties cannot be longer than 2048 characters.\\\"],[24,\\\"data-parsley-java-props\\\",\\\"-D\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"systemPropertiesChange\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"systemProperties\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"JMeter Properties \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"JMeter properties to specify or override the default.\\\\n                            Example: -Jhttp.java.sampler.retries=5\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"maxlength\\\",\\\"2048\\\"],[24,\\\"placeholder\\\",\\\"JMeter Properties (e.g. -Jhttp.java.sampler.retries=5)\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"2048\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"JMeter properties cannot be longer than 2048 characters.\\\"],[24,\\\"data-parsley-java-props\\\",\\\"-J\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"jmeterPropertiesChange\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"jmeterProperties\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Additional Arguments \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"Define any extra arguments you want to pass to the JMeter engine. Example: -LWARN to set the log level to WARN\\\",true]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Arguments\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalArgs\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"System Properties Files \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Upload a file with system properties that will be passed to JMeter at runtime. This is\\\\n                            convenient if you have many settings. Click to select one or more properties files from the list.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"propertiesDataStores\\\"]],[[[1,\\\"                        \\\"],[8,[39,13],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"propertiesDataStores\\\"]],[30,0,[\\\"systemPropertiesFiles\\\"]],\\\"Select one or more properties files...\\\",[30,1,[\\\"readonly\\\"]],[30,0,[\\\"systemPropertiesFilesChanges\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,14,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[10,1],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"Please upload a properties file above first.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"JMeter Properties Files \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Upload a file with JMeter properties that will be passed at runtime. This is\\\\n                            convenient if you have many settings. Click to select one or more properties files from\\\\n                            the list.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"propertiesDataStores\\\"]],[[[1,\\\"                        \\\"],[8,[39,13],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"propertiesDataStores\\\"]],[30,0,[\\\"jmeterPropertiesFiles\\\"]],\\\"Select one or more properties files...\\\",[30,1,[\\\"readonly\\\"]],[30,0,[\\\"jmeterPropertiesFilesChanges\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,15,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"]],[15]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[10,1],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"Please upload a properties file above first.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,13,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n              \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,1,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Plugin Repos:\\\"],[13],[1,\\\"\\\\n                    \\\"],[1,[30,0,[\\\"jmeterPluginRepos\\\"]]],[1,\\\"\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Update via Org Mgmt => Settings => Package Managers\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[4,[38,12],[\\\"change\\\",[30,0,[\\\"onClickInstallPluginsCheckbox\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"installPlugins\\\"]]]],null],[1,\\\" Automatically install plugins\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"installPlugins\\\"]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"d-grid m-l-10\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,8],[[4,[38,12],[\\\"change\\\",[30,0,[\\\"onClickInstallJmxPluginsCheckbox\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"installJmxPlugins\\\"]]]],null],[1,\\\" Download plugins required by your test plan\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,8],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"showAdditionalPlugins\\\"]]]],null],[1,\\\"\\\\n                            Specify additional plugins\\\\n                        \\\"],[13],[1,\\\"\\\\n                        \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"comma separated list of additional plugins to install from the plugin repositories\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAdditionalPlugins\\\"]],[[[1,\\\"                          \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional plugins...\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"additionalPlugins\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"\\\\n                  In addition to automatic plugin installation you can create a lib and lib/ext folder in your scenario for utilities and plugins.\\\\n                  These will be automatically copied into the JMeter installation before running your test plan.\\\\n                  You can also upload a zip file that has lib and lib/ext folders in it and this will be automatically unzipped and copied on the test runner.\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,13,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Setup Command\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Teardown Command\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,13,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],3],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,17],[[28,[37,17],[[30,0,[\\\"additionalWrappers\\\"]],3],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,1,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,8],[[4,[38,12],[\\\"change\\\",[30,0,[\\\"txOnlyUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"txOnly\\\"]]]],null],[1,\\\" Report transactions only\\\\n                          \\\"],[10,0],[14,\\\"data-bs-placement\\\",\\\"auto\\\"],[14,\\\"data-bs-content\\\",\\\"If checked, only top level transaction and request metrics are\\\\n                          captured and any metrics for sub requests are not. If unchecked, Testable offers several additional filter\\\\n                          options below.\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,0,\\\"inline-info-icon no-print\\\"],[12],[8,[39,31],null,[[\\\"@icon\\\"],[\\\"fa fa-info-circle\\\"]],null],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,8],[[16,\\\"disabled\\\",[30,0,[\\\"txOnly\\\"]]],[4,[38,12],[\\\"change\\\",[30,0,[\\\"reportTxSubRequestsSeparatelyWhenParentCheckedUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"reportTxSubRequestsSeparatelyWhenParentChecked\\\"]]]],null],[1,\\\" Aggregate each sub request of a transaction separately when \\\\\\\"generate parent sample\\\\\\\" is checked\\\\n                          \\\"],[10,0],[14,\\\"data-bs-placement\\\",\\\"auto\\\"],[14,\\\"data-bs-content\\\",\\\"If your test plan includes transaction controllers with\\\\n                          \\\\\\\"generate parent sample\\\\\\\" checked, JMeter will report the transaction metrics as the parent of the sub\\\\n                          requests that comprise the transaction. If you check this box each sub request will be reported separately\\\\n                          (e.g. Tx Name -> Request 123). If you uncheck this box, the sub requests will be aggregated together\\\\n                          (e.g. Tx Name [Results]).\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,0,\\\"inline-info-icon no-print\\\"],[12],[8,[39,31],null,[[\\\"@icon\\\"],[\\\"fa fa-info-circle\\\"]],null],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,8],[[16,\\\"disabled\\\",[30,0,[\\\"txOnly\\\"]]],[4,[38,12],[\\\"change\\\",[30,0,[\\\"txWhenParentUncheckedUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"txWhenParentUnchecked\\\"]]]],null],[1,\\\" Report transaction metrics when \\\\\\\"generate parent sample\\\\\\\" is unchecked\\\\n                          \\\"],[10,0],[14,\\\"data-bs-placement\\\",\\\"auto\\\"],[14,\\\"data-bs-content\\\",\\\"If your test plan includes transaction controllers\\\\n                          with \\\\\\\"generate parent sample\\\\\\\" unchecked, all sub requests of the transaction are reported as top level\\\\n                          results. But JMeter will then also report the transaction metrics separately from the sub requests. If\\\\n                            you uncheck this box, the transaction metrics will be excluded from the Testable results in this case.\\\"],[14,\\\"data-bs-toggle\\\",\\\"popover\\\"],[14,0,\\\"inline-info-icon no-print\\\"],[12],[8,[39,31],null,[[\\\"@icon\\\"],[\\\"fa fa-info-circle\\\"]],null],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[13]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,32],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,2],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,12],[\\\"change\\\",[30,0,[\\\"updateBranch\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,16,[[28,[37,19],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,4,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,1],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[4]]]]],[1,\\\"\\\\n\\\"]],[\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@uniqueId\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"ds\\\",\\\"ds\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"ui/info-icon\\\",\\\"if\\\",\\\"eq\\\",\\\"on\\\",\\\"ui/p-select-multiple\\\",\\\"gt\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"get\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\":title\\\",\\\":content\\\",\\\"h4\\\",\\\"fieldset\\\",\\\"strong\\\",\\\"a\\\",\\\"code\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/jmeter.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultJmeterVersion = _environment.config.defaultJmeterVersion;\n  let ScenarioJmeter = _exports.default = (_class = class ScenarioJmeter extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"splitCsvText\", _lib.default.SplitCsvText);\n      _defineProperty(this, \"jmeterVersions\", _environment.config.jmeterVersions);\n      _defineProperty(this, \"javaVersions\", _environment.config.javaVersions);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor, this);\n      _initializerDefineProperty(this, \"jmeterVersion\", _descriptor2, this);\n      _initializerDefineProperty(this, \"threads\", _descriptor3, this);\n      _initializerDefineProperty(this, \"duration\", _descriptor4, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor5, this);\n      _initializerDefineProperty(this, \"rampup\", _descriptor6, this);\n      _initializerDefineProperty(this, \"delay\", _descriptor7, this);\n      _initializerDefineProperty(this, \"systemProperties\", _descriptor8, this);\n      _initializerDefineProperty(this, \"jmeterProperties\", _descriptor9, this);\n      _initializerDefineProperty(this, \"systemPropertiesFiles\", _descriptor0, this);\n      _initializerDefineProperty(this, \"jmeterPropertiesFiles\", _descriptor1, this);\n      _defineProperty(this, \"isInit\", false);\n      _initializerDefineProperty(this, \"sourceTypes\", _descriptor10, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor11, this);\n      _initializerDefineProperty(this, \"txOnly\", _descriptor12, this);\n      _initializerDefineProperty(this, \"reportTxSubRequestsSeparatelyWhenParentChecked\", _descriptor13, this);\n      _initializerDefineProperty(this, \"txWhenParentUnchecked\", _descriptor14, this);\n      _initializerDefineProperty(this, \"jmeterPluginRepos\", _descriptor15, this);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'plugins',\n        name: 'Plugins'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }, {\n        id: 'reportingOptions',\n        name: 'Reporting Options'\n      }]);\n      _initializerDefineProperty(this, \"formId\", _descriptor16, this);\n      _initializerDefineProperty(this, \"testPlans\", _descriptor17, this);\n      _initializerDefineProperty(this, \"testPlanName\", _descriptor18, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor19, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor20, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor21, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor22, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor23, this);\n      _initializerDefineProperty(this, \"splitCsvs\", _descriptor24, this);\n      _initializerDefineProperty(this, \"javaVersionSelected\", _descriptor25, this);\n      _initializerDefineProperty(this, \"additionalArgs\", _descriptor26, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor27, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor28, this);\n      _initializerDefineProperty(this, \"installPlugins\", _descriptor29, this);\n      _initializerDefineProperty(this, \"installJmxPlugins\", _descriptor30, this);\n      _initializerDefineProperty(this, \"showAdditionalPlugins\", _descriptor31, this);\n      _initializerDefineProperty(this, \"additionalPlugins\", _descriptor32, this);\n      _initializerDefineProperty(this, \"defaultFile\", _descriptor33, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor34, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor35, this);\n      _initializerDefineProperty(this, \"alreadyExtracting\", _descriptor36, this);\n      const uploadOption = _object.default.create({\n        id: 'upload',\n        name: 'Upload Files'\n      });\n      const vcsOption = _object.default.create({\n        id: 'vcs',\n        name: 'Version Control'\n      });\n      this.formId = 'updateJmeterScenarioForm' + this.args.uniqueId;\n      this.sourceTypes = [uploadOption, vcsOption];\n      (0, _runloop.next)(this, () => {\n        this._fromMetadata();\n        this._onDataStoreUpdated();\n      });\n    }\n    get metadata() {\n      const metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    get defaultFiles() {\n      const show = _.isEmpty(this.args.script?.dataStores) && this.sourceType?.id === 'upload';\n      if (show) {\n        return [{\n          id: 'uploadBtn',\n          type: 'uploadBtn',\n          name: 'Upload Test Plan',\n          path: '',\n          readonly: true,\n          isFolder: false,\n          fileType: 'button'\n        }];\n      }\n      return;\n    }\n    get jmxDataStores() {\n      return this.dataStoresForExt('.jmx');\n    }\n    get propertiesDataStores() {\n      return this.dataStoresForExt('.properties');\n    }\n    onDataStoreUpdated() {\n      this._onDataStoreUpdated();\n    }\n    _onDataStoreUpdated() {\n      if (this.sourceType?.id !== 'vcs') {\n        if (this.jmxDataStores?.length === 1) {\n          this.testPlans = [this.jmxDataStores[0]];\n          this.save();\n        } else if (this.jmxDataStores?.length === 0) {\n          this.testPlans = [];\n          this.save();\n        } else {\n          const testPlans = this.testPlans;\n          if (testPlans) {\n            const filtered = _.filter(testPlans, testPlan => {\n              return this.toDataStore(testPlan.name);\n            });\n            const isTestPlansUpdated = _.some(testPlans, testPlan => {\n              return _.some(this.jmxDataStores, jmxDataStore => {\n                return jmxDataStore.id === testPlan.id && moment(jmxDataStore.updatedAt) > moment(testPlan.updatedAt);\n              });\n            });\n            if (filtered.length !== testPlans.length || isTestPlansUpdated) {\n              for (let i = 0; i < filtered.length; i++) {\n                filtered[i] = this.jmxDataStores.find(ds => ds.id === filtered[i].id);\n              }\n              this.testPlans = filtered;\n            }\n          }\n        }\n      }\n      (0, _runloop.scheduleOnce)('afterRender', () => {\n        $(\"#\" + this.formId).parsley().validate();\n      });\n    }\n    onTestPlansUpdated() {\n      const plans = this.testPlans;\n      const alreadyExtracting = this.alreadyExtracting;\n      if (!this.isInit && !this.args.script?.readonly && _.isArray(plans) && plans.length && !alreadyExtracting) this.extractParams(plans.map(plan => plan.id).join(','));\n    }\n    onSplitCsvsUpdated() {\n      this.save();\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    systemPropertiesFilesChanges(value) {\n      if (!_.isEqual(value, this.systemPropertiesFiles)) {\n        this.updateValue('systemPropertiesFiles', value);\n      }\n    }\n    jmeterPropertiesFilesChanges(value) {\n      if (!_.isEqual(value, this.jmeterPropertiesFiles)) {\n        this.updateValue('jmeterPropertiesFiles', value);\n      }\n    }\n    testPlanChange(value) {\n      this.testPlanName = this.toDataStoreNames(value).join(',') || '';\n      this.updateValue('testPlans', value);\n    }\n    jmeterVersionChange(value) {\n      if (!_.isEqual(value, this.metadata?.version)) {\n        if (value === '5.5' && this.javaVersionSelected?.id === _environment.config.defaultJavaVersion) {\n          this.javaVersionSelected = this.javaVersions.find(v => v.id === '17');\n        }\n        this.updateValue('jmeterVersion', value);\n      }\n    }\n    systemPropertiesChange(val) {\n      let value = val.target.value;\n      if (!_.isEqual(value, _lib.default.javaPropertiesToString('-D', this.metadata?.systemProperties))) {\n        this.updateValue('systemProperties', value, true);\n      }\n    }\n    jmeterPropertiesChange(val) {\n      let value = val.target.value;\n      if (!_.isEqual(value, _lib.default.javaPropertiesToString('-J', this.metadata?.jmeterProperties))) {\n        this.updateValue('jmeterProperties', value, true);\n      }\n    }\n    javaVersionChanged(selection) {\n      if (!_.isEqual(selection.id, this.metadata?.javaVersion)) {\n        this.updateValue('javaVersionSelected', selection);\n      }\n    }\n    updateSourceType(value) {\n      this.sourceType = value;\n      this.save();\n    }\n    updateBranch() {\n      this.save();\n    }\n    updateMetadata() {\n      this.save();\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.save();\n      }\n    }\n    txOnlyUpdate(e) {\n      this.txOnly = e.target.checked;\n      this.reportTxSubRequestsSeparatelyWhenParentChecked = true;\n      this.txWhenParentUnchecked = true;\n      this.save();\n    }\n    reportTxSubRequestsSeparatelyWhenParentCheckedUpdate(e) {\n      this.reportTxSubRequestsSeparatelyWhenParentChecked = e.target.checked;\n      this.save();\n    }\n    txWhenParentUncheckedUpdate(e) {\n      this.txWhenParentUnchecked = e.target.checked;\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.save();\n    }\n    onClickInstallPluginsCheckbox(event) {\n      this.installPlugins = event.target.checked;\n      this.save();\n    }\n    onClickInstallJmxPluginsCheckbox(event) {\n      this.installJmxPlugins = event.target.checked;\n      this.save();\n    }\n    updateValue(name, newVal) {\n      this[name] = newVal;\n      this.args.hasUnsavedChanges();\n      this.save();\n    }\n    save() {\n      (0, _runloop.debounce)(this, 'saveScenario', 100);\n    }\n    saveScenario() {\n      const origMetadata = this.args.script?.metadata;\n      if (origMetadata && (this.isInit || this.args.script?.readonly)) {\n        return;\n      }\n      (0, _runloop.schedule)('afterRender', this, () => {\n        $(\"#\" + this.formId).parsley().validate();\n      });\n      const metadata = this.toMetadata();\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata, null, true);\n      }\n    }\n    dataStoresForExt(ext) {\n      return _lib.default.getFilesWithExt(this.args.script?.dataStores, ext);\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      this.isInit = true;\n      const metadata = this.metadata;\n      this.jmeterVersion = metadata.version || DefaultJmeterVersion;\n      this.systemPropertiesFiles = this.toDataStores(metadata.systemPropertiesFiles);\n      this.jmeterPropertiesFiles = this.toDataStores(metadata.jmeterPropertiesFiles);\n      this.systemProperties = _lib.default.javaPropertiesToString('-D', metadata.systemProperties);\n      this.jmeterProperties = _lib.default.javaPropertiesToString('-J', metadata.jmeterProperties);\n      this.txOnly = _.isBoolean(metadata.txOnly) ? metadata.txOnly : false;\n      this.reportTxSubRequestsSeparatelyWhenParentChecked = _.isBoolean(metadata.reportTxSubRequestsSeparatelyWhenParentChecked) ? metadata.reportTxSubRequestsSeparatelyWhenParentChecked : true;\n      this.txWhenParentUnchecked = _.isBoolean(metadata.txWhenParentUnchecked) ? metadata.txWhenParentUnchecked : true;\n      this.splitCsvs = _.isBoolean(metadata.splitCsvs) ? metadata.splitCsvs : false;\n      const javaVersion = this.javaVersions.filter(version => version.id === metadata.javaVersion)[0];\n      this.javaVersionSelected = javaVersion || this.javaVersions[0];\n      this.additionalArgs = metadata.additionalArgs;\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.installPlugins = metadata.installPlugins ?? true;\n      this.installJmxPlugins = metadata.installJmxPlugins ?? true;\n      this.showAdditionalPlugins = !!metadata.additionalPlugins;\n      this.additionalPlugins = metadata.additionalPlugins;\n      (0, _runloop.schedule)('afterRender', this, () => {\n        $(\"#\" + this.formId).parsley().validate();\n      });\n      metadata.sourceType = metadata.sourceType || this.sourceTypes?.[0]?.id;\n      this.sourceType = this.sourceTypes.find(s => s.id === metadata.sourceType);\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n        this.testPlans = metadata.testPlanName ? _.isArray(metadata.testPlanName) ? metadata.testPlanName.map(tp => tp.name).toString() : metadata.testPlanName : '';\n      } else {\n        this.testPlans = metadata.testPlanName ? this.toDataStores(metadata.testPlanName.split(',')) : [];\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        this.isInit = false;\n      });\n    }\n    toMetadata() {\n      const metadata = {};\n      const testPlans = this.testPlans;\n      metadata.sourceType = this.sourceType?.id;\n      if (testPlans && metadata.sourceType !== 'vcs' && testPlans.length > 0) {\n        metadata.testPlanName = this.toDataStoreNames(testPlans).join(',');\n      } else if (testPlans && metadata.sourceType === 'vcs') {\n        metadata.testPlanName = testPlans;\n      }\n      if (_.isUndefined(metadata.testPlanName) && this.jmxDataStores?.length > 0) {\n        metadata.testPlanName = this.jmxDataStores[0].name;\n      }\n      metadata.systemProperties = _lib.default.splitJavaProperties('-D', this.systemProperties);\n      metadata.jmeterProperties = _lib.default.splitJavaProperties('-J', this.jmeterProperties);\n      metadata.systemPropertiesFiles = this.toDataStoreNames(this.systemPropertiesFiles);\n      metadata.jmeterPropertiesFiles = this.toDataStoreNames(this.jmeterPropertiesFiles);\n      metadata.version = this.jmeterVersion;\n      metadata.txOnly = this.txOnly;\n      metadata.reportTxSubRequestsSeparatelyWhenParentChecked = this.reportTxSubRequestsSeparatelyWhenParentChecked;\n      metadata.txWhenParentUnchecked = this.txWhenParentUnchecked;\n      metadata.splitCsvs = this.splitCsvs;\n      metadata.javaVersion = this.javaVersionSelected?.id;\n      if (this.additionalArgs) metadata.additionalArgs = this.additionalArgs;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      metadata.installPlugins = this.installPlugins;\n      if (metadata.installPlugins) {\n        metadata.installJmxPlugins = this.installJmxPlugins;\n        if (this.showAdditionalPlugins) {\n          metadata.additionalPlugins = this.additionalPlugins;\n        }\n      }\n      metadata.sourceType = this.sourceType?.id;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        if (this.sourceRepositoryUrl) metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        if (this.sourceBranch) metadata.sourceBranch = this.sourceBranch;\n      }\n      return metadata;\n    }\n    toDataStoreNames(dataStores) {\n      return _.map(dataStores, ds => {\n        return ds.path ? ds.path.substring(1) : ds.name;\n      });\n    }\n    toDataStores(dsNames) {\n      let dataStores = this.args.script?.dataStores;\n      let answer = [];\n      _.forEach(dsNames, dsName => {\n        let ds = _.find(dataStores, dataStore => {\n          return dataStore.name === dsName || dataStore.path === `/${dsName}`;\n        });\n        if (ds) {\n          answer.push(ds);\n        }\n      });\n      return answer;\n    }\n    toDataStore(dsName) {\n      return _.find(this.args.script?.dataStores, dataStore => {\n        return dataStore.name === dsName;\n      });\n    }\n    extractParams(dataStoreIds) {\n      if (!dataStoreIds.length) {\n        return;\n      }\n      this.alreadyExtracting = true;\n      let _this = this;\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/jmeter/extract-params?dataStoreIds=\" + dataStoreIds),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(response => {\n        let params = _this.args.script?.paramsConfig || [];\n        _this.args.script.paramsConfig = params;\n        let paramsLength = params.length;\n        let ifParamsUpdated = false;\n        for (let resp of response) {\n          if (!params.filter(p => resp === p.name).length) {\n            let obj = {\n              id: paramsLength++,\n              name: resp,\n              required: false\n            };\n            params.push(obj);\n            ifParamsUpdated = true;\n          }\n        }\n        if (ifParamsUpdated) {\n          _this.args.script.paramsConfig = params;\n          _this.args.paramsConfigChanged(params);\n          _this.selectedPanel = 'paramsTab';\n          _this.args.script.notifyPropertyChange?.('paramsConfig');\n        }\n        _this.alreadyExtracting = false;\n      });\n    }\n    didInsert() {\n      $(\"#\" + this.formId).parsley();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"jmeterVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return DefaultJmeterVersion;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"threads\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"duration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"rampup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"delay\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"systemProperties\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"jmeterProperties\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"systemPropertiesFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"jmeterPropertiesFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"sourceTypes\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"txOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"reportTxSubRequestsSeparatelyWhenParentChecked\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"txWhenParentUnchecked\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"jmeterPluginRepos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser?.org?.settings?.jmeterPluginRepos || 'https://jmeter-plugins.org/repo/';\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"formId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"testPlans\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"testPlanName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"splitCsvs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"javaVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"additionalArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"installPlugins\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"installJmxPlugins\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"showAdditionalPlugins\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"additionalPlugins\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"defaultFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"alreadyExtracting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onDataStoreUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataStoreUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onTestPlansUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onTestPlansUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSplitCsvsUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSplitCsvsUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemPropertiesFilesChanges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemPropertiesFilesChanges\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"jmeterPropertiesFilesChanges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"jmeterPropertiesFilesChanges\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testPlanChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testPlanChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"jmeterVersionChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"jmeterVersionChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemPropertiesChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemPropertiesChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"jmeterPropertiesChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"jmeterPropertiesChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"javaVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"javaVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSourceType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSourceType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBranch\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBranch\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"txOnlyUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"txOnlyUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"reportTxSubRequestsSeparatelyWhenParentCheckedUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"reportTxSubRequestsSeparatelyWhenParentCheckedUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"txWhenParentUncheckedUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"txWhenParentUncheckedUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onClickInstallPluginsCheckbox\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClickInstallPluginsCheckbox\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onClickInstallJmxPluginsCheckbox\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClickInstallJmxPluginsCheckbox\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioJmeter);\n});","define(\"@testable/shared-ui/components/scenario/link\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @script}}\n    <LinkTo\n            @route={{this.linkRoute}}\n            @model={{this.linkId}}\n            class=\"{{@linkClasses}} {{if @isInline 'inline-link' 'summary-content'}}\">\n      {{#if (has-block)}}\n        {{yield}}\n      {{else}}\n        {{this.linkText}}\n      {{/if}}\n    </LinkTo>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[8,[39,1],[[16,0,[29,[[30,2],\\\" \\\",[52,[30,3],\\\"inline-link\\\",\\\"summary-content\\\"]]]]],[[\\\"@route\\\",\\\"@model\\\"],[[30,0,[\\\"linkRoute\\\"]],[30,0,[\\\"linkId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[48,[30,4]],[[[1,\\\"      \\\"],[18,4,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[1,[30,0,[\\\"linkText\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@script\\\",\\\"@linkClasses\\\",\\\"@isInline\\\",\\\"&default\\\"],[\\\"if\\\",\\\"link-to\\\",\\\"has-block\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/link.hbs\",\n    \"isStrictMode\": false\n  });\n  class ScenarioLinkComponent extends _component2.default {\n    get linkText() {\n      let scriptName = this.args.script?.name;\n      if (_.isString(scriptName)) {\n        return scriptName;\n      }\n      return '-';\n    }\n    get linkId() {\n      let srcType = this.args.script?.sourceType;\n      if (srcType === 'Recording') {\n        return this.args.script.sourceId;\n      }\n      return this.args.script?.id;\n    }\n    get linkRoute() {\n      let srcType = this.args.script?.sourceType;\n      if (srcType === 'Recording') {\n        return 'recording';\n      }\n      return 'scenario';\n    }\n  }\n  _exports.default = ScenarioLinkComponent;\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioLinkComponent);\n});","define(\"@testable/shared-ui/components/scenario/locust\", [\"exports\", \"@ember/component\", \"@ember/runloop\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/templates/locust-templates\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _runloop, _object, _component2, _tracking, _lib, _environment, _locustTemplates, _template, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/runloop\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/templates/locust-templates\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updateLocustScenarioForm{{@uniqueId}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.fromMetadata @script.metadata}}\n    {{did-update this.onSourceTypeUpdated this.sourceType}}\n    {{did-update this.onSplitCsvsUpdated this.splitCsvs}}\n    as |Wrapper|\n  >\n    {{#unless @isRemote}}\n      <Wrapper.Filters >\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Language</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.LanguageOptions}} @selected={{this.language}} @placeholder=\"Load generator language...\"\n                      @disabled={{@readonly}} @onChange={{this.updateLanguage}} as |option|>\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceType}} @placeholder=\"Please select source...\"\n                      @disabled={{@readonly}} @onChange={{this.updateSourceType}} as |option|>\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType.id}} data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Must choose source for scenario.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          {{#if (eq this.language.id 'python')}}\n            <label class=\"{{this.labelClasses}}\">Locust File <Ui::InfoIcon\n                    @content=\"Python module to import. Passed as the --locustfile parameter. Must be uploaded to this scenario.\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\" class=\"form-control\" placeholder=\"Locust file\" @value={{this.fileName}}\n                      {{on \"change\" this.updateMetadata}} />\n            </div>\n          {{else if (eq this.language.id 'java')}}\n            <label class=\"{{this.labelClasses}}\">Main Class Name <Ui::InfoIcon\n                    @content=\"The name of the main class to run (fully qualified including package name if any).\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\" class=\"form-control\" placeholder=\"Main Class Name\" @value={{this.fileName}}\n                      {{on \"change\" this.updateMetadata}} />\n            </div>\n          {{/if}}\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Locust Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.LocustVersions}} @selected={{this.locustVersion}} @disabled={{@readonly}}\n                      @onChange={{this.locustVersionChanged}} as |version|>\n              {{version.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Python Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.supportedPythonVersions}} @selected={{this.pythonVersion}} @disabled={{@readonly}}\n                      @onChange={{this.pythonVersionChanged}} as |version|>\n              Python {{version}}\n            </Ui::PSelect>\n          </div>\n        </div>\n        {{#if (eq this.language.id 'java')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Java Version</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.javaVersions}} @selected={{this.javaVersionSelected}}\n                            @disabled={{@readonly}}\n                            @onChange={{this.javaVersionChanged}} as |version|>\n                {{version.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType.id 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @defaultFiles={{this.defaultFiles}}\n            @templates={{this.fileTemplateOptions}}\n            @selectedTemplate={{this.fileTemplateSelected}}\n            @defaultFileId={{this.file.id}}\n            @generateExampleFiles={{this.createInitFiles}}\n            @enableGenerateExample={{this.enableGenerateExample}}\n            @generatingFiles={{this.generatingFiles}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @model={{@script}}\n            @language={{this.language}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                          @uniqueId={{@uniqueId}}\n                          @readonly={{@script.readonly}}\n                          @isSaving={{@isSaving}}\n                          @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your code.\"\n                          @noteText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available as the environment variable <strong>ABC</strong>.\"\n                          @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <Scenario::Ui::AdditionalPanelWrapper @handledChild={{true}} @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n              <Yield.AdditionalWrapper @selectedTab={{get (get this.additionalWrappers 0) \"id\"}} @id={{get (get this.additionalWrappers 0) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                <:content>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Host <Ui::InfoIcon\n                            @content=\"Host to load test. Passed as the --host parameter. Not required if the host property is specified on the Locust class.\" /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\" placeholder=\"Host to test\" @value={{this.host}}\n                              {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n  \n                  {{#if (and @script.readonly this.requests)}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\"># of Requests <Ui::InfoIcon\n                              @content=\"Number of requests to perform per Locust instance. Passed as the --num-request parameter. <strong>NO LONGER SUPPORTED</strong>\"\n                              @isHtml={{true}} /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Number of to perform per Locust instance\"\n                                @value={{this.requests}} />\n                      </div>\n                    </div>\n                  {{/if}}\n  \n                  {{#if (eq this.language.id 'python')}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Locust Classes (optional) <Ui::InfoIcon\n                              @content=\"If your module contains multiple Locust classes you can optionally specify which one(s)\n                              to run here. Use a space to separate multiple entries. By default all are run.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\" placeholder=\"Locust Classes to run\" @value={{this.locustClasses}}\n                                {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Log Level <Ui::InfoIcon\n                            @content=\"Locust log level. Passed as the --loglevel parameter.\" /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Ui::PSelect @options={{this.LogLevels}} @selected={{this.logLevel}} @placeholder=\"Please select a log level...\"\n                                @disabled={{@script.readonly}} @onChange={{this.updateLogLevel}} as |option|>\n                        {{option}}\n                      </Ui::PSelect>\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Additional Arguments <Ui::InfoIcon\n                            @content=\"Define any extra arguments you want to pass to the Locust engine. Note that arguments\n                            like --users, --run-time, --host, --spawn-rate, and --loglevel have specific inputs on this page so\n                            you do not define them here. Example: --stop-timeout 60.\"\n                            @isHtml={{true}}\n                    /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Extra Arguments\"\n                              @value={{this.additionalArgs}}\n                              {{on \"change\" this.updateMetadata}}\n                      />\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"normal\"><Input @type=\"checkbox\" @checked={{this.splitCsvs}} /> Split CSVs across test runners</label>\n                    <Ui::InfoIcon @content={{this.splitCsvText}} @isHtml={{true}} />\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                            @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                            @placement=\"bottom\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"\"\n                            @value={{this.rootFolder}}\n                            {{on \"change\" this.updateRootFolder}} />\n                    </div>\n                  </div>\n                  {{#if (eq this.sourceType.id 'upload')}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceRepositoryUrl}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceBranch}}\n                              {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @selectedTab={{get (get this.additionalWrappers 1) \"id\"}} @id={{get (get this.additionalWrappers 1) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                <:content>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Setup Command\n                      <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Additional Setup Command\"\n                              @value={{this.additionalSetupCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Teardown Command\n                      <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Teardown Command\"\n                              @value={{this.teardownCommand}} {{on \"change\" this.updateMetadata}} />\n                    </div>\n                  </div>\n  \n                  <Forms::ResourcePartsInput\n                          @labelClasses={{this.labelClasses}}\n                          @inputClasses={{this.inputClasses}}\n                          @resourceParts={{this.resourceParts}}\n                          @resourceNameMappings={{this.resourceNameMappings}}\n                          @overrideOrgDefault={{this.overrideOrgDefault}}\n                          @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                          @onChange={{this.updateResourceParts}}\n                          @editable={{not @readonly}}\n                  />\n  \n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @selectedTab={{get (get this.additionalWrappers 2) \"id\"}} @id={{get (get this.additionalWrappers 2) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 2) \"name\"}}</:title>\n                <:content>\n  \n                  <div class=\"form-group\">\n                    <BsButtonGroup @value={{this.loadPerEngineType}} @type=\"radio\" @onChange={{this.changeLoadPerEngineType}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"Basic\" @size=\"sm\">Basic</bg.button>\n                      <bg.button @type=\"success\" @value=\"Advanced\" @size=\"sm\">Advanced</bg.button>\n                      {{#if (gte this.locustMajorVersion 2)}}\n                        <bg.button @type=\"success\" @value=\"Custom\" @size=\"sm\">Custom Load Shape</bg.button>\n                      {{/if}}\n                    </BsButtonGroup>\n                  </div>\n  \n                  {{#if (eq this.loadPerEngineType 'Basic')}}\n                    <div class=\"note note-info alert\">\n                      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n                        You will configure the number of users per Locust engine when you create a test configuration to run this\n                        scenario and set Load Type = Basic.\n                    </div>\n                  {{else if (eq this.loadPerEngineType 'Custom')}}\n                    <div class=\"note note-info alert\">\n                      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n                        <p>If your locustfile defines a <a target=\"_blank\" href=\"https://docs.locust.io/en/stable/custom-load-shape.html\">custom load shape</a>\n                        then we do not pass the --users, --spawn-rate, or --run-time arguments to Locust when launching your test. You can still\n                        parameterize your custom load shape by declaring whatever parameters make sense below, passing value(s) in each test configuration, and accessing\n                        those values in your code with <code>os.environ.get('[name]')</code>.</p>\n                        <p>In your test configuration choose Load Type = Advanced and choose the number of engines to spin up in your test. The load\n                          profile of each engine is controlled by your custom load shape.</p>\n                    </div>\n                  {{else}}\n                    <div class=\"note note-info alert\">\n                      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n                      Configure the desired number of users and runtime here and then in your test configuration you can choose\n                      Load Type = Advanced and choose the number of engines to spin up in your test.\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Concurrent Clients <Ui::InfoIcon\n                              @content=\"Number of concurrent clients per Locust instance. Passed as the --users or --clients parameter depending on Locust version.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                                placeholder=\"Concurrent clients per Locust Instance\"\n                                @value={{this.clients}} data-parsley-required=\"true\"\n                                data-parsley-number-with-param=\"true\"\n                                data-parsley-required-message=\"Concurrent clients must be specified.\"\n                                {{on \"change\" this.updateMetadata}} />\n                      </div>\n                    </div>\n                    {{#if (or (not @script.readonly) this.runtime)}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Run Time <Ui::InfoIcon\n                                @content=\"Stop after the specified amount of time, e.g. (300s, 20m, 3h, 1h30m, etc.). Passed as the --run-time parameter.\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Stop after specified time (e.g. 1m, 30s, 1h, etc)\"\n                                  @value={{this.runtime}} data-parsley-required=\"true\"\n                                  data-parsley-step-time-with-param=\"true\"\n                                  data-parsley-required-message=\"Run time must be specified.\"\n                                  {{on \"change\" this.updateMetadata}} />\n                        </div>\n                      </div>\n                    {{/if}}\n                  {{/if}}\n                  {{#if (not-eq this.loadPerEngineType 'Custom')}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">\n                        {{if (gte this.locustMajorVersion 2) 'Spawn' 'Hatch' }} Rate\n                        <Ui::InfoIcon\n                              @content=\"The rate per second in which clients are spawned per Locust instance. Passed as the --{{if (gte this.locustMajorVersion 2) 'spawn' 'hatch' }}-rate parameter.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"{{if (gte this.locustMajorVersion 2) 'Spawn' 'Hatch' }} rate per Locust instance\"\n                              @value={{this.hatchRate}}\n                              {{on \"change\" this.updateMetadata}}\n                              data-parsley-required=\"true\"\n                              data-parsley-number-with-param=\"true\"\n                              data-parsley-required-message=\"{{if (gte this.locustMajorVersion 2) 'Spawn' 'Hatch' }} rate must be specified.\" />\n                      </div>\n                    </div>\n                  {{/if}}\n  \n                </:content>\n              </Yield.AdditionalWrapper>\n              </Scenario::Ui::AdditionalPanelWrapper>\n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                              @repositoryUrl={{this.repositoryUrl}}\n                              @readonly={{@readonly}}\n                              @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}} {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n  \n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n    {{/unless}}\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updateLocustScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"fromMetadata\\\"]],[30,2,[\\\"metadata\\\"]]],null],[4,[38,4],[[30,0,[\\\"onSourceTypeUpdated\\\"]],[30,0,[\\\"sourceType\\\"]]],null],[4,[38,4],[[30,0,[\\\"onSplitCsvsUpdated\\\"]],[30,0,[\\\"splitCsvs\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Language\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"LanguageOptions\\\"]],[30,0,[\\\"language\\\"]],\\\"Load generator language...\\\",[30,3],[30,0,[\\\"updateLanguage\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceType\\\"]],\\\"Please select source...\\\",[30,3],[30,0,[\\\"updateSourceType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n          \\\"],[8,[39,9],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Must choose source for scenario.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"language\\\",\\\"id\\\"]],\\\"python\\\"],null],[[[1,\\\"          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Locust File \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Python module to import. Passed as the --locustfile parameter. Must be uploaded to this scenario.\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Locust file\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"fileName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,11],[[30,0,[\\\"language\\\",\\\"id\\\"]],\\\"java\\\"],null],[[[1,\\\"          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Main Class Name \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"The name of the main class to run (fully qualified including package name if any).\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Main Class Name\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"fileName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]],null]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Locust Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"LocustVersions\\\"]],[30,0,[\\\"locustVersion\\\"]],[30,3],[30,0,[\\\"locustVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[9]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Python Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"supportedPythonVersions\\\"]],[30,0,[\\\"pythonVersion\\\"]],[30,3],[30,0,[\\\"pythonVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Python \\\"],[1,[30,10]],[1,\\\"\\\\n          \\\"]],[10]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"language\\\",\\\"id\\\"]],\\\"java\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Version\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"javaVersions\\\"]],[30,0,[\\\"javaVersionSelected\\\"]],[30,3],[30,0,[\\\"javaVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[11]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,15],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@defaultFiles\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@defaultFileId\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@language\\\",\\\"@onStoreUpdate\\\"],[[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"fileTemplateOptions\\\"]],[30,0,[\\\"fileTemplateSelected\\\"]],[30,0,[\\\"file\\\",\\\"id\\\"]],[30,0,[\\\"createInitFiles\\\"]],[30,0,[\\\"enableGenerateExample\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,2],[30,0,[\\\"language\\\"]],[30,12]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,13,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,18,[[28,[37,17],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,13,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,19],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,1],[30,2,[\\\"readonly\\\"]],[30,14],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your code.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available as the environment variable <strong>ABC</strong>.\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,13,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,20],null,[[\\\"@handledChild\\\",\\\"@additionalWrappers\\\"],[true,[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@selectedTab\\\",\\\"@id\\\"],[[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null],[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Host \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Host to load test. Passed as the --host parameter. Not required if the host property is specified on the Locust class.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Host to test\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"host\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,24],[[30,2,[\\\"readonly\\\"]],[30,0,[\\\"requests\\\"]]],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"# of Requests \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"Number of requests to perform per Locust instance. Passed as the --num-request parameter. <strong>NO LONGER SUPPORTED</strong>\\\",true]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Number of to perform per Locust instance\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"requests\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"language\\\",\\\"id\\\"]],\\\"python\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Locust Classes (optional) \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"If your module contains multiple Locust classes you can optionally specify which one(s)\\\\n                            to run here. Use a space to separate multiple entries. By default all are run.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Locust Classes to run\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"locustClasses\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Log Level \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Locust log level. Passed as the --loglevel parameter.\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"LogLevels\\\"]],[30,0,[\\\"logLevel\\\"]],\\\"Please select a log level...\\\",[30,2,[\\\"readonly\\\"]],[30,0,[\\\"updateLogLevel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,16]],[1,\\\"\\\\n                    \\\"]],[16]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Additional Arguments \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"Define any extra arguments you want to pass to the Locust engine. Note that arguments\\\\n                          like --users, --run-time, --host, --spawn-rate, and --loglevel have specific inputs on this page so\\\\n                          you do not define them here. Example: --stop-timeout 60.\\\",true]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Extra Arguments\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalArgs\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[8,[39,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"splitCsvs\\\"]]]],null],[1,\\\" Split CSVs across test runners\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[[30,0,[\\\"splitCsvText\\\"]],true]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,15,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@selectedTab\\\",\\\"@id\\\"],[[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null],[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Setup Command\\\\n                    \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Teardown Command\\\\n                    \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,25],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,26],[[30,3]],null]]],null],[1,\\\"\\\\n\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,15,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@selectedTab\\\",\\\"@id\\\"],[[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null],[28,[37,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,21],[[28,[37,21],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,27],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"loadPerEngineType\\\"]],\\\"radio\\\",[30,0,[\\\"changeLoadPerEngineType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,17,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Basic\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Basic\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,17,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Advanced\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Advanced\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,28],[[30,0,[\\\"locustMajorVersion\\\"]],2],null],[[[1,\\\"                      \\\"],[8,[30,17,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"Custom\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Custom Load Shape\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"]],[17]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"loadPerEngineType\\\"]],\\\"Basic\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n                      You will configure the number of users per Locust engine when you create a test configuration to run this\\\\n                      scenario and set Load Type = Basic.\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,11],[[30,0,[\\\"loadPerEngineType\\\"]],\\\"Custom\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,2],[12],[1,\\\"If your locustfile defines a \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"https://docs.locust.io/en/stable/custom-load-shape.html\\\"],[12],[1,\\\"custom load shape\\\"],[13],[1,\\\"\\\\n                      then we do not pass the --users, --spawn-rate, or --run-time arguments to Locust when launching your test. You can still\\\\n                      parameterize your custom load shape by declaring whatever parameters make sense below, passing value(s) in each test configuration, and accessing\\\\n                      those values in your code with \\\"],[10,\\\"code\\\"],[12],[1,\\\"os.environ.get('[name]')\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,2],[12],[1,\\\"In your test configuration choose Load Type = Advanced and choose the number of engines to spin up in your test. The load\\\\n                        profile of each engine is controlled by your custom load shape.\\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n                    Configure the desired number of users and runtime here and then in your test configuration you can choose\\\\n                    Load Type = Advanced and choose the number of engines to spin up in your test.\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Concurrent Clients \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Number of concurrent clients per Locust instance. Passed as the --users or --clients parameter depending on Locust version.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Concurrent clients per Locust Instance\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-number-with-param\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Concurrent clients must be specified.\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"clients\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,33],[[28,[37,26],[[30,2,[\\\"readonly\\\"]]],null],[30,0,[\\\"runtime\\\"]]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Run Time \\\"],[8,[39,12],null,[[\\\"@content\\\"],[\\\"Stop after the specified amount of time, e.g. (300s, 20m, 3h, 1h30m, etc.). Passed as the --run-time parameter.\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Stop after specified time (e.g. 1m, 30s, 1h, etc)\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-step-time-with-param\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Run time must be specified.\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"runtime\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]],[]]],[41,[28,[37,34],[[30,0,[\\\"loadPerEngineType\\\"]],\\\"Custom\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[1,[52,[28,[37,28],[[30,0,[\\\"locustMajorVersion\\\"]],2],null],\\\"Spawn\\\",\\\"Hatch\\\"]],[1,\\\" Rate\\\\n                      \\\"],[8,[39,12],null,[[\\\"@content\\\"],[[29,[\\\"The rate per second in which clients are spawned per Locust instance. Passed as the --\\\",[52,[28,[37,28],[[30,0,[\\\"locustMajorVersion\\\"]],2],null],\\\"spawn\\\",\\\"hatch\\\"],\\\"-rate parameter.\\\"]]]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[16,\\\"placeholder\\\",[29,[[52,[28,[37,28],[[30,0,[\\\"locustMajorVersion\\\"]],2],null],\\\"Spawn\\\",\\\"Hatch\\\"],\\\" rate per Locust instance\\\"]]],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-number-with-param\\\",\\\"true\\\"],[16,\\\"data-parsley-required-message\\\",[29,[[52,[28,[37,28],[[30,0,[\\\"locustMajorVersion\\\"]],2],null],\\\"Spawn\\\",\\\"Hatch\\\"],\\\" rate must be specified.\\\"]]],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"hatchRate\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[15]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,13,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,35],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,3],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,13],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[13]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,18,[[28,[37,17],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"@isRemote\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"version\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"option\\\",\\\"bg\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"unless\\\",\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"if\\\",\\\"eq\\\",\\\"ui/info-icon\\\",\\\"on\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"and\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\"bs-button-group\\\",\\\"gte\\\",\\\"span\\\",\\\"p\\\",\\\"a\\\",\\\"code\\\",\\\"or\\\",\\\"not-eq\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/locust.hbs\",\n    \"isStrictMode\": false\n  });\n  const CreateFileOption = 'Create new Locust file...';\n  const LanguageOptions = [{\n    id: 'python',\n    name: 'Python (default)'\n  }, {\n    id: 'java',\n    name: 'Java (locust4j)'\n  }];\n  const PythonSourceTypes = [{\n    id: 'upload',\n    name: 'Upload'\n  }, {\n    id: 'vcs',\n    name: 'Version Control'\n  }];\n  const JavaSourceTypes = [{\n    id: 'uploadAll',\n    name: 'Upload Compiled Jars'\n  }, {\n    id: 'upload',\n    name: 'Upload and Compile'\n  }, {\n    id: 'uploadZip',\n    name: 'Upload and Build (Maven/Gradle)'\n  }, {\n    id: 'vcs',\n    name: 'Build from Version Control'\n  }];\n  const LogLevels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'];\n  let ScenarioLocust = _exports.default = (_class = class ScenarioLocust extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"splitCsvText\", _lib.default.SplitCsvText);\n      _defineProperty(this, \"PythonVersions\", _environment.config.pythonVersions);\n      _defineProperty(this, \"LocustVersions\", _environment.config.locustVersions);\n      _defineProperty(this, \"javaVersions\", _environment.config.javaVersions);\n      _defineProperty(this, \"defaultJavaVersion\", _environment.config.defaultJavaVersion);\n      _defineProperty(this, \"LanguageOptions\", LanguageOptions);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor3, this);\n      _initializerDefineProperty(this, \"loadPerEngineType\", _descriptor4, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor5, this);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }, {\n        id: 'lple',\n        name: 'Load Per Locust Engine'\n      }]);\n      _defineProperty(this, \"LogLevels\", LogLevels);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"language\", _descriptor6, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor7, this);\n      _initializerDefineProperty(this, \"fileName\", _descriptor8, this);\n      _initializerDefineProperty(this, \"host\", _descriptor9, this);\n      _initializerDefineProperty(this, \"logLevel\", _descriptor0, this);\n      _initializerDefineProperty(this, \"hatchRate\", _descriptor1, this);\n      _initializerDefineProperty(this, \"clients\", _descriptor10, this);\n      _initializerDefineProperty(this, \"runtime\", _descriptor11, this);\n      _initializerDefineProperty(this, \"requests\", _descriptor12, this);\n      _initializerDefineProperty(this, \"locustClasses\", _descriptor13, this);\n      _initializerDefineProperty(this, \"pythonVersion\", _descriptor14, this);\n      _initializerDefineProperty(this, \"locustVersion\", _descriptor15, this);\n      _initializerDefineProperty(this, \"javaVersionSelected\", _descriptor16, this);\n      _initializerDefineProperty(this, \"splitCsvs\", _descriptor17, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor18, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor19, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor20, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor21, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor22, this);\n      _initializerDefineProperty(this, \"additionalArgs\", _descriptor23, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor24, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor25, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor26, this);\n      _initializerDefineProperty(this, \"enableGenerateExample\", _descriptor27, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor28, this);\n      _initializerDefineProperty(this, \"showCreateSpecModal\", _descriptor29, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor30, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor31, this);\n      _defineProperty(this, \"isInit\", false);\n      (0, _runloop.next)(this, () => this._fromMetadata());\n    }\n    get supportedPythonVersions() {\n      const locustVersion = this.locustVersion;\n      if (!locustVersion || !locustVersion.unsupportedPythonVersions) {\n        return _environment.config.pythonVersions;\n      }\n      return _.filter(_environment.config.pythonVersions, function (pythonVersion) {\n        return !locustVersion.unsupportedPythonVersions.includes(pythonVersion);\n      });\n    }\n    get sourceTypes() {\n      return this.language?.id === 'java' ? JavaSourceTypes : PythonSourceTypes;\n    }\n    findById(id, defaultId, opts) {\n      return id && _.find(opts, opt => {\n        return opt.id === id;\n      }) || _.find(opts, opt => {\n        return opt.id === defaultId;\n      });\n    }\n    get fileTemplateOptions() {\n      switch (this.language?.id) {\n        case 'python':\n          return _locustTemplates.default.PythonFileTemplateOptions;\n        case 'java':\n          return _locustTemplates.default.JavaFileTemplateOptions;\n      }\n      return undefined;\n    }\n    get fileTemplates() {\n      if (this.language?.id === 'python') {\n        if (this.locustMajorVersion === 0) {\n          return _locustTemplates.default.PythonFileTemplates0x;\n        } else if (this.locustMajorVersion === 1) {\n          return _locustTemplates.default.PythonFileTemplates1x;\n        } else {\n          return _locustTemplates.default.PythonFileTemplates;\n        }\n      } else if (this.language?.id === 'java') {\n        return _locustTemplates.default.JavaFileTemplates;\n      }\n      return undefined;\n    }\n    get metadata() {\n      const metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    get file() {\n      const name = this.fileName;\n      if (name) {\n        return _.find(this.args.script?.dataStores, ds => {\n          return ds.name === name;\n        });\n      }\n      return '';\n    }\n    get defaultFiles() {\n      const files = [];\n      const noteDetails = this.noteDetails();\n      if (noteDetails) {\n        files.push(noteDetails);\n      }\n      return files;\n    }\n    get locustMajorVersion() {\n      return Number(this.locustVersion?.id?.substring(0, 1));\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType?.id === 'upload';\n    }\n    updateMetadata() {\n      this.save();\n    }\n    updateLogLevel(value) {\n      this.logLevel = value;\n      this.save();\n    }\n    dataStoreUpdated(ds, oldDs) {\n      if (oldDs && oldDs.name === this.fileName && ds.name !== oldDs.name) {\n        this.fileName = ds.name;\n        this.save();\n      }\n    }\n    updateLanguage(selection) {\n      this.language = selection;\n      this.save();\n    }\n    updateSourceType(selection) {\n      this.sourceType = selection;\n      this.save();\n      (0, _runloop.schedule)('afterRender', this, () => {\n        const resultType = this.args.uniqueId;\n        $(`#updateLocustScenarioForm${resultType}`).parsley().validate();\n      });\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.save();\n      }\n    }\n    fileTemplateSelected(editor, selection) {\n      const templates = this.fileTemplates;\n      editor.insert(templates[selection.id]);\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    pythonVersionChanged(value) {\n      this.pythonVersion = value;\n      this.checkVersionMismatch();\n      this.save();\n    }\n    locustVersionChanged(value) {\n      this.locustVersion = value;\n      this.checkVersionMismatch();\n      this.save();\n    }\n    javaVersionChanged(javaVersion) {\n      this.javaVersionSelected = javaVersion;\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.save();\n    }\n    changeLoadPerEngineType(type) {\n      this.loadPerEngineType = type;\n      this.save();\n      (0, _runloop.next)(this, () => {\n        if (type === 'Advanced') {\n          const resultType = this.args.uniqueId;\n          $(`#updateLocustScenarioForm${resultType}`).parsley().validate();\n        }\n      });\n    }\n    createInitFiles() {\n      switch (this.language?.id) {\n        case 'python':\n          this.initLocustfile();\n          break;\n        case 'java':\n          this.initJava();\n          break;\n      }\n    }\n    updateFile(value) {\n      if (value === CreateFileOption) {\n        this.showCreateSpecModal = true;\n      } else if (value !== '') {\n        this.fileName = value;\n        this.save();\n      }\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.save();\n    }\n    onSourceTypeUpdated() {\n      const check = !!(this.language?.id && this.sourceType);\n      this.enableGenerateExample = check && this.shouldEditFilesOnPage;\n    }\n    onSplitCsvsUpdated() {\n      this.save();\n    }\n    checkVersionMismatch() {\n      const pythonVersion = this.pythonVersion;\n      const locustVersion = this.locustVersion;\n      if (pythonVersion && locustVersion && locustVersion.unsupportedPythonVersions && locustVersion.unsupportedPythonVersions.includes(pythonVersion)) {\n        let pyVersion = _.filter(this.PythonVersions, function (pythonVersion) {\n          return !locustVersion.unsupportedPythonVersions.includes(pythonVersion);\n        });\n        if (pyVersion.length) this.pythonVersion = pyVersion[pyVersion.length - 1];else this.pythonVersion = _environment.config.defaultPythonVersion;\n      }\n    }\n    save(force) {\n      let origMetadata = this.args.script?.metadata;\n      if (force || !this.isInit || !origMetadata) {\n        let metadata = this.toMetadata();\n        if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n          this.args.saveMetadata(metadata);\n        }\n      }\n    }\n    toMetadata() {\n      const metadata = {};\n      metadata.language = this.language?.id || 'python';\n      metadata.sourceType = this.sourceType?.id;\n      metadata.fileName = this.fileName || '';\n      metadata.host = this.host || '';\n      metadata.logLevel = this.logLevel || 'Info';\n      metadata.loadPerEngineType = this.loadPerEngineType;\n      if (this.clients) {\n        metadata.clients = this.clients;\n      }\n      if (this.runtime) {\n        metadata.runtime = this.runtime;\n      }\n      if (this.hatchRate) {\n        metadata.hatchRate = this.hatchRate;\n      }\n      metadata.locustClasses = this.locustClasses || '';\n      metadata.pythonVersion = this.pythonVersion || _environment.config.defaultPythonVersion;\n      metadata.locustVersion = this.locustVersion?.id || _environment.config.defaultLocustVersion;\n      metadata.javaVersion = this.javaVersionSelected?.id;\n      metadata.splitCsvs = this.splitCsvs;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      if (this.additionalArgs) metadata.additionalArgs = this.additionalArgs;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      const metadata = this.metadata;\n      this.isInit = true;\n      const language = metadata.language || 'python';\n      this.language = _.find(LanguageOptions, opt => {\n        return opt.id === language;\n      });\n      if (metadata.fileName) {\n        this.fileName = metadata.fileName;\n      }\n      if (metadata.host) {\n        this.host = metadata.host;\n      }\n      this.logLevel = metadata.logLevel || 'INFO';\n      if (metadata.hatchRate) {\n        this.hatchRate = metadata.hatchRate;\n      }\n      this.loadPerEngineType = metadata.loadPerEngineType || (metadata.clients && metadata.runtime ? 'Advanced' : 'Basic');\n      if (metadata.clients) {\n        this.clients = metadata.clients;\n      }\n      if (metadata.runtime) {\n        this.runtime = metadata.runtime;\n      }\n      if (this.args.script?.readonly && metadata.requests) {\n        this.requests = metadata.requests;\n      }\n      if (metadata.locustClasses) {\n        this.locustClasses = metadata.locustClasses;\n      }\n      if (metadata.sourceType) {\n        this.sourceType = _.find(this.sourceTypes, srcType => {\n          return srcType.id === metadata.sourceType;\n        });\n      }\n      let pythonVersion = metadata.pythonVersion;\n      if (pythonVersion && pythonVersion.length > 8) {\n        pythonVersion = pythonVersion.substring(0, 8); // to get rid of build version from old release (python277 -> python27)\n      }\n      let locustVersion = metadata.locustVersion;\n      this.locustVersion = this.findById(locustVersion, _environment.config.defaultLocustVersion, this.LocustVersions);\n      this.pythonVersion = this.PythonVersions.includes(pythonVersion) ? pythonVersion : _environment.config.defaultPythonVersion;\n      this.javaVersionSelected = this.javaVersions.find(version => version.id === (metadata.javaVersion || this.defaultJavaVersion));\n      this.checkVersionMismatch();\n      this.splitCsvs = _.isBoolean(metadata.splitCsvs) ? metadata.splitCsvs : false;\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.additionalArgs = metadata.additionalArgs;\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        this.isInit = false;\n      });\n    }\n    async initLocustfile() {\n      let template;\n      if (this.locustMajorVersion === 0) {\n        template = _locustTemplates.default.PythonFileTemplates0x;\n      } else if (this.locustMajorVersion === 1) {\n        template = _locustTemplates.default.PythonFileTemplates1x;\n      } else {\n        template = _locustTemplates.default.PythonFileTemplates;\n      }\n      return this.createFile('fileName', 'locustfile.py', template['skeleton'], true);\n    }\n    async initJava() {\n      return this.createFile('fileName', 'Main.java', _locustTemplates.default.JavaFileTemplates['skeleton'], true);\n    }\n    async createFile(field, fileName, defaultContents, isFieldName) {\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script?.dataStores, scriptDs => scriptDs.name === fileName);\n        if (ds) {\n          if (isFieldName) {\n            this[field] = ds.name;\n          }\n          resolve();\n        } else if (!this.args.script?.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore(fileName, defaultContents).then(result => {\n            (0, _runloop.schedule)('afterRender', this, () => {\n              this.generatingFiles = false;\n              this[field] = isFieldName ? result.name : defaultContents;\n              resolve();\n            });\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n    didInsert() {\n      const resultType = this.args.uniqueId;\n      $(`#updateLocustScenarioForm${resultType}`).parsley().validate();\n    }\n    noteDetails() {\n      let html = '';\n      if (this.language?.id !== 'java') return html;\n      html += `<div class=\"note note-info alert\">\n      <p>Use <a target=\"_blank\" href=\"https://github.com/myzhan/locust4j\" rel=\"noreferrer noopener\">Locust4j</a> as your Locust load\n        generator. There are several options for how you can upload your code:</p>\n\n      <ul>\n        <li><strong>Upload Compiled Jars:</strong> Upload any jar/zip files needed to run your Locust4j code\n          and indicate the name of the main class. No compilation/build step occurs in this case.\n        </li>\n        <li><strong>Upload and Compile: </strong> Upload all *.java files that are required\n          or create/edit them on our website. Note that no package structure is supported. All code must be\n          in the default package and will be compiled on the test runner at test execution time.\n        </li>\n        <li><strong>Upload and Build (Maven/Gradle): </strong> Upload a zip file with all source code and\n          configuration. Code is unzipped then <a target=\"_blank\"\n            href=\"https://docs.testable.io/locust/java.html#build\" rel=\"noreferrer noopener\">built\n            and run using Maven or Gradle.</a></li>\n        <li><strong>Build from Version Control: </strong> Project is cloned from version control\n          onto the test runner. Code is <a target=\"_blank\"\n            href=\"https://docs.testable.io/locust/java.html#build\" rel=\"noreferrer noopener\">built and\n            run using Maven or Gradle.</a></li>\n      </ul>\n    </div>`;\n      return {\n        id: 'note',\n        type: 'note',\n        name: 'Pro tip',\n        path: '/NOTE',\n        readonly: true,\n        fileType: 'note',\n        isFolder: false,\n        code: (0, _template.htmlSafe)(html)\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"loadPerEngineType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Basic';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"fileName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"host\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"logLevel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"hatchRate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"clients\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"runtime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"requests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"locustClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"pythonVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"locustVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"javaVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"splitCsvs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"additionalArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"enableGenerateExample\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"showCreateSpecModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLogLevel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLogLevel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dataStoreUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dataStoreUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLanguage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLanguage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSourceType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSourceType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fileTemplateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fileTemplateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"pythonVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"pythonVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"locustVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"locustVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"javaVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"javaVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeLoadPerEngineType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeLoadPerEngineType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createInitFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createInitFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSourceTypeUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSourceTypeUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSplitCsvsUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSplitCsvsUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioLocust);\n});","define(\"@testable/shared-ui/components/scenario/monitor\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@ember/utils\", \"@testable/shared-ui/utils/monitor\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _utils, _monitor, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@testable/shared-ui/utils/monitor\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id={{this.formId}}\n    {{did-update this.onMetadataChange @script.metadata}}\n    as |Wrapper|\n  >\n    <Wrapper.LeftPanel>\n  \n      <:filesTab>\n        <div class=\"panel files-panel p-4\">\n          <div id=\"editor-instance\">\n            <div class=\"panel accordion\">\n  \n              <h4>Settings</h4>\n  \n              <div class=\"form-group\">\n                <label>Monitor Type</label>\n                <Ui::PSelect\n                  class=\"overflow-hidden\"\n                  @options={{this.monitorTypes}}\n                  @selected={{this.selectedMonitorType}}\n                  @disabled={{@script.readonly}}\n                  @onChange={{this.onChangeMonitorType}} as |type|>\n                    <b>{{type.label}}</b>\n                    <p>{{type.description}}</p>\n                </Ui::PSelect>\n              </div>\n  \n              {{#if (or (eq this.monitorType \"Ping\") (eq this.monitorType \"PortMonitor\"))}}\n                <div class=\"form-group\">\n                  <label>Host</label>\n                  <div>\n                    <Input\n                      @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Host\"\n                      @value={{this.host}}\n                      {{on \"change\" this.saveMetadata}} />\n                  </div>\n                </div>\n              {{/if}}\n  \n              {{#if (eq this.monitorType \"PortMonitor\")}}\n                <div class=\"form-group\">\n                  <label>port</label>\n                  <div>\n                    <Input\n                      @type=\"number\"\n                      class=\"form-control\"\n                      data-parsley-min=\"1\"\n                      data-parsley-max=\"65535\"\n                      data-parsley-required=\"true\"\n                      @value={{this.port}} {{on \"change\" this.saveMetadata}} />\n                  </div>\n                </div>\n              {{/if}}\n  \n              {{#if (eq this.monitorType \"HTTP\")}}\n                <Scenario::Ui::AdditionalPanelWrapper\n                  @selectedTab=\"general\" as |Yield|>\n                  <Yield.AdditionalWrapper @id=\"general\" @selectedTab=\"general\">\n                    <:title>General</:title>\n                    <:content>\n                      <div class=\"form-group\">\n                        <label>URL</label>\n                        <div>\n                          <Input\n                            @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"url\"\n                            @value={{this.url}}\n                            {{on \"change\" this.saveMetadata}} />\n                        </div>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label>Method</label>\n                        <Ui::PSelect\n                          @options={{this.methods}}\n                          @selected={{this.method}}\n                          @disabled={{@script.readonly}}\n                          @onChange={{this.onChangeMethod}} as |method|>\n                            {{method}}\n                        </Ui::PSelect>\n                      </div>\n                    </:content>\n                  </Yield.AdditionalWrapper>\n  \n                  <Yield.AdditionalWrapper @id=\"advanced\">\n                    <:title>Advanced</:title>\n                    <:content>\n  \n                      <div class=\"form-group mt-2\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.followRedirects}}\n                            {{on \"change\" this.onUpdateFollowRedirects}} />\n                          Follow Redirects\n                        </label>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.checkSSL}}\n                            {{on \"change\" this.onUpdateCheckSsl}} />\n                          Check SSL Expiration and Validity\n                        </label>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.checkDomain}}\n                            {{on \"change\" this.onUpdateCheckDomain}} />\n                          Check Domain Expiration\n                        </label>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label>Timeout</label>\n                        <div class=\"input-group\">\n                          <Input\n                            @type=\"number\"\n                            class=\"form-control\"\n                            min=\"1\"\n                            @value={{this.timeout}}\n                            {{on \"change\" this.saveMetadata}} />\n                            <div class=\"input-group-append\"><span class=\"input-group-text\">ms</span></div>\n                        </div>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label>Accepted Statuses</label>\n                        <Ui::PSelectMultiple\n                              @options={{this.acceptedStatusesOptions}}\n                              @selected={{this.acceptedStatuses}}\n                              @placeholder=\"Select statuses\"\n                              @disabled={{@script.readOnly}}\n                              @onChange={{this.onSelectAcceptedStatuses}} as |option|>\n                          <span class={{if option.isBold \"option-bold\"}}>{{option.label}}</span>\n                        </Ui::PSelectMultiple>\n                      </div>\n  \n                      <div class=\"mt-2 mb-2\">\n                        <div class=\"form-group\">\n                          <label>Authentication</label>\n                          <Ui::PSelect\n                            @options={{this.authTypes}}\n                            @selected={{this.authType}}\n                            @disabled={{@script.readonly}}\n                            @onChange={{this.onChangeAuthType}} as |type|>\n                              {{type}}\n                          </Ui::PSelect>\n                        </div>\n  \n                        {{#if (eq this.authType \"Basic\")}}\n                          <div class=\"form-group\">\n                            <label>Username</label>\n                            <div>\n                              <Input\n                                @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"Auth Username\"\n                                @value={{this.authUsername}}\n                                {{on \"change\" this.saveMetadata}} />\n                            </div>\n                          </div>\n  \n                          <div class=\"form-group\">\n                            <label>Password</label>\n                            <div>\n                              <Input @type=\"text\" class=\"form-control\" placeholder=\"Auth Password\" @value={{this.authPassword}} {{on \"change\" this.saveMetadata}} />\n                            </div>\n                          </div>\n                        {{/if}}\n  \n                        <div class=\"form-group mt-3\">\n                          <label>Response Body</label>\n                          <div>\n                            <Input\n                              @type=\"checkbox\"\n                              @checked={{this.validateResponseBody}}\n                              {{on \"change\" this.onUpdateValidateResponseBody}} />\n                            Validate Response Body\n                          </div>\n                        </div>\n  \n                        {{#if this.validateResponseBody}}\n                          <div class=\"form-group\">\n                            <div>\n                              <Input\n                                @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"Text to match in response body\"\n                                @value={{this.responseText}}\n                                {{on \"change\" this.saveMetadata}} />\n                            </div>\n                          </div>\n  \n                          <div class=\"form-group\">\n                            <label class=\"normal\">\n                              <Input\n                                @type=\"checkbox\"\n                                @checked={{this.responseTextCaseSensitive}}\n                                {{on \"change\" this.onUpdateResponseTextCaseSensitive}} />\n                              Case Sensitive Match\n                            </label>\n                          </div>\n                        {{/if}}\n  \n                      </div>\n  \n                      <div class=\"form-group mb-3\">\n                        <label>Request Headers</label>\n  \n                        {{#unless @script.readonly}}\n                          <div class=\"d-block btn-group m-r-5\">\n                            <button type=\"button\" {{on \"click\" this.addHeader}}\n                              class=\"btn btn-xs btn-primary\">\n                              <Ui::Icon @icon=\"fa fa-plus text-white\" />\n                            </button>\n                          </div>\n                        {{/unless}}\n                        <div class=\"table-responsive\">\n                          <table class=\"table table-bordered widget-table\">\n                            <thead>\n                              <tr>\n                                <th width=\"30\"></th>\n                                <th width=\"150px\">Name</th>\n                                <th width=\"150px\">Value</th>\n                              </tr>\n                            </thead>\n                            <tbody>\n                            {{#each this.headers as |header index|}}\n                              <tr>\n                                <td>\n                                  <a {{on \"click\" (fn this.removeHeader index)}}\n                                    class=\"btn btn-sm btn-icon btn-circle\" role=\"button\">\n                                    <Ui::Icon role=\"presentation\" @icon=\"fa fa-trash text-danger\" />\n                                  </a>\n                                </td>\n                                <td>\n                                  <Input @type=\"text\"\n                                    class=\"form-control\"\n                                    placeholder=\"Header Name...\"\n                                    @value={{header.name}}\n                                    {{on \"change\" (fn this.onChangeHeader index \"name\")}}\n                                    />\n                                </td>\n                                <td>\n                                  <Input @type=\"text\"\n                                    class=\"form-control\"\n                                    placeholder=\"value...\"\n                                    @value={{header.value}}\n                                    {{on \"change\" (fn this.onChangeHeader index \"value\")}}\n                                    />\n                                </td>\n                              </tr>\n                            {{else}}\n                              <tr><td colspan=\"2\">No headers yet.</td></tr>\n                            {{/each}}\n                            </tbody>\n                          </table>\n                        </div>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label>Request Body</label>\n                        <Textarea\n                          class=\"form-control height-100\"\n                          placeholder=\"Add body...\"\n                          @value={{this.requestBodyInput}}\n                          {{on \"change\" this.onChangeRequestBody}}/>\n  \n                        <div class=\"form-group m-t-5\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.asJson}}\n                              {{on \"change\" this.onUpdateAsJson}} />\n                            As JSON\n                          </label>\n                          {{#if this.showJsonConvertError}}\n                            <span class=\"text-danger\">Your provided JSON is not valid</span>\n                          {{/if}}\n                        </div>\n                      </div>\n  \n                    </:content>\n                  </Yield.AdditionalWrapper>\n                </Scenario::Ui::AdditionalPanelWrapper>\n              {{/if}}\n  \n            </div>\n          </div>\n        </div>\n      </:filesTab>\n  \n      <:runConsoleTab>\n        {{yield (hash Siblings=(component \"empty\"))}}\n      </:runConsoleTab>\n  \n    </Wrapper.LeftPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[30,0,[\\\"formId\\\"]]],[4,[38,3],[[30,0,[\\\"onMetadataChange\\\"]],[30,1,[\\\"metadata\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,1],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,2],[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,4,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel files-panel p-4\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"editor-instance\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel accordion\\\"],[12],[1,\\\"\\\\n\\\\n            \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Settings\\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Monitor Type\\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,8],[[24,0,\\\"overflow-hidden\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"monitorTypes\\\"]],[30,0,[\\\"selectedMonitorType\\\"]],[30,1,[\\\"readonly\\\"]],[30,0,[\\\"onChangeMonitorType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,\\\"b\\\"],[12],[1,[30,5,[\\\"label\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,2],[12],[1,[30,5,[\\\"description\\\"]]],[13],[1,\\\"\\\\n              \\\"]],[5]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[28,[37,13],[[30,0,[\\\"monitorType\\\"]],\\\"Ping\\\"],null],[28,[37,13],[[30,0,[\\\"monitorType\\\"]],\\\"PortMonitor\\\"],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Host\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Host\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"host\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"monitorType\\\"]],\\\"PortMonitor\\\"],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"port\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[12],[1,\\\"\\\\n                  \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[24,\\\"data-parsley-max\\\",\\\"65535\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"port\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"monitorType\\\"]],\\\"HTTP\\\"],null],[[[1,\\\"              \\\"],[8,[39,16],null,[[\\\"@selectedTab\\\"],[\\\"general\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,6,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\",\\\"@selectedTab\\\"],[\\\"general\\\",\\\"general\\\"]],[[\\\"title\\\",\\\"content\\\"],[[[[1,\\\"General\\\"]],[]],[[[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"URL\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[12],[1,\\\"\\\\n                        \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"url\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"url\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Method\\\"],[13],[1,\\\"\\\\n                      \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"methods\\\"]],[30,0,[\\\"method\\\"]],[30,1,[\\\"readonly\\\"]],[30,0,[\\\"onChangeMethod\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,7]],[1,\\\"\\\\n                      \\\"]],[7]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[30,6,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[\\\"advanced\\\"]],[[\\\"title\\\",\\\"content\\\"],[[[[1,\\\"Advanced\\\"]],[]],[[[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group mt-2\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateFollowRedirects\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"followRedirects\\\"]]]],null],[1,\\\"\\\\n                        Follow Redirects\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateCheckSsl\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"checkSSL\\\"]]]],null],[1,\\\"\\\\n                        Check SSL Expiration and Validity\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateCheckDomain\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"checkDomain\\\"]]]],null],[1,\\\"\\\\n                        Check Domain Expiration\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Timeout\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"1\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"timeout\\\"]]]],null],[1,\\\"\\\\n                          \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"ms\\\"],[13],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Accepted Statuses\\\"],[13],[1,\\\"\\\\n                      \\\"],[8,[39,20],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"acceptedStatusesOptions\\\"]],[30,0,[\\\"acceptedStatuses\\\"]],\\\"Select statuses\\\",[30,1,[\\\"readOnly\\\"]],[30,0,[\\\"onSelectAcceptedStatuses\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[10,1],[15,0,[52,[30,8,[\\\"isBold\\\"]],\\\"option-bold\\\"]],[12],[1,[30,8,[\\\"label\\\"]]],[13],[1,\\\"\\\\n                      \\\"]],[8]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"mt-2 mb-2\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Authentication\\\"],[13],[1,\\\"\\\\n                        \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"authTypes\\\"]],[30,0,[\\\"authType\\\"]],[30,1,[\\\"readonly\\\"]],[30,0,[\\\"onChangeAuthType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[1,[30,9]],[1,\\\"\\\\n                        \\\"]],[9]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"authType\\\"]],\\\"Basic\\\"],null],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[12],[1,\\\"Username\\\"],[13],[1,\\\"\\\\n                          \\\"],[10,0],[12],[1,\\\"\\\\n                            \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Auth Username\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"authUsername\\\"]]]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\\n                        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[12],[1,\\\"Password\\\"],[13],[1,\\\"\\\\n                          \\\"],[10,0],[12],[1,\\\"\\\\n                            \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Auth Password\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"authPassword\\\"]]]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"form-group mt-3\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Response Body\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,0],[12],[1,\\\"\\\\n                          \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateValidateResponseBody\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"validateResponseBody\\\"]]]],null],[1,\\\"\\\\n                          Validate Response Body\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"validateResponseBody\\\"]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,0],[12],[1,\\\"\\\\n                            \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Text to match in response body\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"saveMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"responseText\\\"]]]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\\n                        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateResponseTextCaseSensitive\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"responseTextCaseSensitive\\\"]]]],null],[1,\\\"\\\\n                            Case Sensitive Match\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group mb-3\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Request Headers\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,1,[\\\"readonly\\\"]]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"d-block btn-group m-r-5\\\"],[12],[1,\\\"\\\\n                          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"addHeader\\\"]]],null],[12],[1,\\\"\\\\n                            \\\"],[8,[39,23],null,[[\\\"@icon\\\"],[\\\"fa fa-plus text-white\\\"]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                      \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered widget-table\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"30\\\"],[12],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"150px\\\"],[12],[1,\\\"Value\\\"],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,30],[[28,[37,30],[[30,0,[\\\"headers\\\"]]],null]],null],null,[[[1,\\\"                            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                                \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,15],[\\\"click\\\",[28,[37,1],[[30,0,[\\\"removeHeader\\\"]],[30,11]],null]],null],[12],[1,\\\"\\\\n                                  \\\"],[8,[39,23],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-trash text-danger\\\"]],null],[1,\\\"\\\\n                                \\\"],[13],[1,\\\"\\\\n                              \\\"],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Header Name...\\\"],[4,[38,15],[\\\"change\\\",[28,[37,1],[[30,0,[\\\"onChangeHeader\\\"]],[30,11],\\\"name\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,10,[\\\"name\\\"]]]],null],[1,\\\"\\\\n                              \\\"],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[39,14],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"value...\\\"],[4,[38,15],[\\\"change\\\",[28,[37,1],[[30,0,[\\\"onChangeHeader\\\"]],[30,11],\\\"value\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,10,[\\\"value\\\"]]]],null],[1,\\\"\\\\n                              \\\"],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\"]],[10,11]],[[[1,\\\"                            \\\"],[10,\\\"tr\\\"],[12],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"2\\\"],[12],[1,\\\"No headers yet.\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Request Body\\\"],[13],[1,\\\"\\\\n                      \\\"],[8,[39,33],[[24,0,\\\"form-control height-100\\\"],[24,\\\"placeholder\\\",\\\"Add body...\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"onChangeRequestBody\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"requestBodyInput\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"form-group m-t-5\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,14],[[4,[38,15],[\\\"change\\\",[30,0,[\\\"onUpdateAsJson\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"asJson\\\"]]]],null],[1,\\\"\\\\n                          As JSON\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showJsonConvertError\\\"]],[[[1,\\\"                          \\\"],[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"Your provided JSON is not valid\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]],[[[1,\\\"\\\\n      \\\"],[18,12,[[28,[37,36],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[4]]]]],[1,\\\"\\\\n\\\"]],[\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"type\\\",\\\"Yield\\\",\\\"method\\\",\\\"option\\\",\\\"type\\\",\\\"header\\\",\\\"index\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-update\\\",\\\":filesTab\\\",\\\"div\\\",\\\"h4\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"b\\\",\\\"p\\\",\\\"if\\\",\\\"or\\\",\\\"eq\\\",\\\"input\\\",\\\"on\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\":title\\\",\\\":content\\\",\\\"span\\\",\\\"ui/p-select-multiple\\\",\\\"unless\\\",\\\"button\\\",\\\"ui/icon\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"a\\\",\\\"textarea\\\",\\\":runConsoleTab\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/monitor.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultMonitorType = 'Ping';\n  let ScenarioMonitorComponent = _exports.default = (_class = class ScenarioMonitorComponent extends _component2.default {\n    get additionalWrappers() {\n      if (this.monitorType !== 'HTTP') return [];\n      return [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }];\n    }\n    /**\n     * Constructor\n     * @param owner\n     * @param args\n     */\n    constructor(owner, args) {\n      super(owner, args);\n      _defineProperty(this, \"monitorTypes\", _monitor.default.monitorTypes);\n      _defineProperty(this, \"methods\", _monitor.default.httpMethods);\n      _defineProperty(this, \"acceptedStatusesOptions\", _monitor.default.acceptedStatusesOptions);\n      _defineProperty(this, \"authTypes\", _monitor.default.authTypes);\n      _defineProperty(this, \"isInit\", false);\n      _initializerDefineProperty(this, \"formId\", _descriptor, this);\n      _initializerDefineProperty(this, \"showNote\", _descriptor2, this);\n      _initializerDefineProperty(this, \"monitorType\", _descriptor3, this);\n      _initializerDefineProperty(this, \"url\", _descriptor4, this);\n      _initializerDefineProperty(this, \"host\", _descriptor5, this);\n      _initializerDefineProperty(this, \"port\", _descriptor6, this);\n      _initializerDefineProperty(this, \"selectedMonitorType\", _descriptor7, this);\n      _initializerDefineProperty(this, \"method\", _descriptor8, this);\n      _initializerDefineProperty(this, \"followRedirects\", _descriptor9, this);\n      _initializerDefineProperty(this, \"checkSSL\", _descriptor0, this);\n      _initializerDefineProperty(this, \"checkDomain\", _descriptor1, this);\n      _initializerDefineProperty(this, \"showJsonConvertError\", _descriptor10, this);\n      _initializerDefineProperty(this, \"validateResponseBody\", _descriptor11, this);\n      _initializerDefineProperty(this, \"responseTextCaseSensitive\", _descriptor12, this);\n      _initializerDefineProperty(this, \"asJson\", _descriptor13, this);\n      _initializerDefineProperty(this, \"timeout\", _descriptor14, this);\n      _initializerDefineProperty(this, \"requestBody\", _descriptor15, this);\n      _initializerDefineProperty(this, \"requestBodyInput\", _descriptor16, this);\n      _initializerDefineProperty(this, \"acceptedStatuses\", _descriptor17, this);\n      _initializerDefineProperty(this, \"headers\", _descriptor18, this);\n      _initializerDefineProperty(this, \"authType\", _descriptor19, this);\n      _initializerDefineProperty(this, \"authUsername\", _descriptor20, this);\n      _initializerDefineProperty(this, \"authPassword\", _descriptor21, this);\n      _initializerDefineProperty(this, \"responseText\", _descriptor22, this);\n      this.formId = `updateMonitorScenarioForm${this.args.uniqueId}`;\n      (0, _runloop.later)(this, () => {\n        this.fromMetadata();\n        if (!this.args.script.metadata) {\n          this.saveScenario();\n        }\n      }, 250);\n    }\n\n    /**\n     * did-update on @script.metadata: when metadata is changed\n     */\n    onMetadataChange() {\n      this.fromMetadata();\n    }\n    get metadata() {\n      const metadata = this.args.script.metadata;\n      return (0, _utils.isEmpty)(metadata) ? {} : metadata;\n    }\n\n    /**\n     * Update Test Classes Name\n     */\n    saveMetadata() {\n      this.saveScenario();\n    }\n    onChangeMonitorType(selected) {\n      this.selectedMonitorType = this.monitorTypes.find(type => type.value === selected.value);\n      this.monitorType = selected.value;\n      this.saveScenario();\n    }\n    onChangeMethod(value) {\n      this.method = value;\n      this.saveScenario();\n    }\n    onChangeAuthType(value) {\n      this.authType = value;\n      if (value === 'None') {\n        this.authUsername = '';\n        this.authPassword = '';\n      }\n      this.saveScenario();\n    }\n    onUpdateFollowRedirects(event) {\n      this.followRedirects = event.target.checked;\n      this.saveScenario();\n    }\n    onUpdateCheckSsl(event) {\n      this.checkSSL = event.target.checked;\n      this.saveScenario();\n    }\n    onUpdateCheckDomain(event) {\n      this.checkDomain = event.target.checked;\n      this.saveScenario();\n    }\n    onSelectAcceptedStatuses(selected) {\n      this.acceptedStatuses = selected;\n      this.saveScenario();\n    }\n    onUpdateValidateResponseBody(event) {\n      this.validateResponseBody = event.target.checked;\n      if (!this.validateResponseBody) {\n        this.responseText = '';\n        this.responseTextCaseSensitive = false;\n      }\n      this.saveScenario();\n    }\n    onUpdateResponseTextCaseSensitive(event) {\n      this.responseTextCaseSensitive = event.target.checked;\n      this.saveScenario();\n    }\n    onChangeRequestBody() {\n      this.updateRequestBody();\n    }\n    onUpdateAsJson(event) {\n      this.asJson = event.target.checked;\n      this.updateRequestBody();\n    }\n    updateRequestBody() {\n      try {\n        if (this.asJson && this.requestBodyInput) {\n          this.requestBody = JSON.parse(this.requestBodyInput);\n        } else {\n          this.requestBody = this.requestBodyInput;\n        }\n        this.showJsonConvertError = false;\n        this.saveScenario();\n      } catch (e) {\n        this.showJsonConvertError = true;\n      }\n    }\n    onChangeHeader() {\n      this.saveScenario();\n    }\n    addHeader() {\n      this.headers = [...this.headers, {\n        name: '',\n        value: ''\n      }];\n    }\n    removeHeader(index) {\n      this.headers = this.headers.filter((_, i) => i !== index);\n      this.saveScenario();\n    }\n\n    /**\n     * Save metadata on the server\n     */\n    saveScenario() {\n      const {\n        metadata: origMetadata,\n        readonly\n      } = this.args.script;\n      if (origMetadata && (this.isInit || readonly)) {\n        return;\n      }\n      if (!$('#' + this.formId).parsley().validate() || this.showJsonConvertError) {\n        return;\n      }\n      let metadata = this.toMetadata();\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n\n    /**\n     * Create metadata object\n     * @returns {{}}\n     */\n    toMetadata() {\n      let metadata = {};\n      const monitorType = this.monitorType;\n      metadata.monitorType = monitorType;\n      if (monitorType === 'Ping' || monitorType === 'PortMonitor') {\n        metadata.host = this.host;\n      }\n      if (monitorType === 'PortMonitor') {\n        metadata.port = this.port;\n      }\n      if (monitorType === 'HTTP') {\n        metadata.url = this.url;\n        metadata.method = this.method;\n        metadata.followRedirects = this.followRedirects;\n        metadata.checkSSL = this.checkSSL;\n        metadata.checkDomain = this.checkDomain;\n        metadata.timeout = this.timeout;\n        metadata.acceptedStatuses = this.acceptedStatuses.map(status => status.value).join(',');\n        metadata.authType = this.authType;\n        if (this.authType === 'Basic') {\n          metadata.authUsername = this.authUsername;\n          metadata.authPassword = this.authPassword;\n        }\n        metadata.validateResponseBody = this.validateResponseBody;\n        metadata.responseText = this.responseText;\n        metadata.responseTextCaseSensitive = this.responseTextCaseSensitive;\n        metadata.requestBody = this.requestBody;\n        metadata.headers = this.headers.reduce((obj, item) => {\n          obj[item.name] = item.value;\n          return obj;\n        }, {});\n      }\n      return metadata;\n    }\n\n    /**\n     * Populate values from metadata to component properties\n     * @returns {Promise<void>}\n     */\n    async fromMetadata() {\n      this.isInit = true;\n      const metadata = this.metadata;\n      const monitorType = metadata.monitorType || DefaultMonitorType;\n      this.monitorType = monitorType;\n      this.selectedMonitorType = this.monitorTypes.find(type => type.value === monitorType);\n      if (monitorType === 'Ping' || monitorType === 'PortMonitor') {\n        this.host = metadata.host;\n      }\n      if (this.monitorType === 'PortMonitor') {\n        this.port = metadata.port;\n      }\n      this.url = metadata.url;\n      this.method = metadata.method || 'GET';\n      this.followRedirects = _.isBoolean(metadata.followRedirects) ? metadata.followRedirects : true;\n      this.checkSSL = _.isBoolean(metadata.checkSSL) ? metadata.checkSSL : true;\n      this.checkDomain = _.isBoolean(metadata.checkDomain) ? metadata.checkDomain : true;\n      this.timeout = metadata.timeout || 60000;\n      this.acceptedStatuses = _monitor.default.getSelectedAcceptedStatuses(metadata.acceptedStatuses);\n      this.authType = metadata.authType || 'None';\n      if (this.authType === 'Basic') {\n        this.authUsername = metadata.authUsername;\n        this.authPassword = metadata.authPassword;\n      }\n      this.responseText = metadata.responseText;\n      this.validateResponseBody = metadata.validateResponseBody || false;\n      this.responseTextCaseSensitive = metadata.responseTextCaseSensitive;\n      this.headers = Object.entries(metadata.headers || []).map(([name, value]) => ({\n        name,\n        value\n      }));\n      const requestBody = metadata.requestBody;\n      this.requestBody = requestBody;\n      if (typeof requestBody === 'object') {\n        this.asJson = true;\n        this.requestBodyInput = JSON.stringify(requestBody, null, 2);\n      } else {\n        this.asJson = false;\n        this.requestBodyInput = requestBody ?? '';\n      }\n      (0, _runloop.next)(this, () => {\n        this.isInit = false;\n        $('#' + this.formId).parsley().validate();\n      });\n    }\n\n    /**\n     * Called when component is inserted in DOM\n     */\n    didInsert() {\n      $('#' + this.formId).parsley().validate();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"formId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"monitorType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"url\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"host\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"port\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"selectedMonitorType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"method\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"followRedirects\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"checkSSL\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"checkDomain\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"showJsonConvertError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"validateResponseBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"responseTextCaseSensitive\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"asJson\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"timeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"requestBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"requestBodyInput\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"acceptedStatuses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"headers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"authType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"authUsername\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"authPassword\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"responseText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onMetadataChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetadataChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeMonitorType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeMonitorType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeMethod\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeMethod\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeAuthType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeAuthType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateFollowRedirects\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateFollowRedirects\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateCheckSsl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateCheckSsl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateCheckDomain\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateCheckDomain\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectAcceptedStatuses\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectAcceptedStatuses\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateValidateResponseBody\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateValidateResponseBody\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateResponseTextCaseSensitive\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateResponseTextCaseSensitive\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeRequestBody\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeRequestBody\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateAsJson\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateAsJson\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeHeader\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeHeader\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addHeader\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addHeader\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeHeader\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeHeader\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioMonitorComponent);\n});","define(\"@testable/shared-ui/components/scenario/params-config-editor\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@ember/object\", \"@ember/runloop\", \"tracked-built-ins\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _lib, _object, _runloop, _trackedBuiltIns, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"tracked-built-ins\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span {{did-update this.onAttrsUpdate @paramsConfig @isSaving}}></span>\n  <fieldset disabled={{@readonly}}>\n    {{#if @noteText}}\n      <div class=\"note note-info fade show m-b-15\">\n        {{html-safe @noteText}}\n      </div>\n    {{/if}}\n    {{#unless @readonly}}\n      <div class=\"btn-group m-r-5\">\n        <button\n          {{on \"click\" this.addParam}}\n          class=\"btn btn-xs btn-primary\">\n          <Ui::Icon @icon=\"fa fa-plus text-white\" />\n        </button>\n      </div>\n    {{/unless}}\n    <div class=\"overflow-x-auto\">\n      <table class=\"table table-bordered widget-table\">\n        <thead>\n          <tr>\n            <th style={{html-safe \"max-width: 150px;\"}}>Name</th>\n            <th style={{html-safe \"max-width: 150px;\"}}>Default Value</th>\n            <th style={{html-safe \"max-width: 50px;\"}} class=\"text-center\">Required</th>\n            <th style={{html-safe \"max-width: 50px;\"}} class=\"text-center\">Actions</th>\n          </tr>\n        </thead>\n        <tbody>\n        {{#each this.latestParamsConfig as |param|}}\n          <tr>\n            <td>\n              <Input @type=\"text\" class=\"form-control\"\n                id={{concat \"name-\" param.id}}\n                minlength=\"1\"\n                maxlength=\"255\"\n                placeholder=\"Name\"\n                required=\"true\"\n                @value={{param.name}}\n                {{on \"change\" (fn this.paramChanged param \"name\")}}\n                />\n            </td>\n            <td>\n              <Input @type=\"text\" class=\"form-control\"\n                id={{concat \"defaultValue-\" param.id}}\n                minlength=\"1\"\n                placeholder=\"Default value (optional)\"\n                @value={{param.defaultValue}}\n                {{on \"change\" (fn this.paramChanged param \"defaultValue\")}}\n                />\n            </td>\n            <td class=\"text-center p-t-18\">\n              <Input @type=\"checkbox\" @checked={{param.required}} {{on \"change\" (fn this.onRequiredChanged param)}} />\n            </td>\n            <td class=\"text-center p-t-12\">\n              <a {{on \"click\" (fn this.deleteParam param)}}\n                class=\"btn btn-sm btn-icon btn-circle\" role=\"button\">\n                <Ui::Icon role=\"presentation\" @icon=\"fa fa-trash text-danger\" />\n              </a>\n            </td>\n          </tr>\n        {{else}}\n          <tr><td colspan=\"4\">No params configured yet.</td></tr>\n        {{/each}}\n        </tbody>\n      </table>\n    </div>\n  </fieldset>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"onAttrsUpdate\\\"]],[30,1],[30,2]],null],[12],[13],[1,\\\"\\\\n\\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,3]],[12],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"note note-info fade show m-b-15\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,5],[[30,4]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,3]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"btn-group m-r-5\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"addParam\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-plus text-white\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[14,0,\\\"overflow-x-auto\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered widget-table\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,5],[\\\"max-width: 150px;\\\"],null]],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,5],[\\\"max-width: 150px;\\\"],null]],[12],[1,\\\"Default Value\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,5],[\\\"max-width: 50px;\\\"],null]],[14,0,\\\"text-center\\\"],[12],[1,\\\"Required\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,5],[\\\"max-width: 50px;\\\"],null]],[14,0,\\\"text-center\\\"],[12],[1,\\\"Actions\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"latestParamsConfig\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],[[24,0,\\\"form-control\\\"],[16,1,[28,[37,19],[\\\"name-\\\",[30,5,[\\\"id\\\"]]],null]],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"maxlength\\\",\\\"255\\\"],[24,\\\"placeholder\\\",\\\"Name\\\"],[24,\\\"required\\\",\\\"true\\\"],[4,[38,8],[\\\"change\\\",[28,[37,20],[[30,0,[\\\"paramChanged\\\"]],[30,5],\\\"name\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,5,[\\\"name\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],[[24,0,\\\"form-control\\\"],[16,1,[28,[37,19],[\\\"defaultValue-\\\",[30,5,[\\\"id\\\"]]],null]],[24,\\\"minlength\\\",\\\"1\\\"],[24,\\\"placeholder\\\",\\\"Default value (optional)\\\"],[4,[38,8],[\\\"change\\\",[28,[37,20],[[30,0,[\\\"paramChanged\\\"]],[30,5],\\\"defaultValue\\\"],null]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,5,[\\\"defaultValue\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center p-t-18\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,18],[[4,[38,8],[\\\"change\\\",[28,[37,20],[[30,0,[\\\"onRequiredChanged\\\"]],[30,5]],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,5,[\\\"required\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"text-center p-t-12\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"deleteParam\\\"]],[30,5]],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-trash text-danger\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,\\\"No params configured yet.\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@paramsConfig\\\",\\\"@isSaving\\\",\\\"@readonly\\\",\\\"@noteText\\\",\\\"param\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"fieldset\\\",\\\"if\\\",\\\"div\\\",\\\"html-safe\\\",\\\"unless\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"input\\\",\\\"concat\\\",\\\"fn\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/params-config-editor.hbs\",\n    \"isStrictMode\": false\n  });\n  let paramId = 0;\n  let ParamsConfigEditor = _exports.default = (_class = class ParamsConfigEditor extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"latestParamsConfig\", _descriptor, this);\n      _defineProperty(this, \"initialized\", false);\n      this.createParamsConfig();\n      this.initialized = true;\n    }\n    getCurrentConfig() {\n      return _.map(this.latestParamsConfig, param => {\n        return {\n          name: param.name,\n          defaultValue: param.defaultValue,\n          required: param.required\n        };\n      });\n    }\n    onRequiredChanged(param, e) {\n      param.required = e.target.checked;\n      this.onParamChanged();\n    }\n    onParamChanged() {\n      if (this.initialized) {\n        const current = this.getCurrentConfig();\n        const incoming = this.args.paramsConfig;\n        if (_.isEqual(current, incoming)) return;\n        this.args.configChanged(current);\n      }\n    }\n    deleteParam(param) {\n      _lib.default.removeById(this.latestParamsConfig, param);\n      this.onParamChanged();\n    }\n    paramChanged(param, column) {\n      const value = param[column];\n      if (value) {\n        const exist = this.latestParamsConfig.find(p => p[column] === value && p.id !== param.id);\n        if (!exist) {\n          this.onParamChanged();\n        }\n      }\n    }\n    addParam() {\n      this.latestParamsConfig.push({\n        id: paramId++,\n        name: '',\n        defaultValue: '',\n        required: false\n      });\n    }\n    onAttrsUpdate() {\n      (0, _runloop.debounce)(this, this.checkIfNeedUpdateParams, 1000);\n    }\n    checkIfNeedUpdateParams() {\n      if (!this.args.isSaving) {\n        const incoming = (this.args.paramsConfig || []).map(p => ({\n          name: p.name,\n          defaultValue: p.defaultValue,\n          required: p.required\n        }));\n        const current = (this.latestParamsConfig || []).map(p => ({\n          name: p.name,\n          defaultValue: p.defaultValue,\n          required: p.required\n        }));\n        if (!_.isEqual(incoming, current)) {\n          this.createParamsConfig();\n        }\n      }\n    }\n    createParamsConfig() {\n      this.initialized = false;\n      let paramsConfig = this.args.paramsConfig;\n      this.latestParamsConfig = new _trackedBuiltIns.TrackedArray(_.isObject(paramsConfig) ? _.cloneDeep(paramsConfig) : []);\n      _.forEach(this.latestParamsConfig, param => {\n        param.id = paramId++;\n      });\n      this.initialized = true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"latestParamsConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onRequiredChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRequiredChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteParam\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addParam\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addParam\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAttrsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAttrsUpdate\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ParamsConfigEditor);\n});","define(\"@testable/shared-ui/components/scenario/phantomjs\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"js-base64\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _runloop, _component2, _lib, _environment, _jsBase, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"js-base64\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span \n    {{did-update this.fromMetadata @script.metadata}} \n    {{did-update this.onUrlChanged this.url}} \n    {{did-update this.onChildLogsUpdated this.childLogs}}>\n  </span>\n  <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updatePhantomScenarioForm{{@uniqueId}}\" as |Wrapper|\n  >\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Script Type <Ui::InfoIcon\n                  @content=\"Choose approach for specifying the PhantomJS scenario\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.scriptTypes}} @selected={{this.type}} @disabled={{@readonly}}\n                      @placeholder=\"Please choose script type...\" @onChange={{this.typeChanged}} as |option|>\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n        <div class=\"form-group {{if (not-eq this.type.id 'url') 'hidden'}}\">\n          <label class=\"{{this.labelClasses}}\">URL <Ui::InfoIcon\n                  @content=\"URL to load in a PhantomJS browser during test execution\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Input id=\"phantomUrl{{@uniqueId}}\" @type=\"text\" placeholder=\"URL to load (e.g. https://www.google.com)\"\n                    class=\"form-control\" required=\"true\" @value={{this.url}} />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.phantomJsVersions}} @selected={{this.phantomJsVersion}} @disabled={{@readonly}}\n                      @onChange={{this.versionChanged}} as |version|>\n              {{version}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n        <:filesTab>\n          <Ui::FilesManager\n            @selectedPanel={{this.selectedRightPanel}}\n            @onPanelChange={{fn (mut this.selectedRightPanel)}}\n            @templates={{this.templates}}\n            @hiddenFilesId={{this.hiddenFilesId}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{this.defaultFileId}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @selectedTemplate={{this.specTemplateSelected}}\n            @model={{@script}}\n            @showTemplate={{eq this.selectedFile.id \"/__index.html\"}}\n            @selectedFile={{fn (mut this.selectedFile)}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @updateContent={{this.updateContent}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                        @uniqueId={{@uniqueId}}\n                        @readonly={{@script.readonly}}\n                        @isSaving={{@isSaving}}\n                        @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are referenced within your code using params['myParamName'] syntax.\"\n                        @noteText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are referenced within your code using <strong>params['myParamName']</strong> syntax.\"\n                        @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Process Logs</label>\n                <div class=\"{{this.inputClasses}} m-t-5\">\n                  <label class=\"normal\">\n                    <Input @type=\"checkbox\" @checked={{this.childLogs}} /> Capture console logging and stdout/stderr from the browser\n                  </label>\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Additional Setup Command\n                  <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Additional Setup Command\"\n                          @value={{this.additionalSetupCommand}} {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">\n                  Teardown Command\n                  <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\"\n                          placeholder=\"Teardown Command\"\n                          @value={{this.teardownCommand}} {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                        @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                        @placement=\"bottom\" />\n                </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.rootFolder}}\n                        {{on \"change\" this.updateRootFolder}} />\n                </div>\n              </div>\n  \n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Source Repository Url </label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.sourceRepositoryUrl}}\n                        {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"\"\n                        @value={{this.sourceBranch}}\n                        {{on \"change\" this.updateMetadata}} />\n                </div>\n              </div>\n  \n              <Forms::ResourcePartsInput\n                      @labelClasses={{this.labelClasses}}\n                      @inputClasses={{this.inputClasses}}\n                      @resourceParts={{this.resourceParts}}\n                      @resourceNameMappings={{this.resourceNameMappings}}\n                      @overrideOrgDefault={{this.overrideOrgDefault}}\n                      @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                      @onChange={{this.updateResourceParts}}\n                      @editable={{not @readonly}}\n              />\n            </Yield.AdditionalPanel>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedRightPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"fromMetadata\\\"]],[30,1,[\\\"metadata\\\"]]],null],[4,[38,1],[[30,0,[\\\"onUrlChanged\\\"]],[30,0,[\\\"url\\\"]]],null],[4,[38,1],[[30,0,[\\\"onChildLogsUpdated\\\"]],[30,0,[\\\"childLogs\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,2],[[16,1,[29,[\\\"updatePhantomScenarioForm\\\",[30,2]]]]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,1],[28,[37,3],[[28,[37,4],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Script Type \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Choose approach for specifying the PhantomJS scenario\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"scriptTypes\\\"]],[30,0,[\\\"type\\\"]],[30,3],\\\"Please choose script type...\\\",[30,0,[\\\"typeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[52,[28,[37,10],[[30,0,[\\\"type\\\",\\\"id\\\"]],\\\"url\\\"],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"URL \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"URL to load in a PhantomJS browser during test execution\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,11],[[16,1,[29,[\\\"phantomUrl\\\",[30,2]]]],[24,\\\"placeholder\\\",\\\"URL to load (e.g. https://www.google.com)\\\"],[24,0,\\\"form-control\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"url\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"phantomJsVersions\\\"]],[30,0,[\\\"phantomJsVersion\\\"]],[30,3],[30,0,[\\\"versionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,7]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,13],null,[[\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@templates\\\",\\\"@hiddenFilesId\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@filesPanelExpanded\\\",\\\"@selectedTemplate\\\",\\\"@model\\\",\\\"@showTemplate\\\",\\\"@selectedFile\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[30,0,[\\\"selectedRightPanel\\\"]],[28,[37,3],[[28,[37,4],[[30,0,[\\\"selectedRightPanel\\\"]]],null]],null],[30,0,[\\\"templates\\\"]],[30,0,[\\\"hiddenFilesId\\\"]],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFileId\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,0,[\\\"specTemplateSelected\\\"]],[30,1],[28,[37,14],[[30,0,[\\\"selectedFile\\\",\\\"id\\\"]],\\\"/__index.html\\\"],null],[28,[37,3],[[28,[37,4],[[30,0,[\\\"selectedFile\\\"]]],null]],null],[30,8],[30,0,[\\\"updateContent\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,9,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,11,[[28,[37,16],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,18],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,1,[\\\"paramsConfig\\\"]],[30,2],[30,1,[\\\"readonly\\\"]],[30,10],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are referenced within your code using params['myParamName'] syntax.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are referenced within your code using <strong>params['myParamName']</strong> syntax.\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Process Logs\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,11],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"childLogs\\\"]]]],null],[1,\\\" Capture console logging and stdout/stderr from the browser\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Additional Setup Command\\\\n                \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                Teardown Command\\\\n                \\\"],[8,[39,7],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,7],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,19],[\\\"change\\\",[30,0,[\\\"updateMetadata\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[8,[39,20],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,21],[[30,3]],null]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,11,[[28,[37,16],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,1],[28,[37,3],[[28,[37,4],[[30,0,[\\\"selectedRightPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@script\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"&default\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"not-eq\\\",\\\"input\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"eq\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"on\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/phantomjs.hbs\",\n    \"isStrictMode\": false\n  });\n  let DefaultPhantomJsVersion = _environment.config.defaultPhantomJsVersion;\n  let DefaultPhantomScript = 'const page = require(\\'webpage\\').create();\\n' + 'page.onLoadFinished = function() {\\n' + '  phantom.exit();\\n' + '};\\n' + 'page.open(\\'__index.html\\');';\n  let BrowserTemplates = {};\n  BrowserTemplates['skeleton'] = '<html>\\n' + '<body>\\n' + '\\n' + '<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js\"></script>\\n' + '<script>\\n' + '   // my javascript goes here\\n' + '</script>\\n' + '</body>\\n' + '</html>';\n  BrowserTemplates['engine-io'] = '<html>\\n' + '<body>\\n' + '\\n' + '<script src=\"https://cdnjs.cloudflare.com/ajax/libs/engine.io-client/1.6.11/engine.io.js\"></script>\\n' + '<script>\\n' + '   let socket = eio(\\'http://sample.testable.io:5812\\', { transports: [ \\'websocket\\' ] });\\n' + '   socket.on(\\'open\\', function() {\\n ' + '       let sentAt = Date.now();\\n' + '       socket.send(\\'Echo test\\');\\n' + '       socket.on(\\'message\\', function(data) {\\n' + '           results().timing(\\'echoLatencyMs\\', Date.now() - sentAt, \\'ms\\');\\n' + '           socket.close();\\n' + '           finished();\\n' + '       });\\n' + '   });\\n' + '   socket.on(\\'error\\', function(err) {\\n' + '       console.log(err);\\n' + '   });\\n' + '</script>\\n' + '</body>\\n' + '</html>';\n  BrowserTemplates['close-page'] = 'window.finished();';\n  BrowserTemplates['metrics-timing'] = 'results().timing({ namespace: \\'User\\', name: \\'tickLatencyMs\\', val: 123, units: \\'ms\\' });';\n  BrowserTemplates['metrics-counter'] = 'results().counter({ namespace: \\'User\\', name: \\'stockTicks\\', val: 1, units: \\'ticks\\' });';\n  BrowserTemplates['metrics-histogram'] = 'results().histogram({ namespace: \\'User\\', name: \\'responseCodes\\', key: \\'200\\', val: 1 });';\n  const BrowserCodeOptions = [{\n    groupName: 'General',\n    options: [{\n      id: 'skeleton',\n      name: 'Browser Code Skeleton'\n    }]\n  }, {\n    groupName: 'Streaming',\n    options: [{\n      id: 'engine-io',\n      name: 'Engine.io Client'\n    }]\n  }, {\n    groupName: 'Custom Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Capture a custom timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Capture a custom counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Capture a custom histogram'\n    }]\n  }];\n  let PhantomTemplates = {};\n  PhantomTemplates['open-url'] = 'const page = require(\\'webpage\\').create();\\n' + 'page.open(\\'https://www.google.com\\', function(status) {\\n' + '   phantom.exit();\\n' + '});';\n  PhantomTemplates['metrics-timing'] = 'results().timing({ namespace: \\'User\\', name: \\'tickLatencyMs\\', val: 123, units: \\'ms\\' });';\n  PhantomTemplates['metrics-counter'] = 'results().counter({ namespace: \\'User\\', name: \\'stockTicks\\', val: 1, units: \\'ticks\\' });';\n  PhantomTemplates['metrics-histogram'] = 'results().histogram({ namespace: \\'User\\', name: \\'responseCodes\\', key: \\'200\\', val: 1 });';\n  PhantomTemplates['script-param'] = 'params[\\'MyParamName\\']';\n  PhantomTemplates['script-finished'] = 'phantom.exit();';\n  PhantomTemplates['screenshot'] = 'page.render(\\'snapshot-\\' + Date.now() + \\'.png\\');\\n';\n  const PhantomCodeOptions = [{\n    groupName: 'Basic',\n    options: [{\n      id: 'open-url',\n      name: 'Open URL'\n    }]\n  }, {\n    groupName: 'Custom Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Capture a custom timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Capture a custom counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Capture a custom histogram'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'script-finished',\n      name: 'Script finished'\n    }, {\n      id: 'script-param',\n      name: 'Read a scenario parameter'\n    }]\n  }];\n  const DefaultScriptType = {\n    id: 'phantomScript',\n    name: 'PhantomJS or SlimerJS script'\n  };\n  const ScriptTypes = [{\n    id: 'url',\n    name: 'Load URL in browser'\n  }, DefaultScriptType, {\n    id: 'browserScript',\n    name: 'Code to execute in browser'\n  }];\n  const hiddenDataStores = ['/__phantom.js', '/__index.html'];\n  let ScenarioPhantomjs = _exports.default = (_class = class ScenarioPhantomjs extends _component2.default {\n    get activePanel() {\n      return this.selectedRightPanel ? this.selectedRightPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"scriptTypes\", ScriptTypes);\n      _defineProperty(this, \"phantomJsVersions\", _environment.config.phantomJsVersions);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _defineProperty(this, \"activeSave\", null);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor4, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor5, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor6, this);\n      _initializerDefineProperty(this, \"type\", _descriptor7, this);\n      _initializerDefineProperty(this, \"phantomJsVersion\", _descriptor8, this);\n      _initializerDefineProperty(this, \"childLogs\", _descriptor9, this);\n      _initializerDefineProperty(this, \"url\", _descriptor0, this);\n      _initializerDefineProperty(this, \"phantomScript\", _descriptor1, this);\n      _initializerDefineProperty(this, \"browserScript\", _descriptor10, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor11, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor12, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor13, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor14, this);\n      _initializerDefineProperty(this, \"selectedFile\", _descriptor15, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor16, this);\n      _initializerDefineProperty(this, \"selectedRightPanel\", _descriptor17, this);\n      _defineProperty(this, \"isInit\", false);\n      (0, _runloop.next)(this, () => this._fromMetadata());\n    }\n    get defaultFileId() {\n      const dataStores = this.args.script?.dataStores || [];\n      const preferred = this.type?.id === 'phantomScript' ? hiddenDataStores[0] : hiddenDataStores[1];\n      if (dataStores.some(dt => dt.path === preferred)) {\n        return preferred;\n      }\n      return this.defaultFiles[0]?.id;\n    }\n    get templates() {\n      return this.selectedFile?.name?.split('.').pop() === 'js' ? PhantomCodeOptions : BrowserCodeOptions;\n    }\n    get hiddenFilesId() {\n      return this.args.script?.dataStores?.filter(dt => hiddenDataStores.includes(dt.path)).map(dt => dt.id);\n    }\n    get defaultFiles() {\n      const [main, index] = hiddenDataStores;\n      const type = this.type?.id;\n      if (type === 'url') {\n        return [];\n      }\n      const dataStores = this.args.script?.dataStores || [];\n      const files = [];\n      if (dataStores.some(dt => dt.path === main)) {\n        files.push({\n          id: main,\n          name: 'main.js',\n          path: main,\n          type: main,\n          fileType: 'system',\n          isFolder: false,\n          code: this.phantomScript\n        });\n      }\n      if (type === 'browserScript' && dataStores.some(dt => dt.path === index)) {\n        files.push({\n          id: index,\n          name: 'index.html',\n          path: index,\n          type: index,\n          fileType: 'system',\n          isFolder: false,\n          code: this.browserScript\n        });\n      }\n      return files;\n    }\n    onUrlChanged() {\n      if (!this.isInit) {\n        if (this.activeSave !== null) {\n          clearTimeout(this.activeSave);\n          this.activeSave = null;\n        }\n        this.activeSave = setTimeout(() => {\n          this.save();\n        }, 1000);\n      }\n    }\n    get metadata() {\n      let metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    versionChanged(selection) {\n      this.phantomJsVersion = selection;\n      this.save();\n    }\n    updateMetadata() {\n      this.save();\n    }\n    specTemplateSelected(editor, selection) {\n      const template = this.selectedFile?.name?.split('.').pop() === 'js' ? PhantomTemplates : BrowserTemplates;\n      editor.insert(template[selection.id]);\n    }\n    updateContent(type, code) {\n      const key = type === hiddenDataStores[0] ? 'phantomScript' : 'browserScript';\n      this[key] = code;\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.save();\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    typeChanged(type) {\n      this.type = type;\n      if (type.id === 'browserScript' && this.phantomScript.length === 0) {\n        this.phantomScript = DefaultPhantomScript;\n      }\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.save();\n    }\n    onChildLogsUpdated() {\n      this.save();\n    }\n    save() {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script?.metadata;\n      if (this.isInit && origMetadata) {\n        return;\n      }\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata)) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n    toMetadata() {\n      let metadata = {};\n      let type = this.type?.id;\n      const resultType = this.args.uniqueId;\n      if (type === 'url') {\n        metadata.url = $(`#phantomUrl${resultType}`).val() || \"\";\n      } else {\n        metadata.phantomScript = _jsBase.Base64.encode(this.phantomScript);\n        metadata.browserScript = _jsBase.Base64.encode(this.browserScript);\n      }\n      metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n      metadata.sourceBranch = this.sourceBranch;\n      metadata.version = this.phantomJsVersion;\n      metadata.childLogs = this.childLogs;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      metadata.type = type;\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      this.isInit = true;\n      let metadata = this.metadata;\n      this.phantomJsVersion = metadata.version && this.phantomJsVersions.includes(metadata.version) ? metadata.version : DefaultPhantomJsVersion;\n      this.type = metadata.type ? _.find(ScriptTypes, function (scriptType) {\n        return scriptType.id === metadata.type;\n      }) : DefaultScriptType;\n      this.childLogs = _.isBoolean(metadata.childLogs) ? metadata.childLogs : true;\n      let phantomScript = _.isString(metadata.phantomScript) ? _lib.default.b64DecodeUnicode(metadata.phantomScript) : _.isString(metadata.browserScript) ? DefaultPhantomScript : null;\n      if (phantomScript) {\n        this.phantomScript = phantomScript;\n      }\n      if (_.isString(metadata.browserScript)) {\n        this.browserScript = _lib.default.b64DecodeUnicode(metadata.browserScript);\n      }\n      if (_.isString(metadata.url)) {\n        this.url = metadata.url;\n      }\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n      this.sourceBranch = metadata.sourceBranch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        this.isInit = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"phantomJsVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"childLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"url\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"phantomScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"browserScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"selectedFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"selectedRightPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onUrlChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUrlChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"versionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"versionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMetadata\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specTemplateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specTemplateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"typeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"typeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChildLogsUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChildLogsUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioPhantomjs);\n});","define(\"@testable/shared-ui/components/scenario/playwright\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@ember/utils\", \"@ember/template\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/templates/playwright-template\", \"@testable/shared-ui/utils/templates/playwright-template-ts\", \"@testable/shared-ui/utils/templates/playwright-template-py\", \"@testable/shared-ui/utils/templates/playwright-mocha-templates\", \"@testable/shared-ui/utils/templates/playwright-mocha-templates-ts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _runloop, _utils, _template, _environment, _lib, _playwrightTemplate, _playwrightTemplateTs, _playwrightTemplatePy, _playwrightMochaTemplates, _playwrightMochaTemplatesTs, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43, _descriptor44, _descriptor45, _descriptor46, _descriptor47, _descriptor48, _descriptor49, _descriptor50, _descriptor51, _descriptor52, _descriptor53, _descriptor54;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@ember/template\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/templates/playwright-template\",0,\"@testable/shared-ui/utils/templates/playwright-template-ts\",0,\"@testable/shared-ui/utils/templates/playwright-template-py\",0,\"@testable/shared-ui/utils/templates/playwright-mocha-templates\",0,\"@testable/shared-ui/utils/templates/playwright-mocha-templates-ts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and @isRemote (not @embeddedInExecution))}}\n    <div class=\"note note-info alert\">\n      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n      <p>\n        <strong>What is this?</strong> This scenario was created from a remotely triggered test.\n        Remote tests cannot be edited via Testable.\n      </p>\n      <p>\n        <strong>How can I run a similar test?</strong> For help creating a similar remote test, please try\n        our\n        <a class=\"btn btn-primary btn-enabled\" href=\"javascript:\" {{on \"click\" this.remoteWizardModalOpen}} >\n          <span class=\"fa fa-copy \"></span> Remote Test Configurator\n        </a>\n      </p>\n    </div>\n  {{/if}}\n  \n  <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    {{did-update this.onMetadataChange @script.metadata}}\n    {{did-update this.onUpdateDataStore @script.dataStores}}\n    id=\"updatePlaywrightScenarioForm{{@uniqueId}}\" as |Wrapper|\n  >\n    {{#unless @isRemote}}\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source <Ui::InfoIcon\n                  @content=\"Choose the source of the code that defines this scenario\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceTypeObj}}\n                          @placeholder=\"Please select a source...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.sourceTypeChanged}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n            {{#unless @isRemote}}\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType}} data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Please select a source type.\" />\n            {{/unless}}\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Runtime</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.runTimes}} @selected={{this.runtimeObj}}\n                          @placeholder=\"Please select Runtime...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.runTimeChanged}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        {{#if (eq this.runtime \"python\")}}\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Pytest Args <Ui::InfoIcon\n                    @content=\"Additional arguments to pass to pytest (e.g. --browser firefox).\"\n                    @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}} input-group\">\n              <div class=\"input-group-append\"><span class=\"input-group-text px-2\">pytest -s</span></div>\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Additional args\"\n                      @value={{this.pytestArgs}}\n                      disabled={{@readonly}}\n                {{on \"change\" this.updatePytestArgs}} />\n            </div>\n          </div>\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Python Version</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.supportedPythonVersions}} @selected={{this.pythonVersion}} @disabled={{@readonly}}\n                        @onChange={{this.pythonVersionChanged}} as |version|>\n                Python {{version}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n        {{else}}\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Run Style <Ui::InfoIcon\n                    @content=\"Whether you are using Playwright Test or Playwright Library. Go to playwright.dev -> Docs -> Guides -> Library for more details on the difference between them.\"\n                    @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.runStyles}} @selected={{this.runStyle}}\n                            @placeholder=\"Please select Run Style...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.runStyleChanged}} as |option| >\n                {{option}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n          {{#if (eq this.runStyle \"test\")}}\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Conf File <Ui::InfoIcon\n                      @content=\"The relative path in your uploaded or linked project to your playwright test conf file. For example playwright.config.ts.\"\n                      @placement=\"bottom\" />\n              </label>\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"playwright.config.ts\"\n                        @value={{this.confFileName}}\n                        disabled={{@readonly}}\n                  {{on \"change\" this.updateConfFileName}} />\n              </div>\n            </div>\n          {{else}}\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Framework <Ui::InfoIcon\n                      @content=\"Choose whether any framework is used in your code.\" @placement=\"bottom\" /></label>\n              <div class=\"{{this.inputClasses}}\">\n                <Ui::PSelect @options={{this.frameworks}} @selected={{this.framework}}\n                              @placeholder=\"Please select Framework...\"\n                              @disabled={{@readonly}}\n                              @onChange={{this.frameworkChanged}} as |option| >\n                  {{option}}\n                </Ui::PSelect>\n              </div>\n            </div>\n  \n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Language <Ui::InfoIcon\n                      @content=\"Choose the language of the code that defines this scenario\" @placement=\"bottom\" /></label>\n              <div class=\"{{this.inputClasses}}\">\n                <Ui::PSelect @options={{this.languages}} @selected={{this.languageObj}}\n                              @placeholder=\"Please select a Language...\"\n                              @disabled={{@readonly}}\n                              @onChange={{this.updateLanguage}} as |option| >\n                  {{option.name}}\n                </Ui::PSelect>\n              </div>\n            </div>\n          {{/if}}\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Node Version <Ui::InfoIcon @title=\"Versions\" @content=\"Node.js version to run Playwright.\"\n                                                      @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.nodeVersions}} @selected={{this.nodeVersionSelected}}\n                            @disabled={{@readonly}}\n                            @onChange={{this.nodeVersionChanged}} as |version|>\n                {{version.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and this.shouldEditFilesOnPage (not-eq this.runStyle \"test\") (eq this.sourceType \"upload\"))}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Primary Spec <Ui::InfoIcon @title=\"Spec\"\n                                                      @content=\"The test spec (*.js) file that defines the behavior of your test\"\n                                                      @placement=\"bottom\" />\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.primarySpecOptions}} @selected={{this.primarySpecName}} @placeholder=\"Please select a file...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updatePrimarySpec}} as |option|>\n                {{option}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and this.shouldEditFilesOnPage (not-eq this.runStyle \"test\") (not-eq this.sourceType \"upload\"))}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\" for=\"playwrightPrimarySpec{{@uniqueId}}\">Primary Spec</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input id=\"playwrightPrimarySpec{{@uniqueId}}\"\n                      @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Primary Spec\"\n                      @value={{this.primarySpecName}}\n                      disabled={{@readonly}}\n                      {{on \"change\" this.updatePrimarySpec}} />\n            </div>\n          </div>\n        {{/if}}\n  \n      </Wrapper.Filters>\n  \n    {{/unless}}\n  \n    <Wrapper.LeftPanel @isRemote={{@isRemote}}>\n  \n      <:filesTab>\n        <Ui::FilesManager\n          @showVcsTab={{eq this.sourceType 'vcs'}}\n          @isRemote={{@isRemote}}\n          @selectedPanel={{this.selectedPanel}}\n          @onPanelChange={{fn (mut this.selectedPanel)}}\n          @templates={{this.specTemplateOptions}}\n          @selectedTemplate={{this.specTemplateSelected}}\n          @defaultFiles={{this.defaultFiles}}\n          @defaultFileId={{this.defaultFile.id}}\n          @generateExampleFiles={{this.createInitFiles}}\n          @enableGenerateExample={{this.enableGenerateExample}}\n          @generatingFiles={{this.generatingFiles}}\n          @filesPanelExpanded={{this.filesPanelExpanded}}\n          @model={{@script}}\n          @language={{this.language}}\n          @onStoreUpdate={{@onStoreUpdate}}\n          @updateContent={{@saveCode}}\n          as |Yield|>\n  \n          <Yield.TagsPanel>\n            {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n          </Yield.TagsPanel>\n          <Yield.ParamsPanel>\n            <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                        @uniqueId={{@uniqueId}}\n                        @readonly={{@script.readonly}}\n                        @isSaving={{@isSaving}}\n                        @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value.\n                        Parameters are accessible via environment variables in your Playwright code.\"\n                        @noteText={{concat\n            \"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\n            be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\n            as the environment variable <strong>ABC</strong>.\"}}\n                        @configChanged={{this.paramsConfigChanged}} />\n          </Yield.ParamsPanel>\n          <Yield.AdditionalPanel>\n            <Scenario::Ui::AdditionalPanelWrapper @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n            <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n              <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n              <:content>\n  \n                {{#if (eq this.framework 'Mocha')}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Timeout (ms) <Ui::InfoIcon\n                            @content=\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\"\n                            @placement=\"bottom\" /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"number\" class=\"form-control\" placeholder=\"Mocha timeout in milliseconds\"\n                            @value={{this.mochaTimeout}} {{on \"change\" this.updateMochaTimeout}} data-parsley-min=\"0\"\n                            data-parsley-min-message=\"Timeout must be >= 0\" />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Mocha Args\n                      <Ui::InfoIcon @content=\"Specify additional command line arguments to pass Mocha\"\n                                  @placement=\"bottom\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Mocha Args\"\n                              @value={{this.mochaArgs}} {{on \"change\" this.updateMochaArgs}} />\n                    </div>\n                  </div>\n                {{/if}}\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Video <Ui::InfoIcon\n                          @content=\"Configure Testable to record a video of each test iteration.\"\n                          @placement=\"bottom\" /></label>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.recordVideos}} {{on \"change\" this.recordVideosUpdate }}/>\n                      Capture Video Recording\n                    </label>\n                  </div>\n                </div>\n  \n                <Scenario::DeviceDropdown\n                        @labelClasses={{this.labelClasses}}\n                        @labelInfo=\"{{if (eq this.runStyle \"test\") \"The screen size for your Playwright Test session. Specific device settings in your playwright.config.ts file will control the actual browser size on the screen.\" \"\"}}\"\n                        @deviceOptions={{this.deviceOptions}}\n                        @device={{this.device}}\n                        @showFullInfo={{@isRemote}}\n                        @disabled={{@readonly}}\n                        @onchange={{this.updateDevice}}\n                        @updateProperty={{this.updateProperty}}\n                        @saveAction={{this.saveAction}}\n                />\n  \n                {{#if @readonly}}\n                  {{#each-in @script.metadata.browsers as |browser version|}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Browser </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        {{capitalize-text browser}} {{version}}\n                      </div>\n                    </div>\n                  {{/each-in}}\n                {{/if}}\n  \n                {{#if (eq this.framework 'Mocha')}}\n                  <div class=\"form-group\">\n                    <label>Test Reporting Filters </label>\n                      <Ui::InfoIcon\n                              @content=\"Specify a comma separated list of tests to filter out of the assertion reporting into the\n                              Testable test results. Filters should be specified as a comma separated list of regular expressions\n                              (e.g. .*my test.*) that follow the format [suite].[test]. For\n                              describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\n                              regular expression against 'My suite.my test').\"\n                              @isHtml={{true}}\n                              @placement=\"bottom\"/>\n  \n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"Test Reporting Filters\"\n                            @value={{this.skipTestableReporting}}\n                            {{on \"change\" this.updateTestClasses}} />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.skipTestReporting}} {{on \"change\" this.skipTestReportingUpdate}} />\n                      Do not report on skipped tests\n                    </label>\n                  </div>\n                {{/if}}\n                {{#if (or (eq this.runtime \"node\") (eq this.runStyle \"test\") (eq this.framework 'Mocha'))}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Screenshots <Ui::InfoIcon\n                            @content=\"Configure Testable to automatically capture screenshots. Note that you can also capture screenshots yourself in your code and they will be visible in the results.\"\n                            @placement=\"bottom\" /></label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.autoScreenshots}} {{on \"change\" this.autoScreenshotsUpdate }} /> Capture a screenshot\n                      </label>\n                      <div class=\"inline-pselect\">\n                        <Ui::PSelect @options={{this.screenshotTriggers}} @selected={{this.screenshotTrigger}}\n                                  @disabled={{or (not this.autoScreenshots) @readonly}}\n                                  @onChange={{this.screenshotTriggerUpdate}} as |option|>\n                          {{option.name}}\n                        </Ui::PSelect>\n                      </div>\n                    </div>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.autoSendScreenshots}} {{on \"change\" this.autoSendScreenshotsUpdate }} /> Capture all screenshot requests into the results\n                        <Ui::InfoIcon\n                            @content=\"Whether or not to automatically capture the response from every Playwright screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\"\n                            @placement=\"bottom\" />\n                      </label>\n                    </div>\n                  </div>\n                {{/if}}\n                {{#if (eq this.runtime \"node\")}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">NPM Settings</label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.noPackageLock}} {{on \"change\" this.noPackageLockUpdate }} />\n                        Ignore package-lock.json on npm install (--no-package-lock)\n                      </label>\n                    </div>\n                  </div>\n                  {{#if (eq this.runStyle \"test\")}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Additional Command Line Args <Ui::InfoIcon\n                              @content=\"Additional arguments to pass when Testable runs your code via npx playwright test (e.g. --global-timeout 60000). The -c argument needs to be specified above in the Playwright Conf File field and not here.\"\n                              @placement=\"bottom\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.additionalCommandLineArgs}}\n                          {{on \"change\" this.updateAdditionalCommandLineArgs}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                {{/if}}\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                          @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                          @placement=\"bottom\" />\n                  </label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\"\n                          class=\"form-control\"\n                          placeholder=\"\"\n                          @value={{this.rootFolder}}\n                      {{on \"change\" this.updateRootFolder}} />\n                  </div>\n                </div>\n                {{#if (eq this.sourceType 'upload')}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"\"\n                            @value={{this.sourceRepositoryUrl}}\n                            {{on \"change\" this.save}} />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"\"\n                            @value={{this.sourceBranch}}\n                            {{on \"change\" this.save}} />\n                    </div>\n                  </div>\n                {{/if}}\n              </:content>\n            </Yield.AdditionalWrapper>\n  \n            <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n  \n              <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n              <:content>\n  \n                <Forms::MaxDurationInput\n                        @labelClasses={{this.labelClasses}}\n                        @inputClasses={{this.inputClasses}}\n                        @value={{this.maxDuration}}\n                        @onChange={{this.updateMaxDuration}}\n                />\n                <Forms::ResourcePartsInput\n                        @labelClasses={{this.labelClasses}}\n                        @inputClasses={{this.inputClasses}}\n                        @resourceParts={{this.resourceParts}}\n                        @resourceNameMappings={{this.resourceNameMappings}}\n                        @overrideOrgDefault={{this.overrideOrgDefault}}\n                        @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                        @onChange={{this.updateResourceParts}}\n                        @editable={{not @readonly}}\n                />\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Logs</label>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.childLogs}} {{on \"change\" this.childLogsUpdate }}/>\n                      Capture logging from the Playwright related processes\n                    </label>\n                  </div>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.logCommands}} {{on \"change\" this.logCommandsUpdate }}/>\n                      Log each command into the test results log\n                      <Ui::InfoIcon\n                              @content=\"Each Playwright command corresponds to a single request at the protocol level\"/>\n                    </label>\n                  </div>\n                </div>\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Network Request Metrics</label>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.captureNetworkRequests}} {{on \"change\" this.captureNetworkRequestsUpdate }} />\n                      Capture performance metrics for all network requests via Chrome DevTools.\n                    </label>\n                  </div>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.captureNetworkBody}} {{on \"change\" this.captureNetworkBodyUpdate }}/>\n                      Capture the body of each request/response (impacts performance)\n                    </label>\n                  </div>\n                </div>\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">\n                    Additional Setup Command\n                    <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                  </label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\" class=\"form-control\"\n                            placeholder=\"Additional Setup Command\"\n                            @value={{this.additionalSetupCommand}} {{on \"change\" this.updateAdditionalSetupCommand}} />\n                  </div>\n                </div>\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">\n                    Teardown Command\n                    <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                  </label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\" class=\"form-control\"\n                            placeholder=\"Teardown Command\"\n                            @value={{this.teardownCommand}} {{on \"change\" this.updateTeardownCommand}} />\n                  </div>\n                </div>\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Runtime Requirements</label>\n                  <BsButtonGroup class=\"flex-wrap\" @value={{this.platform}} @type=\"radio\" @onChange={{this.updatePlatform}} as |bg|>\n                    <bg.button @type=\"success\" @value=\"\" @size=\"sm\">\n                      Any OS <Ui::InfoIcon @content=\"Runs on any available test runner regardless of OS\" /></bg.button>\n                    <bg.button @type=\"success\" @value=\"linux\" @size=\"sm\">Linux <Ui::InfoIcon\n                            @content=\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\" /></bg.button>\n                    <bg.button @type=\"success\" @value=\"win32\" @size=\"sm\">Windows <Ui::InfoIcon\n                            @content=\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\" /></bg.button>\n                  </BsButtonGroup>\n                </div>\n  \n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Debug Settings</label>\n                  <div class=\"{{this.inputClasses}} m-t-5\">\n                    <label class=\"normal\">\n                      <Input @type=\"checkbox\" @checked={{this.enableDebug}} {{on \"change\" this.enableDebugUpdate }} />\n                      Enable debug logging (set DEBUG=pw:api)\n                    </label>\n                  </div>\n                </div>\n              </:content>\n            </Yield.AdditionalWrapper>\n            </Scenario::Ui::AdditionalPanelWrapper>\n          </Yield.AdditionalPanel>\n  \n          <Yield.VcsTab>\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Repository</label>\n              <div class=\"{{this.inputClasses}}\">\n                <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                          @repositoryUrl={{this.repositoryUrl}}\n                          @readonly={{@readonly}}\n                          @repositorySelected={{this.repositoryChanged}} />\n              </div>\n            </div>\n            <div class=\"form-group {{if (not-eq this.sourceType 'vcs') 'hidden'}}\">\n              <label class=\"{{this.labelClasses}}\">Branch</label>\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}}\n                      {{on \"change\" this.updateBranch}} />\n              </div>\n            </div>\n          </Yield.VcsTab>\n        </Ui::FilesManager>\n      </:filesTab>\n  \n      <:runConsoleTab>\n        {{yield (hash Siblings=(component \"empty\"))}}\n      </:runConsoleTab>\n  \n    </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @isRemote={{@isRemote}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  {{#if this.showCreateSpecModal}}\n    <CreateSpecModal @scriptId={{@script.id}}\n                    @contents={{this.specDefaultContents}}\n                    @created={{this.specCreated}}\n                    @modalClosed={{this.createSpecModalClosed}}\n                    @inputTitle={{concat \"Test Spec Name (*.\" (if (eq this.language 'typescript') 'ts' 'js') \")\"}}\n                    @inputPlaceholder={{concat \"Spec Name (*.\" (if (eq this.language 'typescript') 'ts' 'js') \")\"}}\n    />\n  {{/if}}\n  {{#if this.showRemoteModal}}\n    <RemoteConfiguratorModal @metadata={{@script.metadata}}\n                            @scriptType={{@script.scriptType}}\n                            @modalClosed={{this.remoteWizardModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[28,[37,2],[[30,2]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"What is this?\\\"],[13],[1,\\\" This scenario was created from a remotely triggered test.\\\\n      Remote tests cannot be edited via Testable.\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"How can I run a similar test?\\\"],[13],[1,\\\" For help creating a similar remote test, please try\\\\n      our\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-primary btn-enabled\\\"],[24,6,\\\"javascript:\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"remoteWizardModalOpen\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"fa fa-copy \\\"],[12],[13],[1,\\\" Remote Test Configurator\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[8,[39,9],[[16,1,[29,[\\\"updatePlaywrightScenarioForm\\\",[30,3]]]],[4,[38,12],[[30,0,[\\\"onMetadataChange\\\"]],[30,4,[\\\"metadata\\\"]]],null],[4,[38,12],[[30,0,[\\\"onUpdateDataStore\\\"]],[30,4,[\\\"dataStores\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,4],[28,[37,10],[[28,[37,11],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,5],[30,6]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[8,[30,7,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the source of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceTypeObj\\\"]],\\\"Please select a source...\\\",[30,5],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"          \\\"],[8,[39,17],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Runtime\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"runTimes\\\"]],[30,0,[\\\"runtimeObj\\\"]],\\\"Please select Runtime...\\\",[30,5],[30,0,[\\\"runTimeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[9]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"runtime\\\"]],\\\"python\\\"],null],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Pytest Args \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Additional arguments to pass to pytest (e.g. --browser firefox).\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" input-group\\\"]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text px-2\\\"],[12],[1,\\\"pytest -s\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional args\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updatePytestArgs\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"pytestArgs\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Python Version\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"supportedPythonVersions\\\"]],[30,0,[\\\"pythonVersion\\\"]],[30,5],[30,0,[\\\"pythonVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Python \\\"],[1,[30,10]],[1,\\\"\\\\n            \\\"]],[10]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Run Style \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Whether you are using Playwright Test or Playwright Library. Go to playwright.dev -> Docs -> Guides -> Library for more details on the difference between them.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"runStyles\\\"]],[30,0,[\\\"runStyle\\\"]],\\\"Please select Run Style...\\\",[30,5],[30,0,[\\\"runStyleChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,11]],[1,\\\"\\\\n            \\\"]],[11]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Conf File \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"The relative path in your uploaded or linked project to your playwright test conf file. For example playwright.config.ts.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"playwright.config.ts\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateConfFileName\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"confFileName\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Framework \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose whether any framework is used in your code.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"frameworks\\\"]],[30,0,[\\\"framework\\\"]],\\\"Please select Framework...\\\",[30,5],[30,0,[\\\"frameworkChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,12]],[1,\\\"\\\\n              \\\"]],[12]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Language \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the language of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"languages\\\"]],[30,0,[\\\"languageObj\\\"]],\\\"Please select a Language...\\\",[30,5],[30,0,[\\\"updateLanguage\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[30,13,[\\\"name\\\"]]],[1,\\\"\\\\n              \\\"]],[13]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Node Version \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[\\\"Versions\\\",\\\"Node.js version to run Playwright.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"nodeVersions\\\"]],[30,0,[\\\"nodeVersionSelected\\\"]],[30,5],[30,0,[\\\"nodeVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,14,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[14]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"shouldEditFilesOnPage\\\"]],[28,[37,19],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],[28,[37,18],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Primary Spec \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@placement\\\"],[\\\"Spec\\\",\\\"The test spec (*.js) file that defines the behavior of your test\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"primarySpecOptions\\\"]],[30,0,[\\\"primarySpecName\\\"]],\\\"Please select a file...\\\",[30,5],[30,0,[\\\"updatePrimarySpec\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,15]],[1,\\\"\\\\n            \\\"]],[15]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"shouldEditFilesOnPage\\\"]],[28,[37,19],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],[28,[37,19],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[15,\\\"for\\\",[29,[\\\"playwrightPrimarySpec\\\",[30,3]]]],[12],[1,\\\"Primary Spec\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,17],[[16,1,[29,[\\\"playwrightPrimarySpec\\\",[30,3]]]],[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Primary Spec\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updatePrimarySpec\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"primarySpecName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[8,[30,7,[\\\"LeftPanel\\\"]],null,[[\\\"@isRemote\\\"],[[30,1]]],[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[39,21],null,[[\\\"@showVcsTab\\\",\\\"@isRemote\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@language\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[28,[37,18],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],[30,1],[30,0,[\\\"selectedPanel\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"specTemplateOptions\\\"]],[30,0,[\\\"specTemplateSelected\\\"]],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFile\\\",\\\"id\\\"]],[30,0,[\\\"createInitFiles\\\"]],[30,0,[\\\"enableGenerateExample\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,4],[30,0,[\\\"language\\\"]],[30,16],[30,17]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n        \\\"],[8,[30,18,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[18,25,[[28,[37,23],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,18,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[39,25],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,4,[\\\"paramsConfig\\\"]],[30,3],[30,4,[\\\"readonly\\\"]],[30,19],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value.\\\\n                      Parameters are accessible via environment variables in your Playwright code.\\\",[28,[37,26],[\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\\\\n          be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\\\\n          as the environment variable <strong>ABC</strong>.\\\"],null],[30,0,[\\\"paramsConfigChanged\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,18,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[39,27],null,[[\\\"@additionalWrappers\\\"],[[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,20,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,28],[[28,[37,28],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,28],[[28,[37,28],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout (ms) \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha timeout in milliseconds\\\"],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Timeout must be >= 0\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateMochaTimeout\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"mochaTimeout\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Mocha Args\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Specify additional command line arguments to pass Mocha\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha Args\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateMochaArgs\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"mochaArgs\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Video \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Configure Testable to record a video of each test iteration.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"recordVideosUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recordVideos\\\"]]]],null],[1,\\\"\\\\n                    Capture Video Recording\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[8,[39,31],null,[[\\\"@labelClasses\\\",\\\"@labelInfo\\\",\\\"@deviceOptions\\\",\\\"@device\\\",\\\"@showFullInfo\\\",\\\"@disabled\\\",\\\"@onchange\\\",\\\"@updateProperty\\\",\\\"@saveAction\\\"],[[30,0,[\\\"labelClasses\\\"]],[29,[[52,[28,[37,18],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],\\\"The screen size for your Playwright Test session. Specific device settings in your playwright.config.ts file will control the actual browser size on the screen.\\\",\\\"\\\"]]],[30,0,[\\\"deviceOptions\\\"]],[30,0,[\\\"device\\\"]],[30,1],[30,5],[30,0,[\\\"updateDevice\\\"]],[30,0,[\\\"updateProperty\\\"]],[30,0,[\\\"saveAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5],[[[42,[28,[37,33],[[30,4,[\\\"metadata\\\",\\\"browsers\\\"]]],null],null,[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Browser \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[35,34],[[30,22]],null]],[1,\\\" \\\"],[1,[30,21]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[21,22]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Reporting Filters \\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify a comma separated list of tests to filter out of the assertion reporting into the\\\\n                            Testable test results. Filters should be specified as a comma separated list of regular expressions\\\\n                            (e.g. .*my test.*) that follow the format [suite].[test]. For\\\\n                            describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\\\\n                            regular expression against 'My suite.my test').\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Reporting Filters\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateTestClasses\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"skipTestableReporting\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"skipTestReportingUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"skipTestReporting\\\"]]]],null],[1,\\\"\\\\n                    Do not report on skipped tests\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,35],[[28,[37,18],[[30,0,[\\\"runtime\\\"]],\\\"node\\\"],null],[28,[37,18],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Screenshots \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Configure Testable to automatically capture screenshots. Note that you can also capture screenshots yourself in your code and they will be visible in the results.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"autoScreenshotsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoScreenshots\\\"]]]],null],[1,\\\" Capture a screenshot\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"screenshotTriggers\\\"]],[30,0,[\\\"screenshotTrigger\\\"]],[28,[37,35],[[28,[37,2],[[30,0,[\\\"autoScreenshots\\\"]]],null],[30,5]],null],[30,0,[\\\"screenshotTriggerUpdate\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[1,[30,23,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"]],[23]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"autoSendScreenshotsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoSendScreenshots\\\"]]]],null],[1,\\\" Capture all screenshot requests into the results\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Whether or not to automatically capture the response from every Playwright screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,18],[[30,0,[\\\"runtime\\\"]],\\\"node\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"NPM Settings\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"noPackageLockUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"noPackageLock\\\"]]]],null],[1,\\\"\\\\n                      Ignore package-lock.json on npm install (--no-package-lock)\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"runStyle\\\"]],\\\"test\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Additional Command Line Args \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Additional arguments to pass when Testable runs your code via npx playwright test (e.g. --global-timeout 60000). The -c argument needs to be specified above in the Playwright Conf File field and not here.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateAdditionalCommandLineArgs\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalCommandLineArgs\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,20,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,28],[[28,[37,28],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,28],[[28,[37,28],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n              \\\"],[8,[39,36],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n              \\\"],[8,[39,37],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,2],[[30,5]],null]]],null],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Logs\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"childLogsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"childLogs\\\"]]]],null],[1,\\\"\\\\n                    Capture logging from the Playwright related processes\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"logCommandsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"logCommands\\\"]]]],null],[1,\\\"\\\\n                    Log each command into the test results log\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Each Playwright command corresponds to a single request at the protocol level\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Network Request Metrics\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"captureNetworkRequestsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"captureNetworkRequests\\\"]]]],null],[1,\\\"\\\\n                    Capture performance metrics for all network requests via Chrome DevTools.\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"captureNetworkBodyUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"captureNetworkBody\\\"]]]],null],[1,\\\"\\\\n                    Capture the body of each request/response (impacts performance)\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                  Additional Setup Command\\\\n                  \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateAdditionalSetupCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                  Teardown Command\\\\n                  \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateTeardownCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Runtime Requirements\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,38],[[24,0,\\\"flex-wrap\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"platform\\\"]],\\\"radio\\\",[30,0,[\\\"updatePlatform\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,24,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    Any OS \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Runs on any available test runner regardless of OS\\\"]],null]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,24,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"linux\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Linux \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\\\"]],null]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,24,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"win32\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Windows \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\\\"]],null]],[]]]]],[1,\\\"\\\\n                \\\"]],[24]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Debug Settings\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"enableDebugUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"enableDebug\\\"]]]],null],[1,\\\"\\\\n                    Enable debug logging (set DEBUG=pw:api)\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[20]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,18,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,39],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,5],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[52,[28,[37,19],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateBranch\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[18]]]]],[1,\\\"\\\\n    \\\"]],[]],[[[1,\\\"\\\\n      \\\"],[18,25,[[28,[37,23],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,7,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@isRemote\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,1],[30,4],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[7]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateSpecModal\\\"]],[[[1,\\\"  \\\"],[8,[39,44],null,[[\\\"@scriptId\\\",\\\"@contents\\\",\\\"@created\\\",\\\"@modalClosed\\\",\\\"@inputTitle\\\",\\\"@inputPlaceholder\\\"],[[30,4,[\\\"id\\\"]],[30,0,[\\\"specDefaultContents\\\"]],[30,0,[\\\"specCreated\\\"]],[30,0,[\\\"createSpecModalClosed\\\"]],[28,[37,26],[\\\"Test Spec Name (*.\\\",[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"],\\\")\\\"],null],[28,[37,26],[\\\"Spec Name (*.\\\",[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"],\\\")\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showRemoteModal\\\"]],[[[1,\\\"  \\\"],[8,[39,45],null,[[\\\"@metadata\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,4,[\\\"metadata\\\"]],[30,4,[\\\"scriptType\\\"]],[30,0,[\\\"remoteWizardModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isRemote\\\",\\\"@embeddedInExecution\\\",\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"option\\\",\\\"@onStoreUpdate\\\",\\\"@saveCode\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"version\\\",\\\"browser\\\",\\\"option\\\",\\\"bg\\\",\\\"&default\\\"],[\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"div\\\",\\\"span\\\",\\\"p\\\",\\\"strong\\\",\\\"a\\\",\\\"on\\\",\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-update\\\",\\\"unless\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"eq\\\",\\\"not-eq\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"concat\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"scenario/device-dropdown\\\",\\\"each\\\",\\\"-each-in\\\",\\\"capitalize-text\\\",\\\"or\\\",\\\"forms/max-duration-input\\\",\\\"forms/resource-parts-input\\\",\\\"bs-button-group\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\",\\\"create-spec-modal\\\",\\\"remote-configurator-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/playwright.hbs\",\n    \"isStrictMode\": false\n  });\n  const CreatePrimarySpecOption = 'Create new test spec...';\n  const JsSourceTypes = [{\n    id: 'upload',\n    name: 'Upload'\n  }, {\n    id: 'vcs',\n    name: 'Version Control'\n  }];\n  const Runtimes = [{\n    id: 'node',\n    name: 'Node.js'\n  }, {\n    id: 'python',\n    name: 'Python'\n  }];\n  let ScenarioPlaywrightComponent = _exports.default = (_class = class ScenarioPlaywrightComponent extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    /**\n     * Constructor\n     * @param owner\n     * @param args\n     */\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor2, this);\n      _initializerDefineProperty(this, \"captureNetworkRequests\", _descriptor3, this);\n      _initializerDefineProperty(this, \"captureNetworkBody\", _descriptor4, this);\n      _initializerDefineProperty(this, \"noPackageLock\", _descriptor5, this);\n      _initializerDefineProperty(this, \"childLogs\", _descriptor6, this);\n      _initializerDefineProperty(this, \"logCommands\", _descriptor7, this);\n      _initializerDefineProperty(this, \"device\", _descriptor8, this);\n      _initializerDefineProperty(this, \"enableDebug\", _descriptor9, this);\n      _initializerDefineProperty(this, \"framework\", _descriptor0, this);\n      _initializerDefineProperty(this, \"runtime\", _descriptor1, this);\n      _initializerDefineProperty(this, \"pythonVersion\", _descriptor10, this);\n      _initializerDefineProperty(this, \"runStyle\", _descriptor11, this);\n      _initializerDefineProperty(this, \"confFileName\", _descriptor12, this);\n      _initializerDefineProperty(this, \"additionalCommandLineArgs\", _descriptor13, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor14, this);\n      _initializerDefineProperty(this, \"inputClasses\", _descriptor15, this);\n      _initializerDefineProperty(this, \"jsConf\", _descriptor16, this);\n      _initializerDefineProperty(this, \"labelClasses\", _descriptor17, this);\n      _initializerDefineProperty(this, \"language\", _descriptor18, this);\n      _initializerDefineProperty(this, \"mochaTimeout\", _descriptor19, this);\n      _initializerDefineProperty(this, \"mochaArgs\", _descriptor20, this);\n      _initializerDefineProperty(this, \"packageJson\", _descriptor21, this);\n      _initializerDefineProperty(this, \"platform\", _descriptor22, this);\n      _initializerDefineProperty(this, \"primarySpecContents\", _descriptor23, this);\n      _initializerDefineProperty(this, \"primarySpecName\", _descriptor24, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor25, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor26, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor27, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor28, this);\n      _initializerDefineProperty(this, \"recordVideos\", _descriptor29, this);\n      _initializerDefineProperty(this, \"runAs\", _descriptor30, this);\n      _initializerDefineProperty(this, \"showCreateSpecModal\", _descriptor31, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor32, this);\n      _initializerDefineProperty(this, \"tsConfig\", _descriptor33, this);\n      _initializerDefineProperty(this, \"nodeVersions\", _descriptor34, this);\n      _initializerDefineProperty(this, \"nodeVersionSelected\", _descriptor35, this);\n      _initializerDefineProperty(this, \"screenshotTrigger\", _descriptor36, this);\n      _initializerDefineProperty(this, \"autoScreenshots\", _descriptor37, this);\n      _initializerDefineProperty(this, \"autoSendScreenshots\", _descriptor38, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor39, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor40, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor41, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor42, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor43, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor44, this);\n      _initializerDefineProperty(this, \"showRemoteModal\", _descriptor45, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor46, this);\n      _initializerDefineProperty(this, \"skipTestableReporting\", _descriptor47, this);\n      _initializerDefineProperty(this, \"skipTestReporting\", _descriptor48, this);\n      _initializerDefineProperty(this, \"pytestArgs\", _descriptor49, this);\n      _initializerDefineProperty(this, \"defaultDevice\", _descriptor50, this);\n      _initializerDefineProperty(this, \"deviceList\", _descriptor51, this);\n      _initializerDefineProperty(this, \"enableGenerateExample\", _descriptor52, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor53, this);\n      _defineProperty(this, \"jsFrameworks\", ['None', 'Mocha']);\n      _defineProperty(this, \"jsRunStyles\", ['library', 'test']);\n      _defineProperty(this, \"runTimes\", Runtimes);\n      _defineProperty(this, \"PythonVersions\", _environment.config.pythonVersions);\n      _defineProperty(this, \"languages\", [{\n        id: 'javascript',\n        name: 'JavaScript'\n      }, {\n        id: 'typescript',\n        name: 'TypeScript'\n      }]);\n      _defineProperty(this, \"sourceTypes\", JsSourceTypes);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor54, this);\n      _defineProperty(this, \"screenshotTriggers\", [{\n        id: 'afterFailed',\n        name: 'after failed test steps'\n      }, {\n        id: 'afterEvery',\n        name: 'after every test step'\n      }]);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }]);\n      (0, _runloop.next)(this, () => {\n        this.fromMetadata();\n      });\n    }\n\n    /**\n     * Observer: when metadata is changed\n     */\n    onMetadataChange() {\n      // observer\n      this.fromMetadata();\n    }\n    onUpdateDataStore() {\n      (0, _runloop.next)(this, () => {\n        if (this.shouldEditFilesOnPage && this.primarySpecName && !this.args.script.dataStores.find(ds => ds.name === this.primarySpecName)) {\n          this.primarySpecName = '';\n          this.saveScript();\n        }\n      });\n    }\n    get sourceTypeObj() {\n      return this.sourceTypes.find(st => this.sourceType === st.id);\n    }\n    get runtimeObj() {\n      return Runtimes.find(rt => this.runtime === rt.id);\n    }\n    get deviceOptions() {\n      return this.deviceList;\n    }\n    get languageObj() {\n      return this.languages.find(ba => this.language === ba.id);\n    }\n    get mode() {\n      return this.language === 'javascript' ? \"ace/mode/javascript\" : \"ace/mode/typescript\";\n    }\n    get frameworks() {\n      return this.jsFrameworks;\n    }\n    get runStyles() {\n      return this.jsRunStyles;\n    }\n    get supportedPythonVersions() {\n      return _environment.config.pythonVersions;\n    }\n    get specTemplateOptions() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _playwrightMochaTemplatesTs.default.specOptions : _playwrightMochaTemplates.default.specOptions : langTs ? _playwrightTemplateTs.default.specOptions : _playwrightTemplate.default.specOptions;\n    }\n    get specTemplates() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _playwrightMochaTemplatesTs.default.spec : _playwrightMochaTemplates.default.spec : langTs ? _playwrightTemplateTs.default.spec : _playwrightTemplate.default.spec;\n    }\n    get specDefaultContents() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _playwrightMochaTemplatesTs.default.spec['skeleton'] : _playwrightMochaTemplates.default.spec['skeleton'] : langTs ? _playwrightTemplateTs.default.spec['skeleton'] : _playwrightTemplate.default.spec['skeleton'];\n    }\n    get metadata() {\n      const metadata = this.args.script.metadata;\n      return (0, _utils.isEmpty)(metadata) ? {} : metadata;\n    }\n    get primarySpec() {\n      const name = this.primarySpecName;\n      if (name) {\n        return _.find(this.args.script.dataStores, ds => {\n          return ds.name === name;\n        });\n      }\n      return '';\n    }\n    get primarySpecOptions() {\n      const existing = [];\n      if (!this.args.script?.dataStores) return '';\n      this.args.script.dataStores.forEach(ds => {\n        if (_lib.default.endsWith(ds.name, '.js') || _lib.default.endsWith(ds.name, '.ts')) {\n          existing.push(ds.name);\n        }\n      });\n      return [{\n        groupName: 'Existing',\n        options: existing\n      }, {\n        groupName: 'New',\n        options: [CreatePrimarySpecOption]\n      }];\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType === 'upload' && this.framework || this.runtime !== 'python';\n    }\n    get defaultFiles() {\n      if (this.args.isRemote) return;\n      const html = `\n      <div class=\"note note-info alert\">\n        <p>\n          Consider using placeholder \\${playwrightVersion} in your package.json file.\n          Testable will automatically replace it with the version of Playwright that matches the latest browser version.\n        </p>\n      </div>\n    `;\n      return [{\n        id: 'note',\n        type: 'note',\n        name: 'NOTE',\n        path: '/NOTE',\n        readonly: true,\n        fileType: 'note',\n        isFolder: false,\n        code: (0, _template.htmlSafe)(html)\n      }];\n    }\n    get defaultFile() {\n      if (this.args.isRemote) return;\n      if (this.runtime === 'python') {\n        return _.find(this.args.script.dataStores, ds => ds.name.includes('.py')) || this.defaultFiles[0];\n      }\n      const name = this.runStyle === 'test' ? this.confFileName : this.primarySpecName;\n      return _.find(this.args.script.dataStores, ds => ds.name === name) || this.defaultFiles[0];\n    }\n\n    /**\n     * Set the script language\n     * @param {String<typescript|javascript>} language Javascript or Typescript\n     */\n    updateLanguage({\n      id\n    }) {\n      this.language = id;\n      this.saveScript();\n    }\n\n    /**\n     * Inserts specs content into editor\n     * @param selection\n     */\n    specTemplateSelected(editor, selection) {\n      const templates = this.specTemplates;\n      editor.insert(templates[selection.id]);\n    }\n\n    /**\n     * Update parent component with latest paramsConfig\n     * @param {Object} paramsConfig\n     */\n    paramsConfigChanged(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n\n    /**\n     * Update the selected node version\n     * @param Object selection\n     */\n    nodeVersionChanged(selection) {\n      this.nodeVersionSelected = selection;\n      this.saveScript();\n    }\n\n    /**\n     * Save the content on branch change\n     */\n    updateBranch() {\n      this.saveScript();\n    }\n\n    /**\n     * Save the current selected Device / Display\n     * @param {Object} device\n     */\n    updateDevice(device) {\n      let oldDevice = this.device;\n      if (device.displaySize === 'custom' || device.displaySize === 'customDevice') {\n        device.width = oldDevice.width;\n        device.height = oldDevice.height;\n        if (device.type === 'device') {\n          device.scaleFactor = oldDevice.scaleFactor;\n          device.isMobile = oldDevice.isMobile;\n          device.isTouch = oldDevice.isTouch;\n          device.isLandscape = oldDevice.isLandscape;\n          device.userAgent = oldDevice.userAgent || '';\n        }\n      }\n      this.device = device;\n      this.saveScript(true);\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    captureNetworkBodyUpdate(event) {\n      this.captureNetworkBody = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    captureNetworkRequestsUpdate(event) {\n      this.captureNetworkRequests = event.target.checked;\n      if (!this.captureNetworkRequests) {\n        this.captureNetworkBody = false;\n      }\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    noPackageLockUpdate(event) {\n      this.noPackageLock = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    childLogsUpdate(event) {\n      this.childLogs = event.target.checked;\n      this.saveScript();\n    }\n    logCommandsUpdate(event) {\n      this.logCommands = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    recordVideosUpdate(event) {\n      this.recordVideos = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     * Enable DEBUG settings\n     * @param {Object} event\n     */\n    enableDebugUpdate(event) {\n      this.enableDebug = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     * Save script on Mocha timeout update\n     */\n    updateMochaTimeout() {\n      this.saveScript();\n    }\n\n    /**\n     * Save script on Mocha args update\n     */\n    updateMochaArgs() {\n      this.saveScript();\n    }\n\n    /**\n     * Update framework and save\n     * @param {String} framework\n     */\n    frameworkChanged(framework) {\n      this.updateFramework(framework);\n      this.saveScript();\n    }\n    async updateFramework(framework = null) {\n      this.framework = framework;\n      this.updateExampleGenerationStatus();\n    }\n    async runStyleChanged(runStyle) {\n      this.runStyle = runStyle;\n      if (runStyle === 'test') {\n        this.updateFramework();\n      }\n      this.saveScript();\n    }\n    async runTimeChanged(selected) {\n      this.runtime = selected.id;\n      this.saveScript();\n    }\n\n    /**\n     * Update selection and save the script\n     * @param {String} selection\n     */\n    async sourceTypeChanged({\n      id\n    }) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        const resultType = this.args.uniqueId;\n        $(`#updatePlaywrightScenarioForm${resultType}`).parsley().validate();\n      }, 250);\n      this.sourceType = id;\n      this.updateExampleGenerationStatus();\n      this.saveScript();\n    }\n\n    /**\n     * Update repository details\n     * @param {Object} repository\n     */\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Primary Spec\n     * @param {Object} event\n     */\n    updatePrimarySpec(event) {\n      let value = event.target ? event.target.value : event;\n      if (value === CreatePrimarySpecOption) {\n        this.showCreateSpecModal = true;\n      } else if (value !== '') {\n        this.primarySpecName = value;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Playwright Conf File\n     * @param {Object} event\n     */\n    updateConfFileName(event) {\n      let value = event.target?.value;\n      this.confFileName = value;\n      this.saveScript();\n    }\n\n    /**\n     * Update Additional Command Line Args\n     * @param {Object} event\n     */\n    updateAdditionalCommandLineArgs(event) {\n      let value = event.target?.value;\n      this.additionalCommandLineArgs = value;\n      this.saveScript();\n    }\n\n    /**\n     * Update Root Folder\n     * @param {Object} event\n     */\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.saveScript();\n    }\n\n    /**\n    * Update Additional Setup Command\n    * @param {Object} event\n    */\n    updateAdditionalSetupCommand(event) {\n      this.additionalSetupCommand = event.target?.value;\n      this.saveScript();\n    }\n\n    /**\n    * Update Teardown Command\n    * @param {Object} event\n    */\n    updateTeardownCommand(event) {\n      this.teardownCommand = event.target?.value;\n      this.saveScript();\n    }\n\n    /**\n     * Update Datastore and primary Spec name\n     * @param {Object} ds\n     */\n    specCreated(ds) {\n      if (ds) {\n        this.args.dataStoreUpdate(null, ds);\n        this.primarySpecName = ds.name;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Called when Create Spec model is closed\n     */\n    createSpecModalClosed() {\n      this.showCreateSpecModal = false;\n    }\n\n    /**\n     * Update any property from call back functions e.g. device manager dropdown\n     * @param {String} prop Property name to update in Display Size object\n     * @param {any} val Value for Display Size property\n     */\n    updateProperty(prop, val) {\n      this.device[prop] = val;\n      this.saveScript(true);\n    }\n    saveAction() {\n      this.saveScript(true);\n    }\n\n    /**\n     * Update Platform and save\n     * @param {String} platform Platform\n     */\n    updatePlatform(platform) {\n      this.platform = platform;\n      this.saveScript();\n    }\n    updateTestClasses() {\n      this.saveScript();\n    }\n    skipTestReportingUpdate(ckBox) {\n      this.skipTestReporting = ckBox.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     * Saveception\n     */\n    save() {\n      this.saveScript();\n    }\n    remoteWizardModalOpen() {\n      this.showRemoteModal = true;\n    }\n    remoteWizardModalClosed() {\n      this.showRemoteModal = false;\n    }\n    updateMaxDuration(e) {\n      this.maxDuration = e.target.valueAsNumber;\n      this.saveScript();\n    }\n    autoScreenshotsUpdate(ckBox) {\n      this.autoScreenshots = ckBox.target.checked;\n      this.saveScript();\n    }\n    autoSendScreenshotsUpdate(ckBox) {\n      this.autoSendScreenshots = ckBox.target.checked;\n      this.saveScript();\n    }\n    screenshotTriggerUpdate(screenshotTrigger) {\n      this.screenshotTrigger = screenshotTrigger;\n      this.saveScript();\n    }\n    updatePytestArgs(event) {\n      let value = event.target?.value;\n      this.pytestArgs = value;\n      this.saveScript();\n    }\n    pythonVersionChanged(value) {\n      this.pythonVersion = value;\n      this.saveScript();\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.saveScript();\n    }\n    async createInitFiles() {\n      if (this.runtime === 'python') {\n        await this.initPythonPackageFile();\n      } else {\n        if (this.sourceType === 'upload' && this.runStyle === 'test') {\n          await this.initTestModePackageFile();\n        } else if (this.shouldEditFilesOnPage) {\n          this.framework === 'Mocha' ? await this.initMochaPackageFile() : await this.initJsPackageFile();\n        }\n      }\n      this.saveScript();\n    }\n\n    /**\n     * Initialize Mocha or JS files\n     */\n    updateExampleGenerationStatus() {\n      this.enableGenerateExample = this.sourceType === 'upload' && this.runStyle === 'test' || this.shouldEditFilesOnPage || this.runtime === 'python';\n    }\n\n    /**\n     * Save metadata on the server\n     */\n    saveScript(forceSave = false) {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script.metadata;\n      if (this.args.saveMetadata && !_.isEqual(metadata, origMetadata) || forceSave) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n\n    /**\n     * Create metadata object\n     * @returns {{}}\n     */\n    toMetadata() {\n      let metadata = {};\n      if (this.framework) {\n        metadata.framework = this.framework;\n      }\n      metadata.sourceType = this.sourceType;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      if (this.device?.displaySize === 'custom' || this.device?.displaySize === 'customDevice') {\n        metadata.displaySize = `${this.device.width}x${this.device.height}x24`;\n      } else {\n        metadata.displaySize = typeof this.device === 'object' ? this.device.displaySize : this.defaultDevice;\n      }\n      metadata.device = this.device;\n      metadata.runtime = this.runtime;\n      metadata.childLogs = this.childLogs;\n      metadata.logCommands = this.logCommands;\n      metadata.captureNetworkRequests = this.captureNetworkRequests;\n      metadata.captureNetworkBody = this.captureNetworkBody;\n      metadata.platform = this.platform;\n      metadata.recordVideos = this.recordVideos;\n      metadata.enableDebug = this.enableDebug;\n      metadata.maxDuration = this.maxDuration;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (this.runtime === 'python') {\n        metadata.pytestArgs = this.pytestArgs;\n        metadata.pythonVersion = this.pythonVersion || _environment.config.defaultPythonVersion;\n      } else {\n        metadata.language = this.language;\n        metadata.runStyle = this.runStyle;\n        metadata.nodeVersion = this.nodeVersionSelected?.id;\n        if (this.runStyle === 'test') {\n          metadata.confFileName = this.confFileName;\n          metadata.additionalCommandLineArgs = this.additionalCommandLineArgs;\n        }\n        if (this.framework === 'Mocha') {\n          metadata.skipTestableReporting = this.skipTestableReporting;\n          metadata.skipTestReporting = this.skipTestReporting;\n          metadata.mochaTimeout = this.mochaTimeout;\n          metadata.mochaArgs = this.mochaArgs;\n        }\n        metadata.noPackageLock = this.noPackageLock;\n        if (this.primarySpecName) {\n          metadata.primarySpec = this.primarySpecName;\n        }\n      }\n      metadata.autoScreenshots = this.autoScreenshots;\n      metadata.autoSendScreenshots = this.autoSendScreenshots;\n      metadata.screenshotTrigger = this.screenshotTrigger && this.screenshotTrigger.id;\n      if (this.resourceParts) {\n        metadata.resourceParts = this.resourceParts;\n      }\n      if (this.resourceNameMappings) {\n        metadata.resourceNameMappings = this.resourceNameMappings;\n      }\n      if (this.overrideOrgDefault) {\n        metadata.overrideOrgDefault = this.overrideOrgDefault;\n      }\n      if (this.resourceNameIgnoreNonMatch) {\n        metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      }\n      return metadata;\n    }\n\n    /**\n     * Populate values from metadata to component properties\n     * @returns {Promise<void>}\n     */\n    async fromMetadata() {\n      if (this.isDestroying || this.isDestroyed) return;\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      const metadata = this.metadata;\n      this.deviceList = this.api.browserManager.devices;\n      this.defaultDevice = this.api.browserManager.defaultDevice.displaySize;\n      if (!_.isEmpty(metadata)) {\n        this.runtime = metadata.runtime || 'node';\n        if (this.runtime === 'python') {\n          let pythonVersion = metadata.pythonVersion;\n          if (pythonVersion && pythonVersion.length > 8) {\n            pythonVersion = pythonVersion.substring(0, 8);\n          }\n          this.pytestArgs = metadata.pytestArgs;\n          this.pythonVersion = this.PythonVersions.includes(pythonVersion) ? pythonVersion : _environment.config.defaultPythonVersion;\n        } else {\n          if (metadata.runStyle) {\n            this.runStyle = metadata.runStyle;\n            if (metadata.confFileName) {\n              this.confFileName = metadata.confFileName;\n            }\n            if (metadata.additionalCommandLineArgs) {\n              this.additionalCommandLineArgs = metadata.additionalCommandLineArgs;\n            }\n          }\n          if (metadata.runStyle !== 'test') {\n            if (metadata.framework) {\n              this.framework = metadata.framework;\n            }\n            if (metadata.language) {\n              this.language = metadata.language;\n            }\n          }\n          this.noPackageLock = _.isBoolean(metadata.noPackageLock) ? metadata.noPackageLock : false;\n          if (metadata.primarySpec) {\n            this.primarySpecName = metadata.primarySpec;\n          }\n        }\n        if (metadata.sourceType) {\n          this.sourceType = metadata.sourceType === 'vcs' ? 'vcs' : 'upload';\n        }\n      }\n      if (metadata.displaySize) {\n        if (metadata.device && typeof metadata.device === 'object') {\n          this.device = metadata.device;\n        } else {\n          let displaySizes = this.deviceList.filter(size => size.displaySize === metadata.displaySize);\n          if (displaySizes && displaySizes[0]) {\n            this.device = displaySizes[0];\n          } else {\n            let displayCustom = this.deviceList.filter(s => s.displaySize === 'custom' && s.type === 'desktop')[0];\n            let displayParts = metadata.displaySize.split('x');\n            if (displayCustom) {\n              displayCustom.width = displayParts[0];\n              displayCustom.height = displayParts[1];\n              this.device = displayCustom;\n            }\n          }\n        }\n      }\n      if (metadata.mochaTimeout) {\n        this.mochaTimeout = metadata.mochaTimeout;\n      }\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.childLogs = _.isBoolean(metadata.childLogs) ? metadata.childLogs : true;\n      this.logCommands = _.isBoolean(metadata.logCommands) ? metadata.logCommands : false;\n      this.captureNetworkRequests = _.isBoolean(metadata.captureNetworkRequests) ? metadata.captureNetworkRequests : true;\n      this.captureNetworkBody = _.isBoolean(metadata.captureNetworkBody) ? metadata.captureNetworkBody : false;\n      this.platform = metadata.platform || '';\n      this.recordVideos = metadata.recordVideos;\n      this.enableDebug = metadata.enableDebug;\n      this.runAs = metadata.runAs || 'agent';\n      const nodeVersion = this.nodeVersions.filter(version => version.id === metadata.nodeVersion)[0];\n      this.nodeVersionSelected = nodeVersion || this.nodeVersions[0];\n      if (metadata.framework === 'Mocha') {\n        this.skipTestableReporting = metadata.skipTestableReporting;\n        this.skipTestReporting = metadata.skipTestReporting;\n        this.mochaArgs = metadata.mochaArgs || '';\n      }\n      this.maxDuration = metadata.maxDuration;\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.autoScreenshots = metadata.autoScreenshots || false;\n      this.autoSendScreenshots = _.isUndefined(metadata.autoSendScreenshots) || metadata.autoSendScreenshots || false;\n      this.screenshotTrigger = this.screenshotTriggers.find(st => st.id === (metadata.screenshotTrigger || 'afterFailed'));\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      this.rootFolder = metadata.rootFolder || '.';\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      if (!metadata.displaySize) {\n        this.saveScript();\n      }\n      this.updateExampleGenerationStatus();\n      (0, _runloop.next)(this, () => {\n        const resultType = this.args.uniqueId;\n        if (!this.isDestroyed) {\n          $(`#updatePlaywrightScenarioForm${resultType}`).parsley().validate();\n        }\n      });\n    }\n\n    /**\n     * Initialize TEST package.json file\n     */\n    async initTestModePackageFile() {\n      await this.createFile('packageJson', 'package.json', _playwrightTemplateTs.default.defaultTestModePackageJson);\n      await this.createFile('primarySpecName', 'example.spec.ts', _playwrightTemplateTs.default.spec['testmode-skeleton'], true, '/tests/example.spec.ts');\n      await this.createFile('tsConfig', 'playwright.config.ts', _playwrightTemplateTs.default.testModeConfig);\n    }\n    /**\n     * Initialize JS package.json file\n     */\n    async initJsPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _playwrightTemplateTs.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.ts', _playwrightTemplateTs.default.spec['skeleton'], true);\n        await this.createFile('tsConfig', 'tsconfig.json', _playwrightTemplateTs.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _playwrightTemplate.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.js', _playwrightTemplate.default.spec['skeleton'], true);\n      }\n    }\n\n    /**\n     * Initialize Mocha package.json file\n     */\n    async initMochaPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _playwrightMochaTemplatesTs.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.ts', _playwrightMochaTemplatesTs.default.spec['skeleton'], true);\n        await this.createFile('tsConfig', 'tsconfig.json', _playwrightMochaTemplatesTs.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _playwrightMochaTemplates.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.js', _playwrightMochaTemplates.default.spec['skeleton'], true);\n      }\n    }\n\n    /**\n     * Initialize Python Package File\n     */\n    async initPythonPackageFile() {\n      await this.createFile('pythonFile', 'test_example.py', _playwrightTemplatePy.default.testExample);\n    }\n\n    /**\n     * create a new file\n     * @param {String} field\n     * @param {String} fileName\n     * @param {String} defaultContents\n     * @param {Boolean} isFieldName\n     */\n    async createFile(field, fileName, defaultContents, isFieldName, path) {\n      const hasZip = _.find(this.args.script.dataStores, scriptDs => _lib.default.endsWith(scriptDs.name, '.zip') || _lib.default.endsWith(scriptDs.name, '.rar'));\n      if (hasZip) return;\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script.dataStores, scriptDs => scriptDs.name === fileName);\n        if (ds) {\n          if (isFieldName) {\n            this[field] = ds.name;\n          }\n          resolve();\n        } else if (!this.args.script.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore(fileName, defaultContents, path).then(result => {\n            this.generatingFiles = false;\n            this[field] = isFieldName ? result.name : defaultContents;\n            resolve();\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"captureNetworkRequests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"captureNetworkBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"noPackageLock\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"childLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"logCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"enableDebug\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"framework\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"runtime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return Runtimes[0].id;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"pythonVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"runStyle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'library';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"confFileName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'playwright.config.ts';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"additionalCommandLineArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"inputClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"jsConf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"labelClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"javascript\";\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"mochaTimeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 3600000;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"mochaArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"packageJson\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"platform\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"primarySpecContents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"primarySpecName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"recordVideos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"runAs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"showCreateSpecModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"tsConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _.clone(_environment.config.nodeVersions);\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"screenshotTrigger\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"autoScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"autoSendScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor44 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor45 = _applyDecoratedDescriptor(_class.prototype, \"showRemoteModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor46 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor47 = _applyDecoratedDescriptor(_class.prototype, \"skipTestableReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor48 = _applyDecoratedDescriptor(_class.prototype, \"skipTestReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor49 = _applyDecoratedDescriptor(_class.prototype, \"pytestArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor50 = _applyDecoratedDescriptor(_class.prototype, \"defaultDevice\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor51 = _applyDecoratedDescriptor(_class.prototype, \"deviceList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor52 = _applyDecoratedDescriptor(_class.prototype, \"enableGenerateExample\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor53 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor54 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onMetadataChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetadataChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateDataStore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateDataStore\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLanguage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLanguage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specTemplateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specTemplateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"nodeVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"nodeVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBranch\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBranch\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDevice\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDevice\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"captureNetworkBodyUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"captureNetworkBodyUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"captureNetworkRequestsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"captureNetworkRequestsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"noPackageLockUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"noPackageLockUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"childLogsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"childLogsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logCommandsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logCommandsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"recordVideosUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"recordVideosUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"enableDebugUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"enableDebugUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMochaTimeout\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMochaTimeout\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMochaArgs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMochaArgs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"frameworkChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"frameworkChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFramework\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFramework\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runStyleChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runStyleChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runTimeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runTimeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePrimarySpec\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePrimarySpec\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateConfFileName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateConfFileName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAdditionalCommandLineArgs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAdditionalCommandLineArgs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAdditionalSetupCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAdditionalSetupCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeardownCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeardownCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createSpecModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createSpecModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateProperty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateProperty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePlatform\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePlatform\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTestClasses\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTestClasses\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"skipTestReportingUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"skipTestReportingUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalOpen\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalOpen\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"autoScreenshotsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"autoScreenshotsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"autoSendScreenshotsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"autoSendScreenshotsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"screenshotTriggerUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"screenshotTriggerUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePytestArgs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePytestArgs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"pythonVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"pythonVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createInitFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createInitFiles\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioPlaywrightComponent);\n});","define(\"@testable/shared-ui/components/scenario/postman\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updatePostmanScenarioForm{{@uniqueId}}\"\n    {{did-insert this.didInsert}}\n    {{did-update this.fromMetadata @script.metadata}}\n    {{did-update this.onDataStoreUpdated this.postmanFiles @script.dataStores}}\n    as |Wrapper|\n  >\n    {{#unless @isRemote}}\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source <Ui::InfoIcon\n                  @content=\"Choose from where to source the Postman collection.\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceTypeObj}}\n                          @placeholder=\"Please select a source...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.sourceTypeChanged}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled=\"true\" @value={{this.sourceType}} data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Please select a source type.\" />\n          </div>\n        </div>\n  \n        {{#if (eq this.sourceType 'upload')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Postman Collection to run</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.postmanFiles}} @selected={{this.postmanFile}}\n                          @placeholder={{if (gt this.postmanFiles.length 0)\n                                          \"Please select a Postman collection file...\"\n                                          \"Please upload a Postman collection file above (*.json).\"\n                                      }}\n                          @disabled={{@readonly}}\n                          @onChange={{this.postmanFileChanged}} as |option|>\n                {{option.name}}\n              </Ui::PSelect>\n              <Input class=\"hidden\" disabled={{true}} @value={{this.postmanFile.name}} data-parsley-required=\"true\"\n                      data-parsley-required-message=\"Please select a Postman collection.\" />\n            </div>\n          </div>\n        {{/if}}\n        {{#if (eq this.sourceType 'url')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Postman Collection URL</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input class=\"form-control width-300\" @value={{this.collectionURL}} data-parsley-required=\"true\"\n                      data-parsley-required-message=\"Please provide collection URL.\" {{on \"change\" this.saveAction}} />\n            </div>\n          </div>\n        {{/if}}\n  \n      </Wrapper.Filters>\n      <Wrapper.LeftPanel>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{this.defaultFileId}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @model={{@script}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @updateContent={{this.saveCodeAction}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                        @uniqueId={{@uniqueId}}\n                        @readonly={{@script.readonly}}\n                        @isSaving={{@isSaving}}\n                        @infoText=\"Scenarios can declare parameters for which they expect the test configuration to\n                           provide a value. Parameters can be referenced in your post man options using ${paramName}\n                           syntax.\"\n  \n                        @noteText=\"Scenarios can declare parameters for which they expect the test configuration to\n                           provide a value. Parameters can be referenced in your collection test code using environment\n                           variables. For example, parameter <strong>paramName</strong> is available as environment\n                           variable <strong>process.env.PARAMNAME</strong>.\"\n                        @configChanged={{this.paramsConfigChangedAction}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n  \n            <Scenario::Ui::AdditionalPanelWrapper @selectedTab=\"options\" @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                <:content>\n  \n                  <fieldset disabled={{@script.readonly}}>\n                    <Forms::MaxDurationInput\n                            @labelClasses={{this.labelClasses}}\n                            @inputClasses={{this.inputClasses}}\n                            @value={{this.maxDuration}}\n                            @onChange={{this.updateMaxDuration}}\n                    />\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Iteration Count <Ui::InfoIcon\n                              @content=\"Specify the number of iterations to run on the collection.\" /></label>\n                      <Input class=\"form-control\"\n                              min=\"1\"\n                              @type=\"number\"\n                              @value={{this.iterationCount}}\n                              data-parsley-min=\"1\"\n                              data-parsley-min-message=\"Iteration Count must be higher than 0.\"\n                              {{on \"change\" this.saveAction}}\n                        />\n                    </div>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Iteration Data <Ui::InfoIcon\n                              @content=\"Path to the JSON or CSV file or URL to be used as data source when running multiple iterations on a collection.\" /></label>\n                      <Input class=\"form-control\" @value={{this.iterationData}} {{on \"change\" this.saveAction}} />\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Folder <Ui::InfoIcon\n                              @content=\"The name or ID of the folder/folders (ItemGroup) in the collection which would be run instead of the entire collection.\" /></label>\n                      <Input class=\"form-control\" @value={{this.folder}} {{on \"change\" this.saveAction}} />\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Timeout <Ui::InfoIcon\n                              @content=\"Specify the time (in milliseconds) to wait for the entire collection run to complete execution. Leave blank for infinity.\" /></label>\n  \n                      <div class=\"input-group\">\n                        <Input class=\"form-control\" @type=\"number\" @value={{this.timeout}} {{on \"change\" this.saveAction}} />\n                        <div class=\"input-group-append\"><span class=\"input-group-text\">ms</span></div>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Timeout Request <Ui::InfoIcon\n                              @content=\"Specify the time (in milliseconds) to wait for requests to return a response. Leave blank for infinity.\" /></label>\n                      <div class=\"input-group\">\n                        <Input class=\"form-control\" @type=\"number\" @value={{this.timeoutRequest}} {{on \"change\" this.saveAction}} />\n                        <div class=\"input-group-append\"><span class=\"input-group-text\">ms</span></div>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Timeout Script <Ui::InfoIcon\n                              @content=\"Specify the time (in milliseconds) to wait for scripts to return a response. Leave blank for infinity.\" /></label>\n                      <div class=\"input-group\">\n                        <Input class=\"form-control\" @type=\"number\" @value={{this.timeoutScript}} {{on \"change\" this.saveAction}} />\n                        <div class=\"input-group-append\"><span class=\"input-group-text\">ms</span></div>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Delay Request <Ui::InfoIcon\n                              @content=\"Specify the time (in milliseconds) to wait for between subsequent requests.\" /></label>\n                      <Input class=\"form-control\" @type=\"number\" @value={{this.delayRequest}} {{on \"change\" this.saveAction}} />\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Ignore Redirects <Ui::InfoIcon\n                              @content=\"This specifies whether newman would automatically follow 3xx responses from servers.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.ignoreRedirects}} @type=\"radio\" @onChange={{this.ignoreRedirectsAction}} as |bg|>\n                          <bg.button @type=\"success\" @value={{false}} @size=\"sm\">\n                            Follow 3xx redirects</bg.button>\n                          <bg.button @type=\"success\" @value={{true}} @size=\"sm\">Ignore Redirects</bg.button>\n                        </BsButtonGroup>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Bail <Ui::InfoIcon\n                              @content=\"A switch to specify whether or not to gracefully stop a collection run (after completing\n                              the current test script) on encountering the first error. Or specify whether to end the run with an\n                              error for invalid name or path.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.bail}} @type=\"radio\" @onChange={{this.bailAction}} as |bg|>\n                          <bg.button @type=\"success\" @value={{false}} @size=\"sm\">Do not stop</bg.button>\n                          <bg.button @type=\"success\" @value=\"folder\" @size=\"sm\">Stop at Folder</bg.button>\n                          <bg.button @type=\"success\" @value=\"failure\" @size=\"sm\">\n                            Stop at Failure</bg.button>\n                        </BsButtonGroup>\n  \n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Connection Keep Alive <Ui::InfoIcon\n                              @content=\"Whether or not to reuse connections across requests.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.keepAlive}} @type=\"radio\" @onChange={{this.keepAliveAction}} as |bg|>\n                          <bg.button @type=\"success\" @value={{true}} @size=\"sm\">Enabled</bg.button>\n                          <bg.button @type=\"success\" @value={{false}} @size=\"sm\">Disabled</bg.button>\n                        </BsButtonGroup>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Cookie Jar <Ui::InfoIcon\n                              @content=\"Pass a relative path to a CookieJar that will be deserialized using tough-cookie.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Cookie Jar\" @value={{this.cookieJar}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                              @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                              @placement=\"bottom\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.rootFolder}}\n                              {{on \"change\" this.updateRootFolder}} />\n                      </div>\n                    </div>\n  \n                    {{#if (eq this.sourceType 'upload')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceRepositoryUrl}}\n                                {{on \"change\" this.saveAction}} />\n                        </div>\n                      </div>\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceBranch}}\n                                {{on \"change\" this.saveAction}} />\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                  </fieldset>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                <:content>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Setup Command\n                      <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Additional Setup Command\"\n                              @value={{this.additionalSetupCommand}} {{on \"change\" this.saveAction}} />\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Teardown Command\n                      <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Teardown Command\"\n                              @value={{this.teardownCommand}} {{on \"change\" this.saveAction}} />\n                    </div>\n                  </div>\n  \n                  <Forms::ResourcePartsInput\n                          @labelClasses={{this.labelClasses}}\n                          @inputClasses={{this.inputClasses}}\n                          @resourceParts={{this.resourceParts}}\n                          @resourceNameMappings={{this.resourceNameMappings}}\n                          @overrideOrgDefault={{this.overrideOrgDefault}}\n                          @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                          @onChange={{this.updateResourceParts}}\n                          @editable={{not @readonly}}\n                  />\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 2) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 2) \"name\"}}</:title>\n                <:content>\n                  <fieldset disabled={{@script.readonly}}>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Reporters <Ui::InfoIcon\n                              @content=\"Comma separated list of newman reporters (options.reporters). You can use both the packaged ones (cli, json, junit, progress and emojitrain)\n                                  or external ones. For external ones, we will install the module (newman-reporter-xxx) onto each test runner that executes your test\n                                  before it starts.\" /></label>\n                      <Input class=\"form-control\" @value={{this.reporters}} {{on \"change\" this.saveAction}} />\n                    </div>\n                  </fieldset>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 3) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 3) \"name\"}}</:title>\n                <:content>\n                  <fieldset disabled={{@script.readonly}}>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Environment <Ui::InfoIcon\n                              @content=\"One can optionally pass an environment variable relative path to an uploaded or linked file,\n                              or a JSON object with environment variables. Corresponds to options.environment in Newman.\" /></label>\n  \n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.environmentType}} @type=\"radio\" @onChange={{this.environmentTypeAction}} as |bg|>\n                          <bg.button @type=\"success\" @value=\"file_path\" @size=\"sm\">File Path</bg.button>\n                          <bg.button @type=\"success\" @value=\"json_object\" @size=\"sm\">JSON Object</bg.button>\n                        </BsButtonGroup>\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <div class=\"{{this.inputClasses}}\">\n                        {{#if (eq this.environmentType \"file_path\")}}\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Environment\" @value={{this.environment}}\n                            {{on \"change\" this.saveAction }} />\n                        {{else}}\n                          <Ui::AceEditor @id=\"postmanEnvironment\"\n                                        @code={{this.environment}}\n                                        @type=\"main\"\n                                        @codeChangedQuiet={{this.updateEnvironmentCode}}\n                                        @codeChanged={{this.empty}}\n                                        @readonly={{@script.readonly}}\n                                        @mode=\"ace/mode/json\" />\n                        {{/if}}\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Environment Variables<Ui::InfoIcon\n                              @isHtml={{true}}\n                              @content=\"Comma separated list of key/value pairs to pass Postman via options.envVar as an array.\n                              Example: <code>key1=val1,key2=val2</code>.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Environment Variable\" @value={{this.envVar}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Globals <Ui::InfoIcon\n                              @content=\"One can optionally pass an globals variable relative path to an uploaded or linked file,\n                              or a JSON object with global variables. Corresponds to options.globals in Newman.\" /></label>\n  \n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.globalType}} @type=\"radio\" @onChange={{this.globalTypeAction}} as |bg|>\n                          <bg.button @type=\"success\" @value=\"file_path\" @size=\"sm\">File Path</bg.button>\n                          <bg.button @type=\"success\" @value=\"json_object\" @size=\"sm\">JSON Object</bg.button>\n                        </BsButtonGroup>\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <div class=\"{{this.inputClasses}}\">\n                        {{#if (eq this.globalType \"file_path\")}}\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Globals\" @value={{this.globals}}\n                            {{on \"change\" this.saveAction }} />\n                        {{else}}\n                          <Ui::AceEditor @id=\"postmanGlobal\"\n                                        @code={{this.globals}}\n                                        @type=\"main\"\n                                        @codeChangedQuiet={{this.updateGlobalsCode}}\n                                        @codeChanged={{this.empty}}\n                                        @readonly={{@script.readonly}}\n                                        @mode=\"ace/mode/json\" />\n                        {{/if}}\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">Global Variables<Ui::InfoIcon\n                              @content=\"Comma separated list of key/value pairs to pass Postman via options.globalVar as an array.\n                              Example: key1=val1,key2=val2.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Global Variable\" @value={{this.globalVar}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n  \n                  </fieldset>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 4) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 4) \"name\"}}</:title>\n                <:content>\n  \n                  <fieldset disabled={{@script.readonly}}>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Verification <Ui::InfoIcon\n                              @content=\"Disables SSL verification checks and allows self-signed SSL certificates.\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <BsButtonGroup @value={{this.insecure}} @type=\"radio\" @onChange={{this.insecureAction}} as |bg|>\n                          <bg.button @type=\"success\" @value={{false}} @size=\"sm\">Enable</bg.button>\n                          <bg.button @type=\"success\" @value={{true}} @size=\"sm\">Disable</bg.button>\n                        </BsButtonGroup>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Client Certificate <Ui::InfoIcon\n                              @content=\"Relative path to a client certificate uploaded or linked.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"SSL Client Certificate\" @value={{this.sslClientCert}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Client Key <Ui::InfoIcon\n                              @content=\"Relative path to a private client key uploaded or linked.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"SSL Client Key\" @value={{this.sslClientKey}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Client Passphrase <Ui::InfoIcon\n                              @content=\"The secret client key passphare.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"SSL Client Passphrase\" @value={{this.sslClientPassphrase}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Client Certificate List <Ui::InfoIcon\n                              @content=\"Relative path to a client certificate configuration list file.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"SSL Client Certificate List\" @value={{this.sslClientCertList}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n                    <div class=\"form-group {{this.inputClasses}}\">\n                      <label class=\"{{this.labelClasses}}\">SSL Extra CA Certificates <Ui::InfoIcon\n                              @content=\"Relative path to a file that holds one or more trusted CA certificates in PEM format.\" /></label>\n                      <div class=\"form-group\">\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"SSL Extra CA Certificates\" @value={{this.sslExtraCACerts}}\n                            {{on \"change\" this.saveAction }} />\n                        </div>\n                      </div>\n                    </div>\n  \n                  </fieldset>\n  \n                </:content>\n              </Yield.AdditionalWrapper>\n  \n            </Scenario::Ui::AdditionalPanelWrapper>\n  \n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                              @repositoryUrl={{this.repositoryUrl}}\n                              @readonly={{@readonly}}\n                              @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}}\n                          {{on \"change\" this.updateBranch }} />\n                </div>\n              </div>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Collection File Name</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"sample.json\" @value={{this.collectionFile}}\n                          data-parsley-required=\"true\"\n                          data-parsley-required-message=\"Please provide collection file.\"\n                          {{on \"change\" this.saveAction}} />\n                </div>\n              </div>\n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n    {{/unless}}\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,1,[29,[\\\"updatePostmanScenarioForm\\\",[30,1]]]],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"fromMetadata\\\"]],[30,2,[\\\"metadata\\\"]]],null],[4,[38,4],[[30,0,[\\\"onDataStoreUpdated\\\"]],[30,0,[\\\"postmanFiles\\\"]],[30,2,[\\\"dataStores\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,6]],[[[1,\\\"    \\\"],[8,[30,5,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source \\\"],[8,[39,8],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose from where to source the Postman collection.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceTypeObj\\\"]],\\\"Please select a source...\\\",[30,3],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,7,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,0,\\\"hidden\\\"],[24,\\\"disabled\\\",\\\"true\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Postman Collection to run\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"postmanFiles\\\"]],[30,0,[\\\"postmanFile\\\"]],[52,[28,[37,13],[[30,0,[\\\"postmanFiles\\\",\\\"length\\\"]],0],null],\\\"Please select a Postman collection file...\\\",\\\"Please upload a Postman collection file above (*.json).\\\"],[30,3],[30,0,[\\\"postmanFileChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[8]]]]],[1,\\\"\\\\n            \\\"],[8,[39,10],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a Postman collection.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"postmanFile\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,0,[\\\"sourceType\\\"]],\\\"url\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Postman Collection URL\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],[[24,0,\\\"form-control width-300\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide collection URL.\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"collectionURL\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"LeftPanel\\\"]],null,null,[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[28,[37,12],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFileId\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,2],[30,9],[30,0,[\\\"saveCodeAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,19,[[28,[37,18],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,20],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,2,[\\\"paramsConfig\\\"]],[30,1],[30,2,[\\\"readonly\\\"]],[30,11],\\\"Scenarios can declare parameters for which they expect the test configuration to\\\\n                         provide a value. Parameters can be referenced in your post man options using ${paramName}\\\\n                         syntax.\\\",\\\"Scenarios can declare parameters for which they expect the test configuration to\\\\n                         provide a value. Parameters can be referenced in your collection test code using environment\\\\n                         variables. For example, parameter <strong>paramName</strong> is available as environment\\\\n                         variable <strong>process.env.PARAMNAME</strong>.\\\",[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[39,21],null,[[\\\"@selectedTab\\\",\\\"@additionalWrappers\\\"],[\\\"options\\\",[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n            \\\"],[8,[30,12,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,2,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,26],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Iteration Count \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify the number of iterations to run on the collection.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"1\\\"],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Iteration Count must be higher than 0.\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"iterationCount\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Iteration Data \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Path to the JSON or CSV file or URL to be used as data source when running multiple iterations on a collection.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"iterationData\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Folder \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"The name or ID of the folder/folders (ItemGroup) in the collection which would be run instead of the entire collection.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"folder\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify the time (in milliseconds) to wait for the entire collection run to complete execution. Leave blank for infinity.\\\"]],null],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"timeout\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"ms\\\"],[13],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout Request \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify the time (in milliseconds) to wait for requests to return a response. Leave blank for infinity.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"timeoutRequest\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"ms\\\"],[13],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout Script \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify the time (in milliseconds) to wait for scripts to return a response. Leave blank for infinity.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"timeoutScript\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"ms\\\"],[13],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Delay Request \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify the time (in milliseconds) to wait for between subsequent requests.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"delayRequest\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Ignore Redirects \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"This specifies whether newman would automatically follow 3xx responses from servers.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"ignoreRedirects\\\"]],\\\"radio\\\",[30,0,[\\\"ignoreRedirectsAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,13,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",false,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          Follow 3xx redirects\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,13,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",true,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Ignore Redirects\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[13]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Bail \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"A switch to specify whether or not to gracefully stop a collection run (after completing\\\\n                            the current test script) on encountering the first error. Or specify whether to end the run with an\\\\n                            error for invalid name or path.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"bail\\\"]],\\\"radio\\\",[30,0,[\\\"bailAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,14,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",false,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Do not stop\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,14,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"folder\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Stop at Folder\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,14,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"failure\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          Stop at Failure\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[14]]]]],[1,\\\"\\\\n\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Connection Keep Alive \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Whether or not to reuse connections across requests.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"keepAlive\\\"]],\\\"radio\\\",[30,0,[\\\"keepAliveAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",true,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Enabled\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,15,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",false,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Disabled\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[15]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Cookie Jar \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Pass a relative path to a CookieJar that will be deserialized using tough-cookie.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Cookie Jar\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"cookieJar\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,8],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,8],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,8],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,12,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Setup Command\\\\n                    \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Teardown Command\\\\n                    \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,29],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,30],[[30,3]],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,12,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,2,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Reporters \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Comma separated list of newman reporters (options.reporters). You can use both the packaged ones (cli, json, junit, progress and emojitrain)\\\\n                                or external ones. For external ones, we will install the module (newman-reporter-xxx) onto each test runner that executes your test\\\\n                                before it starts.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"reporters\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,12,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],3],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],3],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,2,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Environment \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"One can optionally pass an environment variable relative path to an uploaded or linked file,\\\\n                            or a JSON object with environment variables. Corresponds to options.environment in Newman.\\\"]],null],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"environmentType\\\"]],\\\"radio\\\",[30,0,[\\\"environmentTypeAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,16,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"file_path\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"File Path\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,16,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"json_object\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"JSON Object\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[16]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"environmentType\\\"]],\\\"file_path\\\"],null],[[[1,\\\"                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Environment\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"environment\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[39,31],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@type\\\",\\\"@codeChangedQuiet\\\",\\\"@codeChanged\\\",\\\"@readonly\\\",\\\"@mode\\\"],[\\\"postmanEnvironment\\\",[30,0,[\\\"environment\\\"]],\\\"main\\\",[30,0,[\\\"updateEnvironmentCode\\\"]],[30,0,[\\\"empty\\\"]],[30,2,[\\\"readonly\\\"]],\\\"ace/mode/json\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Environment Variables\\\"],[8,[39,8],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Comma separated list of key/value pairs to pass Postman via options.envVar as an array.\\\\n                            Example: <code>key1=val1,key2=val2</code>.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Environment Variable\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"envVar\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Globals \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"One can optionally pass an globals variable relative path to an uploaded or linked file,\\\\n                            or a JSON object with global variables. Corresponds to options.globals in Newman.\\\"]],null],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"globalType\\\"]],\\\"radio\\\",[30,0,[\\\"globalTypeAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,17,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"file_path\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"File Path\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,17,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"json_object\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"JSON Object\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[17]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,0,[\\\"globalType\\\"]],\\\"file_path\\\"],null],[[[1,\\\"                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Globals\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"globals\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[39,31],null,[[\\\"@id\\\",\\\"@code\\\",\\\"@type\\\",\\\"@codeChangedQuiet\\\",\\\"@codeChanged\\\",\\\"@readonly\\\",\\\"@mode\\\"],[\\\"postmanGlobal\\\",[30,0,[\\\"globals\\\"]],\\\"main\\\",[30,0,[\\\"updateGlobalsCode\\\"]],[30,0,[\\\"empty\\\"]],[30,2,[\\\"readonly\\\"]],\\\"ace/mode/json\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Global Variables\\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Comma separated list of key/value pairs to pass Postman via options.globalVar as an array.\\\\n                            Example: key1=val1,key2=val2.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Global Variable\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"globalVar\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,12,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],4],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,22],[[28,[37,22],[[30,0,[\\\"additionalWrappers\\\"]],4],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\\n                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,2,[\\\"readonly\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Verification \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Disables SSL verification checks and allows self-signed SSL certificates.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,28],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"insecure\\\"]],\\\"radio\\\",[30,0,[\\\"insecureAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[30,18,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",false,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Enable\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[8,[30,18,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",true,\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Disable\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"]],[18]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Client Certificate \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Relative path to a client certificate uploaded or linked.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"SSL Client Certificate\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sslClientCert\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Client Key \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Relative path to a private client key uploaded or linked.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"SSL Client Key\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sslClientKey\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Client Passphrase \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"The secret client key passphare.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"SSL Client Passphrase\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sslClientPassphrase\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Client Certificate List \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Relative path to a client certificate configuration list file.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"SSL Client Certificate List\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sslClientCertList\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"SSL Extra CA Certificates \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Relative path to a file that holds one or more trusted CA certificates in PEM format.\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"SSL Extra CA Certificates\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sslExtraCACerts\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"]],[12]]]]],[1,\\\"\\\\n\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,10,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,32],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,3],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"updateBranch\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Collection File Name\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"sample.json\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide collection file.\\\"],[4,[38,14],[\\\"change\\\",[30,0,[\\\"saveAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"collectionFile\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,19,[[28,[37,18],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[8,[30,5,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,2],[28,[37,1],[[28,[37,2],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"@isRemote\\\",\\\"option\\\",\\\"option\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"bg\\\",\\\"bg\\\",\\\"bg\\\",\\\"bg\\\",\\\"bg\\\",\\\"bg\\\",\\\"&default\\\"],[\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"unless\\\",\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"if\\\",\\\"eq\\\",\\\"gt\\\",\\\"on\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"fieldset\\\",\\\"forms/max-duration-input\\\",\\\"span\\\",\\\"bs-button-group\\\",\\\"forms/resource-parts-input\\\",\\\"not\\\",\\\"ui/ace-editor\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/postman.hbs\",\n    \"isStrictMode\": false\n  });\n  const isValidJSON = jsonString => {\n    try {\n      JSON.parse(jsonString);\n      return true;\n    } catch {\n      return false;\n    }\n  };\n  let ScenarioPostman = _exports.default = (_class = class ScenarioPostman extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor2, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor4, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor5, this);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'options',\n        name: 'Options'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }, {\n        id: 'reporters',\n        name: 'Reporters'\n      }, {\n        id: 'variables',\n        name: 'Variables'\n      }, {\n        id: 'ssl',\n        name: 'SSL'\n      }]);\n      _defineProperty(this, \"sourceTypes\", [{\n        id: 'upload',\n        name: 'Upload Collection JSON'\n      }, {\n        id: 'vcs',\n        name: 'Version Control'\n      }, {\n        id: 'url',\n        name: 'Specify Collection URL'\n      }]);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor6, this);\n      _initializerDefineProperty(this, \"postmanFile\", _descriptor7, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor8, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor9, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor0, this);\n      _initializerDefineProperty(this, \"collectionFile\", _descriptor1, this);\n      _initializerDefineProperty(this, \"collectionURL\", _descriptor10, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor11, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor12, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor13, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor14, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor15, this);\n      // Options\n      _initializerDefineProperty(this, \"environment\", _descriptor16, this);\n      _initializerDefineProperty(this, \"envVar\", _descriptor17, this);\n      _initializerDefineProperty(this, \"globals\", _descriptor18, this);\n      _initializerDefineProperty(this, \"globalVar\", _descriptor19, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor20, this);\n      _initializerDefineProperty(this, \"iterationData\", _descriptor21, this);\n      _initializerDefineProperty(this, \"folder\", _descriptor22, this);\n      _initializerDefineProperty(this, \"timeout\", _descriptor23, this);\n      _initializerDefineProperty(this, \"timeoutRequest\", _descriptor24, this);\n      _initializerDefineProperty(this, \"timeoutScript\", _descriptor25, this);\n      _initializerDefineProperty(this, \"delayRequest\", _descriptor26, this);\n      _initializerDefineProperty(this, \"ignoreRedirects\", _descriptor27, this);\n      _initializerDefineProperty(this, \"insecure\", _descriptor28, this);\n      _initializerDefineProperty(this, \"bail\", _descriptor29, this);\n      _initializerDefineProperty(this, \"keepAlive\", _descriptor30, this);\n      _initializerDefineProperty(this, \"reporters\", _descriptor31, this);\n      _initializerDefineProperty(this, \"reporterJson\", _descriptor32, this);\n      // SSL\n      _initializerDefineProperty(this, \"sslClientCert\", _descriptor33, this);\n      _initializerDefineProperty(this, \"sslClientKey\", _descriptor34, this);\n      _initializerDefineProperty(this, \"sslClientPassphrase\", _descriptor35, this);\n      _initializerDefineProperty(this, \"sslClientCertList\", _descriptor36, this);\n      _initializerDefineProperty(this, \"sslExtraCACerts\", _descriptor37, this);\n      _initializerDefineProperty(this, \"cookieJar\", _descriptor38, this);\n      _initializerDefineProperty(this, \"environmentType\", _descriptor39, this);\n      _initializerDefineProperty(this, \"globalType\", _descriptor40, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor41, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor42, this);\n      (0, _runloop.next)(this, () => {\n        this._fromMetadata();\n        this._onDataStoreUpdated();\n      });\n    }\n    get sourceTypeObj() {\n      return this.sourceTypes.find(st => this.sourceType === st.id);\n    }\n    get metadata() {\n      let metadata = this.args.script?.metadata;\n      return _.isEmpty(metadata) ? {} : metadata;\n    }\n    get postmanFiles() {\n      return _lib.default.getFilesWithExt(this.args.script?.dataStores, '.json');\n    }\n    get defaultFiles() {\n      const files = [{\n        id: 'reporter',\n        name: `reporter.json`,\n        path: `/reporter.json`,\n        type: 'main',\n        fileType: 'system',\n        mode: 'json',\n        isFolder: false,\n        code: this.reporterJson\n      }];\n      const show = _.isEmpty(this.args.script?.dataStores) && this.sourceType === 'upload';\n      if (show) {\n        files.push({\n          id: 'uploadBtn',\n          type: 'uploadBtn',\n          name: 'Upload Collection JSON',\n          path: '',\n          readonly: true,\n          isFolder: false,\n          fileType: 'button'\n        });\n      }\n      return files;\n    }\n    get defaultFileId() {\n      return this.postmanFile?.id || this.defaultFiles[0]?.id;\n    }\n    onDataStoreUpdated() {\n      this._onDataStoreUpdated();\n    }\n    _onDataStoreUpdated() {\n      if (this.postmanFiles?.length === 1) {\n        this.postmanFile = this.postmanFiles[0];\n        this.save();\n      } else if (this.postmanFiles?.length === 0) {\n        this.postmanFile = null;\n        this.save();\n      }\n      (0, _runloop.scheduleOnce)('afterRender', () => {\n        const resultType = this.args.uniqueId;\n        $(`#updatePostmanScenarioForm${resultType}`).parsley().validate();\n      });\n    }\n    didInsert() {\n      const resultType = this.args.uniqueId;\n      $(`#updatePostmanScenarioForm${resultType}`).parsley().validate();\n    }\n    saveCodeAction(key, value) {\n      if (isValidJSON(value)) {\n        if (!this.reporters) {\n          this.reporters = 'json';\n        }\n        this.reporterJson = value;\n        this.save();\n      }\n    }\n    sourceTypeChanged({\n      id\n    }) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        const resultType = this.args.uniqueId;\n        $(`#updatePostmanScenarioForm${resultType}`).parsley().validate();\n      }, 250);\n      this.sourceType = id;\n      this.save();\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.save();\n      }\n    }\n    updateBranch() {\n      this.save();\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n    postmanFileChanged(value) {\n      if (value.name !== this.metadata?.postmanFile) {\n        this.updateValue('postmanFile', value);\n      }\n    }\n    ignoreRedirectsAction(val) {\n      this.ignoreRedirects = val;\n      this.save();\n    }\n    insecureAction(val) {\n      this.insecure = val;\n      this.save();\n    }\n    bailAction(val) {\n      this.bail = val;\n      this.save();\n    }\n    keepAliveAction(val) {\n      this.keepAlive = val;\n      this.save();\n    }\n    environmentTypeAction(val) {\n      this.environmentType = val;\n      this.environment = '';\n      this.save();\n    }\n    globalTypeAction(val) {\n      this.globalType = val;\n      this.global = '';\n      this.save();\n    }\n    updateEnvironmentCode(type, code) {\n      this.environment = code;\n      this.save();\n    }\n    updateGlobalsCode(type, code) {\n      this.globals = code;\n      this.save();\n    }\n    saveAction() {\n      this.save();\n    }\n    updateMaxDuration(e) {\n      this.maxDuration = e.target.valueAsNumber;\n      this.save();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.save();\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.save();\n    }\n    empty() {}\n    updateValue(name, newVal) {\n      this[name] = newVal;\n      this.args.hasUnsavedChanges();\n      this.save();\n    }\n    save() {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script?.metadata;\n      if (!_.isEqual(metadata, origMetadata) && this.args.saveMetadata) {\n        this.args.saveMetadata(metadata, null, true);\n      }\n    }\n    fromMetadata() {\n      this._fromMetadata();\n    }\n    _fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      let metadata = this.metadata;\n      this.sourceType = metadata.sourceType;\n      if (metadata.environmentType) this.environmentType = metadata.environmentType;\n      if (metadata.globalType) this.globalType = metadata.globalType;\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n        this.collectionFile = metadata.collectionFile;\n      } else if (metadata.sourceType === 'upload') {\n        this.postmanFile = _.find(this.postmanFiles, postmanFile => {\n          return postmanFile.name === metadata.postmanFile;\n        });\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      } else if (metadata.sourceType === 'url') {\n        this.collectionURL = metadata.collectionURL;\n      }\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      let metaOptions = metadata.options;\n      if (metaOptions) {\n        this.iterationCount = metaOptions.iterationCount;\n        this.iterationData = metaOptions.iterationData;\n        this.folder = metaOptions.folder;\n        this.timeout = metaOptions.timeout;\n        this.timeoutRequest = metaOptions.timeoutRequest;\n        this.timeoutScript = metaOptions.timeoutScript;\n        this.delayRequest = metaOptions.delayRequest || false;\n        this.ignoreRedirects = metaOptions.ignoreRedirects || false;\n        this.insecure = metaOptions.insecure || false;\n        this.bail = metaOptions.bail ? metaOptions.bail[0] : false;\n        this.keepAlive = metaOptions.keepAlive || false;\n        this.maxDuration = metaOptions.maxDuration;\n        this.reporters = metaOptions.reporters ? metaOptions.reporters.join(',') : '';\n        this.reporterJson = metaOptions.reporter ? JSON.stringify(metaOptions.reporter, null, '  ') : '';\n        let environment = metaOptions.environment;\n        if (metadata.environmentType === 'json_object') {\n          environment = environment ? JSON.stringify(environment, null, '  ') : '';\n        }\n        this.environment = environment;\n        this.envVar = metaOptions.envVar ? metaOptions.envVar.join(',') : '';\n        let globals = metaOptions.globals;\n        if (metadata.globalType === 'json_object') {\n          globals = globals ? JSON.stringify(globals, null, '  ') : '';\n        }\n        this.globals = metaOptions.globals;\n        this.globalVar = metaOptions.globalVar ? metaOptions.globalVar.join(',') : '';\n        this.sslClientCert = metaOptions.sslClientCert;\n        this.sslClientKey = metaOptions.sslClientKey;\n        this.sslClientPassphrase = metaOptions.sslClientPassphrase;\n        this.sslClientCertList = metaOptions.sslClientCertList;\n        this.sslExtraCACerts = metaOptions.sslExtraCACerts;\n        this.cookieJar = metaOptions.cookieJar;\n      }\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n    }\n    toMetadata() {\n      let metadata = {};\n      metadata.sourceType = this.sourceType;\n      metadata.environmentType = this.environmentType;\n      metadata.globalType = this.globalType;\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n        metadata.collectionFile = this.collectionFile;\n      } else if (metadata.sourceType === 'upload') {\n        if (this.postmanFile) {\n          metadata.postmanFile = this.postmanFile.name;\n        }\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      } else if (metadata.sourceType === 'url') {\n        metadata.collectionURL = this.collectionURL;\n      }\n      metadata.options = {};\n      if (this.iterationCount) metadata.options.iterationCount = this.iterationCount;\n      if (this.iterationData) metadata.options.iterationData = this.iterationData;\n      if (this.folder) metadata.options.folder = this.folder;\n      if (this.timeout) metadata.options.timeout = this.timeout;\n      if (this.timeoutRequest) metadata.options.timeoutRequest = this.timeoutRequest;\n      if (this.timeoutScript) metadata.options.timeoutScript = this.timeoutScript;\n      if (this.delayRequest) metadata.options.delayRequest = this.delayRequest;\n      if (this.ignoreRedirects) metadata.options.ignoreRedirects = this.ignoreRedirects;\n      if (this.insecure) metadata.options.insecure = this.insecure;\n      if (this.bail) metadata.options.bail = [this.bail];\n      if (this.maxDuration) metadata.options.maxDuration = this.maxDuration;\n      if (this.reporters) {\n        metadata.options.reporters = this.reporters.split(',');\n        if (this.reporterJson) metadata.options.reporter = JSON.parse(this.reporterJson);\n      }\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      metadata.options.keepAlive = this.keepAlive;\n      let environment = this.environment;\n      if (metadata.environmentType === 'json_object' && this.environment) {\n        environment = JSON.parse(this.environment);\n      }\n      metadata.options.environment = environment;\n      metadata.options.envVar = this.envVar.split(',');\n      let globals = this.globals;\n      if (metadata.globalType === 'json_object' && this.globals) {\n        globals = JSON.parse(this.globals);\n      }\n      metadata.options.globals = globals;\n      metadata.options.globalVar = this.globalVar.split(',');\n      metadata.options.sslClientCert = this.sslClientCert;\n      metadata.options.sslClientKey = this.sslClientKey;\n      metadata.options.sslClientPassphrase = this.sslClientPassphrase;\n      metadata.options.sslClientCertList = this.sslClientCertList;\n      metadata.options.sslExtraCACerts = this.sslExtraCACerts;\n      metadata.options.cookieJar = this.cookieJar;\n      return metadata;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"postmanFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"collectionFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"collectionURL\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"environment\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"envVar\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"globals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"globalVar\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"iterationData\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"folder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"timeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"timeoutRequest\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"timeoutScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"delayRequest\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"ignoreRedirects\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"insecure\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"bail\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"keepAlive\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"reporters\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"reporterJson\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"sslClientCert\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"sslClientKey\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"sslClientPassphrase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"sslClientCertList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"sslExtraCACerts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"cookieJar\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"environmentType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'file_path';\n    }\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"globalType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'file_path';\n    }\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onDataStoreUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataStoreUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveCodeAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveCodeAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBranch\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBranch\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"postmanFileChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"postmanFileChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"ignoreRedirectsAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"ignoreRedirectsAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"insecureAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"insecureAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bailAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bailAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"keepAliveAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"keepAliveAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"environmentTypeAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"environmentTypeAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"globalTypeAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"globalTypeAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEnvironmentCode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEnvironmentCode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateGlobalsCode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateGlobalsCode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"empty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"empty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioPostman);\n});","define(\"@testable/shared-ui/components/scenario/puppeteer\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@ember/utils\", \"@ember/template\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/templates/puppeteer-template\", \"@testable/shared-ui/utils/templates/puppeteer-template-ts\", \"@testable/shared-ui/utils/templates/puppeteer-mocha-templates\", \"@testable/shared-ui/utils/templates/puppeteer-mocha-templates-ts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _runloop, _utils, _template, _environment, _lib, _puppeteerTemplate, _puppeteerTemplateTs, _puppeteerMochaTemplates, _puppeteerMochaTemplatesTs, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43, _descriptor44, _descriptor45, _descriptor46, _descriptor47, _descriptor48, _descriptor49, _descriptor50, _descriptor51, _descriptor52, _descriptor53, _descriptor54;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@ember/template\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/templates/puppeteer-template\",0,\"@testable/shared-ui/utils/templates/puppeteer-template-ts\",0,\"@testable/shared-ui/utils/templates/puppeteer-mocha-templates\",0,\"@testable/shared-ui/utils/templates/puppeteer-mocha-templates-ts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    \n  {{#if (and @isRemote (not @embeddedInExecution))}}\n    <div class=\"note note-info alert\">\n      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n      <p>\n        <strong>What is this?</strong> This scenario was created from a remotely triggered test.\n        Remote tests cannot be edited via Testable.\n      </p>\n      <p>\n        <strong>How can I run a similar test?</strong> For help creating a similar remote test, please try\n        our\n        <a class=\"btn btn-primary btn-enabled\" role=\"button\" {{on \"click\" this.remoteWizardModalOpen}} >\n          <span class=\"fa fa-copy \"></span> Remote Test Configurator\n        </a>\n      </p>\n    </div>\n  {{/if}}\n  \n  <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    {{did-update this.onMetadataChange @script.metadata}}\n    id=\"updatePuppeteerScenarioForm{{@uniqueId}}\" as |Wrapper|\n  >\n    {{#unless @isRemote}}\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Source <Ui::InfoIcon\n                  @content=\"Choose the source of the code that defines this scenario\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceTypeObj}}\n                          @placeholder=\"Please select a source...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.sourceTypeChanged}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n            <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType}} data-parsley-required=\"true\"\n                    data-parsley-required-message=\"Please select a source type.\" />\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Framework <Ui::InfoIcon\n                  @content=\"Choose whether any framework is used in your code.\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.frameworks}} @selected={{this.framework}}\n                          @placeholder=\"Please select Framework...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.frameworkChanged}} as |option| >\n              {{option}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Language <Ui::InfoIcon\n                  @content=\"Choose the language of the code that defines this scenario\" @placement=\"bottom\" /></label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.languages}} @selected={{this.languageObj}}\n                          @placeholder=\"Please select a Language...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.updateLanguage}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        {{#if this.showPrimarySpecInput}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">{{if (eq this.language 'typescript') 'TypeScript' 'JavaScript'}} Code\n              File</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder={{concat (if (eq this.language 'typescript') 'TypeScript' 'JavaScript') \" code file\"}}\n                      @value={{this.primarySpecName}}\n                      disabled={{@readonly}}\n                      {{on \"change\" this.updatePrimarySpec}} />\n            </div>\n          </div>\n        {{else}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Primary Spec\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.primarySpecOptions}} @selected={{this.primarySpecName}} @placeholder=\"Please select a file...\"\n                            @disabled={{@readonly}} @onChange={{this.updatePrimarySpec}} as |option|>\n                {{option}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Node Version</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.nodeVersions}} @selected={{this.nodeVersionSelected}}\n                          @disabled={{@readonly}}\n                          @onChange={{this.nodeVersionChanged}} as |version|>\n              {{version.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n  \n      </Wrapper.Filters>\n    {{/unless}}\n      <Wrapper.LeftPanel @isRemote={{@isRemote}}>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @isRemote={{@isRemote}}\n            @templates={{this.specTemplateOptions}}\n            @selectedTemplate={{this.specTemplateSelected}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{this.defaultFileId}}\n            @generateExampleFiles={{this.createInitFiles}}\n            @enableGenerateExample={{this.enableGenerateExample}}\n            @generatingFiles={{this.generatingFiles}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @model={{@script}}\n            @language={{this.language}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            as |Yield|>\n  \n            <Yield.TagsPanel>\n              {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n            </Yield.TagsPanel>\n            <Yield.ParamsPanel>\n              <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                          @uniqueId={{@uniqueId}}\n                          @readonly={{@script.readonly}}\n                          @isSaving={{@isSaving}}\n                          @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your Puppeteer code.\"\n                          @noteText={{concat\n              \"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\n              be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\n              as the environment variable <strong>ABC</strong>.\"}}\n                          @configChanged={{this.paramsConfigChanged}} />\n            </Yield.ParamsPanel>\n            <Yield.AdditionalPanel>\n              <Scenario::Ui::AdditionalPanelWrapper @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                <:content>\n                  {{#unless @isRemote}}\n                    {{#if (eq this.framework 'Mocha')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Timeout (ms) <Ui::InfoIcon\n                                @content=\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\"\n                                @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"number\" class=\"form-control\" placeholder=\"Mocha timeout in milliseconds\"\n                                  @value={{this.mochaTimeout}} {{on \"change\" this.save}} data-parsley-min=\"0\"\n                                  data-parsley-min-message=\"Timeout must be >= 0\" />\n                        </div>\n                      </div>\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">\n                          Additional Mocha Args\n                          <Ui::InfoIcon @content=\"Specify additional command line arguments to pass Mocha\"\n                                      @placement=\"bottom\" />\n                        </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\"\n                                  placeholder=\"Mocha Args\"\n                                  @value={{this.mochaArgs}} {{on \"change\" this.save}} />\n                        </div>\n                      </div>\n                    {{/if}}\n                  {{/unless}}\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Video <Ui::InfoIcon\n                            @content=\"Configure Testable to record a video of each test iteration.\"\n                            @placement=\"bottom\" /></label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.recordVideos}} {{on \"change\" this.recordVideosUpdate }}/>\n                        Capture Video Recording\n                      </label>\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Screenshots</label>\n                    {{#if (eq this.framework 'Mocha')}}\n                      <div class=\"{{this.inputClasses}} m-t-5 lh-2rem\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.autoScreenshots}} {{on \"change\" this.autoScreenshotsUpdate }} /> Capture a\n                        </label>\n                        <div class=\"inline-pselect\">\n                          <Ui::PSelect @options={{this.screenshotTypes}} @selected={{this.screenshotType}}\n                                    @disabled={{or (not this.autoScreenshots) @readonly}}\n                                    @onChange={{this.onUpdateScreenshotType}} as |option|>\n                            {{option}}\n                          </Ui::PSelect>\n                        </div> screenshot\n                        <div class=\"inline-pselect\">\n                          <Ui::PSelect @options={{this.screenshotTriggers}} @selected={{this.screenshotTrigger}}\n                                    @disabled={{or (not this.autoScreenshots) @readonly}}\n                                    @onChange={{this.onChangeScreenshotTrigger}} as |option|>\n                            {{option.name}}\n                          </Ui::PSelect>\n                        </div>\n                      </div>\n                    {{/if}}\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.autoSendScreenshots}} {{on \"change\" this.autoSendScreenshotsUpdate }} /> Capture all screenshot requests into the results\n                        <Ui::InfoIcon\n                            @content=\"Whether or not to automatically capture the response from every Puppeteer screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\"\n                            @placement=\"bottom\" />\n                      </label>\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">NPM Settings</label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.noPackageLock}} {{on \"change\" this.noPackageLockUpdate }} />\n                        Ignore package-lock.json on npm install (--no-package-lock)\n                      </label>\n                    </div>\n                  </div>\n  \n                  <Scenario::DeviceDropdown\n                          @labelClasses={{this.labelClasses}}\n                          @deviceOptions={{this.deviceList}}\n                          @device={{this.device}}\n                          @showFullInfo={{@isRemote}}\n                          @disabled={{@readonly}}\n                          @onchange={{this.updateDevice}}\n                          @updateProperty={{this.updateProperty}}\n                          @saveAction={{this.saveAction}}\n                  />\n  \n                  {{#if (@readonly)}}\n                    {{#each-in @script.metadata.browsers as |browser version|}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Browser </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          {{capitalize-text browser}} {{version}}\n                        </div>\n                      </div>\n                    {{/each-in}}\n                  {{/if}}\n  \n                  {{#if (eq this.framework 'Mocha')}}\n                    <div class=\"form-group\">\n                      <label>Test Reporting Filters </label>\n                      <Ui::InfoIcon\n                              @content=\"Specify a comma separated list of tests to filter out of the assertion reporting into the\n                                Testable test results. Filters should be specified as a comma separated list of regular expressions\n                                (e.g. .*my test.*) that follow the format [suite].[test]. For\n                                describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\n                                regular expression against 'My suite.my test').\"\n                              @isHtml={{true}}\n                              @placement=\"bottom\"/>\n  \n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"Test Reporting Filters\"\n                                @value={{this.skipTestableReporting}}\n                                {{on \"change\" this.save}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.skipTestReporting}} {{on \"change\" this.skipTestReportingUpdate}} />\n                        Do not report on skipped tests\n                      </label>\n                    </div>\n                  {{/if}}\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                            @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                            @placement=\"bottom\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\"\n                            class=\"form-control\"\n                            placeholder=\"\"\n                            @value={{this.rootFolder}}\n                            {{on \"change\" this.updateRootFolder}} />\n                    </div>\n                  </div>\n  \n                  {{#if (eq this.sourceType 'upload')}}\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceRepositoryUrl}}\n                              {{on \"change\" this.save}} />\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.sourceBranch}}\n                              {{on \"change\" this.save}} />\n                      </div>\n                    </div>\n                  {{/if}}\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n  \n                <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                <:content>\n                  <Forms::MaxDurationInput\n                          @labelClasses={{this.labelClasses}}\n                          @inputClasses={{this.inputClasses}}\n                          @value={{this.maxDuration}}\n                          @onChange={{this.updateMaxDuration}}\n                  />\n  \n                  <Forms::ResourcePartsInput\n                          @labelClasses={{this.labelClasses}}\n                          @inputClasses={{this.inputClasses}}\n                          @resourceParts={{this.resourceParts}}\n                          @resourceNameMappings={{this.resourceNameMappings}}\n                          @overrideOrgDefault={{this.overrideOrgDefault}}\n                          @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                          @onChange={{this.updateResourceParts}}\n                          @editable={{not @readonly}}\n                  />\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Logs</label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.childLogs}} {{on \"change\" this.childLogsUpdate }}/>\n                        Capture logging from the Puppeteer related processes\n                      </label>\n                    </div>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.logCommands}} {{on \"change\" this.logCommandsUpdate }}/>\n                        Log each command into the test results log\n                        <Ui::InfoIcon\n                                @content=\"Each Puppeteer command corresponds to a single request at the protocol level\"/>\n                      </label>\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Network Request Metrics</label>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.captureNetworkRequests}} {{on \"change\" this.captureNetworkRequestsUpdate }} />\n                        Capture performance metrics for all network requests via Chrome DevTools.\n                      </label>\n                    </div>\n                    <div class=\"{{this.inputClasses}} m-t-5\">\n                      <label class=\"normal\">\n                        <Input @type=\"checkbox\" @checked={{this.captureNetworkBody}}  {{on \"change\" this.captureNetworkBodyUpdate }}/>\n                        Capture the body of each request/response (impacts performance)\n                      </label>\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Additional Setup Command\n                      <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Additional Setup Command\"\n                              @value={{this.additionalSetupCommand}} {{on \"change\" this.updateAdditionalSetupCommand}} />\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">\n                      Teardown Command\n                      <Ui::InfoIcon @content=\"Specify a shell command to run after your test finishes\" />\n                    </label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Input @type=\"text\" class=\"form-control\"\n                              placeholder=\"Teardown Command\"\n                              @value={{this.teardownCommand}} {{on \"change\" this.updateTeardownCommand}} />\n                    </div>\n                  </div>\n  \n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Runtime Requirements</label>\n                    <BsButtonGroup class=\"flex-wrap\" @value={{this.platform}} @type=\"radio\" @onChange={{this.updatePlatform}} as |bg|>\n                      <bg.button @type=\"success\" @value=\"\" @size=\"sm\">\n                        Any OS <Ui::InfoIcon @content=\"Runs on any available test runner regardless of OS\" /></bg.button>\n                      <bg.button @type=\"success\" @value=\"linux\" @size=\"sm\">Linux <Ui::InfoIcon\n                              @content=\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\" /></bg.button>\n                      <bg.button @type=\"success\" @value=\"win32\" @size=\"sm\">Windows <Ui::InfoIcon\n                              @content=\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\" /></bg.button>\n                    </BsButtonGroup>\n                  </div>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 2) \"id\"}}>\n                <:title>{{get (get this.additionalWrappers 2) \"name\"}}</:title>\n                <:content>\n                  <div class=\"note note-info alert fade show m-t-10\">\n                    <p class=\"mb-0\">\n                      <strong>NOTE</strong>: browser version is controlled by passing the \"channel\" launch option (chrome, chrome-beta, msedge, msedge-beta).\n                      The browser version will be the one that works with the version of Puppeteer in your package.json file.\n                      See <a href=\"https://docs.testable.io/puppeteer/overview.html#version\">https://docs.testable.io/puppeteer/overview.html#version</a>  for more details.\n                    </p>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Chrome Browser Version</label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Ui::PSelect @options={{this.browserVersionsChrome}}\n                                    @selected={{this.browserVersionsChromeSelected}}\n                                    @disabled={{@readonly}}\n                                    @onChange={{this.chromeBrowserVersionChanged}} as |version|>\n                        {{version.version}}\n                      </Ui::PSelect>\n                    </div>\n                  </div>\n                  <div class=\"form-group\">\n                    <label class=\"{{this.labelClasses}}\">Edge Browser Version</label>\n                    <div class=\"{{this.inputClasses}}\">\n                      <Ui::PSelect @options={{this.browserVersionsEdge}} @selected={{this.browserVersionsEdgeSelected}} @disabled={{@readonly}}\n                                    @onChange={{this.edgeBrowserVersionChanged}} as |version|>\n                        {{version.version}}\n                      </Ui::PSelect>\n                    </div>\n                  </div>\n                </:content>\n              </Yield.AdditionalWrapper>\n  \n              </Scenario::Ui::AdditionalPanelWrapper>\n            </Yield.AdditionalPanel>\n  \n            <Yield.VcsTab>\n              <div class=\"form-group\">\n                <label class=\"{{this.labelClasses}}\">Repository</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                            @repositoryUrl={{this.repositoryUrl}}\n                            @readonly={{@readonly}}\n                            @repositorySelected={{this.repositoryChanged}} />\n                </div>\n              </div>\n              <div class=\"form-group {{if (not-eq this.sourceType 'vcs') 'hidden'}}\">\n                <label class=\"{{this.labelClasses}}\">Branch</label>\n                <div class=\"{{this.inputClasses}}\">\n                  <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}}\n                        {{on \"change\" this.save}} />\n                </div>\n              </div>\n  \n            </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @isRemote={{@isRemote}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  \n  {{#if this.showCreateSpecModal}}\n    <CreateSpecModal @scriptId={{@script.id}}\n                     @contents={{this.specDefaultContents}}\n                     @created={{this.specCreated}}\n                     @modalClosed={{this.createSpecModalClosed}}\n                     @inputTitle={{concat \"Test Spec Name (*.\" (if (eq this.language 'typescript') 'ts' 'js') \")\"}}\n                     @inputPlaceholder={{concat \"Spec Name (*.\" (if (eq this.language 'typescript') 'ts' 'js') \")\"}}\n    />\n  {{/if}}\n  {{#if this.showRemoteModal}}\n    <RemoteConfiguratorModal @metadata={{@script.metadata}}\n                             @scriptType={{@script.scriptType}}\n                             @modalClosed={{this.remoteWizardModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,1],[28,[37,2],[[30,2]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"What is this?\\\"],[13],[1,\\\" This scenario was created from a remotely triggered test.\\\\n      Remote tests cannot be edited via Testable.\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"How can I run a similar test?\\\"],[13],[1,\\\" For help creating a similar remote test, please try\\\\n      our\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-primary btn-enabled\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"remoteWizardModalOpen\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"fa fa-copy \\\"],[12],[13],[1,\\\" Remote Test Configurator\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[8,[39,9],[[16,1,[29,[\\\"updatePuppeteerScenarioForm\\\",[30,3]]]],[4,[38,12],[[30,0,[\\\"onMetadataChange\\\"]],[30,4,[\\\"metadata\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,4],[28,[37,10],[[28,[37,11],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,5],[30,6]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[8,[30,7,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the source of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceTypeObj\\\"]],\\\"Please select a source...\\\",[30,5],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n          \\\"],[8,[39,17],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Framework \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose whether any framework is used in your code.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"frameworks\\\"]],[30,0,[\\\"framework\\\"]],\\\"Please select Framework...\\\",[30,5],[30,0,[\\\"frameworkChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,9]],[1,\\\"\\\\n          \\\"]],[9]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Language \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the language of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"languages\\\"]],[30,0,[\\\"languageObj\\\"]],\\\"Please select a Language...\\\",[30,5],[30,0,[\\\"updateLanguage\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,10,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[10]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showPrimarySpecInput\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"TypeScript\\\",\\\"JavaScript\\\"]],[1,\\\" Code\\\\n            File\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[16,\\\"placeholder\\\",[28,[37,19],[[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"TypeScript\\\",\\\"JavaScript\\\"],\\\" code file\\\"],null]],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updatePrimarySpec\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"primarySpecName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Primary Spec\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"primarySpecOptions\\\"]],[30,0,[\\\"primarySpecName\\\"]],\\\"Please select a file...\\\",[30,5],[30,0,[\\\"updatePrimarySpec\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,11]],[1,\\\"\\\\n            \\\"]],[11]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Node Version\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"nodeVersions\\\"]],[30,0,[\\\"nodeVersionSelected\\\"]],[30,5],[30,0,[\\\"nodeVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,12,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[12]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[30,7,[\\\"LeftPanel\\\"]],null,[[\\\"@isRemote\\\"],[[30,1]]],[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,21],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@isRemote\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@filesPanelExpanded\\\",\\\"@model\\\",\\\"@language\\\",\\\"@onStoreUpdate\\\"],[[28,[37,18],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,1],[30,0,[\\\"specTemplateOptions\\\"]],[30,0,[\\\"specTemplateSelected\\\"]],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFileId\\\"]],[30,0,[\\\"createInitFiles\\\"]],[30,0,[\\\"enableGenerateExample\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,4],[30,0,[\\\"language\\\"]],[30,13]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n          \\\"],[8,[30,14,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[18,24,[[28,[37,23],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,14,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,25],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,4,[\\\"paramsConfig\\\"]],[30,3],[30,4,[\\\"readonly\\\"]],[30,15],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your Puppeteer code.\\\",[28,[37,19],[\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\\\\n            be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\\\\n            as the environment variable <strong>ABC</strong>.\\\"],null],[30,0,[\\\"paramsConfigChanged\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,14,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[39,26],null,[[\\\"@additionalWrappers\\\"],[[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,16,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[41,[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout (ms) \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha timeout in milliseconds\\\"],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Timeout must be >= 0\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"mochaTimeout\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                        Additional Mocha Args\\\\n                        \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Specify additional command line arguments to pass Mocha\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha Args\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"mochaArgs\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Video \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Configure Testable to record a video of each test iteration.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"recordVideosUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recordVideos\\\"]]]],null],[1,\\\"\\\\n                      Capture Video Recording\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Screenshots\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5 lh-2rem\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"autoScreenshotsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoScreenshots\\\"]]]],null],[1,\\\" Capture a\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"screenshotTypes\\\"]],[30,0,[\\\"screenshotType\\\"]],[28,[37,30],[[28,[37,2],[[30,0,[\\\"autoScreenshots\\\"]]],null],[30,5]],null],[30,0,[\\\"onUpdateScreenshotType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,17]],[1,\\\"\\\\n                        \\\"]],[17]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\" screenshot\\\\n                      \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"screenshotTriggers\\\"]],[30,0,[\\\"screenshotTrigger\\\"]],[28,[37,30],[[28,[37,2],[[30,0,[\\\"autoScreenshots\\\"]]],null],[30,5]],null],[30,0,[\\\"onChangeScreenshotTrigger\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,18,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"]],[18]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"autoSendScreenshotsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoSendScreenshots\\\"]]]],null],[1,\\\" Capture all screenshot requests into the results\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Whether or not to automatically capture the response from every Puppeteer screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"NPM Settings\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"noPackageLockUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"noPackageLock\\\"]]]],null],[1,\\\"\\\\n                      Ignore package-lock.json on npm install (--no-package-lock)\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,31],null,[[\\\"@labelClasses\\\",\\\"@deviceOptions\\\",\\\"@device\\\",\\\"@showFullInfo\\\",\\\"@disabled\\\",\\\"@onchange\\\",\\\"@updateProperty\\\",\\\"@saveAction\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"deviceList\\\"]],[30,0,[\\\"device\\\"]],[30,1],[30,5],[30,0,[\\\"updateDevice\\\"]],[30,0,[\\\"updateProperty\\\"]],[30,0,[\\\"saveAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[30,5],null,null],[[[42,[28,[37,33],[[30,4,[\\\"metadata\\\",\\\"browsers\\\"]]],null],null,[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Browser \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[35,34],[[30,20]],null]],[1,\\\" \\\"],[1,[30,19]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[19,20]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Reporting Filters \\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify a comma separated list of tests to filter out of the assertion reporting into the\\\\n                              Testable test results. Filters should be specified as a comma separated list of regular expressions\\\\n                              (e.g. .*my test.*) that follow the format [suite].[test]. For\\\\n                              describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\\\\n                              regular expression against 'My suite.my test').\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Reporting Filters\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"skipTestableReporting\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"skipTestReportingUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"skipTestReporting\\\"]]]],null],[1,\\\"\\\\n                      Do not report on skipped tests\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"sourceType\\\"]],\\\"upload\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,15],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,16,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[8,[39,35],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,36],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@resourceParts\\\",\\\"@resourceNameMappings\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,2],[[30,5]],null]]],null],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Logs\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"childLogsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"childLogs\\\"]]]],null],[1,\\\"\\\\n                      Capture logging from the Puppeteer related processes\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"logCommandsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"logCommands\\\"]]]],null],[1,\\\"\\\\n                      Log each command into the test results log\\\\n                      \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Each Puppeteer command corresponds to a single request at the protocol level\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Network Request Metrics\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"captureNetworkRequestsUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"captureNetworkRequests\\\"]]]],null],[1,\\\"\\\\n                      Capture performance metrics for all network requests via Chrome DevTools.\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,17],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"captureNetworkBodyUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"captureNetworkBody\\\"]]]],null],[1,\\\"\\\\n                      Capture the body of each request/response (impacts performance)\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Additional Setup Command\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateAdditionalSetupCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                    Teardown Command\\\\n                    \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Specify a shell command to run after your test finishes\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateTeardownCommand\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Runtime Requirements\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,37],[[24,0,\\\"flex-wrap\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"platform\\\"]],\\\"radio\\\",[30,0,[\\\"updatePlatform\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,21,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      Any OS \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Runs on any available test runner regardless of OS\\\"]],null]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,21,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"linux\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Linux \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\\\"]],null]],[]]]]],[1,\\\"\\\\n                    \\\"],[8,[30,21,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"win32\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Windows \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\\\"]],null]],[]]]]],[1,\\\"\\\\n                  \\\"]],[21]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,16,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,27],[[28,[37,27],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"note note-info alert fade show m-t-10\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,2],[14,0,\\\"mb-0\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"NOTE\\\"],[13],[1,\\\": browser version is controlled by passing the \\\\\\\"channel\\\\\\\" launch option (chrome, chrome-beta, msedge, msedge-beta).\\\\n                    The browser version will be the one that works with the version of Puppeteer in your package.json file.\\\\n                    See \\\"],[10,3],[14,6,\\\"https://docs.testable.io/puppeteer/overview.html#version\\\"],[12],[1,\\\"https://docs.testable.io/puppeteer/overview.html#version\\\"],[13],[1,\\\"  for more details.\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Chrome Browser Version\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"browserVersionsChrome\\\"]],[30,0,[\\\"browserVersionsChromeSelected\\\"]],[30,5],[30,0,[\\\"chromeBrowserVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,22,[\\\"version\\\"]]],[1,\\\"\\\\n                    \\\"]],[22]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Edge Browser Version\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"browserVersionsEdge\\\"]],[30,0,[\\\"browserVersionsEdgeSelected\\\"]],[30,5],[30,0,[\\\"edgeBrowserVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,23,[\\\"version\\\"]]],[1,\\\"\\\\n                    \\\"]],[23]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"]],[16]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,14,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,38],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,5],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"form-group \\\",[52,[28,[37,39],[[30,0,[\\\"sourceType\\\"]],\\\"vcs\\\"],null],\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,17],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[14]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,24,[[28,[37,23],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,7,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@isRemote\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,4],[30,1],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[7]]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateSpecModal\\\"]],[[[1,\\\"  \\\"],[8,[39,44],null,[[\\\"@scriptId\\\",\\\"@contents\\\",\\\"@created\\\",\\\"@modalClosed\\\",\\\"@inputTitle\\\",\\\"@inputPlaceholder\\\"],[[30,4,[\\\"id\\\"]],[30,0,[\\\"specDefaultContents\\\"]],[30,0,[\\\"specCreated\\\"]],[30,0,[\\\"createSpecModalClosed\\\"]],[28,[37,19],[\\\"Test Spec Name (*.\\\",[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"],\\\")\\\"],null],[28,[37,19],[\\\"Spec Name (*.\\\",[52,[28,[37,18],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"],\\\")\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showRemoteModal\\\"]],[[[1,\\\"  \\\"],[8,[39,45],null,[[\\\"@metadata\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,4,[\\\"metadata\\\"]],[30,4,[\\\"scriptType\\\"]],[30,0,[\\\"remoteWizardModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isRemote\\\",\\\"@embeddedInExecution\\\",\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"browser\\\",\\\"bg\\\",\\\"version\\\",\\\"version\\\",\\\"&default\\\"],[\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"div\\\",\\\"span\\\",\\\"p\\\",\\\"strong\\\",\\\"a\\\",\\\"on\\\",\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-update\\\",\\\"unless\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"eq\\\",\\\"concat\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"or\\\",\\\"scenario/device-dropdown\\\",\\\"each\\\",\\\"-each-in\\\",\\\"capitalize-text\\\",\\\"forms/max-duration-input\\\",\\\"forms/resource-parts-input\\\",\\\"bs-button-group\\\",\\\"scenario/vcs-select\\\",\\\"not-eq\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\",\\\"create-spec-modal\\\",\\\"remote-configurator-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/puppeteer.hbs\",\n    \"isStrictMode\": false\n  });\n  const CreatePrimarySpecOption = 'Create new test spec...';\n  const JsSourceTypes = [{\n    id: 'upload',\n    name: 'Upload'\n  }, {\n    id: 'vcs',\n    name: 'Version Control'\n  }];\n  const AdditionalWrappers = [{\n    id: 'general',\n    name: 'General'\n  }, {\n    id: 'advanced',\n    name: 'Advanced'\n  }, {\n    id: 'versions',\n    name: 'Versions'\n  }];\n  let ScenarioPlaywrightComponent = _exports.default = (_class = class ScenarioPlaywrightComponent extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    /**\n     * Constructor\n     * @param owner\n     * @param args\n     */\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"activeSave\", _descriptor2, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor3, this);\n      _initializerDefineProperty(this, \"browserVersionsChrome\", _descriptor4, this);\n      _initializerDefineProperty(this, \"browserVersionsChromeSelected\", _descriptor5, this);\n      _initializerDefineProperty(this, \"browserVersionsEdge\", _descriptor6, this);\n      _initializerDefineProperty(this, \"browserVersionsEdgeSelected\", _descriptor7, this);\n      _initializerDefineProperty(this, \"captureNetworkRequests\", _descriptor8, this);\n      _initializerDefineProperty(this, \"captureNetworkBody\", _descriptor9, this);\n      _initializerDefineProperty(this, \"noPackageLock\", _descriptor0, this);\n      _initializerDefineProperty(this, \"childLogs\", _descriptor1, this);\n      _initializerDefineProperty(this, \"logCommands\", _descriptor10, this);\n      _initializerDefineProperty(this, \"chromeDriverVersions\", _descriptor11, this);\n      _initializerDefineProperty(this, \"device\", _descriptor12, this);\n      _initializerDefineProperty(this, \"framework\", _descriptor13, this);\n      _initializerDefineProperty(this, \"inputClasses\", _descriptor14, this);\n      _initializerDefineProperty(this, \"jsConf\", _descriptor15, this);\n      _initializerDefineProperty(this, \"labelClasses\", _descriptor16, this);\n      _initializerDefineProperty(this, \"language\", _descriptor17, this);\n      _initializerDefineProperty(this, \"mochaTimeout\", _descriptor18, this);\n      _initializerDefineProperty(this, \"mochaArgs\", _descriptor19, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor20, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor21, this);\n      _initializerDefineProperty(this, \"packageJson\", _descriptor22, this);\n      _initializerDefineProperty(this, \"platform\", _descriptor23, this);\n      _initializerDefineProperty(this, \"primarySpecName\", _descriptor24, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor25, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor26, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor27, this);\n      _initializerDefineProperty(this, \"recordVideos\", _descriptor28, this);\n      _initializerDefineProperty(this, \"autoSendScreenshots\", _descriptor29, this);\n      _initializerDefineProperty(this, \"showCreateSpecModal\", _descriptor30, this);\n      _initializerDefineProperty(this, \"showNote\", _descriptor31, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor32, this);\n      _initializerDefineProperty(this, \"tsConfig\", _descriptor33, this);\n      _initializerDefineProperty(this, \"nodeVersions\", _descriptor34, this);\n      _initializerDefineProperty(this, \"nodeVersionSelected\", _descriptor35, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor36, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor37, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor38, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor39, this);\n      _initializerDefineProperty(this, \"autoScreenshots\", _descriptor40, this);\n      _initializerDefineProperty(this, \"screenshotTrigger\", _descriptor41, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor42, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor43, this);\n      _initializerDefineProperty(this, \"type\", _descriptor44, this);\n      // Load in Chrome option\n      _initializerDefineProperty(this, \"showRemoteModal\", _descriptor45, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor46, this);\n      _initializerDefineProperty(this, \"skipTestableReporting\", _descriptor47, this);\n      _initializerDefineProperty(this, \"skipTestReporting\", _descriptor48, this);\n      _initializerDefineProperty(this, \"defaultDevice\", _descriptor49, this);\n      _initializerDefineProperty(this, \"deviceList\", _descriptor50, this);\n      _initializerDefineProperty(this, \"enableGenerateExample\", _descriptor51, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor52, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor53, this);\n      _initializerDefineProperty(this, \"screenshotType\", _descriptor54, this);\n      _defineProperty(this, \"frameworks\", ['None', 'Mocha']);\n      _defineProperty(this, \"languages\", [{\n        value: 'javascript',\n        name: 'JavaScript'\n      }, {\n        value: 'typescript',\n        name: 'TypeScript'\n      }]);\n      _defineProperty(this, \"sourceTypes\", JsSourceTypes);\n      _defineProperty(this, \"additionalWrappers\", AdditionalWrappers);\n      _defineProperty(this, \"screenshotTypes\", ['browser', 'desktop']);\n      _defineProperty(this, \"screenshotTriggers\", [{\n        id: 'afterFailure',\n        name: 'after failed commands'\n      }, {\n        id: 'always',\n        name: 'after every command'\n      }, {\n        id: 'afterFailed',\n        name: 'after failed test steps'\n      }, {\n        id: 'afterEvery',\n        name: 'after every test step'\n      }]);\n      this.fromMetadata();\n    }\n    onMetadataChange() {\n      // observer\n      this.fromMetadata();\n    }\n    get sourceTypeObj() {\n      return this.sourceTypes.find(st => this.sourceType === st.id);\n    }\n    get languageObj() {\n      return this.languages.find(st => this.language === st.value);\n    }\n    get specTemplateOptions() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _puppeteerMochaTemplatesTs.default.specOptions : _puppeteerMochaTemplates.default.specOptions : langTs ? _puppeteerTemplateTs.default.specOptions : _puppeteerTemplate.default.specOptions;\n    }\n    get specTemplates() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _puppeteerMochaTemplatesTs.default.spec : _puppeteerMochaTemplates.default.spec : langTs ? _puppeteerTemplateTs.default.spec : _puppeteerTemplate.default.spec;\n    }\n    get specDefaultContents() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      return framework === 'Mocha' ? langTs ? _puppeteerMochaTemplatesTs.default.spec['skeleton'] : _puppeteerMochaTemplates.default.spec['skeleton'] : langTs ? _puppeteerTemplateTs.default.spec['skeleton'] : _puppeteerTemplate.default.spec['skeleton'];\n    }\n    get metadata() {\n      const metadata = this.args.script.metadata;\n      return (0, _utils.isEmpty)(metadata) ? {} : metadata;\n    }\n    get primarySpec() {\n      const name = this.primarySpecName;\n      if (name) {\n        return _.find(this.args.script.dataStores, ds => {\n          return ds.name === name;\n        });\n      }\n      return '';\n    }\n    get primarySpecOptions() {\n      const existing = [];\n      const jsConfFile = this.jsConfFile;\n      if (!this.args.script?.dataStores) return '';\n      this.args.script.dataStores.forEach(ds => {\n        if (ds.name !== jsConfFile && (_lib.default.endsWith(ds.name, '.js') || _lib.default.endsWith(ds.name, '.ts'))) {\n          existing.push(ds.name);\n        }\n      });\n      return [{\n        groupName: 'Existing',\n        options: existing\n      }, {\n        groupName: 'New',\n        options: [CreatePrimarySpecOption]\n      }];\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType === 'upload' && this.framework;\n    }\n    get showPrimarySpecInput() {\n      return !this.args.script.dataStores.find(ds => _lib.default.endsWith(ds.name, 'js') || _lib.default.endsWith(ds.name, 'ts'));\n    }\n    get defaultFiles() {\n      if (this.args.isRemote) return;\n      const html = `\n      <div class=\"note note-info alert\">\n        <p>\n          Consider using placeholder \\${puppeteerVersion} in your package.json file.\n          Testable will automatically replace it with the version of Playwright that matches the latest browser version.\n        </p>\n      </div>\n    `;\n      return [{\n        id: 'note',\n        type: 'note',\n        name: 'NOTE',\n        path: '/NOTE',\n        readonly: true,\n        isFolder: false,\n        fileType: 'note',\n        code: (0, _template.htmlSafe)(html)\n      }];\n    }\n    get defaultFileId() {\n      return this.primarySpec?.id || (this.sourceType !== 'vcs' ? this.defaultFiles?.[0]?.id : '');\n    }\n\n    /**\n     * Set the script language\n     * @param {String<typescript|javascript>} language Javascript or Typescript\n     */\n    updateLanguage({\n      value\n    }) {\n      this.language = value;\n      this.saveScript();\n    }\n    saveAction() {\n      this.saveScript(true);\n    }\n\n    /**\n     * Update parent component with latest paramsConfig\n     * @param {Object} paramsConfig\n     */\n    paramsConfigChanged(paramsConfig) {\n      this.args.paramsConfigChanged(paramsConfig);\n    }\n\n    /**\n     * Update the selected node version\n     * @param Object selection\n     */\n    nodeVersionChanged(selection) {\n      this.nodeVersionSelected = selection;\n      this.saveScript();\n    }\n\n    /**\n     * Save the current selected Device / Display\n     * @param {Object} device\n     */\n    updateDevice(device) {\n      let oldDevice = this.device;\n      if (device.displaySize === 'custom' || device.displaySize === 'customDevice') {\n        device.width = oldDevice.width;\n        device.height = oldDevice.height;\n        if (device.type === 'device') {\n          device.scaleFactor = oldDevice.scaleFactor;\n          device.isMobile = oldDevice.isMobile;\n          device.isTouch = oldDevice.isTouch;\n          device.isLandscape = oldDevice.isLandscape;\n          device.userAgent = oldDevice.userAgent || '';\n        }\n      }\n      this.device = device;\n      this.saveScript(true);\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    captureNetworkBodyUpdate(event) {\n      this.captureNetworkBody = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    noPackageLockUpdate(event) {\n      this.noPackageLock = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    captureNetworkRequestsUpdate(event) {\n      this.captureNetworkRequests = event.target.checked;\n      if (!this.captureNetworkRequests) {\n        this.captureNetworkBody = false;\n      }\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    childLogsUpdate(event) {\n      this.childLogs = event.target.checked;\n      this.saveScript();\n    }\n    logCommandsUpdate(event) {\n      this.logCommands = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     *\n     * @param {Object} event\n     */\n    recordVideosUpdate(event) {\n      this.recordVideos = event.target.checked;\n      this.saveScript();\n    }\n    autoSendScreenshotsUpdate(event) {\n      this.autoSendScreenshots = event.target.checked;\n      this.saveScript();\n    }\n    onUpdateScreenshotType(value) {\n      this.screenshotType = value;\n      this.saveScript();\n    }\n    autoScreenshotsUpdate(event) {\n      this.autoScreenshots = event.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     * Update framework and save\n     * @param {String} framework\n     */\n    async frameworkChanged(framework) {\n      this.framework = framework;\n      this.enableGenerateExample = this.framework && this.shouldEditFilesOnPage;\n      this.saveScript();\n    }\n\n    /**\n     * Update selection and save the script\n     * @param {String} selection\n     */\n    async sourceTypeChanged({\n      id\n    }) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        const resultType = this.args.uniqueId;\n        $(`#updatePuppeteerScenarioForm${resultType}`).parsley().validate();\n      }, 250);\n      this.sourceType = id;\n      this.enableGenerateExample = this.framework && this.shouldEditFilesOnPage;\n      this.saveScript();\n    }\n\n    /**\n     * Update repository details\n     * @param {Object} repository\n     */\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Primary Spec\n     * @param {Object} event\n     */\n    updatePrimarySpec(event) {\n      let value = event.target ? event.target.value : event;\n      if (value === CreatePrimarySpecOption) {\n        this.showCreateSpecModal = true;\n      } else if (value !== '') {\n        this.primarySpecName = value;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Update Datastore and primary Spec name\n     * @param {Object} ds\n     */\n    specCreated(ds) {\n      if (ds) {\n        this.args.dataStoreUpdate(null, ds);\n        this.primarySpecName = ds.name;\n        this.saveScript();\n      }\n    }\n\n    /**\n     * Called when Create Spec model is closed\n     */\n    createSpecModalClosed() {\n      this.showCreateSpecModal = false;\n    }\n\n    /**\n     * Update Browser Version for Chrome\n     * @param {String} selection\n     */\n    chromeBrowserVersionChanged(selection) {\n      this.browserVersionsChromeSelected = selection;\n      this.saveScript();\n    }\n\n    /**\n     * Update Browser Version for Edge\n     * @param {String} selection\n     */\n    edgeBrowserVersionChanged(selection) {\n      this.browserVersionsEdgeSelected = selection;\n      this.saveScript();\n    }\n\n    /**\n     * Additional Setup Command\n     * @param {Object} event\n     */\n    updateAdditionalSetupCommand(event) {\n      this.additionalSetupCommand = event.target.value;\n      this.saveScript();\n    }\n\n    /**\n     * Teardown Command\n     * @param {Object} event\n     */\n    updateTeardownCommand(event) {\n      this.teardownCommand = event.target.value;\n      this.saveScript();\n    }\n\n    /**\n     * Update any property from call back functions e.g. device manager dropdown\n     * @param {String} prop Property name to update in Display Size object\n     * @param {any} val Value for Display Size property\n     */\n    updateProperty(prop, val) {\n      this.device[prop] = val;\n      this.saveScript(true);\n    }\n\n    /**\n     * Update Platform and save\n     * @param {String} platform Platform\n     */\n    updatePlatform(platform) {\n      this.platform = platform;\n      this.saveScript();\n    }\n    skipTestReportingUpdate(ckBox) {\n      this.skipTestReporting = ckBox.target.checked;\n      this.saveScript();\n    }\n\n    /**\n     * Saveception\n     */\n    save() {\n      this.saveScript();\n    }\n    remoteWizardModalOpen() {\n      this.showRemoteModal = true;\n    }\n    remoteWizardModalClosed() {\n      this.showRemoteModal = false;\n    }\n    updateMaxDuration(e) {\n      this.maxDuration = e.target.valueAsNumber;\n      this.saveScript();\n    }\n    onChangeScreenshotTrigger(selected) {\n      this.screenshotTrigger = selected;\n      this.saveScript();\n    }\n    updateResourceParts(attributes) {\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.saveScript();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.saveScript();\n    }\n\n    /**\n    * Inserts specs content into editor\n    * @param selection\n    */\n    specTemplateSelected(editor, selection) {\n      const templates = this.specTemplates;\n      editor.insert(templates[selection.id]);\n    }\n    async createInitFiles() {\n      await (this.framework === 'Mocha' ? this.initMochaPackageFile() : this.initJsPackageFile());\n      this.saveScript();\n    }\n\n    /**\n     * Save metadata on the server\n     */\n    saveScript(forceSave = false) {\n      let metadata = this.toMetadata();\n      let origMetadata = this.args.script.metadata;\n      if (this.args.saveMetadata && (!_.isEqual(metadata, origMetadata) || forceSave)) {\n        this.args.saveMetadata(metadata);\n      }\n    }\n\n    /**\n     * Create metadata object\n     * @returns {{}}\n     */\n    toMetadata() {\n      let metadata = {};\n      if (this.framework) {\n        metadata.framework = this.framework;\n      }\n      metadata.sourceType = this.sourceType;\n      metadata.language = this.language;\n      metadata.binary = 'Standard';\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      if (this.device?.displaySize === 'custom' || this.device?.displaySize === 'customDevice') {\n        metadata.displaySize = `${this.device.width}x${this.device.height}x24`;\n      } else {\n        metadata.displaySize = typeof this.device === 'object' ? this.device.displaySize : this.defaultDevice;\n      }\n      metadata.device = this.device;\n      metadata.mochaTimeout = this.mochaTimeout;\n      metadata.childLogs = this.childLogs;\n      metadata.logCommands = this.logCommands;\n      metadata.captureNetworkRequests = this.captureNetworkRequests;\n      metadata.captureNetworkBody = this.captureNetworkBody;\n      metadata.noPackageLock = this.noPackageLock;\n      metadata.platform = this.platform;\n      if (this.primarySpecName) {\n        metadata.primarySpec = this.primarySpecName;\n      }\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.recordVideos = this.recordVideos;\n      metadata.screenshotType = this.screenshotType;\n      metadata.autoSendScreenshots = this.autoSendScreenshots;\n      metadata.rootFolder = this.rootFolder;\n      metadata.browsers = {\n        chrome: this.browserVersionsChromeSelected.version,\n        edge: this.browserVersionsEdgeSelected.version\n      };\n      metadata.nodeVersion = this.nodeVersionSelected?.id;\n      metadata.maxDuration = this.maxDuration;\n      if (this.framework === 'Mocha') {\n        metadata.skipTestableReporting = this.skipTestableReporting;\n        metadata.skipTestReporting = this.skipTestReporting;\n        metadata.mochaArgs = this.mochaArgs;\n        metadata.autoScreenshots = this.autoScreenshots || false;\n        if (this.screenshotTrigger?.id === 'afterFailure' || this.screenshotTrigger?.id === 'always') {\n          metadata.screenshots = this.screenshotTrigger.id;\n        } else {\n          metadata.screenshotTrigger = this.screenshotTrigger?.id;\n        }\n      }\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n\n    /**\n     * Populate values from metadata to component properties\n     * @returns {Promise<void>}\n     */\n    async fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      this.availableBrowsersList = await this.api.browserManager.getAllBrowsers();\n      if (this.isDestroying || this.isDestroyed) return;\n      this.deviceList = this.api.browserManager.devices;\n      this.defaultDevice = this.api.browserManager.defaultDevice.displaySize;\n      let browserVersionsChrome = this.availableBrowsersList['chrome'];\n      this.browserVersionsChrome = browserVersionsChrome;\n      let browserVersionsEdge = this.availableBrowsersList['edge'];\n      this.browserVersionsEdge = browserVersionsEdge;\n      const metadata = this.metadata;\n      if (!_.isEmpty(metadata)) {\n        if (metadata.framework) {\n          this.framework = metadata.framework;\n        }\n        if (metadata.language) {\n          this.language = metadata.language;\n        }\n        if (metadata.sourceType) {\n          this.sourceType = metadata.sourceType === 'vcs' ? 'vcs' : 'upload';\n        }\n      }\n      if (metadata.displaySize) {\n        if (metadata.device && typeof metadata.device === 'object') {\n          this.device = metadata.device;\n        } else {\n          let displaySizes = this.deviceList.filter(size => size.displaySize === metadata.displaySize);\n          if (displaySizes && displaySizes[0]) {\n            this.device = displaySizes[0];\n          } else {\n            let displayCustom = this.deviceList.filter(s => s.displaySize === 'custom' && s.type === 'desktop')[0];\n            let displayParts = metadata.displaySize.split('x');\n            displayCustom.width = displayParts[0];\n            displayCustom.height = displayParts[1];\n            this.device = displayCustom;\n          }\n        }\n      }\n      if (metadata.mochaTimeout) {\n        this.mochaTimeout = metadata.mochaTimeout;\n      }\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.rootFolder = metadata.rootFolder || '.';\n      if (metadata.browsers) {\n        let chromeVersion = browserVersionsChrome.filter(browser => browser.version === metadata.browsers.chrome);\n        let edgeVersion = browserVersionsEdge.filter(browser => browser.version === metadata.browsers.edge);\n        this.browserVersionsChromeSelected = chromeVersion && chromeVersion[0] && browserVersionsChrome.filter(b => b.version === chromeVersion[0].version)[0] || browserVersionsChrome[0];\n        this.browserVersionsEdgeSelected = edgeVersion && edgeVersion[0] && browserVersionsEdge.filter(b => b.version === edgeVersion[0].version)[0] || browserVersionsEdge[0];\n      } else {\n        this.browserVersionsChromeSelected = browserVersionsChrome[0];\n        this.browserVersionsEdgeSelected = browserVersionsEdge[0];\n      }\n      metadata.browsers = {\n        chrome: this.browserVersionsChromeSelected.version,\n        edge: this.browserVersionsEdgeSelected.version\n      };\n      const nodeVersion = this.nodeVersions.filter(version => version.id === metadata.nodeVersion)[0];\n      this.nodeVersionSelected = nodeVersion || this.nodeVersions[0];\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.childLogs = _.isBoolean(metadata.childLogs) ? metadata.childLogs : true;\n      this.logCommands = _.isBoolean(metadata.logCommands) ? metadata.logCommands : false;\n      this.captureNetworkRequests = _.isBoolean(metadata.captureNetworkRequests) ? metadata.captureNetworkRequests : true;\n      this.captureNetworkBody = _.isBoolean(metadata.captureNetworkBody) ? metadata.captureNetworkBody : false;\n      this.noPackageLock = _.isBoolean(metadata.noPackageLock) ? metadata.noPackageLock : false;\n      if (metadata.primarySpec) {\n        this.primarySpecName = metadata.primarySpec;\n      }\n      this.platform = metadata.platform || '';\n      this.recordVideos = metadata.recordVideos;\n      this.screenshotType = metadata.screenshotType || 'browser';\n      this.autoSendScreenshots = _.isUndefined(metadata.autoSendScreenshots) || metadata.autoSendScreenshots || false;\n      if (metadata.framework === 'Mocha') {\n        this.skipTestableReporting = metadata.skipTestableReporting;\n        this.skipTestReporting = metadata.skipTestReporting;\n        this.mochaArgs = metadata.mochaArgs || '';\n        this.autoScreenshots = metadata.autoScreenshots;\n        this.screenshotTrigger = _.find(this.screenshotTriggers, screenshotTrigger => {\n          return screenshotTrigger.id === (metadata.screenshots || metadata.screenshotTrigger);\n        }) || this.screenshotTriggers[0];\n      }\n\n      // if we found URL it means its loadInChrome\n      if (metadata.type === 'url') {\n        await this.args.createDataStore('package.json', _puppeteerMochaTemplates.default.defaultPackageJson);\n        await this.args.createDataStore('test.js', _puppeteerMochaTemplates.default.spec['loadInChromeSkeleton'].replace(/\\$\\{url\\}/g, metadata.url));\n        this.primarySpecName = 'test.js';\n        this.sourceType = 'upload';\n        this.saveScript();\n      }\n      if (!metadata.displaySize) {\n        this.saveScript();\n      }\n      this.enableGenerateExample = this.framework && this.shouldEditFilesOnPage;\n      this.maxDuration = metadata.maxDuration;\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        if (this.browserVersionsChromeSelected !== 'Latest' || this.browserVersionsEdgeSelected !== 'Latest' || this.nodeVersionSelected?.id !== 'latest') {}\n        $(`#updatePuppeteerScenarioForm${this.args.uniqueId}`).parsley().validate();\n      });\n    }\n\n    /**\n     * Initialize JS package.json file\n     */\n    async initJsPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _puppeteerTemplateTs.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.ts', _puppeteerTemplateTs.default.spec['skeleton'], true);\n        await this.createFile('tsConfig', 'tsconfig.json', _puppeteerTemplateTs.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _puppeteerTemplate.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.js', _puppeteerTemplate.default.spec['skeleton'], true);\n      }\n    }\n\n    /**\n     * Initialize Mocha package.json file\n     */\n    async initMochaPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _puppeteerMochaTemplatesTs.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.ts', _puppeteerMochaTemplatesTs.default.spec['skeleton'], true);\n        await this.createFile('tsConfig', 'tsconfig.json', _puppeteerMochaTemplatesTs.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _puppeteerMochaTemplates.default.defaultPackageJson);\n        await this.createFile('primarySpecName', 'test.js', _puppeteerMochaTemplates.default.spec['skeleton'], true);\n      }\n    }\n\n    /**\n     * Create a new file\n     * @param {String} field\n     * @param {String} fileName\n     * @param {String} defaultContents\n     * @param {Boolean} isFieldName\n     */\n    async createFile(field, fileName, defaultContents, isFieldName) {\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script.dataStores, scriptDs => scriptDs.name === fileName);\n        if (ds) {\n          if (isFieldName) {\n            this[field] = ds.name;\n          }\n          resolve();\n        } else if (!this.args.script.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore(fileName, defaultContents).then(result => {\n            this.generatingFiles = false;\n            this[field] = isFieldName ? result.name : defaultContents;\n            resolve();\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"activeSave\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsChrome\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsChromeSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsEdge\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsEdgeSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"captureNetworkRequests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"captureNetworkBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"noPackageLock\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"childLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"logCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"chromeDriverVersions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _.clone(_environment.config.chromeDriverVersions);\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"framework\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"inputClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"jsConf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"labelClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"javascript\";\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"mochaTimeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 3600000;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"mochaArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"packageJson\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return \"\";\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"platform\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"primarySpecName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"recordVideos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"autoSendScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"showCreateSpecModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"showNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"tsConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _.clone(_environment.config.nodeVersions);\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"autoScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"screenshotTrigger\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor44 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor45 = _applyDecoratedDescriptor(_class.prototype, \"showRemoteModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor46 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor47 = _applyDecoratedDescriptor(_class.prototype, \"skipTestableReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor48 = _applyDecoratedDescriptor(_class.prototype, \"skipTestReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor49 = _applyDecoratedDescriptor(_class.prototype, \"defaultDevice\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor50 = _applyDecoratedDescriptor(_class.prototype, \"deviceList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor51 = _applyDecoratedDescriptor(_class.prototype, \"enableGenerateExample\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor52 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor53 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor54 = _applyDecoratedDescriptor(_class.prototype, \"screenshotType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onMetadataChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMetadataChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLanguage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLanguage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"nodeVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"nodeVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDevice\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDevice\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"captureNetworkBodyUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"captureNetworkBodyUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"noPackageLockUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"noPackageLockUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"captureNetworkRequestsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"captureNetworkRequestsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"childLogsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"childLogsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logCommandsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logCommandsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"recordVideosUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"recordVideosUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"autoSendScreenshotsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"autoSendScreenshotsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateScreenshotType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateScreenshotType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"autoScreenshotsUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"autoScreenshotsUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"frameworkChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"frameworkChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePrimarySpec\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePrimarySpec\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createSpecModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createSpecModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chromeBrowserVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chromeBrowserVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"edgeBrowserVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"edgeBrowserVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAdditionalSetupCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAdditionalSetupCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeardownCommand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeardownCommand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateProperty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateProperty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePlatform\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePlatform\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"skipTestReportingUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"skipTestReportingUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalOpen\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalOpen\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeScreenshotTrigger\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeScreenshotTrigger\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specTemplateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specTemplateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createInitFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createInitFiles\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioPlaywrightComponent);\n});","define(\"@testable/shared-ui/components/scenario/selenium\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@ember/utils\", \"@ember/service\", \"@ember/template\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/templates/wdio-templates\", \"@testable/shared-ui/utils/templates/wdio-templates-ts\", \"@testable/shared-ui/utils/templates/js-templates\", \"@testable/shared-ui/utils/templates/ts-templates\", \"@testable/shared-ui/utils/templates/mocha-templates\", \"@testable/shared-ui/utils/templates/mocha-templates-ts\", \"@testable/shared-ui/utils/templates/protractor-templates\", \"@testable/shared-ui/utils/templates/protractor-templates-ts\", \"@testable/shared-ui/utils/templates/java-templates\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _utils, _service, _template, _component2, _tracking, _lib, _environment, _wdioTemplates, _wdioTemplatesTs, _jsTemplates, _tsTemplates, _mochaTemplates, _mochaTemplatesTs, _protractorTemplates, _protractorTemplatesTs, _javaTemplates, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43, _descriptor44, _descriptor45, _descriptor46, _descriptor47, _descriptor48, _descriptor49, _descriptor50, _descriptor51, _descriptor52, _descriptor53, _descriptor54, _descriptor55, _descriptor56, _descriptor57, _descriptor58, _descriptor59, _descriptor60, _descriptor61, _descriptor62, _descriptor63, _descriptor64, _descriptor65, _descriptor66, _descriptor67, _descriptor68, _descriptor69, _descriptor70;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/utils\",0,\"@ember/service\",0,\"@ember/template\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/templates/wdio-templates\",0,\"@testable/shared-ui/utils/templates/wdio-templates-ts\",0,\"@testable/shared-ui/utils/templates/js-templates\",0,\"@testable/shared-ui/utils/templates/ts-templates\",0,\"@testable/shared-ui/utils/templates/mocha-templates\",0,\"@testable/shared-ui/utils/templates/mocha-templates-ts\",0,\"@testable/shared-ui/utils/templates/protractor-templates\",0,\"@testable/shared-ui/utils/templates/protractor-templates-ts\",0,\"@testable/shared-ui/utils/templates/java-templates\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and @isRemote (not @embeddedInExecution))}}\n    <div class=\"note note-info alert\">\n      <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n      <p>\n        <strong>What is this?</strong> This scenario was created from a remotely triggered test.\n        Remote tests cannot be edited via Testable.\n      </p>\n      <p>\n        <strong>How can I run a similar test?</strong> For help creating a similar remote test, please try\n        our\n        <a class=\"btn btn-primary btn-enabled\" role=\"button\" {{on \"click\" this.remoteWizardModalOpen}} >\n          <span class=\"fa fa-copy \"></span> Remote Test Configurator\n        </a>\n      </p>\n    </div>\n  {{/if}}\n  \n  <Scenario::Ui::EditorWrapper\n    @model={{@script}}\n    @onExpand={{fn (mut this.filesPanelExpanded)}}\n    @readonly={{@readonly}}\n    @editorSavedStatus={{@editorSavedStatus}}\n    id=\"updateSeleniumScenarioForm{{@uniqueId}}\"\n    {{did-insert this.onDidInsert}}\n    {{did-update this.fromMetadata this.metadata}}\n    {{did-update this.onPrimarySpecUpdate this.primarySpec}}\n    {{did-update this.onUpdateDisplayedFiles this.sourceType this.runStyle}}\n    {{did-update this.onProxyNetworkRequestsChange this.proxyNetworkRequests}}\n    {{did-update this.onBindingsChange this.bindings}}\n    {{did-update this.onSaveRelatedUpdate this.proxyWebSockets this.captureNetworkBody this.noPackageLock this.proxyNetworkRequests this.childLogs this.logCommands this.platform this.recordVideos this.precompile this.autoScreenshots this.autoSendScreenshots this.screenshotType this.screenshotTrigger}}\n    as |Wrapper|\n  >\n    {{#unless @isRemote}}\n      <Wrapper.Filters>\n  \n        <div class=\"form-group\">\n          <label class=\"{{this.labelClasses}}\">Bindings</label>\n          <div class=\"{{this.inputClasses}}\">\n            <Ui::PSelect @options={{this.bindingsArray}} @selected={{this.bindingObj}}\n                          @placeholder=\"Please select Bindings...\"\n                          @disabled={{@readonly}}\n                          @onChange={{this.updateBindings}} as |option| >\n              {{option.name}}\n            </Ui::PSelect>\n          </div>\n        </div>\n  \n        {{#if (eq this.bindings 'wdio')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Run Style <Ui::InfoIcon\n                    @content=\"Whether you plan to provide a WebdriverIO config file to run your test or a script that\n                    uses webdriverio as a package\" @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.runStyles}} @selected={{this.runStyleObj}}\n                            @placeholder=\"Please select Run Style...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updateRunStyle}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (or (eq this.bindings 'java') (eq this.bindings 'javascript') (and (eq this.bindings 'wdio') (eq this.runStyle 'script')))}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Framework\n              {{#if (eq this.bindings 'java')}}\n                <Ui::InfoIcon\n                    @isHtml={{true}}\n                    @content=\"Choose <code>None</code> if you want Testable to run a main class otherwise choose the\n                    framework that needs to be used to execute your tests.\" @placement=\"bottom\" />\n              {{else}}\n                <Ui::InfoIcon @content=\"Choose whether any framework is used in your code.\" @placement=\"bottom\" />\n              {{/if}}\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.frameworks}} @selected={{this.framework}}\n                            @placeholder=\"Please select Framework...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.frameworkChanged}} as |option| >\n                {{option}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and (not (is-empty this.bindings)) )}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Source <Ui::InfoIcon\n                    @content=\"Choose the source of the code that defines this scenario\" @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.sourceTypes}} @selected={{this.sourceType}}\n                            @placeholder=\"Please select a source...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.sourceTypeChanged}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n              <Input class=\"hidden\" disabled={{true}} @value={{this.sourceType.id}} data-parsley-required=\"true\"\n                      data-parsley-required-message=\"Please select a source type.\" />\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if this.canShowLanguageSelection}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Language <Ui::InfoIcon\n                    @content=\"Choose the language of the code that defines this scenario\" @placement=\"bottom\" /></label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.languages}} @selected={{this.languageObj}}\n                            @placeholder=\"Please select a Language...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updateLanguage}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (eq this.bindings 'wdio')}}\n          {{#if (eq this.runStyle 'file')}}\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Webdriver.io Conf File</label>\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"Webdriver.io Configuration File\"\n                        @value={{this.jsConfFile}}\n                        disabled={{@readonly}}\n                        {{on \"change\" this.saveMetadataAction}} />\n              </div>\n            </div>\n          {{else}}\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">{{if (eq this.framework 'Mocha') 'Mocha Spec File' 'Javascript Entrypoint File'}}</label>\n              <div class=\"{{this.inputClasses}}\">\n                <Input\n                  @type=\"text\"\n                  class=\"form-control\"\n                  placeholder={{if (eq this.framework 'Mocha') 'Mocha Spec File' 'Javascript Entrypoint File'}}\n                  disabled={{@readonly}}\n                  @value={{this.jsCodeFile}}\n                        {{on \"change\" this.saveMetadataAction}} />\n              </div>\n            </div>\n          {{/if}}\n  \n        {{else if (eq this.bindings 'protractor')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Protractor Conf File</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\" class=\"form-control\"\n              placeholder=\"Webdriver.io Configuration File\"\n              @value={{this.jsConfFile}}\n              disabled={{@readonly}}\n              {{on \"change\" this.saveMetadataAction}} />\n            </div>\n          </div>\n        {{else if (eq this.bindings 'java')}}\n          {{#if (and\n                        (eq this.sourceType.id 'upload')\n                        (eq this.framework 'None')\n                )}}\n            <div class=\"form-group\">\n              <label class=\"{{this.labelClasses}}\">Main Class Name</label>\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"Main class name\"\n                        @value={{this.primarySpecName}}\n                        disabled={{@readonly}}\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Please select main class name.\"\n                        {{on \"change\" this.updatePrimarySpec}} />\n              </div>\n            </div>\n          {{/if}}\n  \n        {{else if (eq this.bindings 'javascript')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              {{if (eq this.language 'typescript') 'TypeScript' 'JavaScript'}} Code File\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder={{concat (if (eq this.language 'typescript') 'TypeScript' 'JavaScript') \" code file\"}}\n                      @value={{this.primarySpecName}}\n                      disabled={{@readonly}}\n                      {{on \"change\" this.updatePrimarySpec}} />\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and\n                      (eq this.bindings 'java')\n                      (or (eq this.sourceType.id 'vcs') (eq this.sourceType.id 'uploadZip') )\n              )\n        }}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Build Tool\n              <Ui::InfoIcon\n                      @content=\"Testable can run either Gradle or Maven to build and run your scenario.\n                      If your project has a gradlew file (for Gradle) or a mvnw file (for Maven) we will use it,\n                      otherwise the latest Gradle/Maven version installed on the test runner will be used.\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.buildTools}} @selected={{this.buildToolObj}}\n                            @placeholder=\"Please select Build Tool...\"\n                            @disabled={{@readonly}}\n                            @onChange={{this.updateBuildTool}} as |option| >\n                {{option.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n  \n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Build Args\n              <Ui::InfoIcon\n                      @content=\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"input-group\">\n              <div class=\"input-group-append\"><span class=\"input-group-text\">{{if (eq this.buildTool \"maven\") \"mvn\" \"gradle\"}}</span></div>\n              <Input @type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"Build Args\"\n                      @value={{this.buildToolArgs}}\n                      disabled={{@readonly}}\n                      {{on \"change\" this.saveMetadataAction}} />\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (and this.allowMultipleTestClasses\n                (not-eq this.sourceType.id 'vcs')\n                (not-eq this.sourceType.id 'uploadZip'))\n        }}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">\n              Test Classes\n              <Ui::InfoIcon\n                      @content=\"Comma separated list of <code>JUnit</code> or <code>TestNG</code> fully qualified class names to execute\"\n                      @isHtml={{true}}\n                      @placement=\"bottom\"/>\n            </label>\n            <div class=\"{{this.inputClasses}}\">\n              <div class=\"{{this.inputClasses}}\">\n                <Input @type=\"text\"\n                        class=\"form-control\"\n                        placeholder=\"Test Classes\"\n                        @value={{this.testClasses}}\n                        disabled={{@readonly}}\n                        data-parsley-required=\"true\"\n                        data-parsley-required-message=\"Please provide test classes to run.\"\n                        {{on \"change\" this.saveMetadataAction}} />\n              </div>\n            </div>\n          </div>\n        {{/if}}\n  \n        {{#if (eq this.bindings 'java')}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Java Version</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.javaVersions}} @selected={{this.javaVersionSelected}}\n                            @disabled={{@readonly}}\n                            @onChange={{this.javaVersionChanged}} as |version|>\n                {{version.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{else}}\n          <div class=\"form-group\">\n            <label class=\"{{this.labelClasses}}\">Node Version</label>\n            <div class=\"{{this.inputClasses}}\">\n              <Ui::PSelect @options={{this.nodeVersions}} @selected={{this.nodeVersionSelected}}\n                           @disabled={{@readonly}}\n                           @onChange={{this.nodeVersionChanged}} as |version|>\n                {{version.name}}\n              </Ui::PSelect>\n            </div>\n          </div>\n        {{/if}}\n  \n      </Wrapper.Filters>\n    {{/unless}}\n      <Wrapper.LeftPanel @isRemote={{@isRemote}}>\n  \n        <:filesTab>\n          <Ui::FilesManager\n            @showVcsTab={{eq this.sourceType.id 'vcs'}}\n            @selectedPanel={{this.selectedPanel}}\n            @onPanelChange={{fn (mut this.selectedPanel)}}\n            @isRemote={{@isRemote}}\n            @templates={{this.specTemplateOptions}}\n            @selectedTemplate={{this.specTemplateSelected}}\n            @selectedFile={{fn (mut this.selectedFile)}}\n            @defaultFiles={{this.defaultFiles}}\n            @defaultFileId={{this.defaultFileIds}}\n            @generateExampleFiles={{this.createInitFiles}}\n            @enableGenerateExample={{this.enableGenerateExample}}\n            @generatingFiles={{this.generatingFiles}}\n            @model={{@script}}\n            @language={{this.language}}\n            @filesPanelExpanded={{this.filesPanelExpanded}}\n            @onStoreUpdate={{@onStoreUpdate}}\n            @updateContent={{@saveCode}}\n            as |Yield|>\n              <Yield.TagsPanel>\n                {{yield (hash SidebarRightPanel=(component \"empty\"))}}\n              </Yield.TagsPanel>\n  \n              <Yield.ParamsPanel>\n                <Scenario::ParamsConfigEditor @paramsConfig={{@script.paramsConfig}}\n                            @uniqueId={{@uniqueId}}\n                            @readonly={{@readonly}}\n                            @isSaving={{@isSaving}}\n                            @infoText=\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your Selenium code.\"\n                            @noteText={{concat\n                              \"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\n                              be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\n                              as the environment variable <strong>ABC</strong>\" (if (eq this.bindings 'java') \" and system property\n                              <strong>Abc</strong>.\" \".\")}}\n                                                @configChanged={{this.paramsConfigChangedAction}} />\n              </Yield.ParamsPanel>\n              <Yield.AdditionalPanel>\n                <Scenario::Ui::AdditionalPanelWrapper @additionalWrappers={{this.additionalWrappers}} as |Yield|>\n                <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 0) \"id\"}}>\n  \n                  <:title>{{get (get this.additionalWrappers 0) \"name\"}}</:title>\n                  <:content>\n                    {{#if (and this.canShowLanguageSelection (eq this.language \"typescript\") (not-eq this.runStyle 'script') ) }}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Precompile <Ui::InfoIcon @content=\"Run tsc in the working directory before starting\n                            <a href='http://webdriver.io/' target='_blank'>Webdriver.io.</a>\n                            Not needed if you are using a wdio.conf.ts file with auto-compile enabled.\" @isHtml={{true}}\n                            /></label>\n                        <div class=\"{{this.inputClasses}} m-t-5\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.precompile}} /> Compile to javascript before running scenario\n                          </label>\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Video <Ui::InfoIcon\n                              @content=\"Configure Testable to record a video of each test iteration.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}} m-t-5\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.recordVideos}} /> Capture Video Recording\n                        </label>\n                      </div>\n                    </div>\n                    <Scenario::DeviceDropdown\n                            @labelClasses={{this.labelClasses}}\n                            @deviceOptions={{this.deviceOptions}}\n                            @device={{this.device}}\n                            @showFullInfo={{@isRemote}}\n                            @disabled={{@readonly}}\n                            @onchange={{this.updateDevice}}\n                            @updateProperty={{this.updateProperty}}\n                            @saveAction={{fn this.save true}}\n                    />\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Screenshots <Ui::InfoIcon\n                              @content=\"Configure Testable to automatically capture screenshots. Note that you can also capture screenshots yourself in your code and they will be visible in the results.\"\n                              @placement=\"bottom\" /></label>\n                      <div class=\"{{this.inputClasses}} m-t-5 lh-2rem\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.autoScreenshots}} /> Capture a\n                        </label>\n                        <div class=\"inline-pselect\">\n                          <Ui::PSelect @options={{this.screenshotTypes}} @selected={{this.screenshotType}}\n                                    @disabled={{or (not this.autoScreenshots) @readonly}}\n                                    @onChange={{fn (mut this.screenshotType)}} as |option|>\n                            {{option}}\n                          </Ui::PSelect>\n                        </div> screenshot\n                        <div class=\"inline-pselect\">\n                          <Ui::PSelect @options={{this.screenshotTriggers}} @selected={{this.screenshotTrigger}}\n                                    @disabled={{or (not this.autoScreenshots) @readonly}}\n                                    @onChange={{fn (mut this.screenshotTrigger)}} as |option|>\n                            {{option.name}}\n                          </Ui::PSelect>\n                        </div>\n                      </div>\n                      <div class=\"{{this.inputClasses}} m-t-5\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.autoSendScreenshots}} /> Capture all screenshot requests into the results\n                          <Ui::InfoIcon\n                              @content=\"Whether or not to automatically capture the response from every Selenium screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\"\n                              @placement=\"bottom\" />\n                        </label>\n                      </div>\n                    </div>\n  \n                    {{#if (or (eq this.bindings \"protractor\") (eq this.bindings 'wdio') (eq this.bindings 'javascript') )}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">NPM Settings</label>\n                        <div class=\"{{this.inputClasses}} m-t-5\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.noPackageLock}} />\n                            Ignore package-lock.json on npm install (--no-package-lock)\n                          </label>\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                    {{#if (or\n                                  (eq this.framework 'TestNG')\n                                  (eq this.framework 'JUnit')\n                                  (eq this.framework 'Mocha')\n                                  (eq this.bindings 'wdio')\n                          )\n                    }}\n                      <div class=\"form-group\">\n                        <label>Test Reporting Filters </label>\n                        {{#if (or (eq this.framework 'TestNG') (eq this.framework 'JUnit') )}}\n                          <Ui::InfoIcon\n                                  @content=\"Specify a comma separated list of tests to filter out of the assertion reporting into the\n                            Testable test results. Filters should be specified as a comma separated list of regular expressions\n                            (e.g. .*testMyServer.*) that will be compared against each test method using the format\n                            [test-class].[test-method] (e.g. MyTestClass.testAbc). Alternatively mark your test methods with the\n                            annotation @TestableIgnoreForReporting by importing testable-selenium-java.\"\n                                  @isHtml={{true}}\n                                  @placement=\"bottom\"/>\n                        {{else if (or (eq this.framework 'Mocha') (eq this.bindings 'wdio'))}}\n                          <Ui::InfoIcon\n                                  @content=\"Specify a comma separated list of tests to filter out of the assertion reporting into the\n                            Testable test results. Filters should be specified as a comma separated list of regular expressions\n                            (e.g. .*my test.*) that follow the format [suite].[test]. For\n                            describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\n                            regular expression against 'My suite.my test').\"\n                                  @isHtml={{true}}\n                                  @placement=\"bottom\"/>\n                        {{/if}}\n  \n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                  class=\"form-control\"\n                                  placeholder=\"Test Reporting Filters\"\n                                  @value={{this.skipTestableReporting}}\n                                  {{on \"change\" this.saveMetadataAction}} />\n                        </div>\n                      </div>\n  \n                      {{#if (or (eq this.framework 'TestNG') (eq this.framework 'Mocha') (eq this.bindings 'wdio'))}}\n                        <div class=\"form-group\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.skipTestReporting}}\n                              {{on \"change\" this.skipTestReportingUpdate}} />\n                            Do not report on skipped tests\n                          </label>\n                        </div>\n                      {{/if}}\n                    {{/if}}\n  \n                    {{#if (and (or (eq this.bindings 'javascript') (eq this.bindings 'wdio')) (eq this.framework 'Mocha'))}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Timeout (ms) <Ui::InfoIcon\n                                @content=\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\"\n                                @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"number\" class=\"form-control\" placeholder=\"Mocha timeout in milliseconds\"\n                                  @value={{this.mochaTimeout}} {{on \"change\" this.saveMetadataAction}} data-parsley-min=\"0\"\n                                  data-parsley-min-message=\"Timeout must be >= 0\" />\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Root Folder <Ui::InfoIcon\n                              @content=\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\"\n                              @placement=\"bottom\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\"\n                              class=\"form-control\"\n                              placeholder=\"\"\n                              @value={{this.rootFolder}}\n                              {{on \"change\" this.updateRootFolder}} />\n                      </div>\n                    </div>\n  \n                    {{#if (eq this.sourceType.id 'upload')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Url <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" />\n                        </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceRepositoryUrl}}\n                                {{on \"change\" this.saveMetadataAction}} />\n                        </div>\n                      </div>\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Source Repository Branch <Ui::InfoIcon\n                              @content=\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\"\n                              @placement=\"bottom\" />\n                        </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\"\n                                class=\"form-control\"\n                                placeholder=\"\"\n                                @value={{this.sourceBranch}}\n                                {{on \"change\" this.saveMetadataAction}} />\n                        </div>\n                      </div>\n                    {{/if}}\n                  </:content>\n  \n                </Yield.AdditionalWrapper>\n  \n                <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 1) \"id\"}}>\n                  <:title>{{get (get this.additionalWrappers 1) \"name\"}}</:title>\n                  <:content>\n                    <Forms::MaxDurationInput\n                            @labelClasses={{this.labelClasses}}\n                            @inputClasses={{this.inputClasses}}\n                            @value={{this.maxDuration}}\n                            @onChange={{this.updateMaxDuration}}\n                    />\n                    {{#if (eq this.framework 'Mocha')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">\n                          Additional Mocha Args\n                          <Ui::InfoIcon @content=\"Specify additional command line arguments to pass Mocha\"\n                                      @placement=\"bottom\" />\n                        </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\"\n                                  placeholder=\"Mocha Args\"\n                                  @value={{this.mochaArgs}} {{on \"change\" this.save}} />\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                    <Forms::ResourcePartsInput\n                            @labelClasses={{this.labelClasses}}\n                            @inputClasses={{this.inputClasses}}\n                            @overrideOrgDefault={{this.overrideOrgDefault}}\n                            @resourceNameMappings={{this.resourceNameMappings}}\n                            @resourceNameIgnoreNonMatch={{this.resourceNameIgnoreNonMatch}}\n                            @resourceParts={{this.resourceParts}}\n                            @onChange={{this.updateResourceParts}}\n                            @editable={{not @readonly}}\n                    />\n  \n                    {{#if (eq this.bindings 'wdio')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">\n                          Webdriver.io baseUrl\n                          <Ui::InfoIcon @content=\"shorten url command calls by setting a base url [string]\"\n                                      @placement=\"bottom\" />\n                        </label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\"\n                                  placeholder=\"Wdio baseUrl\"\n                                  @value={{this.wdioBaseUrl}} {{on \"change\" this.saveMetadataAction}} />\n                        </div>\n                      </div>\n  \n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Webdriver.io CLI Additional Args <Ui::InfoIcon\n                                @content=\"Additional commands arguments to pass the WDIO CLI (optional).\"\n                                @placement=\"bottom\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" placeholder=\"Wdio CLI args (e.g. --suite regression)\"\n                                  @value={{this.wdioCliArgs}} {{on \"change\" this.saveMetadataAction}} />\n                        </div>\n                      </div>\n                    {{/if}}\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Logs</label>\n                      <div class=\"{{this.inputClasses}} m-t-5\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.childLogs}} /> Capture logging from the {{#if (eq this.bindings 'wdio')}}\n                            Selenium, Webdriver.io, and NPM processes\n                          {{else if (eq this.bindings 'protractor')}}\n                            Selenium, Protractor, and NPM processes\n                          {{else if (eq this.bindings 'java')}}\n                            Selenium and Java processes\n                          {{else}}Selenium related processes{{/if}}\n                        </label>\n                      </div>\n                      <div class=\"{{this.inputClasses}} m-t-5\">\n                        <label class=\"normal\">\n                          <Input @type=\"checkbox\" @checked={{this.logCommands}} />\n                          Log each command into the test results log\n                          <Ui::InfoIcon\n                                  @content=\"Each Selenium command corresponds to a single request at the protocol level\"/>\n                        </label>\n                      </div>\n                    </div>\n  \n                    <fieldset disabled={{if (eq this.disableNetworkRequestProxy \"true\") \"disabled\"}}>\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">Network Request Metrics</label>\n                        <div class=\"{{this.inputClasses}} m-t-5\">\n                          <label class=\"normal\">\n                            <Input @type=\"checkbox\" @checked={{this.captureNetworkBody}} />\n                            Capture the body of each request/response (impacts performance).\n                            <Ui::InfoIcon @content=\"This toggle only applies for Webdriver.io v6+ as long as the browser is Chrome or Edge\" />\n                          </label>\n                        </div>\n  \n                        {{#if (eq this.disableNetworkRequestProxy \"true\")}}\n                          <div class=\"note note-info alert\">\n                            <span class=\"close float-end\" data-bs-dismiss=\"alert\">&times;</span>\n                            These metrics are captured via a MITM proxy which has been disabled across the organization\n                            <LinkTo @route=\"account.settings\">(Org Management => Settings)</LinkTo>\n                          </div>\n                        {{/if}}\n                        {{#if (not-eq this.bindings 'wdio') }}\n                          <div class=\"{{this.inputClasses}} m-t-5\">\n                            <label class=\"normal\">\n                              <Input @type=\"checkbox\" @checked={{this.proxyNetworkRequests}} /> Capture performance metrics for all network\n                              requests using a MITM proxy.\n                            </label>\n                          </div>\n                          <div class=\"{{this.inputClasses}} m-t-5\">\n                            <label class=\"normal\">\n                              <Input disabled={{not this.proxyNetworkRequests}} @type=\"checkbox\" @checked={{this.proxyWebSockets}} /> Capture\n                              performance metrics for websockets using a MITM proxy\n                            </label>\n                          </div>\n                        {{else}}\n  \n                            <div class=\"{{this.inputClasses}} m-t-5\">\n                            <label class=\"normal\">\n                              <Input @type=\"checkbox\" @checked={{this.proxyNetworkRequests}} />\n                                Capture performance metrics for all network requests\n                                <Ui::InfoIcon @content=\"Network request metrics are captured via Chrome DevTools for Webdriver.io v6+ as long as the browser is Chrome or Edge. In all other cases a MITM proxy is used.\" />\n  \n                            </label>\n                          </div>\n                          <div class=\"{{this.inputClasses}} m-t-5\">\n                            <label class=\"normal\">\n                              <Input disabled={{not this.proxyNetworkRequests}} @type=\"checkbox\" @checked={{this.proxyWebSockets}} />\n                              Capture performance metrics for websockets\n                              <Ui::InfoIcon @content=\"Websocket metrics are captured via a MITM proxy for Webdriver.io < v6 or Firefox\" />\n                            </label>\n                          </div>\n                        {{/if}}\n                      </div>\n                    </fieldset>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">\n                        Additional Setup Command\n                        <Ui::InfoIcon @content=\"Specify an additional shell command to run before your test starts\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                                placeholder=\"Additional Setup Command\"\n                                @value={{this.additionalSetupCommand}} {{on \"change\" this.saveMetadataAction}} />\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">\n                        Teardown Command\n                        <Ui::InfoIcon @content=\"Specify an shell command to run before after your test finishes\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                                placeholder=\"Teardown Command\"\n                                @value={{this.teardownCommand}} {{on \"change\" this.saveMetadataAction}} />\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">\n                        Selenium Command Timeout (ms)\n                        <Ui::InfoIcon @content=\"Number of milliseconds to wait on a Selenium command before considering it timed out.\" />\n                      </label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Input @type=\"text\" class=\"form-control\"\n                                placeholder=\"Selenium Command Timeout (ms)\"\n                                data-parsley-min=\"5000\"\n                                data-parsley-min-message=\"Timeout must be >= 5000 ms\"\n                                data-parsley-max=\"3600000\"\n                                data-parsley-max-message=\"Timeout must be <= 3600000 ms\"\n                                @value={{this.commandTimeoutMs}} {{on \"change\" this.saveMetadataAction}} />\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Runtime Requirements</label>\n                      <BsButtonGroup class=\"flex-wrap\" @value={{this.platform}} @type=\"radio\" @onChange={{fn (mut this.platform)}} as |bg|>\n                        <bg.button @type=\"success\" @value=\"\" @size=\"sm\">\n                          Any OS <Ui::InfoIcon @content=\"Runs on any available test runner regardless of OS\" /></bg.button>\n                        <bg.button @type=\"success\" @value=\"linux\" @size=\"sm\">Linux <Ui::InfoIcon\n                              @content=\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\" /></bg.button>\n                        <bg.button @type=\"success\" @value=\"win32\" @size=\"sm\">Windows <Ui::InfoIcon\n                              @content=\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\" /></bg.button>\n                      </BsButtonGroup>\n                    </div>\n  \n                    {{#if (eq this.bindings 'java')}}\n                      <div class=\"form-group\">\n                        <label class=\"{{this.labelClasses}}\">System Properties <Ui::InfoIcon\n                                @content=\"Additional system properties to pass Java. Example: -Dfoo=bar -Dabc=xyz\" /></label>\n                        <div class=\"{{this.inputClasses}}\">\n                          <Input @type=\"text\" class=\"form-control\" maxlength=\"2048\" placeholder=\"System Properties (e.g. -Dfoo=bar)\" @value={{this.systemProperties}} data-parsley-maxlength=\"2048\" data-parsley-maxlength-message=\"System properties cannot be longer than 2048 characters.\" data-parsley-java-props=\"-D\" {{on 'change' this.systemPropertiesChange}}\n                          />\n                        </div>\n                      </div>\n                    {{/if}}\n                  </:content>\n                </Yield.AdditionalWrapper>\n  \n                <Yield.AdditionalWrapper @id={{get (get this.additionalWrappers 2) \"id\"}}>\n                  <:title>{{get (get this.additionalWrappers 2) \"name\"}}</:title>\n                  <:content>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Selenium Standalone Version</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Ui::PSelect @options={{this.seleniumVersions}} @selected={{this.seleniumVersion}} @disabled={{@readonly}}\n                                  @onChange={{this.seleniumVersionChanged}} as |version|>\n                          {{version.name}}\n                        </Ui::PSelect>\n                      </div>\n                    </div>\n                    <div class=\"note note-info alert fade show m-t-10\">\n                      <p class=\"mb-0\">\n                        <strong>NOTE</strong>: browser version can be controlled directly in your Selenium code instead of from here. Use the browserVersion capability which\n                        supports a number (e.g. 120), relative version (e.g. Latest, Latest-1, etc), or Beta.\n                      </p>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Chrome Browser Version</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Ui::PSelect @options={{this.browserVersionsChrome}} @selected={{this.browserVersionsChromeSelected}} @disabled={{@script.readonly}}\n                                  @onChange={{this.chromeBrowserVersionChanged}} as |version|>\n                          {{version.version}}{{if version.beta \" (Beta)\"}}\n                        </Ui::PSelect>\n                      </div>\n                    </div>\n  \n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Firefox Browser Version</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Ui::PSelect @options={{this.browserVersionsFirefox}} @selected={{this.browserVersionsFirefoxSelected}} @disabled={{@script.readonly}}\n                                  @onChange={{this.firefoxBrowserVersionChanged}} as |version|>\n                          {{version.version}}{{if version.beta \" (Beta)\"}}\n                        </Ui::PSelect>\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label class=\"{{this.labelClasses}}\">Edge Browser Version</label>\n                      <div class=\"{{this.inputClasses}}\">\n                        <Ui::PSelect @options={{this.browserVersionsEdge}} @selected={{this.browserVersionsEdgeSelected}} @disabled={{@script.readonly}}\n                                  @onChange={{this.edgeBrowserVersionChanged}} as |version|>\n                          {{version.version}}{{if version.beta \" (Beta)\"}}\n                        </Ui::PSelect>\n                      </div>\n                    </div>\n                  </:content>\n                </Yield.AdditionalWrapper>\n                </Scenario::Ui::AdditionalPanelWrapper>\n              </Yield.AdditionalPanel>\n  \n              <Yield.VcsTab>\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Repository</label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Scenario::VcsSelect @repositoryId={{this.repositoryId}}\n                                @repositoryUrl={{this.repositoryUrl}}\n                                @readonly={{@readonly}}\n                                @repositorySelected={{this.repositoryChanged}} />\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <label class=\"{{this.labelClasses}}\">Branch</label>\n                  <div class=\"{{this.inputClasses}}\">\n                    <Input @type=\"text\" class=\"form-control\" placeholder=\"Branch\" @value={{this.branch}} {{on \"change\" this.saveMetadataAction}} />\n                  </div>\n                </div>\n              </Yield.VcsTab>\n          </Ui::FilesManager>\n        </:filesTab>\n  \n        <:runConsoleTab>\n          {{yield (hash Siblings=(component \"empty\"))}}\n        </:runConsoleTab>\n  \n      </Wrapper.LeftPanel>\n  \n    <Wrapper.RightPanel @activeTab={{this.activePanel}} @model={{@script}} @isRemote={{@isRemote}} @selectedPanel={{fn (mut this.selectedPanel)}}>\n      <:tagsTab></:tagsTab>\n      <:paramsTab></:paramsTab>\n      <:additionalTab></:additionalTab>\n    </Wrapper.RightPanel>\n  \n  </Scenario::Ui::EditorWrapper>\n  \n  \n  {{#if this.showCreateSpecModal}}\n    <CreateSpecModal @scriptId={{@script.id}}\n                     @contents={{this.specDefaultContents}}\n                     @created={{this.specCreated}}\n                     @modalClosed={{this.createSpecModalClosed}}\n                     @inputTitle={{concat \"Test Spec Name (*.\"\n                                          (if (eq this.bindings 'java')\n                                                'java'\n                                                 (if (eq this.language 'typescript') 'ts' 'js')\n                                          )\n                                \")\"\n                                  }}\n                     @inputPlaceholder={{concat \"Spec Name (*.\"\n                                              (if (eq this.bindings 'java')\n                                                    'java'\n                                                    (if (eq this.language 'typescript') 'ts' 'js')\n                                                )\n                                      \")\"\n                                  }}\n    />\n  {{/if}}\n  {{#if this.showRemoteModal}}\n    <RemoteConfiguratorModal @metadata={{@script.metadata}}\n                             @scriptType={{@script.scriptType}}\n                       @modalClosed={{this.remoteWizardModalClosed}} />\n  {{/if}}\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[28,[37,2],[[30,2]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"What is this?\\\"],[13],[1,\\\" This scenario was created from a remotely triggered test.\\\\n      Remote tests cannot be edited via Testable.\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"How can I run a similar test?\\\"],[13],[1,\\\" For help creating a similar remote test, please try\\\\n      our\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-primary btn-enabled\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"remoteWizardModalOpen\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"fa fa-copy \\\"],[12],[13],[1,\\\" Remote Test Configurator\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[8,[39,9],[[16,1,[29,[\\\"updateSeleniumScenarioForm\\\",[30,3]]]],[4,[38,12],[[30,0,[\\\"onDidInsert\\\"]]],null],[4,[38,13],[[30,0,[\\\"fromMetadata\\\"]],[30,0,[\\\"metadata\\\"]]],null],[4,[38,13],[[30,0,[\\\"onPrimarySpecUpdate\\\"]],[30,0,[\\\"primarySpec\\\"]]],null],[4,[38,13],[[30,0,[\\\"onUpdateDisplayedFiles\\\"]],[30,0,[\\\"sourceType\\\"]],[30,0,[\\\"runStyle\\\"]]],null],[4,[38,13],[[30,0,[\\\"onProxyNetworkRequestsChange\\\"]],[30,0,[\\\"proxyNetworkRequests\\\"]]],null],[4,[38,13],[[30,0,[\\\"onBindingsChange\\\"]],[30,0,[\\\"bindings\\\"]]],null],[4,[38,13],[[30,0,[\\\"onSaveRelatedUpdate\\\"]],[30,0,[\\\"proxyWebSockets\\\"]],[30,0,[\\\"captureNetworkBody\\\"]],[30,0,[\\\"noPackageLock\\\"]],[30,0,[\\\"proxyNetworkRequests\\\"]],[30,0,[\\\"childLogs\\\"]],[30,0,[\\\"logCommands\\\"]],[30,0,[\\\"platform\\\"]],[30,0,[\\\"recordVideos\\\"]],[30,0,[\\\"precompile\\\"]],[30,0,[\\\"autoScreenshots\\\"]],[30,0,[\\\"autoSendScreenshots\\\"]],[30,0,[\\\"screenshotType\\\"]],[30,0,[\\\"screenshotTrigger\\\"]]],null]],[[\\\"@model\\\",\\\"@onExpand\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\"],[[30,4],[28,[37,10],[[28,[37,11],[[30,0,[\\\"filesPanelExpanded\\\"]]],null]],null],[30,5],[30,6]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"    \\\"],[8,[30,7,[\\\"Filters\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Bindings\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"bindingsArray\\\"]],[30,0,[\\\"bindingObj\\\"]],\\\"Please select Bindings...\\\",[30,5],[30,0,[\\\"updateBindings\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Run Style \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Whether you plan to provide a WebdriverIO config file to run your test or a script that\\\\n                  uses webdriverio as a package\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"runStyles\\\"]],[30,0,[\\\"runStyleObj\\\"]],\\\"Please select Run Style...\\\",[30,5],[30,0,[\\\"updateRunStyle\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,9,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[9]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"javascript\\\"],null],[28,[37,1],[[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[28,[37,17],[[30,0,[\\\"runStyle\\\"]],\\\"script\\\"],null]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Framework\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[[[1,\\\"              \\\"],[8,[39,18],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Choose <code>None</code> if you want Testable to run a main class otherwise choose the\\\\n                  framework that needs to be used to execute your tests.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose whether any framework is used in your code.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"frameworks\\\"]],[30,0,[\\\"framework\\\"]],\\\"Please select Framework...\\\",[30,5],[30,0,[\\\"frameworkChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,10]],[1,\\\"\\\\n            \\\"]],[10]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[28,[37,2],[[28,[37,20],[[30,0,[\\\"bindings\\\"]]],null]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the source of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"sourceTypes\\\"]],[30,0,[\\\"sourceType\\\"]],\\\"Please select a source...\\\",[30,5],[30,0,[\\\"sourceTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,11,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[11]]]]],[1,\\\"\\\\n            \\\"],[8,[39,21],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a source type.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"canShowLanguageSelection\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Language \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Choose the language of the code that defines this scenario\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"languages\\\"]],[30,0,[\\\"languageObj\\\"]],\\\"Please select a Language...\\\",[30,5],[30,0,[\\\"updateLanguage\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,12,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[12]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[[[41,[28,[37,17],[[30,0,[\\\"runStyle\\\"]],\\\"file\\\"],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Webdriver.io Conf File\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Webdriver.io Configuration File\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"jsConfFile\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,[52,[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],\\\"Mocha Spec File\\\",\\\"Javascript Entrypoint File\\\"]],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[16,\\\"placeholder\\\",[52,[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],\\\"Mocha Spec File\\\",\\\"Javascript Entrypoint File\\\"]],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"jsCodeFile\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"protractor\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Protractor Conf File\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Webdriver.io Configuration File\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"jsConfFile\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[[[41,[28,[37,1],[[28,[37,17],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"None\\\"],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Main Class Name\\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Main class name\\\"],[16,\\\"disabled\\\",[30,5]],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select main class name.\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updatePrimarySpec\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"primarySpecName\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"javascript\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[1,[52,[28,[37,17],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"TypeScript\\\",\\\"JavaScript\\\"]],[1,\\\" Code File\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[16,\\\"placeholder\\\",[28,[37,22],[[52,[28,[37,17],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"TypeScript\\\",\\\"JavaScript\\\"],\\\" code file\\\"],null]],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updatePrimarySpec\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"primarySpecName\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]]],[]]]],[]]],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[28,[37,19],[[28,[37,17],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[28,[37,17],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"uploadZip\\\"],null]],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Build Tool\\\\n            \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Testable can run either Gradle or Maven to build and run your scenario.\\\\n                    If your project has a gradlew file (for Gradle) or a mvnw file (for Maven) we will use it,\\\\n                    otherwise the latest Gradle/Maven version installed on the test runner will be used.\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"buildTools\\\"]],[30,0,[\\\"buildToolObj\\\"]],\\\"Please select Build Tool...\\\",[30,5],[30,0,[\\\"updateBuildTool\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,13,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[13]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Build Args\\\\n            \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify which tasks each virtual user will execute on the test runners as well as any additional system properties\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[10,1],[14,0,\\\"input-group-text\\\"],[12],[1,[52,[28,[37,17],[[30,0,[\\\"buildTool\\\"]],\\\"maven\\\"],null],\\\"mvn\\\",\\\"gradle\\\"]],[13],[13],[1,\\\"\\\\n            \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Build Args\\\"],[16,\\\"disabled\\\",[30,5]],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"buildToolArgs\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"allowMultipleTestClasses\\\"]],[28,[37,23],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[28,[37,23],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"uploadZip\\\"],null]],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n            Test Classes\\\\n            \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Comma separated list of <code>JUnit</code> or <code>TestNG</code> fully qualified class names to execute\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Classes\\\"],[16,\\\"disabled\\\",[30,5]],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please provide test classes to run.\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"testClasses\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Java Version\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"javaVersions\\\"]],[30,0,[\\\"javaVersionSelected\\\"]],[30,5],[30,0,[\\\"javaVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,14,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[14]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Node Version\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"nodeVersions\\\"]],[30,0,[\\\"nodeVersionSelected\\\"]],[30,5],[30,0,[\\\"nodeVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,15,[\\\"name\\\"]]],[1,\\\"\\\\n            \\\"]],[15]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[30,7,[\\\"LeftPanel\\\"]],null,[[\\\"@isRemote\\\"],[[30,1]]],[[\\\"filesTab\\\",\\\"runConsoleTab\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,25],null,[[\\\"@showVcsTab\\\",\\\"@selectedPanel\\\",\\\"@onPanelChange\\\",\\\"@isRemote\\\",\\\"@templates\\\",\\\"@selectedTemplate\\\",\\\"@selectedFile\\\",\\\"@defaultFiles\\\",\\\"@defaultFileId\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"@model\\\",\\\"@language\\\",\\\"@filesPanelExpanded\\\",\\\"@onStoreUpdate\\\",\\\"@updateContent\\\"],[[28,[37,17],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"vcs\\\"],null],[30,0,[\\\"selectedPanel\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null],[30,1],[30,0,[\\\"specTemplateOptions\\\"]],[30,0,[\\\"specTemplateSelected\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedFile\\\"]]],null]],null],[30,0,[\\\"defaultFiles\\\"]],[30,0,[\\\"defaultFileIds\\\"]],[30,0,[\\\"createInitFiles\\\"]],[30,0,[\\\"enableGenerateExample\\\"]],[30,0,[\\\"generatingFiles\\\"]],[30,4],[30,0,[\\\"language\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[30,16],[30,17]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,18,[\\\"TagsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[18,28,[[28,[37,27],null,[[\\\"SidebarRightPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,18,[\\\"ParamsPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[39,29],null,[[\\\"@paramsConfig\\\",\\\"@uniqueId\\\",\\\"@readonly\\\",\\\"@isSaving\\\",\\\"@infoText\\\",\\\"@noteText\\\",\\\"@configChanged\\\"],[[30,4,[\\\"paramsConfig\\\"]],[30,3],[30,5],[30,19],\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters are accessible via environment variables in your Selenium code.\\\",[28,[37,22],[\\\"Scenarios can declare parameters for which they expect the test configuration to provide a value. Parameters can\\\\n                            be referenced in your code using environment variables. For example, parameter <strong>Abc</strong> is available\\\\n                            as the environment variable <strong>ABC</strong>\\\",[52,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],\\\" and system property\\\\n                            <strong>Abc</strong>.\\\",\\\".\\\"]],null],[30,0,[\\\"paramsConfigChangedAction\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,18,[\\\"AdditionalPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[39,30],null,[[\\\"@additionalWrappers\\\"],[[30,0,[\\\"additionalWrappers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,20,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],0],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,0,[\\\"canShowLanguageSelection\\\"]],[28,[37,17],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],[28,[37,23],[[30,0,[\\\"runStyle\\\"]],\\\"script\\\"],null]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Precompile \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"Run tsc in the working directory before starting\\\\n                          <a href='http://webdriver.io/' target='_blank'>Webdriver.io.</a>\\\\n                          Not needed if you are using a wdio.conf.ts file with auto-compile enabled.\\\",true]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"precompile\\\"]]]],null],[1,\\\" Compile to javascript before running scenario\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Video \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Configure Testable to record a video of each test iteration.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recordVideos\\\"]]]],null],[1,\\\" Capture Video Recording\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,34],null,[[\\\"@labelClasses\\\",\\\"@deviceOptions\\\",\\\"@device\\\",\\\"@showFullInfo\\\",\\\"@disabled\\\",\\\"@onchange\\\",\\\"@updateProperty\\\",\\\"@saveAction\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"deviceOptions\\\"]],[30,0,[\\\"device\\\"]],[30,1],[30,5],[30,0,[\\\"updateDevice\\\"]],[30,0,[\\\"updateProperty\\\"]],[28,[37,10],[[30,0,[\\\"save\\\"]],true],null]]],null],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Screenshots \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Configure Testable to automatically capture screenshots. Note that you can also capture screenshots yourself in your code and they will be visible in the results.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5 lh-2rem\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoScreenshots\\\"]]]],null],[1,\\\" Capture a\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"screenshotTypes\\\"]],[30,0,[\\\"screenshotType\\\"]],[28,[37,19],[[28,[37,2],[[30,0,[\\\"autoScreenshots\\\"]]],null],[30,5]],null],[28,[37,10],[[28,[37,11],[[30,0,[\\\"screenshotType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,21]],[1,\\\"\\\\n                        \\\"]],[21]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\" screenshot\\\\n                      \\\"],[10,0],[14,0,\\\"inline-pselect\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"screenshotTriggers\\\"]],[30,0,[\\\"screenshotTrigger\\\"]],[28,[37,19],[[28,[37,2],[[30,0,[\\\"autoScreenshots\\\"]]],null],[30,5]],null],[28,[37,10],[[28,[37,11],[[30,0,[\\\"screenshotTrigger\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[30,22,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"]],[22]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"autoSendScreenshots\\\"]]]],null],[1,\\\" Capture all screenshot requests into the results\\\\n                        \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Whether or not to automatically capture the response from every Selenium screenshot request into the results. If you are already writing your screenshots into the Testable output directory, you may want to disable this feature to avoid duplicated screenshots in the results.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"protractor\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"javascript\\\"],null]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"NPM Settings\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"noPackageLock\\\"]]]],null],[1,\\\"\\\\n                          Ignore package-lock.json on npm install (--no-package-lock)\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"TestNG\\\"],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"JUnit\\\"],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Reporting Filters \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"TestNG\\\"],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"JUnit\\\"],null]],null],[[[1,\\\"                        \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify a comma separated list of tests to filter out of the assertion reporting into the\\\\n                          Testable test results. Filters should be specified as a comma separated list of regular expressions\\\\n                          (e.g. .*testMyServer.*) that will be compared against each test method using the format\\\\n                          [test-class].[test-method] (e.g. MyTestClass.testAbc). Alternatively mark your test methods with the\\\\n                          annotation @TestableIgnoreForReporting by importing testable-selenium-java.\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null]],null],[[[1,\\\"                        \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[\\\"Specify a comma separated list of tests to filter out of the assertion reporting into the\\\\n                          Testable test results. Filters should be specified as a comma separated list of regular expressions\\\\n                          (e.g. .*my test.*) that follow the format [suite].[test]. For\\\\n                          describe('My suite', () => { it('my test', () => { ... })}) ... it will compare the\\\\n                          regular expression against 'My suite.my test').\\\",true,\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"]],[]],null]],[]]],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Test Reporting Filters\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"skipTestableReporting\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,19],[[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"TestNG\\\"],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null]],null],[[[1,\\\"                      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,21],[[4,[38,8],[\\\"change\\\",[30,0,[\\\"skipTestReportingUpdate\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"skipTestReporting\\\"]]]],null],[1,\\\"\\\\n                          Do not report on skipped tests\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[28,[37,19],[[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"javascript\\\"],null],[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null]],null],[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null]],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Timeout (ms) \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"How long Mocha can run before timing out. Defaults to 3600000 ms (1 hour)\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha timeout in milliseconds\\\"],[24,\\\"data-parsley-min\\\",\\\"0\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Timeout must be >= 0\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"mochaTimeout\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Root Folder \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If your project files are in a sub-directory put the relative path here. By default the project will run from the top level folder of your scenario.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"updateRootFolder\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"rootFolder\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"sourceType\\\",\\\"id\\\"]],\\\"upload\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Url \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceRepositoryUrl\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Source Repository Branch \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"If you choose to upload your code to Testable you can optionally track which repository and branch it came from. Testable will then track test run stats for each repository. You can also search for test runs by repository url and/or branch.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"sourceBranch\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,20,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],1],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                  \\\"],[8,[39,35],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"maxDuration\\\"]],[30,0,[\\\"updateMaxDuration\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"framework\\\"]],\\\"Mocha\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                        Additional Mocha Args\\\\n                        \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Specify additional command line arguments to pass Mocha\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Mocha Args\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"save\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"mochaArgs\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[8,[39,36],null,[[\\\"@labelClasses\\\",\\\"@inputClasses\\\",\\\"@overrideOrgDefault\\\",\\\"@resourceNameMappings\\\",\\\"@resourceNameIgnoreNonMatch\\\",\\\"@resourceParts\\\",\\\"@onChange\\\",\\\"@editable\\\"],[[30,0,[\\\"labelClasses\\\"]],[30,0,[\\\"inputClasses\\\"]],[30,0,[\\\"overrideOrgDefault\\\"]],[30,0,[\\\"resourceNameMappings\\\"]],[30,0,[\\\"resourceNameIgnoreNonMatch\\\"]],[30,0,[\\\"resourceParts\\\"]],[30,0,[\\\"updateResourceParts\\\"]],[28,[37,2],[[30,5]],null]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                        Webdriver.io baseUrl\\\\n                        \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"shorten url command calls by setting a base url [string]\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Wdio baseUrl\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"wdioBaseUrl\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Webdriver.io CLI Additional Args \\\"],[8,[39,18],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Additional commands arguments to pass the WDIO CLI (optional).\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Wdio CLI args (e.g. --suite regression)\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"wdioCliArgs\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Logs\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"childLogs\\\"]]]],null],[1,\\\" Capture logging from the \\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[[[1,\\\"\\\\n                          Selenium, Webdriver.io, and NPM processes\\\\n\\\"]],[]],[[[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"protractor\\\"],null],[[[1,\\\"                          Selenium, Protractor, and NPM processes\\\\n\\\"]],[]],[[[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[[[1,\\\"                          Selenium and Java processes\\\\n                        \\\"]],[]],[[[1,\\\"Selenium related processes\\\"]],[]]]],[]]]],[]]],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"logCommands\\\"]]]],null],[1,\\\"\\\\n                        Log each command into the test results log\\\\n                        \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Each Selenium command corresponds to a single request at the protocol level\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[52,[28,[37,17],[[30,0,[\\\"disableNetworkRequestProxy\\\"]],\\\"true\\\"],null],\\\"disabled\\\"]],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Network Request Metrics\\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                          \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"captureNetworkBody\\\"]]]],null],[1,\\\"\\\\n                          Capture the body of each request/response (impacts performance).\\\\n                          \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"This toggle only applies for Webdriver.io v6+ as long as the browser is Chrome or Edge\\\"]],null],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"disableNetworkRequestProxy\\\"]],\\\"true\\\"],null],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"note note-info alert\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,1],[14,0,\\\"close float-end\\\"],[14,\\\"data-bs-dismiss\\\",\\\"alert\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n                          These metrics are captured via a MITM proxy which has been disabled across the organization\\\\n                          \\\"],[8,[39,38],null,[[\\\"@route\\\"],[\\\"account.settings\\\"]],[[\\\"default\\\"],[[[[1,\\\"(Org Management => Settings)\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,23],[[30,0,[\\\"bindings\\\"]],\\\"wdio\\\"],null],[[[1,\\\"                        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"proxyNetworkRequests\\\"]]]],null],[1,\\\" Capture performance metrics for all network\\\\n                            requests using a MITM proxy.\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,21],[[16,\\\"disabled\\\",[28,[37,2],[[30,0,[\\\"proxyNetworkRequests\\\"]]],null]]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"proxyWebSockets\\\"]]]],null],[1,\\\" Capture\\\\n                            performance metrics for websockets using a MITM proxy\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"\\\\n                          \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,21],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"proxyNetworkRequests\\\"]]]],null],[1,\\\"\\\\n                              Capture performance metrics for all network requests\\\\n                              \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Network request metrics are captured via Chrome DevTools for Webdriver.io v6+ as long as the browser is Chrome or Edge. In all other cases a MITM proxy is used.\\\"]],null],[1,\\\"\\\\n\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                        \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]],\\\" m-t-5\\\"]]],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,21],[[16,\\\"disabled\\\",[28,[37,2],[[30,0,[\\\"proxyNetworkRequests\\\"]]],null]]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"proxyWebSockets\\\"]]]],null],[1,\\\"\\\\n                            Capture performance metrics for websockets\\\\n                            \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Websocket metrics are captured via a MITM proxy for Webdriver.io < v6 or Firefox\\\"]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                      Additional Setup Command\\\\n                      \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Specify an additional shell command to run before your test starts\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Additional Setup Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"additionalSetupCommand\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                      Teardown Command\\\\n                      \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Specify an shell command to run before after your test finishes\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Teardown Command\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"teardownCommand\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"\\\\n                      Selenium Command Timeout (ms)\\\\n                      \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Number of milliseconds to wait on a Selenium command before considering it timed out.\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Selenium Command Timeout (ms)\\\"],[24,\\\"data-parsley-min\\\",\\\"5000\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Timeout must be >= 5000 ms\\\"],[24,\\\"data-parsley-max\\\",\\\"3600000\\\"],[24,\\\"data-parsley-max-message\\\",\\\"Timeout must be <= 3600000 ms\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"commandTimeoutMs\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Runtime Requirements\\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,39],[[24,0,\\\"flex-wrap\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"platform\\\"]],\\\"radio\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"platform\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,23,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        Any OS \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Runs on any available test runner regardless of OS\\\"]],null]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,23,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"linux\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Linux \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Run in a Docker container that uses a minimal Ubuntu 20.04 LTS as the base system (ubuntu:20.04)\\\"]],null]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,23,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"win32\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Windows \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Run on a Microsoft Windows 2016 Datacenter edition with Containers EC2 instance\\\"]],null]],[]]]]],[1,\\\"\\\\n                    \\\"]],[23]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"System Properties \\\"],[8,[39,18],null,[[\\\"@content\\\"],[\\\"Additional system properties to pass Java. Example: -Dfoo=bar -Dabc=xyz\\\"]],null],[13],[1,\\\"\\\\n                      \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                        \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"maxlength\\\",\\\"2048\\\"],[24,\\\"placeholder\\\",\\\"System Properties (e.g. -Dfoo=bar)\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"2048\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"System properties cannot be longer than 2048 characters.\\\"],[24,\\\"data-parsley-java-props\\\",\\\"-D\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"systemPropertiesChange\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"systemProperties\\\"]]]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,20,[\\\"AdditionalWrapper\\\"]],null,[[\\\"@id\\\"],[[28,[37,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"id\\\"],null]]],[[\\\"title\\\",\\\"content\\\"],[[[[1,[28,[35,31],[[28,[37,31],[[30,0,[\\\"additionalWrappers\\\"]],2],null],\\\"name\\\"],null]]],[]],[[[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Selenium Standalone Version\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"seleniumVersions\\\"]],[30,0,[\\\"seleniumVersion\\\"]],[30,5],[30,0,[\\\"seleniumVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[1,[30,24,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"]],[24]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"note note-info alert fade show m-t-10\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,2],[14,0,\\\"mb-0\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"NOTE\\\"],[13],[1,\\\": browser version can be controlled directly in your Selenium code instead of from here. Use the browserVersion capability which\\\\n                      supports a number (e.g. 120), relative version (e.g. Latest, Latest-1, etc), or Beta.\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Chrome Browser Version\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"browserVersionsChrome\\\"]],[30,0,[\\\"browserVersionsChromeSelected\\\"]],[30,4,[\\\"readonly\\\"]],[30,0,[\\\"chromeBrowserVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[1,[30,25,[\\\"version\\\"]]],[1,[52,[30,25,[\\\"beta\\\"]],\\\" (Beta)\\\"]],[1,\\\"\\\\n                      \\\"]],[25]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Firefox Browser Version\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"browserVersionsFirefox\\\"]],[30,0,[\\\"browserVersionsFirefoxSelected\\\"]],[30,4,[\\\"readonly\\\"]],[30,0,[\\\"firefoxBrowserVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[1,[30,26,[\\\"version\\\"]]],[1,[52,[30,26,[\\\"beta\\\"]],\\\" (Beta)\\\"]],[1,\\\"\\\\n                      \\\"]],[26]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Edge Browser Version\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"browserVersionsEdge\\\"]],[30,0,[\\\"browserVersionsEdgeSelected\\\"]],[30,4,[\\\"readonly\\\"]],[30,0,[\\\"edgeBrowserVersionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[1,[30,27,[\\\"version\\\"]]],[1,[52,[30,27,[\\\"beta\\\"]],\\\" (Beta)\\\"]],[1,\\\"\\\\n                      \\\"]],[27]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[20]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,18,[\\\"VcsTab\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Repository\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,40],null,[[\\\"@repositoryId\\\",\\\"@repositoryUrl\\\",\\\"@readonly\\\",\\\"@repositorySelected\\\"],[[30,0,[\\\"repositoryId\\\"]],[30,0,[\\\"repositoryUrl\\\"]],[30,5],[30,0,[\\\"repositoryChanged\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[15,0,[29,[[30,0,[\\\"labelClasses\\\"]]]]],[12],[1,\\\"Branch\\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[15,0,[29,[[30,0,[\\\"inputClasses\\\"]]]]],[12],[1,\\\"\\\\n                  \\\"],[8,[39,21],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Branch\\\"],[4,[38,8],[\\\"change\\\",[30,0,[\\\"saveMetadataAction\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[18]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[18,28,[[28,[37,27],null,[[\\\"Siblings\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[30,7,[\\\"RightPanel\\\"]],null,[[\\\"@activeTab\\\",\\\"@model\\\",\\\"@isRemote\\\",\\\"@selectedPanel\\\"],[[30,0,[\\\"activePanel\\\"]],[30,4],[30,1],[28,[37,10],[[28,[37,11],[[30,0,[\\\"selectedPanel\\\"]]],null]],null]]],[[\\\"tagsTab\\\",\\\"paramsTab\\\",\\\"additionalTab\\\"],[[[],[]],[[],[]],[[],[]]]]],[1,\\\"\\\\n\\\\n\\\"]],[7]]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateSpecModal\\\"]],[[[1,\\\"  \\\"],[8,[39,45],null,[[\\\"@scriptId\\\",\\\"@contents\\\",\\\"@created\\\",\\\"@modalClosed\\\",\\\"@inputTitle\\\",\\\"@inputPlaceholder\\\"],[[30,4,[\\\"id\\\"]],[30,0,[\\\"specDefaultContents\\\"]],[30,0,[\\\"specCreated\\\"]],[30,0,[\\\"createSpecModalClosed\\\"]],[28,[37,22],[\\\"Test Spec Name (*.\\\",[52,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],\\\"java\\\",[52,[28,[37,17],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"]],\\\")\\\"],null],[28,[37,22],[\\\"Spec Name (*.\\\",[52,[28,[37,17],[[30,0,[\\\"bindings\\\"]],\\\"java\\\"],null],\\\"java\\\",[52,[28,[37,17],[[30,0,[\\\"language\\\"]],\\\"typescript\\\"],null],\\\"ts\\\",\\\"js\\\"]],\\\")\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showRemoteModal\\\"]],[[[1,\\\"  \\\"],[8,[39,46],null,[[\\\"@metadata\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,4,[\\\"metadata\\\"]],[30,4,[\\\"scriptType\\\"]],[30,0,[\\\"remoteWizardModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[\\\"@isRemote\\\",\\\"@embeddedInExecution\\\",\\\"@uniqueId\\\",\\\"@script\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"Wrapper\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"version\\\",\\\"version\\\",\\\"@onStoreUpdate\\\",\\\"@saveCode\\\",\\\"Yield\\\",\\\"@isSaving\\\",\\\"Yield\\\",\\\"option\\\",\\\"option\\\",\\\"bg\\\",\\\"version\\\",\\\"version\\\",\\\"version\\\",\\\"version\\\",\\\"&default\\\"],[\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"div\\\",\\\"span\\\",\\\"p\\\",\\\"strong\\\",\\\"a\\\",\\\"on\\\",\\\"scenario/ui/editor-wrapper\\\",\\\"fn\\\",\\\"mut\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"unless\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"eq\\\",\\\"ui/info-icon\\\",\\\"or\\\",\\\"is-empty\\\",\\\"input\\\",\\\"concat\\\",\\\"not-eq\\\",\\\":filesTab\\\",\\\"ui/files-manager\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"scenario/params-config-editor\\\",\\\"scenario/ui/additional-panel-wrapper\\\",\\\"get\\\",\\\":title\\\",\\\":content\\\",\\\"scenario/device-dropdown\\\",\\\"forms/max-duration-input\\\",\\\"forms/resource-parts-input\\\",\\\"fieldset\\\",\\\"link-to\\\",\\\"bs-button-group\\\",\\\"scenario/vcs-select\\\",\\\":runConsoleTab\\\",\\\":tagsTab\\\",\\\":paramsTab\\\",\\\":additionalTab\\\",\\\"create-spec-modal\\\",\\\"remote-configurator-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/selenium.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultSeleniumVersion = _environment.config.defaultSeleniumVersion;\n  const DefaultProtectorVersion = '3.141.59';\n  const CreatePrimarySpecOption = 'Create new test spec...';\n  const JsSourceTypes = [{\n    id: 'upload',\n    name: 'Upload'\n  }, {\n    id: 'vcs',\n    name: 'Version Control'\n  }];\n  const SerenitySourceTypes = [{\n    id: 'uploadZip',\n    name: 'Upload Source'\n  }, {\n    id: 'vcs',\n    name: 'Build from Version Control'\n  }];\n  const WdioBinding = 'wdio';\n  const ProtractorBinding = 'protractor';\n  const JavaBinding = 'java';\n  const JsBinding = 'javascript';\n  const JavaFrameworks = ['None', 'Serenity', 'JUnit', 'TestNG'];\n  const JsFrameworks = ['None', 'Mocha'];\n  let ScenarioSelenium = _exports.default = (_class = class ScenarioSelenium extends _component2.default {\n    get activePanel() {\n      return this.selectedPanel ? this.selectedPanel.split('-')[0] : '';\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"jsSourceTypes\", JsSourceTypes);\n      _initializerDefineProperty(this, \"buildTool\", _descriptor2, this);\n      _initializerDefineProperty(this, \"buildToolArgs\", _descriptor3, this);\n      _initializerDefineProperty(this, \"skipTestableReporting\", _descriptor4, this);\n      _initializerDefineProperty(this, \"skipTestReporting\", _descriptor5, this);\n      _initializerDefineProperty(this, \"resourceParts\", _descriptor6, this);\n      _initializerDefineProperty(this, \"resourceNameMappings\", _descriptor7, this);\n      _initializerDefineProperty(this, \"resourceNameIgnoreNonMatch\", _descriptor8, this);\n      _defineProperty(this, \"labelClasses\", \"\");\n      _defineProperty(this, \"inputClasses\", \"\");\n      _initializerDefineProperty(this, \"activeSave\", _descriptor9, this);\n      _initializerDefineProperty(this, \"showNote\", _descriptor0, this);\n      _initializerDefineProperty(this, \"jsConf\", _descriptor1, this);\n      _initializerDefineProperty(this, \"packageJson\", _descriptor10, this);\n      _initializerDefineProperty(this, \"rootFolder\", _descriptor11, this);\n      _initializerDefineProperty(this, \"testClasses\", _descriptor12, this);\n      _initializerDefineProperty(this, \"defaultDevice\", _descriptor13, this);\n      _initializerDefineProperty(this, \"deviceList\", _descriptor14, this);\n      _initializerDefineProperty(this, \"mochaTimeout\", _descriptor15, this);\n      _defineProperty(this, \"screenshotTypes\", ['browser', 'desktop']);\n      _initializerDefineProperty(this, \"runStyle\", _descriptor16, this);\n      _defineProperty(this, \"nodeVersions\", _environment.config.nodeVersions);\n      _defineProperty(this, \"javaVersions\", _environment.config.javaVersions);\n      _defineProperty(this, \"disableNetworkRequestProxy\", _environment.config.currentUser?.org?.settings?.disableNetworkRequestProxy);\n      _initializerDefineProperty(this, \"language\", _descriptor17, this);\n      _initializerDefineProperty(this, \"bindings\", _descriptor18, this);\n      _initializerDefineProperty(this, \"sourceType\", _descriptor19, this);\n      _initializerDefineProperty(this, \"framework\", _descriptor20, this);\n      _initializerDefineProperty(this, \"seleniumVersion\", _descriptor21, this);\n      _initializerDefineProperty(this, \"nodeVersionSelected\", _descriptor22, this);\n      _initializerDefineProperty(this, \"javaVersionSelected\", _descriptor23, this);\n      _initializerDefineProperty(this, \"jsConfFile\", _descriptor24, this);\n      _initializerDefineProperty(this, \"jsCodeFile\", _descriptor25, this);\n      _initializerDefineProperty(this, \"primarySpecName\", _descriptor26, this);\n      _initializerDefineProperty(this, \"repositoryId\", _descriptor27, this);\n      _initializerDefineProperty(this, \"repositoryUrl\", _descriptor28, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor29, this);\n      _initializerDefineProperty(this, \"sourceRepositoryUrl\", _descriptor30, this);\n      _initializerDefineProperty(this, \"sourceBranch\", _descriptor31, this);\n      _initializerDefineProperty(this, \"childLogs\", _descriptor32, this);\n      _initializerDefineProperty(this, \"logCommands\", _descriptor33, this);\n      _initializerDefineProperty(this, \"proxyNetworkRequests\", _descriptor34, this);\n      _initializerDefineProperty(this, \"proxyWebSockets\", _descriptor35, this);\n      _initializerDefineProperty(this, \"captureNetworkBody\", _descriptor36, this);\n      _initializerDefineProperty(this, \"noPackageLock\", _descriptor37, this);\n      _initializerDefineProperty(this, \"platform\", _descriptor38, this);\n      _initializerDefineProperty(this, \"autoScreenshots\", _descriptor39, this);\n      _initializerDefineProperty(this, \"autoSendScreenshots\", _descriptor40, this);\n      _initializerDefineProperty(this, \"recordVideos\", _descriptor41, this);\n      _initializerDefineProperty(this, \"precompile\", _descriptor42, this);\n      _initializerDefineProperty(this, \"screenshotType\", _descriptor43, this);\n      _initializerDefineProperty(this, \"screenshotTrigger\", _descriptor44, this);\n      _initializerDefineProperty(this, \"additionalSetupCommand\", _descriptor45, this);\n      _initializerDefineProperty(this, \"teardownCommand\", _descriptor46, this);\n      _initializerDefineProperty(this, \"chromedriverOnly\", _descriptor47, this);\n      _initializerDefineProperty(this, \"commandTimeoutMs\", _descriptor48, this);\n      _initializerDefineProperty(this, \"maxDuration\", _descriptor49, this);\n      _initializerDefineProperty(this, \"overrideOrgDefault\", _descriptor50, this);\n      _initializerDefineProperty(this, \"systemProperties\", _descriptor51, this);\n      _initializerDefineProperty(this, \"device\", _descriptor52, this);\n      _initializerDefineProperty(this, \"isInit\", _descriptor53, this);\n      _initializerDefineProperty(this, \"showCreateSpecModal\", _descriptor54, this);\n      _initializerDefineProperty(this, \"showRemoteModal\", _descriptor55, this);\n      _initializerDefineProperty(this, \"enableGenerateExample\", _descriptor56, this);\n      _initializerDefineProperty(this, \"generatingFiles\", _descriptor57, this);\n      _initializerDefineProperty(this, \"selectedFile\", _descriptor58, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor59, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor60, this);\n      _initializerDefineProperty(this, \"availableBrowsersList\", _descriptor61, this);\n      _initializerDefineProperty(this, \"browserVersionsChrome\", _descriptor62, this);\n      _initializerDefineProperty(this, \"browserVersionsFirefox\", _descriptor63, this);\n      _initializerDefineProperty(this, \"browserVersionsEdge\", _descriptor64, this);\n      _initializerDefineProperty(this, \"browserVersionsChromeSelected\", _descriptor65, this);\n      _initializerDefineProperty(this, \"browserVersionsFirefoxSelected\", _descriptor66, this);\n      _initializerDefineProperty(this, \"browserVersionsEdgeSelected\", _descriptor67, this);\n      _initializerDefineProperty(this, \"wdioCliArgs\", _descriptor68, this);\n      _initializerDefineProperty(this, \"wdioBaseUrl\", _descriptor69, this);\n      _initializerDefineProperty(this, \"mochaArgs\", _descriptor70, this);\n      _defineProperty(this, \"buildToolDefaults\", ['exec:java -Dexec.mainClass=\"com.acme.MyTestClass\"', 'run', 'clean test', 'clean verify']);\n      _defineProperty(this, \"bindingsArray\", [{\n        value: 'wdio',\n        name: 'Webdriver.io'\n      }, {\n        value: 'protractor',\n        name: 'Protractor'\n      }, {\n        value: 'java',\n        name: 'Selenium Java'\n      }, {\n        value: 'javascript',\n        name: 'Selenium Javascript'\n      }]);\n      _defineProperty(this, \"additionalWrappers\", [{\n        id: 'general',\n        name: 'General'\n      }, {\n        id: 'advanced',\n        name: 'Advanced'\n      }, {\n        id: 'versions',\n        name: 'Versions'\n      }]);\n      _defineProperty(this, \"runStyles\", [{\n        value: 'file',\n        name: 'Conf File'\n      }, {\n        value: 'script',\n        name: 'Script'\n      }]);\n      _defineProperty(this, \"languages\", [{\n        value: 'javascript',\n        name: 'JavaScript'\n      }, {\n        value: 'typescript',\n        name: 'TypeScript'\n      }]);\n      _defineProperty(this, \"buildTools\", [{\n        value: 'maven',\n        name: 'Maven'\n      }, {\n        value: 'gradle',\n        name: 'Gradle'\n      }]);\n      this.fromMetadata();\n      this.onPrimarySpecUpdate();\n    }\n    get deviceOptions() {\n      if (!this.deviceList) return;\n      return this.deviceList;\n    }\n    get bindingObj() {\n      return this.bindingsArray.find(ba => this.bindings === ba.value);\n    }\n    get seleniumVersions() {\n      return _environment.config.seleniumVersions.filter(sv => this.bindings === ProtractorBinding && sv.id !== '4.x' || this.bindings !== ProtractorBinding);\n    }\n    get runStyleObj() {\n      return this.runStyles.find(ba => this.runStyle === ba.value);\n    }\n    get languageObj() {\n      return this.languages.find(ba => this.language === ba.value);\n    }\n    get buildToolObj() {\n      return this.buildTools.find(ba => this.buildTool === ba.value);\n    }\n    get defaultFiles() {\n      if (this.args.isRemote) {\n        return [{\n          id: 'capabilities',\n          type: 'capabilities',\n          name: 'Capabilities',\n          path: 'capabilities',\n          readonly: true,\n          isFolder: false,\n          fileType: 'system',\n          isStatic: true,\n          code: JSON.stringify(this.args.script?.metadata?.capabilities, null, 2)\n        }];\n      } else {\n        return this.noteDetails();\n      }\n    }\n    get screenshotTriggers() {\n      let options = [];\n      options.push({\n        id: 'afterFailure',\n        name: 'after failed commands'\n      });\n      options.push({\n        id: 'always',\n        name: 'after every command'\n      });\n      const bindings = this.bindings;\n      if (bindings === 'wdio' || bindings === 'protractor' || bindings === 'javascript' && this.framework === 'Mocha') {\n        options.push({\n          id: 'afterFailed',\n          name: 'after failed test steps'\n        });\n        options.push({\n          id: 'afterEvery',\n          name: 'after every test step'\n        });\n      }\n      return options;\n    }\n    get isJunitOrTestNG() {\n      return this.framework === 'JUnit' || this.framework === 'TestNG';\n    }\n    get javaSourceTypes() {\n      let uploadTitle = 'Create/Edit/Upload *.java File(s)' + (!this.isJunitOrTestNG ? ' + Specify Main Class' : ' + Specify Test Classes');\n      let uploadZipTitle = 'Upload Source';\n      if (this.bindings === 'java') {\n        uploadTitle = 'Upload and Compile';\n        uploadZipTitle = 'Upload and Build (Maven/Gradle)';\n      }\n      return [{\n        id: 'uploadExecutable',\n        name: 'Upload Executable Jar'\n      }, {\n        id: 'upload',\n        name: uploadTitle\n      }, {\n        id: 'uploadZip',\n        name: uploadZipTitle\n      }, {\n        id: 'vcs',\n        name: 'Build from Version Control'\n      }];\n    }\n    get sourceTypes() {\n      const bindings = this.bindings;\n      const framework = this.framework;\n      if (bindings === WdioBinding || bindings === ProtractorBinding || bindings === JsBinding) {\n        return JsSourceTypes;\n      } else if (bindings === JavaBinding) {\n        switch (framework) {\n          case \"Serenity\":\n            return SerenitySourceTypes;\n          case \"JUnit\":\n          case \"TestNG\":\n          default:\n            return this.javaSourceTypes;\n        }\n      } else {\n        return [];\n      }\n    }\n    get frameworks() {\n      const bindings = this.bindings;\n      if (bindings === JavaBinding) {\n        return JavaFrameworks;\n      }\n      if (bindings === JsBinding || bindings === WdioBinding && this.runStyle === 'script') {\n        return JsFrameworks;\n      }\n      return [];\n    }\n    get specTemplateOptions() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      if (this.selectedFile?.path === '/wdio.conf.js') {\n        switch (this.getBindingId()) {\n          case 'protractor':\n            return langTs ? _protractorTemplatesTs.default.confOptions : _protractorTemplates.default.confOptions;\n          default:\n            return langTs ? _wdioTemplatesTs.default.confOptions : _wdioTemplates.default.confOptions;\n        }\n      }\n      switch (this.bindings) {\n        case WdioBinding:\n          return langTs ? _wdioTemplatesTs.default.specOptions : _wdioTemplates.default.specOptions(framework);\n        case ProtractorBinding:\n          return langTs ? _protractorTemplatesTs.default.specOptions : _protractorTemplates.default.specOptions;\n        case JavaBinding:\n          switch (framework) {\n            case 'None':\n              return _javaTemplates.default.seleniumOptions;\n            case 'JUnit':\n              return _javaTemplates.default.seleniumJunitOptions;\n            case 'TestNG':\n              return _javaTemplates.default.seleniumTestNGOptions;\n          }\n          break;\n        case JsBinding:\n          return framework === 'Mocha' ? langTs ? _mochaTemplatesTs.default.specOptions : _mochaTemplates.default.specOptions : langTs ? _tsTemplates.default.specOptions : _jsTemplates.default.specOptions;\n      }\n      return undefined;\n    }\n    get specTemplates() {\n      const framework = this.framework;\n      const langTs = this.language === 'typescript';\n      switch (this.bindings) {\n        case WdioBinding:\n          return langTs ? _wdioTemplatesTs.default.spec : _wdioTemplates.default.spec;\n        case ProtractorBinding:\n          return langTs ? _protractorTemplatesTs.default.spec : _protractorTemplates.default.spec;\n        case JavaBinding:\n          return framework === 'TestNG' ? _javaTemplates.default.seleniumTestNG : framework === 'JUnit' ? _javaTemplates.default.seleniumJunit : _javaTemplates.default.selenium;\n        case JsBinding:\n          return framework === 'Mocha' ? langTs ? _mochaTemplatesTs.default.spec : _mochaTemplates.default.spec : langTs ? _tsTemplates.default.spec : _jsTemplates.default.spec;\n      }\n      return undefined;\n    }\n    get specDefaultContents() {\n      const langTs = this.language === 'typescript';\n      const framework = this.framework;\n      switch (this.getBindingId()) {\n        case 'protractor':\n          return langTs ? _protractorTemplatesTs.default.spec['skeleton'] : _protractorTemplates.default.spec['skeleton'];\n        case 'javascript':\n          return framework === 'Mocha' ? langTs ? _mochaTemplatesTs.default.spec['skeleton'] : _mochaTemplates.default.spec['skeleton'] : langTs ? _tsTemplates.default.spec['skeleton'] : _jsTemplates.default.spec['skeleton'];\n        default:\n          return langTs ? _wdioTemplatesTs.default.spec['skeleton'] : _wdioTemplates.default.spec['skeleton'];\n      }\n    }\n    get metadata() {\n      const metadata = this.args.script?.metadata;\n      return (0, _utils.isEmpty)(metadata) ? {} : metadata;\n    }\n    get primarySpec() {\n      const name = this.primarySpecName;\n      if (name) {\n        return _.find(this.args.script?.dataStores, ds => {\n          return ds.name === name;\n        });\n      }\n      return '';\n    }\n    get canShowLanguageSelection() {\n      return this.bindings === WdioBinding || this.bindings === ProtractorBinding || this.bindings === JsBinding;\n    }\n    get allowMultipleTestClasses() {\n      return this.bindings === 'java' && (this.framework === 'JUnit' || this.framework === 'TestNG');\n    }\n    get shouldEditFilesOnPage() {\n      return this.sourceType?.id === 'upload';\n    }\n    get defaultFileIds() {\n      const fileNames = [];\n      let fileIds = [];\n      const bindings = this.bindings;\n      const sourceTypeId = this.sourceType?.id;\n      if (this.args.script?.metadata?.bindings === 'remote') {\n        fileIds.push('capabilities');\n      } else {\n        switch (bindings) {\n          case 'wdio':\n            fileNames.push(this.runStyle === 'file' ? 'jsConfFile' : 'jsCodeFile');\n            break;\n          case 'protractor':\n            fileNames.push('jsConfFile');\n            break;\n          case 'java':\n            if (sourceTypeId === 'upload' && this.framework === 'None') fileNames.push('primarySpecName');\n            break;\n          case 'javascript':\n            fileNames.push('primarySpecName');\n            break;\n        }\n        fileIds = fileNames?.map(file => this[file])?.filter(name => name)?.map(name => {\n          const id = _.find(this.args.script?.dataStores, ds => ds.name === name)?.id;\n          return id ? id : null;\n        })?.filter(id => id);\n      }\n      return fileIds.length ? fileIds : this.defaultFiles.find(df => df.id === 'note')?.id;\n    }\n    getBindingId() {\n      return this.bindings || WdioBinding;\n    }\n    getDefaultConfFileName(bindings) {\n      if (bindings === ProtractorBinding) {\n        return this.language === 'typescript' ? 'conf.ts' : 'conf.js';\n      }\n      return this.language === 'typescript' ? 'wdio.conf.ts' : 'wdio.conf.js';\n    }\n    getDefaultCodeFileName() {\n      return this.language === 'typescript' ? 'test.ts' : 'test.js';\n    }\n    onPrimarySpecUpdate() {\n      if (this.args.script?.dataStores?.find(ds => ds.name === 'build.gradle')) {\n        this.buildTool = 'gradle';\n      }\n    }\n    onUpdateDisplayedFiles() {\n      this.enableGenerateExample = this.shouldEditFilesOnPage;\n    }\n    onProxyNetworkRequestsChange() {\n      if (!this.proxyNetworkRequests) {\n        this.proxyWebSockets = false;\n        this.captureNetworkBody = false;\n      } else {\n        this.proxyWebSockets = true;\n        this.captureNetworkBody = true;\n      }\n    }\n    onBindingsChange() {\n      if (!['protractor', 'wdio', 'javascript'].includes(this.bindings)) {\n        this.noPackageLock = false;\n      }\n    }\n    onSaveRelatedUpdate() {\n      this.saveMetadata();\n    }\n    onDidInsert(element) {\n      (0, _runloop.schedule)('afterRender', this, () => {\n        $(`#updateSeleniumScenarioForm${this.args.uniqueId}`).parsley().validate();\n      });\n    }\n    updateLanguage({\n      value\n    }) {\n      this.language = value;\n      this.saveMetadata();\n    }\n    seleniumVersionChanged(selection) {\n      this.seleniumVersion = selection;\n      this.saveMetadata();\n    }\n    nodeVersionChanged(selection) {\n      this.nodeVersionSelected = selection;\n      this.saveMetadata();\n    }\n    javaVersionChanged(selection) {\n      this.javaVersionSelected = selection;\n      this.saveMetadata();\n    }\n    chromeDriverVersionChanged(selection) {\n      this.chromeDriverVersion = selection;\n      this.saveMetadata();\n    }\n    updateRootFolder(event) {\n      let value = event.target?.value;\n      this.rootFolder = value;\n      this.saveMetadata();\n    }\n    specTemplateSelected(editor, selection) {\n      let content;\n      if (this.selectedFile?.path === '/wdio.conf.js') {\n        content = this.getConfTemplates()[selection.id];\n      } else {\n        const templates = this.specTemplates;\n        const {\n          framework,\n          runStyle\n        } = this;\n        let selectionId = selection.id;\n        if (selectionId === 'skeleton') {\n          if (runStyle === 'script' && framework === 'Mocha') {\n            selectionId = 'script';\n          } else if (runStyle === 'script' && framework === 'None') {\n            selectionId = 'skeletonCode';\n          } else {\n            selectionId = 'skeleton';\n          }\n        }\n        content = templates[selectionId];\n      }\n      editor.insert(content);\n    }\n    paramsConfigChangedAction(paramsConfig) {\n      this.args.paramsConfigChanged?.(paramsConfig);\n    }\n    saveMetadataAction() {\n      this.saveMetadata();\n    }\n    updateDevice(device) {\n      let oldDevice = this.device;\n      if (device.displaySize === 'custom' || device.displaySize === 'customDevice') {\n        device.width = oldDevice.width;\n        device.height = oldDevice.height;\n        if (device.type === 'device') {\n          device.scaleFactor = oldDevice.scaleFactor;\n          device.isMobile = oldDevice.isMobile;\n          device.isTouch = oldDevice.isTouch;\n          device.isLandscape = oldDevice.isLandscape;\n          device.userAgent = oldDevice.userAgent || '';\n        }\n      }\n      this.device = device;\n      this.saveMetadata(true);\n    }\n    updateBindings({\n      value\n    }) {\n      if (this.bindings === value) {\n        return;\n      }\n      this.bindings = value;\n      this.sourceType = null;\n      this.showNote = true;\n      this.framework = 'None';\n      const metadata = this.metadata;\n      delete metadata['confFileName'];\n      delete metadata['primarySpecName'];\n      this.setBindingSpecificDefaults(value, metadata);\n      this.saveMetadata();\n    }\n    frameworkChanged(framework) {\n      this.framework = framework;\n      this.setDefaultBuildArgs();\n      this.saveMetadata();\n    }\n    sourceTypeChanged(selection) {\n      (0, _runloop.later)(this, () => {\n        // re-validate the whole form, so all parley validations get attached\n        $(`#updateSeleniumScenarioForm${this.args.uniqueId}`).parsley().validate();\n      }, 250);\n      this.sourceType = selection;\n      this.setDefaultBuildArgs();\n      this.saveMetadata();\n    }\n    repositoryChanged(repository) {\n      if (repository) {\n        this.repositoryId = repository.id;\n        if (repository.branch) {\n          this.branch = repository.branch;\n        }\n        this.saveMetadata();\n      }\n    }\n    updatePrimarySpec(val) {\n      let value = val && val.target ? val.target.value : val;\n      if (value === CreatePrimarySpecOption) {\n        this.showCreateSpecModal = true;\n      } else if (value !== '') {\n        this.primarySpecName = value;\n        this.saveMetadata();\n      }\n    }\n    specCreated(ds) {\n      if (ds) {\n        this.args.dataStoreUpdate?.(null, ds);\n        this.primarySpecName = ds.name;\n        this.saveMetadata();\n      }\n    }\n    createSpecModalClosed() {\n      this.showCreateSpecModal = false;\n    }\n    chromeBrowserVersionChanged(selection) {\n      this.browserVersionsChromeSelected = selection;\n      this.saveMetadata();\n    }\n    firefoxBrowserVersionChanged(selection) {\n      this.browserVersionsFirefoxSelected = selection;\n      this.saveMetadata();\n    }\n    edgeBrowserVersionChanged(selection) {\n      this.browserVersionsEdgeSelected = selection;\n      this.saveMetadata();\n    }\n    updateProperty(prop, val) {\n      this.device = {\n        ...this.device,\n        [prop]: val\n      };\n      this.saveMetadata(true);\n    }\n    updateResourceParts(attributes) {\n      this.overrideOrgDefault = attributes.overrideOrgDefault;\n      this.resourceParts = attributes.resourceParts;\n      this.resourceNameMappings = attributes.resourceNameMappings;\n      this.resourceNameIgnoreNonMatch = attributes.resourceNameIgnoreNonMatch;\n      this.saveMetadata();\n    }\n    save(param) {\n      this.saveMetadata(param === true);\n    }\n    remoteWizardModalOpen() {\n      this.showRemoteModal = true;\n    }\n    remoteWizardModalClosed() {\n      this.showRemoteModal = false;\n    }\n    updateBuildTool({\n      value\n    }) {\n      this.buildTool = value;\n      this.setDefaultBuildArgs();\n      this.saveMetadata();\n    }\n    skipTestReportingUpdate(ckBox) {\n      this.skipTestReporting = ckBox.target.checked;\n      this.saveMetadata();\n    }\n    updateRunStyle({\n      value\n    }) {\n      this.runStyle = value;\n      this.saveMetadata();\n    }\n    systemPropertiesChange(val) {\n      let value = val.target.value;\n      if (!_.isEqual(value, _lib.default.javaPropertiesToString('-D', this.metadata?.systemProperties))) {\n        this.systemProperties = value;\n        this.saveMetadata();\n      }\n    }\n    updateMaxDuration(e) {\n      this.maxDuration = e.target.valueAsNumber;\n      this.saveMetadata();\n    }\n    async createInitFiles() {\n      const framework = this.framework;\n      switch (this.bindings) {\n        case WdioBinding:\n          await this.initWdioConfAndPackageFiles();\n          break;\n        case ProtractorBinding:\n          await this.initProtractorConfAndPackageFiles();\n          break;\n        case JavaBinding:\n          await this.initJavaTestFile();\n          break;\n        case JsBinding:\n          framework === 'Mocha' ? await this.initMochaPackageFile() : await this.initJsPackageFile();\n          break;\n      }\n      this.saveMetadata();\n    }\n    saveMetadata(forceSave = false) {\n      if (this.args.saveMetadata && !this.isInit && this.args.script?.metadata?.bindings !== 'remote') {\n        let metadata = this.toMetadata();\n        let origMetadata = this.args.script?.metadata;\n        const cleanMetadata = JSON.parse(JSON.stringify(metadata));\n        if (!_.isEqual(cleanMetadata, origMetadata) || forceSave) {\n          this.args.saveMetadata(cleanMetadata);\n        }\n      }\n    }\n    toMetadata() {\n      let metadata = {};\n      metadata.bindings = this.bindings;\n      metadata.sourceType = this.sourceType?.id;\n      if (metadata.bindings === WdioBinding) {\n        metadata.runStyle = this.runStyle;\n        if (this.runStyle === 'script' && this.language === 'typescript') {\n          metadata.precompile = this.precompile;\n        }\n      }\n      if (this.canShowLanguageSelection) {\n        metadata.language = this.language;\n      }\n      if (metadata.bindings === WdioBinding || metadata.bindings === ProtractorBinding) {\n        if (metadata.runStyle === 'script' && metadata.bindings === WdioBinding) {\n          metadata.primarySpec = this.jsCodeFile || this.getDefaultCodeFileName();\n        } else {\n          metadata.confFileName = this.jsConfFile || this.getDefaultConfFileName(metadata.bindings);\n        }\n      }\n      if (metadata.bindings === WdioBinding) {\n        metadata.wdioCliArgs = this.wdioCliArgs || '';\n        metadata.wdioBaseUrl = this.wdioBaseUrl || '';\n      }\n      if (this.framework) {\n        metadata.framework = this.framework;\n      }\n      if (metadata.bindings === JavaBinding) {\n        if (this.testClasses && metadata.framework !== 'None') {\n          metadata.testClasses = this.testClasses;\n        }\n        if (metadata.framework !== 'Serenity') {\n          if (!_.isUndefined(this.skipTestableReporting) && (metadata.framework === 'TestNG' || metadata.framework === 'JUnit')) {\n            metadata.skipTestableReporting = this.skipTestableReporting;\n          }\n          if (metadata.framework === 'TestNG') {\n            metadata.skipTestReporting = this.skipTestReporting || false;\n          }\n        }\n        if (metadata.sourceType === 'vcs' || metadata.sourceType === 'uploadZip') {\n          if (this.buildTool) metadata.buildTool = this.buildTool;\n          if (this.buildToolArgs) metadata.buildToolArgs = this.buildToolArgs;\n        }\n        metadata.systemProperties = _lib.default.splitJavaProperties('-D', this.systemProperties);\n      } else if (!_.isUndefined(this.skipTestableReporting) && (metadata.bindings === WdioBinding || metadata.bindings === JsBinding && metadata.framework === 'Mocha')) {\n        metadata.skipTestableReporting = this.skipTestableReporting;\n        metadata.skipTestReporting = this.skipTestReporting || false;\n      }\n      if (metadata.framework === 'Mocha') {\n        metadata.mochaArgs = this.mochaArgs;\n      }\n      if (metadata.sourceType === 'vcs') {\n        metadata.repositoryId = Number(this.repositoryId || -1);\n        if (this.branch) metadata.branch = this.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        metadata.sourceRepositoryUrl = this.sourceRepositoryUrl;\n        metadata.sourceBranch = this.sourceBranch;\n      }\n      metadata.seleniumVersion = this.seleniumVersion?.id;\n      metadata.nodeVersion = this.nodeVersionSelected?.id;\n      if (metadata.bindings === JavaBinding) {\n        metadata.javaVersion = this.javaVersionSelected?.id;\n      }\n      metadata.additionalSetupCommand = this.additionalSetupCommand;\n      metadata.teardownCommand = this.teardownCommand;\n      metadata.rootFolder = this.rootFolder;\n      if (this.device?.displaySize === 'custom' || this.device?.displaySize === 'customDevice') {\n        metadata.displaySize = `${this.device?.width}x${this.device?.height}x24`;\n      } else {\n        metadata.displaySize = typeof this.device === 'object' ? this.device?.displaySize : this.defaultDevice;\n      }\n      metadata.device = this.device;\n      metadata.mochaTimeout = this.mochaTimeout;\n      metadata.childLogs = this.childLogs;\n      metadata.logCommands = this.logCommands;\n      metadata.proxyWebSockets = this.proxyWebSockets;\n      metadata.proxyNetworkRequests = this.proxyNetworkRequests;\n      metadata.captureNetworkBody = this.captureNetworkBody;\n      metadata.noPackageLock = this.noPackageLock;\n      metadata.platform = this.platform;\n      if (this.sourceType?.id === 'upload' && this.primarySpecName && !metadata.primarySpec) {\n        metadata.primarySpec = this.primarySpecName;\n      }\n      metadata.binary = 'Standard';\n      metadata.autoScreenshots = this.autoScreenshots || false;\n      metadata.autoSendScreenshots = this.autoSendScreenshots || false;\n      metadata.recordVideos = this.recordVideos || false;\n      metadata.screenshotType = this.screenshotType;\n      metadata.chromedriverOnly = this.chromedriverOnly;\n      metadata.commandTimeoutMs = Math.min(Math.max(5000, this.commandTimeoutMs || 60000), 3600000);\n      if (this.screenshotTrigger?.id === 'afterFailure' || this.screenshotTrigger?.id === 'always') {\n        metadata.screenshots = this.screenshotTrigger?.id;\n      } else {\n        metadata.screenshotTrigger = this.screenshotTrigger?.id;\n      }\n      if (this.maxDuration) metadata.maxDuration = this.maxDuration;\n      metadata.browsers = {\n        chrome: this.browserVersionsChromeSelected?.version,\n        firefox: this.browserVersionsFirefoxSelected?.version,\n        edge: this.browserVersionsEdgeSelected?.version\n      };\n      if (this.resourceParts) metadata.resourceParts = this.resourceParts;\n      if (this.resourceNameMappings) metadata.resourceNameMappings = this.resourceNameMappings;\n      if (this.overrideOrgDefault) metadata.overrideOrgDefault = this.overrideOrgDefault;\n      if (this.resourceNameIgnoreNonMatch) metadata.resourceNameIgnoreNonMatch = this.resourceNameIgnoreNonMatch;\n      return metadata;\n    }\n    lookupSourceType(sourceType) {\n      const selectedSourceType = sourceType === 'uploadAll' ? 'upload' : sourceType;\n      return _.find(this.sourceTypes, function (candidate) {\n        return candidate.id === selectedSourceType;\n      });\n    }\n    async fromMetadata() {\n      const active = document.activeElement;\n      const isFocusedInput = active?.tagName === 'INPUT';\n      if (isFocusedInput) {\n        this.focusedValue = active.value;\n      }\n      let availableBrowsersList = this.availableBrowsersList;\n      if (!availableBrowsersList) {\n        availableBrowsersList = await this.api.browserManager.getAllBrowsers();\n        this.availableBrowsersList = availableBrowsersList;\n      }\n      let browserVersionsChrome = availableBrowsersList['chrome'];\n      this.browserVersionsChrome = browserVersionsChrome;\n      let browserVersionsFirefox = availableBrowsersList['firefox'];\n      this.browserVersionsFirefox = browserVersionsFirefox;\n      let browserVersionsEdge = availableBrowsersList['edge'];\n      this.browserVersionsEdge = browserVersionsEdge;\n      this.deviceList = this.api.browserManager.devices;\n      this.defaultDevice = this.api.browserManager.defaultDevice.displaySize;\n      const metadata = this.metadata;\n      this.isInit = true;\n      if (!_.isEmpty(metadata)) {\n        if (metadata.language) {\n          this.language = metadata.language;\n        }\n        const bindings = metadata.bindings || WdioBinding;\n        this.bindings = bindings;\n        this.setBindingSpecificDefaults(bindings, metadata);\n      }\n      if (metadata.displaySize) {\n        if (metadata.device && typeof metadata.device === 'object') {\n          this.device = metadata.device;\n        } else {\n          let displaySizes = this.deviceList.filter(size => size.displaySize === metadata.displaySize);\n          if (displaySizes && displaySizes[0]) {\n            this.device = displaySizes[0];\n          } else {\n            let displayCustom = this.deviceList.filter(s => s.displaySize === 'custom' && s.type === 'desktop')[0];\n            let displayParts = metadata.displaySize.split('x');\n            displayCustom.width = displayParts[0];\n            displayCustom.height = displayParts[1];\n            this.device = displayCustom;\n          }\n        }\n      }\n      if (metadata.mochaTimeout) {\n        this.mochaTimeout = metadata.mochaTimeout;\n      }\n      this.seleniumVersion = metadata.seleniumVersion && _.find(this.seleniumVersions, v => {\n        return metadata.seleniumVersion === v.id;\n      }) || _.find(this.seleniumVersions, v => {\n        return this.bindings === ProtractorBinding ? DefaultProtectorVersion : DefaultSeleniumVersion === v.id;\n      });\n      const nodeVersion = this.nodeVersions.filter(version => version.id === metadata.nodeVersion)[0];\n      this.nodeVersionSelected = nodeVersion || this.nodeVersions[0];\n      if (metadata.browsers) {\n        let chromeVersion = browserVersionsChrome.filter(browser => browser.version === metadata.browsers.chrome);\n        let firefoxVersion = browserVersionsFirefox.filter(browser => browser.version === metadata.browsers.firefox);\n        let edgeVersion = browserVersionsEdge.filter(browser => browser.version === metadata.browsers.edge);\n        let browserVersionsChromeSelected = chromeVersion && chromeVersion[0] && browserVersionsChrome.filter(b => b.version === chromeVersion[0].version)[0] || browserVersionsChrome[0];\n        this.browserVersionsChromeSelected = browserVersionsChromeSelected;\n        let browserVersionsFirefoxSelected = firefoxVersion && firefoxVersion[0] && browserVersionsFirefox.filter(b => b.version === firefoxVersion[0].version)[0] || browserVersionsFirefox[0];\n        this.browserVersionsFirefoxSelected = browserVersionsFirefoxSelected;\n        let browserVersionsEdgeSelected = edgeVersion && edgeVersion[0] && browserVersionsEdge.filter(b => b.version === edgeVersion[0].version)[0] || browserVersionsEdge[0];\n        this.browserVersionsEdgeSelected = browserVersionsEdgeSelected;\n      } else {\n        this.browserVersionsChromeSelected = browserVersionsChrome[0];\n        this.browserVersionsFirefoxSelected = browserVersionsFirefox[0];\n        this.browserVersionsEdgeSelected = browserVersionsEdge[0];\n      }\n      metadata.browsers = {\n        chrome: this.browserVersionsChromeSelected?.version,\n        firefox: this.browserVersionsFirefoxSelected?.version,\n        edge: this.browserVersionsEdgeSelected?.version\n      };\n      if (metadata.sourceType === 'vcs') {\n        this.repositoryId = metadata.repositoryId;\n        this.repositoryUrl = this.args.script?.execution?.vcsRoot?.url || metadata.repositoryUrl;\n        this.branch = metadata.branch;\n      }\n      if (metadata.sourceType === 'upload') {\n        this.sourceRepositoryUrl = metadata.sourceRepositoryUrl;\n        this.sourceBranch = metadata.sourceBranch;\n      }\n      this.childLogs = _.isBoolean(metadata.childLogs) ? metadata.childLogs : true;\n      this.logCommands = _.isBoolean(metadata.logCommands) ? metadata.logCommands : false;\n      this.proxyNetworkRequests = _.isBoolean(metadata.proxyNetworkRequests) ? metadata.proxyNetworkRequests : true;\n      this.noPackageLock = _.isBoolean(metadata.noPackageLock) ? metadata.noPackageLock : false;\n      if (metadata.primarySpec) {\n        this.primarySpecName = metadata.primarySpec;\n      }\n      if (metadata.framework) {\n        this.framework = metadata.framework;\n      }\n      if (metadata.bindings === JavaBinding) {\n        const javaVersion = this.javaVersions.filter(version => version.id === metadata.javaVersion)[0];\n        this.javaVersionSelected = javaVersion || this.javaVersions[0];\n        if (metadata.testClasses) {\n          this.testClasses = metadata.testClasses;\n        }\n      }\n      this.platform = metadata.platform || '';\n      this.autoScreenshots = metadata.autoScreenshots;\n      this.autoSendScreenshots = _.isUndefined(metadata.autoSendScreenshots) || metadata.autoSendScreenshots;\n      this.recordVideos = metadata.recordVideos;\n      this.precompile = metadata.precompile;\n      this.screenshotType = metadata.screenshotType || 'browser';\n      this.additionalSetupCommand = metadata.additionalSetupCommand || '';\n      this.teardownCommand = metadata.teardownCommand || '';\n      this.chromedriverOnly = metadata.chromedriverOnly || false;\n      this.rootFolder = metadata.rootFolder || '.';\n      this.commandTimeoutMs = metadata.commandTimeoutMs || 60000;\n      this.screenshotTrigger = _.find(this.screenshotTriggers, screenshotTrigger => {\n        return screenshotTrigger.id === (metadata.screenshots || metadata.screenshotTrigger);\n      }) || this.screenshotTriggers[0];\n      this.maxDuration = metadata.maxDuration;\n      this.resourceParts = metadata.resourceParts;\n      this.resourceNameMappings = metadata.resourceNameMappings;\n      this.overrideOrgDefault = metadata.overrideOrgDefault;\n      this.resourceNameIgnoreNonMatch = metadata.resourceNameIgnoreNonMatch;\n      if (isFocusedInput) {\n        active.value = this.focusedValue;\n        active.dispatchEvent(new Event('input', {\n          bubbles: true\n        }));\n      }\n      (0, _runloop.next)(this, () => {\n        // setting in next run loop so observer applied on `proxyNetworkRequests` should not update these\n        this.proxyWebSockets = !this.proxyNetworkRequests ? false : _.isBoolean(metadata.proxyWebSockets) ? metadata.proxyWebSockets : true;\n        this.captureNetworkBody = _.isBoolean(metadata.captureNetworkBody) ? metadata.captureNetworkBody : false;\n        this.isInit = false;\n        $(`#updateSeleniumScenarioForm${this.args.uniqueId}`).parsley().validate();\n      });\n    }\n    getConfTemplates() {\n      if (this.getBindingId() === ProtractorBinding) {\n        return this.language === 'typescript' ? _protractorTemplatesTs.default.conf : _protractorTemplates.default.conf;\n      }\n      return this.language === 'typescript' ? _wdioTemplatesTs.default.conf : _wdioTemplates.default.conf;\n    }\n    hasSpec() {\n      const jsConfFile = this.jsConfFile;\n      return _.find(this.args.script?.dataStores, ds => {\n        return (_lib.default.endsWith(ds.name, '.js') || _lib.default.endsWith(ds.name, '.ts')) && ds.name !== jsConfFile;\n      });\n    }\n    async initWdioConfAndPackageFiles() {\n      const {\n        framework,\n        runStyle\n      } = this;\n      if (this.language === 'typescript') {\n        if (runStyle === 'file') {\n          await this.createFile('jsConf', this.jsConfFile, _wdioTemplatesTs.default.conf['skeleton']);\n        }\n        await this.createFile('packageJson', 'package.json', _wdioTemplatesTs.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.ts', _wdioTemplatesTs.default.spec['skeleton'], true);\n        }\n        await this.createFile('tsConfig', 'tsconfig.json', _wdioTemplatesTs.default.tsconfig);\n      } else {\n        if (runStyle === 'file') {\n          await this.createFile('jsConf', this.jsConfFile, _wdioTemplates.default.conf['skeleton']);\n        }\n        await this.createFile('packageJson', 'package.json', _wdioTemplates.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          if (runStyle === 'file') {\n            await this.createFile('primarySpecName', 'test.js', _wdioTemplates.default.spec['skeleton'], true);\n          } else {\n            await this.createFile('primarySpecName', 'test.js', framework === 'Mocha' ? _wdioTemplates.default.spec['script'] : _wdioTemplates.default.spec['skeletonCode'], true);\n          }\n        }\n      }\n    }\n    async initProtractorConfAndPackageFiles() {\n      if (this.language === 'typescript') {\n        await this.createFile('jsConf', this.jsConfFile, _protractorTemplatesTs.default.conf['skeleton']);\n        await this.createFile('packageJson', 'package.json', _protractorTemplatesTs.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.ts', _protractorTemplatesTs.default.spec['skeleton'], true);\n        }\n        await this.createFile('tsConfig', 'tsconfig.json', _protractorTemplatesTs.default.tsconfig);\n      } else {\n        await this.createFile('jsConf', this.jsConfFile, _protractorTemplates.default.conf['skeleton']);\n        await this.createFile('packageJson', 'package.json', _protractorTemplates.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.js', _protractorTemplates.default.spec['skeleton'], true);\n        }\n      }\n    }\n    async initJavaTestFile() {\n      if (!this.hasSpec()) {\n        const framework = this.framework;\n        const fileName = framework === 'TestNG' || framework === 'JUnit' ? 'TestClass.java' : 'Test.java';\n        const skeleton = framework === 'TestNG' ? _javaTemplates.default.seleniumTestNG['skeleton'] : framework === 'JUnit' ? _javaTemplates.default.seleniumJunit['skeleton'] : _javaTemplates.default.selenium['skeleton'];\n        let promise1 = this.createFile('primarySpecName', fileName, skeleton, true);\n        return promise1;\n      }\n    }\n    async initJsPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _tsTemplates.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.ts', _tsTemplates.default.spec['skeleton'], true);\n        }\n        await this.createFile('tsConfig', 'tsconfig.json', _tsTemplates.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _jsTemplates.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.js', _jsTemplates.default.spec['skeleton'], true);\n        }\n      }\n    }\n    async initMochaPackageFile() {\n      if (this.language === 'typescript') {\n        await this.createFile('packageJson', 'package.json', _mochaTemplatesTs.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.ts', _mochaTemplatesTs.default.spec['skeleton'], true);\n        }\n        await this.createFile('tsConfig', 'tsconfig.json', _mochaTemplatesTs.default.tsconfig);\n      } else {\n        await this.createFile('packageJson', 'package.json', _mochaTemplates.default.defaultPackageJson);\n        if (!this.hasSpec()) {\n          await this.createFile('primarySpecName', 'test.js', _mochaTemplates.default.spec['skeleton'], true);\n        }\n      }\n    }\n    async createFile(field, fileName, defaultContents, isFieldName) {\n      return new Promise(resolve => {\n        let ds = _.find(this.args.script?.dataStores, scriptDs => scriptDs.name === fileName);\n        if (ds) {\n          if (isFieldName) {\n            this[field] = ds.name;\n          }\n          resolve();\n        } else if (!this.args.script?.readonly) {\n          this.generatingFiles = true;\n          this.args.createDataStore?.(fileName, defaultContents).then(result => {\n            (0, _runloop.schedule)('afterRender', this, () => {\n              this.generatingFiles = false;\n              this[field] = isFieldName ? result.name : defaultContents;\n              resolve();\n            });\n          });\n        } else {\n          resolve();\n        }\n      });\n    }\n    setDefaultBuildArgs() {\n      const buildTool = this.buildTool;\n      const framework = this.framework;\n      const bindings = this.bindings;\n      const buildToolDefaults = this.buildToolDefaults;\n      if (buildToolDefaults.includes(this.buildToolArgs) && bindings === JavaBinding) {\n        if (framework === 'None') {\n          if (buildTool === 'maven') {\n            this.buildToolArgs = buildToolDefaults[0];\n          } else {\n            this.buildToolArgs = buildToolDefaults[1];\n          }\n        } else if (framework === 'Serenity' && this.buildTool === 'maven') {\n          this.buildToolArgs = buildToolDefaults[3];\n        } else {\n          this.buildToolArgs = buildToolDefaults[2];\n        }\n      }\n    }\n    setBindingSpecificDefaults(bindings, metadata) {\n      if (bindings === WdioBinding && metadata.runStyle) {\n        this.runStyle = metadata.runStyle;\n      }\n      if (bindings === WdioBinding || bindings === ProtractorBinding || bindings === JsBinding) {\n        if (bindings !== JsBinding) {\n          if (bindings === WdioBinding && metadata.runStyle === 'script') {\n            let jsCodeFileName = metadata.primarySpec || this.getDefaultCodeFileName();\n            if (metadata.language === 'javascript' && !_lib.default.endsWith(jsCodeFileName, '.js')) {\n              jsCodeFileName = jsCodeFileName.substr(0, jsCodeFileName.lastIndexOf(\".\")) + \".js\";\n            } else if (metadata.language === 'typescript' && !_lib.default.endsWith(jsCodeFileName, '.ts')) {\n              jsCodeFileName = jsCodeFileName.substr(0, jsCodeFileName.lastIndexOf(\".\")) + \".ts\";\n            }\n            this.jsCodeFile = jsCodeFileName;\n          } else {\n            let jsConfFileName = metadata.confFileName || this.getDefaultConfFileName(bindings);\n            if (metadata.language === 'javascript' && !_lib.default.endsWith(jsConfFileName, '.js')) {\n              jsConfFileName = jsConfFileName.substr(0, jsConfFileName.lastIndexOf(\".\")) + \".js\";\n            } else if (metadata.language === 'typescript' && !_lib.default.endsWith(jsConfFileName, '.ts')) {\n              jsConfFileName = jsConfFileName.substr(0, jsConfFileName.lastIndexOf(\".\")) + \".ts\";\n            }\n            this.jsConfFile = jsConfFileName;\n          }\n        }\n        if (bindings === WdioBinding) {\n          this.wdioCliArgs = metadata.wdioCliArgs || '';\n          this.wdioBaseUrl = metadata.wdioBaseUrl || '';\n        }\n        if (metadata.sourceType) {\n          this.sourceType = this.lookupSourceType(metadata.sourceType);\n        }\n        if (bindings === WdioBinding || metadata.framework === 'Mocha') {\n          this.skipTestableReporting = metadata.skipTestableReporting;\n          this.skipTestReporting = metadata.skipTestReporting || false;\n        }\n      } else if (bindings === JavaBinding) {\n        if (metadata.sourceType) {\n          this.sourceType = this.lookupSourceType(metadata.sourceType);\n        }\n        if (metadata.framework !== 'Serenity') {\n          if (metadata.framework === 'TestNG' || metadata.framework === 'JUnit') {\n            this.skipTestableReporting = metadata.skipTestableReporting;\n          }\n          if (metadata.framework === 'TestNG') {\n            this.skipTestReporting = metadata.skipTestReporting || false;\n          }\n        }\n        if (metadata.sourceType === 'vcs' || metadata.sourceType === 'uploadZip') {\n          if (metadata.buildTool) this.buildTool = metadata.buildTool;\n          if (metadata.buildToolArgs) this.buildToolArgs = metadata.buildToolArgs;\n        }\n        this.systemProperties = _lib.default.javaPropertiesToString('-D', metadata.systemProperties);\n      }\n      if (metadata.framework === 'Mocha') {\n        this.mochaArgs = metadata.mochaArgs || '';\n      }\n    }\n    noteDetails() {\n      const scriptReadonly = this.args.script?.readonly;\n      const bindings = this.bindings;\n      const framework = this.framework;\n      const runStyle = this.runStyle;\n      let html = '';\n      if (!this.showNote) return [];\n      if (!scriptReadonly && bindings === 'wdio') {\n        if (runStyle === 'file') html += `<div class=\"note note-info alert\">\n\n          <p>Use <a target=\"_blank\" href=\"https://webdriver.io\" rel=\"noreferrer noopener\">Webdriver.io</a> Selenium bindings for Node JS\n            to define the scenario. The scenario expects the following files:</p>\n\n          <ul>\n            <li><a target=\"_blank\"\n                href=\"https://github.com/testable/wdio-testable-example/blob/master/wdio.conf.js\" rel=\"noreferrer noopener\">wdio.conf.js</a>\n              (<a target=\"_blank\" href=\"http://webdriver.io/guide/testrunner/configurationfile.html\" rel=\"noreferrer noopener\">test runner\n                configuration</a>)\n            </li>\n            <li><a target=\"_blank\"\n                href=\"https://github.com/testable/wdio-testable-example/blob/master/package.json\" rel=\"noreferrer noopener\">package.json</a>\n            </li>\n            <li>One or more test specs (*.js) referenced in test runner configuration</li>\n          </ul>\n\n          <p>Either manage all scenario files here or specify the version control repository where they are\n            defined. See <a target=\"_blank\" href=\"https://github.com/testable/wdio-testable-example\" rel=\"noreferrer noopener\">our example\n              project</a> for more details.</p>\n\n          <p>Each test runner will have its own local Selenium standalone server to communicate with.\n            Performance metrics will be collected by routing all browser network calls via a local proxy.</p>\n        </div>`;else html += `<div class=\"note note-info alert\">\n\n          <p>Use <a target=\"_blank\" href=\"https://webdriver.io\" rel=\"noreferrer noopener\">Webdriver.io</a> Selenium bindings for Node JS\n            to define the scenario in standalone mode. The scenario expects the following files:</p>\n\n          <ul>\n            <li><a target=\"_blank\"\n                href=\"https://github.com/testable/wdio-testable-example/blob/master/package.json\" rel=\"noreferrer noopener\">package.json</a>\n            </li>\n            <li>One or more test specs (*.js)</li>\n          </ul>\n\n          <p>Each test runner will have its own local Selenium standalone server to communicate with.\n            Performance metrics will be collected by routing all browser network calls via a local proxy.</p>\n        </div>`;\n      } else if (!scriptReadonly && bindings === 'protractor') {\n        html += `<div class=\"note note-info alert\">\n\n        <p>Use <a target=\"_blank\" href=\"https://www.protractortest.org\" rel=\"noreferrer noopener\">Protractor</a> Selenium bindings for\n          Node JS to define the scenario. The scenario expects the following files:</p>\n\n        <ul>\n          <li><a target=\"_blank\"\n              href=\"https://github.com/testable/protractor-testable-example/blob/master/conf.js\" rel=\"noreferrer noopener\">conf.js</a>\n            (<a target=\"_blank\"\n              href=\"https://github.com/angular/protractor/blob/master/lib/config.ts\" rel=\"noreferrer noopener\">configuration</a>)\n          </li>\n          <li><a target=\"_blank\"\n              href=\"https://github.com/testable/protractor-testable-example/blob/master/package.json\" rel=\"noreferrer noopener\">package.json</a>\n          </li>\n          <li>One or more test specs (*.js) referenced in the configuration</li>\n        </ul>\n\n        <p>Either manage all scenario files here or specify the version control repository where they are\n          defined. See <a target=\"_blank\" href=\"https://github.com/testable/protractor-testable-example\" rel=\"noreferrer noopener\">our\n            example project</a> for more details.</p>\n\n        <p>Each test runner will have its own local Selenium standalone server to communicate with.\n          Performance metrics will be collected by routing all browser network calls via a local proxy.</p>\n      </div>`;\n      } else if (bindings === 'java') {\n        html += `<div class=\"note note-info alert\">\n        ${framework === 'Serenity' ? `<p>Use <a target=\"_blank\" href=\"http://http://www.thucydides.info/\" rel=\"noreferrer noopener\">Serenity BDD</a> to define the\n            scenario. There are several options for how you can upload your code:</p>` : `<p>Use <a target=\"_blank\" href=\"https://seleniumhq.github.io/selenium/docs/api/java/\" rel=\"noreferrer noopener\">Selenium\n              Java</a> bindings to define the scenario. There are several options for how you can upload your code:</p>`}\n\n        <ul>\n          ${framework !== 'Serenity' ? `<li><strong>Upload Executable Jar:</strong> Upload an executable jar that can be run with \"java -jar [myarchive.jar]\".\n              No compilation/build step occurs in this case.\n            </li>\n            <li><strong>Upload Jar + Specify ${this.isJunitOrTestNG ? \"Test Classes\" : \"Main Class\"}:</strong> Upload any jar/zip files needed to run your Selenium\n              code and indicate the name of the main class. No compilation/build step occurs in this case.\n            </li>` : ''}\n          <li><strong>Upload and Build (Maven/Gradle): </strong> Upload all project files or a zip file with your project which is unzipped at test time.\n          Code is <a target=\"_blank\"\n              href=\"${framework === 'Serenity' ? 'https://docs.testable.io/selenium/serenity.html#build' : 'https://docs.testable.io/selenium/java.html#build'}\" rel=\"noreferrer noopener\">built\n              and run using Maven or Gradle.</a></li>\n          <li><strong>Build from Version Control: </strong> Project is cloned from version control\n            onto the test runner. Code is <a target=\"_blank\"\n              href=\"${framework === 'Serenity' ? 'https://docs.testable.io/selenium/serenity.html#build' : 'https://docs.testable.io/selenium/java.html#build'}\" rel=\"noreferrer noopener\">built\n              and run using Maven or Gradle.</a></li>\n        </ul>\n\n        ${framework === 'Serenity' ? `<p>See <a target=\"_blank\" href=\"https://github.com/serenity-bdd/serenity-junit-starter\" rel=\"noreferrer noopener\">for an example\n              project</a> that is compatible with the Testable platform without any changes.</p>` : `<p>See <a target=\"_blank\" href=\"https://github.com/testable/selenium-java-example\" rel=\"noreferrer noopener\">our\n              example project</a> that is compatible with the Testable platform.</p>`}\n\n        <p>Each test runner will have its own local Selenium standalone server to communicate with.\n          Performance metrics will be collected by routing all browser network calls via a local proxy.</p>\n      </div>`;\n      }\n      if (!html) return [];\n      return [{\n        id: 'note',\n        type: 'note',\n        name: 'NOTE',\n        path: '/NOTE',\n        readonly: true,\n        fileType: 'note',\n        code: (0, _template.htmlSafe)(html)\n      }];\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"buildTool\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'maven';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"buildToolArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'run';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"skipTestableReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"skipTestReporting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"resourceParts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameMappings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"resourceNameIgnoreNonMatch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"activeSave\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"showNote\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"jsConf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"packageJson\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"rootFolder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '.';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"testClasses\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'TestClass';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"defaultDevice\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"deviceList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"mochaTimeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 3600000;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"runStyle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'file';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'javascript';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"bindings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"sourceType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"framework\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"seleniumVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"nodeVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"javaVersionSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"jsConfFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"jsCodeFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"primarySpecName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"repositoryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"repositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"sourceRepositoryUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"sourceBranch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"childLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"logCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"proxyNetworkRequests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"proxyWebSockets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"captureNetworkBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"noPackageLock\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"platform\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"autoScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"autoSendScreenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"recordVideos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"precompile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"screenshotType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor44 = _applyDecoratedDescriptor(_class.prototype, \"screenshotTrigger\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor45 = _applyDecoratedDescriptor(_class.prototype, \"additionalSetupCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor46 = _applyDecoratedDescriptor(_class.prototype, \"teardownCommand\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor47 = _applyDecoratedDescriptor(_class.prototype, \"chromedriverOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor48 = _applyDecoratedDescriptor(_class.prototype, \"commandTimeoutMs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor49 = _applyDecoratedDescriptor(_class.prototype, \"maxDuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor50 = _applyDecoratedDescriptor(_class.prototype, \"overrideOrgDefault\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor51 = _applyDecoratedDescriptor(_class.prototype, \"systemProperties\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor52 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor53 = _applyDecoratedDescriptor(_class.prototype, \"isInit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor54 = _applyDecoratedDescriptor(_class.prototype, \"showCreateSpecModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor55 = _applyDecoratedDescriptor(_class.prototype, \"showRemoteModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor56 = _applyDecoratedDescriptor(_class.prototype, \"enableGenerateExample\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor57 = _applyDecoratedDescriptor(_class.prototype, \"generatingFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor58 = _applyDecoratedDescriptor(_class.prototype, \"selectedFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor59 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor60 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor61 = _applyDecoratedDescriptor(_class.prototype, \"availableBrowsersList\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor62 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsChrome\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor63 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsFirefox\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor64 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsEdge\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor65 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsChromeSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor66 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsFirefoxSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor67 = _applyDecoratedDescriptor(_class.prototype, \"browserVersionsEdgeSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor68 = _applyDecoratedDescriptor(_class.prototype, \"wdioCliArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor69 = _applyDecoratedDescriptor(_class.prototype, \"wdioBaseUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor70 = _applyDecoratedDescriptor(_class.prototype, \"mochaArgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onPrimarySpecUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPrimarySpecUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateDisplayedFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateDisplayedFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onProxyNetworkRequestsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onProxyNetworkRequestsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBindingsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBindingsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSaveRelatedUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSaveRelatedUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDidInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDidInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateLanguage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateLanguage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"seleniumVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"seleniumVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"nodeVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"nodeVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"javaVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"javaVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chromeDriverVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chromeDriverVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRootFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRootFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specTemplateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specTemplateSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveMetadataAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveMetadataAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDevice\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDevice\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBindings\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBindings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"frameworkChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"frameworkChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sourceTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sourceTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePrimarySpec\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePrimarySpec\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"specCreated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"specCreated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createSpecModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createSpecModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"chromeBrowserVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"chromeBrowserVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"firefoxBrowserVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"firefoxBrowserVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"edgeBrowserVersionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"edgeBrowserVersionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateProperty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateProperty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateResourceParts\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateResourceParts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalOpen\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalOpen\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"remoteWizardModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"remoteWizardModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBuildTool\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBuildTool\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"skipTestReportingUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"skipTestReportingUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRunStyle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRunStyle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemPropertiesChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"systemPropertiesChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMaxDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMaxDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createInitFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createInitFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fromMetadata\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fromMetadata\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioSelenium);\n});","define(\"@testable/shared-ui/components/scenario/smoke-test\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/xy\", \"@amcharts/amcharts5/themes/Animated\", \"@testable/shared-ui/utils/amcharts\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/serialization\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _runloop, _tracking, _trackedBuiltIns, _lib, _server, am5, am5xy, _Animated, _amcharts2, _environment, _loadTest, _serialization, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/xy\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/serialization\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-update this.cancelRunAction @cancelRun}}\n    {{did-update this.runScript @runSmokeTest}}\n  >\n    <h4>Smoke Test</h4>\n  \n    {{#if (or this.runResults this.hasLogs)}}\n      {{#if (and this.expectVideo\n              (or this.runInProgress this.video)\n            )\n      }}\n        <div class=\"panel smoke-test-video-container\">\n          <div class=\"panel-heading\" role=\"tab\" id=\"headingVideo\">\n            <div class=\"panel-heading-btn\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-click=\"panel-expand\"><Ui::Icon @icon=\"fa fa-expand\" /></a>\n            </div>\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\" data-bs-parent=\"#runConsoleTab\"\n                href=\"#video\" aria-expanded=\"true\" aria-controls=\"video\">\n                <Ui::Icon @icon=\"fa fa-minus\" />\n              </a>\n              <strong>Live Session</strong>\n            </h4>\n            <BsButtonGroup class=\"m-l-10 no-print\" @value={{this.liveView}} @type=\"radio\" @onChange={{this.toggleLiveView}} as |bg|>\n              <bg.button @type=\"success\" @value=\"video\" @size=\"xs\">Video</bg.button>\n              <bg.button @type=\"success\" @value=\"interactive\" @size=\"xs\">Interactive</bg.button>\n            </BsButtonGroup>\n            {{#if this.videoSessions.length}}\n              <Ui::PSelect class=\"m-l-10 d-inline-flex\"\n                            @options={{this.videoSessions}}\n                            @selected={{this.video}}\n                            @placeholder=\"Please select a session...\"\n                            @onChange={{this.onChangeVideoSession}} as |option| >\n                Session {{option.sessionNum}}\n              </Ui::PSelect>\n            {{/if}}\n          </div>\n          <div id=\"video\" class=\"panel-collapse collapse show\" role=\"tabpanel\" aria-labelledby=\"headingVideo\">\n            <div class=\"panel-body\">\n              {{#if (eq this.liveView 'video')}}\n                <div>\n                  {{#if this.video}}\n                    <Ui::VideojsPlayer\n                            @src={{this.video.playlistUrl}}\n                            @videoSeekPosition={{this.videoSeekPosition}}\n                            @autoplay={{true}}\n                    />\n                  {{else if this.runInProgress}}\n                    <h5>Initializing test, video will appear shortly...</h5>\n                  {{else}}\n                    <h5>No video captured during smoke test.</h5>\n                  {{/if}}\n                </div>\n              {{else}}\n                <div class=\"height-full\">\n                  {{#if (and this.vncError this.runInProgress)}}\n                    <h5>{{this.vncError}}</h5>\n                  {{else if (and this.vncInfo this.runInProgress)}}\n                    <LiveSession @info={{this.vncInfo}} />\n                  {{else if this.runInProgress}}\n                    <h5>Initializing test, interactive session will appear shortly...</h5>\n                  {{else}}\n                    <h5>No live session available after smoke test is finished.</h5>\n                  {{/if}}\n                </div>\n              {{/if}}\n            </div>\n          </div>\n        </div>\n      {{/if}}\n  \n      {{#if this.hasLogs}}\n        <div class=\"panel\">\n          <div class=\"panel-heading\" role=\"tab\" id=\"headingLogging\">\n            <div class=\"panel-heading-btn\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-click=\"panel-expand\"><Ui::Icon @icon=\"fa fa-expand\" /></a>\n            </div>\n            <div class=\"d-flex align-items-center pull-right m-r-10\">\n              <label class=\"mb-0\">Min Level</label>\n              <Ui::InfoIcon @isHtml={{true}}\n                        @content=\"Choose the minimum logging level to display in the logging console.\" />\n              <Ui::XSelect @class=\"form-control form-select width-200 height-30 m-l-5\" @value={{this.loggingLevel}}\n                        style={{html-safe 'margin-top: -4px'}}\n                        @onChange={{this.loggingLevelChanged}} as |xs| >\n                {{#each this.logsLevelArray as |level|}}\n                  <xs.option @value={{level.name}}>{{level.name}} ({{level.value}})</xs.option>\n                {{/each}}\n              </Ui::XSelect>\n            </div>\n  \n            {{#if (gt this.logGroups.length 0)}}\n              <div class=\"d-flex align-items-center pull-right m-r-10\">\n                <label class=\"mb-0\">Group</label>\n                <Ui::XSelect @class=\"form-control form-select width-200 height-30 m-l-5\" @value={{this.logGroup.name}}\n                          style={{html-safe 'margin-top: -4px'}}\n                          @onChange={{this.logGroupChanged}} as |xs| >\n                  {{#each this.logGroups as |choice|}}\n                    <xs.option @value={{choice.name}}>{{choice.name}} ({{print-number choice.count}})</xs.option>\n                  {{/each}}\n                </Ui::XSelect>\n              </div>\n            {{/if}}\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                  data-bs-parent=\"#runConsoleTab\" href=\"#logging\" aria-expanded=\"true\" aria-controls=\"logging\">\n                <Ui::Icon @icon=\"fa fa-minus \" />\n              </a>\n              <strong>Logging ({{this.logs.length}})</strong>\n            </h4>\n          </div>\n          <div id=\"logging\" class=\"panel-collapse collapse show\" role=\"tabpanel\"\n            aria-labelledby=\"headingLogging\">\n            <div class=\"panel-body\">\n              <Ui::AceEditor @id=\"runConsole\"\n                              @readonly={{true}}\n                              @resizeAble={{true}}\n                              @wrap={{true}}\n                              @height={{200}}\n                              @code={{this.consoleText}}\n                              @mode=\"ace/mode/text\" />\n            </div>\n          </div>\n        </div>\n      {{/if}}\n      {{#if (gt this.runResults.suiteResults.length 0)}}\n        <SuiteResultsWidget @suiteResults={{this.runResults.suiteResults}}\n                            @hasDuration={{this.suiteResultsHasDuration}}\n                            @scriptType={{@model.scriptType}}\n                            @collapsible={{true}}\n                            @isSmokeTest={{true}}\n                            @runInProgress={{this.runInProgress}}\n                            @suffix=\"ScriptOverall\" />\n      {{/if}}\n      {{#if (gt this.runResults.commands.length 0)}}\n        <div class=\"panel \">\n          <div class=\"panel-heading d-flex\" role=\"tab\" id=\"headingCommandsTab\">\n            <h4 class=\"panel-title align-self-center\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                  data-bs-parent=\"#runConsoleTab\" href=\"#commands\" aria-expanded=\"true\" aria-controls=\"commands\">\n                <Ui::Icon @icon=\"fa fa-minus\" />\n              </a>\n              <strong>Commands ({{this.displayedCommands.length}})</strong>\n            </h4>\n            <label class=\"m-l-10 mb-0 d-flex align-items-center cursor-pointer normal\">\n              <Input class=\"m-r-5\" @type=\"checkbox\" @checked={{this.showDetailedCommands}} /> Detailed View {{#unless this.showDetailedCommands}}({{this.totalDetailedCommands}}){{/unless}}\n            </label>\n            {{#if this.commandSessions.length}}\n              <Ui::PSelect class=\"m-l-10 d-inline-flex\"\n                            @options={{this.commandSessions}}\n                            @selected={{this.selectedCommandSession}}\n                            @placeholder=\"Please select a session...\"\n                            @onChange={{this.onChangeCommandSession}} as |option| >\n                Session {{if option.sessionNum option.sessionNum 0}}\n              </Ui::PSelect>\n            {{/if}}\n          </div>\n          <div id=\"commands\" class=\"panel-collapse collapse show\" role=\"tabpanel\"\n                aria-labelledby=\"headingCommandsTab\">\n            <div class=\"panel-body {{if @isPrint '' 'panel-500'}} suite-results\">\n              {{#if (gt this.runResults.commands.length this.maxResults)}}\n              <div class=\"note note-info\">\n                <p class=\"mb-0\">First {{this.maxResults}} commands display during a smoke test. Run a regular test to see all commands.</p>\n              </div>\n              {{/if}}\n              <table class=\"table\">\n                <tbody>\n                  {{#each this.displayedCommands as |command index|}}\n                    <tr class=\"suite-row\">\n                      <td class=\"{{if (eq index 0) 'no-border'}}\">\n                        <CommandStreamCommand\n                                @id={{command.id}}\n                                @command={{command}}\n                                @scriptType={{@model.scriptType}}\n                                @showVideoPlayControls={{and this.video (eq this.liveView 'video')}}\n                                @videoSeekPosition={{this.videoSeekPositionFunction}}\n                                @videoContainerSelector='.smoke-test-video-container'\n                        />\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n      {{/if}}\n      {{#if (gt this.customMetrics.length 0)}}\n        <CustomMetricsPanel @customMetrics={{this.customMetrics}}\n                            @parentElement=\"#runConsoleTab\" />\n      {{/if}}\n      {{#if (gt this.runResults.files.length 0)}}\n        <div class=\"panel \">\n          <div class=\"panel-heading\" role=\"tab\" id=\"headingFiles\">\n            <h4 class=\"panel-title\">\n              <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n                data-bs-parent=\"#runConsoleTab\" href=\"#files\" aria-expanded=\"true\" aria-controls=\"files\">\n                <Ui::Icon @icon=\"fa fa-minus\" />\n              </a>\n              <strong>Files ({{this.runResultsFiles.length}})</strong>\n            </h4>\n            {{#if this.filesSessions.length}}\n              <Ui::PSelect class=\"m-l-10 d-inline-flex\"\n                            @options={{this.filesSessions}}\n                            @selected={{this.selectedFileSession}}\n                            @placeholder=\"Please select a session...\"\n                            @onChange={{this.onChangeFileSession}} as |option| >\n                {{#if (eq option.sessionNum -1)}}\n                  ALL\n                {{else if (eq option.sessionNum 0)}}\n                  Not Session Specific\n                {{else}}\n                  Session {{option.sessionNum}}\n                {{/if}}\n              </Ui::PSelect>\n            {{/if}}\n          </div>\n          <div id=\"files\" class=\"panel-collapse collapse show\" role=\"tabpanel\" aria-labelledby=\"headingFiles\">\n            <div class=\"panel-body\">\n              <table class=\"table table-striped table-bordered table-no-top-bottom-padding table-files\">\n                <thead>\n                  <tr>\n                    <th>Preview</th>\n                    <th>Name</th>\n                    <th>Content Type</th>\n                    <th>Size</th>\n                    {{#if this.filesSessions.length}}\n                      <th>Session #</th>\n                    {{/if}}\n                    <th>Created At</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each this.runResultsFiles as |file|}}\n                    {{#unless file.hasMorePackets}}\n                      <tr>\n                        <td>\n                          {{#if file.isImage}}\n                            <a href=\"{{file.dataUri}}\" data-fancybox=\"test-results\" data-title=\"{{file.name}}\">\n                              <img src=\"{{file.dataUri}}\" width=\"100\" alt=\"\" role=\"none\">\n                            </a>\n                          {{/if}}\n                          {{#if file.isVideo}}\n                            <a href=\"{{file.dataUri}}\" data-type=\"video\" data-fancybox data-title=\"{{file.name}}\" class=\"video-icon success-image\">\n                              <Ui::Icon @icon=\"fa fa-play-circle play-icon-overlay fa-2x\" />\n                            </a>\n                          {{/if}}\n                        </td>\n                        <td>\n                          <a {{on \"click\" (fn this.downloadFile file)}} role=\"button\">{{file.name}}</a>\n                        </td>\n                        <td>{{file.contentType}}</td>\n                        <td>{{print-bytes file.length}}</td>\n                        {{#if this.filesSessions.length}}\n                          <td>{{if file.sessionNum file.sessionNum '-'}}</td>\n                        {{/if}}\n                        <td>{{print-datetime file.timestamp}}</td>\n                      </tr>\n                    {{/unless}}\n                  {{/each}}\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n      {{/if}}\n      <div class=\"panel \">\n        <div class=\"panel-heading\" role=\"tab\" id=\"headingResults\">\n          <h4 class=\"panel-title\">\n            <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n              data-bs-parent=\"#runConsoleTab\" href=\"#results\" aria-expanded=\"true\" aria-controls=\"results\">\n              <Ui::Icon @icon=\"fa fa-minus\" />\n            </a>\n            <strong>Results</strong>\n            <div class=\"panel-heading-btn\">\n              <GridSearch @inTab={{false}} @bottomMargin={{false}} @onSearch={{fn (mut this.search)}} style={{html-safe 'margin-top: -4px'}}/>\n            </div>\n          </h4>\n        </div>\n        <div id=\"results\" class=\"panel-collapse collapse show\" role=\"tabpanel\" aria-labelledby=\"headingResults\">\n          <div class=\"panel-body overflow-hidden\">\n            {{#if (gte this.runResults.results.length this.maxResults)}}\n              <span class=\"semi-bold\">Only displaying the first {{print-number this.maxResults}} made during the\n                smoke test. This is a smoke test limitation and will not apply when running a real test.</span>\n            {{/if}}\n            <ResultsTimelineGrid @id=\"smokeTestGrid\"\n                                  @hideTraceColumn={{true}}\n                                  @scriptType={{@model.scriptType}}\n                                  @search={{this.search}}\n                                  @maxResults={{this.maxResults}}\n                                  @resultSelected={{this.resultSelected}} />\n          </div>\n        </div>\n      </div>\n      <div class=\"panel \">\n        <div class=\"panel-heading\" role=\"tab\" id=\"headingResultTrace\">\n          <h4 class=\"panel-title\">\n            <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n              data-bs-parent=\"#runConsoleTab\" href=\"#trace\" aria-expanded=\"true\" aria-controls=\"trace\">\n              <Ui::Icon @icon=\"fa fa-minus\" />\n            </a>\n            <strong>Result Details, Metrics, and Trace</strong>\n          </h4>\n        </div>\n        <div id=\"trace\" class=\"panel-collapse collapse show\" role=\"tabpanel\"\n          aria-labelledby=\"headingResultTrace\">\n          <div class=\"panel-body\">\n            {{#if this.selectedResult}}\n              <ResultDetails @result={{this.selectedResult}}\n                              @region={{this.runResults.regionName}}\n                              @scriptType={{@model.scriptType}}\n                              @suiteResultsHasDuration={{this.suiteResultsHasDuration}} />\n            {{else}}\n              <span class=\"no-print\">Select a row in the results above to view details, metrics, assertions, and\n                trace information.</span>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n      <div class=\"panel\" {{did-insert this.onRunStart}} >\n        <div class=\"panel-heading\" role=\"tab\" id=\"headingUsage\">\n          <h4 class=\"panel-title\">\n            <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\"\n              data-bs-parent=\"#runConsoleTab\" href=\"#usage\" aria-expanded=\"true\" aria-controls=\"usage\">\n              <Ui::Icon @icon=\"fa fa-minus\" />\n            </a>\n            <strong>Memory/CPU</strong>\n          </h4>\n        </div>\n        <div id=\"usage\" class=\"panel-collapse collapse show\" role=\"tabpanel\" aria-labelledby=\"headingUsage\">\n          <div class=\"panel-body\">\n            <div class=\"row\">\n              <div class=\"col-md-4 col-sm-6 col-xs-12\">\n                <div class=\"widget widget-stats bg-blue\">\n                  <div class=\"stats-icon stats-icon-lg\">\n                    <Ui::Icon @icon=\"fa fa-cubes fa-fw\" />\n                  </div>\n                  <div class=\"stats-title\">\n                    Memory\n                  </div>\n                  <div class=\"stats-number\">\n                    {{print-bytes this.memory}}\n                  </div>\n                  <div class=\"stats-desc\">Peak memory utilized during smoke test</div>\n                </div>\n              </div>\n              <div class=\"col-md-4 col-sm-6 col-xs-12\">\n                <div class=\"widget widget-stats bg-green\">\n                  <div class=\"stats-icon stats-icon-lg\">\n                    <Ui::Icon @icon=\"fa fa-tachometer fa-fw\" />\n                  </div>\n                  <div class=\"stats-title\">\n                    vCPU\n                  </div>\n                  <div class=\"stats-number\">\n                    {{this.cpu}}\n                  </div>\n                  <div class=\"stats-desc\">Peak vCPUs utilized during smoke test</div>\n                </div>\n              </div>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-md-12\">\n                <div id=\"smokeTestUtilChart\" class=\"chart\" style={{html-safe \"width: 100%; height: 250px;\"}}>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    {{else}}\n      <span>{{this.consoleText}}</span>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"cancelRunAction\\\"]],[30,1]],null],[4,[38,1],[[30,0,[\\\"runScript\\\"]],[30,2]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Smoke Test\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,4],[[30,0,[\\\"runResults\\\"]],[30,0,[\\\"hasLogs\\\"]]],null],[[[41,[28,[37,5],[[30,0,[\\\"expectVideo\\\"]],[28,[37,4],[[30,0,[\\\"runInProgress\\\"]],[30,0,[\\\"video\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel smoke-test-video-container\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingVideo\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-expand\\\"],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#video\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"video\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Live Session\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,9],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"liveView\\\"]],\\\"radio\\\",[30,0,[\\\"toggleLiveView\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"video\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Video\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"interactive\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Interactive\\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videoSessions\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,0,\\\"m-l-10 d-inline-flex\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"videoSessions\\\"]],[30,0,[\\\"video\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeVideoSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Session \\\"],[1,[30,4,[\\\"sessionNum\\\"]]],[1,\\\"\\\\n            \\\"]],[4]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"video\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingVideo\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"liveView\\\"]],\\\"video\\\"],null],[[[1,\\\"              \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"video\\\"]],[[[1,\\\"                  \\\"],[8,[39,12],null,[[\\\"@src\\\",\\\"@videoSeekPosition\\\",\\\"@autoplay\\\"],[[30,0,[\\\"video\\\",\\\"playlistUrl\\\"]],[30,0,[\\\"videoSeekPosition\\\"]],true]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"runInProgress\\\"]],[[[1,\\\"                  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Initializing test, video will appear shortly...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No video captured during smoke test.\\\"],[13],[1,\\\"\\\\n                \\\"]],[]]]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"height-full\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,0,[\\\"vncError\\\"]],[30,0,[\\\"runInProgress\\\"]]],null],[[[1,\\\"                  \\\"],[10,\\\"h5\\\"],[12],[1,[30,0,[\\\"vncError\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,5],[[30,0,[\\\"vncInfo\\\"]],[30,0,[\\\"runInProgress\\\"]]],null],[[[1,\\\"                  \\\"],[8,[39,14],null,[[\\\"@info\\\"],[[30,0,[\\\"vncInfo\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"runInProgress\\\"]],[[[1,\\\"                  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Initializing test, interactive session will appear shortly...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No live session available after smoke test is finished.\\\"],[13],[1,\\\"\\\\n                \\\"]],[]]]],[]]]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLogs\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingLogging\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-expand\\\"],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"d-flex align-items-center pull-right m-r-10\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[14,0,\\\"mb-0\\\"],[12],[1,\\\"Min Level\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,16],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Choose the minimum logging level to display in the logging console.\\\"]],null],[1,\\\"\\\\n            \\\"],[8,[39,17],[[16,5,[28,[37,18],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select width-200 height-30 m-l-5\\\",[30,0,[\\\"loggingLevel\\\"]],[30,0,[\\\"loggingLevelChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,20],[[28,[37,20],[[30,0,[\\\"logsLevelArray\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,6,[\\\"name\\\"]]]],[[\\\"default\\\"],[[[[1,[30,6,[\\\"name\\\"]]],[1,\\\" (\\\"],[1,[30,6,[\\\"value\\\"]]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"            \\\"]],[5]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"logGroups\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"d-flex align-items-center pull-right m-r-10\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"mb-0\\\"],[12],[1,\\\"Group\\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,17],[[16,5,[28,[37,18],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@class\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"form-control form-select width-200 height-30 m-l-5\\\",[30,0,[\\\"logGroup\\\",\\\"name\\\"]],[30,0,[\\\"logGroupChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,20],[[28,[37,20],[[30,0,[\\\"logGroups\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,7,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,8,[\\\"name\\\"]]]],[[\\\"default\\\"],[[[[1,[30,8,[\\\"name\\\"]]],[1,\\\" (\\\"],[1,[28,[35,22],[[30,8,[\\\"count\\\"]]],null]],[1,\\\")\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"              \\\"]],[7]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#logging\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"logging\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus \\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Logging (\\\"],[1,[30,0,[\\\"logs\\\",\\\"length\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"logging\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingLogging\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,23],null,[[\\\"@id\\\",\\\"@readonly\\\",\\\"@resizeAble\\\",\\\"@wrap\\\",\\\"@height\\\",\\\"@code\\\",\\\"@mode\\\"],[\\\"runConsole\\\",true,true,true,200,[30,0,[\\\"consoleText\\\"]],\\\"ace/mode/text\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[30,0,[\\\"runResults\\\",\\\"suiteResults\\\",\\\"length\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,24],null,[[\\\"@suiteResults\\\",\\\"@hasDuration\\\",\\\"@scriptType\\\",\\\"@collapsible\\\",\\\"@isSmokeTest\\\",\\\"@runInProgress\\\",\\\"@suffix\\\"],[[30,0,[\\\"runResults\\\",\\\"suiteResults\\\"]],[30,0,[\\\"suiteResultsHasDuration\\\"]],[30,9,[\\\"scriptType\\\"]],true,true,[30,0,[\\\"runInProgress\\\"]],\\\"ScriptOverall\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[30,0,[\\\"runResults\\\",\\\"commands\\\",\\\"length\\\"]],0],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading d-flex\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingCommandsTab\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title align-self-center\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#commands\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"commands\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Commands (\\\"],[1,[30,0,[\\\"displayedCommands\\\",\\\"length\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"m-l-10 mb-0 d-flex align-items-center cursor-pointer normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,25],[[24,0,\\\"m-r-5\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"showDetailedCommands\\\"]]]],null],[1,\\\" Detailed View \\\"],[41,[51,[30,0,[\\\"showDetailedCommands\\\"]]],[[[1,\\\"(\\\"],[1,[30,0,[\\\"totalDetailedCommands\\\"]]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"commandSessions\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,0,\\\"m-l-10 d-inline-flex\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"commandSessions\\\"]],[30,0,[\\\"selectedCommandSession\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeCommandSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              Session \\\"],[1,[52,[30,10,[\\\"sessionNum\\\"]],[30,10,[\\\"sessionNum\\\"]],0]],[1,\\\"\\\\n            \\\"]],[10]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"commands\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingCommandsTab\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"panel-body \\\",[52,[30,11],\\\"\\\",\\\"panel-500\\\"],\\\" suite-results\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"runResults\\\",\\\"commands\\\",\\\"length\\\"]],[30,0,[\\\"maxResults\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"note note-info\\\"],[12],[1,\\\"\\\\n              \\\"],[10,2],[14,0,\\\"mb-0\\\"],[12],[1,\\\"First \\\"],[1,[30,0,[\\\"maxResults\\\"]]],[1,\\\" commands display during a smoke test. Run a regular test to see all commands.\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,20],[[28,[37,20],[[30,0,[\\\"displayedCommands\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[10,\\\"tr\\\"],[14,0,\\\"suite-row\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[15,0,[29,[[52,[28,[37,11],[[30,13],0],null],\\\"no-border\\\"]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,32],null,[[\\\"@id\\\",\\\"@command\\\",\\\"@scriptType\\\",\\\"@showVideoPlayControls\\\",\\\"@videoSeekPosition\\\",\\\"@videoContainerSelector\\\"],[[30,12,[\\\"id\\\"]],[30,12],[30,9,[\\\"scriptType\\\"]],[28,[37,5],[[30,0,[\\\"video\\\"]],[28,[37,11],[[30,0,[\\\"liveView\\\"]],\\\"video\\\"],null]],null],[30,0,[\\\"videoSeekPositionFunction\\\"]],\\\".smoke-test-video-container\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[12,13]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[30,0,[\\\"customMetrics\\\",\\\"length\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,33],null,[[\\\"@customMetrics\\\",\\\"@parentElement\\\"],[[30,0,[\\\"customMetrics\\\"]],\\\"#runConsoleTab\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[30,0,[\\\"runResults\\\",\\\"files\\\",\\\"length\\\"]],0],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingFiles\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#files\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"files\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Files (\\\"],[1,[30,0,[\\\"runResultsFiles\\\",\\\"length\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filesSessions\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,0,\\\"m-l-10 d-inline-flex\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"filesSessions\\\"]],[30,0,[\\\"selectedFileSession\\\"]],\\\"Please select a session...\\\",[30,0,[\\\"onChangeFileSession\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,14,[\\\"sessionNum\\\"]],-1],null],[[[1,\\\"                ALL\\\\n\\\"]],[]],[[[41,[28,[37,11],[[30,14,[\\\"sessionNum\\\"]],0],null],[[[1,\\\"                Not Session Specific\\\\n\\\"]],[]],[[[1,\\\"                Session \\\"],[1,[30,14,[\\\"sessionNum\\\"]]],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,1,\\\"files\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingFiles\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-striped table-bordered table-no-top-bottom-padding table-files\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,\\\"Preview\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,\\\"Content Type\\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,\\\"Size\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filesSessions\\\",\\\"length\\\"]],[[[1,\\\"                    \\\"],[10,\\\"th\\\"],[12],[1,\\\"Session #\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,\\\"th\\\"],[12],[1,\\\"Created At\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,20],[[28,[37,20],[[30,0,[\\\"runResultsFiles\\\"]]],null]],null],null,[[[41,[51,[30,15,[\\\"hasMorePackets\\\"]]],[[[1,\\\"                    \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,15,[\\\"isImage\\\"]],[[[1,\\\"                          \\\"],[10,3],[15,6,[29,[[30,15,[\\\"dataUri\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"test-results\\\"],[15,\\\"data-title\\\",[29,[[30,15,[\\\"name\\\"]]]]],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,15,[\\\"dataUri\\\"]]]]],[14,\\\"width\\\",\\\"100\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,15,[\\\"isVideo\\\"]],[[[1,\\\"                          \\\"],[10,3],[15,6,[29,[[30,15,[\\\"dataUri\\\"]]]]],[14,\\\"data-type\\\",\\\"video\\\"],[14,\\\"data-fancybox\\\",\\\"\\\"],[15,\\\"data-title\\\",[29,[[30,15,[\\\"name\\\"]]]]],[14,0,\\\"video-icon success-image\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-play-circle play-icon-overlay fa-2x\\\"]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,37],[\\\"click\\\",[28,[37,38],[[30,0,[\\\"downloadFile\\\"]],[30,15]],null]],null],[12],[1,[30,15,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[30,15,[\\\"contentType\\\"]]],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,39],[[30,15,[\\\"length\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filesSessions\\\",\\\"length\\\"]],[[[1,\\\"                        \\\"],[10,\\\"td\\\"],[12],[1,[52,[30,15,[\\\"sessionNum\\\"]],[30,15,[\\\"sessionNum\\\"]],\\\"-\\\"]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                      \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,40],[[30,15,[\\\"timestamp\\\"]]],null]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[15]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingResults\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#results\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"results\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Results\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,41],[[16,5,[28,[37,18],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@inTab\\\",\\\"@bottomMargin\\\",\\\"@onSearch\\\"],[false,false,[28,[37,38],[[28,[37,42],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,1,\\\"results\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingResults\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body overflow-hidden\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,43],[[30,0,[\\\"runResults\\\",\\\"results\\\",\\\"length\\\"]],[30,0,[\\\"maxResults\\\"]]],null],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Only displaying the first \\\"],[1,[28,[35,22],[[30,0,[\\\"maxResults\\\"]]],null]],[1,\\\" made during the\\\\n              smoke test. This is a smoke test limitation and will not apply when running a real test.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,45],null,[[\\\"@id\\\",\\\"@hideTraceColumn\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@maxResults\\\",\\\"@resultSelected\\\"],[\\\"smokeTestGrid\\\",true,[30,9,[\\\"scriptType\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"maxResults\\\"]],[30,0,[\\\"resultSelected\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingResultTrace\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#trace\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"trace\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Result Details, Metrics, and Trace\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,1,\\\"trace\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingResultTrace\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedResult\\\"]],[[[1,\\\"            \\\"],[8,[39,46],null,[[\\\"@result\\\",\\\"@region\\\",\\\"@scriptType\\\",\\\"@suiteResultsHasDuration\\\"],[[30,0,[\\\"selectedResult\\\"]],[30,0,[\\\"runResults\\\",\\\"regionName\\\"]],[30,9,[\\\"scriptType\\\"]],[30,0,[\\\"suiteResultsHasDuration\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"no-print\\\"],[12],[1,\\\"Select a row in the results above to view details, metrics, assertions, and\\\\n              trace information.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"panel\\\"],[4,[38,47],[[30,0,[\\\"onRunStart\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[14,\\\"role\\\",\\\"tab\\\"],[14,1,\\\"headingUsage\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,\\\"data-bs-parent\\\",\\\"#runConsoleTab\\\"],[14,6,\\\"#usage\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,\\\"aria-controls\\\",\\\"usage\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Memory/CPU\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,1,\\\"usage\\\"],[14,0,\\\"panel-collapse collapse show\\\"],[14,\\\"role\\\",\\\"tabpanel\\\"],[14,\\\"aria-labelledby\\\",\\\"headingUsage\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget widget-stats bg-blue\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-icon stats-icon-lg\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-cubes fa-fw\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-title\\\"],[12],[1,\\\"\\\\n                  Memory\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-number\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,39],[[30,0,[\\\"memory\\\"]]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-desc\\\"],[12],[1,\\\"Peak memory utilized during smoke test\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"widget widget-stats bg-green\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-icon stats-icon-lg\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-tachometer fa-fw\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-title\\\"],[12],[1,\\\"\\\\n                  vCPU\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-number\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,0,[\\\"cpu\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"stats-desc\\\"],[12],[1,\\\"Peak vCPUs utilized during smoke test\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-12\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,1,\\\"smokeTestUtilChart\\\"],[14,0,\\\"chart\\\"],[15,5,[28,[37,18],[\\\"width: 100%; height: 250px;\\\"],null]],[12],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,1],[12],[1,[30,0,[\\\"consoleText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@cancelRun\\\",\\\"@runSmokeTest\\\",\\\"bg\\\",\\\"option\\\",\\\"xs\\\",\\\"level\\\",\\\"xs\\\",\\\"choice\\\",\\\"@model\\\",\\\"option\\\",\\\"@isPrint\\\",\\\"command\\\",\\\"index\\\",\\\"option\\\",\\\"file\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"h4\\\",\\\"if\\\",\\\"or\\\",\\\"and\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"bs-button-group\\\",\\\"ui/p-select\\\",\\\"eq\\\",\\\"ui/videojs-player\\\",\\\"h5\\\",\\\"live-session\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/x-select\\\",\\\"html-safe\\\",\\\"each\\\",\\\"-track-array\\\",\\\"gt\\\",\\\"print-number\\\",\\\"ui/ace-editor\\\",\\\"suite-results-widget\\\",\\\"input\\\",\\\"unless\\\",\\\"p\\\",\\\"table\\\",\\\"tbody\\\",\\\"tr\\\",\\\"td\\\",\\\"command-stream-command\\\",\\\"custom-metrics-panel\\\",\\\"thead\\\",\\\"th\\\",\\\"img\\\",\\\"on\\\",\\\"fn\\\",\\\"print-bytes\\\",\\\"print-datetime\\\",\\\"grid-search\\\",\\\"mut\\\",\\\"gte\\\",\\\"span\\\",\\\"results-timeline-grid\\\",\\\"result-details\\\",\\\"did-insert\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/smoke-test.hbs\",\n    \"isStrictMode\": false\n  });\n  const DefaultRunningText = 'Running scenario...';\n  const DefaultConsoleText = 'Smoke test the scenario above to view results here';\n  let ScenarioSmokeTestComponent = _exports.default = (_dec = (0, _object.computed)('videos.@each'), _dec2 = (0, _object.computed)('runResults.files.@each'), _dec3 = (0, _object.computed)('runResults.files', 'selectedFileSession'), _dec4 = (0, _object.computed)('commandLimit', 'runResults.commands.[]'), _dec5 = (0, _object.computed)('commandLimit', 'runResultsCommands.[]', 'showDetailedCommands'), _dec6 = (0, _object.computed)('runResultsCommands.[]'), _dec7 = (0, _object.computed)('totalCommands', 'selectedCommandSession'), _dec8 = (0, _object.computed)('totalCommands'), _dec9 = (0, _object.computed)('runResults.results.[]'), _class = class ScenarioSmokeTestComponent extends _component2.default {\n    resetProperties() {\n      this.pendingResults = [];\n      this.pendingLogs = new _trackedBuiltIns.TrackedArray();\n      const allLogGroup = _object.default.create({\n        name: 'ALL',\n        count: 0\n      });\n      this.logGroup = allLogGroup;\n      this.logGroups = new _trackedBuiltIns.TrackedArray([allLogGroup]);\n      this.loggingLevel = 'Trace';\n      this.selectedResult = null;\n      this.index = 0;\n      this.hasLogs = false;\n      this.logs = new _trackedBuiltIns.TrackedArray();\n      this.videos = [];\n      this.liveView = 'video';\n      this.showVncPanel = false;\n      this.video = null;\n      this.vncInfo = null;\n      this.vncError = null;\n      this.numTraceLogs = 0;\n      this.numDebugLogs = 0;\n      this.numInfoLogs = 0;\n      this.numErrorLogs = 0;\n      this.numFatalLogs = 0;\n      this.memory = 0;\n      this.cpu = 0;\n      this.memoryUtilization = 0;\n      this.cpuUtilization = 0;\n      this.utilIntervals = [];\n      this.utilCounter = 0;\n      this.utilChart = null;\n      this.search = null;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _defineProperty(this, \"maxResults\", 500);\n      _defineProperty(this, \"regions\", _environment.config.regions);\n      _initializerDefineProperty(this, \"runInProgress\", _descriptor3, this);\n      _initializerDefineProperty(this, \"pendingResults\", _descriptor4, this);\n      _initializerDefineProperty(this, \"pendingLogs\", _descriptor5, this);\n      _initializerDefineProperty(this, \"logGroup\", _descriptor6, this);\n      _initializerDefineProperty(this, \"logGroups\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loggingLevel\", _descriptor8, this);\n      _initializerDefineProperty(this, \"consoleText\", _descriptor9, this);\n      _initializerDefineProperty(this, \"runResults\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedResult\", _descriptor1, this);\n      _initializerDefineProperty(this, \"index\", _descriptor10, this);\n      _initializerDefineProperty(this, \"hasLogs\", _descriptor11, this);\n      _initializerDefineProperty(this, \"logs\", _descriptor12, this);\n      _initializerDefineProperty(this, \"videos\", _descriptor13, this);\n      _initializerDefineProperty(this, \"liveView\", _descriptor14, this);\n      _initializerDefineProperty(this, \"showVncPanel\", _descriptor15, this);\n      _initializerDefineProperty(this, \"video\", _descriptor16, this);\n      _initializerDefineProperty(this, \"vncInfos\", _descriptor17, this);\n      _initializerDefineProperty(this, \"vncInfo\", _descriptor18, this);\n      _initializerDefineProperty(this, \"vncError\", _descriptor19, this);\n      _initializerDefineProperty(this, \"numTraceLogs\", _descriptor20, this);\n      _initializerDefineProperty(this, \"numDebugLogs\", _descriptor21, this);\n      _initializerDefineProperty(this, \"numInfoLogs\", _descriptor22, this);\n      _initializerDefineProperty(this, \"numErrorLogs\", _descriptor23, this);\n      _initializerDefineProperty(this, \"numFatalLogs\", _descriptor24, this);\n      _initializerDefineProperty(this, \"memory\", _descriptor25, this);\n      _initializerDefineProperty(this, \"cpu\", _descriptor26, this);\n      _initializerDefineProperty(this, \"memoryUtilization\", _descriptor27, this);\n      _initializerDefineProperty(this, \"cpuUtilization\", _descriptor28, this);\n      _initializerDefineProperty(this, \"utilIntervals\", _descriptor29, this);\n      _initializerDefineProperty(this, \"utilCounter\", _descriptor30, this);\n      _initializerDefineProperty(this, \"utilChart\", _descriptor31, this);\n      _initializerDefineProperty(this, \"search\", _descriptor32, this);\n      _initializerDefineProperty(this, \"commandLimit\", _descriptor33, this);\n      _initializerDefineProperty(this, \"socket\", _descriptor34, this);\n      _initializerDefineProperty(this, \"sessions\", _descriptor35, this);\n      _initializerDefineProperty(this, \"selectedCommandSession\", _descriptor36, this);\n      _initializerDefineProperty(this, \"selectedFileSession\", _descriptor37, this);\n      _initializerDefineProperty(this, \"videoSeekPosition\", _descriptor38, this);\n      _initializerDefineProperty(this, \"applyUpdates\", _descriptor39, this);\n      _initializerDefineProperty(this, \"chartRoot\", _descriptor40, this);\n      _initializerDefineProperty(this, \"chart\", _descriptor41, this);\n      _initializerDefineProperty(this, \"showDetailedCommands\", _descriptor42, this);\n      this.resetProperties();\n    }\n    onRunStart() {\n      if (this.shouldCreateChart) {\n        (0, _runloop.scheduleOnce)('afterRender', this, () => {\n          const chart = this.makeUtilizationChart();\n          if (chart) this.utilChart = chart;\n        });\n      }\n    }\n    get logsLevelArray() {\n      const numFatalLogs = this.numFatalLogs;\n      const numErrorLogs = this.numErrorLogs + numFatalLogs;\n      const numInfoLogs = this.numInfoLogs + numErrorLogs;\n      const numDebugLogs = this.numDebugLogs + numInfoLogs;\n      const numTraceLogs = this.numTraceLogs + numDebugLogs;\n      return [{\n        name: 'Trace',\n        value: numTraceLogs\n      }, {\n        name: 'Debug',\n        value: numDebugLogs\n      }, {\n        name: 'Info',\n        value: numInfoLogs\n      }, {\n        name: 'Error',\n        value: numErrorLogs\n      }, {\n        name: 'Fatal',\n        value: numFatalLogs\n      }];\n    }\n    get shouldCreateChart() {\n      return (this.runResults || this.hasLogs) && !this.utilChart;\n    }\n    get videoSessions() {\n      let videos = this.videos;\n      if (videos.some(video => video.sessionNum > 1)) {\n        return videos.sort((a, b) => a.sessionNum - b.sessionNum);\n      } else {\n        return [];\n      }\n    }\n    get filesSessions() {\n      let files = this.runResults.files;\n      if (files?.some(file => file.sessionNum > 1)) {\n        const maxSessionNum = Math.max(...files.map(obj => obj.sessionNum));\n        const t = Array.from({\n          length: maxSessionNum\n        }, (_, index) => ({\n          sessionNum: index + 1\n        }));\n        t.unshift({\n          name: \"ALL\",\n          sessionNum: -1\n        });\n        return t;\n      } else {\n        return [];\n      }\n    }\n    get runResultsFiles() {\n      const sessionNum = this.selectedFileSession?.sessionNum;\n      if (typeof sessionNum === 'undefined' || sessionNum === -1) {\n        return this.runResults.files;\n      }\n      return this.runResults.files.filter(c => c.sessionNum === sessionNum);\n    }\n    get runResultsCommands() {\n      const commands = this.runResults.commands;\n      return this.commandLimit ? commands.slice(0, this.maxResults - 1) : commands;\n    }\n    get totalCommands() {\n      return _.filter(this.runResultsCommands, c => {\n        return this.showDetailedCommands || !c.detailed;\n      });\n    }\n    get totalDetailedCommands() {\n      return this.runResultsCommands.length;\n    }\n    get displayedCommands() {\n      const sessionNum = this.selectedCommandSession?.sessionNum;\n      if (typeof sessionNum === 'undefined' || sessionNum === -1) {\n        return this.totalCommands;\n      }\n      return _.filter(this.totalCommands, c => {\n        return c.sessionNum === sessionNum;\n      });\n    }\n    get commandSessions() {\n      const totalCommands = this.totalCommands;\n      if (totalCommands?.some(command => command.sessionNum > 1)) {\n        const maxSessionNum = Math.max(...totalCommands.map(obj => obj.sessionNum));\n        const t = Array.from({\n          length: maxSessionNum\n        }, (_, index) => ({\n          sessionNum: index + 1\n        }));\n        return t;\n      } else {\n        return [];\n      }\n    }\n    get suiteResultsHasDuration() {\n      const scriptType = this.args.model.scriptType;\n      return scriptType !== 'JMeter' && scriptType !== 'Gatling' && scriptType !== 'Locust';\n    }\n    get expectVideo() {\n      return _lib.default.isVisualScriptType(this.args.model.scriptType);\n    }\n    get customMetrics() {\n      const results = this.runResults.results;\n      const answer = [];\n      _.forEach(results, result => {\n        _.forEach(result.metrics, metric => {\n          if (metric.namespace !== _loadTest.default.SystemNs) {\n            answer.push({\n              metric,\n              result\n            });\n          }\n        });\n      });\n      return answer;\n    }\n    pushChartData(data) {\n      if (this.utilChart) {\n        this.utilChart.xAxes.values[0].data.push(data);\n        if (this.utilChart.series.values.length > 0) {\n          _.forEach(this.utilChart.series.values, item => {\n            item.data.push(data);\n          });\n        }\n      }\n    }\n    makeUtilizationChart() {\n      _amcharts2.default.initLicense();\n      if (this.chartRoot) return;\n      let root = am5.Root.new('smokeTestUtilChart');\n      this.chartRoot = root;\n      root.setThemes([_Animated.default.new(root)]);\n      let chart = root.container.children.push(am5xy.XYChart.new(root, {\n        maxTooltipDistance: 0\n      }));\n      chart.zoomOutButton.set(\"forceHidden\", true);\n      this.chart = chart;\n      let xRenderer = am5xy.AxisRendererX.new(root, {});\n      xRenderer.labels.template.set(\"forceHidden\", true);\n      let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {\n        categoryField: \"num\",\n        renderer: xRenderer\n      }));\n      let yRendererMemory = _amcharts2.default.getYRenderer(root, \"#1702FC\");\n      let yAxisMemory = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n        numberFormat: '#.0b',\n        renderer: yRendererMemory\n      }));\n      let seriesMemory = chart.series.push(am5xy.LineSeries.new(root, {\n        xAxis: xAxis,\n        yAxis: yAxisMemory,\n        valueYField: 'memory',\n        categoryXField: 'num',\n        fill: \"#1702FC\",\n        stroke: \"#1702FC\",\n        maskBullets: false,\n        minBulletDistance: 15\n      }));\n      seriesMemory.strokes.template.setAll({\n        strokeWidth: 2\n      });\n      seriesMemory.bullets.push(function () {\n        let circle = am5.Circle.new(root, {\n          radius: 2.5,\n          fill: am5.color(0xffffff),\n          stroke: seriesMemory.get(\"fill\"),\n          strokeWidth: 2\n        });\n        return am5.Bullet.new(root, {\n          sprite: circle\n        });\n      });\n      seriesMemory.set(\"tooltip\", this.getToolTipObj(root, 'memory'));\n      let yRendererCpu = _amcharts2.default.getYRenderer(root, \"#FF6600\", true);\n      let yAxisCpu = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n        numberFormat: '#.##\\s',\n        renderer: yRendererCpu\n      }));\n      let seriesCpu = chart.series.push(am5xy.LineSeries.new(root, {\n        xAxis: xAxis,\n        yAxis: yAxisCpu,\n        valueYField: 'cpu',\n        categoryXField: 'num',\n        categoryYField: 'dateText',\n        fill: \"#FF6600\",\n        stroke: \"#FF6600\",\n        maskBullets: false,\n        minBulletDistance: 15\n      }));\n      seriesCpu.strokes.template.setAll({\n        strokeWidth: 2\n      });\n      seriesCpu.bullets.push(function () {\n        let circle = am5.Circle.new(root, {\n          radius: 2.5,\n          fill: am5.color(0xffffff),\n          stroke: seriesCpu.get(\"fill\"),\n          strokeWidth: 2\n        });\n        return am5.Bullet.new(root, {\n          sprite: circle\n        });\n      });\n      seriesCpu.set(\"tooltip\", this.getToolTipObj(root, 'cpu'));\n      let cursor = chart.set(\"cursor\", am5xy.XYCursor.new(root, {\n        xAxis: xAxis\n      }));\n      cursor.lineX.setAll({\n        visible: false\n      });\n      cursor.lineY.setAll({\n        visible: false\n      });\n      cursor.selection.setAll({\n        fill: am5.color(0x000055),\n        fillOpacity: 0.2\n      });\n      _amcharts2.default.addExportOptions(root);\n      return chart;\n    }\n    getToolTipObj(root, column) {\n      let tooltip = _amcharts2.default.getToolTipObj(root);\n      let currentText = '';\n      tooltip.label.adapters.add(\"text\", () => currentText);\n      tooltip.events.on(\"dataitemchanged\", () => {\n        if (tooltip.dataItem?.dataContext) {\n          const data = tooltip.dataItem.dataContext;\n          currentText = (column === 'memory' ? `Memory: [bold]${data.memoryText}[/]` : `vCPU: [bold]${data.cpu}[/]`) + ' @ {categoryY}';\n        }\n      });\n      return tooltip;\n    }\n    runScript() {\n      if (!this.args.runSmokeTest) return;\n      // Ember 6.12: defer tracked property updates when called from did-update modifier\n      // to avoid autotracking assertion (property read during same render cycle)\n      (0, _runloop.next)(this, () => this._startRun());\n    }\n    _startRun() {\n      const self = this;\n      if (this.socket !== null) {\n        this.socket.close();\n      }\n      this.finish();\n      this.runInProgress = true;\n      this.args.runInProgressStatus(true);\n      this.runResults = {\n        results: new _trackedBuiltIns.TrackedArray(),\n        files: new _trackedBuiltIns.TrackedArray(),\n        suiteResults: new _trackedBuiltIns.TrackedArray(),\n        commands: new _trackedBuiltIns.TrackedArray()\n      };\n      this.consoleText = DefaultRunningText;\n      this.resetProperties();\n\n      // recreate chart\n      if (this.chartRoot) this.chartRoot.dispose();\n      this.chartRoot = null;\n      this.EventBus.publish(\"smokeTestGrid.clear\");\n      const params = _.isObject(this.args.params) ? this.args.params : {};\n      const regionId = this.args.regionId;\n      const platform = this.args.platform;\n      if (regionId) {\n        params['__region__'] = '' + regionId;\n      } else {\n        params['__region__'] = this.args.defaultRegionId;\n      }\n      params['__platform__'] = _.isString(platform) ? platform : '';\n      let socket = _lib.default.newSockjs(_environment.config.apiBaseUrl + \"/real-time/run-script\");\n      socket.onopen = () => {\n        console.log('opening connection to /real-time/run-script');\n        self.startUpdates();\n        if (_environment.config.currentUser.isLoggedIn) {\n          socket.send(JSON.stringify({\n            sid: _environment.config.currentUser.sid\n          }));\n        } else {\n          socket.send(JSON.stringify({\n            subscribe: [this.args.model.id],\n            params: params\n          }));\n        }\n      };\n      socket.onmessage = e => {\n        let wrapper = JSON.parse(e.data);\n        if (!_.isUndefined(wrapper.authenticated)) {\n          socket.send(JSON.stringify({\n            subscribe: [this.args.model.id],\n            params: params\n          }));\n        } else {\n          let event = wrapper.event.data;\n          let phase = wrapper.event.executionType;\n          switch (wrapper.eventType) {\n            case 'Results':\n              {\n                let update = _serialization.default.toResults(this.api.browserManager, phase, io.testable.agent.AgentToServerEvent.getRootAsAgentToServerEvent(self.toFlatbuffer(event)).results());\n                this.pendingResults.push(update);\n                break;\n              }\n            case 'Logs':\n              {\n                let logs = _serialization.default.toLogs(io.testable.agent.AgentToServerEvent.getRootAsAgentToServerEvent(self.toFlatbuffer(event)).log());\n                self.processLogs(logs, phase);\n                break;\n              }\n            case 'Failed':\n              {\n                self.processLogs([{\n                  level: 'Error',\n                  message: event,\n                  timestamp: Date.now()\n                }], phase);\n                break;\n              }\n            case 'Progress':\n              {\n                let progress = _serialization.default.toProgress(io.testable.agent.AgentToServerEvent.getRootAsAgentToServerEvent(self.toFlatbuffer(event)).chunkProgress());\n                self.processProgress(progress, phase);\n                break;\n              }\n            case 'Video':\n              {\n                const wrapperEvent = wrapper.event;\n                if (!this.video && (wrapperEvent.sessionNum == 1 || !wrapperEvent.sessionNum)) {\n                  this.video = wrapperEvent;\n                }\n                const videos = this.videos;\n                videos.push(wrapperEvent);\n                this.videos = [...videos];\n                break;\n              }\n            case 'VncStarted':\n              {\n                if (!this.vncError && !this.vncInfo) this.setVncVals(wrapper.event);\n                const vncInfos = this.vncInfos;\n                vncInfos.push(wrapper.event);\n                this.vncInfos = [...vncInfos];\n                break;\n              }\n            case 'Finished':\n              break;\n          }\n        }\n      };\n      socket.onclose = () => {\n        if (!this.isDestroyed) {\n          this.runInProgress = false;\n          this.args.runInProgressStatus(false);\n          this.args.runSmokeTestStatus(false);\n          this.socket = null;\n          console.log('closing connection to /real-time/run-script');\n          if (!this.hasLogs) {\n            this.consoleText = DefaultConsoleText;\n          }\n        }\n        this.finish();\n      };\n      this.socket = socket;\n    }\n    toFlatbuffer(base64EncodedString) {\n      return new flatbuffers.ByteBuffer(_lib.default.base64ToBinary(base64EncodedString));\n    }\n    toLogLevel(level) {\n      switch (level) {\n        case 'Fatal':\n          return 3;\n        case 'Error':\n          return 2;\n        case 'Info':\n          return 1;\n        case 'Debug':\n          return 0;\n        case 'Trace':\n          return -1;\n        default:\n          return 0;\n      }\n    }\n    printLog(log) {\n      let msg = _lib.default.displayTimestamp(log.timestamp) + ' ' + log.level.toUpperCase() + ' ';\n      msg += log.message + '\\n';\n      return msg;\n    }\n    processLogs(logs, phase) {\n      if (!this.hasLogs) {\n        this.consoleText = '';\n        this.hasLogs = true;\n      }\n      const allLogs = this.logs;\n      const logGroups = this.logGroups;\n      const pendingLogs = this.pendingLogs;\n      const counterUpdates = {};\n      _.forEach(logs, log => {\n        const counterField = 'num' + log.level + 'Logs';\n        counterUpdates[counterField] = (counterUpdates[counterField] || this[counterField]) + 1;\n        log.phase = phase;\n        if (log.group) {\n          let logGroupEntry = _.find(logGroups, lg => {\n            return lg.name === log.group;\n          });\n          if (!logGroupEntry) {\n            logGroupEntry = _object.default.create({\n              name: log.group,\n              count: 0\n            });\n            logGroups.push(logGroupEntry);\n          }\n          (0, _object.set)(logGroupEntry, 'count', logGroupEntry.count + 1);\n          (0, _object.set)(logGroups[0], 'count', logGroups[0].count + 1);\n        }\n        allLogs.push(log);\n        pendingLogs.push(log);\n      });\n      _.forEach(counterUpdates, (val, counterField) => {\n        this[counterField] = val;\n      });\n    }\n    processProgress(progress) {\n      if (progress.memory && progress.memory > this.memory) {\n        this.memory = progress.memory;\n      }\n      let cpu = Math.round(progress.cpu) / 100;\n      if (cpu && cpu > this.cpu) {\n        this.cpu = cpu;\n      }\n      if (progress.memory && cpu) {\n        if (this.utilChart) {\n          this.pushChartData({\n            memory: progress.memory,\n            memoryText: _lib.default.printBytes(progress.memory),\n            cpu: cpu,\n            timestamp: progress.timestamp,\n            num: this.utilCounter,\n            dateText: _lib.default.displayTimestamp(progress.timestamp)\n          });\n        }\n      }\n      if (progress.memory && cpu) {\n        this.utilCounter = this.utilCounter + 1;\n      }\n    }\n    setVncVals(event) {\n      if (event && event.error) this.vncError = event.error;else this.vncInfo = event;\n      const liveView = this.liveView;\n      if (liveView !== 'video') {\n        this.liveView = 'video';\n        (0, _runloop.next)(() => {\n          this.liveView = liveView;\n        });\n      }\n    }\n    startUpdates() {\n      if (!this.isDestroyed) {\n        this.applyUpdates = setInterval(() => {\n          if (this.isDestroyed) {\n            clearInterval(this.applyUpdates);\n          } else {\n            this.applyPendingUpdates();\n          }\n        }, 2000);\n      }\n    }\n    finish() {\n      if (this.applyUpdates) {\n        clearInterval(this.applyUpdates);\n      }\n      this.applyPendingUpdates();\n      this.pendingResults = [];\n      this.pendingLogs = new _trackedBuiltIns.TrackedArray();\n    }\n    applyPendingUpdates() {\n      this.applyPendingResults();\n      this.applyPendingLogs();\n    }\n    applyPendingResults() {\n      let pending = this.pendingResults;\n      if (pending) {\n        this.pendingResults = [];\n        let actions = [];\n        _.forEach(pending, update => {\n          this.applyResult(update, actions);\n        });\n        if (!this.args.model.readonly) {\n          this.updateMetricDefs(pending);\n        }\n        this.EventBus.publish(\"smokeTestGrid.update\", actions);\n      }\n    }\n    applyPendingLogs() {\n      let pending = this.pendingLogs;\n      if (pending) {\n        this.pendingLogs = new _trackedBuiltIns.TrackedArray();\n        this.printLogs(pending);\n      }\n    }\n    applyResult(update, actions) {\n      let runResults = this.runResults;\n      this.commandLimit = true;\n      (0, _object.set)(runResults, 'regionName', update.regionName);\n      let index = this.index;\n      if (_.isArray(update.results)) {\n        _.forEach(update.results, result => {\n          result.index = index++;\n          result.executionType = update.executionType;\n          actions.push({\n            action: 'Insert',\n            result: result\n          });\n        });\n        runResults.results.push(...update.results);\n      }\n      let withScreenshots, cb;\n      if (_.isArray(update.suiteResults)) {\n        withScreenshots = this.getNumSuiteResultsWithScreenshots(update.suiteResults);\n        if (withScreenshots > 0) {\n          cb = _.after(withScreenshots, () => {\n            runResults.suiteResults.push(...update.suiteResults);\n          });\n          _.forEach(update.suiteResults, suiteResult => {\n            _.forEach(suiteResult.testResults, testResult => {\n              if (testResult.screenshots && testResult.screenshots.length > 0) {\n                this.processFiles(runResults, testResult.screenshots, cb);\n              }\n            });\n          });\n        } else {\n          runResults.suiteResults.push(...update.suiteResults);\n        }\n      }\n      if (_.isArray(update.suiteActions)) {\n        withScreenshots = this.getNumSuiteActionsWithScreenshots(update.suiteActions);\n        if (withScreenshots > 0) {\n          cb = _.after(withScreenshots, () => {\n            this.applySuiteActions(update.suiteActions, runResults.suiteResults);\n          });\n          _.forEach(update.suiteActions, suiteAction => {\n            if (suiteAction.action && suiteAction.action.screenshots && suiteAction.action.screenshots.length > 0) {\n              this.processFiles(runResults, suiteAction.action.screenshots, cb);\n            }\n          });\n        } else {\n          this.applySuiteActions(update.suiteActions, runResults.suiteResults);\n        }\n      }\n      if (_.isArray(update.files)) {\n        this.processFiles(runResults, update.files, filesToAdd => {\n          runResults.files.push(...filesToAdd);\n        });\n      }\n      if (!this.selectedFileSession && this.filesSessions.length) this.selectedFileSession = this.getSelectedSession(this.filesSessions);\n      if (update.traceContinuation) {\n        const existingTrace = this.findTraceByUuid(update.traceContinuation.uuid, runResults);\n        if (existingTrace) {\n          existingTrace.packets.push(...update.traceContinuation.packets);\n        }\n      }\n      if (_.isArray(update.commandActions) && update.commandActions.length) {\n        this.applyCommands(update.commandActions, runResults.commands);\n      }\n      if (_.isEmpty(this.selectedCommandSession) && this.commandSessions.length) {\n        this.selectedCommandSession = this.getSelectedSession(this.commandSessions);\n      }\n      this.index = index;\n    }\n    applySuiteActions(suiteActions, suiteResults) {\n      _.forEach(suiteActions, suiteAction => {\n        let suiteResult;\n        switch (suiteAction.type) {\n          case 'StartSuite':\n            suiteResults.push(suiteAction.action);\n            break;\n          case 'FinishSuite':\n            suiteResult = this.findByUuid(suiteResults, suiteAction.action.uuid);\n            if (suiteResult) {\n              (0, _object.setProperties)(suiteResult, {\n                finishedAt: suiteAction.action.finishedAt,\n                duration: suiteAction.action.duration,\n                hasError: suiteAction.action.hasError\n              });\n            }\n            break;\n          case 'StartSuiteTest':\n            suiteResult = this.findByUuid(suiteResults, suiteAction.action.suiteUuid);\n            if (suiteResult) {\n              // if (!suiteAction.action.parentUuid)\n              suiteResult.testResults.push(suiteAction.action);\n            }\n            break;\n          case 'FinishSuiteTest':\n            suiteResult = this.findByUuid(suiteResults, suiteAction.action.suiteUuid);\n            if (suiteResult) {\n              const testResult = this.findByUuid(suiteResult.testResults, suiteAction.action.uuid);\n              if (testResult) {\n                if (suiteAction.action.state === 'Delete') {\n                  (0, _object.setProperties)(suiteResult, {\n                    testResults: this.removeByUuid(suiteResult.testResults, suiteAction.action.uuid)\n                  });\n                } else {\n                  (0, _object.setProperties)(testResult, {\n                    finishedAt: suiteAction.action.finishedAt,\n                    duration: suiteAction.action.duration,\n                    state: suiteAction.action.state,\n                    errorType: suiteAction.action.errorType,\n                    error: suiteAction.action.error,\n                    errorTrace: suiteAction.action.errorTrace\n                  });\n                  if (suiteAction.action.annotations && suiteAction.action.annotations.length > 0) {\n                    (0, _object.set)(testResult, 'annotations', suiteAction.action.annotations);\n                  }\n                  if (suiteAction.action.screenshots && suiteAction.action.screenshots.length > 0) {\n                    (0, _object.set)(testResult, 'screenshots', suiteAction.action.screenshots);\n                  }\n                }\n              }\n            }\n            break;\n        }\n      });\n    }\n    findByUuid(items, uuid) {\n      return _.find(items, item => {\n        return item.uuid === uuid;\n      });\n    }\n    findById(items, id) {\n      return _.find(items, item => item.id === id);\n    }\n    removeByUuid(items, uuid) {\n      return _.filter(items, item => {\n        return item.uuid !== uuid;\n      });\n    }\n    getSelectedSession(array) {\n      return array.reduce((minObject, currentObject) => currentObject['sessionNum'] < minObject['sessionNum'] ? currentObject : minObject);\n    }\n    findExistingFile(runResults, candidateFile) {\n      const uuid = candidateFile.uuid;\n      let target = _.find(runResults.files, file => {\n        return file.uuid === uuid;\n      });\n      if (!target) {\n        _.forEach(runResults.suiteResults, suiteResult => {\n          _.forEach(suiteResult.testResults, testResult => {\n            _.forEach(testResult.screenshots, screenshot => {\n              if (screenshot.uuid === uuid) {\n                target = screenshot;\n              }\n            });\n          });\n        });\n      }\n      return target;\n    }\n    processFiles(runResults, files, onFinish) {\n      if (!files || files.length === 0) {\n        if (onFinish) {\n          onFinish([]);\n        }\n        return;\n      }\n      const results = [];\n      const cb = _.after(files.length, () => {\n        if (onFinish) {\n          onFinish(results);\n        }\n      });\n      _.forEach(files, file => {\n        if (file.contentType.indexOf('image/') === 0) {\n          file.isImage = true;\n        }\n        if (file.contentType.indexOf('video/') === 0) {\n          file.isVideo = true;\n        }\n        const lookupExisting = file.uuid && (file.hasMorePackets || file.isFinalPacket);\n        let targetFile = lookupExisting ? this.findExistingFile(runResults, file) : null;\n        if (targetFile) {\n          targetFile.contents.push(file.contents[0]);\n          (0, _object.set)(targetFile, 'length', targetFile.length + file.length);\n        } else if (file.relatedSuiteTestUuid && runResults.suiteResults) {\n          targetFile = file;\n          const suiteResult = file.relatedSuiteUuid ? this.findByUuid(runResults.suiteResults, file.relatedSuiteUuid) : _.find(runResults.suiteResults, suiteResult => {\n            return this.findByUuid(suiteResult.testResults, file.relatedSuiteTestUuid) ? true : false;\n          });\n          if (suiteResult && file.isImage) {\n            const testResult = this.findByUuid(suiteResult.testResults, file.relatedSuiteTestUuid);\n            if (testResult) {\n              if (!testResult.screenshots) {\n                (0, _object.set)(testResult, 'screenshots', []);\n              }\n              testResult.screenshots.push(file);\n            }\n          } else {\n            runResults.files.push(file);\n          }\n        } else {\n          targetFile = file;\n          results.push(file);\n        }\n        if (!file.hasMorePackets) {\n          (0, _object.set)(targetFile, 'blob', new Blob(targetFile.contents, {\n            type: targetFile.contentType + (targetFile.charset ? ';charset=' + targetFile.charset.toLowerCase() : '')\n          }));\n          _lib.default.toDataUrl(targetFile.blob, dataUri => {\n            (0, _object.setProperties)(targetFile, {\n              dataUri: dataUri,\n              hasMorePackets: false\n            });\n            cb();\n          });\n        } else {\n          cb();\n        }\n      });\n    }\n    findTraceByUuid(uuid, runResults) {\n      const result = _.find(runResults.results, result => {\n        return result.trace && result.trace.uuid === uuid;\n      });\n      return result ? result.trace : null;\n    }\n    getNumSuiteResultsWithScreenshots(suiteResults) {\n      let count = 0;\n      _.forEach(suiteResults, suiteResult => {\n        _.forEach(suiteResult.testResults, testResult => {\n          if (testResult.screenshots && testResult.screenshots.length > 0) {\n            count++;\n          }\n        });\n      });\n      return count;\n    }\n    getNumSuiteActionsWithScreenshots(suiteActions) {\n      let count = 0;\n      _.forEach(suiteActions, suiteAction => {\n        if (suiteAction.action && suiteAction.action.screenshots && suiteAction.action.screenshots.length > 0) {\n          count++;\n        }\n      });\n      return count;\n    }\n    applyCommands(commands, commandResults) {\n      const sessions = this.sessions;\n      _.forEach(commands, command => {\n        let cmd;\n        switch (command.type) {\n          case 'StartStream':\n            sessions.push({\n              id: command.action.id,\n              sessionNum: command.action.sessionNum\n            });\n            this.sessions = sessions;\n            break;\n          case 'FinishStream':\n            break;\n          case 'StartCommand':\n            cmd = new _trackedBuiltIns.TrackedObject({});\n            cmd.id = command.action.id;\n            cmd.startOffset = command.action.offset;\n            cmd.detailed = command.action.detailed;\n            cmd.params = command.action.params;\n            cmd.error = command.action.error;\n            cmd.status = command.action.status;\n            cmd.startedAt = command.action.started;\n            cmd.request = command.action.requestBody;\n            cmd.response = command.action.responseBody;\n            cmd.commandName = command.action.name;\n            cmd.sessionNum = sessions.find(session => session.id === command.action.streamId)?.sessionNum || null;\n            cmd.description = command.action.name; // todo: pending\n            cmd.state = command.action.success === true ? 'Passed' : command.action.success === false ? 'Failed' : 'InProgress';\n            cmd.videoOffset = command.action.videoOffset;\n            cmd.isSmoke = true;\n            commandResults.push(cmd);\n            break;\n          case 'FinishCommand':\n            cmd = this.findById(commandResults, command.action.id);\n            if (cmd) {\n              this.processFiles([], command.action.files, () => {\n                Object.assign(cmd, {\n                  browser: command.action.browser,\n                  files: command.action.files,\n                  filesLength: command.action.filesLength,\n                  id: command.action.id,\n                  duration: command.action.duration,\n                  params: command.action.params,\n                  error: command.action.error,\n                  status: command.action.status,\n                  finished: command.action.finished,\n                  request: command.action.requestBody,\n                  response: command.action.responseBody,\n                  commandName: command.action.name,\n                  description: command.action.name,\n                  // todo: pending\n                  state: command.action.success === true ? 'Passed' : command.action.success === false ? 'Failed' : 'InProgress'\n                });\n              });\n            }\n            break;\n        }\n      });\n    }\n    updateMetricDefs(resultUpdates) {\n      const updates = {};\n      const currentMetricDefs = this.args.model.testCase.metricDefs;\n      _.forEach(resultUpdates, resultUpdate => {\n        _.forEach(resultUpdate.results, result => {\n          _.forEach(result.metrics, metric => {\n            if (metric.namespace && metric.name && metric.namespace !== _loadTest.default.SystemNs && !_loadTest.default.findMetricDef(metric.namespace, metric.name, currentMetricDefs)) {\n              const key = _lib.default.toMetricKey(metric.namespace, metric.name);\n              if (!updates[key]) {\n                updates[key] = {\n                  namespace: metric.namespace,\n                  name: metric.name,\n                  metricType: metric.metricType,\n                  metricUnits: metric.metricUnits\n                };\n              }\n            }\n          });\n        });\n      });\n      if (!_.isEmpty(updates)) {\n        _server.default.updateMetricDefs(this.args.model.testCase.id, _.values(updates)).then(latestMetricDefs => {\n          this.args.model.testCase.metricDefs = latestMetricDefs;\n        }, () => {\n          // not a critical failure so just swallow the error\n        });\n      }\n    }\n    loggingLevelChanged(newValue) {\n      this.loggingLevel = newValue;\n      this.changeLogFilters();\n    }\n    logGroupChanged(newValue) {\n      this.logGroup = this.logGroups.find(lg => lg.name === newValue);\n      this.changeLogFilters();\n    }\n    changeLogFilters() {\n      this.consoleText = '';\n      this.printLogs(this.logs);\n    }\n    printLogs(logs) {\n      let minLevel = this.toLogLevel(this.loggingLevel);\n      let logGroup = this.logGroup;\n      let filteredLogs = _.filter(logs, log => {\n        return this.toLogLevel(log.level) >= minLevel && (!logGroup || logGroup.name === 'ALL' || logGroup.name === log.group);\n      });\n      let consoleText = this.hasLogs ? this.consoleText : '';\n      _.forEach(filteredLogs, log => {\n        consoleText += this.printLog(log);\n      });\n      this.consoleText = consoleText;\n    }\n    videoSeekPositionFunction(position) {\n      this.videoSeekPosition = position;\n      $('#video').collapse(\"show\");\n    }\n    onChangeCommandSession(selectedSession) {\n      this.selectedCommandSession = selectedSession;\n      this.selectedFileSession = this.filesSessions.find(file => file.sessionNum === selectedSession.sessionNum);\n      this.video = this.videoSessions.find(video => video.sessionNum === selectedSession.sessionNum);\n    }\n    onChangeVideoSession(selectedSession) {\n      this.video = selectedSession;\n      const event = this.vncInfos.find(vi => vi.session === selectedSession.sessionNum);\n      this.setVncVals(event);\n      this.selectedCommandSession = this.commandSessions.find(command => command.sessionNum === selectedSession.sessionNum);\n      this.selectedFileSession = this.filesSessions.find(file => file.sessionNum === selectedSession.sessionNum);\n    }\n    onChangeFileSession(selectedSession) {\n      this.selectedFileSession = selectedSession;\n      if (selectedSession.sessionNum > 0) {\n        this.selectedCommandSession = this.commandSessions.find(command => command.sessionNum === selectedSession.sessionNum);\n        this.video = this.videoSessions.find(video => video.sessionNum === selectedSession.sessionNum);\n      }\n    }\n    cancelRunAction() {\n      if (this.socket !== null && this.args.cancelRun) {\n        this.socket.close();\n      }\n    }\n    downloadFile(file) {\n      saveAs(file.blob, file.name);\n    }\n    toggleLiveView(value) {\n      this.liveView = value;\n      if (value === 'interactive') this.showVncPanel = true;\n    }\n    resultSelected(result) {\n      this.selectedResult = result;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"runInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"pendingResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"pendingLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"logGroup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"logGroups\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loggingLevel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"consoleText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return DefaultConsoleText;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"runResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedResult\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"index\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"hasLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"logs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"videos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"liveView\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"showVncPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"video\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"vncInfos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"vncInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"vncError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"numTraceLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"numDebugLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"numInfoLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"numErrorLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"numFatalLogs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"memory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"cpu\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"memoryUtilization\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"cpuUtilization\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"utilIntervals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"utilCounter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"utilChart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"commandLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"socket\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"sessions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"selectedCommandSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"selectedFileSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"videoSeekPosition\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"applyUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"chartRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"chart\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"showDetailedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onRunStart\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRunStart\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSessions\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSessions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filesSessions\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"filesSessions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runResultsFiles\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"runResultsFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runResultsCommands\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"runResultsCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"totalCommands\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"totalCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"totalDetailedCommands\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"totalDetailedCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"displayedCommands\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"displayedCommands\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commandSessions\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"commandSessions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"customMetrics\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"customMetrics\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runScript\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runScript\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loggingLevelChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loggingLevelChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"logGroupChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"logGroupChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeLogFilters\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeLogFilters\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSeekPositionFunction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSeekPositionFunction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeCommandSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeCommandSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeVideoSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeVideoSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeFileSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeFileSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelRunAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelRunAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleLiveView\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleLiveView\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultSelected\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioSmokeTestComponent);\n});","define(\"@testable/shared-ui/components/scenario/type-picker\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row bordered-panels scenario-types\">\n  \n    {{#unless this.isFunctionalTest}}\n    <div class=\"col-xl-6 col-lg-12\">\n      <div class=\"panel\">\n        <div class=\"panel-body\">\n          <h5>\n            Network Protocol Level (Most Efficient) <Ui::InfoIcon\n                  @content=\"These tools operate at the network protocol level to generate load. They allow to execute HTTP requests, websocket connections, and TCP sockets. They typically generate load ~100x more efficiently than with browser level tools.\"\n                  @placement=\"bottom\" />\n          </h5>\n          <div class=\"m-t-20\">\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"script\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full {{if\n                                                                       (eq this.selectedType 'script') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-node-js fa-2x\" class=\"pull-left m-r-10 text-black\" />\n              <b>Node.js Script\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Define the scenario with a script written in Javascript. It executes in a sandboxed Node.js environment during the test.\" /></b><br />\n              <small>Each virtual user will run the Node.js script</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"jmeter\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                       (eq this.selectedType 'jmeter') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-java fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>JMeter Test Plan <Ui::InfoIcon @isHtml={{true}} @content=\"Run a JMeter test plan as the scenario.\" /></b><br />\n              <small>Run one or more JMeter instances to generate load</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"gatling\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                        (eq this.selectedType 'gatling') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-code fa-2x\" class=\"pull-left m-r-10 text-black\" />\n              <b>Gatling Simulation\n                <Ui::InfoIcon @isHtml={{true}} @content=\"Run a Gatling simulation as the scenario.\" /></b><br />\n              <small>Run one or more Gatling instances to generate load</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"locust\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                       (eq this.selectedType 'locust') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-python fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>Locust File (Python or Locust4j)\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Run a Locust.io test as the scenario. Supports both python and Locust4j.\" /></b><br />\n              <small>Run one or more Locust instances to generate load</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"monitor\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                       (eq this.selectedType 'monitor') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-python fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>Monitor\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Monitor your endpoints via a ping, port monitor, HTTP check, etc.\" /></b><br />\n              <small>Monitor your hosts, websites, and APIs</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"har\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                    (eq this.selectedType 'har') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-reply-all fa-2x\" class=\"pull-left m-r-10 text-black\" />\n              <b>Replay HAR File\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Replay an uploaded HTTP Archive file (HAR) as the scenario.\" /></b><br />\n              <small>Replay a HAR file as the scenario for each virtual user</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"postman\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                    (eq this.selectedType 'postman') 'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-envelope fa-2x\" class=\"pull-left m-r-10 text-black\" />\n              <b>Postman\n                <Ui::InfoIcon @isHtml={{true}} @content=\"Replay Postman collections as the scenario.\" /></b><br />\n              <small>Run Postman collections for each virtual user</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"java\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                    (eq this.selectedType 'java')\n                    'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-java fa-2x\" class=\"pull-left m-r-10 text-black\" />\n              <b>Java (JUnit, TestNG)\n                <Ui::InfoIcon @isHtml={{true}}\n                              @content=\"Run a Java Code as the scenario.\" /></b><br />\n              <small>Each virtual user runs your Java code</small>\n            </button>\n            {{#if (and this.envConfig.isRecordingEnabled (not @changeEligibleOnly))}}\n              <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"recording\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                            (eq this.selectedType 'recording')\n                                                                            'selected-button'}}\">\n                <Ui::Icon @icon=\"fa fa-camera fa-2x\" class=\" pull-left m-r-10 text-black\" />\n                <b>Create Recording\n                  <Ui::InfoIcon @isHtml={{true}}\n                            @content=\"A forward http proxy and a reverse proxy will be generated to record traffic for replay as a load test.\" /></b><br />\n                <small>Record traffic with our proxies and replay</small>\n              </button>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n    {{/unless}}\n  \n    <div class=\"{{if this.isFunctionalTest 'col-xl-12' 'col-xl-6'}} col-lg-12\">\n      <div class=\"panel\">\n        <div class=\"panel-body\">\n          {{#unless this.isFunctionalTest}}\n            <h5>\n              Browser Level <Ui::InfoIcon\n                    @content=\"Simulate virtual users on a website using headless browsers. These tools make it easy to reproduce user journeys through your website without having to understand how to translate these journeys into network level traffic (e.g. HTTP requests). There is a trade off in efficiency since they require significantly more resources per virtual user.\"\n                    @placement=\"bottom\" />\n            </h5>\n          {{/unless}}\n          <div class=\"{{unless this.isFunctionalTest 'm-t-20'}}\">\n            {{#if (and (not @changeEligibleOnly) (not this.isFunctionalTest))}}\n              <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"loadInChrome\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full {{if\n                                                                               (eq this.selectedType 'loadInChrome')\n                                                                               'selected-button'}}\">\n                <Ui::Icon @icon=\"fab fa-chrome fa-2x\" class=\"pull-left m-r-10 text-black\" />\n                <b>Load in Chrome\n                  <Ui::InfoIcon @isHtml={{true}}\n                            @content=\"Defines a scenario where your target URL is loaded in a Chrome browser. Use Selenium tools, PhantomJS, or SlimerJS for more advanced scenarios.\" /></b><br />\n                <small>Load a website URL in Chrome per virtual user</small>\n              </button>\n            {{/if}}\n  \n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"selenium\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                         (eq this.selectedType 'selenium')\n                                                                         'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-window-maximize fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>Selenium (Webdriver.io, Protractor, Js, Java, Serenity)\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Run a Selenium test per virtual user. Currently supports Webdriver.io, Protractor, Javascript, and Java bindings including the Serenity (Java) and Mocha (Javascript) frameworks.\" /></b><br />\n              <small>Each virtual user runs your Selenium script</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"puppeteer\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                    (eq this.selectedType 'puppeteer')\n                    'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-expand-arrows-alt fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>Puppeteer\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Run a Puppeteer test per virtual user.\" /></b><br />\n              <small>Each virtual user runs your Puppeteer script</small>\n            </button>\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"playwright\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                    (eq this.selectedType 'playwright')\n                    'selected-button'}}\">\n              <Ui::Icon @icon=\"fa fa-theater-masks fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>Playwright\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Run a Playwright test per virtual user.\" /></b><br />\n              <small>Each virtual user runs your Playwright Library script or Playwright Test suite</small>\n            </button>\n            <Ui::FeatureFlagContainer class=\"m-t-10\" @feature=\"monitor.scenario_types.ai\" as |feature|>\n              <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"ai\") }} disabled={{or @scenarioButtonsDisabled (not feature.allowed)}} class=\"btn btn-lg width-full {{if feature.allowed 'btn-default' 'border-0'}} {{if\n                      (eq this.selectedType 'ai')\n                      'selected-button'}}\">\n                <Ui::Icon @icon=\"fa fa-robot fa-2x\" class=\"pull-left m-r-10 {{if feature.allowed 'text-black' 'text-muted'}}\" />\n                <b class={{unless feature.allowed \"text-muted\"}}>AI\n                  <Ui::InfoIcon @isHtml={{true}}\n                            @content=\"Describe your test in natural language and let AI generate and run it.\" /></b><br />\n                <small class={{unless feature.allowed \"text-muted\"}}>Describe your test in natural language</small>\n              </button>\n            </Ui::FeatureFlagContainer>\n  \n            {{#unless this.isFunctionalTest}}\n            <button type=\"button\" {{on \"click\" (fn this.scenarioTypeSelected \"phantomjs\") }} disabled={{@scenarioButtonsDisabled}} class=\"btn btn-lg btn-default width-full m-t-10 {{if\n                                                                          (eq this.selectedType 'phantomjs')\n                                                                          'selected-button'}}\">\n              <Ui::Icon @icon=\"fab fa-js fa-2x\" class=\" pull-left m-r-10 text-black\" />\n              <b>PhantomJS or SlimerJS Script\n                <Ui::InfoIcon @isHtml={{true}}\n                          @content=\"Run a PhantomJS or SlimerJS script as the scenario.\" /></b><br />\n              <small>Each virtual user runs your PhantomJS or SlimerJS script</small>\n            </button>\n            {{/unless}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"row bordered-panels scenario-types\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"isFunctionalTest\\\"]]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"col-xl-6 col-lg-12\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h5\\\"],[12],[1,\\\"\\\\n          Network Protocol Level (Most Efficient) \\\"],[8,[39,3],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"These tools operate at the network protocol level to generate load. They allow to execute HTTP requests, websocket connections, and TCP sockets. They typically generate load ~100x more efficiently than with browser level tools.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"m-t-20\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"script\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"script\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-node-js fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Node.js Script\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Define the scenario with a script written in Javascript. It executes in a sandboxed Node.js environment during the test.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user will run the Node.js script\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"jmeter\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"jmeter\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-java fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"JMeter Test Plan \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a JMeter test plan as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Run one or more JMeter instances to generate load\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"gatling\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"gatling\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-code fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Gatling Simulation\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Gatling simulation as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Run one or more Gatling instances to generate load\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"locust\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"locust\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-python fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Locust File (Python or Locust4j)\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Locust.io test as the scenario. Supports both python and Locust4j.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Run one or more Locust instances to generate load\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"monitor\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"monitor\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-python fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Monitor\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Monitor your endpoints via a ping, port monitor, HTTP check, etc.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Monitor your hosts, websites, and APIs\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"har\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"har\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-reply-all fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Replay HAR File\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Replay an uploaded HTTP Archive file (HAR) as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Replay a HAR file as the scenario for each virtual user\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"postman\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"postman\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-envelope fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Postman\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Replay Postman collections as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Run Postman collections for each virtual user\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"java\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"java\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-java fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Java (JUnit, TestNG)\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Java Code as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user runs your Java code\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"envConfig\\\",\\\"isRecordingEnabled\\\"]],[28,[37,14],[[30,2]],null]],null],[[[1,\\\"            \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"recording\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"recording\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-camera fa-2x\\\"]],null],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Create Recording\\\\n                \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"A forward http proxy and a reverse proxy will be generated to record traffic for replay as a load test.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Record traffic with our proxies and replay\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,0,[\\\"isFunctionalTest\\\"]],\\\"col-xl-12\\\",\\\"col-xl-6\\\"],\\\" col-lg-12\\\"]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isFunctionalTest\\\"]]],[[[1,\\\"          \\\"],[10,\\\"h5\\\"],[12],[1,\\\"\\\\n            Browser Level \\\"],[8,[39,3],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Simulate virtual users on a website using headless browsers. These tools make it easy to reproduce user journeys through your website without having to understand how to translate these journeys into network level traffic (e.g. HTTP requests). There is a trade off in efficiency since they require significantly more resources per virtual user.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[15,0,[29,[[52,[51,[30,0,[\\\"isFunctionalTest\\\"]]],\\\"m-t-20\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[28,[37,14],[[30,2]],null],[28,[37,14],[[30,0,[\\\"isFunctionalTest\\\"]]],null]],null],[[[1,\\\"            \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"loadInChrome\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"loadInChrome\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],[[24,0,\\\"pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-chrome fa-2x\\\"]],null],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[12],[1,\\\"Load in Chrome\\\\n                \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Defines a scenario where your target URL is loaded in a Chrome browser. Use Selenium tools, PhantomJS, or SlimerJS for more advanced scenarios.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[12],[1,\\\"Load a website URL in Chrome per virtual user\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"selenium\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"selenium\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-window-maximize fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Selenium (Webdriver.io, Protractor, Js, Java, Serenity)\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Selenium test per virtual user. Currently supports Webdriver.io, Protractor, Javascript, and Java bindings including the Serenity (Java) and Mocha (Javascript) frameworks.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user runs your Selenium script\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"puppeteer\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"puppeteer\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-expand-arrows-alt fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Puppeteer\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Puppeteer test per virtual user.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user runs your Puppeteer script\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"playwright\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"playwright\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-theater-masks fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"Playwright\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a Playwright test per virtual user.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user runs your Playwright Library script or Playwright Test suite\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,15],[[24,0,\\\"m-t-10\\\"]],[[\\\"@feature\\\"],[\\\"monitor.scenario_types.ai\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[28,[37,16],[[30,1],[28,[37,14],[[30,3,[\\\"allowed\\\"]]],null]],null]],[16,0,[29,[\\\"btn btn-lg width-full \\\",[52,[30,3,[\\\"allowed\\\"]],\\\"btn-default\\\",\\\"border-0\\\"],\\\" \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"ai\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"ai\\\"],null]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],[[16,0,[29,[\\\"pull-left m-r-10 \\\",[52,[30,3,[\\\"allowed\\\"]],\\\"text-black\\\",\\\"text-muted\\\"]]]]],[[\\\"@icon\\\"],[\\\"fa fa-robot fa-2x\\\"]],null],[1,\\\"\\\\n              \\\"],[10,\\\"b\\\"],[15,0,[52,[51,[30,3,[\\\"allowed\\\"]]],\\\"text-muted\\\"]],[12],[1,\\\"AI\\\\n                \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Describe your test in natural language and let AI generate and run it.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,\\\"small\\\"],[15,0,[52,[51,[30,3,[\\\"allowed\\\"]]],\\\"text-muted\\\"]],[12],[1,\\\"Describe your test in natural language\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"isFunctionalTest\\\"]]],[[[1,\\\"          \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,1]],[16,0,[29,[\\\"btn btn-lg btn-default width-full m-t-10 \\\",[52,[28,[37,6],[[30,0,[\\\"selectedType\\\"]],\\\"phantomjs\\\"],null],\\\"selected-button\\\"]]]],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"scenarioTypeSelected\\\"]],\\\"phantomjs\\\"],null]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,9],[[24,0,\\\" pull-left m-r-10 text-black\\\"]],[[\\\"@icon\\\"],[\\\"fab fa-js fa-2x\\\"]],null],[1,\\\"\\\\n            \\\"],[10,\\\"b\\\"],[12],[1,\\\"PhantomJS or SlimerJS Script\\\\n              \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"Run a PhantomJS or SlimerJS script as the scenario.\\\"]],null],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n            \\\"],[10,\\\"small\\\"],[12],[1,\\\"Each virtual user runs your PhantomJS or SlimerJS script\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@scenarioButtonsDisabled\\\",\\\"@changeEligibleOnly\\\",\\\"feature\\\"],[\\\"div\\\",\\\"unless\\\",\\\"h5\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"if\\\",\\\"eq\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"b\\\",\\\"br\\\",\\\"small\\\",\\\"and\\\",\\\"not\\\",\\\"ui/feature-flag-container\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/type-picker.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioTypePickerComponent = _exports.default = (_class = class ScenarioTypePickerComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor2, this);\n      _initializerDefineProperty(this, \"scenarioType\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isFunctionalTest\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedType\", _descriptor5, this);\n      _defineProperty(this, \"isTypeDisabled\", type => {\n        return this.args.disabledTypes?.includes(type);\n      });\n      this.isFunctionalTest = this.api.currentUser.isFunctionalTest();\n      this.selectedType = this.args.scenarioType;\n    }\n    scenarioTypeSelected(scenarioType) {\n      if (this.isTypeDisabled(scenarioType)) return;\n      this.selectedType = scenarioType;\n      if (typeof this.args.scenarioTypeSelected === 'function') {\n        this.args.scenarioTypeSelected(scenarioType);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"scenarioType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isFunctionalTest\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"scenarioTypeSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"scenarioTypeSelected\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioTypePickerComponent);\n});","define(\"@testable/shared-ui/components/scenario/ui/additional-panel-wrapper\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex gap-2 mb-2 flex-wrap\">\n    {{#each @additionalWrappers as |panel|}}\n      <button type=\"button\" class=\"btn btn-default not-disable\" {{on \"click\" (fn this.expandPanel panel.id)}}>{{panel.name}}</button>\n    {{/each}}\n  </div>\n  \n  {{yield\n    (hash\n      AdditionalWrapper=(component\n      \"scenario/ui/additional-wrapper\"\n      )\n    )\n  }}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"d-flex gap-2 mb-2 flex-wrap\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,1]],null]],null],null,[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-default not-disable\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,5],[[30,0,[\\\"expandPanel\\\"]],[30,2,[\\\"id\\\"]]],null]],null],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[18,3,[[28,[37,7],null,[[\\\"AdditionalWrapper\\\"],[[50,\\\"scenario/ui/additional-wrapper\\\",0,null,null]]]]]],[1,\\\"\\\\n\\\"]],[\\\"@additionalWrappers\\\",\\\"panel\\\",\\\"&default\\\"],[\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ui/additional-panel-wrapper.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioUiAdditionalPanelWrapperComponent = _exports.default = (_class = class ScenarioUiAdditionalPanelWrapperComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"selectedTab\", _descriptor, this);\n      if (this.selectedTab && !this.args.handledChild) {\n        (0, _runloop.next)(() => {\n          this.expandPanel(this.selectedTab, {});\n        });\n      }\n    }\n    expandPanel(selected, e) {\n      e.preventDefault?.();\n      this.args.additionalWrappers?.forEach(tab => {\n        const panel = document.getElementById(`collapse-${tab.id}`);\n        const panelHeader = document.querySelector(`[data-bs-target=\"#collapse-${tab.id}\"]`);\n        if (tab.id === selected) {\n          if (!panel?.classList.contains('show')) {\n            panel?.classList.add('show');\n            panelHeader?.classList.remove('collapsed');\n          }\n          // panel.scrollIntoView({ behavior: 'smooth', top: 0 });\n        } else {\n          panelHeader?.classList.add('collapsed');\n          if (panel?.classList.contains('show')) {\n            panel?.classList.remove('show');\n          }\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selectedTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.selectedTab || 'general';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"expandPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandPanel\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioUiAdditionalPanelWrapperComponent);\n});","define(\"@testable/shared-ui/components/scenario/ui/additional-wrapper\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"accordion-item\">\n    <h2 class=\"accordion-header\" id={{@id}}>\n      <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse-{{@id}}\" aria-expanded=\"true\" aria-controls=\"collapse-{{@id}}\">\n        {{yield to=\"title\"}}\n      </button>\n    </h2>\n    <div id=\"collapse-{{@id}}\" class=\"accordion-collapse collapse {{if (eq @selectedTab @id) \"show\"}}\" aria-labelledby={{@id}}>\n      <div class=\"accordion-body\">\n        {{yield to=\"content\"}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"accordion-item\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"h2\\\"],[14,0,\\\"accordion-header\\\"],[15,1,[30,1]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"button\\\"],[14,0,\\\"accordion-button collapsed\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#collapse-\\\",[30,1]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[15,\\\"aria-controls\\\",[29,[\\\"collapse-\\\",[30,1]]]],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n      \\\"],[18,3,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"collapse-\\\",[30,1]]]],[15,0,[29,[\\\"accordion-collapse collapse \\\",[52,[28,[37,5],[[30,2],[30,1]],null],\\\"show\\\"]]]],[15,\\\"aria-labelledby\\\",[30,1]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"accordion-body\\\"],[12],[1,\\\"\\\\n      \\\"],[18,4,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\",\\\"@selectedTab\\\",\\\"&title\\\",\\\"&content\\\"],[\\\"div\\\",\\\"h2\\\",\\\"button\\\",\\\"yield\\\",\\\"if\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ui/additional-wrapper.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"additional-wrapper\"));\n});","define(\"@testable/shared-ui/components/scenario/ui/editor-wrapper\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"test-panel\" class=\"panel\" data-sortable=\"false\">\n    {{#unless (eq @model.metadata.bindings \"remote\")}}\n      <div class=\"expand-icon\">\n        <a class=\"btn btn-sm btn-icon btn-circle\" {{on \"click\" this.toggleExpandFilesPanel}} data-click=\"panel-expand\">\n          <Ui::Icon @icon=\"fa fa-expand\" />\n        </a>\n      </div>\n    {{/unless}}\n  \n    <form class=\"form-horizontal\" data-parsley-trigger=\"focusout\" ...attributes>\n      <fieldset disabled={{@readonly}}>\n  \n        <div class=\"s-container scenario-fields\">\n          <fieldset class=\"ss-panel\">\n            {{yield (hash Filters=(component \"empty\" ))}}\n          </fieldset>\n          {{yield (hash AiFilters=(component \"empty\" ))}}\n        </div>\n      </fieldset>\n  \n      <div class=\"s-container editor-wrapper\">\n        <div class=\"sl-panel-wrapper\">\n          {{yield\n            (hash\n              LeftPanel=(component\n              \"scenario/ui/left-panel\"\n              updateLeftPanel=this.updateLeftPanel\n              )\n            )\n          }}\n        </div>\n        {{yield\n          (hash RightPanel=(component\n          \"scenario/ui/right-panel\"\n          updateLeftPanel=(fn (mut this.updateLeftPanel))\n          ))\n        }}\n      </div>\n    </form>\n  \n    <div class=\"s-footer\">\n      <div><span id=\"selected-file-path\"></span></div>\n      <div>\n        <span id=\"editorSavedStatus\" class=\"btn btn-success btn-xs m-l-5 saved-status\">{{@editorSavedStatus}}</span>\n        <span\n          class=\"m-l-10\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-title=\"{{print-datetime @model.updatedAt}}\">\n            Last updated {{live-relative-duration @model.updatedAt}}\n        </span>\n      </div>\n    </div>\n  </div>\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,1,\\\"test-panel\\\"],[14,0,\\\"panel\\\"],[14,\\\"data-sortable\\\",\\\"false\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,2],[[30,1,[\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"expand-icon\\\"],[12],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle\\\"],[24,\\\"data-click\\\",\\\"panel-expand\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"toggleExpandFilesPanel\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[17,2],[12],[1,\\\"\\\\n    \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,3]],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"s-container scenario-fields\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"ss-panel\\\"],[12],[1,\\\"\\\\n          \\\"],[18,5,[[28,[37,9],null,[[\\\"Filters\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[18,5,[[28,[37,9],null,[[\\\"AiFilters\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"s-container editor-wrapper\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"sl-panel-wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[18,5,[[28,[37,9],null,[[\\\"LeftPanel\\\"],[[50,\\\"scenario/ui/left-panel\\\",0,null,[[\\\"updateLeftPanel\\\"],[[30,0,[\\\"updateLeftPanel\\\"]]]]]]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[18,5,[[28,[37,9],null,[[\\\"RightPanel\\\"],[[50,\\\"scenario/ui/right-panel\\\",0,null,[[\\\"updateLeftPanel\\\"],[[28,[37,11],[[28,[37,12],[[30,0,[\\\"updateLeftPanel\\\"]]],null]],null]]]]]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"s-footer\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[12],[10,1],[14,1,\\\"selected-file-path\\\"],[12],[13],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,1,\\\"editorSavedStatus\\\"],[14,0,\\\"btn btn-success btn-xs m-l-5 saved-status\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"m-l-10\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[15,\\\"data-bs-title\\\",[29,[[28,[37,14],[[30,1,[\\\"updatedAt\\\"]]],null]]]],[12],[1,\\\"\\\\n          Last updated \\\"],[1,[28,[35,15],[[30,1,[\\\"updatedAt\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[\\\"@model\\\",\\\"&attrs\\\",\\\"@readonly\\\",\\\"@editorSavedStatus\\\",\\\"&default\\\"],[\\\"div\\\",\\\"unless\\\",\\\"eq\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"form\\\",\\\"fieldset\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"fn\\\",\\\"mut\\\",\\\"span\\\",\\\"print-datetime\\\",\\\"live-relative-duration\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ui/editor-wrapper.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioUiEditorWrapperComponent = _exports.default = (_class = class ScenarioUiEditorWrapperComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor, this);\n      _initializerDefineProperty(this, \"updateLeftPanel\", _descriptor2, this);\n    }\n    toggleExpandFilesPanel() {\n      this.filesPanelExpanded = !this.filesPanelExpanded;\n      this.args.onExpand?.(this.filesPanelExpanded);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"updateLeftPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleExpandFilesPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleExpandFilesPanel\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioUiEditorWrapperComponent);\n});","define(\"@testable/shared-ui/components/scenario/ui/left-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"sl-panel\">\n    <ul class=\"nav nav-pills nav-fill\" role=\"tablist\" id=\"codeTabNav\"\n      {{did-update this.openPanel @updateLeftPanel 'test'}}>\n      {{#if (has-block \"filesTab\")}}\n        <li class=\"nav-items {{if (eq this.activeTab \"filesTab\") \"active\"}}\"\n        data-bs-toggle=\"tooltip\"\n        title=\"Files Manager\"\n        {{on \"click\" (fn this.openPanel \"filesTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-pencil\" /></a>\n        </li>\n      {{/if}}\n      {{#unless @isRemote}}\n      {{#if (has-block \"runConsoleTab\")}}\n        <li id=\"runConsoleTab\"\n          class=\"nav-items {{if (eq this.activeTab \"runConsoleTab\") \"active\"}}\"\n          data-bs-toggle=\"tooltip\"\n          title=\"Smoke Test\"\n          {{on \"click\" (fn this.openPanel \"runConsoleTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-bolt\" /></a>\n        </li>\n      {{/if}}\n      {{/unless}}\n    </ul>\n  </div>\n  <div class=\"sl-body {{@panelClass}}\">\n    <div class=\"tab-content bg-transparent p-0\">\n  \n      <div class=\"bordered-panels files-tab {{if (eq this.activeTab \"filesTab\") \"show\" \"hidden\"}}\">\n        {{yield to=\"filesTab\"}}\n      </div>\n  \n      <div class=\"bordered-panels pa-3 runConsoleTab {{if (eq this.activeTab \"runConsoleTab\") \"show\" \"hidden\"}}\">\n        {{yield to=\"runConsoleTab\"}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"sl-panel\\\"],[12],[1,\\\"\\\\n  \\\"],[11,\\\"ul\\\"],[24,0,\\\"nav nav-pills nav-fill\\\"],[24,\\\"role\\\",\\\"tablist\\\"],[24,1,\\\"codeTabNav\\\"],[4,[38,2],[[30,0,[\\\"openPanel\\\"]],[30,1],\\\"test\\\"],null],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,4]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"filesTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Files Manager\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openPanel\\\"]],\\\"filesTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-pencil\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,2]],[[[41,[48,[30,5]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[24,1,\\\"runConsoleTab\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"runConsoleTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Smoke Test\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openPanel\\\"]],\\\"runConsoleTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-bolt\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,0,[29,[\\\"sl-body \\\",[30,3]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"tab-content bg-transparent p-0\\\"],[12],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"bordered-panels files-tab \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"filesTab\\\"],null],\\\"show\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[18,4,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"bordered-panels pa-3 runConsoleTab \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"runConsoleTab\\\"],null],\\\"show\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[18,5,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@updateLeftPanel\\\",\\\"@isRemote\\\",\\\"@panelClass\\\",\\\"&filesTab\\\",\\\"&runConsoleTab\\\"],[\\\"div\\\",\\\"ul\\\",\\\"did-update\\\",\\\"if\\\",\\\"has-block\\\",\\\"li\\\",\\\"eq\\\",\\\"on\\\",\\\"fn\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ui/left-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioUiLeftSidebarComponent = _exports.default = (_class = class ScenarioUiLeftSidebarComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"activeTab\", _descriptor, this);\n      this.openPanel(this.args.showVcsTab ? 'vcsTab' : 'filesTab');\n    }\n    openPanel(tag, params) {\n      const selectedTab = params && params[0] ? \"filesTab\" : tag;\n      (0, _runloop.next)(() => {\n        if (selectedTab !== this.activeTab) {\n          this.activeTab = selectedTab;\n          if (tag === 'filesTab') {\n            $('#selected-file-path').removeClass(\"hidden\");\n          } else {\n            if (!$('#selected-file-path').hasClass(\"hidden\")) $('#selected-file-path').addClass(\"hidden\");\n          }\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"activeTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"openPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openPanel\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioUiLeftSidebarComponent);\n});","define(\"@testable/shared-ui/components/scenario/ui/right-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"sr-panel\" {{did-update this.onActiveTabChanged @activeTab}}>\n  \n    <ul class=\"nav nav-pills nav-fill\" role=\"tablist\" id=\"sideTabNav\" >\n  \n      {{#if (has-block \"tagsTab\")}}\n        <li class=\"nav-items {{if (eq this.activeTab \"tagsTab\") \"active\"}}\" data-tab=\"tagsTab\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"left\"\n          title=\"Tags\"\n          {{on \"click\" (fn this.collapseRightPanel \"tagsTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-tag\" /></a>\n          <span class=\"badge\">{{this.tagsCount}}</span>\n        </li>\n      {{/if}}\n  \n      {{#unless @isRemote}}\n        {{#if (has-block \"paramsTab\")}}\n          <li class=\"nav-items {{if (eq this.activeTab \"paramsTab\") \"active\"}}\" data-tab=\"paramsTab\"\n            data-bs-toggle=\"tooltip\"\n            data-bs-placement=\"left\"\n            title=\"Parameters\"\n            {{on \"click\" (fn this.collapseRightPanel \"paramsTab\")}}>\n            <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-sliders\" /></a>\n            <span class=\"badge\">{{this.paramsCount}}</span>\n          </li>\n        {{/if}}\n      {{/unless}}\n  \n      {{#if (has-block \"additionalTab\")}}\n        <li class=\"nav-items {{if (eq this.activeTab \"additionalTab\") \"active\"}}\" data-tab=\"additionalTab\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"left\"\n          title=\"Settings\"\n          {{on \"click\" (fn this.collapseRightPanel \"additionalTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-gear\" /></a>\n        </li>\n      {{/if}}\n  \n      {{#if (has-block \"instructionsTab\")}}\n        <li class=\"nav-items {{if (eq this.activeTab \"instructionsTab\") \"active\"}}\" data-tab=\"instructionsTab\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"left\"\n          title=\"Instructions\"\n          {{on \"click\" (fn this.collapseRightPanel \"instructionsTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-list-ol\" /></a>\n          <span class=\"badge\">{{@instructionsCount}}</span>\n        </li>\n      {{/if}}\n  \n      {{#if (has-block \"uploadedFilesTab\")}}\n        <li class=\"nav-items {{if (eq this.activeTab \"uploadedFilesTab\") \"active\"}}\" data-tab=\"uploadedFilesTab\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"left\"\n          title=\"Files\"\n          {{on \"click\" (fn this.collapseRightPanel \"uploadedFilesTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-paperclip\" /></a>\n          <span class=\"badge\">{{@uploadedFilesCount}}</span>\n        </li>\n      {{/if}}\n  \n      {{#if (and (has-block \"generatedFilesTab\") (not @hideGeneratedFilesTab))}}\n        <li class=\"nav-items {{if (eq this.activeTab \"generatedFilesTab\") \"active\"}}\" data-tab=\"generatedFilesTab\"\n          data-bs-toggle=\"tooltip\"\n          data-bs-placement=\"left\"\n          title=\"Generated Files\"\n          {{on \"click\" (fn this.collapseRightPanel \"generatedFilesTab\")}}>\n          <a class=\"nav-link\"><Ui::Icon @icon=\"fa fa-file-code\" /></a>\n          <span class=\"badge\">{{@generatedFilesCount}}</span>\n        </li>\n      {{/if}}\n  \n    </ul>\n  \n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"sr-panel\\\"],[4,[38,1],[[30,0,[\\\"onActiveTabChanged\\\"]],[30,1]],null],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills nav-fill\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[14,1,\\\"sideTabNav\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[48,[30,7]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"tagsTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"tagsTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Tags\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"tagsTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-tag\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"badge\\\"],[12],[1,[30,0,[\\\"tagsCount\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[41,[48,[30,8]],[[[1,\\\"        \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"paramsTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"paramsTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Parameters\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"paramsTab\\\"],null]],null],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-sliders\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"badge\\\"],[12],[1,[30,0,[\\\"paramsCount\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[48,[30,9]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"additionalTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"additionalTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Settings\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"additionalTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-gear\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[48,[30,10]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"instructionsTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"instructionsTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Instructions\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"instructionsTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-list-ol\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"badge\\\"],[12],[1,[30,3]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[48,[30,11]],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"uploadedFilesTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"uploadedFilesTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Files\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"uploadedFilesTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-paperclip\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"badge\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[48,[30,12]],[28,[37,14],[[30,5]],null]],null],[[[1,\\\"      \\\"],[11,\\\"li\\\"],[16,0,[29,[\\\"nav-items \\\",[52,[28,[37,6],[[30,0,[\\\"activeTab\\\"]],\\\"generatedFilesTab\\\"],null],\\\"active\\\"]]]],[24,\\\"data-tab\\\",\\\"generatedFilesTab\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"left\\\"],[24,\\\"title\\\",\\\"Generated Files\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"collapseRightPanel\\\"]],\\\"generatedFilesTab\\\"],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,0,\\\"nav-link\\\"],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-file-code\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"badge\\\"],[12],[1,[30,6]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@activeTab\\\",\\\"@isRemote\\\",\\\"@instructionsCount\\\",\\\"@uploadedFilesCount\\\",\\\"@hideGeneratedFilesTab\\\",\\\"@generatedFilesCount\\\",\\\"&tagsTab\\\",\\\"&paramsTab\\\",\\\"&additionalTab\\\",\\\"&instructionsTab\\\",\\\"&uploadedFilesTab\\\",\\\"&generatedFilesTab\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"ul\\\",\\\"if\\\",\\\"has-block\\\",\\\"li\\\",\\\"eq\\\",\\\"on\\\",\\\"fn\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"unless\\\",\\\"and\\\",\\\"not\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/ui/right-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioUiRightPanelComponent = _exports.default = (_class = class ScenarioUiRightPanelComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"_activeTab\", _descriptor, this);\n      this._activeTab = this.args.activeTab;\n      let selectedTabs = this.args.isRemote ? ['tagsTab', 'additionalTab'] : [this._activeTab];\n      selectedTabs.forEach(tab => {\n        if (tab) {\n          setTimeout(() => {\n            this.selectedTabActions(tab);\n          });\n        }\n      });\n    }\n    get activeTab() {\n      return this._activeTab === undefined ? this.args.activeTab : this._activeTab;\n    }\n\n    // Keeps the icons in step when the tab strip, or any other caller, changes the panel\n    onActiveTabChanged() {\n      this._activeTab = this.args.activeTab;\n    }\n    get tagsCount() {\n      return this.args.model.tags.length;\n    }\n    get paramsCount() {\n      return this.args.model.paramsConfig.length;\n    }\n    collapseRightPanel(tag) {\n      this._activeTab = tag;\n      this.selectedTabActions(tag);\n    }\n    selectedTabActions(activeTab) {\n      const uniqueId = activeTab + '-' + (0, _emberUuid.v4)();\n      this.args.selectedPanel(uniqueId);\n      this.args.updateLeftPanel((0, _emberUuid.v4)());\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_activeTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"onActiveTabChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onActiveTabChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"collapseRightPanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"collapseRightPanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"selectedTabActions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"selectedTabActions\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioUiRightPanelComponent);\n});","define(\"@testable/shared-ui/components/scenario/vcs-select\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (or @readonly this.isViewer)}}\n    {{this.repositoryUrl}}\n  {{else}}\n    {{#if this.ready}}\n      <Ui::PSelect @options={{this.vcsRootOptions}}\n                   @selected={{this.vcsRoot}}\n                   @placeholder=\"Select repository...\"\n                   @searchField=\"url\"\n                   @disabled={{@readonly}}\n                   @onChange={{this.repositoryChanged}}\n                   as |vcsRoot|>\n        {{vcsRoot.name}}{{if vcsRoot.url vcsRoot.url}}\n      </Ui::PSelect>\n      <Input class=\"hidden\" disabled={{true}} @value={{this.vcsRoot.id}} data-parsley-required=\"true\"\n             data-parsley-required-message=\"Please select a repository.\" />\n    {{else}}\n      Loadings repositories...\n    {{/if}}\n  \n    {{#if this.showVcsModal}}\n      <VcsRootModal @vcsRootUpdated={{this.vcsRootUpdated}}\n                    @modalClosed={{this.vcsRootModalClosed}} />\n    {{/if}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[30,0,[\\\"isViewer\\\"]]],null],[[[1,\\\"  \\\"],[1,[30,0,[\\\"repositoryUrl\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"ready\\\"]],[[[1,\\\"    \\\"],[8,[39,2],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@searchField\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"vcsRootOptions\\\"]],[30,0,[\\\"vcsRoot\\\"]],\\\"Select repository...\\\",\\\"url\\\",[30,1],[30,0,[\\\"repositoryChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,2,[\\\"name\\\"]]],[1,[52,[30,2,[\\\"url\\\"]],[30,2,[\\\"url\\\"]]]],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n    \\\"],[8,[39,3],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Please select a repository.\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"vcsRoot\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    Loadings repositories...\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showVcsModal\\\"]],[[[1,\\\"    \\\"],[8,[39,4],null,[[\\\"@vcsRootUpdated\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"vcsRootUpdated\\\"]],[30,0,[\\\"vcsRootModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[\\\"@readonly\\\",\\\"vcsRoot\\\"],[\\\"if\\\",\\\"or\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"vcs-root-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scenario/vcs-select.hbs\",\n    \"isStrictMode\": false\n  });\n  let ScenarioVcsSelectComponet = _exports.default = (_class = class ScenarioVcsSelectComponet extends _component2.default {\n    get repositoryUrl() {\n      let url;\n      if (this.loadingVcs) return 'Loading Repository...';\n      if (this.args.repositoryUrl) {\n        url = this.args.repositoryUrl;\n      } else if (this.vcsRoot) {\n        url = this.vcsRoot.name + this.vcsRoot.url ? this.vcsRoot.url : '';\n      } else {\n        url = 'Unknown Repository Url';\n      }\n      return url;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"vcsRoots\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showVcsModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadingVcs\", _descriptor5, this);\n      _initializerDefineProperty(this, \"ready\", _descriptor6, this);\n      if (!this.args.readonly || !this.args.repositoryUrl) {\n        this.loadingVcs = true;\n        this.api.vcs.getRoots(_environment.config.currentUser.orgId).then(vcsRoots => {\n          this.loadingVcs = false;\n          this.vcsRoots = vcsRoots;\n          this.ready = true;\n        });\n      }\n    }\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get vcsRootOptions() {\n      const options = _.clone(this.vcsRoots || []).sort((a, b) => a.url > b.url ? 1 : -1);\n      options.push({\n        id: 'new',\n        name: 'Add New...'\n      });\n      options.push({\n        id: 'manage',\n        name: 'Manage Repositories...'\n      });\n      return options;\n    }\n    get vcsRoot() {\n      const repoId = this.args.repositoryId;\n      return repoId ? _.find(this.vcsRootOptions, option => option.id === repoId) : null;\n    }\n    repositoryChanged(selection) {\n      if (selection.id === 'new') {\n        this.repositoryId = null;\n        this.showVcsModal = true;\n      } else if (selection.id === 'manage') {\n        this.router.transitionTo('account.vcs-roots');\n      } else if (selection.id !== '') {\n        this.repositoryId = selection.id;\n        if (typeof this.args.repositorySelected === 'function') {\n          this.args.repositorySelected(selection);\n        }\n      } else {\n        if (typeof this.args.repositorySelected === 'function') {\n          this.args.repositorySelected(null);\n        }\n      }\n    }\n    vcsRootUpdated(repository) {\n      this.ready = false;\n      this.api.vcs.getRoots(_environment.config.currentUser.orgId).then(vcsRoots => {\n        this.vcsRoots = vcsRoots;\n        if (typeof this.args.repositorySelected === 'function') {\n          this.args.repositorySelected(repository);\n        }\n        this.ready = true;\n      });\n    }\n    vcsRootModalClosed() {\n      this.showVcsModal = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"vcsRoots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showVcsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadingVcs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"ready\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"repositoryChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"repositoryChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vcsRootUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vcsRootUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vcsRootModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vcsRootModalClosed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ScenarioVcsSelectComponet);\n});","define(\"@testable/shared-ui/components/schedule-exclusion\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex flex-row align-items-center flex-wrap form-inline m-t-10\">\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-0 m-l-0\">\n      {{#unless @isMaintenance}}\n        <a {{on \"click\" this.deleteExclusion}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                        title=\"Delete Exclusion\" role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n      {{/unless}}\n      {{#if (eq this.recurringInterval 'Holiday')}}\n        <span class=\"m-l-5 m-r-5\"><strong>{{this.recurringIntervalText}} Country </strong></span>\n        <Ui::PSelect\n                     @searchField=\"description\"\n                     @searchEnabled={{true}}\n                     @options={{this.countriesArray}}\n                     @selected={{this.country}}\n                     @placeholder='Select Country'\n                     @disabled={{@viewOnly}}\n                     @onChange={{this.updateCountry}} as |country|>\n          {{country.description}}\n        </Ui::PSelect>\n        <Ui::Icon @icon=\"fa fa-search\" role=\"button\" class=\"btn text-primary\" {{on \"click\" (fn (mut this.showCountryModal) true)}} />\n      {{else}}\n        <span class=\"m-l-5 m-r-5\"><strong>{{this.recurringIntervalText}} from</strong></span>\n        {{#if (eq this.recurringInterval 'Month')}}\n          <Ui::PSelect @options={{this.monthDaysArray}}\n                       @selected={{this.startDay}}\n                       @disabled={{@viewOnly}}\n                       @onChange={{this.updateStartDay}} as |date|>\n            {{date.text}}\n          </Ui::PSelect>\n          <span class=\"m-l-5 m-r-5\">at</span>\n        {{else if (eq this.recurringInterval 'Week')}}\n          <Ui::PSelect @options={{this.weekDaysArray}}\n                       @selected={{this.startDayOfWeek}}\n                       @disabled={{@viewOnly}}\n                       @onChange={{this.updateStartDayOfWeek}} as |date|>\n            {{date.text}}\n          </Ui::PSelect>\n          <span class=\"m-l-5 m-r-5\">at</span>\n        {{/if}}\n        {{#if (eq this.recurringInterval 'Hour')}}\n          <Input @type=\"number\" @value={{@exclusion.startMinute}} class=\"form-control\" min=\"0\" max=\"60\" {{on \"change\"\n                                                                                                             this.updateStartMinute}}\n                 data-parsley-required=\"true\" data-parsley-required-message=\"Start minutes required\"\n                 data-parsley-errors-container=\"#recurringErrors\"/>\n          <span class=\"m-l-5\">minutes past the hour</span>\n        {{else}}\n          <div class=\"input-group\">\n            <Input @type=\"text\" @value={{this.startTime}} class=\"form-control\" placeholder=\"HH:mm\" {{on \"change\"\n                                                                                                        this.updateStartTime}}\n                   data-parsley-required=\"true\" data-parsley-required-message=\"Start time (e.g. 13:40) required\"\n                   data-parsley-time=\"true\"\n                   data-parsley-time-message=\"Start time must be in the format HH:mm (e.g. 13:45)\"\n                   data-parsley-errors-container=\"#recurringErrors\"/>\n            <span class=\"input-group-addon\"><strong>UTC</strong></span>\n          </div>\n        {{/if}}\n        <span class=\"m-l-5 m-r-5\"><strong>to</strong></span>\n        {{#if (eq this.recurringInterval 'Month')}}\n          <Ui::PSelect @options={{this.monthDaysArray}}\n                       @selected={{this.endDay}}\n                       @disabled={{@viewOnly}}\n                       @onChange={{this.updateEndDay}} as |date|>\n            {{date.text}}\n          </Ui::PSelect>\n          <span class=\"m-l-5 m-r-5\">at</span>\n        {{else if (eq this.recurringInterval 'Week')}}\n          <Ui::PSelect @options={{this.weekDaysArray}}\n                       @selected={{this.endDayOfWeek}}\n                       @disabled={{@viewOnly}}\n                       @onChange={{this.updateEndDayOfWeek}} as |date|>\n            {{date.text}}\n          </Ui::PSelect>\n          <span class=\"m-l-5 m-r-5\">at</span>\n        {{/if}}\n        {{#if (eq this.recurringInterval 'Hour')}}\n          <Input @type=\"number\" @value={{@exclusion.endMinute}} class=\"form-control\" min=\"0\" max=\"60\" {{on \"change\"\n                                                                                                           this.updateEndMinute}}\n                 data-parsley-required=\"true\" data-parsley-required-message=\"End minutes required\"\n                 data-parsley-errors-container=\"#recurringErrors\"/>\n          <span class=\"m-l-5\">minutes past the hour</span>\n        {{else}}\n          <div class=\"input-group\">\n            <Input @type=\"text\" @value={{this.endTime}} class=\"form-control\" placeholder=\"HH:mm\" {{on \"change\"\n                                                                                                      this.updateEndTime}}\n                   data-parsley-required=\"true\" data-parsley-required-message=\"End time (e.g. 13:40) required\"\n                   data-parsley-time=\"true\" data-parsley-time-message=\"End time must be in the format HH:mm (e.g. 13:45)\"\n                   data-parsley-errors-container=\"#recurringErrors\"/>\n            <span class=\"input-group-addon\"><strong>UTC</strong></span>\n          </div>\n        {{/if}}\n      {{/if}}\n    </div>\n  </div>\n  {{#if this.showCountryModal}}\n    <ShowCountryModal\n      @country={{this.country}}\n      @countriesArray={{this.countriesArray}}\n      @modalClosed={{fn (mut this.showCountryModal) false}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline m-t-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-0 m-l-0\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1]],[[[1,\\\"      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Exclusion\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"deleteExclusion\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"recurringIntervalText\\\"]]],[1,\\\" Country \\\"],[13],[13],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@searchField\\\",\\\"@searchEnabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[\\\"description\\\",true,[30,0,[\\\"countriesArray\\\"]],[30,0,[\\\"country\\\"]],\\\"Select Country\\\",[30,2],[30,0,[\\\"updateCountry\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,3,[\\\"description\\\"]]],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n      \\\"],[8,[39,4],[[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn text-primary\\\"],[4,[38,3],[\\\"click\\\",[28,[37,10],[[28,[37,11],[[30,0,[\\\"showCountryModal\\\"]]],null],true],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"recurringIntervalText\\\"]]],[1,\\\" from\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Month\\\"],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"monthDaysArray\\\"]],[30,0,[\\\"startDay\\\"]],[30,2],[30,0,[\\\"updateStartDay\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,4,[\\\"text\\\"]]],[1,\\\"\\\\n        \\\"]],[4]]]]],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Week\\\"],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"weekDaysArray\\\"]],[30,0,[\\\"startDayOfWeek\\\"]],[30,2],[30,0,[\\\"updateStartDayOfWeek\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,5,[\\\"text\\\"]]],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Hour\\\"],null],[[[1,\\\"        \\\"],[8,[39,12],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"max\\\",\\\"60\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Start minutes required\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#recurringErrors\\\"],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateStartMinute\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,6,[\\\"startMinute\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"minutes past the hour\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,12],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"HH:mm\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Start time (e.g. 13:40) required\\\"],[24,\\\"data-parsley-time\\\",\\\"true\\\"],[24,\\\"data-parsley-time-message\\\",\\\"Start time must be in the format HH:mm (e.g. 13:45)\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#recurringErrors\\\"],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateStartTime\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"startTime\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"UTC\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"to\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Month\\\"],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"monthDaysArray\\\"]],[30,0,[\\\"endDay\\\"]],[30,2],[30,0,[\\\"updateEndDay\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,7,[\\\"text\\\"]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Week\\\"],null],[[[1,\\\"        \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"weekDaysArray\\\"]],[30,0,[\\\"endDayOfWeek\\\"]],[30,2],[30,0,[\\\"updateEndDayOfWeek\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,8,[\\\"text\\\"]]],[1,\\\"\\\\n        \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Hour\\\"],null],[[[1,\\\"        \\\"],[8,[39,12],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"max\\\",\\\"60\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"End minutes required\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#recurringErrors\\\"],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateEndMinute\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,6,[\\\"endMinute\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"minutes past the hour\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,12],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"HH:mm\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"End time (e.g. 13:40) required\\\"],[24,\\\"data-parsley-time\\\",\\\"true\\\"],[24,\\\"data-parsley-time-message\\\",\\\"End time must be in the format HH:mm (e.g. 13:45)\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#recurringErrors\\\"],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateEndTime\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"endTime\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"UTC\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCountryModal\\\"]],[[[1,\\\"  \\\"],[8,[39,13],null,[[\\\"@country\\\",\\\"@countriesArray\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"country\\\"]],[30,0,[\\\"countriesArray\\\"]],[28,[37,10],[[28,[37,11],[[30,0,[\\\"showCountryModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isMaintenance\\\",\\\"@viewOnly\\\",\\\"country\\\",\\\"date\\\",\\\"date\\\",\\\"@exclusion\\\",\\\"date\\\",\\\"date\\\"],[\\\"div\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"if\\\",\\\"eq\\\",\\\"span\\\",\\\"strong\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"input\\\",\\\"show-country-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/schedule-exclusion.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiScheduleExclusionComponent = _exports.default = (_class = class UiScheduleExclusionComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"showCountryModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"country\", _descriptor3, this);\n      _initializerDefineProperty(this, \"startTime\", _descriptor4, this);\n      _initializerDefineProperty(this, \"endTime\", _descriptor5, this);\n      _initializerDefineProperty(this, \"startDay\", _descriptor6, this);\n      _initializerDefineProperty(this, \"endDay\", _descriptor7, this);\n      _initializerDefineProperty(this, \"startDayOfWeek\", _descriptor8, this);\n      _initializerDefineProperty(this, \"endDayOfWeek\", _descriptor9, this);\n      _defineProperty(this, \"monthDaysArray\", _lib.default.getMonthDaysArray());\n      _defineProperty(this, \"weekDaysArray\", _lib.default.getWeekDaysArray());\n      _initializerDefineProperty(this, \"countriesArray\", _descriptor0, this);\n      this.recurringInterval = this.args.exclusion.recurringInterval;\n      this.initializeComponent();\n    }\n    get recurringIntervalText() {\n      switch (this.recurringInterval) {\n        case 'Month':\n          return 'Monthly';\n        case 'Week':\n          return 'Weekly';\n        case 'Day':\n          return 'Daily';\n        case 'WeekDay':\n          return 'Each week day';\n        case 'Hour':\n          return 'Hourly';\n        case 'Holiday':\n          return 'Holiday';\n        default:\n          return '';\n      }\n    }\n    async initializeComponent() {\n      const exclusion = this.args.exclusion;\n      let selectedCountry;\n      if (this.args.viewOnly) {\n        selectedCountry = exclusion?.country;\n      } else {\n        try {\n          const resp = await this.api.countries.getCountries();\n          this.countriesArray = resp;\n          const countryId = exclusion?.countryId || exclusion?.country?.id;\n          selectedCountry = countryId ? this.countriesArray.find(c => c.id === countryId) : null;\n          if (selectedCountry?.id) {\n            this.args.exclusion.countryId = selectedCountry.id;\n          }\n        } catch (error) {\n          console.error('Error loading countries:', error);\n        }\n      }\n      this.country = selectedCountry;\n      if (exclusion.recurringInterval !== 'Minute') {\n        let startHour = (exclusion.startHour || 0) + '';\n        let startMinute = (exclusion.startMinute || 0) + '';\n        let endHour = (exclusion.endHour || 0) + '';\n        let endMinute = (exclusion.endMinute || 0) + '';\n        this.startTime = startHour.padStart(2, '0') + ':' + startMinute.padStart(2, '0');\n        this.endTime = endHour.padStart(2, '0') + ':' + endMinute.padStart(2, '0');\n      }\n      if (exclusion.startDay) {\n        this.startDay = this.monthDaysArray.find(day => day.value === exclusion.startDay) || this.monthDaysArray[0];\n      } else {\n        this.startDay = this.monthDaysArray[0];\n      }\n      if (exclusion.endDay) {\n        this.endDay = this.monthDaysArray.find(day => day.value === exclusion.endDay) || this.monthDaysArray[0];\n      } else {\n        this.endDay = this.monthDaysArray[0];\n      }\n      if (exclusion.startDayOfWeek) {\n        this.startDayOfWeek = this.weekDaysArray.find(day => day.value === exclusion.startDayOfWeek) || this.weekDaysArray[0];\n      } else {\n        this.startDayOfWeek = this.weekDaysArray[0];\n      }\n      if (exclusion.endDayOfWeek) {\n        this.endDayOfWeek = this.weekDaysArray.find(day => day.value === exclusion.endDayOfWeek) || this.weekDaysArray[0];\n      } else {\n        this.endDayOfWeek = this.weekDaysArray[0];\n      }\n    }\n    updateCountry(country) {\n      this.country = country;\n      this.args.exclusion.countryId = country?.id;\n      this.sendUpdate();\n    }\n    updateStartDay(newDay) {\n      this.startDay = newDay;\n      this.args.exclusion.startDay = Number(newDay.value);\n      this.sendUpdate();\n    }\n    updateStartDayOfWeek(newWeekday) {\n      this.startDayOfWeek = newWeekday;\n      this.args.exclusion.startDayOfWeek = Number(newWeekday.value);\n      this.sendUpdate();\n    }\n    updateStartMinute(event) {\n      this.args.exclusion.startMinute = Number(event.target.value);\n      this.sendUpdate();\n    }\n    updateStartTime(event) {\n      let parts = event.target.value.split(':');\n      if (parts.length === 2) {\n        this.args.exclusion.startHour = Number(parts[0]);\n        this.args.exclusion.startMinute = Number(parts[1]);\n      }\n      this.sendUpdate();\n    }\n    updateEndDay(newDay) {\n      this.endDay = newDay;\n      this.args.exclusion.endDay = Number(newDay.value);\n      this.sendUpdate();\n    }\n    updateEndDayOfWeek(newWeekday) {\n      this.endDayOfWeek = newWeekday;\n      this.args.exclusion.endDayOfWeek = Number(newWeekday.value);\n      this.sendUpdate();\n    }\n    updateEndMinute(event) {\n      this.args.exclusion.endMinute = Number(event.target.value);\n      this.sendUpdate();\n    }\n    updateEndTime(event) {\n      let parts = event.target.value.split(':');\n      if (parts.length === 2) {\n        this.args.exclusion.endHour = Number(parts[0]);\n        this.args.exclusion.endMinute = Number(parts[1]);\n      }\n      this.sendUpdate();\n    }\n    deleteExclusion() {\n      this.args.exclusionDeleted(this.args.exclusion);\n    }\n    sendUpdate() {\n      this.args.exclusionUpdated(this.args.exclusion);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showCountryModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"country\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"startTime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"endTime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"startDay\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"endDay\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"startDayOfWeek\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"endDayOfWeek\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"countriesArray\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateCountry\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCountry\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStartDay\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStartDay\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStartDayOfWeek\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStartDayOfWeek\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStartMinute\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStartMinute\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStartTime\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStartTime\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEndDay\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEndDay\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEndDayOfWeek\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEndDayOfWeek\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEndMinute\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEndMinute\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateEndTime\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateEndTime\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteExclusion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteExclusion\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiScheduleExclusionComponent);\n});","define(\"@testable/shared-ui/components/schedule-recurring\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _lib, _server, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"d-flex flex-row align-items-center flex-wrap form-inline m-t-10\">\n    <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-0 m-l-0\">\n      {{#if @testId}}\n        <a {{on \"click\" this.toggleSchedule}} disabled=\"false\" class=\"label label-default m-r-5 p-t-5 p-b-5\" role=\"button\">\n          <Ui::Icon @icon=\"fa {{if this.latestScheduleParams.active 'fa-pause' 'fa-play'}}\" class=\"m-r-5\" />{{if\n                this.latestScheduleParams.active 'Active' 'Paused'}}</a>\n      {{/if}}\n      <span class=\"m-r-5\">{{if (eq this.recurringInterval 'Holiday') \"On\" \"Every\"}}</span>\n      <h1>{{this.recurringInterval.value}}</h1>\n      {{#if (and (not-eq this.recurringInterval 'WeekDay') (not-eq this.recurringInterval 'Holiday'))}}\n        <Input @type=\"number\" @value={{this.frequency}} class=\"form-control\" min={{1}} {{on \"focusout\" this.updateFrequency}}\n               data-parsley-min={{1}}\n               data-parsley-min-message=\"At least one interval required\"\n               data-parsley-required=\"true\"\n               data-parsley-required-message=\"Number of intervals required\"\n               data-parsley-errors-container=\"#{{this.parsleyErrorContainer}}\" />\n      {{/if}}\n  \n      <Ui::PSelect @options={{this.recurringIntervalOptions}}\n                   @selected={{this.recurringInterval}}\n                   @disabled={{@viewOnly}}\n                   @onChange={{this.updateRecurringInterval}} as |option|>\n        {{print-plural option this.frequencyCount}}\n      </Ui::PSelect>\n      {{#if (eq this.recurringInterval 'Month')}}\n        <span class=\"m-l-5 m-r-5\">on the</span>\n        <Ui::PSelect @options={{this.monthDaysArray}}\n                     @selected={{this.day}}\n                     @disabled={{@viewOnly}}\n                     @onChange={{this.updateDay}} as |date|>\n          {{date.text}}\n        </Ui::PSelect>\n        <span class=\"m-l-5\">day</span>\n      {{else if (eq this.recurringInterval 'Week')}}\n        <span class=\"m-l-5 m-r-5\">on</span>\n        <Ui::PSelect @options={{this.weekDaysArray}}\n                     @selected={{this.dayOfWeek}}\n                     @disabled={{@viewOnly}}\n                     @onChange={{this.updateWeekday}} as |date|>\n          {{date.text}}\n        </Ui::PSelect>\n      {{/if}}\n      {{#if (eq this.recurringInterval 'Holiday')}}\n        <span class=\"m-l-5 m-r-5\">in </span>\n        <Ui::PSelect\n                    @searchField=\"description\"\n                    @searchEnabled={{true}}\n                    @options={{this.countriesArray}}\n                    @selected={{this.country}}\n                    @placeholder='Select Country'\n                    @disabled={{@viewOnly}}\n                    @onChange={{this.updateCountry}} as |country|>\n          {{country.description}}\n        </Ui::PSelect>\n        <Ui::PSelect class=\"m-l-5 m-r-5\"\n                    @options={{this.runTypes}}\n                    @selected={{this.selectedRunType}}\n                    @disabled={{@viewOnly}}\n                    @onChange={{this.updateRunType}} as |run|>\n          {{run.label}}\n        </Ui::PSelect>\n      {{/if}}\n      {{#if (eq this.recurringInterval 'Hour')}}\n        <span class=\"m-l-5 m-r-5\">at</span>\n        <Input @type=\"number\" @value={{this.minute}} class=\"form-control\" min=\"0\" max=\"59\" {{on \"change\" this.updateMinute}}\n               data-parsley-required=\"true\" data-parsley-required-message=\"Minutes required\"\n               data-parsley-errors-container=\"#{{this.parsleyErrorContainer}}\" />\n        <span class=\"m-l-5\">minutes past the hour</span>\n      {{else if (eq this.selectedRunType.value \"run_every\")}}\n        <Input @type=\"number\" @value={{this.minute}} class=\"form-control\" min=\"1\" max=\"1440\" {{on \"change\" this.updateMinute}}\n               data-parsley-min={{1}}\n               data-parsley-max={{1440}}\n               data-parsley-required=\"true\"\n               data-parsley-required-message=\"Minutes required\"\n               data-parsley-errors-container=\"#{{this.parsleyErrorContainer}}\" />\n        <span class=\"m-l-5\">minutes</span>\n      {{else if (not-eq this.recurringInterval 'Minute')}}\n        {{#unless (eq this.recurringInterval 'Holiday')}}\n          <span class=\"m-l-5 m-r-5\">at</span>\n        {{/unless}}\n        <div class=\"input-group\">\n          <Input @type=\"text\" @value={{this.time}} class=\"form-control\" placeholder=\"HH:mm\" {{on \"change\" this.updateTime}}\n                 data-parsley-required=\"true\" data-parsley-required-message=\"Time (e.g. 13:40) required\"\n                 data-parsley-time=\"true\" data-parsley-time-message=\"Time must be in the format HH:mm (e.g. 13:45)\"\n                 data-parsley-errors-container=\"#{{this.parsleyErrorContainer}}\" />\n          <span class=\"input-group-addon\"><strong>UTC</strong></span>\n        </div>\n      {{/if}}\n      {{#if (eq this.recurringInterval \"Holiday\")}}\n        <Ui::Icon @icon=\"fa fa-search\" role=\"button\" class=\"btn search-btn text-primary\" {{on \"click\" (fn (mut this.showCountryModal) true)}} />\n      {{/if}}\n    </div>\n  </div>\n  <div id=\"{{this.parsleyErrorContainer}}\"></div>\n  {{#if (eq this.recurringInterval 'Holiday')}}\n    <input\n      type=\"text\"\n      class=\"hidden\"\n      value={{this.country}}\n      data-parsley-required=\"true\"\n      data-parsley-required-message=\"Country is required.\"\n    />\n  {{/if}}\n  {{#if (and @minMinuteInterval (gt @minMinuteInterval 1) (eq this.recurringInterval \"Minute\"))}}\n    <input\n      type=\"number\"\n      class=\"hidden\"\n      value={{this.frequency}}\n      data-parsley-min={{@minMinuteInterval}}\n      data-parsley-min-message={{concat \"Minimum schedule frequency is \" @minMinuteInterval \" minutes on your plan. <a target='_blank' href='/account/billing/subscription'>Please upgrade</a> for up to 1-minute intervals.\"}}\n      data-parsley-errors-container=\"#{{this.parsleyErrorContainer}}\"\n    />\n  {{/if}}\n  {{#unless @isMonitor}}\n    <div class=\"m-t-10 m-l-20 m-b-10\">\n      <div class=\"m-b-5\">\n        {{#unless @viewOnly}}\n          <div class=\"btn-group m-r-5\">\n            <a href=\"javascript:\" data-bs-toggle=\"dropdown\" class=\"btn btn-xs btn-primary dropdown-toggle\">\n              <Ui::Icon @icon=\"fa fa-plus\" /></a>\n            <ul class=\"dropdown-menu\">\n              <li><a {{on \"click\" (fn this.addExclusion \"Month\")}} role=\"button\">Monthly exclusion</a></li>\n              <li><a {{on \"click\" (fn this.addExclusion \"Week\")}} role=\"button\">Weekly exclusion</a></li>\n              <li><a {{on \"click\" (fn this.addExclusion \"Day\")}} role=\"button\">Daily exclusion</a></li>\n              <li><a {{on \"click\" (fn this.addExclusion \"WeekDay\")}} role=\"button\">Each week day exclusion</a></li>\n              <li><a {{on \"click\" (fn this.addExclusion \"Hour\")}} role=\"button\">Hourly exclusion</a></li>\n              <li><a {{on \"click\" (fn this.addExclusion \"Holiday\")}} role=\"button\">Holiday exclusion</a></li>\n            </ul>\n          </div>\n        {{/unless}}\n        {{#if this.latestScheduleParams.exclusions}}\n          <span class=\"m-l-5\"><strong>Exclusions</strong></span>\n        {{else}}\n          <span class=\"m-l-5\">No schedule exclusion windows.</span>\n        {{/if}}\n      </div>\n      {{#each this.latestScheduleParams.exclusions as |exclusion|}}\n        <ScheduleExclusion @exclusion={{exclusion}}\n                          @viewOnly={{@viewOnly}}\n                          @exclusionUpdated={{this.exclusionUpdated}}\n                          @exclusionDeleted={{this.exclusionDeleted}} />\n      {{/each}}\n    </div>\n  {{/unless}}\n  \n  {{#if this.showCountryModal}}\n    <ShowCountryModal\n      @country={{this.country}}\n      @countriesArray={{this.countriesArray}}\n      @modalClosed={{fn (mut this.showCountryModal) false}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline m-t-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-0 m-l-0\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[11,3],[24,\\\"disabled\\\",\\\"false\\\"],[24,0,\\\"label label-default m-r-5 p-t-5 p-b-5\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"toggleSchedule\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,0,[\\\"latestScheduleParams\\\",\\\"active\\\"]],\\\"fa-pause\\\",\\\"fa-play\\\"]]]]],null],[1,[52,[30,0,[\\\"latestScheduleParams\\\",\\\"active\\\"]],\\\"Active\\\",\\\"Paused\\\"]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,1],[14,0,\\\"m-r-5\\\"],[12],[1,[52,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null],\\\"On\\\",\\\"Every\\\"]],[13],[1,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[12],[1,[30,0,[\\\"recurringInterval\\\",\\\"value\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[28,[37,9],[[30,0,[\\\"recurringInterval\\\"]],\\\"WeekDay\\\"],null],[28,[37,9],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null]],null],[[[1,\\\"      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[16,\\\"min\\\",1],[16,\\\"data-parsley-min\\\",1],[24,\\\"data-parsley-min-message\\\",\\\"At least one interval required\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Number of intervals required\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[4,[38,3],[\\\"focusout\\\",[30,0,[\\\"updateFrequency\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"frequency\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n    \\\"],[8,[39,11],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"recurringIntervalOptions\\\"]],[30,0,[\\\"recurringInterval\\\"]],[30,2],[30,0,[\\\"updateRecurringInterval\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[28,[35,12],[[30,3],[30,0,[\\\"frequencyCount\\\"]]],null]],[1,\\\"\\\\n    \\\"]],[3]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Month\\\"],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"on the\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"monthDaysArray\\\"]],[30,0,[\\\"day\\\"]],[30,2],[30,0,[\\\"updateDay\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,4,[\\\"text\\\"]]],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"day\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Week\\\"],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"on\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"weekDaysArray\\\"]],[30,0,[\\\"dayOfWeek\\\"]],[30,2],[30,0,[\\\"updateWeekday\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,5,[\\\"text\\\"]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n    \\\"]],[]],null]],[]]],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"in \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,11],null,[[\\\"@searchField\\\",\\\"@searchEnabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[\\\"description\\\",true,[30,0,[\\\"countriesArray\\\"]],[30,0,[\\\"country\\\"]],\\\"Select Country\\\",[30,2],[30,0,[\\\"updateCountry\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,6,[\\\"description\\\"]]],[1,\\\"\\\\n      \\\"]],[6]]]]],[1,\\\"\\\\n      \\\"],[8,[39,11],[[24,0,\\\"m-l-5 m-r-5\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"runTypes\\\"]],[30,0,[\\\"selectedRunType\\\"]],[30,2],[30,0,[\\\"updateRunType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,7,[\\\"label\\\"]]],[1,\\\"\\\\n      \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Hour\\\"],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"max\\\",\\\"59\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Minutes required\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateMinute\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"minute\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"minutes past the hour\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,0,[\\\"selectedRunType\\\",\\\"value\\\"]],\\\"run_every\\\"],null],[[[1,\\\"      \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"min\\\",\\\"1\\\"],[24,\\\"max\\\",\\\"1440\\\"],[16,\\\"data-parsley-min\\\",1],[16,\\\"data-parsley-max\\\",1440],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Minutes required\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateMinute\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"minute\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"minutes\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,9],[[30,0,[\\\"recurringInterval\\\"]],\\\"Minute\\\"],null],[[[41,[51,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"m-l-5 m-r-5\\\"],[12],[1,\\\"at\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,10],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"HH:mm\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Time (e.g. 13:40) required\\\"],[24,\\\"data-parsley-time\\\",\\\"true\\\"],[24,\\\"data-parsley-time-message\\\",\\\"Time must be in the format HH:mm (e.g. 13:45)\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[4,[38,3],[\\\"change\\\",[30,0,[\\\"updateTime\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"time\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"UTC\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]]],[]]],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn search-btn text-primary\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[28,[37,16],[[30,0,[\\\"showCountryModal\\\"]]],null],true],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,1,[29,[[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[12],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Holiday\\\"],null],[[[1,\\\"  \\\"],[10,\\\"input\\\"],[14,0,\\\"hidden\\\"],[15,2,[30,0,[\\\"country\\\"]]],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Country is required.\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,8],[28,[37,17],[[30,8],1],null],[28,[37,6],[[30,0,[\\\"recurringInterval\\\"]],\\\"Minute\\\"],null]],null],[[[1,\\\"  \\\"],[10,\\\"input\\\"],[14,0,\\\"hidden\\\"],[15,2,[30,0,[\\\"frequency\\\"]]],[15,\\\"data-parsley-min\\\",[30,8]],[15,\\\"data-parsley-min-message\\\",[28,[37,18],[\\\"Minimum schedule frequency is \\\",[30,8],\\\" minutes on your plan. <a target='_blank' href='/account/billing/subscription'>Please upgrade</a> for up to 1-minute intervals.\\\"],null]],[15,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"parsleyErrorContainer\\\"]]]]],[14,4,\\\"number\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,9]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"m-t-10 m-l-20 m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-b-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"btn-group m-r-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,0,\\\"btn btn-xs btn-primary dropdown-toggle\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n          \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"Month\\\"],null]],null],[12],[1,\\\"Monthly exclusion\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"Week\\\"],null]],null],[12],[1,\\\"Weekly exclusion\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"Day\\\"],null]],null],[12],[1,\\\"Daily exclusion\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"WeekDay\\\"],null]],null],[12],[1,\\\"Each week day exclusion\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"Hour\\\"],null]],null],[12],[1,\\\"Hourly exclusion\\\"],[13],[13],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,3],[\\\"click\\\",[28,[37,15],[[30,0,[\\\"addExclusion\\\"]],\\\"Holiday\\\"],null]],null],[12],[1,\\\"Holiday exclusion\\\"],[13],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"latestScheduleParams\\\",\\\"exclusions\\\"]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Exclusions\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"m-l-5\\\"],[12],[1,\\\"No schedule exclusion windows.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,22],[[28,[37,22],[[30,0,[\\\"latestScheduleParams\\\",\\\"exclusions\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[8,[39,23],null,[[\\\"@exclusion\\\",\\\"@viewOnly\\\",\\\"@exclusionUpdated\\\",\\\"@exclusionDeleted\\\"],[[30,10],[30,2],[30,0,[\\\"exclusionUpdated\\\"]],[30,0,[\\\"exclusionDeleted\\\"]]]],null],[1,\\\"\\\\n\\\"]],[10]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCountryModal\\\"]],[[[1,\\\"  \\\"],[8,[39,24],null,[[\\\"@country\\\",\\\"@countriesArray\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"country\\\"]],[30,0,[\\\"countriesArray\\\"]],[28,[37,15],[[28,[37,16],[[30,0,[\\\"showCountryModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@testId\\\",\\\"@viewOnly\\\",\\\"option\\\",\\\"date\\\",\\\"date\\\",\\\"country\\\",\\\"run\\\",\\\"@minMinuteInterval\\\",\\\"@isMonitor\\\",\\\"exclusion\\\"],[\\\"div\\\",\\\"if\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"eq\\\",\\\"h1\\\",\\\"and\\\",\\\"not-eq\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"print-plural\\\",\\\"unless\\\",\\\"strong\\\",\\\"fn\\\",\\\"mut\\\",\\\"gt\\\",\\\"concat\\\",\\\"ul\\\",\\\"li\\\",\\\"each\\\",\\\"-track-array\\\",\\\"schedule-exclusion\\\",\\\"show-country-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/schedule-recurring.hbs\",\n    \"isStrictMode\": false\n  });\n  let newExclusionId = -1;\n  const RunTypes = [{\n    label: 'run at',\n    value: 'run_at'\n  }, {\n    label: 'run every',\n    value: 'run_every'\n  }];\n  let UiScheduleRecurringComponent = _exports.default = (_class = class UiScheduleRecurringComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"latestScheduleParams\", _descriptor2, this);\n      _initializerDefineProperty(this, \"recurringInterval\", _descriptor3, this);\n      _initializerDefineProperty(this, \"frequency\", _descriptor4, this);\n      _initializerDefineProperty(this, \"day\", _descriptor5, this);\n      _initializerDefineProperty(this, \"dayOfWeek\", _descriptor6, this);\n      _initializerDefineProperty(this, \"hour\", _descriptor7, this);\n      _initializerDefineProperty(this, \"minute\", _descriptor8, this);\n      _initializerDefineProperty(this, \"time\", _descriptor9, this);\n      _initializerDefineProperty(this, \"country\", _descriptor0, this);\n      _initializerDefineProperty(this, \"countryId\", _descriptor1, this);\n      _initializerDefineProperty(this, \"countriesArray\", _descriptor10, this);\n      _initializerDefineProperty(this, \"showCountryModal\", _descriptor11, this);\n      _initializerDefineProperty(this, \"parsleyErrorContainer\", _descriptor12, this);\n      _defineProperty(this, \"weekDaysArray\", _lib.default.getWeekDaysArray());\n      _defineProperty(this, \"recurringIntervalOptions\", _lib.default.getDurationOptionsArray());\n      _defineProperty(this, \"monthDaysArray\", _lib.default.getMonthDaysArray());\n      _defineProperty(this, \"runTypes\", RunTypes);\n      _initializerDefineProperty(this, \"selectedRunType\", _descriptor13, this);\n      this.parsleyErrorContainer = (0, _emberUuid.v4)();\n      this.initializeComponent();\n    }\n\n    // The number input binds a string while typing, so coerce before comparing.\n    get frequencyCount() {\n      return Number(this.frequency);\n    }\n    async initializeComponent() {\n      const scheduleParams = _.cloneDeep(this.args.scheduleParams);\n      this.latestScheduleParams = scheduleParams;\n      this.recurringInterval = scheduleParams.recurringInterval;\n      await this.initializeByInterval(scheduleParams);\n      this.initUnsetFields();\n    }\n    async initializeByInterval(scheduleParams) {\n      switch (scheduleParams.recurringInterval) {\n        case 'Month':\n          this.frequency = scheduleParams.month || 1;\n          let day = this.monthDaysArray.find(day => day.value === (scheduleParams.day || 1));\n          this.day = day;\n          this.hour = scheduleParams.hour || 0;\n          this.minute = scheduleParams.minute || 0;\n          break;\n        case 'Week':\n          this.frequency = scheduleParams.week || 1;\n          let startDayOfWeek = this.weekDaysArray.find(day => day.value === (scheduleParams.dayOfWeek || 1));\n          this.dayOfWeek = startDayOfWeek;\n          this.hour = scheduleParams.hour || 0;\n          this.minute = scheduleParams.minute || 0;\n          break;\n        case 'Day':\n          this.frequency = scheduleParams.day || 1;\n          this.hour = scheduleParams.hour || 0;\n          this.minute = scheduleParams.minute || 0;\n          break;\n        case 'WeekDay':\n          this.hour = scheduleParams.hour || 0;\n          this.minute = scheduleParams.minute || 0;\n          break;\n        case 'Hour':\n          this.frequency = scheduleParams.hour || 1;\n          this.minute = scheduleParams.minute || 0;\n          break;\n        case 'Minute':\n          this.frequency = scheduleParams.minute || 1;\n          break;\n        case 'Holiday':\n          this.hour = scheduleParams.hour || 0;\n          this.minute = scheduleParams.minute || 0;\n          if (!scheduleParams.hasOwnProperty('hour')) {\n            this.selectedRunType = this.runTypes[1];\n          }\n          let selectedCountry;\n          if (this.args.viewOnly) {\n            selectedCountry = scheduleParams?.schedule?.country;\n          } else {\n            try {\n              const resp = await this.api.countries.getCountries();\n              this.countriesArray = resp;\n              if (this.args.isMonitor) {\n                const countryName = scheduleParams?.country || scheduleParams?.country;\n                selectedCountry = this.countriesArray.find(c => c.name === countryName);\n              } else {\n                const countryId = scheduleParams?.countryId || scheduleParams?.schedule?.country?.id;\n                selectedCountry = countryId ? this.countriesArray.find(c => c.id === countryId) : null;\n              }\n              if (selectedCountry?.id) {\n                this.countryId = selectedCountry.id;\n                this.updateParams();\n              }\n            } catch (error) {\n              console.error('Error loading countries:', error);\n            }\n          }\n          this.country = selectedCountry;\n          break;\n      }\n      if (scheduleParams.recurringInterval !== 'Minute') {\n        let hour = this.hour + '';\n        let minute = this.minute + '';\n        this.time = hour.padStart(2, '0') + ':' + minute.padStart(2, '0');\n      }\n    }\n    initUnsetFields() {\n      this.initUnsetField('dayOfWeek', this.weekDaysArray[0]);\n      this.initUnsetField('day', this.monthDaysArray[0]);\n      this.initUnsetField('hour', 0);\n      this.initUnsetField('minute', 0);\n    }\n    initUnsetField(field, defaultVal) {\n      if (_.isUndefined(this[field])) {\n        this[field] = defaultVal;\n      }\n    }\n    updateRecurringInterval(newRecurringInterval) {\n      this.recurringInterval = newRecurringInterval;\n      this.updateParams();\n    }\n    updateFrequency(event) {\n      this.frequency = Number(event.target.value);\n      this.updateParams();\n    }\n    updateDay(newDay) {\n      this.day = newDay;\n      this.updateParams();\n    }\n    updateWeekday(newWeekday) {\n      this.dayOfWeek = newWeekday;\n      this.updateParams();\n    }\n    updateMinute(event) {\n      this.minute = Number(event.target.value);\n      this.updateParams();\n    }\n    updateRunType(selectedType) {\n      this.selectedRunType = selectedType;\n      this.updateParams();\n    }\n    updateTime(event) {\n      let parts = event.target.value.split(':');\n      if (parts.length === 2) {\n        this.hour = Number(parts[0]);\n        this.minute = Number(parts[1]);\n        this.updateParams();\n      }\n    }\n    updateCountry(country) {\n      this.country = country;\n      this.countryId = country.id;\n      this.updateParams();\n    }\n    addExclusion(recurringInterval) {\n      this.updateParams();\n      let exclusions = this.latestScheduleParams.exclusions;\n      if (_.isUndefined(exclusions)) {\n        exclusions = [];\n        this.latestScheduleParams.exclusions = exclusions;\n      }\n      let exclusion = {\n        id: newExclusionId--,\n        recurringInterval: recurringInterval\n      };\n      switch (recurringInterval) {\n        case 'Month':\n          exclusion.startDay = 1;\n          exclusion.endDay = 1;\n          exclusion.startHour = 0;\n          exclusion.endHour = 0;\n          exclusion.startMinute = 0;\n          exclusion.endMinute = 0;\n          break;\n        case 'Week':\n          exclusion.startDayOfWeek = 1;\n          exclusion.endDayOfWeek = 1;\n          exclusion.startHour = 0;\n          exclusion.endHour = 0;\n          exclusion.startMinute = 0;\n          exclusion.endMinute = 0;\n          break;\n        case 'Day':\n          exclusion.startHour = 0;\n          exclusion.endHour = 0;\n          exclusion.startMinute = 0;\n          exclusion.endMinute = 0;\n          break;\n        case 'WeekDay':\n          exclusion.startHour = 0;\n          exclusion.endHour = 0;\n          exclusion.startMinute = 0;\n          exclusion.endMinute = 0;\n          break;\n        case 'Hour':\n          exclusion.startMinute = 0;\n          exclusion.endMinute = 0;\n          break;\n        case 'Holiday':\n          exclusion.countryId = '';\n          break;\n      }\n      exclusions.push(exclusion);\n      this.sendUpdate();\n    }\n    exclusionUpdated() {\n      this.sendUpdate();\n    }\n    exclusionDeleted(exclusion) {\n      this.updateParams();\n      const exclusions = this.latestScheduleParams.exclusions;\n      const index = exclusions.indexOf(exclusion);\n      if (index > -1) {\n        exclusions.splice(index, 1);\n      }\n      this.sendUpdate();\n    }\n    toggleSchedule() {\n      const id = this.latestScheduleParams.id;\n      const active = !this.latestScheduleParams.active;\n      const action = active ? 'resume' : 'pause';\n      _lib.default.confirm('Are you sure you want to ' + action + ' the schedule?', 'OK', () => {\n        _server.default.toggleSchedule(id, active).then(() => {\n          _lib.default.info('Successfully ' + (active ? 'resumed' : 'paused') + ' all scheduled test runs');\n          this.latestScheduleParams.active = active;\n          if (this.args.scheduleParams && this.args.scheduleParams.schedule) {\n            this.args.scheduleParams.schedule.active = active;\n          }\n        });\n      }, 'Cancel', () => {}, _.capitalize(action) + ' Schedule');\n    }\n    sendUpdate() {\n      this.args.scheduleParamsUpdated(this.latestScheduleParams);\n    }\n    updateParams() {\n      let newParams = {\n        id: this.latestScheduleParams.id,\n        scheduleType: 'Recurring',\n        recurringInterval: this.recurringInterval,\n        exclusions: this.latestScheduleParams.exclusions\n      };\n      let freq = this.frequency;\n      switch (newParams.recurringInterval) {\n        case 'Month':\n          newParams.month = freq;\n          newParams.day = this.day?.value || 1;\n          newParams.hour = this.hour || 0;\n          newParams.minute = this.minute || 0;\n          break;\n        case 'Holiday':\n          if (this.selectedRunType?.value === 'run_at') {\n            newParams.hour = this.hour || 0;\n          }\n          newParams.minute = this.minute || 0;\n          if (this.args.isMonitor) {\n            newParams.country = this.countriesArray.find(c => c.id === this.countryId)?.name || '';\n          }\n          newParams.countryId = this.countryId;\n          break;\n        case 'Week':\n          newParams.week = freq;\n          newParams.dayOfWeek = this.dayOfWeek?.value || 1;\n          newParams.hour = this.hour || 0;\n          newParams.minute = this.minute || 0;\n          break;\n        case 'Day':\n          newParams.day = freq;\n          newParams.hour = this.hour || 0;\n          newParams.minute = this.minute || 0;\n          break;\n        case 'WeekDay':\n          newParams.hour = this.hour || 0;\n          newParams.minute = this.minute || 0;\n          break;\n        case 'Hour':\n          newParams.hour = freq;\n          newParams.minute = this.minute || 0;\n          break;\n        case 'Minute':\n          newParams.minute = freq;\n          break;\n      }\n      if (!_.isEqual(newParams, this.latestScheduleParams)) {\n        this.latestScheduleParams = newParams;\n        this.sendUpdate();\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"latestScheduleParams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"recurringInterval\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"frequency\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"day\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"dayOfWeek\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"hour\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"minute\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"time\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '00:00';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"country\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"countryId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"countriesArray\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"showCountryModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"parsleyErrorContainer\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedRunType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return RunTypes[0];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateRecurringInterval\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRecurringInterval\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFrequency\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFrequency\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDay\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDay\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateWeekday\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateWeekday\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMinute\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMinute\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRunType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRunType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTime\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTime\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCountry\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCountry\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addExclusion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addExclusion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"exclusionUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"exclusionUpdated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"exclusionDeleted\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"exclusionDeleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleSchedule\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleSchedule\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiScheduleRecurringComponent);\n});","define(\"@testable/shared-ui/components/schedule-single\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"m-t-10 m-b-10\">\n    <label class=\"m-t-5\">Run At <Ui::InfoIcon\n           @content=\"Date and time to schedule the test for in your local timezone.\" /></label>\n    <div class=\"m-t-5\">\n      <Ui::BsDatetimepicker\n              @date={{this.nextScheduled}}\n              @minDate={{this.now}}\n              @onUpdate={{fn (mut this.nextScheduled)}}\n              @onHide={{this.dateUpdated}} />\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"m-t-10 m-b-10\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"Run At \\\"],[8,[39,2],null,[[\\\"@content\\\"],[\\\"Date and time to schedule the test for in your local timezone.\\\"]],null],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,3],null,[[\\\"@date\\\",\\\"@minDate\\\",\\\"@onUpdate\\\",\\\"@onHide\\\"],[[30,0,[\\\"nextScheduled\\\"]],[30,0,[\\\"now\\\"]],[28,[37,4],[[28,[37,5],[[30,0,[\\\"nextScheduled\\\"]]],null]],null],[30,0,[\\\"dateUpdated\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[],[\\\"div\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/bs-datetimepicker\\\",\\\"fn\\\",\\\"mut\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/schedule-single.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiScheduleSingleComponent = _exports.default = (_class = class UiScheduleSingleComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"now\", _descriptor, this);\n      _initializerDefineProperty(this, \"nextScheduled\", _descriptor2, this);\n      this.nextScheduled = this.args.scheduleParams.nextScheduled;\n    }\n    dateUpdated(newVal) {\n      this.nextScheduled = newVal;\n      this.updateParams();\n    }\n    updateParams() {\n      this.args.scheduleParamsUpdated({\n        id: this.args.scheduleParams.id,\n        scheduleType: 'Single',\n        nextScheduled: this.nextScheduled\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"now\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return moment().toDate();\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"nextScheduled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"dateUpdated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dateUpdated\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiScheduleSingleComponent);\n});","define(\"@testable/shared-ui/components/scheduling\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <Ui::Icon @icon=\"fa fa-plus\" role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelScheduling{{@uniqueId}}\" aria-expanded=\"false\"\n              class=\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\"\n              aria-controls=\"panelScheduling{{@uniqueId}}\" />\n        <strong>Scheduling</strong>\n      </h4>\n    </div>\n    <div id=\"panelScheduling{{@uniqueId}}\" class=\"collapse\">\n      <div class=\"panel-body form-group\">\n        <div class=\"m-t-10\">\n          {{#unless @viewOnly}}\n            <div class=\"btn-group m-r-5\">\n              {{#if (eq @testType 'Monitor')}}\n                <a href=\"javascript:\" {{on \"click\" (fn @onAddSchedule \"recurring\")}} class=\"btn btn-xs btn-primary\">\n                  <Ui::Icon @icon=\"fa fa-plus\" /></a>\n              {{else}}\n                <a href=\"javascript:\" data-bs-toggle=\"dropdown\" class=\"btn btn-xs btn-primary dropdown-toggle\">\n                  <Ui::Icon @icon=\"fa fa-plus\" /></a>\n                <ul class=\"dropdown-menu\">\n                  <li><a {{on \"click\" (fn @onAddSchedule \"single\")}} role=\"button\">One Time</a></li>\n                  <li><a {{on \"click\" (fn @onAddSchedule \"recurring\")}} role=\"button\">Recurring</a></li>\n                </ul>\n              {{/if}}\n            </div>\n          {{/unless}}\n          {{#each @schedules as |schedule|}}\n            <div class=\"schedule-row\">\n              {{#unless @viewOnly}}\n                <a {{on \"click\" (fn @onDeleteSchedule schedule)}}\n                        class=\"pull-left m-r-10 m-t-5 btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                        title=\"Delete Schedule\" role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /></a>\n              {{/unless}}\n              {{#if (eq schedule.scheduleType 'Single')}}\n                <ScheduleSingle \n                  @scheduleParams={{schedule}}\n                  @scheduleParamsUpdated={{@onScheduleParamsUpdated}} />\n              {{else if (eq schedule.scheduleType 'Recurring')}}\n                <ScheduleRecurring \n                  @scheduleParams={{schedule}}\n                  @scheduleParamsUpdated={{@onScheduleParamsUpdated}}\n                  @testId={{@testId}}\n                  @viewOnly={{@viewOnly}} />\n              {{/if}}\n            </div>\n          {{else}}\n            <span class=\"m-t-10\">Test not scheduled, only runs on demand.</span>\n          {{/each}}\n          {{#if (eq @testType 'Monitor')}}\n            <input class=\"hidden\" value={{@schedules.length}} data-parsley-min=\"1\"\n                    data-parsley-min-message=\"Monitors must have at least one recurring schedule.\"\n                    data-parsley-errors-container=\"#testSchedulingErrors{{@uniqueId}}\" />\n            <div id=\"testSchedulingErrors{{@uniqueId}}\"></div>\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,6,[29,[\\\"#panelScheduling\\\",[30,1]]]],[24,\\\"aria-expanded\\\",\\\"false\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\\\"],[16,\\\"aria-controls\\\",[29,[\\\"panelScheduling\\\",[30,1]]]]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Scheduling\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"panelScheduling\\\",[30,1]]]],[14,0,\\\"collapse\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"btn-group m-r-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,3],\\\"Monitor\\\"],null],[[[1,\\\"              \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,4],\\\"recurring\\\"],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,2],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,3],[14,6,\\\"javascript:\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,0,\\\"btn btn-xs btn-primary dropdown-toggle\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,2],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,4],\\\"single\\\"],null]],null],[12],[1,\\\"One Time\\\"],[13],[13],[1,\\\"\\\\n                \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,4],\\\"recurring\\\"],null]],null],[12],[1,\\\"Recurring\\\"],[13],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,13],[[28,[37,13],[[30,5]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"schedule-row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"              \\\"],[11,3],[24,0,\\\"pull-left m-r-10 m-t-5 btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Schedule\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,7],[30,6]],null]],null],[12],[8,[39,2],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,6,[\\\"scheduleType\\\"]],\\\"Single\\\"],null],[[[1,\\\"              \\\"],[8,[39,14],null,[[\\\"@scheduleParams\\\",\\\"@scheduleParamsUpdated\\\"],[[30,6],[30,8]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[30,6,[\\\"scheduleType\\\"]],\\\"Recurring\\\"],null],[[[1,\\\"              \\\"],[8,[39,15],null,[[\\\"@scheduleParams\\\",\\\"@scheduleParamsUpdated\\\",\\\"@testId\\\",\\\"@viewOnly\\\"],[[30,6],[30,8],[30,9],[30,2]]],null],[1,\\\"\\\\n            \\\"]],[]],null]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Test not scheduled, only runs on demand.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[28,[37,6],[[30,3],\\\"Monitor\\\"],null],[[[1,\\\"          \\\"],[10,\\\"input\\\"],[14,0,\\\"hidden\\\"],[15,2,[30,5,[\\\"length\\\"]]],[14,\\\"data-parsley-min\\\",\\\"1\\\"],[14,\\\"data-parsley-min-message\\\",\\\"Monitors must have at least one recurring schedule.\\\"],[15,\\\"data-parsley-errors-container\\\",[29,[\\\"#testSchedulingErrors\\\",[30,1]]]],[12],[13],[1,\\\"\\\\n          \\\"],[10,0],[15,1,[29,[\\\"testSchedulingErrors\\\",[30,1]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@uniqueId\\\",\\\"@viewOnly\\\",\\\"@testType\\\",\\\"@onAddSchedule\\\",\\\"@schedules\\\",\\\"schedule\\\",\\\"@onDeleteSchedule\\\",\\\"@onScheduleParamsUpdated\\\",\\\"@testId\\\"],[\\\"div\\\",\\\"h4\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"unless\\\",\\\"if\\\",\\\"eq\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ul\\\",\\\"li\\\",\\\"each\\\",\\\"-track-array\\\",\\\"schedule-single\\\",\\\"schedule-recurring\\\",\\\"span\\\",\\\"input\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/scheduling.hbs\",\n    \"isStrictMode\": false\n  });\n  class UiSchedulingComponent extends _component2.default {\n    // This component acts as a wrapper for scheduling functionality\n    // All logic is handled by the parent component through arguments:\n    // @schedules - array of schedule objects\n    // @onAddSchedule - action to add a new schedule\n    // @onDeleteSchedule - action to delete a schedule\n    // @onScheduleParamsUpdated - action when schedule parameters are updated\n    // @testType - type of test (Monitor vs regular test)\n    // @testId - ID of the test being scheduled\n    // @viewOnly - whether in read-only mode\n    // @uniqueId - unique ID for collapse functionality\n  }\n  _exports.default = UiSchedulingComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiSchedulingComponent);\n});","define(\"@testable/shared-ui/components/share-media-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"shareMediaModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n       {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Share Media <Ui::InfoIcon\n                  @content=\"Get a link that can be shared with anyone to view this media without logging into your account\" /></h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <div>\n                <div class=\"form-group\">\n                  <div class=\"input-group\">\n                    <input type=\"text\" id=\"shareUrl\" class=\"form-control\" value=\"{{this.shareUrl}}\" readonly/>\n                    <div class=\"input-group-append\">\n                      <Ui::CopyText class=\"btn-success\"\n                        @target=\"#shareUrl\"\n                        @placement=\"bottom\"\n                        @title=\"Copied!\"\n                      />\n                    </div>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <strong>Last Used: </strong>{{if this.lastUsed (print-datetime this.lastUsed) 'Never'}}\n                </div>\n                {{#if @isLoggedIn}}\n                  <div class=\"form-group\">\n                    <button type=\"button\" {{on \"click\" this.regenerateAction}} class=\"btn btn-sm btn-success\"><strong>Regenerate</strong></button>\n                    <Ui::InfoIcon @content=\"Generate a new token for the URL. Anyone with the old URL\n                    will no longer be able to access the test results.\" />\n                  </div>\n                {{/if}}\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"shareMediaModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Share Media \\\"],[8,[39,3],null,[[\\\"@content\\\"],[\\\"Get a link that can be shared with anyone to view this media without logging into your account\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"input\\\"],[14,1,\\\"shareUrl\\\"],[14,0,\\\"form-control\\\"],[15,2,[29,[[30,0,[\\\"shareUrl\\\"]]]]],[14,\\\"readonly\\\",\\\"\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,6],[[24,0,\\\"btn-success\\\"]],[[\\\"@target\\\",\\\"@placement\\\",\\\"@title\\\"],[\\\"#shareUrl\\\",\\\"bottom\\\",\\\"Copied!\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Last Used: \\\"],[13],[1,[52,[30,0,[\\\"lastUsed\\\"]],[28,[37,9],[[30,0,[\\\"lastUsed\\\"]]],null],\\\"Never\\\"]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"regenerateAction\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"Regenerate\\\"],[13],[13],[1,\\\"\\\\n                  \\\"],[8,[39,3],null,[[\\\"@content\\\"],[\\\"Generate a new token for the URL. Anyone with the old URL\\\\n                  will no longer be able to access the test results.\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@isLoggedIn\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"input\\\",\\\"ui/copy-text\\\",\\\"strong\\\",\\\"if\\\",\\\"print-datetime\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/share-media-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ShareMediaModalComponent = _exports.default = (_class = class ShareMediaModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"tokenType\", 'GetLoadTestExecution');\n      _initializerDefineProperty(this, \"shareUrl\", _descriptor, this);\n      _initializerDefineProperty(this, \"lastUsed\", _descriptor2, this);\n    }\n    didInsert() {\n      $('#shareMediaModal').modal('show');\n      $('#shareMediaModal').on('hidden.bs.modal', () => {\n        this.args.onCloseModal();\n      });\n      $('#shareMediaModal').on('shown.bs.modal', () => {\n        this.findOrGenerate();\n      });\n    }\n    regenerateAction() {\n      this.regenerate();\n    }\n    findOrGenerate() {\n      let tokens = this.args.model?.tokens;\n      let tokenType = this.tokenType;\n      let token = _.find(tokens, token => {\n        return token.active && token.targetType === tokenType;\n      });\n      if (_.isObject(token)) {\n        this.setShareUrl(token);\n      } else {\n        this.updateShareUrl();\n      }\n    }\n    regenerate() {\n      let tokenType = this.tokenType;\n      let tokens = this.args.model?.tokens;\n      let media = this.args.media;\n      _.forEach(tokens, token => {\n        const tokenParams = _lib.default.tryParseJson(token.description) || Number(token.description) || {};\n        if (token.targetType === tokenType && token.active && _.isEqual(tokenParams, media)) {\n          _server.default.deleteToken(_environment.config.currentUser.orgId, token.name).then(() => {\n            this.args.model.tokens = (this.args.model?.tokens || []).filter(t => t !== token);\n          });\n        }\n      });\n      this.updateShareUrl();\n    }\n    updateShareUrl() {\n      let tokenType = this.tokenType;\n      let media = this.args.media;\n      this.shareUrl = 'Generating...';\n      _server.default.createToken(_environment.config.currentUser.orgId, this.args.model?.id, tokenType, JSON.stringify(media)).then(result => {\n        if (this.isDestroying || this.isDestroyed) return;\n        this.args.model.tokens = [...(this.args.model?.tokens || []), result];\n        this.setShareUrl(result);\n      }, () => {\n        if (this.isDestroying || this.isDestroyed) return;\n        this.shareUrl = 'Failed to generate!  Please try again.';\n      });\n    }\n    setShareUrl(token) {\n      let media = this.args.media;\n      let mediaType = this.args.mediaType === 'video' ? 'video' : 'media';\n      this.shareUrl = `${_lib.default.origin}/p/${token.name}/${mediaType}/${media.id}`;\n      this.lastUsed = token.lastUsed;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"shareUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"lastUsed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regenerateAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regenerateAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ShareMediaModalComponent);\n});","define(\"@testable/shared-ui/components/share-results-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"shareResultsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}\n  >\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{this.modelTitle}} <Ui::InfoIcon\n                  @content=\"Get a link that can be shared with anyone to view these results without logging into\n                  your account\" /></h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <BsButtonGroup @value={{if (eq this.shareType 'latest') this.shareType \"this\"}} @type=\"radio\" class=\"m-b-10\"\n                             @onChange={{this.shareTypeChanged}} as |bg|>\n                {{#if (and (eq @shareType 'comparison') @baselineExecution.id)}}\n                  <bg.button @type=\"success\" @value=\"comparison\" @size=\"sm\">Comparison to #{{@baselineExecution.id}}</bg.button>\n                {{/if}}\n                <bg.button @type=\"success\" @value=\"latest\" @size=\"sm\">{{this.btn1Title}}</bg.button>\n                <bg.button @type=\"success\" @value=\"this\" @size=\"sm\">{{this.btn2Title}}</bg.button>\n                <div class=\"pull-right\">\n                  <Ui::InfoIcon @isHtml={{true}}\n                            @content=\"<p>Select <strong>Latest Execution</strong> to generate a URL that loads the latest\n                            execution of this test configuration.</p><p> Choose <strong>This Execution</strong> to\n                            generate a URL that always loads this specific test execution.\" />\n                </div>\n              </BsButtonGroup>\n              <div>\n                <div class=\"form-group\">\n                  <div class=\"input-group\">\n                    <input type=\"text\" id=\"shareUrl\" class=\"form-control\" value=\"{{this.shareUrl}}\" readonly/>\n                    <div class=\"input-group-append\">\n                      <Ui::CopyText class=\"btn-success\" @placement=\"bottom\" @lgIcon={{true}} @title=\"Copied!\" @trigger=\"click\" @target=\"#shareUrl\" />\n                    </div>\n                  </div>\n                </div>\n                <div class=\"form-group\">\n                  <strong>Last Used: </strong>{{if this.lastUsed (print-datetime this.lastUsed) 'Never'}}\n                </div>\n                <div class=\"form-group\">\n                  <button type=\"button\" {{on \"click\" this.regenerate}} class=\"btn btn-sm btn-primary\"><strong>Regenerate</strong></button>\n                  <Ui::InfoIcon @content=\"Generate a new token for the URL. Anyone with the old URL will no longer be able to\n                  access the test results.\" />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"shareResultsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,0,[\\\"modelTitle\\\"]]],[1,\\\" \\\"],[8,[39,3],null,[[\\\"@content\\\"],[\\\"Get a link that can be shared with anyone to view these results without logging into\\\\n                your account\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[24,0,\\\"m-b-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[52,[28,[37,7],[[30,0,[\\\"shareType\\\"]],\\\"latest\\\"],null],[30,0,[\\\"shareType\\\"]],\\\"this\\\"],\\\"radio\\\",[30,0,[\\\"shareTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[28,[37,7],[[30,2],\\\"comparison\\\"],null],[30,3,[\\\"id\\\"]]],null],[[[1,\\\"                \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"comparison\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Comparison to #\\\"],[1,[30,3,[\\\"id\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"latest\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"btn1Title\\\"]]]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"this\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"btn2Title\\\"]]]],[]]]]],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,3],null,[[\\\"@isHtml\\\",\\\"@content\\\"],[true,\\\"<p>Select <strong>Latest Execution</strong> to generate a URL that loads the latest\\\\n                          execution of this test configuration.</p><p> Choose <strong>This Execution</strong> to\\\\n                          generate a URL that always loads this specific test execution.\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[1]]]]],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"input\\\"],[14,1,\\\"shareUrl\\\"],[14,0,\\\"form-control\\\"],[15,2,[29,[[30,0,[\\\"shareUrl\\\"]]]]],[14,\\\"readonly\\\",\\\"\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,10],[[24,0,\\\"btn-success\\\"]],[[\\\"@placement\\\",\\\"@lgIcon\\\",\\\"@title\\\",\\\"@trigger\\\",\\\"@target\\\"],[\\\"bottom\\\",true,\\\"Copied!\\\",\\\"click\\\",\\\"#shareUrl\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Last Used: \\\"],[13],[1,[52,[30,0,[\\\"lastUsed\\\"]],[28,[37,12],[[30,0,[\\\"lastUsed\\\"]]],null],\\\"Never\\\"]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"regenerate\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"Regenerate\\\"],[13],[13],[1,\\\"\\\\n                \\\"],[8,[39,3],null,[[\\\"@content\\\"],[\\\"Generate a new token for the URL. Anyone with the old URL will no longer be able to\\\\n                access the test results.\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"@shareType\\\",\\\"@baselineExecution\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"bs-button-group\\\",\\\"if\\\",\\\"eq\\\",\\\"and\\\",\\\"input\\\",\\\"ui/copy-text\\\",\\\"strong\\\",\\\"print-datetime\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/share-results-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let ShareResultsModalComponent = _exports.default = (_class = class ShareResultsModalComponent extends _component2.default {\n    get modelTitle() {\n      return this.args.modelTitle || 'Share Results';\n    }\n    get btn1Title() {\n      return this.args.btn1Title || 'Latest Execution';\n    }\n    get btn2Title() {\n      return this.args.btn2Title || 'This Execution';\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"shareType\", _descriptor, this);\n      _initializerDefineProperty(this, \"shareUrl\", _descriptor2, this);\n      this.shareType = this.args.shareType || 'latest';\n    }\n    shareTypeChanged(newValue) {\n      this.shareType = newValue;\n      this.findOrGenerate();\n    }\n    regenerate() {\n      this.regenerateToken();\n    }\n    regenerateToken() {\n      let tokenType = this.getTokenType();\n      let tokens = this.args.execution.tokens;\n      _.forEach(tokens, token => {\n        if (token.targetType === tokenType && token.active) {\n          _server.default.deleteToken(_environment.config.currentUser.orgId, token.name).then(result => {\n            const idx = tokens.indexOf(token);\n            if (idx > -1) {\n              tokens.splice(idx, 1);\n            }\n          });\n        }\n      });\n      this.updateShareUrl();\n    }\n    findOrGenerate() {\n      let tokens = this.args.execution.tokens;\n      let tokenType = this.getTokenType();\n      let params = this.args.viewRelatedParams || {};\n      let token = _.find(tokens, token => {\n        const tokenParams = _lib.default.tryParseJson(token.description) || Number(token.description) || {};\n        let baseValidation = token.active && token.targetType === tokenType && _.isEqual(tokenParams, params);\n        if (tokenType !== 'ComparisonReport') {\n          return baseValidation;\n        }\n        return baseValidation && this.getId() === token.targetId && token.targetId2 === this.getId2();\n      });\n      if (_.isObject(token)) {\n        this.setShareUrl(token);\n      } else {\n        this.updateShareUrl();\n      }\n    }\n    didInsert() {\n      let _this = this;\n      $('#shareResultsModal').on('shown.bs.modal', function () {\n        _this.findOrGenerate();\n      });\n    }\n    setShareUrl(token) {\n      this.shareUrl = _lib.default.origin + '/p/' + token.name;\n      this.lastUsed = token.lastUsed;\n    }\n    getTokenType() {\n      return this.shareType === 'latest' ? 'GetLatestExecution' : this.shareType === 'comparison' ? 'ComparisonReport' : 'GetLoadTestExecution';\n    }\n    getId() {\n      return this.shareType === 'latest' ? this.args.execution.confId : this.args.execution.id;\n    }\n    getId2() {\n      return this.shareType === 'comparison' && this.args.baselineExecution?.id ? this.args.baselineExecution?.id : null;\n    }\n    updateShareUrl() {\n      this.shareUrl = 'Generating...';\n      _server.default.createToken(_environment.config.currentUser.orgId, this.getId(), this.getTokenType(), JSON.stringify(this.args.viewRelatedParams), this.getId2()).then(result => {\n        if (typeof this.args.addToken == 'function') this.args.addToken(result);\n        this.setShareUrl(result);\n      }, () => {\n        this.shareUrl = 'Failed to generate!  Please try again.';\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"shareType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'latest';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"shareUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"shareTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"shareTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regenerate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regenerate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ShareResultsModalComponent);\n});","define(\"@testable/shared-ui/components/show-country-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"showCountryHolidaysModal\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Holidays</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          <form id=\"createOrgForm\">\n              <div class=\"row\">\n                <div class=\"col-6\">\n                  <div class=\"form-group\">\n                    <label>Country</label>\n                    <Ui::PSelect @searchField=\"description\"\n                                @searchEnabled={{true}}\n                                @options={{@countriesArray}}\n                                @selected={{this.country}}\n                                @placeholder='Select Country'\n                                @onChange={{this.updateCountry}} as |country|>\n                      {{country.description}}\n                    </Ui::PSelect>\n                  </div>\n                </div>\n  \n                <div class=\"col-6\">\n                  <div class=\"form-group\">\n                    <label>Year</label>\n                    <Ui::PSelect @options={{this.yearsArray}}\n                                @selected={{this.year}}\n                                @placeholder='Select Year'\n                                @onChange={{this.updateYear}} as |year|>\n                      {{year}}\n                    </Ui::PSelect>\n                  </div>\n                </div>\n  \n              </div>\n  \n          </form>\n  \n          <div class=\"m-t-10 table-container\">\n            {{#if this.isLoading}}\n              <h5>Loading...</h5>\n            {{else if (gt this.holidaysData.length 0)}}\n              <table class=\"table widget-table\">\n                <thead class=\"table-header\">\n                <tr>\n                  <th style={{html-safe \"width: 150px;\"}}>Observed Date</th>\n                  <th>Description</th>\n                </tr>\n                </thead>\n                <tbody class=\"table-body\">\n                {{#each this.holidaysData as |holiday|}}\n                  <tr>\n                    <td>{{holiday.observed}}</td>\n                    <td>{{holiday.description}}</td>\n                  </tr>\n                {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <h5>No holidays found.</h5>\n            {{/if}}\n          </div>\n  \n  \n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"showCountryHolidaysModal\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Holidays\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"form\\\"],[14,1,\\\"createOrgForm\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-6\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Country\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,6],null,[[\\\"@searchField\\\",\\\"@searchEnabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[\\\"description\\\",true,[30,1],[30,0,[\\\"country\\\"]],\\\"Select Country\\\",[30,0,[\\\"updateCountry\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,2,[\\\"description\\\"]]],[1,\\\"\\\\n                  \\\"]],[2]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n              \\\"],[10,0],[14,0,\\\"col-6\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Year\\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,6],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"yearsArray\\\"]],[30,0,[\\\"year\\\"]],\\\"Select Year\\\",[30,0,[\\\"updateYear\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,3]],[1,\\\"\\\\n                  \\\"]],[3]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"m-t-10 table-container\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"            \\\"],[10,\\\"h5\\\"],[12],[1,\\\"Loading...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,9],[[30,0,[\\\"holidaysData\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"table\\\"],[14,0,\\\"table widget-table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[14,0,\\\"table-header\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[15,5,[28,[37,14],[\\\"width: 150px;\\\"],null]],[12],[1,\\\"Observed Date\\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,\\\"Description\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[14,0,\\\"table-body\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,0,[\\\"holidaysData\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,4,[\\\"observed\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,[30,4,[\\\"description\\\"]]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No holidays found.\\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@countriesArray\\\",\\\"country\\\",\\\"year\\\",\\\"holiday\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"if\\\",\\\"h5\\\",\\\"gt\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"html-safe\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/show-country-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiShowCountryModalComponent = _exports.default = (_class = class UiShowCountryModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"country\", _descriptor2, this);\n      _initializerDefineProperty(this, \"holidaysData\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor4, this);\n      _defineProperty(this, \"yearsArray\", _lib.default.getSurroundingYearsArray());\n      _initializerDefineProperty(this, \"year\", _descriptor5, this);\n      if (this.args.country) {\n        this.country = this.args.country;\n      }\n      this.getHolidays();\n    }\n    getHolidays() {\n      if (this.year && this.country) {\n        this.isLoading = true;\n        this.api.countries.getHolidays(this.country.id, this.year).then(resp => {\n          this.holidaysData = resp;\n          this.isLoading = false;\n        }).catch(error => {\n          console.error('Error loading holidays:', error);\n          this.isLoading = false;\n        });\n      }\n    }\n    updateCountry(country) {\n      this.country = country;\n      this.getHolidays();\n    }\n    updateYear(year) {\n      this.year = year;\n      this.getHolidays();\n    }\n    didInsert() {\n      const _this = this;\n      $('#showCountryHolidaysModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#showCountryHolidaysModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"country\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"holidaysData\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"year\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.yearsArray[1];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateCountry\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCountry\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateYear\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateYear\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiShowCountryModalComponent);\n});","define(\"@testable/shared-ui/components/signup-panel\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _login, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"login-content\" {{did-insert this.didInsert}}>\n    <form {{on \"submit\" this.signup}} data-parsley-trigger=\"focusout\" id=\"signupForm\"\n      class=\"form-horizontal margin-bottom-0\">\n      {{#if (is-awslink-pending '')}}\n        <div class=\"form-group\">\n          Please login or register a new account to finalize the link to your AWS account.\n        </div>\n      {{/if}}\n      <div class=\"form-group m-b-20\">\n        Already a member? Click <LinkTo @route='login'>here</LinkTo> to login.\n      </div>\n      <div class=\"form-group m-b-20\">\n        <input type=\"name\" class=\"form-control input-lg\" placeholder=\"Name\" id=\"signupName\" data-parsley-required=\"true\"\n          data-parsley-required-message=\"Name is required.\" />\n      </div>\n      <div class=\"form-group m-b-20\">\n        <input type=\"email\" class=\"form-control input-lg\" placeholder=\"Email Address\" id=\"signupEmail\"\n          data-parsley-type=\"email\" data-parsley-required=\"true\"\n          data-parsley-required-message=\"Email address is required.\" />\n      </div>\n      <div class=\"form-group m-b-20\">\n        <Ui::PasswordInput class=\"input-lg\" id=\"signupPassword\" placeholder=\"Password\"\n          data-parsley-password=\"true\" />\n      </div>\n      <div class=\"form-group m-b-20\">\n        <Ui::PasswordInput class=\"input-lg\" placeholder=\"Confirm Password\" data-parsley-required=\"true\"\n          data-parsley-equalto=\"#signupPassword\" data-parsley-equalto-message=\"Passwords do not match.\"\n          data-parsley-required-message=\"Confirm password please.\" />\n      </div>\n      <div class=\"login-buttons\">\n        <button type=\"submit\" disabled={{this.isSubmitted}}\n          class=\"btn btn-success btn-block btn-lg\">{{if this.isSubmitted\n                                                        'Creating Account...'\n                                                        'Create Account'}}</button>\n        <br />\n        By clicking Create Account, you agree to our\n        <LinkTo @route='terms' target='_blank'>Terms of Service</LinkTo>.<br />\n      </div>\n    </form>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"login-content\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[11,\\\"form\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[24,1,\\\"signupForm\\\"],[24,0,\\\"form-horizontal margin-bottom-0\\\"],[4,[38,3],[\\\"submit\\\",[30,0,[\\\"signup\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[\\\"\\\"],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        Please login or register a new account to finalize the link to your AWS account.\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n      Already a member? Click \\\"],[8,[39,6],null,[[\\\"@route\\\"],[\\\"login\\\"]],[[\\\"default\\\"],[[[[1,\\\"here\\\"]],[]]]]],[1,\\\" to login.\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control input-lg\\\"],[14,\\\"placeholder\\\",\\\"Name\\\"],[14,1,\\\"signupName\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Name is required.\\\"],[14,4,\\\"name\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control input-lg\\\"],[14,\\\"placeholder\\\",\\\"Email Address\\\"],[14,1,\\\"signupEmail\\\"],[14,\\\"data-parsley-type\\\",\\\"email\\\"],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Email address is required.\\\"],[14,4,\\\"email\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,0,\\\"input-lg\\\"],[24,1,\\\"signupPassword\\\"],[24,\\\"placeholder\\\",\\\"Password\\\"],[24,\\\"data-parsley-password\\\",\\\"true\\\"]],null,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"form-group m-b-20\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],[[24,0,\\\"input-lg\\\"],[24,\\\"placeholder\\\",\\\"Confirm Password\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-equalto\\\",\\\"#signupPassword\\\"],[24,\\\"data-parsley-equalto-message\\\",\\\"Passwords do not match.\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Confirm password please.\\\"]],null,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"login-buttons\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSubmitted\\\"]]],[14,0,\\\"btn btn-success btn-block btn-lg\\\"],[14,4,\\\"submit\\\"],[12],[1,[52,[30,0,[\\\"isSubmitted\\\"]],\\\"Creating Account...\\\",\\\"Create Account\\\"]],[13],[1,\\\"\\\\n      \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n      By clicking Create Account, you agree to our\\\\n      \\\"],[8,[39,6],[[24,\\\"target\\\",\\\"_blank\\\"]],[[\\\"@route\\\"],[\\\"terms\\\"]],[[\\\"default\\\"],[[[[1,\\\"Terms of Service\\\"]],[]]]]],[1,\\\".\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"form\\\",\\\"on\\\",\\\"if\\\",\\\"is-awslink-pending\\\",\\\"link-to\\\",\\\"input\\\",\\\"ui/password-input\\\",\\\"button\\\",\\\"br\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/signup-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  let SignupPanelComponent = _exports.default = (_class = class SignupPanelComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"gtag\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isSubmitted\", _descriptor3, this);\n    }\n    didInsert() {\n      $('#signupForm').parsley();\n    }\n    signup(e) {\n      e.preventDefault();\n      if (!_login.default.validateAllowedDomain($('#signupEmail').val())) {\n        _lib.default.error('Email address with valid domain is required.');\n        return;\n      }\n      if (!$('#signupForm').parsley().validate()) {\n        return;\n      }\n      this.isSubmitted = true;\n      const signupEmail = $('#signupEmail').val();\n      _login.default.signup(_environment.config.currentUser).then(result => {\n        if (result?.errorCode === 'UNCONFIRMED') {\n          this.router.transitionTo('confirm-email-address', signupEmail);\n        } else {\n          this.gtag.registerConversion();\n          this.args.loggedIn();\n        }\n      }, () => {\n        this.isSubmitted = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"gtag\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isSubmitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"signup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"signup\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SignupPanelComponent);\n});","define(\"@testable/shared-ui/components/slack-notification-config\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"slack-notification-config\">\n    <div class=\"d-flex align-items-baseline m-b-10\">\n      <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">Channel</label>\n      {{#if this.slackChannelsLoading}}\n        <Input @type=\"text\"\n               @value=\"Loading channels...\"\n               disabled={{true}}\n               class=\"form-control\" />\n      {{else}}\n        <div class=\"w-100\">\n          <Ui::PSelect @disabled={{not @editable}}\n                      @options={{this.slackChannels}}\n                      @selected={{this.selectedChannel}}\n                      @onChange={{this.updateSlackChannel}}\n                      @searchEnabled={{true}}\n                      @searchField=\"name\"\n                      class=\"w-100\"\n                      as |channel|>\n            {{channel.name}}\n          </Ui::PSelect>\n          {{#if this.errorMessage}}\n            <div class=\"alert alert-danger mt-1 mb-0 py-0 px-1 overflow-wrap\">\n              {{this.errorMessage}}\n            </div>\n          {{/if}}\n        </div>\n      {{/if}}\n    </div>\n    <div class=\"form-group\">\n      {{#unless this.isMonitoring}}\n        <div class=\"d-flex flex-row flex-wrap m-b-10\">\n          <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">On Start</label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.slackConfig 'onStart'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateSlackOption 'onStart')}} />\n              Send a chat\n            </label>\n          </div>\n        </div>\n        <div class=\"d-flex flex-row flex-wrap m-b-10\">\n          <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">Options</label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.slackConfig 'includeMetrics'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateSlackOption 'includeMetrics')}} />\n              Include summary metrics\n            </label><br />\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.slackConfig 'includeSuccessCriteria'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateSlackOption 'includeSuccessCriteria')}} />\n              Include success criteria\n            </label><br />\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.slackConfig 'includeRecentImages'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateSlackOption 'includeRecentImages')}} />\n              Include the last few images, if any, on test failure\n            </label>\n          </div>\n        </div>\n      {{/unless}}\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"slack-notification-config\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-baseline m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Channel\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"slackChannelsLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,3],[[16,\\\"disabled\\\",true],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",\\\"Loading channels...\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,4],[[24,0,\\\"w-100\\\"]],[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\"],[[28,[37,5],[[30,1]],null],[30,0,[\\\"slackChannels\\\"]],[30,0,[\\\"selectedChannel\\\"]],[30,0,[\\\"updateSlackChannel\\\"]],true,\\\"name\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[2]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"errorMessage\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"alert alert-danger mt-1 mb-0 py-0 px-1 overflow-wrap\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"errorMessage\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-flex flex-row flex-wrap m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"On Start\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,3],[[16,\\\"disabled\\\",[28,[37,5],[[30,1]],null]],[4,[38,8],[\\\"input\\\",[28,[37,9],[[30,0,[\\\"updateSlackOption\\\"]],\\\"onStart\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,7],[[30,0,[\\\"slackConfig\\\"]],\\\"onStart\\\"],null]]],null],[1,\\\"\\\\n            Send a chat\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex flex-row flex-wrap m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Options\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,3],[[16,\\\"disabled\\\",[28,[37,5],[[30,1]],null]],[4,[38,8],[\\\"input\\\",[28,[37,9],[[30,0,[\\\"updateSlackOption\\\"]],\\\"includeMetrics\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,7],[[30,0,[\\\"slackConfig\\\"]],\\\"includeMetrics\\\"],null]]],null],[1,\\\"\\\\n            Include summary metrics\\\\n          \\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,3],[[16,\\\"disabled\\\",[28,[37,5],[[30,1]],null]],[4,[38,8],[\\\"input\\\",[28,[37,9],[[30,0,[\\\"updateSlackOption\\\"]],\\\"includeSuccessCriteria\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,7],[[30,0,[\\\"slackConfig\\\"]],\\\"includeSuccessCriteria\\\"],null]]],null],[1,\\\"\\\\n            Include success criteria\\\\n          \\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,3],[[16,\\\"disabled\\\",[28,[37,5],[[30,1]],null]],[4,[38,8],[\\\"input\\\",[28,[37,9],[[30,0,[\\\"updateSlackOption\\\"]],\\\"includeRecentImages\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,7],[[30,0,[\\\"slackConfig\\\"]],\\\"includeRecentImages\\\"],null]]],null],[1,\\\"\\\\n            Include the last few images, if any, on test failure\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@editable\\\",\\\"channel\\\"],[\\\"div\\\",\\\"label\\\",\\\"if\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"not\\\",\\\"unless\\\",\\\"get\\\",\\\"on\\\",\\\"fn\\\",\\\"br\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/slack-notification-config.hbs\",\n    \"isStrictMode\": false\n  });\n  const SlackErrorMessages = {\n    account_inactive: 'Slack account is inactive. Please reconnect your Slack integration.',\n    token_revoked: 'Slack token has been revoked. Please reconnect your Slack integration.',\n    invalid_auth: 'Invalid Slack authentication. Please reconnect your Slack integration.',\n    missing_scope: 'Missing required Slack permissions. Please reconnect with the correct scopes.',\n    channel_not_found: 'Slack channel not found.',\n    not_authed: 'Not authenticated with Slack. Please connect your Slack integration.'\n  };\n  let SlackNotificationConfigComponent = _exports.default = (_class = class SlackNotificationConfigComponent extends _component2.default {\n    get slackConfig() {\n      let config = this.args.customNotificationList;\n      if (!config || config === '{}') {\n        return {\n          onStart: false,\n          includeMetrics: true,\n          includeSuccessCriteria: true,\n          includeRecentImages: true,\n          channels: []\n        };\n      }\n      return JSON.parse(config);\n    }\n    get selectedChannel() {\n      const selectedChannelId = this.slackConfig.channels && this.slackConfig.channels?.[0];\n      const defaultChannel = this.slackChannels[0] || {\n        id: '',\n        name: 'None'\n      };\n      return _.find(this.slackChannels, channel => channel.id === selectedChannelId) || defaultChannel;\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"slackChannels\", _descriptor, this);\n      _initializerDefineProperty(this, \"slackChannelsLoading\", _descriptor2, this);\n      _initializerDefineProperty(this, \"loadFailed\", _descriptor3, this);\n      if (this.args.slackChannels) {\n        this.slackChannels = this.args.slackChannels;\n      } else {\n        this.loadSlackChannels();\n      }\n    }\n    async loadSlackChannels() {\n      try {\n        this.slackChannelsLoading = true;\n        const channels = await _server.default.getSlackChannels(_environment.config.currentUser.orgId);\n        const channelArray = [];\n        _.forEach(channels, (name, id) => {\n          channelArray.push({\n            id: id,\n            name: '#' + name\n          });\n        });\n        this.slackChannels = _.sortBy(channelArray, ['name']);\n        this.args.onLoadChannels(this.slackChannels);\n        this.errorMessage = null;\n        this.loadFailed = false;\n      } catch (error) {\n        const errorCode = error?.responseJSON?.error?.message;\n        this.errorMessage = SlackErrorMessages[errorCode] || error?.message || 'Failed to load Slack channels';\n        this.slackChannels = [];\n        this.loadFailed = true;\n      } finally {\n        this.slackChannelsLoading = false;\n      }\n    }\n    saveSlackConfig(config) {\n      try {\n        this.args.onSave(JSON.stringify(config));\n      } catch (error) {\n        console.error('Failed to save Slack config:', error);\n      }\n    }\n    updateSlackChannel(selectedChannel) {\n      if (this.loadFailed) return;\n      const config = this.slackConfig;\n      if (selectedChannel && selectedChannel.id) {\n        config.channels = [selectedChannel.id];\n      } else {\n        config.channels = [];\n      }\n      this.saveSlackConfig(config);\n    }\n    updateSlackOption(optionName, event) {\n      const config = {\n        ...this.slackConfig\n      };\n      config[optionName] = event.target.checked;\n      this.saveSlackConfig(config);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"slackChannels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"slackChannelsLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"loadFailed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateSlackChannel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSlackChannel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSlackOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSlackOption\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SlackNotificationConfigComponent);\n});","define(\"@testable/shared-ui/components/slowest-iterations\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"m-t-10\" id=\"slowestIterationsContents\">\n    {{#if this.iterationsLoaded}}\n      {{#if (gt this.iterationCount this.iterations.length)}}\n        <span class=\"semi-bold m-b-10\">Only displaying the {{print-number this.iterations.length}}\n          slowest iterations out of {{print-number this.iterationCount}} total iterations. To view all results <a\n                  href=\"{{this.exportToCsvUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> export to CSV</a>.</span>\n      {{/if}}\n      <Ui::PSelect @options={{this.iterations}} @selected={{this.selectedIteration}} @placeholder=\"Please select an iteration...\" @onChange={{fn (mut this.selectedIteration)}} as |iteration|>\n        {{#if (is-number iteration.iteration)}}\n          {{#if this.isMultiUser}}{{iteration.threadId}}{{else}}\n            User {{print-number iteration.user}}{{/if}} Iteration {{print-number iteration.iteration}} {{print-number\n                iteration.totalTimeMs}}ms ({{iteration.id}})\n        {{else}}\n          {{print-number iteration.totalTimeMs}}ms ({{iteration.id}})\n        {{/if}}\n      </Ui::PSelect>\n    {{else}}\n      Loading slowest iterations...\n    {{/if}}\n    {{#if this.selectedIteration}}\n      <IterationResults @overallModel={{@overallModel}}\n                        @iteration={{this.selectedIteration.id}}\n                        @selectedResource={{@selectedResource}}\n                        @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"m-t-10\\\"],[14,1,\\\"slowestIterationsContents\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"iterationsLoaded\\\"]],[[[41,[28,[37,2],[[30,0,[\\\"iterationCount\\\"]],[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"semi-bold m-b-10\\\"],[12],[1,\\\"Only displaying the \\\"],[1,[28,[35,4],[[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null]],[1,\\\"\\\\n        slowest iterations out of \\\"],[1,[28,[35,4],[[30,0,[\\\"iterationCount\\\"]]],null]],[1,\\\" total iterations. To view all results \\\"],[10,3],[15,6,[29,[[30,0,[\\\"exportToCsvUrl\\\"]]]]],[12],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" export to CSV\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],\\\"Please select an iteration...\\\",[28,[37,8],[[28,[37,9],[[30,0,[\\\"selectedIteration\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,1,[\\\"iteration\\\"]]],null],[[[1,\\\"        \\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,[30,1,[\\\"threadId\\\"]]]],[]],[[[1,\\\"\\\\n          User \\\"],[1,[28,[35,4],[[30,1,[\\\"user\\\"]]],null]]],[]]],[1,\\\" Iteration \\\"],[1,[28,[35,4],[[30,1,[\\\"iteration\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,4],[[30,1,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,1,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[28,[35,4],[[30,1,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,1,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]]],[1,\\\"    \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    Loading slowest iterations...\\\\n\\\"]],[]]],[41,[30,0,[\\\"selectedIteration\\\"]],[[[1,\\\"    \\\"],[8,[39,11],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedResource\\\",\\\"@showImageDetailsModal\\\"],[[30,2],[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[30,3],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"iteration\\\",\\\"@overallModel\\\",\\\"@selectedResource\\\"],[\\\"div\\\",\\\"if\\\",\\\"gt\\\",\\\"span\\\",\\\"print-number\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"ui/p-select\\\",\\\"fn\\\",\\\"mut\\\",\\\"is-number\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/slowest-iterations.hbs\",\n    \"isStrictMode\": false\n  });\n  let SlowestIterationsComponent = _exports.default = (_class = class SlowestIterationsComponent extends _component2.default {\n    get exportToCsvUrl() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/results.csv';\n      return _lib.default.toUrl(path);\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel?.script?.scriptType);\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"iterationsLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor2, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor4, this);\n      this.loadIterations();\n    }\n    loadIterations() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/slowest-iterations?limit=100';\n      const _this = this;\n      $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(path),\n        contentType: 'application/json; charset=utf-8'\n      }).then(function (iterations, status, xhr) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        const iterationCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(iterationCount)) {\n          _this.iterationCount = Number(iterationCount);\n        }\n        _this.iterations = iterations;\n        _this.iterationsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        _this.iterations = [];\n        _this.iterationCount = 0;\n        _this.iterationsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal(imageId);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"iterationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SlowestIterationsComponent);\n});","define(\"@testable/shared-ui/components/slowest-results\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _component2, _tracking, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"title-box m-t-10\"\n       {{did-update this.onFilterChange @selectedResource this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp}}>\n    {{#if this.resultsLoaded}}\n      {{#if (gt this.resultCount this.results.length)}}\n        <span class=\"semi-bold\">Only displaying the top {{print-number this.results.length}}\n          slowest results out of {{print-number this.resultCount}} total results. To view all results <a\n                  href=\"{{@exportToCsvUrl}}\"><Ui::Icon @icon=\"fa fa-download\" /> export to CSV</a>.</span>\n      {{/if}}\n      <p class=\"semi-bold\">Double click a result for details.</p>\n      <div class=\"overflow-auto\">\n        <GridSearch @onSearch={{fn (mut this.search)}} />\n        <ResultsTimelineGrid @id={{concat @regionName '_slowestResultsGrid'}}\n                             @dblClickToSelect={{true}}\n                             @hideOverallResult={{true}}\n                             @firstTimestamp={{@overallModel.startedAt}}\n                             @lastTimestamp={{@overallModel.finishedAt}}\n                             @results={{this.results}}\n                             @scriptType={{@model.execution.script.scriptType}}\n                             @search={{this.search}}\n                             @sortBy=\"time\"\n                             @resultSelected={{this.resultSelected}} />\n      </div>\n    {{else}}\n      Loading slowest results...\n    {{/if}}\n  </div>\n  \n  {{#if this.showResultModal}}\n    <ResultModal @resultId={{this.selectedResultId}}\n                 @uuid={{@overallModel.uuid}}\n                 @scriptType={{@model.execution.script.scriptType}}\n                 @modalClosed={{this.resultModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"title-box m-t-10\\\"],[4,[38,1],[[30,0,[\\\"onFilterChange\\\"]],[30,1],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"resultsLoaded\\\"]],[[[41,[28,[37,3],[[30,0,[\\\"resultCount\\\"]],[30,0,[\\\"results\\\",\\\"length\\\"]]],null],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Only displaying the top \\\"],[1,[28,[35,5],[[30,0,[\\\"results\\\",\\\"length\\\"]]],null]],[1,\\\"\\\\n        slowest results out of \\\"],[1,[28,[35,5],[[30,0,[\\\"resultCount\\\"]]],null]],[1,\\\" total results. To view all results \\\"],[10,3],[15,6,[29,[[30,2]]]],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\" export to CSV\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,2],[14,0,\\\"semi-bold\\\"],[12],[1,\\\"Double click a result for details.\\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"overflow-auto\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@onSearch\\\"],[[28,[37,10],[[28,[37,11],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[8,[39,12],null,[[\\\"@id\\\",\\\"@dblClickToSelect\\\",\\\"@hideOverallResult\\\",\\\"@firstTimestamp\\\",\\\"@lastTimestamp\\\",\\\"@results\\\",\\\"@scriptType\\\",\\\"@search\\\",\\\"@sortBy\\\",\\\"@resultSelected\\\"],[[28,[37,13],[[30,3],\\\"_slowestResultsGrid\\\"],null],true,true,[30,4,[\\\"startedAt\\\"]],[30,4,[\\\"finishedAt\\\"]],[30,0,[\\\"results\\\"]],[30,5,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"search\\\"]],\\\"time\\\",[30,0,[\\\"resultSelected\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    Loading slowest results...\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showResultModal\\\"]],[[[1,\\\"  \\\"],[8,[39,14],null,[[\\\"@resultId\\\",\\\"@uuid\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedResultId\\\"]],[30,4,[\\\"uuid\\\"]],[30,5,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"resultModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@selectedResource\\\",\\\"@exportToCsvUrl\\\",\\\"@regionName\\\",\\\"@overallModel\\\",\\\"@model\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"gt\\\",\\\"span\\\",\\\"print-number\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"p\\\",\\\"grid-search\\\",\\\"fn\\\",\\\"mut\\\",\\\"results-timeline-grid\\\",\\\"concat\\\",\\\"result-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/slowest-results.hbs\",\n    \"isStrictMode\": false\n  });\n  let SlowestResultsComponent = _exports.default = (_class = class SlowestResultsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"results\", _descriptor3, this);\n      _initializerDefineProperty(this, \"resultCount\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedResultId\", _descriptor5, this);\n      _initializerDefineProperty(this, \"showResultModal\", _descriptor6, this);\n      _initializerDefineProperty(this, \"search\", _descriptor7, this);\n      this.load();\n    }\n    load() {\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model, this.args.selectedResource);\n      path += '/slowest-results?limit=100';\n      const params = {\n        limit: 100\n      };\n      _.merge(params, _lib.default.getZoomParams(this.zoomInfo));\n      const _this = this;\n      $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(path, params),\n        contentType: 'application/json; charset=utf-8'\n      }).then(function (results, status, xhr) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        const resultCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(resultCount)) {\n          _this.resultCount = Number(resultCount);\n        }\n        _this.results = results;\n        _this.resultsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        if (_this.isDestroying || _this.isDestroyed) return;\n        _this.results = [];\n        _this.resultCount = 0;\n        _this.resultsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    onFilterChange() {\n      (0, _runloop.once)(this, this.load);\n    }\n    resultSelected(result) {\n      this.selectedResultId = result ? result.id : null;\n      if (result) {\n        this.showResultModal = true;\n      }\n    }\n    resultModalClosed() {\n      this.showResultModal = false;\n      this.selectedResultId = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"results\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"resultCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedResultId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showResultModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"load\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"load\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFilterChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFilterChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resultModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resultModalClosed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SlowestResultsComponent);\n});","define(\"@testable/shared-ui/components/sns-notification-config\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"sns-notification-config\">\n    <div class=\"d-flex align-items-center m-b-10\">\n      <label class=\"m-r-10 text-nowrap align-items-cente mw-100px\">Region</label>\n      <Ui::PSelect @disabled={{not @editable}}\n                   @options={{@awsRegions}}\n                   @selected={{this.selectedRegion}}\n                   @onChange={{this.updateSnsRegion}}\n                   @searchEnabled={{true}}\n                   @searchField=\"name\"\n                   class=\"w-100\"\n                   as |region|>\n        {{region.description}} ({{region.name}})\n      </Ui::PSelect>\n    </div>\n    <div class=\"d-flex align-items-center m-b-10\">\n      <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">SNS Topic ARN</label>\n      <Input @type=\"text\"\n             @value={{get this.snsConfig 'topicARN'}}\n             disabled={{not @editable}}\n             placeholder=\"arn:aws:sns:us-east-1:123456789012:topic-name\"\n             class=\"form-control w-100\"\n             {{on \"input\" this.updateSnsTopicArn}} />\n    </div>\n    <div class=\"d-flex align-items-center m-b-10\">\n      <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">Type</label>\n      <Ui::PSelect @disabled={{not @editable}}\n                   @options={{array 'Text' 'Json'}}\n                   @selected={{get this.snsConfig 'notificationType'}}\n                   @onChange={{this.updateSnsNotificationType}}\n                   class=\"w-100\"\n                   as |type|>\n        {{type}}\n      </Ui::PSelect>\n    </div>\n    {{#unless this.isMonitoring}}\n      <div class=\"d-flex flex-row flex-wrap m-b-10\">\n        <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">On Start</label>\n        <div>\n          <label class=\"normal\">\n            <Input @type=\"checkbox\"\n                  @checked={{get this.snsConfig 'onStart'}}\n                  disabled={{not @editable}}\n                  {{on \"input\" this.updateOnStartOption}} />\n            Send a chat\n          </label>\n        </div>\n      </div>\n    {{/unless}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"sns-notification-config\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-cente mw-100px\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,2],[[24,0,\\\"w-100\\\"]],[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\"],[[28,[37,3],[[30,1]],null],[30,2],[30,0,[\\\"selectedRegion\\\"]],[30,0,[\\\"updateSnsRegion\\\"]],true,\\\"name\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,3,[\\\"description\\\"]]],[1,\\\" (\\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\")\\\\n    \\\"]],[3]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"SNS Topic ARN\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,4],[[16,\\\"disabled\\\",[28,[37,3],[[30,1]],null]],[24,\\\"placeholder\\\",\\\"arn:aws:sns:us-east-1:123456789012:topic-name\\\"],[24,0,\\\"form-control w-100\\\"],[4,[38,6],[\\\"input\\\",[30,0,[\\\"updateSnsTopicArn\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[28,[37,5],[[30,0,[\\\"snsConfig\\\"]],\\\"topicARN\\\"],null]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-center m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Type\\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,2],[[24,0,\\\"w-100\\\"]],[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[28,[37,3],[[30,1]],null],[28,[37,7],[\\\"Text\\\",\\\"Json\\\"],null],[28,[37,5],[[30,0,[\\\"snsConfig\\\"]],\\\"notificationType\\\"],null],[30,0,[\\\"updateSnsNotificationType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,4]],[1,\\\"\\\\n    \\\"]],[4]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-flex flex-row flex-wrap m-b-10\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"On Start\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],[[16,\\\"disabled\\\",[28,[37,3],[[30,1]],null]],[4,[38,6],[\\\"input\\\",[30,0,[\\\"updateOnStartOption\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,5],[[30,0,[\\\"snsConfig\\\"]],\\\"onStart\\\"],null]]],null],[1,\\\"\\\\n          Send a chat\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@editable\\\",\\\"@awsRegions\\\",\\\"region\\\",\\\"type\\\"],[\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"not\\\",\\\"input\\\",\\\"get\\\",\\\"on\\\",\\\"array\\\",\\\"unless\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/sns-notification-config.hbs\",\n    \"isStrictMode\": false\n  });\n  let SnsNotificationConfigComponent = _exports.default = (_class = class SnsNotificationConfigComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n    }\n    get snsConfig() {\n      let config = this.args.customNotificationList;\n      if (!config || config === '{}') {\n        return {\n          onStart: false,\n          region: 'us-east-1',\n          topicARN: '',\n          notificationType: 'Text'\n        };\n      }\n      return JSON.parse(config);\n    }\n    get selectedRegion() {\n      return _.find(this.args.awsRegions, region => region.name === this.snsConfig.region);\n    }\n    saveSnsConfig(config) {\n      try {\n        this.args.onSave(JSON.stringify(config));\n      } catch (error) {\n        console.error('Failed to save SNS config:', error);\n      }\n    }\n    updateSnsOption(optionName, value) {\n      const config = this.snsConfig;\n      config[optionName] = value;\n      this.saveSnsConfig(config);\n    }\n    updateSnsRegion(selectedRegion) {\n      this.updateSnsOption('region', selectedRegion.name);\n    }\n    updateOnStartOption(event) {\n      this.updateSnsOption('onStart', event.target.checked);\n    }\n    updateSnsTopicArn(event) {\n      this.updateSnsOption('topicARN', event.target.value);\n    }\n    updateSnsNotificationType(selectedType) {\n      this.updateSnsOption('notificationType', selectedType);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"updateSnsRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSnsRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateOnStartOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateOnStartOption\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSnsTopicArn\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSnsTopicArn\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSnsNotificationType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSnsNotificationType\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SnsNotificationConfigComponent);\n});","define(\"@testable/shared-ui/components/sparkline-chart\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@testable/shared-ui/utils/lib\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/xy\", \"@amcharts/amcharts5/themes/Animated\", \"@amcharts/amcharts5/themes/Micro\", \"@testable/shared-ui/utils/amcharts\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _lib, am5, am5xy, _Animated, _Micro, _amcharts2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/lib\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/xy\",0,\"@amcharts/amcharts5/themes/Animated\",0,\"@amcharts/amcharts5/themes/Micro\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id={{@id}} style=\"width: 100%; height: 45px;\"\n       {{did-insert this.didInsert}}\n       {{did-update this.onSummariesChanged @summaries}}>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,1,[30,1]],[24,5,\\\"width: 100%; height: 45px;\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onSummariesChanged\\\"]],[30,2]],null],[12],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\",\\\"@summaries\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/sparkline-chart.hbs\",\n    \"isStrictMode\": false\n  });\n  const lineColors = ['#FCD202', '#cadef6']; // match this with css .line-current and .line-baseline\n  let SparklineChartComponent = _exports.default = (_class = class SparklineChartComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"chartRoot\", null);\n    }\n    getDataProvider() {\n      let summaries = this.args.summaries;\n      let metric = this.args.metric;\n      let namespace = this.args.namespace;\n      let key = _lib.default.toMetricKey(namespace, metric);\n      let data = [];\n      if (_.isArray(summaries) && _.isString(metric)) {\n        let num = 0;\n        _.forEach(summaries, summary => {\n          const obj = {\n            num: num++,\n            key: key\n          };\n          obj.value = (_.isObject(summary[key]) ? summary[key].value : summary[key]) || 0;\n          data.push(obj);\n        });\n      }\n      return data;\n    }\n    makeChart(id) {\n      _amcharts2.default.initLicense();\n      let summaries = this.args.summaries;\n      let metric = this.args.metric;\n      if (_.isArray(summaries) && _.isString(metric)) {\n        let root = am5.Root.new(id);\n        this.chartRoot = root;\n        root.setThemes([_Animated.default.new(root), _Micro.default.new(root)]);\n        let chart = root.container.children.push(am5xy.XYChart.new(root, {\n          panX: false,\n          panY: false,\n          maxTooltipDistance: 0\n        }));\n        chart.zoomOutButton.set('forceHidden', true);\n        let chartData = this.getDataProvider();\n        let xAxis = chart.xAxes.push(am5xy.ValueAxis.new(root, {\n          renderer: am5xy.AxisRendererX.new(root, {})\n        }));\n        let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {\n          renderer: am5xy.AxisRendererY.new(root, {})\n        }));\n        xAxis.get('renderer').labels.template.set('forceHidden', true);\n        xAxis.get('renderer').grid.template.set('forceHidden', true);\n        yAxis.get('renderer').labels.template.set('forceHidden', true);\n        yAxis.get('renderer').grid.template.set('forceHidden', true);\n        let series = chart.series.push(am5xy.LineSeries.new(root, {\n          xAxis: xAxis,\n          yAxis: yAxis,\n          valueYField: 'value',\n          valueXField: 'num',\n          stroke: lineColors[0],\n          maskBullets: false\n        }));\n        series.data.setAll(chartData);\n        return root;\n      }\n      return null;\n    }\n    didInsert() {\n      this.chartRoot = this.makeChart(this.args.id);\n    }\n    onSummariesChanged() {\n      if (_.isEmpty(this.chartRoot)) {\n        this.chartRoot = this.makeChart(this.args.id);\n      }\n    }\n    willDestroy() {\n      super.willDestroy();\n      if (this.chartRoot) {\n        this.chartRoot.dispose();\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSummariesChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSummariesChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SparklineChartComponent);\n});","define(\"@testable/shared-ui/components/success-criteria-panel\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <Ui::Icon @icon=\"fa fa-plus\" role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelSuccessCriteria{{@uniqueId}}\" aria-expanded=\"false\"\n              class=\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\"\n              aria-controls=\"panelSuccessCriteria{{@uniqueId}}\" />\n        <strong>Success Criteria</strong>\n      </h4>\n    </div>\n    <div id=\"panelSuccessCriteria{{@uniqueId}}\" class=\"collapse\">\n      <div class=\"panel-body collapse-group\">\n        {{#unless @executionDetails}}\n          <div class=\"form-group\">\n            <label class=\"normal\">\n              <Input @type=\"checkbox\" @checked={{@useDefaultCriteria}} /> Use <a target=\"_blank\"\n                                                                            href=\"/account/settings\" rel=\"noreferrer noopener\">default\n              success criteria</a>\n            </label>\n            <a data-bs-toggle=\"collapse\" href=\"#successCriteriaFields{{@uniqueId}}\">\n              <Ui::Icon @icon=\"fa fa-plus\" class=\"m-l-5\"/></a>\n          </div>\n        {{/unless}}\n        <div id=\"successCriteriaFields{{@uniqueId}}\" class=\"collapse {{if @executionDetails 'show'}}\">\n          <div class=\"m-t-10\">\n          {{#if @selectedScript}}\n            <EditKpis @conditions={{@conditions}}\n                      @bpIsFailure={{@successTrigger.dependsOnRtTriggers}}\n                      @percentiles={{@testPercentiles}}\n                      @metricDefs={{@metricDefs}}\n                      @summary={{@lastSummary}}\n                      @testType={{@testType}}\n                      @isReadOnly={{or @viewOnly @useDefaultCriteria}}\n                      @scriptType={{@selectedScript.scriptType}}\n                      @isMonitor={{@selectedScript.isMonitor}}\n                    />\n          {{else}}\n            <div>Please select a scenario first...</div>\n          {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,6,[29,[\\\"#panelSuccessCriteria\\\",[30,1]]]],[24,\\\"aria-expanded\\\",\\\"false\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary title-box-symbol\\\"],[16,\\\"aria-controls\\\",[29,[\\\"panelSuccessCriteria\\\",[30,1]]]]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\"\\\\n      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Success Criteria\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"panelSuccessCriteria\\\",[30,1]]]],[14,0,\\\"collapse\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body collapse-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,6],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,3]]],null],[1,\\\" Use \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,6,\\\"/account/settings\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"default\\\\n            success criteria\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,3],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#successCriteriaFields\\\",[30,1]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,2],[[24,0,\\\"m-l-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[15,1,[29,[\\\"successCriteriaFields\\\",[30,1]]]],[15,0,[29,[\\\"collapse \\\",[52,[30,2],\\\"show\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"          \\\"],[8,[39,9],null,[[\\\"@conditions\\\",\\\"@bpIsFailure\\\",\\\"@percentiles\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@testType\\\",\\\"@isReadOnly\\\",\\\"@scriptType\\\",\\\"@isMonitor\\\"],[[30,5],[30,6,[\\\"dependsOnRtTriggers\\\"]],[30,7],[30,8],[30,9],[30,10],[28,[37,10],[[30,11],[30,3]],null],[30,4,[\\\"scriptType\\\"]],[30,4,[\\\"isMonitor\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[12],[1,\\\"Please select a scenario first...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@uniqueId\\\",\\\"@executionDetails\\\",\\\"@useDefaultCriteria\\\",\\\"@selectedScript\\\",\\\"@conditions\\\",\\\"@successTrigger\\\",\\\"@testPercentiles\\\",\\\"@metricDefs\\\",\\\"@lastSummary\\\",\\\"@testType\\\",\\\"@viewOnly\\\"],[\\\"div\\\",\\\"h4\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"unless\\\",\\\"label\\\",\\\"input\\\",\\\"a\\\",\\\"if\\\",\\\"edit-kpis\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/success-criteria-panel.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"success-criteria-panel\"));\n});","define(\"@testable/shared-ui/components/success-table-data\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isHorizontal}}\n    <tr class=\"{{if @bottomBorder 'with-border-bottom'}}\">\n      {{#if @isConfs}}\n        <td>\n          <LinkTo target=\"_blank\" @route='test-history' @model={{@testConf.id}} class=\"success-rate-subtext\">{{@testConf.name}}</LinkTo>\n        </td>\n      {{/if}}\n      {{#if @lastExecution}}\n        <td>\n          <a {{on 'click' (fn this.showTestOutcome @lastExecution)}} role=\"button\">\n            {{html-safe (to-execution-outcome-html @lastExecution)}}\n          </a>\n          <br>\n          <LinkTo @route='loadTestResults' @model={{@lastExecution.id}} class=\"success-rate-subtext\">View >></LinkTo>\n        </td>\n      {{/if}}\n      <td>\n        <span class=\"cursor-pointer\" role=\"button\" {{on \"click\" (fn this.viewTests this.today false)}}>\n          {{html-safe (print-success-record this.today)}}</span>\n      </td>\n      <td>\n        <span class=\"cursor-pointer\" role=\"button\" {{on \"click\" (fn this.viewTests this.yesterday true)}}>\n          {{html-safe (print-success-record this.yesterday)}}</span>\n      </td>\n      <td>\n        <span class=\"cursor-pointer\" role=\"button\" {{on \"click\" (fn this.viewTests this.sevenDays false)}}>\n          {{html-safe (print-success-record this.sevenDays)}}</span>\n      </td>\n      <td>\n        <span class=\"cursor-pointer\" role=\"button\" {{on \"click\" (fn this.viewTests this.thirtyDays false)}}>\n          {{html-safe (print-success-record this.thirtyDays)}}</span>\n      </td>\n      <td>\n        <span class=\"cursor-pointer\" role=\"button\" {{on \"click\" (fn this.viewTests this.ninetyDays false)}}>\n          {{html-safe (print-success-record this.ninetyDays)}}</span>\n      </td>\n    </tr>\n  {{else}}\n    {{#if @lastExecution}}\n      <tr>\n        <td class=\"success-rate-header\">Last Run</td>\n        <td>\n          <a {{on 'click' (fn this.showTestOutcome @lastExecution)}} role=\"button\">\n            {{html-safe (to-outcome-html (if @lastExecution.completed @lastExecution.success))}}\n          </a>\n        </td>\n      </tr>\n    {{/if}}\n    <tr>\n      <td class=\"success-rate-header\">Today</td>\n      <span class=\"cursor-pointer\" {{fn this.viewTests this.today false}} >\n        {{html-safe (print-success-record this.today)}}\n      </span>\n    </tr>\n    <tr>\n      <td class=\"success-rate-header\">Yesterday</td>\n      <td>\n        <span class=\"cursor-pointer\" {{fn this.viewTests this.yesterday true}} >\n          {{html-safe (print-success-record this.yesterday)}}\n        </span>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"success-rate-header\">7 days</td>\n      <td>\n        <span class=\"cursor-pointer\" {{fn this.viewTests this.sevenDays false}} >\n          {{html-safe (print-success-record this.sevenDays)}}\n        </span>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"success-rate-header\">30 days</td>\n      <td>\n        <span class=\"cursor-pointer\" {{fn this.viewTests this.thirtyDays false}} >\n          {{html-safe (print-success-record this.thirtyDays)}}\n        </span>\n      </td>\n    </tr>\n    <tr>\n      <td class=\"success-rate-header\">90 days</td>\n      <td>\n        <span class=\"cursor-pointer\" {{fn this.viewTests this.ninetyDays false}} >\n          {{html-safe (print-success-record this.ninetyDays)}}\n        </span>\n      </td>\n    </tr>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,\\\"tr\\\"],[15,0,[29,[[52,[30,2],\\\"with-border-bottom\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"      \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,3],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"success-rate-subtext\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"test-history\\\",[30,4,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,4,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,5],[[[1,\\\"      \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"showTestOutcome\\\"]],[30,5]],null]],null],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[28,[37,8],[[30,5]],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[8,[39,3],[[24,0,\\\"success-rate-subtext\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,5,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"View >>\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"today\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"today\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"yesterday\\\"]],true],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"yesterday\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"sevenDays\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"sevenDays\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"thirtyDays\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"thirtyDays\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"ninetyDays\\\"]],false],null]],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"ninetyDays\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,5],[[[1,\\\"    \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Last Run\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"showTestOutcome\\\"]],[30,5]],null]],null],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[28,[37,12],[[52,[30,5,[\\\"completed\\\"]],[30,5,[\\\"success\\\"]]]],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Today\\\"],[13],[1,\\\"\\\\n    \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[4,[38,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"today\\\"]],false],null],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"today\\\"]]],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Yesterday\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[4,[38,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"yesterday\\\"]],true],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"yesterday\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"7 days\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[4,[38,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"sevenDays\\\"]],false],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"sevenDays\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"30 days\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[4,[38,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"thirtyDays\\\"]],false],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"thirtyDays\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"90 days\\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n      \\\"],[11,1],[24,0,\\\"cursor-pointer\\\"],[4,[38,6],[[30,0,[\\\"viewTests\\\"]],[30,0,[\\\"ninetyDays\\\"]],false],null],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[28,[37,11],[[30,0,[\\\"ninetyDays\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@isHorizontal\\\",\\\"@bottomBorder\\\",\\\"@isConfs\\\",\\\"@testConf\\\",\\\"@lastExecution\\\"],[\\\"if\\\",\\\"tr\\\",\\\"td\\\",\\\"link-to\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"html-safe\\\",\\\"to-execution-outcome-html\\\",\\\"br\\\",\\\"span\\\",\\\"print-success-record\\\",\\\"to-outcome-html\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/success-table-data.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuccessTableDataComponent = _exports.default = (_class = class SuccessTableDataComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    get today() {\n      return this.findRecord(this.args.todaySuccessHistory, 'OneDay');\n    }\n    get yesterday() {\n      return this.findRecord(this.args.yesterdaySuccessHistory, 'OneDay');\n    }\n    get sevenDays() {\n      return this.findRecord(this.args.todaySuccessHistory, 'SevenDays');\n    }\n    get thirtyDays() {\n      return this.findRecord(this.args.todaySuccessHistory, 'ThirtyDays');\n    }\n    get ninetyDays() {\n      return this.findRecord(this.args.todaySuccessHistory, 'NinetyDays');\n    }\n    findRecord(records, granularity) {\n      return _.find(records, r => r.granularity === granularity);\n    }\n    showTestOutcome(lastExecution) {\n      this.args.showTestOutcome?.(lastExecution);\n    }\n    viewTests(history, isYesterday) {\n      if (!history) return;\n      const durations = {\n        ThirtyDays: 29,\n        OneDay: isYesterday ? 1 : 0,\n        SevenDays: 6,\n        NinetyDays: 89\n      };\n      const endDate = new Date(new Date(history.endingDate).getTime() - (isYesterday ? 1 * 24 * 60 * 60 * 1000 : 0)).toISOString().slice(0, 10);\n      let startDate = new Date(new Date(endDate).getTime() - durations[history.granularity] * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);\n      if (isYesterday) {\n        startDate = endDate;\n      }\n      const queryParams = {\n        startDate,\n        endDate\n      };\n      if (this.args.testConf) {\n        queryParams.testConfId = this.args.testConf.id;\n      }\n      if (this.args.testCase) {\n        queryParams.testCaseId = this.args.testCase.id;\n      }\n      if (this.args.scenario) {\n        queryParams.scenarioId = this.args.scenario.id;\n      }\n      let url = this.router.urlFor('reports.by-date', {\n        queryParams\n      });\n      if (this.args.stats) {\n        queryParams.url = this.args.stats.url;\n        if (this.args.stats.branch) {\n          queryParams.branch = this.args.stats.branch;\n        }\n        url = this.router.urlFor('reports.by-repository-url', {\n          queryParams\n        });\n      }\n      window.open(url, '_blank');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcome\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcome\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"viewTests\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"viewTests\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuccessTableDataComponent);\n});","define(\"@testable/shared-ui/components/success-table-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal class=\"test-pass-rate-modal\"\n           @onHidden={{@modalClosed}}\n           @size=\"lg\"\n           as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">\n        <LinkTo @route=\"scenario-history\" @model={{@model.id}}>\n          {{@title}} Pass Rate\n        </LinkTo>\n        <Ui::InfoIcon @content=\"Shows the percentage of test runs that passed during various\n          time intervals. For the purposes of this calculation we use the UTC timzone (i.e.\n          today means the current day in UTC).\" @placement=\"top\"/>\n      </h4>\n    </Modal.header>\n    <Modal.body>\n      <div class=\"panel\">\n        <div class=\"panel-body\">\n          <div class=\"d-flex\">\n            <div role=\"button\" class=\"w-100 p-b-5 {{unless this.showConfiguration \"clicked\"}}\" {{on \"click\" (fn this.toggleButton false)}}>Scenario Overall</div>\n            <div role=\"button\" class=\"w-100 p-b-5 {{if this.showConfiguration \"clicked\"}}\" {{on \"click\" (fn this.toggleButton true)}}>By Test Configuration</div>\n          </div>\n          {{#if this.showConfiguration}}\n            <SuccessTable @confs={{@confs}}\n                          @isHorizontal={{@isHorizontal}}\n            />\n          {{else}}\n            <SuccessTable @todaySuccessHistory={{@model.todaySuccessHistory}}\n                          @yesterdaySuccessHistory={{@model.yesterdaySuccessHistory}}\n                          @scenario={{@model}}\n                          @isHorizontal={{@isHorizontal}}\n            />\n          {{/if}}\n        </div>\n      </div>\n    </Modal.body>\n  </BsModal>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"test-pass-rate-modal\\\"]],[[\\\"@onHidden\\\",\\\"@size\\\"],[[30,1],\\\"lg\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,2],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario-history\\\",[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,4]],[1,\\\" Pass Rate\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Shows the percentage of test runs that passed during various\\\\n        time intervals. For the purposes of this calculation we use the UTC timzone (i.e.\\\\n        today means the current day in UTC).\\\",\\\"top\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n          \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[16,0,[29,[\\\"w-100 p-b-5 \\\",[52,[51,[30,0,[\\\"showConfiguration\\\"]]],\\\"clicked\\\"]]]],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"toggleButton\\\"]],false],null]],null],[12],[1,\\\"Scenario Overall\\\"],[13],[1,\\\"\\\\n          \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[16,0,[29,[\\\"w-100 p-b-5 \\\",[52,[30,0,[\\\"showConfiguration\\\"]],\\\"clicked\\\"]]]],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"toggleButton\\\"]],true],null]],null],[12],[1,\\\"By Test Configuration\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showConfiguration\\\"]],[[[1,\\\"          \\\"],[8,[39,9],null,[[\\\"@confs\\\",\\\"@isHorizontal\\\"],[[30,5],[30,6]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,9],null,[[\\\"@todaySuccessHistory\\\",\\\"@yesterdaySuccessHistory\\\",\\\"@scenario\\\",\\\"@isHorizontal\\\"],[[30,3,[\\\"todaySuccessHistory\\\"]],[30,3,[\\\"yesterdaySuccessHistory\\\"]],[30,3],[30,6]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"Modal\\\",\\\"@model\\\",\\\"@title\\\",\\\"@confs\\\",\\\"@isHorizontal\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"link-to\\\",\\\"ui/info-icon\\\",\\\"div\\\",\\\"unless\\\",\\\"on\\\",\\\"fn\\\",\\\"if\\\",\\\"success-table\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/success-table-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuccessTableModalComponent = _exports.default = (_class = class SuccessTableModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"showConfiguration\", _descriptor, this);\n    }\n    toggleButton() {\n      this.showConfiguration = !this.showConfiguration;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"showConfiguration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleButton\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleButton\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuccessTableModalComponent);\n});","define(\"@testable/shared-ui/components/success-table\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"height-full\">\n    <div class=\"success-rate-panel text-center height-full\">\n      {{#if @title}}\n        <div class=\"success-rate-title\">\n          {{#if this.historyRouteInfo.id}}\n            <LinkTo @route={{this.historyRouteInfo.route}} @model={{this.historyRouteInfo.id}}>\n              {{@title}} Pass Rate\n            </LinkTo>\n          {{else}}\n            <LinkTo @route={{this.historyRouteInfo.route}}>\n              {{@title}} Pass Rate\n            </LinkTo>\n          {{/if}}\n          <Ui::InfoIcon @content=\"Shows the percentage of test runs that passed during various\n          time intervals. For the purposes of this calculation we use the UTC timzone (i.e.\n          today means the current day in UTC).\" @placement=\"top\"/>\n        </div>\n      {{/if}}\n      <table class=\"table compact-table\">\n        {{#if @isHorizontal}}\n          <thead>\n          {{#if this.isConfs}}\n            <td class=\"success-rate-header\">Conf Name</td>\n          {{/if}}\n          {{#if this.showLastRunColumn}}\n            <td class=\"success-rate-header\">Last Run</td>\n          {{/if}}\n          <td class=\"success-rate-header\">Today</td>\n          <td class=\"success-rate-header\">Yesterday</td>\n          <td class=\"success-rate-header\">7 days</td>\n          <td class=\"success-rate-header\">30 days</td>\n          <td class=\"success-rate-header\">90 days</td>\n          </thead>\n        {{/if}}\n        <tbody>\n          {{#each this.successHistory as |data|}}\n            {{#if (gt data.todaySuccessHistory.length 0)}}\n              <SuccessTableData\n                @isHorizontal={{@isHorizontal}}\n                @bottomBorder={{@bottomBorder}}\n                @lastExecution={{data.lastExecution}}\n                @todaySuccessHistory={{data.todaySuccessHistory}}\n                @yesterdaySuccessHistory={{data.yesterdaySuccessHistory}}\n                @testCase={{@testCase}}\n                @scenario={{@scenario}}\n                @stats={{@stats}}\n                @testConf={{or data.testConf data}}\n                @showTestOutcome={{@showTestOutcome}}\n                @isConfs={{this.isConfs}}\n              />\n            {{else}}\n              <tr>\n                <td colspan={{this.columnsLength}}>\n                  No record found...\n                </td>\n              </tr>\n            {{/if}}\n          {{/each}}\n        </tbody>\n      </table>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"height-full\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"success-rate-panel text-center height-full\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"success-rate-title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"historyRouteInfo\\\",\\\"id\\\"]],[[[1,\\\"          \\\"],[8,[39,2],null,[[\\\"@route\\\",\\\"@model\\\"],[[30,0,[\\\"historyRouteInfo\\\",\\\"route\\\"]],[30,0,[\\\"historyRouteInfo\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,1]],[1,\\\" Pass Rate\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,2],null,[[\\\"@route\\\"],[[30,0,[\\\"historyRouteInfo\\\",\\\"route\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[30,1]],[1,\\\" Pass Rate\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[8,[39,3],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Shows the percentage of test runs that passed during various\\\\n        time intervals. For the purposes of this calculation we use the UTC timzone (i.e.\\\\n        today means the current day in UTC).\\\",\\\"top\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,\\\"table\\\"],[14,0,\\\"table compact-table\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isConfs\\\"]],[[[1,\\\"          \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Conf Name\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showLastRunColumn\\\"]],[[[1,\\\"          \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Last Run\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Today\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"Yesterday\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"7 days\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"30 days\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"td\\\"],[14,0,\\\"success-rate-header\\\"],[12],[1,\\\"90 days\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"successHistory\\\"]]],null]],null],null,[[[41,[28,[37,10],[[30,3,[\\\"todaySuccessHistory\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[39,11],null,[[\\\"@isHorizontal\\\",\\\"@bottomBorder\\\",\\\"@lastExecution\\\",\\\"@todaySuccessHistory\\\",\\\"@yesterdaySuccessHistory\\\",\\\"@testCase\\\",\\\"@scenario\\\",\\\"@stats\\\",\\\"@testConf\\\",\\\"@showTestOutcome\\\",\\\"@isConfs\\\"],[[30,2],[30,4],[30,3,[\\\"lastExecution\\\"]],[30,3,[\\\"todaySuccessHistory\\\"]],[30,3,[\\\"yesterdaySuccessHistory\\\"]],[30,5],[30,6],[30,7],[28,[37,12],[[30,3,[\\\"testConf\\\"]],[30,3]],null],[30,8],[30,0,[\\\"isConfs\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[15,\\\"colspan\\\",[30,0,[\\\"columnsLength\\\"]]],[12],[1,\\\"\\\\n                No record found...\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[3]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@title\\\",\\\"@isHorizontal\\\",\\\"data\\\",\\\"@bottomBorder\\\",\\\"@testCase\\\",\\\"@scenario\\\",\\\"@stats\\\",\\\"@showTestOutcome\\\"],[\\\"div\\\",\\\"if\\\",\\\"link-to\\\",\\\"ui/info-icon\\\",\\\"table\\\",\\\"thead\\\",\\\"td\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"gt\\\",\\\"success-table-data\\\",\\\"or\\\",\\\"tr\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/success-table.hbs\",\n    \"isStrictMode\": false\n  });\n  class SuccessTableComponent extends _component2.default {\n    get columnsLength() {\n      let count = 5;\n      if (this.isConfs) {\n        count = count + 1;\n      }\n      if (this.showLastRunColumn) {\n        count = count + 1;\n      }\n      return count;\n    }\n    get historyRouteInfo() {\n      if (this.args.testConf) {\n        return {\n          route: 'test-history',\n          id: this.args.testConf.id\n        };\n      }\n      if (this.args.testCase) {\n        return {\n          route: 'testcase-history',\n          id: this.args.testCase.id\n        };\n      }\n      return {\n        route: 'history'\n      };\n    }\n    get showLastRunColumn() {\n      return this.args.lastExecution || !!this.args.confs?.find(conf => conf.executions.length > 0);\n    }\n    get isConfs() {\n      return !!this.args.confs;\n    }\n    get successHistory() {\n      if (this.args.confs) {\n        return this.args.confs.map(({\n          executions,\n          ...conf\n        }) => ({\n          ...conf,\n          lastExecution: executions?.[0]\n        }));\n      }\n      return [{\n        lastExecution: this.args.lastExecution,\n        testConf: this.args.testConf,\n        todaySuccessHistory: this.args.todaySuccessHistory,\n        yesterdaySuccessHistory: this.args.yesterdaySuccessHistory\n      }];\n    }\n  }\n  _exports.default = SuccessTableComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuccessTableComponent);\n});","define(\"@testable/shared-ui/components/suite-errors-summary\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span hidden {{did-update this.onExecutionIdChange @executionId}}></span>\n  {{#if this.isLoaded}}\n    {{#if (eq this.suiteErrors.length 0)}}\n      No errors found.\n    {{else}}\n      <table class=\"table table-bordered\">\n        <thead>\n          <th style={{html-safe \"width: 5%;\"}}></th>\n          <th style={{html-safe \"width: 7%;\"}}>Count <Ui::Icon @icon=\"fa fa-sort-amount-down\" class=\"m-l-5\" /></th>\n          <th style={{html-safe \"width: 88%;\"}}>Error</th>\n        </thead>\n        <tbody>\n          {{#each this.suiteErrors as |error|}}\n            <tr>\n              <td>\n                <a {{on \"click\" (fn this.expand error.suiteError.id)}} role=\"button\">\n                  <Ui::Icon @icon=\"fa {{if (contains-val this.expanded error.suiteError.id) 'fa-minus' 'fa-plus'}}\" class=\"m-r-5\" />\n                </a>\n                <a {{on \"click\" (fn this.showRelatedResults error)}} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  title=\"Find related results\" role=\"button\">\n                  <Ui::Icon @icon=\"fa fa-link\" />\n                </a>\n              </td>\n              <td>{{print-number error.count}}</td>\n              <td class=\"p-0\">\n                <pre class=\"m-5 bg-grey\">{{ansi-to-html error.suiteError.name (eq @model.execution.script.scriptType 'Playwright')}}</pre>\n              </td>\n            </tr>\n            {{#if (contains-val this.expanded error.suiteError.id)}}\n              <tr>\n                <td colspan=\"3\">\n                  <ImagesWidget @suiteError={{error}}\n                                @assertion={{@testSummary}}\n                                @minimalHeader={{true}}\n                                @embedded={{true}}\n                                @model={{@model}}\n                                @overallModel={{@overallModel}}\n                                @byRegionId={{@byRegionId}}\n                                @regionName={{@regionName}}\n                                @isAll={{@model.isAll}}\n                                @isLoad={{true}}\n                                @widget={{error.suiteError}}\n                                @isViewer={{this.isViewer}}\n                                @showImageDetailsModal={{this.showImageDetailsModalAction}} />\n                </td>\n              </tr>\n            {{/if}}\n          {{/each}}\n        </tbody>\n      </table>\n    {{/if}}\n  {{else}}\n    Loading errors...\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[24,\\\"hidden\\\",\\\"\\\"],[4,[38,1],[[30,0,[\\\"onExecutionIdChange\\\"]],[30,1]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[41,[28,[37,3],[[30,0,[\\\"suiteErrors\\\",\\\"length\\\"]],0],null],[[[1,\\\"    No errors found.\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,7],[\\\"width: 5%;\\\"],null]],[12],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,7],[\\\"width: 7%;\\\"],null]],[12],[1,\\\"Count \\\"],[8,[39,8],[[24,0,\\\"m-l-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-sort-amount-down\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,7],[\\\"width: 88%;\\\"],null]],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"suiteErrors\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,15],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"expand\\\"]],[30,2,[\\\"suiteError\\\",\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[28,[37,17],[[30,0,[\\\"expanded\\\"]],[30,2,[\\\"suiteError\\\",\\\"id\\\"]]],null],\\\"fa-minus\\\",\\\"fa-plus\\\"]]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Find related results\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,15],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"showRelatedResults\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@icon\\\"],[\\\"fa fa-link\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,18],[[30,2,[\\\"count\\\"]]],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,0,\\\"p-0\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-5 bg-grey\\\"],[12],[1,[28,[35,20],[[30,2,[\\\"suiteError\\\",\\\"name\\\"]],[28,[37,3],[[30,3,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],\\\"Playwright\\\"],null]],null]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,0,[\\\"expanded\\\"]],[30,2,[\\\"suiteError\\\",\\\"id\\\"]]],null],[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,21],null,[[\\\"@suiteError\\\",\\\"@assertion\\\",\\\"@minimalHeader\\\",\\\"@embedded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@widget\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\"],[[30,2],[30,4],true,true,[30,3],[30,5],[30,6],[30,7],[30,3,[\\\"isAll\\\"]],true,[30,2,[\\\"suiteError\\\"]],[30,0,[\\\"isViewer\\\"]],[30,0,[\\\"showImageDetailsModalAction\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[2]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"  Loading errors...\\\\n\\\"]],[]]]],[\\\"@executionId\\\",\\\"error\\\",\\\"@model\\\",\\\"@testSummary\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"if\\\",\\\"eq\\\",\\\"table\\\",\\\"thead\\\",\\\"th\\\",\\\"html-safe\\\",\\\"ui/icon\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"tr\\\",\\\"td\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"contains-val\\\",\\\"print-number\\\",\\\"pre\\\",\\\"ansi-to-html\\\",\\\"images-widget\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-errors-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuiteErrorsSummaryComponent = _exports.default = (_class = class SuiteErrorsSummaryComponent extends _component2.default {\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get suiteErrors() {\n      return this.args.summary && this.args.testSummary ? this.loadedSuiteErrors : this.args.model?.suiteErrors;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"loadedSuiteErrors\", _descriptor2, this);\n      _initializerDefineProperty(this, \"expanded\", _descriptor3, this);\n      if (this.args.summary && this.args.testSummary) {\n        this.loadErrors();\n      } else {\n        this.isLoaded = true;\n      }\n    }\n    loadErrors() {\n      this.isLoaded = false;\n      const request = this.doLoadRequest();\n      if (!request) {\n        this.loadedSuiteErrors = [];\n        this.isLoaded = true;\n        return;\n      }\n      request.then(results => {\n        this.loadedSuiteErrors = results;\n        this.isLoaded = true;\n      }, () => {\n        this.loadedSuiteErrors = [];\n        this.isLoaded = true;\n      });\n    }\n    doLoadRequest() {\n      if (this.args.uuid) {\n        return _server.default.getTokenContent(this.args.uuid, this.getParams());\n      }\n      const suiteId = this.args.summary?.suite?.id;\n      const suiteTestId = this.args.testSummary?.suiteTest?.id;\n      if (suiteId && suiteTestId) {\n        return this.args.executionRegionId ? _server.default.getRegionSuiteTestSummaryErrors(this.args.executionId, this.args.executionRegionId, suiteId, suiteTestId) : _server.default.getSuiteTestSummaryErrors(this.args.executionId, suiteId, suiteTestId);\n      }\n    }\n    getParams() {\n      const params = {\n        suiteErrors: true\n      };\n      if (this.args.executionRegionId) {\n        params.executionRegionId = this.args.executionRegionId;\n      }\n      if (this.args.summary) {\n        params.suiteId = this.args.summary.suite.id;\n      }\n      if (this.args.testSummary) {\n        params.suiteTestId = this.args.testSummary.suiteTest.id;\n      }\n      if (this.args.uuid && this.args.isBaseline) {\n        params.comparison = true;\n      }\n      return params;\n    }\n    onExecutionIdChange() {\n      this.loadErrors();\n    }\n    showImageDetailsModalAction(image) {\n      this.args.showImageDetailsModal?.(image);\n    }\n    expand(errorId) {\n      const current = [...this.expanded];\n      if (current.includes(errorId)) {\n        current.splice(current.indexOf(errorId), 1);\n      } else {\n        current.push(errorId);\n      }\n      this.expanded = current;\n    }\n    showRelatedResults(error) {\n      this.args.showSuiteErrorRelatedResults(error, this.args.testSummary);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"loadedSuiteErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"expanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onExecutionIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionIdChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRelatedResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRelatedResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteErrorsSummaryComponent);\n});","define(\"@testable/shared-ui/components/suite-related-results-modal\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{@modalClosed}}\n    @title=\"Related Iteration Results\"\n    @size=\"lg\"\n    class=\"full-view\"\n  >\n    <div\n      {{did-update this.loadIterations this.thread}}\n      {{did-update this.loadThreadIds this.globalConcurrentClientIndex}}\n    >\n          <div class=\"d-flex flex-row align-items-center flex-wrap form-inline\">\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">Assertion</div>\n              <Ui::PSelect @options={{this.assertionOptions}}\n                       @selected={{this.selectedAssertion}}\n                       @selectedItemComponent=\"print-selected-assertion\"\n                       class=\"width-200\"\n                       @placeholder=\"Select an assertion...\"\n                       @onChange={{this.updateAssertion}} as |assertionOption|>\n                <PrintAssertion @assertionOption={{assertionOption}} />\n              </Ui::PSelect>\n            </div>\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">Error</div>\n              <Ui::PSelect @options={{this.errorOptions}}\n                       @selected={{this.selectedSuiteError}}\n                       @selectedItemComponent=\"print-selected-error\"\n                       class=\"width-200\"\n                       @placeholder=\"Select an error...\"\n                       @onChange={{this.updateSuiteError}} as |errorOption|>\n                <span class=\"semi-bold\">{{html-safe (truncate-string errorOption.suiteError.name)}}</span>\n              </Ui::PSelect>\n            </div>\n            <div class=\"m-r-20\">\n              <div class=\"f-w-700 m-b-5\">\n                {{#if this.isMultiUser}}\n                  {{@overallModel.script.scriptType}} Instance #\n                {{else}}\n                  User #\n                {{/if}}\n                {{if (gt this.usersCount this.users.length)\n                              (concat ' (' this.users.length '/' (print-number this.usersCount) ')')}}\n              </div>\n              {{#if this.concurrentClientsLoaded}}\n                <Ui::PSelect @options={{this.users}}\n                         @selected={{this.globalConcurrentClientIndex}}\n                         @placeholder=\"Please select a user...\"\n                         @onChange={{fn (mut this.globalConcurrentClientIndex)}} as |user|>\n                  {{#if this.isMultiUser}}\n                    {{@overallModel.script.scriptType}} Instance {{user}}\n                  {{else}}\n                    User {{user}}\n                  {{/if}}\n                </Ui::PSelect>\n              {{else}}\n                Loading users...\n              {{/if}}\n            </div>\n            {{#if this.isMultiUser}}\n              <div class=\"m-r-20\">\n                {{#if (is-number this.globalConcurrentClientIndex)}}\n                  <div class=\"f-w-700 m-b-5\">\n                    Thread\n                    {{if (gt this.threadsCount this.threads.length) (concat ' (' this.threads.length '/' (print-number this.threadsCount) ')')}}\n                  </div>\n                  {{#if this.threadsLoaded}}\n                    {{#if (gt this.threads.length 0)}}\n                      <Ui::PSelect @options={{this.threads}}\n                               @selected={{this.thread}}\n                               class=\"width-200\"\n                               @placeholder=\"Please select a thread...\"\n                               @onChange={{fn (mut this.thread)}} as |thread|>\n                        {{thread.threadId}}\n                      </Ui::PSelect>\n                    {{else}}\n                      No threads.\n                    {{/if}}\n                  {{else}}\n                    Loading threads...\n                  {{/if}}\n                {{/if}}\n              </div>\n            {{/if}}\n            {{#if (and (or (not this.isMultiUser) this.thread) (is-number this.globalConcurrentClientIndex))}}\n              <div>\n                <div class=\"f-w-700 m-b-5\">\n                  Iteration\n                  {{if (gt this.iterationCount this.iterations.length) (concat ' (' this.iterations.length '/' (print-number this.iterationCount) ')')}}\n                </div>\n                {{#if (and this.threadsLoaded this.iterationsLoaded)}}\n                  {{#if (gt this.iterations.length 0)}}\n                    <Ui::PSelect @options={{this.iterations}}\n                             @selected={{this.selectedIteration}}\n                             @placeholder=\"Please select an iteration...\"\n                             class=\"width-200\"\n                             @onChange={{fn (mut this.selectedIteration)}} as |iteration|>\n                      {{#if (is-number iteration.iteration)}}\n                        {{#if this.isMultiUser}}{{iteration.threadId}}{{else}}\n                          User {{print-number iteration.user}}{{/if}} Iteration {{print-number\n                              iteration.iteration}} {{print-number iteration.totalTimeMs}}ms ({{iteration.id}})\n                      {{else}}\n                        {{iteration.id}}\n                      {{/if}}\n                    </Ui::PSelect>\n                  {{else}}\n                    No iterations found.\n                  {{/if}}\n                {{else if this.thread}}\n                  Loading iterations...\n                {{else if (and (not this.isMultiUser) (not this.threadsLoaded))}}\n                  Loading threads...\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n  \n          {{#if this.selectedIteration.id}}\n            <IterationResults @overallModel={{@overallModel}}\n                              @iteration={{this.selectedIteration.id}}\n                              @isInModal={{true}}\n                              @regionName=\"iterationResultsModal\"\n                              @showImageDetailsModal={{this.showImageDetailsModalAction}}\n                              @containerModalId=\"suiteRelatedResultsModal\"\n            />\n          {{else}}\n            <div class=\"m-t-10\">Please select search criteria above to find a specific test iteration...</div>\n          {{/if}}\n    </div>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"full-view\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,1],\\\"Related Iteration Results\\\",\\\"lg\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[11,0],[4,[38,2],[[30,0,[\\\"loadIterations\\\"]],[30,0,[\\\"thread\\\"]]],null],[4,[38,2],[[30,0,[\\\"loadThreadIds\\\"]],[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Assertion\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,3],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"assertionOptions\\\"]],[30,0,[\\\"selectedAssertion\\\"]],\\\"print-selected-assertion\\\",\\\"Select an assertion...\\\",[30,0,[\\\"updateAssertion\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@assertionOption\\\"],[[30,2]]],null],[1,\\\"\\\\n            \\\"]],[2]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,3],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"errorOptions\\\"]],[30,0,[\\\"selectedSuiteError\\\"]],\\\"print-selected-error\\\",\\\"Select an error...\\\",[30,0,[\\\"updateSuiteError\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,6],[[28,[37,7],[[30,3,[\\\"suiteError\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n            \\\"]],[3]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"                \\\"],[1,[30,4,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance #\\\\n\\\"]],[]],[[[1,\\\"                User #\\\\n\\\"]],[]]],[1,\\\"              \\\"],[1,[52,[28,[37,9],[[30,0,[\\\"usersCount\\\"]],[30,0,[\\\"users\\\",\\\"length\\\"]]],null],[28,[37,10],[\\\" (\\\",[30,0,[\\\"users\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,11],[[30,0,[\\\"usersCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"concurrentClientsLoaded\\\"]],[[[1,\\\"              \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"users\\\"]],[30,0,[\\\"globalConcurrentClientIndex\\\"]],\\\"Please select a user...\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"                  \\\"],[1,[30,4,[\\\"script\\\",\\\"scriptType\\\"]]],[1,\\\" Instance \\\"],[1,[30,5]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  User \\\"],[1,[30,5]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              Loading users...\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-r-20\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n                  Thread\\\\n                  \\\"],[1,[52,[28,[37,9],[[30,0,[\\\"threadsCount\\\"]],[30,0,[\\\"threads\\\",\\\"length\\\"]]],null],[28,[37,10],[\\\" (\\\",[30,0,[\\\"threads\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,11],[[30,0,[\\\"threadsCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"threadsLoaded\\\"]],[[[41,[28,[37,9],[[30,0,[\\\"threads\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[8,[39,3],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"threads\\\"]],[30,0,[\\\"thread\\\"]],\\\"Please select a thread...\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"thread\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[30,6,[\\\"threadId\\\"]]],[1,\\\"\\\\n                    \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    No threads.\\\\n\\\"]],[]]]],[]],[[[1,\\\"                  Loading threads...\\\\n\\\"]],[]]]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[28,[37,16],[[28,[37,17],[[30,0,[\\\"isMultiUser\\\"]]],null],[30,0,[\\\"thread\\\"]]],null],[28,[37,14],[[30,0,[\\\"globalConcurrentClientIndex\\\"]]],null]],null],[[[1,\\\"            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"\\\\n                Iteration\\\\n                \\\"],[1,[52,[28,[37,9],[[30,0,[\\\"iterationCount\\\"]],[30,0,[\\\"iterations\\\",\\\"length\\\"]]],null],[28,[37,10],[\\\" (\\\",[30,0,[\\\"iterations\\\",\\\"length\\\"]],\\\"/\\\",[28,[37,11],[[30,0,[\\\"iterationCount\\\"]]],null],\\\")\\\"],null]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"threadsLoaded\\\"]],[30,0,[\\\"iterationsLoaded\\\"]]],null],[[[41,[28,[37,9],[[30,0,[\\\"iterations\\\",\\\"length\\\"]],0],null],[[[1,\\\"                  \\\"],[8,[39,3],[[24,0,\\\"width-200\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"iterations\\\"]],[30,0,[\\\"selectedIteration\\\"]],\\\"Please select an iteration...\\\",[28,[37,12],[[28,[37,13],[[30,0,[\\\"selectedIteration\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[37,14],[[30,7,[\\\"iteration\\\"]]],null],[[[1,\\\"                      \\\"],[41,[30,0,[\\\"isMultiUser\\\"]],[[[1,[30,7,[\\\"threadId\\\"]]]],[]],[[[1,\\\"\\\\n                        User \\\"],[1,[28,[35,11],[[30,7,[\\\"user\\\"]]],null]]],[]]],[1,\\\" Iteration \\\"],[1,[28,[35,11],[[30,7,[\\\"iteration\\\"]]],null]],[1,\\\" \\\"],[1,[28,[35,11],[[30,7,[\\\"totalTimeMs\\\"]]],null]],[1,\\\"ms (\\\"],[1,[30,7,[\\\"id\\\"]]],[1,\\\")\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[1,[30,7,[\\\"id\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  No iterations found.\\\\n\\\"]],[]]]],[]],[[[41,[30,0,[\\\"thread\\\"]],[[[1,\\\"                Loading iterations...\\\\n\\\"]],[]],[[[41,[28,[37,15],[[28,[37,17],[[30,0,[\\\"isMultiUser\\\"]]],null],[28,[37,17],[[30,0,[\\\"threadsLoaded\\\"]]],null]],null],[[[1,\\\"                Loading threads...\\\\n              \\\"]],[]],null]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],[[[1,\\\"          \\\"],[8,[39,18],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@isInModal\\\",\\\"@regionName\\\",\\\"@showImageDetailsModal\\\",\\\"@containerModalId\\\"],[[30,4],[30,0,[\\\"selectedIteration\\\",\\\"id\\\"]],true,\\\"iterationResultsModal\\\",[30,0,[\\\"showImageDetailsModalAction\\\"]],\\\"suiteRelatedResultsModal\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-t-10\\\"],[12],[1,\\\"Please select search criteria above to find a specific test iteration...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"assertionOption\\\",\\\"errorOption\\\",\\\"@overallModel\\\",\\\"user\\\",\\\"thread\\\",\\\"iteration\\\"],[\\\"ui/modal-wrapper\\\",\\\"div\\\",\\\"did-update\\\",\\\"ui/p-select\\\",\\\"print-assertion\\\",\\\"span\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"if\\\",\\\"gt\\\",\\\"concat\\\",\\\"print-number\\\",\\\"fn\\\",\\\"mut\\\",\\\"is-number\\\",\\\"and\\\",\\\"or\\\",\\\"not\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-related-results-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuiteRelatedResultsModal = _exports.default = (_class = class SuiteRelatedResultsModal extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"iterationsLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"threadsLoaded\", _descriptor2, this);\n      _initializerDefineProperty(this, \"concurrentClientsLoaded\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedAssertion\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedSuiteError\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedIteration\", _descriptor6, this);\n      _initializerDefineProperty(this, \"thread\", _descriptor7, this);\n      _initializerDefineProperty(this, \"globalConcurrentClientIndex\", _descriptor8, this);\n      _initializerDefineProperty(this, \"iterations\", _descriptor9, this);\n      _initializerDefineProperty(this, \"iterationCount\", _descriptor0, this);\n      _initializerDefineProperty(this, \"threads\", _descriptor1, this);\n      _initializerDefineProperty(this, \"threadsCount\", _descriptor10, this);\n      _initializerDefineProperty(this, \"users\", _descriptor11, this);\n      _initializerDefineProperty(this, \"usersCount\", _descriptor12, this);\n      _initializerDefineProperty(this, \"resultsLoaded\", _descriptor13, this);\n      this.selectedAssertion = _loadTest.default.findAssertionOption(this.args.assertion, this.assertionOptions);\n      this.selectedSuiteError = _loadTest.default.findSuiteErrorOption(this.args.error, this.errorOptions);\n      this.loadConcurrentClientOptions();\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.overallModel?.script?.scriptType);\n    }\n    get assertionOptions() {\n      return _loadTest.default.getAssertionOptions(this.args.model?.suiteSummaries);\n    }\n    get errorOptions() {\n      return _loadTest.default.getErrorOptions(this.args.model?.suiteErrors);\n    }\n    getParams() {\n      const params = {\n        limit: 500\n      };\n      if (this.selectedAssertion?.suiteTest?.id > 0) {\n        params.suiteTestId = this.selectedAssertion.suiteTest.id;\n      }\n      if (this.selectedSuiteError?.suiteError?.id > 0) {\n        params.suiteErrorId = this.selectedSuiteError.suiteError.id;\n      }\n      return params;\n    }\n    loadIterations() {\n      if (this.thread) {\n        this.selectedIteration = null;\n        this.resultsLoaded = false;\n        this.iterationsLoaded = false;\n        this.iterationCount = 0;\n        this.iterations = [];\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/suite-related-iterations';\n        const params = this.getParams();\n        params.threadId = this.thread.threadId;\n        const self = this;\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path, params),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (iterations, status, xhr) {\n          const iterationCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(iterationCount)) {\n            self.iterationCount = Number(iterationCount);\n          } else {\n            self.iterationCount = 0;\n          }\n          self.iterations = iterations;\n          if (iterations && iterations.length === 1) {\n            self.selectedIteration = iterations[0];\n          }\n          self.iterationsLoaded = true;\n        }, function (jqxhr, status, errMsg) {\n          self.iterations = [];\n          self.iterationCount = 0;\n          self.iterationsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      } else {\n        this.iterations = [];\n        this.iterationCount = 0;\n        this.iterationsLoaded = false;\n      }\n    }\n    loadThreadIds() {\n      const user = this.globalConcurrentClientIndex;\n      const isMultiUser = this.isMultiUser;\n      if (_lib.default.isNumber(user)) {\n        this.threadsLoaded = false;\n        this.thread = null;\n        let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n        path += '/users/' + user + '/suite-related-threads';\n        const self = this;\n        $.ajax({\n          type: \"GET\",\n          url: _lib.default.toUrl(path, this.getParams()),\n          contentType: \"application/json; charset=utf-8\"\n        }).then(function (threads, status, xhr) {\n          const threadsCount = xhr.getResponseHeader('X-Testable-Count');\n          if (_.isString(threadsCount)) {\n            self.threadsCount = Number(threadsCount);\n          }\n          self.threads = _.sortBy(threads, ['threadId']);\n          if (!isMultiUser && threads.length > 0) {\n            self.thread = threads[0];\n          } else {\n            self.thread = null;\n          }\n          self.threadsLoaded = true;\n        }, function (jqxhr, status, errMsg) {\n          self.threads = [];\n          self.threadsCount = 0;\n          self.threadsLoaded = true;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      }\n    }\n    loadConcurrentClientOptions() {\n      this.concurrentClientsLoaded = false;\n      this.selectedIteration = null;\n      this.thread = null;\n      this.globalConcurrentClientIndex = null;\n      let path = _lib.default.toBaseResultUrl(this.args.overallModel, this.args.model);\n      path += '/suite-related-users';\n      const self = this;\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path, this.getParams()),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function (users, status, xhr) {\n        const usersCount = xhr.getResponseHeader('X-Testable-Count');\n        if (_.isString(usersCount)) {\n          self.usersCount = Number(usersCount);\n        }\n        self.users = _.map(users, user => {\n          return '' + user;\n        });\n        self.concurrentClientsLoaded = true;\n      }, function (jqxhr, status, errMsg) {\n        self.users = [];\n        self.usersCount = 0;\n        self.concurrentClientsLoaded = true;\n        _lib.default.fail(jqxhr, status, errMsg);\n      });\n    }\n    showImageDetailsModalAction(imageId) {\n      this.args.showImageDetailsModal?.(imageId);\n    }\n    updateAssertion(value) {\n      this.selectedAssertion = value;\n      this.loadConcurrentClientOptions();\n    }\n    updateSuiteError(value) {\n      this.selectedSuiteError = value;\n      this.loadConcurrentClientOptions();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"iterationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"threadsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"concurrentClientsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedAssertion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedSuiteError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedIteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"thread\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"globalConcurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"iterations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"iterationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"threads\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"threadsCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"users\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"usersCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"resultsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"assertionOptions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"assertionOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"errorOptions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"errorOptions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadIterations\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadIterations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadThreadIds\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadThreadIds\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showImageDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showImageDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAssertion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAssertion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSuiteError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSuiteError\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteRelatedResultsModal);\n});","define(\"@testable/shared-ui/components/suite-result-summaries\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#each @suiteResultSummaries as |summary|}}\n    <div class=\"suite-results\">\n      <h4>{{summary.suiteResult.suite.name}}</h4>\n      <div>\n        {{#if (and @hasDuration summary.duration)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Duration\" class=\"m-r-15\">\n            {{print-number summary.duration}}ms\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-tasks\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests\" class=\"m-r-15\">\n          {{print-number summary.totalTestResults}}\n        </Ui::Icon>\n        {{#if (and (gt summary.pending 0) @runInProgress)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-spinner fa-spin\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests In Progress\" class=\"m-r-15\">\n            {{print-number summary.pending}}\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Passed\" class=\"green m-r-15\">\n          {{print-number summary.passed}}\n        </Ui::Icon>\n        <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Failed\" class=\"red m-r-15\">\n          {{print-number summary.failed}}\n        </Ui::Icon>\n        {{#if (gt summary.skipped 0)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Skipped\" class=\"m-r-15\">\n            {{print-number summary.skipped}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (gt summary.na 0)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"m-r-5 fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests N/A\">\n          {{print-number summary.na}}\n        </Ui::Icon>\n        {{/if}}\n        {{#if (gt summary.retried 0)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"m-r-5 fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Test Retries\">\n            {{print-number summary.retried}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (and (gt summary.files 0) (not-eq summary.files summary.images))}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Files Captured\" class=\"m-r-15\">\n            {{print-number summary.files}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (gt summary.images 0)}}\n          <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15\">\n            {{print-number summary.images}}\n          </Ui::Icon>\n        {{/if}}\n      </div>\n        <div class=\"m-t-5\">\n          {{#each summary.suiteResult.testResults as |testResult|}}\n            <div class=\"{{if @runInProgress \"running\"}}\">\n              <SuiteTestResults\n                @testResult={{testResult}}\n                @isSmokeTest={{@isSmokeTest}}\n                @runInProgress={{@runInProgress}}\n                @onloadImages={{@onloadImages}}\n                @isComparison={{@isComparison}}\n                @hasDuration={{@hasDuration}}\n                @scriptType={{@scriptType}}\n                @uuid={{@uuid}}\n                @filterResults={{@filterResults}}\n              />\n            </div>\n          {{else}}\n            <span {{did-insert @onloadImages}}></span>\n          {{/each}}\n        </div>\n    </div>\n  {{else}}\n    <span {{did-insert @onloadImages}}></span>\n    No assertions captured yet.\n  {{/each}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[42,[28,[37,1],[[28,[37,1],[[30,1]],null]],null],null,[[[1,\\\"  \\\"],[10,0],[14,0,\\\"suite-results\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[12],[1,[30,2,[\\\"suiteResult\\\",\\\"suite\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n    \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,3],[30,2,[\\\"duration\\\"]]],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Duration\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"duration\\\"]]],null]],[1,\\\"ms\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-tasks\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[30,2,[\\\"totalTestResults\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[28,[37,8],[[30,2,[\\\"pending\\\"]],0],null],[30,4]],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests In Progress\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-spinner fa-spin\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"pending\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Passed\\\"],[24,0,\\\"green m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[30,2,[\\\"passed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Failed\\\"],[24,0,\\\"red m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[30,2,[\\\"failed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,2,[\\\"skipped\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Skipped\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"skipped\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,2,[\\\"na\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests N/A\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"m-r-5 fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,7],[[30,2,[\\\"na\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,2,[\\\"retried\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Retries\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"m-r-5 fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"retried\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,5],[[28,[37,8],[[30,2,[\\\"files\\\"]],0],null],[28,[37,9],[[30,2,[\\\"files\\\"]],[30,2,[\\\"images\\\"]]],null]],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Files Captured\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"files\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,2,[\\\"images\\\"]],0],null],[[[1,\\\"        \\\"],[8,[39,6],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,4],\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,7],[[30,2,[\\\"images\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-t-5\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,1],[[28,[37,1],[[30,2,[\\\"suiteResult\\\",\\\"testResults\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"running\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],null,[[\\\"@testResult\\\",\\\"@isSmokeTest\\\",\\\"@runInProgress\\\",\\\"@onloadImages\\\",\\\"@isComparison\\\",\\\"@hasDuration\\\",\\\"@scriptType\\\",\\\"@uuid\\\",\\\"@filterResults\\\"],[[30,5],[30,6],[30,4],[30,7],[30,8],[30,3],[30,9],[30,10],[30,11]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],[[[1,\\\"          \\\"],[11,1],[4,[38,12],[[30,7]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],[[[1,\\\"  \\\"],[11,1],[4,[38,12],[[30,7]],null],[12],[13],[1,\\\"\\\\n  No assertions captured yet.\\\\n\\\"]],[]]]],[\\\"@suiteResultSummaries\\\",\\\"summary\\\",\\\"@hasDuration\\\",\\\"@runInProgress\\\",\\\"testResult\\\",\\\"@isSmokeTest\\\",\\\"@onloadImages\\\",\\\"@isComparison\\\",\\\"@scriptType\\\",\\\"@uuid\\\",\\\"@filterResults\\\"],[\\\"each\\\",\\\"-track-array\\\",\\\"div\\\",\\\"h4\\\",\\\"if\\\",\\\"and\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"gt\\\",\\\"not-eq\\\",\\\"suite-test-results\\\",\\\"span\\\",\\\"did-insert\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-result-summaries.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"suite-result-summaries\"));\n});","define(\"@testable/shared-ui/components/suite-results-widget\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/suite-utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _suiteUtils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/suite-utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"{{if @disableDrag 'panel-no-drag' 'panel'}}\"\n    id=\"suiteResults{{@suffix}}\"\n    data-sortable-id=\"suiteSummaries\"\n    data-type=\"SuiteSummaries\"\n    {{did-update this.removeListener @runInProgress}}\n  >\n    <div class=\"{{if @isRemovable 'block-sub-container-target'}} panel-heading\" role=\"tab\"\n         id=\"headingAssertions{{@suffix}}\">\n      <h4 class=\"panel-title\">\n        {{#if @collapsible}}\n          <a class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"collapse\" data-bs-parent=\"#suiteResults{{@suffix}}\"\n             href=\"#assertions{{@suffix}}\" aria-expanded={{this.isExpanded}} aria-controls=\"assertions{{@suffix}}\">\n            <Ui::Icon @icon=\"fa fa-{{if this.isExpanded 'minus' 'plus'}}\" />\n          </a>\n          <strong>{{@titlePrefix}}Assertions ({{this.suitesSummary.tests}})</strong>\n        {{else}}\n          <strong>{{@titlePrefix}}Assertions ({{this.suitesSummary.tests}}){{#if this.suitesSummary.regionDescription}}\n            - {{this.suitesSummary.regionDescription}}{{/if}}</strong>\n        {{/if}}\n      </h4>\n    </div>\n    <div id=\"assertions{{@suffix}}\" class=\"panel-collapse collapse {{if this.isExpanded 'show'}}\" role=\"tabpanel\"\n         aria-labelledby=\"headingAssertions{{@suffix}}\">\n      <div class=\"panel-body panel-500\" {{did-insert this.setupScrollListener}}>\n        <SuiteResultSummaries @suiteResultSummaries={{this.suiteResultSummaries}}\n                              @runInProgress={{@runInProgress}}\n                              @isSmokeTest={{@isSmokeTest}}\n                              @scriptType={{@scriptType}}\n                              @onloadImages={{this.onloadImages}}\n                              @hasDuration={{@hasDuration}} />\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[52,[30,1],\\\"panel-no-drag\\\",\\\"panel\\\"]]]],[16,1,[29,[\\\"suiteResults\\\",[30,2]]]],[24,\\\"data-sortable-id\\\",\\\"suiteSummaries\\\"],[24,\\\"data-type\\\",\\\"SuiteSummaries\\\"],[4,[38,2],[[30,0,[\\\"removeListener\\\"]],[30,3]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"block-sub-container-target\\\"],\\\" panel-heading\\\"]]],[14,\\\"role\\\",\\\"tab\\\"],[15,1,[29,[\\\"headingAssertions\\\",[30,2]]]],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,5],[[[1,\\\"        \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,\\\"data-bs-parent\\\",[29,[\\\"#suiteResults\\\",[30,2]]]],[15,6,[29,[\\\"#assertions\\\",[30,2]]]],[15,\\\"aria-expanded\\\",[30,0,[\\\"isExpanded\\\"]]],[15,\\\"aria-controls\\\",[29,[\\\"assertions\\\",[30,2]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-\\\",[52,[30,0,[\\\"isExpanded\\\"]],\\\"minus\\\",\\\"plus\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,[30,6]],[1,\\\"Assertions (\\\"],[1,[30,0,[\\\"suitesSummary\\\",\\\"tests\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"strong\\\"],[12],[1,[30,6]],[1,\\\"Assertions (\\\"],[1,[30,0,[\\\"suitesSummary\\\",\\\"tests\\\"]]],[1,\\\")\\\"],[41,[30,0,[\\\"suitesSummary\\\",\\\"regionDescription\\\"]],[[[1,\\\"\\\\n          - \\\"],[1,[30,0,[\\\"suitesSummary\\\",\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"assertions\\\",[30,2]]]],[15,0,[29,[\\\"panel-collapse collapse \\\",[52,[30,0,[\\\"isExpanded\\\"]],\\\"show\\\"]]]],[14,\\\"role\\\",\\\"tabpanel\\\"],[15,\\\"aria-labelledby\\\",[29,[\\\"headingAssertions\\\",[30,2]]]],[12],[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"panel-body panel-500\\\"],[4,[38,7],[[30,0,[\\\"setupScrollListener\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],null,[[\\\"@suiteResultSummaries\\\",\\\"@runInProgress\\\",\\\"@isSmokeTest\\\",\\\"@scriptType\\\",\\\"@onloadImages\\\",\\\"@hasDuration\\\"],[[30,0,[\\\"suiteResultSummaries\\\"]],[30,3],[30,7],[30,8],[30,0,[\\\"onloadImages\\\"]],[30,9]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@disableDrag\\\",\\\"@suffix\\\",\\\"@runInProgress\\\",\\\"@isRemovable\\\",\\\"@collapsible\\\",\\\"@titlePrefix\\\",\\\"@isSmokeTest\\\",\\\"@scriptType\\\",\\\"@hasDuration\\\"],[\\\"div\\\",\\\"if\\\",\\\"did-update\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"did-insert\\\",\\\"suite-result-summaries\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-results-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuiteResultsWidgetComponent = _exports.default = (_class = class SuiteResultsWidgetComponent extends _component2.default {\n    get isExpanded() {\n      if (_.isBoolean(this.args.collapsed)) {\n        return !this.args.collapsed;\n      }\n      return true;\n    }\n    get suitesSummary() {\n      return _suiteUtils.default.aggregateSuiteSummaries(this.suiteResultSummaries);\n    }\n    get suiteResultSummaries() {\n      return _suiteUtils.default.calculateSuiteResultsSummary(this.args.suiteResults, this.args.isSmokeTest);\n    }\n    removePanel(widgetId) {\n      if (typeof this.args.removePanel === 'function') this.args.removePanel(widgetId);\n    }\n    onloadImages() {\n      this.args.onloadImages?.();\n    }\n    setupScrollListener(element) {\n      if (this.args.isSmokeTest) {\n        this.scrollElement = element;\n        this.listenerAttached = true;\n        element.addEventListener('scroll', this.handleScroll);\n      }\n    }\n    handleScroll(event) {\n      if (event.target.scrollTop) {\n        window.localStorage.setItem(`assertions-scroll-top`, event.target.scrollTop);\n      }\n    }\n    willDestroy() {\n      super.willDestroy?.();\n      this.detachScrollListener();\n    }\n    removeListener() {\n      if (this.args.runInProgress) {\n        this.attachScrollListener();\n      } else {\n        this.detachScrollListener();\n      }\n    }\n    attachScrollListener() {\n      if (this.scrollElement && !this.listenerAttached) {\n        this.scrollElement.addEventListener('scroll', this.handleScroll);\n        this.listenerAttached = true;\n      }\n    }\n    detachScrollListener() {\n      if (this.scrollElement && this.listenerAttached) {\n        this.scrollElement.removeEventListener('scroll', this.handleScroll);\n        this.listenerAttached = false;\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"removePanel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onloadImages\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onloadImages\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setupScrollListener\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setupScrollListener\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeListener\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeListener\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteResultsWidgetComponent);\n});","define(\"@testable/shared-ui/components/suite-summaries-stats\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/suite-utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _suiteUtils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/suite-utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel-heading-btn\">\n    {{#if (gt this.displaySuitesSummaries.suites 0)}}\n      <div class=\"assertion-summary\">\n        {{#if this.hasDuration}}\n          <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Average Iteration\" class=\"m-r-15\">\n            {{html-safe this.displaySuitesSummaries.durationMean}}\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @icon=\"fa fa-lg fa-copy\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Test Suites (# of runs)\" class=\"m-r-15\">\n          {{this.displaySuitesSummaries.suites}} ({{html-safe this.displaySuitesSummaries.count}})\n        </Ui::Icon>\n        <Ui::Icon @icon=\"fa fa-lg fa-tasks\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Tests (# of runs)\" class=\"m-r-15 \">\n          {{this.displaySuitesSummaries.tests}}\n          ({{html-safe this.displaySuitesSummaries.testCount}})\n        </Ui::Icon>\n        {{#if this.displaySuitesSummaries.stateInProgresss}}\n          <Ui::Icon @icon=\"fa fa-lg fa-spin fa-spinner\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Test Results In Progress\" class=\"m-r-15 \">\n            {{html-safe this.displaySuitesSummaries.stateInProgress}}\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Passed Test Results\" class=\"m-r-15 \">\n          {{html-safe this.displaySuitesSummaries.statePassed}}\n        </Ui::Icon>\n        <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Failed Test Results\" class=\"m-r-15 \">\n          {{html-safe this.displaySuitesSummaries.stateFailed}}\n        </Ui::Icon>\n        {{#if this.displaySuitesSummaries.stateRetried}}\n          <Ui::Icon @icon=\"fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Retried Test Results\" class=\"m-r-15 \">\n            {{html-safe this.displaySuitesSummaries.stateRetried}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if this.displaySuitesSummaries.stateSkipped}}\n          <Ui::Icon @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Skipped Test Results\" class=\"m-r-15 \">\n            {{html-safe this.displaySuitesSummaries.stateSkipped}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if this.displaySuitesSummaries.stateNa}}\n          <Ui::Icon @icon=\"fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"N/A Test Results\" class=\"m-r-15 \">\n          {{html-safe this.displaySuitesSummaries.stateNa}}\n        </Ui::Icon>\n        {{/if}}\n        {{#if this.displaySuitesSummaries.files}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Files Captured\" class=\"m-r-15 \">\n            {{html-safe this.displaySuitesSummaries.files}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if this.displaySuitesSummaries.images}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Images Captured\" class=\"m-r-15 \">\n            {{html-safe this.displaySuitesSummaries.images}}\n          </Ui::Icon>\n        {{/if}}\n      </div>\n      <a href=\"javascript:\" {{on \"click\" @showDownloadAssertionModal}} class=\"btn btn-sm btn-icon btn-circle text-primary\"\n         data-bs-toggle=\"tooltip\" title=\"Export test framework results to CSV\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"suites\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"assertion-summary\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasDuration\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Average Iteration\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"durationMean\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Test Suites (# of runs)\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-copy\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"displaySuitesSummaries\\\",\\\"suites\\\"]]],[1,\\\" (\\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"count\\\"]]],null]],[1,\\\")\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Tests (# of runs)\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-tasks\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"displaySuitesSummaries\\\",\\\"tests\\\"]]],[1,\\\"\\\\n        (\\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"testCount\\\"]]],null]],[1,\\\")\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateInProgresss\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Results In Progress\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spin fa-spinner\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateInProgress\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Passed Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"statePassed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Failed Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateFailed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateRetried\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Retried Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateRetried\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateSkipped\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Skipped Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateSkipped\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateNa\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"N/A Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"stateNa\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"files\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Files Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"files\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"displaySuitesSummaries\\\",\\\"images\\\"]],[[[1,\\\"        \\\"],[8,[39,3],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Images Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,4],[[30,0,[\\\"displaySuitesSummaries\\\",\\\"images\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Export test framework results to CSV\\\"],[4,[38,6],[\\\"click\\\",[30,1]],null],[12],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@showDownloadAssertionModal\\\"],[\\\"div\\\",\\\"if\\\",\\\"gt\\\",\\\"ui/icon\\\",\\\"html-safe\\\",\\\"a\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-summaries-stats.hbs\",\n    \"isStrictMode\": false\n  });\n  let SuiteSummariesStatsComponent = _exports.default = (_class = class SuiteSummariesStatsComponent extends _component2.default {\n    get suitesSummary() {\n      const answer = {\n        durationMean: 0,\n        suites: 0,\n        count: 0,\n        tests: 0,\n        statePassed: 0,\n        stateFailed: 0,\n        stateSkipped: 0,\n        stateNa: 0,\n        stateRetried: 0,\n        stateInProgress: 0,\n        testCount: 0,\n        images: 0,\n        files: 0\n      };\n      _.forEach(this.args.model.suiteSummaries, summary => {\n        answer.suites += 1;\n        answer.count += summary.count;\n        answer.durationMean += summary.durationMean;\n        answer.tests += summary.testSummaryCount;\n        answer.statePassed += summary.statePassed;\n        answer.stateFailed += summary.stateFailed;\n        answer.stateSkipped += summary.stateSkipped;\n        answer.stateNa += summary.stateNa;\n        answer.stateRetried += summary.stateRetried;\n        answer.stateInProgress += summary.stateInProgress;\n        answer.testCount += summary.testCount;\n        answer.images += summary.images;\n        answer.files += summary.files;\n      });\n      _suiteUtils.default.addPercentsToSummary(answer);\n      return answer;\n    }\n    get suitesComparisons() {\n      const answer = {};\n      _.forEach(this.args.model.suiteSummaries, summary => {\n        if (_.isString(summary.comparisons) && summary.comparisons.length > 0) {\n          summary.comparisons = JSON.parse(summary.comparisons);\n        }\n        _.forEach(summary.comparisons, (val, key) => {\n          if (!answer[key]) {\n            answer[key] = 0;\n          }\n          if (key !== 'historyCount') {\n            answer[key] += val;\n          } else if (val > answer[key]) {\n            answer[key] = val;\n          }\n        });\n      });\n      return answer;\n    }\n    get displaySuitesSummaries() {\n      const summary = this.suitesSummary;\n      const comparisons = _suiteUtils.default.toChangeSummaryComparison(this.suitesSummary, this.suitesComparisons);\n      const answer = _suiteUtils.default.toDisplaySummary(summary, comparisons);\n      answer.suites = summary.suites;\n      answer.tests = summary.tests;\n      return answer;\n    }\n    get hasDuration() {\n      const scriptType = this.args.scriptType;\n      return scriptType !== 'JMeter' && scriptType !== 'Gatling' && scriptType !== 'Locust';\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"suitesSummary\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"suitesSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"suitesComparisons\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"suitesComparisons\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"displaySuitesSummaries\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"displaySuitesSummaries\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteSummariesStatsComponent);\n});","define(\"@testable/shared-ui/components/suite-summaries-summary\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"ember-uuid\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/suite-utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _emberUuid, _tracking, _service, _server, _suiteUtils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"ember-uuid\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/suite-utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isComparison}}\n    <div class=\"mb-1 pull-left\"><strong>{{@title}}</strong></div>\n    {{#if (gt @displaySuiteSummaries.length 0)}}\n      <div class=\"mb-1 pull-right\">\n        <SuiteSummariesStats\n                @model={{@model}}\n                @scriptType={{@model.execution.script.scriptType}}\n                @showDownloadAssertionModal={{@showDownloadAssertionModal}}\n        />\n      </div>\n    {{/if}}\n    <div class=\"clear-fix\"></div>\n  {{/if}}\n  <div class=\"no-print\">\n    <div class=\"d-flex flex-row align-items-center flex-wrap form-inline m-t-5 pull-left\">\n      {{#if @isComparison}}\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\">\n          <label>View By: </label>\n        </div>\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\">\n          <BsButtonGroup @value={{this.viewType}} @type=\"radio\" @onChange={{fn (mut this.viewType)}} as |bg|>\n            <bg.button @type=\"success\" @value=\"assertion\" @size=\"xs\">\n              By Suite {{#if @suiteSummariesLoaded}}({{print-number @displaySuiteSummaries.length}}){{/if}}\n            </bg.button>\n            <bg.button @type=\"success\" @value=\"error\" @size=\"xs\">\n              By Error {{#if @suiteSummariesLoaded}}({{print-number @model.suiteErrors.length}}){{/if}}\n            </bg.button>\n          </BsButtonGroup>\n        </div>\n      {{/if}}\n  \n      {{#if this.displayFilterBar}}\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\">\n          <label>Sort By: </label>\n        </div>\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\">\n          <BsButtonGroup @value={{this.sortOrder}} @type=\"radio\" @onChange={{fn (mut this.sortOrder)}} as |bg|>\n            <bg.button @type=\"success\" @value=\"first\" @size=\"xs\">First Timestamp</bg.button>\n            <bg.button @type=\"success\" @value=\"name\" @size=\"xs\">Name</bg.button>\n          </BsButtonGroup>\n        </div>\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\">\n          <label>Display: </label>\n        </div>\n        <div class=\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\">\n          <BsButtonGroup @value={{this.errorOnlyToggle}} @type=\"radio\" @onChange={{fn (mut this.errorOnlyToggle)}} as\n                         |bg|>\n            <bg.button @type=\"success\" @value=\"all\" @size=\"xs\">All</bg.button>\n            <bg.button @type=\"success\" @value=\"errors\" @size=\"xs\">Errors Only</bg.button>\n          </BsButtonGroup>\n        </div>\n      {{/if}}\n    </div>\n    <div class=\"form-group m-b-0 pull-right\">\n      <div class=\"input-group\">\n        <Ui::Icon @icon=\"fa fa-search\" class=\"input-group-addon\" />\n        <Input @type=\"text\" @value={{this.search}} placeholder=\"Search...\" class=\"form-control\"/>\n      </div>\n    </div>\n  </div>\n  <div class=\"clear-fix\"></div>\n  {{#if (not @suiteSummariesLoaded)}}\n    Loading assertions...\n  {{else if (or (eq this.viewType 'error') (eq @viewType 'error'))}}\n    <SuiteErrorsSummary @executionId={{@overallModel.id}}\n                        @executionRegionId={{if @model.isAll null @model.executionRegion.id}}\n                        @model={{@model}}\n                        @uuid={{@overallModel.uuid}}\n                        @overallModel={{@overallModel}}\n                        @byRegionId={{@byRegionId}}\n                        @regionName={{@regionName}}\n                        @isViewer={{@isViewer}}\n                        @showImageDetailsModal={{@showImageDetailsModal}}\n                        @showSuiteErrorRelatedResults={{this.showSuiteErrorRelatedResults}} />\n  {{else}}\n    {{#if (gt this.filteredSuiteSummaries.length 0)}}\n      {{#each this.filteredSuiteSummaries as |summary|}}\n        <div class=\"suite-results mt-2\">\n          <h4>{{summary.suite.name}}</h4>\n          <div>\n            {{#if this.hasDuration}}\n              <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Average Suite Duration (# of runs)\" class=\"m-r-15\">\n                {{html-safe summary.durationMean}} ({{html-safe summary.count}})\n              </Ui::Icon>\n            {{/if}}\n            <Ui::Icon @icon=\"fa fa-lg fa-tasks\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests (# of runs)\" class=\"m-r-15 \">\n              {{print-number summary.testSummaryCount}} ({{html-safe summary.testCount}})\n            </Ui::Icon>\n            {{#if summary.stateInProgress}}\n              <Ui::Icon @icon=\"fa fa-lg fa-spin fa-spinner\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Test Results In Progress\" class=\"m-r-15 \">\n                {{html-safe summary.stateInProgress}}\n              </Ui::Icon>\n            {{/if}}\n            <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Passed Test Results\" class=\"green m-r-15 \">\n              {{html-safe summary.statePassed}}\n            </Ui::Icon>\n            <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Failed Test Results\" class=\"red m-r-15 \">\n              {{html-safe summary.stateFailed}}\n            </Ui::Icon>\n            {{#if summary.stateRetried}}\n              <Ui::Icon @icon=\"fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Retried Test Results\" class=\"m-r-15 \">\n                {{html-safe summary.stateRetried}}\n              </Ui::Icon>\n            {{/if}}\n            {{#if summary.stateSkipped}}\n              <Ui::Icon @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Skipped Test Results\" class=\"m-r-15 \">\n                {{html-safe summary.stateSkipped}}\n              </Ui::Icon>\n            {{/if}}\n            {{#if summary.stateNa}}\n              <Ui::Icon @icon=\"fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"N/A Test Results\" class=\"m-r-15 \">\n              {{html-safe summary.stateNa}}\n              </Ui::Icon>\n            {{/if}}\n            {{#if (and summary.files (not-eq summary.files summary.images))}}\n              <Ui::Icon @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Files Captured\" class=\"m-r-15 \">\n                {{html-safe summary.files}}\n              </Ui::Icon>\n            {{/if}}\n            {{#if summary.images}}\n              <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15 \">\n                {{html-safe summary.images}}\n              </Ui::Icon>\n            {{/if}}\n          </div>\n          <table class=\"table m-t-5\">\n            <tbody>\n            {{#each (sort-by-ts summary.testSummaries 'firstStartedAt') as |testSummary|}}\n              <SuiteSummariesTestSummary\n                @testSummary={{testSummary}}\n                @overallModel={{@overallModel}}\n                @hasDuration={{this.hasDuration}}\n                @hasTabs={{or testSummary.imagesCount testSummary.stateFailedCount testSummary.annotations testSummary.attachments}}\n                @expand={{fn this.expandParentChild summary}}\n                @showRelatedResults={{this.showRelatedResults}}\n              />\n              {{#if testSummary.expanded}}\n                <div class=\"suite-expand\">\n                  <ul class=\"nav nav-pills\">\n                    {{#if testSummary.hasChildren}}\n                      <li class=\"nav-items\">\n                        <a href=\"#steps-{{concat testSummary.suiteTest.id this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link active\">\n                          <span class=\"d-sm-none\">Steps</span>\n                          <span class=\"d-sm-block d-none\">Steps ({{print-number testSummary.stepsCount}})</span>\n                        </a>\n                      </li>\n                    {{/if}}\n                    {{#if (gt testSummary.imagesCount 0)}}\n                      <li class=\"nav-items {{if (not testSummary.hasChildren) 'active' ''}}\">\n                        <a\n                          href=\"#images-{{concat testSummary.suiteTest.id this.uniqueId}}\"\n                          {{on \"click\" (fn (mut testSummary.viewType) 'images')}}\n                          data-bs-toggle=\"tab\" class=\"nav-link\">\n                          <span class=\"d-sm-none\">Screenshots</span>\n                          <span class=\"d-sm-block d-none\">Screenshots ({{print-number testSummary.imagesCount}})</span>\n                        </a>\n                      </li>\n                    {{/if}}\n                    {{#if (gt testSummary.stateFailedCount 0)}}\n                      <li class=\"nav-items\">\n                        <a href=\"#errors-{{concat testSummary.suiteTest.id this.uniqueId}}\" data-bs-toggle=\"tab\"\n                           class=\"nav-link {{if (and (not testSummary.hasChildren) (eq testSummary.imagesCount 0)) 'active' ''}}\">\n                          <span class=\"d-sm-none\">Errors</span>\n                          <span class=\"d-sm-block d-none\">Errors\n                                  ({{print-number testSummary.stateFailedCount}})</span>\n                        </a>\n                      </li>\n                    {{/if}}\n                    {{#if (gt testSummary.annotations.length 0)}}\n                      <li class=\"nav-items\">\n                        <a href=\"#annotations-{{concat testSummary.suiteTest.id this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link\">\n                          <span class=\"d-sm-none\">Annotations</span>\n                          <span class=\"d-sm-block d-none\">Annotations ({{print-number testSummary.annotations.length}})</span>\n                        </a>\n                      </li>\n                    {{/if}}\n                    {{#if (gt testSummary.attachments.files.length 0)}}\n                      <li class=\"nav-items\">\n                        <a href=\"#attachments-{{concat testSummary.suiteTest.id this.uniqueId}}\" data-bs-toggle=\"tab\" class=\"nav-link\">\n                          <span class=\"d-sm-none\">Attachments</span>\n                          <span class=\"d-sm-block d-none\">Attachments ({{print-number testSummary.attachments.files.length}})</span>\n                        </a>\n                      </li>\n                    {{/if}}\n                  </ul>\n  \n                  <div class=\"tab-content\">\n                    {{#if testSummary.hasChildren}}\n                    <div class=\"tab-pane fade active show p-l-10\" id=\"steps-{{concat testSummary.suiteTest.id this.uniqueId}}\">\n                      <table class=\"table\">\n                        <tbody>\n                          {{#each testSummary.children as |child|}}\n                            <SuiteSummariesTestSummary\n                              @testSummary={{child}}\n                              @overallModel={{@overallModel}}\n                              @hasDuration={{this.hasDuration}}\n                              @isChild={{true}}\n                              @expand={{fn this.expandChild summary}}\n                              @showRelatedResults={{this.showRelatedResults}}\n                            />\n                          {{else}}\n                            Loading Data...\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    </div>\n                    {{/if}}\n                    {{#if (gt testSummary.imagesCount 0)}}\n                      <div class=\"tab-pane fade {{unless testSummary.hasChildren 'active show'}}\" id=\"images-{{concat testSummary.suiteTest.id this.uniqueId}}\">\n                        <ImagesWidget @assertion={{testSummary}}\n                                      @minimalHeader={{true}}\n                                      @embedded={{true}}\n                                      @model={{@model}}\n                                      @overallModel={{@overallModel}}\n                                      @byRegionId={{@byRegionId}}\n                                      @regionName={{@regionName}}\n                                      @isAll={{@model.isAll}}\n                                      @isLoad={{true}}\n                                      @isPrint={{@isPrint}}\n                                      @widget={{testSummary.suiteTest}}\n                                      @isViewer={{@isViewer}}\n                                      @showImageDetailsModal={{@showImageDetailsModal}} />\n                      </div>\n                    {{/if}}\n                    {{#if (gt testSummary.stateFailedCount 0)}}\n                      <div class=\"tab-pane fade {{if (and (not testSummary.hasChildren) (eq testSummary.imagesCount 0)) 'active show'}}\"\n                           id=\"errors-{{concat testSummary.suiteTest.id this.uniqueId}}\">\n                        <SuiteErrorsSummary @executionId={{@overallModel.id}}\n                                            @executionRegionId={{if @model.isAll null @model.executionRegion.id}}\n                                            @summary={{summary}}\n                                            @testSummary={{testSummary}}\n                                            @model={{@model}}\n                                            @overallModel={{@overallModel}}\n                                            @uuid={{@overallModel.uuid}}\n                                            @isBaseline={{@isBaseline}}\n                                            @byRegionId={{@byRegionId}}\n                                            @regionName={{@regionName}}\n                                            @isViewer={{@isViewer}}\n                                            @showImageDetailsModal={{@showImageDetailsModal}}\n                                            @showSuiteErrorRelatedResults={{this.showSuiteErrorRelatedResults}} />\n                      </div>\n                    {{/if}}\n  \n                    {{#if (gt testSummary.annotations.length 0)}}\n                      <div class=\"tab-pane fade\"\n                        id=\"annotations-{{concat testSummary.suiteTest.id this.uniqueId}}\">\n  \n                        <table class=\"table table-bordered\">\n                          <thead>\n                            <th style={{html-safe \"width: 100px;\"}}>Type</th>\n                            <th>Description</th>\n                            <th>Count</th>\n                          </thead>\n                          <tbody>\n                            {{#each testSummary.annotations as |annotation|}}\n                              <tr>\n                                <td>{{annotation.annotationType}}</td>\n                                <td>{{annotation.description}}</td>\n                                <td>{{print-number annotation.count}}</td>\n                              </tr>\n                            {{/each}}\n                          </tbody>\n                        </table>\n                      </div>\n                    {{/if}}\n  \n                    {{#if (gt testSummary.attachments.files.length 0)}}\n                      <div class=\"tab-pane fade p-b-10\"\n                        id=\"attachments-{{concat testSummary.suiteTest.id this.uniqueId}}\">\n                        {{#each testSummary.attachments.files as |file|}}\n                          <a href=\"{{add-auth-to-url file.url}}\" class=\"m-r-5 position-relative\">\n                            <img src=\"{{add-auth-to-url file.thumbnailUrl}}\" alt=\"\" role=\"none\">\n                            <span class=\"position-absolute image-name\">{{file.name}}</span>\n                          </a>\n                        {{/each}}\n                      </div>\n                    {{/if}}\n                  </div>\n                </div>\n              {{/if}}\n            {{/each}}\n            {{#if (and @model.execution.completed summary.showLoadMore)}}\n              <div class=\"text-end\">\n                {{#if summary.isLoading}}\n                  <span class=\"d-block\">Loading...</span>\n                {{else}}\n                  <button type=\"button\" class=\"btn btn-xs btn-success\" {{on \"click\" (fn this.loadMoreTestSummaries summary)}}>\n                    Load More\n                  </button>\n                {{/if}}\n              </div>\n            {{/if}}\n            </tbody>\n          </table>\n        </div>\n      {{/each}}\n    {{else}}\n      No assertions found.\n    {{/if}}\n  {{/if}}\n  \n  {{#if this.showSuiteRelatedResultsModal}}\n    <SuiteRelatedResultsModal\n            @error={{this.selectedSuiteError}}\n            @assertion={{this.selectedTestSummary}}\n            @overallModel={{@overallModel}}\n            @model={{@model}}\n            @suiteSummariesLoaded={{@suiteSummariesLoaded}}\n            @showImageDetailsModal={{@showImageDetailsModal}}\n            @modalClosed={{this.suiteRelatedResultsModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-1 pull-left\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,2]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3,[\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"mb-1 pull-right\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@model\\\",\\\"@scriptType\\\",\\\"@showDownloadAssertionModal\\\"],[[30,4],[30,4,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,5]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[14,0,\\\"clear-fix\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[10,0],[14,0,\\\"no-print\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex flex-row align-items-center flex-wrap form-inline m-t-5 pull-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"View By: \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewType\\\"]],\\\"radio\\\",[28,[37,7],[[28,[37,8],[[30,0,[\\\"viewType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"assertion\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            By Suite \\\"],[41,[30,7],[[[1,\\\"(\\\"],[1,[28,[35,9],[[30,3,[\\\"length\\\"]]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"error\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            By Error \\\"],[41,[30,7],[[[1,\\\"(\\\"],[1,[28,[35,9],[[30,4,[\\\"suiteErrors\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displayFilterBar\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Sort By: \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"sortOrder\\\"]],\\\"radio\\\",[28,[37,7],[[28,[37,8],[[30,0,[\\\"sortOrder\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"first\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"First Timestamp\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,8,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"name\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Name\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[8]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-5\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Display: \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-md-flex flex-row align-items-center text-nowrap mb-4 mb-md-0 m-r-10\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"errorOnlyToggle\\\"]],\\\"radio\\\",[28,[37,7],[[28,[37,8],[[30,0,[\\\"errorOnlyToggle\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"All\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Errors Only\\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group m-b-0 pull-right\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,10],[[24,0,\\\"input-group-addon\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[1,\\\"\\\\n      \\\"],[8,[39,11],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"search\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"clear-fix\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,7]],null],[[[1,\\\"  Loading assertions...\\\\n\\\"]],[]],[[[41,[28,[37,13],[[28,[37,14],[[30,0,[\\\"viewType\\\"]],\\\"error\\\"],null],[28,[37,14],[[30,10],\\\"error\\\"],null]],null],[[[1,\\\"  \\\"],[8,[39,15],null,[[\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@model\\\",\\\"@uuid\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"@showSuiteErrorRelatedResults\\\"],[[30,11,[\\\"id\\\"]],[52,[30,4,[\\\"isAll\\\"]],null,[30,4,[\\\"executionRegion\\\",\\\"id\\\"]]],[30,4],[30,11,[\\\"uuid\\\"]],[30,11],[30,12],[30,13],[30,14],[30,15],[30,0,[\\\"showSuiteErrorRelatedResults\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,3],[[30,0,[\\\"filteredSuiteSummaries\\\",\\\"length\\\"]],0],null],[[[42,[28,[37,17],[[28,[37,17],[[30,0,[\\\"filteredSuiteSummaries\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,0],[14,0,\\\"suite-results mt-2\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[12],[1,[30,16,[\\\"suite\\\",\\\"name\\\"]]],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasDuration\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Average Suite Duration (# of runs)\\\"],[24,0,\\\"m-r-15\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"durationMean\\\"]]],null]],[1,\\\" (\\\"],[1,[28,[35,19],[[30,16,[\\\"count\\\"]]],null]],[1,\\\")\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests (# of runs)\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-tasks\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,9],[[30,16,[\\\"testSummaryCount\\\"]]],null]],[1,\\\" (\\\"],[1,[28,[35,19],[[30,16,[\\\"testCount\\\"]]],null]],[1,\\\")\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,16,[\\\"stateInProgress\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Results In Progress\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spin fa-spinner\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"stateInProgress\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Passed Test Results\\\"],[24,0,\\\"green m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,19],[[30,16,[\\\"statePassed\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Failed Test Results\\\"],[24,0,\\\"red m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,19],[[30,16,[\\\"stateFailed\\\"]]],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,16,[\\\"stateRetried\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Retried Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"stateRetried\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,16,[\\\"stateSkipped\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Skipped Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"stateSkipped\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,16,[\\\"stateNa\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"N/A Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[35,19],[[30,16,[\\\"stateNa\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,20],[[30,16,[\\\"files\\\"]],[28,[37,21],[[30,16,[\\\"files\\\"]],[30,16,[\\\"images\\\"]]],null]],null],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Files Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"files\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,16,[\\\"images\\\"]],[[[1,\\\"            \\\"],[8,[39,10],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[35,19],[[30,16,[\\\"images\\\"]]],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"table m-t-5\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[28,[37,24],[[30,16,[\\\"testSummaries\\\"]],\\\"firstStartedAt\\\"],null]],null]],null],null,[[[1,\\\"            \\\"],[8,[39,25],null,[[\\\"@testSummary\\\",\\\"@overallModel\\\",\\\"@hasDuration\\\",\\\"@hasTabs\\\",\\\"@expand\\\",\\\"@showRelatedResults\\\"],[[30,17],[30,11],[30,0,[\\\"hasDuration\\\"]],[28,[37,13],[[30,17,[\\\"imagesCount\\\"]],[30,17,[\\\"stateFailedCount\\\"]],[30,17,[\\\"annotations\\\"]],[30,17,[\\\"attachments\\\"]]],null],[28,[37,7],[[30,0,[\\\"expandParentChild\\\"]],[30,16]],null],[30,0,[\\\"showRelatedResults\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,17,[\\\"expanded\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"suite-expand\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,17,[\\\"hasChildren\\\"]],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,3],[15,6,[29,[\\\"#steps-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link active\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Steps\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[1,\\\"Steps (\\\"],[1,[28,[35,9],[[30,17,[\\\"stepsCount\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"imagesCount\\\"]],0],null],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[15,0,[29,[\\\"nav-items \\\",[52,[28,[37,12],[[30,17,[\\\"hasChildren\\\"]]],null],\\\"active\\\",\\\"\\\"]]]],[12],[1,\\\"\\\\n                      \\\"],[11,3],[16,6,[29,[\\\"#images-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[24,0,\\\"nav-link\\\"],[4,[38,31],[\\\"click\\\",[28,[37,7],[[28,[37,8],[[30,17,[\\\"viewType\\\"]]],null],\\\"images\\\"],null]],null],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Screenshots\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[1,\\\"Screenshots (\\\"],[1,[28,[35,9],[[30,17,[\\\"imagesCount\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"stateFailedCount\\\"]],0],null],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,3],[15,6,[29,[\\\"#errors-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[15,0,[29,[\\\"nav-link \\\",[52,[28,[37,20],[[28,[37,12],[[30,17,[\\\"hasChildren\\\"]]],null],[28,[37,14],[[30,17,[\\\"imagesCount\\\"]],0],null]],null],\\\"active\\\",\\\"\\\"]]]],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Errors\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[1,\\\"Errors\\\\n                                (\\\"],[1,[28,[35,9],[[30,17,[\\\"stateFailedCount\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"annotations\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,3],[15,6,[29,[\\\"#annotations-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Annotations\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[1,\\\"Annotations (\\\"],[1,[28,[35,9],[[30,17,[\\\"annotations\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"attachments\\\",\\\"files\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,3],[15,6,[29,[\\\"#attachments-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[14,0,\\\"nav-link\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-none\\\"],[12],[1,\\\"Attachments\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,1],[14,0,\\\"d-sm-block d-none\\\"],[12],[1,\\\"Attachments (\\\"],[1,[28,[35,9],[[30,17,[\\\"attachments\\\",\\\"files\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\\n                \\\"],[10,0],[14,0,\\\"tab-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,17,[\\\"hasChildren\\\"]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"tab-pane fade active show p-l-10\\\"],[15,1,[29,[\\\"steps-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,17,[\\\"children\\\"]]],null]],null],null,[[[1,\\\"                          \\\"],[8,[39,25],null,[[\\\"@testSummary\\\",\\\"@overallModel\\\",\\\"@hasDuration\\\",\\\"@isChild\\\",\\\"@expand\\\",\\\"@showRelatedResults\\\"],[[30,18],[30,11],[30,0,[\\\"hasDuration\\\"]],true,[28,[37,7],[[30,0,[\\\"expandChild\\\"]],[30,16]],null],[30,0,[\\\"showRelatedResults\\\"]]]],null],[1,\\\"\\\\n\\\"]],[18]],[[[1,\\\"                          Loading Data...\\\\n\\\"]],[]]],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"imagesCount\\\"]],0],null],[[[1,\\\"                    \\\"],[10,0],[15,0,[29,[\\\"tab-pane fade \\\",[52,[51,[30,17,[\\\"hasChildren\\\"]]],\\\"active show\\\"]]]],[15,1,[29,[\\\"images-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,33],null,[[\\\"@assertion\\\",\\\"@minimalHeader\\\",\\\"@embedded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isAll\\\",\\\"@isLoad\\\",\\\"@isPrint\\\",\\\"@widget\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\"],[[30,17],true,true,[30,4],[30,11],[30,12],[30,13],[30,4,[\\\"isAll\\\"]],true,[30,19],[30,17,[\\\"suiteTest\\\"]],[30,14],[30,15]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[30,17,[\\\"stateFailedCount\\\"]],0],null],[[[1,\\\"                    \\\"],[10,0],[15,0,[29,[\\\"tab-pane fade \\\",[52,[28,[37,20],[[28,[37,12],[[30,17,[\\\"hasChildren\\\"]]],null],[28,[37,14],[[30,17,[\\\"imagesCount\\\"]],0],null]],null],\\\"active show\\\"]]]],[15,1,[29,[\\\"errors-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n                      \\\"],[8,[39,15],null,[[\\\"@executionId\\\",\\\"@executionRegionId\\\",\\\"@summary\\\",\\\"@testSummary\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@uuid\\\",\\\"@isBaseline\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"@showSuiteErrorRelatedResults\\\"],[[30,11,[\\\"id\\\"]],[52,[30,4,[\\\"isAll\\\"]],null,[30,4,[\\\"executionRegion\\\",\\\"id\\\"]]],[30,16],[30,17],[30,4],[30,11],[30,11,[\\\"uuid\\\"]],[30,20],[30,12],[30,13],[30,14],[30,15],[30,0,[\\\"showSuiteErrorRelatedResults\\\"]]]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,17,[\\\"annotations\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"tab-pane fade\\\"],[15,1,[29,[\\\"annotations-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n\\\\n                      \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,19],[\\\"width: 100px;\\\"],null]],[12],[1,\\\"Type\\\"],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Description\\\"],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,\\\"Count\\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,17,[\\\"annotations\\\"]]],null]],null],null,[[[1,\\\"                            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,[30,21,[\\\"annotationType\\\"]]],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,[30,21,[\\\"description\\\"]]],[13],[1,\\\"\\\\n                              \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,9],[[30,21,[\\\"count\\\"]]],null]],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\"]],[21]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,17,[\\\"attachments\\\",\\\"files\\\",\\\"length\\\"]],0],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"tab-pane fade p-b-10\\\"],[15,1,[29,[\\\"attachments-\\\",[28,[37,29],[[30,17,[\\\"suiteTest\\\",\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]],null]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,17,[\\\"attachments\\\",\\\"files\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,3],[15,6,[29,[[28,[37,38],[[30,22,[\\\"url\\\"]]],null]]]],[14,0,\\\"m-r-5 position-relative\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[28,[37,38],[[30,22,[\\\"thumbnailUrl\\\"]]],null]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                          \\\"],[10,1],[14,0,\\\"position-absolute image-name\\\"],[12],[1,[30,22,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[22]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[17]],null],[41,[28,[37,20],[[30,4,[\\\"execution\\\",\\\"completed\\\"]],[30,16,[\\\"showLoadMore\\\"]]],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"text-end\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,16,[\\\"isLoading\\\"]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"d-block\\\"],[12],[1,\\\"Loading...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,31],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"loadMoreTestSummaries\\\"]],[30,16]],null]],null],[12],[1,\\\"\\\\n                  Load More\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[16]],null]],[]],[[[1,\\\"    No assertions found.\\\\n\\\"]],[]]]],[]]]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuiteRelatedResultsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,41],null,[[\\\"@error\\\",\\\"@assertion\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@suiteSummariesLoaded\\\",\\\"@showImageDetailsModal\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedSuiteError\\\"]],[30,0,[\\\"selectedTestSummary\\\"]],[30,11],[30,4],[30,7],[30,15],[30,0,[\\\"suiteRelatedResultsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"@displaySuiteSummaries\\\",\\\"@model\\\",\\\"@showDownloadAssertionModal\\\",\\\"bg\\\",\\\"@suiteSummariesLoaded\\\",\\\"bg\\\",\\\"bg\\\",\\\"@viewType\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"summary\\\",\\\"testSummary\\\",\\\"child\\\",\\\"@isPrint\\\",\\\"@isBaseline\\\",\\\"annotation\\\",\\\"file\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"gt\\\",\\\"suite-summaries-stats\\\",\\\"label\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"print-number\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"not\\\",\\\"or\\\",\\\"eq\\\",\\\"suite-errors-summary\\\",\\\"each\\\",\\\"-track-array\\\",\\\"h4\\\",\\\"html-safe\\\",\\\"and\\\",\\\"not-eq\\\",\\\"table\\\",\\\"tbody\\\",\\\"sort-by-ts\\\",\\\"suite-summaries-test-summary\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"concat\\\",\\\"span\\\",\\\"on\\\",\\\"unless\\\",\\\"images-widget\\\",\\\"thead\\\",\\\"th\\\",\\\"tr\\\",\\\"td\\\",\\\"add-auth-to-url\\\",\\\"img\\\",\\\"button\\\",\\\"suite-related-results-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-summaries-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  function filterSuiteSummary(suiteSummary, search, errorsOnly) {\n    if (errorsOnly && suiteSummary.stateFailedCount === 0) {\n      return null;\n    }\n    let suiteSearchMatch = !search || suiteSummary.suite && suiteSummary.suite.name && suiteSummary.suite.name.toLowerCase().indexOf(search) !== -1;\n    let suiteTestSearchMatch = false;\n    const answer = _.clone(suiteSummary);\n    answer.testSummaries = _.filter(answer.testSummaries, testSummary => {\n      let searchMatch = !search || testSummary.suiteTest && testSummary.suiteTest.name && testSummary.suiteTest.name.toLowerCase().indexOf(search) !== -1;\n      let errorsOnlyMatch = !errorsOnly || testSummary.stateFailedCount > 0;\n      if (searchMatch && errorsOnlyMatch) {\n        suiteTestSearchMatch = true;\n      }\n      return searchMatch && errorsOnlyMatch;\n    });\n    return suiteSearchMatch || suiteTestSearchMatch ? answer : null;\n  }\n  let SuiteSummariesSummaryComponent = _exports.default = (_dec = (0, _object.computed)('args.model.suiteSummaries.[]'), _dec2 = (0, _object.computed)('args.isPrint', 'suitesSummary.tests'), _dec3 = (0, _object.computed)('args.model.execution.script.scriptType'), _class = class SuiteSummariesSummaryComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"selectedTestSummary\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showSuiteRelatedResultsModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedSuiteError\", _descriptor4, this);\n      _initializerDefineProperty(this, \"search\", _descriptor5, this);\n      _initializerDefineProperty(this, \"errorOnlyToggle\", _descriptor6, this);\n      _initializerDefineProperty(this, \"sortOrder\", _descriptor7, this);\n      _initializerDefineProperty(this, \"viewType\", _descriptor8, this);\n    }\n    get suitesSummary() {\n      const answer = {\n        durationMean: 0,\n        suites: 0,\n        count: 0,\n        tests: 0,\n        statePassed: 0,\n        stateFailed: 0,\n        stateSkipped: 0,\n        stateNa: 0,\n        stateRetried: 0,\n        stateInProgress: 0,\n        testCount: 0,\n        images: 0,\n        files: 0\n      };\n      _.forEach(this.args.model.suiteSummaries, summary => {\n        answer.suites += 1;\n        answer.count += summary.count;\n        answer.durationMean += summary.durationMean;\n        answer.tests += summary.testSummaryCount;\n        answer.statePassed += summary.statePassed;\n        answer.stateFailed += summary.stateFailed;\n        answer.stateSkipped += summary.stateSkipped;\n        answer.stateNa += summary.stateNa;\n        answer.stateRetried += summary.stateRetried;\n        answer.stateInProgress += summary.stateInProgress;\n        answer.testCount += summary.testCount;\n        answer.images += summary.images;\n        answer.files += summary.files;\n      });\n      _suiteUtils.default.addPercentsToSummary(answer);\n      return answer;\n    }\n    get displayFilterBar() {\n      return !this.args.isPrint && this.suitesSummary.tests > 10;\n    }\n    get hasDuration() {\n      const scriptType = this.args.model.execution.script.scriptType;\n      return scriptType !== 'JMeter' && scriptType !== 'Gatling' && scriptType !== 'Locust';\n    }\n    get filteredSuiteSummaries() {\n      const source = this.args.displaySuiteSummaries;\n      let search = this.search;\n      if (search) {\n        search = search.toLowerCase();\n      }\n      const errorsOnly = this.errorOnlyToggle === 'errors';\n      const sortOrder = this.sortOrder;\n      const filtered = [];\n      _.forEach(source, function (suiteSummary) {\n        const filteredSummary = !search && !errorsOnly ? suiteSummary : filterSuiteSummary(suiteSummary, search, errorsOnly);\n        if (filteredSummary) {\n          filtered.push(filteredSummary);\n        }\n      });\n      return _.sortBy(filtered, function (suiteSummary) {\n        return sortOrder === 'first' ? moment(suiteSummary.firstStartedAt).valueOf() : suiteSummary.suite.name.toLowerCase();\n      });\n    }\n    loadChildTestResults(testSummary, summary) {\n      const {\n        isAll,\n        executionRegion,\n        execution\n      } = this.args.model;\n      let offset = 0;\n      let response = isAll ? this.api.executions.getSuiteRelatedTests(execution.id, summary.suiteId, _suiteUtils.default.maxTests, offset, testSummary.suiteTestId, execution.uuid) : this.api.executions.getRegionSuiteRelatedTests(execution.id, summary.suiteId, executionRegion.id, _suiteUtils.default.maxTests, offset, testSummary.suiteTestId, execution.uuid);\n      response.then((result, status, xhr) => {\n        const totalCounts = xhr.getResponseHeader('X-Testable-Count');\n        const results = _suiteUtils.default.toTestSummaries(result);\n        (0, _object.set)(testSummary, 'children', results);\n        (0, _object.set)(testSummary, 'stepsCount', totalCounts);\n        (0, _object.set)(testSummary, 'childrenLoaded', true);\n      });\n    }\n    loadAnnotations(testSummary, summary) {\n      const {\n        execution\n      } = this.args.model;\n      const response = this.api.executions.getSuiteSummariesTestsAnnotations(execution.id, summary.suiteId, testSummary.suiteTestId, execution.uuid);\n      response.then((result, status, xhr) => {\n        (0, _object.set)(testSummary, 'annotations', result);\n        (0, _object.set)(testSummary, 'annotationsLoaded', true);\n      });\n    }\n    loadAttachments(testSummary, summary) {\n      const {\n        execution\n      } = this.args.model;\n      let response;\n      if (execution.uuid) {\n        const params = {};\n        params.suiteTestIds = testSummary.suiteTestId;\n        params.textOnly = true;\n        params.outputFiles = true;\n        response = _server.default.getTokenContent(execution.uuid, params);\n      } else {\n        response = this.api.executions.getSuiteTestOutputFiles(execution.id, testSummary.suiteTestId, 'textOnly');\n      }\n      response.then((result, status, xhr) => {\n        (0, _object.set)(testSummary, 'attachments', result);\n        (0, _object.set)(testSummary, 'attachmentsLoaded', true);\n      });\n    }\n    expandParentChild(summary, testSummary) {\n      this.expandChild(summary, testSummary, true);\n    }\n    expandChild(summary, testSummary, isParent = false) {\n      (0, _object.set)(testSummary, 'expanded', !testSummary.expanded);\n      if (testSummary.expanded) {\n        if (testSummary.hasChildren && !testSummary.childrenLoaded) {\n          this.loadChildTestResults(testSummary, summary);\n        }\n        if (isParent) {\n          if (!testSummary.annotationsLoaded) {\n            this.loadAnnotations(testSummary, summary);\n          }\n          if (!testSummary.attachmentsLoaded) {\n            this.loadAttachments(testSummary, summary);\n          }\n        }\n      }\n    }\n    showRelatedResults(testSummary) {\n      this.selectedTestSummary = testSummary;\n      this.showSuiteRelatedResultsModal = true;\n    }\n    suiteRelatedResultsModalClosed() {\n      this.showSuiteRelatedResultsModal = false;\n      this.selectedTestSummary = null;\n      this.selectedSuiteError = null;\n    }\n    showSuiteErrorRelatedResults(suiteError, testSummary) {\n      this.selectedSuiteError = suiteError;\n      this.selectedTestSummary = testSummary;\n      this.showSuiteRelatedResultsModal = true;\n    }\n    loadMoreTestSummaries(summary) {\n      (0, _object.set)(summary, 'isLoading', true);\n      const offset = summary.testSummaries.length;\n      const suiteSummary = this.args.model.suiteSummaries.filter(ss => ss.id === summary.id);\n      this.args.loadMoreTestSummaries(suiteSummary, offset, !!this.args.isBaseline);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedTestSummary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showSuiteRelatedResultsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedSuiteError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"errorOnlyToggle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"sortOrder\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'first';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"viewType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.viewType || 'assertion';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"suitesSummary\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"suitesSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"displayFilterBar\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"displayFilterBar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasDuration\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"hasDuration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filteredSuiteSummaries\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"filteredSuiteSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expandParentChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandParentChild\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expandChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandChild\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRelatedResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRelatedResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"suiteRelatedResultsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"suiteRelatedResultsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showSuiteErrorRelatedResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showSuiteErrorRelatedResults\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreTestSummaries\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreTestSummaries\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteSummariesSummaryComponent);\n});","define(\"@testable/shared-ui/components/suite-summaries-test-summary\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <tr class=\"suite-row\">\n    <td class={{if (not (and @overallModel.completed @testSummary.hasChildren)) \"p-l-24\" \"p-l-5\"}}>\n      {{#if (and @overallModel.completed (or @testSummary.hasChildren @hasTabs))}}\n        <a href=\"javascript:\" {{on \"click\" (fn @expand @testSummary)}} role=\"button\">\n          <Ui::Icon role=\"presentation\" class=\"m-r-5\" @icon={{if @testSummary.expanded \"fa-minus\" \"fa-plus\"}} />\n        </a>\n      {{/if}}\n      {{#if (and @overallModel.completed (not @isChild))}}\n        <a {{on \"click\" (fn @showRelatedResults @testSummary)}} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                                                        title=\"Find related results\" role=\"button\">\n          <Ui::Icon role=\"presentation\" @icon=\"fa fa-link m-r-10\"/>\n        </a>\n      {{/if}}\n      <span>{{html-safe (to-html @testSummary.suiteTest.name)}}</span>\n      <span class=\"pull-right\">\n        {{#if @testSummary.stateInProgress}}\n          <Ui::Icon @icon=\"fa fa-lg fa-spin fa-spinner\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                    title=\"Test Results In Progress\" class=\"m-r-15 \">\n            {{html-safe @testSummary.stateInProgress}}\n          </Ui::Icon>\n        {{/if}}\n        <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  title=\"Passed Test Results\" class=\"green m-r-15 \">\n          {{html-safe @testSummary.statePassed}}\n        </Ui::Icon>\n        <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                  title=\"Failed Test Results\" class=\"red m-r-15 \">\n          {{html-safe @testSummary.stateFailed}}\n        </Ui::Icon>\n        {{#if @testSummary.stateRetried}}\n          <Ui::Icon @icon=\"fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Retried Test Results\"\n                    class=\"m-r-15 \">\n            {{html-safe @testSummary.stateRetried}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if @testSummary.stateSkipped}}\n          <Ui::Icon @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                    title=\"Skipped Test Results\" class=\"m-r-15 \">\n            {{html-safe @testSummary.stateSkipped}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if @testSummary.stateNa}}\n          <Ui::Icon @icon=\"fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"N/A Test Results\"\n                    class=\"m-r-15 \">\n            {{html-safe @testSummary.stateNa}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if @hasDuration}}\n          <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Average Duration\"\n                    class=\"m-r-15 \">\n            {{html-safe @testSummary.durationMean}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if (and @testSummary.files (not-eq @testSummary.files @testSummary.images))}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Files Captured\"\n                    class=\"m-r-15 \">\n            {{html-safe @testSummary.files}}\n          </Ui::Icon>\n        {{/if}}\n        {{#if @testSummary.images}}\n          <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                    title=\"Images Captured\" class=\"m-r-15 \">\n            {{html-safe @testSummary.images}}\n          </Ui::Icon>\n        {{/if}}\n      </span>\n    </td>\n  </tr>\n  {{#if (and @isChild @testSummary.expanded)}}\n    <tr>\n      <td class=\"child-summary\">\n        <table class=\"table\">\n          <tbody>\n          {{#each @testSummary.children as |child|}}\n            <SuiteSummariesTestSummary\n              @testSummary={{child}}\n              @expand={{@expand}}\n              @overallModel={{@overallModel}}\n              @hasDuration={{@hasDuration}}\n              @isChild={{true}}\n              @showRelatedResults={{@showRelatedResults}}\n            />\n          {{else}}\n            <div class=\"p-t-10 p-b-10\">Loading Data...</div>\n          {{/each}}\n          </tbody>\n        </table>\n      </td>\n    </tr>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"tr\\\"],[14,0,\\\"suite-row\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"td\\\"],[15,0,[52,[28,[37,3],[[28,[37,4],[[30,1,[\\\"completed\\\"]],[30,2,[\\\"hasChildren\\\"]]],null]],null],\\\"p-l-24\\\",\\\"p-l-5\\\"]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,1,[\\\"completed\\\"]],[28,[37,5],[[30,2,[\\\"hasChildren\\\"]],[30,3]],null]],null],[[[1,\\\"      \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,4],[30,2]],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,9],[[24,\\\"role\\\",\\\"presentation\\\"],[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[[52,[30,2,[\\\"expanded\\\"]],\\\"fa-minus\\\",\\\"fa-plus\\\"]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,1,[\\\"completed\\\"]],[28,[37,3],[[30,5]],null]],null],[[[1,\\\"      \\\"],[11,3],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Find related results\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,6],[30,2]],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,9],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-link m-r-10\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,1],[12],[1,[28,[35,11],[[28,[37,12],[[30,2,[\\\"suiteTest\\\",\\\"name\\\"]]],null]],null]],[13],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"stateInProgress\\\"]],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Results In Progress\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spin fa-spinner\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"stateInProgress\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Passed Test Results\\\"],[24,0,\\\"green m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,11],[[30,2,[\\\"statePassed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Failed Test Results\\\"],[24,0,\\\"red m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,11],[[30,2,[\\\"stateFailed\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"stateRetried\\\"]],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Retried Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"stateRetried\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"stateSkipped\\\"]],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Skipped Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"stateSkipped\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"stateNa\\\"]],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"N/A Test Results\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"stateNa\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,7],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Average Duration\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"durationMean\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,4],[[30,2,[\\\"files\\\"]],[28,[37,13],[[30,2,[\\\"files\\\"]],[30,2,[\\\"images\\\"]]],null]],null],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Files Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"files\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"images\\\"]],[[[1,\\\"        \\\"],[8,[39,9],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[35,11],[[30,2,[\\\"images\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,5],[30,2,[\\\"expanded\\\"]]],null],[[[1,\\\"  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"td\\\"],[14,0,\\\"child-summary\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[30,2,[\\\"children\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,18],null,[[\\\"@testSummary\\\",\\\"@expand\\\",\\\"@overallModel\\\",\\\"@hasDuration\\\",\\\"@isChild\\\",\\\"@showRelatedResults\\\"],[[30,8],[30,4],[30,1],[30,7],true,[30,6]]],null],[1,\\\"\\\\n\\\"]],[8]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"p-t-10 p-b-10\\\"],[12],[1,\\\"Loading Data...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@overallModel\\\",\\\"@testSummary\\\",\\\"@hasTabs\\\",\\\"@expand\\\",\\\"@isChild\\\",\\\"@showRelatedResults\\\",\\\"@hasDuration\\\",\\\"child\\\"],[\\\"tr\\\",\\\"td\\\",\\\"if\\\",\\\"not\\\",\\\"and\\\",\\\"or\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"not-eq\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"suite-summaries-test-summary\\\",\\\"div\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-summaries-test-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"suite-summaries-test-summary\"));\n});","define(\"@testable/shared-ui/components/suite-summaries-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/suite-utils\", \"lodash-es\", \"ember-uuid\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _trackedBuiltIns, _suiteUtils, _lodashEs, _emberUuid, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/suite-utils\",0,\"lodash-es\",0,\"ember-uuid\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel block-sub-container\" data-sortable-id=\"suiteSummaries\" data-type=\"SuiteSummaries\">\n  <span {{did-update this.onSuiteSummaryChange @model.suiteSummaries}}></span>\n  <div class=\"panel-heading block-sub-container-target\">\n    {{#if (and @removePanel (not (or @minimalHeader @isViewer)))}}\n      <div class=\"panel-heading-btn\">\n        <a {{on \"click\" (fn this.removePanelAction \"suiteSummaries\" )}} class=\"btn btn-sm btn-icon btn-circle text-danger\"\n                                                      data-bs-toggle=\"tooltip\" title=\"Delete Panel\" role=\"button\">\n                                                      <Ui::Icon @icon=\"fa fa-times\" /></a>\n      </div>\n    {{/if}}\n    {{#unless @baselineExecution}}\n      <SuiteSummariesStats\n              @model={{@model}}\n              @scriptType={{@model.execution.script.scriptType}}\n              @showDownloadAssertionModal={{this.showDownloadAssertionModalAction}}\n      />\n    {{/unless}}\n  \n    <h4 class=\"panel-title\">\n      <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n         class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n         aria-controls=\"panelBody{{this.uuid}}\">\n         <Ui::Icon @icon=\"fa fa-minus \" /></a>\n  \n      <strong>Assertions{{#unless @model.isAll}}\n        - {{@model.regionDescription}}{{/unless}}</strong>\n      <Ui::InfoIcon\n              @content=\"For Webdriver.io scenarios that utilize a test framework like Mocha this widget\n            displays a summary of the test suite results including a listing of all suites, tests,\n            average duration, errors, etc. For JMeter and Gatling this will show assertion results.\"/>\n    </h4>\n    {{#unless @baselineExecution}}\n      <BsButtonGroup class=\"m-l-10 no-print\" @value={{this.viewType}} @type=\"radio\" @onChange={{this.setViewType}}\n                     as |bg|>\n        <bg.button @type=\"success\" @value=\"assertion\" @size=\"xs\">\n          By Suite {{#if @suiteSummariesLoaded}}({{this.displaySuiteSummaries.length}}){{/if}}\n        </bg.button>\n        <bg.button @type=\"success\" @value=\"error\" @size=\"xs\">\n          By Error {{#if @suiteSummariesLoaded}}({{@model.suiteErrors.length}}){{/if}}\n        </bg.button>\n      </BsButtonGroup>\n    {{/unless}}\n  </div>\n  \n  <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n    <div class=\"panel-body {{if @isPrint '' 'panel-500'}}\">\n    <div {{did-update this.updateTestSummariesData @model.suiteSummaries @model.executionRegion.id}}>\n      <SuiteSummariesSummary\n              @title=\"Current Test\"\n              @viewType={{this.viewType}}\n              @suiteSummariesLoaded={{@suiteSummariesLoaded}}\n              @model={{@model}}\n              @overallModel={{@overallModel}}\n              @byRegionId={{@byRegionId}}\n              @regionName={{@regionName}}\n              @displaySuiteSummaries={{this.displaySuiteSummaries}}\n              @isPrint={{@isPrint}}\n              @isViewer={{@isViewer}}\n              @showImageDetailsModal={{@showImageDetailsModal}}\n              @loadMoreTestSummaries={{this.loadMoreTestSummaries}}\n              @isComparison={{if @baselineExecution true}}\n              @showDownloadAssertionModal={{this.showDownloadAssertionModalAction}}\n      />\n    </div>\n    {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n      <div {{did-update this.onSuiteSummaryBaselineChange @regionSummaryBaseline.suiteSummaries}}\n           {{did-update this.updateBaselineTestSummariesData @regionSummaryBaseline.suiteSummaries @model.executionRegion.id}}>\n        <SuiteSummariesSummary\n                @title=\"Baseline Test\"\n                @viewType={{this.viewType}}\n                @suiteSummariesLoaded={{@suiteSummariesLoaded}}\n                @model={{@regionSummaryBaseline}}\n                @overallModel={{@baselineExecution}}\n                @byRegionId={{@byRegionBaselineId}}\n                @regionName={{@regionName}}\n                @isPrint={{@isPrint}}\n                @isViewer={{@isViewer}}\n                @displaySuiteSummaries={{this.displayBaselineSuiteSummaries}}\n                @isBaseline={{true}}\n                @loadMoreTestSummaries={{this.loadMoreTestSummaries}}\n                @isComparison={{true}}\n                @showDownloadAssertionModal={{fn this.showDownloadAssertionModalAction true}}\n        />\n      </div>\n    {{/if}}\n    </div>\n  </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"panel block-sub-container\\\"],[14,\\\"data-sortable-id\\\",\\\"suiteSummaries\\\"],[14,\\\"data-type\\\",\\\"SuiteSummaries\\\"],[12],[1,\\\"\\\\n\\\"],[11,1],[4,[38,2],[[30,0,[\\\"onSuiteSummaryChange\\\"]],[30,1,[\\\"suiteSummaries\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,2],[28,[37,5],[[28,[37,6],[[30,3],[30,4]],null]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n      \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"removePanelAction\\\"]],\\\"suiteSummaries\\\"],null]],null],[12],[1,\\\"\\\\n                                                    \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,5]],[[[1,\\\"    \\\"],[8,[39,12],null,[[\\\"@model\\\",\\\"@scriptType\\\",\\\"@showDownloadAssertionModal\\\"],[[30,1],[30,1,[\\\"execution\\\",\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"showDownloadAssertionModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[1,\\\"\\\\n       \\\"],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-minus \\\"]],null],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Assertions\\\"],[41,[51,[30,1,[\\\"isAll\\\"]]],[[[1,\\\"\\\\n      - \\\"],[1,[30,1,[\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n    \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"For Webdriver.io scenarios that utilize a test framework like Mocha this widget\\\\n          displays a summary of the test suite results including a listing of all suites, tests,\\\\n          average duration, errors, etc. For JMeter and Gatling this will show assertion results.\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,5]],[[[1,\\\"    \\\"],[8,[39,16],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"viewType\\\"]],\\\"radio\\\",[30,0,[\\\"setViewType\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"assertion\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        By Suite \\\"],[41,[30,7],[[[1,\\\"(\\\"],[1,[30,0,[\\\"displaySuiteSummaries\\\",\\\"length\\\"]]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,6,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"error\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        By Error \\\"],[41,[30,7],[[[1,\\\"(\\\"],[1,[30,1,[\\\"suiteErrors\\\",\\\"length\\\"]]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"panel-body \\\",[52,[30,8],\\\"\\\",\\\"panel-500\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[11,0],[4,[38,2],[[30,0,[\\\"updateTestSummariesData\\\"]],[30,1,[\\\"suiteSummaries\\\"]],[30,1,[\\\"executionRegion\\\",\\\"id\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[8,[39,17],null,[[\\\"@title\\\",\\\"@viewType\\\",\\\"@suiteSummariesLoaded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@displaySuiteSummaries\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@showImageDetailsModal\\\",\\\"@loadMoreTestSummaries\\\",\\\"@isComparison\\\",\\\"@showDownloadAssertionModal\\\"],[\\\"Current Test\\\",[30,0,[\\\"viewType\\\"]],[30,7],[30,1],[30,9],[30,10],[30,11],[30,0,[\\\"displaySuiteSummaries\\\"]],[30,8],[30,4],[30,12],[30,0,[\\\"loadMoreTestSummaries\\\"]],[52,[30,5],true],[30,0,[\\\"showDownloadAssertionModalAction\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,5],[28,[37,6],[[28,[37,18],[[30,11],\\\"ALL\\\"],null],[30,13]],null]],null],[[[1,\\\"    \\\"],[11,0],[4,[38,2],[[30,0,[\\\"onSuiteSummaryBaselineChange\\\"]],[30,14,[\\\"suiteSummaries\\\"]]],null],[4,[38,2],[[30,0,[\\\"updateBaselineTestSummariesData\\\"]],[30,14,[\\\"suiteSummaries\\\"]],[30,1,[\\\"executionRegion\\\",\\\"id\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,17],null,[[\\\"@title\\\",\\\"@viewType\\\",\\\"@suiteSummariesLoaded\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@isPrint\\\",\\\"@isViewer\\\",\\\"@displaySuiteSummaries\\\",\\\"@isBaseline\\\",\\\"@loadMoreTestSummaries\\\",\\\"@isComparison\\\",\\\"@showDownloadAssertionModal\\\"],[\\\"Baseline Test\\\",[30,0,[\\\"viewType\\\"]],[30,7],[30,14],[30,5],[30,15],[30,11],[30,8],[30,4],[30,0,[\\\"displayBaselineSuiteSummaries\\\"]],true,[30,0,[\\\"loadMoreTestSummaries\\\"]],true,[28,[37,9],[[30,0,[\\\"showDownloadAssertionModalAction\\\"]],true],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@removePanel\\\",\\\"@minimalHeader\\\",\\\"@isViewer\\\",\\\"@baselineExecution\\\",\\\"bg\\\",\\\"@suiteSummariesLoaded\\\",\\\"@isPrint\\\",\\\"@overallModel\\\",\\\"@byRegionId\\\",\\\"@regionName\\\",\\\"@showImageDetailsModal\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@byRegionBaselineId\\\"],[\\\"div\\\",\\\"span\\\",\\\"did-update\\\",\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"or\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"suite-summaries-stats\\\",\\\"h4\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"bs-button-group\\\",\\\"suite-summaries-summary\\\",\\\"eq\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-summaries-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  function toSuiteSummaries(modelSuiteSummaries, isBaseline = null) {\n    return new _trackedBuiltIns.TrackedArray(_lodashEs.default.map(modelSuiteSummaries, function (suiteSummary) {\n      _suiteUtils.default.addPercentsToSummary(suiteSummary);\n      const comparisons = isBaseline ? {} : _suiteUtils.default.toChangeSummaryComparison(suiteSummary, suiteSummary.comparisons);\n      return _suiteUtils.default.toDisplaySummary(suiteSummary, comparisons, isBaseline);\n    }));\n  }\n  function updateSuiteSummary(suiteSummaries, currentSuiteSummaries) {\n    const newSuiteSummaries = toSuiteSummaries(suiteSummaries);\n    _lodashEs.default.forEach(newSuiteSummaries, function (newSuiteSummary) {\n      let currentSuiteSummary = _lodashEs.default.find(currentSuiteSummaries, function (candidate) {\n        return candidate.suiteId === newSuiteSummary.suiteId;\n      });\n      if (!currentSuiteSummary) {\n        currentSuiteSummaries?.push(newSuiteSummary);\n      } else {\n        const newTestSummaries = newSuiteSummary.testSummaries;\n        delete newSuiteSummary['testSummaries'];\n        const currentTestSummaries = currentSuiteSummary.testSummaries;\n        (0, _object.setProperties)(currentSuiteSummary, newSuiteSummary);\n        _lodashEs.default.forEach(newTestSummaries, function (newTestSummary) {\n          let currentTestSummary = _lodashEs.default.find(currentTestSummaries, function (candidate) {\n            return candidate.suiteTestId === newTestSummary.suiteTestId;\n          });\n          if (!currentTestSummary) {\n            currentTestSummaries.push(newTestSummary);\n            newSuiteSummary.showLoadMore = _suiteUtils.default.showLoadMoreButton(currentTestSummaries, newSuiteSummary.testSummaryCount);\n          } else {\n            (0, _object.setProperties)(currentTestSummary, newTestSummary);\n          }\n        });\n      }\n    });\n  }\n  let SuiteSummariesWidget = _exports.default = (_class = class SuiteSummariesWidget extends _component2.default {\n    get regionId() {\n      return this.args.model?.executionRegion?.id;\n    }\n    get modelUuid() {\n      return this.args.overallModel?.uuid;\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"viewType\", _descriptor, this);\n      _initializerDefineProperty(this, \"displaySuiteSummaries\", _descriptor2, this);\n      _initializerDefineProperty(this, \"displayBaselineSuiteSummaries\", _descriptor3, this);\n      const suiteSummaries = this.args.model?.suiteSummaries;\n      const baselineSuiteSummaries = this.args.regionSummaryBaseline?.suiteSummaries;\n      this.displaySuiteSummaries = toSuiteSummaries(suiteSummaries);\n      this.loadTestSummariesData(suiteSummaries);\n      if (baselineSuiteSummaries) {\n        this.displayBaselineSuiteSummaries = toSuiteSummaries(baselineSuiteSummaries, true);\n        this.loadTestSummariesData(baselineSuiteSummaries, 0, true);\n      }\n    }\n    onSuiteSummaryChange() {\n      updateSuiteSummary(this.args.model?.suiteSummaries, this.displaySuiteSummaries);\n    }\n    onSuiteSummaryBaselineChange() {\n      updateSuiteSummary(this.args.regionSummaryBaseline?.suiteSummaries, this.displayBaselineSuiteSummaries);\n    }\n    removePanelAction(widgetId) {\n      this.args.removePanel(widgetId);\n    }\n    showDownloadAssertionModalAction(isBaseline = false) {\n      if (this.args.showDownloadAssertionModal) {\n        this.args.showDownloadAssertionModal(isBaseline);\n      }\n    }\n    updateTestSummariesData(dom, [suiteSummaries]) {\n      this.loadTestSummariesData(suiteSummaries, 0, false);\n    }\n    updateBaselineTestSummariesData(dom, [suiteSummaries]) {\n      this.loadTestSummariesData(suiteSummaries, 0, true);\n    }\n    loadMoreTestSummaries(summaries, offset, isBaseline = false) {\n      this.loadTestSummariesData(summaries, offset, isBaseline);\n    }\n    setViewType(value) {\n      this.viewType = value;\n    }\n    loadTestSummariesData(suiteSummaries, offset = 0, isBaseline = false) {\n      const executionRegionId = this.regionId;\n      const isAll = executionRegionId == 'ALL';\n      const params = {\n        suiteTestSummaries: true,\n        limit: _suiteUtils.default.maxTests,\n        offset\n      };\n      if (!isAll) params.executionRegionId = executionRegionId;\n      _lodashEs.default.forEach(suiteSummaries, suiteSummary => {\n        const {\n          executionId,\n          suite\n        } = suiteSummary;\n        if (suite?.id) {\n          let response;\n          if (this.modelUuid) {\n            params.suiteId = suite.id;\n            response = _server.default.getTokenContent(this.modelUuid, params);\n          } else {\n            response = isAll ? _server.default.getLoadTestExecutionSuiteRelatedTests(executionId, suite.id, _suiteUtils.default.maxTests, offset) : _server.default.getLoadTestExecutionRegionSuiteRelatedTests(executionId, suite.id, executionRegionId, _suiteUtils.default.maxTests, offset);\n          }\n          response.then(result => {\n            const existingTestSummaries = suiteSummary.testSummaries || [];\n            const updatedData = result.filter(dt => !existingTestSummaries.some(existing => existing.id === dt.id));\n            const allTestSummaries = existingTestSummaries.concat(updatedData);\n            (0, _object.set)(suiteSummary, 'testSummaries', allTestSummaries);\n            if (isBaseline) {\n              updateSuiteSummary([suiteSummary], this.displayBaselineSuiteSummaries);\n            } else {\n              updateSuiteSummary([suiteSummary], this.displaySuiteSummaries);\n            }\n          });\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"viewType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'assertion';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"displaySuiteSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"displayBaselineSuiteSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSuiteSummaryChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSuiteSummaryChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSuiteSummaryBaselineChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSuiteSummaryBaselineChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDownloadAssertionModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDownloadAssertionModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTestSummariesData\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTestSummariesData\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBaselineTestSummariesData\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBaselineTestSummariesData\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreTestSummaries\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreTestSummaries\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setViewType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setViewType\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteSummariesWidget);\n});","define(\"@testable/shared-ui/components/suite-summary-header\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel-heading-btn has-stats\" ...attributes>\n    {{#unless @hideStats}}\n      {{#if (and @hasDuration @suitesSummary.duration)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-clock\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Duration\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.duration}}ms\n        </Ui::Icon>\n      {{/if}}\n      <Ui::Icon @icon=\"fa fa-lg fa-copy\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Test Suites\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.suites}}\n      </Ui::Icon>\n      <Ui::Icon @icon=\"fa fa-lg fa-tasks\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Total Tests\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.tests}}\n      </Ui::Icon>\n      {{#if (gt @suitesSummary.pending 0)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-spinner\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests In Progress\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.pending}}\n        </Ui::Icon>\n      {{/if}}\n      <Ui::Icon @icon=\"fa fa-lg fa-check-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Passed\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.passed}}\n      </Ui::Icon>\n      <Ui::Icon @icon=\"fa fa-lg fa-times-circle\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Failed\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.failed}}\n      </Ui::Icon>\n      {{#if (gt @suitesSummary.skipped 0)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-angle-double-right\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests Skipped\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.skipped}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if (gt @suitesSummary.na 0)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-question\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tests N/5 \">\n        {{print-number @suitesSummary.na}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if (gt @suitesSummary.retried 0)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-redo\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Test Retries\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.retried}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if (and (gt @suitesSummary.files 0) (not-eq @suitesSummary.files @suitesSummary.images))}}\n        <Ui::Icon @icon=\"fa fa-lg fa-file\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Files Captured\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.files}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if (gt @suitesSummary.images 0)}}\n        <Ui::Icon @icon=\"fa fa-lg fa-file-image\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Images Captured\" class=\"m-r-15 \">\n          {{print-number @suitesSummary.images}}\n        </Ui::Icon>\n      {{/if}}\n      {{#if @openSuiteSummaryDownloadUrl}}\n        <a href=\"javascript:\" {{on \"click\" @openSuiteSummaryDownloadUrl}} class=\"hide-icon btn btn-sm btn-icon btn-circle text-primary\"\n           data-bs-toggle=\"tooltip\" title=\"Export test framework results to CSV\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n      {{/if}}\n    {{/unless}}\n    {{#if (and @removePanel @isRemovable (not @isViewer))}}\n      <a {{on \"click\" (fn @removePanel \"suiteSummaries\")}} class=\"hide-icon btn btn-sm btn-icon btn-circle text-danger\"\n                                                           data-bs-toggle=\"tooltip\"\n                                                           title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"panel-heading-btn has-stats\\\"],[17,1],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[41,[28,[37,3],[[30,3],[30,4,[\\\"duration\\\"]]],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Duration\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-clock\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"duration\\\"]]],null]],[1,\\\"ms\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Test Suites\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-copy\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"suites\\\"]]],null]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Total Tests\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-tasks\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"tests\\\"]]],null]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,4,[\\\"pending\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests In Progress\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-spinner\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"pending\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Passed\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-check-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"passed\\\"]]],null]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Failed\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-times-circle\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"failed\\\"]]],null]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,6],[[30,4,[\\\"skipped\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests Skipped\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-angle-double-right\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"skipped\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,4,[\\\"na\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Tests N/5 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-question\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[28,[35,5],[[30,4,[\\\"na\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,4,[\\\"retried\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Test Retries\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-redo\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"retried\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[28,[37,6],[[30,4,[\\\"files\\\"]],0],null],[28,[37,7],[[30,4,[\\\"files\\\"]],[30,4,[\\\"images\\\"]]],null]],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Files Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"files\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,6],[[30,4,[\\\"images\\\"]],0],null],[[[1,\\\"      \\\"],[8,[39,4],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Images Captured\\\"],[24,0,\\\"m-r-15 \\\"]],[[\\\"@icon\\\"],[\\\"fa fa-lg fa-file-image\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,5],[[30,4,[\\\"images\\\"]]],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,5],[[[1,\\\"      \\\"],[11,3],[24,6,\\\"javascript:\\\"],[24,0,\\\"hide-icon btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Export test framework results to CSV\\\"],[4,[38,9],[\\\"click\\\",[30,5]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[41,[28,[37,3],[[30,6],[30,7],[28,[37,10],[[30,8]],null]],null],[[[1,\\\"    \\\"],[11,3],[24,0,\\\"hide-icon btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,11],[[30,6],\\\"suiteSummaries\\\"],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@hideStats\\\",\\\"@hasDuration\\\",\\\"@suitesSummary\\\",\\\"@openSuiteSummaryDownloadUrl\\\",\\\"@removePanel\\\",\\\"@isRemovable\\\",\\\"@isViewer\\\"],[\\\"div\\\",\\\"unless\\\",\\\"if\\\",\\\"and\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"gt\\\",\\\"not-eq\\\",\\\"a\\\",\\\"on\\\",\\\"not\\\",\\\"fn\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-summary-header.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"suite-summary-header\"));\n});","define(\"@testable/shared-ui/components/suite-test-results\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"ember-uuid\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _emberUuid, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"steps {{unless this.showExpandIcon \"p-l-16\"}}\"\n    {{did-insert this.handleTriggerCollapse}}\n    {{did-update this.removeAllKeys @runInProgress}}\n  >\n    {{#if this.showExpandIcon}}\n      <a role=\"button\" class=\"m-r-2 collapse-icon\" {{on \"click\" this.handleCollapse}}>\n        <Ui::Icon @noRender={{@runInProgress}} class=\"stats-icon\" role=\"presentation\" @icon=\"fa fa-{{this.collapseIcon}}\" />\n      </a>\n    {{/if}}\n    {{#if (eq @testResult.state 'Passed')}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"green fa fa-2x fa-check-circle\" />\n    {{else if (eq @testResult.state 'Failed')}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"red fa fa-2x fa-times-circle\" />\n    {{else if (eq @testResult.state 'Skipped')}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-2x fa-angle-double-right\" />\n    {{else if (eq @testResult.state 'NA')}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-2x fa-question\" />\n    {{else if (eq @testResult.state 'Retried')}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-2x fa-redo\" />\n    {{else}}\n      <Ui::Icon @noRender={{@runInProgress}} @icon=\"fa fa-2x fa-spinner fa-spin\" />\n    {{/if}}\n    <span class=\"m-l-10 suite-test-title\">\n      {{this.suiteTestName}}\n  \n      {{#each @testResult.annotations as |annotation|}}\n        {{#if (eq annotation.annotationType \"tag\")}}\n          <span class=\"m-l-10 tags lh-2rem\">{{annotation.description}}</span>\n        {{/if}}\n      {{/each}}\n    </span>\n    {{#if (and @hasDuration @testResult.duration)}}\n      <span class=\"pull-right\">\n        <span data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Duration\">{{print-number\n                  @testResult.duration}}ms<Ui::Icon @noRender={{@runInProgress}} @icon=\"m-l-5 fa fa-lg fa-clock\" /></span>\n      </span>\n    {{/if}}\n  </div>\n  {{#if this.showExpand}}\n    <div id={{this.resultUuid}} class=\"collapse suite-test-results\">\n      {{#unless @isChild}}\n        <ul class=\"nav nav-pills\">\n          {{#if this.hasChildren}}\n            <li class=\"nav-items\">\n              <a\n                role=\"button\"\n                data-bs-toggle=\"tab\"\n                {{on \"click\" (fn this.updateActiveTab \"steps\")}}\n                class=\"btn nav-link {{this.getActiveClass \"steps\" this}}\">\n                Steps\n              </a>\n            </li>\n          {{/if}}\n          {{#if this.hasError}}\n            <li class=\"nav-items\">\n              <a\n                role=\"button\"\n                data-bs-toggle=\"tab\"\n                {{on \"click\" (fn this.updateActiveTab \"error\")}}\n                class=\"btn nav-link {{this.getActiveClass \"error\" this}}\">\n                Error\n              </a>\n            </li>\n          {{/if}}\n          {{#if this.hasScreenshots}}\n            <li class=\"nav-items\">\n              <a\n                role=\"button\"\n                data-bs-toggle=\"tab\"\n                {{on \"click\" (fn this.updateActiveTab \"screenshots\")}}\n                class=\"btn nav-link {{this.getActiveClass \"screenshots\" this}}\">\n                Screenshots\n              </a>\n            </li>\n          {{/if}}\n          {{#if this.hasAnnotations}}\n            <li class=\"nav-items\">\n              <a\n                role=\"button\"\n                data-bs-toggle=\"tab\"\n                {{on \"click\" (fn this.updateActiveTab \"annotations\")}}\n                class=\"btn nav-link {{this.getActiveClass \"annotations\" this}}\">\n                Annotations\n              </a>\n            </li>\n          {{/if}}\n          {{#if this.hasAttachments}}\n            <li class=\"nav-items\">\n              <a\n                role=\"button\"\n                data-bs-toggle=\"tab\"\n                {{on \"click\" (fn this.updateActiveTab \"attachments\")}}\n                class=\"btn nav-link {{this.getActiveClass \"attachments\" this}}\">\n                Attachments\n              </a>\n            </li>\n          {{/if}}\n        </ul>\n  \n        <div class=\"tab-content\">\n          {{#if @testResult.annotations}}\n            <div class=\"tab-pane fade {{if (eq this.activeTab \"annotations\") \"active show\"}} p-5\">\n              {{#each @testResult.annotations as |annotation|}}\n                {{#if (not-eq annotation.annotationType \"tag\")}}\n                  <div><b>{{annotation.annotationType}}</b>: {{annotation.description}}</div>\n                {{/if}}\n              {{/each}}\n            </div>\n          {{/if}}\n  \n          {{#if @testResult.error}}\n            <div class=\"tab-pane fade {{if (eq this.activeTab \"error\") \"active show\"}} p-5\">\n              <pre class=\"bg-grey\">{{#if @testResult.errorType}}{{@testResult.errorType}}: {{/if}}{{ansi-to-html @testResult.error (eq @scriptType 'Playwright')}}</pre>\n              {{#if @testResult.errorTrace}}\n                <pre class=\"m-t-10 bg-grey\">{{ansi-to-html @testResult.errorTrace (eq @scriptType 'Playwright')}}</pre>\n              {{/if}}\n            </div>\n          {{/if}}\n  \n          {{#if (gt @testResult.screenshots.length 0)}}\n            <div\n              class=\"gallery suite-images gallery-thumbnail {{this.screenshotClasses}} p-5\"\n              {{did-insert @onloadImages}}\n            >\n              {{#each @testResult.screenshots as |screenshot|}}\n                {{#if (this.showScreenshots this screenshot)}}\n                  {{#unless screenshot.hasMorePackets}}\n                    {{#if (and (not screenshot.dataUri) (eq this.activeTab \"attachments\")) }}\n                      <a href=\"{{add-auth-to-url screenshot.url}}\" class=\"m-r-5 position-relative\">\n                        <img src=\"{{add-auth-to-url screenshot.thumbnailUrl}}\" alt=\"\" role=\"none\">\n                        <span class=\"position-absolute image-name\">{{screenshot.name}}</span>\n                      </a>\n                    {{else}}\n                      <div class=\"image gallery-images\">\n                        <div class=\"image-inner\">\n                          {{#if screenshot.dataUri}}\n                            {{#if (eq this.activeTab \"attachments\")}}\n                              <a href=\"#screenshot-text-{{screenshot.uuid}}\"\n                                data-fancybox=\"suite-screenshots\"\n                                data-type=\"inline\"\n                                data-title={{screenshot.name}}\n                                class=\"m-r-5 position-relative\">\n                                  <Ui::Icon @icon=\"fa-file fa-lg\" />\n                                  <div class=\"\">{{screenshot.name}}</div>\n                              </a>\n  \n                              <div id=\"screenshot-text-{{screenshot.uuid}}\" style={{html-safe \"display:none\"}}>\n                                <pre>{{this.decodedText screenshot}}</pre>\n                              </div>\n                            {{else}}\n                              <a href=\"{{screenshot.dataUri}}\" data-fancybox=\"suite-screenshots\"\n                                data-title=\"{{screenshot.name}}\" class=\"m-r-5\">\n                                <img src=\"{{screenshot.dataUri}}\" alt=\"\" role=\"none\">\n                              </a>\n                            {{/if}}\n                          {{else}}\n                            <a href=\"{{add-auth-to-url screenshot.viewUrl}}\" data-fancybox=\"suite-screenshots\"\n                              data-title=\"{{screenshot.name}}\" class=\"m-r-5\">\n                              <img src=\"{{add-auth-to-url screenshot.viewUrl}}\" alt=\"\" role=\"none\">\n                            </a>\n                          {{/if}}\n                        </div>\n                      </div>\n                    {{/if}}\n                  {{/unless}}\n                {{/if}}\n              {{/each}}\n            </div>\n          {{else}}\n            <span {{did-insert @onloadImages}}></span>\n          {{/if}}\n        </div>\n      {{/unless}}\n      {{#if this.loadingChild}}\n        Loading data...\n      {{/if}}\n      {{#each this.childResults as |testResultItem|}}\n        <div class=\"tab-content\">\n          <div class=\"tab-pane fade {{if (eq this.activeTab \"steps\") \"active show\"}}\">\n            <SuiteTestResults\n              @testResult={{testResultItem}}\n              @isSmokeTest={{@isSmokeTest}}\n              @isComparison={{@isComparison}}\n              @hasDuration={{@hasDuration}}\n              @onloadImages={{@onloadImages}}\n              @scriptType={{@scriptType}}\n              @runInProgress={{@runInProgress}}\n              @isChild={{true}}\n              @uuid={{@uuid}}\n              @filterResults={{@filterResults}}\n            />\n          </div>\n        </div>\n      {{/each}}\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"steps \\\",[52,[51,[30,0,[\\\"showExpandIcon\\\"]]],\\\"p-l-16\\\"]]]],[4,[38,2],[[30,0,[\\\"handleTriggerCollapse\\\"]]],null],[4,[38,3],[[30,0,[\\\"removeAllKeys\\\"]],[30,1]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showExpandIcon\\\"]],[[[1,\\\"    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"m-r-2 collapse-icon\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"handleCollapse\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,7],[[24,0,\\\"stats-icon\\\"],[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],[29,[\\\"fa fa-\\\",[30,0,[\\\"collapseIcon\\\"]]]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,8],[[30,2,[\\\"state\\\"]],\\\"Passed\\\"],null],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"green fa fa-2x fa-check-circle\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,2,[\\\"state\\\"]],\\\"Failed\\\"],null],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"red fa fa-2x fa-times-circle\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,2,[\\\"state\\\"]],\\\"Skipped\\\"],null],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"fa fa-2x fa-angle-double-right\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,2,[\\\"state\\\"]],\\\"NA\\\"],null],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"fa fa-2x fa-question\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,2,[\\\"state\\\"]],\\\"Retried\\\"],null],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"fa fa-2x fa-redo\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"fa fa-2x fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n  \\\"]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"  \\\"],[10,1],[14,0,\\\"m-l-10 suite-test-title\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[30,0,[\\\"suiteTestName\\\"]]],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,2,[\\\"annotations\\\"]]],null]],null],null,[[[41,[28,[37,8],[[30,3,[\\\"annotationType\\\"]],\\\"tag\\\"],null],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"m-l-10 tags lh-2rem\\\"],[12],[1,[30,3,[\\\"description\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[3]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,4],[30,2,[\\\"duration\\\"]]],null],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"title\\\",\\\"Duration\\\"],[12],[1,[28,[35,13],[[30,2,[\\\"duration\\\"]]],null]],[1,\\\"ms\\\"],[8,[39,7],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[[30,1],\\\"m-l-5 fa fa-lg fa-clock\\\"]],null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showExpand\\\"]],[[[1,\\\"  \\\"],[10,0],[15,1,[30,0,[\\\"resultUuid\\\"]]],[14,0,\\\"collapse suite-test-results\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,5]],[[[1,\\\"      \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasChildren\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[16,0,[29,[\\\"btn nav-link \\\",[28,[30,0,[\\\"getActiveClass\\\"]],[\\\"steps\\\",[30,0]],null]]]],[4,[38,6],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"updateActiveTab\\\"]],\\\"steps\\\"],null]],null],[12],[1,\\\"\\\\n              Steps\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasError\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[16,0,[29,[\\\"btn nav-link \\\",[28,[30,0,[\\\"getActiveClass\\\"]],[\\\"error\\\",[30,0]],null]]]],[4,[38,6],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"updateActiveTab\\\"]],\\\"error\\\"],null]],null],[12],[1,\\\"\\\\n              Error\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasScreenshots\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[16,0,[29,[\\\"btn nav-link \\\",[28,[30,0,[\\\"getActiveClass\\\"]],[\\\"screenshots\\\",[30,0]],null]]]],[4,[38,6],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"updateActiveTab\\\"]],\\\"screenshots\\\"],null]],null],[12],[1,\\\"\\\\n              Screenshots\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasAnnotations\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[16,0,[29,[\\\"btn nav-link \\\",[28,[30,0,[\\\"getActiveClass\\\"]],[\\\"annotations\\\",[30,0]],null]]]],[4,[38,6],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"updateActiveTab\\\"]],\\\"annotations\\\"],null]],null],[12],[1,\\\"\\\\n              Annotations\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasAttachments\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tab\\\"],[16,0,[29,[\\\"btn nav-link \\\",[28,[30,0,[\\\"getActiveClass\\\"]],[\\\"attachments\\\",[30,0]],null]]]],[4,[38,6],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"updateActiveTab\\\"]],\\\"attachments\\\"],null]],null],[12],[1,\\\"\\\\n              Attachments\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"tab-content\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"annotations\\\"]],[[[1,\\\"          \\\"],[10,0],[15,0,[29,[\\\"tab-pane fade \\\",[52,[28,[37,8],[[30,0,[\\\"activeTab\\\"]],\\\"annotations\\\"],null],\\\"active show\\\"],\\\" p-5\\\"]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,2,[\\\"annotations\\\"]]],null]],null],null,[[[41,[28,[37,17],[[30,6,[\\\"annotationType\\\"]],\\\"tag\\\"],null],[[[1,\\\"                \\\"],[10,0],[12],[10,\\\"b\\\"],[12],[1,[30,6,[\\\"annotationType\\\"]]],[13],[1,\\\": \\\"],[1,[30,6,[\\\"description\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[6]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"error\\\"]],[[[1,\\\"          \\\"],[10,0],[15,0,[29,[\\\"tab-pane fade \\\",[52,[28,[37,8],[[30,0,[\\\"activeTab\\\"]],\\\"error\\\"],null],\\\"active show\\\"],\\\" p-5\\\"]]],[12],[1,\\\"\\\\n            \\\"],[10,\\\"pre\\\"],[14,0,\\\"bg-grey\\\"],[12],[41,[30,2,[\\\"errorType\\\"]],[[[1,[30,2,[\\\"errorType\\\"]]],[1,\\\": \\\"]],[]],null],[1,[28,[35,20],[[30,2,[\\\"error\\\"]],[28,[37,8],[[30,7],\\\"Playwright\\\"],null]],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"errorTrace\\\"]],[[[1,\\\"              \\\"],[10,\\\"pre\\\"],[14,0,\\\"m-t-10 bg-grey\\\"],[12],[1,[28,[35,20],[[30,2,[\\\"errorTrace\\\"]],[28,[37,8],[[30,7],\\\"Playwright\\\"],null]],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,2,[\\\"screenshots\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[11,0],[16,0,[29,[\\\"gallery suite-images gallery-thumbnail \\\",[30,0,[\\\"screenshotClasses\\\"]],\\\" p-5\\\"]]],[4,[38,2],[[30,8]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,2,[\\\"screenshots\\\"]]],null]],null],null,[[[41,[28,[30,0,[\\\"showScreenshots\\\"]],[[30,0],[30,9]],null],[[[41,[51,[30,9,[\\\"hasMorePackets\\\"]]],[[[41,[28,[37,12],[[28,[37,22],[[30,9,[\\\"dataUri\\\"]]],null],[28,[37,8],[[30,0,[\\\"activeTab\\\"]],\\\"attachments\\\"],null]],null],[[[1,\\\"                    \\\"],[10,3],[15,6,[29,[[28,[37,23],[[30,9,[\\\"url\\\"]]],null]]]],[14,0,\\\"m-r-5 position-relative\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[28,[37,23],[[30,9,[\\\"thumbnailUrl\\\"]]],null]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                      \\\"],[10,1],[14,0,\\\"position-absolute image-name\\\"],[12],[1,[30,9,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"image gallery-images\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,9,[\\\"dataUri\\\"]],[[[41,[28,[37,8],[[30,0,[\\\"activeTab\\\"]],\\\"attachments\\\"],null],[[[1,\\\"                            \\\"],[10,3],[15,6,[29,[\\\"#screenshot-text-\\\",[30,9,[\\\"uuid\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"suite-screenshots\\\"],[14,\\\"data-type\\\",\\\"inline\\\"],[15,\\\"data-title\\\",[30,9,[\\\"name\\\"]]],[14,0,\\\"m-r-5 position-relative\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa-file fa-lg\\\"]],null],[1,\\\"\\\\n                                \\\"],[10,0],[14,0,\\\"\\\"],[12],[1,[30,9,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\\n                            \\\"],[10,0],[15,1,[29,[\\\"screenshot-text-\\\",[30,9,[\\\"uuid\\\"]]]]],[15,5,[28,[37,25],[\\\"display:none\\\"],null]],[12],[1,\\\"\\\\n                              \\\"],[10,\\\"pre\\\"],[12],[1,[28,[30,0,[\\\"decodedText\\\"]],[[30,9]],null]],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                            \\\"],[10,3],[15,6,[29,[[30,9,[\\\"dataUri\\\"]]]]],[14,\\\"data-fancybox\\\",\\\"suite-screenshots\\\"],[15,\\\"data-title\\\",[29,[[30,9,[\\\"name\\\"]]]]],[14,0,\\\"m-r-5\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,9,[\\\"dataUri\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"                          \\\"],[10,3],[15,6,[29,[[28,[37,23],[[30,9,[\\\"viewUrl\\\"]]],null]]]],[14,\\\"data-fancybox\\\",\\\"suite-screenshots\\\"],[15,\\\"data-title\\\",[29,[[30,9,[\\\"name\\\"]]]]],[14,0,\\\"m-r-5\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[28,[37,23],[[30,9,[\\\"viewUrl\\\"]]],null]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null]],[]],null]],[9]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[11,1],[4,[38,2],[[30,8]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"loadingChild\\\"]],[[[1,\\\"      Loading data...\\\\n\\\"]],[]],null],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"childResults\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,0],[14,0,\\\"tab-content\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[\\\"tab-pane fade \\\",[52,[28,[37,8],[[30,0,[\\\"activeTab\\\"]],\\\"steps\\\"],null],\\\"active show\\\"]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,26],null,[[\\\"@testResult\\\",\\\"@isSmokeTest\\\",\\\"@isComparison\\\",\\\"@hasDuration\\\",\\\"@onloadImages\\\",\\\"@scriptType\\\",\\\"@runInProgress\\\",\\\"@isChild\\\",\\\"@uuid\\\",\\\"@filterResults\\\"],[[30,10],[30,11],[30,12],[30,4],[30,8],[30,7],[30,1],true,[30,13],[30,14]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[10]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@runInProgress\\\",\\\"@testResult\\\",\\\"annotation\\\",\\\"@hasDuration\\\",\\\"@isChild\\\",\\\"annotation\\\",\\\"@scriptType\\\",\\\"@onloadImages\\\",\\\"screenshot\\\",\\\"testResultItem\\\",\\\"@isSmokeTest\\\",\\\"@isComparison\\\",\\\"@uuid\\\",\\\"@filterResults\\\"],[\\\"div\\\",\\\"unless\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"if\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"eq\\\",\\\"span\\\",\\\"each\\\",\\\"-track-array\\\",\\\"and\\\",\\\"print-number\\\",\\\"ul\\\",\\\"li\\\",\\\"fn\\\",\\\"not-eq\\\",\\\"b\\\",\\\"pre\\\",\\\"ansi-to-html\\\",\\\"gt\\\",\\\"not\\\",\\\"add-auth-to-url\\\",\\\"img\\\",\\\"html-safe\\\",\\\"suite-test-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/suite-test-results.hbs\",\n    \"isStrictMode\": false\n  });\n  const ANIMATION_DURATION = 350;\n  let SuiteTestResultsComponent = _exports.default = (_class = class SuiteTestResultsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"showBody\", _descriptor2, this);\n      _initializerDefineProperty(this, \"index\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showTabs\", _descriptor4, this);\n      _initializerDefineProperty(this, \"activeTab\", _descriptor5, this);\n      _initializerDefineProperty(this, \"collapseIcon\", _descriptor6, this);\n      _initializerDefineProperty(this, \"children\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loadingChild\", _descriptor8, this);\n      let activeTab = this.getActiveTab();\n      if (!this.args.isChild) {\n        const storageActiveTab = window.localStorage.getItem(`${this.resultUuid}--active-tab`);\n        if (storageActiveTab) activeTab = storageActiveTab;\n      }\n      this.activeTab = activeTab;\n    }\n    getActiveTab() {\n      let activeTab = '';\n      if (this.hasChildren) {\n        activeTab = 'steps';\n      } else if (this.hasError) {\n        activeTab = 'error';\n      } else if (this.hasScreenshots) {\n        activeTab = 'screenshots';\n      } else if (this.hasAnnotations) {\n        activeTab = 'annotations';\n      } else if (this.hasAttachments) {\n        activeTab = 'attachments';\n      }\n      return activeTab;\n    }\n    decodedText(screenshot) {\n      const dataUri = screenshot.dataUri;\n      if (!dataUri) return '';\n      const base64 = dataUri.split(',')[1];\n      try {\n        return atob(base64);\n      } catch (e) {\n        return 'Error decoding text';\n      }\n    }\n    getActiveClass(selected, self) {\n      let classes = [];\n      if (self.activeTab === selected) {\n        classes.push('active');\n      }\n      return classes.join(' ');\n    }\n    get screenshotClasses() {\n      const classes = ['tab-pane', 'fade'];\n      if (this.activeTab === 'attachments' || this.activeTab === 'screenshots') {\n        classes.push('active', 'show');\n      }\n      if (this.args.isComparison === 'baseline') {\n        classes.push('baseline');\n      }\n      return classes.join(' ');\n    }\n    get suiteTestName() {\n      let suiteTestName = this.testResult.suiteTest.name;\n      if (this.testResult.parentUuid) {\n        const lastPipeIndex = suiteTestName.lastIndexOf('|');\n        const rawName = lastPipeIndex !== -1 ? suiteTestName.substring(lastPipeIndex + 1).trim() : suiteTestName.trim();\n        const decodedName = rawName.replace(/%7C/gi, '|');\n        return decodedName;\n      }\n      return suiteTestName;\n    }\n    get testResult() {\n      return this.args.testResult;\n    }\n    get childResults() {\n      let filteredChildren = this.testResult.uuid ? this.testResult.children || [] : this.children;\n      if (this.args.filterResults === 'errors') {\n        filteredChildren = filteredChildren.filter(child => child.errorType);\n      }\n      return filteredChildren;\n    }\n    get resultUuid() {\n      return `suite-test-result_${this.testResult.uuid || this.testResult.id || this.uniqueId}`;\n    }\n    get hasChildren() {\n      return this.childResults.length || this.testResult.hasChildren;\n    }\n    get showExpandIcon() {\n      return this.showExpand && (this.args.isSmokeTest || !this.args.runInProgress);\n    }\n    get showExpand() {\n      return this.args.isChild ? this.hasChildren : !!this.activeTab;\n    }\n    get isSmokeTestRunning() {\n      return this.args.runInProgress && this.args.isSmokeTest;\n    }\n    get hasError() {\n      return this.testResult.error;\n    }\n    get hasScreenshots() {\n      return this.testResult.screenshots?.filter(child => (child.type || child.contentType)?.startsWith('image/'))?.length;\n    }\n    get hasAnnotations() {\n      return this.testResult.annotations?.length;\n    }\n    get hasAttachments() {\n      return this.testResult.screenshots?.filter(child => !(child.type || child.contentType)?.startsWith('image/'))?.length;\n    }\n    showScreenshots(self, screenshot) {\n      const isImage = (screenshot.type || screenshot.contentType)?.startsWith('image/');\n      return self.activeTab === 'screenshots' && isImage || self.activeTab === 'attachments' && !isImage;\n    }\n    handleTriggerCollapse() {\n      const {\n        isSmokeTest,\n        isChild\n      } = this.args;\n      const isStoredExpanded = window.localStorage.getItem(this.resultUuid) === 'true';\n      const expandChild = isSmokeTest ? isStoredExpanded : !isChild && this.activeTab && this.activeTab !== 'steps';\n      if (expandChild) {\n        this.handleCollapse();\n      }\n    }\n    handleCollapse() {\n      const el = document.getElementById(this.resultUuid);\n      if (!el) return;\n      const isExpanded = this.collapseIcon === 'plus';\n      this.collapseIcon = isExpanded ? 'minus' : 'plus';\n      if (isExpanded) {\n        el.classList.remove('collapse', 'show');\n        el.classList.add('collapsing');\n        el.style.height = '0px';\n        void el.offsetHeight;\n        const fullHeight = el.scrollHeight + 'px';\n        el.style.height = fullHeight;\n        this.loadChildren();\n      } else {\n        const fullHeight = el.scrollHeight + 'px';\n        el.style.height = fullHeight;\n        void el.offsetHeight;\n        el.classList.remove('collapse', 'show');\n        el.classList.add('collapsing');\n        el.style.height = '0px';\n      }\n      if (this.isSmokeTestRunning) {\n        window.localStorage.setItem(this.resultUuid, isExpanded ? 'true' : 'false');\n        $(\"#assertionsScriptOverall > div\").scrollTop(parseInt(window.localStorage.getItem(`assertions-scroll-top`)));\n      }\n      (0, _runloop.later)(() => {\n        el.classList.remove('collapsing');\n        el.classList.add('collapse');\n        if (isExpanded) {\n          el.classList.add('show');\n        }\n        el.style.height = null;\n      }, ANIMATION_DURATION);\n    }\n    async loadChildren() {\n      if (!this.args.runInProgress && this.testResult.hasChildren && !this.loadingChild && !this.children.length) {\n        this.loadingChild = true;\n        this.children = await this.api.executions.getSuiteResultsChildResults(this.testResult.id, this.args.uuid);\n        this.loadingChild = false;\n      }\n    }\n    updateActiveTab(selected) {\n      this.activeTab = selected;\n      if (this.isSmokeTestRunning && this.collapseIcon === 'minus') {\n        window.localStorage.setItem(`${this.resultUuid}--active-tab`, selected);\n      }\n    }\n    removeAllKeys() {\n      if (!this.args.isSmokeTest) return;\n      if (this.args.runInProgress) return;\n      (0, _runloop.later)(() => {\n        window.localStorage.removeItem(this.resultUuid);\n        window.localStorage.removeItem(`assertions-scroll-top`);\n        if (!this.args.isChild) window.localStorage.removeItem(`${this.resultUuid}--active-tab`);\n      }, 1000);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showBody\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"index\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showTabs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"activeTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"collapseIcon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'plus';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"children\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loadingChild\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"handleTriggerCollapse\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleTriggerCollapse\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleCollapse\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleCollapse\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateActiveTab\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateActiveTab\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removeAllKeys\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removeAllKeys\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SuiteTestResultsComponent);\n});","define(\"@testable/shared-ui/components/switch-org-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _runloop, _server, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal\n          @onSubmit={{this.getOrganization}}\n          @onHidden={{@modalClosed}}\n          as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">Switch Organization</h4>\n    </Modal.header>\n    <Modal.body>\n      <div class=\"panel\">\n        <div class=\"panel-body\">\n          <form {{on \"submit\" this.getOrganization}} class=\"form-horizontal\">\n              <div class=\"form-group\">\n                <Input class=\"form-control\" @value={{this.name}} {{did-insert this.focusInput}} />\n              </div>\n            <div class=\"form-group\">\n              <button type=\"submit\" disabled={{this.isSaving}} class=\"btn btn-primary\">\n                {{if this.isSaving \"Switching...\" \"Switch\"}}\n              </button>\n            </div>\n          </form>\n        </div>\n      </div>\n    </Modal.body>\n  </BsModal>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@onSubmit\\\",\\\"@onHidden\\\"],[[30,0,[\\\"getOrganization\\\"]],[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Switch Organization\\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal\\\"],[4,[38,4],[\\\"submit\\\",[30,0,[\\\"getOrganization\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,5],[[24,0,\\\"form-control\\\"],[4,[38,6],[[30,0,[\\\"focusInput\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[14,0,\\\"btn btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Switching...\\\",\\\"Switch\\\"]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[\\\"@modalClosed\\\",\\\"Modal\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"div\\\",\\\"form\\\",\\\"on\\\",\\\"input\\\",\\\"did-insert\\\",\\\"button\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/switch-org-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let SwitchOrgModalComponent = _exports.default = (_class = class SwitchOrgModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor, this);\n      _initializerDefineProperty(this, \"name\", _descriptor2, this);\n    }\n    focusInput(element) {\n      (0, _runloop.later)(this, () => {\n        if (element) {\n          element.focus();\n        }\n      }, 100);\n    }\n    async getOrganization(e) {\n      e.preventDefault();\n      if (!this.name) return;\n      this.isSaving = true;\n      try {\n        const response = await _server.default.getOrg(this.name);\n        if (response.id === _environment.config.currentUser.orgId) {\n          _lib.default.error('You are already in the provided organization.');\n          this.isSaving = false;\n        } else {\n          this.args.switchOrg(response);\n        }\n      } catch (e) {\n        if (e.status === 404) {\n          _lib.default.error('This organization is not found.');\n          this.isSaving = false;\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"getOrganization\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"getOrganization\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SwitchOrgModalComponent);\n});","define(\"@testable/shared-ui/components/tags-editor-input\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _trackedBuiltIns, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <form {{on \"submit\" this.saveTags}} class=\"tag-form form-horizontal\" ...attributes {{did-update this.syncModelTags @tags}}>\n    {{#if (and (not-eq @type 'testCase') this.inheritedTags.length)}}\n      <div class=\"form-group\">\n        <label>Inherited Tags:</label>\n        <div class=\"p-l-5\">\n          {{#each this.inheritedTags as |tag|}}\n            <div class=\"mb-2\">\n              <strong>{{tag.title}}</strong>\n              {{#if this.isMonitoring}}\n                {{tag.name}}\n              {{else}}\n                <LinkTo @route={{tag.path}} @model={{tag.id}} target=\"_blank\">{{tag.name}}</LinkTo>\n              {{/if}}\n              -\n              {{#each tag.tags as |tagA|}}\n                {{#if this.isMonitoring}}\n                  <span class=\"tags\">{{tagA.name}}</span>\n                {{else}}\n                  <LinkTo @route=\"reports.by-tag\" @model={{tag.id}} target=\"_blank\" class=\"tags\">{{tagA.name}}</LinkTo>\n                {{/if}}\n              {{/each}}\n            </div>\n          {{/each}}\n        </div>\n      </div>\n    {{/if}}\n    <div>\n      {{#if (and (not-eq @type \"testCase\") (not-eq @type \"script\"))}}<label>Tags:</label>{{/if}}\n      {{#if this.loadingTags}}\n        Loading Tags...\n      {{else}}\n        <PowerSelectWithCreate\n                @multiple={{true}}\n                @showCreatePosition='bottom'\n                @options={{this.filteredTags}}\n                @searchEnabled={{true}}\n                @searchField=\"name\"\n                @selected={{this.selectedTags}}\n                @placeholder=\"Please select or create a new tags by typing the desired name\"\n                @renderInPlace={{true}}\n                @verticalPosition=\"bottom\"\n                @buildSuggestion={{this.tagsSuggestion}}\n                @showCreateWhen={{this.hideCreateOptionOnSameName}}\n                @onChange={{this.updateSelectedTags}}\n                @onCreate={{this.createNewTag}} as |tag|\n        >\n          {{tag.name}}\n        </PowerSelectWithCreate>\n      {{/if}}\n    </div>\n    <div class=\"m-t-5 m-b-10\">\n      <button type=\"submit\" disabled={{this.savingTags}} class=\"btn btn-xs btn-success width-25 m-r-5\">\n        {{#if this.savingTags}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-check\" />\n        {{/if}}\n      </button>\n      <button {{on \"click\" this.closeModal}} type=\"button\" class=\"btn btn-xs btn-danger width-25\">\n        <Ui::Icon @icon=\"fa fa-times\" />\n      </button>\n    </div>\n  </form>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"form\\\"],[24,0,\\\"tag-form form-horizontal\\\"],[17,1],[4,[38,1],[\\\"submit\\\",[30,0,[\\\"saveTags\\\"]]],null],[4,[38,2],[[30,0,[\\\"syncModelTags\\\"]],[30,2]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,5],[[30,3],\\\"testCase\\\"],null],[30,0,[\\\"inheritedTags\\\",\\\"length\\\"]]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Inherited Tags:\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"p-l-5\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"inheritedTags\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"mb-2\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,[30,4,[\\\"title\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isMonitoring\\\"]],[[[1,\\\"              \\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[39,11],[[24,\\\"target\\\",\\\"_blank\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[[30,4,[\\\"path\\\"]],[30,4,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,4,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            -\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,4,[\\\"tags\\\"]]],null]],null],null,[[[41,[30,0,[\\\"isMonitoring\\\"]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"tags\\\"],[12],[1,[30,5,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[39,11],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"tags\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"reports.by-tag\\\",[30,4,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,5,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]]]],[5]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[12],[1,\\\"\\\\n    \\\"],[41,[28,[37,4],[[28,[37,5],[[30,3],\\\"testCase\\\"],null],[28,[37,5],[[30,3],\\\"script\\\"],null]],null],[[[10,\\\"label\\\"],[12],[1,\\\"Tags:\\\"],[13]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingTags\\\"]],[[[1,\\\"      Loading Tags...\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,13],null,[[\\\"@multiple\\\",\\\"@showCreatePosition\\\",\\\"@options\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@renderInPlace\\\",\\\"@verticalPosition\\\",\\\"@buildSuggestion\\\",\\\"@showCreateWhen\\\",\\\"@onChange\\\",\\\"@onCreate\\\"],[true,\\\"bottom\\\",[30,0,[\\\"filteredTags\\\"]],true,\\\"name\\\",[30,0,[\\\"selectedTags\\\"]],\\\"Please select or create a new tags by typing the desired name\\\",true,\\\"bottom\\\",[30,0,[\\\"tagsSuggestion\\\"]],[30,0,[\\\"hideCreateOptionOnSameName\\\"]],[30,0,[\\\"updateSelectedTags\\\"]],[30,0,[\\\"createNewTag\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,6,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"m-t-5 m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"savingTags\\\"]]],[14,0,\\\"btn btn-xs btn-success width-25 m-r-5\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"savingTags\\\"]],[[[1,\\\"        \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-danger width-25\\\"],[24,4,\\\"button\\\"],[4,[38,1],[\\\"click\\\",[30,0,[\\\"closeModal\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,15],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"@tags\\\",\\\"@type\\\",\\\"tag\\\",\\\"tagA\\\",\\\"tag\\\"],[\\\"form\\\",\\\"on\\\",\\\"did-update\\\",\\\"if\\\",\\\"and\\\",\\\"not-eq\\\",\\\"div\\\",\\\"label\\\",\\\"each\\\",\\\"-track-array\\\",\\\"strong\\\",\\\"link-to\\\",\\\"span\\\",\\\"power-select-with-create\\\",\\\"button\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/tags-editor-input.hbs\",\n    \"isStrictMode\": false\n  });\n  let TagsEditorInputComponent = _exports.default = (_class = class TagsEditorInputComponent extends _component2.default {\n    tagName(tag) {\n      return tag.testCaseName && 'Test Case: ' || tag.scenarioName && 'Scenario: ' || tag.confName && 'Configuration: ';\n    }\n\n    // remove this getter, if need to show all tags instead\n    get filteredTags() {\n      const inheritedTagIds = this.modelTags.filter(tag => tag.inherited).map(tag => tag.id);\n      return this.allTags.filter(tag => !inheritedTagIds.includes(tag.id) && !tag.inherited).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get modelInheritedTags() {\n      return this.modelTags.filter(tag => tag.inherited);\n    }\n    get inheritedTags() {\n      const groupedData = this.modelInheritedTags.reduce((acc, tag) => {\n        const tagDetail = {\n          id: tag.id,\n          name: tag.name\n        };\n        if (tag.testCaseId) {\n          const testCase = acc.testCases[tag.testCaseId] ||= {\n            testCaseName: tag.testCaseName,\n            tags: []\n          };\n          testCase.tags.push(tagDetail);\n        }\n        if (tag.scenarioId) {\n          const scenario = acc.scenarios[tag.scenarioId] ||= {\n            scenarioName: tag.scenarioName,\n            tags: []\n          };\n          scenario.tags.push(tagDetail);\n        }\n        if (tag.confId) {\n          const conf = acc.confs[tag.confId] ||= {\n            confName: tag.confName,\n            tags: []\n          };\n          conf.tags.push(tagDetail);\n        }\n        return acc;\n      }, {\n        testCases: {},\n        scenarios: {},\n        confs: {}\n      });\n      return [...Object.entries(groupedData.testCases).map(([testCaseId, {\n        testCaseName,\n        tags\n      }]) => ({\n        title: 'Test Case:',\n        path: 'view',\n        id: testCaseId,\n        name: testCaseName,\n        tags\n      })), ...Object.entries(groupedData.scenarios).map(([scenarioId, {\n        scenarioName,\n        tags\n      }]) => ({\n        title: 'Scenario:',\n        path: 'scenario',\n        id: scenarioId,\n        name: scenarioName,\n        tags\n      })), ...Object.entries(groupedData.confs).map(([confId, {\n        confName,\n        tags\n      }]) => ({\n        title: 'Configuration:',\n        path: 'loadTest',\n        id: confId,\n        name: confName,\n        tags\n      }))];\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"savingTags\", _descriptor2, this);\n      _initializerDefineProperty(this, \"loadingTags\", _descriptor3, this);\n      _initializerDefineProperty(this, \"selectedTags\", _descriptor4, this);\n      _initializerDefineProperty(this, \"tags\", _descriptor5, this);\n      _initializerDefineProperty(this, \"allTags\", _descriptor6, this);\n      _initializerDefineProperty(this, \"modelTags\", _descriptor7, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      this.loadTags();\n    }\n    async loadTags() {\n      if (this.loadingTags && !_.isEmpty(this.args.model) && !this.args.model?.uuid) {\n        const allTags = await this.api.tagManager.all();\n        await this.setModelTags();\n        const allTagIds = new Set(allTags.map(t => t.id));\n        const missingTags = this.modelTags.filter(t => !t.inherited && !allTagIds.has(t.id));\n        this.allTags = new _trackedBuiltIns.TrackedArray([...allTags, ...missingTags]);\n        await this.setSelectedTags();\n        this.currentTags = this.selectedTags;\n        this.loadingTags = false;\n      }\n    }\n    async setSelectedTags() {\n      const nonInheritedModelTags = this.modelTags.filter(tag => !tag.inherited);\n      const selectedTagIds = nonInheritedModelTags.map(tag => tag.id);\n      const fromAllTags = this.allTags.filter(tag => selectedTagIds.includes(tag.id));\n      const allTagIds = new Set(this.allTags.map(t => t.id));\n      const missingFromAllTags = nonInheritedModelTags.filter(tag => !allTagIds.has(tag.id));\n      this.selectedTags = new _trackedBuiltIns.TrackedArray([...fromAllTags, ...missingFromAllTags]);\n    }\n    async setModelTags() {\n      this.modelTags = this.args.tags ? _.clone(this.args.tags) : [];\n    }\n    saveTags(e) {\n      e.preventDefault();\n      if (JSON.stringify(this.modelTags) === JSON.stringify(this.selectedTags)) {\n        return;\n      }\n      this.savingTags = true;\n      this.deleteTags().then(() => {\n        let tags = this.selectedTags.map(t => t.name);\n        let action = this.api.tagManager.add(this.args.type, this.args.model.id, tags);\n        action.then(tags => {\n          if (this.args.showAlert) {\n            _lib.default.info('Tags updated successfully.');\n          }\n          this.savingTags = false;\n          this.currentTags = new _trackedBuiltIns.TrackedArray(this.selectedTags);\n          this.args.updateEditor?.(tags.concat(this.modelInheritedTags));\n          this.args.closeModal();\n          this.api.tagManager.loadCount();\n        }, () => {\n          this.savingTags = false;\n        });\n      });\n    }\n    createNewTag(name) {\n      const tag = {\n        id: -1,\n        name: name\n      };\n      if (!this.selectedTags || !this.selectedTags.find(t => t.name === tag.name)) {\n        this.selectedTags.push(tag);\n        this.allTags.push(tag);\n      }\n    }\n    async syncModelTags() {\n      await this.setModelTags();\n      const knownIds = new Set(this.allTags.map(t => t.id));\n      const newTags = this.modelTags.filter(t => !knownIds.has(t.id));\n      if (newTags.length) {\n        const newNames = new Set(newTags.map(t => t.name));\n        const deduped = this.allTags.filter(t => !newNames.has(t.name));\n        this.allTags = new _trackedBuiltIns.TrackedArray([...deduped, ...newTags]);\n      }\n      await this.setSelectedTags();\n    }\n    updateSelectedTags(tags) {\n      this.selectedTags = new _trackedBuiltIns.TrackedArray(tags);\n    }\n    deleteTags() {\n      let selectedTags = this.selectedTags.map(t => t.id);\n      let tagsToRemove = [];\n      this.currentTags.map(t => t.id).forEach(t => {\n        if (!selectedTags.includes(t)) {\n          tagsToRemove.push(t);\n        }\n      });\n      if (tagsToRemove.length > 0) {\n        return this.api.tagManager.delete(this.args.type, this.args.model.id, tagsToRemove);\n      } else {\n        return new Promise(resolve => resolve());\n      }\n    }\n    hideCreateOptionOnSameName(term) {\n      let existingOption = this.selectedTags.find(({\n        name\n      }) => name === term);\n      return !existingOption;\n    }\n    tagsSuggestion(term) {\n      return `Press enter or select to create tag ${term}...`;\n    }\n    closeModal() {\n      this.selectedTags = new _trackedBuiltIns.TrackedArray(this.args.tags || []);\n      this.args.closeModal();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"savingTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"loadingTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"tags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"allTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"modelTags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadTags\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveTags\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createNewTag\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createNewTag\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"syncModelTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"syncModelTags\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedTags\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hideCreateOptionOnSameName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hideCreateOptionOnSameName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"tagsSuggestion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"tagsSuggestion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeModal\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TagsEditorInputComponent);\n});","define(\"@testable/shared-ui/components/tags-editor-modal\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal\n    class=\"tagsEditorModal\"\n    @onHidden={{@closeModal}}\n    as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">Manage Tags</h4>\n    </Modal.header>\n    <Modal.body>\n      <div class=\"panel\">\n        <div class=\"panel-body\">\n          {{#if @model}}\n            <TagsEditorInput\n              @model={{@model}}\n              @tags={{@tags}}\n              @type={{@type}}\n              @updateEditor={{@updateEditor}}\n              @closeModal={{@closeModal}}\n            />\n          {{else}}\n            Loading Data...\n          {{/if}}\n        </div>\n      </div>\n    </Modal.body>\n  </BsModal>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"tagsEditorModal\\\"]],[[\\\"@onHidden\\\"],[[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Manage Tags\\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"          \\\"],[8,[39,4],null,[[\\\"@model\\\",\\\"@tags\\\",\\\"@type\\\",\\\"@updateEditor\\\",\\\"@closeModal\\\"],[[30,3],[30,4],[30,5],[30,6],[30,1]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          Loading Data...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]]],[\\\"@closeModal\\\",\\\"Modal\\\",\\\"@model\\\",\\\"@tags\\\",\\\"@type\\\",\\\"@updateEditor\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"div\\\",\\\"if\\\",\\\"tags-editor-input\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/tags-editor-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"tags-editor-modal\"));\n});","define(\"@testable/shared-ui/components/tags-editor\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _tracking, _object, _environment, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (not (and (eq @type \"testCase\") this.showTagsEditor))}}\n    <div {{did-update this.syncTags @model.tags}} class=\"mb-2 tags-manager\" ...attributes>\n      <div class=\"{{if @showIcon \"float-start\"}} {{if (is-empty @model.uuid) '' 'm-b-10'}}\">\n        {{#each this.sortedTags as |tag|}}\n          {{#if this.isMonitoring}}\n            <span class=\"tags\">{{tag.name}}</span>\n          {{else}}\n            <LinkTo @route=\"reports.by-tag\" @model={{tag.id}} target=\"_blank\" class=\"tags\">{{tag.name}}</LinkTo>\n          {{/if}}\n        {{/each}}\n      </div>\n      {{#if this.isShowTagsEditorVisible}}\n        <div class=\"{{if @showIcon \"float-right\" \"m-t-10 m-b-10\"}} no-print\">\n          <a href=\"javascript:;\" {{on \"click\" (fn (mut this.showTagsEditor) true)}}\n            class=\"{{if (eq @type \"script\") \"btn btn-primary w-100\"}} {{unless @showIcon \"editable-click\"}}\"\n            role=\"button\"\n          >\n          {{#if @showIcon}}\n            <Ui::Icon role=\"presentation\" @icon=\"fa fa-edit\" />\n          {{else}}\n            {{#if (and (is-empty @model.uuid) (not @model.tags.length))}}\n              Add Tags...\n            {{else}}\n              Manage tags...\n            {{/if}}\n          {{/if}}\n          </a>\n        </div>\n      {{/if}}\n    </div>\n  {{/if}}\n  \n  {{#if (or (eq @type \"script\") (eq @type \"testCase\"))}}\n    <TagsEditorInput\n      class={{unless this.showTagsEditor \"hidden\"}}\n      @model={{@model}}\n      @tags={{this.tags}}\n      @type={{@type}}\n      @updateEditor={{this.updateTags}}\n      @closeModal={{fn (mut this.showTagsEditor) false}}\n    />\n  {{else}}\n    {{#if this.showTagsEditor}}\n      <TagsEditorModal\n        @model={{@model}}\n        @tags={{this.tags}}\n        @type={{@type}}\n        @updateEditor={{fn (mut this.tags)}}\n        @closeModal={{fn (mut this.showTagsEditor) false}}\n      />\n    {{/if}}\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[28,[37,2],[[28,[37,3],[[30,1],\\\"testCase\\\"],null],[30,0,[\\\"showTagsEditor\\\"]]],null]],null],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"mb-2 tags-manager\\\"],[17,2],[4,[38,5],[[30,0,[\\\"syncTags\\\"]],[30,3,[\\\"tags\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"float-start\\\"],\\\" \\\",[52,[28,[37,6],[[30,3,[\\\"uuid\\\"]]],null],\\\"\\\",\\\"m-b-10\\\"]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,8],[[28,[37,8],[[30,0,[\\\"sortedTags\\\"]]],null]],null],null,[[[41,[30,0,[\\\"isMonitoring\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"tags\\\"],[12],[1,[30,5,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[39,10],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"tags\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"reports.by-tag\\\",[30,5,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,5,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[]]]],[5]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isShowTagsEditorVisible\\\"]],[[[1,\\\"      \\\"],[10,0],[15,0,[29,[[52,[30,4],\\\"float-right\\\",\\\"m-t-10 m-b-10\\\"],\\\" no-print\\\"]]],[12],[1,\\\"\\\\n        \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[16,0,[29,[[52,[28,[37,3],[[30,1],\\\"script\\\"],null],\\\"btn btn-primary w-100\\\"],\\\" \\\",[52,[51,[30,4]],\\\"editable-click\\\"]]]],[24,\\\"role\\\",\\\"button\\\"],[4,[38,13],[\\\"click\\\",[28,[37,14],[[28,[37,15],[[30,0,[\\\"showTagsEditor\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"          \\\"],[8,[39,16],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,2],[[28,[37,6],[[30,3,[\\\"uuid\\\"]]],null],[28,[37,1],[[30,3,[\\\"tags\\\",\\\"length\\\"]]],null]],null],[[[1,\\\"            Add Tags...\\\\n\\\"]],[]],[[[1,\\\"            Manage tags...\\\\n\\\"]],[]]]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[28,[37,3],[[30,1],\\\"script\\\"],null],[28,[37,3],[[30,1],\\\"testCase\\\"],null]],null],[[[1,\\\"  \\\"],[8,[39,18],[[16,0,[52,[51,[30,0,[\\\"showTagsEditor\\\"]]],\\\"hidden\\\"]]],[[\\\"@model\\\",\\\"@tags\\\",\\\"@type\\\",\\\"@updateEditor\\\",\\\"@closeModal\\\"],[[30,3],[30,0,[\\\"tags\\\"]],[30,1],[30,0,[\\\"updateTags\\\"]],[28,[37,14],[[28,[37,15],[[30,0,[\\\"showTagsEditor\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"showTagsEditor\\\"]],[[[1,\\\"    \\\"],[8,[39,19],null,[[\\\"@model\\\",\\\"@tags\\\",\\\"@type\\\",\\\"@updateEditor\\\",\\\"@closeModal\\\"],[[30,3],[30,0,[\\\"tags\\\"]],[30,1],[28,[37,14],[[28,[37,15],[[30,0,[\\\"tags\\\"]]],null]],null],[28,[37,14],[[28,[37,15],[[30,0,[\\\"showTagsEditor\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[\\\"@type\\\",\\\"&attrs\\\",\\\"@model\\\",\\\"@showIcon\\\",\\\"tag\\\"],[\\\"if\\\",\\\"not\\\",\\\"and\\\",\\\"eq\\\",\\\"div\\\",\\\"did-update\\\",\\\"is-empty\\\",\\\"each\\\",\\\"-track-array\\\",\\\"span\\\",\\\"link-to\\\",\\\"a\\\",\\\"unless\\\",\\\"on\\\",\\\"fn\\\",\\\"mut\\\",\\\"ui/icon\\\",\\\"or\\\",\\\"tags-editor-input\\\",\\\"tags-editor-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/tags-editor.hbs\",\n    \"isStrictMode\": false\n  });\n  let TagsEditorComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class TagsEditorComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor2, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"tags\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showTagsEditor\", _descriptor4, this);\n      this.tags = this.args.model.tags || [];\n    }\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get isShowTagsEditorVisible() {\n      const {\n        type,\n        model\n      } = this.args;\n      const {\n        showTagsEditor,\n        isViewer\n      } = this;\n      return (type !== 'script' || type === 'script' && !showTagsEditor) && !model?.uuid && !model.readonly && !isViewer;\n    }\n    syncTags() {\n      const isOwnUpdate = _lib.default.isOwnClientUpdateId(this.realtimeService.clientOriginatedUuid);\n      if (!isOwnUpdate) {\n        this.tags = this.args.model.tags || [];\n      }\n    }\n    updateTags(tags) {\n      this.tags = tags;\n      (0, _object.set)(this.args.model, 'tags', tags);\n    }\n    get sortedTags() {\n      return [...(this.tags || [])].sort((a, b) => {\n        return a.inherited === b.inherited ? a.id - b.id : a.inherited ? -1 : 1;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"tags\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showTagsEditor\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"syncTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"syncTags\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTags\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTags\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TagsEditorComponent);\n});","define(\"@testable/shared-ui/components/tags-show\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#each @tags as |tag|}}\n    <LinkTo @route=\"reports.by-tag\" @model={{tag.id}} class=\"tags preview\">{{tag.name}}</LinkTo>\n  {{/each}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[42,[28,[37,1],[[28,[37,1],[[30,1]],null]],null],null,[[[1,\\\"  \\\"],[8,[39,2],[[24,0,\\\"tags preview\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"reports.by-tag\\\",[30,2,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,2,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null]],[\\\"@tags\\\",\\\"tag\\\"],[\\\"each\\\",\\\"-track-array\\\",\\\"link-to\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/tags-show.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"tags-show\"));\n});","define(\"@testable/shared-ui/components/teams-notification-config\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"teams-notification-config\" {{did-insert this.persistDefaultChannelIfNeeded}} {{did-update this.persistDefaultChannelIfNeeded this.teamsChannels @customNotificationList}}>\n    <div class=\"d-flex align-items-baseline m-b-10\">\n      <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">Channel</label>\n      {{#if this.teamsLoading}}\n        <Input @type=\"text\"\n               @value=\"Loading channels...\"\n               disabled={{true}}\n               class=\"form-control\" />\n      {{else}}\n        <div class=\"w-100\">\n          <Ui::PSelect @disabled={{not @editable}}\n                      @options={{this.teamsChannels}}\n                      @selected={{this.selectedChannel}}\n                      @onChange={{this.updateTeamsChannel}}\n                      @searchEnabled={{true}}\n                      @searchField=\"name\"\n                      class=\"w-100\"\n                      as |channel|>\n            {{channel.name}}\n          </Ui::PSelect>\n          {{#if this.errorMessage}}\n            <div class=\"alert alert-danger mt-1 mb-0 py-0 px-1 overflow-wrap\">\n              {{this.errorMessage}}\n            </div>\n          {{/if}}\n        </div>\n      {{/if}}\n    </div>\n    <div class=\"form-group\">\n      {{#unless this.isMonitoring}}\n        <div class=\"d-flex flex-row flex-wrap m-b-10\">\n          <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">On Start</label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.teamsConfig 'onStart'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateTeamsOption 'onStart')}} />\n              Send a chat\n            </label>\n          </div>\n        </div>\n        <div class=\"d-flex flex-row flex-wrap m-b-10\">\n          <label class=\"m-r-10 text-nowrap align-items-center mw-100px\">Options</label>\n          <div>\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.teamsConfig 'includeMetrics'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateTeamsOption 'includeMetrics')}} />\n              Include summary metrics\n            </label><br />\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.teamsConfig 'includeSuccessCriteria'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateTeamsOption 'includeSuccessCriteria')}} />\n              Include success criteria\n            </label><br />\n            <label class=\"normal\">\n              <Input @type=\"checkbox\"\n                    @checked={{get this.teamsConfig 'includeRecentImages'}}\n                    disabled={{not @editable}}\n                    {{on \"input\" (fn this.updateTeamsOption 'includeRecentImages')}} />\n              Include the last few images, if any, on test failure\n            </label>\n          </div>\n        </div>\n      {{/unless}}\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"teams-notification-config\\\"],[4,[38,1],[[30,0,[\\\"persistDefaultChannelIfNeeded\\\"]]],null],[4,[38,2],[[30,0,[\\\"persistDefaultChannelIfNeeded\\\"]],[30,0,[\\\"teamsChannels\\\"]],[30,1]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"d-flex align-items-baseline m-b-10\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Channel\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"teamsLoading\\\"]],[[[1,\\\"      \\\"],[8,[39,5],[[16,\\\"disabled\\\",true],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",\\\"Loading channels...\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],[[24,0,\\\"w-100\\\"]],[[\\\"@disabled\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\"],[[28,[37,7],[[30,2]],null],[30,0,[\\\"teamsChannels\\\"]],[30,0,[\\\"selectedChannel\\\"]],[30,0,[\\\"updateTeamsChannel\\\"]],true,\\\"name\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[3]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"errorMessage\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"alert alert-danger mt-1 mb-0 py-0 px-1 overflow-wrap\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"errorMessage\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"d-flex flex-row flex-wrap m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"On Start\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[16,\\\"disabled\\\",[28,[37,7],[[30,2]],null]],[4,[38,10],[\\\"input\\\",[28,[37,11],[[30,0,[\\\"updateTeamsOption\\\"]],\\\"onStart\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,9],[[30,0,[\\\"teamsConfig\\\"]],\\\"onStart\\\"],null]]],null],[1,\\\"\\\\n            Send a chat\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex flex-row flex-wrap m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"m-r-10 text-nowrap align-items-center mw-100px\\\"],[12],[1,\\\"Options\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[16,\\\"disabled\\\",[28,[37,7],[[30,2]],null]],[4,[38,10],[\\\"input\\\",[28,[37,11],[[30,0,[\\\"updateTeamsOption\\\"]],\\\"includeMetrics\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,9],[[30,0,[\\\"teamsConfig\\\"]],\\\"includeMetrics\\\"],null]]],null],[1,\\\"\\\\n            Include summary metrics\\\\n          \\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[16,\\\"disabled\\\",[28,[37,7],[[30,2]],null]],[4,[38,10],[\\\"input\\\",[28,[37,11],[[30,0,[\\\"updateTeamsOption\\\"]],\\\"includeSuccessCriteria\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,9],[[30,0,[\\\"teamsConfig\\\"]],\\\"includeSuccessCriteria\\\"],null]]],null],[1,\\\"\\\\n            Include success criteria\\\\n          \\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,5],[[16,\\\"disabled\\\",[28,[37,7],[[30,2]],null]],[4,[38,10],[\\\"input\\\",[28,[37,11],[[30,0,[\\\"updateTeamsOption\\\"]],\\\"includeRecentImages\\\"],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[28,[37,9],[[30,0,[\\\"teamsConfig\\\"]],\\\"includeRecentImages\\\"],null]]],null],[1,\\\"\\\\n            Include the last few images, if any, on test failure\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@customNotificationList\\\",\\\"@editable\\\",\\\"channel\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"label\\\",\\\"if\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"not\\\",\\\"unless\\\",\\\"get\\\",\\\"on\\\",\\\"fn\\\",\\\"br\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/teams-notification-config.hbs\",\n    \"isStrictMode\": false\n  });\n  let TeamsNotificationConfigComponent = _exports.default = (_class = class TeamsNotificationConfigComponent extends _component2.default {\n    get teamsConfig() {\n      try {\n        return JSON.parse(this.args.customNotificationList || '{}');\n      } catch (error) {\n        return {\n          includeMetrics: true,\n          onStart: true,\n          includeRecentImages: true,\n          channels: []\n        };\n      }\n    }\n    get selectedChannel() {\n      const selectedChannel = this.teamsConfig.channels?.[0];\n      const defaultChannel = this.teamsChannels[0] || {\n        id: '',\n        name: 'None'\n      };\n      return _.find(this.teamsChannels, channel => channel.id === selectedChannel?.id) || defaultChannel;\n    }\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      _initializerDefineProperty(this, \"teamsChannels\", _descriptor, this);\n      _initializerDefineProperty(this, \"teamsLoading\", _descriptor2, this);\n      _initializerDefineProperty(this, \"loadFailed\", _descriptor3, this);\n      if (this.args.teamsChannels) {\n        this.teamsChannels = this.args.teamsChannels;\n      } else {\n        this.loadTeamsData();\n      }\n    }\n    async loadTeamsData() {\n      try {\n        this.teamsLoading = true;\n        const channels = await _server.default.getTeamsData(_environment.config.currentUser.orgId);\n        const channelArray = [];\n        if (_.isArray(channels)) {\n          channelArray.push(...channels);\n        }\n        this.teamsChannels = _.sortBy(channelArray, ['name']);\n        this.args.onLoadChannels(this.teamsChannels);\n        this.errorMessage = null;\n        this.loadFailed = false;\n      } catch (error) {\n        let message = 'Failed to load Teams channels';\n        try {\n          const errorMsg = error?.responseJSON?.error?.message;\n          const parsed = typeof errorMsg === 'string' ? JSON.parse(errorMsg) : errorMsg;\n          message = parsed?.error?.message || error?.message || message;\n        } catch {\n          message = error?.message || message;\n        }\n        this.errorMessage = message;\n        this.teamsChannels = [];\n        this.loadFailed = true;\n      } finally {\n        this.teamsLoading = false;\n      }\n    }\n    saveTeamsConfig(config) {\n      try {\n        this.args.onSave(JSON.stringify(config));\n      } catch (error) {\n        console.error('Failed to save Teams config:', error);\n      }\n    }\n    persistDefaultChannelIfNeeded() {\n      const config = this.teamsConfig;\n      const channels = this.teamsChannels;\n      const hasNoChannelSaved = !config.channels?.length;\n      const firstChannel = channels?.[0];\n      if (hasNoChannelSaved && firstChannel?.id) {\n        this.updateTeamsChannel(firstChannel);\n      }\n    }\n    updateTeamsChannel(selectedChannel) {\n      if (this.loadFailed) return;\n      const config = this.teamsConfig;\n      if (selectedChannel && selectedChannel.id) {\n        config.channels = [{\n          id: selectedChannel.id,\n          name: selectedChannel.name\n        }];\n      } else {\n        config.channels = [];\n      }\n      this.saveTeamsConfig(config);\n    }\n    updateTeamsOption(optionName, event) {\n      const config = {\n        ...this.teamsConfig\n      };\n      config[optionName] = event.target.checked;\n      this.saveTeamsConfig(config);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"teamsChannels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"teamsLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"loadFailed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"persistDefaultChannelIfNeeded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"persistDefaultChannelIfNeeded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeamsChannel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeamsChannel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateTeamsOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateTeamsOption\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TeamsNotificationConfigComponent);\n});","define(\"@testable/shared-ui/components/test-add-user-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"testUsersAddModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}>\n  \n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Add {{if this.isMultiUser 'Engines' 'Users' }}</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form id=\"testAddUsersForm\" {{on \"submit\" this.save}} data-parsley-trigger=\"focusout\">\n                <div class=\"form-group\">\n                  <label>{{if this.isMultiUser 'Engines' 'Users' }} to Add\n                    <Ui::InfoIcon @content=\"Number of virtual users to add to your test right now. Adding users may result\n                     in additional test runners being allocated first.\"/>\n  \n                  </label>\n                  <div class=\"input-group\">\n                    <Input class=\"form-control\" @type=\"number\" @value={{this.toAdd}}\n                            id=\"toAdd\"\n                           min=\"1\"\n                           data-parsley-required=\"true\"\n                           data-parsley-min=\"1\"\n                           data-parsley-required-message=\"Number of {{if this.isMultiUser 'Engines' 'Users' }} to add is required\"\n                           data-parsley-min-message=\"Minimum {{if this.isMultiUser 'Engines' 'Users' }} to add is 1\"\n                           data-parsley-errors-container=\"#toAddErrors\"\n                    />\n                    <span class=\"input-group-addon\">{{if this.isMultiUser 'Engines' 'Users' }}</span>\n                  </div>\n                  <div id=\"toAddErrors\"></div>\n                </div>\n                <div class=\"form-group\">\n                  <label>Region</label>\n                  <Ui::PSelect @options={{this.regionSummaries}} @selected={{this.selectedRegionSummary}} @placeholder=\"Please select a region...\"\n                               @onChange={{this.regionSelected}}\n                               @selectedItemComponent=\"print-selected-region-summary\" as |regionSummaryOpt|>\n                    <PrintRegionSummary @regionSummary={{regionSummaryOpt}} @bold={{true}} />\n                  </Ui::PSelect>\n                </div>\n                <div class=\"form-group m-t-10\">\n                  <button type=\"submit\" disabled={{this.isSaving}} class=\"btn btn-sm btn-success\">\n                    <strong>{{if this.isSaving 'Adding' 'Add'}} {{if this.isMultiUser 'Engines' 'Users' }}</strong>\n                  </button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"testUsersAddModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Add \\\"],[1,[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"]],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"testAddUsersForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"]],[1,\\\" to Add\\\\n                  \\\"],[8,[39,8],null,[[\\\"@content\\\"],[\\\"Number of virtual users to add to your test right now. Adding users may result\\\\n                   in additional test runners being allocated first.\\\"]],null],[1,\\\"\\\\n\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"form-control\\\"],[24,1,\\\"toAdd\\\"],[24,\\\"min\\\",\\\"1\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[16,\\\"data-parsley-required-message\\\",[29,[\\\"Number of \\\",[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"],\\\" to add is required\\\"]]],[16,\\\"data-parsley-min-message\\\",[29,[\\\"Minimum \\\",[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"],\\\" to add is 1\\\"]]],[24,\\\"data-parsley-errors-container\\\",\\\"#toAddErrors\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"toAdd\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[12],[1,[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,1,\\\"toAddErrors\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,11],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\",\\\"@selectedItemComponent\\\"],[[30,0,[\\\"regionSummaries\\\"]],[30,0,[\\\"selectedRegionSummary\\\"]],\\\"Please select a region...\\\",[30,0,[\\\"regionSelected\\\"]],\\\"print-selected-region-summary\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[39,12],null,[[\\\"@regionSummary\\\",\\\"@bold\\\"],[[30,1],true]],null],[1,\\\"\\\\n                \\\"]],[1]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group m-t-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[14,0,\\\"btn btn-sm btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Adding\\\",\\\"Add\\\"]],[1,\\\" \\\"],[1,[52,[30,0,[\\\"isMultiUser\\\"]],\\\"Engines\\\",\\\"Users\\\"]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"regionSummaryOpt\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"input\\\",\\\"span\\\",\\\"ui/p-select\\\",\\\"print-region-summary\\\",\\\"strong\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-add-user-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestAddUserModalComponent = _exports.default = (_class = class TestAddUserModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"isMultiUser\", _descriptor2, this);\n      _initializerDefineProperty(this, \"toAdd\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor4, this);\n      _initializerDefineProperty(this, \"regionSummary\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedRegionSummary\", _descriptor6, this);\n      this.isMultiUser = _loadTest.default.isMultiUser(this.args.model.script.scriptType);\n      this.selectedRegionSummary = this.args.selectedRegionSummary.executionRegion.id === 'ALL' ? null : this.args.selectedRegionSummary;\n      this.regionSummaries = _.filter(this.args.regionSummaries, region => region.executionRegion.id !== 'ALL');\n    }\n    regionSelected(regionSummary) {\n      this.selectedRegionSummary = regionSummary;\n    }\n    async save(e) {\n      e.preventDefault();\n      if (!$('#testAddUsersForm').parsley().validate()) {\n        return;\n      }\n      this.isSaving = true;\n      try {\n        let executionRegion = this.selectedRegionSummary.executionRegion.id;\n        let executionId = this.selectedRegionSummary.execution.id;\n        let users = this.toAdd;\n        await this.api.testRunsManager.testUsersAdd(executionId, users, executionRegion);\n        $('#testUsersAddModal').modal('hide');\n      } catch (e) {\n        console.log(e);\n        _lib.default.info(e.statusText);\n      }\n      this.isSaving = false;\n    }\n    didInsert() {\n      let self = this;\n      $('#testUsersAddModal').on('hidden.bs.modal', function () {\n        self.args.onClose(self.isAddonSaved);\n      });\n      $('#testUsersAddModal').modal('show');\n      $('#testUsersAddModal').on('shown.bs.modal', function () {\n        $('#toAdd').focus();\n        $('#testAddUsersForm').parsley();\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isMultiUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"toAdd\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"regionSummary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegionSummary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestAddUserModalComponent);\n});","define(\"@testable/shared-ui/components/test-case-baseline-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _environment, _server, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"testCaseBaseLineModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}\n  >\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n  \n          <h4 class=\"modal-title\">Baseline Test Result</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <form id=\"copyTestScriptForm\" {{on \"submit\" this.submit}} data-parsley-trigger=\"focusout\">\n            <div class=\"form-group\">\n              {{#if this.loadingTestCases}}\n                <br/>\n                Loading test cases ...\n              {{else}}\n                <div class=\"mb-2\">\n                  <BsButtonGroup\n                          @value={{this.baselineSelectionType}}\n                          @type='radio'\n                          @onChange={{fn (mut this.baselineSelectionType)}} as |bg|\n                  >\n                    <bg.button @type='success' @value='search' @size='sm'>\n                      Search\n                    </bg.button>\n                    <bg.button @type='success' @value='execution_id' @size='sm'>\n                      Execution ID\n                    </bg.button>\n                  </BsButtonGroup>\n                </div>\n  \n                {{#if (eq this.baselineSelectionType 'execution_id')}}\n                  <div class=\"form-group\">\n                    <label class=\"d-flex align-items-center\">\n                      Execution ID\n                      <Ui::InfoIcon @content=\"The ID for the specific test result you want to compare to. {{if this.executionId (concat \"Found in the URL at \" this.externalUrl)}}\"/>\n                    </label>\n                    <Input class=\"form-control\" @type=\"number\" @value={{this.executionId}}/>\n                  </div>\n                {{else}}\n                  <label>Test Case </label>\n                  <Ui::PSelect @options={{this.testCasesOptions}}\n                               @selected={{this.selectedTestCase}}\n                               @onChange={{this.testCaseChange}}\n                               @placeholder=\"Select test case to copy to ...\" as |option|>\n                    <span class=\"semi-bold\">{{decode-test-case-name option.path}}</span>\n                  </Ui::PSelect>\n  \n                  <Input class=\"hidden\"\n                         id=\"check\"\n                         disabled={{true}}\n                         @value={{this.selectedTestCase.name}}\n                         data-parsley-required=\"true\"\n                         data-parsley-required-message=\"A test case is required\"\n                  />\n                {{/if}}\n              {{/if}}\n            </div>\n            {{#if (eq this.baselineSelectionType 'search')}}\n              <div class=\"form-group\">\n                <label>Scenario </label>\n                {{#if this.loadingTestScenarios}}\n                  <br/>\n                  Loading test scenarios ...\n                {{else}}\n                  <Ui::PSelect @options={{this.testScriptOptions}}\n                               @selected={{this.selectedTestScript}}\n                               @onChange={{this.testScriptChange}}\n                               @placeholder=\"Select test case to copy to ...\" as |option|>\n                    <span class=\"semi-bold\">{{option.name}}</span>\n                  </Ui::PSelect>\n  \n                  <Input class=\"hidden\"\n                         id=\"check\"\n                         disabled={{true}}\n                         @value={{this.selectedTestScript.name}}\n                         data-parsley-required=\"true\"\n                         data-parsley-required-message=\"A test scenario is required\"\n                  />\n                {{/if}}\n              </div>\n              <div class=\"form-group\">\n                <label>Configuration </label>\n                {{#if this.loadingTestConfs}}\n                  <br/>\n                  Loading test configurations ...\n                {{else}}\n                  <Ui::PSelect @options={{this.testConfOptions}}\n                               @selected={{this.selectedTestConf}}\n                               @onChange={{this.testConfChange}}\n                               @placeholder=\"Select test case to copy to ...\" as |option|>\n                    <span class=\"semi-bold\">{{option.name}}</span>\n                  </Ui::PSelect>\n  \n                  <Input class=\"hidden\"\n                         disabled={{true}}\n                         @value={{this.selectedTestConf.name}}\n                         data-parsley-required=\"true\"\n                         data-parsley-required-message=\"A test configuration is required\"\n                  />\n                {{/if}}\n              </div>\n              <div class=\"form-group\">\n                <label>Test Results </label>\n                <div>\n                  {{#if this.executions}}\n                    <ExecutionsGrid @id=\"testCaseBaseLineModalExecutionGrid\"\n                                    @now={{@now}}\n                                    @config={{@config}}\n                                    @data={{this.executions}}\n                                    @metricDefs={{@testConf.testCase.metricDefs}}\n                                    @scriptType={{@testConf.script.scriptType}}\n                                    @isLoad={{eq @model.testType 'Load'}}\n                                    @showSelection={{true}}\n                                    @onSelect={{this.onSelect}}\n                                    @sortColumnIndex={{4}}\n                                    @preSelected={{or this.selectedExecution @selectedExecution @testConf.baseline}}\n                    />\n                  {{else if this.loadingExecutions}}\n                    Loading executions ...\n                  {{else}}\n                    No test executions found.\n                  {{/if}}\n                </div>\n              </div>\n            {{/if}}\n            {{#unless @isCompareResults}}\n              <div class=\"form-group\">\n                <label class=\"normal\">\n                  <Input @type=\"checkbox\" @checked={{this.recalculateResults}} {{on \"change\" this.updateRecalculateResults}}  />\n                  Recalculate comparisons relative to the new baseline for all runs of this configuration\n                </label>\n              {{#if this.recalculateResults}}\n                <label class=\"mt-2 normal d-flex align-items-center\">\n                  <Input class=\"me-1\" @type=\"checkbox\" @checked={{this.recalculateAfterBaseline}} />\n                  Only recalculate comparisons for test runs after the baseline\n                </label>\n                <label class=\"normal d-flex align-items-center\">\n                  <Input class=\"me-1\" @type=\"checkbox\" @checked={{this.recalculateMostRecent}} />\n                  Only recalculate comparisons for the most recent\n                  <Input class=\"w-auto form-control form-control-sm ms-2 me-2\" disabled={{not this.recalculateMostRecent}} @type=\"number\" min=\"1\" max=\"25\" @value={{this.recalculateLimit}} />\n                  runs\n                </label>\n              {{/if}}\n            </div>\n  \n            {{/unless}}\n            <button disabled={{if (or this.saving\n                                      (and (eq this.baselineSelectionType 'search') (not this.selectedExecution))\n                                      (and (eq this.baselineSelectionType 'execution_id') (not this.executionId))\n                                  ) 'true'}} type=\"submit\" class=\"btn btn-success\">\n              {{#if @isCompareResults}}\n                {{if this.saving \"Comparing...\" \"Compare\"}}\n              {{else}}\n                {{#if @testConf.baseline}}\n                  {{if this.saving \"Saving...\" \"Save\"}}\n                {{else}}\n                  {{if this.saving \"Updating...\" \"Update\"}}\n                {{/if}}\n              {{/if}}\n            </button>\n            {{#unless (eq this.baselineSelectionType 'search')}}\n              <button type=\"button\" {{on \"click\" this.redirectToExecutionId}} disabled={{or (not this.executionId) this.redirecting}} class=\"btn btn-success\">\n                {{if this.redirecting \"Opening...\" \"Verify result in new tab\"}}\n              </button>\n            {{/unless}}\n            <button {{on \"click\" (fn this.closeModal false)}} type=\"button\" class=\"btn btn-primary\">\n              Cancel\n            </button>\n          </form>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"testCaseBaseLineModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Baseline Test Result\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"form\\\"],[24,1,\\\"copyTestScriptForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"submit\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingTestCases\\\"]],[[[1,\\\"              \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n              Loading test cases ...\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"mb-2\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,8],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"radio\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"baselineSelectionType\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"search\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    Search\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"execution_id\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    Execution ID\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[1]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"execution_id\\\"],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                    Execution ID\\\\n                    \\\"],[8,[39,13],null,[[\\\"@content\\\"],[[29,[\\\"The ID for the specific test result you want to compare to. \\\",[52,[30,0,[\\\"executionId\\\"]],[28,[37,14],[\\\"Found in the URL at \\\",[30,0,[\\\"externalUrl\\\"]]],null]]]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,15],[[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"executionId\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Case \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@placeholder\\\"],[[30,0,[\\\"testCasesOptions\\\"]],[30,0,[\\\"selectedTestCase\\\"]],[30,0,[\\\"testCaseChange\\\"]],\\\"Select test case to copy to ...\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[28,[35,18],[[30,2,[\\\"path\\\"]]],null]],[13],[1,\\\"\\\\n                \\\"]],[2]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,15],[[24,0,\\\"hidden\\\"],[24,1,\\\"check\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"A test case is required\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"selectedTestCase\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,11],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"search\\\"],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Scenario \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingTestScenarios\\\"]],[[[1,\\\"                \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                Loading test scenarios ...\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@placeholder\\\"],[[30,0,[\\\"testScriptOptions\\\"]],[30,0,[\\\"selectedTestScript\\\"]],[30,0,[\\\"testScriptChange\\\"]],\\\"Select test case to copy to ...\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[30,3,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,15],[[24,0,\\\"hidden\\\"],[24,1,\\\"check\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"A test scenario is required\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"selectedTestScript\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Configuration \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingTestConfs\\\"]],[[[1,\\\"                \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                Loading test configurations ...\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[39,16],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@placeholder\\\"],[[30,0,[\\\"testConfOptions\\\"]],[30,0,[\\\"selectedTestConf\\\"]],[30,0,[\\\"testConfChange\\\"]],\\\"Select test case to copy to ...\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"semi-bold\\\"],[12],[1,[30,4,[\\\"name\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,15],[[24,0,\\\"hidden\\\"],[16,\\\"disabled\\\",true],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"A test configuration is required\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"selectedTestConf\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[12],[1,\\\"Test Results \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"executions\\\"]],[[[1,\\\"                  \\\"],[8,[39,19],null,[[\\\"@id\\\",\\\"@now\\\",\\\"@config\\\",\\\"@data\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@showSelection\\\",\\\"@onSelect\\\",\\\"@sortColumnIndex\\\",\\\"@preSelected\\\"],[\\\"testCaseBaseLineModalExecutionGrid\\\",[30,5],[30,6],[30,0,[\\\"executions\\\"]],[30,7,[\\\"testCase\\\",\\\"metricDefs\\\"]],[30,7,[\\\"script\\\",\\\"scriptType\\\"]],[28,[37,11],[[30,8,[\\\"testType\\\"]],\\\"Load\\\"],null],true,[30,0,[\\\"onSelect\\\"]],4,[28,[37,20],[[30,0,[\\\"selectedExecution\\\"]],[30,9],[30,7,[\\\"baseline\\\"]]],null]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"loadingExecutions\\\"]],[[[1,\\\"                  Loading executions ...\\\\n\\\"]],[]],[[[1,\\\"                  No test executions found.\\\\n                \\\"]],[]]]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,10]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,15],[[4,[38,5],[\\\"change\\\",[30,0,[\\\"updateRecalculateResults\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateResults\\\"]]]],null],[1,\\\"\\\\n                Recalculate comparisons relative to the new baseline for all runs of this configuration\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"recalculateResults\\\"]],[[[1,\\\"              \\\"],[10,\\\"label\\\"],[14,0,\\\"mt-2 normal d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,15],[[24,0,\\\"me-1\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateAfterBaseline\\\"]]]],null],[1,\\\"\\\\n                Only recalculate comparisons for test runs after the baseline\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,15],[[24,0,\\\"me-1\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateMostRecent\\\"]]]],null],[1,\\\"\\\\n                Only recalculate comparisons for the most recent\\\\n                \\\"],[8,[39,15],[[24,0,\\\"w-auto form-control form-control-sm ms-2 me-2\\\"],[16,\\\"disabled\\\",[28,[37,22],[[30,0,[\\\"recalculateMostRecent\\\"]]],null]],[24,\\\"min\\\",\\\"1\\\"],[24,\\\"max\\\",\\\"25\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"recalculateLimit\\\"]]]],null],[1,\\\"\\\\n                runs\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[52,[28,[37,20],[[30,0,[\\\"saving\\\"]],[28,[37,23],[[28,[37,11],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"search\\\"],null],[28,[37,22],[[30,0,[\\\"selectedExecution\\\"]]],null]],null],[28,[37,23],[[28,[37,11],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"execution_id\\\"],null],[28,[37,22],[[30,0,[\\\"executionId\\\"]]],null]],null]],null],\\\"true\\\"]],[14,0,\\\"btn btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,10],[[[1,\\\"              \\\"],[1,[52,[30,0,[\\\"saving\\\"]],\\\"Comparing...\\\",\\\"Compare\\\"]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,7,[\\\"baseline\\\"]],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"saving\\\"]],\\\"Saving...\\\",\\\"Save\\\"]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"saving\\\"]],\\\"Updating...\\\",\\\"Update\\\"]],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,11],[[30,0,[\\\"baselineSelectionType\\\"]],\\\"search\\\"],null]],[[[1,\\\"            \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[28,[37,20],[[28,[37,22],[[30,0,[\\\"executionId\\\"]]],null],[30,0,[\\\"redirecting\\\"]]],null]],[24,0,\\\"btn btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"redirectToExecutionId\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[1,[52,[30,0,[\\\"redirecting\\\"]],\\\"Opening...\\\",\\\"Verify result in new tab\\\"]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"closeModal\\\"]],false],null]],null],[12],[1,\\\"\\\\n            Cancel\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"bg\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"@now\\\",\\\"@config\\\",\\\"@testConf\\\",\\\"@model\\\",\\\"@selectedExecution\\\",\\\"@isCompareResults\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"if\\\",\\\"br\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"eq\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"concat\\\",\\\"input\\\",\\\"ui/p-select\\\",\\\"span\\\",\\\"decode-test-case-name\\\",\\\"executions-grid\\\",\\\"or\\\",\\\"unless\\\",\\\"not\\\",\\\"and\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-case-baseline-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCaseBaseLineModalComponent = _exports.default = (_class = class TestCaseBaseLineModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"testCasesOptions\", _descriptor3, this);\n      _initializerDefineProperty(this, \"testScriptOptions\", _descriptor4, this);\n      _initializerDefineProperty(this, \"testConfOptions\", _descriptor5, this);\n      _initializerDefineProperty(this, \"executions\", _descriptor6, this);\n      _initializerDefineProperty(this, \"loadingTestCases\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loadingTestScenarios\", _descriptor8, this);\n      _initializerDefineProperty(this, \"loadingTestConfs\", _descriptor9, this);\n      _initializerDefineProperty(this, \"loadingExecutions\", _descriptor0, this);\n      _initializerDefineProperty(this, \"selectedTestCase\", _descriptor1, this);\n      _initializerDefineProperty(this, \"selectedTestScript\", _descriptor10, this);\n      _initializerDefineProperty(this, \"selectedTestConf\", _descriptor11, this);\n      _initializerDefineProperty(this, \"doSendUpdate\", _descriptor12, this);\n      _initializerDefineProperty(this, \"selectedExecution\", _descriptor13, this);\n      _initializerDefineProperty(this, \"recalculateResults\", _descriptor14, this);\n      _initializerDefineProperty(this, \"recalculateAfterBaseline\", _descriptor15, this);\n      _initializerDefineProperty(this, \"recalculateMostRecent\", _descriptor16, this);\n      _initializerDefineProperty(this, \"recalculateLimit\", _descriptor17, this);\n      _initializerDefineProperty(this, \"saving\", _descriptor18, this);\n      _initializerDefineProperty(this, \"baselineSelectionType\", _descriptor19, this);\n      _initializerDefineProperty(this, \"executionId\", _descriptor20, this);\n      _initializerDefineProperty(this, \"redirecting\", _descriptor21, this);\n      _defineProperty(this, \"reloadPage\", false);\n      this.postInit();\n    }\n    get externalUrl() {\n      return `${_environment.config.websiteUrl || 'http://localhost:4200'}/results/${this.executionId}`;\n    }\n    async postInit() {\n      let testCaseId = this.args.testCase.id;\n      let testScriptId = this.args.testScript.id;\n      let testConfId = this.args.testConf.id;\n      if (this.args.selectedExecution || this.args.testConf.baseline) {\n        await _server.default.getLoadTestExecution(this.args.selectedExecution || this.args.testConf.baseline).then(exec => {\n          testCaseId = exec.testCaseId;\n          testScriptId = exec.configuration.script.id;\n          testConfId = exec.confId;\n        });\n      }\n      let testCasesOptions = [];\n      if (_environment.config.currentUser.orgId === this.args.testCase.organization.id) {\n        testCasesOptions = _.sortBy(this.applicationState.applications, 'name');\n      } else {\n        await _server.default.getTestCases(this.args.testCase.organization.id, {\n          includeLatestExecution: false\n        }).then(results => {\n          testCasesOptions = results.testCases;\n        });\n      }\n      this.testCasesOptions = testCasesOptions.filter(testCase => !testCase.isFolder);\n      let selectedTestCase = this.testCasesOptions.find(tc => tc.id === testCaseId);\n      if (!selectedTestCase) {\n        return;\n      }\n      await this.testCaseChange(selectedTestCase);\n      this.selectedTestCase = selectedTestCase;\n      this.selectedTestScript = this.testScriptOptions.find(script => script.id === testScriptId);\n      await this.testScriptChange(this.selectedTestScript);\n      this.selectedTestConf = this.testConfOptions.find(conf => conf.id === testConfId);\n      await this.testConfChange(this.selectedTestConf);\n    }\n    async testCaseChange(testCase) {\n      this.executions = [];\n      this.selectedTestScript = null;\n      this.selectedTestConf = null;\n      this.selectedExecution = null;\n      this.selectedTestCase = testCase;\n      this.loadingTestScenarios = true;\n      await _server.default.getScripts(testCase.id).then(scripts => {\n        scripts.forEach(script => {\n          script.testCaseId = testCase.id;\n        });\n        this.loadingTestScenarios = false;\n        this.testScriptOptions = _.sortBy(scripts, 'name');\n      });\n    }\n    async testScriptChange(testCase) {\n      this.executions = [];\n      this.selectedTestConf = null;\n      this.selectedExecution = null;\n      this.selectedTestScript = testCase;\n      this.loadingTestConfs = true;\n      await _server.default.getScriptConfs(testCase.id).then(scripts => {\n        scripts.results.forEach(script => {\n          script.testCaseId = testCase.id;\n        });\n        this.loadingTestConfs = false;\n        this.testConfOptions = _.sortBy(scripts.results, 'name');\n      });\n    }\n    async testConfChange(testCase) {\n      this.selectedExecution = null;\n      this.executions = [];\n      this.selectedTestConf = testCase;\n      this.loadingExecutions = true;\n      await _server.default.getExecutions(testCase.id, {\n        limit: 25,\n        offset: 0\n      }).then(executions => {\n        this.executions = executions.filter(execution => this.args.currentResultId !== execution.id && this.args.testConf.testType === execution.testType);\n      });\n      this.loadingExecutions = false;\n    }\n    get selectedExecutionId() {\n      return this.baselineSelectionType === 'execution_id' ? this.executionId : this.selectedExecution;\n    }\n    submit(e) {\n      e.preventDefault();\n      if (this.args.isCompareResults) {\n        this.closeModal(true);\n      } else {\n        _lib.default.confirm('Are you sure you want to set this test result as the baseline?', 'OK', async () => {\n          this.saving = true;\n          const data = {\n            executionId: this.selectedExecution,\n            recalculateResults: this.recalculateResults,\n            recalculateAfterBaseline: this.recalculateAfterBaseline\n          };\n          if (this.recalculateMostRecent) {\n            data.recalculateLimit = parseInt(this.recalculateLimit);\n          }\n          await this.api.testConfs.baseline.save(this.args.testConf.id, data);\n          _lib.default.info('Successfully set baseline');\n          this.saving = false;\n          this.reloadPage = true;\n          this.closeModal(true);\n        }, 'Cancel', () => {}, 'Set Baseline');\n      }\n    }\n    onSelect(execution) {\n      if (execution.length) {\n        this.selectedExecution = execution[0].id;\n      } else {\n        this.selectedExecution = null;\n      }\n    }\n    redirectToExecutionId(e) {\n      e.preventDefault();\n      this.redirecting = true;\n      _server.default.getLoadTestExecution(this.executionId).then(() => {\n        const newTab = window.open(`${this.externalUrl}`, '_blank');\n        newTab.onload = function () {\n          newTab.focus();\n        };\n        this.redirecting = false;\n      }, () => {\n        this.redirecting = false;\n      });\n    }\n    didInsert() {\n      const _this = this;\n      $('#testCaseBaseLineModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed(_this.selectedExecutionId, _this.doSendUpdate);\n      });\n      $('#testCaseBaseLineModal').modal('show');\n      $('#testCaseBaseLineModal').on('shown.bs.modal', function () {\n        $('#copyTestScriptForm').parsley();\n      });\n    }\n    closeModal(status) {\n      this.doSendUpdate = status;\n      $('#testCaseBaseLineModal').modal('hide');\n    }\n    updateRecalculateResults(e) {\n      this.recalculateResults = e.target.checked;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"testCasesOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"testScriptOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"testConfOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"executions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"loadingTestCases\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loadingTestScenarios\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"loadingTestConfs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"loadingExecutions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"selectedTestCase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"selectedTestScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"selectedTestConf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"doSendUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"selectedExecution\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"recalculateResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"recalculateAfterBaseline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"recalculateMostRecent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"recalculateLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"saving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"baselineSelectionType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'search';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"executionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"redirecting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"testCaseChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testCaseChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testScriptChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testScriptChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testConfChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testConfChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"submit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"submit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelect\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelect\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"redirectToExecutionId\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"redirectToExecutionId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRecalculateResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRecalculateResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCaseBaseLineModalComponent);\n});","define(\"@testable/shared-ui/components/test-case-card\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/runloop\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _runloop, _object, _tracking, _service, _login, _lib, _server, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div {{did-insert this.didInsert}}>\n    <div id=\"{{this.collapseId}}Toggle\" class=\"card with-border bg-grey-light test-case-file {{if @testCaseInfo.draggable \"draggable\"}}\">\n    <div class=\"card-header d-flex justify-content-between p-10 overflow-hidden\">\n      <div class=\"d-inline-flex heading\">\n        <div class=\"d-flex\">\n          {{#if @allowActions}}\n            <a role=\"button\"\n            data-bs-toggle=\"collapse\"\n            id=\"testClick{{@testCaseInfo.testCase.id}}{{@uniqueId}}\"\n            href=\"#{{this.collapseId}}\"\n            aria-expanded=\"false\"\n            class=\"btn btn-sm btn-icon btn-circle text-primary pull-left m-r-10\"\n            aria-controls=\"{{this.collapseId}}\">\n            <Ui::Icon @icon=\"fa fa-plus\" /></a>\n          {{/if}}\n          {{#if @runMultipleTestsEnabled}}\n            <Input @type=\"checkbox\" class=\"m-r-4 float-left\" @checked={{@testCaseInfo.selected}} {{on \"click\" this.onSelectChange}}/>\n          {{/if}}\n          <LinkTo class=\"d-inline-flex {{if this.isUnnamed 'text-muted'}}\" @route='view' @model={{@testCaseInfo.testCase.id}}>{{html-safe (truncate-string this.title 100 false false 'truncate-inline')}}</LinkTo>\n        </div>\n        {{#if (and @testCaseInfo.lastRun @testCaseInfo.testCase.lastRunExecutionId)}}\n          <LinkTo @route='loadTestResults' @model={{@testCaseInfo.testCase.lastRunExecutionId}} class=\"m-l-10 text-muted f-s-12\">\n            Last run {{live-relative-duration @testCaseInfo.lastRun}}\n          </LinkTo>\n        {{/if}}\n        {{#if (gt @testCaseInfo.runningStats.count 0)}}\n          <a role=\"button\" {{on \"click\" this.showRunningExecutionsModal}}>\n            <Ui::Icon @icon=\"fa fa-spinner fa-spin\" class=\"m-l-5\" data-bs-toggle=\"tooltip\" title={{@testCaseInfo.runningStats.tooltip}} />\n          </a>\n        {{/if}}\n        {{#if (gt @testCaseInfo.schedules.length 0)}}\n          <a role=\"button\" {{on \"click\" this.showScheduledModal}}>\n            <Ui::Icon @icon=\"fa fa-clock\"  class=\"m-l-5\" data-bs-toggle=\"tooltip\" data-bs-html=\"true\"\n              title=\"{{@testCaseInfo.runningStats.scheduleTooltip}}\"\n              data-original-title=\"{{@testCaseInfo.runningStats.scheduleTooltip}}\" />\n          </a>\n        {{/if}}\n        <Ui::NoteIcon @note={{@testCaseInfo.testCase.note}} />\n        <TagsShow @tags={{@testCaseInfo.testCase.tags}} />\n  \n        <Ui::DeleteLoadingIndicator @isDeleting={{this.isDeleting}} @class=\"fs-7\" />\n      </div>\n  \n      {{#if @allowActions}}\n      <div class=\"d-contents mw-50\">\n        <div class=\"hover-menu d-flex\">\n          <button {{on \"click\" this.collapseAll}} type=\"button\" data-bs-toggle=\"tooltip\" title=\"Collapse all\" class=\"btn btn-icon btn-circle text-success btn-sm \">\n            <Ui::Icon @icon=\"fa fa-compress\" /></button>\n          <button {{on \"click\" this.expandAll}} type=\"button\" data-bs-toggle=\"tooltip\" title=\"Expand all\" class=\"btn btn-icon btn-circle text-success btn-sm \">\n            <Ui::Icon @icon=\"fa fa-expand\" /></button>\n        </div>\n        {{#unless this.isViewer}}\n          <button type=\"button\" class=\"btn btn-icon btn-sm btn-circle text-primary\" data-bs-toggle=\"dropdown\">\n            <Ui::Icon @icon=\"fa fa-ellipsis-h\" />\n          </button>\n          <ul class=\"dropdown-menu dropdown-menu-end\" role=\"menu\">\n            {{#if (gt @testCaseInfo.runningStats.count 0)}}\n              <li>\n                <a href=\"javascript:;\" {{on \"click\" this.stopExecutions}}><Ui::Icon @icon=\"fa fa-stop\" /> Stop Running Tests</a>\n              </li>\n            {{/if}}\n            <li>\n              <LinkTo @route='view' @model={{@testCaseInfo.testCase.id}}>\n                <Ui::Icon @icon=\"fa fa-link\" /> View Test Case Details</LinkTo>\n            </li>\n            {{#if (gt @testCaseInfo.runningStats.count 0)}}\n              <li>\n                <a {{on \"click\" this.showRunningExecutionsModal}} role=\"button\">\n                  <Ui::Icon @icon=\"fa fa-spinner fa-lg\" /> View Running Tests\n                </a>\n              </li>\n            {{/if}}\n            {{#if (gt @testCaseInfo.schedules.length 0)}}\n              <li>\n                <a {{on \"click\" this.showScheduledModal}} role=\"button\">\n                  <Ui::Icon @icon=\"fa fa-clock fa-lg\" /> View Scheduled Tests\n                </a>\n              </li>\n            {{/if}}\n            {{#if (gt @testCaseInfo.testCase.lastRunExecutionId 0)}}\n              <li>\n                <LinkTo @route='loadTestResults' @model={{@testCaseInfo.testCase.lastRunExecutionId}}>\n                  <Ui::Icon @icon=\"fa fa-tachometer-alt\" /> View Last Run</LinkTo>\n              </li>\n            {{/if}}\n            <li class=\"divider\"></li>\n            <li>\n              <a {{on \"click\" this.showCreateScenarioModal}} role=\"button\">\n                <Ui::Icon @icon=\"fa fa-plus\" /> New Scenario\n              </a>\n            </li>\n            {{#if (gt @testCaseInfo.testCase.scriptCount 0)}}\n              <li>\n                <LinkTo @route='create-test' @model={{@testCaseInfo.testCase.id}}>\n                  <Ui::Icon @icon=\"fa fa-plus\" /> New Test Configuration\n                </LinkTo>\n              </li>\n            {{/if}}\n            <li>\n              <a {{on \"click\" @runMultipleTests}} role=\"button\"><Ui::Icon @icon=\"fa fa-th-list\" /> Bulk Actions</a>\n            </li>\n            <li class=\"divider\"></li>\n            <li>\n              <a {{on \"click\" this.copyTestCase}} role=\"button\"><Ui::Icon @icon=\"fa fa-copy\" /> Copy Test Case</a>\n            </li>\n            <li>\n              <a {{on \"click\" this.moveApp}} role=\"button\"><Ui::Icon @icon=\"fa fa-people-carry-box\" /> Move Test Case</a>\n            </li>\n            <li>\n              <a {{on \"click\" (fn (mut this.showChangeFolderModal) true)}} role=\"button\"><Ui::Icon @icon=\"fa fa-people-carry-box\" /> Change Folder</a>\n            </li>\n            <li>\n              <a {{on \"click\" this.deleteTestCase }} role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /> Delete Test Case</a>\n            </li>\n            {{#if (or (gt @testCaseInfo.runningStats.activeScheduled 0) (gt @testCaseInfo.runningStats.scheduled 0))}}\n              <li class=\"divider\"></li>\n            {{/if}}\n            {{#if (gt @testCaseInfo.runningStats.scheduled @testCaseInfo.runningStats.activeScheduled)}}\n              <li>\n                <a {{on \"click\" (fn this.toggleSchedules true)}} role=\"button\"><Ui::Icon @icon=\"fa fa-play\" /> Resume All Test Schedules</a>\n              </li>\n            {{/if}}\n            {{#if (gt @testCaseInfo.runningStats.activeScheduled 0)}}\n              <li>\n                <a {{on \"click\" (fn this.toggleSchedules false)}} role=\"button\"><Ui::Icon @icon=\"fa fa-pause\" /> Pause All Test Schedules</a>\n              </li>\n            {{/if}}\n            {{#if (gt @testCaseInfo.runningStats.scheduled 0)}}\n              <li>\n                <a {{on \"click\" this.cancelSchedules}} role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /> Cancel All Test Schedules</a>\n              </li>\n            {{/if}}\n            <li>\n              <a {{on \"click\" this.showActivityModal}} role=\"button\"><Ui::Icon @icon=\"fa fa-history\" /> View Audit Trail</a>\n            </li>\n          </ul>\n        {{/unless}}\n      </div>\n      {{/if}}\n    </div>\n    <div id=\"{{this.collapseId}}\" class=\"collapse\" aria-expanded=\"false\">\n      <div class=\"card-block p-b-0\">\n      {{#if @testCaseInfo.isLoading}}\n        <h5 class=\"p-b-10\">Loading details...</h5>\n      {{else if (not @testCaseInfo.hasExpanded)}}\n        <h5 class=\"p-b-10\">Not yet expanded</h5>\n      {{else if (gt @testCaseInfo.filteredConfGroups.length 0)}}\n        {{#each @testCaseInfo.groupedConfGroups as |confGroups|}}\n          <div class=\"row\">\n            {{#each confGroups as |confGroup|}}\n              <div class=\"m-b-20 col-xs-12 col-sm-12 {{if\n                      (or (not-eq @testCaseInfo.layout 'minimal') (and (eq @testCaseInfo.groupedConfGroups.length 1) (eq confGroups.length 1)))\n                      'col-lg-12' 'col-lg-12'}}\">\n                <ConfGroupCard @confGroup={{confGroup}}\n                               @testCaseInfo={{@testCaseInfo}}\n                               @runMultipleTestsEnabled={{@runMultipleTestsEnabled}}\n                               @onConfSelected={{@onConfSelected}}\n                               @showTestOutcome={{this.showTestOutcome}}\n                               @showTestSummaryModal={{@showTestSummaryModal}}\n                               @showRunningExecutionsModal={{this.showRunningExecutionsModalForConf}}\n                               @showScheduledModal={{this.showScheduledModalForConf}}\n                               @showActivityModal={{this.showActivityModalForConf}}\n                               @toggleSchedules={{this.toggleSchedules}}\n                               @stopExecutions={{this.stopExecutions}}\n                               @cancelSchedules={{this.cancelSchedules}} />\n              </div>\n            {{/each}}\n          </div>\n        {{/each}}\n      {{else if (eq @testCaseInfo.filter.id 'all')}}\n        <h5>No scenarios defined yet.\n          {{#unless this.isViewer}}\n            <a {{on \"click\" this.showCreateScenarioModal}} role=\"button\">Create one now.</a>\n          {{/unless}}\n        </h5>\n      {{else}}\n        <h5>No scenarios and test configurations matched your filter.</h5>\n      {{/if}}\n      </div>\n    </div>\n  </div>\n  </div>\n  {{#if this.showCopyCaseModal}}\n    <TestCaseCopyModal @testCaseId={{@testCaseInfo.testCase.id}}\n                       @modalClosed={{this.copyCaseModalClosed}} />\n  {{/if}}\n  {{#if this.showMoveCaseModal}}\n    <TestCaseMoveModal @testCaseId={{@testCaseInfo.testCase.id}}\n                       @modalClosed={{this.moveCaseModalClosed}} />\n  {{/if}}\n  {{#if this.showChangeFolderModal}}\n    <TestCaseChangeFolderModal @testCase={{@testCaseInfo.testCase}}\n                       @closeModal={{fn (mut this.showChangeFolderModal) false}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[[30,0,[\\\"collapseId\\\"]],\\\"Toggle\\\"]]],[15,0,[29,[\\\"card with-border bg-grey-light test-case-file \\\",[52,[30,1,[\\\"draggable\\\"]],\\\"draggable\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"card-header d-flex justify-content-between p-10 overflow-hidden\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"d-inline-flex heading\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,1,[29,[\\\"testClick\\\",[30,1,[\\\"testCase\\\",\\\"id\\\"]],[30,3]]]],[15,6,[29,[\\\"#\\\",[30,0,[\\\"collapseId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"false\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary pull-left m-r-10\\\"],[15,\\\"aria-controls\\\",[29,[[30,0,[\\\"collapseId\\\"]]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,4],[[[1,\\\"          \\\"],[8,[39,5],[[24,0,\\\"m-r-4 float-left\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"onSelectChange\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,1,[\\\"selected\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[8,[39,7],[[16,0,[29,[\\\"d-inline-flex \\\",[52,[30,0,[\\\"isUnnamed\\\"]],\\\"text-muted\\\"]]]]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"testCase\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[28,[35,8],[[28,[37,9],[[30,0,[\\\"title\\\"]],100,false,false,\\\"truncate-inline\\\"],null]],null]]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,1,[\\\"lastRun\\\"]],[30,1,[\\\"testCase\\\",\\\"lastRunExecutionId\\\"]]],null],[[[1,\\\"        \\\"],[8,[39,7],[[24,0,\\\"m-l-10 text-muted f-s-12\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"testCase\\\",\\\"lastRunExecutionId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          Last run \\\"],[1,[28,[35,11],[[30,1,[\\\"lastRun\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"count\\\"]],0],null],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showRunningExecutionsModal\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],[[24,0,\\\"m-l-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[16,\\\"title\\\",[30,1,[\\\"runningStats\\\",\\\"tooltip\\\"]]]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"schedules\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showScheduledModal\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],[[24,0,\\\"m-l-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-html\\\",\\\"true\\\"],[16,\\\"title\\\",[29,[[30,1,[\\\"runningStats\\\",\\\"scheduleTooltip\\\"]]]]],[16,\\\"data-original-title\\\",[29,[[30,1,[\\\"runningStats\\\",\\\"scheduleTooltip\\\"]]]]]],[[\\\"@icon\\\"],[\\\"fa fa-clock\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[8,[39,13],null,[[\\\"@note\\\"],[[30,1,[\\\"testCase\\\",\\\"note\\\"]]]],null],[1,\\\"\\\\n      \\\"],[8,[39,14],null,[[\\\"@tags\\\"],[[30,1,[\\\"testCase\\\",\\\"tags\\\"]]]],null],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,15],null,[[\\\"@isDeleting\\\",\\\"@class\\\"],[[30,0,[\\\"isDeleting\\\"]],\\\"fs-7\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"d-contents mw-50\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"hover-menu d-flex\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Collapse all\\\"],[24,0,\\\"btn btn-icon btn-circle text-success btn-sm \\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"collapseAll\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-compress\\\"]],null],[13],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Expand all\\\"],[24,0,\\\"btn btn-icon btn-circle text-success btn-sm \\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"expandAll\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"        \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-icon btn-sm btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-ellipsis-h\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"count\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,6,\\\"javascript:;\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"stopExecutions\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\" Stop Running Tests\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"view\\\",[30,1,[\\\"testCase\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-link\\\"]],null],[1,\\\" View Test Case Details\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"count\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showRunningExecutionsModal\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-lg\\\"]],null],[1,\\\" View Running Tests\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"schedules\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showScheduledModal\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-clock fa-lg\\\"]],null],[1,\\\" View Scheduled Tests\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"testCase\\\",\\\"lastRunExecutionId\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"testCase\\\",\\\"lastRunExecutionId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-tachometer-alt\\\"]],null],[1,\\\" View Last Run\\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showCreateScenarioModal\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" New Scenario\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[30,1,[\\\"testCase\\\",\\\"scriptCount\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"create-test\\\",[30,1,[\\\"testCase\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" New Test Configuration\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,5]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-th-list\\\"]],null],[1,\\\" Bulk Actions\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"copyTestCase\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-copy\\\"]],null],[1,\\\" Copy Test Case\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"moveApp\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-people-carry-box\\\"]],null],[1,\\\" Move Test Case\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,20],[[28,[37,21],[[30,0,[\\\"showChangeFolderModal\\\"]]],null],true],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-people-carry-box\\\"]],null],[1,\\\" Change Folder\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"deleteTestCase\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete Test Case\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,22],[[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"activeScheduled\\\"]],0],null],[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"scheduled\\\"]],0],null]],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"scheduled\\\"]],[30,1,[\\\"runningStats\\\",\\\"activeScheduled\\\"]]],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"toggleSchedules\\\"]],true],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\" Resume All Test Schedules\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"activeScheduled\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,20],[[30,0,[\\\"toggleSchedules\\\"]],false],null]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-pause\\\"]],null],[1,\\\" Pause All Test Schedules\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,12],[[30,1,[\\\"runningStats\\\",\\\"scheduled\\\"]],0],null],[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"cancelSchedules\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Cancel All Test Schedules\\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showActivityModal\\\"]]],null],[12],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-history\\\"]],null],[1,\\\" View Audit Trail\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[[30,0,[\\\"collapseId\\\"]]]]],[14,0,\\\"collapse\\\"],[14,\\\"aria-expanded\\\",\\\"false\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"card-block p-b-0\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"isLoading\\\"]],[[[1,\\\"      \\\"],[10,\\\"h5\\\"],[14,0,\\\"p-b-10\\\"],[12],[1,\\\"Loading details...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,24],[[30,1,[\\\"hasExpanded\\\"]]],null],[[[1,\\\"      \\\"],[10,\\\"h5\\\"],[14,0,\\\"p-b-10\\\"],[12],[1,\\\"Not yet expanded\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,12],[[30,1,[\\\"filteredConfGroups\\\",\\\"length\\\"]],0],null],[[[42,[28,[37,26],[[28,[37,26],[[30,1,[\\\"groupedConfGroups\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,26],[[28,[37,26],[[30,6]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[15,0,[29,[\\\"m-b-20 col-xs-12 col-sm-12 \\\",[52,[28,[37,22],[[28,[37,27],[[30,1,[\\\"layout\\\"]],\\\"minimal\\\"],null],[28,[37,10],[[28,[37,28],[[30,1,[\\\"groupedConfGroups\\\",\\\"length\\\"]],1],null],[28,[37,28],[[30,6,[\\\"length\\\"]],1],null]],null]],null],\\\"col-lg-12\\\",\\\"col-lg-12\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,29],null,[[\\\"@confGroup\\\",\\\"@testCaseInfo\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@onConfSelected\\\",\\\"@showTestOutcome\\\",\\\"@showTestSummaryModal\\\",\\\"@showRunningExecutionsModal\\\",\\\"@showScheduledModal\\\",\\\"@showActivityModal\\\",\\\"@toggleSchedules\\\",\\\"@stopExecutions\\\",\\\"@cancelSchedules\\\"],[[30,7],[30,1],[30,4],[30,8],[30,0,[\\\"showTestOutcome\\\"]],[30,9],[30,0,[\\\"showRunningExecutionsModalForConf\\\"]],[30,0,[\\\"showScheduledModalForConf\\\"]],[30,0,[\\\"showActivityModalForConf\\\"]],[30,0,[\\\"toggleSchedules\\\"]],[30,0,[\\\"stopExecutions\\\"]],[30,0,[\\\"cancelSchedules\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],null]],[]],[[[41,[28,[37,28],[[30,1,[\\\"filter\\\",\\\"id\\\"]],\\\"all\\\"],null],[[[1,\\\"      \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No scenarios defined yet.\\\\n\\\"],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"          \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showCreateScenarioModal\\\"]]],null],[12],[1,\\\"Create one now.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"h5\\\"],[12],[1,\\\"No scenarios and test configurations matched your filter.\\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]],[]]]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCopyCaseModal\\\"]],[[[1,\\\"  \\\"],[8,[39,30],null,[[\\\"@testCaseId\\\",\\\"@modalClosed\\\"],[[30,1,[\\\"testCase\\\",\\\"id\\\"]],[30,0,[\\\"copyCaseModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showMoveCaseModal\\\"]],[[[1,\\\"  \\\"],[8,[39,31],null,[[\\\"@testCaseId\\\",\\\"@modalClosed\\\"],[[30,1,[\\\"testCase\\\",\\\"id\\\"]],[30,0,[\\\"moveCaseModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showChangeFolderModal\\\"]],[[[1,\\\"  \\\"],[8,[39,32],null,[[\\\"@testCase\\\",\\\"@closeModal\\\"],[[30,1,[\\\"testCase\\\"]],[28,[37,20],[[28,[37,21],[[30,0,[\\\"showChangeFolderModal\\\"]]],null],false],null]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@testCaseInfo\\\",\\\"@allowActions\\\",\\\"@uniqueId\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@runMultipleTests\\\",\\\"confGroups\\\",\\\"confGroup\\\",\\\"@onConfSelected\\\",\\\"@showTestSummaryModal\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"input\\\",\\\"on\\\",\\\"link-to\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"and\\\",\\\"live-relative-duration\\\",\\\"gt\\\",\\\"ui/note-icon\\\",\\\"tags-show\\\",\\\"ui/delete-loading-indicator\\\",\\\"button\\\",\\\"unless\\\",\\\"ul\\\",\\\"li\\\",\\\"fn\\\",\\\"mut\\\",\\\"or\\\",\\\"h5\\\",\\\"not\\\",\\\"each\\\",\\\"-track-array\\\",\\\"not-eq\\\",\\\"eq\\\",\\\"conf-group-card\\\",\\\"test-case-copy-modal\\\",\\\"test-case-move-modal\\\",\\\"test-case-change-folder-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-case-card.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCaseCardComponent = _exports.default = (_dec = (0, _object.computed)('args.testCaseInfo.testCase.{name,scriptCount,success.total}'), _dec2 = (0, _object.computed)('args.testCaseInfo.testCase.name'), _dec3 = (0, _object.computed)('args.{testCaseInfo.testCase.id,uniqueId}'), _class = class TestCaseCardComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"showCopyCaseModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showMoveCaseModal\", _descriptor3, this);\n      _initializerDefineProperty(this, \"confGroupSelected\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showChangeFolderModal\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isDeleting\", _descriptor6, this);\n    }\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get title() {\n      const numConfs = this.args.testCaseInfo.testCase.success?.total || 0;\n      const numScenarios = this.args.testCaseInfo.testCase.scriptCount || 0;\n      const name = _lib.default.testCaseDisplayName(this.args.testCaseInfo.testCase.name);\n      return `${name} (${numScenarios} ${_lib.default.pluralCheck('scenario', numScenarios)}, ` + `${numConfs} ${_lib.default.pluralCheck('config', numConfs)})`;\n    }\n    get isUnnamed() {\n      return !this.args.testCaseInfo.testCase.name?.trim();\n    }\n    showRunningExecutionsModal() {\n      if (this.isViewer) return;\n      this.args.showRunningExecutionsModal(this.args.testCaseInfo.running, this.args.testCaseInfo.testCase);\n    }\n    showRunningExecutionsModalForConf(running, script, conf) {\n      this.args.showRunningExecutionsModal(running, this.args.testCaseInfo.testCase, script, conf);\n    }\n    showActivityModal() {\n      this.args.showActivityModal(this.args.testCaseInfo.testCase);\n    }\n    showActivityModalForConf(selectedScript, selectedConf) {\n      this.args.showActivityModal(this.args.testCaseInfo.testCase, selectedScript, selectedConf);\n    }\n    showScheduledModal() {\n      if (this.isViewer) return;\n      this.args.showScheduledModal(this.args.testCaseInfo.schedules, this.args.testCaseInfo.testCase);\n    }\n    showScheduledModalForConf(schedules, script, conf) {\n      this.args.showScheduledModal(schedules, this.args.testCaseInfo.testCase, script, conf);\n    }\n    copyTestCase() {\n      this.showCopyCaseModal = true;\n    }\n    moveApp() {\n      this.showMoveCaseModal = true;\n    }\n    copyCaseModalClosed(id) {\n      if (id) {\n        this.router.transitionTo('view', id);\n      }\n      this.showCopyCaseModal = false;\n    }\n    moveCaseModalClosed(orgId) {\n      this.showMoveCaseModal = false;\n      if (orgId) {\n        _login.default.setOrgCookie(orgId);\n        setTimeout(function () {\n          location.reload();\n        }, 500);\n      }\n    }\n    deleteTestCase() {\n      const name = this.args.testCaseInfo.testCase.name;\n      _lib.default.confirm('Are you sure you want to delete <strong>' + name + '</strong>?', 'OK', () => {\n        this.isDeleting = true;\n        _server.default.deleteTestCase(this.args.testCaseInfo.testCase.id).then(() => {\n          _lib.default.info('<strong>' + name + '</strong> deleted successfully');\n          this.isDeleting = false;\n        }).catch(() => {\n          this.isDeleting = false;\n        });\n      }, 'Cancel', () => {}, 'Delete Test Case');\n    }\n    toggleSchedules(active, scriptId, confId) {\n      [scriptId, confId] = _lib.default.stripEvents(scriptId, confId);\n      this.args.toggleSchedules(active, this.args.testCaseInfo.testCase.id, scriptId, confId);\n    }\n    cancelSchedules(scriptId, confId) {\n      [scriptId, confId] = _lib.default.stripEvents(scriptId, confId);\n      this.args.cancelSchedules(this.args.testCaseInfo.testCase.id, scriptId, confId);\n    }\n    stopExecutions(executions) {\n      [executions] = _lib.default.stripEvents(executions);\n      this.args.stopExecutions(executions || this.args.testCaseInfo.running);\n    }\n    showCreateScenarioModal() {\n      this.args.showCreateScenarioModal(this.args.testCaseInfo.testCase);\n    }\n    showTestOutcome(execution, confId, scriptType) {\n      this.args.showTestOutcome(execution, this.args.testCaseInfo.testCase.id, confId, scriptType);\n    }\n    expandAll() {\n      this.args.testCaseInfo.expandAll();\n    }\n    collapseAll() {\n      this.args.testCaseInfo.collapseChildren();\n    }\n    onSelectChange(event) {\n      const selected = event.target.checked;\n      (0, _object.set)(this.args.testCaseInfo, 'selected', selected);\n      this.args.testCaseInfo.groupedConfGroups.forEach(groupedConfGroup => {\n        groupedConfGroup.forEach(confGroup => {\n          (0, _object.set)(confGroup, 'selected', selected);\n          confGroup.sortedConfs.map(confDetails => {\n            (0, _object.set)(confDetails, 'selected', selected);\n          });\n        });\n      });\n      this.args.onConfSelected();\n    }\n    get collapseId() {\n      return `testCase${this.args.testCaseInfo.testCase.id}${this.args.uniqueId ?? ''}`;\n    }\n    didInsert() {\n      const {\n        collapseId\n      } = this;\n      (0, _object.set)(this.args.testCaseInfo, 'collapseId', collapseId);\n      if (!this.args.allowActions) return;\n      const toggleId = `#${collapseId}`;\n      const storageKey = `tc.${this.args.testCaseInfo.testCase.id}.expanded`;\n      const _this = this;\n      $(toggleId).on('show.bs.collapse', function (e) {\n        if ($(e.target).attr('id') === collapseId) {\n          _this.args.updateHasExpanded(true);\n          window.localStorage.setItem(storageKey, 'true');\n        }\n      });\n      $(toggleId).on('hide.bs.collapse', function (e) {\n        if ($(e.target).attr('id') === collapseId) {\n          window.localStorage.setItem(storageKey, 'false');\n        }\n      });\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        if (window.localStorage.getItem(storageKey) === 'true') {\n          $(toggleId).collapse('show');\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showCopyCaseModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showMoveCaseModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"confGroupSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showChangeFolderModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isDeleting\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"title\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"title\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isUnnamed\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"isUnnamed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRunningExecutionsModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRunningExecutionsModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRunningExecutionsModalForConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRunningExecutionsModalForConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showActivityModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showActivityModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showActivityModalForConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showActivityModalForConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showScheduledModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showScheduledModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showScheduledModalForConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showScheduledModalForConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyTestCase\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyTestCase\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"moveApp\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"moveApp\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyCaseModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyCaseModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"moveCaseModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"moveCaseModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteTestCase\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteTestCase\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleSchedules\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelSchedules\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopExecutions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopExecutions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCreateScenarioModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showCreateScenarioModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcome\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcome\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"expandAll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expandAll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"collapseAll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"collapseAll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"collapseId\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"collapseId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCaseCardComponent);\n});","define(\"@testable/shared-ui/components/test-case-move-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _lib, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsModal\n          @onSubmit={{this.submit}}\n          @onHidden={{@modalClosed}}\n          @onShown={{this.onShow}}\n          as |Modal|>\n    <Modal.header>\n      <h4 class=\"modal-title\">{{this.title}}</h4>\n    </Modal.header>\n    <Modal.body>\n      <form id=\"moveTestcaseForm\" {{on \"submit\" (fn this.submit Modal)}} data-parsley-trigger=\"focusout\">\n  \n        <div class=\"form-group\">\n          <label>Organization </label>\n          <Ui::PSelect @options={{this.organizations}}\n                       @selected={{this.targetOrg}}\n                       @onChange={{this.targetOrgChange}} as |option|>\n            {{option.organization.name}}\n          </Ui::PSelect>\n        </div>\n  \n        <div class=\"form-group\">\n          <label class=\"normal\">\n            <Input @type=\"checkbox\" class=\"m-r-5\" @checked={{this.copyRunnerSource}}/>\n            Copy Runner Source\n            <Ui::InfoIcon @content={{this.copyRunnerSourceInfo}} @placement=\"bottom\"/>\n          </label>\n        </div>\n  \n        <div class=\"form-group\">\n          <label></label>\n          <div>\n            <button disabled={{or this.submitInProgress (eq this.userOrg this.targetOrg)}}\n                    type=\"submit\" class=\"btn btn-sm btn-primary\"><strong>\n              {{if this.submitInProgress 'Processing...' this.submitText}}\n            </strong></button>\n          </div>\n        </div>\n      </form>\n    </Modal.body>\n  </BsModal>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@onSubmit\\\",\\\"@onHidden\\\",\\\"@onShown\\\"],[[30,0,[\\\"submit\\\"]],[30,1],[30,0,[\\\"onShow\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,0,[\\\"title\\\"]]],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,2,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,1,\\\"moveTestcaseForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,3],[\\\"submit\\\",[28,[37,4],[[30,0,[\\\"submit\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Organization \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,7],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"organizations\\\"]],[30,0,[\\\"targetOrg\\\"]],[30,0,[\\\"targetOrgChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,3,[\\\"organization\\\",\\\"name\\\"]]],[1,\\\"\\\\n        \\\"]],[3]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,8],[[24,0,\\\"m-r-5\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"copyRunnerSource\\\"]]]],null],[1,\\\"\\\\n          Copy Runner Source\\\\n          \\\"],[8,[39,9],null,[[\\\"@content\\\",\\\"@placement\\\"],[[30,0,[\\\"copyRunnerSourceInfo\\\"]],\\\"bottom\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n          \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[28,[37,11],[[30,0,[\\\"submitInProgress\\\"]],[28,[37,12],[[30,0,[\\\"userOrg\\\"]],[30,0,[\\\"targetOrg\\\"]]],null]],null]],[14,0,\\\"btn btn-sm btn-primary\\\"],[14,4,\\\"submit\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[52,[30,0,[\\\"submitInProgress\\\"]],\\\"Processing...\\\",[30,0,[\\\"submitText\\\"]]]],[1,\\\"\\\\n          \\\"],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]]]],[\\\"@modalClosed\\\",\\\"Modal\\\",\\\"option\\\"],[\\\"bs-modal\\\",\\\"h4\\\",\\\"form\\\",\\\"on\\\",\\\"fn\\\",\\\"div\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"or\\\",\\\"eq\\\",\\\"strong\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-case-move-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCaseMoveModalComponent = _exports.default = (_class = class TestCaseMoveModalComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"submitInProgress\", _descriptor2, this);\n      _initializerDefineProperty(this, \"copyRunnerSource\", _descriptor3, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor4, this);\n      _initializerDefineProperty(this, \"targetOrg\", _descriptor5, this);\n      _initializerDefineProperty(this, \"userOrg\", _descriptor6, this);\n      _defineProperty(this, \"copyRunnerSourceInfo\", `For any test configurations that use your cloud accounts as the test runner source,\n    you need to decide whether to copy that source over to the new organization or not (if one with the same does not already exist).\n    If you choose not to copy the source then the test configurations will continue to point at the source in the old organization\n    and users will need access to both organizations to run the test.`);\n      const userOrg = this.currentUser.orgs.filter(org => {\n        return org.organization.id === this.currentUser.org.id;\n      })[0];\n      this.targetOrg = userOrg;\n      this.userOrg = userOrg;\n    }\n    get title() {\n      return this.args.type === 'folder' ? 'Move Folder' : 'Move Test Case';\n    }\n    get submitText() {\n      return this.args.type === 'folder' ? 'Move Folder' : 'Move Case';\n    }\n    get organizations() {\n      return _.sortBy(this.currentUser.orgs, assoc => {\n        return assoc.organization.name.toUpperCase();\n      });\n    }\n    submit(Modal, e) {\n      this.submitInProgress = true;\n      e.preventDefault();\n      if ($('#moveTestcaseForm').parsley().validate()) {\n        const copyRunnerSource = this.copyRunnerSource;\n        const orgId = this.targetOrg.organization.id;\n        let action;\n        if (this.args.type === 'folder') {\n          const path = this.args.path || '/';\n          const sourceOrgId = _environment.config.currentUser.orgId;\n          const targetOrgId = orgId;\n          action = this.api.testCases.moveFolder({\n            path,\n            sourceOrgId,\n            targetOrgId,\n            copyRunnerSource\n          });\n        } else {\n          action = this.api.testCases.moveCase(this.args.testCaseId, orgId, {\n            copyRunnerSource\n          });\n        }\n        action.then(() => {\n          this.submitInProgress = false;\n          this.args.modalClosed(orgId);\n        }, (jqxhr, status, errMsg) => {\n          this.submitInProgress = false;\n          _lib.default.fail(jqxhr, status, errMsg);\n        });\n      } else {\n        this.submitInProgress = false;\n      }\n    }\n    onShow() {\n      $('#moveTestcaseForm').parsley();\n    }\n    targetOrgChange(org) {\n      this.targetOrg = org;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"submitInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"copyRunnerSource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"targetOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"userOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"submit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"submit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShow\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShow\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"targetOrgChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"targetOrgChange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCaseMoveModalComponent);\n});","define(\"@testable/shared-ui/components/test-cases-create-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@ember/runloop\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _environment, _server, _lib, _runloop, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"testcasesCreateModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}\n  >\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            {{this.title}}\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <form id=\"createFolderForm\" {{on \"submit\" this.createFolderName}} data-parsley-trigger=\"focusout\">\n          <div class=\"modal-body\">\n            <div class=\"form-group\">\n              <label>Folder Name</label>\n              <Input class=\"form-control\" \n                @type=\"text\" \n                @value={{this.name}} \n                data-parsley-required=\"true\" \n                data-parsley-required-message=\"Folder name is required.\" {{did-insert this.focusInput}}/>\n            </div>\n  \n            <div class=\"form-group\">\n              <button type=\"submit\" disabled={{this.isSaving}} class=\"btn btn-primary\" {{on \"click\" this.createFolderName}}>\n                {{if this.isSaving \"Saving...\" \"Create\"}}\n              </button>\n              <button type=\"button\" class=\"btn btn-danger\" data-bs-dismiss=\"modal\" aria-label=\"Close\">Cancel</button>\n            </div>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"testcasesCreateModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"title\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"form\\\"],[24,1,\\\"createFolderForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"createFolderName\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,\\\"Folder Name\\\"],[13],[1,\\\"\\\\n            \\\"],[8,[39,7],[[24,0,\\\"form-control\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Folder name is required.\\\"],[4,[38,1],[[30,0,[\\\"focusInput\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"name\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isSaving\\\"]]],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"submit\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"createFolderName\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[1,[52,[30,0,[\\\"isSaving\\\"]],\\\"Saving...\\\",\\\"Create\\\"]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-danger\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Cancel\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"label\\\",\\\"input\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-cases-create-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCasesCreateModalComponent = _exports.default = (_class = class TestCasesCreateModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor, this);\n      _initializerDefineProperty(this, \"testCaseFolders\", _descriptor2, this);\n      _initializerDefineProperty(this, \"name\", _descriptor3, this);\n      _initializerDefineProperty(this, \"saved\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isSaving\", _descriptor5, this);\n    }\n    get selectedFolderPath() {\n      return this.args.selectedPath || '/';\n    }\n    get title() {\n      const path = this.selectedFolderPath;\n      return `Create Folder ${path !== '/' ? 'in ' + path : ''}`;\n    }\n    didInsert() {\n      const _this = this;\n      $('#testcasesCreateModal').on('hidden.bs.modal', function () {\n        _this.args.closeModal(_this.saved);\n      });\n      $('#testcasesCreateModal').modal('show');\n      $('#testcasesCreateModal').on('shown.bs.modal', function () {\n        $('#createFolderForm').parsley();\n      });\n    }\n    focusInput(element) {\n      (0, _runloop.later)(this, () => {\n        if (element) {\n          element.focus();\n        }\n      }, 1500);\n    }\n    createFolderName(e) {\n      e.preventDefault();\n      if (!$('#createFolderForm').parsley().validate()) return;\n      const name = this.name.trim();\n      if (!name) return;\n      const folderPath = _lib.default.sanitizeFolderName(`${this.selectedFolderPath}/${name}`);\n      const folders = this.testCaseFolders.getFolders();\n      if (folders.some(folder => folder === folderPath)) {\n        _lib.default.error('Folder with the same name already exists in this directory');\n        return;\n      }\n      this.isSaving = true;\n      _server.default.createTestCase(_environment.config.currentUser.orgId, name, '', false, folderPath, true).then(() => {\n        _lib.default.info('Folder <strong>' + name + '</strong> created successfully');\n        this.saved = true;\n        this.isSaving = false;\n        $('#testcasesCreateModal').modal('hide');\n      }).catch(error => {\n        console.log(error);\n        this.isSaving = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"testCaseFolders\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"name\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"saved\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFolderName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFolderName\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCasesCreateModalComponent);\n});","define(\"@testable/shared-ui/components/test-cases-folder\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <ul class=\"folders\">\n    {{#each @data as |dir|}}\n      <li class=\"{{this.dirClasses dir}} d-inline-block align-top w-100\"\n        data-path=\"{{dir.path}}\"\n        data-name=\"{{dir.name}}\"\n        data-id=\"{{dir.id}}\"\n        data-isFolder=\"{{dir.isFolder}}\"\n        id=\"{{dir.id}}\"\n      >\n        {{#if dir.isFolder}}\n          <div id=\"testCaseFolder{{dir.id}}{{this.uniqueId}}Toggle\"\n            class=\"card test-case-folder overflow-visible {{if dir.baseFolder \"\" \"with-border\"}} {{if dir.draggable \"draggable\"}}\" >\n            {{#unless dir.baseFolder}}\n            <div class=\"card-header p-10\" style={{html-safe \"height: 41px;\"}} >\n  \n              {{#if dir.editName}}\n                <div class=\"float-start mw-215px\">\n                    <Input class=\"form-control\"  {{on \"keydown\" (fn this.renameFolderKeyDown dir)}} {{did-insert this.focusInput}} @value={{dir.updatedName}} />\n                </div>\n                <a {{on \"click\" (fn this.renameFolder dir)}} class=\"btn btn-sm btn-icon btn-success m-l-5\" data-bs-toggle=\"tooltip\"\n                  title=\"Update\" role=\"button\"><Ui::Icon role=\"presentation\" @icon=\"fa fa-check\" /></a>\n                <a {{on \"click\" (fn this.cancelRename dir)}} class=\"btn btn-sm btn-icon btn-danger\" data-bs-toggle=\"tooltip\"\n                  title=\"Cancel\" role=\"button\"><Ui::Icon role=\"presentation\" @icon=\"fa fa-times\" /></a>\n              {{else}}\n                <a role=\"button\"\n                  data-bs-toggle=\"collapse\"\n                  id=\"testClickFolder{{dir.id}}{{this.uniqueId}}\"\n                  href=\"#testCaseFolder{{dir.id}}{{this.uniqueId}}\"\n                  aria-expanded=\"false\"\n                  {{on \"click\" (fn this.handleCollapse dir)}}\n                  class=\"btn btn-sm btn-icon btn-circle text-primary pull-left m-r-10\"\n                  aria-controls=\"testCaseFolder{{dir.id}}{{this.uniqueId}}\">\n                  <Ui::Icon role=\"presentation\" @icon=\"fa fa-{{if dir.isClosed \"plus\" \"minus\"}}\" /></a>\n                  {{#if @runMultipleTestsEnabled}}\n                    <Input @type=\"checkbox\" class=\"m-r-4 float-start m-t-4\" @checked={{dir.selected}} {{on \"click\" (fn this.onFolderSelectChange dir)}} />\n                  {{/if}}\n                  <Ui::Icon @icon={{this.getIcon dir.isClosed}} class=\"m-r-5 text-warning float-start\" />\n                  <span class=\"name\">\n                    {{html-safe (truncate-string (this.getNameWithCount dir) 100 false false 'truncate-inline')}}\n                  </span>\n              {{/if}}\n  \n              <div class=\"pull-right\">\n                {{#if dir.isDeleting}}\n                  <Ui::DeleteLoadingIndicator @isDeleting={{true}} @class=\"fs-7\" />\n                {{else if @allowActions}}\n                  <button type=\"button\" class=\"btn btn-icon btn-sm btn-circle text-primary\" data-bs-toggle=\"dropdown\">\n                    <Ui::Icon @icon=\"fa fa-ellipsis-h\" />\n                  </button>\n                  <ul class=\"dropdown-menu dropdown-menu-end\" role=\"menu\">\n                    <li>\n                      <a role=\"button\" {{on \"click\" (fn @deleteFolder dir)}}>\n                        <Ui::Icon role=\"presentation\" @icon=\"fa fa-trash\" /> Delete Folder</a>\n                    </li>\n                    <li>\n                      <a role=\"button\" {{on \"click\" (fn @moveFolder dir)}}>\n                        <Ui::Icon class=\"pe-1\" role=\"presentation\" @icon=\"fa fa-people-carry-box\" />Move Folder</a>\n                    </li>\n                    <li>\n                      <a role=\"button\" {{on \"click\" (fn this.editName dir)}}>\n                        <Ui::Icon role=\"presentation\" @icon=\"fa fa-link\" /> Rename Folder\n                      </a>\n                    </li>\n                    {{#if @allowActions}}\n                      <li>\n                        <a role=\"button\" {{on \"click\" (fn @createFolder dir)}}>\n                          <Ui::Icon role=\"presentation\" @icon=\"fa fa-plus\" /> Create Folder</a>\n                      </li>\n                    {{/if}}\n                    <li>\n                      <a role=\"button\" {{on \"click\" (fn this.createTestCase dir)}}>\n                        <Ui::Icon role=\"presentation\" @icon=\"fa fa-plus\" /> Create Test Case\n                      </a>\n                    </li>\n                    <li>\n                      <a role=\"button\" {{on \"click\" @runMultipleTests}}>\n                        <Ui::Icon role=\"presentation\" @icon=\"fa fa-th-list\" /> Bulk Actions\n                      </a>\n                    </li>\n                  </ul>\n                {{/if}}\n              </div>\n            </div>\n            {{/unless}}\n  \n            <div id=\"testCaseFolder{{dir.id}}{{this.uniqueId}}\"\n              class=\"collapse test-case-dir\"\n              aria-expanded=\"false\"\n              {{did-insert (fn this.initCollapseState dir)}}\n            >\n              <div>\n                <ul class=\"{{if dir.children.length \"has-dir\"}}\">\n                  <TestCasesFolder\n                    @data={{dir.children}}\n                    @runMultipleTestsEnabled={{@runMultipleTestsEnabled}}\n                    @showCreateScenarioModal={{@showCreateScenarioModal}}\n                    @showTestOutcome={{@showTestOutcome}}\n                    @showTestSummaryModal={{@showTestSummaryModal}}\n                    @showRunningExecutionsModal={{@showRunningExecutionsModal}}\n                    @showScheduledModal={{@showScheduledModal}}\n                    @showActivityModal={{@showActivityModal}}\n                    @toggleSchedules={{@toggleSchedules}}\n                    @stopExecutions={{@stopExecutions}}\n                    @cancelSchedules={{@cancelSchedules}}\n                    @onConfSelected={{@onConfSelected}}\n                    @runMultipleTests={{@runMultipleTests}}\n                    @updateHasExpanded={{@updateHasExpanded}}\n                    @allowActions={{@allowActions}}\n                    @deleteFolder={{@deleteFolder}}\n                    @moveFolder={{@moveFolder}}\n                    @createFolder={{@createFolder}}\n                    @renameFolder={{@renameFolder}}\n                    @resetExpandAll={{@resetExpandAll}}\n                    @createTestCase={{@createTestCase}}\n                    />\n                </ul>\n              </div>\n            </div>\n          </div>\n        {{else}}\n  \n          <TestCaseCard @testCaseInfo={{dir}}\n                        @runMultipleTestsEnabled={{@runMultipleTestsEnabled}}\n                        @showCreateScenarioModal={{@showCreateScenarioModal}}\n                        @showTestOutcome={{@showTestOutcome}}\n                        @showTestSummaryModal={{@showTestSummaryModal}}\n                        @showRunningExecutionsModal={{@showRunningExecutionsModal}}\n                        @showScheduledModal={{@showScheduledModal}}\n                        @showActivityModal={{@showActivityModal}}\n                        @toggleSchedules={{@toggleSchedules}}\n                        @stopExecutions={{@stopExecutions}}\n                        @cancelSchedules={{@cancelSchedules}}\n                        @onConfSelected={{@onConfSelected}}\n                        @runMultipleTests={{@runMultipleTests}}\n                        @updateHasExpanded={{fn @updateHasExpanded dir}}\n                        @allowActions={{@allowActions}}\n                        @uniqueId={{this.uniqueId}}\n          />\n        {{/if}}\n      </li>\n    {{else}}\n      <h5 class=\"text-grey-dark\">No test cases or folders defined yet.</h5>\n    {{/each}}\n  </ul>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"ul\\\"],[14,0,\\\"folders\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,1]],null]],null],null,[[[1,\\\"    \\\"],[10,\\\"li\\\"],[15,0,[29,[[28,[30,0,[\\\"dirClasses\\\"]],[[30,2]],null],\\\" d-inline-block align-top w-100\\\"]]],[15,\\\"data-path\\\",[29,[[30,2,[\\\"path\\\"]]]]],[15,\\\"data-name\\\",[29,[[30,2,[\\\"name\\\"]]]]],[15,\\\"data-id\\\",[29,[[30,2,[\\\"id\\\"]]]]],[15,\\\"data-isFolder\\\",[29,[[30,2,[\\\"isFolder\\\"]]]]],[15,1,[29,[[30,2,[\\\"id\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"isFolder\\\"]],[[[1,\\\"        \\\"],[10,0],[15,1,[29,[\\\"testCaseFolder\\\",[30,2,[\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]],\\\"Toggle\\\"]]],[15,0,[29,[\\\"card test-case-folder overflow-visible \\\",[52,[30,2,[\\\"baseFolder\\\"]],\\\"\\\",\\\"with-border\\\"],\\\" \\\",[52,[30,2,[\\\"draggable\\\"]],\\\"draggable\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2,[\\\"baseFolder\\\"]]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"card-header p-10\\\"],[15,5,[28,[37,7],[\\\"height: 41px;\\\"],null]],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2,[\\\"editName\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"float-start mw-215px\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,8],[[24,0,\\\"form-control\\\"],[4,[38,9],[\\\"keydown\\\",[28,[37,10],[[30,0,[\\\"renameFolderKeyDown\\\"]],[30,2]],null]],null],[4,[38,11],[[30,0,[\\\"focusInput\\\"]]],null]],[[\\\"@value\\\"],[[30,2,[\\\"updatedName\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-success m-l-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Update\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"renameFolder\\\"]],[30,2]],null]],null],[12],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[13],[1,\\\"\\\\n              \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Cancel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"cancelRename\\\"]],[30,2]],null]],null],[12],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,1,[29,[\\\"testClickFolder\\\",[30,2,[\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]]]],[16,6,[29,[\\\"#testCaseFolder\\\",[30,2,[\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]]]],[24,\\\"aria-expanded\\\",\\\"false\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary pull-left m-r-10\\\"],[16,\\\"aria-controls\\\",[29,[\\\"testCaseFolder\\\",[30,2,[\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]]]],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"handleCollapse\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa fa-\\\",[52,[30,2,[\\\"isClosed\\\"]],\\\"plus\\\",\\\"minus\\\"]]]]],null],[13],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\"                  \\\"],[8,[39,8],[[24,0,\\\"m-r-4 float-start m-t-4\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"onFolderSelectChange\\\"]],[30,2]],null]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2,[\\\"selected\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[8,[39,13],[[24,0,\\\"m-r-5 text-warning float-start\\\"]],[[\\\"@icon\\\"],[[28,[30,0,[\\\"getIcon\\\"]],[[30,2,[\\\"isClosed\\\"]]],null]]],null],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"name\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,7],[[28,[37,15],[[28,[30,0,[\\\"getNameWithCount\\\"]],[[30,2]],null],100,false,false,\\\"truncate-inline\\\"],null]],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"isDeleting\\\"]],[[[1,\\\"                \\\"],[8,[39,16],null,[[\\\"@isDeleting\\\",\\\"@class\\\"],[true,\\\"fs-7\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,4],[[[1,\\\"                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-icon btn-sm btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-ellipsis-h\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,5],[30,2]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete Folder\\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,6],[30,2]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[24,0,\\\"pe-1\\\"],[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-people-carry-box\\\"]],null],[1,\\\"Move Folder\\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"editName\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-link\\\"]],null],[1,\\\" Rename Folder\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                      \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,7],[30,2]],null]],null],[12],[1,\\\"\\\\n                        \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Create Folder\\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"createTestCase\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" Create Test Case\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,9],[\\\"click\\\",[30,8]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,13],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-th-list\\\"]],null],[1,\\\" Bulk Actions\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[]],null]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[11,0],[16,1,[29,[\\\"testCaseFolder\\\",[30,2,[\\\"id\\\"]],[30,0,[\\\"uniqueId\\\"]]]]],[24,0,\\\"collapse test-case-dir\\\"],[24,\\\"aria-expanded\\\",\\\"false\\\"],[4,[38,11],[[28,[37,10],[[30,0,[\\\"initCollapseState\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[10,\\\"ul\\\"],[15,0,[29,[[52,[30,2,[\\\"children\\\",\\\"length\\\"]],\\\"has-dir\\\"]]]],[12],[1,\\\"\\\\n                \\\"],[8,[39,18],null,[[\\\"@data\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@showCreateScenarioModal\\\",\\\"@showTestOutcome\\\",\\\"@showTestSummaryModal\\\",\\\"@showRunningExecutionsModal\\\",\\\"@showScheduledModal\\\",\\\"@showActivityModal\\\",\\\"@toggleSchedules\\\",\\\"@stopExecutions\\\",\\\"@cancelSchedules\\\",\\\"@onConfSelected\\\",\\\"@runMultipleTests\\\",\\\"@updateHasExpanded\\\",\\\"@allowActions\\\",\\\"@deleteFolder\\\",\\\"@moveFolder\\\",\\\"@createFolder\\\",\\\"@renameFolder\\\",\\\"@resetExpandAll\\\",\\\"@createTestCase\\\"],[[30,2,[\\\"children\\\"]],[30,3],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,8],[30,19],[30,4],[30,5],[30,6],[30,7],[30,20],[30,21],[30,22]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[39,19],null,[[\\\"@testCaseInfo\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@showCreateScenarioModal\\\",\\\"@showTestOutcome\\\",\\\"@showTestSummaryModal\\\",\\\"@showRunningExecutionsModal\\\",\\\"@showScheduledModal\\\",\\\"@showActivityModal\\\",\\\"@toggleSchedules\\\",\\\"@stopExecutions\\\",\\\"@cancelSchedules\\\",\\\"@onConfSelected\\\",\\\"@runMultipleTests\\\",\\\"@updateHasExpanded\\\",\\\"@allowActions\\\",\\\"@uniqueId\\\"],[[30,2],[30,3],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,8],[28,[37,10],[[30,19],[30,2]],null],[30,4],[30,0,[\\\"uniqueId\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],[[[1,\\\"    \\\"],[10,\\\"h5\\\"],[14,0,\\\"text-grey-dark\\\"],[12],[1,\\\"No test cases or folders defined yet.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13]],[\\\"@data\\\",\\\"dir\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@allowActions\\\",\\\"@deleteFolder\\\",\\\"@moveFolder\\\",\\\"@createFolder\\\",\\\"@runMultipleTests\\\",\\\"@showCreateScenarioModal\\\",\\\"@showTestOutcome\\\",\\\"@showTestSummaryModal\\\",\\\"@showRunningExecutionsModal\\\",\\\"@showScheduledModal\\\",\\\"@showActivityModal\\\",\\\"@toggleSchedules\\\",\\\"@stopExecutions\\\",\\\"@cancelSchedules\\\",\\\"@onConfSelected\\\",\\\"@updateHasExpanded\\\",\\\"@renameFolder\\\",\\\"@resetExpandAll\\\",\\\"@createTestCase\\\"],[\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"if\\\",\\\"div\\\",\\\"unless\\\",\\\"html-safe\\\",\\\"input\\\",\\\"on\\\",\\\"fn\\\",\\\"did-insert\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"span\\\",\\\"truncate-string\\\",\\\"ui/delete-loading-indicator\\\",\\\"button\\\",\\\"test-cases-folder\\\",\\\"test-case-card\\\",\\\"h5\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-cases-folder.hbs\",\n    \"isStrictMode\": false\n  });\n\n  // Counts everything nested under a folder, not just its direct children.\n  function countNested(children = []) {\n    return children.reduce((acc, child) => {\n      if (!child.isFolder) {\n        acc.cases++;\n        return acc;\n      }\n      const nested = countNested(child.children);\n      acc.folders += 1 + nested.folders;\n      acc.cases += nested.cases;\n      return acc;\n    }, {\n      folders: 0,\n      cases: 0\n    });\n  }\n  function filesCount(children = []) {\n    const {\n      folders: foldersLength,\n      cases: casesLength\n    } = countNested(children);\n    const folderString = foldersLength ? `${foldersLength} ${foldersLength > 1 ? 'folders' : 'folder'}` : '';\n    const casesString = casesLength ? `${casesLength} ${casesLength > 1 ? 'test cases' : 'test case'}` : '';\n    if (!folderString && !casesString) {\n      return '0 folder';\n    }\n    return `${folderString}${folderString && casesString ? ', ' : ''}${casesString}`;\n  }\n  let TestCasesFolderComponent = _exports.default = (_class = class TestCasesFolderComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"uniqueId\", _descriptor2, this);\n    }\n    dirClasses(dir) {\n      return (dir.isFolder ? 'folder' : 'file') + (dir.id === 'base' ? '' : ' sort-handle');\n    }\n    getIcon(isClosed) {\n      return isClosed ? 'fa-folder-closed' : 'fa-folder-open';\n    }\n    getNameWithCount(dir) {\n      return `${dir.name} (${filesCount(dir.children)})`;\n    }\n    editName(dir) {\n      (0, _object.set)(dir, 'editName', true);\n      (0, _object.set)(dir, 'updatedName', dir.name);\n    }\n    renameFolder(dir) {\n      this.args.renameFolder?.(dir);\n      (0, _object.set)(dir, 'editName', false);\n    }\n    async renameFolderKeyDown(dir, e) {\n      if (e.key === 'Enter') {\n        this.renameFolder(dir);\n      } else if (e.key === 'Escape') {\n        this.cancelRename(dir);\n      }\n    }\n    cancelRename(dir) {\n      (0, _object.set)(dir, 'editName', false);\n    }\n    focusInput(element) {\n      if (element) {\n        element.focus();\n      }\n    }\n    createTestCase(dir) {\n      this.args.createTestCase(dir);\n    }\n\n    // The open/closed class is left to Bootstrap after the initial render. Binding\n    // it to isClosed made Ember rewrite the class list on the same click, which\n    // wiped out the collapsing state before the animation could run.\n    initCollapseState(dir, element) {\n      if (!dir.isClosed) {\n        element.classList.add('show');\n      }\n    }\n    onFolderSelectChange(dir, event) {\n      this.applySelection(dir, event.target.checked);\n      this.args.onConfSelected?.();\n    }\n    applySelection(dir, selected) {\n      (0, _object.set)(dir, 'selected', selected);\n      if (dir.isFolder) {\n        (dir.children || []).forEach(child => this.applySelection(child, selected));\n        return;\n      }\n      (dir.groupedConfGroups || []).forEach(groupedConfGroup => {\n        groupedConfGroup.forEach(confGroup => {\n          (0, _object.set)(confGroup, 'selected', selected);\n          confGroup.sortedConfs.map(confDetails => {\n            (0, _object.set)(confDetails, 'selected', selected);\n          });\n        });\n      });\n    }\n    handleCollapse(dir) {\n      (0, _object.set)(dir, 'isClosed', !dir.isClosed);\n      this.args.resetExpandAll?.();\n      window.localStorage.setItem(dir.path, `${dir.isClosed}`);\n    }\n\n    // @action\n    // handleDragDrop(item, event) {\n    //   if ( item.path !== '/' && (event.metaKey || event.shiftKey) ) {\n    //     set(item, 'draggable', !item.draggable);\n    //     this.args.handleDragDrop(item, event);\n    //   }\n\n    // }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"uniqueId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _emberUuid.v4)();\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"editName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFolderKeyDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFolderKeyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelRename\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelRename\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createTestCase\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createTestCase\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initCollapseState\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initCollapseState\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFolderSelectChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFolderSelectChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleCollapse\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleCollapse\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCasesFolderComponent);\n});","define(\"@testable/shared-ui/components/test-cases-list\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/test-cases\", \"@ember/runloop\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/utils/login\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _tracking, _lib, _testCases, _runloop, _server, _environment, _toHtml, _login, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/test-cases\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/utils/login\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-insert this.initDragDrop}}\n    {{did-update this.initDragDrop this.testCasesFolders}}\n  >\n    <TestCasesFolder\n      @data={{this.testCasesFolders}}\n      @runMultipleTestsEnabled={{@runMultipleTestsEnabled}}\n      @showCreateScenarioModal={{this.showCreateScenarioModal}}\n      @showTestOutcome={{this.showTestOutcome}}\n      @showTestSummaryModal={{this.showTestSummaryModal}}\n      @showRunningExecutionsModal={{this.showRunningExecutionsModal}}\n      @showScheduledModal={{this.showScheduledModal}}\n      @showActivityModal={{this.showActivityModal}}\n      @toggleSchedules={{this.toggleSchedules}}\n      @stopExecutions={{this.stopExecutions}}\n      @cancelSchedules={{this.cancelSchedules}}\n      @onConfSelected={{this.onConfSelected}}\n      @runMultipleTests={{this.overallRunMultipleTests}}\n      @updateHasExpanded={{this.updateHasExpanded}}\n      @allowActions={{@allowActions}}\n      @deleteFolder={{this.deleteFolder}}\n      @moveFolder={{this.moveFolder}}\n      @createFolder={{this.createFolderModal}}\n      @renameFolder={{this.renameFolder}}\n      @resetExpandAll={{@resetExpandAll}}\n      @createTestCase={{@createTestCase}}\n    />\n  \n    {{#if this.showCreateFolderModal}}\n      <TestCasesCreateModal @selectedPath={{this.selectedTestCase.path}} @closeModal={{this.onCloseCreateFolderModal}}/>\n    {{/if}}\n  \n    {{#if this.showMoveFolderModal}}\n      <TestCaseMoveModal @type=\"folder\"\n                       @path={{this.selectedTestCase.path}}\n                       @testCaseId={{this.selectedTestCase.id}}\n                       @modalClosed={{this.moveFolderModalClosed}} />\n    {{/if}}\n  \n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"initDragDrop\\\"]]],null],[4,[38,2],[[30,0,[\\\"initDragDrop\\\"]],[30,0,[\\\"testCasesFolders\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[8,[39,3],null,[[\\\"@data\\\",\\\"@runMultipleTestsEnabled\\\",\\\"@showCreateScenarioModal\\\",\\\"@showTestOutcome\\\",\\\"@showTestSummaryModal\\\",\\\"@showRunningExecutionsModal\\\",\\\"@showScheduledModal\\\",\\\"@showActivityModal\\\",\\\"@toggleSchedules\\\",\\\"@stopExecutions\\\",\\\"@cancelSchedules\\\",\\\"@onConfSelected\\\",\\\"@runMultipleTests\\\",\\\"@updateHasExpanded\\\",\\\"@allowActions\\\",\\\"@deleteFolder\\\",\\\"@moveFolder\\\",\\\"@createFolder\\\",\\\"@renameFolder\\\",\\\"@resetExpandAll\\\",\\\"@createTestCase\\\"],[[30,0,[\\\"testCasesFolders\\\"]],[30,1],[30,0,[\\\"showCreateScenarioModal\\\"]],[30,0,[\\\"showTestOutcome\\\"]],[30,0,[\\\"showTestSummaryModal\\\"]],[30,0,[\\\"showRunningExecutionsModal\\\"]],[30,0,[\\\"showScheduledModal\\\"]],[30,0,[\\\"showActivityModal\\\"]],[30,0,[\\\"toggleSchedules\\\"]],[30,0,[\\\"stopExecutions\\\"]],[30,0,[\\\"cancelSchedules\\\"]],[30,0,[\\\"onConfSelected\\\"]],[30,0,[\\\"overallRunMultipleTests\\\"]],[30,0,[\\\"updateHasExpanded\\\"]],[30,2],[30,0,[\\\"deleteFolder\\\"]],[30,0,[\\\"moveFolder\\\"]],[30,0,[\\\"createFolderModal\\\"]],[30,0,[\\\"renameFolder\\\"]],[30,3],[30,4]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showCreateFolderModal\\\"]],[[[1,\\\"    \\\"],[8,[39,5],null,[[\\\"@selectedPath\\\",\\\"@closeModal\\\"],[[30,0,[\\\"selectedTestCase\\\",\\\"path\\\"]],[30,0,[\\\"onCloseCreateFolderModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showMoveFolderModal\\\"]],[[[1,\\\"    \\\"],[8,[39,6],null,[[\\\"@type\\\",\\\"@path\\\",\\\"@testCaseId\\\",\\\"@modalClosed\\\"],[\\\"folder\\\",[30,0,[\\\"selectedTestCase\\\",\\\"path\\\"]],[30,0,[\\\"selectedTestCase\\\",\\\"id\\\"]],[30,0,[\\\"moveFolderModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13]],[\\\"@runMultipleTestsEnabled\\\",\\\"@allowActions\\\",\\\"@resetExpandAll\\\",\\\"@createTestCase\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"test-cases-folder\\\",\\\"if\\\",\\\"test-cases-create-modal\\\",\\\"test-case-move-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-cases-list.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCasesListComponent = _exports.default = (_dec = (0, _object.computed)('args.data.[]', 'args.expandAll'), _class = class TestCasesListComponent extends _component2.default {\n    get testCasesFolders() {\n      return _testCases.default.getFolderStructure(this.args.data, this.args.expandAll);\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor, this);\n      _initializerDefineProperty(this, \"draggableItems\", _descriptor2, this);\n      _initializerDefineProperty(this, \"initializedDraggables\", _descriptor3, this);\n      _initializerDefineProperty(this, \"initializedDroppables\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showCreateFolderModal\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedTestCase\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showMoveFolderModal\", _descriptor7, this);\n      _defineProperty(this, \"_knownPaths\", new Map());\n      this._trackPaths();\n      _lib.default.observeKeys(this, ['applicationState.applications'], this.onPathChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      _lib.default.unobserveKeys(this, ['applicationState.applications'], this.onPathChange);\n    }\n    _trackPaths() {\n      const applications = this.applicationState.applications;\n      _.forEach(this.args.data, info => {\n        const source = _.find(applications, app => app.id === info.id);\n        this._knownPaths.set(info.id, source?.path || info.testCase?.path || info.path);\n      });\n    }\n    onPathChange() {\n      if (this.isDestroyed) return;\n      let moved = false;\n      _.forEach(this.args.data, info => {\n        const source = _.find(this.applicationState.applications, app => app.id === info.id);\n        const newPath = source?.path || info.testCase?.path || info.path;\n        if (this._knownPaths.get(info.id) !== newPath) {\n          this._knownPaths.set(info.id, newPath);\n          _testCases.default.moveNode(this.testCasesFolders, info, newPath, this.args.expandAll);\n          moved = true;\n        }\n      });\n      if (moved) {\n        this.initDragDrop();\n      }\n    }\n    createFolderModal(dir) {\n      this.selectedTestCase = dir;\n      this.showCreateFolderModal = true;\n    }\n    onCloseCreateFolderModal() {\n      this.selectedTestCase = {};\n      this.showCreateFolderModal = false;\n    }\n    deleteFolder(dir) {\n      const folderName = (0, _toHtml.sanitizeHtml)([dir.name]);\n      let message = `Are you sure you want to delete <strong>${folderName}</strong> folder?<br><br>\n      <strong>Caution</strong> all test cases within the folder will also be removed.`;\n      _lib.default.confirm(message, 'Delete Folder', async () => {\n        (0, _object.set)(dir, 'isDeleting', true);\n        try {\n          await _server.default.deleteTestCaseFolder(_environment.config.currentUser.orgId, dir.path);\n          _lib.default.info(`Folder <strong>${folderName}</strong> deleted successfully`);\n        } finally {\n          (0, _object.set)(dir, 'isDeleting', false);\n        }\n      }, 'Cancel', () => {\n        (0, _object.set)(dir, 'isDeleting', false);\n      }, 'Delete', true);\n    }\n    moveFolder(dir) {\n      this.selectedTestCase = dir;\n      this.showMoveFolderModal = true;\n    }\n    moveFolderModalClosed(orgId) {\n      this.showMoveFolderModal = false;\n      this.selectedTestCase = {};\n      if (orgId) {\n        _login.default.setOrgCookie(orgId);\n        setTimeout(function () {\n          location.reload();\n        }, 500);\n      }\n    }\n    async renameFolder(dir) {\n      const newName = dir.updatedName?.trim();\n      if (!newName || newName === dir.name) return;\n      const newPath = this.parentDirPath(dir.path, newName);\n      await _server.default.updateTestCasePath(_environment.config.currentUser.orgId, [{\n        oldPath: dir.path,\n        newPath\n      }]);\n      _lib.default.info('Folder name is updated successfully');\n    }\n    folderAction(item, event) {\n      if (event.metaKey || event.shiftKey) {\n        this.args.addDragDropFolder(item, event);\n      } else {\n        (0, _object.set)(item, 'isClosed', !item.isClosed);\n        window.localStorage.setItem(item.path, `${item.isClosed}`);\n      }\n    }\n    async handleDrop(item, droppedOn) {\n      const droppedOnPath = _lib.default.sanitizeFolderName(droppedOn.dataset.path);\n      const oldPath = item.path === '/' ? item.path + item.name : item.path;\n      if (droppedOnPath.includes(oldPath)) return;\n      const newPath = _lib.default.sanitizeFolderName(droppedOnPath + '/' + (item.isFolder ? item.name : _lib.default.sanitizeTestCaseName(item.name)));\n      if (oldPath !== newPath) {\n        this.args.onMovingChange?.(true);\n        try {\n          await _server.default.updateTestCasePath(_environment.config.currentUser.orgId, [{\n            oldPath,\n            newPath\n          }]);\n          _lib.default.info(`${item.isfolder === 'true' ? 'Folder' : 'Test Case'} path is updated successfully`);\n        } catch (error) {\n          _lib.default.error(error.statusText, `Failed to move ${item.isfolder === 'true' ? 'folder' : 'test case'}`);\n        } finally {\n          this.args.onMovingChange?.(false);\n        }\n      }\n    }\n    parentDirPath(path, name = '') {\n      const aParts = path && path !== '/' ? path.split('/') : [];\n      aParts[aParts.length - 1] = name;\n      return aParts.join('/');\n    }\n    initDragDrop() {\n      (0, _runloop.later)(() => {\n        const self = this;\n        const panelId = this.args.uniqueId ? `.sortTestCases${this.args.uniqueId}` : '.sortTestCases';\n        const initializeDraggable = () => {\n          $(`${panelId} #base li.sort-handle`).each(function () {\n            $(this).draggable({\n              revert: false,\n              delay: 250,\n              helper: function (event) {\n                let title;\n                title = $(this).find('.card-header .name')[0]?.innerText || $(this).find('.card-header span')[0]?.innerText;\n                return $(`<div class='dragged-item' style=\"z-index: 9999\">${title}</div>`);\n              },\n              start: function (event, ui) {\n                $('body').append(ui.helper);\n              },\n              drag: function (event, ui) {\n                ui.position = {\n                  top: event.clientY + window.scrollY,\n                  left: event.clientX\n                };\n              },\n              stop: function (event, ui) {}\n            });\n            self.initializedDraggables.push(this);\n          });\n        };\n        const initializeDroppable = () => {\n          $(`${panelId} li.folder`).each(function () {\n            $(this).droppable({\n              accept: `${panelId} li`,\n              greedy: true,\n              tolerance: 'pointer',\n              over: function (event, ui) {\n                if (ui.draggable[0].parentElement.parentElement.parentElement.parentElement.parentElement === this) {\n                  return;\n                }\n                $(this).addClass('droppable');\n              },\n              out: function (event, ui) {\n                $(this).removeClass('droppable');\n              },\n              drop: function (event, ui) {\n                $(this).removeClass('droppable');\n                if (ui.draggable[0].parentElement.parentElement.parentElement.parentElement.parentElement === this) {\n                  return;\n                }\n                ui.helper.remove();\n                self.handleDrop?.(ui.draggable[0].dataset, this);\n              }\n            });\n            self.initializedDroppables.push(this);\n          });\n        };\n        const destroyDraggableAndDroppable = () => {\n          try {\n            $(panelId).off('click');\n            this.initializedDraggables.forEach(element => {\n              $(element).draggable('destroy');\n            });\n            this.initializedDroppables.forEach(element => {\n              $(element).droppable('destroy');\n            });\n            this.initializedDraggables = [];\n            this.initializedDroppables = [];\n          } catch (e) {\n            console.error('Error destroying draggable and droppable:', e);\n          }\n        };\n        destroyDraggableAndDroppable();\n        initializeDraggable();\n        initializeDroppable();\n      }, 500);\n    }\n    showCreateScenarioModal(...args) {\n      this.args.showCreateScenarioModal?.(...args);\n    }\n    showTestOutcome(...args) {\n      this.args.showTestOutcome?.(...args);\n    }\n    showTestSummaryModal(...args) {\n      this.args.showTestSummaryModal?.(...args);\n    }\n    showRunningExecutionsModal(...args) {\n      this.args.showRunningExecutionsModal?.(...args);\n    }\n    showScheduledModal(...args) {\n      this.args.showScheduledModal?.(...args);\n    }\n    showActivityModal(...args) {\n      this.args.showActivityModal?.(...args);\n    }\n    toggleSchedules(...args) {\n      this.args.toggleSchedules?.(...args);\n    }\n    stopExecutions(...args) {\n      this.args.stopExecutions?.(...args);\n    }\n    cancelSchedules(...args) {\n      this.args.cancelSchedules?.(...args);\n    }\n    onConfSelected(...args) {\n      this.args.onConfSelected?.(...args);\n    }\n    overallRunMultipleTests(...args) {\n      this.args.runMultipleTests?.(...args);\n    }\n    updateHasExpanded(...args) {\n      this.args.updateHasExpanded?.(...args);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"draggableItems\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"initializedDraggables\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"initializedDroppables\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showCreateFolderModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedTestCase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showMoveFolderModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"testCasesFolders\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"testCasesFolders\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onPathChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPathChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFolderModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFolderModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCloseCreateFolderModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCloseCreateFolderModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"moveFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"moveFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"moveFolderModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"moveFolderModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"folderAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"folderAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initDragDrop\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initDragDrop\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showCreateScenarioModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showCreateScenarioModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcome\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcome\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestSummaryModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestSummaryModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRunningExecutionsModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRunningExecutionsModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showScheduledModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showScheduledModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showActivityModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showActivityModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleSchedules\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopExecutions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopExecutions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelSchedules\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onConfSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onConfSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"overallRunMultipleTests\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"overallRunMultipleTests\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateHasExpanded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateHasExpanded\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCasesListComponent);\n});","define(\"@testable/shared-ui/components/test-glance-details\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/utilization\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _environment, _loadTest, _lib, _utilization, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/utilization\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span {{did-update this._onUpdateStatus @execution.success}}></span>\n  {{#if @isComparison}}\n    <div class=\"mb-1 heading\">\n      <strong>{{@title}} {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}}</strong>\n      <a class=\"m-l-5\" {{on \"click\" (fn this.showTestOutcomeModalAction (if @model.isAll @model.execution @model.executionRegion)\n                                (not @model.isAll))}} role=\"button\">\n        {{html-safe (to-execution-outcome-html (if @model.isAll @model.execution @model.executionRegion) false)}}\n      </a>\n      <Ui::InfoIcon\n              @content={{@infoContent}}\n              @isHtml={{true}} @placement=\"bottom\" />\n    </div>\n  {{/if}}\n  \n  {{#if (not (gt @selectedResource.id 0))}}\n    <div class=\"note {{this.overall.noteClass}}\">\n      {{#if @execution.triggerBreached}}\n        <h4>\n          Breaking Point hit at <strong>{{@summary.maxConcurrentClients}}</strong> concurrent users\n        </h4>\n        <p>\n          {{html-safe this.conditionDesc}}\n        </p>\n      {{else if @execution.limitBreached}}\n        <h4>\n          {{this.limitField.name}} limit exceeded\n        </h4>\n        <p>\n          {{html-safe this.limitDesc}}\n        </p>\n        <p>\n          {{#if this.recommendUpgrade}}\n            <LinkTo @route='account.billing.subscription' class=\"btn btn-sm btn-primary\">\n              <strong>Upgrade Plan</strong>\n            </LinkTo>\n          {{/if}}\n          {{#if this.envConfig.isPaid}}\n            <a class=\"btn btn-sm btn-success {{if this.recommendUpgrade 'm-l-10'}}\"\n               href=\"mailto:support@testable.io?subject=Request {{this.limitField.name}} increase\"><strong>Request Limit\n              Increase</strong></a>\n          {{/if}}\n          {{#unless this.limitField.isSystem}}\n            <LinkTo @route='account.limits' class=\"btn btn-sm btn-success m-l-10\">\n              <strong>View Account Limits</strong>\n            </LinkTo>\n          {{/unless}}\n        </p>\n      {{else if @execution.insufficientSubs}}\n        <h4>\n          Insufficient Plans\n        </h4>\n        <p>\n          The plans and add-ons you have purchased in your account were not sufficient\n          for the test to finish running.\n        </p>\n        <p>\n          {{#if this.recommendUpgrade}}\n            <LinkTo @route='account.billing.subscription' class=\"btn btn-sm btn-primary\">\n              <strong>Upgrade Plan</strong>\n            </LinkTo>\n          {{/if}}\n          {{#if this.envConfig.isPaid}}\n            <a class=\"btn btn-sm btn-success {{if this.recommendUpgrade 'm-l-10'}}\"\n               href=\"mailto:support@testable.io?subject=Request Plan Consultation\"><strong>Request Plan Consultation</strong></a>\n          {{/if}}\n        </p>\n      {{else if (and (eq @summary.count 0) (eq @summary.concurrentClients 0))}}\n        <h4>\n          Issue Starting Test Runners\n        </h4>\n        <p>No load was generated. See the Logging {{if @fromResultsTab 'widget below' 'tab'}} for more details.</p>\n      {{else if (and (eq @summary.count 0) (not @summary.hasOutputFiles) (not @summary.hasVideos )) }}\n        <h4>\n          No Results\n        </h4>\n        <p>Test finished before any concurrent users ran and generated results. See the Logging {{if @fromResultsTab 'widget\n          below' 'tab'}} for more\n          details.</p>\n      {{else if (and (not (is-undefined @execution.success)) (not @execution.success))}}\n        <h4>\n          Failed to meet <a {{on \"click\" this.showTestOutcomeModalAction}} role=\"button\">all success criteria</a>\n        </h4>\n        <p>\n          Test did not pass all <a {{on \"click\" this.showTestOutcomeModalAction}} role=\"button\">defined success criteria</a>. Success\n          criteria\n          can be defined for this test configuration or across all tests via Account => Settings.\n        </p>\n      {{else if (or @execution.cancelledByUser (is-object @summary.comparisons) (eq @execution.configuration.profileType\n              'BreakingPoint'))}}\n        <h4>\n          {{#if @execution.cancelledByUser}}\n            Test stopped before completion\n          {{else if @execution.fatalLogging}}\n            Fatal logging encountered\n          {{else if (eq @execution.configuration.profileType 'BreakingPoint')}}\n            Breaking point <strong>not hit</strong> ({{@summary.maxConcurrentClients}}+ concurrent users)\n            <Ui::Icon @icon=\"fa fa-lg fa-child\" />\n          {{else if (eq this.overall.status 2)}}\n            Poor Results\n          {{else if (eq this.overall.status 1)}}\n            Below Average Results\n          {{else if (eq this.overall.status 0)}}\n            Consistent Results\n          {{else}}\n            Improved Results\n          {{/if}}\n        </h4>\n        <p>\n          {{#if (and (not @execution.cancelledByUser) (eq @execution.configuration.profileType 'BreakingPoint'))}}\n            Test ramped up to your account limit ({{@summary.maxConcurrentClients}} concurrent users) without hitting\n            any breaking points.\n          {{else if (eq this.overall.status 2)}}\n            Results are significantly worse than the {{if @execution.baseline 'baseline' 'recent average'}}. Please investigate!\n          {{else if (eq this.overall.status 1)}}\n            Results are somewhat worse than the {{if @execution.baseline 'baseline' 'recent average'}}.\n          {{else if (eq this.overall.status 0)}}\n            Results are consistent with the {{if @execution.baseline 'baseline' 'recent average'}}.\n          {{else}}\n            Results are better than the {{if @execution.baseline 'baseline' 'recent average'}}. Good job!\n          {{/if}}\n        </p>\n      {{else}}\n        <h4>\n          {{#if @execution.fatalLogging}}\n            Fatal logging encountered\n          {{else}}\n            Success criteria met. First execution.\n          {{/if}}\n        </h4>\n        <p>First execution of this test configuration so there is no history to compare against.</p>\n      {{/if}}\n      {{#if this.utilizationWarning}}\n        <p>{{html-safe this.utilizationWarning}} Consider <LinkTo @route='update-test' @model={{@execution.confId}}>\n          adding test runner instances or reducing the number of virtual users</LinkTo> if using a long running test runner\n          region. See the Test Runner Usage widget below for\n          more details.</p>\n      {{/if}}\n    </div>\n  {{/if}}\n  \n  {{#if (or (gt @summary.count 0) (gt @selectedResource.id 0))}}\n    {{#each this.metricRows as |metricRow|}}\n      <div class=\"row\">\n        {{#each metricRow as |metric|}}\n          <div class=\"col-md-4 col-sm-6\">\n            <div class=\"widget widget-stats {{metric.colorClass}}\">\n              <div class=\"stats-icon stats-icon-lg\">\n                <Ui::Icon @icon=\"fa {{metric.iconClass}} fa-fw\" />\n              </div>\n              <div class=\"stats-title\">\n                {{uppercase metric.title}}\n              </div>\n              <div class=\"stats-number\">\n                {{print-metric @summary metric.namespace metric.metric metric.units false @metricDefs false null\n                               @execution.script.scriptType }}\n                {{#if (has-aggregators metric.namespace metric.metric @metricDefs)}}\n                  <div class=\"m-l-5 inline-text no-print\"><a {{on \"click\" (fn this.metricDetailsSelected metric)}} role=\"button\">\n                    <Ui::Icon @icon=\"fa fa-search\" /></a></div>\n                {{/if}}\n              </div>\n              {{#if (and metric.exists (not metric.first))}}\n                <div class=\"stats-desc\">\n                  {{metric.changeWord}} {{if @execution.baseline 'baseline' 'recent average'}}\n                  ({{metric.absChange}}%)\n                  {{#if @execution.baseline}}\n                    <Ui::InfoIcon @content=\"Percent change is relative to the baseline test result. See more details about\n                                            the baseline above just below the test case name.\" @placement=\"bottom\" />\n                  {{else}}\n                    <Ui::InfoIcon @content=\"Percent change is relative to a weighted average of the 10 most recent executions\n                                          of this test configuration (or all executions if less than 10 total). The number of results\n                                          in each execution is used as the weight.\" @placement=\"bottom\" />\n                  {{/if}}\n                </div>\n              {{else if (not metric.first)}}\n                <div class=\"stats-desc\">This metric does not exist in the results.</div>\n              {{/if}}\n            </div>\n          </div>\n        {{/each}}\n      </div>\n    {{/each}}\n  {{/if}}\n  \n  {{#if this.showMetricDetailsModal}}\n    <MetricDetailsModal @summary={{@summary}}\n                        @selectedResource={{@selectedResource}}\n                        @model={{@model}}\n                        @overallModel={{@execution}}\n                        @metricDef={{this.selectedMetric}}\n                        @metric={{find-metric @summary this.selectedMetric.namespace this.selectedMetric.metric}}\n                        @metricDefs={{@metricDefs}}\n                        @scriptType={{@execution.script.scriptType}}\n                        @modalClosed={{this.metricDetailsModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[4,[38,1],[[30,0,[\\\"_onUpdateStatus\\\"]],[30,1,[\\\"success\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-1 heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,[30,3]],[1,\\\" \\\"],[41,[51,[30,4,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,4,[\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n    \\\"],[11,3],[24,0,\\\"m-l-5\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"showTestOutcomeModalAction\\\"]],[52,[30,4,[\\\"isAll\\\"]],[30,4,[\\\"execution\\\"]],[30,4,[\\\"executionRegion\\\"]]],[28,[37,9],[[30,4,[\\\"isAll\\\"]]],null]],null]],null],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,10],[[28,[37,11],[[52,[30,4,[\\\"isAll\\\"]],[30,4,[\\\"execution\\\"]],[30,4,[\\\"executionRegion\\\"]]],false],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[[30,5],true,\\\"bottom\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[28,[37,13],[[30,6,[\\\"id\\\"]],0],null]],null],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[\\\"note \\\",[30,0,[\\\"overall\\\",\\\"noteClass\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"triggerBreached\\\"]],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        Breaking Point hit at \\\"],[10,\\\"strong\\\"],[12],[1,[30,7,[\\\"maxConcurrentClients\\\"]]],[13],[1,\\\" concurrent users\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,10],[[30,0,[\\\"conditionDesc\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"limitBreached\\\"]],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,0,[\\\"limitField\\\",\\\"name\\\"]]],[1,\\\" limit exceeded\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,10],[[30,0,[\\\"limitDesc\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"recommendUpgrade\\\"]],[[[1,\\\"          \\\"],[8,[39,16],[[24,0,\\\"btn btn-sm btn-primary\\\"]],[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Upgrade Plan\\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"envConfig\\\",\\\"isPaid\\\"]],[[[1,\\\"          \\\"],[10,3],[15,0,[29,[\\\"btn btn-sm btn-success \\\",[52,[30,0,[\\\"recommendUpgrade\\\"]],\\\"m-l-10\\\"]]]],[15,6,[29,[\\\"mailto:support@testable.io?subject=Request \\\",[30,0,[\\\"limitField\\\",\\\"name\\\"]],\\\" increase\\\"]]],[12],[10,\\\"strong\\\"],[12],[1,\\\"Request Limit\\\\n            Increase\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"limitField\\\",\\\"isSystem\\\"]]],[[[1,\\\"          \\\"],[8,[39,16],[[24,0,\\\"btn btn-sm btn-success m-l-10\\\"]],[[\\\"@route\\\"],[\\\"account.limits\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"View Account Limits\\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"insufficientSubs\\\"]],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        Insufficient Plans\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        The plans and add-ons you have purchased in your account were not sufficient\\\\n        for the test to finish running.\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"recommendUpgrade\\\"]],[[[1,\\\"          \\\"],[8,[39,16],[[24,0,\\\"btn btn-sm btn-primary\\\"]],[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Upgrade Plan\\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"envConfig\\\",\\\"isPaid\\\"]],[[[1,\\\"          \\\"],[10,3],[15,0,[29,[\\\"btn btn-sm btn-success \\\",[52,[30,0,[\\\"recommendUpgrade\\\"]],\\\"m-l-10\\\"]]]],[14,6,\\\"mailto:support@testable.io?subject=Request Plan Consultation\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Request Plan Consultation\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[28,[37,18],[[30,7,[\\\"count\\\"]],0],null],[28,[37,18],[[30,7,[\\\"concurrentClients\\\"]],0],null]],null],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        Issue Starting Test Runners\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"No load was generated. See the Logging \\\"],[1,[52,[30,8],\\\"widget below\\\",\\\"tab\\\"]],[1,\\\" for more details.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[28,[37,18],[[30,7,[\\\"count\\\"]],0],null],[28,[37,9],[[30,7,[\\\"hasOutputFiles\\\"]]],null],[28,[37,9],[[30,7,[\\\"hasVideos\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        No Results\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"Test finished before any concurrent users ran and generated results. See the Logging \\\"],[1,[52,[30,8],\\\"widget\\\\n        below\\\",\\\"tab\\\"]],[1,\\\" for more\\\\n        details.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,17],[[28,[37,9],[[28,[37,19],[[30,1,[\\\"success\\\"]]],null]],null],[28,[37,9],[[30,1,[\\\"success\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n        Failed to meet \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"showTestOutcomeModalAction\\\"]]],null],[12],[1,\\\"all success criteria\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        Test did not pass all \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"showTestOutcomeModalAction\\\"]]],null],[12],[1,\\\"defined success criteria\\\"],[13],[1,\\\". Success\\\\n        criteria\\\\n        can be defined for this test configuration or across all tests via Account => Settings.\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,20],[[30,1,[\\\"cancelledByUser\\\"]],[28,[37,21],[[30,7,[\\\"comparisons\\\"]]],null],[28,[37,18],[[30,1,[\\\"configuration\\\",\\\"profileType\\\"]],\\\"BreakingPoint\\\"],null]],null],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"cancelledByUser\\\"]],[[[1,\\\"          Test stopped before completion\\\\n\\\"]],[]],[[[41,[30,1,[\\\"fatalLogging\\\"]],[[[1,\\\"          Fatal logging encountered\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,1,[\\\"configuration\\\",\\\"profileType\\\"]],\\\"BreakingPoint\\\"],null],[[[1,\\\"          Breaking point \\\"],[10,\\\"strong\\\"],[12],[1,\\\"not hit\\\"],[13],[1,\\\" (\\\"],[1,[30,7,[\\\"maxConcurrentClients\\\"]]],[1,\\\"+ concurrent users)\\\\n          \\\"],[8,[39,22],null,[[\\\"@icon\\\"],[\\\"fa fa-lg fa-child\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],2],null],[[[1,\\\"          Poor Results\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],1],null],[[[1,\\\"          Below Average Results\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],0],null],[[[1,\\\"          Consistent Results\\\\n\\\"]],[]],[[[1,\\\"          Improved Results\\\\n        \\\"]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[28,[37,9],[[30,1,[\\\"cancelledByUser\\\"]]],null],[28,[37,18],[[30,1,[\\\"configuration\\\",\\\"profileType\\\"]],\\\"BreakingPoint\\\"],null]],null],[[[1,\\\"          Test ramped up to your account limit (\\\"],[1,[30,7,[\\\"maxConcurrentClients\\\"]]],[1,\\\" concurrent users) without hitting\\\\n          any breaking points.\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],2],null],[[[1,\\\"          Results are significantly worse than the \\\"],[1,[52,[30,1,[\\\"baseline\\\"]],\\\"baseline\\\",\\\"recent average\\\"]],[1,\\\". Please investigate!\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],1],null],[[[1,\\\"          Results are somewhat worse than the \\\"],[1,[52,[30,1,[\\\"baseline\\\"]],\\\"baseline\\\",\\\"recent average\\\"]],[1,\\\".\\\\n\\\"]],[]],[[[41,[28,[37,18],[[30,0,[\\\"overall\\\",\\\"status\\\"]],0],null],[[[1,\\\"          Results are consistent with the \\\"],[1,[52,[30,1,[\\\"baseline\\\"]],\\\"baseline\\\",\\\"recent average\\\"]],[1,\\\".\\\\n\\\"]],[]],[[[1,\\\"          Results are better than the \\\"],[1,[52,[30,1,[\\\"baseline\\\"]],\\\"baseline\\\",\\\"recent average\\\"]],[1,\\\". Good job!\\\\n        \\\"]],[]]]],[]]]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"fatalLogging\\\"]],[[[1,\\\"          Fatal logging encountered\\\\n\\\"]],[]],[[[1,\\\"          Success criteria met. First execution.\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"First execution of this test configuration so there is no history to compare against.\\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]]],[]]],[41,[30,0,[\\\"utilizationWarning\\\"]],[[[1,\\\"      \\\"],[10,2],[12],[1,[28,[35,10],[[30,0,[\\\"utilizationWarning\\\"]]],null]],[1,\\\" Consider \\\"],[8,[39,16],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,1,[\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        adding test runner instances or reducing the number of virtual users\\\"]],[]]]]],[1,\\\" if using a long running test runner\\\\n        region. See the Test Runner Usage widget below for\\\\n        more details.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,20],[[28,[37,13],[[30,7,[\\\"count\\\"]],0],null],[28,[37,13],[[30,6,[\\\"id\\\"]],0],null]],null],[[[42,[28,[37,24],[[28,[37,24],[[30,0,[\\\"metricRows\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,24],[[28,[37,24],[[30,9]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"col-md-4 col-sm-6\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[29,[\\\"widget widget-stats \\\",[30,10,[\\\"colorClass\\\"]]]]],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"stats-icon stats-icon-lg\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,22],null,[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[30,10,[\\\"iconClass\\\"]],\\\" fa-fw\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"stats-title\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[35,25],[[30,10,[\\\"title\\\"]]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"stats-number\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[35,26],[[30,7],[30,10,[\\\"namespace\\\"]],[30,10,[\\\"metric\\\"]],[30,10,[\\\"units\\\"]],false,[30,11],false,null,[30,1,[\\\"script\\\",\\\"scriptType\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[28,[37,27],[[30,10,[\\\"namespace\\\"]],[30,10,[\\\"metric\\\"]],[30,11]],null],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"m-l-5 inline-text no-print\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"metricDetailsSelected\\\"]],[30,10]],null]],null],[12],[1,\\\"\\\\n                  \\\"],[8,[39,22],null,[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,10,[\\\"exists\\\"]],[28,[37,9],[[30,10,[\\\"first\\\"]]],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"stats-desc\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[30,10,[\\\"changeWord\\\"]]],[1,\\\" \\\"],[1,[52,[30,1,[\\\"baseline\\\"]],\\\"baseline\\\",\\\"recent average\\\"]],[1,\\\"\\\\n                (\\\"],[1,[30,10,[\\\"absChange\\\"]]],[1,\\\"%)\\\\n\\\"],[41,[30,1,[\\\"baseline\\\"]],[[[1,\\\"                  \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Percent change is relative to the baseline test result. See more details about\\\\n                                          the baseline above just below the test case name.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[8,[39,12],null,[[\\\"@content\\\",\\\"@placement\\\"],[\\\"Percent change is relative to a weighted average of the 10 most recent executions\\\\n                                        of this test configuration (or all executions if less than 10 total). The number of results\\\\n                                        in each execution is used as the weight.\\\",\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,9],[[30,10,[\\\"first\\\"]]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"stats-desc\\\"],[12],[1,\\\"This metric does not exist in the results.\\\"],[13],[1,\\\"\\\\n            \\\"]],[]],null]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[10]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[9]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showMetricDetailsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,28],null,[[\\\"@summary\\\",\\\"@selectedResource\\\",\\\"@model\\\",\\\"@overallModel\\\",\\\"@metricDef\\\",\\\"@metric\\\",\\\"@metricDefs\\\",\\\"@scriptType\\\",\\\"@modalClosed\\\"],[[30,7],[30,6],[30,4],[30,1],[30,0,[\\\"selectedMetric\\\"]],[28,[37,29],[[30,7],[30,0,[\\\"selectedMetric\\\",\\\"namespace\\\"]],[30,0,[\\\"selectedMetric\\\",\\\"metric\\\"]]],null],[30,11],[30,1,[\\\"script\\\",\\\"scriptType\\\"]],[30,0,[\\\"metricDetailsModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@execution\\\",\\\"@isComparison\\\",\\\"@title\\\",\\\"@model\\\",\\\"@infoContent\\\",\\\"@selectedResource\\\",\\\"@summary\\\",\\\"@fromResultsTab\\\",\\\"metricRow\\\",\\\"metric\\\",\\\"@metricDefs\\\"],[\\\"span\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"unless\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"not\\\",\\\"html-safe\\\",\\\"to-execution-outcome-html\\\",\\\"ui/info-icon\\\",\\\"gt\\\",\\\"h4\\\",\\\"p\\\",\\\"link-to\\\",\\\"and\\\",\\\"eq\\\",\\\"is-undefined\\\",\\\"or\\\",\\\"is-object\\\",\\\"ui/icon\\\",\\\"each\\\",\\\"-track-array\\\",\\\"uppercase\\\",\\\"print-metric\\\",\\\"has-aggregators\\\",\\\"metric-details-modal\\\",\\\"find-metric\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-glance-details.hbs\",\n    \"isStrictMode\": false\n  });\n  function toConditionDesc(metricDefs, triggers, scriptType) {\n    let answer = '';\n    let trigger = _.find(triggers, trigger => {\n      return trigger.triggerType === 'RealTime' && trigger.triggered;\n    });\n    if (trigger) {\n      let condition = _.find(trigger.conditions, condition => {\n        return condition.conditionMet;\n      });\n      if (condition) {\n        if (condition.valueType === 'Change') {\n          switch (condition.timePeriod) {\n            case 'EntireTest':\n              answer += 'Percent change this test execution over a weighted average of up to 10 recent executions for ';\n              break;\n            case 'LastMinute':\n              answer += 'During test execution the minute over minute change for ';\n              break;\n          }\n        }\n        answer += _loadTest.default.printConditionMetric(condition, metricDefs, scriptType);\n        let units = _loadTest.default.printConditionUnits(condition, metricDefs);\n        if (condition.lastValue) {\n          answer += ' @ ' + _lib.default.printMetricValue(condition.lastValue, units) + '';\n        }\n        answer += _loadTest.default.printOperator(condition.operator);\n        answer += _lib.default.printMetricValue(condition.threshold, units);\n        answer += ' threshold hit';\n        if (condition.valueType === 'Absolute') {\n          switch (condition.timePeriod) {\n            case 'EntireTest':\n              answer += ' during this test execution';\n              break;\n            case 'LastMinute':\n              answer += ' during the last minute of this test execution';\n              break;\n          }\n        }\n      } else {\n        answer += 'Unknown treshold breached during test execution.';\n      }\n    }\n    return answer;\n  }\n  function printLimit(val, units) {\n    if (units === 'seconds') {\n      units = 'hours';\n      val = val / 3600;\n    }\n    return _lib.default.printMetricValue(val, units);\n  }\n  let TestGlanceDetailsComponent = _exports.default = (_dec = (0, _object.computed)('args.execution.{script.scriptType,triggerBreached,triggers}', 'args.metricDefs'), _dec2 = (0, _object.computed)('args.execution.{limitBreached,limit}'), _dec3 = (0, _object.computed)('args.execution.{limitBreached,limitObservedVal,limitVal}', 'limitField'), _dec4 = (0, _object.computed)('args.execution.orgId'), _class = class TestGlanceDetailsComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"showMetricDetailsModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedMetric\", _descriptor3, this);\n    }\n    get utilizationWarning() {\n      return this.args.bucketsLoaded ? _utilization.default.getUtilizationWarning(this.args.buckets, this.args.config) : null;\n    }\n    get metrics() {\n      const glanceConfig = this.args.config?.glance;\n      const summary = this.args.summary;\n      const comparisons = summary?.comparisons;\n      const scriptType = this.args.scriptType;\n      const answer = [];\n      if (glanceConfig && summary) {\n        _.forEach(glanceConfig.metrics, metricConfig => {\n          answer.push(_loadTest.default.toMetric(metricConfig, summary, comparisons));\n        });\n        if (glanceConfig.showUserMetrics) {\n          const userMetrics = [];\n          _.forEach(summary.metrics, metric => {\n            if (metric.namespace !== _loadTest.default.SystemNs && (metric.metricType === 'Counter' || metric.metricType === 'Timing')) {\n              const existing = _.find(answer, existingMetric => {\n                return existingMetric.namespace === metric.namespace && existingMetric.metric === metric.metricDef;\n              });\n              if (!existing) {\n                const metricName = metric.metricType === 'Counter' ? metric.metricDef : metric.metricDef + '-p50';\n                const metricConfig = {\n                  title: metric.metricType === 'Counter' ? metric.metricDef : _lib.default.camelCaseToTitleCase(metric.metricDef) + ' [Median]',\n                  namespace: metric.namespace,\n                  metric: metricName,\n                  units: _loadTest.default.getUnits(metric.namespace, metricName, metric, scriptType),\n                  higherIsBetter: metric.metricType === 'Counter',\n                  red: 25,\n                  amber: 10,\n                  improved: 10\n                };\n                userMetrics.push(_loadTest.default.toMetric(metricConfig, summary, comparisons));\n              }\n            }\n          });\n          answer.push.apply(answer, _.sortBy(userMetrics, m => {\n            return m.title.toLowerCase();\n          }));\n        }\n      }\n      return answer;\n    }\n    get metricRows() {\n      return _lib.default.group(this.metrics, 3);\n    }\n    get overall() {\n      let metrics = this.metrics;\n      let maxStatus = -1;\n      let minStatus = 2;\n      _.forEach(metrics, metric => {\n        if (metric.exists) {\n          if (metric.status > maxStatus) {\n            maxStatus = metric.status;\n          }\n          if (metric.status < minStatus) {\n            minStatus = metric.status;\n          }\n        }\n      });\n      let status = maxStatus === 0 && minStatus === -1 ? -1 : maxStatus;\n      let success = this.args.execution?.success;\n      if (_.isBoolean(success) && !success) {\n        status = 2;\n      }\n      return {\n        status: status,\n        textClass: _loadTest.default.toTextClass(status),\n        iconClass: _loadTest.default.toIconClass(status),\n        noteClass: _loadTest.default.toNoteClass(status),\n        colorClass: _loadTest.default.toColorClass(status)\n      };\n    }\n    get conditionDesc() {\n      if (this.args.execution?.triggerBreached) {\n        return toConditionDesc(this.args.metricDefs, this.args.execution.triggers, this.args.execution.script?.scriptType);\n      } else {\n        return null;\n      }\n    }\n    get limitField() {\n      if (this.args.execution?.limitBreached) {\n        let limitObj = this.args.execution.limit;\n        if (limitObj) return {\n          name: limitObj.description,\n          units: limitObj.units\n        };else return {\n          name: this.args.execution.limitField || 'Unknown',\n          units: ''\n        };\n      }\n      return null;\n    }\n    get limitDesc() {\n      if (this.args.execution?.limitBreached) {\n        let field = this.limitField;\n        let limitVal = this.args.execution.limitVal;\n        let limitObservedVal = this.args.execution.limitObservedVal;\n        let desc = (field.isSystem ? 'Testable' : 'Your account') + ' has a ' + field.name + ' limit' + (limitVal ? ' of <strong>' + printLimit(limitVal, field.units) + '</strong>' : ' that was exceeded') + '.';\n        if (limitObservedVal) {\n          desc += '<br/><strong>' + printLimit(limitObservedVal, field.units) + '</strong> observed during this test, triggering the limit.';\n        }\n        return desc;\n      }\n      return '';\n    }\n    get recommendUpgrade() {\n      let orgId = this.args.execution?.orgId;\n      let orgAssoc = _.find(_environment.config.currentUser.orgs, orgAssoc => {\n        return orgAssoc.organization.id === orgId;\n      });\n      return orgAssoc && !orgAssoc.organization.account.locked;\n    }\n    showTestOutcomeModalAction(selected, isRegion) {\n      this.args.showTestOutcomeModal?.(selected, isRegion);\n    }\n    metricDetailsModalClosed() {\n      this.showMetricDetailsModal = false;\n    }\n    metricDetailsSelected(metric) {\n      this.selectedMetric = metric;\n      this.showMetricDetailsModal = true;\n    }\n    _onUpdateStatus() {\n      this.overall; // force recompute of overall status when execution.success changes\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showMetricDetailsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedMetric\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"conditionDesc\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"conditionDesc\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"limitField\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"limitField\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"limitDesc\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"limitDesc\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"recommendUpgrade\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"recommendUpgrade\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcomeModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcomeModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDetailsModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDetailsModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"metricDetailsSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"metricDetailsSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onUpdateStatus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onUpdateStatus\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestGlanceDetailsComponent);\n});","define(\"@testable/shared-ui/components/test-glance\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and this.isVisible @execution.completed)}}\n    <div class=\"panel block-sub-container\" data-sortable-id=\"glance\" data-type=\"Glance\">\n      <div class=\"panel-heading block-sub-container-target\">\n        <div class=\"panel-heading-btn\">\n          {{#if (not (or @execution.minimalHeader @fromResultsTab @isViewer))}}\n            <a {{on \"click\" this.showConfigureGlanceModalAction}} class=\"btn btn-sm btn-icon btn-circle text-primary\" role=\"button\">\n              <Ui::Icon @icon=\"fa fa-cog\" /></a>\n  \n            <a {{on \"click\" (fn this.removePanelAction \"glance\")}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                                 title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n          {{/if}}\n        </div>\n        <h4 class=\"panel-title\">\n          <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBodyTestGlance\" aria-expanded=\"true\"\n             class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n             aria-controls=\"panelBodyTestGlance\">\n             <Ui::Icon @icon=\"fa fa-minus \" /></a>\n  \n          <strong>Summary {{#if (not (or @comparisonId @model.isAll))}} - {{@model.regionDescription}}{{/if}}</strong>\n          {{#unless @comparisonId}}\n            <a class=\"m-l-5\" {{on \"click\" (fn this.showTestOutcomeModalAction (if @model.isAll @model.execution @model.executionRegion)\n                                      (not @model.isAll))}} role=\"button\">\n              {{html-safe (to-execution-outcome-html (if @model.isAll @model.execution @model.executionRegion) false)}}\n            </a>\n            <Ui::InfoIcon\n                    @content={{this.infoContent}}\n                    @isHtml={{true}} @placement=\"bottom\" />\n          {{/unless}}\n        </h4>\n      </div>\n      <div class=\"collapse show\" id=\"panelBodyTestGlance\" aria-expanded=\"true\">\n        <div class=\"panel-body\">\n        <TestGlanceDetails\n                @title=\"Current Test\"\n                @selectedResource={{@selectedResource}}\n                @bucketsLoaded={{@bucketsLoaded}}\n                @summary={{@summary}}\n                @scriptType={{@execution.script.scriptType}}\n                @model={{@model}}\n                @execution={{@execution}}\n                @metricDefs={{@metricDefs}}\n                @config={{@config}}\n                @fromResultsTab={{@fromResultsTab}}\n                @infoContent={{this.infoContent}}\n                @isComparison={{if @comparisonId true}}\n                @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n        />\n        {{#if (and @baselineExecution @baselineExecution.completed (or (eq @regionName 'ALL') @regionBaselineId)) }}\n          <TestGlanceDetails\n                  @title=\"Baseline Test\"\n                  @selectedResource={{@baselineSelectedResource}}\n                  @bucketsLoaded={{@bucketsLoaded}}\n                  @summary={{@summaryBaseline}}\n                  @scriptType={{@baselineExecution.script.scriptType}}\n                  @model={{@regionSummaryBaseline}}\n                  @execution={{@baselineExecution}}\n                  @metricDefs={{@metricDefs}}\n                  @config={{@config}}\n                  @fromResultsTab={{@fromResultsTab}}\n                  @infoContent={{this.infoContent}}\n                  @isComparison={{true}}\n                  @showTestOutcomeModal={{this.showTestOutcomeModalAction}}\n          />\n        {{/if}}\n        </div>\n      </div>\n    </div>\n  \n    {{#if this.showConfigureGlanceModal}}\n      <ConfigureGlance @config={{@config.glance}}\n                       @metricDefs={{@metricDefs}}\n                       @summary={{@model.summary}}\n                       @percentiles={{@execution.percentiles}}\n                       @scriptType={{@execution.script.scriptType}}\n                       @isLoad={{@isLoad}}\n                       @configChanged={{this.glanceConfigChangedAction}}\n                       @modalClosed={{this.configureGlanceModalClosed}} />\n    {{/if}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,0,[\\\"isVisible\\\"]],[30,1,[\\\"completed\\\"]]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"panel block-sub-container\\\"],[14,\\\"data-sortable-id\\\",\\\"glance\\\"],[14,\\\"data-type\\\",\\\"Glance\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[28,[37,4],[[30,1,[\\\"minimalHeader\\\"]],[30,2],[30,3]],null]],null],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"showConfigureGlanceModalAction\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-cog\\\"]],null],[13],[1,\\\"\\\\n\\\\n          \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"removePanelAction\\\"]],\\\"glance\\\"],null]],null],[12],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[14,6,\\\"#panelBodyTestGlance\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[14,\\\"aria-controls\\\",\\\"panelBodyTestGlance\\\"],[12],[1,\\\"\\\\n           \\\"],[8,[39,7],null,[[\\\"@icon\\\"],[\\\"fa fa-minus \\\"]],null],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Summary \\\"],[41,[28,[37,3],[[28,[37,4],[[30,4],[30,5,[\\\"isAll\\\"]]],null]],null],[[[1,\\\" - \\\"],[1,[30,5,[\\\"regionDescription\\\"]]]],[]],null],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"          \\\"],[11,3],[24,0,\\\"m-l-5\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"showTestOutcomeModalAction\\\"]],[52,[30,5,[\\\"isAll\\\"]],[30,5,[\\\"execution\\\"]],[30,5,[\\\"executionRegion\\\"]]],[28,[37,3],[[30,5,[\\\"isAll\\\"]]],null]],null]],null],[12],[1,\\\"\\\\n            \\\"],[1,[28,[35,12],[[28,[37,13],[[52,[30,5,[\\\"isAll\\\"]],[30,5,[\\\"execution\\\"]],[30,5,[\\\"executionRegion\\\"]]],false],null]],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[39,14],null,[[\\\"@content\\\",\\\"@isHtml\\\",\\\"@placement\\\"],[[30,0,[\\\"infoContent\\\"]],true,\\\"bottom\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"collapse show\\\"],[14,1,\\\"panelBodyTestGlance\\\"],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@selectedResource\\\",\\\"@bucketsLoaded\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@model\\\",\\\"@execution\\\",\\\"@metricDefs\\\",\\\"@config\\\",\\\"@fromResultsTab\\\",\\\"@infoContent\\\",\\\"@isComparison\\\",\\\"@showTestOutcomeModal\\\"],[\\\"Current Test\\\",[30,6],[30,7],[30,8],[30,1,[\\\"script\\\",\\\"scriptType\\\"]],[30,5],[30,1],[30,9],[30,10],[30,2],[30,0,[\\\"infoContent\\\"]],[52,[30,4],true],[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,1],[[30,11],[30,11,[\\\"completed\\\"]],[28,[37,4],[[28,[37,16],[[30,12],\\\"ALL\\\"],null],[30,13]],null]],null],[[[1,\\\"        \\\"],[8,[39,15],null,[[\\\"@title\\\",\\\"@selectedResource\\\",\\\"@bucketsLoaded\\\",\\\"@summary\\\",\\\"@scriptType\\\",\\\"@model\\\",\\\"@execution\\\",\\\"@metricDefs\\\",\\\"@config\\\",\\\"@fromResultsTab\\\",\\\"@infoContent\\\",\\\"@isComparison\\\",\\\"@showTestOutcomeModal\\\"],[\\\"Baseline Test\\\",[30,14],[30,7],[30,15],[30,11,[\\\"script\\\",\\\"scriptType\\\"]],[30,16],[30,11],[30,9],[30,10],[30,2],[30,0,[\\\"infoContent\\\"]],true,[30,0,[\\\"showTestOutcomeModalAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showConfigureGlanceModal\\\"]],[[[1,\\\"    \\\"],[8,[39,17],null,[[\\\"@config\\\",\\\"@metricDefs\\\",\\\"@summary\\\",\\\"@percentiles\\\",\\\"@scriptType\\\",\\\"@isLoad\\\",\\\"@configChanged\\\",\\\"@modalClosed\\\"],[[30,10,[\\\"glance\\\"]],[30,9],[30,5,[\\\"summary\\\"]],[30,1,[\\\"percentiles\\\"]],[30,1,[\\\"script\\\",\\\"scriptType\\\"]],[30,17],[30,0,[\\\"glanceConfigChangedAction\\\"]],[30,0,[\\\"configureGlanceModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[\\\"@execution\\\",\\\"@fromResultsTab\\\",\\\"@isViewer\\\",\\\"@comparisonId\\\",\\\"@model\\\",\\\"@selectedResource\\\",\\\"@bucketsLoaded\\\",\\\"@summary\\\",\\\"@metricDefs\\\",\\\"@config\\\",\\\"@baselineExecution\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@baselineSelectedResource\\\",\\\"@summaryBaseline\\\",\\\"@regionSummaryBaseline\\\",\\\"@isLoad\\\"],[\\\"if\\\",\\\"and\\\",\\\"div\\\",\\\"not\\\",\\\"or\\\",\\\"a\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"fn\\\",\\\"h4\\\",\\\"strong\\\",\\\"unless\\\",\\\"html-safe\\\",\\\"to-execution-outcome-html\\\",\\\"ui/info-icon\\\",\\\"test-glance-details\\\",\\\"eq\\\",\\\"configure-glance\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-glance.hbs\",\n    \"isStrictMode\": false\n  });\n  const InfoContent = `<p>Compares key metrics against a weighted average of the 10 most recent executions of this test\n    \"configuration (or all executions if less than 10 total). The number of results in each execution is used as the\n    \"weight.</p> <p>Click the configure icon to view or choose the metrics that go into the computation and the\n    \"thresholds for warning and failure.</p><p>Check the <strong>Metrics</strong> section below for more details on\n    \"each specific metric and its history.</p>`;\n  let TestGlanceComponent = _exports.default = (_class = class TestGlanceComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"envConfig\", _descriptor, this);\n      _initializerDefineProperty(this, \"showConfigureGlanceModal\", _descriptor2, this);\n      _defineProperty(this, \"infoContent\", InfoContent);\n    }\n    get isVisible() {\n      return this.args.glanceVisibility === 'always' || 'thisRun' === this.args.resultsType || 'baseline' === this.args.resultsType;\n    }\n    showTestOutcomeModalAction(selected, isRegion) {\n      this.args.showTestOutcomeModal(selected, isRegion);\n    }\n    showConfigureGlanceModalAction() {\n      this.showConfigureGlanceModal = true;\n    }\n    configureGlanceModalClosed() {\n      this.showConfigureGlanceModal = false;\n    }\n    glanceConfigChangedAction(newConfig) {\n      this.args.glanceConfigChanged(newConfig);\n    }\n    removePanelAction(name) {\n      this.args.removePanel(name);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"envConfig\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showConfigureGlanceModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showTestOutcomeModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestOutcomeModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showConfigureGlanceModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showConfigureGlanceModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"configureGlanceModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"configureGlanceModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"glanceConfigChangedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"glanceConfigChangedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestGlanceComponent);\n});","define(\"@testable/shared-ui/components/test-outcome-detail\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _loadTest, _server, _environment, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @model.manualSuccess}}\n    <div class=\"p-40 text-center\">\n      {{#if @model.timedOut}}\n        The session timed out which resulted in the test failing.\n      {{else}}\n        This test {{if @model.success 'passed' 'failed'}} via a remote command,\n        <code>testable:{{if @model.success 'pass' 'fail'}}</code>.\n      {{/if}}\n    </div>\n  {{else}}\n    <div role=\"tabpanel\" class=\"{{if (eq @index 0) 'active show'}} tab-pane\"\n         id=\"{{@model.id}}_tab\">\n      {{#if this.loadingRegions}}\n        <span class=\"lead m-b-20\">Loading details...</span>\n      {{/if}}\n      {{#if (or @isRegion (eq this.data.length 1))}}\n        <TestOutcomeRegion @model={{this.testOutcome.model}}\n                           @execution={{this.testOutcome.execution}}\n                           @conditions={{this.testOutcome.conditions}}\n                           @showBreakingPoint={{this.showBreakingPoint}}\n                           @showResourceColumn={{this.testOutcome.showResourceColumn}}\n                           @systemConditions={{this.testOutcome.systemConditions}} />\n      {{else if (gt this.data.length 1)}}\n        <div>\n          <ul class=\"nav nav-pills nav-fill\" role=\"tablist\">\n            {{#each this.data as |regionData|}}\n              <li class=\"nav-items\">\n                <a href=\"#{{regionData.id}}\" data-bs-toggle=\"tab\"\n                   class=\"nav-link {{unless regionData.isRegion 'active'}}\">\n                  {{html-safe regionData.smallOutcomeIconHtml}}\n                  {{#if regionData.isRegion}}\n                    {{regionData.model.region.description}}\n                  {{else}}\n                    Overall\n                  {{/if}}\n                </a>\n              </li>\n            {{/each}}\n          </ul>\n          <div class=\"tab-content p-0\">\n            {{#each this.data as |regionData|}}\n              <div role=\"tabpanel\" class=\"{{unless regionData.isRegion 'active show'}} tab-pane\"\n                   id=\"{{regionData.id}}\">\n                <TestOutcomeRegion @model={{regionData.model}}\n                                   @execution={{regionData.execution}}\n                                   @conditions={{regionData.conditions}}\n                                   @showBreakingPoint={{this.showBreakingPoint}}\n                                   @showResourceColumn={{regionData.showResourceColumn}}\n                                   @systemConditions={{regionData.systemConditions}} />\n              </div>\n            {{/each}}\n          </div>\n        </div>\n      {{/if}}\n  \n      {{#unless this.isMonitoring}}\n        <p class=\"bg-silver p-5 f-s-11 text-break\">\n          <LinkTo @route='update-test' @model={{@confId}}>Success criteria</LinkTo>\n          are part of the\n          <LinkTo @route='update-test' @model={{@confId}}>test configuration</LinkTo>\n          . Default criteria are defined under\n          <LinkTo @route='account.settings'>Account => Settings</LinkTo>\n        </p>\n      {{/unless}}\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1,[\\\"manualSuccess\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"p-40 text-center\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"timedOut\\\"]],[[[1,\\\"      The session timed out which resulted in the test failing.\\\\n\\\"]],[]],[[[1,\\\"      This test \\\"],[1,[52,[30,1,[\\\"success\\\"]],\\\"passed\\\",\\\"failed\\\"]],[1,\\\" via a remote command,\\\\n      \\\"],[10,\\\"code\\\"],[12],[1,\\\"testable:\\\"],[1,[52,[30,1,[\\\"success\\\"]],\\\"pass\\\",\\\"fail\\\"]],[13],[1,\\\".\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[15,0,[29,[[52,[28,[37,3],[[30,2],0],null],\\\"active show\\\"],\\\" tab-pane\\\"]]],[15,1,[29,[[30,1,[\\\"id\\\"]],\\\"_tab\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingRegions\\\"]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"lead m-b-20\\\"],[12],[1,\\\"Loading details...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,5],[[30,3],[28,[37,3],[[30,0,[\\\"data\\\",\\\"length\\\"]],1],null]],null],[[[1,\\\"      \\\"],[8,[39,6],null,[[\\\"@model\\\",\\\"@execution\\\",\\\"@conditions\\\",\\\"@showBreakingPoint\\\",\\\"@showResourceColumn\\\",\\\"@systemConditions\\\"],[[30,0,[\\\"testOutcome\\\",\\\"model\\\"]],[30,0,[\\\"testOutcome\\\",\\\"execution\\\"]],[30,0,[\\\"testOutcome\\\",\\\"conditions\\\"]],[30,0,[\\\"showBreakingPoint\\\"]],[30,0,[\\\"testOutcome\\\",\\\"showResourceColumn\\\"]],[30,0,[\\\"testOutcome\\\",\\\"systemConditions\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,7],[[30,0,[\\\"data\\\",\\\"length\\\"]],1],null],[[[1,\\\"      \\\"],[10,0],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills nav-fill\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"data\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n              \\\"],[10,3],[15,6,[29,[\\\"#\\\",[30,4,[\\\"id\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[15,0,[29,[\\\"nav-link \\\",[52,[51,[30,4,[\\\"isRegion\\\"]]],\\\"active\\\"]]]],[12],[1,\\\"\\\\n                \\\"],[1,[28,[35,14],[[30,4,[\\\"smallOutcomeIconHtml\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"isRegion\\\"]],[[[1,\\\"                  \\\"],[1,[30,4,[\\\"model\\\",\\\"region\\\",\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  Overall\\\\n\\\"]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"tab-content p-0\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"data\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,\\\"role\\\",\\\"tabpanel\\\"],[15,0,[29,[[52,[51,[30,5,[\\\"isRegion\\\"]]],\\\"active show\\\"],\\\" tab-pane\\\"]]],[15,1,[29,[[30,5,[\\\"id\\\"]]]]],[12],[1,\\\"\\\\n              \\\"],[8,[39,6],null,[[\\\"@model\\\",\\\"@execution\\\",\\\"@conditions\\\",\\\"@showBreakingPoint\\\",\\\"@showResourceColumn\\\",\\\"@systemConditions\\\"],[[30,5,[\\\"model\\\"]],[30,5,[\\\"execution\\\"]],[30,5,[\\\"conditions\\\"]],[30,0,[\\\"showBreakingPoint\\\"]],[30,5,[\\\"showResourceColumn\\\"]],[30,5,[\\\"systemConditions\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]],null]],[]]],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isMonitoring\\\"]]],[[[1,\\\"      \\\"],[10,2],[14,0,\\\"bg-silver p-5 f-s-11 text-break\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,6]]],[[\\\"default\\\"],[[[[1,\\\"Success criteria\\\"]],[]]]]],[1,\\\"\\\\n        are part of the\\\\n        \\\"],[8,[39,16],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,6]]],[[\\\"default\\\"],[[[[1,\\\"test configuration\\\"]],[]]]]],[1,\\\"\\\\n        . Default criteria are defined under\\\\n        \\\"],[8,[39,16],null,[[\\\"@route\\\"],[\\\"account.settings\\\"]],[[\\\"default\\\"],[[[[1,\\\"Account => Settings\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@model\\\",\\\"@index\\\",\\\"@isRegion\\\",\\\"regionData\\\",\\\"regionData\\\",\\\"@confId\\\"],[\\\"if\\\",\\\"div\\\",\\\"code\\\",\\\"eq\\\",\\\"span\\\",\\\"or\\\",\\\"test-outcome-region\\\",\\\"gt\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"a\\\",\\\"unless\\\",\\\"html-safe\\\",\\\"p\\\",\\\"link-to\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-outcome-detail.hbs\",\n    \"isStrictMode\": false\n  });\n  function toData(model, execution, metricDefs, testType, systemConditions, isRegion) {\n    const bpTrigger = _loadTest.default.findTrigger(model.triggers, 'RealTime');\n    const successTrigger = _loadTest.default.findTrigger(model.triggers, 'OnTestFinish');\n    const conditions = _loadTest.default.getConditions(successTrigger, bpTrigger, metricDefs, testType);\n    const showResourceColumn = conditions.some(condition => condition.matchingResource);\n    return {\n      id: (isRegion ? model.region.name : 'all') + 'Tab',\n      model: model,\n      isRegion: isRegion,\n      conditions,\n      showResourceColumn,\n      smallOutcomeIconHtml: _loadTest.default.getOutcomeHtml(_loadTest.default.getExecutionOutcomeOrder(model), null, false),\n      systemConditions: systemConditions,\n      execution: execution\n    };\n  }\n  let TestOutcomeDetailComponent = _exports.default = (_class = class TestOutcomeDetailComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"testResults\", _descriptor, this);\n      _initializerDefineProperty(this, \"loadingRegions\", _descriptor2, this);\n      _initializerDefineProperty(this, \"model\", _descriptor3, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      if (!this.args.overallModel?.isParent && !this.args.isRegion && this.data.length <= 1) {\n        this.loadRegions();\n      }\n    }\n    get testOutcome() {\n      const data = _.first(this.data);\n      this.args.updateTestOutcome?.(data);\n      return data;\n    }\n    get data() {\n      const metricDefs = this.args.metricDefs;\n      const testType = this.args.testType;\n      const systemConditions = this.systemConditions;\n      const execution = this.model;\n      const answer = [];\n      if (this.model.triggers?.length > 0 && this.model.summary) {\n        answer.push(toData(execution, execution, metricDefs, testType, systemConditions, this.args.isRegion));\n      }\n      _.forEach(execution.regions, executionRegion => {\n        if (executionRegion.triggers && executionRegion.triggers.length > 0) {\n          answer.push(toData(executionRegion, execution, metricDefs, testType, [], true));\n        }\n      });\n      return answer;\n    }\n    get showBreakingPoint() {\n      const testType = this.args.testType;\n      return !testType || testType === 'Load';\n    }\n    get systemConditions() {\n      const model = this.model;\n      const showBreakingPoint = this.showBreakingPoint;\n      const isRegion = this.args.isRegion;\n      const answer = [];\n      if (!isRegion && model.completed && _loadTest.default.getSummaryCount(model.summary) === 0) {\n        answer.push({\n          isPass: false,\n          conditionText: 'Launch test runners'\n        });\n      }\n      if (showBreakingPoint && !isRegion) {\n        answer.push({\n          isPass: !model.limitBreached,\n          conditionText: 'Do not breach any account limit'\n        });\n      }\n      return answer;\n    }\n    loadRegions() {\n      this.loadingRegions = true;\n      _server.default.getLoadTestExecution(this.args.executionId, 'up=false&includeScript=false&includeAssignments=false').then(execution => {\n        this.testResults.processSummary(execution.summary);\n        this.model = execution;\n        this.loadingRegions = false;\n      }, () => {\n        this.loadingRegions = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"loadingRegions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"model\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.model;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"testOutcome\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"testOutcome\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"data\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"data\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"systemConditions\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"systemConditions\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestOutcomeDetailComponent);\n});","define(\"@testable/shared-ui/components/test-outcome-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _server, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"testOutcomeModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n       {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog modal-lg modal-large-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            Test Outcome Details {{#if @isRegion}}- {{@model.region.description}}{{/if}}\n            {{#if (or @isRegion (eq this.testOutcomes.length 1))}}\n              {{html-safe (get this.testOutcomes \"0.smallOutcomeIconHtml\")}}\n            {{/if}}\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          {{#if @model.isParent}}\n            <ul class=\"nav nav-pills nav-fill\" role=\"tablist\">\n              {{#each this.testOutcomes as |testOutcome index|}}\n                <li class=\"nav-items\">\n                  <a href=\"#{{testOutcome.id}}_tab\" data-bs-toggle=\"tab\"\n                      class=\"nav-link {{if (eq index 0) 'active'}}\">\n                    {{html-safe (this.outcomeHtml testOutcome)}} {{testOutcome.confName}} (#{{this.getIndex index}})\n                  </a>\n                </li>\n              {{/each}}\n            </ul>\n          {{/if}}\n          <div class=\"tab-content p-0\">\n            {{#each this.testOutcomes as |testOutcome index|}}\n                <TestOutcomeDetail\n                  @overallModel={{@model}}\n                  @model={{testOutcome}}\n                  @index={{index}}\n                  @updateTestOutcome={{mut this.testOutcome}}\n                  @isRegion={{@isRegion}}\n                  @confId={{testOutcome.confId}}\n                  @testType={{@testType}}\n                  @scriptType={{@scriptType}}\n                  @metricDefs={{if this.metricDefs this.metricDefs @metricDefs}}\n                  @executionId={{@executionId}}\n                  @testCaseId={{@testCaseId}}\n                />\n            {{else if this.isLoading}}\n              Loading Outcome Details...\n            {{/each}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"testOutcomeModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg modal-large-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n          Test Outcome Details \\\"],[41,[30,1],[[[1,\\\"- \\\"],[1,[30,2,[\\\"region\\\",\\\"description\\\"]]]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,1],[28,[37,5],[[30,0,[\\\"testOutcomes\\\",\\\"length\\\"]],1],null]],null],[[[1,\\\"            \\\"],[1,[28,[35,6],[[28,[37,7],[[30,0,[\\\"testOutcomes\\\"]],\\\"0.smallOutcomeIconHtml\\\"],null]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"isParent\\\"]],[[[1,\\\"          \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills nav-fill\\\"],[14,\\\"role\\\",\\\"tablist\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"testOutcomes\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"li\\\"],[14,0,\\\"nav-items\\\"],[12],[1,\\\"\\\\n                \\\"],[10,3],[15,6,[29,[\\\"#\\\",[30,3,[\\\"id\\\"]],\\\"_tab\\\"]]],[14,\\\"data-bs-toggle\\\",\\\"tab\\\"],[15,0,[29,[\\\"nav-link \\\",[52,[28,[37,5],[[30,4],0],null],\\\"active\\\"]]]],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[35,6],[[28,[30,0,[\\\"outcomeHtml\\\"]],[[30,3]],null]],null]],[1,\\\" \\\"],[1,[30,3,[\\\"confName\\\"]]],[1,\\\" (#\\\"],[1,[28,[30,0,[\\\"getIndex\\\"]],[[30,4]],null]],[1,\\\")\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3,4]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[14,0,\\\"tab-content p-0\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"testOutcomes\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[39,14],null,[[\\\"@overallModel\\\",\\\"@model\\\",\\\"@index\\\",\\\"@updateTestOutcome\\\",\\\"@isRegion\\\",\\\"@confId\\\",\\\"@testType\\\",\\\"@scriptType\\\",\\\"@metricDefs\\\",\\\"@executionId\\\",\\\"@testCaseId\\\"],[[30,2],[30,5],[30,6],[28,[37,15],[[30,0,[\\\"testOutcome\\\"]]],null],[30,1],[30,5,[\\\"confId\\\"]],[30,7],[30,8],[52,[30,0,[\\\"metricDefs\\\"]],[30,0,[\\\"metricDefs\\\"]],[30,9]],[30,10],[30,11]]],null],[1,\\\"\\\\n\\\"]],[5,6]],[[[41,[30,0,[\\\"isLoading\\\"]],[[[1,\\\"            Loading Outcome Details...\\\\n          \\\"]],[]],null]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@isRegion\\\",\\\"@model\\\",\\\"testOutcome\\\",\\\"index\\\",\\\"testOutcome\\\",\\\"index\\\",\\\"@testType\\\",\\\"@scriptType\\\",\\\"@metricDefs\\\",\\\"@executionId\\\",\\\"@testCaseId\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"or\\\",\\\"eq\\\",\\\"html-safe\\\",\\\"get\\\",\\\"button\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"a\\\",\\\"test-outcome-detail\\\",\\\"mut\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-outcome-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestOutcomeModalComponent = _exports.default = (_class = class TestOutcomeModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"testResults\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"testOutcomes\", _descriptor4, this);\n      _initializerDefineProperty(this, \"testOutcome\", _descriptor5, this);\n      _initializerDefineProperty(this, \"metricDefs\", _descriptor6, this);\n      _initializerDefineProperty(this, \"metricDefsLoaded\", _descriptor7, this);\n      this.loadTestOutcome();\n    }\n    getIndex(index) {\n      return index + 1;\n    }\n    outcomeHtml(model) {\n      return _loadTest.default.getExecutionOutcomeHtml(model);\n    }\n    async loadTestOutcome() {\n      const model = this.args.model;\n      let testOutcome = [model];\n      this.isLoading = true;\n      if (model.isParent) {\n        testOutcome = await this.api.executions.getExecutionChildResults(model.id, model.uuid, 'includeTriggers=true&includeSummary=true');\n      }\n      if (this.isDestroying || this.isDestroyed) return;\n      this.testOutcomes = testOutcome.length ? testOutcome.sort((a, b) => a.id - b.id) : [];\n      this.isLoading = false;\n    }\n    didInsert() {\n      $('#testOutcomeModal').on('hidden.bs.modal', () => {\n        this.args.modalClosed();\n      });\n      $('#testOutcomeModal').modal('show');\n      let metricDefs = this.args.metricDefs;\n      if (!metricDefs || metricDefs.length === 0) {\n        let testCaseId = this.args.testCaseId;\n        _server.default.getMetricDefs(testCaseId).then(metricDefs => {\n          if (this.isDestroying || this.isDestroyed) return;\n          this.metricDefs = metricDefs;\n          this.metricDefsLoaded = true;\n        }, () => {\n          if (this.isDestroying || this.isDestroyed) return;\n          this.metricDefsLoaded = true;\n        });\n      } else {\n        this.metricDefsLoaded = true;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"testResults\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"testOutcomes\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"testOutcome\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"metricDefs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"metricDefsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestOutcomeModalComponent);\n});","define(\"@testable/shared-ui/components/test-outcome-region\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"form-group lead outcome-content m-l-10 m-t-20 m-b-20\">\n    <Ui::Icon @icon=\"fa fa-tachometer-alt m-r-10\"/>\n    <LinkTo\n      @route='loadTestResults' @model={{@execution.id}}>{{concat 'Ran ' (live-relative-duration @execution.createdAt)\n                                                                 ' >>'}}</LinkTo>\n  </div>\n  <div class=\"form-group\">\n    <div class=\"overflow-x-auto\">\n      <table class=\"table table-bordered widget-table widget-table-rounded\">\n        <thead>\n        <tr>\n          <th style={{html-safe \"width: 45px;\"}}>P/F</th>\n          <th style={{html-safe \"width: 80px;\"}}>Observed Value</th>\n          <th style={{html-safe \"width: 150px;\"}}>Observation Type</th>\n          <th style={{html-safe \"width: 300px;\"}}>Condition</th>\n          {{#if @showBreakingPoint}}\n            <th style={{html-safe \"width: 60px;\"}}>Break on fail?</th>\n          {{/if}}\n          {{#if @showResourceColumn}}\n            <th style={{html-safe \"width: 100px;\"}}>Resource</th>\n          {{/if}}\n        </tr>\n        </thead>\n        <tbody>\n        {{#each @conditions as |condition|}}\n          <tr>\n            <td>\n              <div class=\"text-center\">\n                                  <span class=\"fa-stack fa-1x {{if condition.isPass 'text-primary' 'text-danger'}}\">\n                                      <Ui::Icon @icon=\"fa fa-square fa-stack-1x\" class=\"fs-2m\"/>\n                                      <Ui::Icon @icon=\"fa {{if condition.isPass 'fa-check'\n                                                               'fa-exclamation'}} fa-stack-1x fa-inverse\" class='fs-1m'/>\n                                  </span>\n              </div>\n            </td>\n            <td class=\"lead outcome-content {{if condition.isPass 'text-primary' 'text-danger'}}\">\n              {{condition.lastValueText}}\n            </td>\n            <td class=\"lead outcome-content\">{{condition.typeText}}</td>\n            <td class=\"lead outcome-content\">{{condition.conditionText}}</td>\n            {{#if @showBreakingPoint}}\n              <td>\n                <div class=\"text-center\">\n                  <Input @type=\"checkbox\" disabled={{true}} @checked={{condition.isBreakingPoint}} />\n                </div>\n              </td>\n            {{/if}}\n            {{#if @showResourceColumn}}\n              <td>{{or condition.matchingResource.resource \"-\"}}</td>\n            {{/if}}\n          </tr>\n        {{/each}}\n        {{#each @systemConditions as |condition|}}\n          <tr>\n            <td>\n              <div class=\"text-center\">\n                                  <span class=\"fa-stack fa-1x {{if condition.isPass 'text-primary' 'text-danger'}}\">\n                                      <Ui::Icon @icon=\"fa fa-square fa-stack-1x\" class=\"fs-2m\"/>\n                                      <Ui::Icon @icon=\"fa {{if condition.isPass 'fa-check'\n                                                               'fa-exclamation'}} fa-stack-1x fa-inverse\" class=\"fs-1m\"/>\n                                  </span>\n              </div>\n            </td>\n            <td class=\"lead outcome-content\">-</td>\n            <td class=\"lead outcome-content\">{{condition.conditionText}}</td>\n            <td class=\"lead outcome-content\">-</td>\n            {{#if @showBreakingPoint}}\n              <td>\n                <div class=\"text-center\">\n                  <Input @type=\"checkbox\" disabled={{true}} @checked={{condition.isBreakingPoint}} />\n                </div>\n              </td>\n            {{/if}}\n            {{#if @showResourceColumn}}\n              <td>{{or condition.matchingResource.resource \"-\"}}</td>\n            {{/if}}\n          </tr>\n        {{/each}}\n        </tbody>\n      </table>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"form-group lead outcome-content m-l-10 m-t-20 m-b-20\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,1],null,[[\\\"@icon\\\"],[\\\"fa fa-tachometer-alt m-r-10\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[39,2],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,1,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[28,[35,3],[\\\"Ran \\\",[28,[37,4],[[30,1,[\\\"createdAt\\\"]]],null],\\\" >>\\\"],null]]],[]]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"overflow-x-auto\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-bordered widget-table widget-table-rounded\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 45px;\\\"],null]],[12],[1,\\\"P/F\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 80px;\\\"],null]],[12],[1,\\\"Observed Value\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 150px;\\\"],null]],[12],[1,\\\"Observation Type\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 300px;\\\"],null]],[12],[1,\\\"Condition\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 60px;\\\"],null]],[12],[1,\\\"Break on fail?\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3],[[[1,\\\"          \\\"],[10,\\\"th\\\"],[15,5,[28,[37,9],[\\\"width: 100px;\\\"],null]],[12],[1,\\\"Resource\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,4]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                                \\\"],[10,1],[15,0,[29,[\\\"fa-stack fa-1x \\\",[52,[30,5,[\\\"isPass\\\"]],\\\"text-primary\\\",\\\"text-danger\\\"]]]],[12],[1,\\\"\\\\n                                    \\\"],[8,[39,1],[[24,0,\\\"fs-2m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-square fa-stack-1x\\\"]],null],[1,\\\"\\\\n                                    \\\"],[8,[39,1],[[24,0,\\\"fs-1m\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,5,[\\\"isPass\\\"]],\\\"fa-check\\\",\\\"fa-exclamation\\\"],\\\" fa-stack-1x fa-inverse\\\"]]]],null],[1,\\\"\\\\n                                \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[15,0,[29,[\\\"lead outcome-content \\\",[52,[30,5,[\\\"isPass\\\"]],\\\"text-primary\\\",\\\"text-danger\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[1,[30,5,[\\\"lastValueText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"lead outcome-content\\\"],[12],[1,[30,5,[\\\"typeText\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"lead outcome-content\\\"],[12],[1,[30,5,[\\\"conditionText\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,16],[[16,\\\"disabled\\\",true]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,5,[\\\"isBreakingPoint\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,17],[[30,5,[\\\"matchingResource\\\",\\\"resource\\\"]],\\\"-\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[42,[28,[37,13],[[28,[37,13],[[30,6]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                                \\\"],[10,1],[15,0,[29,[\\\"fa-stack fa-1x \\\",[52,[30,7,[\\\"isPass\\\"]],\\\"text-primary\\\",\\\"text-danger\\\"]]]],[12],[1,\\\"\\\\n                                    \\\"],[8,[39,1],[[24,0,\\\"fs-2m\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-square fa-stack-1x\\\"]],null],[1,\\\"\\\\n                                    \\\"],[8,[39,1],[[24,0,\\\"fs-1m\\\"]],[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,7,[\\\"isPass\\\"]],\\\"fa-check\\\",\\\"fa-exclamation\\\"],\\\" fa-stack-1x fa-inverse\\\"]]]],null],[1,\\\"\\\\n                                \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"lead outcome-content\\\"],[12],[1,\\\"-\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"lead outcome-content\\\"],[12],[1,[30,7,[\\\"conditionText\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,0,\\\"lead outcome-content\\\"],[12],[1,\\\"-\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"text-center\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,16],[[16,\\\"disabled\\\",true]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,7,[\\\"isBreakingPoint\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3],[[[1,\\\"            \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,17],[[30,7,[\\\"matchingResource\\\",\\\"resource\\\"]],\\\"-\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@execution\\\",\\\"@showBreakingPoint\\\",\\\"@showResourceColumn\\\",\\\"@conditions\\\",\\\"condition\\\",\\\"@systemConditions\\\",\\\"condition\\\"],[\\\"div\\\",\\\"ui/icon\\\",\\\"link-to\\\",\\\"concat\\\",\\\"live-relative-duration\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"html-safe\\\",\\\"if\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"span\\\",\\\"input\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-outcome-region.hbs\",\n    \"isStrictMode\": false\n  });\n  class TestOutcomeRegionComponent extends _component2.default {}\n  _exports.default = TestOutcomeRegionComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestOutcomeRegionComponent);\n});","define(\"@testable/shared-ui/components/test-result-baseline-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"resultCaseBaseLineModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}\n  >\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">\n            {{#if @model.isBaseline}} Unset {{else}} Set {{/if}}\n            Baseline Test Result\n          </h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <form id=\"copyResultScriptForm\" {{on \"submit\" this.submit}} data-parsley-trigger=\"focusout\">\n            <div class=\"form-group\">\n              {{#if @model.isBaseline}}\n                <div class=\"p-2 text-center\">\n                  This test result is currently the baseline against which test runs are compared. If you proceed,\n                  this test result will no longer be used as the baseline. Instead a weighted average of recent test runs\n                  will be used unless you set a new baseline.\n                </div>\n              {{else}}\n                <div class=\"p-2\">\n                  This test result will become the baseline against which all future test results are compared.\n                </div>\n              {{/if}}\n            </div>\n            {{#unless @model.isBaseline}}\n              <div class=\"form-group\">\n                <label class=\"normal\">\n                  <Input @type=\"checkbox\" @checked={{this.recalculateResults}} {{on \"change\"\n                                                                                    this.updateRecalculateResults}}  />\n                  Recalculate comparisons relative to the new baseline for all runs of this configuration\n                </label>\n                {{#if this.recalculateResults}}\n                  <label class=\"normal d-flex align-items-center\">\n                    <Input class=\"me-1\" @type=\"checkbox\" @checked={{this.recalculateAfterBaseline}} />\n                    Only recalculate comparisons for test runs after the baseline\n                  </label>\n                  <label class=\"normal d-flex align-items-center\">\n                    <Input class=\"me-1\" @type=\"checkbox\" @checked={{this.recalculateMostRecent}} />\n                    Only recalculate comparisons for the most recent\n                    <Input class=\"w-auto form-control form-control-sm ms-2 me-2\"\n                           disabled={{not this.recalculateMostRecent}} @type=\"number\" min=\"1\" max=\"25\"\n                           @value={{this.recalculateLimit}}\n                           data-parsley-required=\"true\"\n                           data-parsley-min=\"1\"\n                           data-parsley-max=\"25\"\n                           data-parsley-type=\"integer\"\n                           data-parsley-required-message=\"Number of runs is required.\"\n                           data-parsley-min-message=\"Must be at least 1.\"\n                           data-parsley-max-message=\"Must be at most 25.\"\n                           data-parsley-type-message=\"Must be a whole number.\"\n                           data-parsley-errors-container=\"#recalculateLimitErrors\" />\n                    runs\n                  </label>\n                  <div id=\"recalculateLimitErrors\"></div>\n                {{/if}}\n              </div>\n            {{/unless}}\n            <div class=\"pull-right\">\n              <button disabled={{if this.saving 'true'}} type=\"submit\" class=\"btn btn-success\">\n                {{#if @testConf.baseline}}\n                  {{if this.saving \"Saving...\" \"Save\"}}\n                {{else}}\n                  {{if this.saving \"Updating...\" \"Update\"}}\n                {{/if}}\n              </button>\n              <button {{on \"click\" this.closeModal}} type=\"button\" class=\"btn btn-primary\">\n                Cancel\n              </button>\n            </div>\n          </form>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"resultCaseBaseLineModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"\\\\n          \\\"],[41,[30,1,[\\\"isBaseline\\\"]],[[[1,\\\" Unset \\\"]],[]],[[[1,\\\" Set \\\"]],[]]],[1,\\\"\\\\n          Baseline Test Result\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[11,\\\"form\\\"],[24,1,\\\"copyResultScriptForm\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"submit\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"isBaseline\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"p-2 text-center\\\"],[12],[1,\\\"\\\\n                This test result is currently the baseline against which test runs are compared. If you proceed,\\\\n                this test result will no longer be used as the baseline. Instead a weighted average of recent test runs\\\\n                will be used unless you set a new baseline.\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"p-2\\\"],[12],[1,\\\"\\\\n                This test result will become the baseline against which all future test results are compared.\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"isBaseline\\\"]]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"label\\\"],[14,0,\\\"normal\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,9],[[4,[38,6],[\\\"change\\\",[30,0,[\\\"updateRecalculateResults\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateResults\\\"]]]],null],[1,\\\"\\\\n                Recalculate comparisons relative to the new baseline for all runs of this configuration\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"recalculateResults\\\"]],[[[1,\\\"                \\\"],[10,\\\"label\\\"],[14,0,\\\"normal d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"me-1\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateAfterBaseline\\\"]]]],null],[1,\\\"\\\\n                  Only recalculate comparisons for test runs after the baseline\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"label\\\"],[14,0,\\\"normal d-flex align-items-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"me-1\\\"]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"recalculateMostRecent\\\"]]]],null],[1,\\\"\\\\n                  Only recalculate comparisons for the most recent\\\\n                  \\\"],[8,[39,9],[[24,0,\\\"w-auto form-control form-control-sm ms-2 me-2\\\"],[16,\\\"disabled\\\",[28,[37,10],[[30,0,[\\\"recalculateMostRecent\\\"]]],null]],[24,\\\"min\\\",\\\"1\\\"],[24,\\\"max\\\",\\\"25\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-min\\\",\\\"1\\\"],[24,\\\"data-parsley-max\\\",\\\"25\\\"],[24,\\\"data-parsley-type\\\",\\\"integer\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Number of runs is required.\\\"],[24,\\\"data-parsley-min-message\\\",\\\"Must be at least 1.\\\"],[24,\\\"data-parsley-max-message\\\",\\\"Must be at most 25.\\\"],[24,\\\"data-parsley-type-message\\\",\\\"Must be a whole number.\\\"],[24,\\\"data-parsley-errors-container\\\",\\\"#recalculateLimitErrors\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"recalculateLimit\\\"]]]],null],[1,\\\"\\\\n                  runs\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,1,\\\"recalculateLimitErrors\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[52,[30,0,[\\\"saving\\\"]],\\\"true\\\"]],[14,0,\\\"btn btn-success\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"baseline\\\"]],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"saving\\\"]],\\\"Saving...\\\",\\\"Save\\\"]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[1,[52,[30,0,[\\\"saving\\\"]],\\\"Updating...\\\",\\\"Update\\\"]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"closeModal\\\"]]],null],[12],[1,\\\"\\\\n              Cancel\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@testConf\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"form\\\",\\\"on\\\",\\\"unless\\\",\\\"label\\\",\\\"input\\\",\\\"not\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-result-baseline-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestCaseBaseLineModalComponent = _exports.default = (_class = class TestCaseBaseLineModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"recalculateResults\", _descriptor2, this);\n      _initializerDefineProperty(this, \"recalculateAfterBaseline\", _descriptor3, this);\n      _initializerDefineProperty(this, \"recalculateMostRecent\", _descriptor4, this);\n      _initializerDefineProperty(this, \"recalculateLimit\", _descriptor5, this);\n      _initializerDefineProperty(this, \"saving\", _descriptor6, this);\n      _initializerDefineProperty(this, \"submitted\", _descriptor7, this);\n    }\n    async submit(e) {\n      e.preventDefault();\n      if (!$('#copyResultScriptForm').parsley().validate()) return;\n      const model = this.args.model;\n      this.saving = true;\n      if (!model.isBaseline) {\n        const data = {\n          executionId: model.id,\n          recalculateResults: this.recalculateResults,\n          recalculateAfterBaseline: this.recalculateAfterBaseline,\n          recalculateLimit: parseInt(this.recalculateLimit)\n        };\n        if (!this.recalculateMostRecent) {\n          delete data.recalculateLimit;\n        }\n        await this.api.testConfs.baseline.save(model.confId, data);\n      } else {\n        await this.api.testConfs.baseline.delete(model.confId);\n      }\n      this.saving = false;\n      this.submitted = true;\n      _lib.default.info(`Baseline Successfully ${!model.isBaseline ? 'Updated' : 'Removed'}`);\n      this.closeModal();\n    }\n    closeModal() {\n      $('#resultCaseBaseLineModal').modal('hide');\n    }\n    didInsert() {\n      const _this = this;\n      $('#resultCaseBaseLineModal').on('hidden.bs.modal', function () {\n        _this.args.closeModal(_this.submitted);\n      });\n      $('#resultCaseBaseLineModal').modal('show');\n      $('#resultCaseBaseLineModal').on('shown.bs.modal', function () {\n        $('#copyResultScriptForm').parsley();\n      });\n    }\n    updateRecalculateResults(e) {\n      this.recalculateResults = e.target.checked;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"recalculateResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"recalculateAfterBaseline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"recalculateMostRecent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"recalculateLimit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 1;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"saving\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"submitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"submit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"submit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRecalculateResults\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRecalculateResults\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestCaseBaseLineModalComponent);\n});","define(\"@testable/shared-ui/components/test-runners\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isComparison}}\n    <div class=\"mb-2 mt-2 heading\"><strong>{{@title}}</strong></div>\n  {{/if}}\n  {{#if (not (or @isPrint @isLiveTest))}}\n    <div class=\"row\">\n      <div class=\"col-sm-12\">\n        <div class=\"form-group m-b-10\">\n          <label>Region</label>\n          <Ui::PSelect @options={{@regionSummaries}} @selected={{this.regionSummary}}\n                       @placeholder=\"Please select a region...\"\n                       @onChange={{this.regionSelected}}\n                       @selectedItemComponent=\"print-selected-region-summary\" as |regionSummaryOpt|>\n            <PrintRegionSummary @regionSummary={{regionSummaryOpt}} @bold={{true}} />\n          </Ui::PSelect>\n        </div>\n      </div>\n    </div>\n  {{/if}}\n  \n  <div class=\"panel \">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelTestRunners{{this.uniqueId}}\" aria-expanded=\"true\"\n           class=\"btn btn-sm btn-icon btn-circle text-primary\"\n           aria-controls=\"panelTestRunners{{this.uniqueId}}\"><Ui::Icon @icon=\"fa fa-minus\" class=\"title-box-symbol\" /></a>\n        {{#if @isLiveTest}}\n          Test Runner\n        {{else}}\n          Test Runners\n          ({{print-number this.regionSummary.agents.length}}) - {{this.regionSummary.regionName}}\n        {{/if}}\n      </h4>\n      {{#unless @isLiveTest}}\n        <div class=\"panel-heading-btn\">\n          <GridSearch @inTab={{false}} @bottomMargin={{false}} @onSearch={{fn (mut this.searchRunner)}} style={{html-safe 'margin-top: -4px'}}/>\n        </div>\n      {{/unless}}\n    </div>\n    <div id=\"panelTestRunners{{this.uniqueId}}\" class=\"collapse show\">\n      <div class=\"panel-body\">\n        <ExecutionAgentsGrid @id=\"executionAgentsGrid{{if @isBaseline \"Baseline\"}}\"\n                             @search={{this.searchRunner}}\n                             @agents={{this.regionSummary.agents}}\n                             @showRegion={{this.regionSummary.isAll}} />\n      </div>\n    </div>\n  </div>\n  {{#if this.regionSummary.isOnDemand}}\n    <div class=\"panel \">\n      <div class=\"panel-heading\">\n        <h4 class=\"panel-title\">\n          <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelTestRunnerInstances{{if @isBaseline \"Baseline\"}}\" aria-expanded=\"true\"\n             class=\"btn btn-sm btn-icon btn-circle text-primary\"\n             aria-controls=\"panelTestRunnerInstances{{if @isBaseline \"Baseline\"}}\">\n              <Ui::Icon @icon=\"fa fa-minus\" class=\"title-box-symbol\" /></a>\n          Instances ({{print-number this.regionSummary.instances.length}})</h4>\n        <div class=\"panel-heading-btn\">\n          <GridSearch @inTab={{false}} @bottomMargin={{false}} @onSearch={{fn (mut this.search) }} style={{html-safe 'margin-top: -4px'}}/>\n  \n          <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" {{on 'click' this.gridCopyButton}}>\n            <Ui::Icon @icon=\"fa fa-copy\" class=\"title-box-symbol\"/></a>\n  \n          <a role=\"button\" class=\"btn btn-sm btn-icon btn-circle text-primary\" {{on 'click' this.gridCsvButton}}>\n            <Ui::Icon @icon=\"fa fa-download\" class=\"title-box-symbol\"/></a>\n  \n        </div>\n      </div>\n  \n      <div id=\"panelTestRunnerInstances{{if @isBaseline \"Baseline\"}}\" class=\"collapse show\">\n        <div class=\"hide-grid-btns panel-body\">\n          <InstancesGrid @id=\"instancesGrid{{if @isBaseline \"Baseline\"}}\"\n                         @search={{this.search}}\n                         @regionSummary={{this.regionSummary}}\n                         @onInstanceDetailsClick={{this.showInstanceLogsModal}}\n          />\n        </div>\n      </div>\n    </div>\n  {{/if}}\n  \n  \n  {{#if this.showLogsModal}}\n    <InstanceLogsModal @instance={{this.instance}} @onClose={{this.onLogsModalClose}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"mb-2 mt-2 heading\\\"],[12],[10,\\\"strong\\\"],[12],[1,[30,2]],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,3],[[28,[37,4],[[30,3],[30,4]],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-sm-12\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"form-group m-b-10\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"Region\\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,6],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\",\\\"@selectedItemComponent\\\"],[[30,5],[30,0,[\\\"regionSummary\\\"]],\\\"Please select a region...\\\",[30,0,[\\\"regionSelected\\\"]],\\\"print-selected-region-summary\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[39,7],null,[[\\\"@regionSummary\\\",\\\"@bold\\\"],[[30,6],true]],null],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelTestRunners\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelTestRunners\\\",[30,0,[\\\"uniqueId\\\"]]]]],[12],[8,[39,10],[[24,0,\\\"title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"        Test Runner\\\\n\\\"]],[]],[[[1,\\\"        Test Runners\\\\n        (\\\"],[1,[28,[35,11],[[30,0,[\\\"regionSummary\\\",\\\"agents\\\",\\\"length\\\"]]],null]],[1,\\\") - \\\"],[1,[30,0,[\\\"regionSummary\\\",\\\"regionName\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,13],[[16,5,[28,[37,14],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@inTab\\\",\\\"@bottomMargin\\\",\\\"@onSearch\\\"],[false,false,[28,[37,15],[[28,[37,16],[[30,0,[\\\"searchRunner\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"panelTestRunners\\\",[30,0,[\\\"uniqueId\\\"]]]]],[14,0,\\\"collapse show\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,17],null,[[\\\"@id\\\",\\\"@search\\\",\\\"@agents\\\",\\\"@showRegion\\\"],[[29,[\\\"executionAgentsGrid\\\",[52,[30,7],\\\"Baseline\\\"]]],[30,0,[\\\"searchRunner\\\"]],[30,0,[\\\"regionSummary\\\",\\\"agents\\\"]],[30,0,[\\\"regionSummary\\\",\\\"isAll\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"regionSummary\\\",\\\"isOnDemand\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"panel \\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelTestRunnerInstances\\\",[52,[30,7],\\\"Baseline\\\"]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelTestRunnerInstances\\\",[52,[30,7],\\\"Baseline\\\"]]]],[12],[1,\\\"\\\\n            \\\"],[8,[39,10],[[24,0,\\\"title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[13],[1,\\\"\\\\n        Instances (\\\"],[1,[28,[35,11],[[30,0,[\\\"regionSummary\\\",\\\"instances\\\",\\\"length\\\"]]],null]],[1,\\\")\\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,13],[[16,5,[28,[37,14],[\\\"margin-top: -4px\\\"],null]]],[[\\\"@inTab\\\",\\\"@bottomMargin\\\",\\\"@onSearch\\\"],[false,false,[28,[37,15],[[28,[37,16],[[30,0,[\\\"search\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\\n        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,18],[\\\"click\\\",[30,0,[\\\"gridCopyButton\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,0,\\\"title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-copy\\\"]],null],[13],[1,\\\"\\\\n\\\\n        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[4,[38,18],[\\\"click\\\",[30,0,[\\\"gridCsvButton\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,10],[[24,0,\\\"title-box-symbol\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,1,[29,[\\\"panelTestRunnerInstances\\\",[52,[30,7],\\\"Baseline\\\"]]]],[14,0,\\\"collapse show\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"hide-grid-btns panel-body\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,19],null,[[\\\"@id\\\",\\\"@search\\\",\\\"@regionSummary\\\",\\\"@onInstanceDetailsClick\\\"],[[29,[\\\"instancesGrid\\\",[52,[30,7],\\\"Baseline\\\"]]],[30,0,[\\\"search\\\"]],[30,0,[\\\"regionSummary\\\"]],[30,0,[\\\"showInstanceLogsModal\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showLogsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,20],null,[[\\\"@instance\\\",\\\"@onClose\\\"],[[30,0,[\\\"instance\\\"]],[30,0,[\\\"onLogsModalClose\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isComparison\\\",\\\"@title\\\",\\\"@isPrint\\\",\\\"@isLiveTest\\\",\\\"@regionSummaries\\\",\\\"regionSummaryOpt\\\",\\\"@isBaseline\\\"],[\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"not\\\",\\\"or\\\",\\\"label\\\",\\\"ui/p-select\\\",\\\"print-region-summary\\\",\\\"h4\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"print-number\\\",\\\"unless\\\",\\\"grid-search\\\",\\\"html-safe\\\",\\\"fn\\\",\\\"mut\\\",\\\"execution-agents-grid\\\",\\\"on\\\",\\\"instances-grid\\\",\\\"instance-logs-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-runners.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestRunnersComponent = _exports.default = (_class = class TestRunnersComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"qpRegionId\", _descriptor, this);\n      _initializerDefineProperty(this, \"allRegion\", _descriptor2, this);\n      _initializerDefineProperty(this, \"instance\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showLogsModal\", _descriptor4, this);\n      _initializerDefineProperty(this, \"uniqueId\", _descriptor5, this);\n    }\n    get regionSummary() {\n      const regionId = this.args.qpRegionId || 'ALL';\n      const regionSummary = _.find(this.args.regionSummaries, rs => {\n        return rs.executionRegion?.id === Number(regionId);\n      }) || this.args.allRegion;\n      return regionSummary;\n    }\n    regionSelected(regionSummary) {\n      this.showInstances = false;\n      this.args.regionSelectedAction(regionSummary);\n    }\n    gridCopyButton() {\n      const resultType = this.args.isBaseline ? 'Baseline' : '';\n      let table = $(`#instancesGrid${resultType}`).DataTable();\n      table.button(0).trigger();\n    }\n    gridCsvButton() {\n      const resultType = this.args.isBaseline ? 'Baseline' : '';\n      let table = $(`#instancesGrid${resultType}`).DataTable();\n      table.button(1).trigger();\n    }\n    showInstanceLogsModal(instance) {\n      this.instance = instance;\n      this.showLogsModal = true;\n    }\n    onLogsModalClose() {\n      this.instance = null;\n      this.showLogsModal = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"qpRegionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"allRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"instance\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showLogsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"uniqueId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _emberUuid.v4)();\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"regionSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"regionSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gridCopyButton\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gridCopyButton\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gridCsvButton\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gridCsvButton\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showInstanceLogsModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showInstanceLogsModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onLogsModalClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onLogsModalClose\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestRunnersComponent);\n});","define(\"@testable/shared-ui/components/test-scenario\", [\"exports\", \"@ember/component\", \"ember-concurrency/async-arrow-runtime\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@ember/service\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/auto-queue\", \"@testable/shared-ui/utils/scenario\", \"@ember/template-factory\"], function (_exports, _component, _asyncArrowRuntime, _component2, _object, _runloop, _tracking, _trackedBuiltIns, _service, _server, _lib, _environment, _autoQueue, _scenario, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43;\n  0; //eaimeta@70e063a35619d71f0,\"ember-concurrency/async-arrow-runtime\",0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@ember/service\",0,\"ember-concurrency\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/auto-queue\",0,\"@testable/shared-ui/utils/scenario\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"test-scenario {{if (eq this.model.metadata.bindings 'remote') \"remote-test\"}}\"\n    {{did-insert this.onInsert}}\n    {{did-update this.onModelIdChange this.model.id}}\n    {{did-update this.onSmokeTestRegionChange this.smokeTestRegionObj}}\n    {{did-update this.onDataStoreUpdates this.realtimeService.dataStoreUpdates}}\n    {{did-update this.onRemovedDataStores this.realtimeService.removedDataStoreIds}}\n  >\n    <div class=\"s-header\">\n      {{#if @embeddedInExecution}}\n        <h4 class=\"embedded\">{{html-safe (truncate-string this.model.name 70 false null)}}</h4>\n      {{else}}\n        <div class=\"panel panel-transparent m-b-0\">\n          <div class=\"d-flex justify-content-between gap-1 flex-wrap\">\n  \n            <div class=\"w-100 w-sm-50 d-flex\">\n              {{#if this.isEditingName}}\n                <Input @type=\"text\" class=\"edit form-control w-auto mw-215px\" @value={{this.editedValue}}\n                  {{autofocusAndSelect}} {{on \"keydown\" this.onNameKeydown}} />\n                  <div class=\"panel-heading-btn align-content-center\">\n                    <a {{on \"click\" this.updateName}} class=\"btn btn-sm btn-icon btn-success\" data-bs-toggle=\"tooltip\"\n                      title=\"Update\" role=\"button\"><Ui::Icon @icon=\"fa fa-check\" /></a>\n                    <a {{on \"click\" this.escPress}} class=\"btn btn-sm btn-icon btn-danger\" data-bs-toggle=\"tooltip\"\n                      title=\"Cancel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n                  </div>\n              {{else}}\n                <div class=\"w-100\">\n                  <h4>\n                    <a {{on \"click\" this.editName}} role=\"button\">\n                      {{html-safe (truncate-string this.model.name 70 false null 'editable-click m-r-10')}}\n                    </a>\n                  </h4>\n  \n                  {{#unless @embeddedInMonitor}}\n                    {{#if this.model.note.contents}}\n                      <button type=\"button\" class=\"btn btn-xs btn-primary\"\n                        data-bs-toggle=\"popover\"\n                        data-bs-trigger=\"hover\"\n                        data-bs-placement=\"top\"\n                        title=\"Note\"\n                        data-bs-content={{this.model.note.contents}}\n                        {{on \"click\" this.showNoteModalAction}}\n                      >\n                        <Ui::Icon @icon=\"far fa-sticky-note\" />\n                      </button>\n                    {{/if}}\n                    {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                      <button type=\"button\" class=\"btn btn-success btn-xs\" {{on \"click\" this.changeScriptType}}\n                        disabled={{this.isChangingScriptType}}\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-title=\"Click the scenario type to change it\">{{print-script this.model this.model.scriptType}}</button>\n                      {{#if this.isChangingScriptType}}\n                        <Ui::Icon @icon=\"fa fa-spinner fa-spin\" class=\"m-l-5 text-success\" />\n                      {{/if}}\n                    {{else}}\n                      <button type=\"button\" class=\"btn btn-success btn-xs\" data-bs-toggle=\"tooltip\">{{print-script this.model this.model.scriptType}}</button>\n                    {{/if}}\n                  {{/unless}}\n                </div>\n                <Ui::DeleteLoadingIndicator @isDeleting={{this.isDeletingScenario}} @class=\"fs-6\" />\n  \n              {{/if}}\n            </div>\n  \n            <div class=\"action-btns\">\n              {{#if this.confs}}\n                <div class=\"btn-group\">\n                  <button {{on \"click\" (fn (mut this.showTestPassRateModal) true)}} class=\"btn btn-success\">\n                    Test Pass Rate\n                  </button>\n                </div>\n              {{/if}}\n              {{#if this.showTestConfigurations}}\n                <div class=\"btn-group m-l-10\">\n                  <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-bs-toggle=\"dropdown\"\n                          data-bs-auto-close=\"outside\">\n                    Run With\n                    <span class=\"sr-only\">Toggle Dropdown</span>\n                  </button>\n                  <div class=\"dropdown-menu dropdown-menu-end run-with\" role=\"menu\">\n                    <div class=\"body\">\n                      {{#if (and this.isLoadingConfs (eq this.confs.length 0))}}\n                        <h6>Loading related configurations...</h6>\n                      {{else}}\n                        {{#each this.confs as |config|}}\n                          <div class=\"config w-340px\" id=\"configuration_id_{{config.id}}\">\n                            <LinkTo @route='loadTest' @model={{config.id}}>\n                              <b>{{html-safe (truncate-string config.name 70 true)}}</b>\n                              <small>{{html-safe (print-test-short-summary config)}}</small>\n                            <br>\n                              <small class=\"date\">{{html-safe (truncate-string (concat \"Last run \" (live-relative-duration config.lastRunAt)))}}</small>\n                          </LinkTo>\n                            {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                              <div class=\"config-btn-groups\">\n                                <Ui::Icon class=\"cursor-pointer\" data-bs-toggle=\"tooltip\" title=\"Start\"\n                                  @icon=\"fa fa-play text-black\" {{on \"click\" (fn this.showTestSummaryModalAction config.id)}}/>\n                                <LinkTo data-bs-toggle=\"tooltip\" title=\"Edit\" @route='update-test' @model={{config.id}} class=\"\">\n                                  <Ui::Icon @icon=\"fa fa-edit text-black\" />\n                                </LinkTo>\n                                <button type=\"button\" class=\"btn btn-link p-0 text-black\" data-bs-toggle=\"tooltip\" title=\"Remove\" {{on \"click\" (fn this.deleteTestConf config)}} disabled={{config.isDeleting}}>\n                                  {{#if config.isDeleting}}\n                                    <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n                                  {{else}}\n                                    <Ui::Icon @icon=\"fa fa-trash\" />\n                                  {{/if}}\n                                </button>\n                              </div>\n                            {{/if}}\n                          </div>\n                        {{/each}}\n                        {{#if this.hasMoreConfs}}\n                          <div class=\"text-muted m-t-10\">\n                            {{#if this.isLoadingConfs}}\n                              Loading more test configurations...\n                            {{else}}\n                              <a {{on \"click\" this.loadMoreConfs}} role=\"button\">Load more test configurations ({{this.unloadedConfs}} remaining)...</a>\n                            {{/if}}\n                          </div>\n                        {{/if}}\n                      {{/if}}\n                      {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                        <div class=\"btn-new\">\n                        <LinkTo @route='create-test-for-scenario' @model={{this.model.id}}\n                                class=\"btn btn-primary d-flex justify-content-center\">\n                          <b>New Configuration</b>\n                        </LinkTo>\n                        </div>\n                      {{/if}}\n                    </div>\n                  </div>\n                </div>\n              {{/if}}\n              {{#if (and @isMonitor (not this.isViewer))}}\n                <div class=\"btn-group m-l-10\">\n                  <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-bs-toggle=\"dropdown\" {{on \"click\" this.loadMonitors}}>\n                    Monitor With\n                    <span class=\"sr-only\">Toggle Dropdown</span>\n                  </button>\n                  <div class=\"dropdown-menu dropdown-menu-end monitor-with\" role=\"menu\">\n                    <div class=\"body\">\n                      {{#if this.isLoadingMonitors}}\n                        <h6 class=\"px-2\">Loading related monitors...</h6>\n                      {{else}}\n                        <div class=\"px-2\">\n                          {{#each this.monitors as |monitor|}}\n                            <MonitorItem class=\"dropdown-item m-0\" @monitor={{monitor}} />\n                          {{/each}}\n                        </div>\n                      {{/if}}\n                      <div class=\"btn-new\">\n                        <LinkTo\n                          @route='monitors.new'\n                          @query={{this.monitorData}}\n                          class=\"btn btn-primary d-flex justify-content-center\">\n                          <b>New Monitor</b>\n                        </LinkTo>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              {{/if}}\n              {{#unless this.isViewer}}\n                <div class=\"btn-group m-l-10\">\n                  {{#if (eq this.model.metadata.bindings 'remote')}}\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-toggle=\"dropdown\">\n                      Actions\n                    </button>\n                  {{else}}\n                    {{#if this.smokeTestRegion}}\n                      <button type=\"button\" class=\"btn btn-primary {{this.smokeTestClass}}\" disabled={{or this.runInProgress (not this.scriptValid)}} {{on \"click\" this.run}}>\n                        <Ui::Icon @icon=\"fa fa-play\" /> {{if this.runInProgress 'Running...' (concat 'Smoke Test (' this.smokeTestRegion ')')}}\n                        <Ui::InfoIcon @icon=\"{{if this.smokeTestClass \"fa-times-circle\"}}\"\n                                      @content=\"Runs your scenario 1 time (1 minute max) with 1 user.\" />\n                      </button>\n                    {{/if}}\n                  {{/if}}\n                  <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-bs-toggle=\"dropdown\">\n                    <span class=\"sr-only\">Toggle Dropdown</span>\n                  </button>\n                  <ul class=\"dropdown-menu dropdown-menu-end\" role=\"menu\">\n                    {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                      {{#if this.runInProgress}}\n                        <li><a {{on \"click\" this.cancelRunTest}} role=\"button\"><Ui::Icon @icon=\"fa fa-stop\" /> Cancel Smoke Test</a></li>\n                      {{else}}\n                        <li class=\"{{unless this.scriptValid 'disabled'}}\"><a {{on \"click\" this.run}} role=\"button\"><Ui::Icon @icon=\"fa fa-play\" /> Smoke\n                            Test</a></li>\n                        <li><a {{on \"click\" this.showRunInRegionModalAction}} role=\"button\"><Ui::Icon @icon=\"fa fa-play-circle\" /> Smoke Test In Region</a></li>\n                      {{/if}}\n                    {{/if}}\n                    {{#unless (or @isMonitor @embeddedInMonitor)}}\n                      {{#if (eq this.model.scriptType 'Code')}}\n                        <li><a {{on \"click\" this.showNpmModulesModalAction}} role=\"button\"><Ui::Icon @icon=\"fa fa-align-justify\" /> Available NPM Modules</a></li>\n                      {{/if}}\n                    {{/unless}}\n                    <li><a {{on \"click\" this.editName}} role=\"button\"><Ui::Icon @icon=\"fa fa-edit\" /> Edit Name</a></li>\n                    {{#unless @embeddedInMonitor}}\n                      <li><a {{on \"click\" this.showNoteModalAction}} role=\"button\"><Ui::Icon @icon=\"far fa-sticky-note\" /> {{if this.model.note.contents \"Edit\" \"Add\"}} Note</a></li>\n                      {{#unless (or this.model.isNew @isMonitor)}}\n                        {{#unless this.model.readonly}}\n                          <li><a {{on \"click\" this.showActivityModal}} role=\"button\"><Ui::Icon @icon=\"fa fa-history\" /> View Audit Trail</a></li>\n                        {{/unless}}\n                        {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                          <li><a {{on \"click\" this.copyScript}} role=\"button\"><Ui::Icon @icon=\"fa fa-copy\" /> Copy</a></li>\n                        {{/if}}\n                      {{/unless}}\n                      <li><a {{on \"click\" this.deleteScenario}} role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /> Delete</a></li>\n                      {{#unless @isMonitor}}\n                        {{#if (not-eq this.model.metadata.bindings 'remote')}}\n                            <li><LinkTo @route='create-test-for-scenario' @model={{this.model.id}}>\n                              <Ui::Icon @icon=\"fa fa-file\" /> New Test Configuration</LinkTo></li>\n                        {{/if}}\n                        {{#if this.model.configurations}}\n                          <li class=\"divider\"></li>\n                          <li class=\"dropdown-header\">Configurations for Test</li>\n                          {{#each this.model.configurations as |configuration|}}\n                            <li><LinkTo @route='loadTest' @model={{configuration.id}}>{{configuration.name}}</LinkTo></li>\n                          {{/each}}\n                        {{/if}}\n                        {{#if this.model.execution.configuration}}\n                          <li class=\"divider\"></li>\n                          <li class=\"dropdown-header\">Configurations for Test</li>\n                          <li><LinkTo @route='loadTest' @model={{this.model.execution.confId}}>{{this.model.execution.confName}}</LinkTo></li>\n                        {{/if}}\n                      {{/unless}}\n                    {{/unless}}\n                  </ul>\n                </div>\n              {{/unless}}\n            </div>\n  \n          </div>\n        </div>\n        {{!-- end panel --}}\n      {{/if}}\n    </div>\n  \n    {{#if this.runInProgress}}\n      <div class=\"sticky-top running-smoke mb-2\">\n        <div>\n          Smoke test is running\n          <Ui::Icon class=\"ps-1\" @icon=\"fa fa-spinner fa-spin m-r-10\" />\n        </div>\n        <button type=\"button\" {{on \"click\" this.cancelRunTest}} class=\"btn btn-warning\">Stop</button>\n      </div>\n    {{/if}}\n  \n    {{#if this.isOutOfDate}}\n      <div class=\"note note-warning outOfDateSticky\">\n        <h4>Scenario out of date</h4>\n        <p>\n          A newer version of this scenario has been saved since you last refreshed the page.\n        </p>\n        <button type=\"button\" {{on \"click\" this.forceSave}} class=\"btn btn-primary m-r-5 m-b-5\">Override with my version</button>\n        <button type=\"button\" {{on \"click\" this.refreshToLatest}} class=\"btn btn-primary m-r-5 m-b-5\">Update to latest</button>\n      </div>\n    {{/if}}\n    {{#if (and (not-eq this.model.metadata.bindings 'remote') (or @embeddedInExecution this.model.readonly))}}\n      <div class=\"note note-info\">\n        {{#if @embeddedInExecution}}\n          <p>\n            This exact scenario was executed during this test run as specified in the test configuration.\n          </p>\n        {{else if (and this.model.readonly (not @isMonitor) (not @embeddedInMonitor))}}\n          <p>\n            This scenario was used to execute <strong><LinkTo @route='loadTest'\n                                                              @model={{this.model.execution.confId}}>{{this.model.execution.confName}}</LinkTo></strong> @\n            <LinkTo\n                    @route='loadTestResults' @model={{this.model.execution.id}}>{{print-datetime this.model.execution.createdAt}}</LinkTo> and is read-only.\n          </p>\n        {{/if}}\n        {{#unless @uuid}}\n          <LinkTo\n            @route='scenario'\n            @model={{this.model.execution.configuration.script.id}}\n            target=\"_blank\"\n            class=\"btn btn-primary m-r-5 m-b-5 m-t-5\">Edit Latest Version</LinkTo>\n        {{/unless}}\n      </div>\n    {{/if}}\n  \n    <div class=\"s-wrapper {{if this.isReadonly \"readonly\"}}\">\n      {{#component (concat 'scenario/' (to-lowercase this.model.scriptType))\n                  script=this.model\n                  uniqueId=@uniqueId\n                  editorSavedStatus=this.editorSavedStatus\n                  paramsConfig=this.model.paramsConfig\n                  queue=this.queue\n                  filesPanelExpanded=this.filesPanelExpanded\n                  isRemote=(eq this.model.metadata.bindings 'remote')\n                  isSaving=(eq this.editorSavedStatus \"Saving\")\n                  readonly=this.isReadonly\n                  paramsConfigChanged=this.paramsConfigChanged\n                  saveCode=this.saveCodeAction\n                  saveMetadata=this.saveMetadataAction\n                  hasUnsavedChanges=this.hasUnsavedChanges\n                  dataStoreUpdate=this.dataStoreUpdateAction\n                  scriptValidChanged=this.scriptValidChanged\n                  createDataStore=this.createDataStore\n                  onStoreUpdate=this.onStoreUpdate\n                  convertToCode=this.convertToCode\n                  refreshScenario=this.refreshScenarioAction\n                  as |Yield|}}\n  \n        <Yield.Siblings>\n          <Scenario::SmokeTest\n            @model={{this.model}}\n            @regionId={{this.regionId}}\n            @params={{this.params}}\n            @platform={{this.platform}}\n            @cancelRun={{this.cancelRun}}\n            @defaultRegionId={{this.defaultRegionId}}\n            @runSmokeTest={{this.runSmokeTest}}\n            @runSmokeTestStatus={{fn (mut this.runSmokeTest)}}\n            @runInProgressStatus={{fn (mut this.runInProgress)}}\n          />\n        </Yield.Siblings>\n  \n        <Yield.SidebarRightPanel>\n          <TagsEditor @model={{this.model}} @type=\"script\" />\n        </Yield.SidebarRightPanel>\n      {{/component}}\n  \n    </div>\n  \n  </div>\n  \n  <CaptureParamsModal @paramsConfig={{this.model.paramsConfig}}\n                      @script={{this.model}}\n                      @confs={{this.confs}}\n                      @testCaseId={{this.testCaseId}}\n                      @type=\"Params\"\n                      @run={{this.runWithParams}} />\n  \n  {{#if this.showRunInRegionModal}}\n    <RunInRegionModal @platform={{or this.model.metadata.platform \"\"}}\n                      @filteredRegions={{this.filteredRegions}}\n                      @defaultRegion={{this.defaultRegionId}}\n                      @runInRegion={{this.runInRegion}}\n                      @modalClosed={{this.runInRegionModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showNpmModulesModal}}\n    <NpmModulesModal @modalClosed={{this.npmModulesModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showTestSummaryModal}}\n    <TestSummaryModal @confId={{this.selectedConfId}}\n                      @gotoExec={{this.gotoExecAction}}\n                      @gotoConf={{this.gotoUpdateConfAction}}\n                      @modalClosed={{this.testSummaryModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showChangeScenarioTypeModal}}\n    <Scenario::ChangeTypeModal @scenarioType={{this.model.scriptType}}\n                             @updateScenarioType={{this.updateScenarioTypeAction}}\n                             @modalClosed={{this.changeScenarioTypeModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showActivityModalState}}\n    <ActivityModal @testCase={{this.model.testCase}}\n                   @script={{this.model}}\n                   @modalClosed={{this.activityModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showCopyScenario}}\n    <Scenario::CopyModal @testScript={{this.model}}\n                           @testCase={{this.model.testCase}}\n                           @modalClosed={{this.copyScenarioModalClosed}} />\n  {{/if}}\n  \n  {{#if this.showNoteModal}}\n    <NoteInfoModal @model={{this.model}}\n                  @type=\"script\"\n                  @showAddNoteText={{false}}\n                  @updateNote={{fn (mut this.model.note)}}\n                  @closeModal={{this.closeNoteModal}}/>\n  {{/if}}\n  \n  {{#if this.showTestPassRateModal}}\n  \n    <SuccessTableModal @model={{this.model}}\n                  @confs={{this.confs}}\n                  @modalClosed={{fn (mut this.showTestPassRateModal) false}}\n                  @isHorizontal={{true}}\n                  @byScenario={{true}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"test-scenario \\\",[52,[28,[37,2],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],\\\"remote-test\\\"]]]],[4,[38,3],[[30,0,[\\\"onInsert\\\"]]],null],[4,[38,4],[[30,0,[\\\"onModelIdChange\\\"]],[30,0,[\\\"model\\\",\\\"id\\\"]]],null],[4,[38,4],[[30,0,[\\\"onSmokeTestRegionChange\\\"]],[30,0,[\\\"smokeTestRegionObj\\\"]]],null],[4,[38,4],[[30,0,[\\\"onDataStoreUpdates\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreUpdates\\\"]]],null],[4,[38,4],[[30,0,[\\\"onRemovedDataStores\\\"]],[30,0,[\\\"realtimeService\\\",\\\"removedDataStoreIds\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"s-header\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"      \\\"],[10,\\\"h4\\\"],[14,0,\\\"embedded\\\"],[12],[1,[28,[35,6],[[28,[37,7],[[30,0,[\\\"model\\\",\\\"name\\\"]],70,false,null],null]],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel panel-transparent m-b-0\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex justify-content-between gap-1 flex-wrap\\\"],[12],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"w-100 w-sm-50 d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEditingName\\\"]],[[[1,\\\"              \\\"],[8,[39,8],[[24,0,\\\"edit form-control w-auto mw-215px\\\"],[4,[38,9],null,null],[4,[38,10],[\\\"keydown\\\",[30,0,[\\\"onNameKeydown\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"editedValue\\\"]]]],null],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"panel-heading-btn align-content-center\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-success\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Update\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"updateName\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[13],[1,\\\"\\\\n                  \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Cancel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"escPress\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"w-100\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h4\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"editName\\\"]]],null],[12],[1,\\\"\\\\n                    \\\"],[1,[28,[35,6],[[28,[37,7],[[30,0,[\\\"model\\\",\\\"name\\\"]],70,false,null,\\\"editable-click m-r-10\\\"],null]],null]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,2]],[[[41,[30,0,[\\\"model\\\",\\\"note\\\",\\\"contents\\\"]],[[[1,\\\"                    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"popover\\\"],[24,\\\"data-bs-trigger\\\",\\\"hover\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"title\\\",\\\"Note\\\"],[16,\\\"data-bs-content\\\",[30,0,[\\\"model\\\",\\\"note\\\",\\\"contents\\\"]]],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"showNoteModalAction\\\"]]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"far fa-sticky-note\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-xs\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isChangingScriptType\\\"]]],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-title\\\",\\\"Click the scenario type to change it\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"changeScriptType\\\"]]],null],[12],[1,[28,[35,16],[[30,0,[\\\"model\\\"]],[30,0,[\\\"model\\\",\\\"scriptType\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isChangingScriptType\\\"]],[[[1,\\\"                      \\\"],[8,[39,12],[[24,0,\\\"m-l-5 text-success\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"                    \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success btn-xs\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,4,\\\"button\\\"],[12],[1,[28,[35,16],[[30,0,[\\\"model\\\"]],[30,0,[\\\"model\\\",\\\"scriptType\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,17],null,[[\\\"@isDeleting\\\",\\\"@class\\\"],[[30,0,[\\\"isDeletingScenario\\\"]],\\\"fs-6\\\"]],null],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"action-btns\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"confs\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"btn-group\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success\\\"],[4,[38,10],[\\\"click\\\",[28,[37,18],[[28,[37,19],[[30,0,[\\\"showTestPassRateModal\\\"]]],null],true],null]],null],[12],[1,\\\"\\\\n                  Test Pass Rate\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showTestConfigurations\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"btn-group m-l-10\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary dropdown-toggle\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,\\\"data-bs-auto-close\\\",\\\"outside\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                  Run With\\\\n                  \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Toggle Dropdown\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"dropdown-menu dropdown-menu-end run-with\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,21],[[30,0,[\\\"isLoadingConfs\\\"]],[28,[37,2],[[30,0,[\\\"confs\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"                      \\\"],[10,\\\"h6\\\"],[12],[1,\\\"Loading related configurations...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[42,[28,[37,24],[[28,[37,24],[[30,0,[\\\"confs\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"config w-340px\\\"],[15,1,[29,[\\\"configuration_id_\\\",[30,3,[\\\"id\\\"]]]]],[12],[1,\\\"\\\\n                          \\\"],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[10,\\\"b\\\"],[12],[1,[28,[35,6],[[28,[37,7],[[30,3,[\\\"name\\\"]],70,true],null]],null]],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"small\\\"],[12],[1,[28,[35,6],[[28,[37,28],[[30,3]],null]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"small\\\"],[14,0,\\\"date\\\"],[12],[1,[28,[35,6],[[28,[37,7],[[28,[37,30],[\\\"Last run \\\",[28,[37,31],[[30,3,[\\\"lastRunAt\\\"]]],null]],null]],null]],null]],[13],[1,\\\"\\\\n                        \\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                            \\\"],[10,0],[14,0,\\\"config-btn-groups\\\"],[12],[1,\\\"\\\\n                              \\\"],[8,[39,12],[[24,0,\\\"cursor-pointer\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Start\\\"],[4,[38,10],[\\\"click\\\",[28,[37,18],[[30,0,[\\\"showTestSummaryModalAction\\\"]],[30,3,[\\\"id\\\"]]],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-play text-black\\\"]],null],[1,\\\"\\\\n                              \\\"],[8,[39,25],[[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Edit\\\"],[24,0,\\\"\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"update-test\\\",[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-edit text-black\\\"]],null],[1,\\\"\\\\n                              \\\"]],[]]]]],[1,\\\"\\\\n                              \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link p-0 text-black\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Remove\\\"],[16,\\\"disabled\\\",[30,3,[\\\"isDeleting\\\"]]],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[28,[37,18],[[30,0,[\\\"deleteTestConf\\\"]],[30,3]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"isDeleting\\\"]],[[[1,\\\"                                  \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                                  \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                              \\\"],[13],[1,\\\"\\\\n                            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[41,[30,0,[\\\"hasMoreConfs\\\"]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"text-muted m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingConfs\\\"]],[[[1,\\\"                            Loading more test configurations...\\\\n\\\"]],[]],[[[1,\\\"                            \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"loadMoreConfs\\\"]]],null],[12],[1,\\\"Load more test configurations (\\\"],[1,[30,0,[\\\"unloadedConfs\\\"]]],[1,\\\" remaining)...\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                      \\\"],[10,0],[14,0,\\\"btn-new\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,25],[[24,0,\\\"btn btn-primary d-flex justify-content-center\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"create-test-for-scenario\\\",[30,0,[\\\"model\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[10,\\\"b\\\"],[12],[1,\\\"New Configuration\\\"],[13],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[30,4],[28,[37,32],[[30,0,[\\\"isViewer\\\"]]],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"btn-group m-l-10\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary dropdown-toggle\\\"],[24,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"loadMonitors\\\"]]],null],[12],[1,\\\"\\\\n                  Monitor With\\\\n                  \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Toggle Dropdown\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"dropdown-menu dropdown-menu-end monitor-with\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLoadingMonitors\\\"]],[[[1,\\\"                      \\\"],[10,\\\"h6\\\"],[14,0,\\\"px-2\\\"],[12],[1,\\\"Loading related monitors...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,0],[14,0,\\\"px-2\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,24],[[28,[37,24],[[30,0,[\\\"monitors\\\"]]],null]],null],null,[[[1,\\\"                          \\\"],[8,[39,33],[[24,0,\\\"dropdown-item m-0\\\"]],[[\\\"@monitor\\\"],[[30,5]]],null],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[10,0],[14,0,\\\"btn-new\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,25],[[24,0,\\\"btn btn-primary d-flex justify-content-center\\\"]],[[\\\"@route\\\",\\\"@query\\\"],[\\\"monitors.new\\\",[30,0,[\\\"monitorData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[10,\\\"b\\\"],[12],[1,\\\"New Monitor\\\"],[13],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"btn-group m-l-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                  \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                    Actions\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"smokeTestRegion\\\"]],[[[1,\\\"                    \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-primary \\\",[30,0,[\\\"smokeTestClass\\\"]]]]],[16,\\\"disabled\\\",[28,[37,34],[[30,0,[\\\"runInProgress\\\"]],[28,[37,32],[[30,0,[\\\"scriptValid\\\"]]],null]],null]],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"run\\\"]]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\" \\\"],[1,[52,[30,0,[\\\"runInProgress\\\"]],\\\"Running...\\\",[28,[37,30],[\\\"Smoke Test (\\\",[30,0,[\\\"smokeTestRegion\\\"]],\\\")\\\"],null]]],[1,\\\"\\\\n                      \\\"],[8,[39,35],null,[[\\\"@icon\\\",\\\"@content\\\"],[[29,[[52,[30,0,[\\\"smokeTestClass\\\"]],\\\"fa-times-circle\\\"]]],\\\"Runs your scenario 1 time (1 minute max) with 1 user.\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\"                \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary dropdown-toggle\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Toggle Dropdown\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[41,[30,0,[\\\"runInProgress\\\"]],[[[1,\\\"                      \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"cancelRunTest\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-stop\\\"]],null],[1,\\\" Cancel Smoke Test\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[51,[30,0,[\\\"scriptValid\\\"]]],\\\"disabled\\\"]]]],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"run\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\" Smoke\\\\n                          Test\\\"],[13],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"showRunInRegionModalAction\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-play-circle\\\"]],null],[1,\\\" Smoke Test In Region\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[41,[51,[28,[37,34],[[30,4],[30,2]],null]],[[[41,[28,[37,2],[[30,0,[\\\"model\\\",\\\"scriptType\\\"]],\\\"Code\\\"],null],[[[1,\\\"                      \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"showNpmModulesModalAction\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-align-justify\\\"]],null],[1,\\\" Available NPM Modules\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"                  \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"editName\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit Name\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"showNoteModalAction\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"far fa-sticky-note\\\"]],null],[1,\\\" \\\"],[1,[52,[30,0,[\\\"model\\\",\\\"note\\\",\\\"contents\\\"]],\\\"Edit\\\",\\\"Add\\\"]],[1,\\\" Note\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,34],[[30,0,[\\\"model\\\",\\\"isNew\\\"]],[30,4]],null]],[[[41,[51,[30,0,[\\\"model\\\",\\\"readonly\\\"]]],[[[1,\\\"                        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"showActivityModal\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-history\\\"]],null],[1,\\\" View Audit Trail\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                        \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"copyScript\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-copy\\\"]],null],[1,\\\" Copy\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"                    \\\"],[10,\\\"li\\\"],[12],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"deleteScenario\\\"]]],null],[12],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete\\\"],[13],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[41,[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[[[1,\\\"                          \\\"],[10,\\\"li\\\"],[12],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"create-test-for-scenario\\\",[30,0,[\\\"model\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\" New Test Configuration\\\"]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"model\\\",\\\"configurations\\\"]],[[[1,\\\"                        \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Configurations for Test\\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,24],[[28,[37,24],[[30,0,[\\\"model\\\",\\\"configurations\\\"]]],null]],null],null,[[[1,\\\"                          \\\"],[10,\\\"li\\\"],[12],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,6,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,6,[\\\"name\\\"]]]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[6]],null]],[]],null],[41,[30,0,[\\\"model\\\",\\\"execution\\\",\\\"configuration\\\"]],[[[1,\\\"                        \\\"],[10,\\\"li\\\"],[14,0,\\\"divider\\\"],[12],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"li\\\"],[14,0,\\\"dropdown-header\\\"],[12],[1,\\\"Configurations for Test\\\"],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"li\\\"],[12],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,0,[\\\"model\\\",\\\"execution\\\",\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"model\\\",\\\"execution\\\",\\\"confName\\\"]]]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"runInProgress\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"sticky-top running-smoke mb-2\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n        Smoke test is running\\\\n        \\\"],[8,[39,12],[[24,0,\\\"ps-1\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin m-r-10\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-warning\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"cancelRunTest\\\"]]],null],[12],[1,\\\"Stop\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isOutOfDate\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"note note-warning outOfDateSticky\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Scenario out of date\\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"\\\\n        A newer version of this scenario has been saved since you last refreshed the page.\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary m-r-5 m-b-5\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"forceSave\\\"]]],null],[12],[1,\\\"Override with my version\\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary m-r-5 m-b-5\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"refreshToLatest\\\"]]],null],[12],[1,\\\"Update to latest\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,21],[[28,[37,15],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[28,[37,34],[[30,1],[30,0,[\\\"model\\\",\\\"readonly\\\"]]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"note note-info\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[10,2],[12],[1,\\\"\\\\n          This exact scenario was executed during this test run as specified in the test configuration.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,21],[[30,0,[\\\"model\\\",\\\"readonly\\\"]],[28,[37,32],[[30,4]],null],[28,[37,32],[[30,2]],null]],null],[[[1,\\\"        \\\"],[10,2],[12],[1,\\\"\\\\n          This scenario was used to execute \\\"],[10,\\\"strong\\\"],[12],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTest\\\",[30,0,[\\\"model\\\",\\\"execution\\\",\\\"confId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,0,[\\\"model\\\",\\\"execution\\\",\\\"confName\\\"]]]],[]]]]],[13],[1,\\\" @\\\\n          \\\"],[8,[39,25],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"loadTestResults\\\",[30,0,[\\\"model\\\",\\\"execution\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[28,[35,40],[[30,0,[\\\"model\\\",\\\"execution\\\",\\\"createdAt\\\"]]],null]]],[]]]]],[1,\\\" and is read-only.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],null]],[]]],[41,[51,[30,7]],[[[1,\\\"        \\\"],[8,[39,25],[[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"scenario\\\",[30,0,[\\\"model\\\",\\\"execution\\\",\\\"configuration\\\",\\\"script\\\",\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"Edit Latest Version\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"s-wrapper \\\",[52,[30,0,[\\\"isReadonly\\\"]],\\\"readonly\\\"]]]],[12],[1,\\\"\\\\n\\\"],[46,[28,[37,30],[\\\"scenario/\\\",[28,[37,42],[[30,0,[\\\"model\\\",\\\"scriptType\\\"]]],null]],null],null,[[\\\"script\\\",\\\"uniqueId\\\",\\\"editorSavedStatus\\\",\\\"paramsConfig\\\",\\\"queue\\\",\\\"filesPanelExpanded\\\",\\\"isRemote\\\",\\\"isSaving\\\",\\\"readonly\\\",\\\"paramsConfigChanged\\\",\\\"saveCode\\\",\\\"saveMetadata\\\",\\\"hasUnsavedChanges\\\",\\\"dataStoreUpdate\\\",\\\"scriptValidChanged\\\",\\\"createDataStore\\\",\\\"onStoreUpdate\\\",\\\"convertToCode\\\",\\\"refreshScenario\\\"],[[30,0,[\\\"model\\\"]],[30,8],[30,0,[\\\"editorSavedStatus\\\"]],[30,0,[\\\"model\\\",\\\"paramsConfig\\\"]],[30,0,[\\\"queue\\\"]],[30,0,[\\\"filesPanelExpanded\\\"]],[28,[37,2],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"bindings\\\"]],\\\"remote\\\"],null],[28,[37,2],[[30,0,[\\\"editorSavedStatus\\\"]],\\\"Saving\\\"],null],[30,0,[\\\"isReadonly\\\"]],[30,0,[\\\"paramsConfigChanged\\\"]],[30,0,[\\\"saveCodeAction\\\"]],[30,0,[\\\"saveMetadataAction\\\"]],[30,0,[\\\"hasUnsavedChanges\\\"]],[30,0,[\\\"dataStoreUpdateAction\\\"]],[30,0,[\\\"scriptValidChanged\\\"]],[30,0,[\\\"createDataStore\\\"]],[30,0,[\\\"onStoreUpdate\\\"]],[30,0,[\\\"convertToCode\\\"]],[30,0,[\\\"refreshScenarioAction\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[30,9,[\\\"Siblings\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,43],null,[[\\\"@model\\\",\\\"@regionId\\\",\\\"@params\\\",\\\"@platform\\\",\\\"@cancelRun\\\",\\\"@defaultRegionId\\\",\\\"@runSmokeTest\\\",\\\"@runSmokeTestStatus\\\",\\\"@runInProgressStatus\\\"],[[30,0,[\\\"model\\\"]],[30,0,[\\\"regionId\\\"]],[30,0,[\\\"params\\\"]],[30,0,[\\\"platform\\\"]],[30,0,[\\\"cancelRun\\\"]],[30,0,[\\\"defaultRegionId\\\"]],[30,0,[\\\"runSmokeTest\\\"]],[28,[37,18],[[28,[37,19],[[30,0,[\\\"runSmokeTest\\\"]]],null]],null],[28,[37,18],[[28,[37,19],[[30,0,[\\\"runInProgress\\\"]]],null]],null]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,9,[\\\"SidebarRightPanel\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[39,44],null,[[\\\"@model\\\",\\\"@type\\\"],[[30,0,[\\\"model\\\"]],\\\"script\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[9]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[8,[39,45],null,[[\\\"@paramsConfig\\\",\\\"@script\\\",\\\"@confs\\\",\\\"@testCaseId\\\",\\\"@type\\\",\\\"@run\\\"],[[30,0,[\\\"model\\\",\\\"paramsConfig\\\"]],[30,0,[\\\"model\\\"]],[30,0,[\\\"confs\\\"]],[30,0,[\\\"testCaseId\\\"]],\\\"Params\\\",[30,0,[\\\"runWithParams\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showRunInRegionModal\\\"]],[[[1,\\\"  \\\"],[8,[39,46],null,[[\\\"@platform\\\",\\\"@filteredRegions\\\",\\\"@defaultRegion\\\",\\\"@runInRegion\\\",\\\"@modalClosed\\\"],[[28,[37,34],[[30,0,[\\\"model\\\",\\\"metadata\\\",\\\"platform\\\"]],\\\"\\\"],null],[30,0,[\\\"filteredRegions\\\"]],[30,0,[\\\"defaultRegionId\\\"]],[30,0,[\\\"runInRegion\\\"]],[30,0,[\\\"runInRegionModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showNpmModulesModal\\\"]],[[[1,\\\"  \\\"],[8,[39,47],null,[[\\\"@modalClosed\\\"],[[30,0,[\\\"npmModulesModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestSummaryModal\\\"]],[[[1,\\\"  \\\"],[8,[39,48],null,[[\\\"@confId\\\",\\\"@gotoExec\\\",\\\"@gotoConf\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"selectedConfId\\\"]],[30,0,[\\\"gotoExecAction\\\"]],[30,0,[\\\"gotoUpdateConfAction\\\"]],[30,0,[\\\"testSummaryModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showChangeScenarioTypeModal\\\"]],[[[1,\\\"  \\\"],[8,[39,49],null,[[\\\"@scenarioType\\\",\\\"@updateScenarioType\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"model\\\",\\\"scriptType\\\"]],[30,0,[\\\"updateScenarioTypeAction\\\"]],[30,0,[\\\"changeScenarioTypeModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showActivityModalState\\\"]],[[[1,\\\"  \\\"],[8,[39,50],null,[[\\\"@testCase\\\",\\\"@script\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"model\\\",\\\"testCase\\\"]],[30,0,[\\\"model\\\"]],[30,0,[\\\"activityModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCopyScenario\\\"]],[[[1,\\\"  \\\"],[8,[39,51],null,[[\\\"@testScript\\\",\\\"@testCase\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"model\\\"]],[30,0,[\\\"model\\\",\\\"testCase\\\"]],[30,0,[\\\"copyScenarioModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showNoteModal\\\"]],[[[1,\\\"  \\\"],[8,[39,52],null,[[\\\"@model\\\",\\\"@type\\\",\\\"@showAddNoteText\\\",\\\"@updateNote\\\",\\\"@closeModal\\\"],[[30,0,[\\\"model\\\"]],\\\"script\\\",false,[28,[37,18],[[28,[37,19],[[30,0,[\\\"model\\\",\\\"note\\\"]]],null]],null],[30,0,[\\\"closeNoteModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTestPassRateModal\\\"]],[[[1,\\\"\\\\n  \\\"],[8,[39,53],null,[[\\\"@model\\\",\\\"@confs\\\",\\\"@modalClosed\\\",\\\"@isHorizontal\\\",\\\"@byScenario\\\"],[[30,0,[\\\"model\\\"]],[30,0,[\\\"confs\\\"]],[28,[37,18],[[28,[37,19],[[30,0,[\\\"showTestPassRateModal\\\"]]],null],false],null],true,true]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@embeddedInExecution\\\",\\\"@embeddedInMonitor\\\",\\\"config\\\",\\\"@isMonitor\\\",\\\"monitor\\\",\\\"configuration\\\",\\\"@uuid\\\",\\\"@uniqueId\\\",\\\"Yield\\\"],[\\\"div\\\",\\\"if\\\",\\\"eq\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"h4\\\",\\\"html-safe\\\",\\\"truncate-string\\\",\\\"input\\\",\\\"autofocusAndSelect\\\",\\\"on\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"unless\\\",\\\"button\\\",\\\"not-eq\\\",\\\"print-script\\\",\\\"ui/delete-loading-indicator\\\",\\\"fn\\\",\\\"mut\\\",\\\"span\\\",\\\"and\\\",\\\"h6\\\",\\\"each\\\",\\\"-track-array\\\",\\\"link-to\\\",\\\"b\\\",\\\"small\\\",\\\"print-test-short-summary\\\",\\\"br\\\",\\\"concat\\\",\\\"live-relative-duration\\\",\\\"not\\\",\\\"monitor-item\\\",\\\"or\\\",\\\"ui/info-icon\\\",\\\"ul\\\",\\\"li\\\",\\\"p\\\",\\\"strong\\\",\\\"print-datetime\\\",\\\"component\\\",\\\"to-lowercase\\\",\\\"scenario/smoke-test\\\",\\\"tags-editor\\\",\\\"capture-params-modal\\\",\\\"run-in-region-modal\\\",\\\"npm-modules-modal\\\",\\\"test-summary-modal\\\",\\\"scenario/change-type-modal\\\",\\\"activity-modal\\\",\\\"scenario/copy-modal\\\",\\\"note-info-modal\\\",\\\"success-table-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-scenario.hbs\",\n    \"isStrictMode\": false\n  });\n  const ConfPageSize = 30;\n  let TestScenarioComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class TestScenarioComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor3, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor4, this);\n      _defineProperty(this, \"queue\", new _autoQueue.default());\n      _initializerDefineProperty(this, \"isEditingName\", _descriptor5, this);\n      _initializerDefineProperty(this, \"editedValue\", _descriptor6, this);\n      _initializerDefineProperty(this, \"pendingSaves\", _descriptor7, this);\n      _initializerDefineProperty(this, \"scriptValid\", _descriptor8, this);\n      _initializerDefineProperty(this, \"inProgressSave\", _descriptor9, this);\n      _initializerDefineProperty(this, \"editorSavedStatus\", _descriptor0, this);\n      _initializerDefineProperty(this, \"isDeletingScenario\", _descriptor1, this);\n      _initializerDefineProperty(this, \"isOutOfDate\", _descriptor10, this);\n      _initializerDefineProperty(this, \"runSmokeTest\", _descriptor11, this);\n      _initializerDefineProperty(this, \"runInProgress\", _descriptor12, this);\n      _initializerDefineProperty(this, \"cancelRun\", _descriptor13, this);\n      _initializerDefineProperty(this, \"params\", _descriptor14, this);\n      _initializerDefineProperty(this, \"regionId\", _descriptor15, this);\n      _initializerDefineProperty(this, \"platform\", _descriptor16, this);\n      _initializerDefineProperty(this, \"smokeTestRegion\", _descriptor17, this);\n      _initializerDefineProperty(this, \"smokeTestRegionObj\", _descriptor18, this);\n      _initializerDefineProperty(this, \"smokeTestClass\", _descriptor19, this);\n      _initializerDefineProperty(this, \"showRunInRegionModal\", _descriptor20, this);\n      _initializerDefineProperty(this, \"showNpmModulesModal\", _descriptor21, this);\n      _initializerDefineProperty(this, \"showCopyScenario\", _descriptor22, this);\n      _initializerDefineProperty(this, \"showTestSummaryModal\", _descriptor23, this);\n      _initializerDefineProperty(this, \"selectedConfId\", _descriptor24, this);\n      _initializerDefineProperty(this, \"showChangeScenarioTypeModal\", _descriptor25, this);\n      _initializerDefineProperty(this, \"isChangingScriptType\", _descriptor26, this);\n      _initializerDefineProperty(this, \"showActivityModalState\", _descriptor27, this);\n      _initializerDefineProperty(this, \"showNoteModal\", _descriptor28, this);\n      _initializerDefineProperty(this, \"showTestPassRateModal\", _descriptor29, this);\n      _initializerDefineProperty(this, \"lastSelectedRegionId\", _descriptor30, this);\n      _initializerDefineProperty(this, \"lastPlatform\", _descriptor31, this);\n      _initializerDefineProperty(this, \"filesPanelExpanded\", _descriptor32, this);\n      _initializerDefineProperty(this, \"confs\", _descriptor33, this);\n      _initializerDefineProperty(this, \"confCount\", _descriptor34, this);\n      _initializerDefineProperty(this, \"confParams\", _descriptor35, this);\n      _initializerDefineProperty(this, \"isLoadingConfs\", _descriptor36, this);\n      _initializerDefineProperty(this, \"monitors\", _descriptor37, this);\n      _initializerDefineProperty(this, \"isLoadingMonitors\", _descriptor38, this);\n      _initializerDefineProperty(this, \"loadedMonitors\", _descriptor39, this);\n      _initializerDefineProperty(this, \"videoSelected\", _descriptor40, this);\n      _initializerDefineProperty(this, \"mediaId\", _descriptor41, this);\n      _initializerDefineProperty(this, \"showShareMediaModal\", _descriptor42, this);\n      _initializerDefineProperty(this, \"model\", _descriptor43, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"saveMetadataSync\", (0, _asyncArrowRuntime.buildTask)(() => ({\n        context: this,\n        generator: function* (metadata, override, ignoreDataStores) {\n          try {\n            const result = yield _server.default.updateScriptMetadata(this.model.id, metadata, override ? null : this.model.updatedAt);\n            if (!ignoreDataStores) {\n              if (result.dataStores) {\n                result.dataStores = _.sortBy(result.dataStores, ['name']);\n                _.forEach(result.dataStores, ds => {\n                  _lib.default.addAuthToDataStore(ds);\n                });\n              }\n              if (!_.isEqual(result.dataStores, this.model.dataStores)) {\n                this.model.dataStores = result.dataStores;\n              }\n            }\n            this.saveMetadataSync.lastMetadata = result.metadata;\n            this.model.updatedAt = result.updatedAt;\n          } catch (error) {\n            this.handleSaveError(error, error.status, error.statusText);\n            this.pendingSaves = {\n              ...this.pendingSaves,\n              metadata\n            };\n          }\n        }\n      }), {\n        keepLatest: true\n      }, \"saveMetadataSync\", null));\n      this.model = this.args.model;\n    }\n    get isViewer() {\n      return this.currentUser?.isViewer;\n    }\n    get isReadonly() {\n      return this.model?.readonly || this.model?.metadata?.bindings === 'remote' || this.isViewer;\n    }\n    get monitorData() {\n      if (!this.args.isMonitor) return;\n      const {\n        id,\n        name,\n        testCase\n      } = this.model;\n      const folder = testCase?.path?.substring(0, testCase.path.lastIndexOf(\"/\")) || '/';\n      return {\n        folder,\n        group: testCase?.name || '',\n        monitorType: 'Custom',\n        customScenarioId: id,\n        customScenarioName: name\n      };\n    }\n    get showTestConfigurations() {\n      return !this.model?.readonly && !this.model?.isNew && !this.isViewer && !this.args.isMonitor && !this.args.embeddedInMonitor;\n    }\n    get testCaseId() {\n      return this.model?.readonly ? this.model?.execution?.testCaseId : this.model?.testCase?.id;\n    }\n    get filteredRegions() {\n      const isWindows = this.platform === 'win32';\n      return _.filter(_environment.config.regions, region => {\n        return !isWindows || !region.public || region.windowsAgents > 0;\n      });\n    }\n    get defaultRegionId() {\n      const regions = this.filteredRegions;\n      const localStorageRegion = window.localStorage.getItem('smokeTestRegionId');\n      const defaultRegion = this.currentUser?.org?.settings?.region;\n      if (localStorageRegion && regions.find(region => region.id === Number(localStorageRegion))) {\n        return Number(localStorageRegion);\n      } else if (defaultRegion && regions.find(region => region.id === Number(defaultRegion))) {\n        return Number(defaultRegion);\n      }\n      return Number(regions[0]?.id);\n    }\n    get hasMoreConfs() {\n      return this.unloadedConfs > 0;\n    }\n    get unloadedConfs() {\n      return this.confCount - (this.confs?.length || 0);\n    }\n    setStatus(status) {\n      (0, _runloop.next)(() => {\n        if (!this.isDestroyed) {\n          this.editorSavedStatus = status;\n        }\n      });\n    }\n    runScript(params, regionId, platform) {\n      this.params = params;\n      this.regionId = regionId;\n      this.platform = platform;\n      this.runSmokeTest = true;\n      const tabLink = document.querySelector('.test-scenario #runConsoleTab a');\n      if (tabLink) {\n        tabLink.click();\n      }\n    }\n    handleSaveError(jqxhr, status, errMsg) {\n      this.setStatus('Error Saving');\n      let msg = _lib.default.messageFromFail(jqxhr, status, errMsg);\n      if (msg === 'Newer version of scenario exists') {\n        this.isOutOfDate = true;\n      } else {\n        _lib.default.fail(jqxhr, status, errMsg);\n      }\n    }\n    saveCode(type, code, override = false) {\n      if (this.model?.readonly || this.realtimeService.isProcessingRemoteUpdate) {\n        return;\n      }\n      this.setStatus('Saving');\n      this.queue.enqueue(async () => {\n        await this.doSaveCode(type, code, override);\n      });\n    }\n    async doSaveCode(type, code, override) {\n      try {\n        const result = await _server.default.updateScriptCode(this.model.id, type, code, override ? null : this.model.updatedAt);\n        this.model.updatedAt = result.updatedAt;\n        this.setStatus('Saved');\n      } catch (error) {\n        this.handleSaveError(error, error.status, error.statusText);\n        this.pendingSaves = {\n          ...this.pendingSaves,\n          code: {\n            type,\n            code\n          }\n        };\n      }\n    }\n    saveMetadata(metadata, override, ignoreDataStores) {\n      if (this.model?.readonly || this.isViewer || this.realtimeService.isProcessingRemoteUpdate) {\n        return;\n      }\n      this.setStatus('Saving');\n      const taskInstance = this.saveMetadataSync.perform(metadata, override, ignoreDataStores);\n      taskInstance.then(() => {\n        if (!this.saveMetadataSync.isRunning && this.saveMetadataSync.lastSuccessful) {\n          this.model.metadata = this.saveMetadataSync.lastMetadata;\n          this.setStatus('Saved');\n        }\n      }).catch(e => {\n        if (e && e.name !== 'TaskCancelation') {\n          console.log('Unexpected error:', e);\n        }\n      });\n    }\n    saveParamsConfig(paramsConfig, override) {\n      if (this.model?.readonly || this.realtimeService.isProcessingRemoteUpdate) {\n        return;\n      }\n      this.setStatus('Saving');\n      this.queue.enqueue(async () => {\n        await this.doSaveParamsConfig(paramsConfig, override);\n      });\n    }\n    async doSaveParamsConfig(paramsConfig, override) {\n      try {\n        const result = await _server.default.updateScriptParamsConfig(this.model.id, paramsConfig, override ? null : this.model.updatedAt);\n        this.model.updatedAt = result.updatedAt;\n        this.model.paramsConfig = result.paramsConfig;\n        this.setStatus('Saved');\n      } catch (error) {\n        this.handleSaveError(error, error.status, error.statusText);\n        this.pendingSaves = {\n          ...this.pendingSaves,\n          paramsConfig\n        };\n      }\n    }\n    savePending() {\n      let pendingSaves = this.pendingSaves;\n      if (pendingSaves.code) {\n        let code = pendingSaves.code;\n        this.saveCode(code.type, code.code, true);\n      }\n      if (pendingSaves.metadata) {\n        this.saveMetadata(pendingSaves.metadata, true);\n      }\n      if (pendingSaves.paramsConfig) {\n        this.saveParamsConfig(pendingSaves.paramsConfig, true);\n      }\n      this.pendingSaves = {};\n    }\n    saveUpdate(f) {\n      const ipSave = this.inProgressSave;\n      if (ipSave) {\n        this.inProgressSave = ipSave.then(() => {\n          return f();\n        }, () => {\n          return f();\n        });\n      } else {\n        this.inProgressSave = f();\n      }\n    }\n    updateScenarioTypeAction(scenarioType) {\n      const scriptType = _scenario.default.scenarioTypes[scenarioType];\n      if (scriptType) {\n        this.updateScriptType(scriptType);\n      }\n    }\n    async updateScriptType(scriptType) {\n      this.isChangingScriptType = true;\n      try {\n        const data = await _server.default.updateScriptType(this.model.id, scriptType);\n        if (!this.isDestroyed) {\n          this.model = data;\n        }\n      } catch {} finally {\n        if (!this.isDestroyed) {\n          this.isChangingScriptType = false;\n        }\n      }\n    }\n    setSmokeTestRegion() {\n      if (this.isDestroyed) {\n        return;\n      }\n      if (!_environment.config.regions.length) {\n        (0, _runloop.later)(this, () => {\n          return this.setSmokeTestRegion();\n        }, 250);\n      } else {\n        const regionId = parseInt(window.localStorage.getItem('smokeTestRegionId')) || this.defaultRegionId;\n        const smokeTestRegion = _environment.config.regions.filter(r => r.id === regionId)[0];\n        if (smokeTestRegion) {\n          this.smokeTestRegion = smokeTestRegion.description || smokeTestRegion.name;\n          this.smokeTestRegionObj = smokeTestRegion;\n          this.smokeTestClass = smokeTestRegion.textClass === 'red' ? 'color-light-pink' : '';\n        }\n      }\n    }\n    doRun(regionId, platform) {\n      if (!regionId) {\n        regionId = window.localStorage.getItem('smokeTestRegionId');\n      } else {\n        window.localStorage.setItem('smokeTestRegionId', regionId);\n      }\n      this.setSmokeTestRegion();\n      platform = _.isString(platform) ? platform : this.model?.metadata?.platform;\n      let paramsConfig = this.model?.paramsConfig;\n      if (paramsConfig.length > 0) {\n        this.lastSelectedRegionId = regionId;\n        this.lastPlatform = platform;\n        $('#captureParamsModal').modal('show');\n      } else {\n        this.runScript({}, regionId, platform);\n      }\n    }\n    loadConfs(append) {\n      const params = this.confParams;\n      params.offset = this.confs?.length || 0;\n      this.isLoadingConfs = true;\n      _server.default.getScriptConfs(this.model.id, params).then(response => {\n        this.confCount = response.count;\n        const results = response.results.map(conf => new _trackedBuiltIns.TrackedObject(conf));\n        this.confs = append ? _.concat(this.confs || [], results) : results;\n        this.isLoadingConfs = false;\n      }, () => {\n        this.confCount = 0;\n        if (!append) {\n          this.confs = [];\n        }\n        this.isLoadingConfs = false;\n      });\n    }\n    dataStoreUpdate(oldDs, newDs) {\n      let dataStores = _.clone(this.model.dataStores);\n      if (oldDs) {\n        dataStores = _.filter(dataStores, ds => {\n          return ds.id !== oldDs.id;\n        });\n      }\n      if (newDs) {\n        dataStores.push(newDs);\n      }\n      this.model.dataStores = _.sortBy(dataStores, ['name']);\n      this.model.updatedAt = newDs.script.updatedAt;\n    }\n\n    // did-insert: replaces init + didInsertElement\n    onInsert() {\n      this.scriptValid = true;\n      const params = {\n        offset: 0,\n        limit: ConfPageSize,\n        sort: 'lexical'\n      };\n      this.confs = [];\n      this.confParams = params;\n      _server.default.refreshProviderInfo();\n      if (this.showTestConfigurations) this.loadConfs();\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        this.applicationState.setProp('selectedId', this.model?.testCase?.id || this.model?.execution?.configuration?.testCase?.id);\n      });\n      this.setSmokeTestRegion();\n    }\n\n    // did-update: replaces on('init', observer('model.id', ...))\n    onModelIdChange() {\n      const params = {\n        offset: 0,\n        limit: ConfPageSize,\n        sort: 'lexical'\n      };\n      this.confs = [];\n      this.confParams = params;\n      _server.default.refreshProviderInfo();\n      if (this.showTestConfigurations) this.loadConfs();\n    }\n\n    // did-update: replaces setSmokeTestButtonClass observer\n    onSmokeTestRegionChange() {\n      const textClass = this.smokeTestRegionObj?.textClass;\n      this.smokeTestClass = textClass === 'red' ? 'color-light-pink' : '';\n    }\n    onDataStoreUpdates() {\n      if (this.isDestroyed || this.isDestroying) return;\n      const updates = this.realtimeService.dataStoreUpdates;\n      if (!updates || _.isEmpty(updates)) return;\n      let dataStores = _.clone(this.model.dataStores || []);\n      Object.values(updates).forEach(updatedDs => {\n        const index = dataStores.findIndex(ds => ds.id === updatedDs.id);\n        if (index >= 0) {\n          dataStores[index] = {\n            ...dataStores[index],\n            ...updatedDs\n          };\n          _lib.default.addAuthToDataStore(dataStores[index]);\n        } else {\n          _lib.default.addAuthToDataStore(updatedDs);\n          dataStores.push(updatedDs);\n        }\n      });\n      this.model.dataStores = _.sortBy(dataStores, ['name']);\n    }\n    onRemovedDataStores() {\n      if (this.isDestroyed || this.isDestroying) return;\n      const removedIds = this.realtimeService.removedDataStoreIds;\n      if (!removedIds || !removedIds.length) return;\n      const dataStores = this.model.dataStores || [];\n      const filtered = dataStores.filter(ds => !removedIds.includes(ds.id));\n      if (filtered.length !== dataStores.length) {\n        this.model.dataStores = filtered;\n      }\n    }\n    saveCodeAction(type, code, override) {\n      this.model[type] = code;\n      this.saveUpdate(() => {\n        return this.saveCode(type, code, override);\n      });\n    }\n    saveMetadataAction(metadata, override, ignoreDataStores) {\n      this.saveMetadata(metadata, override, ignoreDataStores);\n    }\n    hasUnsavedChanges() {\n      this.setStatus('Pending Save');\n    }\n    paramsConfigChanged(paramsConfig, override) {\n      this.saveUpdate(() => {\n        return this.saveParamsConfig(paramsConfig, override);\n      });\n    }\n    forceSave() {\n      this.isOutOfDate = false;\n      this.savePending();\n    }\n    run() {\n      this.cancelRun = false;\n      if (this.model?.metadata?.platform === 'win32') {\n        this.showRunInRegionModal = true;\n      } else {\n        this.doRun();\n      }\n    }\n    runInRegion(regionId, platform) {\n      this.doRun(regionId, platform);\n    }\n    runWithParams(params) {\n      this.runScript(params, this.lastSelectedRegionId, this.lastPlatform);\n    }\n    cancelRunTest() {\n      this.cancelRun = true;\n    }\n    gotoExecAction(exec) {\n      this.args.gotoExec(exec);\n      this.showTestSummaryModal = false;\n    }\n    gotoUpdateConfAction(conf) {\n      this.args.gotoUpdateConf(conf);\n      this.showTestSummaryModal = false;\n    }\n    showRunInRegionModalAction() {\n      this.showRunInRegionModal = true;\n    }\n    runInRegionModalClosed() {\n      this.showRunInRegionModal = false;\n    }\n    showNpmModulesModalAction() {\n      this.showNpmModulesModal = true;\n    }\n    npmModulesModalClosed() {\n      this.showNpmModulesModal = false;\n    }\n    editName() {\n      if (this.isViewer) return;\n      this.editedValue = this.model.name;\n      this.isEditingName = true;\n    }\n    updateName() {\n      const editedValue = this.editedValue.trim();\n      if (!editedValue) {\n        _lib.default.error(\"Name can't be empty\");\n        return;\n      }\n      if (this.isEditingName) {\n        _server.default.updateScriptName(this.model.id, editedValue).then(data => {\n          this.model.name = data.name;\n          this.model.updatedAt = data.updatedAt;\n          this.isEditingName = false;\n        });\n      }\n    }\n    onNameKeydown(e) {\n      if (e.key === 'Enter') {\n        this.updateName();\n      } else if (e.key === 'Escape') {\n        this.escPress();\n      }\n    }\n    escPress() {\n      this.isEditingName = false;\n    }\n    deleteScenario() {\n      const childElements = this.args.isMonitor ? 'monitors' : 'test configurations';\n      let text = `Are you sure you want to delete <strong> ${this.model.name} </strong>?\n      <br> Deleting this scenario will also delete all related ${childElements}.`;\n      _lib.default.confirm(text, 'OK', () => {\n        this.isDeletingScenario = true;\n        _server.default.deleteScenario(this.model.id).then(() => {\n          _lib.default.info('Scenario <strong>' + this.model.name + '</strong> deleted successfully');\n          this.args.scriptDeleted(this.model.id);\n          this.isDeletingScenario = false;\n        }).catch(() => {\n          this.isDeletingScenario = false;\n        });\n      }, 'Cancel', () => {}, 'Delete Scenario');\n    }\n    copyScript() {\n      this.showCopyScenario = true;\n    }\n    copyScenarioModalClosed(data) {\n      if (data) {\n        this.args.scenarioCreated(data.id);\n      }\n      this.showCopyScenario = false;\n    }\n    refreshToLatest() {\n      _lib.default.confirm('Refreshing will cause any unsaved changed to be lost. Are you sure you want to continue?', 'Refresh', () => {\n        this.args.refreshScenario();\n        this.isOutOfDate = false;\n        this.setStatus('Saved');\n      }, 'Cancel', () => {}, 'Refresh Scenario');\n    }\n    dataStoreUpdateAction(oldDs, newDs) {\n      this.dataStoreUpdate(oldDs, newDs);\n    }\n    onStoreUpdate(dataStores, updatedAt) {\n      if (dataStores) {\n        this.model.updatedAt = updatedAt;\n        if (dataStores !== true) {\n          this.model.dataStores = [...dataStores.filter(ds => _.isNumber(ds.id))];\n        }\n      } else {\n        this.args.refreshScenario();\n      }\n    }\n    refreshScenarioAction() {\n      if (this.args.refreshScenario) {\n        this.args.refreshScenario(this.model.id);\n      }\n    }\n    async createDataStore(fileName, defaultContents, path = null) {\n      return this.queue.enqueue(async () => {\n        const result = await this.api.dataStores.create(this.model.id, fileName, defaultContents, false, path);\n        this.dataStoreUpdate(null, result);\n        return result;\n      }).then(result => {\n        return result;\n      });\n    }\n    scriptValidChanged(newVal) {\n      this.scriptValid = newVal;\n    }\n    convertToCode() {\n      _server.default.convertScriptToCode(this.model.id).then(() => {\n        this.args.refreshScenario();\n      });\n    }\n    showTestSummaryModalAction(confId) {\n      this.selectedConfId = confId;\n      this.showTestSummaryModal = true;\n    }\n    testSummaryModalClosed() {\n      if (!this.isDestroyed) {\n        this.showTestSummaryModal = false;\n        this.selectedConfId = null;\n      }\n    }\n    changeScriptType() {\n      if (this.model?.metadata?.bindings !== 'remote' && !this.isViewer) {\n        this.showChangeScenarioTypeModal = true;\n      }\n    }\n    changeScenarioTypeModalClosed() {\n      if (!this.isDestroyed) {\n        this.showChangeScenarioTypeModal = false;\n      }\n    }\n    loadMoreConfs() {\n      this.loadConfs(true);\n    }\n    showActivityModal() {\n      this.showActivityModalState = true;\n    }\n    activityModalClosed() {\n      this.showActivityModalState = false;\n    }\n    showNoteModalAction() {\n      if (!this.isViewer) this.showNoteModal = true;\n    }\n    closeNoteModal() {\n      this.showNoteModal = false;\n    }\n    async deleteTestConf(conf) {\n      _lib.default.confirm('Are you sure you want to delete <strong>' + conf.name + '</strong>?', 'OK', async () => {\n        conf.isDeleting = true;\n        try {\n          await _server.default.deleteTestConfiguration(conf.id);\n          _lib.default.info('<strong>' + conf.name + '</strong> deleted successfully');\n          this.confs = _.filter(this.confs, c => c.id !== conf.id);\n          this.confCount = Math.max(0, this.confCount - 1);\n        } catch (error) {\n          _lib.default.error(error.statusText, 'Failed to delete configuration');\n        } finally {\n          conf.isDeleting = false;\n        }\n      }, 'Cancel', () => {}, 'Delete Test Configuration');\n    }\n    async loadMonitors() {\n      if (this.loadedMonitors || this.isLoadingMonitors) return;\n      this.isLoadingMonitors = true;\n      try {\n        const resp = await this.api.monitors.getScenarioMonitors(this.model.id);\n        if (this.isDestroyed || this.isDestroying) return;\n        this.monitors = resp;\n        this.isLoadingMonitors = false;\n        this.loadedMonitors = true;\n      } catch (error) {\n        this.handleSaveError(error, error.status, error.statusText);\n        this.isLoadingMonitors = false;\n        this.loadedMonitors = true;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isEditingName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"editedValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"pendingSaves\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"scriptValid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"inProgressSave\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"editorSavedStatus\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'Saved';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"isDeletingScenario\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"isOutOfDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"runSmokeTest\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"runInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"cancelRun\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"params\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"regionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"platform\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"smokeTestRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"smokeTestRegionObj\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"smokeTestClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"showRunInRegionModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"showNpmModulesModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"showCopyScenario\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"showTestSummaryModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"selectedConfId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"showChangeScenarioTypeModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"isChangingScriptType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"showActivityModalState\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"showNoteModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"showTestPassRateModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"lastSelectedRegionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"lastPlatform\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"filesPanelExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"confs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"confCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"confParams\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingConfs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"monitors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingMonitors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"loadedMonitors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"videoSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"mediaId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"model\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateScenarioTypeAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateScenarioTypeAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onModelIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onModelIdChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSmokeTestRegionChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSmokeTestRegionChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDataStoreUpdates\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDataStoreUpdates\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onRemovedDataStores\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRemovedDataStores\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveCodeAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveCodeAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveMetadataAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveMetadataAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasUnsavedChanges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hasUnsavedChanges\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"paramsConfigChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"paramsConfigChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"forceSave\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"forceSave\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"run\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"run\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runInRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runInRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runWithParams\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runWithParams\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelRunTest\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelRunTest\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoExecAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoExecAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoUpdateConfAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoUpdateConfAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showRunInRegionModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showRunInRegionModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runInRegionModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"runInRegionModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showNpmModulesModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showNpmModulesModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"npmModulesModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"npmModulesModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"editName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateName\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onNameKeydown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onNameKeydown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"escPress\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"escPress\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteScenario\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteScenario\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyScript\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyScript\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyScenarioModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyScenarioModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refreshToLatest\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshToLatest\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dataStoreUpdateAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dataStoreUpdateAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onStoreUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onStoreUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"refreshScenarioAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"refreshScenarioAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createDataStore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createDataStore\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"scriptValidChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"scriptValidChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"convertToCode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"convertToCode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showTestSummaryModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showTestSummaryModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testSummaryModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testSummaryModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeScriptType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeScriptType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"changeScenarioTypeModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"changeScenarioTypeModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMoreConfs\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMoreConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showActivityModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showActivityModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"activityModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"activityModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showNoteModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showNoteModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeNoteModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeNoteModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteTestConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteTestConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMonitors\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMonitors\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestScenarioComponent);\n});","define(\"@testable/shared-ui/components/test-summary-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _loadTest, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::ModalWrapper\n    @showModal={{true}}\n    @closeModal={{this.modalClosed}}\n    @title={{if this.loading \"Loading...\" (concat this.conf.testCase.name \" => \" this.conf.name)}}\n    @size=\"lg\"\n  >\n    {{#if this.loading}}\n      Loading test configuration details...\n    {{else if this.conf}}\n      <TestSummary @concurrentClients={{this.conf.concurrentClients}}\n                   @startConcurrentClients={{this.conf.startConcurrentClients}}\n                   @profileType={{this.conf.profileType}}\n                   @testType={{this.conf.testType}}\n                   @testLengthType={{if this.conf.durationSecs 'duration' 'iterations'}}\n                   @rampupMins={{math-op this.conf.rampupSecs '/' 60}}\n                   @iterationsOrDuration={{this.iterationsOrDuration}}\n                   @script={{this.conf.script}}\n                   @locations={{this.locations}}\n                   @readOnly={{true}}\n                   @embedded={{false}}\n                   @hideTitle={{true}}\n                   @billing={{this.conf.billing}}\n                   @billingSettings={{this.conf.billingSettings}}\n                   @isLive={{this.isLive}}\n                   @testRunnerType={{this.testRunnerType}}\n                   @loadType={{this.conf.loadType}}\n                   @totalVirtualUsers={{this.totalVirtualUsers}}\n                   @rampup={{this.rampup}}\n                   @duration={{this.duration}}\n                   @runtime={{this.runtime}}\n                   @updateCostOption={{this.updateCostOption}}\n      />\n  \n      <div class=\"m-t-15\">\n        <button {{on \"click\" this.startExecution}} disabled={{this.startInProgress}} type=\"button\" class=\"btn btn-primary\">\n          <Ui::Icon @icon=\"fa fa-play\" class=\" m-r-5\"/>\n        {{#if this.isLive}}\n          {{if this.startInProgress 'Launching...' 'Launch'}}\n        {{else}}\n          {{if this.startInProgress 'Starting Test...' 'Start Test'}}\n        {{/if}}\n        </button>\n        <button {{on \"click\" this.gotoConf}} disabled={{this.startInProgress}} type=\"button\" class=\"btn btn-secondary\">\n          <Ui::Icon @icon=\"fa fa-edit\" class=\"m-r-5\" />\n          {{if this.isLive 'Launch With Different Parameters' 'Edit Configuration'}}\n        </button>\n      </div>\n    {{else}}\n      Failed to load test configuration details.\n    {{/if}}\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],null,[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\",\\\"@size\\\"],[true,[30,0,[\\\"modalClosed\\\"]],[52,[30,0,[\\\"loading\\\"]],\\\"Loading...\\\",[28,[37,2],[[30,0,[\\\"conf\\\",\\\"testCase\\\",\\\"name\\\"]],\\\" => \\\",[30,0,[\\\"conf\\\",\\\"name\\\"]]],null]],\\\"lg\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"    Loading test configuration details...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"conf\\\"]],[[[1,\\\"    \\\"],[8,[39,3],null,[[\\\"@concurrentClients\\\",\\\"@startConcurrentClients\\\",\\\"@profileType\\\",\\\"@testType\\\",\\\"@testLengthType\\\",\\\"@rampupMins\\\",\\\"@iterationsOrDuration\\\",\\\"@script\\\",\\\"@locations\\\",\\\"@readOnly\\\",\\\"@embedded\\\",\\\"@hideTitle\\\",\\\"@billing\\\",\\\"@billingSettings\\\",\\\"@isLive\\\",\\\"@testRunnerType\\\",\\\"@loadType\\\",\\\"@totalVirtualUsers\\\",\\\"@rampup\\\",\\\"@duration\\\",\\\"@runtime\\\",\\\"@updateCostOption\\\"],[[30,0,[\\\"conf\\\",\\\"concurrentClients\\\"]],[30,0,[\\\"conf\\\",\\\"startConcurrentClients\\\"]],[30,0,[\\\"conf\\\",\\\"profileType\\\"]],[30,0,[\\\"conf\\\",\\\"testType\\\"]],[52,[30,0,[\\\"conf\\\",\\\"durationSecs\\\"]],\\\"duration\\\",\\\"iterations\\\"],[28,[37,4],[[30,0,[\\\"conf\\\",\\\"rampupSecs\\\"]],\\\"/\\\",60],null],[30,0,[\\\"iterationsOrDuration\\\"]],[30,0,[\\\"conf\\\",\\\"script\\\"]],[30,0,[\\\"locations\\\"]],true,false,true,[30,0,[\\\"conf\\\",\\\"billing\\\"]],[30,0,[\\\"conf\\\",\\\"billingSettings\\\"]],[30,0,[\\\"isLive\\\"]],[30,0,[\\\"testRunnerType\\\"]],[30,0,[\\\"conf\\\",\\\"loadType\\\"]],[30,0,[\\\"totalVirtualUsers\\\"]],[30,0,[\\\"rampup\\\"]],[30,0,[\\\"duration\\\"]],[30,0,[\\\"runtime\\\"]],[30,0,[\\\"updateCostOption\\\"]]]],null],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"m-t-15\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"startInProgress\\\"]]],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"startExecution\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],[[24,0,\\\" m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-play\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isLive\\\"]],[[[1,\\\"        \\\"],[1,[52,[30,0,[\\\"startInProgress\\\"]],\\\"Launching...\\\",\\\"Launch\\\"]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[52,[30,0,[\\\"startInProgress\\\"]],\\\"Starting Test...\\\",\\\"Start Test\\\"]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"startInProgress\\\"]]],[24,0,\\\"btn btn-secondary\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"gotoConf\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,8],[[24,0,\\\"m-r-5\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\"\\\\n        \\\"],[1,[52,[30,0,[\\\"isLive\\\"]],\\\"Launch With Different Parameters\\\",\\\"Edit Configuration\\\"]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    Failed to load test configuration details.\\\\n  \\\"]],[]]]],[]]]],[]]]]],[1,\\\"\\\\n\\\"]],[],[\\\"ui/modal-wrapper\\\",\\\"if\\\",\\\"concat\\\",\\\"test-summary\\\",\\\"math-op\\\",\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-summary-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestSummaryModalComponent = _exports.default = (_class = class TestSummaryModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"loading\", _descriptor2, this);\n      _initializerDefineProperty(this, \"conf\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isLive\", _descriptor4, this);\n      _initializerDefineProperty(this, \"startInProgress\", _descriptor5, this);\n      _initializerDefineProperty(this, \"testRunnerType\", _descriptor6, this);\n      _initializerDefineProperty(this, \"isTestRunnerCategory\", _descriptor7, this);\n      _initializerDefineProperty(this, \"totalVirtualUsers\", _descriptor8, this);\n      _initializerDefineProperty(this, \"rampup\", _descriptor9, this);\n      _initializerDefineProperty(this, \"duration\", _descriptor0, this);\n      _initializerDefineProperty(this, \"runtime\", _descriptor1, this);\n      _initializerDefineProperty(this, \"locations\", _descriptor10, this);\n      this.loadConf();\n    }\n    modalClosed() {\n      if (typeof this.args.modalClosed === 'function') {\n        this.args.modalClosed();\n      }\n    }\n    startExecution() {\n      this.startInProgress = true;\n      _server.default.createLoadTestExecution(this.args.confId).then(data => {\n        this.startInProgress = false;\n        if (typeof this.args.gotoExec === 'function') {\n          this.args.gotoExec(data);\n        }\n      }, () => {\n        this.startInProgress = false;\n      });\n    }\n    gotoConf() {\n      if (typeof this.args.gotoConf === 'function') {\n        this.args.gotoConf(this.conf.id);\n      }\n    }\n    get iterationsOrDuration() {\n      if (_.isNumber(this.conf.iterations)) {\n        return this.conf.iterations;\n      }\n      if (_.isNumber(this.conf.durationSecs)) {\n        return this.conf.durationSecs / 60;\n      }\n    }\n    loadLocations() {\n      _loadTest.default.getLocations(this.conf.providers, _loadTest.default.getAllRegions(), this.conf.testType, this.conf.script, null, this.testRunnerType).then(locations => {\n        this.locations = locations || [];\n        this.setParams();\n      }, () => {\n        this.locations = [];\n      });\n    }\n    loadConf() {\n      this.loading = true;\n      _server.default.getTestConfiguration(this.args.confId, false, 0).then(conf => {\n        this.conf = conf;\n        this.loadLocations();\n        this.isLive = conf.testType === 'Live';\n        this.loading = false;\n      }, (jqxhr, status, errMsg) => {\n        _lib.default.fail(jqxhr, status, errMsg);\n        this.loading = false;\n      });\n    }\n    setParams() {\n      const conf = this.conf;\n      if (conf.loadType === 'Basic') {\n        const params = JSON.parse(conf.scriptParams || '{}');\n        if (conf.script.scriptType === 'JMeter') {\n          this.totalVirtualUsers = params?.threads ? params.threads * conf.concurrentClients : undefined;\n          this.duration = params?.duration ? params.duration : undefined;\n          this.rampup = params?.rampup ? params.rampup : undefined;\n        } else if (conf.script.scriptType === 'Gatling') {\n          this.totalVirtualUsers = params?.users ? params.users * conf.concurrentClients : undefined;\n          this.duration = params?.duration ? params.duration : undefined;\n        } else if (conf.script.scriptType === 'Locust') {\n          this.totalVirtualUsers = params?.clients ? params.clients * conf.concurrentClients : undefined;\n          this.runtime = params?.runtime ? params.runtime : undefined;\n        }\n        _lib.default.updateLocationConcurrents(this.locations, parseInt(this.totalVirtualUsers), 'totalVirtualUsers');\n      }\n      if (!_.isEmpty(conf.testRunnerSettings) || !this.isTestRunnerCategory && this.isTestRunnerCategory !== undefined) {\n        this.testRunnerType = 'Basic';\n      } else {\n        this.testRunnerType = 'Advanced';\n      }\n    }\n    updateCostOption(disableStrategyOption, strategy, asapStrategy, chosenAsapCategory) {\n      if (chosenAsapCategory !== 'TestRunner') {\n        this.isTestRunnerCategory = false;\n        this.locations.forEach(location => {\n          location.testRunnerType = 'Basic';\n        });\n        this.locations = this.locations;\n        this.setParams();\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"loading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"conf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isLive\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"startInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"testRunnerType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isTestRunnerCategory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"totalVirtualUsers\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"rampup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"duration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"runtime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"locations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"modalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"modalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"startExecution\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"startExecution\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCostOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCostOption\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestSummaryModalComponent);\n});","define(\"@testable/shared-ui/components/test-summary\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/component\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _object, _runloop, _component2, _tracking, _loadTest, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel panelSummaryInfo\" style={{html-safe \"height: 100%\"}} data-sortable=\"false\"\n       {{did-update this.onBillingChange @billing}}>\n    {{#unless @hideTitle}}\n      <div class=\"panel-heading\">\n        <h4 class=\"panel-title\">\n          <Ui::Icon @icon=\"fa fa-minus\" role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelSummaryInfo{{@uniqueId}}\" aria-expanded=\"true\"\n                class=\"btn btn-sm btn-icon btn-circle text-primary\"\n                aria-controls=\"panelSummaryInfo{{@uniqueId}}\" />\n          <strong>Summary</strong></h4>\n      </div>\n    {{/unless}}\n  \n    <div id=\"panelSummaryInfo{{@uniqueId}}\" class=\"collapse show\">\n      <div class=\"panel-body\">\n      <div class=\"m-t-10 m-b-10 alert alert-secondary fade show\">\n        {{#if (and (or @concurrentClients (not-eq @testType 'Load')) (gt this.numLocations 0))}}\n          {{#if @isLive}}\n            <p class=\"lead\">\n              This session {{if @execution \"launched\" \"will launch\"}} {{this.confInfo}} in {{print-region-info\n                    (get @locations \"0.regionInfo.region\")}}\n            </p>\n          {{else}}\n            {{#if (eq @testType 'Load')}}\n              <p class=\"lead\">{{if @isExecuted 'This test simulated' 'Running this load test will simulate'}}\n                <strong>\n                  {{#if (eq @loadType 'Basic')}}\n                    {{@totalVirtualUsers}} {{print-plural 'virtual user' @totalVirtualUsers}}\n                    {{if (gt this.totalConcurrentClients 1) 'across' 'on' }}\n                  {{/if}}\n                  {{if (eq @profileType 'Step')\n                       (concat (print-number this.totalStartConcurrentClients) ' => ')}}\n  \n  \n                  {{print-number this.totalConcurrentClients}} {{this.concurrentText}}\n  \n                </strong>\n                {{if (not-eq this.totalConcurrentClients 1) 'each'}} executing\n                {{#if @embedded}}\n                  the scenario defined in the previous step\n                {{else}}\n                  <Scenario::Link @script={{@script}} @isInline={{true}} />\n                {{/if}}\n                {{this.testLengthText}}\n                {{#if (eq @locations.length 1)}}\n                  in 1 location{{else}}\n                  distributed across {{@locations.length}} locations{{/if}}:</p>\n            {{else}}\n              <p class=\"lead\">{{if @isExecuted 'This' 'Running this'}} {{print-testtype @testType}}\n                {{if @isExecuted 'simulated' 'will simulate'}}\n                {{#if @embedded}}the scenario defined in the previous step{{else}}<Scenario::Link @script={{@script}}\n                                                                                               @isInline={{true}} />{{/if}}\n                in {{@locations.length}} {{print-plural 'location' @locations.length}}:</p>\n            {{/if}}\n            <ul class=\"text-break\">\n              {{#each @locations as |location|}}\n                {{#if location.regionInfo}}\n                  {{#if @isExecuted}}\n                    <li class=\"m-b-5\"><h5>{{print-region-info location.regionInfo.region}}</h5>\n                      {{#if (eq @testType 'Load')}}\n                        {{if location.executionRegion.startConcurrentClients (concat (print-number location.executionRegion.startConcurrentClients) ' => ')}}\n                        {{#if (and @isMultiUser (eq @loadType 'Basic') location.params.totalVirtualUsers)}}\n                          {{print-number location.params.totalVirtualUsers}} virtual users across\n                        {{/if}}\n                        {{print-number location.executionRegion.concurrentClients}}\n                        {{this.concurrentText}}\n                      {{/if}}\n                      {{#if (eq @testRunnerType 'Advanced')}}\n                        {{#if (eq @testType 'Load')}} running on {{else}} Ran on {{/if}}\n                        {{html-safe location.testRunnerInfoRunnerText}}\n                      {{else}}\n                        {{html-safe location.testRunnerInfoText}}.\n                      {{/if}}\n                    </li>\n                  {{else}}\n                    <li class=\"m-b-5\"><h5>{{print-region-info location.regionInfo.region}}</h5>\n                        {{#if (eq @testType 'Load')}}\n                          {{if @startConcurrentClients (concat (print-number location.params.startConcurrentClients) ' => ')}}\n                          {{#if (and @isMultiUser (eq @loadType 'Basic') location.params.totalVirtualUsers)}}\n                            {{print-number location.params.totalVirtualUsers}} virtual users across\n                          {{/if}}\n                          {{print-number location.params.concurrentClients}}\n                          {{this.concurrentText}}\n                        {{/if}}\n                        {{#if (eq @testRunnerType 'Advanced')}}\n                          {{#if (eq @testType 'Load')}} running on {{else}} Runs on {{/if}}\n                          {{html-safe location.testRunnerInfoRunnerText}}\n                        {{else}}\n                          {{html-safe location.testRunnerInfoText}}.\n                        {{/if}}\n                        {{#if location.metadataError}}\n                          <div class=\"note note-warning m-b-15\">\n                            <div class=\"note-icon f-s-20 p-t-15\">\n                              <Ui::Icon @icon=\"fa fa-lightbulb fa-2x\" />\n                            </div>\n                            <div class=\"note-content\">\n                              <h4 class=\"m-t-5 m-b-5 p-b-2\">Warning</h4>\n                              <p>{{html-safe location.metadataError}}</p>\n                            </div>\n                          </div>\n                        {{/if}}\n                    </li>\n                  {{/if}}\n                {{/if}}\n              {{/each}}\n            </ul>\n          {{/if}}\n  \n          <fieldset disabled={{@readOnly}}>\n            {{#if @execution}}\n              <div class=\"m-b-10 summary-content\">\n                <a {{on \"click\" this.onShowUsageHistory }}>\n                  Actual Cost: {{print-ccy @execution.usageRecord.charge}}\n                </a>\n              </div>\n            {{else}}\n              <div class=\"m-b-10 summary-content\">\n                <a {{on \"click\" this.toggleCostDetails}} role=\"button\">\n                  <Ui::Icon @icon=\"fa fa-{{if this.showCostDetails \"minus\" \"plus\"}}\" />\n                </a>\n                Minimum Cost: {{if (or @billing.possible @billing.possibleEver) (print-ccy @billing.minCost) 'N/A'}}\n              </div>\n              <div class=\"m-b-10 animate__animated {{if this.showCostDetails 'animate__fadeIn' 'hidden'}}\">\n                <div class=\"row\">\n                  <div class=\"col-4 p-t-5\">\n                    <label>\n                      <Input @type=\"checkbox\" @checked={{this.disableStrategyOption}} class=\"m-l-10\" {{on 'change' this.updateStrategyOption}}  />\n                      Use Default\n                    </label>\n                  </div>\n                  <div class=\"col-8 text-right\">\n                    <fieldset disabled={{this.disableStrategyOption}}>\n                      <BsButtonGroup @value={{this.strategy}} @type=\"radio\" @onChange={{this.updateStrategy}} as |bg|>\n                        <bg.button @type=\"primary\" @value=\"MinimizeCost\" @size=\"xs\">Minimize Cost\n                          <Ui::InfoIcon\n                                  @content=\"<p>Run this test only when it can be done at the cheapest possible price or utilizing the\n                              fewest possible consumable units (e.g. test runner hours, virtual user hours, monitors, etc). The test will queue to\n                              run later if that is not possible now.</p><p>For example: if you have a 2 browser sessions plan +\n                              a pay-as-you-go plan and there are already 2 browser sessions in progress Testable will not try to\n                              use the pay as you go plan to run your test and instead wait until one of the browser sessions is\n                              available for use.</p>\"\n                                  @isHtml={{true}}\n                          />\n                        </bg.button>\n                        <bg.button @type=\"primary\" @value=\"ASAP\" @size=\"xs\">ASAP\n                          <Ui::InfoIcon\n                                  @content=\"<p>Run this test as soon as possible regardless of cost. If multiple plans are available\n                              right now to pay for your test the cheapest option will still be used.</p><p>For example: if you\n                              have a 2 browser sessions plan + a pay-as-you-go plan and there are already 2 browser sessions in\n                              progress Testable will still immediately run your test using your pay as you go plan.</p>\"\n                                  @isHtml={{true}}\n                          />\n                        </bg.button>\n                      </BsButtonGroup>\n                    </fieldset>\n                  </div>\n                </div>\n  \n                {{#if (eq this.strategy 'ASAP')}}\n                  <fieldset disabled={{this.disableCategoryChoose}}>\n                    <div class=\"row animate__animated animate__fadeIn\">\n                      <div class=\"col-4 p-t-5\">&nbsp;</div>\n                      <div class=\"col-8 text-right\">\n                          <BsButtonGroup @value={{this.asapStrategy}} @type=\"radio\" @onChange={{this.updateAsapStrategy}} as |bg|>\n                            <bg.button @type=\"primary\" @value=\"cheapest\" @size=\"xs\">Cheapest</bg.button>\n                            <bg.button @type=\"primary\" @value=\"choose\" @size=\"xs\">Choose Category</bg.button>\n                          </BsButtonGroup>\n                      </div>\n                    </div>\n  \n                    {{#if (eq this.asapStrategy 'choose')}}\n                      <div class=\"row animate__animated animate__fadeIn\">\n                        <div class=\"col-3 p-t-5\">&nbsp;</div>\n                        <div class=\"col-9 p-t-5\">\n                          <Ui::PSelect @options={{this.asapCategories}} @selected={{this.chosenAsapCategory}} @placeholder=\"Please select...\"\n                                       @disabled={{or this.disableStrategyOption @readOnly}}\n                                       @onChange={{this.updateCategoryOption}} as |option|>\n                            {{camel-to-title option.category}}\n                          </Ui::PSelect>\n                        </div>\n                      </div>\n                    {{/if}}\n                  </fieldset>\n                {{/if}}\n              </div>\n  \n              {{#if (and @billing (not @billing.possible))}}\n                <div class=\"note note-yellow m-b-15\">\n                  <div class=\"note-icon f-s-20 p-t-15\">\n                    <Ui::Icon @icon=\"fa fa-lightbulb fa-2x\" />\n                  </div>\n                  <div class=\"note-content\">\n                    <h4 class=\"m-t-5 m-b-5 p-b-2\">{{if @billing.possibleEver \"Will Queue For Later\" \"Insufficient Plan\"}}</h4>\n                    <p>{{html-safe (text-to-html @billing.explanation)}}</p>\n                  </div>\n                </div>\n              {{/if}}\n  \n              <div class=\"m-b-10 animate__animated {{if this.showCostDetails 'animate__fadeIn' 'hidden'}}\">\n                {{#if (or @billing.possible @billing.possibleEver)}}\n                  <table class=\"table table-condensed m-t-5 bg-white\">\n                    <thead>\n                    <tr>\n                      <th width=\"20%\">Product</th>\n                      <th>Usage</th>\n                      <th width=\"75\">Qty</th>\n                      <th width=\"75\">Cost</th>\n                    </tr>\n                    </thead>\n                    <tbody>\n                    {{#each this.infoRows as |row|}}\n                      <tr>\n                        <td>{{row.product}}</td>\n                        <td>{{row.description}}</td>\n                        <td>{{row.quantity}}</td>\n                        <td>{{print-ccy row.charge}}</td>\n                      </tr>\n                    {{/each}}\n                    </tbody>\n                  </table>\n                {{/if}}\n              </div>\n            {{/if}}\n          </fieldset>\n        {{else if (and @readOnly (eq this.numLocations 0))}}\n          Loading ...\n        {{else if (not @isExecuted)}}\n          A test summary will be generated once you choose {{#if (eq @testType 'Load')}}\n          the number of {{this.concurrentText}}{{else}}the test type{{/if}}{{unless @embedded ', the scenario,'}} and at least\n          one location.\n        {{else}}\n          A test summary could not be generated for this configuration.\n        {{/if}}\n      </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"panel panelSummaryInfo\\\"],[16,5,[28,[37,1],[\\\"height: 100%\\\"],null]],[24,\\\"data-sortable\\\",\\\"false\\\"],[4,[38,2],[[30,0,[\\\"onBillingChange\\\"]],[30,1]],null],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,2]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],[[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[16,6,[29,[\\\"#panelSummaryInfo\\\",[30,3]]]],[24,\\\"aria-expanded\\\",\\\"true\\\"],[24,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[16,\\\"aria-controls\\\",[29,[\\\"panelSummaryInfo\\\",[30,3]]]]],[[\\\"@icon\\\"],[\\\"fa fa-minus\\\"]],null],[1,\\\"\\\\n        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Summary\\\"],[13],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[\\\"panelSummaryInfo\\\",[30,3]]]],[14,0,\\\"collapse show\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"m-t-10 m-b-10 alert alert-secondary fade show\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[28,[37,9],[[30,4],[28,[37,10],[[30,5],\\\"Load\\\"],null]],null],[28,[37,11],[[30,0,[\\\"numLocations\\\"]],0],null]],null],[[[41,[30,6],[[[1,\\\"          \\\"],[10,2],[14,0,\\\"lead\\\"],[12],[1,\\\"\\\\n            This session \\\"],[1,[52,[30,7],\\\"launched\\\",\\\"will launch\\\"]],[1,\\\" \\\"],[1,[30,0,[\\\"confInfo\\\"]]],[1,\\\" in \\\"],[1,[28,[35,13],[[28,[37,14],[[30,8],\\\"0.regionInfo.region\\\"],null]],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\"            \\\"],[10,2],[14,0,\\\"lead\\\"],[12],[1,[52,[30,9],\\\"This test simulated\\\",\\\"Running this load test will simulate\\\"]],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,10],\\\"Basic\\\"],null],[[[1,\\\"                  \\\"],[1,[30,11]],[1,\\\" \\\"],[1,[28,[35,16],[\\\"virtual user\\\",[30,11]],null]],[1,\\\"\\\\n                  \\\"],[1,[52,[28,[37,11],[[30,0,[\\\"totalConcurrentClients\\\"]],1],null],\\\"across\\\",\\\"on\\\"]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[1,[52,[28,[37,15],[[30,12],\\\"Step\\\"],null],[28,[37,17],[[28,[37,18],[[30,0,[\\\"totalStartConcurrentClients\\\"]]],null],\\\" => \\\"],null]]],[1,\\\"\\\\n\\\\n\\\\n                \\\"],[1,[28,[35,18],[[30,0,[\\\"totalConcurrentClients\\\"]]],null]],[1,\\\" \\\"],[1,[30,0,[\\\"concurrentText\\\"]]],[1,\\\"\\\\n\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[1,[52,[28,[37,10],[[30,0,[\\\"totalConcurrentClients\\\"]],1],null],\\\"each\\\"]],[1,\\\" executing\\\\n\\\"],[41,[30,13],[[[1,\\\"                the scenario defined in the previous step\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[39,19],null,[[\\\"@script\\\",\\\"@isInline\\\"],[[30,14],true]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"              \\\"],[1,[30,0,[\\\"testLengthText\\\"]]],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,8,[\\\"length\\\"]],1],null],[[[1,\\\"                in 1 location\\\"]],[]],[[[1,\\\"\\\\n                distributed across \\\"],[1,[30,8,[\\\"length\\\"]]],[1,\\\" locations\\\"]],[]]],[1,\\\":\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,2],[14,0,\\\"lead\\\"],[12],[1,[52,[30,9],\\\"This\\\",\\\"Running this\\\"]],[1,\\\" \\\"],[1,[28,[35,20],[[30,5]],null]],[1,\\\"\\\\n              \\\"],[1,[52,[30,9],\\\"simulated\\\",\\\"will simulate\\\"]],[1,\\\"\\\\n              \\\"],[41,[30,13],[[[1,\\\"the scenario defined in the previous step\\\"]],[]],[[[8,[39,19],null,[[\\\"@script\\\",\\\"@isInline\\\"],[[30,14],true]],null]],[]]],[1,\\\"\\\\n              in \\\"],[1,[30,8,[\\\"length\\\"]]],[1,\\\" \\\"],[1,[28,[35,16],[\\\"location\\\",[30,8,[\\\"length\\\"]]],null]],[1,\\\":\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[10,\\\"ul\\\"],[14,0,\\\"text-break\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,23],[[28,[37,23],[[30,8]],null]],null],null,[[[41,[30,15,[\\\"regionInfo\\\"]],[[[41,[30,9],[[[1,\\\"                  \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-5\\\"],[12],[10,\\\"h5\\\"],[12],[1,[28,[35,13],[[30,15,[\\\"regionInfo\\\",\\\"region\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\"                      \\\"],[1,[52,[30,15,[\\\"executionRegion\\\",\\\"startConcurrentClients\\\"]],[28,[37,17],[[28,[37,18],[[30,15,[\\\"executionRegion\\\",\\\"startConcurrentClients\\\"]]],null],\\\" => \\\"],null]]],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,16],[28,[37,15],[[30,10],\\\"Basic\\\"],null],[30,15,[\\\"params\\\",\\\"totalVirtualUsers\\\"]]],null],[[[1,\\\"                        \\\"],[1,[28,[35,18],[[30,15,[\\\"params\\\",\\\"totalVirtualUsers\\\"]]],null]],[1,\\\" virtual users across\\\\n\\\"]],[]],null],[1,\\\"                      \\\"],[1,[28,[35,18],[[30,15,[\\\"executionRegion\\\",\\\"concurrentClients\\\"]]],null]],[1,\\\"\\\\n                      \\\"],[1,[30,0,[\\\"concurrentText\\\"]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[30,17],\\\"Advanced\\\"],null],[[[1,\\\"                      \\\"],[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\" running on \\\"]],[]],[[[1,\\\" Ran on \\\"]],[]]],[1,\\\"\\\\n                      \\\"],[1,[28,[35,1],[[30,15,[\\\"testRunnerInfoRunnerText\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[1,[28,[35,1],[[30,15,[\\\"testRunnerInfoText\\\"]]],null]],[1,\\\".\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-5\\\"],[12],[10,\\\"h5\\\"],[12],[1,[28,[35,13],[[30,15,[\\\"regionInfo\\\",\\\"region\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\"                        \\\"],[1,[52,[30,18],[28,[37,17],[[28,[37,18],[[30,15,[\\\"params\\\",\\\"startConcurrentClients\\\"]]],null],\\\" => \\\"],null]]],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,16],[28,[37,15],[[30,10],\\\"Basic\\\"],null],[30,15,[\\\"params\\\",\\\"totalVirtualUsers\\\"]]],null],[[[1,\\\"                          \\\"],[1,[28,[35,18],[[30,15,[\\\"params\\\",\\\"totalVirtualUsers\\\"]]],null]],[1,\\\" virtual users across\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[1,[28,[35,18],[[30,15,[\\\"params\\\",\\\"concurrentClients\\\"]]],null]],[1,\\\"\\\\n                        \\\"],[1,[30,0,[\\\"concurrentText\\\"]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,15],[[30,17],\\\"Advanced\\\"],null],[[[1,\\\"                        \\\"],[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\" running on \\\"]],[]],[[[1,\\\" Runs on \\\"]],[]]],[1,\\\"\\\\n                        \\\"],[1,[28,[35,1],[[30,15,[\\\"testRunnerInfoRunnerText\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[1,[28,[35,1],[[30,15,[\\\"testRunnerInfoText\\\"]]],null]],[1,\\\".\\\\n\\\"]],[]]],[41,[30,15,[\\\"metadataError\\\"]],[[[1,\\\"                        \\\"],[10,0],[14,0,\\\"note note-warning m-b-15\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,0],[14,0,\\\"note-icon f-s-20 p-t-15\\\"],[12],[1,\\\"\\\\n                            \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-lightbulb fa-2x\\\"]],null],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                          \\\"],[10,0],[14,0,\\\"note-content\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,\\\"Warning\\\"],[13],[1,\\\"\\\\n                            \\\"],[10,2],[12],[1,[28,[35,1],[[30,15,[\\\"metadataError\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null]],[15]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,19]],[12],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-b-10 summary-content\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[4,[38,28],[\\\"click\\\",[30,0,[\\\"onShowUsageHistory\\\"]]],null],[12],[1,\\\"\\\\n                Actual Cost: \\\"],[1,[28,[35,29],[[30,7,[\\\"usageRecord\\\",\\\"charge\\\"]]],null]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"m-b-10 summary-content\\\"],[12],[1,\\\"\\\\n              \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,28],[\\\"click\\\",[30,0,[\\\"toggleCostDetails\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[[29,[\\\"fa fa-\\\",[52,[30,0,[\\\"showCostDetails\\\"]],\\\"minus\\\",\\\"plus\\\"]]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              Minimum Cost: \\\"],[1,[52,[28,[37,9],[[30,1,[\\\"possible\\\"]],[30,1,[\\\"possibleEver\\\"]]],null],[28,[37,29],[[30,1,[\\\"minCost\\\"]]],null],\\\"N/A\\\"]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"m-b-10 animate__animated \\\",[52,[30,0,[\\\"showCostDetails\\\"]],\\\"animate__fadeIn\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"col-4 p-t-5\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,31],[[24,0,\\\"m-l-10\\\"],[4,[38,28],[\\\"change\\\",[30,0,[\\\"updateStrategyOption\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"disableStrategyOption\\\"]]]],null],[1,\\\"\\\\n                    Use Default\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"col-8 text-right\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"disableStrategyOption\\\"]]],[12],[1,\\\"\\\\n                    \\\"],[8,[39,32],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"strategy\\\"]],\\\"radio\\\",[30,0,[\\\"updateStrategy\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,20,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"MinimizeCost\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Minimize Cost\\\\n                        \\\"],[8,[39,33],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"<p>Run this test only when it can be done at the cheapest possible price or utilizing the\\\\n                            fewest possible consumable units (e.g. test runner hours, virtual user hours, monitors, etc). The test will queue to\\\\n                            run later if that is not possible now.</p><p>For example: if you have a 2 browser sessions plan +\\\\n                            a pay-as-you-go plan and there are already 2 browser sessions in progress Testable will not try to\\\\n                            use the pay as you go plan to run your test and instead wait until one of the browser sessions is\\\\n                            available for use.</p>\\\",true]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,20,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"ASAP\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"ASAP\\\\n                        \\\"],[8,[39,33],null,[[\\\"@content\\\",\\\"@isHtml\\\"],[\\\"<p>Run this test as soon as possible regardless of cost. If multiple plans are available\\\\n                            right now to pay for your test the cheapest option will still be used.</p><p>For example: if you\\\\n                            have a 2 browser sessions plan + a pay-as-you-go plan and there are already 2 browser sessions in\\\\n                            progress Testable will still immediately run your test using your pay as you go plan.</p>\\\",true]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[20]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"strategy\\\"]],\\\"ASAP\\\"],null],[[[1,\\\"                \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"disableCategoryChoose\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"row animate__animated animate__fadeIn\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"col-4 p-t-5\\\"],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"col-8 text-right\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,32],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"asapStrategy\\\"]],\\\"radio\\\",[30,0,[\\\"updateAsapStrategy\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[8,[30,21,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"cheapest\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Cheapest\\\"]],[]]]]],[1,\\\"\\\\n                          \\\"],[8,[30,21,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"choose\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Choose Category\\\"]],[]]]]],[1,\\\"\\\\n                        \\\"]],[21]]]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,15],[[30,0,[\\\"asapStrategy\\\"]],\\\"choose\\\"],null],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"row animate__animated animate__fadeIn\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"col-3 p-t-5\\\"],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"col-9 p-t-5\\\"],[12],[1,\\\"\\\\n                        \\\"],[8,[39,34],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[[30,0,[\\\"asapCategories\\\"]],[30,0,[\\\"chosenAsapCategory\\\"]],\\\"Please select...\\\",[28,[37,9],[[30,0,[\\\"disableStrategyOption\\\"]],[30,19]],null],[30,0,[\\\"updateCategoryOption\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                          \\\"],[1,[28,[35,35],[[30,22,[\\\"category\\\"]]],null]],[1,\\\"\\\\n                        \\\"]],[22]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,8],[[30,1],[28,[37,36],[[30,1,[\\\"possible\\\"]]],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"note note-yellow m-b-15\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"note-icon f-s-20 p-t-15\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-lightbulb fa-2x\\\"]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"note-content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-5 m-b-5 p-b-2\\\"],[12],[1,[52,[30,1,[\\\"possibleEver\\\"]],\\\"Will Queue For Later\\\",\\\"Insufficient Plan\\\"]],[13],[1,\\\"\\\\n                  \\\"],[10,2],[12],[1,[28,[35,1],[[28,[37,37],[[30,1,[\\\"explanation\\\"]]],null]],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"m-b-10 animate__animated \\\",[52,[30,0,[\\\"showCostDetails\\\"]],\\\"animate__fadeIn\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[30,1,[\\\"possible\\\"]],[30,1,[\\\"possibleEver\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-condensed m-t-5 bg-white\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"20%\\\"],[12],[1,\\\"Product\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"th\\\"],[12],[1,\\\"Usage\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"75\\\"],[12],[1,\\\"Qty\\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"75\\\"],[12],[1,\\\"Cost\\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,23],[[28,[37,23],[[30,0,[\\\"infoRows\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[30,23,[\\\"product\\\"]]],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[30,23,[\\\"description\\\"]]],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[30,23,[\\\"quantity\\\"]]],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,29],[[30,23,[\\\"charge\\\"]]],null]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[23]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,8],[[30,19],[28,[37,15],[[30,0,[\\\"numLocations\\\"]],0],null]],null],[[[1,\\\"        Loading ...\\\\n\\\"]],[]],[[[41,[28,[37,36],[[30,9]],null],[[[1,\\\"        A test summary will be generated once you choose \\\"],[41,[28,[37,15],[[30,5],\\\"Load\\\"],null],[[[1,\\\"\\\\n        the number of \\\"],[1,[30,0,[\\\"concurrentText\\\"]]]],[]],[[[1,\\\"the test type\\\"]],[]]],[1,[52,[51,[30,13]],\\\", the scenario,\\\"]],[1,\\\" and at least\\\\n        one location.\\\\n\\\"]],[]],[[[1,\\\"        A test summary could not be generated for this configuration.\\\\n      \\\"]],[]]]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@billing\\\",\\\"@hideTitle\\\",\\\"@uniqueId\\\",\\\"@concurrentClients\\\",\\\"@testType\\\",\\\"@isLive\\\",\\\"@execution\\\",\\\"@locations\\\",\\\"@isExecuted\\\",\\\"@loadType\\\",\\\"@totalVirtualUsers\\\",\\\"@profileType\\\",\\\"@embedded\\\",\\\"@script\\\",\\\"location\\\",\\\"@isMultiUser\\\",\\\"@testRunnerType\\\",\\\"@startConcurrentClients\\\",\\\"@readOnly\\\",\\\"bg\\\",\\\"bg\\\",\\\"option\\\",\\\"row\\\"],[\\\"div\\\",\\\"html-safe\\\",\\\"did-update\\\",\\\"unless\\\",\\\"h4\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"if\\\",\\\"and\\\",\\\"or\\\",\\\"not-eq\\\",\\\"gt\\\",\\\"p\\\",\\\"print-region-info\\\",\\\"get\\\",\\\"eq\\\",\\\"print-plural\\\",\\\"concat\\\",\\\"print-number\\\",\\\"scenario/link\\\",\\\"print-testtype\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"h5\\\",\\\"fieldset\\\",\\\"a\\\",\\\"on\\\",\\\"print-ccy\\\",\\\"label\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"camel-to-title\\\",\\\"not\\\",\\\"text-to-html\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"td\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-summary.hbs\",\n    \"isStrictMode\": false\n  });\n  let TestSummaryComponent = _exports.default = (_dec = (0, _object.computed)('args.locations.{[],@each.regionInfo}'), _dec2 = (0, _object.computed)('args.script.metadata'), _dec3 = (0, _object.computed)('chosenAsapCategory', 'args.billing.costs.@each.chosen', 'disableStrategyOption', 'strategy', 'asapStrategy'), _class = class TestSummaryComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"strategy\", _descriptor, this);\n      _initializerDefineProperty(this, \"asapStrategy\", _descriptor2, this);\n      _initializerDefineProperty(this, \"asapCategories\", _descriptor3, this);\n      _initializerDefineProperty(this, \"costsOptions\", _descriptor4, this);\n      _initializerDefineProperty(this, \"updatedBilling\", _descriptor5, this);\n      _initializerDefineProperty(this, \"disableStrategyOption\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chosenAsapCategory\", _descriptor7, this);\n      _initializerDefineProperty(this, \"showCostDetails\", _descriptor8, this);\n      const orgSettings = _environment.config.currentUser.org.settings || {};\n      const billingSettings = this.args.billingSettings;\n      if (!billingSettings) this.disableStrategyOption = true;\n      if (this.disableStrategyOption) {\n        this.strategy = orgSettings.billingStrategy || 'MinimizeCost';\n        this.asapStrategy = orgSettings.billingAsapStrategy || 'cheapest';\n      } else {\n        this.strategy = billingSettings?.strategy || 'MinimizeCost';\n        this.asapStrategy = billingSettings?.asapStrategy || 'cheapest';\n      }\n      this.setChosenAsapCategory();\n      (0, _runloop.next)(this, () => {\n        if (!this.isDestroying && !this.isDestroyed) this.sendUpdate();\n      });\n    }\n    get numLocations() {\n      let answer = 0;\n      _.forEach(this.args.locations, l => {\n        if (l.regionInfo) {\n          answer++;\n        }\n      });\n      return answer;\n    }\n    get totalConcurrentClients() {\n      return this.args.execution?.concurrentClients || this.args.concurrentClients;\n    }\n    get totalStartConcurrentClients() {\n      return this.args.execution?.startConcurrentClients || this.args.startConcurrentClients;\n    }\n    get concurrentText() {\n      return _loadTest.default.printConcurrentUser(Number(this.totalConcurrentClients) || 1, this.args.script?.scriptType);\n    }\n    get testLengthText() {\n      const profileType = this.args.profileType;\n      const scriptType = this.args.script?.scriptType;\n      if (_loadTest.default.isMultiUser(scriptType)) {\n        if (scriptType === 'JMeter' && (this.args.rampup || this.args.duration)) {\n          let r = Number(this.args.rampup) || 0;\n          let d = Number(this.args.duration) || 0;\n          r = _lib.default.secondsToDhms(r, false, false, false, false);\n          d = _lib.default.secondsToDhms(d, false, false, false, false);\n          return ' for ' + d + ' total with ' + r + ' rampup';\n        } else if (scriptType === 'Gatling' && this.args.duration) {\n          const duration = this.args.duration;\n          let durationConverted = _lib.default.secondsToDhms(duration, false, false, false, false);\n          return ` for ${durationConverted} `;\n        } else if (scriptType === 'Locust' && this.args.runtime) {\n          const runtime = Number(this.args.runtime);\n          let runTimeConverted = _lib.default.secondsToDhms(runtime * 60, false, false, false, false);\n          return ` for ${runTimeConverted} `;\n        }\n      }\n      if (!this.args.iterationsOrDuration) {\n        return '';\n      }\n      let l = Number(this.args.iterationsOrDuration);\n      if (this.args.testLengthType === 'iterations') {\n        return ' ' + l + ' ' + _lib.default.pluralCheck('time', l);\n      } else if (profileType === 'Flat') {\n        let r = Number(this.args.rampupMins) || 0;\n        let totalTime = r + l;\n        totalTime = _lib.default.secondsToDhms(totalTime * 60, false, false, false, false);\n        r = _lib.default.secondsToDhms(r * 60, false, false, false, false);\n        l = _lib.default.secondsToDhms(l * 60, false, false, false, false);\n        return ' for ' + totalTime + ' total ' + ' (' + r + ' rampup + ' + l + ' duration)';\n      } else {\n        l = _lib.default.secondsToDhms(l * 60, false, false, false, false);\n        return ' for ' + l + ' ' + _lib.default.pluralCheck('minute', l);\n      }\n    }\n    get confInfo() {\n      const meta = this.args.script?.metadata;\n      if (!meta) return '';\n      let browser = meta.browserName;\n      let binary = meta.binary;\n      let deviceName = meta.device?.name || meta.deviceName;\n      let version;\n      let confInfo;\n      if (binary !== 'OpenFin') {\n        let browserVersion = meta.browserVersion?.version || meta.browserVersion;\n        let browserVersionSplit = browserVersion.split('.')[0];\n        version = (browserVersionSplit === 'Latest' ? 'Latest' : 'v' + browserVersionSplit) + ' browser';\n        confInfo = `a ${_lib.default.ucFirst(browser)} ${version} on a ${deviceName}`;\n      } else {\n        version = meta.chromeDriverVersion.split('.')[0] === 'Auto' ? '' : `using chrome driver v${meta.chromeDriverVersion.split('.')[0]}`;\n        confInfo = `an OpenFin Application ${version} on a ${deviceName}`;\n      }\n      return confInfo;\n    }\n    get infoRows() {\n      const chosenAsapCategory = this.chosenAsapCategory;\n      if (!chosenAsapCategory?.category) {\n        return;\n      }\n      const tableRows = [];\n      this.args.billing?.costs?.forEach(cost => {\n        if (cost.options.length === 1) {\n          tableRows.push(...cost.options[0].usage);\n        } else {\n          tableRows.push(...cost.options.find(option => option.category === cost.chosen).usage);\n        }\n      });\n      return tableRows;\n    }\n    get disableCategoryChoose() {\n      return this.disableStrategyOption || !this.asapCategories.length;\n    }\n    setChosenAsapCategory() {\n      const costs = this.args.billing?.costs;\n      if (costs && costs.length > 0) {\n        this.asapCategories = costs[0].options;\n        if (costs[0].chosen) {\n          this.chosenAsapCategory = costs[0]?.options.find(o => o.category === costs[0].chosen);\n        } else {\n          this.chosenAsapCategory = costs[0]?.options[0];\n        }\n      }\n    }\n    sendUpdate() {\n      if (typeof this.args.updateCostOption === 'function') {\n        const categories = [];\n        const chosenAsapCategory = this.chosenAsapCategory;\n        if (chosenAsapCategory) {\n          categories.push(chosenAsapCategory.category);\n          this.args.billing?.costs?.forEach(cost => {\n            if (cost.options.length === 1 && !cost.options.find(option => option.category === chosenAsapCategory.category)) {\n              categories.push(cost.chosen);\n            }\n          });\n        }\n        this.args.updateCostOption(this.disableStrategyOption, this.strategy, this.asapStrategy, categories.join(','));\n      }\n    }\n\n    // did-update: replaces didReceiveAttrs\n    onBillingChange() {\n      this.setChosenAsapCategory();\n    }\n    toggleCostDetails() {\n      this.showCostDetails = !this.showCostDetails;\n    }\n    updateStrategyOption(event) {\n      this.disableStrategyOption = event.target.checked;\n      if (event.target.checked) {\n        this.updatedBilling = null;\n        const orgSettings = _environment.config.currentUser.org.settings || {};\n        this.strategy = orgSettings.billingStrategy || 'MinimizeCost';\n        this.asapStrategy = orgSettings?.asapStrategy || 'cheapest';\n      }\n      this.sendUpdate();\n    }\n    updateStrategy(str) {\n      this.strategy = str;\n      this.sendUpdate();\n    }\n    updateAsapStrategy(asapStr) {\n      this.asapStrategy = asapStr;\n      this.sendUpdate();\n    }\n    updateCategoryOption(option) {\n      this.chosenAsapCategory = option;\n      this.sendUpdate();\n    }\n    onShowUsageHistory() {\n      if (!this.args.publicView && typeof this.args.showUsageHistoryAction === 'function') {\n        this.args.showUsageHistoryAction(this.args.execution?.usageRecord?.id);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"strategy\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'MinimizeCost';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"asapStrategy\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'cheapest';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"asapCategories\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"costsOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"updatedBilling\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"disableStrategyOption\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chosenAsapCategory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showCostDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"numLocations\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"numLocations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"confInfo\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"confInfo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"infoRows\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"infoRows\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBillingChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBillingChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleCostDetails\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleCostDetails\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStrategyOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStrategyOption\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateStrategy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateStrategy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAsapStrategy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAsapStrategy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateCategoryOption\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateCategoryOption\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowUsageHistory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowUsageHistory\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestSummaryComponent);\n});","define(\"@testable/shared-ui/components/test-url-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template\", \"re2js\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _template, _re2js, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template\",0,\"re2js\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"testUrlModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}} >\n    <div class=\"modal-dialog modal-lg\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Test Pattern</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"d-flex form-group gap-1\">\n            <Input class=\"form-control\" {{on \"keyup\" this.onUpdateUrl}} type=\"text\" placeholder=\"Resource name ([method] [url]). Example: GET https://foo.com\" @value={{this.testUrl}} />\n          </div>\n          {{#if this.urlError}}\n            <span class=\"text-danger\">Resource is not valid.</span>\n          {{else}}\n            {{#if this.response}}\n              <div>\n                {{this.response}}\n              </div>\n              {{#if this.details}}\n                <div class=\"m-b-10\">\n                  <b type=\"button\" class=\"cursor-pointer text-primary\" {{on \"click\" (fn (mut this.showDetails) (not this.showDetails))}}>\n                    Details <Ui::Icon @icon=\"fa {{if this.showDetails 'fa-chevron-down' 'fa-chevron-right'}}\" />\n                  </b>\n                </div>\n                {{#if this.showDetails}}\n                  {{this.details}}\n                {{/if}}\n              {{/if}}\n            {{/if}}\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"testUrlModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-lg\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Test Pattern\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex form-group gap-1\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,4],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Resource name ([method] [url]). Example: GET https://foo.com\\\"],[24,4,\\\"text\\\"],[4,[38,5],[\\\"keyup\\\",[30,0,[\\\"onUpdateUrl\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"testUrl\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"urlError\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"Resource is not valid.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"response\\\"]],[[[1,\\\"            \\\"],[10,0],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"response\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"details\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"b\\\"],[24,0,\\\"cursor-pointer text-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,9],[[28,[37,10],[[30,0,[\\\"showDetails\\\"]]],null],[28,[37,11],[[30,0,[\\\"showDetails\\\"]]],null]],null]],null],[12],[1,\\\"\\\\n                  Details \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[[29,[\\\"fa \\\",[52,[30,0,[\\\"showDetails\\\"]],\\\"fa-chevron-down\\\",\\\"fa-chevron-right\\\"]]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDetails\\\"]],[[[1,\\\"                \\\"],[1,[30,0,[\\\"details\\\"]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]],null]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"input\\\",\\\"on\\\",\\\"if\\\",\\\"span\\\",\\\"b\\\",\\\"fn\\\",\\\"mut\\\",\\\"not\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/test-url-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  function combineMethodAndUrl(method, url) {\n    return url ? `${method ? method + ' ' : ''}${url}` : '';\n  }\n  function nthOcurrence(str, needle, nth) {\n    if (typeof str === 'string' && str.length > 0) {\n      for (let i = 0; i < str.length; i++) {\n        if (str.charAt(i) === needle) {\n          if (--nth === 0) {\n            return i;\n          }\n        }\n      }\n    }\n    return -1;\n  }\n  let TestUrlModalComponent = _exports.default = (_class = class TestUrlModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"testUrl\", _descriptor, this);\n      _initializerDefineProperty(this, \"response\", _descriptor2, this);\n      _initializerDefineProperty(this, \"details\", _descriptor3, this);\n      _initializerDefineProperty(this, \"urlError\", _descriptor4, this);\n    }\n    createToResourceName(parts, mapping, resourceNameIgnoreNonMatch, resultUrl, method) {\n      this.urlError = '';\n      if (resultUrl) {\n        let hasMatch = false;\n        let answer = '';\n        const regexInput = combineMethodAndUrl(method, resultUrl);\n        for (let i = 0; i < mapping.length; i++) {\n          const pattern = mapping[i].pattern;\n          const regex = _re2js.RE2JS.compile(pattern);\n          const matcher = regex.matcher(regexInput);\n          if (matcher.find()) {\n            hasMatch = true;\n            answer = mapping[i].result.replace(/\\$\\{(\\w+)\\}/g, (_, groupName) => {\n              try {\n                return matcher.namedGroups && matcher.group(groupName) !== undefined ? matcher.group(groupName) : '';\n              } catch (e) {\n                console.log(`Group ${groupName} does not exist`);\n                return false;\n              }\n            });\n            break;\n          }\n        }\n        if (mapping.length > 0 && !hasMatch && resourceNameIgnoreNonMatch) return null;\n        const response = hasMatch ? answer : combineMethodAndUrl(method, this.reducePathParts(resultUrl, parts));\n        return {\n          response,\n          hasMatch\n        };\n      }\n      return {\n        response: '',\n        hasMatch: false\n      };\n    }\n    reducePathParts(resultUrl, parts) {\n      if (resultUrl && resultUrl.indexOf('://') > 0) {\n        resultUrl = decodeURIComponent(resultUrl);\n        try {\n          const parsedUrl = new URL(resultUrl);\n          let pathname = parsedUrl.pathname;\n          const index = nthOcurrence(pathname, '/', parts + 1);\n          pathname = index === -1 ? pathname : pathname.substring(0, index) + '/...';\n          const protocol = parsedUrl.protocol;\n          const host = parsedUrl.host;\n          const pathnameResult = pathname;\n          const auth = parsedUrl.username && parsedUrl.password ? `${parsedUrl.username}:${parsedUrl.password}@` : '';\n          resultUrl = `${protocol}//${auth}${host}${pathnameResult}`;\n        } catch (error) {\n          this.urlError = error.message.includes('Invalid URL');\n        }\n      }\n      return resultUrl;\n    }\n    didInsert() {\n      const _this = this;\n      $('#testUrlModal').on('hidden.bs.modal', function () {\n        _this.args.closeModal();\n      });\n      $('#testUrlModal').modal('show');\n    }\n    onUpdateUrl() {\n      let result = '';\n      const match = this.testUrl.match(/^(\\w+)?\\s*(https?:\\/\\/\\S+)$/);\n      let method, url;\n      if (this.testUrl) {\n        if (match) {\n          method = match[1] || '';\n          url = match[2];\n        } else {\n          this.urlError = true;\n          return;\n        }\n      } else {\n        // no need for result to get populated\n        this.response = '';\n        this.details = '';\n        this.urlError = '';\n        return;\n      }\n      const response = this.createToResourceName(this.args.numResourceParts, this.args.resourceNameMappings, this.args.resourceNameIgnoreNonMatch, url, method).response;\n      result += `\n        <div><b>Result: </b>${_lib.default.htmlEncode(response)}</div>\n        <hr>\n      `;\n      let details = '';\n      this.args.resourceNameMappings.forEach(rnm => {\n        const innerResponse = this.createToResourceName(this.args.numResourceParts, [rnm], this.args.resourceNameIgnoreNonMatch, url, method);\n        details += `\n        <div><b>Pattern: </b>${_lib.default.htmlEncode(rnm.pattern)}</div>\n        <div><b>Resource Name: </b>${_lib.default.htmlEncode(rnm.result)}</div>\n        <div><b>Match: </b>${innerResponse.hasMatch}</div>\n        <div><b>Result: </b>${_lib.default.htmlEncode(innerResponse.response)}</div>\n        <hr>\n      `;\n      });\n      console.log(result);\n      this.response = (0, _template.htmlSafe)(result);\n      this.details = (0, _template.htmlSafe)(details);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"testUrl\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"response\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"details\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"urlError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateUrl\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TestUrlModalComponent);\n});","define(\"@testable/shared-ui/components/trace-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"traceModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Trace Details</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n  \n        <div class=\"modal-body\">\n          {{#if this.traceLoaded}}\n            <div class=\"row\">\n              <div class=\"col-md-6 col-sm-6 col-xs-12\">\n                <div class=\"panel-no-drag\">\n                  <div class=\"panel-heading\">\n                    <strong>Summary</strong>\n                  </div>\n                  <div class=\"panel-body wrapped-text\">\n                    <strong>Captured At:</strong> {{print-datetime this.trace.traceAt}}<br/>\n                    <strong>Region:</strong> {{this.trace.region.location.name}}<br/>\n                    <strong>Resource:</strong> {{this.trace.resource}}<br/>\n                    <strong>URL:</strong> {{this.trace.url}}<br/>\n                    <strong>Status Code:</strong> {{this.trace.status}}<br/>\n                    {{#if this.trace.statusMsg}}\n                      <strong>Status Message:</strong> {{this.trace.statusMsg}}<br/>\n                    {{/if}}\n                    <strong>Size:</strong> {{print-bytes this.trace.length}}<br/>\n                    {{#if this.trace.threadId}}\n                      <strong>Concurrent User:</strong> {{this.trace.threadId}}<br/>\n                    {{/if}}\n                    {{#if this.trace.iterationId}}\n                      <strong>Iteration:</strong> {{this.trace.iterationId}}<br/>\n                    {{/if}}\n                    {{#if this.trace.connectionId}}\n                      <strong>Connection:</strong> {{this.trace.connectionId}}<br/>\n                    {{/if}}\n                  </div>\n                </div>\n              </div>\n              <div class=\"col-md-6 col-sm-6 col-xs-12\">\n                <ResultMetrics @metrics={{this.trace.result.metrics}} @scriptType={{@scriptType}} @disableDrag={{true}} />\n              </div>\n            </div>\n            {{#if (gt this.trace.result.suiteResults.length 0)}}\n              <div class=\"row\">\n                <div class=\"col-md-12 col-sm-12 col-xs-12\">\n                  <SuiteResultsWidget @suiteResults={{this.trace.result.suiteResults}}\n                                      @hasDuration={{false}}\n                                      @collapsible={{false}}\n                                      @scriptType={{@scriptType}}\n                                      @suffix=\"TraceModal\"\n                                      @disableDrag={{true}} />\n                </div>\n              </div>\n            {{/if}}\n            <div class=\"row\">\n              <div class=\"col-md-12 col-sm-12 col-xs-12\">\n                <TraceTimeline @traceId={{this.trace.id}}\n                               @uuid={{@uuid}}\n                               @packetCount={{this.trace.packetCount}}\n                               @traceAt={{this.trace.traceAt}}\n                               @disableDrag={{true}} />\n              </div>\n            </div>\n          {{else}}\n            Loading trace information...\n          {{/if}}\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"traceModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Trace Details\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"traceLoaded\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"panel-no-drag\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Summary\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"panel-body wrapped-text\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Captured At:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,6],[[30,0,[\\\"trace\\\",\\\"traceAt\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Region:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"region\\\",\\\"location\\\",\\\"name\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Resource:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"resource\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"URL:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"url\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status Code:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"status\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"trace\\\",\\\"statusMsg\\\"]],[[[1,\\\"                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Status Message:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"statusMsg\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Size:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,8],[[30,0,[\\\"trace\\\",\\\"length\\\"]]],null]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"trace\\\",\\\"threadId\\\"]],[[[1,\\\"                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Concurrent User:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"threadId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"trace\\\",\\\"iterationId\\\"]],[[[1,\\\"                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Iteration:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"iterationId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"trace\\\",\\\"connectionId\\\"]],[[[1,\\\"                    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Connection:\\\"],[13],[1,\\\" \\\"],[1,[30,0,[\\\"trace\\\",\\\"connectionId\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-6 col-sm-6 col-xs-12\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,9],null,[[\\\"@metrics\\\",\\\"@scriptType\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"trace\\\",\\\"result\\\",\\\"metrics\\\"]],[30,1],true]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[30,0,[\\\"trace\\\",\\\"result\\\",\\\"suiteResults\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,11],null,[[\\\"@suiteResults\\\",\\\"@hasDuration\\\",\\\"@collapsible\\\",\\\"@scriptType\\\",\\\"@suffix\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"trace\\\",\\\"result\\\",\\\"suiteResults\\\"]],false,false,[30,1],\\\"TraceModal\\\",true]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,12],null,[[\\\"@traceId\\\",\\\"@uuid\\\",\\\"@packetCount\\\",\\\"@traceAt\\\",\\\"@disableDrag\\\"],[[30,0,[\\\"trace\\\",\\\"id\\\"]],[30,2],[30,0,[\\\"trace\\\",\\\"packetCount\\\"]],[30,0,[\\\"trace\\\",\\\"traceAt\\\"]],true]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          Loading trace information...\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@scriptType\\\",\\\"@uuid\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"strong\\\",\\\"print-datetime\\\",\\\"br\\\",\\\"print-bytes\\\",\\\"result-metrics\\\",\\\"gt\\\",\\\"suite-results-widget\\\",\\\"trace-timeline\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/trace-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let TraceModalComponent = _exports.default = (_class = class TraceModalComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"trace\", _descriptor, this);\n      _initializerDefineProperty(this, \"traceLoaded\", _descriptor2, this);\n      let uuid = this.args.uuid;\n      let traceId = this.args.traceId;\n      let getTrace = _.isString(uuid) ? _server.default.getTokenContent(uuid, {\n        traceId: traceId\n      }) : _server.default.getLoadTestExecutionTrace(traceId);\n      getTrace.then(results => {\n        this.trace = results;\n        this.traceLoaded = true;\n      });\n    }\n    didInsert() {\n      const _this = this;\n      $('#traceModal').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#traceModal').modal('show');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"trace\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"traceLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TraceModalComponent);\n});","define(\"@testable/shared-ui/components/trace-timeline-packet\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <li>\n    <div class=\"timeline-time\">\n      <span class=\"time m-t-10\">\n        {{#if (eq @packet.latency @packet.lastLatency)}}\n          {{@packet.latency}}ms\n        {{else}}\n          {{@packet.latency}}-{{@packet.lastLatency}}ms\n        {{/if}}\n      </span>\n  </div>\n    <div class=\"timeline-icon\">\n      <a href=\"javascript:\"></a>\n    </div>\n    <div class=\"timeline-body\">\n      <div class=\"timeline-header\">\n        <span class=\"username\">{{camel-to-title @packet.packetType}}</span>\n        {{#if (gt @packet.dataLength 0)}}\n          <a target=\"_blank\" {{on 'click' (fn @downloadPackets @packet.id)}} class=\"btn btn-icon btn-circle text-primary pull-right\" data-bs-toggle=\"tooltip\"\n             title=\"Download This Packet\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{/if}}\n      </div>\n      <div class=\"timeline-content wrapped-text\">\n        <div class=\"m-b-10\">\n          {{#if (gt @packet.processedHeaders.length 0)}}\n            <h4>Headers</h4>\n            {{#each @packet.processedHeaders as |header|}}\n              <strong>{{header.key}}: </strong>{{header.val}}<br/>\n            {{/each}}\n          {{/if}}\n        </div>\n        {{#if (or @packet.data (and @packet.bodyTooLarge (gt @packet.length 0)))}}\n          <h4>Content <span class=\"timeline-subtitle text-muted\">{{print-bytes @packet.length}}</span></h4>\n          {{#if (and @packet.data @packet.isImage)}}\n            <img src=\"data:{{@packet.contentType}};base64,{{@packet.data}}\" alt=\"\" role=\"none\">\n          {{else}}\n            <textarea readonly class=\"timeline-data\">{{if @packet.bodyTooLarge\n                                                          'Contents were too large to capture in a trace!'\n                                                          @packet.decodedData }}</textarea>\n          {{/if}}\n        {{/if}}\n      </div>\n    </div>\n  </li>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"li\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"timeline-time\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"time m-t-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[30,1,[\\\"latency\\\"]],[30,1,[\\\"lastLatency\\\"]]],null],[[[1,\\\"        \\\"],[1,[30,1,[\\\"latency\\\"]]],[1,\\\"ms\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[30,1,[\\\"latency\\\"]]],[1,\\\"-\\\"],[1,[30,1,[\\\"lastLatency\\\"]]],[1,\\\"ms\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"timeline-icon\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[14,6,\\\"javascript:\\\"],[12],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"timeline-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"timeline-header\\\"],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"username\\\"],[12],[1,[28,[35,6],[[30,1,[\\\"packetType\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,1,[\\\"dataLength\\\"]],0],null],[[[1,\\\"        \\\"],[11,3],[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"btn btn-icon btn-circle text-primary pull-right\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Download This Packet\\\"],[24,\\\"rel\\\",\\\"noreferrer noopener\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,2],[30,1,[\\\"id\\\"]]],null]],null],[12],[8,[39,10],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"timeline-content wrapped-text\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,1,[\\\"processedHeaders\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Headers\\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,13],[[28,[37,13],[[30,1,[\\\"processedHeaders\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"strong\\\"],[12],[1,[30,3,[\\\"key\\\"]]],[1,\\\": \\\"],[13],[1,[30,3,[\\\"val\\\"]]],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[3]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,1,[\\\"data\\\"]],[28,[37,17],[[30,1,[\\\"bodyTooLarge\\\"]],[28,[37,7],[[30,1,[\\\"length\\\"]],0],null]],null]],null],[[[1,\\\"        \\\"],[10,\\\"h4\\\"],[12],[1,\\\"Content \\\"],[10,1],[14,0,\\\"timeline-subtitle text-muted\\\"],[12],[1,[28,[35,18],[[30,1,[\\\"length\\\"]]],null]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,17],[[30,1,[\\\"data\\\"]],[30,1,[\\\"isImage\\\"]]],null],[[[1,\\\"          \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"data:\\\",[30,1,[\\\"contentType\\\"]],\\\";base64,\\\",[30,1,[\\\"data\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"textarea\\\"],[14,\\\"readonly\\\",\\\"\\\"],[14,0,\\\"timeline-data\\\"],[12],[1,[52,[30,1,[\\\"bodyTooLarge\\\"]],\\\"Contents were too large to capture in a trace!\\\",[30,1,[\\\"decodedData\\\"]]]],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@packet\\\",\\\"@downloadPackets\\\",\\\"header\\\"],[\\\"li\\\",\\\"div\\\",\\\"span\\\",\\\"if\\\",\\\"eq\\\",\\\"a\\\",\\\"camel-to-title\\\",\\\"gt\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"h4\\\",\\\"each\\\",\\\"-track-array\\\",\\\"strong\\\",\\\"br\\\",\\\"or\\\",\\\"and\\\",\\\"print-bytes\\\",\\\"img\\\",\\\"textarea\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/trace-timeline-packet.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"trace-timeline-packet\"));\n});","define(\"@testable/shared-ui/components/trace-timeline\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _trackedBuiltIns, _lib, _server, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"{{if @disableDrag 'panel-no-drag' 'panel block-sub-container'}} \">\n    <div class=\"panel-heading {{if @disableDrag '' 'block-sub-container-target'}}\">\n      <div class=\"panel-heading-btn\">\n        {{#if this.packetsUrl}}\n           <a target=\"_blank\" href=\"{{this.packetsUrl}}\" class=\"btn btn-sm btn-icon btn-circle text-primary\" data-bs-toggle=\"tooltip\"\n             title=\"Download All Packets\" rel=\"noreferrer noopener\"><Ui::Icon @icon=\"fa fa-download\" /></a>\n        {{/if}}\n      </div>\n      <strong>Timeline {{if @packetCount (concat '(' @packetCount ')')}}</strong>\n      {{#if @packetCount}}\n        <BsButtonGroup @value={{this.direction}} @type=\"radio\" class=\"m-l-10\" @onChange={{this.directionChanged}} as |bg|>\n          <bg.button @type=\"success width-100\" @value=\"asc\" @size=\"xs\">Ascending</bg.button>\n          <bg.button @type=\"success width-100\" @value=\"desc\" @size=\"xs\">Descending</bg.button>\n        </BsButtonGroup>\n      {{/if}}\n    </div>\n    <div class=\"panel-body\">\n      {{#if this.loadingPackets}}\n        Loading trace timeline...\n      {{else if this.frontPackets.length}}\n        <ul class=\"timeline\">\n          {{#each this.frontPackets as |packet|}}\n            <TraceTimelinePacket @packet={{packet}} @downloadPackets={{this.downloadPackets}}/>\n          {{/each}}\n          {{#if this.hasMorePackets}}\n            <li>\n              <div class=\"timeline-body\">\n                <div class=\"timeline-content\">\n                  <button type=\"button\" {{on 'click' this.loadMorePackets}} disabled={{this.loadingMorePackets}} class=\"btn btn-lg btn-primary\">\n                    {{#if this.loadingMorePackets}}\n                      Loading More Packets...\n                    {{else}}\n                      Load {{this.nextLoadSize}} More ({{this.remainingToLoad}} Remaining)\n                    {{/if}}\n                  </button>\n                </div>\n              </div>\n            </li>\n          {{/if}}\n          {{#each this.backPackets as |packet|}}\n            <TraceTimelinePacket @packet={{packet}} @downloadPackets={{this.downloadPackets}}/>\n          {{/each}}\n        </ul>\n      {{else}}\n        No data packets captured.\n      {{/if}}\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[30,1],\\\"panel-no-drag\\\",\\\"panel block-sub-container\\\"],\\\" \\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"panel-heading \\\",[52,[30,1],\\\"\\\",\\\"block-sub-container-target\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"packetsUrl\\\"]],[[[1,\\\"         \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"packetsUrl\\\"]]]]],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download All Packets\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[8,[39,3],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Timeline \\\"],[1,[52,[30,2],[28,[37,5],[\\\"(\\\",[30,2],\\\")\\\"],null]]],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"      \\\"],[8,[39,6],[[24,0,\\\"m-l-10\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"direction\\\"]],\\\"radio\\\",[30,0,[\\\"directionChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"asc\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Ascending\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success width-100\\\",\\\"desc\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Descending\\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingPackets\\\"]],[[[1,\\\"      Loading trace timeline...\\\\n\\\"]],[]],[[[41,[30,0,[\\\"frontPackets\\\",\\\"length\\\"]],[[[1,\\\"      \\\"],[10,\\\"ul\\\"],[14,0,\\\"timeline\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"frontPackets\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,10],null,[[\\\"@packet\\\",\\\"@downloadPackets\\\"],[[30,4],[30,0,[\\\"downloadPackets\\\"]]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[41,[30,0,[\\\"hasMorePackets\\\"]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"timeline-body\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"timeline-content\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"loadingMorePackets\\\"]]],[24,0,\\\"btn btn-lg btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"loadMorePackets\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loadingMorePackets\\\"]],[[[1,\\\"                    Loading More Packets...\\\\n\\\"]],[]],[[[1,\\\"                    Load \\\"],[1,[30,0,[\\\"nextLoadSize\\\"]]],[1,\\\" More (\\\"],[1,[30,0,[\\\"remainingToLoad\\\"]]],[1,\\\" Remaining)\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"backPackets\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[39,10],null,[[\\\"@packet\\\",\\\"@downloadPackets\\\"],[[30,5],[30,0,[\\\"downloadPackets\\\"]]]],null],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      No data packets captured.\\\\n    \\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@disableDrag\\\",\\\"@packetCount\\\",\\\"bg\\\",\\\"packet\\\",\\\"packet\\\"],[\\\"div\\\",\\\"if\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"strong\\\",\\\"concat\\\",\\\"bs-button-group\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"trace-timeline-packet\\\",\\\"li\\\",\\\"button\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/trace-timeline.hbs\",\n    \"isStrictMode\": false\n  });\n  function convertHeaders(headers) {\n    let results = [];\n    if (_.isString(headers)) {\n      const headersObj = JSON.parse(headers);\n      _.forEach(headersObj, (val, key) => {\n        results.push({\n          key: key,\n          val: val\n        });\n      });\n      results = _.sortBy(results, result => result.key.toLowerCase());\n    }\n    return results;\n  }\n  function getContentType(headers) {\n    const header = _.find(headers, header => {\n      return header.key.toLowerCase() === 'content-type';\n    });\n    return _.isUndefined(header) ? undefined : header.val;\n  }\n  function isImage(contentType) {\n    return _.isString(contentType) && contentType.indexOf('image/') === 0;\n  }\n  let TraceTimelineComponent = _exports.default = (_class = class TraceTimelineComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"frontPackets\", _descriptor, this);\n      _initializerDefineProperty(this, \"direction\", _descriptor2, this);\n      _initializerDefineProperty(this, \"backPackets\", _descriptor3, this);\n      _initializerDefineProperty(this, \"loadingPackets\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadingMorePackets\", _descriptor5, this);\n      this.initPackets();\n      (0, _observers.addObserver)(this, 'args.packets.[]', this.initPackets);\n    }\n    willDestroy() {\n      super.willDestroy();\n      (0, _observers.removeObserver)(this, 'args.packets.[]', this.initPackets);\n    }\n    get packetsUrl() {\n      const uuid = this.args.uuid;\n      const traceId = this.args.traceId;\n      if (!traceId) return null;\n      return this.args.uuid ? _lib.default.toUrl(`/public/${uuid}?traceId=${traceId}&packets=true&download=true`) : _lib.default.toUrl(`/execution-traces/${traceId}/packets.json`);\n    }\n    get loadedPacketCount() {\n      return (this.frontPackets?.length || 0) + (this.backPackets?.length || 0);\n    }\n    get hasMorePackets() {\n      const packetCount = this.args.packetCount || 0;\n      const loadedPacketCount = this.loadedPacketCount || 0;\n      return this.args.traceId && loadedPacketCount < packetCount;\n    }\n    get nextLoadSize() {\n      const packetCount = this.args.packetCount || 0;\n      const loadedPacketCount = this.loadedPacketCount || 0;\n      return Math.min(packetCount - loadedPacketCount, 5);\n    }\n    get remainingToLoad() {\n      const packetCount = this.args.packetCount || 0;\n      const loadedPacketCount = this.loadedPacketCount || 0;\n      return packetCount - loadedPacketCount;\n    }\n    directionChanged(newDirection) {\n      if (newDirection !== this.direction) {\n        this.direction = newDirection;\n        if (this.args.traceId) {\n          this.loadPackets();\n        } else {\n          this.frontPackets = new _trackedBuiltIns.TrackedArray(_.reverse([...this.frontPackets]));\n          this.updatePackets(this.frontPackets);\n        }\n      }\n    }\n    loadMorePackets() {\n      const frontPackets = this.frontPackets;\n      const frontPacketCount = this.frontPackets.length;\n      const nextLoadSize = this.nextLoadSize;\n      const desc = this.direction === 'desc';\n      this.loadingMorePackets = true;\n      this.getTracePackets(frontPacketCount, nextLoadSize, desc).then(nextPackets => {\n        frontPackets.push(...(nextPackets || []));\n        this.updatePackets(this.frontPackets);\n        this.loadingMorePackets = false;\n      }, () => {\n        this.loadingMorePackets = false;\n      });\n    }\n    downloadPackets(id) {\n      let url = _lib.default.toUrl(`/trace-packets/${id}/download`);\n      window.open(url, '_blank');\n    }\n    updatePackets(packets) {\n      const traceAt = moment(this.args.traceAt);\n      _.forEach(packets, packet => {\n        if (!packet.latency) {\n          packet.latency = moment(packet.packetAt).diff(traceAt);\n          packet.lastLatency = moment(packet.lastPacketAt).diff(traceAt);\n          if (_.isString(packet.headers) && packet.headers.length > 0) {\n            packet.processedHeaders = convertHeaders(packet.headers);\n            packet.contentType = getContentType(packet.processedHeaders);\n            packet.isImage = isImage(packet.contentType ? packet.contentType.trim() : null);\n          }\n          if (_.isString(packet.data) && !packet.isImage) {\n            try {\n              packet.decodedData = _lib.default.b64DecodeUnicode(packet.data);\n            } catch (err) {\n              packet.decodedData = '';\n            }\n          }\n        }\n      });\n    }\n    getTracePackets(offset, limit, desc) {\n      const traceId = this.args.traceId;\n      const uuid = this.args.uuid;\n      if (uuid) {\n        return _server.default.getTokenContent(uuid, `traceId=${traceId}&packets=true&offset=${offset}&limit=${limit}&desc=${desc}`);\n      } else {\n        return _server.default.getTracePackets(traceId, offset, limit, desc);\n      }\n    }\n    loadPackets() {\n      const packetCount = this.args.packetCount;\n      const desc = this.direction === 'desc';\n      if (packetCount <= 10) {\n        this.loadingPackets = true;\n        this.getTracePackets(0, 10, desc).then(packets => {\n          this.frontPackets = new _trackedBuiltIns.TrackedArray(packets || []);\n          this.updatePackets(this.frontPackets);\n          this.loadingPackets = false;\n        }, () => {\n          this.loadingPackets = false;\n        });\n      } else {\n        let tasks = [callback => {\n          this.getTracePackets(0, 5, desc).then(packets => {\n            callback(null, packets);\n          }, () => {\n            callback('Error');\n          });\n        }, callback => {\n          this.getTracePackets(0, 5, !desc).then(packets => {\n            callback(null, packets);\n          }, () => {\n            callback('Error');\n          });\n        }];\n        async.parallel(tasks, (err, results) => {\n          if (results) {\n            this.frontPackets = new _trackedBuiltIns.TrackedArray(results[0] || []);\n            this.updatePackets(this.frontPackets);\n            this.backPackets = new _trackedBuiltIns.TrackedArray(_.reverse(results[1] || []));\n            this.updatePackets(this.backPackets);\n          }\n        });\n      }\n    }\n    initPackets() {\n      const traceId = this.args.traceId;\n      this.direction = 'asc';\n      if (traceId) {\n        this.loadPackets();\n      } else {\n        this.frontPackets = new _trackedBuiltIns.TrackedArray(this.args.packets || []);\n        this.updatePackets(this.frontPackets);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"frontPackets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"direction\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"backPackets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"loadingPackets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadingMorePackets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"directionChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"directionChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMorePackets\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMorePackets\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadPackets\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadPackets\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TraceTimelineComponent);\n});","define(\"@testable/shared-ui/components/traces-grid\", [\"exports\", \"@ember/object/observers\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/components/data-grid\", \"@testable/shared-ui/utils/formatters\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _observers, _service, _runloop, _dataGrid, _formatters, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/observers\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/components/data-grid\",0,\"@testable/shared-ui/utils/formatters\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let TracesGrid = _exports.default = (_class = class TracesGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.selectedResource', this.onFilterChange);\n      (0, _observers.addObserver)(this, 'args.traceFilter', this.onFilterChange);\n      (0, _observers.addObserver)(this, 'args.traces', this.onFilterChange);\n      _lib.default.observeKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onFilterChange);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.selectedResource', this.onFilterChange);\n      (0, _observers.removeObserver)(this, 'args.traceFilter', this.onFilterChange);\n      (0, _observers.removeObserver)(this, 'args.traces', this.onFilterChange);\n      _lib.default.unobserveKeys(this, ['zoomInfo.isAll', 'zoomInfo.startTimestamp', 'zoomInfo.endTimestamp'], this.onFilterChange);\n    }\n    onFilterChange() {\n      (0, _runloop.once)(this, 'refreshTable');\n    }\n    get showAssertions() {\n      return this.args.scriptType === 'JMeter';\n    }\n    getColumns() {\n      const isPrint = this.args.isPrint;\n      const columns = [];\n      if (!isPrint) {\n        columns.push({\n          data: 'id',\n          width: '10px',\n          sortable: false,\n          render: data => {\n            return '<a data-id=\"' + data + '\"><i class=\"fa fa-search\"></i></a>';\n          }\n        });\n      }\n      columns.push({\n        title: 'Resource',\n        data: 'resource',\n        width: '200px',\n        render: (data, type, full) => {\n          if (type === 'display') {\n            return '<span class=\"truncate\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"' + full.url + '\">' + data + '</span>';\n          } else {\n            return data;\n          }\n        }\n      }, {\n        title: 'Timestamp',\n        data: 'traceAt',\n        width: '120px',\n        render: (data, type) => {\n          return type === 'display' ? _formatters.default.timestamp(data) : data ? data.valueOf() : 0;\n        }\n      }, {\n        title: 'Status',\n        data: 'status',\n        width: '60px'\n      }, {\n        title: 'P/F',\n        data: 'outcome',\n        width: '40px',\n        render: (data, type) => {\n          if (type === 'display') {\n            if (_.isBoolean(data)) {\n              return '<i class=\"fa ' + (data ? 'fa-check-circle' : 'fa-times-circle') + '\"></i>';\n            }\n            return '';\n          } else {\n            return data;\n          }\n        }\n      });\n      if (this.showAssertions) {\n        columns.push({\n          title: 'Asrtns',\n          data: 'assertions',\n          width: '60px'\n        });\n      }\n      columns.push({\n        title: 'Response Time',\n        data: 'latency',\n        width: '60px',\n        render: (data, type) => {\n          return type === 'display' ? data >= 0 ? _formatters.default.milliseconds(data) : '-' : data;\n        }\n      }, {\n        title: 'Size',\n        data: 'size',\n        width: '50px',\n        render: (data, type) => {\n          return type === 'display' ? _formatters.default.bytes(data) : data;\n        }\n      });\n      if (this.args.isAll) {\n        columns.push({\n          title: 'Region',\n          data: 'region',\n          width: '100px'\n        });\n      }\n      return columns;\n    }\n    toRecord(trace) {\n      const executionRegion = _.find(this.args.overallModel.regions, executionRegion => {\n        return executionRegion && executionRegion.region && executionRegion.region.id === trace.regionId;\n      });\n      return {\n        id: trace.id,\n        resource: _.isEmpty(trace.resource) ? '' : _lib.default.htmlEncode(trace.resource),\n        url: _.isEmpty(trace.url) ? '' : _lib.default.htmlEncode(trace.url),\n        traceAt: moment(trace.traceAt),\n        status: trace.status || '-',\n        size: trace.length,\n        latency: _.isNumber(trace.latency) ? trace.latency : -1,\n        region: executionRegion ? executionRegion.region.description : '-',\n        outcome: trace.success,\n        assertions: trace.assertionsPassed > 0 || trace.assertionsFailed > 0 ? (trace.assertionsPassed || 0) + ' / ' + ((trace.assertionsPassed || 0) + (trace.assertionsFailed || 0)) : '-'\n      };\n    }\n    getInitialOrder() {\n      return [[this.args.isPrint ? 1 : 2, 'asc']];\n    }\n    createDataSource() {\n      const self = this;\n      const selectedResource = this.args.selectedResource;\n      const traces = _.filter(this.args.model.traces, trace => {\n        return _loadTest.default.isTraceRelevant(trace, this.zoomInfo, selectedResource);\n      });\n      let answer = _.map(traces, trace => {\n        return self.toRecord(trace);\n      });\n      if (this.args.traceFilter === 'errors') {\n        answer = _.filter(answer, record => {\n          return !record.outcome;\n        });\n      }\n      return answer;\n    }\n    updateDataSource(updates) {\n      const self = this;\n      const selectedResource = this.args.selectedResource;\n      const applicableUpdates = _.filter(updates, update => {\n        return _loadTest.default.isTraceRelevant(update.trace, this.zoomInfo, selectedResource);\n      });\n      const table = $('#' + this.args.id).DataTable();\n      _.forEach(applicableUpdates, update => {\n        if (update && update.action) {\n          switch (update.action) {\n            case 'Insert':\n            case 'Update':\n              let record = self.toRecord(update.trace);\n              let row = table.row('#' + record.id);\n              if (_.isEmpty(row)) {\n                table.row.add(record);\n              } else {\n                let data = row.data();\n                if (!_.isEqual(data, record)) {\n                  row.data(record);\n                }\n              }\n              break;\n            case 'Delete':\n              table.row('#' + update.trace.id).remove();\n              break;\n          }\n        }\n      });\n      table.draw(false);\n    }\n    initTable() {\n      let _this = this;\n      $(\"#\" + this.args.id).on(\"dblclick\", \"tr\", function () {\n        _this.args.dblClick(Number($(this).attr('id')));\n      });\n      $(\"#\" + this.args.id).on(\"click\", \"a\", function () {\n        _this.args.dblClick(Number($(this).attr('data-id')));\n      });\n    }\n    addTableOptions(options) {\n      options.autoWidth = false;\n      options.language = {\n        emptyTable: \"No traces yet.\"\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/components/ui/ace-editor\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"{{@id}}_wrapper\" {{did-insert this.didInsert}}>\n    <div id={{@id}} style={{html-safe this.style}}></div>\n    <div id=\"{{@id}}_dragbar\" class=\"{{if @resizeAble 'ace_editor_dragbar'}}\"></div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,1,[29,[[30,1],\\\"_wrapper\\\"]]],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[30,1]],[15,5,[28,[37,2],[[30,0,[\\\"style\\\"]]],null]],[12],[13],[1,\\\"\\\\n  \\\"],[10,0],[15,1,[29,[[30,1],\\\"_dragbar\\\"]]],[15,0,[29,[[52,[30,2],\\\"ace_editor_dragbar\\\"]]]],[12],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\",\\\"@resizeAble\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"html-safe\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/ace-editor.hbs\",\n    \"isStrictMode\": false\n  });\n  let AceEditorComponent = _exports.default = (_class = class AceEditorComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"currentTimeout\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.mode', this.modeUpdated);\n      (0, _observers.addObserver)(this, 'args.wrap', this.wrapUpdated);\n      (0, _observers.addObserver)(this, 'args.readonly', this.readonlyUpdated);\n      (0, _observers.addObserver)(this, 'args.code', this.codeUpdated);\n    }\n    willDestroy() {\n      document.removeEventListener('mouseup', this.action_mouseup);\n      document.removeEventListener('mousedown', this.action_mousedown);\n      document.removeEventListener('mousemove', this.action_document_mousemove);\n      (0, _observers.removeObserver)(this, 'args.mode', this.modeUpdated);\n      (0, _observers.removeObserver)(this, 'args.wrap', this.wrapUpdated);\n      (0, _observers.removeObserver)(this, 'args.readonly', this.readonlyUpdated);\n      (0, _observers.removeObserver)(this, 'args.code', this.codeUpdated);\n    }\n    get style() {\n      if (this.args.style) return this.args.style;\n      let height = this.args.height;\n      if (_.isUndefined(height)) {\n        height = 340;\n      }\n      return \"overflow-x: auto; height: \" + height + \"px;\";\n    }\n    modeUpdated() {\n      let editor = ace.edit(this.args.id);\n      editor.getSession().setMode(this.args.mode);\n    }\n    wrapUpdated() {\n      let editor = ace.edit(this.args.id);\n      editor.getSession().setUseWrapMode(this.args.wrap || false);\n    }\n    readonlyUpdated() {\n      let editor = ace.edit(this.args.id);\n      if (_.isBoolean(this.args.readonly)) {\n        editor.setReadOnly(this.args.readonly);\n      }\n    }\n    codeUpdated() {\n      let editor = ace.edit(this.args.id);\n      let code = _.isString(this.args.code) ? this.args.code : \"\";\n      if (editor.getValue() !== code) {\n        editor.setValue(code, editor.getCursorPosition());\n      }\n    }\n    didInsert() {\n      let editor = ace.edit(this.args.id);\n      let theme = this.args.theme || 'chrome';\n      editor.$blockScrolling = Infinity;\n      editor.setTheme(\"ace/theme/\" + theme);\n      editor.getSession().setUseWrapMode(this.args.wrap || false);\n      editor.getSession().setTabSize(2);\n      editor.setShowPrintMargin(false);\n      editor.getSession().setMode(this.args.mode);\n      if (_.isBoolean(this.args.readonly)) {\n        editor.setReadOnly(this.args.readonly);\n      }\n      const editorInstance = this.args.editorInstance;\n      editor.setValue(_.isString(this.args.code) ? this.args.code : \"\", 1);\n      editor.getSession().on('change', e => {\n        if (editor.getReadOnly()) {\n          return;\n        }\n        if (this.currentTimeout > -1) {\n          clearTimeout(this.currentTimeout);\n        }\n        if (this.args.codeChanged) {\n          this.args.codeChanged(this.args.type, editor.getValue());\n        }\n        if (this.args.codeChangedQuiet) {\n          this.currentTimeout = setTimeout(() => {\n            this.args.codeChangedQuiet(this.args.type, editor.getValue(), editorInstance);\n          }, 1000);\n        }\n      });\n      let placeholderText = this.args.placeholderText;\n      if (placeholderText) {\n        this.updatePlaceholder();\n        editor.on('input', this.updatePlaceholder.bind(this));\n      }\n      if (this.args.resizeAble) this.makeAceEditorResizable();\n    }\n    updatePlaceholder() {\n      let editor = ace.edit(this.args.id);\n      let placeholderText = this.args.placeholderText;\n      let shouldShow = !editor.session.getValue().length;\n      let node = editor.renderer.emptyMessageNode;\n      if (!shouldShow && node) {\n        editor.renderer.scroller.removeChild(editor.renderer.emptyMessageNode);\n        editor.renderer.emptyMessageNode = null;\n      } else if (shouldShow && !node) {\n        node = editor.renderer.emptyMessageNode = document.createElement(\"div\");\n        node.innerHTML = placeholderText;\n        node.className = \"ace_invisible ace_emptyMessage\";\n        node.style.padding = \"0 9px\";\n        editor.renderer.scroller.appendChild(node);\n      }\n    }\n    makeAceEditorResizable() {\n      let id_editor = this.args.id;\n      let id_dragbar = id_editor + '_dragbar';\n      let id_wrapper = id_editor + '_wrapper';\n      let offset = 0;\n      let editor = ace.edit(id_editor);\n      this.draggingAceEditor = false;\n      const action_mousedown = e => {\n        e.preventDefault();\n        this.draggingAceEditor = true;\n        offset = e.clientY;\n        document.getElementById(id_editor).style.opacity = 0.5;\n        document.addEventListener(\"mousemove\", action_document_mousemove);\n      };\n      const action_document_mousemove = e => {\n        let _editor = document.getElementById(id_editor);\n        let rect = _editor.getBoundingClientRect();\n        let rsl = {\n          top: rect.top + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\n        };\n        let top_offset = rsl.top - offset;\n        let actualY = e.pageY - offset;\n\n        // editor height\n        let eheight = actualY - top_offset;\n\n        // Set height on actual editor element, and opacity back to 1\n        _editor.style.height = eheight + \"px\";\n        _editor.style.opacity = 0.5;\n\n        // Trigger ace editor resize()\n        editor.resize();\n        document.getElementById(id_wrapper).style.height = eheight + 'px';\n        document.getElementById(id_dragbar).style.opacity = 0.5;\n      };\n      document.getElementById(id_dragbar).addEventListener(\"mousedown\", action_mousedown);\n      const action_mouseup = e => {\n        if (this.draggingAceEditor) {\n          document.getElementById(id_editor).style.opacity = 1;\n          document.removeEventListener(\"mousemove\", action_document_mousemove);\n          document.getElementById(id_dragbar).style.opacity = 1;\n          this.draggingAceEditor = false;\n        }\n      };\n      document.addEventListener(\"mouseup\", action_mouseup);\n      this.action_mouseup = action_mouseup;\n      this.action_mousedown = action_mousedown;\n      this.action_document_mousemove = action_document_mousemove;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentTimeout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AceEditorComponent);\n});","define(\"@testable/shared-ui/components/ui/bs-datetimepicker\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@eonasdan/tempus-dominus\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _tempusDominus, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@eonasdan/tempus-dominus\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class={{or @class \"form-group\"}} >\n    <div class=\"input-group date\" id='dp{{this.id}}' data-bs-target-input=\"nearest\" \n      {{did-insert this.didInsert}}\n      {{did-update this.updateRestrictions @minDate @maxDate}}\n    >\n      <input type=\"text\" class=\"form-control datetimepicker-input\" data-bs-target=\"#dp{{this.id}}\" placeholder={{@placeholder}}/>\n      <div class=\"input-group-append\" data-bs-target=\"#dp{{this.id}}\" data-bs-toggle=\"datetimepicker\">\n        <div class=\"input-group-text\" >\n          <Ui::Icon @icon=\"fa fa-calendar-alt\" />\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[28,[37,1],[[30,1],\\\"form-group\\\"],null]],[12],[1,\\\"\\\\n  \\\"],[11,0],[24,0,\\\"input-group date\\\"],[16,1,[29,[\\\"dp\\\",[30,0,[\\\"id\\\"]]]]],[24,\\\"data-bs-target-input\\\",\\\"nearest\\\"],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,3],[[30,0,[\\\"updateRestrictions\\\"]],[30,2],[30,3]],null],[12],[1,\\\"\\\\n    \\\"],[10,\\\"input\\\"],[14,0,\\\"form-control datetimepicker-input\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"id\\\"]]]]],[15,\\\"placeholder\\\",[30,4]],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"input-group-append\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"id\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"datetimepicker\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group-text\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-calendar-alt\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@class\\\",\\\"@minDate\\\",\\\"@maxDate\\\",\\\"@placeholder\\\"],[\\\"div\\\",\\\"or\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"input\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/bs-datetimepicker.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiBsDatetimepickerComponent = _exports.default = (_class = class UiBsDatetimepickerComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _defineProperty(this, \"picker\", null);\n    }\n    get dateFormat() {\n      return this.args.format || 'yyyy-MM-dd HH:mm'; // note: moment supported format is `yyyy-MM-DD HH:mm` with capital D's\n    }\n\n    // Bounds often arrive after the picker is built, for example a From/To pair\n    // where choosing one date limits the other, so they are reapplied on change.\n    updateRestrictions() {\n      if (!this.picker) return;\n      const toPickerDate = d => d ? this.picker.dates.parseInput(moment(d).toDate()) : undefined;\n      const minDate = toPickerDate(this.args.minDate);\n      const maxDate = toPickerDate(this.args.maxDate);\n\n      // The picker throws when the two bounds cross, which a caller can hit\n      // transiently while the user is still correcting a range.\n      if (minDate && maxDate && minDate.isAfter(maxDate)) return;\n      this.picker.updateOptions({\n        restrictions: {\n          minDate,\n          maxDate\n        }\n      });\n    }\n    didInsert() {\n      const {\n        args\n      } = this;\n      const elementId = `dp${this.id}`;\n      const element = document.getElementById(elementId);\n\n      // Bounds are applied after construction, see updateRestrictions below.\n      const restrictions = {};\n      const display = {\n        icons: {\n          type: 'icons',\n          time: 'fa fa-clock',\n          date: 'fa fa-calendar-alt',\n          up: 'fa fa-chevron-up',\n          down: 'fa fa-chevron-down',\n          previous: 'fas fa-chevron-left',\n          next: 'fas fa-chevron-right',\n          today: 'fas fa-calendar-check',\n          clear: 'fas fa-trash',\n          close: 'fas fa-xmark'\n        },\n        theme: 'light'\n      };\n      const picker = new _tempusDominus.TempusDominus(element, {\n        display,\n        restrictions,\n        localization: {\n          format: this.dateFormat,\n          locale: 'en-GB'\n        }\n      });\n      this.picker = picker;\n      if (this.args.format) {\n        picker.dates.formatInput = date => moment(date).format('yyyy-MM-DD HH:mm');\n      }\n      this.updateRestrictions();\n      if (this.args.date) {\n        const parsedDate = picker.dates.parseInput(moment(this.args.date).toDate());\n        picker.dates.setValue(parsedDate);\n      }\n      if (this.args.onHide) {\n        element.addEventListener('hide.td', e => {\n          this.args.onHide(e.detail.date);\n        });\n      }\n      if (this.args.onUpdate) {\n        element.addEventListener('change.td', e => {\n          this.args.onUpdate(e.detail.date);\n        });\n      }\n      const input = element.querySelector('input');\n      input.addEventListener('input', e => {\n        const inputValue = moment(e.target.value, this.dateFormat, true);\n        if (inputValue.isValid()) {\n          const parsedDate = picker.dates.parseInput(inputValue.toDate());\n          picker.dates.setValue(parsedDate);\n          if (!picker.display._isVisible) {\n            this.args.onHide(parsedDate);\n          }\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _emberUuid.v4)();\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateRestrictions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRestrictions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiBsDatetimepickerComponent);\n});","define(\"@testable/shared-ui/components/ui/cookie-policy-content\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{page-title \"Cookie Policy - Testable\"}}\n  \n  <div class=\"page-without-sidebar landing-page\">\n    {{!-- begin #privacyPolicy --}}\n    <div id=\"privacyPolicy\" class=\"content\" data-scrollview=\"true\">\n      {{!-- begin container --}}\n      <div class=\"container\" data-bs-animation=\"true\" data-bs-animation-type=\"fadeInDown\">\n        <h1 class=\"content-title\">Cookies Policy</h1>\n        <article class='document-article'>\n          <p>Last Updated On 30-May-2022</p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>What are cookies?</h3>\n          <p> This Cookie Policy explains what cookies are and how we use them, the types of cookies we\n            use i.e, the information we collect using cookies and how that information is used, and how to manage the cookie settings.\n  \n          </p>\n          <p>Cookies are small text files that are used to store small pieces of information. They are stored on your device when the website is loaded on your browser. These cookies help us make the website function properly, make it more secure, provide better user experience, and understand how the website performs and to analyze what works and where it needs improvement.</p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>How do we use cookies?</h3>\n          <p>  As most of the online services, our website uses first-party and third-party cookies for several purposes. First-party cookies are mostly necessary for the website to function the right way, and they do not collect any of your personally identifiable data.</p>\n          <p>The third-party cookies used on our website are mainly for understanding how the website performs, how you interact with our website, keeping our services secure, providing advertisements that are relevant to you, and all in all providing you with a better and improved user experience and help speed up your future interactions with our website.</p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>Manage cookie preferences</h3>\n          <p><a class=\"cky-btn cky-btn-accept cky-banner-element\">Cookie Settings</a></p>\n  \n          <p>You can change your cookie preferences any time by clicking the above button. This will let you revisit the cookie consent banner and change your preferences or withdraw your consent right away. </p>\n          <p>In addition to this, different browsers provide different methods to block and delete cookies used by websites. You can change the settings of your browser to block/delete the cookies. Listed below are the links to the support documents on how to manage and delete cookies from the major web browsers.</p>\n          <p>Chrome: <a href=\"https://support.google.com/accounts/answer/32050\" target=\"_blank\">https://support.google.com/accounts/answer/32050</a></p>\n          <p>Safari: <a href=\"https://support.apple.com/en-in/guide/safari/sfri11471/mac\" target=\"_blank\">https://support.apple.com/en-in/guide/safari/sfri11471/mac</a></p>\n          <p>Firefox: <a href=\"https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US\" target=\"_blank\">https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US</a></p>\n          <p>Internet Explorer: <a href=\"https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\" target=\"_blank\">https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc</a></p>\n          <p>If you are using any other web browser, please visit your browser's official support documents.</p>\n        </article>\n        <p>If you have any questions about this Cookies Policy, please <a href=\"mailto:support@testable.io\">contact\n            us.</a></p>\n  \n      </div>\n      {{!-- end container --}}\n    </div>\n    {{!-- end #privacyPolicy --}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[\\\"Cookie Policy - Testable\\\"],null]],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"page-without-sidebar landing-page\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[10,0],[14,1,\\\"privacyPolicy\\\"],[14,0,\\\"content\\\"],[14,\\\"data-scrollview\\\",\\\"true\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[14,0,\\\"container\\\"],[14,\\\"data-bs-animation\\\",\\\"true\\\"],[14,\\\"data-bs-animation-type\\\",\\\"fadeInDown\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h1\\\"],[14,0,\\\"content-title\\\"],[12],[1,\\\"Cookies Policy\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Last Updated On 30-May-2022\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"What are cookies?\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\" This Cookie Policy explains what cookies are and how we use them, the types of cookies we\\\\n          use i.e, the information we collect using cookies and how that information is used, and how to manage the cookie settings.\\\\n\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Cookies are small text files that are used to store small pieces of information. They are stored on your device when the website is loaded on your browser. These cookies help us make the website function properly, make it more secure, provide better user experience, and understand how the website performs and to analyze what works and where it needs improvement.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"How do we use cookies?\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"  As most of the online services, our website uses first-party and third-party cookies for several purposes. First-party cookies are mostly necessary for the website to function the right way, and they do not collect any of your personally identifiable data.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"The third-party cookies used on our website are mainly for understanding how the website performs, how you interact with our website, keeping our services secure, providing advertisements that are relevant to you, and all in all providing you with a better and improved user experience and help speed up your future interactions with our website.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Manage cookie preferences\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[10,3],[14,0,\\\"cky-btn cky-btn-accept cky-banner-element\\\"],[12],[1,\\\"Cookie Settings\\\"],[13],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"You can change your cookie preferences any time by clicking the above button. This will let you revisit the cookie consent banner and change your preferences or withdraw your consent right away. \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"In addition to this, different browsers provide different methods to block and delete cookies used by websites. You can change the settings of your browser to block/delete the cookies. Listed below are the links to the support documents on how to manage and delete cookies from the major web browsers.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Chrome: \\\"],[10,3],[14,6,\\\"https://support.google.com/accounts/answer/32050\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"https://support.google.com/accounts/answer/32050\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Safari: \\\"],[10,3],[14,6,\\\"https://support.apple.com/en-in/guide/safari/sfri11471/mac\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"https://support.apple.com/en-in/guide/safari/sfri11471/mac\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Firefox: \\\"],[10,3],[14,6,\\\"https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox?redirectslug=delete-cookies-remove-info-websites-stored&redirectlocale=en-US\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Internet Explorer: \\\"],[10,3],[14,6,\\\"https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"https://support.microsoft.com/en-us/topic/how-to-delete-cookie-files-in-internet-explorer-bca9446f-d873-78de-77ba-d42645fa52fc\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"If you are using any other web browser, please visit your browser's official support documents.\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"If you have any questions about this Cookies Policy, please \\\"],[10,3],[14,6,\\\"mailto:support@testable.io\\\"],[12],[1,\\\"contact\\\\n          us.\\\"],[13],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"page-title\\\",\\\"div\\\",\\\"h1\\\",\\\"article\\\",\\\"p\\\",\\\"h3\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/cookie-policy-content.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cookie-policy-content\"));\n});","define(\"@testable/shared-ui/components/ui/copy-text\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"clipboard\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _clipboard, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"clipboard\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <button\n    type=\"button\"\n    class=\"btn clipboard\"\n    data-bs-toggle=\"tooltip\"\n    title={{@title}}\n    data-bs-placement={{this.placement}}\n    data-bs-trigger={{this.trigger}}\n    data-clipboard-target={{this.target}}\n    data-clipboard-text={{@text}}\n    {{did-insert this.setupClipboard}}\n    ...attributes>\n    <span class=\"fa fa-copy {{if @lgIcon \"fa-lg\"}}\"></span>\n  </button>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"button\\\"],[24,4,\\\"button\\\"],[24,0,\\\"btn clipboard\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[16,\\\"title\\\",[30,1]],[16,\\\"data-bs-placement\\\",[30,0,[\\\"placement\\\"]]],[16,\\\"data-bs-trigger\\\",[30,0,[\\\"trigger\\\"]]],[16,\\\"data-clipboard-target\\\",[30,0,[\\\"target\\\"]]],[16,\\\"data-clipboard-text\\\",[30,2]],[17,3],[4,[38,1],[[30,0,[\\\"setupClipboard\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,1],[15,0,[29,[\\\"fa fa-copy \\\",[52,[30,4],\\\"fa-lg\\\"]]]],[12],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@title\\\",\\\"@text\\\",\\\"&attrs\\\",\\\"@lgIcon\\\"],[\\\"button\\\",\\\"did-insert\\\",\\\"span\\\",\\\"if\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/copy-text.hbs\",\n    \"isStrictMode\": false\n  });\n  let CopyButtonComponent = _exports.default = (_class = class CopyButtonComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"clipboard\", null);\n      _initializerDefineProperty(this, \"trigger\", _descriptor, this);\n      _initializerDefineProperty(this, \"target\", _descriptor2, this);\n      _initializerDefineProperty(this, \"placement\", _descriptor3, this);\n    }\n    setupClipboard(element) {\n      this.clipboard = new _clipboard.default(element, this.target ? {} : {\n        text: () => this.args.text\n      });\n    }\n    willDestroy() {\n      super.willDestroy();\n      if (this.clipboard) {\n        this.clipboard.destroy();\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"trigger\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.trigger || 'hover';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"target\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.target || '';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"placement\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.placement || 'right';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setupClipboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setupClipboard\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CopyButtonComponent);\n});","define(\"@testable/shared-ui/components/ui/date-range-picker\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"ember-uuid\", \"@eonasdan/tempus-dominus\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _emberUuid, _tempusDominus, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@eonasdan/tempus-dominus\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"date-range-picker {{@class}}\" {{did-insert this.didInsert}}>\n    <div class=\"row g-3\">\n      <div class=\"col-md-6\">\n        <label for=\"start-input-{{this.startId}}\" class=\"form-label\">{{or @startLabel \"From\"}}</label>\n        <div class=\"input-group\" id=\"dp{{this.startId}}\" data-bs-target-input=\"nearest\">\n          <input\n            id=\"start-input-{{this.startId}}\"\n            type=\"text\"\n            class=\"form-control datetimepicker-input\"\n            data-bs-target=\"#dp{{this.startId}}\"\n            placeholder=\"Select start date\"\n          />\n          <span\n            class=\"input-group-addon\"\n            type=\"button\"\n            data-bs-target=\"#dp{{this.startId}}\"\n            data-bs-toggle=\"datetimepicker\"\n          >\n            <Ui::Icon @icon=\"fa fa-calendar-alt\" />\n          </span>\n        </div>\n      </div>\n      <div class=\"col-md-6\">\n        <label for=\"end-input-{{this.endId}}\" class=\"form-label\">{{or @endLabel \"To\"}}</label>\n        <div class=\"input-group\" id=\"dp{{this.endId}}\" data-bs-target-input=\"nearest\">\n          <input\n            id=\"end-input-{{this.endId}}\"\n            type=\"text\"\n            class=\"form-control datetimepicker-input\"\n            data-bs-target=\"#dp{{this.endId}}\"\n            placeholder=\"Select end date\"\n          />\n          <span\n            class=\"input-group-addon\"\n            type=\"button\"\n            data-bs-target=\"#dp{{this.endId}}\"\n            data-bs-toggle=\"datetimepicker\"\n          >\n            <Ui::Icon @icon=\"fa fa-calendar-alt\" />\n          </span>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"date-range-picker \\\",[30,1]]]],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"row g-3\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-6\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[\\\"start-input-\\\",[30,0,[\\\"startId\\\"]]]]],[14,0,\\\"form-label\\\"],[12],[1,[28,[35,3],[[30,2],\\\"From\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[15,1,[29,[\\\"dp\\\",[30,0,[\\\"startId\\\"]]]]],[14,\\\"data-bs-target-input\\\",\\\"nearest\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"input\\\"],[15,1,[29,[\\\"start-input-\\\",[30,0,[\\\"startId\\\"]]]]],[14,0,\\\"form-control datetimepicker-input\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"startId\\\"]]]]],[14,\\\"placeholder\\\",\\\"Select start date\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"startId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"datetimepicker\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-calendar-alt\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"col-md-6\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[\\\"end-input-\\\",[30,0,[\\\"endId\\\"]]]]],[14,0,\\\"form-label\\\"],[12],[1,[28,[35,3],[[30,3],\\\"To\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"input-group\\\"],[15,1,[29,[\\\"dp\\\",[30,0,[\\\"endId\\\"]]]]],[14,\\\"data-bs-target-input\\\",\\\"nearest\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"input\\\"],[15,1,[29,[\\\"end-input-\\\",[30,0,[\\\"endId\\\"]]]]],[14,0,\\\"form-control datetimepicker-input\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"endId\\\"]]]]],[14,\\\"placeholder\\\",\\\"Select end date\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"input-group-addon\\\"],[15,\\\"data-bs-target\\\",[29,[\\\"#dp\\\",[30,0,[\\\"endId\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"datetimepicker\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,6],null,[[\\\"@icon\\\"],[\\\"fa fa-calendar-alt\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@class\\\",\\\"@startLabel\\\",\\\"@endLabel\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"label\\\",\\\"or\\\",\\\"input\\\",\\\"span\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/date-range-picker.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiDateRangePickerComponent = _exports.default = (_class = class UiDateRangePickerComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"startId\", _descriptor, this);\n      _initializerDefineProperty(this, \"endId\", _descriptor2, this);\n      _initializerDefineProperty(this, \"startDate\", _descriptor3, this);\n      _initializerDefineProperty(this, \"endDate\", _descriptor4, this);\n    }\n    get dateFormat() {\n      return this.args.format || 'yyyy-MM-dd HH:mm';\n    }\n    get theme() {\n      return this.args.theme || 'light';\n    }\n    didInsert() {\n      if (this.args.startDate) {\n        this.startDate = new Date(this.args.startDate);\n      }\n      if (this.args.endDate) {\n        this.endDate = new Date(this.args.endDate);\n      }\n      this.initializePicker('start');\n      this.initializePicker('end');\n    }\n    initializePicker(type) {\n      const elementId = type === 'start' ? `dp${this.startId}` : `dp${this.endId}`;\n      const element = document.getElementById(elementId);\n      if (!element) return;\n      const restrictions = {};\n      if (this.args.minDate) restrictions.minDate = this.args.minDate;\n      if (this.args.maxDate) restrictions.maxDate = this.args.maxDate;\n      const display = {\n        icons: {\n          type: 'icons',\n          time: 'fa fa-clock',\n          date: 'fa fa-calendar-alt',\n          up: 'fa fa-chevron-up',\n          down: 'fa fa-chevron-down',\n          previous: 'fas fa-chevron-left',\n          next: 'fas fa-chevron-right',\n          today: 'fas fa-calendar-check',\n          clear: 'fas fa-trash',\n          close: 'fas fa-xmark'\n        },\n        theme: this.theme\n      };\n      const picker = new _tempusDominus.TempusDominus(element, {\n        display,\n        restrictions,\n        localization: {\n          format: this.dateFormat,\n          locale: 'en-GB'\n        },\n        ...(type === 'end' && {\n          useCurrent: false,\n          viewDate: moment().endOf('day').toDate()\n        })\n      });\n      const initialDate = type === 'start' ? this.args.startDate : this.args.endDate;\n      if (initialDate) {\n        const dateObj = new Date(initialDate);\n        const parsedDate = picker.dates.parseInput(dateObj);\n        picker.dates.setValue(parsedDate);\n      }\n      element.addEventListener('change.td', e => {\n        if (type === 'start') {\n          this.startDate = e.detail.date;\n          this.updateEndPickerMinDate();\n        } else {\n          this.endDate = e.detail.date;\n          this.updateStartPickerMaxDate();\n        }\n        this.notifyChange();\n      });\n      if (type === 'start') {\n        this.startPicker = picker;\n      } else {\n        this.endPicker = picker;\n      }\n    }\n    updateEndPickerMinDate() {\n      if (this.endPicker && this.startDate) {\n        this.endPicker.updateOptions({\n          restrictions: {\n            minDate: this.startDate,\n            ...(this.args.maxDate && {\n              maxDate: this.args.maxDate\n            })\n          }\n        });\n      }\n    }\n    updateStartPickerMaxDate() {\n      if (this.startPicker && this.endDate) {\n        const now = moment();\n        this.startPicker.updateOptions({\n          restrictions: {\n            maxDate: this.endDate,\n            ...(this.args.minDate && {\n              minDate: this.args.minDate\n            })\n          },\n          ...(!this.startDate && this.startPicker.viewDate.isAfter(this.endDate) && {\n            viewDate: moment(this.endDate).set({\n              hour: now.hour(),\n              minute: now.minute(),\n              second: now.second(),\n              millisecond: now.millisecond()\n            }).toDate()\n          })\n        });\n      }\n    }\n    notifyChange() {\n      if (this.args.onChange && this.startDate && this.endDate) {\n        this.args.onChange({\n          startDate: this.startDate,\n          endDate: this.endDate\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"startId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _emberUuid.v4)();\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"endId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _emberUuid.v4)();\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"startDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"endDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiDateRangePickerComponent);\n});","define(\"@testable/shared-ui/components/ui/delete-loading-indicator\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @isDeleting}}\n    <span class=\"d-flex gap-2 {{@class}} m-l-10 text-danger\" data-bs-toggle=\"tooltip\" title=\"Deleting...\">\n      <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> Deleting...\n    </span>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,1],[15,0,[29,[\\\"d-flex gap-2 \\\",[30,2],\\\" m-l-10 text-danger\\\"]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Deleting...\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" Deleting...\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@isDeleting\\\",\\\"@class\\\"],[\\\"if\\\",\\\"span\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/delete-loading-indicator.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"delete-loading-indicator\"));\n});","define(\"@testable/shared-ui/components/ui/feature-flag-button\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _tracking, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (eq this.aclConfig.action 'ChangePlan')}}\n    <LinkTo @route=\"account.billing.subscription\" class=\"btn btn-primary btn-sm\" data-bs-toggle=\"tooltip\"\n            title={{this.aclConfig.description}}\n            data-bs-placement=\"bottom\">\n      {{html-safe (to-html this.linkContent)}}\n    </LinkTo>\n  {{else}}\n    <a href=\"mailto:sales@testable.io\" class=\"btn btn-primary btn-sm\" data-bs-toggle=\"tooltip\"\n       title={{this.aclConfig.description}}\n       data-bs-placement=\"bottom\">\n      {{html-safe (to-html this.linkContent)}}\n    </a>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,0,[\\\"aclConfig\\\",\\\"action\\\"]],\\\"ChangePlan\\\"],null],[[[1,\\\"  \\\"],[8,[39,2],[[24,0,\\\"btn btn-primary btn-sm\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[16,\\\"title\\\",[30,0,[\\\"aclConfig\\\",\\\"description\\\"]]],[24,\\\"data-bs-placement\\\",\\\"bottom\\\"]],[[\\\"@route\\\"],[\\\"account.billing.subscription\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[1,[28,[35,3],[[28,[37,4],[[30,0,[\\\"linkContent\\\"]]],null]],null]],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,3],[14,6,\\\"mailto:sales@testable.io\\\"],[14,0,\\\"btn btn-primary btn-sm\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[15,\\\"title\\\",[30,0,[\\\"aclConfig\\\",\\\"description\\\"]]],[14,\\\"data-bs-placement\\\",\\\"bottom\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,3],[[28,[37,4],[[30,0,[\\\"linkContent\\\"]]],null]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[],[\\\"if\\\",\\\"eq\\\",\\\"link-to\\\",\\\"html-safe\\\",\\\"to-html\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/feature-flag-button.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiFeatureFlagButtonComponent = _exports.default = (_class = class UiFeatureFlagButtonComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"orgAcl\", _descriptor, this);\n      _initializerDefineProperty(this, \"aclConfig\", _descriptor2, this);\n      _defineProperty(this, \"isMonitoring\", _environment.config.isMonitoring);\n      if (this.args.feature) {\n        this.aclConfig = this.orgAcl.lookup(this.args.feature).feature;\n      }\n    }\n    get linkContent() {\n      if (this.aclConfig) {\n        let content = `${this.aclConfig.name} is not available with your plan`;\n        if (this.aclConfig.minimumPlan) {\n          content = `${this.aclConfig.minimumPlan}+ Plan Only | ` + content;\n        }\n        return content;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"orgAcl\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aclConfig\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiFeatureFlagButtonComponent);\n});","define(\"@testable/shared-ui/components/ui/feature-flag-container\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"clear-fix {{if (not (has-feature @feature)) ' alert alert-secondary border'}}\" ...attributes>\n    {{yield\n            (hash\n                    allowed=(has-feature @feature)\n            )\n    }}\n    {{#if (not (has-feature @feature))}}\n      <div class=\"float-right m-t-10 p-0\">\n        <Ui::FeatureFlagButton @feature={{@feature}} />\n      </div>\n    {{/if}}\n  \n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"clear-fix \\\",[52,[28,[37,2],[[28,[37,3],[[30,1]],null]],null],\\\" alert alert-secondary border\\\"]]]],[17,2],[12],[1,\\\"\\\\n  \\\"],[18,3,[[28,[37,5],null,[[\\\"allowed\\\"],[[28,[37,3],[[30,1]],null]]]]]],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[28,[37,3],[[30,1]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"float-right m-t-10 p-0\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],null,[[\\\"@feature\\\"],[[30,1]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@feature\\\",\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"not\\\",\\\"has-feature\\\",\\\"yield\\\",\\\"hash\\\",\\\"ui/feature-flag-button\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/feature-flag-container.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"feature-flag-container\"));\n});","define(\"@testable/shared-ui/components/ui/files-manager\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"tracked-built-ins\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"ember-file-upload/services/file-queue\", \"@testable/shared-ui/helpers/to-html\", \"@testable/shared-ui/utils/data-store-utils\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _trackedBuiltIns, _service, _runloop, _lib, _environment, _fileQueue, _toHtml, _dataStoreUtils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"tracked-built-ins\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"ember-file-upload/services/file-queue\",0,\"@testable/shared-ui/helpers/to-html\",0,\"@testable/shared-ui/utils/data-store-utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{did-update this.initialize @model.dataStores 'dataStore'}}\n    {{did-update this.initialize @defaultFiles 'defaultFiles'}}\n    {{did-update this.initialize @hiddenFilesId 'hiddenFiles'}}\n    {{did-update this.initialize @selectedPanel 'panel'}}\n    {{did-update this._onContentDiff this.realtimeService.dataStoreContentDiffs}}\n    {{did-update this._onContentRefreshRequired this.realtimeService.dataStoreContentRefreshRequiredIds}}\n    {{did-update this._onDataStoreRemoved this.realtimeService.removedDataStoreIds}}\n    {{did-update this.updateFilePathContent this.aceEditor}}\n  >\n    <div class=\"panel files-panel\">\n      {{#if (not-eq @model.scriptType \"Monitor\")}}\n        <div class=\"panel-heading\">\n          <div class=\"d-flex align-items-center\">\n            <div class=\"d-flex align-items-center gap-3\">\n              <h4 class=\"panel-title\">\n                <strong>File Editor ({{this.filesCount}})</strong>\n                <Ui::InfoIcon\n                    @content=\"Upload and edit any files required to run your test. Any zip files can be expanded via the editor or automatically on the test runner before the test runs.\"\n                    />\n              </h4>\n              {{#if (and (not @model.readonly) (not this.isViewer) this.showTemplate)}}\n                <Ui::PSelect @options={{@templates}} @selected={{this.template}} @disabled={{or this.isSavingContent this.loadingFileContents}}\n                  @placeholder=\"Select template to insert...\" @onChange={{this.templateSelected}} as |option|>\n                  {{html-safe option.name}}\n                </Ui::PSelect>\n              {{/if}}\n              {{#if this.alertMessage}}\n                <span class=\"alert alert-{{this.alertClass}}\">{{this.alertMessage}}\n                  <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n                </span>\n              {{/if}}\n            </div>\n          </div>\n        </div>\n      {{/if}}\n      <div id=\"files\">\n  \n        <div id=\"files-container\" class=\"files-container {{if this.alertMessage \"disabled\"}}\">\n          {{#if (and (not @isRemote) (not-eq @model.scriptType \"Monitor\"))}}\n            <div id=\"vs-sidebar\" class=\"vs-sidebar\">\n              <div class=\"icons\">\n                <div class=\"pull-left m-t-3\">\n                  {{#if @generateExampleFiles}}\n                    <button type=\"button\" {{on \"click\" this.generateExampleFiles}}\n                      class=\"btn btn-primary btn-xs m-l-5\"\n                      disabled={{or (not @enableGenerateExample) @generatingFiles}}>\n                      {{#if @generatingFiles}}\n                        Generating... <Ui::Icon @icon=\"fa fa-spinner fa-spin\" />\n                      {{else}}\n                        Generate Example\n                      {{/if}}\n                    </button>\n                  {{/if}}\n                </div>\n                <div class=\"pull-right\">\n                  <Ui::Icon @icon=\"fa fa-file-upload\" {{on \"click\" this.uploadFileBase}}\n                    class=\"btn btn-icon btn-circle text-primary\"\n                    data-bs-toggle=\"tooltip\"\n                    data-bs-placement=\"top\"\n                    role=\"button\" title=\"Add/Update files\" />\n                  {{#let (file-queue name=\"files-manager\" onFileAdded=this.fileUploadSelect) as |queue|}}\n                    <input type=\"file\" id=\"upload-file\" accept=\"*\\/*\" multiple hidden {{queue.selectFile}} >\n                  {{/let}}\n  \n                  <Ui::Icon @icon=\"fa fa-folder-plus\" {{on \"click\" this.uploadFolderBase}}\n                    class=\"btn btn-icon btn-circle text-primary\"\n                    data-bs-toggle=\"tooltip\"\n                    data-bs-placement=\"top\"\n                    role=\"button\" title=\"Upload Folder\" />\n                  {{#let (file-queue name=\"files-manager\" onFileAdded=this.fileUploadSelect) as |queue|}} {{!-- Todo: calling on one file upload --}}\n                    <input type=\"file\" id=\"upload-folder\" accept=\"*\\/*\" webkitdirectory multiple hidden {{queue.selectFile}} >\n                  {{/let}}\n  \n                  <Ui::Icon @icon=\"fa fa-file\" {{on \"click\" (fn this.setInputType 'createFile')}}\n                    class=\"btn btn-icon btn-circle text-primary\"\n                    data-bs-toggle=\"tooltip\"\n                    data-bs-placement=\"top\"\n                    role=\"button\" title=\"New file\" />\n  \n                  <Ui::Icon @icon=\"fa fa-folder\" {{on \"click\" (fn this.setInputType 'createFolder')}}\n                    class=\"btn btn-icon btn-circle text-primary\"\n                    data-bs-toggle=\"tooltip\"\n                    data-bs-placement=\"top\"\n                    role=\"button\" title=\"New folder\" />\n  \n                  {{#if this.filesCount}}\n                    <a\n                      target=\"_blank\" href=\"{{this.filesDownloadUrl}}\"\n                      class=\"btn btn-icon btn-circle text-primary ms-0 btn-enabled\"\n                      data-bs-toggle=\"tooltip\"\n                      data-bs-placement=\"top\"\n                      role=\"button\" title=\"Download All Files\"\n                      rel=\"noreferrer noopener\">\n                      <Ui::Icon @icon=\"fa fa-download\" />\n                    </a>\n                  {{/if}}\n                </div>\n              </div>\n  \n              <div class=\"search\">\n                <Input\n                  placeholder=\"Quick filter\"\n                  {{on \"input\" this.onSearch}}\n                  class=\"form-control\" />\n              </div>\n  \n              <ul class=\"file-list text-truncate\"\n                {{did-insert this.initDragDrop}}\n                {{did-update this.initDragDrop this.search}}\n                {{did-update this.initDragDrop this.folderDirectory}}\n                {{did-update this.setDefaultFile @defaultFileId}}\n              >\n                <Ui::FolderDirectory\n                @isDragSelect={{gt this.draggableItems.length 1}}\n                @actionType={{this.actionType}}\n                @loadedFiles={{this.loadedFiles}}\n                @data={{this.folderDirectoryData}}\n                @openFile={{this.openFile}}\n                @inputAction={{this.inputAction}}\n                @deleteFile={{this.deleteFile}}\n                @addDragDropFolder={{this.addDragDropFolder}}\n                @deleteFolder={{this.deleteFolder}}\n                @extractFile={{this.extractFile}}\n                @readonly={{or @model.readonly this.isViewer}}\n                @uploadFileInDirectory={{this.uploadFileInDirectory}}\n                @uploadFolderInDirectory={{this.uploadFolderInDirectory}}\n                @updateInputType={{this.setInputType}}\n                />\n              </ul>\n  \n              {{#if @showVcsTab}}\n                <div class=\"m-5\">\n                  <div class=\"note note-info alert mb-0\">\n                    <p>\n                      {{#if @model.readonly}}\n                        Your repository was cloned onto each test runner when you ran the test.\n                        Any uploaded files were downloaded after that.\n                        So an uploaded file with the same name overwrites one in your repository.\n                      {{else}}\n                        Your repository will be cloned onto each test runner when you run the test.\n                        Any uploaded files will be downloaded after that.\n                        So an uploaded file with the same name overwrites one in your repository.\n                      {{/if}}\n                    </p>\n                  </div>\n                </div>\n              {{/if}}\n  \n            </div>\n            <div class=\"split-bar\" {{on \"mousedown\" this.resizeContent}}></div>\n          {{/if}}\n          <div class=\"editor-container {{if (eq @model.scriptType \"Monitor\") \"w-100\"}}\">\n  \n            <div id=\"tabs\" class=\"tabs d-flex\">\n              {{#if @showVcsTab}}\n                <span class=\"{{if this.showVcsTab \"selected-file\"}}\" {{on \"click\" (fn this.openFile 'vcs')}}>\n                  <span class=\"file-name\">Version Control Settings</span>\n                </span>\n              {{/if}}\n              {{#if this.loadedFiles.length}}\n                {{#each this.loadedFiles as |file|}}\n                  <span class=\"{{if file.status \"selected-file\"}}\" {{on \"click\" (fn this.openFile file)}}>\n                    <span class=\"file-name\">{{file.name}}</span>\n                    {{#unless file.isStatic}}\n                      <span class=\"file-close\" {{on \"click\" (fn this.closeFile file.id)}}><Ui::Icon class=\"stats-icon\" @icon=\"ms-1 fa fa-times\" /></span>\n                    {{/unless }}\n                  </span>\n                {{/each}}\n              {{/if}}\n            </div>\n            <div id=\"editor-instance\">\n              <div class=\"panel {{if (and (not this.loadingFileContents) @showVcsTab this.showVcsTab) \"\" \"hidden\"}}\">\n                {{yield (hash VcsTab=(component \"empty\"))}}\n              </div>\n              <div class=\"panel {{if (and (not this.loadingFileContents) (eq this.aceEditor.fileType \"tagsTab\")) \"\" \"hidden\"}}\">\n                {{yield (hash TagsPanel=(component \"empty\"))}}\n              </div>\n              <div class=\"panel {{if (and (not this.loadingFileContents) (eq this.aceEditor.fileType \"paramsTab\")) \"\" \"hidden\"}}\">\n                {{yield (hash ParamsPanel=(component \"empty\"))}}\n              </div>\n              <div class=\"panel accordion {{if (and (not this.loadingFileContents) (eq this.aceEditor.fileType \"additionalTab\")) \"\" \"hidden\"}}\">\n                {{yield (hash AdditionalPanel=(component \"empty\"))}}\n              </div>\n              {{#if (and (not this.loadingFileContents) (eq this.aceEditor.fileType \"note\"))}}\n                <div class=\"note-wrapper\" {{on \"click\" this.handleNoteActions}}>\n                  {{this.aceEditor.code}}\n                </div>\n              {{/if}}\n              {{#if (eq this.aceEditor.fileType \"image\")}}\n                <img src=\"{{this.aceEditor.viewUrl}}\" alt=\"\" role=\"none\">\n              {{else if (or (eq this.aceEditor.fileType \"download\") (gt this.aceEditor.size 1048575))}}\n                <div class=\"text\">\n                  <p>\n                    {{#if (or (eq this.aceEditor.ext 'rar') (eq this.aceEditor.ext 'zip'))}}\n                      Either&nbsp;<a href=\"{{this.aceEditor.url}}\" target=\"_blank\">Download</a>\n                      &nbsp;this file to see it's contents or\n                      &nbsp;<a {{on \"click\" (fn this.extractFile this.aceEditor)}}>extract</a>&nbsp;it into this scenario\n                    {{else if (gt this.aceEditor.size 1048575)}}\n                      The file editor only supports files that are smaller than 1MB in size.\n                      Please <a href=\"{{this.aceEditor.url}}\" target=\"_blank\">Download</a>,\n                      edit, and&nbsp;<a {{on \"click\" (fn this.updateFile this.aceEditor)}}>upload</a>&nbsp;again to apply any changes.\n                    {{else}}\n                      <a href=\"{{this.aceEditor.url}}\" target=\"_blank\">Download</a>&nbsp;this file to see it's contents\n                    {{/if}}\n                  </p>\n                </div>\n              {{/if}}\n              {{#if this.loadingFileContents}}\n                <div class=\"text\">Loading file...</div>\n              {{else if this.showEditorInstance}}\n                <Ui::AceEditor @id=\"package{{this.aceEditor.mode}}Editor{{this.aceEditor.id}}\"\n                              @editorInstance={{this.aceEditor}}\n                              @code={{this.aceEditor.code}}\n                              @type={{this.aceEditor.type}}\n                              @style={{this.aceEditor.style}}\n                              @readonly={{or this.aceEditor.readonly @model.readonly this.isViewer}}\n                              @codeChangedQuiet={{this.updateFileContent}}\n                              @mode={{this.aceEditor.mode}} />\n              {{else if (and (not this.editorInstance.id) (not this.showVcsTab))}}\n                <div class=\"text\">Select file to load...</div>\n              {{/if}}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"initialize\\\"]],[30,1,[\\\"dataStores\\\"]],\\\"dataStore\\\"],null],[4,[38,1],[[30,0,[\\\"initialize\\\"]],[30,2],\\\"defaultFiles\\\"],null],[4,[38,1],[[30,0,[\\\"initialize\\\"]],[30,3],\\\"hiddenFiles\\\"],null],[4,[38,1],[[30,0,[\\\"initialize\\\"]],[30,4],\\\"panel\\\"],null],[4,[38,1],[[30,0,[\\\"_onContentDiff\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreContentDiffs\\\"]]],null],[4,[38,1],[[30,0,[\\\"_onContentRefreshRequired\\\"]],[30,0,[\\\"realtimeService\\\",\\\"dataStoreContentRefreshRequiredIds\\\"]]],null],[4,[38,1],[[30,0,[\\\"_onDataStoreRemoved\\\"]],[30,0,[\\\"realtimeService\\\",\\\"removedDataStoreIds\\\"]]],null],[4,[38,1],[[30,0,[\\\"updateFilePathContent\\\"]],[30,0,[\\\"aceEditor\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel files-panel\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,1,[\\\"scriptType\\\"]],\\\"Monitor\\\"],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"panel-heading\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"d-flex align-items-center\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"d-flex align-items-center gap-3\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"strong\\\"],[12],[1,\\\"File Editor (\\\"],[1,[30,0,[\\\"filesCount\\\"]]],[1,\\\")\\\"],[13],[1,\\\"\\\\n              \\\"],[8,[39,6],null,[[\\\"@content\\\"],[\\\"Upload and edit any files required to run your test. Any zip files can be expanded via the editor or automatically on the test runner before the test runs.\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[28,[37,8],[[30,1,[\\\"readonly\\\"]]],null],[28,[37,8],[[30,0,[\\\"isViewer\\\"]]],null],[30,0,[\\\"showTemplate\\\"]]],null],[[[1,\\\"              \\\"],[8,[39,9],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@disabled\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,5],[30,0,[\\\"template\\\"]],[28,[37,10],[[30,0,[\\\"isSavingContent\\\"]],[30,0,[\\\"loadingFileContents\\\"]]],null],\\\"Select template to insert...\\\",[30,0,[\\\"templateSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,11],[[30,6,[\\\"name\\\"]]],null]],[1,\\\"\\\\n              \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"alertMessage\\\"]],[[[1,\\\"              \\\"],[10,1],[15,0,[29,[\\\"alert alert-\\\",[30,0,[\\\"alertClass\\\"]]]]],[12],[1,[30,0,[\\\"alertMessage\\\"]]],[1,\\\"\\\\n                \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,1,\\\"files\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,1,\\\"files-container\\\"],[15,0,[29,[\\\"files-container \\\",[52,[30,0,[\\\"alertMessage\\\"]],\\\"disabled\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[28,[37,8],[[30,7]],null],[28,[37,3],[[30,1,[\\\"scriptType\\\"]],\\\"Monitor\\\"],null]],null],[[[1,\\\"          \\\"],[10,0],[14,1,\\\"vs-sidebar\\\"],[14,0,\\\"vs-sidebar\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"icons\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"pull-left m-t-3\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8],[[[1,\\\"                  \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary btn-xs m-l-5\\\"],[16,\\\"disabled\\\",[28,[37,10],[[28,[37,8],[[30,9]],null],[30,10]],null]],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"generateExampleFiles\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,10],[[[1,\\\"                      Generating... \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      Generate Example\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"pull-right\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"Add/Update files\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"uploadFileBase\\\"]]],null]],[[\\\"@icon\\\"],[\\\"fa fa-file-upload\\\"]],null],[1,\\\"\\\\n\\\"],[44,[[28,[37,17],null,[[\\\"name\\\",\\\"onFileAdded\\\"],[\\\"files-manager\\\",[30,0,[\\\"fileUploadSelect\\\"]]]]]],[[[1,\\\"                  \\\"],[11,\\\"input\\\"],[24,1,\\\"upload-file\\\"],[24,\\\"accept\\\",\\\"*/*\\\"],[24,\\\"multiple\\\",\\\"\\\"],[24,\\\"hidden\\\",\\\"\\\"],[24,4,\\\"file\\\"],[4,[30,11,[\\\"selectFile\\\"]],null,null],[12],[13],[1,\\\"\\\\n\\\"]],[11]]],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"Upload Folder\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"uploadFolderBase\\\"]]],null]],[[\\\"@icon\\\"],[\\\"fa fa-folder-plus\\\"]],null],[1,\\\"\\\\n                \\\"],[44,[[28,[37,17],null,[[\\\"name\\\",\\\"onFileAdded\\\"],[\\\"files-manager\\\",[30,0,[\\\"fileUploadSelect\\\"]]]]]],[[[1,\\\" \\\"],[1,\\\"\\\\n                  \\\"],[11,\\\"input\\\"],[24,1,\\\"upload-folder\\\"],[24,\\\"accept\\\",\\\"*/*\\\"],[24,\\\"webkitdirectory\\\",\\\"\\\"],[24,\\\"multiple\\\",\\\"\\\"],[24,\\\"hidden\\\",\\\"\\\"],[24,4,\\\"file\\\"],[4,[30,12,[\\\"selectFile\\\"]],null,null],[12],[13],[1,\\\"\\\\n\\\"]],[12]]],[1,\\\"\\\\n                \\\"],[8,[39,13],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"New file\\\"],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"setInputType\\\"]],\\\"createFile\\\"],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-file\\\"]],null],[1,\\\"\\\\n\\\\n                \\\"],[8,[39,13],[[24,0,\\\"btn btn-icon btn-circle text-primary\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"title\\\",\\\"New folder\\\"],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"setInputType\\\"]],\\\"createFolder\\\"],null]],null]],[[\\\"@icon\\\"],[\\\"fa fa-folder\\\"]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"filesCount\\\"]],[[[1,\\\"                  \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"filesDownloadUrl\\\"]]]]],[14,0,\\\"btn btn-icon btn-circle text-primary ms-0 btn-enabled\\\"],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"data-bs-placement\\\",\\\"top\\\"],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"title\\\",\\\"Download All Files\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[39,13],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"search\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,18],[[24,\\\"placeholder\\\",\\\"Quick filter\\\"],[24,0,\\\"form-control\\\"],[4,[38,15],[\\\"input\\\",[30,0,[\\\"onSearch\\\"]]],null]],null,null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[11,\\\"ul\\\"],[24,0,\\\"file-list text-truncate\\\"],[4,[38,22],[[30,0,[\\\"initDragDrop\\\"]]],null],[4,[38,1],[[30,0,[\\\"initDragDrop\\\"]],[30,0,[\\\"search\\\"]]],null],[4,[38,1],[[30,0,[\\\"initDragDrop\\\"]],[30,0,[\\\"folderDirectory\\\"]]],null],[4,[38,1],[[30,0,[\\\"setDefaultFile\\\"]],[30,13]],null],[12],[1,\\\"\\\\n              \\\"],[8,[39,23],null,[[\\\"@isDragSelect\\\",\\\"@actionType\\\",\\\"@loadedFiles\\\",\\\"@data\\\",\\\"@openFile\\\",\\\"@inputAction\\\",\\\"@deleteFile\\\",\\\"@addDragDropFolder\\\",\\\"@deleteFolder\\\",\\\"@extractFile\\\",\\\"@readonly\\\",\\\"@uploadFileInDirectory\\\",\\\"@uploadFolderInDirectory\\\",\\\"@updateInputType\\\"],[[28,[37,24],[[30,0,[\\\"draggableItems\\\",\\\"length\\\"]],1],null],[30,0,[\\\"actionType\\\"]],[30,0,[\\\"loadedFiles\\\"]],[30,0,[\\\"folderDirectoryData\\\"]],[30,0,[\\\"openFile\\\"]],[30,0,[\\\"inputAction\\\"]],[30,0,[\\\"deleteFile\\\"]],[30,0,[\\\"addDragDropFolder\\\"]],[30,0,[\\\"deleteFolder\\\"]],[30,0,[\\\"extractFile\\\"]],[28,[37,10],[[30,1,[\\\"readonly\\\"]],[30,0,[\\\"isViewer\\\"]]],null],[30,0,[\\\"uploadFileInDirectory\\\"]],[30,0,[\\\"uploadFolderInDirectory\\\"]],[30,0,[\\\"setInputType\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,14],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"m-5\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"note note-info alert mb-0\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"readonly\\\"]],[[[1,\\\"                      Your repository was cloned onto each test runner when you ran the test.\\\\n                      Any uploaded files were downloaded after that.\\\\n                      So an uploaded file with the same name overwrites one in your repository.\\\\n\\\"]],[]],[[[1,\\\"                      Your repository will be cloned onto each test runner when you run the test.\\\\n                      Any uploaded files will be downloaded after that.\\\\n                      So an uploaded file with the same name overwrites one in your repository.\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,0],[24,0,\\\"split-bar\\\"],[4,[38,15],[\\\"mousedown\\\",[30,0,[\\\"resizeContent\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,0],[15,0,[29,[\\\"editor-container \\\",[52,[28,[37,26],[[30,1,[\\\"scriptType\\\"]],\\\"Monitor\\\"],null],\\\"w-100\\\"]]]],[12],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,1,\\\"tabs\\\"],[14,0,\\\"tabs d-flex\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,14],[[[1,\\\"              \\\"],[11,1],[16,0,[29,[[52,[30,0,[\\\"showVcsTab\\\"]],\\\"selected-file\\\"]]]],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"openFile\\\"]],\\\"vcs\\\"],null]],null],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"file-name\\\"],[12],[1,\\\"Version Control Settings\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"loadedFiles\\\",\\\"length\\\"]],[[[42,[28,[37,28],[[28,[37,28],[[30,0,[\\\"loadedFiles\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[11,1],[16,0,[29,[[52,[30,15,[\\\"status\\\"]],\\\"selected-file\\\"]]]],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"openFile\\\"]],[30,15]],null]],null],[12],[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"file-name\\\"],[12],[1,[30,15,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,15,[\\\"isStatic\\\"]]],[[[1,\\\"                    \\\"],[11,1],[24,0,\\\"file-close\\\"],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"closeFile\\\"]],[30,15,[\\\"id\\\"]]],null]],null],[12],[8,[39,13],[[24,0,\\\"stats-icon\\\"]],[[\\\"@icon\\\"],[\\\"ms-1 fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[15]],null]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,1,\\\"editor-instance\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,7],[[28,[37,8],[[30,0,[\\\"loadingFileContents\\\"]]],null],[30,14],[30,0,[\\\"showVcsTab\\\"]]],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[18,16,[[28,[37,31],null,[[\\\"VcsTab\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,7],[[28,[37,8],[[30,0,[\\\"loadingFileContents\\\"]]],null],[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"tagsTab\\\"],null]],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[18,16,[[28,[37,31],null,[[\\\"TagsPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"panel \\\",[52,[28,[37,7],[[28,[37,8],[[30,0,[\\\"loadingFileContents\\\"]]],null],[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"paramsTab\\\"],null]],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[18,16,[[28,[37,31],null,[[\\\"ParamsPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"panel accordion \\\",[52,[28,[37,7],[[28,[37,8],[[30,0,[\\\"loadingFileContents\\\"]]],null],[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"additionalTab\\\"],null]],null],\\\"\\\",\\\"hidden\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[18,16,[[28,[37,31],null,[[\\\"AdditionalPanel\\\"],[[50,\\\"empty\\\",0,null,null]]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[28,[37,8],[[30,0,[\\\"loadingFileContents\\\"]]],null],[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"note\\\"],null]],null],[[[1,\\\"              \\\"],[11,0],[24,0,\\\"note-wrapper\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"handleNoteActions\\\"]]],null],[12],[1,\\\"\\\\n                \\\"],[1,[30,0,[\\\"aceEditor\\\",\\\"code\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"image\\\"],null],[[[1,\\\"              \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"aceEditor\\\",\\\"viewUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,10],[[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"fileType\\\"]],\\\"download\\\"],null],[28,[37,24],[[30,0,[\\\"aceEditor\\\",\\\"size\\\"]],1048575],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"\\\\n                \\\"],[10,2],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,10],[[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"ext\\\"]],\\\"rar\\\"],null],[28,[37,26],[[30,0,[\\\"aceEditor\\\",\\\"ext\\\"]],\\\"zip\\\"],null]],null],[[[1,\\\"                    Either \\\"],[10,3],[15,6,[29,[[30,0,[\\\"aceEditor\\\",\\\"url\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"Download\\\"],[13],[1,\\\"\\\\n                     this file to see it's contents or\\\\n                     \\\"],[11,3],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"extractFile\\\"]],[30,0,[\\\"aceEditor\\\"]]],null]],null],[12],[1,\\\"extract\\\"],[13],[1,\\\" it into this scenario\\\\n\\\"]],[]],[[[41,[28,[37,24],[[30,0,[\\\"aceEditor\\\",\\\"size\\\"]],1048575],null],[[[1,\\\"                    The file editor only supports files that are smaller than 1MB in size.\\\\n                    Please \\\"],[10,3],[15,6,[29,[[30,0,[\\\"aceEditor\\\",\\\"url\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"Download\\\"],[13],[1,\\\",\\\\n                    edit, and \\\"],[11,3],[4,[38,15],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"updateFile\\\"]],[30,0,[\\\"aceEditor\\\"]]],null]],null],[12],[1,\\\"upload\\\"],[13],[1,\\\" again to apply any changes.\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[10,3],[15,6,[29,[[30,0,[\\\"aceEditor\\\",\\\"url\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[12],[1,\\\"Download\\\"],[13],[1,\\\" this file to see it's contents\\\\n                  \\\"]],[]]]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]],null]],[]]],[41,[30,0,[\\\"loadingFileContents\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"Loading file...\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"showEditorInstance\\\"]],[[[1,\\\"              \\\"],[8,[39,34],null,[[\\\"@id\\\",\\\"@editorInstance\\\",\\\"@code\\\",\\\"@type\\\",\\\"@style\\\",\\\"@readonly\\\",\\\"@codeChangedQuiet\\\",\\\"@mode\\\"],[[29,[\\\"package\\\",[30,0,[\\\"aceEditor\\\",\\\"mode\\\"]],\\\"Editor\\\",[30,0,[\\\"aceEditor\\\",\\\"id\\\"]]]],[30,0,[\\\"aceEditor\\\"]],[30,0,[\\\"aceEditor\\\",\\\"code\\\"]],[30,0,[\\\"aceEditor\\\",\\\"type\\\"]],[30,0,[\\\"aceEditor\\\",\\\"style\\\"]],[28,[37,10],[[30,0,[\\\"aceEditor\\\",\\\"readonly\\\"]],[30,1,[\\\"readonly\\\"]],[30,0,[\\\"isViewer\\\"]]],null],[30,0,[\\\"updateFileContent\\\"]],[30,0,[\\\"aceEditor\\\",\\\"mode\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,7],[[28,[37,8],[[30,0,[\\\"editorInstance\\\",\\\"id\\\"]]],null],[28,[37,8],[[30,0,[\\\"showVcsTab\\\"]]],null]],null],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"Select file to load...\\\"],[13],[1,\\\"\\\\n            \\\"]],[]],null]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@model\\\",\\\"@defaultFiles\\\",\\\"@hiddenFilesId\\\",\\\"@selectedPanel\\\",\\\"@templates\\\",\\\"option\\\",\\\"@isRemote\\\",\\\"@generateExampleFiles\\\",\\\"@enableGenerateExample\\\",\\\"@generatingFiles\\\",\\\"queue\\\",\\\"queue\\\",\\\"@defaultFileId\\\",\\\"@showVcsTab\\\",\\\"file\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"not-eq\\\",\\\"h4\\\",\\\"strong\\\",\\\"ui/info-icon\\\",\\\"and\\\",\\\"not\\\",\\\"ui/p-select\\\",\\\"or\\\",\\\"html-safe\\\",\\\"span\\\",\\\"ui/icon\\\",\\\"button\\\",\\\"on\\\",\\\"let\\\",\\\"file-queue\\\",\\\"input\\\",\\\"fn\\\",\\\"a\\\",\\\"ul\\\",\\\"did-insert\\\",\\\"ui/folder-directory\\\",\\\"gt\\\",\\\"p\\\",\\\"eq\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"img\\\",\\\"ui/ace-editor\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/files-manager.hbs\",\n    \"isStrictMode\": false\n  });\n  let FilesManagerComponent = _exports.default = (_dec = (0, _service.service)('realtime-service'), _class = class FilesManagerComponent extends _component2.default {\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    get filesDownloadUrl() {\n      return _lib.default.toUrl('/scripts/' + this.scriptId + '/data-stores/download');\n    }\n    get modelDataStores() {\n      const dataStores = JSON.parse(JSON.stringify(this.args.model.dataStores));\n      return dataStores.filter(ds => !this.args.hiddenFilesId?.includes(ds.id)).map(hf => {\n        hf.fileType = this.getFileType(hf.name, hf.fileType);\n        return hf;\n      });\n    }\n    get aceEditor() {\n      if (!this.editorInstance || !this.editorInstance?.name) return;\n      const {\n        id,\n        name,\n        mode: instanceMode,\n        type: instanceType\n      } = this.editorInstance ?? {};\n      const ext = name.split('.').pop();\n      const type = this.args.defaultFiles?.find(df => df.id === id) ? instanceType : 'main';\n      const height = this.args.filesPanelExpanded ? '245' : '390';\n      const style = `overflow-x: auto; min-height: 400px; height: calc(100vh - ${height}px);`;\n      let mode = \"ace/mode/\" + this.getMode(ext);\n      if (this.args.defaultFiles?.find(df => df.id === id) && !instanceMode) {\n        mode = this.language === 'javascript' ? \"ace/mode/javascript\" : \"ace/mode/typescript\";\n      }\n      return {\n        ...this.editorInstance,\n        type,\n        style,\n        mode,\n        ext\n      };\n    }\n    get showTemplate() {\n      return this.editorInstance?.id && ['java', 'js', 'ts'].includes(this.editorInstance.name?.split('.').pop()) || this.args.showTemplate;\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor2, this);\n      _initializerDefineProperty(this, \"realtimeService\", _descriptor3, this);\n      _initializerDefineProperty(this, \"editorInstance\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadedFiles\", _descriptor5, this);\n      _initializerDefineProperty(this, \"leftDivWidth\", _descriptor6, this);\n      _initializerDefineProperty(this, \"handleMouseMove\", _descriptor7, this);\n      _initializerDefineProperty(this, \"handleMouseUp\", _descriptor8, this);\n      _initializerDefineProperty(this, \"queue\", _descriptor9, this);\n      _initializerDefineProperty(this, \"loadingFileContents\", _descriptor0, this);\n      _initializerDefineProperty(this, \"showEditorInstance\", _descriptor1, this);\n      _initializerDefineProperty(this, \"scriptId\", _descriptor10, this);\n      _initializerDefineProperty(this, \"folderDirectory\", _descriptor11, this);\n      _initializerDefineProperty(this, \"baseRelativePath\", _descriptor12, this);\n      _initializerDefineProperty(this, \"alertMessage\", _descriptor13, this);\n      _initializerDefineProperty(this, \"alertClass\", _descriptor14, this);\n      _initializerDefineProperty(this, \"actionType\", _descriptor15, this);\n      _initializerDefineProperty(this, \"template\", _descriptor16, this);\n      _initializerDefineProperty(this, \"language\", _descriptor17, this);\n      _initializerDefineProperty(this, \"defaultFiles\", _descriptor18, this);\n      _initializerDefineProperty(this, \"dataStores\", _descriptor19, this);\n      _initializerDefineProperty(this, \"hiddenFilesId\", _descriptor20, this);\n      _initializerDefineProperty(this, \"selectedPanel\", _descriptor21, this);\n      _initializerDefineProperty(this, \"selectedPanels\", _descriptor22, this);\n      _initializerDefineProperty(this, \"uploadSameFile\", _descriptor23, this);\n      _initializerDefineProperty(this, \"isSavingContent\", _descriptor24, this);\n      _initializerDefineProperty(this, \"defaultFileId\", _descriptor25, this);\n      _initializerDefineProperty(this, \"search\", _descriptor26, this);\n      _initializerDefineProperty(this, \"showVcsTab\", _descriptor27, this);\n      _initializerDefineProperty(this, \"isDragging\", _descriptor28, this);\n      _initializerDefineProperty(this, \"metaKeyPressed\", _descriptor29, this);\n      _initializerDefineProperty(this, \"initializedDraggables\", _descriptor30, this);\n      _initializerDefineProperty(this, \"initializedDroppables\", _descriptor31, this);\n      _initializerDefineProperty(this, \"draggableItems\", _descriptor32, this);\n      _initializerDefineProperty(this, \"startIndex\", _descriptor33, this);\n      this.scriptId = this.args.model.id;\n      this.folderDirectory = this.getFolderDirectory();\n      this.language = this.args.language;\n      this.defaultFiles = this.args.defaultFiles;\n      this.dataStores = {\n        ...this.modelDataStores\n      };\n      let fileQueue = new _fileQueue.default();\n      this.queue = fileQueue.create('files-manager');\n      this.defaultShowVcsTab = this.args.showVcsTab;\n      (0, _runloop.next)(() => {\n        if (this.args.showVcsTab) {\n          this.openFile('vcs', '');\n        } else {\n          this.setDefaultFile();\n        }\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.aiAgent.activeDataStoreId = null;\n    }\n    _onContentDiff() {\n      _dataStoreUtils.default.handleContentDiff(this.realtimeService.dataStoreContentDiffs, this.loadedFiles, (file, content) => this._setContentFromRemote(file, content), file => this._refetchFileContent(file));\n    }\n    _onContentRefreshRequired() {\n      _dataStoreUtils.default.handleContentRefreshRequired(this.realtimeService.dataStoreContentRefreshRequiredIds, this.editorInstance, file => this._refetchFileContent(file));\n    }\n    _onDataStoreRemoved() {\n      const ids = this.realtimeService.removedDataStoreIds;\n      if (!ids?.length) return;\n      const file = this.editorInstance;\n      if (!file || typeof file.id !== 'number') return;\n      if (ids.includes(file.id)) {\n        _lib.default.error('This file has been deleted by another user.', `File Deleted (${file.name})`);\n      }\n    }\n    _setContentFromRemote(file, content) {\n      file.code = content;\n      if (this.editorInstance?.id === file.id) {\n        this._remoteContent = content;\n        this.editorInstance = {\n          ...file\n        };\n      }\n    }\n    _refetchFileContent(file) {\n      _dataStoreUtils.default.refetchFileContent(this.api, file, (f, c) => this._setContentFromRemote(f, c));\n    }\n    get filesCount() {\n      return this.folderDirectory.filter(fd => !fd.isFolder).length;\n    }\n    get folderDirectoryData() {\n      const data = this.prepareFolderDirectory;\n      if (!this.search) return data;\n      const filterArray = array => {\n        return array.reduce((acc, curr) => {\n          const children = curr.isFolder ? filterArray(curr.children, this.search) : [];\n          if (curr.path.toLowerCase().includes(this.search.toLowerCase()) || children.length > 0) {\n            acc.push({\n              ...curr,\n              children\n            });\n          }\n          return acc;\n        }, []);\n      };\n      return filterArray(data);\n    }\n    get prepareFolderDirectory() {\n      const nestedStructure = {\n        id: 'base',\n        name: '/',\n        isFolder: true,\n        readOnly: true,\n        children: {}\n      };\n      const nestedStructureInit = [new _trackedBuiltIns.TrackedObject({\n        ...nestedStructure,\n        path: '/',\n        baseFolder: true\n      })];\n      this.folderDirectory.forEach((item, i) => {\n        const parts = item.path ? item.path.split('/').slice(0, -1).filter(Boolean) : [];\n        let currentLevel = nestedStructure;\n        let folderPath = '';\n        parts.forEach(part => {\n          folderPath += folderPath ? `/${part}` : part;\n          if (!currentLevel.children[part]) {\n            const path = folderPath.startsWith('/') ? folderPath : `/${folderPath}`;\n            const id = this.folderDirectory.find(fd => fd.path === path)?.id || Math.random().toString(36).substring(2, 12);\n            currentLevel.children[part] = {\n              id,\n              name: part,\n              isFolder: true,\n              path,\n              children: []\n            };\n          }\n          currentLevel = currentLevel.children[part];\n        });\n        if (!currentLevel.children[item.name]) {\n          currentLevel.children[item.name] = {\n            ...item,\n            children: []\n          };\n        }\n      });\n      const convertToArr = nested => {\n        return Object.entries(nested.children)?.map(([name, child]) => {\n          const data = {\n            ...child,\n            isClosed: this.getCollapse(child.path),\n            name,\n            isStatic: !!child.isStatic,\n            readonly: !!child.readonly,\n            tooltip: this.prepareFileTooltip(child, false, true)\n          };\n          if (child.isFolder) {\n            data.children = convertToArr(child);\n          }\n          return new _trackedBuiltIns.TrackedObject(data);\n        }).sort((a, b) => a.path.localeCompare(b.path)).sort((a, b) => {\n          if (a.isFolder !== b.isFolder) {\n            return a.isFolder ? -1 : 1;\n          }\n          return 0;\n        }).sort((a, b) => {\n          if (a.fileType !== 'note' && b.fileType === 'note') return -1;\n          if (a.fileType === 'note' && b.fileType !== 'note') return 1;\n        });\n      };\n      nestedStructureInit[0].children = convertToArr(nestedStructure);\n      return nestedStructureInit;\n    }\n    getFolderDirectory() {\n      return [...(this.modelDataStores || []), ...(this.args.defaultFiles || [])];\n    }\n    toModelDataStores(displayList) {\n      const hiddenIds = this.args.hiddenFilesId;\n      if (!hiddenIds?.length) return displayList;\n      const hidden = (this.args.model.dataStores || []).filter(ds => hiddenIds.includes(ds.id));\n      return [...displayList, ...hidden];\n    }\n    getCollapse(path) {\n      const storageKey = window.localStorage.getItem(path);\n      return !storageKey || storageKey === 'true';\n    }\n    getFileType(name, type) {\n      if (type) return type;\n      const ext = name.split('.').pop();\n      const openDirect = ['doc', 'docx', 'ppt', 'pdf', 'gif', 'mp3', 'mp4', 'exe', 'rar', 'jar', 'zip', 'xls', 'xlsx'].includes(ext);\n      return ['jpg', 'jpeg', 'png'].includes(ext) ? 'image' : openDirect ? 'download' : 'file';\n    }\n\n    /**\n     * Start: File Upload, Queue and CSV view\n     */\n    processFilesQueue() {\n      this.queue.files.forEach(file => {\n        this.uploadFile(file);\n      });\n    }\n    setAlert(alertClass = '', alertMessage = '') {\n      this.alertClass = alertClass;\n      this.alertMessage = alertMessage;\n    }\n    async uploadFile(file) {\n      this.setAlert('info', 'Saving...');\n\n      // An upload already in flight is removed from the queue by the call that started it.\n      if (file.internalState === 'uploaded' || file.internalState === 'uploading') {\n        return;\n      }\n      try {\n        const {\n          file: fileData\n        } = file;\n        const basePath = this.baseRelativePath;\n        const name = fileData.name.split('/').pop();\n        const newPath = _lib.default.sanitizeFolderName(basePath + (fileData.webkitRelativePath || (basePath === '/' ? '' : '/') + name));\n        const body = await this.api.dataStores.uploadFile(this.scriptId, fileData, name, newPath);\n        let dataStores = this.folderDirectory;\n        const uploadedFile = body.files[0];\n        if (!this.folderDirectory.find(ds => ds.id === uploadedFile.id)) {\n          dataStores = this.folderDirectory.concat(body.files);\n        } else if (this.loadedFiles.find(lf => lf.id === uploadedFile.id)) {\n          const code = await this.api.dataStores.download(uploadedFile);\n          this.loadedFiles.map(ds => {\n            if (ds.id === uploadedFile.id) ds.code = code;\n            if (ds.id === this.editorInstance?.id) this.editorInstance = {\n              ...this.editorInstance,\n              size: ds.size\n            };\n            return ds;\n          });\n        }\n        (0, _runloop.next)(this, () => {\n          this.folderDirectory = dataStores;\n          if (!this.queue.files.length) {\n            this.args.onStoreUpdate(this.toModelDataStores(dataStores), body.files[0].script.updatedAt);\n          }\n        });\n      } catch (error) {\n        _lib.default.error(_lib.default.messageFromFail(error, error?.statusText, error?.statusText));\n        this.setAlert();\n      } finally {\n        this.queue.remove(file);\n      }\n    }\n    sameFileExist(name, path, id = null) {\n      const exist = this.folderDirectory.find(fd => {\n        return (fd.name === name && fd.path === path || fd.defaultName === name && fd.defaultPath === path || path.split('/').every((part, i) => part === fd.path.split('/')[i])) && (!id || id && id !== fd.id);\n      });\n      if (exist) {\n        _lib.default.error(`${name} already exist on this directory`);\n        this.setAlert();\n      }\n      return exist;\n    }\n    async handleDrop(draggedItems, droppedOn) {\n      const paths = [];\n      this.setAlert('info', 'Saving...');\n      const asyncOperations = draggedItems.map(async item => {\n        const {\n          id\n        } = item;\n        const file = await this.findObjectByKey('id', id);\n        if (file) {\n          const oldPath = _lib.default.sanitizeFolderName(file.path);\n          const newPath = _lib.default.sanitizeFolderName(droppedOn.dataset.path + '/' + file.name);\n          if (!this.sameFileExist(file.name, newPath)) {\n            paths.push({\n              oldPath,\n              newPath\n            });\n          }\n        }\n      });\n      await Promise.all(asyncOperations);\n      const response = await this.api.dataStores.updateRelativePaths(this.scriptId, paths);\n      let updatedAt = response.files.reduce((max, current) => {\n        return new Date(current.date) > new Date(max.date) ? current : max;\n      }, response.files[0]);\n      this.args.onStoreUpdate(response.files, updatedAt);\n    }\n    async findObjectByKey(key, value) {\n      const arr = this.prepareFolderDirectory;\n      return new Promise((resolve, reject) => {\n        const queue = [...arr];\n        while (queue.length > 0) {\n          const obj = queue.shift();\n          if (obj[key] == value) {\n            resolve(obj);\n            return;\n          }\n          if (obj.children && obj.children.length > 0) {\n            queue.push(...obj.children);\n          }\n        }\n        reject(new Error(`Object not found with ID: ${value}`));\n      });\n    }\n\n    /**\n     * Resize sidebar UI\n     */\n    resizeContent() {\n      this.leftDivWidth = document.getElementById('vs-sidebar')?.clientWidth || null;\n      const leftSpace = document.querySelector('#test-panel.panel-expand') ? 0 : 90;\n      const handleMouseMove = event => {\n        if (this.leftDivWidth !== null) {\n          let newWidth = this.leftDivWidth + (event.clientX - leftSpace - document.getElementById('files-container').offsetLeft - this.leftDivWidth);\n          if (newWidth < 290) {\n            newWidth = 290;\n          } else if (newWidth > 700) {\n            newWidth = 700;\n          }\n          document.getElementById('vs-sidebar').style.width = `${newWidth}px`;\n        }\n      };\n      const handleMouseUp = () => {\n        this.leftDivWidth = null;\n        document.removeEventListener('mousemove', this.handleMouseMove);\n        document.removeEventListener('mouseup', this.handleMouseUp);\n      };\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n      this.handleMouseMove = handleMouseMove;\n      this.handleMouseUp = handleMouseUp;\n    }\n    onSearch(e) {\n      this.mySearch = e.target.value;\n      (0, _runloop.debounce)(this, this.updateSearch, 250);\n    }\n    updateSearch() {\n      this.search = this.mySearch;\n    }\n    initDragDrop() {\n      (0, _runloop.later)(() => {\n        if (this.args.model.readonly || this.isViewer) return;\n        const self = this;\n        const handleTestPanelClick = () => {\n          $('#test-panel').click(e => {\n            if (self.draggableItems.length) {\n              if ($(e.target).closest('.sort-handle').length === 0 && $(e.target).find('.file-name').length === 0 && $(e.target).closest('.file-name').length === 0 || $(e.target).closest('.file-close').length) {\n                (0, _runloop.later)(() => {\n                  self.resetDragItems(self);\n                }, 100);\n                self.isDragging = false;\n              }\n            }\n          });\n        };\n        const destroyDraggableAndDroppable = () => {\n          try {\n            $('#test-panel').off('click');\n            this.initializedDraggables.forEach(element => {\n              $(element).draggable('destroy');\n            });\n            this.initializedDroppables.forEach(element => {\n              $(element).droppable('destroy');\n            });\n            this.initializedDraggables = [];\n            this.initializedDroppables = [];\n          } catch (e) {\n            console.error('Error destroying draggable and droppable:', e);\n          }\n        };\n        const initializeDraggable = () => {\n          $('.file-list #base li.sort-handle').each(function () {\n            $(this).draggable({\n              revert: false,\n              delay: 250,\n              helper: function (event) {\n                let title;\n                if (self.draggableItems.length && self.draggableItems.find(di => di.id == this.id)) {\n                  title = self.draggableItems.map(df => df.name).join('<br>');\n                  self.metaKeyPressed = true;\n                } else {\n                  self.resetDragItems(self);\n                  self.metaKeyPressed = false;\n                  title = $(this).find('.name-wrapper .name')[0].innerText;\n                }\n                return $(`<div class='dragged-item' style=\"z-index: 999\">${title}</div>`);\n              },\n              start: function (event, ui) {\n                self.isDragging = true;\n                $('body').append(ui.helper);\n              },\n              drag: function (event, ui) {\n                ui.position = {\n                  top: event.clientY,\n                  left: event.clientX\n                };\n              },\n              stop: function (event, ui) {\n                self.isDragging = false;\n              }\n            });\n            self.initializedDraggables.push(this);\n          });\n        };\n        const initializeDroppable = () => {\n          $('.file-list li.folder').each(function () {\n            $(this).droppable({\n              accept: '.file-list li',\n              greedy: true,\n              tolerance: 'pointer',\n              over: function (event, ui) {\n                if (ui.draggable[0].parentElement.parentElement === this) {\n                  return;\n                }\n                $(this).addClass('droppable');\n              },\n              out: function (event, ui) {\n                $(this).removeClass('droppable');\n              },\n              drop: function (event, ui) {\n                (0, _runloop.later)(() => {\n                  self.isDragging = false;\n                }, 1000);\n                $(this).removeClass('droppable');\n                if (ui.draggable[0].parentElement.parentElement === this) {\n                  return;\n                }\n                ui.helper.remove();\n                if (self.draggableItems.length && self.metaKeyPressed) {\n                  self.handleDrop(self.draggableItems, this);\n                  self.resetDragItems(self);\n                } else {\n                  self.handleDrop([ui.draggable[0].dataset], this);\n                }\n              }\n            });\n            self.initializedDroppables.push(this);\n          });\n        };\n        destroyDraggableAndDroppable();\n        $('#test-panel').click(handleTestPanelClick);\n        initializeDraggable();\n        initializeDroppable();\n        self.setFolderDirIndex();\n      }, 500);\n    }\n    setDefaultFile() {\n      if (_.isArray(this.args.defaultFileId) && _.isEmpty(this.args.defaultFileId) || !this.args.defaultFileId) return;\n      if (!_.isEqual(this.defaultFileId, this.args.defaultFileId)) {\n        (0, _runloop.next)(() => {\n          this.defaultFileId = this.args.defaultFileId;\n          let fileIds = _.isArray(this.defaultFileId) ? this.defaultFileId : [this.defaultFileId];\n          this.openFileInEditor(fileIds[0], fileIds.slice(1));\n        });\n      }\n    }\n    handleNoteActions(event) {\n      const action = event.target.dataset.action;\n      if (action && this.args[action]) {\n        this.args[action](event);\n      }\n    }\n    setInputType(val) {\n      this.actionType = val;\n    }\n    fileUploadSelect(file) {\n      this.queue.add(file);\n      (0, _runloop.debounce)(this, this.processFilesQueue, 250);\n    }\n    uploadFileBase() {\n      if (!this.alertMessage) {\n        this.baseRelativePath = '';\n        this.uploadSameFile = false;\n        document.getElementById('upload-file').click();\n      }\n    }\n    uploadFolderBase() {\n      if (!this.alertMessage) {\n        this.baseRelativePath = '';\n        document.getElementById('upload-folder').click();\n      }\n    }\n    // End: File Upload, Queue and CSV view\n\n    /**\n     * Start: manage editorInstance and tabs\n     * @param {integer} id\n     * @set editorInstance\n     */\n    async openFile(...args) {\n      const event = args[args.length - 1];\n      const file = args[args.length - 2];\n      if (this.editorInstance?.id === file?.id) {\n        return;\n      }\n      ;\n      if (this.isDragging) {\n        return;\n      }\n      ;\n      if (file === 'vcs' || this.editorInstance !== file && this.selectedPanels.includes(file?.id)) {\n        this.showEditorInstance = false;\n        (0, _runloop.next)(this, () => {\n          this.showVcsTab = file === 'vcs';\n          this.editorInstance = !this.showVcsTab ? file : null;\n          this.onUpdateEditor();\n        });\n      } else {\n        if (this.draggableFiles(file.fileType)) {\n          this.handleDraggableItems(file, event?.metaKey, event?.shiftKey);\n        }\n        if (!event?.metaKey && !event?.shiftKey) {\n          await this.openFileInEditor(file.id);\n        }\n      }\n    }\n    handleDraggableItems(file, metaKey, shiftKey) {\n      const items = this.draggableItems;\n      if (shiftKey && items.length > 0) {\n        this.handleShiftDrag(file);\n      } else if (metaKey || !items.length) {\n        this.handleSelectionDrag(file);\n      } else if (!metaKey && !shiftKey && items.length) {\n        this.draggableItems = [file];\n        this.setSelectedDragFile();\n      }\n    }\n    handleSelectionDrag(file) {\n      const items = this.draggableItems;\n      const fileIndex = items.findIndex(di => file.id === di.id);\n      if (fileIndex === -1) {\n        items.push(file);\n      } else {\n        items.splice(fileIndex, 1);\n      }\n      this.draggableItems = [...items];\n      this.setSelectedDragFile();\n    }\n    handleShiftDrag(to) {\n      let fromIndex = this.startIndex || this.draggableItems[this.draggableItems.length - 1]?.index;\n      this.startIndex = fromIndex;\n      const minNumber = Math.min(this.startIndex, to.index);\n      const maxNumber = Math.max(this.startIndex, to.index);\n      const items = [];\n      const setIndex = item => {\n        if (item.index >= minNumber && item.index <= maxNumber) {\n          if (!items.find(i => item.path.includes(i.path))) {\n            items.push(item);\n          }\n        }\n        if (item.children) {\n          item.children.map(child => setIndex(child));\n        }\n        return item;\n      };\n      this.prepareFolderDirectory.map(item => setIndex(item));\n      this.draggableItems = [...items];\n      this.setSelectedDragFile();\n    }\n    draggableFiles(fileType) {\n      return !['tagsTab', 'paramsTab', 'additionalTab', 'system', 'note', 'button'].includes(fileType);\n    }\n    async resetDragItems(self) {\n      let draggableItems = [];\n      const editorInstance = self.editorInstance;\n      this.startIndex = null;\n      if (editorInstance && self.draggableFiles(editorInstance?.fileType)) {\n        const item = await this.findObjectByKey('id', editorInstance?.id);\n        draggableItems = [item];\n      }\n      if (!_.isEqual(draggableItems, this.draggableItems)) {\n        this.draggableItems = draggableItems;\n        self.setSelectedDragFile();\n      }\n    }\n    async openFileInEditor(id, ids = []) {\n      this.showVcsTab = false;\n      const file = await this.findObjectByKey('id', id);\n      if (!id || id === this.editorInstance?.id || this.loadingFileContents || !file) {\n        return;\n      }\n      this.showEditorInstance = false;\n      this.loadingFileContents = true;\n      const loadedFiles = this.loadedFiles;\n      let loadedFile = loadedFiles.find(lf => lf.id === id);\n      if (_.isEmpty(loadedFile)) {\n        let code = '';\n        if (file.fileType === 'system' || file.fileType === 'note') {\n          code = file.code;\n        } else if (file.fileType !== 'download' && file.size < 1048576) {\n          code = await this.api.dataStores.download(file);\n        }\n        loadedFile = file;\n        loadedFile.code = code;\n        loadedFiles.push(loadedFile);\n      }\n      (0, _runloop.next)(this, () => {\n        this.loadedFiles = [...loadedFiles];\n        this.editorInstance = loadedFile;\n        this.aiAgent.activeDataStoreId = loadedFile?.fileType !== 'system' && loadedFile?.fileType !== 'note' ? loadedFile?.id : null;\n        this.onUpdateEditor();\n\n        // const selectedTab = document.querySelector('#tabs > span.selected-file');\n        // selectedTab?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n        if (ids.length) {\n          this.openFileInEditor(ids[0], ids.slice(1));\n        }\n      });\n    }\n    onUpdateEditor() {\n      this.loadedFiles.forEach(file => {\n        file.status = file.id === this.editorInstance?.id;\n      });\n      if (this.args.selectedFile) {\n        this.args.selectedFile(this.editorInstance);\n      }\n      // Report the active panel upward so the side panel icons follow the tab strip, and\n      // clear it when a file is selected or the panel is closed so no icon stays lit.\n      // Only report real changes: the parent feeds this value back in, and a redundant\n      // write would re-run initialization and reopen the default file.\n      if (this.args.onPanelChange) {\n        const fileType = this.editorInstance?.fileType;\n        const panel = fileType?.endsWith('Tab') ? fileType : '';\n        if (panel !== this._reportedPanel) {\n          this._reportedPanel = panel;\n          this.args.onPanelChange(panel);\n        }\n      }\n      this.updateFilePathContent();\n      this.setSelectedFile(this.prepareFolderDirectory, this.editorInstance?.id);\n      this.setShowEditorInstance();\n      this.loadingFileContents = false;\n      this.showVcsTab = !this.editorInstance && this.args.showVcsTab;\n      this.selectedPanel = '';\n      const nonSpecialTypes = ['system', 'note', 'download', 'tagsTab', 'paramsTab', 'additionalTab', 'button'];\n      const ids = this.loadedFiles.filter(f => typeof f.id === 'number' && !nonSpecialTypes.includes(f.fileType)).map(f => f.id);\n      const newViewingIds = ids.length ? ids.join(',') : null;\n      if (this._lastViewingDataStoreIds !== newViewingIds) {\n        this._lastViewingDataStoreIds = newViewingIds;\n        this.realtimeService.updateViewingState({\n          viewingScriptId: this.scriptId,\n          viewingDataStoreIds: newViewingIds\n        });\n      }\n    }\n    setShowEditorInstance() {\n      this.showEditorInstance = false;\n      (0, _runloop.later)(() => {\n        if (this.isDestroying || this.isDestroyed) return;\n        this.showEditorInstance = Boolean(this.editorInstance?.id && (this.editorInstance.size < 1048576 || this.editorInstance.fileType === \"system\") && !['tagsTab', 'paramsTab', 'additionalTab', 'note', 'image', 'download'].includes(this.aceEditor.fileType));\n      }, 100);\n    }\n    generateExampleFiles() {\n      const message = \"Would you like to generate an example to use as a starting point for your scenario?\";\n      _lib.default.confirm(message, 'Generate Files', async () => {\n        this.args.generateExampleFiles();\n      }, 'Cancel', () => {}, 'Generate');\n    }\n    updateFilePathContent() {\n      const selectedFile = this.editorInstance || '';\n      $('#selected-file-path').html(this.prepareFileTooltip(selectedFile));\n    }\n    prepareFileTooltip(file, showPath = true, useBreak = false) {\n      let html = '';\n      const breakTag = useBreak ? '<br>' : ', ';\n      if (file.path) {\n        const {\n          path,\n          size,\n          updatedAt\n        } = file;\n        if (showPath) {\n          html += `Path: <b>${(0, _toHtml.sanitizeHtml)([path])}${updatedAt ? breakTag : ''}</b>`;\n        }\n        if (updatedAt) {\n          html += `Size: <b>${_lib.default.printBytes(size)}${breakTag}</b>\n                 Created At: <b>${_lib.default.displayDateTime(updatedAt)}</b>`;\n        }\n      }\n      return html;\n    }\n    getMode(ext) {\n      const modes = [\"abap\", \"abc\", \"ada\", \"alda\", \"applescript\", \"aql\", \"asl\", \"c9search\", \"cirru\", \"coffee\", \"csp\", \"css\", \"curly\", \"d\", \"dart\", \"diff\", \"django\", \"dot\", \"ejs\", \"elm\", \"fsl\", \"ftl\", \"gcode\", \"gitignore\", \"glsl\", \"groovy\", \"haml\", \"hjson\", \"html\", \"ini\", \"io\", \"jack\", \"jade\", \"java\", \"json\", \"json5\", \"jsoniq\", \"jsp\", \"jssm\", \"jsx\", \"less\", \"liquid\", \"lisp\", \"lsl\", \"lua\", \"lucene\", \"mask\", \"matlab\", \"mel\", \"mixal\", \"mysql\", \"nginx\", \"nim\", \"nix\", \"nsis\", \"pgsql\", \"php\", \"pig\", \"praat\", \"prisma\", \"properties\", \"qml\", \"r\", \"rdoc\", \"red\", \"redshift\", \"rhtml\", \"rst\", \"sass\", \"scad\", \"scala\", \"scss\", \"sh\", \"sjs\", \"slim\", \"snippets\", \"space\", \"sparql\", \"sql\", \"svg\", \"swift\", \"tcl\", \"tex\", \"textile\", \"toml\", \"tsx\", \"twig\", \"vala\", \"xml\", \"zeek\"];\n      const nonStandards = [{\n        mode: 'markdown',\n        ext: ['md', 'mdx']\n      }, {\n        mode: 'php_laravel_blade',\n        ext: ['blade.php']\n      }, {\n        mode: 'actionscript',\n        ext: ['as']\n      }, {\n        mode: 'apache_conf',\n        ext: ['conf']\n      }, {\n        mode: 'apex',\n        ext: ['cls']\n      }, {\n        mode: 'asciidoc',\n        ext: ['adoc']\n      }, {\n        mode: 'assembly_x86',\n        ext: ['asm']\n      }, {\n        mode: 'autohotkey',\n        ext: ['ahk']\n      }, {\n        mode: 'batchfile',\n        ext: ['bat']\n      }, {\n        mode: 'clojure',\n        ext: ['clj']\n      }, {\n        mode: 'cobol',\n        ext: ['cob']\n      }, {\n        mode: 'coldfusion',\n        ext: ['cfm']\n      }, {\n        mode: 'c_cpp',\n        ext: ['c', 'cpp', 'c++']\n      }, {\n        mode: 'crystal',\n        ext: ['cr']\n      }, {\n        mode: 'csharp',\n        ext: ['cs']\n      }, {\n        mode: 'csound_document',\n        ext: ['csd']\n      }, {\n        mode: 'csound_orchestra',\n        ext: ['orc']\n      }, {\n        mode: 'csound_score',\n        ext: ['sco']\n      }, {\n        mode: 'dockerfile',\n        ext: ['Dockerfile']\n      }, {\n        mode: 'drools',\n        ext: ['drl']\n      }, {\n        mode: 'edifact',\n        ext: ['edif']\n      }, {\n        mode: 'eiffel',\n        ext: ['e']\n      }, {\n        mode: 'elixir',\n        ext: ['ex', 'exs']\n      }, {\n        mode: 'erlang',\n        ext: ['erl']\n      }, {\n        mode: 'forth',\n        ext: ['4th', 'fth', 'frt']\n      }, {\n        mode: 'fortran',\n        ext: ['f', 'f77', 'f90']\n      }, {\n        mode: 'fsharp',\n        ext: ['fs']\n      }, {\n        mode: 'gherkin',\n        ext: ['feature']\n      }, {\n        mode: 'gobstones',\n        ext: ['gbs']\n      }, {\n        mode: 'golang',\n        ext: ['go']\n      }, {\n        mode: 'graphqlschema',\n        ext: ['graphqls']\n      }, {\n        mode: 'handlebars',\n        ext: ['hbs', 'handlebars']\n      }, {\n        mode: 'haskell',\n        ext: ['hs']\n      }, {\n        mode: 'haskell_cabal',\n        ext: ['cabal']\n      }, {\n        mode: 'haxe',\n        ext: ['hx']\n      }, {\n        mode: 'html_elixir',\n        ext: ['eex']\n      }, {\n        mode: 'html_ruby',\n        ext: ['erb']\n      }, {\n        mode: 'javascript',\n        ext: ['js', 'jsx']\n      }, {\n        mode: 'julia',\n        ext: ['jl']\n      }, {\n        mode: 'kotlin',\n        ext: ['kt']\n      }, {\n        mode: 'latex',\n        ext: ['tex']\n      }, {\n        mode: 'livescript',\n        ext: ['ls']\n      }, {\n        mode: 'logiql',\n        ext: ['logic', 'logiql']\n      }, {\n        mode: 'logtalk',\n        ext: ['lgt']\n      }, {\n        mode: 'luapage',\n        ext: ['page']\n      }, {\n        mode: 'makefile',\n        ext: ['makefile', 'mk', 'mak']\n      }, {\n        mode: 'markdown',\n        ext: ['md', 'markdown']\n      }, {\n        mode: 'maze',\n        ext: ['mz']\n      }, {\n        mode: 'mediawiki',\n        ext: ['wiki']\n      }, {\n        mode: 'mushcode',\n        ext: ['mush']\n      }, {\n        mode: 'nunjucks',\n        ext: ['nunjucks', 'nunjs', 'nj']\n      }, {\n        mode: 'objectivec',\n        ext: ['m']\n      }, {\n        mode: 'ocaml',\n        ext: ['ml', 'mli']\n      }, {\n        mode: 'pascal',\n        ext: ['pas']\n      }, {\n        mode: 'perl',\n        ext: ['pl']\n      }, {\n        mode: 'perl6',\n        ext: ['pl6', 'p6', 'pl']\n      }, {\n        mode: 'php_laravel_blade',\n        ext: ['blade.php']\n      }, {\n        mode: 'plain_text',\n        ext: ['txt']\n      }, {\n        mode: 'powershell',\n        ext: ['ps1']\n      }, {\n        mode: 'prolog',\n        ext: ['pl', 'pro', 'prolog']\n      }, {\n        mode: 'protobuf',\n        ext: ['proto']\n      }, {\n        mode: 'puppet',\n        ext: ['pp']\n      }, {\n        mode: 'python',\n        ext: ['py']\n      }, {\n        mode: 'razor',\n        ext: ['cshtml']\n      }, {\n        mode: 'ruby',\n        ext: ['rb']\n      }, {\n        mode: 'rust',\n        ext: ['rs']\n      }, {\n        mode: 'scheme',\n        ext: ['scm', 'ss']\n      }, {\n        mode: 'smarty',\n        ext: ['tpl']\n      }, {\n        mode: 'soy_template',\n        ext: ['soy']\n      }, {\n        mode: 'stylus',\n        ext: ['styl']\n      }, {\n        mode: 'terraform',\n        ext: ['tf', 'hcl']\n      }, {\n        mode: 'text',\n        ext: ['txt']\n      }, {\n        mode: 'turtle',\n        ext: ['ttl']\n      }, {\n        mode: 'typescript',\n        ext: ['ts']\n      }, {\n        mode: 'vbscript',\n        ext: ['vbs']\n      }, {\n        mode: 'velocity',\n        ext: ['vm']\n      }, {\n        mode: 'verilog',\n        ext: ['v']\n      }, {\n        mode: 'vhdl',\n        ext: ['vhd', 'vhdl']\n      }, {\n        mode: 'visualforce',\n        ext: ['page']\n      }, {\n        mode: 'wollok',\n        ext: ['wlk']\n      }, {\n        mode: 'xquery',\n        ext: ['xq', 'xql', 'xqm', 'xquery']\n      }, {\n        mode: 'yaml',\n        ext: ['yaml', 'yml']\n      }, {\n        mode: 'xml',\n        ext: ['jmx']\n      }];\n      return modes.includes(ext) ? ext : nonStandards.find(ns => ns.ext.includes(ext))?.mode || 'text';\n    }\n    setSelectedFile(folderDirectory, id = null) {\n      folderDirectory.map(dir => {\n        dir.selected = dir.id === id;\n        if (dir.children && dir.children.length > 0) {\n          this.setSelectedFile(dir.children, id);\n        }\n      });\n    }\n    setFolderDirIndex() {\n      let fileIndex = -1;\n      const setIndex = item => {\n        fileIndex++;\n        item.index = fileIndex;\n        if (item.children) {\n          item.children.map(child => setIndex(child));\n        }\n        return item;\n      };\n      this.prepareFolderDirectory.map(item => setIndex(item));\n    }\n    setSelectedDragFile(folderDir = null, parDrag = false) {\n      const folderDirectory = folderDir || this.prepareFolderDirectory;\n      const items = this.draggableItems;\n      folderDirectory.map(dir => {\n        const hasDrag = !!items?.find(di => di.id == dir.id);\n        dir.draggable = !parDrag && this.draggableFiles(dir.fileType) && hasDrag;\n        let isDraggable = dir.draggable || parDrag;\n        if (parDrag) {\n          const fileIndex = items.findIndex(di => dir.id === di.id);\n          if (fileIndex !== -1) {\n            items.splice(fileIndex, 1);\n            this.draggableItems = [...items];\n          }\n        }\n        if (dir.children && dir.children.length > 0) {\n          this.setSelectedDragFile(dir.children, isDraggable);\n        }\n      });\n    }\n    closeFile(id) {\n      this.loadedFiles = [...this.loadedFiles.filter(file => file.id !== id)];\n      if (this.selectedPanels.includes(id)) {\n        this.selectedPanels = this.selectedPanels.filter(sf => sf !== id);\n        if (this.selectedPanel === id) this.selectedPanel = '';\n      }\n      (0, _runloop.next)(this, () => {\n        const {\n          id: editorId\n        } = this.editorInstance || {};\n        if (editorId && editorId !== id) return;\n        const editorInstance = this.loadedFiles.length ? this.loadedFiles.slice(-1)[0] : null;\n        if (!editorInstance || editorInstance.fileType === 'system' || editorInstance.fileType === 'note') {\n          this.aiAgent.activeDataStoreId = null;\n        }\n        this.openFile(editorInstance || 'vcs', '');\n      });\n    }\n    updateFile(file) {\n      this.uploadSameFile = true;\n      this.baseRelativePath = this.parentDirPath(file.path, file.name);\n      document.getElementById('upload-file').click();\n    }\n    uploadFileInDirectory(file) {\n      this.baseRelativePath = `${file.path}`;\n      document.getElementById('upload-file').click();\n    }\n    uploadFolderInDirectory(file) {\n      this.baseRelativePath = `${file.path}/`;\n      window.localStorage.setItem(file.path, 'true');\n      document.getElementById('upload-folder').click();\n    }\n\n    // End: manage editorInstance and tabs\n\n    async renameFile(selectedDir) {\n      const {\n        id,\n        name,\n        path\n      } = selectedDir;\n      const updatedPath = this.parentDirPath(path, name);\n      if (!this.sameFileExist(name, updatedPath)) {\n        const response = await this.api.dataStores.updateRelativePaths(this.scriptId, [{\n          oldPath: path,\n          newPath: updatedPath\n        }]);\n        const file = response.files.find(fl => fl.id === id);\n        this.setValueByKey(id, null, file);\n        const dirEntry = this.folderDirectory.find(fd => fd.id === id);\n        if (dirEntry) Object.assign(dirEntry, file);\n        this.args.onStoreUpdate(response.files, file.updatedAt);\n        this.setAlert();\n      }\n    }\n    async renameFolder(selectedDir) {\n      const {\n        id,\n        name,\n        path\n      } = selectedDir;\n      const updatedPath = this.parentDirPath(path, name);\n      if (!this.sameFileExist(name, updatedPath, id)) {\n        const response = await this.api.dataStores.updateRelativePaths(this.scriptId, [{\n          oldPath: path,\n          newPath: updatedPath\n        }]);\n        const file = response.files.find(fl => fl.id === id || fl.path.split('/' + fl.name)[0] === updatedPath);\n        this.args.onStoreUpdate(response.files, file.updatedAt);\n      }\n    }\n    async createFile(fileData) {\n      const {\n        name,\n        path\n      } = fileData;\n      const newPath = `${path}${path !== '/' ? '/' : ''}${fileData.name}`;\n      if (!this.sameFileExist(name, newPath)) {\n        const file = await this.api.dataStores.create(this.scriptId, name, '', false, newPath);\n        let dataStores = this.folderDirectory;\n        if (!this.folderDirectory.find(ds => ds.id === file.id)) {\n          dataStores = this.folderDirectory.concat([file]);\n        }\n        (0, _runloop.next)(() => {\n          this.folderDirectory = dataStores;\n          this.openFileInEditor(file.id);\n          this.args.onStoreUpdate(this.toModelDataStores(dataStores), file.script.updatedAt);\n        });\n      }\n    }\n    async createFolder(fileData) {\n      const {\n        name,\n        path\n      } = fileData;\n      const newPath = `${path}${path !== '/' ? '/' : ''}${fileData.name}`;\n      if (!this.sameFileExist(name, newPath)) {\n        const file = await this.api.dataStores.create(this.scriptId, name, '', true, newPath);\n        let dataStores = this.folderDirectory;\n        if (!this.folderDirectory.find(ds => ds.id === file.id)) {\n          dataStores = this.folderDirectory.concat([file]);\n        }\n        this.args.onStoreUpdate(this.toModelDataStores(dataStores), file.script.updatedAt);\n      }\n    }\n    inputAction(...args) {\n      this.setAlert('info', 'Saving...');\n      const obj = args[args.length - 1];\n      this[obj.actionType](obj);\n      this.actionType = '';\n    }\n    async deleteFile(...args) {\n      this.setAlert('warning', 'Deleting...');\n      const id = args[args.length - 1];\n      const file = await this.api.dataStores.deleteFile(id);\n      let dataStores = this.folderDirectory.filter(fd => fd.id !== id);\n      this.args.onStoreUpdate(this.toModelDataStores(dataStores), file.script.updatedAt);\n    }\n    addDragDropFolder(...args) {\n      const file = args[args.length - 2];\n      const event = args[args.length - 1];\n      this.handleDraggableItems(file, event?.metaKey, event?.shiftKey);\n    }\n    async deleteFolder(...args) {\n      this.setAlert('warning', 'Deleting...');\n      const {\n        path\n      } = args[args.length - 1];\n      const folderPath = _lib.default.sanitizeFolderName(path);\n      try {\n        if (folderPath === '/') {\n          await this.api.dataStores.deleteAll(this.scriptId);\n        } else {\n          await this.api.dataStores.deleteFolder(this.scriptId, folderPath);\n        }\n      } catch (error) {\n        console.log('error', error);\n      }\n      this.args.onStoreUpdate();\n    }\n    async extractFile(file) {\n      this.setAlert('info', 'Extracting...');\n      try {\n        await this.api.dataStores.extractFile(file.id);\n      } catch (error) {}\n      this.args.onStoreUpdate();\n    }\n    async updateFileContent(type, content, {\n      id,\n      name,\n      defaultName\n    }) {\n      if (this.editorInstance.id !== id) return;\n      if (this._remoteContent !== null && this._remoteContent === content) {\n        this._remoteContent = null;\n        return;\n      }\n      this._remoteContent = null;\n      this.isSavingContent = true;\n      const loadedFile = this.loadedFiles.find(file => file.id === id);\n      loadedFile.code = content;\n      this.editorInstance = loadedFile;\n      const file = this.editorInstance;\n      if (file && this.args.defaultFiles?.find(df => df.id === file.id)) {\n        this.folderDirectory.map(dir => {\n          if (dir.id === file.id) {\n            dir.code = file.code;\n          }\n        });\n        await this.args.updateContent(file.id, file.code);\n      } else {\n        const selectedFile = await this.findObjectByKey('id', id);\n        const result = await this.api.dataStores.updateContents(id, defaultName || name, selectedFile.path || `/${defaultName || name}`, content);\n        this.editorInstance.size = result.size;\n        this.editorInstance.updatedAt = result.updatedAt;\n        const dirEntry = this.folderDirectory.find(fd => fd.id === id);\n        if (dirEntry) {\n          dirEntry.size = result.size;\n          dirEntry.updatedAt = result.updatedAt;\n        }\n        this.setValueByKey(id, 'tooltip', this.prepareFileTooltip(result, false, true));\n        this.args.onStoreUpdate(true, result.updatedAt);\n      }\n      this.isSavingContent = false;\n    }\n    initialize(event, params) {\n      const [, change] = params;\n      const {\n        language,\n        defaultFiles,\n        hiddenFilesId,\n        model,\n        selectedPanel,\n        showVcsTab\n      } = this.args;\n      const selPanel = selectedPanel && change === 'panel' ? selectedPanel.split('-')[0] : '';\n      const dataStores = this.modelDataStores;\n      const noChanges = this.language === language && this.hiddenFilesId === hiddenFilesId && (_.isEqual(this.defaultFiles, defaultFiles) || !this.defaultFiles?.length && !defaultFiles?.length) &&\n      // Need to test and remove this condition ...\n      JSON.stringify(this.dataStores) === JSON.stringify(dataStores) && _.isEqual(this.defaultShowVcsTab, showVcsTab) && (!selPanel || _.isEqual(this.aceEditor?.fileType, selPanel));\n      if (noChanges) {\n        this.setAlert();\n        return;\n      }\n      const languageChanged = this.language !== language;\n      if (languageChanged) {\n        this.showEditorInstance = false;\n      }\n      this.defaultFiles = defaultFiles;\n      this.dataStores = {\n        ...dataStores\n      };\n      this.selectedPanel = selPanel;\n      this.hiddenFilesId = hiddenFilesId;\n      this.scriptId = model.id;\n      this.folderDirectory = this.getFolderDirectory();\n      (0, _runloop.next)(this, () => {\n        this.language = language;\n        const dataStoresIds = this.folderDirectory.map(({\n          id\n        }) => id);\n\n        // Register new panel tab if not already tracked\n        if (selPanel && !this.selectedPanels.includes(selPanel)) {\n          this.selectedPanels.push(selPanel);\n          this.loadedFiles.push(new _trackedBuiltIns.TrackedObject({\n            id: selPanel,\n            name: this.getPanelName(selPanel),\n            fileType: selPanel,\n            status: false\n          }));\n        }\n\n        // Sync loaded files: drop removed data stores, update metadata for remaining ones\n        const loadedFiles = this.loadedFiles.filter(lf => dataStoresIds.includes(lf.id) || this.selectedPanels.includes(lf.id)).map(lf => {\n          if (!this.selectedPanels.includes(lf.id)) {\n            const updated = this.folderDirectory.find(ds => ds.id === lf.id);\n            const isDefaultFile = this.args.defaultFiles?.find(df => df.id === lf.id);\n            lf.name = updated.name;\n            lf.size = updated.size;\n            if (lf.fileType === 'system' || isDefaultFile) {\n              if (lf.id === this.editorInstance?.id && updated.code !== lf.code) {\n                this._remoteContent = updated.code;\n              }\n              lf.code = updated.code;\n            }\n          }\n          return lf;\n        });\n        this.loadedFiles = [...loadedFiles];\n        const loadedFilesIds = loadedFiles.map(({\n          id\n        }) => id);\n\n        // Resolve which editor file to show\n        let loadEditorFile = true;\n        if (selPanel && this.editorInstance?.fileType !== selPanel) {\n          this.editorInstance = loadedFiles.find(lf => lf.fileType === selPanel);\n        } else if (this.editorInstance) {\n          const stillExists = dataStoresIds.includes(this.editorInstance.id) || loadedFilesIds.includes(this.editorInstance.id);\n          if (!stillExists) {\n            this.editorInstance = loadedFiles.at(-1) ?? null;\n          } else {\n            const updated = loadedFiles.find(lf => lf.id === this.editorInstance.id);\n            const isDefaultFile = this.args.defaultFiles?.find(df => df.id === this.editorInstance.id);\n            this.editorInstance.size = updated.size;\n            this.editorInstance.name = updated.name;\n            if (isDefaultFile && updated.code !== this.editorInstance.code) {\n              this._remoteContent = updated.code;\n              this.editorInstance.code = updated.code;\n            }\n            loadEditorFile = false;\n          }\n        }\n        if (loadEditorFile) {\n          const hasEditor = Boolean(this.editorInstance?.id);\n          this.showVcsTab = !hasEditor && this.args.showVcsTab;\n          this.onUpdateEditor();\n          if (!this.showVcsTab && !hasEditor) {\n            this.defaultFileId = '';\n            this.setDefaultFile();\n          }\n          if (hasEditor && this.draggableFiles(this.editorInstance?.fileType)) {\n            this.resetDragItems(this);\n          }\n        } else {\n          this.setSelectedFile(this.prepareFolderDirectory, this.editorInstance?.id);\n          if (languageChanged) {\n            this.setShowEditorInstance();\n          }\n        }\n        this.setAlert();\n      });\n    }\n    templateSelected(selection) {\n      if (selection) {\n        let editor = ace.edit(`package${this.aceEditor.mode}Editor${this.aceEditor.id}`);\n        this.args.selectedTemplate(editor, selection, this.aceEditor);\n      }\n    }\n    async setValueByKey(id, key, value) {\n      const selectedFile = await this.findObjectByKey('id', id);\n      if (key === null) {\n        Object.assign(selectedFile, value);\n      } else {\n        selectedFile[key] = value;\n      }\n    }\n    getPanelName(selected) {\n      switch (selected) {\n        case \"tagsTab\":\n          return \"Tags\";\n        case \"paramsTab\":\n          return \"Parameters\";\n        case \"additionalTab\":\n          return \"Settings\";\n      }\n    }\n    parentDirPath(path, name = '') {\n      const aParts = path && path !== '/' ? path.split('/') : [];\n      aParts[aParts.length - 1] = name;\n      return aParts.join('/');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"realtimeService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"editorInstance\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadedFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"leftDivWidth\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"handleMouseMove\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"handleMouseUp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"queue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"loadingFileContents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"showEditorInstance\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"scriptId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"folderDirectory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"baseRelativePath\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"alertMessage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"alertClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"actionType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"template\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"language\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"defaultFiles\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"dataStores\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"hiddenFilesId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"selectedPanels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"uploadSameFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"isSavingContent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"defaultFileId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"showVcsTab\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.showVcsTab;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"isDragging\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"metaKeyPressed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"initializedDraggables\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"initializedDroppables\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"draggableItems\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"startIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"_onContentDiff\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onContentDiff\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onContentRefreshRequired\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onContentRefreshRequired\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onDataStoreRemoved\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onDataStoreRemoved\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"prepareFolderDirectory\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"prepareFolderDirectory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resizeContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resizeContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSearch\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSearch\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initDragDrop\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initDragDrop\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setDefaultFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setDefaultFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleNoteActions\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleNoteActions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setInputType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setInputType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"fileUploadSelect\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"fileUploadSelect\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFileBase\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFileBase\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFolderBase\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFolderBase\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openFileInEditor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openFileInEditor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateEditor\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateEditor\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"generateExampleFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"generateExampleFiles\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFilePathContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFilePathContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"getMode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"getMode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setSelectedFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setSelectedFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setSelectedDragFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setSelectedDragFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFileInDirectory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFileInDirectory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadFolderInDirectory\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadFolderInDirectory\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renameFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renameFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"inputAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"inputAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"addDragDropFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"addDragDropFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"extractFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"extractFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateFileContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateFileContent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"initialize\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initialize\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"templateSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"templateSelected\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FilesManagerComponent);\n});","define(\"@testable/shared-ui/components/ui/folder-directory\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _runloop, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#each @data  as |dir|}}\n    <li class=\"{{this.dirClasses dir}} {{if dir.selected \"selected\"}} {{if dir.draggable \"draggable\"}}\"\n      data-path=\"{{dir.path}}\"\n      data-name=\"{{dir.name}}\"\n      data-id=\"{{dir.id}}\"\n      data-isFolder=\"{{dir.isFolder}}\"\n      id=\"{{dir.id}}\"\n      {{did-update this.actionType @actionType}}\n    >\n      {{#if (and dir.isFolder (not (and (eq this.inputField.actionType 'renameFolder') (eq this.inputField.id dir.id))))}}\n        <div class=\"name-wrapper\" {{on \"click\" (fn this.folderAction dir)}}>\n          <div class=\"name\">\n            <Ui::Icon @noRender={{true}} @icon={{this.getIcon dir.isClosed}} class=\"text-warning\" />\n            {{dir.name}}\n          </div>\n          <Ui::RightClickMenu @file={{dir}}\n            @isDragSelect={{@isDragSelect}}\n            @renameFolder={{fn this.enableInput 'renameFolder' }}\n            @createFolder={{fn this.enableInput 'createFolder' }}\n            @createFile={{fn this.enableInput 'createFile' }}\n            @deleteFolder={{this.deleteFolder}}\n            @uploadFile={{@uploadFileInDirectory}}\n            @readonly={{@readonly}}\n            @uploadFolder={{@uploadFolderInDirectory}} />\n        </div>\n      {{/if}}\n  \n      {{#if (eq this.inputField.id dir.id)}}\n        <Input {{on \"keydown\" this.inputAction}} {{did-insert this.focusInput}}\n        @value={{this.inputField.name}}\n        placeholder={{this.placeHolder this.inputField}}\n        class=\"p-0 selected\" />\n      {{/if}}\n  \n      {{#if dir.isFolder}}\n        <ul class=\"{{if dir.children.length \"has-dir\"}} {{if dir.isClosed \"closed\"}}\">\n          <Ui::FolderDirectory\n            @isDragSelect={{@isDragSelect}}\n            @loadedFiles={{@loadedFiles}}\n            @data={{dir.children}}\n            @openFile={{fn @openFile dir}}\n            @inputAction={{fn @inputAction dir}}\n            @deleteFile={{fn @deleteFile dir.id}}\n            @deleteFolder={{fn @deleteFolder dir}}\n            @addDragDropFolder={{fn @addDragDropFolder dir}}\n            @extractFile={{@extractFile}}\n            @readonly={{@readonly}}\n            @uploadFileInDirectory={{@uploadFileInDirectory}}\n            @uploadFolderInDirectory={{@uploadFolderInDirectory}}\n            @updateInputType={{@updateInputType}} />\n        </ul>\n      {{else if (eq dir.fileType \"button\")}}\n        <button type=\"button\" class=\"btn btn-primary\" {{on \"click\" (fn @uploadFileInDirectory dir)}}>{{dir.name}}</button>\n      {{else if (not (and (eq this.inputField.actionType 'renameFile') (eq this.inputField.id dir.id)))}}\n        <div class=\"name-wrapper\"\n             data-bs-toggle=\"popover\"\n             data-bs-html=\"true\"\n             data-bs-trigger=\"hover\"\n             data-bs-content={{dir.tooltip}}\n             data-bs-placement=\"right\"\n             {{on \"click\" (fn @openFile dir)}}\n        >\n          <div class=\"name {{if (or (eq dir.fileType \"system\") (eq dir.fileType \"note\")) \"default\"}}\">\n            <Ui::Icon @noRender={{true}} @icon=\"fa-file\" />\n            {{dir.name}}\n          </div>\n        </div>\n        <Ui::RightClickMenu\n          @file={{dir}}\n          @isDragSelect={{@isDragSelect}}\n          @renameFile={{fn this.enableInput 'renameFile' }}\n          @deleteFile={{this.deleteFile}}\n          @downloadFile={{this.downloadFile}}\n          @extractFile={{@extractFile}}\n          @readonly={{@readonly}}\n          @previewCsv={{this.previewCsv}} />\n      {{/if}}\n  \n      {{#if dir.baseFolder}}\n        <div class=\"base-folder\">\n          <Ui::RightClickMenu @file={{dir}}\n            @isDragSelect={{@isDragSelect}}\n            @createFile={{fn this.enableInput 'createFile' }}\n            @createFolder={{fn this.enableInput 'createFolder' }}\n            @uploadFile={{@uploadFileInDirectory}}\n            @uploadFolder={{@uploadFolderInDirectory}}\n            @deleteFolder={{this.deleteFolder}}\n            @readonly={{@readonly}}\n          />\n        </div>\n      {{/if}}\n    </li>\n  {{/each}}\n  \n  {{#if this.showCsvPreviewModal}}\n    <CsvPreviewModal @file={{this.previewFile}} @loadedFiles={{@loadedFiles}}\n      @modalClosed={{this.csvPreviewModalClosed}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[42,[28,[37,1],[[28,[37,1],[[30,1]],null]],null],null,[[[1,\\\"  \\\"],[11,\\\"li\\\"],[16,0,[29,[[28,[30,0,[\\\"dirClasses\\\"]],[[30,2]],null],\\\" \\\",[52,[30,2,[\\\"selected\\\"]],\\\"selected\\\"],\\\" \\\",[52,[30,2,[\\\"draggable\\\"]],\\\"draggable\\\"]]]],[16,\\\"data-path\\\",[29,[[30,2,[\\\"path\\\"]]]]],[16,\\\"data-name\\\",[29,[[30,2,[\\\"name\\\"]]]]],[16,\\\"data-id\\\",[29,[[30,2,[\\\"id\\\"]]]]],[16,\\\"data-isFolder\\\",[29,[[30,2,[\\\"isFolder\\\"]]]]],[16,1,[29,[[30,2,[\\\"id\\\"]]]]],[4,[38,4],[[30,0,[\\\"actionType\\\"]],[30,3]],null],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,2,[\\\"isFolder\\\"]],[28,[37,6],[[28,[37,5],[[28,[37,7],[[30,0,[\\\"inputField\\\",\\\"actionType\\\"]],\\\"renameFolder\\\"],null],[28,[37,7],[[30,0,[\\\"inputField\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null]],null]],null]],null],[[[1,\\\"      \\\"],[11,0],[24,0,\\\"name-wrapper\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"folderAction\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"name\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,11],[[24,0,\\\"text-warning\\\"]],[[\\\"@noRender\\\",\\\"@icon\\\"],[true,[28,[30,0,[\\\"getIcon\\\"]],[[30,2,[\\\"isClosed\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[39,12],null,[[\\\"@file\\\",\\\"@isDragSelect\\\",\\\"@renameFolder\\\",\\\"@createFolder\\\",\\\"@createFile\\\",\\\"@deleteFolder\\\",\\\"@uploadFile\\\",\\\"@readonly\\\",\\\"@uploadFolder\\\"],[[30,2],[30,4],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"renameFolder\\\"],null],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"createFolder\\\"],null],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"createFile\\\"],null],[30,0,[\\\"deleteFolder\\\"]],[30,5],[30,6],[30,7]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,0,[\\\"inputField\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null],[[[1,\\\"      \\\"],[8,[39,13],[[16,\\\"placeholder\\\",[28,[30,0,[\\\"placeHolder\\\"]],[[30,0,[\\\"inputField\\\"]]],null]],[24,0,\\\"p-0 selected\\\"],[4,[38,9],[\\\"keydown\\\",[30,0,[\\\"inputAction\\\"]]],null],[4,[38,14],[[30,0,[\\\"focusInput\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"inputField\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"isFolder\\\"]],[[[1,\\\"      \\\"],[10,\\\"ul\\\"],[15,0,[29,[[52,[30,2,[\\\"children\\\",\\\"length\\\"]],\\\"has-dir\\\"],\\\" \\\",[52,[30,2,[\\\"isClosed\\\"]],\\\"closed\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@isDragSelect\\\",\\\"@loadedFiles\\\",\\\"@data\\\",\\\"@openFile\\\",\\\"@inputAction\\\",\\\"@deleteFile\\\",\\\"@deleteFolder\\\",\\\"@addDragDropFolder\\\",\\\"@extractFile\\\",\\\"@readonly\\\",\\\"@uploadFileInDirectory\\\",\\\"@uploadFolderInDirectory\\\",\\\"@updateInputType\\\"],[[30,4],[30,8],[30,2,[\\\"children\\\"]],[28,[37,10],[[30,9],[30,2]],null],[28,[37,10],[[30,10],[30,2]],null],[28,[37,10],[[30,11],[30,2,[\\\"id\\\"]]],null],[28,[37,10],[[30,12],[30,2]],null],[28,[37,10],[[30,13],[30,2]],null],[30,14],[30,6],[30,5],[30,7],[30,15]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,7],[[30,2,[\\\"fileType\\\"]],\\\"button\\\"],null],[[[1,\\\"      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,5],[30,2]],null]],null],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,6],[[28,[37,5],[[28,[37,7],[[30,0,[\\\"inputField\\\",\\\"actionType\\\"]],\\\"renameFile\\\"],null],[28,[37,7],[[30,0,[\\\"inputField\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null]],null]],null],[[[1,\\\"      \\\"],[11,0],[24,0,\\\"name-wrapper\\\"],[24,\\\"data-bs-toggle\\\",\\\"popover\\\"],[24,\\\"data-bs-html\\\",\\\"true\\\"],[24,\\\"data-bs-trigger\\\",\\\"hover\\\"],[16,\\\"data-bs-content\\\",[30,2,[\\\"tooltip\\\"]]],[24,\\\"data-bs-placement\\\",\\\"right\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,9],[30,2]],null]],null],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[29,[\\\"name \\\",[52,[28,[37,18],[[28,[37,7],[[30,2,[\\\"fileType\\\"]],\\\"system\\\"],null],[28,[37,7],[[30,2,[\\\"fileType\\\"]],\\\"note\\\"],null]],null],\\\"default\\\"]]]],[12],[1,\\\"\\\\n          \\\"],[8,[39,11],null,[[\\\"@noRender\\\",\\\"@icon\\\"],[true,\\\"fa-file\\\"]],null],[1,\\\"\\\\n          \\\"],[1,[30,2,[\\\"name\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,12],null,[[\\\"@file\\\",\\\"@isDragSelect\\\",\\\"@renameFile\\\",\\\"@deleteFile\\\",\\\"@downloadFile\\\",\\\"@extractFile\\\",\\\"@readonly\\\",\\\"@previewCsv\\\"],[[30,2],[30,4],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"renameFile\\\"],null],[30,0,[\\\"deleteFile\\\"]],[30,0,[\\\"downloadFile\\\"]],[30,14],[30,6],[30,0,[\\\"previewCsv\\\"]]]],null],[1,\\\"\\\\n    \\\"]],[]],null]],[]]]],[]]],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"baseFolder\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"base-folder\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,12],null,[[\\\"@file\\\",\\\"@isDragSelect\\\",\\\"@createFile\\\",\\\"@createFolder\\\",\\\"@uploadFile\\\",\\\"@uploadFolder\\\",\\\"@deleteFolder\\\",\\\"@readonly\\\"],[[30,2],[30,4],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"createFile\\\"],null],[28,[37,10],[[30,0,[\\\"enableInput\\\"]],\\\"createFolder\\\"],null],[30,5],[30,7],[30,0,[\\\"deleteFolder\\\"]],[30,6]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showCsvPreviewModal\\\"]],[[[1,\\\"  \\\"],[8,[39,19],null,[[\\\"@file\\\",\\\"@loadedFiles\\\",\\\"@modalClosed\\\"],[[30,0,[\\\"previewFile\\\"]],[30,8],[30,0,[\\\"csvPreviewModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@data\\\",\\\"dir\\\",\\\"@actionType\\\",\\\"@isDragSelect\\\",\\\"@uploadFileInDirectory\\\",\\\"@readonly\\\",\\\"@uploadFolderInDirectory\\\",\\\"@loadedFiles\\\",\\\"@openFile\\\",\\\"@inputAction\\\",\\\"@deleteFile\\\",\\\"@deleteFolder\\\",\\\"@addDragDropFolder\\\",\\\"@extractFile\\\",\\\"@updateInputType\\\"],[\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"if\\\",\\\"did-update\\\",\\\"and\\\",\\\"not\\\",\\\"eq\\\",\\\"div\\\",\\\"on\\\",\\\"fn\\\",\\\"ui/icon\\\",\\\"ui/right-click-menu\\\",\\\"input\\\",\\\"did-insert\\\",\\\"ul\\\",\\\"ui/folder-directory\\\",\\\"button\\\",\\\"or\\\",\\\"csv-preview-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/folder-directory.hbs\",\n    \"isStrictMode\": false\n  });\n  let FolderDirectoryComponent = _exports.default = (_class = class FolderDirectoryComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"inputField\", _descriptor2, this);\n      _initializerDefineProperty(this, \"previewFile\", _descriptor3, this);\n      _initializerDefineProperty(this, \"showCsvPreviewModal\", _descriptor4, this);\n    }\n    dirClasses(dir) {\n      return (!['system', 'note', 'button'].includes(dir.fileType) ? 'sort-handle ' : '') + (dir.isFolder ? 'folder' : 'file');\n    }\n    getIcon(isClosed) {\n      return isClosed ? 'fa-folder-closed' : 'fa-folder-open';\n    }\n    placeHolder(input) {\n      let message;\n      switch (input.actionType) {\n        case 'createFolder':\n          message = 'Please enter a folder name';\n          break;\n        case 'createFile':\n          message = 'Please enter a file name';\n          break;\n        default:\n          message = '';\n      }\n      return message;\n    }\n\n    // Start: Handle Input\n    focusInput(element) {\n      if (element) {\n        element.focus();\n        (0, _runloop.next)(this, () => {\n          document.body.addEventListener('click', this.handleOutsideClick);\n          document.body.addEventListener('contextmenu', this.handleOutsideClick);\n        });\n      }\n    }\n    handleOutsideClick(event) {\n      if (!event.target.closest('input.selected') && !event.target.closest('.ui-right-click-menu')) {\n        this.resetInput();\n      }\n    }\n    resetInput() {\n      this.inputField = null;\n      this.args.updateInputType('');\n      document.body.removeEventListener('click', this.handleOutsideClick);\n      document.body.removeEventListener('contextmenu', this.handleOutsideClick);\n    }\n    actionType(dom, [actionType]) {\n      if (actionType) this.enableInput(actionType, {\n        id: 'base'\n      });\n    }\n    enableInput(actionType, {\n      id\n    }) {\n      const inputField = this.args.data.find(file => file.id === id);\n      inputField.isClosed = false;\n      window.localStorage.setItem(inputField.path, 'false');\n      this.inputField = {\n        ...inputField,\n        path: inputField.path || inputField.name,\n        name: actionType === 'createFolder' || actionType === 'createFile' ? '' : inputField.name,\n        oldName: inputField.name,\n        actionType\n      };\n    }\n    async inputAction(e) {\n      if (e.key === 'Enter') {\n        const {\n          oldName,\n          actionType\n        } = this.inputField;\n        const name = this.inputField.name?.trim();\n        if (name && (name !== oldName || actionType.includes('create'))) {\n          this.args.inputAction({\n            ...this.inputField,\n            name\n          });\n        }\n        this.resetInput();\n      } else if (e.key === 'Escape') {\n        this.resetInput();\n      }\n    }\n    // End: Handle Input\n\n    folderAction(item, event) {\n      if (event.metaKey || event.shiftKey) {\n        this.args.addDragDropFolder(item, event);\n      } else {\n        item.isClosed = !item.isClosed;\n        window.localStorage.setItem(item.path, `${item.isClosed}`);\n      }\n    }\n    deleteFile(file) {\n      _lib.default.confirm(`Are you sure you want to delete ${file.name}?`, 'Delete File', async () => {\n        this.args.deleteFile(file.id);\n      }, 'Cancel', () => {}, 'Delete File');\n    }\n    downloadFile(file) {\n      window.open(file.url, \"_blank\");\n    }\n    deleteFolder(file) {\n      _lib.default.confirm(`Are you sure you want to delete the ${file.name === '/' ? 'root' : file.name} folder? All the files in the folder will be deleted!`, 'Delete Folder', async () => {\n        this.args.deleteFolder(file);\n      }, 'Cancel', () => {}, 'Delete Folder');\n    }\n    previewCsv(file) {\n      this.previewFile = file;\n      this.showCsvPreviewModal = true;\n    }\n    csvPreviewModalClosed() {\n      this.showCsvPreviewModal = false;\n      this.previewFile = null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"inputField\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"previewFile\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showCsvPreviewModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"focusInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleOutsideClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleOutsideClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resetInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"actionType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"actionType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"enableInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"enableInput\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"inputAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"inputAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"folderAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"folderAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteFolder\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteFolder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"previewCsv\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"previewCsv\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"csvPreviewModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"csvPreviewModalClosed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FolderDirectoryComponent);\n});","define(\"@testable/shared-ui/components/ui/footer\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"footer\" class=\"footer no-print\">\n    <div class=\"container\">\n      <p>\n        By using your account, you agree to our terms of service. &copy; Copyright Testable {{@date}}. All rights\n        reserved.\n        <br />\n        <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https://status.testable.io\">Status Page</a>\n        | <LinkTo @route='terms'>Terms of Service</LinkTo>\n        | <LinkTo @route='privacy-policy'>Privacy Policy</LinkTo>\n        | <LinkTo @route='cookie-policy'>Cookie Policy</LinkTo>\n      </p>\n      <p class=\"social-list\">\n        <a href=\"mailto:support@testable.io\" aria-label=\"Email support\">\n          <Ui::Icon @icon=\"fa fa-envelope fa-fw\" />\n        </a>\n        <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https://www.facebook.com/testableio\" aria-label=\"Testable on Facebook\">\n          <Ui::Icon @icon=\"fab fa-facebook fa-fw\" />\n        </a>\n        <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"https://twitter.com/testableio\" aria-label=\"Testable on Twitter\">\n          <Ui::Icon @icon=\"fab fa-twitter fa-fw\" />\n        </a>\n      </p>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,1,\\\"footer\\\"],[14,0,\\\"footer no-print\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"container\\\"],[12],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      By using your account, you agree to our terms of service. © Copyright Testable \\\"],[1,[30,1]],[1,\\\". All rights\\\\n      reserved.\\\\n      \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[14,6,\\\"https://status.testable.io\\\"],[12],[1,\\\"Status Page\\\"],[13],[1,\\\"\\\\n      | \\\"],[8,[39,4],null,[[\\\"@route\\\"],[\\\"terms\\\"]],[[\\\"default\\\"],[[[[1,\\\"Terms of Service\\\"]],[]]]]],[1,\\\"\\\\n      | \\\"],[8,[39,4],null,[[\\\"@route\\\"],[\\\"privacy-policy\\\"]],[[\\\"default\\\"],[[[[1,\\\"Privacy Policy\\\"]],[]]]]],[1,\\\"\\\\n      | \\\"],[8,[39,4],null,[[\\\"@route\\\"],[\\\"cookie-policy\\\"]],[[\\\"default\\\"],[[[[1,\\\"Cookie Policy\\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[14,0,\\\"social-list\\\"],[12],[1,\\\"\\\\n      \\\"],[10,3],[14,6,\\\"mailto:support@testable.io\\\"],[14,\\\"aria-label\\\",\\\"Email support\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-envelope fa-fw\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[14,6,\\\"https://www.facebook.com/testableio\\\"],[14,\\\"aria-label\\\",\\\"Testable on Facebook\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fab fa-facebook fa-fw\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,3],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noreferrer noopener\\\"],[14,6,\\\"https://twitter.com/testableio\\\"],[14,\\\"aria-label\\\",\\\"Testable on Twitter\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fab fa-twitter fa-fw\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@date\\\"],[\\\"div\\\",\\\"p\\\",\\\"br\\\",\\\"a\\\",\\\"link-to\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/footer.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"footer\"));\n});","define(\"@testable/shared-ui/components/ui/icon\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _runloop, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div {{did-insert this.onInsertIcon}} {{will-destroy this.teardown}} {{did-update this.updateIcon @icon}} ...attributes class=\"ui-icon\">\n    {{#if this.showIcon}}\n      {{#if this.icon}}\n        <i data-prefix={{@dataPrefix}} data-icon={{@dataIcon}} class=\"fa {{this.icon}}\"></i>\n      {{else}}\n        <i data-prefix={{@dataPrefix}} data-icon={{@dataIcon}} class=\"fa {{@icon}}\"></i>\n      {{/if}}\n      {{yield}}\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[17,1],[24,0,\\\"ui-icon\\\"],[4,[38,1],[[30,0,[\\\"onInsertIcon\\\"]]],null],[4,[38,2],[[30,0,[\\\"teardown\\\"]]],null],[4,[38,3],[[30,0,[\\\"updateIcon\\\"]],[30,2]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showIcon\\\"]],[[[41,[30,0,[\\\"icon\\\"]],[[[1,\\\"      \\\"],[10,\\\"i\\\"],[15,\\\"data-prefix\\\",[30,3]],[15,\\\"data-icon\\\",[30,4]],[15,0,[29,[\\\"fa \\\",[30,0,[\\\"icon\\\"]]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"i\\\"],[15,\\\"data-prefix\\\",[30,3]],[15,\\\"data-icon\\\",[30,4]],[15,0,[29,[\\\"fa \\\",[30,2]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[18,5,null],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"&attrs\\\",\\\"@icon\\\",\\\"@dataPrefix\\\",\\\"@dataIcon\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"did-update\\\",\\\"if\\\",\\\"i\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/icon.hbs\",\n    \"isStrictMode\": false\n  });\n  let IconComponent = _exports.default = (_class = class IconComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"showIcon\", _descriptor, this);\n      _initializerDefineProperty(this, \"icon\", _descriptor2, this);\n      _defineProperty(this, \"_observer\", null);\n    }\n    onInsertIcon(element) {\n      if (window.location.href.includes('print=true')) {\n        (0, _runloop.next)(this, () => {\n          this.showIcon = true;\n        });\n        return;\n      }\n      this._observer = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            (0, _runloop.next)(this, () => {\n              this.showIcon = true;\n            });\n            this._observer.disconnect();\n            this._observer = null;\n          }\n        });\n      });\n      this._observer.observe(element);\n    }\n    updateIcon(dom, [icon]) {\n      this.icon = '';\n      (0, _runloop.next)(this, () => {\n        this.icon = icon;\n      });\n    }\n    teardown() {\n      if (this._observer) {\n        this._observer.disconnect();\n        this._observer = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"showIcon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return !!this.args.noRender;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"icon\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.icon;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onInsertIcon\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsertIcon\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIcon\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIcon\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"teardown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"teardown\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, IconComponent);\n});","define(\"@testable/shared-ui/components/ui/infinite-scroller\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"rsvp\", \"ember-modifier\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _runloop, _rsvp, _emberModifier, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"rsvp\",0,\"ember-modifier\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n          class=\"infinite-scroller\"\n          data-loading=\"{{this.isLoading}}\"\n          data-scrollable=\"{{this.isScrollable}}\"\n          ...attributes\n    {{this.setScroller @element}}\n  >\n    {{yield this.api}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"infinite-scroller\\\"],[16,\\\"data-loading\\\",[29,[[30,0,[\\\"isLoading\\\"]]]]],[16,\\\"data-scrollable\\\",[29,[[30,0,[\\\"isScrollable\\\"]]]]],[17,1],[4,[30,0,[\\\"setScroller\\\"]],[[30,2]],null],[12],[1,\\\"\\\\n  \\\"],[18,3,[[30,0,[\\\"api\\\"]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@element\\\",\\\"&default\\\"],[\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/infinite-scroller.hbs\",\n    \"isStrictMode\": false\n  });\n  // https://github.com/zestia/ember-simple-infinite-scroller\n\n  const {\n    round\n  } = Math;\n  let InfiniteScrollerComponent = _exports.default = (_class = class InfiniteScrollerComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor, this);\n      _initializerDefineProperty(this, \"isScrollable\", _descriptor2, this);\n      _defineProperty(this, \"debug\", void 0);\n      _defineProperty(this, \"scroller\", void 0);\n      _defineProperty(this, \"debounceId\", void 0);\n      _defineProperty(this, \"setScroller\", (0, _emberModifier.modifier)((element, [positionalElement]) => {\n        this._registerScroller(positionalElement ?? element);\n        return () => this._deregisterScroller();\n      }, {\n        eager: false\n      }));\n      _defineProperty(this, \"api\", new Proxy(this, {\n        get(target, key) {\n          return target._api[key];\n        },\n        set() {}\n      }));\n    }\n    get debounce() {\n      return this.args.debounce ?? 500;\n    }\n    get percent() {\n      return this.args.percent ?? 80;\n    }\n    get normalisedScrollerElement() {\n      if (this.scroller instanceof Document) {\n        return this.scroller.documentElement;\n      } else {\n        return this.scroller;\n      }\n    }\n    get canLoadMore() {\n      return this.args.canLoadMore ?? true;\n    }\n    handleScroll() {\n      this.debounceId = (0, _runloop.debounce)(this, '_checkShouldLoadMore', this.debounce);\n    }\n    loadMore() {\n      if (!this.canLoadMore) {\n        return;\n      }\n      this.isLoading = true;\n      this.args.onLoadMore();\n      (0, _rsvp.resolve)(this.args.onLoadMore?.()).finally(() => {\n        this.isLoading = false;\n        this._checkScrollable();\n      });\n    }\n    _registerScroller(element) {\n      this.scroller = element;\n      this._startListening();\n      this._checkScrollable();\n    }\n    _deregisterScroller() {\n      this._stopListening();\n      (0, _runloop.cancel)(this.debounceId);\n      this.scroller = null;\n    }\n    _startListening() {\n      this.scroller.addEventListener('scroll', this.handleScroll);\n    }\n    _stopListening() {\n      this.scroller.removeEventListener('scroll', this.handleScroll);\n    }\n    _checkShouldLoadMore() {\n      if (!this.canLoadMore) {\n        return;\n      }\n      const scrollState = this._getScrollState();\n      const shouldLoadMore = scrollState.reachedBottom && !this.isLoading;\n      this._debug({\n        ...scrollState,\n        shouldLoadMore\n      });\n      if (shouldLoadMore) {\n        this.loadMore();\n      }\n    }\n    _checkScrollable() {\n      if (this.isDestroying || this.isDestroyed) {\n        return;\n      }\n      const scrollState = this._getScrollState();\n      this._debug({\n        ...scrollState\n      });\n      this.isScrollable = scrollState.isScrollable;\n    }\n    _debug(state) {\n      if (!this.debug) {\n        return;\n      }\n      console.table([state]); // eslint-disable-line\n    }\n    _getScrollState() {\n      const element = this.normalisedScrollerElement;\n      const scrollHeight = element.scrollHeight;\n      const scrollTop = element.scrollTop;\n      const clientHeight = element.clientHeight;\n      const isScrollable = scrollHeight > clientHeight;\n      const bottom = scrollHeight - clientHeight;\n      const percent = this.percent;\n      const percentScrolled = round(scrollTop / bottom * 100);\n      const reachedBottom = percentScrolled >= percent;\n      return {\n        isScrollable,\n        scrollHeight,\n        clientHeight,\n        scrollTop,\n        bottom,\n        percent,\n        percentScrolled,\n        reachedBottom\n      };\n    }\n    get _api() {\n      return {\n        isScrollable: this.isScrollable,\n        isLoading: this.isLoading,\n        loadMore: this.loadMore,\n        canLoadMore: this.canLoadMore\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isScrollable\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"handleScroll\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleScroll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loadMore\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadMore\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, InfiniteScrollerComponent);\n});","define(\"@testable/shared-ui/components/ui/info-icon\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n          class=\"inline-info-icon no-print\"\n          data-bs-toggle=\"popover\"\n          data-bs-html={{if @isHtml \"true\" \"false\"}}\n          data-bs-trigger=\"hover\"\n          title={{@title}}\n          data-bs-content={{this.dataContent}}\n          data-bs-placement=\"{{if @placement @placement \"auto\"}}\"\n          {{on \"click\" (optional @click)}}\n  >\n    <i class=\"fa {{if @icon @icon \"fa-info-circle\"}}\" ...attributes></i>\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"inline-info-icon no-print\\\"],[24,\\\"data-bs-toggle\\\",\\\"popover\\\"],[16,\\\"data-bs-html\\\",[52,[30,1],\\\"true\\\",\\\"false\\\"]],[24,\\\"data-bs-trigger\\\",\\\"hover\\\"],[16,\\\"title\\\",[30,2]],[16,\\\"data-bs-content\\\",[30,0,[\\\"dataContent\\\"]]],[16,\\\"data-bs-placement\\\",[29,[[52,[30,3],[30,3],\\\"auto\\\"]]]],[4,[38,2],[\\\"click\\\",[28,[37,3],[[30,4]],null]],null],[12],[1,\\\"\\\\n  \\\"],[11,\\\"i\\\"],[16,0,[29,[\\\"fa \\\",[52,[30,5],[30,5],\\\"fa-info-circle\\\"]]]],[17,6],[12],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@isHtml\\\",\\\"@title\\\",\\\"@placement\\\",\\\"@click\\\",\\\"@icon\\\",\\\"&attrs\\\"],[\\\"div\\\",\\\"if\\\",\\\"on\\\",\\\"optional\\\",\\\"i\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/info-icon.hbs\",\n    \"isStrictMode\": false\n  });\n  let InfoIconComponent = _exports.default = (_class = class InfoIconComponent extends _component2.default {\n    get dataContent() {\n      const content = this.args.content;\n      return content ? _lib.default.replaceAll(content, '\"', \"\\'\") : '';\n    }\n    onClick(e) {\n      if (typeof this.args.click === 'function') {\n        this.args.click(e);\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"onClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, InfoIconComponent);\n});","define(\"@testable/shared-ui/components/ui/load-more-button\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @show}}\n    <div class=\"text-center mt-3\">\n      <button\n        type=\"button\"\n        class=\"btn btn-outline-primary\"\n        {{on \"click\" @onClick}}\n        disabled={{@isLoading}}\n      >\n        {{#if @isLoading}}\n          <Ui::Icon @icon=\"fa fa-spinner fa-spin\" /> {{or @loadingText \"Loading...\"}}\n        {{else}}\n          {{or @text \"Load More\"}}\n        {{/if}}\n      </button>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"text-center mt-3\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-outline-primary\\\"],[16,\\\"disabled\\\",[30,2]],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,3]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-spinner fa-spin\\\"]],null],[1,\\\" \\\"],[1,[28,[35,5],[[30,4],\\\"Loading...\\\"],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[28,[35,5],[[30,5],\\\"Load More\\\"],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@show\\\",\\\"@isLoading\\\",\\\"@onClick\\\",\\\"@loadingText\\\",\\\"@text\\\"],[\\\"if\\\",\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/load-more-button.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"load-more-button\"));\n});","define(\"@testable/shared-ui/components/ui/map-location\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/map\", \"@amcharts/amcharts5-geodata/worldLow\", \"@testable/shared-ui/utils/amcharts\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, am5, am5map, _worldLow, _amcharts2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/map\",0,\"@amcharts/amcharts5-geodata/worldLow\",0,\"@testable/shared-ui/utils/amcharts\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <a\n    href=\"https://www.google.com/maps?q={{@latitude}},{{@longitude}}\"\n    target=\"_blank\"\n    rel=\"noopener noreferrer\"\n    class=\"map-location-link\"\n    {{on \"click\" this.handleClick}}\n  >\n    <div {{did-insert this.didInsert}} class=\"map-location-container\">\n      <div class=\"map-location-overlay\">\n        <Ui::Icon @icon=\"fa fa-map-marker-alt\" />\n      </div>\n    </div>\n  </a>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,3],[16,6,[29,[\\\"https://www.google.com/maps?q=\\\",[30,1],\\\",\\\",[30,2]]]],[24,\\\"target\\\",\\\"_blank\\\"],[24,\\\"rel\\\",\\\"noopener noreferrer\\\"],[24,0,\\\"map-location-link\\\"],[4,[38,1],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[11,0],[24,0,\\\"map-location-container\\\"],[4,[38,3],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"map-location-overlay\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@icon\\\"],[\\\"fa fa-map-marker-alt\\\"]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@latitude\\\",\\\"@longitude\\\"],[\\\"a\\\",\\\"on\\\",\\\"div\\\",\\\"did-insert\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/map-location.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiMapLocationComponent = _exports.default = (_class = class UiMapLocationComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"chartRoot\", null);\n    }\n    willDestroy() {\n      super.willDestroy();\n      if (this.chartRoot) {\n        this.chartRoot.dispose();\n        this.chartRoot = null;\n      }\n    }\n    handleClick(event) {\n      event.stopPropagation();\n    }\n    didInsert(element) {\n      const {\n        latitude,\n        longitude\n      } = this.args;\n      if (!latitude || !longitude) {\n        return;\n      }\n      _amcharts2.default.initLicense();\n      const root = am5.Root.new(element);\n      this.chartRoot = root;\n      const mapChart = root.container.children.push(am5map.MapChart.new(root, {\n        panX: \"none\",\n        panY: \"none\",\n        wheelY: \"none\",\n        projection: am5map.geoMercator(),\n        homeZoomLevel: 1.5,\n        homeGeoPoint: {\n          longitude,\n          latitude\n        }\n      }));\n\n      // Add world map polygons\n      const polygonSeries = mapChart.series.push(am5map.MapPolygonSeries.new(root, {\n        geoJSON: _worldLow.default,\n        exclude: [\"AQ\"],\n        fill: am5.color(0xe5e5e5),\n        stroke: am5.color(0xcccccc),\n        strokeWidth: 0.5\n      }));\n\n      // Add pin point\n      const pointSeries = mapChart.series.push(am5map.MapPointSeries.new(root, {}));\n      pointSeries.bullets.push(() => {\n        return am5.Bullet.new(root, {\n          sprite: am5.Circle.new(root, {\n            radius: 4,\n            fill: am5.color(0x348fe2),\n            stroke: am5.color(0xffffff),\n            strokeWidth: 2,\n            tooltipText: `${latitude.toFixed(2)}, ${longitude.toFixed(2)}`\n          })\n        });\n      });\n      pointSeries.data.setAll([{\n        geometry: {\n          type: \"Point\",\n          coordinates: [longitude, latitude]\n        }\n      }]);\n\n      // Wait for map to load then zoom to location\n      polygonSeries.events.once(\"datavalidated\", () => {\n        mapChart.goHome();\n      });\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiMapLocationComponent);\n});","define(\"@testable/shared-ui/components/ui/modal-wrapper\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @showModal}}\n    <BsModal\n            @onHidden={{@closeModal}}\n            @size={{or @size \"md\"}}\n            ...attributes\n            as |Modal|>\n      <Modal.header>\n        <h4 class=\"modal-title\">{{@title}}</h4>\n      </Modal.header>\n      <Modal.body>\n        <div class=\"panel\">\n          <div class=\"panel-body\">\n            {{yield}}\n          </div>\n        </div>\n      </Modal.body>\n    </BsModal>\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[8,[39,1],[[17,2]],[[\\\"@onHidden\\\",\\\"@size\\\"],[[30,3],[28,[37,2],[[30,4],\\\"md\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"header\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[30,6]],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n          \\\"],[18,7,null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[5]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@showModal\\\",\\\"&attrs\\\",\\\"@closeModal\\\",\\\"@size\\\",\\\"Modal\\\",\\\"@title\\\",\\\"&default\\\"],[\\\"if\\\",\\\"bs-modal\\\",\\\"or\\\",\\\"h4\\\",\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/modal-wrapper.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"modal-wrapper\"));\n});","define(\"@testable/shared-ui/components/ui/note-icon\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and @note (gt @note.contents.length 0))}}\n    <Ui::Icon @icon=\"far fa-sticky-note {{if @large 'fa-lg'}}\" class=\"m-l-5\"\n          data-bs-toggle=\"popover\" data-bs-html=\"true\"\n          data-bs-content={{to-html @note.contentsHtml 'tooltip' true}} data-bs-title=\"Note\" />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[30,1],[28,[37,2],[[30,1,[\\\"contents\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"  \\\"],[8,[39,3],[[24,0,\\\"m-l-5\\\"],[24,\\\"data-bs-toggle\\\",\\\"popover\\\"],[24,\\\"data-bs-html\\\",\\\"true\\\"],[16,\\\"data-bs-content\\\",[28,[37,4],[[30,1,[\\\"contentsHtml\\\"]],\\\"tooltip\\\",true],null]],[24,\\\"data-bs-title\\\",\\\"Note\\\"]],[[\\\"@icon\\\"],[[29,[\\\"far fa-sticky-note \\\",[52,[30,2],\\\"fa-lg\\\"]]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@note\\\",\\\"@large\\\"],[\\\"if\\\",\\\"and\\\",\\\"gt\\\",\\\"ui/icon\\\",\\\"to-html\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/note-icon.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"note-icon\"));\n});","define(\"@testable/shared-ui/components/ui/p-select-multiple\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-basic-dropdown/utils/calculate-position\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _calculatePosition, _tracking, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-basic-dropdown/utils/calculate-position\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div ...attributes {{did-insert this.didInsert}}>\n    <PowerSelect\n      @multiple={{true}}\n      @triggerRole={{@triggerRole}}\n      @ariaDescribedBy={{@ariaDescribedBy}}\n      @ariaInvalid={{@ariaInvalid}}\n      @ariaLabel={{@ariaLabel}}\n      @ariaLabelledBy={{@ariaLabelledBy}}\n      @afterOptionsComponent={{@afterOptionsComponent}}\n      @allowClear={{@allowClear}}\n      @beforeOptionsComponent={{or @beforeOptionsComponent null}}\n      @buildSelection={{@buildSelection}}\n      @calculatePosition={{this.calculatePosition}}\n      @closeOnSelect={{@closeOnSelect}}\n      @defaultHighlighted={{@defaultHighlighted}}\n      @destination={{this.destination}}\n      @disabled={{@disabled}}\n      @dropdownClass={{@dropdownClass}}\n      @extra={{@extra}}\n      @groupComponent={{@groupComponent}}\n      @horizontalPosition={{@horizontalPosition}}\n      @initiallyOpened={{@initiallyOpened}}\n      @loadingMessage={{@loadingMessage}}\n      @matcher={{@matcher}}\n      @matchTriggerWidth={{@matchTriggerWidth}}\n      @noMatchesMessage={{@noMatchesMessage}}\n      @onBlur={{@onBlur}}\n      @onChange={{@onChange}}\n      @onClose={{this.onClose}}\n      @onFocus={{@handleFocus}}\n      @onInput={{@onInput}}\n      @onKeydown={{@handleKeydown}}\n      @onOpen={{this.onClose}}\n      @options={{@options}}\n      @optionsComponent={{@optionsComponent}}\n      @placeholder={{@placeholder}}\n      @placeholderComponent={{@placeholderComponent}}\n      @preventScroll={{@preventScroll}}\n      @registerAPI={{@registerAPI}}\n      @renderInPlace={{this.renderInPlace}}\n      @required={{@required}}\n      @scrollTo={{@scrollTo}}\n      @search={{@search}}\n      @searchEnabled={{this.searchEnabled}}\n      @searchField={{this.searchField}}\n      @searchMessage={{@searchMessage}}\n      @searchPlaceholder={{@searchPlaceholder}}\n      @selected={{@selected}}\n      @selectedItemComponent={{if @selectedItemComponent (component @selectedItemComponent)}}\n      @eventType={{@eventType}}\n      @title={{@title}}\n      @triggerClass=\"ember-power-select-multiple-trigger {{@triggerClass}}\"\n      @triggerComponent={{@triggerComponent}}\n      @triggerId={{@triggerId}}\n      @verticalPosition={{@verticalPosition}}\n      ...attributes as |option select|>\n      {{yield option select}}\n    </PowerSelect>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[17,1],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[8,[39,2],[[17,1]],[[\\\"@multiple\\\",\\\"@triggerRole\\\",\\\"@ariaDescribedBy\\\",\\\"@ariaInvalid\\\",\\\"@ariaLabel\\\",\\\"@ariaLabelledBy\\\",\\\"@afterOptionsComponent\\\",\\\"@allowClear\\\",\\\"@beforeOptionsComponent\\\",\\\"@buildSelection\\\",\\\"@calculatePosition\\\",\\\"@closeOnSelect\\\",\\\"@defaultHighlighted\\\",\\\"@destination\\\",\\\"@disabled\\\",\\\"@dropdownClass\\\",\\\"@extra\\\",\\\"@groupComponent\\\",\\\"@horizontalPosition\\\",\\\"@initiallyOpened\\\",\\\"@loadingMessage\\\",\\\"@matcher\\\",\\\"@matchTriggerWidth\\\",\\\"@noMatchesMessage\\\",\\\"@onBlur\\\",\\\"@onChange\\\",\\\"@onClose\\\",\\\"@onFocus\\\",\\\"@onInput\\\",\\\"@onKeydown\\\",\\\"@onOpen\\\",\\\"@options\\\",\\\"@optionsComponent\\\",\\\"@placeholder\\\",\\\"@placeholderComponent\\\",\\\"@preventScroll\\\",\\\"@registerAPI\\\",\\\"@renderInPlace\\\",\\\"@required\\\",\\\"@scrollTo\\\",\\\"@search\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@searchMessage\\\",\\\"@searchPlaceholder\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@eventType\\\",\\\"@title\\\",\\\"@triggerClass\\\",\\\"@triggerComponent\\\",\\\"@triggerId\\\",\\\"@verticalPosition\\\"],[true,[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[28,[37,3],[[30,9],null],null],[30,10],[30,0,[\\\"calculatePosition\\\"]],[30,11],[30,12],[30,0,[\\\"destination\\\"]],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,19],[30,20],[30,21],[30,22],[30,23],[30,24],[30,0,[\\\"onClose\\\"]],[30,25],[30,26],[30,27],[30,0,[\\\"onClose\\\"]],[30,28],[30,29],[30,30],[30,31],[30,32],[30,33],[30,0,[\\\"renderInPlace\\\"]],[30,34],[30,35],[30,36],[30,0,[\\\"searchEnabled\\\"]],[30,0,[\\\"searchField\\\"]],[30,37],[30,38],[30,39],[52,[30,40],[50,[30,40],0,null,null]],[30,41],[30,42],[29,[\\\"ember-power-select-multiple-trigger \\\",[30,43]]],[30,44],[30,45],[30,46]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[18,49,[[30,47],[30,48]]],[1,\\\"\\\\n  \\\"]],[47,48]]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@triggerRole\\\",\\\"@ariaDescribedBy\\\",\\\"@ariaInvalid\\\",\\\"@ariaLabel\\\",\\\"@ariaLabelledBy\\\",\\\"@afterOptionsComponent\\\",\\\"@allowClear\\\",\\\"@beforeOptionsComponent\\\",\\\"@buildSelection\\\",\\\"@closeOnSelect\\\",\\\"@defaultHighlighted\\\",\\\"@disabled\\\",\\\"@dropdownClass\\\",\\\"@extra\\\",\\\"@groupComponent\\\",\\\"@horizontalPosition\\\",\\\"@initiallyOpened\\\",\\\"@loadingMessage\\\",\\\"@matcher\\\",\\\"@matchTriggerWidth\\\",\\\"@noMatchesMessage\\\",\\\"@onBlur\\\",\\\"@onChange\\\",\\\"@handleFocus\\\",\\\"@onInput\\\",\\\"@handleKeydown\\\",\\\"@options\\\",\\\"@optionsComponent\\\",\\\"@placeholder\\\",\\\"@placeholderComponent\\\",\\\"@preventScroll\\\",\\\"@registerAPI\\\",\\\"@required\\\",\\\"@scrollTo\\\",\\\"@search\\\",\\\"@searchMessage\\\",\\\"@searchPlaceholder\\\",\\\"@selected\\\",\\\"@selectedItemComponent\\\",\\\"@eventType\\\",\\\"@title\\\",\\\"@triggerClass\\\",\\\"@triggerComponent\\\",\\\"@triggerId\\\",\\\"@verticalPosition\\\",\\\"option\\\",\\\"select\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"power-select\\\",\\\"or\\\",\\\"if\\\",\\\"component\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/p-select-multiple.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiPSelectMultipleComponent = _exports.default = (_class = class UiPSelectMultipleComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"modalId\", _descriptor, this);\n      _initializerDefineProperty(this, \"showDD\", _descriptor2, this);\n    }\n    get searchEnabled() {\n      return this.args.searchEnabled || false;\n    }\n    get searchField() {\n      return this.args.searchField || 'name';\n    }\n    get renderInPlace() {\n      return this.args.renderInPlace || Boolean(this.modalId);\n    }\n    get destination() {\n      return this.args.destination || this.modalId;\n    }\n    calculatePosition() {\n      const position = (0, _calculatePosition.calculateWormholedPosition)(...arguments);\n      this.adjustPositionTop(position);\n      if (position?.style?.width) {\n        position.style['min-width'] = `${position.style.width}px`;\n        delete position.style.width;\n      }\n      return position;\n    }\n    adjustPositionTop(position) {\n      if (this.destination && position?.style?.top) {\n        position.style.top = `${parseInt(position.style.top) - window.scrollY}px`;\n      }\n    }\n    onClose() {\n      if (typeof this.args.onClose === 'function') {\n        this.args.onClose();\n      }\n      if (this.input) {\n        const parsley = $(this.input).parsley();\n        if (parsley && _.isFunction(parsley.validate)) {\n          parsley.validate();\n        }\n      }\n    }\n    didInsert(element) {\n      const input = element.nextElementSibling;\n      if (input && input.nodeName === 'INPUT') {\n        this.input = input;\n      }\n      this.modalId = this.getModalId(element);\n      this.showDD = true;\n    }\n    getModalId(element) {\n      let parentModal = $(element).closest('.modal');\n      if (parentModal.length > 0) {\n        return parentModal.attr('id');\n      }\n      return null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modalId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showDD\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"calculatePosition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"calculatePosition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiPSelectMultipleComponent);\n});","define(\"@testable/shared-ui/components/ui/p-select\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-basic-dropdown/utils/calculate-position\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _calculatePosition, _tracking, _object, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-basic-dropdown/utils/calculate-position\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div ...attributes {{did-insert this.didInsert}}>\n    {{#if this.showDD}}\n      <PowerSelect\n              @options={{@options}}\n              @selected={{@selected}}\n              @onChange={{@onChange}}\n  \n              @allowClear={{@allowClear}}\n              @ariaDescribedBy={{@ariaDescribedBy}}\n              @ariaInvalid={{@ariaInvalid}}\n              @ariaLabel={{@ariaLabel}}\n              @ariaLabelledBy={{@ariaLabelledBy}}\n              @buildSelection={{@buildSelection}}\n              @calculatePosition={{this.calculatePosition}}\n              @destination={{this.destination}}\n              @disabled={{@disabled}}\n              @extra={{@extra}}\n              @horizontalPosition={{@horizontalPosition}}\n              @initiallyOpened={{@initiallyOpened}}\n              @loadingMessage={{@loadingMessage}}\n              @placeholder={{@placeholder}}\n              @renderInPlace={{@renderInPlace}}\n              @required={{@required}}\n              @matcher={{@matcher}}\n              @searchEnabled={{this.searchEnabled}}\n              @searchField={{this.searchField}}\n              @searchMessageComponent={{@searchMessageComponent}}\n              @searchPlaceholder={{@searchPlaceholder}}\n              @selectedItemComponent={{if @selectedItemComponent (component @selectedItemComponent)}}\n              @title={{@title}}\n              @triggerClass={{@triggerClass}}\n              @triggerComponent={{@triggerComponent}}\n              @triggerId={{@triggerId}}\n              @triggerRole={{@triggerRole}}\n              @verticalPosition={{@verticalPosition}}\n  \n  \n              @closeOnSelect={{@closeOnSelect}}\n              @highlightOnHover={{@highlightOnHover}}\n              @matchTriggerWidth={{@matchTriggerWidth}}\n              @noMatchesMessage={{@noMatchesMessage}}\n              @onBlur={{@onBlur}}\n              @onClose={{this.onClose}}\n              @onFocus={{@onFocus}}\n              @onInput={{@onInput}}\n              @onKeydown={{@onKeydown}}\n              @onOpen={{@onOpen}}\n              @placeholderComponent={{@placeholderComponent}}\n              @registerAPI={{@registerAPI}}\n              @scrollTo={{@scrollTo}}\n              @search={{@search}}\n              @searchMessage={{@searchMessage}}\n  \n              as |option|\n      >\n        {{yield option}}\n      </PowerSelect>\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[17,1],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDD\\\"]],[[[1,\\\"    \\\"],[8,[39,3],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@allowClear\\\",\\\"@ariaDescribedBy\\\",\\\"@ariaInvalid\\\",\\\"@ariaLabel\\\",\\\"@ariaLabelledBy\\\",\\\"@buildSelection\\\",\\\"@calculatePosition\\\",\\\"@destination\\\",\\\"@disabled\\\",\\\"@extra\\\",\\\"@horizontalPosition\\\",\\\"@initiallyOpened\\\",\\\"@loadingMessage\\\",\\\"@placeholder\\\",\\\"@renderInPlace\\\",\\\"@required\\\",\\\"@matcher\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@searchMessageComponent\\\",\\\"@searchPlaceholder\\\",\\\"@selectedItemComponent\\\",\\\"@title\\\",\\\"@triggerClass\\\",\\\"@triggerComponent\\\",\\\"@triggerId\\\",\\\"@triggerRole\\\",\\\"@verticalPosition\\\",\\\"@closeOnSelect\\\",\\\"@highlightOnHover\\\",\\\"@matchTriggerWidth\\\",\\\"@noMatchesMessage\\\",\\\"@onBlur\\\",\\\"@onClose\\\",\\\"@onFocus\\\",\\\"@onInput\\\",\\\"@onKeydown\\\",\\\"@onOpen\\\",\\\"@placeholderComponent\\\",\\\"@registerAPI\\\",\\\"@scrollTo\\\",\\\"@search\\\",\\\"@searchMessage\\\"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[30,9],[30,10],[30,0,[\\\"calculatePosition\\\"]],[30,0,[\\\"destination\\\"]],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,19],[30,0,[\\\"searchEnabled\\\"]],[30,0,[\\\"searchField\\\"]],[30,20],[30,21],[52,[30,22],[50,[30,22],0,null,null]],[30,23],[30,24],[30,25],[30,26],[30,27],[30,28],[30,29],[30,30],[30,31],[30,32],[30,33],[30,0,[\\\"onClose\\\"]],[30,34],[30,35],[30,36],[30,37],[30,38],[30,39],[30,40],[30,41],[30,42]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[18,44,[[30,43]]],[1,\\\"\\\\n    \\\"]],[43]]]]],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"&attrs\\\",\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\",\\\"@allowClear\\\",\\\"@ariaDescribedBy\\\",\\\"@ariaInvalid\\\",\\\"@ariaLabel\\\",\\\"@ariaLabelledBy\\\",\\\"@buildSelection\\\",\\\"@disabled\\\",\\\"@extra\\\",\\\"@horizontalPosition\\\",\\\"@initiallyOpened\\\",\\\"@loadingMessage\\\",\\\"@placeholder\\\",\\\"@renderInPlace\\\",\\\"@required\\\",\\\"@matcher\\\",\\\"@searchMessageComponent\\\",\\\"@searchPlaceholder\\\",\\\"@selectedItemComponent\\\",\\\"@title\\\",\\\"@triggerClass\\\",\\\"@triggerComponent\\\",\\\"@triggerId\\\",\\\"@triggerRole\\\",\\\"@verticalPosition\\\",\\\"@closeOnSelect\\\",\\\"@highlightOnHover\\\",\\\"@matchTriggerWidth\\\",\\\"@noMatchesMessage\\\",\\\"@onBlur\\\",\\\"@onFocus\\\",\\\"@onInput\\\",\\\"@onKeydown\\\",\\\"@onOpen\\\",\\\"@placeholderComponent\\\",\\\"@registerAPI\\\",\\\"@scrollTo\\\",\\\"@search\\\",\\\"@searchMessage\\\",\\\"option\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"power-select\\\",\\\"component\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/p-select.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiPSelectComponent = _exports.default = (_class = class UiPSelectComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"modalId\", _descriptor, this);\n      _initializerDefineProperty(this, \"showDD\", _descriptor2, this);\n    }\n    get searchEnabled() {\n      return this.args.searchEnabled || false;\n    }\n    get searchField() {\n      return this.args.searchField || 'name';\n    }\n    get renderInPlace() {\n      return this.args.renderInPlace || Boolean(this.modalId);\n    }\n    get destination() {\n      return this.args.destination || this.modalId;\n    }\n    calculatePosition() {\n      const position = (0, _calculatePosition.calculateWormholedPosition)(...arguments);\n      this.adjustPositionTop(position);\n      if (position?.style?.width) {\n        position.style['min-width'] = `${position.style.width}px`;\n        delete position.style.width;\n      }\n      return position;\n    }\n    adjustPositionTop(position) {\n      if (this.destination && position?.style?.top) {\n        position.style.top = `${parseInt(position.style.top) - window.scrollY}px`;\n      }\n    }\n    onClose() {\n      if (typeof this.args.onClose === 'function') {\n        this.args.onClose();\n      }\n      (0, _runloop.next)(this, this.validateInput);\n    }\n    validateInput() {\n      if (this.isDestroyed || this.isDestroying || !this.input) {\n        return;\n      }\n      const parsley = $(this.input).parsley();\n      if (parsley && _.isFunction(parsley.validate)) {\n        parsley.validate();\n      }\n    }\n    didInsert(element) {\n      const input = element.nextElementSibling;\n      if (input && input.nodeName === 'INPUT') {\n        this.input = input;\n      }\n      this.modalId = this.getModalId(element);\n      this.showDD = true;\n    }\n    getModalId(element) {\n      let parentModal = $(element).closest('.modal');\n      if (parentModal.length > 0) {\n        return parentModal.attr('id');\n      }\n      return null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modalId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showDD\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"calculatePosition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"calculatePosition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onClose\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClose\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiPSelectComponent);\n});","define(\"@testable/shared-ui/components/ui/password-input\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/object/internals\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _internals, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/object/internals\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"input-group\">\n    <Input\n      @type={{this.inputType}}\n      @value={{@value}}\n      class=\"form-control\"\n      autocomplete=\"new-password\"\n      data-parsley-errors-container=\"#{{this.errorsElementId}}\"\n      ...attributes\n    />\n    <span\n      class=\"input-group-addon user-select-none\"\n      role=\"button\"\n      {{on \"click\" this.toggleVisibility}}\n      title=\"{{if this.isVisible 'Hide' 'Show'}} password\"\n    >\n      <Ui::Icon @icon=\"fa-eye{{if this.isVisible '-slash'}}\" />\n    </span>\n  </div>\n  <div id={{this.errorsElementId}}></div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,1],[[24,0,\\\"form-control\\\"],[24,\\\"autocomplete\\\",\\\"new-password\\\"],[16,\\\"data-parsley-errors-container\\\",[29,[\\\"#\\\",[30,0,[\\\"errorsElementId\\\"]]]]],[17,1]],[[\\\"@type\\\",\\\"@value\\\"],[[30,0,[\\\"inputType\\\"]],[30,2]]],null],[1,\\\"\\\\n  \\\"],[11,1],[24,0,\\\"input-group-addon user-select-none\\\"],[24,\\\"role\\\",\\\"button\\\"],[16,\\\"title\\\",[29,[[52,[30,0,[\\\"isVisible\\\"]],\\\"Hide\\\",\\\"Show\\\"],\\\" password\\\"]]],[4,[38,4],[\\\"click\\\",[30,0,[\\\"toggleVisibility\\\"]]],null],[12],[1,\\\"\\\\n    \\\"],[8,[39,5],null,[[\\\"@icon\\\"],[[29,[\\\"fa-eye\\\",[52,[30,0,[\\\"isVisible\\\"]],\\\"-slash\\\"]]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,1,[30,0,[\\\"errorsElementId\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@value\\\"],[\\\"div\\\",\\\"input\\\",\\\"span\\\",\\\"if\\\",\\\"on\\\",\\\"ui/icon\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/password-input.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiPasswordInputComponent = _exports.default = (_class = class UiPasswordInputComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isVisible\", _descriptor, this);\n      _defineProperty(this, \"errorsElementId\", `${(0, _internals.guidFor)(this)}-errors`);\n    }\n    get inputType() {\n      return this.isVisible ? 'text' : 'password';\n    }\n    toggleVisibility() {\n      this.isVisible = !this.isVisible;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleVisibility\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleVisibility\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiPasswordInputComponent);\n});","define(\"@testable/shared-ui/components/ui/privacy-policy-content\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{page-title \"Privacy Policy - Testable\"}}\n  \n  <div class=\"page-without-sidebar landing-page\">\n    {{!-- begin #privacyPolicy --}}\n    <div id=\"privacyPolicy\" class=\"content\" data-scrollview=\"true\">\n      {{!-- begin container --}}\n      <div class=\"container\" data-bs-animation=\"true\" data-bs-animation-type=\"fadeInDown\">\n        <h1 class=\"content-title\">Privacy Policy</h1>\n  \n        <p>Last Updated On 10-Nov-2023</p>\n        <article class='document-article'>\n          <p>Testable LLC,\n            2846 N Halsted St, Suite 4S,\n            IL\n            60657,\n            United States of America (the),\n            email: admin@testable.io,\n            phone: +17083203227\n  \n            on the collection,\n            use and disclosure of your information that we collect\n            when you use our website ( testable.io ).\n            (the \"Service\"). By accessing or using\n            the\n            Service, you are consenting to the collection, use and\n            disclosure of your information in accordance with this\n            Privacy Policy. If you do not consent to the same,\n            please do not access or use the Service.</p>\n  \n          <p>Testable LLC complies with the EU-U.S. Data Privacy Framework (EU-U.S. DPF)\n              as set forth by the U.S. Department of Commerce. Testable LLC has certified\n              to the U.S. Department of Commerce that it adheres to the EU-U.S. Data Privacy\n              Framework Principles (EU-U.S. DPF Principles) with regard to the processing of\n              personal data received from the European Union in reliance on the EU-U.S. DPF.\n              If there is any conflict between the terms in this privacy policy and the\n              EU-U.S. DPF Principles, the Principles shall govern.\n              To learn more about the Data Privacy Framework (DPF) program, and to view our\n              certification, please visit https://www.dataprivacyframework.gov/.</p>\n  \n          <p>Testable LLC is also subject to the investigatory and enforcement powers of the\n            Federal Trade Commission (FTC).</p>\n  \n          <p>\n            We may modify this Privacy Policy at any time without\n            any prior notice to you and will post the revised\n            Privacy Policy on the Service. The revised Policy will\n            be effective 180 days from when the\n            revised Policy is posted in the Service and your\n            continued access or use of the Service after such time\n            will constitute your acceptance of the revised Privacy\n            Policy. We therefore recommend that you periodically\n            review this page.\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>Information We Collect</h3>\n          <p> We will collect and process the following\n            personal information about you</p>\n          <p>We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.</p>\n          <ul>\n            <li>Name</li>\n            <li>Email</li>\n          </ul>\n        </article>\n  \n        <article class='document-article'>\n          <h3>How We Collect Your Information</h3>\n          <p>  We collect/receive information about you in the\n            following manner:</p>\n          <p>We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.</p>\n          <ul>\n            <li>When a user fills up the registration form or otherwise submits personal information</li>\n            <li>Interacts with the website</li>\n            <li>From public sources</li>\n          </ul>\n        </article>\n  \n        <article class='document-article'>\n          <h3>How We Use Your Information</h3>\n          <p> We will use the information that we collect\n            about you for the following purposes:</p>\n          <p>We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.</p>\n          <ul>\n            <li>Creating user account</li>\n            <li>Support</li>\n            <li>Manage user account</li>\n          </ul>\n          <p></p>\n          <p>\n            If we want to use your information for any other\n            purpose, we will ask you for consent and will\n            use your information only on receiving your\n            consent and then, only for the purpose(s) for\n            which grant consent unless we are required to do\n            otherwise by law.\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>How We Share Your Information</h3>\n          <p> We will not transfer your personal information\n            to any third party without seeking your consent,\n            except in limited circumstances as described\n            below:</p>\n          <p>We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.</p>\n          <ul>\n            <li>Analytics</li>\n          </ul>\n          <p></p>\n          <p>\n            We require such third party's to use the\n            personal information we transfer to them only\n            for the purpose for which it was transferred and\n            not to retain it for longer than is required for\n            fulfilling the said purpose.\n          </p>\n          <p>\n            Testable LLC remains liable if its third parties process personal data\n            in a manner inconsistent with the EU-U.S. Data Privacy Framework Principles,\n            unless Testable LLC proves that it is not responsible for the event\n            giving rise to the damage.\n          </p>\n          <p>\n            We may also disclose your personal information\n            for the following: (1) to comply with applicable\n            law, regulation, court order or other legal\n            process; (2) to enforce your agreements with us,\n            including this Privacy Policy; or (3) to respond\n            to claims that your use of the Service violates\n            any third-party rights. If the Service or our\n            company is merged or acquired with another\n            company, your information will be one of the\n            assets that is transferred to the new owner.\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>Retention Of Your Information</h3>\n          <p> We will retain your personal information with us\n            for\n            90 days to 2 years after user terminate account\n            or for as\n            long as we need it to fulfill the purposes for\n            which it was collected as detailed in this\n            Privacy Policy. We may need to retain certain\n            information for longer periods such as\n            record-keeping / reporting in accordance with\n            applicable law or for other legitimate reasons\n            like enforcement of legal rights, fraud\n            prevention, etc. Residual anonymous information\n            and aggregate information, neither of which\n            identifies you (directly or indirectly), may be\n            stored indefinitely.\n          </p>\n        </article>\n  \n  \n  \n        <article class='document-article'>\n          <h3>\n            Your Rights\n          </h3>\n          <p>\n            Depending on the law that applies, you may have\n            a right to access and rectify or erase your\n            personal data or receive a copy of your personal\n            data, restrict or object to the active\n            processing of your data, ask us to share (port)\n            your personal information to another entity,\n            withdraw any consent you provided to us to\n            process your data, a right to lodge a complaint\n            with a statutory authority and such other rights\n            as may be relevant under applicable laws. To\n            exercise these rights, you can write to us at\n            support@testable.io.\n            We will respond to your\n            request in accordance with applicable law.\n          </p>\n  \n          <p>\n            You may opt-out of direct marketing\n            communications or the profiling we carry out for\n            marketing purposes by writing to us at\n            support@testable.io.\n          </p>\n  \n          <p>\n            Do note that if you do not allow us to collect\n            or process the required personal information or\n            withdraw the consent to process the same for the\n            required purposes, you may not be able to access\n            or use the services for which your information\n            was sought.\n          </p>\n  \n          <p>\n            No mobile information will be shared with third parties/affiliates\n            for marketing/promotional purposes. All other categories exclude\n            text messaging originator opt-in data and consent;\n            this information will not be shared with any third parties.\n          </p>\n  \n          <p>\n            By submitting your phone number for test notifications, you are authorizing\n            to send you text messages and notifications. Message/data rates apply.\n            Reply STOP to unsubscribe to a message sent from us.\n          </p>\n        </article>\n        <article class='document-article'>\n          <h3>\n            Cookies Etc.\n          </h3>\n          <p>\n            To learn more about how we use these\n            and your choices in relation to these tracking\n            technologies, please refer to our\n            <a href=\"/cookie-policy\">Cookie Policy.</a>\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>\n            Security\n          </h3>\n          <p>\n            The security of your information is important to\n            us and we will use reasonable security measures\n            to prevent the loss, misuse or unauthorized\n            alteration of your information under our\n            control. However, given the inherent risks, we\n            cannot guarantee absolute security and\n            consequently, we cannot ensure or warrant the\n            security of any information you transmit to us\n            and you do so at your own risk.\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>\n            Third Party Links & Use Of Your Information\n          </h3>\n          <p>\n            Our Service may contain links to other websites\n            that are not operated by us. This Privacy Policy\n            does not address the privacy policy and other\n            practices of any third parties, including any\n            third party operating any website or service\n            that may be accessible via a link on the\n            Service. We strongly advise you to review the\n            privacy policy of every site you visit. We have\n            no control over and assume no responsibility for\n            the content, privacy policies or practices of\n            any third party sites or services.\n          </p>\n        </article>\n  \n        <article class='document-article'>\n          <h3>\n            Grievance / Data Protection Officer\n          </h3>\n          <p>\n            If you have any queries or concerns about the\n            processing of your information that is available\n            with us, you may email our Grievance Officer at\n            Testable LLC,\n            2846 N Halsted St, Suite 4S,\n            email: support@testable.io.\n            We will address your concerns in accordance with applicable law.\n          </p>\n          <p>\n            In compliance with the EU-U.S. DPF, Testable LLC commits to resolve DPF Principles-related\n            complaints about our collection and use of your personal information.\n            EU individuals with inquiries or complaints regarding our handling of personal data received\n            in reliance on the EU-U.S. DPF should first contact Testable LLC's Grievance Officer as specified\n            in the previous paragraph.</p>\n          <p>\n            In compliance with the EU-U.S. DPF, Testable LLC commits to cooperate and comply respectively\n            with the advice of the panel established by the EU data protection authorities (DPAs) with\n            regard to unresolved complaints concerning our handling of personal data received in\n            reliance on the EU-U.S. DPF.\n          </p>\n          <p>\n             EU individual can invoke binding arbitration to determine whether Testable LLC has violated\n             its obligations under the EU-U.S. Data Privacy Framework Principles as to that individual and whether any such\n             violation remains fully or partially unremedied (\"residual claims\").\n          </p>\n        </article>\n  \n        <h3>Contact Us</h3>\n  \n        <p>If you have any questions about this Privacy Policy, please <a href=\"mailto:support@testable.io\">contact\n            us.</a></p>\n  \n      </div>\n      {{!-- end container --}}\n    </div>\n    {{!-- end #privacyPolicy --}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[\\\"Privacy Policy - Testable\\\"],null]],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"page-without-sidebar landing-page\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[10,0],[14,1,\\\"privacyPolicy\\\"],[14,0,\\\"content\\\"],[14,\\\"data-scrollview\\\",\\\"true\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[14,0,\\\"container\\\"],[14,\\\"data-bs-animation\\\",\\\"true\\\"],[14,\\\"data-bs-animation-type\\\",\\\"fadeInDown\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h1\\\"],[14,0,\\\"content-title\\\"],[12],[1,\\\"Privacy Policy\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Last Updated On 10-Nov-2023\\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"Testable LLC,\\\\n          2846 N Halsted St, Suite 4S,\\\\n          IL\\\\n          60657,\\\\n          United States of America (the),\\\\n          email: admin@testable.io,\\\\n          phone: +17083203227\\\\n\\\\n          on the collection,\\\\n          use and disclosure of your information that we collect\\\\n          when you use our website ( testable.io ).\\\\n          (the \\\\\\\"Service\\\\\\\"). By accessing or using\\\\n          the\\\\n          Service, you are consenting to the collection, use and\\\\n          disclosure of your information in accordance with this\\\\n          Privacy Policy. If you do not consent to the same,\\\\n          please do not access or use the Service.\\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"Testable LLC complies with the EU-U.S. Data Privacy Framework (EU-U.S. DPF)\\\\n            as set forth by the U.S. Department of Commerce. Testable LLC has certified\\\\n            to the U.S. Department of Commerce that it adheres to the EU-U.S. Data Privacy\\\\n            Framework Principles (EU-U.S. DPF Principles) with regard to the processing of\\\\n            personal data received from the European Union in reliance on the EU-U.S. DPF.\\\\n            If there is any conflict between the terms in this privacy policy and the\\\\n            EU-U.S. DPF Principles, the Principles shall govern.\\\\n            To learn more about the Data Privacy Framework (DPF) program, and to view our\\\\n            certification, please visit https://www.dataprivacyframework.gov/.\\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"Testable LLC is also subject to the investigatory and enforcement powers of the\\\\n          Federal Trade Commission (FTC).\\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          We may modify this Privacy Policy at any time without\\\\n          any prior notice to you and will post the revised\\\\n          Privacy Policy on the Service. The revised Policy will\\\\n          be effective 180 days from when the\\\\n          revised Policy is posted in the Service and your\\\\n          continued access or use of the Service after such time\\\\n          will constitute your acceptance of the revised Privacy\\\\n          Policy. We therefore recommend that you periodically\\\\n          review this page.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Information We Collect\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\" We will collect and process the following\\\\n          personal information about you\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Email\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"How We Collect Your Information\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"  We collect/receive information about you in the\\\\n          following manner:\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"When a user fills up the registration form or otherwise submits personal information\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Interacts with the website\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"From public sources\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"How We Use Your Information\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\" We will use the information that we collect\\\\n          about you for the following purposes:\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Creating user account\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Support\\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Manage user account\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          If we want to use your information for any other\\\\n          purpose, we will ask you for consent and will\\\\n          use your information only on receiving your\\\\n          consent and then, only for the purpose(s) for\\\\n          which grant consent unless we are required to do\\\\n          otherwise by law.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"How We Share Your Information\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\" We will not transfer your personal information\\\\n          to any third party without seeking your consent,\\\\n          except in limited circumstances as described\\\\n          below:\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"We collect this information for the purpose of providing the Service, identifying and communicating with you, responding to your requests/inquiries, servicing your purchase orders, and improving our services.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"Analytics\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          We require such third party's to use the\\\\n          personal information we transfer to them only\\\\n          for the purpose for which it was transferred and\\\\n          not to retain it for longer than is required for\\\\n          fulfilling the said purpose.\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          Testable LLC remains liable if its third parties process personal data\\\\n          in a manner inconsistent with the EU-U.S. Data Privacy Framework Principles,\\\\n          unless Testable LLC proves that it is not responsible for the event\\\\n          giving rise to the damage.\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          We may also disclose your personal information\\\\n          for the following: (1) to comply with applicable\\\\n          law, regulation, court order or other legal\\\\n          process; (2) to enforce your agreements with us,\\\\n          including this Privacy Policy; or (3) to respond\\\\n          to claims that your use of the Service violates\\\\n          any third-party rights. If the Service or our\\\\n          company is merged or acquired with another\\\\n          company, your information will be one of the\\\\n          assets that is transferred to the new owner.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Retention Of Your Information\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\" We will retain your personal information with us\\\\n          for\\\\n          90 days to 2 years after user terminate account\\\\n          or for as\\\\n          long as we need it to fulfill the purposes for\\\\n          which it was collected as detailed in this\\\\n          Privacy Policy. We may need to retain certain\\\\n          information for longer periods such as\\\\n          record-keeping / reporting in accordance with\\\\n          applicable law or for other legitimate reasons\\\\n          like enforcement of legal rights, fraud\\\\n          prevention, etc. Residual anonymous information\\\\n          and aggregate information, neither of which\\\\n          identifies you (directly or indirectly), may be\\\\n          stored indefinitely.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"\\\\n          Your Rights\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          Depending on the law that applies, you may have\\\\n          a right to access and rectify or erase your\\\\n          personal data or receive a copy of your personal\\\\n          data, restrict or object to the active\\\\n          processing of your data, ask us to share (port)\\\\n          your personal information to another entity,\\\\n          withdraw any consent you provided to us to\\\\n          process your data, a right to lodge a complaint\\\\n          with a statutory authority and such other rights\\\\n          as may be relevant under applicable laws. To\\\\n          exercise these rights, you can write to us at\\\\n          support@testable.io.\\\\n          We will respond to your\\\\n          request in accordance with applicable law.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          You may opt-out of direct marketing\\\\n          communications or the profiling we carry out for\\\\n          marketing purposes by writing to us at\\\\n          support@testable.io.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          Do note that if you do not allow us to collect\\\\n          or process the required personal information or\\\\n          withdraw the consent to process the same for the\\\\n          required purposes, you may not be able to access\\\\n          or use the services for which your information\\\\n          was sought.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          No mobile information will be shared with third parties/affiliates\\\\n          for marketing/promotional purposes. All other categories exclude\\\\n          text messaging originator opt-in data and consent;\\\\n          this information will not be shared with any third parties.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          By submitting your phone number for test notifications, you are authorizing\\\\n          to send you text messages and notifications. Message/data rates apply.\\\\n          Reply STOP to unsubscribe to a message sent from us.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"\\\\n          Cookies Etc.\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          To learn more about how we use these\\\\n          and your choices in relation to these tracking\\\\n          technologies, please refer to our\\\\n          \\\"],[10,3],[14,6,\\\"/cookie-policy\\\"],[12],[1,\\\"Cookie Policy.\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"\\\\n          Security\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          The security of your information is important to\\\\n          us and we will use reasonable security measures\\\\n          to prevent the loss, misuse or unauthorized\\\\n          alteration of your information under our\\\\n          control. However, given the inherent risks, we\\\\n          cannot guarantee absolute security and\\\\n          consequently, we cannot ensure or warrant the\\\\n          security of any information you transmit to us\\\\n          and you do so at your own risk.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"\\\\n          Third Party Links & Use Of Your Information\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          Our Service may contain links to other websites\\\\n          that are not operated by us. This Privacy Policy\\\\n          does not address the privacy policy and other\\\\n          practices of any third parties, including any\\\\n          third party operating any website or service\\\\n          that may be accessible via a link on the\\\\n          Service. We strongly advise you to review the\\\\n          privacy policy of every site you visit. We have\\\\n          no control over and assume no responsibility for\\\\n          the content, privacy policies or practices of\\\\n          any third party sites or services.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"article\\\"],[14,0,\\\"document-article\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,\\\"\\\\n          Grievance / Data Protection Officer\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          If you have any queries or concerns about the\\\\n          processing of your information that is available\\\\n          with us, you may email our Grievance Officer at\\\\n          Testable LLC,\\\\n          2846 N Halsted St, Suite 4S,\\\\n          email: support@testable.io.\\\\n          We will address your concerns in accordance with applicable law.\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          In compliance with the EU-U.S. DPF, Testable LLC commits to resolve DPF Principles-related\\\\n          complaints about our collection and use of your personal information.\\\\n          EU individuals with inquiries or complaints regarding our handling of personal data received\\\\n          in reliance on the EU-U.S. DPF should first contact Testable LLC's Grievance Officer as specified\\\\n          in the previous paragraph.\\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          In compliance with the EU-U.S. DPF, Testable LLC commits to cooperate and comply respectively\\\\n          with the advice of the panel established by the EU data protection authorities (DPAs) with\\\\n          regard to unresolved complaints concerning our handling of personal data received in\\\\n          reliance on the EU-U.S. DPF.\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n           EU individual can invoke binding arbitration to determine whether Testable LLC has violated\\\\n           its obligations under the EU-U.S. Data Privacy Framework Principles as to that individual and whether any such\\\\n           violation remains fully or partially unremedied (\\\\\\\"residual claims\\\\\\\").\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Contact Us\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"If you have any questions about this Privacy Policy, please \\\"],[10,3],[14,6,\\\"mailto:support@testable.io\\\"],[12],[1,\\\"contact\\\\n          us.\\\"],[13],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"page-title\\\",\\\"div\\\",\\\"h1\\\",\\\"p\\\",\\\"article\\\",\\\"h3\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/privacy-policy-content.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"privacy-policy-content\"));\n});","define(\"@testable/shared-ui/components/ui/right-click-menu\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _template, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ui-right-click-menu-anchor\"\n    {{did-insert this.setupListeners}}\n    {{will-destroy this.teardownListeners}}\n  >\n    {{#if this.isVisible}}\n      <ul class=\"ui-right-click-menu\" style={{this.menuStyle}}>\n        {{#each this.items as |item|}}\n          <li\n            class=\"ui-right-click-menu__item\n              {{if item.disabled \"ui-right-click-menu__item--disabled\"}}\"\n          >\n            <button type=\"button\" {{on \"click\" (fn this.onItemClick item)}}>\n              <i class=\"fa fa-{{item.icon}}\"></i> {{item.title}}\n            </button>\n          </li>\n        {{/each}}\n      </ul>\n    {{/if}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"ui-right-click-menu-anchor\\\"],[4,[38,1],[[30,0,[\\\"setupListeners\\\"]]],null],[4,[38,2],[[30,0,[\\\"teardownListeners\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isVisible\\\"]],[[[1,\\\"    \\\"],[10,\\\"ul\\\"],[14,0,\\\"ui-right-click-menu\\\"],[15,5,[30,0,[\\\"menuStyle\\\"]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"items\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,\\\"li\\\"],[15,0,[29,[\\\"ui-right-click-menu__item\\\\n            \\\",[52,[30,1,[\\\"disabled\\\"]],\\\"ui-right-click-menu__item--disabled\\\"]]]],[12],[1,\\\"\\\\n          \\\"],[11,\\\"button\\\"],[24,4,\\\"button\\\"],[4,[38,9],[\\\"click\\\",[28,[37,10],[[30,0,[\\\"onItemClick\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n            \\\"],[10,\\\"i\\\"],[15,0,[29,[\\\"fa fa-\\\",[30,1,[\\\"icon\\\"]]]]],[12],[13],[1,\\\" \\\"],[1,[30,1,[\\\"title\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"item\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"if\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"i\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/right-click-menu.hbs\",\n    \"isStrictMode\": false\n  });\n  const _activeMenus = new Set();\n  let RightClickMenuComponent = _exports.default = (_class = class RightClickMenuComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isVisible\", _descriptor, this);\n      _initializerDefineProperty(this, \"menuTop\", _descriptor2, this);\n      _initializerDefineProperty(this, \"menuLeft\", _descriptor3, this);\n      _defineProperty(this, \"_parentElement\", null);\n      _defineProperty(this, \"_closeHandler\", null);\n      _defineProperty(this, \"_contextHandler\", null);\n    }\n    get menuStyle() {\n      return (0, _template.htmlSafe)(`position: fixed; top: ${this.menuTop}px; left: ${this.menuLeft}px; z-index: 10000;`);\n    }\n    get items() {\n      const {\n        file,\n        testCases,\n        readonly,\n        isDragSelect\n      } = this.args;\n      const act = name => () => this.args[name]?.(file);\n      if (testCases) {\n        return [{\n          title: 'Create Test Case',\n          action: act('createFile')\n        }, {\n          title: 'Create Test Folder',\n          action: act('createFolder')\n        }];\n      }\n      const listItems = [{\n        disabled: readonly,\n        baseFolder: true,\n        isFolder: true,\n        icon: 'file',\n        title: 'New File',\n        action: act('createFile')\n      }, {\n        disabled: readonly,\n        baseFolder: true,\n        isFolder: true,\n        icon: 'folder',\n        title: 'New Folder',\n        action: act('createFolder')\n      }, {\n        isFolder: false,\n        icon: 'file-csv',\n        title: 'Preview',\n        action: act('previewCsv')\n      }, {\n        disabled: readonly,\n        isFolder: false,\n        icon: 'folder-open',\n        title: 'Extract...',\n        action: act('extractFile')\n      }, {\n        disabled: readonly,\n        baseFolder: true,\n        isFolder: true,\n        icon: 'file-arrow-up',\n        title: 'Upload File',\n        action: act('uploadFile')\n      }, {\n        disabled: readonly,\n        baseFolder: true,\n        isFolder: true,\n        icon: 'folder-plus',\n        title: 'Upload Folder',\n        action: act('uploadFolder')\n      }, {\n        disabled: readonly,\n        isFolder: true,\n        icon: 'edit',\n        title: 'Rename...',\n        action: act('renameFolder')\n      }, {\n        disabled: readonly,\n        isFolder: false,\n        icon: 'edit',\n        title: 'Rename...',\n        action: act('renameFile')\n      }, {\n        isFolder: false,\n        icon: 'download',\n        title: 'Download',\n        action: act('downloadFile')\n      }, {\n        disabled: readonly,\n        baseFolder: true,\n        isFolder: true,\n        icon: 'trash',\n        title: 'Delete',\n        action: act('deleteFolder')\n      }, {\n        disabled: readonly,\n        isFolder: false,\n        icon: 'trash',\n        title: 'Delete',\n        action: act('deleteFile')\n      }, {\n        isFolder: false,\n        systemFile: true,\n        icon: 'exclamation-circle',\n        title: 'System File',\n        disabled: true\n      }];\n      return listItems.filter(li => file.isFolder === li.isFolder && !(li.title === 'Preview' && !_lib.default.endsWith(file.name, 'csv')) && !(li.title === 'Extract...' && !_lib.default.endsWith(file.name, 'zip') && !_lib.default.endsWith(file.name, 'tar.gz')) && (li.baseFolder === file.baseFolder || !file.baseFolder) && !!li.systemFile === !!(file.fileType === 'system' || file.fileType === 'note') && !isDragSelect);\n    }\n    setupListeners(element) {\n      this._parentElement = element.parentElement;\n      this._contextHandler = e => {\n        e.preventDefault();\n        e.stopPropagation();\n        this._showMenu(e.clientX, e.clientY);\n      };\n      this._closeHandler = e => {\n        if (!e || !element.contains(e.target)) {\n          this._hideMenu();\n        }\n      };\n      this._parentElement.addEventListener('contextmenu', this._contextHandler);\n    }\n    teardownListeners() {\n      if (this._parentElement) {\n        this._parentElement.removeEventListener('contextmenu', this._contextHandler);\n      }\n      window.removeEventListener('click', this._closeHandler);\n      window.removeEventListener('contextmenu', this._closeHandler);\n    }\n    _showMenu(x, y) {\n      // Close all other open menus first\n      _activeMenus.forEach(menu => {\n        if (menu !== this) menu._hideMenu();\n      });\n      this.menuTop = y;\n      this.menuLeft = x;\n      this.isVisible = true;\n      _activeMenus.add(this);\n\n      // Defer adding close listeners so the current event doesn't immediately close\n      setTimeout(() => {\n        window.addEventListener('click', this._closeHandler);\n        window.addEventListener('contextmenu', this._closeHandler);\n      }, 0);\n    }\n    _hideMenu() {\n      this.isVisible = false;\n      _activeMenus.delete(this);\n      window.removeEventListener('click', this._closeHandler);\n      window.removeEventListener('contextmenu', this._closeHandler);\n    }\n    onItemClick(item, event) {\n      event.stopPropagation();\n      if (item.disabled) return;\n      item.action?.();\n      this._hideMenu();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"menuTop\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"menuLeft\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setupListeners\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setupListeners\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"teardownListeners\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"teardownListeners\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onItemClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onItemClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, RightClickMenuComponent);\n});","define(\"@testable/shared-ui/components/ui/spectrum-color-picker\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! template-lint-disable require-input-label }}\n  <div {{did-insert this.setup}} {{will-destroy this.teardown}}>\n    <input type=\"text\" />\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"setup\\\"]]],null],[4,[38,2],[[30,0,[\\\"teardown\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"input\\\"],[14,4,\\\"text\\\"],[12],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"input\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/spectrum-color-picker.hbs\",\n    \"isStrictMode\": false\n  });\n  let SpectrumColorPicker = _exports.default = (_class = class SpectrumColorPicker extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"_element\", null);\n    }\n    setup(element) {\n      this._element = element;\n      const input = element.querySelector('input');\n      const opts = {\n        color: this.args.color || null,\n        containerClassName: 'spectrum-color-picker-container',\n        replacerClassName: 'spectrum-color-picker-replacer',\n        preferredFormat: this.args.preferredFormat || 'hex',\n        allowEmpty: this.args.allowEmpty || false,\n        showInput: this.args.showInput !== false,\n        showAlpha: this.args.showAlpha || false,\n        showInitial: this.args.showInitial || false,\n        showButtons: this.args.showButtons !== false,\n        showPalette: this.args.showPalette || false,\n        showPaletteOnly: this.args.showPaletteOnly || false,\n        togglePaletteOnly: this.args.togglePaletteOnly || false,\n        clickoutFiresChange: this.args.clickoutFiresChange || false,\n        palette: this.args.palette || [],\n        change: newColor => {\n          const color = newColor ? newColor.toString() : null;\n          if (this.args.onChange) {\n            this.args.onChange(color);\n          }\n        }\n      };\n      $(input).spectrum(opts);\n    }\n    teardown() {\n      if (this._element) {\n        const input = this._element.querySelector('input');\n        $(input).spectrum('destroy');\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"setup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"teardown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"teardown\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, SpectrumColorPicker);\n});","define(\"@testable/shared-ui/components/ui/terms-content\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{page-title \"Terms of Service - Testable\"}}\n  \n  <div class=\"page-without-sidebar landing-page\">\n    {{!-- begin #terms --}}\n    <div id=\"terms\" class=\"content\" data-scrollview=\"true\">\n      {{!-- begin container --}}\n      <div class=\"container\" data-bs-animation=\"true\" data-bs-animation-type=\"fadeInDown\">\n        <h1 class=\"content-title\">Terms of Service (\"Terms\")</h1>\n        <p>Last updated: June 01, 2018</p>\n  \n        <p>Please read these Terms of Service (\"Terms\", \"Terms of Service\") carefully before using the http://testable.io\n          website (the \"Service\") operated by Testable LLC (\"us\", \"we\", or \"our\").</p>\n  \n        <p>Your access to and use of the Service is conditioned upon your acceptance of and compliance with these Terms.\n          These Terms apply to all visitors, users and others who wish to access or use the Service.</p>\n  \n        <p><strong>By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part\n          of the terms then you do not have permission to access the Service.</strong></p>\n  \n        <p><strong>Communications</strong></p>\n  \n        <p>By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional\n          materials and other information we may send. However, you may opt out of receiving any, or all, of these\n          communications from us by following the unsubscribe link or instructions provided in any email we send.</p>\n  \n  \n        <p><strong>Subscriptions</strong></p>\n  \n        <p>Some parts of the Service are billed on a subscription basis (\"Subscription(s)\"). You will be billed in advance\n          on a recurring and periodic basis (\"Billing Cycle\"). Billing cycles are set either on a monthly or annual basis,\n          depending on the type of subscription plan you select when purchasing a Subscription.</p>\n  \n        <p>At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions\n          unless you cancel it or Testable LLC cancels it. You may cancel your Subscription renewal either through your\n          online account management page or by contacting Testable LLC customer support team.</p>\n  \n        <p>A valid payment method, including credit card, is required to process the payment for your Subscription. You\n          shall provide Testable LLC with accurate and complete billing information including full name, address, state,\n          zip code, telephone number, and a valid payment method information. By submitting such payment information, you\n          automatically authorize Testable LLC to charge all Subscription fees incurred through your account to any such\n          payment instruments.</p>\n  \n        <p>Should automatic billing fail to occur for any reason, Testable LLC will issue an electronic invoice indicating\n          that you must proceed manually, within a certain deadline date, with the full payment corresponding to the\n          billing period as indicated on the invoice.</p>\n  \n        <p><strong>Free Trial</strong></p>\n  \n        <p>Testable LLC may, at its sole discretion, offer a Subscription with a free trial for a limited period of time\n          (\"Free Trial\").</p>\n  \n        <p>You may be required to enter your billing information in order to sign up for the Free Trial.</p>\n  \n        <p>If you do enter your billing information when signing up for the Free Trial, you will not be charged by\n          Testable LLC until the Free Trial has expired. On the last day of the Free Trial period, unless you cancelled\n          your Subscription, you will be automatically charged the applicable Subscription fees for the type of\n          Subscription you have selected.</p>\n  \n        <p>At any time and without notice, Testable LLC reserves the right to (i) modify the terms and conditions of the\n          Free Trial offer, or (ii) cancel such Free Trial offer.</p>\n  \n        <p><strong>Fee Changes</strong></p>\n  \n        <p>Testable LLC, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions.\n          Any Subscription fee change will become effective at the end of the then-current Billing Cycle.</p>\n  \n        <p>Testable LLC will provide you with a reasonable prior notice of any change in Subscription fees to give you an\n          opportunity to terminate your Subscription before such change becomes effective.</p>\n  \n        <p>Your continued use of the Service after the Subscription fee change comes into effect constitutes your\n          agreement to pay the modified Subscription fee amount.</p>\n  \n        <p><strong>Refunds</strong></p>\n  \n        <p>Certain refund requests for Subscriptions may be considered by Testable LLC on a case-by-case basis and granted\n          in sole discretion of Testable LLC.</p>\n  \n        <p><strong>Content</strong></p>\n  \n        <p>Our Service allows you to post, link, store, share and otherwise make available certain information, text,\n          graphics, videos, or other material (\"Content\"). You are responsible for the Content that you post on or through\n          the Service, including its legality, reliability, and appropriateness.</p>\n  \n        <p>By posting Content on or through the Service, You represent and warrant that: (i) the Content is yours (you own\n          it) and/or you have the right to use it, and (ii) that the posting of your Content on or through the Service\n          does not violate the privacy rights, publicity rights, copyrights, contract rights or any other rights of any\n          person or entity. We reserve the right to terminate the account of anyone found to be infringing on a\n          copyright.</p>\n  \n        <p>You retain any and all of your rights to any Content you submit, post or display on or through the Service and\n          you are responsible for protecting those rights. We take no responsibility and assume no liability for Content\n          you or any third party posts on or through the Service.</p>\n  \n        <p>Testable LLC has the right but not the obligation to monitor and edit all Content provided by users.</p>\n  \n        <p>In addition, Content found on or through this Service are the property of Testable LLC or used with permission.\n          You may not distribute, modify, transmit, reuse, download, repost, copy, or use said Content, whether in whole\n          or in part, for commercial purposes or for personal gain, without express advance written permission from\n          us.</p>\n  \n        <p><strong>Accounts</strong></p>\n  \n        <p>When you create an account with us, you guarantee that you are above the age of 18, and that the information\n          you provide us is accurate, complete, and current at all times. Inaccurate, incomplete, or obsolete information\n          may result in the immediate termination of your account on the Service.</p>\n  \n        <p>You are responsible for maintaining the confidentiality of your account and password, including but not limited\n          to the restriction of access to your computer and/or account. You agree to accept responsibility for any and all\n          activities or actions that occur under your account and/or password, whether your password is with our Service\n          or a third-party service. You must notify us immediately upon becoming aware of any breach of security or\n          unauthorized use of your account.</p>\n  \n  \n        <p><strong>Intellectual Property</strong></p>\n        <p>The Service and its original content (excluding Content provided by users), features and functionality are and\n          will remain the exclusive property of Testable LLC and its licensors. The Service is protected by copyright,\n          trademark, and other laws of both the United States and foreign countries. Our trademarks and trade dress may\n          not be used in connection with any product or service without the prior written consent of Testable LLC.</p>\n  \n        <p><strong>Links To Other Web Sites</strong></p>\n  \n        <p>Our Service may contain links to third party web sites or services that are not owned or controlled by Testable\n          LLC.</p>\n  \n        <p>Testable LLC has no control over, and assumes no responsibility for the content, privacy policies, or practices\n          of any third party web sites or services. We do not warrant the offerings of any of these entities/individuals\n          or their websites.</p>\n  \n        <p>You acknowledge and agree that Testable LLC shall not be responsible or liable, directly or indirectly, for any\n          damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content,\n          goods or services available on or through any such third party web sites or services.</p>\n  \n        <p>We strongly advise you to read the terms and conditions and privacy policies of any third party web sites or\n          services that you visit.</p>\n  \n        <p><strong>Termination</strong></p>\n  \n        <p>We may terminate or suspend your account and bar access to the Service immediately, without prior notice or\n          liability, under our sole discretion, for any reason whatsoever and without limitation, including but not\n          limited to a breach of the Terms.</p>\n  \n        <p>If you wish to terminate your account, you may simply discontinue using the Service.</p>\n  \n        <p>All provisions of the Terms which by their nature should survive termination shall survive termination,\n          including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of\n          liability.</p>\n  \n        <p><strong>Indemnification</strong></p>\n  \n        <p>You agree to defend, indemnify and hold harmless Testable LLC and its licensee and licensors, and their\n          employees, contractors, agents, officers and directors, from and against any and all claims, damages,\n          obligations, losses, liabilities, costs or debt, and expenses (including but not limited to attorney's fees),\n          resulting from or arising out of a) your use and access of the Service which is either grossly negligent or in\n          breach of these Terms; b) a breach of these Terms, or c) Content posted on the Service which infringes the\n          intellectual property rights of any third party.</p>\n  \n  \n        <p><strong>Limitation Of Liability</strong></p>\n  \n        <p>In no event shall Testable LLC, nor its directors, employees, partners, agents, suppliers, or affiliates, be\n          liable for any indirect, incidental, special, consequential or punitive damages, including without limitation,\n          loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or\n          inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any\n          content obtained from the Service; and (iv) unauthorized access, use or alteration of your transmissions or\n          content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or\n          not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to\n          have failed of its essential purpose.</p>\n  \n        <p><strong>Disclaimer</strong></p>\n  \n        <p>Your use of the Service is at your sole risk. The Service is provided on an \"AS IS\" and \"AS AVAILABLE\" basis.\n          The Service is provided without warranties of any kind, whether express or implied, including, but not limited\n          to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of\n          performance.</p>\n  \n        <p>Testable LLC its subsidiaries, affiliates, and its licensors do not warrant that a) the Service will function\n          uninterrupted, secure or available at any particular time or location; b) any errors or defects will be\n          corrected; c) the Service is free of viruses or other harmful components; or d) the results of using the Service\n          will meet your requirements.</p>\n  \n        <p><strong>Exclusions</strong></p>\n  \n        <p>Some jurisdictions do not allow the exclusion of certain warranties or the exclusion or limitation of liability\n          for consequential or incidental damages, so the limitations above may not apply to you.</p>\n  \n  \n        <p><strong>Governing Law</strong></p>\n  \n        <p>These Terms shall be governed and construed in accordance with the laws of Illinois, United States, without\n          regard to its conflict of law provisions.</p>\n  \n        <p>Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights.\n          If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of\n          these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service,\n          and supersede and replace any prior agreements we might have had between us regarding the Service.</p>\n  \n        <p><strong>Changes</strong></p>\n  \n        <p>We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is\n          material we will provide at least 30 days notice prior to any new terms taking effect. What constitutes a\n          material change will be determined at our sole discretion.</p>\n  \n        <p>By continuing to access or use our Service after any revisions become effective, you agree to be bound by the\n          revised terms. If you do not agree to the new terms, you are no longer authorized to use the Service.</p>\n  \n        <p><strong>Contact Us</strong></p>\n  \n        <p>If you have any questions about these Terms, please <a href=\"mailto:support@testable.io\">contact us.</a></p>\n  \n      </div>\n      {{!-- end container --}}\n    </div>\n    {{!-- end #terms --}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[\\\"Terms of Service - Testable\\\"],null]],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"page-without-sidebar landing-page\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[10,0],[14,1,\\\"terms\\\"],[14,0,\\\"content\\\"],[14,\\\"data-scrollview\\\",\\\"true\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,0],[14,0,\\\"container\\\"],[14,\\\"data-bs-animation\\\",\\\"true\\\"],[14,\\\"data-bs-animation-type\\\",\\\"fadeInDown\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h1\\\"],[14,0,\\\"content-title\\\"],[12],[1,\\\"Terms of Service (\\\\\\\"Terms\\\\\\\")\\\"],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"Last updated: June 01, 2018\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Please read these Terms of Service (\\\\\\\"Terms\\\\\\\", \\\\\\\"Terms of Service\\\\\\\") carefully before using the http://testable.io\\\\n        website (the \\\\\\\"Service\\\\\\\") operated by Testable LLC (\\\\\\\"us\\\\\\\", \\\\\\\"we\\\\\\\", or \\\\\\\"our\\\\\\\").\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Your access to and use of the Service is conditioned upon your acceptance of and compliance with these Terms.\\\\n        These Terms apply to all visitors, users and others who wish to access or use the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part\\\\n        of the terms then you do not have permission to access the Service.\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Communications\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional\\\\n        materials and other information we may send. However, you may opt out of receiving any, or all, of these\\\\n        communications from us by following the unsubscribe link or instructions provided in any email we send.\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Subscriptions\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Some parts of the Service are billed on a subscription basis (\\\\\\\"Subscription(s)\\\\\\\"). You will be billed in advance\\\\n        on a recurring and periodic basis (\\\\\\\"Billing Cycle\\\\\\\"). Billing cycles are set either on a monthly or annual basis,\\\\n        depending on the type of subscription plan you select when purchasing a Subscription.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions\\\\n        unless you cancel it or Testable LLC cancels it. You may cancel your Subscription renewal either through your\\\\n        online account management page or by contacting Testable LLC customer support team.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"A valid payment method, including credit card, is required to process the payment for your Subscription. You\\\\n        shall provide Testable LLC with accurate and complete billing information including full name, address, state,\\\\n        zip code, telephone number, and a valid payment method information. By submitting such payment information, you\\\\n        automatically authorize Testable LLC to charge all Subscription fees incurred through your account to any such\\\\n        payment instruments.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Should automatic billing fail to occur for any reason, Testable LLC will issue an electronic invoice indicating\\\\n        that you must proceed manually, within a certain deadline date, with the full payment corresponding to the\\\\n        billing period as indicated on the invoice.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Free Trial\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC may, at its sole discretion, offer a Subscription with a free trial for a limited period of time\\\\n        (\\\\\\\"Free Trial\\\\\\\").\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"You may be required to enter your billing information in order to sign up for the Free Trial.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"If you do enter your billing information when signing up for the Free Trial, you will not be charged by\\\\n        Testable LLC until the Free Trial has expired. On the last day of the Free Trial period, unless you cancelled\\\\n        your Subscription, you will be automatically charged the applicable Subscription fees for the type of\\\\n        Subscription you have selected.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"At any time and without notice, Testable LLC reserves the right to (i) modify the terms and conditions of the\\\\n        Free Trial offer, or (ii) cancel such Free Trial offer.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Fee Changes\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions.\\\\n        Any Subscription fee change will become effective at the end of the then-current Billing Cycle.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC will provide you with a reasonable prior notice of any change in Subscription fees to give you an\\\\n        opportunity to terminate your Subscription before such change becomes effective.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Your continued use of the Service after the Subscription fee change comes into effect constitutes your\\\\n        agreement to pay the modified Subscription fee amount.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Refunds\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Certain refund requests for Subscriptions may be considered by Testable LLC on a case-by-case basis and granted\\\\n        in sole discretion of Testable LLC.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Content\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Our Service allows you to post, link, store, share and otherwise make available certain information, text,\\\\n        graphics, videos, or other material (\\\\\\\"Content\\\\\\\"). You are responsible for the Content that you post on or through\\\\n        the Service, including its legality, reliability, and appropriateness.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"By posting Content on or through the Service, You represent and warrant that: (i) the Content is yours (you own\\\\n        it) and/or you have the right to use it, and (ii) that the posting of your Content on or through the Service\\\\n        does not violate the privacy rights, publicity rights, copyrights, contract rights or any other rights of any\\\\n        person or entity. We reserve the right to terminate the account of anyone found to be infringing on a\\\\n        copyright.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"You retain any and all of your rights to any Content you submit, post or display on or through the Service and\\\\n        you are responsible for protecting those rights. We take no responsibility and assume no liability for Content\\\\n        you or any third party posts on or through the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC has the right but not the obligation to monitor and edit all Content provided by users.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"In addition, Content found on or through this Service are the property of Testable LLC or used with permission.\\\\n        You may not distribute, modify, transmit, reuse, download, repost, copy, or use said Content, whether in whole\\\\n        or in part, for commercial purposes or for personal gain, without express advance written permission from\\\\n        us.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Accounts\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"When you create an account with us, you guarantee that you are above the age of 18, and that the information\\\\n        you provide us is accurate, complete, and current at all times. Inaccurate, incomplete, or obsolete information\\\\n        may result in the immediate termination of your account on the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"You are responsible for maintaining the confidentiality of your account and password, including but not limited\\\\n        to the restriction of access to your computer and/or account. You agree to accept responsibility for any and all\\\\n        activities or actions that occur under your account and/or password, whether your password is with our Service\\\\n        or a third-party service. You must notify us immediately upon becoming aware of any breach of security or\\\\n        unauthorized use of your account.\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Intellectual Property\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,\\\"The Service and its original content (excluding Content provided by users), features and functionality are and\\\\n        will remain the exclusive property of Testable LLC and its licensors. The Service is protected by copyright,\\\\n        trademark, and other laws of both the United States and foreign countries. Our trademarks and trade dress may\\\\n        not be used in connection with any product or service without the prior written consent of Testable LLC.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Links To Other Web Sites\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Our Service may contain links to third party web sites or services that are not owned or controlled by Testable\\\\n        LLC.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC has no control over, and assumes no responsibility for the content, privacy policies, or practices\\\\n        of any third party web sites or services. We do not warrant the offerings of any of these entities/individuals\\\\n        or their websites.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"You acknowledge and agree that Testable LLC shall not be responsible or liable, directly or indirectly, for any\\\\n        damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content,\\\\n        goods or services available on or through any such third party web sites or services.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"We strongly advise you to read the terms and conditions and privacy policies of any third party web sites or\\\\n        services that you visit.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Termination\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"We may terminate or suspend your account and bar access to the Service immediately, without prior notice or\\\\n        liability, under our sole discretion, for any reason whatsoever and without limitation, including but not\\\\n        limited to a breach of the Terms.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"If you wish to terminate your account, you may simply discontinue using the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"All provisions of the Terms which by their nature should survive termination shall survive termination,\\\\n        including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of\\\\n        liability.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Indemnification\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"You agree to defend, indemnify and hold harmless Testable LLC and its licensee and licensors, and their\\\\n        employees, contractors, agents, officers and directors, from and against any and all claims, damages,\\\\n        obligations, losses, liabilities, costs or debt, and expenses (including but not limited to attorney's fees),\\\\n        resulting from or arising out of a) your use and access of the Service which is either grossly negligent or in\\\\n        breach of these Terms; b) a breach of these Terms, or c) Content posted on the Service which infringes the\\\\n        intellectual property rights of any third party.\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Limitation Of Liability\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"In no event shall Testable LLC, nor its directors, employees, partners, agents, suppliers, or affiliates, be\\\\n        liable for any indirect, incidental, special, consequential or punitive damages, including without limitation,\\\\n        loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or\\\\n        inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any\\\\n        content obtained from the Service; and (iv) unauthorized access, use or alteration of your transmissions or\\\\n        content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or\\\\n        not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to\\\\n        have failed of its essential purpose.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Disclaimer\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Your use of the Service is at your sole risk. The Service is provided on an \\\\\\\"AS IS\\\\\\\" and \\\\\\\"AS AVAILABLE\\\\\\\" basis.\\\\n        The Service is provided without warranties of any kind, whether express or implied, including, but not limited\\\\n        to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of\\\\n        performance.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Testable LLC its subsidiaries, affiliates, and its licensors do not warrant that a) the Service will function\\\\n        uninterrupted, secure or available at any particular time or location; b) any errors or defects will be\\\\n        corrected; c) the Service is free of viruses or other harmful components; or d) the results of using the Service\\\\n        will meet your requirements.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Exclusions\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Some jurisdictions do not allow the exclusion of certain warranties or the exclusion or limitation of liability\\\\n        for consequential or incidental damages, so the limitations above may not apply to you.\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Governing Law\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"These Terms shall be governed and construed in accordance with the laws of Illinois, United States, without\\\\n        regard to its conflict of law provisions.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights.\\\\n        If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of\\\\n        these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service,\\\\n        and supersede and replace any prior agreements we might have had between us regarding the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Changes\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is\\\\n        material we will provide at least 30 days notice prior to any new terms taking effect. What constitutes a\\\\n        material change will be determined at our sole discretion.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"By continuing to access or use our Service after any revisions become effective, you agree to be bound by the\\\\n        revised terms. If you do not agree to the new terms, you are no longer authorized to use the Service.\\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Contact Us\\\"],[13],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,2],[12],[1,\\\"If you have any questions about these Terms, please \\\"],[10,3],[14,6,\\\"mailto:support@testable.io\\\"],[12],[1,\\\"contact us.\\\"],[13],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"page-title\\\",\\\"div\\\",\\\"h1\\\",\\\"p\\\",\\\"strong\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/terms-content.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"terms-content\"));\n});","define(\"@testable/shared-ui/components/ui/time-range-selector\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/monitor\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _monitor, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/monitor\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <Ui::PSelect\n    @options={{this.timeRangeOptions}}\n    @selected={{this.selectedTimeRange}}\n    @onChange={{this.onSelectTimeRange}}\n    ...attributes\n    as |range|>\n    <span class=\"{{range.value}}\">\n      {{range.label}}\n    </span>\n  </Ui::PSelect>\n  \n  <Ui::ModalWrapper\n    @showModal={{this.showDateSelectModal}}\n    @closeModal={{this.onCancelDateRange}}\n    @title=\"Select Custom Date Range\"\n    class=\"date-range-modal\">\n  \n    <Ui::DateRangePicker\n      @onChange={{fn (mut this.selectedRange)}}\n      @startDate={{this.customStartDate}}\n      @endDate={{this.customEndDate}}\n      @startLabel=\"From\"\n      @endLabel=\"To\"\n      @theme={{this.theme}}\n    />\n  \n    <div class=\"mt-3 d-flex justify-content-end gap-2\">\n      <button type=\"button\" class=\"btn btn-secondary\" {{on \"click\" this.onCancelDateRange}}>\n        Cancel\n      </button>\n      <button\n        type=\"button\"\n        class=\"btn btn-primary\"\n        {{on \"click\" this.onApplyDateRange}}\n        disabled={{not this.selectedRange}}\n      >\n        Apply\n      </button>\n    </div>\n  </Ui::ModalWrapper>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[17,1]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@onChange\\\"],[[30,0,[\\\"timeRangeOptions\\\"]],[30,0,[\\\"selectedTimeRange\\\"]],[30,0,[\\\"onSelectTimeRange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,1],[15,0,[29,[[30,2,[\\\"value\\\"]]]]],[12],[1,\\\"\\\\n    \\\"],[1,[30,2,[\\\"label\\\"]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[2]]]]],[1,\\\"\\\\n\\\\n\\\"],[8,[39,2],[[24,0,\\\"date-range-modal\\\"]],[[\\\"@showModal\\\",\\\"@closeModal\\\",\\\"@title\\\"],[[30,0,[\\\"showDateSelectModal\\\"]],[30,0,[\\\"onCancelDateRange\\\"]],\\\"Select Custom Date Range\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n  \\\"],[8,[39,3],null,[[\\\"@onChange\\\",\\\"@startDate\\\",\\\"@endDate\\\",\\\"@startLabel\\\",\\\"@endLabel\\\",\\\"@theme\\\"],[[28,[37,4],[[28,[37,5],[[30,0,[\\\"selectedRange\\\"]]],null]],null],[30,0,[\\\"customStartDate\\\"]],[30,0,[\\\"customEndDate\\\"]],\\\"From\\\",\\\"To\\\",[30,0,[\\\"theme\\\"]]]],null],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"mt-3 d-flex justify-content-end gap-2\\\"],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-secondary\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"onCancelDateRange\\\"]]],null],[12],[1,\\\"\\\\n      Cancel\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[16,\\\"disabled\\\",[28,[37,9],[[30,0,[\\\"selectedRange\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"onApplyDateRange\\\"]]],null],[12],[1,\\\"\\\\n      Apply\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"range\\\"],[\\\"ui/p-select\\\",\\\"span\\\",\\\"ui/modal-wrapper\\\",\\\"ui/date-range-picker\\\",\\\"fn\\\",\\\"mut\\\",\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"not\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/time-range-selector.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiTimeRangeSelectorComponent = _exports.default = (_class = class UiTimeRangeSelectorComponent extends _component2.default {\n    get timeRangeOptions() {\n      return this.args.options || _monitor.default.timeRangeOptions;\n    }\n    get theme() {\n      return this.args.theme || 'light';\n    }\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"selectedTimeRange\", _descriptor, this);\n      _initializerDefineProperty(this, \"showDateSelectModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"customStartDate\", _descriptor3, this);\n      _initializerDefineProperty(this, \"customEndDate\", _descriptor4, this);\n      _initializerDefineProperty(this, \"selectedRange\", _descriptor5, this);\n      if (this.args.selectedTimeRange) {\n        this.selectedTimeRange = this.args.selectedTimeRange;\n      }\n    }\n    onSelectTimeRange(timeRange) {\n      this.selectedTimeRange = timeRange;\n      if (timeRange.value === 'custom') {\n        this.showDateSelectModal = true;\n      } else {\n        if (this.args.onTimeRangeChange) {\n          this.args.onTimeRangeChange(timeRange);\n        }\n      }\n    }\n    onApplyDateRange() {\n      if (!this.selectedRange) return;\n      this.customStartDate = this.selectedRange.startDate;\n      this.customEndDate = this.selectedRange.endDate;\n      this.showDateSelectModal = false;\n      const startFormatted = new Date(this.selectedRange.startDate).getTime().toString();\n      const endFormatted = new Date(this.selectedRange.endDate).getTime().toString();\n      this.selectedTimeRange = {\n        value: 'custom',\n        label: `Custom: ${new Date(this.selectedRange.startDate).toLocaleDateString('en-US', {\n          month: 'short',\n          day: 'numeric'\n        })} - ${new Date(this.selectedRange.endDate).toLocaleDateString('en-US', {\n          month: 'short',\n          day: 'numeric'\n        })}`,\n        startDate: startFormatted,\n        endDate: endFormatted\n      };\n      if (this.args.onTimeRangeChange) {\n        this.args.onTimeRangeChange(this.selectedTimeRange);\n      }\n    }\n    onCancelDateRange() {\n      this.showDateSelectModal = false;\n      this.selectedTimeRange = this.args.selectedTimeRange || _monitor.default.defaultTimeRange;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"selectedTimeRange\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _monitor.default.defaultTimeRange;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showDateSelectModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"customStartDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"customEndDate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedRange\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onSelectTimeRange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectTimeRange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onApplyDateRange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onApplyDateRange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCancelDateRange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCancelDateRange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiTimeRangeSelectorComponent);\n});","define(\"@testable/shared-ui/components/ui/videojs-player\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/object/observers\", \"ember-uuid\", \"video.js\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _observers, _emberUuid, _video, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/object/observers\",0,\"ember-uuid\",0,\"video.js\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <video-js\n          id={{this.uuid}}\n          class='video-js vjs-big-play-centered'\n          autoplay={{this.autoplay}}\n          controls={{this.controls}}\n          loop={{this.loop}}\n          muted={{this.muted}}\n          playsinline={{this.playsinline}}\n          preload='auto'\n          poster={{this.poster}}\n          data-setup='{}'\n          crossorigin={{this.crossorigin}}\n          tabindex='0'\n  \n    {{did-insert this._didRender}}\n    {{did-update this._didRender @src}}\n    {{did-update this.videoSeekUpdate @videoSeekPosition}}\n    {{will-destroy this._willDestroy}}\n  >\n    {{#if this.src}}\n      <source src={{this.src}} type={{this.type}} />\n    {{/if}}\n  \n    {{#if this.sources}}\n      {{#each this.sources as |item|}}\n        <source src={{item.src}} type={{item.type}} />\n      {{/each}}\n    {{/if}}\n  \n    {{#if this.textTrack}}\n      <track\n              kind='captions'\n              src={{this.textTrack}}\n              srclang='en'\n              label='English'\n              type='text/vtt'\n              default\n      />\n    {{/if}}\n  \n    {{#if this.textTracks}}\n      {{#each this.textTracks as |textTrack|}}\n        <track\n                kind={{textTrack.kind}}\n                src={{textTrack.src}}\n                srclang={{textTrack.language}}\n                label={{textTrack.label}}\n                type={{textTrack.type}}\n                default\n        />\n      {{/each}}\n    {{/if}}\n  \n    <p class='vjs-no-js'>\n      To view this video please enable JavaScript, and consider upgrading to a web\n      browser that\n      <a\n              href='https://videojs.com/html5-video-support/'\n              target='_blank'\n              rel='noopener noreferrer'\n      >supports HTML5 video</a>\n    </p>\n  </video-js>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"video-js\\\"],[16,1,[30,0,[\\\"uuid\\\"]]],[24,0,\\\"video-js vjs-big-play-centered\\\"],[16,\\\"autoplay\\\",[30,0,[\\\"autoplay\\\"]]],[16,\\\"controls\\\",[30,0,[\\\"controls\\\"]]],[16,\\\"loop\\\",[30,0,[\\\"loop\\\"]]],[16,\\\"muted\\\",[30,0,[\\\"muted\\\"]]],[16,\\\"playsinline\\\",[30,0,[\\\"playsinline\\\"]]],[24,\\\"preload\\\",\\\"auto\\\"],[16,\\\"poster\\\",[30,0,[\\\"poster\\\"]]],[24,\\\"data-setup\\\",\\\"{}\\\"],[16,\\\"crossorigin\\\",[30,0,[\\\"crossorigin\\\"]]],[24,\\\"tabindex\\\",\\\"0\\\"],[4,[38,1],[[30,0,[\\\"_didRender\\\"]]],null],[4,[38,2],[[30,0,[\\\"_didRender\\\"]],[30,1]],null],[4,[38,2],[[30,0,[\\\"videoSeekUpdate\\\"]],[30,2]],null],[4,[38,3],[[30,0,[\\\"_willDestroy\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"src\\\"]],[[[1,\\\"    \\\"],[10,\\\"source\\\"],[15,\\\"src\\\",[30,0,[\\\"src\\\"]]],[15,4,[30,0,[\\\"type\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"sources\\\"]],[[[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"sources\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,\\\"source\\\"],[15,\\\"src\\\",[30,3,[\\\"src\\\"]]],[15,4,[30,3,[\\\"type\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[3]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"textTrack\\\"]],[[[1,\\\"    \\\"],[10,\\\"track\\\"],[14,\\\"kind\\\",\\\"captions\\\"],[15,\\\"src\\\",[30,0,[\\\"textTrack\\\"]]],[14,\\\"srclang\\\",\\\"en\\\"],[14,\\\"label\\\",\\\"English\\\"],[14,\\\"default\\\",\\\"\\\"],[14,4,\\\"text/vtt\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"textTracks\\\"]],[[[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"textTracks\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[10,\\\"track\\\"],[15,\\\"kind\\\",[30,4,[\\\"kind\\\"]]],[15,\\\"src\\\",[30,4,[\\\"src\\\"]]],[15,\\\"srclang\\\",[30,4,[\\\"language\\\"]]],[15,\\\"label\\\",[30,4,[\\\"label\\\"]]],[14,\\\"default\\\",\\\"\\\"],[15,4,[30,4,[\\\"type\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[4]],null]],[]],null],[1,\\\"\\\\n  \\\"],[10,2],[14,0,\\\"vjs-no-js\\\"],[12],[1,\\\"\\\\n    To view this video please enable JavaScript, and consider upgrading to a web\\\\n    browser that\\\\n    \\\"],[10,3],[14,6,\\\"https://videojs.com/html5-video-support/\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"supports HTML5 video\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@src\\\",\\\"@videoSeekPosition\\\",\\\"item\\\",\\\"textTrack\\\"],[\\\"video-js\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"will-destroy\\\",\\\"if\\\",\\\"source\\\",\\\"each\\\",\\\"-track-array\\\",\\\"track\\\",\\\"p\\\",\\\"a\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/videojs-player.hbs\",\n    \"isStrictMode\": false\n  });\n  let UiVideojsPlayerComponent = _exports.default = (_class = class UiVideojsPlayerComponent extends _component2.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"player\", _descriptor, this);\n      _initializerDefineProperty(this, \"uuid\", _descriptor2, this);\n      // Defaults\n      _initializerDefineProperty(this, \"src\", _descriptor3, this);\n      _initializerDefineProperty(this, \"aspectRatio\", _descriptor4, this);\n      _initializerDefineProperty(this, \"type\", _descriptor5, this);\n      _initializerDefineProperty(this, \"autoplay\", _descriptor6, this);\n      _initializerDefineProperty(this, \"controls\", _descriptor7, this);\n      _initializerDefineProperty(this, \"fluid\", _descriptor8, this);\n      _initializerDefineProperty(this, \"loop\", _descriptor9, this);\n      _initializerDefineProperty(this, \"muted\", _descriptor0, this);\n      _initializerDefineProperty(this, \"height\", _descriptor1, this);\n      _initializerDefineProperty(this, \"width\", _descriptor10, this);\n      _initializerDefineProperty(this, \"html5\", _descriptor11, this);\n      _initializerDefineProperty(this, \"playerEvents\", _descriptor12, this);\n      _initializerDefineProperty(this, \"liveui\", _descriptor13, this);\n      _initializerDefineProperty(this, \"vrProjection\", _descriptor14, this);\n      _initializerDefineProperty(this, \"playsinline\", _descriptor15, this);\n      _initializerDefineProperty(this, \"poster\", _descriptor16, this);\n      _initializerDefineProperty(this, \"sources\", _descriptor17, this);\n      _initializerDefineProperty(this, \"textTrack\", _descriptor18, this);\n      _initializerDefineProperty(this, \"textTracks\", _descriptor19, this);\n      _initializerDefineProperty(this, \"crossorigin\", _descriptor20, this);\n      this.playerEvents = {\n        abort: 'abort',\n        canplay: 'canplay',\n        canplaythrough: 'canplaythrough',\n        durationchange: 'durationchange',\n        emptied: 'emptied',\n        ended: 'ended',\n        error: 'error',\n        loadeddata: 'loadeddata',\n        loadedmetadata: 'loadedmetadata',\n        loadstart: 'loadstart',\n        pause: 'pause',\n        play: 'play',\n        playing: 'playing',\n        progress: 'progress',\n        ratechange: 'ratechange',\n        resize: 'resize',\n        seeked: 'seeked',\n        seeking: 'seeking',\n        stalled: 'stalled',\n        suspend: 'suspend',\n        timeupdate: 'timeupdate',\n        useractive: 'useractive',\n        userinactive: 'userinactive',\n        volumechange: 'volumechange',\n        waiting: 'waiting',\n        click: 'click',\n        tap: 'tap'\n      };\n      this.setPlayerProperties();\n      (0, _observers.addObserver)(this, 'src', this.updatePlayer);\n      // addObserver(this, 'aspectRatio', this.updatePlayer);\n      // addObserver(this, 'type', this.updatePlayer);\n      // addObserver(this, 'autoplay', this.updatePlayer);\n      // addObserver(this, 'controls', this.updatePlayer);\n      // addObserver(this, 'fluid', this.updatePlayer);\n      // addObserver(this, 'loop', this.updatePlayer);\n      // addObserver(this, 'muted', this.updatePlayer);\n      // addObserver(this, 'height', this.updatePlayer);\n      // addObserver(this, 'width', this.updatePlayer);\n      // addObserver(this, 'html5', this.updatePlayer);\n      // addObserver(this, 'playerEvents', this.updatePlayer);\n      // addObserver(this, 'liveui', this.updatePlayer);\n      // addObserver(this, 'vrProjection', this.updatePlayer);\n\n      this.uuid = 'videojs_' + (0, _emberUuid.v4)().split('-').join('_');\n    }\n    setPlayerProperties() {\n      this.src = this.args.src ?? '';\n      this.aspectRatio = this.args.aspectRatio ?? '16:9';\n      this.type = this.args.type ?? 'application/x-mpegURL';\n      this.autoplay = this.args.autoplay ?? false;\n      this.controls = this.args.controls ?? true;\n      this.fluid = this.args.fluid ?? true;\n      this.loop = this.args.loop ?? false;\n      this.muted = this.args.muted ?? false;\n      this.height = this.args.height ?? null;\n      this.width = this.args.width ?? null;\n      this.html5 = this.args.html5 ?? null;\n      this.playerEvents = this.args.playerEvents ?? null;\n      this.liveui = this.args.liveui ?? true;\n      this.vrProjection = this.args.vrProjection ?? null;\n      this.playsinline = this.args.playsinline ?? false;\n      this.poster = this.args.poster ?? null;\n      this.sources = this.args.sources ?? null;\n      this.textTrack = this.args.textTrack ?? null;\n      this.textTracks = this.args.textTracks ?? null;\n      this.crossorigin = this.args.crossorigin ?? null;\n    }\n    _didRender(domElement) {\n      if (this.player) {\n        this.updatePlayer(domElement);\n      } else {\n        this.initPlayer(domElement);\n      }\n    }\n    _willDestroy() {\n      (0, _observers.removeObserver)(this, 'src', this.updatePlayer);\n      // removeObserver(this, 'aspectRatio', this.updatePlayer);\n      // removeObserver(this, 'type', this.updatePlayer);\n      // removeObserver(this, 'autoplay', this.updatePlayer);\n      // removeObserver(this, 'controls', this.updatePlayer);\n      // removeObserver(this, 'fluid', this.updatePlayer);\n      // removeObserver(this, 'loop', this.updatePlayer);\n      // removeObserver(this, 'muted', this.updatePlayer);\n      // removeObserver(this, 'height', this.updatePlayer);\n      // removeObserver(this, 'width', this.updatePlayer);\n      // removeObserver(this, 'html5', this.updatePlayer);\n      // removeObserver(this, 'playerEvents', this.updatePlayer);\n      // removeObserver(this, 'liveui', this.updatePlayer);\n      // removeObserver(this, 'vrProjection', this.updatePlayer);\n\n      if (this.player) this.player.dispose();\n    }\n    initPlayer() {\n      const self = this;\n      const playerOptions = {};\n      playerOptions.html5 = this.html5 || {};\n      if (this.liveui) {\n        playerOptions.liveui = this.liveui;\n      }\n      const player = (0, _video.default)(this.uuid, playerOptions);\n      if (this.height) {\n        player.height(this.height);\n      }\n      if (this.width) {\n        player.width(this.width);\n      }\n      if (this.fluid) {\n        player.fluid(this.fluid);\n      }\n      if (this.aspectRatio) {\n        player.aspectRatio(this.aspectRatio);\n      }\n\n      // Register plugins\n      // Get global plugins from config.\n      if (this.vrProjection) {\n        if (typeof player.vr === 'function') {\n          this.crossorigin = 'anonymous';\n          player.el()?.querySelector('video')?.setAttribute('crossorigin', 'anonymous');\n          player.vr({\n            projection: this.vrProjection\n          });\n        } else {\n          throw new Error(\"It looks like you are trying to play a VR video without the videojs-vr library. Please `npm install --save-dev videojs-vr` and add `app.import('node_modules/videojs-vr/dist/videojs-vr.min.js');` to your ember-cli-build.js file.\");\n        }\n      }\n\n      // https://github.com/IvyApp/ivy-videojs/blob/master/addon/components/ivy-videojs-player.js\n      player.ready(() => {\n        // Set up event listeners defined in `playerEvents`.\n        let playerEvents = this.playerEvents || {};\n        if (playerEvents) {\n          for (let key in playerEvents) {\n            if (!playerEvents.hasOwnProperty(key)) {\n              continue;\n            }\n            this.sendActionOnPlayerEvent(player, key, playerEvents[key]);\n          }\n        }\n\n        // Let the outside world know that we're ready.\n        if (self.ready && typeof self.ready === 'function') {\n          self.ready(player, this);\n        }\n      });\n\n      // Register plugins\n      this.player = player;\n    }\n\n    /**\n     * Sets the value of a property on a video.js player. If the property is\n     * already equal to the given value, no change is made.\n     *\n     * @method setPlayerProperty\n     * @param {Player} player the video.js player instance\n     * @param {String} playerProperty the name of the property to set\n     * @param {Object} value the value to set\n     */\n    setPlayerProperty(player, playerProperty, value) {\n      const propertyMethod = player[playerProperty];\n      if (propertyMethod) {\n        const previousValue = propertyMethod.call(player);\n        if (previousValue !== value) {\n          propertyMethod.call(player, value);\n        }\n      }\n    }\n    videoSeekUpdate() {\n      if (this.player) {\n        this.player.currentTime(this.args.videoSeekPosition / 1000);\n        this.player.play();\n      }\n    }\n    updatePlayer() {\n      let player = (0, _video.default)(this.uuid);\n      let source = this.args.src;\n      if (this.args.src !== this.src) {\n        player.pause();\n        player.src(source);\n        player.load();\n      }\n      this.setPlayerProperties();\n    }\n\n    /**\n     * Sets up a listener that sends an action on a video.js player event.\n     *\n     * @method sendActionOnPlayerEvent\n     * @param {Player} player the video.js player instance\n     * @param {String} action the action name to be sent\n     * @param {String} playerEvent the player event name to listen for\n     */\n    sendActionOnPlayerEvent(player, action, playerEvent = action) {\n      const self = this;\n      const listenerFunction = (...args) => {\n        if (self[action]) {\n          self[action](player, this, ...args);\n        }\n      };\n      this._onPlayerEvent(player, playerEvent, listenerFunction);\n    }\n    _onPlayerEvent(player, eventName, listenerFunction) {\n      player.on(eventName, listenerFunction);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"player\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"uuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"src\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"aspectRatio\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"autoplay\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"controls\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"fluid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"loop\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"muted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"height\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"width\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"html5\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"playerEvents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"liveui\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"vrProjection\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"playsinline\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"poster\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"sources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"textTrack\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"textTracks\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"crossorigin\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"_didRender\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_didRender\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_willDestroy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_willDestroy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setPlayerProperty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setPlayerProperty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"videoSeekUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"videoSeekUpdate\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, UiVideojsPlayerComponent);\n});","define(\"@testable/shared-ui/components/ui/x-select-option\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <option value={{@value}} selected={{if (eq @currentValue @value) true false}}>{{yield}}</option>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"option\\\"],[15,2,[30,1]],[15,\\\"selected\\\",[52,[28,[37,2],[[30,2],[30,1]],null],true,false]],[12],[18,3,null],[13]],[\\\"@value\\\",\\\"@currentValue\\\",\\\"&default\\\"],[\\\"option\\\",\\\"if\\\",\\\"eq\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/x-select-option.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"x-select-option\"));\n});","define(\"@testable/shared-ui/components/ui/x-select\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <select\n          class={{@class}}\n          ...attributes\n    {{on \"change\" (pick \"target.value\" @onChange)}}\n  >\n    {{yield (hash option=(component \"ui/x-select-option\" currentValue=@value))}}\n  </select>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"select\\\"],[16,0,[30,1]],[17,2],[4,[38,1],[\\\"change\\\",[28,[37,2],[\\\"target.value\\\",[30,3]],null]],null],[12],[1,\\\"\\\\n  \\\"],[18,5,[[28,[37,4],null,[[\\\"option\\\"],[[50,\\\"ui/x-select-option\\\",0,null,[[\\\"currentValue\\\"],[[30,4]]]]]]]]],[1,\\\"\\\\n\\\"],[13]],[\\\"@class\\\",\\\"&attrs\\\",\\\"@onChange\\\",\\\"@value\\\",\\\"&default\\\"],[\\\"select\\\",\\\"on\\\",\\\"pick\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/ui/x-select.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"x-select\"));\n});","define(\"@testable/shared-ui/components/vcs-root-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"js-base64\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _lib, _environment, _jsBase, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"js-base64\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal container fade\" id=\"vcsRootModal\" role=\"dialog\" aria-hidden=\"true\"\n    {{did-insert this.didInsert}}>\n    <div class=\"modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">{{if @vcsRoot 'Update' 'Create'}} Version Control Root</h4>\n          <button {{on \"click\" this.hideModal}} type=\"button\" class=\"close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"panel\">\n            <div class=\"panel-body\">\n              <form id=\"vcsRootForm\" {{on \"submit\" this.createOrUpdateVcsRoot}} class=\"form-horizontal\"\n                    data-parsley-trigger=\"focusout\">\n                <fieldset disabled={{this.submitInProgress}}>\n                  <div class=\"form-group\">\n                    <label>Type\n                      <Ui::InfoIcon @content=\"Type of version control system to connect with.\"/>\n                    </label>\n                    <Ui::PSelect @options={{this.vcsTypes}}\n                                 @selected={{this.vcsType}}\n                                 @placeholder=\"Please select VCS type ...\"\n                                 @onChange={{this.updateVcsTypes}} as |vcs|>\n                      {{vcs}}\n                    </Ui::PSelect>\n  \n                  </div>\n                  <div class=\"form-group\">\n                    <label>Url\n                      <Ui::InfoIcon @content=\"Type of version control system to connect with.\"/>\n                    </label>\n                    <Input @type=\"text\" class=\"form-control\" placeholder=\"Url\" @value={{this.url}}\n                           data-parsley-required=\"true\"\n                           data-parsley-minlength=\"1\" data-parsley-required-message=\"Url is required.\"\n                           data-parsley-minlength-message=\"Url must be at least 1 character.\" {{on \"change\"\n                                                                                                   this.updateUrl}} />\n                  </div>\n                  <div class=\"form-group\">\n                    <label>Default Branch\n                      <Ui::InfoIcon\n                              @content=\"Which branch or tag to clone by default. Example: master\"/>\n                    </label>\n                    <Input @type=\"text\" class=\"form-control\" placeholder=\"Default branch\" @value={{this.branch}}\n                           data-parsley-required=\"true\" data-parsley-minlength=\"1\" data-parsley-maxlength=\"255\"\n                           data-parsley-required-message=\"Default branch is required.\"\n                           data-parsley-minlength-message=\"Default branch must be at least 1 character.\"\n                           data-parsley-maxlength-message=\"Default branch cannot be longer than 255 characters.\"\n                      {{on \"change\" this.updateBranch}} />\n                  </div>\n                  <div class=\"form-group\">\n                    <label>Authentication\n                      <Ui::InfoIcon\n                              @content=\"Method of authentication with the version control repository\"/>\n                    </label>\n                    <div>\n                      <BsButtonGroup @value={{this.vcsAuthType}} @type=\"radio\" @onChange={{this.authTypeChanged}} as\n                                     |bg|>\n                        <bg.button @type=\"primary\" @value=\"None\" @size=\"sm\">Anonymous</bg.button>\n                        <bg.button @type=\"primary\" @value=\"Username\" @size=\"sm\">\n                          Username\n                        </bg.button>\n                        <bg.button @type=\"primary\" @value=\"PrivateKey\" @size=\"sm\">SSH</bg.button>\n                      </BsButtonGroup>\n                    </div>\n                  </div>\n                  {{#if (eq this.vcsAuthType 'Username')}}\n                    <div class=\"form-group\">\n                      <label>Username\n                        <Ui::InfoIcon @content=\"Username to authenticate with\"/>\n                      </label>\n                      <Input @type=\"text\" class=\"form-control\" placeholder=\"Username\" @value={{this.username}}\n                             data-parsley-required=\"true\" data-parsley-minlength=\"1\" data-parsley-maxlength=\"255\"\n                             data-parsley-required-message=\"Username is required.\"\n                             data-parsley-minlength-message=\"Username must be at least 1 character.\"\n                             data-parsley-maxlength-message=\"Username cannot be longer than 255 characters.\"\n                        {{on \"change\" this.updateUsername}} />\n                    </div>\n                    <div class=\"form-group\">\n                      <label>Password / Access Token\n                        <Ui::InfoIcon @content=\"Password / Access Token to authenticate with\"/>\n                      </label>\n                      <Ui::PasswordInput placeholder=\"Password / Access Token\"\n                             @value={{this.password}}\n                             data-parsley-required=\"true\" data-parsley-minlength=\"1\" data-parsley-maxlength=\"255\"\n                             data-parsley-required-message=\"Password / Token is required.\"\n                             data-parsley-minlength-message=\"Password / Token must be at least 1 character.\"\n                             data-parsley-maxlength-message=\"Password / Token cannot be longer than 255 characters.\"\n                        {{on \"change\" this.updatePassword}} />\n                    </div>\n                  {{else if (eq this.vcsAuthType 'PrivateKey')}}\n                    {{#if this.privateKeyName}}\n                      <div class=\"form-group\">\n                        <label>Private Key Name\n                          <Ui::InfoIcon\n                                  @content=\"Name of private key file uploaded for SSH authentication with repository\"/>\n                        </label>\n                        {{this.privateKeyName}}\n                      </div>\n                    {{/if}}\n                    <div class=\"form-group\">\n                      <label>Private Key\n                        <Ui::InfoIcon\n                                @content=\"Private key to use SSH authentication with repository\"/>\n                      </label>\n                      {{#if @vcsRoot}}\n                        <input onchange={{this.uploadPrivateKey}} type=\"file\"/>\n                      {{else}}\n                        <input onchange={{this.uploadPrivateKey}} type=\"file\" data-parsley-required=\"true\"\n                               data-parsley-required-message=\"Private key file is required.\"/>\n                      {{/if}}\n                    </div>\n                  {{/if}}\n                </fieldset>\n                <div class=\"form-group\">\n                  <button type=\"button\" {{on \"click\" this.createOrUpdateVcsRoot}} disabled={{this.submitInProgress}}\n                          class=\"btn btn-sm btn-primary\">\n                    <strong>\n                      {{if this.submitInProgress 'Processing...' this.submitText}}\n                    </strong></button>\n                  <button type=\"button\" {{on \"click\" this.testConnection}} disabled={{or this.submitInProgress\n                                                                              this.validateInProgress}}\n                          class=\"btn btn-sm btn-primary\"><strong>\n                    Test Connection\n                  </strong></button>\n                  <button {{on \"click\" this.hideModal}} type=\"button\" class=\"btn btn-sm btn-white\"><strong>Cancel</strong>\n                  </button>\n                </div>\n              </form>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal container fade\\\"],[24,1,\\\"vcsRootModal\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,[52,[30,1],\\\"Update\\\",\\\"Create\\\"]],[1,\\\" Version Control Root\\\"],[13],[1,\\\"\\\\n        \\\"],[11,\\\"button\\\"],[24,0,\\\"close\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"hideModal\\\"]]],null],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"form\\\"],[24,1,\\\"vcsRootForm\\\"],[24,0,\\\"form-horizontal\\\"],[24,\\\"data-parsley-trigger\\\",\\\"focusout\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"createOrUpdateVcsRoot\\\"]]],null],[12],[1,\\\"\\\\n              \\\"],[10,\\\"fieldset\\\"],[15,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Type\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Type of version control system to connect with.\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,10],null,[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"vcsTypes\\\"]],[30,0,[\\\"vcsType\\\"]],\\\"Please select VCS type ...\\\",[30,0,[\\\"updateVcsTypes\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,2]],[1,\\\"\\\\n                  \\\"]],[2]]]]],[1,\\\"\\\\n\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Url\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Type of version control system to connect with.\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Url\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Url is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Url must be at least 1 character.\\\"],[4,[38,5],[\\\"change\\\",[30,0,[\\\"updateUrl\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"url\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Default Branch\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Which branch or tag to clone by default. Example: master\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Default branch\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Default branch is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Default branch must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Default branch cannot be longer than 255 characters.\\\"],[4,[38,5],[\\\"change\\\",[30,0,[\\\"updateBranch\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"branch\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"label\\\"],[12],[1,\\\"Authentication\\\\n                    \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Method of authentication with the version control repository\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[12],[1,\\\"\\\\n                    \\\"],[8,[39,12],null,[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"vcsAuthType\\\"]],\\\"radio\\\",[30,0,[\\\"authTypeChanged\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"None\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"Anonymous\\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"Username\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                        Username\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                      \\\"],[8,[30,3,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"primary\\\",\\\"PrivateKey\\\",\\\"sm\\\"]],[[\\\"default\\\"],[[[[1,\\\"SSH\\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[3]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,13],[[30,0,[\\\"vcsAuthType\\\"]],\\\"Username\\\"],null],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Username\\\\n                      \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Username to authenticate with\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,11],[[24,0,\\\"form-control\\\"],[24,\\\"placeholder\\\",\\\"Username\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Username is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Username must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Username cannot be longer than 255 characters.\\\"],[4,[38,5],[\\\"change\\\",[30,0,[\\\"updateUsername\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"username\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Password / Access Token\\\\n                      \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Password / Access Token to authenticate with\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[8,[39,14],[[24,\\\"placeholder\\\",\\\"Password / Access Token\\\"],[24,\\\"data-parsley-required\\\",\\\"true\\\"],[24,\\\"data-parsley-minlength\\\",\\\"1\\\"],[24,\\\"data-parsley-maxlength\\\",\\\"255\\\"],[24,\\\"data-parsley-required-message\\\",\\\"Password / Token is required.\\\"],[24,\\\"data-parsley-minlength-message\\\",\\\"Password / Token must be at least 1 character.\\\"],[24,\\\"data-parsley-maxlength-message\\\",\\\"Password / Token cannot be longer than 255 characters.\\\"],[4,[38,5],[\\\"change\\\",[30,0,[\\\"updatePassword\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"password\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,13],[[30,0,[\\\"vcsAuthType\\\"]],\\\"PrivateKey\\\"],null],[[[41,[30,0,[\\\"privateKeyName\\\"]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"label\\\"],[12],[1,\\\"Private Key Name\\\\n                        \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Name of private key file uploaded for SSH authentication with repository\\\"]],null],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[1,[30,0,[\\\"privateKeyName\\\"]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"label\\\"],[12],[1,\\\"Private Key\\\\n                      \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Private key to use SSH authentication with repository\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"                      \\\"],[10,\\\"input\\\"],[15,\\\"onchange\\\",[30,0,[\\\"uploadPrivateKey\\\"]]],[14,4,\\\"file\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,\\\"input\\\"],[15,\\\"onchange\\\",[30,0,[\\\"uploadPrivateKey\\\"]]],[14,\\\"data-parsley-required\\\",\\\"true\\\"],[14,\\\"data-parsley-required-message\\\",\\\"Private key file is required.\\\"],[14,4,\\\"file\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"]],[]],null]],[]]],[1,\\\"              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"form-group\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"submitInProgress\\\"]]],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"createOrUpdateVcsRoot\\\"]]],null],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[52,[30,0,[\\\"submitInProgress\\\"]],\\\"Processing...\\\",[30,0,[\\\"submitText\\\"]]]],[1,\\\"\\\\n                  \\\"],[13],[13],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[28,[37,16],[[30,0,[\\\"submitInProgress\\\"]],[30,0,[\\\"validateInProgress\\\"]]],null]],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"testConnection\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                  Test Connection\\\\n                \\\"],[13],[13],[1,\\\"\\\\n                \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-white\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"hideModal\\\"]]],null],[12],[10,\\\"strong\\\"],[12],[1,\\\"Cancel\\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@vcsRoot\\\",\\\"vcs\\\",\\\"bg\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"form\\\",\\\"fieldset\\\",\\\"label\\\",\\\"ui/info-icon\\\",\\\"ui/p-select\\\",\\\"input\\\",\\\"bs-button-group\\\",\\\"eq\\\",\\\"ui/password-input\\\",\\\"strong\\\",\\\"or\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/vcs-root-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let VcsRootModalComponent = _exports.default = (_class = class VcsRootModalComponent extends _component2.default {\n    get submitText() {\n      return this.args.vcsRoot ? 'Update' : 'Create';\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"vcsTypes\", _descriptor2, this);\n      _initializerDefineProperty(this, \"vcsType\", _descriptor3, this);\n      _initializerDefineProperty(this, \"privateKey\", _descriptor4, this);\n      _initializerDefineProperty(this, \"privateKeyName\", _descriptor5, this);\n      _initializerDefineProperty(this, \"password\", _descriptor6, this);\n      _initializerDefineProperty(this, \"username\", _descriptor7, this);\n      _initializerDefineProperty(this, \"branch\", _descriptor8, this);\n      _initializerDefineProperty(this, \"vcsAuthType\", _descriptor9, this);\n      _initializerDefineProperty(this, \"url\", _descriptor0, this);\n      _initializerDefineProperty(this, \"submitInProgress\", _descriptor1, this);\n      let vcsRoot = this.args.vcsRoot;\n      if (vcsRoot) {\n        this.vcsAuthType = vcsRoot.vcsAuthType;\n        this.url = vcsRoot.url;\n        this.branch = vcsRoot.branch;\n        this.vcsType = vcsRoot.vcsType;\n        if (vcsRoot.vcsAuthType === 'Username') {\n          this.username = vcsRoot.username;\n          this.password = vcsRoot.password;\n        } else if (vcsRoot.vcsAuthType === 'PrivateKey') {\n          this.privateKeyName = vcsRoot.privateKeyName;\n        }\n      } else {\n        this.vcsAuthType = 'None';\n        this.vcsType = 'Git';\n        this.branch = 'main';\n      }\n    }\n    didInsert() {\n      let _this = this;\n      $('#vcsRootModal').on('hidden.bs.modal', function () {\n        if (typeof _this.args.modalClosed === 'function') {\n          _this.args.modalClosed();\n        }\n      });\n      $('#vcsRootModal').modal({\n        backdrop: 'static'\n      });\n      $('#vcsRootModal').modal('show');\n      $('#vcsRootForm').parsley();\n    }\n    toDetails() {\n      let details = {\n        vcsAuthType: this.vcsAuthType,\n        vcsType: this.vcsType,\n        url: this.url,\n        branch: this.branch\n      };\n      if (details.vcsAuthType === 'Username') {\n        details.username = this.username;\n        details.password = this.password;\n      } else if (details.vcsAuthType === 'PrivateKey') {\n        details.privateKeyName = this.privateKeyName;\n        details.privateKey = this.privateKey;\n      }\n      return details;\n    }\n    createOrUpdateVcsRoot() {\n      if ($('#vcsRootForm').parsley().validate()) {\n        let details = this.toDetails();\n        this.submitInProgress = true;\n        if (this.args.vcsRoot) {\n          this.api.vcs.updateRoot(this.args.vcsRoot.id, details).then(result => {\n            if (typeof this.args.vcsRootUpdated === 'function') {\n              this.args.vcsRootUpdated(result);\n            }\n            $('#vcsRootModal').modal('hide');\n            this.submitInProgress = false;\n          }, () => {\n            this.submitInProgress = false;\n          });\n        } else {\n          this.api.vcs.createRoot(_environment.config.currentUser.orgId, details).then(result => {\n            if (typeof this.args.vcsRootUpdated === 'function') {\n              this.args.vcsRootUpdated(result);\n            }\n            $('#vcsRootModal').modal('hide');\n            this.submitInProgress = false;\n          }, () => {\n            this.submitInProgress = false;\n          });\n        }\n      }\n    }\n    testConnection() {\n      if ($('#vcsRootForm').parsley().validate()) {\n        let details = this.toDetails();\n        this.validateInProgress = true;\n        this.api.vcs.getRefs(details, this.args.vcsRoot?.id).then(result => {\n          _lib.default.info('Connection made successfully!', 'Success');\n          this.validateInProgress = false;\n        }, () => {\n          this.validateInProgress = false;\n        });\n      }\n    }\n    authTypeChanged(newValue) {\n      this.vcsAuthType = newValue;\n    }\n    updateUrl(value) {\n      this.url = value.target.value;\n    }\n    updateBranch(value) {\n      this.branch = value.target.value;\n    }\n    updateUsername(value) {\n      this.username = value.target.value;\n    }\n    updatePassword(value) {\n      this.password = value.target.value;\n    }\n    uploadPrivateKey(event) {\n      let input = event.target;\n      let reader = new FileReader();\n      reader.onload = () => {\n        let text = reader.result;\n        this.privateKey = _jsBase.Base64.encode(text);\n      };\n      reader.readAsText(input.files[0]);\n      this.privateKeyName = input.files[0].name;\n    }\n    hideModal() {\n      $('#vcsRootModal').modal('hide');\n    }\n    updateVcsTypes(type) {\n      this.vcsType = type;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"vcsTypes\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['Git'];\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"vcsType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"privateKey\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"privateKeyName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"password\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"username\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"branch\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"vcsAuthType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"url\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"submitInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createOrUpdateVcsRoot\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createOrUpdateVcsRoot\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testConnection\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testConnection\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"authTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"authTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUrl\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUrl\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBranch\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBranch\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUsername\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUsername\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updatePassword\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePassword\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uploadPrivateKey\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"uploadPrivateKey\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hideModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hideModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateVcsTypes\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateVcsTypes\"), _class.prototype), _class);\n  ;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VcsRootModalComponent);\n});","define(\"@testable/shared-ui/components/vcs-roots-grid\", [\"exports\", \"@glimmer/tracking\", \"@ember/object/observers\", \"@testable/shared-ui/components/data-grid\"], function (_exports, _tracking, _observers, _dataGrid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/components/data-grid\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let VcsRootsGrid = _exports.default = (_class = class VcsRootsGrid extends _dataGrid.default {\n    constructor(owner, args) {\n      super(owner, args);\n      _initializerDefineProperty(this, \"noPadding\", _descriptor, this);\n      (0, _observers.addObserver)(this, 'args.data.[]', this.observeData);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      (0, _observers.removeObserver)(this, 'args.data.[]', this.observeData);\n    }\n    observeData() {\n      this.refreshTable();\n    }\n    addTableOptions(options) {\n      options.scrollY = \"470px\";\n      options.select = {\n        style: 'single'\n      };\n      options.language = {\n        emptyTable: \"No version control roots yet.\"\n      };\n    }\n    getColumns() {\n      return [{\n        title: 'Type',\n        data: 'vcsType',\n        width: '15px',\n        render: (data, type, full, meta) => {\n          return type === 'display' ? '<span class=\"label label-primary\">' + data + '</span>' : data;\n        }\n      }, {\n        title: 'Url',\n        data: 'url',\n        width: '150px'\n      }, {\n        title: 'Default Branch',\n        data: 'branch',\n        width: '50px'\n      }, {\n        title: 'Auth Type',\n        data: 'vcsAuthType',\n        width: '30px'\n      }];\n    }\n    getInitialOrder(columns) {\n      return [[1, 'asc']];\n    }\n    createDataSource() {\n      return this.args.data;\n    }\n    initTable(table) {\n      this.args.vcsRootSelected(null);\n      const _this = this;\n      table.on('select', function (e, dt, type, indexes) {\n        let rowData = table.row(indexes[0]).data();\n        _this.args.vcsRootSelected(rowData);\n      }).on('deselect', function (e, dt, type, indexes) {\n        _this.args.vcsRootSelected(null);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"noPadding\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/components/vcs-roots\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _lib, _environment, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#unless this.isViewer}}\n  <div class=\"btn-group pull-right m-l-10\">\n    {{#if this.selectedVcsRoot}}\n      <button {{on \"click\" this.testConnection}} type=\"button\" class=\"btn btn-primary\"><Ui::Icon @icon=\"fa fa-check\" />\n        Test Connection\n      </button>\n    {{else}}\n      <button {{on \"click\" (fn this.showVcsModalFunc false)}} type=\"button\" class=\"btn btn-primary\"><Ui::Icon @icon=\"fa fa-plus\" /> New\n        Version Control Root\n      </button>\n    {{/if}}\n    <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-bs-toggle=\"dropdown\">\n      <span class=\"sr-only\">Toggle Dropdown</span>\n    </button>\n    <ul class=\"dropdown-menu dropdown-menu-end\" role=\"menu\">\n      <li>\n        <a {{on \"click\" (fn this.showVcsModalFunc false)}} role=\"button\"><Ui::Icon @icon=\"fa fa-plus\" /> New Version Control Root</a>\n      </li>\n      <li class=\"{{unless this.selectedVcsRoot 'disabled'}}\">\n        {{#if this.selectedVcsRoot}}\n          <a {{on \"click\" this.testConnection}} role=\"button\"><Ui::Icon @icon=\"fa fa-check\" /> Test Connection</a>\n        {{else}}\n          <a><Ui::Icon @icon=\"fa fa-check\" /> Test Connection</a>\n        {{/if}}\n      </li>\n      <li class=\"{{unless this.selectedVcsRoot 'disabled'}}\">\n        {{#if this.selectedVcsRoot}}\n          <a {{on \"click\" (fn this.showVcsModalFunc true)}} role=\"button\"><Ui::Icon @icon=\"fa fa-edit\" /> Edit</a>\n        {{else}}\n          <a><Ui::Icon @icon=\"fa fa-edit\" /> Edit</a>\n        {{/if}}\n      </li>\n      <li class=\"{{unless this.selectedVcsRoot 'disabled'}}\">\n        {{#if this.selectedVcsRoot}}\n          <a {{on \"click\" this.deleteConnection}} role=\"button\"><Ui::Icon @icon=\"fa fa-trash\" /> Delete</a>\n        {{else}}\n          <a><Ui::Icon @icon=\"fa fa-trash\" /> Delete</a>\n        {{/if}}\n      </li>\n    </ul>\n  </div>\n  {{/unless}}\n  \n  <h1 class=\"page-header m-b-10 m-t-10\">Version Control\n    <Ui::InfoIcon @isHtml={{true}}\n         @content=\"Create and manage the version control roots that are used when defining certain types of test cases. See the <strong>Documentation</strong> for more details.\"\n         @placement=\"bottom\" /></h1>\n  <div class=\"panel\">\n    <div class=\"panel-body\">\n      {{#if this.vcsRoots}}\n        <div class=\"row\">\n          <div class=\"col-md-12 col-sm-12 col-xs-12\">\n            <VcsRootsGrid @id=\"vcsRootsGrid\" @data={{this.vcsRoots}} @vcsRootSelected={{this.vcsRootSelected}} />\n          </div>\n        </div>\n      {{else}}\n        {{#if this.loading}}\n          Loading ...\n        {{else}}\n          No version control roots yet!\n        {{/if}}\n      {{/if}}\n    </div>\n  </div>\n  \n  {{#if this.showVcsModal}}\n    <VcsRootModal @vcsRoot={{if this.editMode this.selectedVcsRoot}}\n                  @vcsRootUpdated={{this.vcsRootsChanged}}\n                  @modalClosed={{this.vcsRootModalClosed}} />\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[51,[30,0,[\\\"isViewer\\\"]]],[[[10,0],[14,0,\\\"btn-group pull-right m-l-10\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedVcsRoot\\\"]],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"testConnection\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[1,\\\"\\\\n      Test Connection\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"showVcsModalFunc\\\"]],false],null]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" New\\\\n      Version Control Root\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-primary dropdown-toggle\\\"],[14,\\\"data-bs-toggle\\\",\\\"dropdown\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Toggle Dropdown\\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"dropdown-menu dropdown-menu-end\\\"],[14,\\\"role\\\",\\\"menu\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n      \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"showVcsModalFunc\\\"]],false],null]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-plus\\\"]],null],[1,\\\" New Version Control Root\\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[51,[30,0,[\\\"selectedVcsRoot\\\"]]],\\\"disabled\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedVcsRoot\\\"]],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"testConnection\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[1,\\\" Test Connection\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,3],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-check\\\"]],null],[1,\\\" Test Connection\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[51,[30,0,[\\\"selectedVcsRoot\\\"]]],\\\"disabled\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedVcsRoot\\\"]],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"showVcsModalFunc\\\"]],true],null]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,3],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-edit\\\"]],null],[1,\\\" Edit\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[15,0,[29,[[52,[51,[30,0,[\\\"selectedVcsRoot\\\"]]],\\\"disabled\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedVcsRoot\\\"]],[[[1,\\\"        \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"deleteConnection\\\"]]],null],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,3],[12],[8,[39,5],null,[[\\\"@icon\\\"],[\\\"fa fa-trash\\\"]],null],[1,\\\" Delete\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,\\\"h1\\\"],[14,0,\\\"page-header m-b-10 m-t-10\\\"],[12],[1,\\\"Version Control\\\\n  \\\"],[8,[39,12],null,[[\\\"@isHtml\\\",\\\"@content\\\",\\\"@placement\\\"],[true,\\\"Create and manage the version control roots that are used when defining certain types of test cases. See the <strong>Documentation</strong> for more details.\\\",\\\"bottom\\\"]],null],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"vcsRoots\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-12 col-sm-12 col-xs-12\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,13],null,[[\\\"@id\\\",\\\"@data\\\",\\\"@vcsRootSelected\\\"],[\\\"vcsRootsGrid\\\",[30,0,[\\\"vcsRoots\\\"]],[30,0,[\\\"vcsRootSelected\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"        Loading ...\\\\n\\\"]],[]],[[[1,\\\"        No version control roots yet!\\\\n\\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showVcsModal\\\"]],[[[1,\\\"  \\\"],[8,[39,14],null,[[\\\"@vcsRoot\\\",\\\"@vcsRootUpdated\\\",\\\"@modalClosed\\\"],[[52,[30,0,[\\\"editMode\\\"]],[30,0,[\\\"selectedVcsRoot\\\"]]],[30,0,[\\\"vcsRootsChanged\\\"]],[30,0,[\\\"vcsRootModalClosed\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[],[\\\"unless\\\",\\\"div\\\",\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"fn\\\",\\\"span\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"h1\\\",\\\"ui/info-icon\\\",\\\"vcs-roots-grid\\\",\\\"vcs-root-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/vcs-roots.hbs\",\n    \"isStrictMode\": false\n  });\n  let VcsRootsComponent = _exports.default = (_class = class VcsRootsComponent extends _component2.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"showVcsModal\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedVcsRoot\", _descriptor3, this);\n      _initializerDefineProperty(this, \"vcsRoots\", _descriptor4, this);\n      _initializerDefineProperty(this, \"modalClosed\", _descriptor5, this);\n      _initializerDefineProperty(this, \"loading\", _descriptor6, this);\n      _initializerDefineProperty(this, \"editMode\", _descriptor7, this);\n      this.showVcsModal = false;\n      this.loading = false;\n      this.selectedVcsRoot = null;\n      this.vcsRoots = [];\n      this.vcsRootsChanged();\n    }\n    get isViewer() {\n      return _environment.config.currentUser?.isViewer;\n    }\n    showVcsModalFunc(editMode) {\n      this.editMode = editMode;\n      this.showVcsModal = true;\n    }\n    vcsRootModalClosed() {\n      this.showVcsModal = false;\n      if (typeof this.args.modalClosed === \"function\") {\n        this.args.modalClosed(this.vcsRoots);\n      }\n    }\n    vcsRootSelected(vcsRoot) {\n      this.selectedVcsRoot = vcsRoot;\n    }\n    deleteConnection() {\n      if (this.selectedVcsRoot) {\n        const {\n          id,\n          url\n        } = this.selectedVcsRoot;\n        _lib.default.confirm('Are you sure you want to delete <strong>' + url + '</strong>?', 'OK', () => {\n          this.api.vcs.deleteRoot(id).then(() => {\n            _lib.default.info('Version control root <strong>' + url + '</strong> deleted successfully');\n            this.vcsRootsChanged();\n          });\n        }, 'Cancel', () => {}, 'Delete Version Control Root');\n      }\n    }\n    testConnection() {\n      if (this.selectedVcsRoot) {\n        this.api.vcs.getRefs(this.selectedVcsRoot, this.selectedVcsRoot.id).then(result => {\n          _lib.default.info('Connection made successfully!', 'Success');\n        });\n      }\n    }\n    vcsRootsChanged() {\n      this.loading = true;\n      this.api.vcs.getRoots(_environment.config.currentUser.orgId, true).then(vcsRoots => {\n        this.vcsRoots = vcsRoots;\n        this.loading = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showVcsModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedVcsRoot\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"vcsRoots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"modalClosed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"loading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"editMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showVcsModalFunc\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showVcsModalFunc\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vcsRootModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vcsRootModalClosed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vcsRootSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vcsRootSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteConnection\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteConnection\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testConnection\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"testConnection\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"vcsRootsChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"vcsRootsChanged\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VcsRootsComponent);\n});","define(\"@testable/shared-ui/components/video-details-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal fade\" id=\"videoDetailsModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\" {{did-insert\n          this.didInsert}}>\n    <div class=\"modal-large-dialog modal-dialog\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\">\n          <h4 class=\"modal-title\">Video Related Results</h4>\n          <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">&times;</button>\n        </div>\n        <div class=\"modal-body\">\n          <div class=\"tab-content p-0\">\n            {{#if (and @video.iterationId @overallModel.completed)}}\n              <IterationResults @overallModel={{@overallModel}}\n                                @iteration={{@video.iterationId}}\n                                @selectedSession={{@video.sessionNum}}\n                                @isInModal={{true}}\n                                @isVideo={{true}}\n                                @regionName=\"imageDetails\"\n                                @showImageDetailsModal={{@showImageDetailsModal}}\n                                @containerModalId=\"videoDetailsModal\"\n              />\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal fade\\\"],[24,1,\\\"videoDetailsModal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"modal-large-dialog modal-dialog\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Video Related Results\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"button\\\"],[14,0,\\\"close\\\"],[14,\\\"data-bs-dismiss\\\",\\\"modal\\\"],[14,\\\"aria-label\\\",\\\"Close\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"tab-content p-0\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,5],[[30,1,[\\\"iterationId\\\"]],[30,2,[\\\"completed\\\"]]],null],[[[1,\\\"            \\\"],[8,[39,6],null,[[\\\"@overallModel\\\",\\\"@iteration\\\",\\\"@selectedSession\\\",\\\"@isInModal\\\",\\\"@isVideo\\\",\\\"@regionName\\\",\\\"@showImageDetailsModal\\\",\\\"@containerModalId\\\"],[[30,2],[30,1,[\\\"iterationId\\\"]],[30,1,[\\\"sessionNum\\\"]],true,true,\\\"imageDetails\\\",[30,3],\\\"videoDetailsModal\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@video\\\",\\\"@overallModel\\\",\\\"@showImageDetailsModal\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"if\\\",\\\"and\\\",\\\"iteration-results\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/video-details-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let VideoDetailsModalComponent = _exports.default = (_class = class VideoDetailsModalComponent extends _component2.default {\n    didInsert() {\n      let _this = this;\n      $('#videoDetailsModal').on('hidden.bs.modal', function () {\n        _this.args.modalClosed();\n      });\n      $('#videoDetailsModal').modal('show');\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideoDetailsModalComponent);\n});","define(\"@testable/shared-ui/components/video-info-view\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@testable/shared-ui/utils/load-test\", \"@ember/template-factory\"], function (_exports, _component, _component2, _loadTest, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/load-test\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"row\">\n    <div class=\" col-md-4 \">\n      <div class=\"row\">\n        <div class=\"col-sm-4\"><b>Captured At</b></div>\n        <div class=\"col-sm-8\">{{print-datetime @video.createdAt}}</div>\n      </div>\n    </div>\n    <div class=\" col-md-4 \">\n      <div class=\"row\">\n        <div class=\"col-md-4\"><b>Region</b></div>\n        <div class=\"col-md-8\">{{or (print-region-info this.executionRegion.region) 'N/A'}}</div>\n      </div>\n    </div>\n    {{#if @video.browser}}\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Browser</b></div>\n          <div class=\"col-md-8\">{{print-browser @video.browser}}</div>\n        </div>\n      </div>\n    {{/if}}\n    {{#if @video.device}}\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Device</b></div>\n          <div class=\"col-md-8\">{{print-device @video.device}}</div>\n        </div>\n      </div>\n    {{/if}}\n    <div class=\" col-md-4 \">\n      <div class=\"row\">\n        <div class=\"col-md-4\"><b>Duration</b></div>\n        <div class=\"col-md-8\">{{print-time-from-ms @video.duration}}</div>\n      </div>\n    </div>\n    {{#if @video.sessionNum}}\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Session #</b></div>\n          <div class=\"col-md-8\">{{@video.sessionNum}}</div>\n        </div>\n      </div>\n    {{/if}}\n    {{#unless @minimal}}\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Test Runner</b></div>\n          <div class=\"col-md-8\">{{this.agent}}</div>\n        </div>\n      </div>\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>{{if (is-multi-user @model.script.scriptType) 'Instance #' 'User #'}}</b></div>\n          <div class=\"col-md-8\">{{or (print-number @video.globalConcurrentClientIndex) 'N/A'}}</div>\n        </div>\n      </div>\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Iteration #</b></div>\n          <div class=\"col-md-8\">{{or (print-number @video.iteration) 'N/A'}}</div>\n        </div>\n      </div>\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Thread ID</b></div>\n          <div class=\"col-md-8\">{{or @video.threadId 'N/A'}}</div>\n        </div>\n      </div>\n      <div class=\" col-md-4 \">\n        <div class=\"row\">\n          <div class=\"col-md-4\"><b>Iteration ID</b></div>\n          <div class=\"col-md-8\">{{or @video.iterationId 'N/A'}}</div>\n        </div>\n      </div>\n    {{/unless}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-sm-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Captured At\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-sm-8\\\"],[12],[1,[28,[35,2],[[30,1,[\\\"createdAt\\\"]]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Region\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,3],[[28,[37,4],[[30,0,[\\\"executionRegion\\\",\\\"region\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"browser\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Browser\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,6],[[30,1,[\\\"browser\\\"]]],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"device\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Device\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,7],[[30,1,[\\\"device\\\"]]],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Duration\\\"],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,8],[[30,1,[\\\"duration\\\"]]],null]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"sessionNum\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Session #\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[30,1,[\\\"sessionNum\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[51,[30,2]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Test Runner\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[30,0,[\\\"agent\\\"]]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,[52,[28,[37,10],[[30,3,[\\\"script\\\",\\\"scriptType\\\"]]],null],\\\"Instance #\\\",\\\"User #\\\"]],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,3],[[28,[37,11],[[30,1,[\\\"globalConcurrentClientIndex\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Iteration #\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,3],[[28,[37,11],[[30,1,[\\\"iteration\\\"]]],null],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Thread ID\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,3],[[30,1,[\\\"threadId\\\"]],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\" col-md-4 \\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[10,\\\"b\\\"],[12],[1,\\\"Iteration ID\\\"],[13],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,[28,[35,3],[[30,1,[\\\"iterationId\\\"]],\\\"N/A\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@video\\\",\\\"@minimal\\\",\\\"@model\\\"],[\\\"div\\\",\\\"b\\\",\\\"print-datetime\\\",\\\"or\\\",\\\"print-region-info\\\",\\\"if\\\",\\\"print-browser\\\",\\\"print-device\\\",\\\"print-time-from-ms\\\",\\\"unless\\\",\\\"is-multi-user\\\",\\\"print-number\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/video-info-view.hbs\",\n    \"isStrictMode\": false\n  });\n  class VideoInfoViewComponent extends _component2.default {\n    get executionRegion() {\n      const executionRegionId = this.args.video.executionRegionId;\n      return _.find(this.args.model.regions, r => {\n        return r.id === executionRegionId;\n      });\n    }\n    get agents() {\n      return _loadTest.default.getAgentsForRegion(this.args.model.agents);\n    }\n    get agent() {\n      const agentId = this.args.video.agentId;\n      let agent;\n      if (agentId) {\n        agent = _.find(this.agents, agent => {\n          return agent.id === agentId;\n        });\n      }\n      return agent ? agent.name : '-';\n    }\n  }\n  _exports.default = VideoInfoViewComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideoInfoViewComponent);\n});","define(\"@testable/shared-ui/components/videos-widget-detail\", [\"exports\", \"@ember/component\", \"ember-concurrency/async-arrow-runtime\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"ember-uuid\", \"@ember/runloop\", \"tracked-built-ins\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _asyncArrowRuntime, _object, _component2, _tracking, _service, _emberUuid, _runloop, _trackedBuiltIns, _loadTest, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24;\n  0; //eaimeta@70e063a35619d71f0,\"ember-concurrency/async-arrow-runtime\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"ember-uuid\",0,\"@ember/runloop\",0,\"ember-concurrency\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span hidden\n    {{did-insert this.onInsert}}\n    {{will-destroy this.onDestroy}}\n    {{did-update this.onVideoReloadChange this.zoomInfo.isAll this.zoomInfo.startTimestamp this.zoomInfo.endTimestamp this.selectedSessionNum this.errorsOnly @model}}\n    {{did-update this.onVideoSelectedChange this.videoSelected}}\n    {{did-update this.onSessionsListChange @sessionsList}}\n    {{did-update this.onViewLayoutChange this.viewLayout this.isLoaded}}\n    {{did-update this.onExecutionIdChange @overallModel.id}}\n  ></span>\n  {{#if @isComparison}}\n    <div class=\"heading {{if this.hasSingleVideo \"float-left\"}}\"><strong>{{@title}}</strong></div>\n    {{#if (gt this.videos.length 0) }}\n      <div class=\"mb-1\">\n        <VideosWidgetFilters\n                @hasSingleVideo={{this.hasSingleVideo}}\n                @overallModel={{@overallModel}}\n                @liveView={{@liveView}}\n                @viewLayout={{this.viewLayout}}\n                @errorsOnly={{this.errorsOnly}}\n                @videoCount={{this.videoCount}}\n                @errorCount={{this.errorCount}}\n                @isLoaded={{this.isLoaded}}\n                @receivedRtUpdate={{this.receivedRtUpdate}}\n                @isComparison={{@isComparison}}\n                @filtersExpanded={{this.filtersExpanded}}\n                @hasFilter={{this.hasFilter}}\n                @search={{this.search}}\n                @sessionsList={{@sessionsList}}\n                @selectedSession={{this.selectedSession}}\n                @onChangeSession={{this.onChangeSession}}\n                @filtersExpand={{this.filtersExpand}}\n        />\n      </div>\n    {{/if}}\n  {{/if}}\n  \n  {{#if (and this.supportsInteractiveSessions (eq @liveView 'interactive'))}}\n    <ExecutionLiveSession @executionId={{@overallModel.id}}\n                          @uuid={{@overallModel.uuid}}\n                          @concurrentClients={{@overallModel.concurrentClients}}\n                          @running={{@overallModel.running}}\n                          @startedAt={{@overallModel.startedAt}}\n                          @allocatingInfra={{@overallModel.allocatingInfra}}\n                          @isLoad={{@isLoad}}\n                          @sessionsList={{@sessionsList}}\n                          @isPublic={{@isPublic}}\n    />\n  {{else}}\n    <div class=\"{{if (or this.hasSingleVideo this.videoSelected) 'hide'}}\">\n      <div class=\" m-b-20 no-print {{if (and this.showFilterPanel (or this.hasFilter (gt this.videos.length 0))) '' 'hidden'}} no-print\">\n        {{#unless @isComparison}}\n          <button type=\"button\" class=\"btn btn-sm btn-success {{if this.filtersExpanded 'm-b-10'}}\" {{on \"click\" this.filtersExpand}}>\n            <Ui::Icon @icon=\"fa fa-filter\" /> Filters {{if this.hasFilter (concat '(' this.hasFilter ')')}}\n            {{if this.search (concat ' - Search Term: \"' this.search '\"')}}\n            {{#if this.filtersExpanded}}\n              <Ui::Icon @icon=\"fa fa-angle-up\" />\n            {{else}}\n              <Ui::Icon @icon=\"fa fa-angle-down\" />\n            {{/if}}\n          </button>\n        {{/unless}}\n  \n        <div class=\"row slow-animate {{if this.filtersExpanded '' 'fadeAnimate height-0 p-t-0 p-b-0'}}\">\n          <FilterFields @model={{@overallModel}}\n                        @iterationsExecuted={{@model.summary.iterationsExecuted}}\n                        @concurrentClients={{@overallModel.concurrentClients}}\n                        @executedIterationsPerClient={{@model.summary.executedIterationsPerClient}}\n                        @browsers={{@overallModel.browsers}}\n                        @scriptBinary={{@overallModel.script.metadata.binary}}\n                        @scriptType={{@overallModel.script.scriptType}}\n                        @byRegionId={{@byRegionId}}\n                        @showRegionFilter={{gt this.regionCount 2}}\n                        @showTestRunnerFilter={{gt @model.agents.length 1}}\n                        @isLoad={{@isLoad}}\n                        @isVertical={{true}}\n                        @isMultiUser={{this.isMultiUser}}\n                        @region={{this.region}}\n                        @user={{this.user}}\n                        @iteration={{this.iteration}}\n                        @filesSessions={{this.filesSessions}}\n                        @updateSession={{this.updateSession}}\n                        @updateRegion={{this.updateRegion}}\n                        @updateAgent={{this.updateAgent}}\n                        @updateUser={{this.updateUser}}\n                        @updateIteration={{this.updateIteration}}\n                        @updateBrowser={{this.updateBrowser}}\n          />\n          <div class=\"col-sm-4 col-md-3 m-b-10\">\n            <div class=\"f-w-700 m-b-5\">Search</div>\n            <div class=\"input-group\">\n              <span class=\"input-group-prepend\"><Ui::Icon @icon=\"fa fa-search\" class=\"input-group-text\" /></span>\n              <Input @type=\"text\" @value={{this.search}} placeholder=\"Search...\" class=\"form-control\"/>\n            </div>\n          </div>\n        </div>\n      </div>\n  \n      {{#if this.isLoaded}}\n  \n        {{#if (gt this.videos.length 0)}}\n          {{#if (gt this.videoCount this.videos.length)}}\n            <div class=\"m-b-10\">(Most recent 100 videos shown)</div>\n          {{/if}}\n  \n          {{#if (or (eq this.viewLayout 'grid') (eq @viewLayout 'grid'))}}\n            <div class=\"grid-thumbnail\">\n              <LiveVideosGrid @id={{concat @widget.id '_' @regionName '_videosGrid' this.uniqueId}}\n                              @overallModel={{@overallModel}}\n                              @region={{this.region}}\n                              @isMultiUser={{this.isMultiUser}}\n                              @search={{this.search}}\n                              @playlistUrlChange={{this.playlistUrlChange}}\n                              @showShareMediaModal={{this.showShareMediaModal}}\n                              @videos={{this.videos}}\n              />\n            </div>\n          {{else}}\n            <div class=\"gallery gallery-thumbnail\">\n              {{#each this.filteredVideos as |video index|}}\n                <div class=\"image gallery-images videos {{if @isComparison \"baseline\"}} {{if (is-undefined video.isRelatedToFailure) ''\n                                                                                      (if video.isRelatedToFailure 'failure-image' 'success-image') }}\">\n                  <div class=\"image-inner\">\n                    <a role=\"button\" {{on \"click\" (fn this.playlistUrlChange video.playlistUrl)}}\n                       data-bs-title={{print-image video @overallModel true}}\n                       data-bs-html=\"true\"\n                       data-bs-toggle=\"tooltip\" data-bs-placement=\"top\">\n  \n                      {{#if @isPrint}}\n                        <img src=\"{{video.thumbnailUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                      {{else}}\n                        <img data-src=\"{{video.thumbnailUrl}}\" class=\"lazy\" alt=\"\" role=\"none\"/>\n                      {{/if}}\n  \n                      <Ui::Icon @icon=\"fa fa-play-circle play-icon-overlay\" />\n                    </a>\n  \n                    <p class=\"image-caption\">\n                      <a class=\"btn btn-sm btn-icon text-white\" role=\"button\" {{on \"click\" (fn this.showShareMediaModalAction video)}}\n                         data-bs-toggle=\"tooltip\" title=\"Share video\">\n                        <Ui::Icon @icon=\"fa fa-share\" />\n                      </a>\n                      <a class=\"btn btn-sm btn-icon text-white\" target=\"_blank\" href=\"{{video.exportUrl}}\"\n                         data-bs-toggle=\"tooltip\" title=\"Download as MP4\">\n                        <Ui::Icon @icon=\"fa fa-download\" />\n                      </a>\n                    </p>\n                  </div>\n                </div>\n              {{/each}}\n            </div>\n          {{/if}}\n        {{else if (or this.hasFilter (eq this.errorsOnly 'errors')) }}\n          No videos match the current filter.\n        {{else if @overallModel.completed}}\n          Test run captured no videos.\n        {{else}}\n          No videos yet.\n        {{/if}}\n      {{else}}\n        Loading videos...\n      {{/if}}\n    </div>\n    {{#if this.videoSelected.id}}\n      {{#unless this.hasSingleVideo}}\n        <span role=\"button\" {{on \"click\" (fn (mut this.videoSelected) null)}} class=\"btn btn-sm btn-primary  m-b-20 no-print \">\n          <Ui::Icon @icon=\"fa fa-arrow-circle-left\" />  Back\n        </span>\n  \n        <span role=\"button\" {{on \"click\" (fn this.showVideoDetailsModalAction this.videoSelected)}} class=\"btn btn-sm btn-success m-b-20 no-print \">\n          <Ui::Icon @icon=\"fa fa-clone\" />  Show Related Results\n        </span>\n      {{/unless}}\n      {{#if @isPrint}}\n        <img src=\"{{this.videoSelected.thumbnailUrl}}\" alt=\"\" role=\"none\">\n      {{else}}\n        <Ui::VideojsPlayer\n                @src={{this.videoSelected.playlistUrl}}\n                @videoSeekPosition={{@videoSeekPosition}}\n        />\n      {{/if}}\n      <div class=\"m-t-20\">\n        <VideoInfoView @video={{this.videoSelected}} @model={{@overallModel}} @minimal={{this.hasSingleVideo}} />\n      </div>\n    {{else if (and this.hasSingleVideo @overallModel.script.metadata.recordVideos)}}\n      {{if @overallModel.completed 'No video recorded for this test' 'Test initializing, waiting for video to start...'}}\n    {{/if}}\n  {{/if}}\n  \n  \n  {{#if this.showShareMediaModal}}\n    <ShareMediaModal @media={{this.mediaObject}}\n                     @model={{@overallModel}}\n                     @mediaType=\"video\"\n                     @onCloseModal={{this.closeShareMediaModal}} />\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,1],[24,\\\"hidden\\\",\\\"\\\"],[4,[38,1],[[30,0,[\\\"onInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"onDestroy\\\"]]],null],[4,[38,3],[[30,0,[\\\"onVideoReloadChange\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"isAll\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"startTimestamp\\\"]],[30,0,[\\\"zoomInfo\\\",\\\"endTimestamp\\\"]],[30,0,[\\\"selectedSessionNum\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,1]],null],[4,[38,3],[[30,0,[\\\"onVideoSelectedChange\\\"]],[30,0,[\\\"videoSelected\\\"]]],null],[4,[38,3],[[30,0,[\\\"onSessionsListChange\\\"]],[30,2]],null],[4,[38,3],[[30,0,[\\\"onViewLayoutChange\\\"]],[30,0,[\\\"viewLayout\\\"]],[30,0,[\\\"isLoaded\\\"]]],null],[4,[38,3],[[30,0,[\\\"onExecutionIdChange\\\"]],[30,3,[\\\"id\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[\\\"heading \\\",[52,[30,0,[\\\"hasSingleVideo\\\"]],\\\"float-left\\\"]]]],[12],[10,\\\"strong\\\"],[12],[1,[30,5]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,0,[\\\"videos\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"mb-1\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,8],null,[[\\\"@hasSingleVideo\\\",\\\"@overallModel\\\",\\\"@liveView\\\",\\\"@viewLayout\\\",\\\"@errorsOnly\\\",\\\"@videoCount\\\",\\\"@errorCount\\\",\\\"@isLoaded\\\",\\\"@receivedRtUpdate\\\",\\\"@isComparison\\\",\\\"@filtersExpanded\\\",\\\"@hasFilter\\\",\\\"@search\\\",\\\"@sessionsList\\\",\\\"@selectedSession\\\",\\\"@onChangeSession\\\",\\\"@filtersExpand\\\"],[[30,0,[\\\"hasSingleVideo\\\"]],[30,3],[30,6],[30,0,[\\\"viewLayout\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,0,[\\\"videoCount\\\"]],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"isLoaded\\\"]],[30,0,[\\\"receivedRtUpdate\\\"]],[30,4],[30,0,[\\\"filtersExpanded\\\"]],[30,0,[\\\"hasFilter\\\"]],[30,0,[\\\"search\\\"]],[30,2],[30,0,[\\\"selectedSession\\\"]],[30,0,[\\\"onChangeSession\\\"]],[30,0,[\\\"filtersExpand\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,9],[[30,0,[\\\"supportsInteractiveSessions\\\"]],[28,[37,10],[[30,6],\\\"interactive\\\"],null]],null],[[[1,\\\"  \\\"],[8,[39,11],null,[[\\\"@executionId\\\",\\\"@uuid\\\",\\\"@concurrentClients\\\",\\\"@running\\\",\\\"@startedAt\\\",\\\"@allocatingInfra\\\",\\\"@isLoad\\\",\\\"@sessionsList\\\",\\\"@isPublic\\\"],[[30,3,[\\\"id\\\"]],[30,3,[\\\"uuid\\\"]],[30,3,[\\\"concurrentClients\\\"]],[30,3,[\\\"running\\\"]],[30,3,[\\\"startedAt\\\"]],[30,3,[\\\"allocatingInfra\\\"]],[30,7],[30,2],[30,8]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[52,[28,[37,12],[[30,0,[\\\"hasSingleVideo\\\"]],[30,0,[\\\"videoSelected\\\"]]],null],\\\"hide\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\" m-b-20 no-print \\\",[52,[28,[37,9],[[30,0,[\\\"showFilterPanel\\\"]],[28,[37,12],[[30,0,[\\\"hasFilter\\\"]],[28,[37,7],[[30,0,[\\\"videos\\\",\\\"length\\\"]],0],null]],null]],null],\\\"\\\",\\\"hidden\\\"],\\\" no-print\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"        \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-sm btn-success \\\",[52,[30,0,[\\\"filtersExpanded\\\"]],\\\"m-b-10\\\"]]]],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"filtersExpand\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[1,\\\" Filters \\\"],[1,[52,[30,0,[\\\"hasFilter\\\"]],[28,[37,17],[\\\"(\\\",[30,0,[\\\"hasFilter\\\"]],\\\")\\\"],null]]],[1,\\\"\\\\n          \\\"],[1,[52,[30,0,[\\\"search\\\"]],[28,[37,17],[\\\" - Search Term: \\\\\\\"\\\",[30,0,[\\\"search\\\"]],\\\"\\\\\\\"\\\"],null]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"filtersExpanded\\\"]],[[[1,\\\"            \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-up\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-down\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[29,[\\\"row slow-animate \\\",[52,[30,0,[\\\"filtersExpanded\\\"]],\\\"\\\",\\\"fadeAnimate height-0 p-t-0 p-b-0\\\"]]]],[12],[1,\\\"\\\\n        \\\"],[8,[39,18],null,[[\\\"@model\\\",\\\"@iterationsExecuted\\\",\\\"@concurrentClients\\\",\\\"@executedIterationsPerClient\\\",\\\"@browsers\\\",\\\"@scriptBinary\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showRegionFilter\\\",\\\"@showTestRunnerFilter\\\",\\\"@isLoad\\\",\\\"@isVertical\\\",\\\"@isMultiUser\\\",\\\"@region\\\",\\\"@user\\\",\\\"@iteration\\\",\\\"@filesSessions\\\",\\\"@updateSession\\\",\\\"@updateRegion\\\",\\\"@updateAgent\\\",\\\"@updateUser\\\",\\\"@updateIteration\\\",\\\"@updateBrowser\\\"],[[30,3],[30,1,[\\\"summary\\\",\\\"iterationsExecuted\\\"]],[30,3,[\\\"concurrentClients\\\"]],[30,1,[\\\"summary\\\",\\\"executedIterationsPerClient\\\"]],[30,3,[\\\"browsers\\\"]],[30,3,[\\\"script\\\",\\\"metadata\\\",\\\"binary\\\"]],[30,3,[\\\"script\\\",\\\"scriptType\\\"]],[30,9],[28,[37,7],[[30,0,[\\\"regionCount\\\"]],2],null],[28,[37,7],[[30,1,[\\\"agents\\\",\\\"length\\\"]],1],null],[30,7],true,[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"region\\\"]],[30,0,[\\\"user\\\"]],[30,0,[\\\"iteration\\\"]],[30,0,[\\\"filesSessions\\\"]],[30,0,[\\\"updateSession\\\"]],[30,0,[\\\"updateRegion\\\"]],[30,0,[\\\"updateAgent\\\"]],[30,0,[\\\"updateUser\\\"]],[30,0,[\\\"updateIteration\\\"]],[30,0,[\\\"updateBrowser\\\"]]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"col-sm-4 col-md-3 m-b-10\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"f-w-700 m-b-5\\\"],[12],[1,\\\"Search\\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"input-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"input-group-prepend\\\"],[12],[8,[39,16],[[24,0,\\\"input-group-text\\\"]],[[\\\"@icon\\\"],[\\\"fa fa-search\\\"]],null],[13],[1,\\\"\\\\n            \\\"],[8,[39,19],[[24,\\\"placeholder\\\",\\\"Search...\\\"],[24,0,\\\"form-control\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"search\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isLoaded\\\"]],[[[1,\\\"\\\\n\\\"],[41,[28,[37,7],[[30,0,[\\\"videos\\\",\\\"length\\\"]],0],null],[[[41,[28,[37,7],[[30,0,[\\\"videoCount\\\"]],[30,0,[\\\"videos\\\",\\\"length\\\"]]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"m-b-10\\\"],[12],[1,\\\"(Most recent 100 videos shown)\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,12],[[28,[37,10],[[30,0,[\\\"viewLayout\\\"]],\\\"grid\\\"],null],[28,[37,10],[[30,10],\\\"grid\\\"],null]],null],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"grid-thumbnail\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[39,20],null,[[\\\"@id\\\",\\\"@overallModel\\\",\\\"@region\\\",\\\"@isMultiUser\\\",\\\"@search\\\",\\\"@playlistUrlChange\\\",\\\"@showShareMediaModal\\\",\\\"@videos\\\"],[[28,[37,17],[[30,11,[\\\"id\\\"]],\\\"_\\\",[30,12],\\\"_videosGrid\\\",[30,0,[\\\"uniqueId\\\"]]],null],[30,3],[30,0,[\\\"region\\\"]],[30,0,[\\\"isMultiUser\\\"]],[30,0,[\\\"search\\\"]],[30,0,[\\\"playlistUrlChange\\\"]],[30,0,[\\\"showShareMediaModal\\\"]],[30,0,[\\\"videos\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"gallery gallery-thumbnail\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,22],[[28,[37,22],[[30,0,[\\\"filteredVideos\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[15,0,[29,[\\\"image gallery-images videos \\\",[52,[30,4],\\\"baseline\\\"],\\\" \\\",[52,[28,[37,23],[[30,13,[\\\"isRelatedToFailure\\\"]]],null],\\\"\\\",[52,[30,13,[\\\"isRelatedToFailure\\\"]],\\\"failure-image\\\",\\\"success-image\\\"]]]]],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"image-inner\\\"],[12],[1,\\\"\\\\n                  \\\"],[11,3],[24,\\\"role\\\",\\\"button\\\"],[16,\\\"data-bs-title\\\",[28,[37,25],[[30,13],[30,3],true],null]],[24,\\\"data-bs-html\\\",\\\"true\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-placement\\\",\\\"top\\\"],[4,[38,15],[\\\"click\\\",[28,[37,26],[[30,0,[\\\"playlistUrlChange\\\"]],[30,13,[\\\"playlistUrl\\\"]]],null]],null],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[30,15],[[[1,\\\"                      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,13,[\\\"thumbnailUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[10,\\\"img\\\"],[15,\\\"data-src\\\",[29,[[30,13,[\\\"thumbnailUrl\\\"]]]]],[14,0,\\\"lazy\\\"],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n                    \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-play-circle play-icon-overlay\\\"]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n                  \\\"],[10,2],[14,0,\\\"image-caption\\\"],[12],[1,\\\"\\\\n                    \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon text-white\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Share video\\\"],[4,[38,15],[\\\"click\\\",[28,[37,26],[[30,0,[\\\"showShareMediaModalAction\\\"]],[30,13]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-share\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,3],[14,0,\\\"btn btn-sm btn-icon text-white\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,13,[\\\"exportUrl\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download as MP4\\\"],[12],[1,\\\"\\\\n                      \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[13,14]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[41,[28,[37,12],[[30,0,[\\\"hasFilter\\\"]],[28,[37,10],[[30,0,[\\\"errorsOnly\\\"]],\\\"errors\\\"],null]],null],[[[1,\\\"        No videos match the current filter.\\\\n\\\"]],[]],[[[41,[30,3,[\\\"completed\\\"]],[[[1,\\\"        Test run captured no videos.\\\\n\\\"]],[]],[[[1,\\\"        No videos yet.\\\\n      \\\"]],[]]]],[]]]],[]]]],[]],[[[1,\\\"      Loading videos...\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videoSelected\\\",\\\"id\\\"]],[[[41,[51,[30,0,[\\\"hasSingleVideo\\\"]]],[[[1,\\\"      \\\"],[11,1],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary  m-b-20 no-print \\\"],[4,[38,15],[\\\"click\\\",[28,[37,26],[[28,[37,29],[[30,0,[\\\"videoSelected\\\"]]],null],null],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-arrow-circle-left\\\"]],null],[1,\\\"  Back\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[11,1],[24,\\\"role\\\",\\\"button\\\"],[24,0,\\\"btn btn-sm btn-success m-b-20 no-print \\\"],[4,[38,15],[\\\"click\\\",[28,[37,26],[[30,0,[\\\"showVideoDetailsModalAction\\\"]],[30,0,[\\\"videoSelected\\\"]]],null]],null],[12],[1,\\\"\\\\n        \\\"],[8,[39,16],null,[[\\\"@icon\\\"],[\\\"fa fa-clone\\\"]],null],[1,\\\"  Show Related Results\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,15],[[[1,\\\"      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[[30,0,[\\\"videoSelected\\\",\\\"thumbnailUrl\\\"]]]]],[14,\\\"alt\\\",\\\"\\\"],[14,\\\"role\\\",\\\"none\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[39,30],null,[[\\\"@src\\\",\\\"@videoSeekPosition\\\"],[[30,0,[\\\"videoSelected\\\",\\\"playlistUrl\\\"]],[30,16]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[10,0],[14,0,\\\"m-t-20\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,31],null,[[\\\"@video\\\",\\\"@model\\\",\\\"@minimal\\\"],[[30,0,[\\\"videoSelected\\\"]],[30,3],[30,0,[\\\"hasSingleVideo\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[37,9],[[30,0,[\\\"hasSingleVideo\\\"]],[30,3,[\\\"script\\\",\\\"metadata\\\",\\\"recordVideos\\\"]]],null],[[[1,\\\"    \\\"],[1,[52,[30,3,[\\\"completed\\\"]],\\\"No video recorded for this test\\\",\\\"Test initializing, waiting for video to start...\\\"]],[1,\\\"\\\\n  \\\"]],[]],null]],[]]]],[]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showShareMediaModal\\\"]],[[[1,\\\"  \\\"],[8,[39,32],null,[[\\\"@media\\\",\\\"@model\\\",\\\"@mediaType\\\",\\\"@onCloseModal\\\"],[[30,0,[\\\"mediaObject\\\"]],[30,3],\\\"video\\\",[30,0,[\\\"closeShareMediaModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"@sessionsList\\\",\\\"@overallModel\\\",\\\"@isComparison\\\",\\\"@title\\\",\\\"@liveView\\\",\\\"@isLoad\\\",\\\"@isPublic\\\",\\\"@byRegionId\\\",\\\"@viewLayout\\\",\\\"@widget\\\",\\\"@regionName\\\",\\\"video\\\",\\\"index\\\",\\\"@isPrint\\\",\\\"@videoSeekPosition\\\"],[\\\"span\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"did-update\\\",\\\"if\\\",\\\"div\\\",\\\"strong\\\",\\\"gt\\\",\\\"videos-widget-filters\\\",\\\"and\\\",\\\"eq\\\",\\\"execution-live-session\\\",\\\"or\\\",\\\"unless\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"concat\\\",\\\"filter-fields\\\",\\\"input\\\",\\\"live-videos-grid\\\",\\\"each\\\",\\\"-track-array\\\",\\\"is-undefined\\\",\\\"a\\\",\\\"print-image\\\",\\\"fn\\\",\\\"img\\\",\\\"p\\\",\\\"mut\\\",\\\"ui/videojs-player\\\",\\\"video-info-view\\\",\\\"share-media-modal\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/videos-widget-detail.hbs\",\n    \"isStrictMode\": false\n  });\n  const MaxVideos = 100;\n  let VideosWidgetDetailComponent = _exports.default = (_class = class VideosWidgetDetailComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor3, this);\n      _initializerDefineProperty(this, \"viewLayout\", _descriptor4, this);\n      _initializerDefineProperty(this, \"showFilterPanel\", _descriptor5, this);\n      _initializerDefineProperty(this, \"region\", _descriptor6, this);\n      _initializerDefineProperty(this, \"agent\", _descriptor7, this);\n      _initializerDefineProperty(this, \"user\", _descriptor8, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor9, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor0, this);\n      _initializerDefineProperty(this, \"errorsOnly\", _descriptor1, this);\n      _initializerDefineProperty(this, \"search\", _descriptor10, this);\n      _initializerDefineProperty(this, \"videoCount\", _descriptor11, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor12, this);\n      _initializerDefineProperty(this, \"videos\", _descriptor13, this);\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor14, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor15, this);\n      _initializerDefineProperty(this, \"currentFilter\", _descriptor16, this);\n      _initializerDefineProperty(this, \"params\", _descriptor17, this);\n      _initializerDefineProperty(this, \"videoSelected\", _descriptor18, this);\n      _initializerDefineProperty(this, \"pendingUpdates\", _descriptor19, this);\n      _initializerDefineProperty(this, \"filtersExpanded\", _descriptor20, this);\n      _initializerDefineProperty(this, \"mediaObject\", _descriptor21, this);\n      _initializerDefineProperty(this, \"showShareMediaModal\", _descriptor22, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor23, this);\n      _initializerDefineProperty(this, \"filesSessions\", _descriptor24, this);\n      _defineProperty(this, \"uniqueId\", (0, _emberUuid.v4)());\n      _defineProperty(this, \"loadVideosTask\", (0, _asyncArrowRuntime.buildTask)(() => ({\n        context: this,\n        generator: function* () {\n          this.isLoaded = false;\n          this.args.updateIsLoaded?.(false);\n          this.currentFilter = _.clone(this.filter);\n          const params = this.getParams();\n          params.limit = MaxVideos;\n          if (this.selectedSessionNum && this.selectedSessionNum === this.params?.sessionNum) return;\n          const action = this.args.overallModel?.uuid ? this.api.liveVideos.getExecutionVideos(this.args.overallModel.uuid, params.regions, params, true) : this.api.liveVideos.getExecutionVideos(this.args.overallModel.id, params.regions, params);\n          try {\n            const results = yield action;\n            if (!this.isDestroyed) {\n              const videos = results && results.videos || [];\n              const videoCount = results.size || 0;\n              const errorCount = results.failures || 0;\n              this.videoCount = videoCount;\n              this.errorCount = errorCount;\n              this.videos = new _trackedBuiltIns.TrackedArray(videos);\n              this.isLoaded = true;\n              if (this.hasSingleVideo && videos.length) {\n                const selectedVideo = videos.reduce((min, current) => {\n                  return current.sessionNum < min.sessionNum ? current : min;\n                });\n                this.args.setSelectedSessionNum?.(selectedVideo);\n                params.sessionNum = selectedVideo?.sessionNum || 1;\n                this.params = params;\n                this.videoSelected = selectedVideo;\n                this.args.updateVideoSelected?.(selectedVideo, true);\n              }\n              this.args.updateVideoCount?.(videoCount);\n              this.args.updateErrorCount?.(errorCount);\n              this.args.updateIsLoaded?.(true);\n              this.args.imagesLoaded?.();\n              this.args.videosLoaded?.(videoCount);\n              this.applyPendingUpdates();\n            }\n          } catch (error) {\n            this.videoCount = 0;\n            this.args.updateVideoCount?.(0);\n            this.errorCount = 0;\n            this.args.updateErrorCount?.(0);\n            this.videos = new _trackedBuiltIns.TrackedArray([]);\n            this.isLoaded = true;\n            this.args.updateIsLoaded?.(true);\n            this.args.imagesLoaded?.();\n            this.args.videosLoaded?.();\n            this.applyPendingUpdates();\n          }\n        }\n      }), {\n        enqueue: true\n      }, \"loadVideosTask\", null));\n    }\n    get isMultiUser() {\n      return _loadTest.default.isMultiUser(this.args.scriptType);\n    }\n    get selectedSessionNum() {\n      return this.args.selectedSessionNum ?? 1;\n    }\n    get supportsInteractiveSessions() {\n      return this.args.running && (!this.args.uuid || this.args.testType === 'Live' && this.args.isPublic);\n    }\n    get regionCount() {\n      return Array.from(this.args.byRegionId.values()).length;\n    }\n    get hasSingleVideo() {\n      return !this.args.isLoad && this.regionCount === 2;\n    }\n    get filter() {\n      const regionInfo = this.args.byRegionId.get(this.region);\n      const region = this.args.isAll ? regionInfo && regionInfo.execRegionIds.join(',') : this.args.isBaseline ? this.args.regionBaselineId : this.args.executionRegionId;\n      return {\n        region,\n        agent: this.agent,\n        user: this.user,\n        browser: this.browser,\n        iteration: this.iteration,\n        failuresOnly: this.errorsOnly === 'errors'\n      };\n    }\n    get hasFilter() {\n      let filterCount = 0;\n      if (this.region !== 'ALL') filterCount++;\n      if (this.agent !== 'ALL') filterCount++;\n      if (this.user !== 'ALL') filterCount++;\n      if (this.iteration !== 'ALL') filterCount++;\n      if (this.browser !== 'ALL') filterCount++;\n      if (this.search) filterCount++;\n      return filterCount;\n    }\n    get filteredVideos() {\n      const search = this.search && this.search.toLowerCase();\n      const videos = this.videos;\n      if (search) {\n        return _.filter(videos, function (video) {\n          return video.name.toLowerCase().indexOf(search) !== -1 || video.type && video.type.toLowerCase().indexOf(search) !== -1;\n        });\n      } else {\n        return videos;\n      }\n    }\n    loadVideos() {\n      this.loadVideosTask.perform();\n    }\n    getParams() {\n      const params = _loadTest.default.toFileFilterParams(this.filter, this.zoomInfo);\n      if (!this.args.model?.isAll) {\n        params.regions = this.args.model?.executionRegion?.id;\n      }\n      params.multimediaOnly = 'true';\n      if (this.selectedSessionNum > 0) {\n        params.sessionNum = this.selectedSessionNum;\n      }\n      if (this.args.overallModel?.uuid) {\n        params.outputFiles = true;\n        if (this.args.isBaseline) {\n          params.comparison = true;\n        }\n      }\n      return params;\n    }\n    applyPendingUpdates() {\n      _.forEach(this.pendingUpdates, pending => {\n        if (pending.removedId) {\n          this.applyVideoDelete(pending.removedId);\n        } else {\n          this.applyVideoUpdate(pending.update, pending.isUpdate);\n        }\n      });\n      this.pendingUpdates = [];\n      this.applyLazyLoad();\n    }\n    onVideoUpdated(update, isUpdate) {\n      if (this.isLoaded) {\n        this.applyVideoUpdate(update, isUpdate);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          update: update,\n          isUpdate: isUpdate\n        });\n        this.pendingUpdates = pending;\n      }\n      this.applyLazyLoad();\n    }\n    onVideoDeleted(videoId) {\n      if (this.isLoaded) {\n        this.applyVideoDelete(videoId);\n      } else {\n        const pending = this.pendingUpdates || [];\n        pending.push({\n          removedId: videoId\n        });\n        this.pendingUpdates = pending;\n      }\n    }\n    applyVideoDelete(videoId) {\n      if (!videoId) return;\n      const videos = this.videos;\n      const index = videos.findIndex(video => video.id === videoId);\n      if (index === -1) return;\n      const [removedVideo] = videos.splice(index, 1);\n      this.videoCount -= 1;\n      this.args.updateVideoCount?.(this.videoCount);\n      const id = `${this.args.widget?.id}_${this.args.regionName}_videosGrid`;\n      this.EventBus.publish(id + '.update', null, null, removedVideo);\n    }\n    applyVideoUpdate(update, isUpdate) {\n      this.receivedRtUpdate = true;\n      this.args.updateReceivedRtUpdate?.(true);\n      const videos = this.videos;\n      const filter = this.filter;\n      let removedFile;\n      if (update && isUpdate) {\n        const existingVideo = _.find(videos, existingVideo => {\n          return existingVideo.id === update.id;\n        });\n        if (existingVideo) {\n          (0, _object.setProperties)(existingVideo, update);\n        }\n      } else if (update && _.findIndex(videos, img => {\n        return img.id === update.id;\n      }) === -1 && _loadTest.default.doesFileMatchFilter(update, filter)) {\n        const videoCount = this.videoCount + 1;\n        this.videoCount = videoCount;\n        this.args.updateVideoCount?.(videoCount);\n        if (videos.length >= MaxVideos) {\n          removedFile = videos.pop();\n        }\n        videos.unshift(update);\n        if (videos.length === 1 && this.hasSingleVideo) {\n          this.videoSelected = update;\n          this.args.updateVideoSelected?.(update);\n        }\n        this.args.videosLoaded?.(this.videoCount);\n        let id = `${this.args.widget?.id}_${this.args.regionName}_videosGrid`;\n        this.EventBus.publish(id + '.update', update, isUpdate, removedFile);\n      }\n    }\n    resetFilters() {\n      this.region = 'ALL';\n      this.agent = 'ALL';\n      this.user = 'ALL';\n      this.iteration = 'ALL';\n      this.errorsOnly = 'all';\n      this.args.updateErrorsOnly?.('all');\n      this.browser = 'ALL';\n    }\n    onFiltersChanged() {\n      const currentFilter = this.currentFilter;\n      if (!_.isEqual(currentFilter, this.filter)) {\n        this.loadVideos();\n      }\n    }\n    applyLazyLoad() {\n      const container = `#panelBody${this.args.parentUuid}`;\n      const settings = {\n        effect: 'fadeIn',\n        effectTime: 50,\n        threshold: 0\n      };\n      $(`${container} .lazy`).Lazy({\n        ...settings,\n        appendScroll: $(container)\n      });\n    }\n\n    // did-insert: replaces didInsertElement + init\n    onInsert() {\n      this.resetFilters();\n      this.loadVideos();\n      this.EventBus.subscribe('liveVideoFile.update', this, 'onVideoUpdated');\n      this.EventBus.subscribe('liveVideoFile.delete', this, 'onVideoDeleted');\n      $(window).on(`scroll.videosWidget${this.uniqueId}`, () => {\n        if (_lib.default.elementInView($(`#panelBody${this.args.parentUuid} .gallery`))) {\n          this.applyLazyLoad();\n        }\n      });\n      this.applyLazyLoad();\n    }\n\n    // will-destroy: replaces willDestroyElement\n    onDestroy() {\n      this.EventBus.unsubscribe('liveVideoFile.update', this, 'onVideoUpdated');\n      this.EventBus.unsubscribe('liveVideoFile.delete', this, 'onVideoDeleted');\n      $(window).off(`scroll.videosWidget${this.uniqueId}`);\n    }\n\n    // did-update: replaces onVideoReloadChange observer\n    onVideoReloadChange() {\n      this.loadVideos();\n    }\n\n    // did-update: replaces onVideoSelected observer\n    onVideoSelectedChange() {\n      this.selectedSession = this.args.sessionsList?.find(session => session.value === this.videoSelected?.sessionNum);\n    }\n\n    // did-update: replaces onSessionsList observer\n    onSessionsListChange() {\n      this.filesSessions = this.args.sessionsList?.filter(session => session.value !== 0) || [];\n    }\n\n    // did-update: replaces onViewLayoutChange observer\n    onViewLayoutChange() {\n      if (this.isLoaded) {\n        (0, _runloop.later)(this, async () => {\n          this.applyLazyLoad();\n        }, 200);\n      }\n    }\n\n    // did-update: replaces onExecutionIdChange observer\n    onExecutionIdChange() {\n      this.resetFilters();\n      this.loadVideos();\n    }\n    showVideoDetailsModalAction(video) {\n      this.args.showVideoDetailsModal(video);\n    }\n    closeShareMediaModal() {\n      this.mediaObject = null;\n      this.showShareMediaModal = false;\n    }\n    updateRegion(value) {\n      this.region = value;\n      this.onFiltersChanged();\n    }\n    updateAgent(value) {\n      this.agent = value;\n      this.onFiltersChanged();\n    }\n    updateUser(value) {\n      this.user = value;\n      this.onFiltersChanged();\n    }\n    updateIteration(value) {\n      this.iteration = value;\n      this.onFiltersChanged();\n    }\n    updateBrowser(value) {\n      this.browser = value;\n      this.onFiltersChanged();\n    }\n    showShareMediaModalAction(media) {\n      let mediaObj = {\n        type: 'video',\n        id: media.id\n      };\n      this.mediaObject = mediaObj;\n      this.showShareMediaModal = true;\n    }\n    filtersExpand() {\n      this.filtersExpanded = !this.filtersExpanded;\n    }\n    playlistUrlChange(playlistUrl) {\n      let video = this.videos.filter(v => v.playlistUrl === playlistUrl)[0];\n      if (video) {\n        this.videoSelected = video;\n        this.args.updateVideoSelected?.(video);\n      }\n    }\n    screenshotAction() {\n      this.args.screenshot?.();\n    }\n    onChangeSession(selectedSession) {\n      this.videoSelected = this.videos.find(v => v.sessionNum === selectedSession.value);\n      this.args.updateVideoSelected?.(selectedSession);\n    }\n    updateSession(sessionNum) {\n      this.args.setSelectedSessionNum?.({\n        sessionNum\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"viewLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'tile';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showFilterPanel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"region\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"agent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"user\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'ALL';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"errorsOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"videoCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"videos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"currentFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"params\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"videoSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"pendingUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"filtersExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"mediaObject\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"filesSessions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDestroy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDestroy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideoReloadChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideoReloadChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideoSelectedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideoSelectedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSessionsListChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSessionsListChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onViewLayoutChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onViewLayoutChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onExecutionIdChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onExecutionIdChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showVideoDetailsModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showVideoDetailsModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeShareMediaModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeShareMediaModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateRegion\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateRegion\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateAgent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateAgent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateUser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateUser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIteration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIteration\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateBrowser\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateBrowser\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showShareMediaModalAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showShareMediaModalAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filtersExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"filtersExpand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"playlistUrlChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"playlistUrlChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"screenshotAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"screenshotAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSession\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideosWidgetDetailComponent);\n});","define(\"@testable/shared-ui/components/videos-widget-filters\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if (and (not @hasSingleVideo) (or @overallModel.completed (eq @liveView 'videos')))}}\n    <BsButtonGroup class=\"no-print\" @value={{@viewLayout}} @type=\"radio\" @onChange={{fn (mut @viewLayout)}} as |bg|>\n      <bg.button @type=\"success\" @value=\"tile\" @size=\"xs\">Tile</bg.button>\n      <bg.button @type=\"success\" @value=\"grid\" @size=\"xs\">Grid</bg.button>\n    </BsButtonGroup>\n  \n    <BsButtonGroup @value={{@errorsOnly}} @type=\"radio\" class=\"m-l-10 no-print\" @onChange={{fn (mut @errorsOnly)}} as |bg|>\n      <bg.button @type=\"success\" @value=\"all\" @size=\"xs\">\n        All {{#if @isLoaded}}({{print-number @videoCount}}){{/if}}</bg.button>\n      <bg.button @type=\"success\" @value=\"errors\" @size=\"xs\">\n        Errors {{#if (and @isLoaded @overallModel.completed (not @receivedRtUpdate))}}\n        ({{print-number @errorCount}}){{/if}}\n        <Ui::InfoIcon\n                @content=\"Only show videos captured during test iterations where there was an assertion failure.\" /></bg.button>\n    </BsButtonGroup>\n    {{#if @isComparison}}\n      <button type=\"button\" class=\"m-l-10 filter-btn btn btn-sm btn-success\" {{on \"click\" @filtersExpand}}>\n        <Ui::Icon @icon=\"fa fa-filter\" /> Filters {{if @hasFilter (concat '(' @hasFilter ')')}}\n        {{if @search (concat ' - Search Term: \"' @search '\"')}}\n        {{#if @filtersExpanded}}\n          <Ui::Icon @icon=\"fa fa-angle-up\" />\n        {{else}}\n          <Ui::Icon @icon=\"fa fa-angle-down\" />\n        {{/if}}\n      </button>\n    {{/if}}\n  \n  {{/if}}\n  \n  {{#if @hasSingleVideo}}\n    {{#if (gt this.sessionsList.length 1)}}\n      <Ui::PSelect class=\"m-l-10 d-inline-flex\"\n                   @options={{this.sessionsList}}\n                   @selected={{@selectedSession}}\n                   @placeholder=\"Please select a session...\"\n                   @onChange={{@onChangeSession}} as |option| >\n        {{option.title}}\n      </Ui::PSelect>\n    {{/if}}\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[28,[37,1],[[28,[37,2],[[30,1]],null],[28,[37,3],[[30,2,[\\\"completed\\\"]],[28,[37,4],[[30,3],\\\"videos\\\"],null]],null]],null],[[[1,\\\"  \\\"],[8,[39,5],[[24,0,\\\"no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,4],\\\"radio\\\",[28,[37,6],[[28,[37,7],[[30,4]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"tile\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Tile\\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,5,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"grid\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Grid\\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n  \\\"],[8,[39,5],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,6],\\\"radio\\\",[28,[37,6],[[28,[37,7],[[30,6]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"all\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      All \\\"],[41,[30,8],[[[1,\\\"(\\\"],[1,[28,[35,8],[[30,9]],null]],[1,\\\")\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n    \\\"],[8,[30,7,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"errors\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      Errors \\\"],[41,[28,[37,1],[[30,8],[30,2,[\\\"completed\\\"]],[28,[37,2],[[30,10]],null]],null],[[[1,\\\"\\\\n      (\\\"],[1,[28,[35,8],[[30,11]],null]],[1,\\\")\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[39,9],null,[[\\\"@content\\\"],[\\\"Only show videos captured during test iterations where there was an assertion failure.\\\"]],null]],[]]]]],[1,\\\"\\\\n  \\\"]],[7]]]]],[1,\\\"\\\\n\\\"],[41,[30,12],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"m-l-10 filter-btn btn btn-sm btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,11],[\\\"click\\\",[30,13]],null],[12],[1,\\\"\\\\n      \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-filter\\\"]],null],[1,\\\" Filters \\\"],[1,[52,[30,14],[28,[37,13],[\\\"(\\\",[30,14],\\\")\\\"],null]]],[1,\\\"\\\\n      \\\"],[1,[52,[30,15],[28,[37,13],[\\\" - Search Term: \\\\\\\"\\\",[30,15],\\\"\\\\\\\"\\\"],null]]],[1,\\\"\\\\n\\\"],[41,[30,16],[[[1,\\\"        \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-up\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[39,12],null,[[\\\"@icon\\\"],[\\\"fa fa-angle-down\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,1],[[[41,[28,[37,14],[[30,0,[\\\"sessionsList\\\",\\\"length\\\"]],1],null],[[[1,\\\"    \\\"],[8,[39,15],[[24,0,\\\"m-l-10 d-inline-flex\\\"]],[[\\\"@options\\\",\\\"@selected\\\",\\\"@placeholder\\\",\\\"@onChange\\\"],[[30,0,[\\\"sessionsList\\\"]],[30,17],\\\"Please select a session...\\\",[30,18]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[1,[30,19,[\\\"title\\\"]]],[1,\\\"\\\\n    \\\"]],[19]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[\\\"@hasSingleVideo\\\",\\\"@overallModel\\\",\\\"@liveView\\\",\\\"@viewLayout\\\",\\\"bg\\\",\\\"@errorsOnly\\\",\\\"bg\\\",\\\"@isLoaded\\\",\\\"@videoCount\\\",\\\"@receivedRtUpdate\\\",\\\"@errorCount\\\",\\\"@isComparison\\\",\\\"@filtersExpand\\\",\\\"@hasFilter\\\",\\\"@search\\\",\\\"@filtersExpanded\\\",\\\"@selectedSession\\\",\\\"@onChangeSession\\\",\\\"option\\\"],[\\\"if\\\",\\\"and\\\",\\\"not\\\",\\\"or\\\",\\\"eq\\\",\\\"bs-button-group\\\",\\\"fn\\\",\\\"mut\\\",\\\"print-number\\\",\\\"ui/info-icon\\\",\\\"button\\\",\\\"on\\\",\\\"ui/icon\\\",\\\"concat\\\",\\\"gt\\\",\\\"ui/p-select\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/videos-widget-filters.hbs\",\n    \"isStrictMode\": false\n  });\n  class VideoWidgetFilterComponent extends _component2.default {\n    get sessionsList() {\n      return this.args.sessionsList?.filter(session => session.value !== 0 && session.value !== -1);\n    }\n  }\n  _exports.default = VideoWidgetFilterComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideoWidgetFilterComponent);\n});","define(\"@testable/shared-ui/components/videos-widget\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"ember-uuid\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _emberUuid, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"ember-uuid\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"panel video-panel block-sub-container {{unless this.videoSelected \"videos-panel\"}} {{if this.isLiveTestAndRunning \"live-videos-panel\"}}\"\n    data-sortable-id=\"videos\" data-type=\"Videos\"\n    {{did-update this.onUpdateSessionsList @sessionsList @model.execution.maxExecutionNum @selectedSessionNum}}>\n  <div class=\"panel-heading block-sub-container-target\">\n    <div class=\"panel-heading-btn\">\n      {{#unless @minimalHeader}}\n  \n        {{#if (and (eq @overallModel.script.scriptType 'Live') (or @cpuUtilization @memoryUtilization))}}\n          <strong>Peak Browser Usage: </strong>\n          {{or @cpuUtilization '-'}}% CPU, {{or @memoryUtilization '-'}}% Memory\n        {{/if}}\n  \n        {{#if this.videoSelected.exportUrl}}\n          <a class=\"btn btn-sm btn-circle btn-icon text-primary\" target=\"_blank\" href=\"{{this.videoSelected.exportUrl}}\"\n             data-bs-toggle=\"tooltip\" title=\"Download as MP4\">\n            <Ui::Icon @icon=\"fa fa-download\" />\n          </a>\n        {{/if}}\n  \n        {{#if (and (eq @overallModel.script.scriptType 'Live') @model.execution.running)}}\n          <a class=\"btn btn-sm btn-circle btn-icon text-primary\" role=\"button\" {{on \"click\" this.screenshotAction}}\n             data-bs-toggle=\"tooltip\"\n             data-bs-trigger=\"click\"\n             title=\"Screenshot requested successfully. It should appear in the Images widget below within a few seconds.\"\n          >\n            <Ui::Icon @icon=\"fa fa-camera\" /></a>\n        {{/if}}\n  \n        <a class=\"btn btn-sm btn-circle btn-icon text-primary\" data-click=\"panel-expand\"><Ui::Icon @icon=\"fa fa-expand\" /></a>\n  \n        {{#if (and @removePanel (not @isViewer))}}\n          <a {{on \"click\" (fn this.removePanelAction \"videos\" )}} class=\"btn btn-sm btn-icon btn-circle text-danger\" data-bs-toggle=\"tooltip\"\n                                                title=\"Delete Panel\" role=\"button\"><Ui::Icon @icon=\"fa fa-times\" /></a>\n        {{/if}}\n      {{/unless}}\n    </div>\n    <h4 class=\"panel-title\">\n  \n      <a role=\"button\" data-bs-toggle=\"collapse\" href=\"#panelBody{{this.uuid}}\" aria-expanded=\"true\"\n         class=\"btn btn-sm btn-icon btn-circle text-primary no-print\"\n         aria-controls=\"panelBody{{this.uuid}}\">\n         <Ui::Icon @icon=\"fa fa-minus \" /></a>\n      {{#if @isLive }}\n        {{#if (or (not this.supportsInteractiveSessions) (not @overallModel.script.metadata.recordVideos)) }}\n          {{#if @overallModel.script.metadata.recordVideos}}\n            Video\n          {{else}}\n            Interactive Session\n          {{/if}}\n        {{/if}}\n      {{else}}\n        <strong>\n          Videos {{#unless @model.isAll}} - {{@model.regionDescription}}{{/unless}}\n          {{#if (and (not @baselineExecution) this.isLoaded)}}\n            ({{print-number (if (eq this.errorsOnly 'errors') this.errorCount this.videoCount)}})\n          {{/if}}\n        </strong>\n        <Ui::InfoIcon @content=\"If you enable video recording in your visual tool based tests, you will see the video\n          of each virtual user test iteration here. These videos are available live while your test is still running. Click\n          on the thumbnail of any video to watch the full video.\" />\n      {{/if}}\n    </h4>\n  \n    {{#if this.supportsInteractiveSessions}}\n      <BsButtonGroup class=\"m-l-10 no-print\" @value={{this.liveView}} @type=\"radio\" @onChange={{fn (mut this.liveView)}} as |bg|>\n        {{#if @isLive}}\n          {{#if @overallModel.script.metadata.recordVideos}}\n            <bg.button @type=\"success\" @value=\"interactive\" @size=\"xs\">Interactive</bg.button>\n            <bg.button @type=\"success\" @value=\"videos\" @size=\"xs\">Video</bg.button>\n          {{/if}}\n        {{else}}\n          <bg.button @type=\"success\" @value=\"videos\" @size=\"xs\">Videos</bg.button>\n          <bg.button @type=\"success\" @value=\"interactive\" @size=\"xs\">Interactive</bg.button>\n        {{/if}}\n      </BsButtonGroup>\n    {{/if}}\n  \n    {{#unless @baselineExecution}}\n      <VideosWidgetFilters\n              @hasSingleVideo={{this.hasSingleVideo}}\n              @overallModel={{@overallModel}}\n              @liveView={{this.liveView}}\n              @viewLayout={{this.viewLayout}}\n              @errorsOnly={{this.errorsOnly}}\n              @videoCount={{this.videoCount}}\n              @errorCount={{this.errorCount}}\n              @isLoaded={{this.isLoaded}}\n              @sessionsList={{@sessionsList}}\n              @selectedSession={{this.selectedSession}}\n              @onChangeSession={{this.onChangeSession}}\n              @receivedRtUpdate={{this.receivedRtUpdate}}\n      />\n    {{/unless}}\n  \n  </div>\n  \n  <div class=\"collapse show\" id=\"panelBody{{this.uuid}}\" aria-expanded=\"true\">\n    <div class=\"panel-body videos-widget-panel-body {{if @baselineExecution \"comparison-view\"}}\">\n    <VideosWidgetDetail\n            @title=\"Current Test\"\n            @parentUuid={{this.uuid}}\n            @viewLayout={{unless @baselineExecution this.viewLayout}}\n            @liveView={{this.liveView}}\n            @testType={{@testType}}\n            @uuid={{@uuid}}\n            @running={{@running}}\n            @executionRegionId={{@model.executionRegion.id}}\n            @overallModel={{@overallModel}}\n            @model={{@model}}\n            @regionName={{@regionName}}\n            @isLoad={{@isLoad}}\n            @isPublic={{@isPublic}}\n            @scriptType={{@scriptType}}\n            @byRegionId={{@byRegionId}}\n            @showVideoDetailsModal={{@showVideoDetailsModal}}\n            @sessionsList={{@sessionsList}}\n            @selectedSessionNum={{@selectedSessionNum}}\n            @errorsOnly={{this.errorsOnly}}\n            @imagesLoaded={{@imagesLoaded}}\n            @videosLoaded={{@videosLoaded}}\n            @videoSeekPosition={{@videoSeekPosition}}\n            @setSelectedSessionNum={{this.onChangeVideoSession}}\n            @isComparison={{if @baselineExecution true}}\n            @updateVideoSelected={{this.onSelectVideo}}\n            @updateVideoCount={{this.updateVideoCountAction}}\n            @updateErrorCount={{this.updateErrorCountAction}}\n            @updateErrorsOnly={{this.updateErrorsOnlyAction}}\n            @updateIsLoaded={{this.updateIsLoadedAction}}\n            @updateReceivedRtUpdate={{this.updateReceivedRtUpdateAction}}\n    />\n  \n    {{#if (and @baselineExecution (or (eq @regionName 'ALL') @regionBaselineId)) }}\n      <div class=\"mt-3\"></div>\n      <VideosWidgetDetail\n              @title=\"Baseline Test\"\n              @parentUuid={{this.uuid}}\n              @liveView={{this.liveView}}\n              @testType={{@baselineExecution.configuration.testType}}\n              @uuid={{@baselineExecution.uuid}}\n              @running={{@baselineExecution.running}}\n              @executionRegionId={{@regionSummaryBaseline.executionRegion.id}}\n              @overallModel={{@baselineExecution}}\n              @model={{@regionSummaryBaseline}}\n              @regionName={{@regionName}}\n              @regionBaselineId={{@regionBaselineId}}\n              @selectedSessionNum={{@baselineSelectedSessionNum}}\n              @isLoad={{@isLoad}}\n              @isPublic={{@isPublic}}\n              @sessionsList={{@sessionsList}}\n              @scriptType={{@scriptType}}\n              @byRegionId={{@byRegionBaselineId}}\n              @videoSeekPosition={{@baselineVideoSeekPosition}}\n              @showVideoDetailsModal={{@showVideoDetailsModal}}\n              @setSelectedSessionNum={{this.onChangeVideoSession}}\n              @updateVideoSelected={{this.onSelectBaselineVideo}}\n              @videosLoaded={{@videosLoaded}}\n              @imagesLoaded={{@baselineImagesLoaded}}\n              @isBaseline={{true}}\n              @isComparison={{true}}\n      />\n    {{/if}}\n    </div>\n  </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"panel video-panel block-sub-container \\\",[52,[51,[30,0,[\\\"videoSelected\\\"]]],\\\"videos-panel\\\"],\\\" \\\",[52,[30,0,[\\\"isLiveTestAndRunning\\\"]],\\\"live-videos-panel\\\"]]]],[24,\\\"data-sortable-id\\\",\\\"videos\\\"],[24,\\\"data-type\\\",\\\"Videos\\\"],[4,[38,3],[[30,0,[\\\"onUpdateSessionsList\\\"]],[30,1],[30,2,[\\\"execution\\\",\\\"maxExecutionNum\\\"]],[30,3]],null],[12],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"panel-heading block-sub-container-target\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"panel-heading-btn\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,5],[[30,5,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[28,[37,6],[[30,6],[30,7]],null]],null],[[[1,\\\"        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Peak Browser Usage: \\\"],[13],[1,\\\"\\\\n        \\\"],[1,[28,[35,6],[[30,6],\\\"-\\\"],null]],[1,\\\"% CPU, \\\"],[1,[28,[35,6],[[30,7],\\\"-\\\"],null]],[1,\\\"% Memory\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"videoSelected\\\",\\\"exportUrl\\\"]],[[[1,\\\"        \\\"],[10,3],[14,0,\\\"btn btn-sm btn-circle btn-icon text-primary\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[15,6,[29,[[30,0,[\\\"videoSelected\\\",\\\"exportUrl\\\"]]]]],[14,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[14,\\\"title\\\",\\\"Download as MP4\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-download\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,5],[[30,5,[\\\"script\\\",\\\"scriptType\\\"]],\\\"Live\\\"],null],[30,2,[\\\"execution\\\",\\\"running\\\"]]],null],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-circle btn-icon text-primary\\\"],[24,\\\"role\\\",\\\"button\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"data-bs-trigger\\\",\\\"click\\\"],[24,\\\"title\\\",\\\"Screenshot requested successfully. It should appear in the Images widget below within a few seconds.\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"screenshotAction\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-camera\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,3],[14,0,\\\"btn btn-sm btn-circle btn-icon text-primary\\\"],[14,\\\"data-click\\\",\\\"panel-expand\\\"],[12],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-expand\\\"]],null],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,4],[[30,8],[28,[37,11],[[30,9]],null]],null],[[[1,\\\"        \\\"],[11,3],[24,0,\\\"btn btn-sm btn-icon btn-circle text-danger\\\"],[24,\\\"data-bs-toggle\\\",\\\"tooltip\\\"],[24,\\\"title\\\",\\\"Delete Panel\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[38,10],[\\\"click\\\",[28,[37,12],[[30,0,[\\\"removePanelAction\\\"]],\\\"videos\\\"],null]],null],[12],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-times\\\"]],null],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[14,0,\\\"panel-title\\\"],[12],[1,\\\"\\\\n\\\\n    \\\"],[10,3],[14,\\\"role\\\",\\\"button\\\"],[14,\\\"data-bs-toggle\\\",\\\"collapse\\\"],[15,6,[29,[\\\"#panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[14,0,\\\"btn btn-sm btn-icon btn-circle text-primary no-print\\\"],[15,\\\"aria-controls\\\",[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[12],[1,\\\"\\\\n       \\\"],[8,[39,9],null,[[\\\"@icon\\\"],[\\\"fa fa-minus \\\"]],null],[13],[1,\\\"\\\\n\\\"],[41,[30,10],[[[41,[28,[37,6],[[28,[37,11],[[30,0,[\\\"supportsInteractiveSessions\\\"]]],null],[28,[37,11],[[30,5,[\\\"script\\\",\\\"metadata\\\",\\\"recordVideos\\\"]]],null]],null],[[[41,[30,5,[\\\"script\\\",\\\"metadata\\\",\\\"recordVideos\\\"]],[[[1,\\\"          Video\\\\n\\\"]],[]],[[[1,\\\"          Interactive Session\\\\n\\\"]],[]]]],[]],null]],[]],[[[1,\\\"      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n        Videos \\\"],[41,[51,[30,2,[\\\"isAll\\\"]]],[[[1,\\\" - \\\"],[1,[30,2,[\\\"regionDescription\\\"]]]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,4],[[28,[37,11],[[30,11]],null],[30,0,[\\\"isLoaded\\\"]]],null],[[[1,\\\"          (\\\"],[1,[28,[35,14],[[52,[28,[37,5],[[30,0,[\\\"errorsOnly\\\"]],\\\"errors\\\"],null],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"videoCount\\\"]]]],null]],[1,\\\")\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[39,15],null,[[\\\"@content\\\"],[\\\"If you enable video recording in your visual tool based tests, you will see the video\\\\n        of each virtual user test iteration here. These videos are available live while your test is still running. Click\\\\n        on the thumbnail of any video to watch the full video.\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"supportsInteractiveSessions\\\"]],[[[1,\\\"    \\\"],[8,[39,16],[[24,0,\\\"m-l-10 no-print\\\"]],[[\\\"@value\\\",\\\"@type\\\",\\\"@onChange\\\"],[[30,0,[\\\"liveView\\\"]],\\\"radio\\\",[28,[37,12],[[28,[37,17],[[30,0,[\\\"liveView\\\"]]],null]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,10],[[[41,[30,5,[\\\"script\\\",\\\"metadata\\\",\\\"recordVideos\\\"]],[[[1,\\\"          \\\"],[8,[30,12,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"interactive\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Interactive\\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[8,[30,12,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"videos\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Video\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[1,\\\"        \\\"],[8,[30,12,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"videos\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Videos\\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,12,[\\\"button\\\"]],null,[[\\\"@type\\\",\\\"@value\\\",\\\"@size\\\"],[\\\"success\\\",\\\"interactive\\\",\\\"xs\\\"]],[[\\\"default\\\"],[[[[1,\\\"Interactive\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"]],[12]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,11]],[[[1,\\\"    \\\"],[8,[39,18],null,[[\\\"@hasSingleVideo\\\",\\\"@overallModel\\\",\\\"@liveView\\\",\\\"@viewLayout\\\",\\\"@errorsOnly\\\",\\\"@videoCount\\\",\\\"@errorCount\\\",\\\"@isLoaded\\\",\\\"@sessionsList\\\",\\\"@selectedSession\\\",\\\"@onChangeSession\\\",\\\"@receivedRtUpdate\\\"],[[30,0,[\\\"hasSingleVideo\\\"]],[30,5],[30,0,[\\\"liveView\\\"]],[30,0,[\\\"viewLayout\\\"]],[30,0,[\\\"errorsOnly\\\"]],[30,0,[\\\"videoCount\\\"]],[30,0,[\\\"errorCount\\\"]],[30,0,[\\\"isLoaded\\\"]],[30,1],[30,0,[\\\"selectedSession\\\"]],[30,0,[\\\"onChangeSession\\\"]],[30,0,[\\\"receivedRtUpdate\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"collapse show\\\"],[15,1,[29,[\\\"panelBody\\\",[30,0,[\\\"uuid\\\"]]]]],[14,\\\"aria-expanded\\\",\\\"true\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"panel-body videos-widget-panel-body \\\",[52,[30,11],\\\"comparison-view\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[8,[39,19],null,[[\\\"@title\\\",\\\"@parentUuid\\\",\\\"@viewLayout\\\",\\\"@liveView\\\",\\\"@testType\\\",\\\"@uuid\\\",\\\"@running\\\",\\\"@executionRegionId\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@isLoad\\\",\\\"@isPublic\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showVideoDetailsModal\\\",\\\"@sessionsList\\\",\\\"@selectedSessionNum\\\",\\\"@errorsOnly\\\",\\\"@imagesLoaded\\\",\\\"@videosLoaded\\\",\\\"@videoSeekPosition\\\",\\\"@setSelectedSessionNum\\\",\\\"@isComparison\\\",\\\"@updateVideoSelected\\\",\\\"@updateVideoCount\\\",\\\"@updateErrorCount\\\",\\\"@updateErrorsOnly\\\",\\\"@updateIsLoaded\\\",\\\"@updateReceivedRtUpdate\\\"],[\\\"Current Test\\\",[30,0,[\\\"uuid\\\"]],[52,[51,[30,11]],[30,0,[\\\"viewLayout\\\"]]],[30,0,[\\\"liveView\\\"]],[30,13],[30,14],[30,15],[30,2,[\\\"executionRegion\\\",\\\"id\\\"]],[30,5],[30,2],[30,16],[30,17],[30,18],[30,19],[30,20],[30,21],[30,1],[30,3],[30,0,[\\\"errorsOnly\\\"]],[30,22],[30,23],[30,24],[30,0,[\\\"onChangeVideoSession\\\"]],[52,[30,11],true],[30,0,[\\\"onSelectVideo\\\"]],[30,0,[\\\"updateVideoCountAction\\\"]],[30,0,[\\\"updateErrorCountAction\\\"]],[30,0,[\\\"updateErrorsOnlyAction\\\"]],[30,0,[\\\"updateIsLoadedAction\\\"]],[30,0,[\\\"updateReceivedRtUpdateAction\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,4],[[30,11],[28,[37,6],[[28,[37,5],[[30,16],\\\"ALL\\\"],null],[30,25]],null]],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"mt-3\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[8,[39,19],null,[[\\\"@title\\\",\\\"@parentUuid\\\",\\\"@liveView\\\",\\\"@testType\\\",\\\"@uuid\\\",\\\"@running\\\",\\\"@executionRegionId\\\",\\\"@overallModel\\\",\\\"@model\\\",\\\"@regionName\\\",\\\"@regionBaselineId\\\",\\\"@selectedSessionNum\\\",\\\"@isLoad\\\",\\\"@isPublic\\\",\\\"@sessionsList\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@videoSeekPosition\\\",\\\"@showVideoDetailsModal\\\",\\\"@setSelectedSessionNum\\\",\\\"@updateVideoSelected\\\",\\\"@videosLoaded\\\",\\\"@imagesLoaded\\\",\\\"@isBaseline\\\",\\\"@isComparison\\\"],[\\\"Baseline Test\\\",[30,0,[\\\"uuid\\\"]],[30,0,[\\\"liveView\\\"]],[30,11,[\\\"configuration\\\",\\\"testType\\\"]],[30,11,[\\\"uuid\\\"]],[30,11,[\\\"running\\\"]],[30,26,[\\\"executionRegion\\\",\\\"id\\\"]],[30,11],[30,26],[30,16],[30,25],[30,27],[30,17],[30,18],[30,1],[30,19],[30,28],[30,29],[30,21],[30,0,[\\\"onChangeVideoSession\\\"]],[30,0,[\\\"onSelectBaselineVideo\\\"]],[30,23],[30,30],true,true]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@sessionsList\\\",\\\"@model\\\",\\\"@selectedSessionNum\\\",\\\"@minimalHeader\\\",\\\"@overallModel\\\",\\\"@cpuUtilization\\\",\\\"@memoryUtilization\\\",\\\"@removePanel\\\",\\\"@isViewer\\\",\\\"@isLive\\\",\\\"@baselineExecution\\\",\\\"bg\\\",\\\"@testType\\\",\\\"@uuid\\\",\\\"@running\\\",\\\"@regionName\\\",\\\"@isLoad\\\",\\\"@isPublic\\\",\\\"@scriptType\\\",\\\"@byRegionId\\\",\\\"@showVideoDetailsModal\\\",\\\"@imagesLoaded\\\",\\\"@videosLoaded\\\",\\\"@videoSeekPosition\\\",\\\"@regionBaselineId\\\",\\\"@regionSummaryBaseline\\\",\\\"@baselineSelectedSessionNum\\\",\\\"@byRegionBaselineId\\\",\\\"@baselineVideoSeekPosition\\\",\\\"@baselineImagesLoaded\\\"],[\\\"div\\\",\\\"unless\\\",\\\"if\\\",\\\"did-update\\\",\\\"and\\\",\\\"eq\\\",\\\"or\\\",\\\"strong\\\",\\\"a\\\",\\\"ui/icon\\\",\\\"on\\\",\\\"not\\\",\\\"fn\\\",\\\"h4\\\",\\\"print-number\\\",\\\"ui/info-icon\\\",\\\"bs-button-group\\\",\\\"mut\\\",\\\"videos-widget-filters\\\",\\\"videos-widget-detail\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/videos-widget.hbs\",\n    \"isStrictMode\": false\n  });\n  let VideosWidgetComponent = _exports.default = (_class = class VideosWidgetComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"uuid\", (0, _emberUuid.v4)());\n      _initializerDefineProperty(this, \"isLoaded\", _descriptor, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor2, this);\n      _initializerDefineProperty(this, \"videoCount\", _descriptor3, this);\n      _initializerDefineProperty(this, \"videoSelected\", _descriptor4, this);\n      _initializerDefineProperty(this, \"viewLayout\", _descriptor5, this);\n      _initializerDefineProperty(this, \"liveView\", _descriptor6, this);\n      _initializerDefineProperty(this, \"errorsOnly\", _descriptor7, this);\n      _initializerDefineProperty(this, \"receivedRtUpdate\", _descriptor8, this);\n      _initializerDefineProperty(this, \"selectedSession\", _descriptor9, this);\n    }\n    get isLiveTestAndRunning() {\n      return this.args.testType === 'Live' && !this.args.completed;\n    }\n    get supportsInteractiveSessions() {\n      return this.args.running && (!this.args.uuid || this.args.testType === 'Live' && this.args.isPublic);\n    }\n    get regionCount() {\n      return Array.from(this.args.byRegionId.values()).length;\n    }\n    get hasSingleVideo() {\n      return !this.args.isLoad && this.regionCount === 2;\n    }\n    getSelectedSession(selectedSessionNum) {\n      return this.args.sessionsList?.find(session => session.value === selectedSessionNum);\n    }\n    onUpdateSessionsList() {\n      if (this.args.sessionsList?.length > 1 && this.args.selectedSessionNum > 0) {\n        this.selectedSession = this.getSelectedSession(this.args.selectedSessionNum || 1);\n      }\n    }\n    removePanelAction(widgetId) {\n      this.args.removePanel(widgetId);\n    }\n    screenshotAction() {\n      this.args.screenshot?.();\n    }\n    onChangeSession(selectedSession) {\n      this.selectedSession = selectedSession;\n      this.args.onSelectSession?.(selectedSession);\n    }\n    onChangeVideoSession(selectedSession) {\n      this.selectedSession = this.getSelectedSession(selectedSession.sessionNum);\n      this.args.onSelectSession?.(selectedSession);\n    }\n    onSelectVideo(videoSelected, first = false) {\n      this.args.selectedVideo?.(videoSelected);\n      if (first && !_.isEmpty(this.videoSelected)) return;\n      this.videoSelected = videoSelected;\n    }\n    onSelectBaselineVideo(videoSelected, first = false) {\n      if (first) return;\n      this.args.onSelectBaselineSession?.(videoSelected);\n    }\n    updateVideoCountAction(count) {\n      this.videoCount = count;\n    }\n    updateErrorCountAction(count) {\n      this.errorCount = count;\n    }\n    updateErrorsOnlyAction(errorsOnly) {\n      this.errorsOnly = errorsOnly;\n    }\n    updateIsLoadedAction(isLoaded) {\n      this.isLoaded = isLoaded;\n    }\n    updateReceivedRtUpdateAction(receivedRtUpdate) {\n      this.receivedRtUpdate = receivedRtUpdate;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"videoCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"videoSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"viewLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'tile';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"liveView\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'videos';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"errorsOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'all';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"receivedRtUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"selectedSession\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"onUpdateSessionsList\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateSessionsList\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"removePanelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"removePanelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"screenshotAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"screenshotAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeVideoSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeVideoSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectVideo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectVideo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSelectBaselineVideo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSelectBaselineVideo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateVideoCountAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateVideoCountAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateErrorCountAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateErrorCountAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateErrorsOnlyAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateErrorsOnlyAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateIsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateIsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateReceivedRtUpdateAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateReceivedRtUpdateAction\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideosWidgetComponent);\n});","define(\"@testable/shared-ui/components/waiting-modal\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _lib, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div id=\"waitingModal\" class=\"modal fade\" data-backdrop=\"static\" data-keyboard=\"false\" tabindex=\"-1\" role=\"dialog\"\n       aria-hidden=\"true\" style={{html-safe \"padding-top:15%; overflow-y:visible;\"}}\n       {{did-insert this.didInsert}}>\n  >\n    <div class=\"modal-dialog modal-m\">\n      <div class=\"modal-content\">\n        <div class=\"modal-header\"><h3 style={{html-safe \"margin:0;\"}}>{{@message}}</h3></div>\n        <div class=\"modal-body\">\n          <div class=\"progress\">\n            <div class=\"progress-bar progress-bar-striped progress-bar-animated\" role=\"progressbar\" aria-valuenow=\"0\"\n                 aria-valuemin=\"0\" aria-valuemax=\"100\" style={{html-safe (concat \"width: \" this.progress \"%\")}}>\n              <span class=\"sr-only\">Awaiting Completion</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,1,\\\"waitingModal\\\"],[24,0,\\\"modal fade\\\"],[24,\\\"data-backdrop\\\",\\\"static\\\"],[24,\\\"data-keyboard\\\",\\\"false\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"aria-hidden\\\",\\\"true\\\"],[16,5,[28,[37,1],[\\\"padding-top:15%; overflow-y:visible;\\\"],null]],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n>\\\\n  \\\"],[10,0],[14,0,\\\"modal-dialog modal-m\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[10,\\\"h3\\\"],[15,5,[28,[37,1],[\\\"margin:0;\\\"],null]],[12],[1,[30,1]],[13],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"modal-body\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"progress\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"progress-bar progress-bar-striped progress-bar-animated\\\"],[14,\\\"role\\\",\\\"progressbar\\\"],[14,\\\"aria-valuenow\\\",\\\"0\\\"],[14,\\\"aria-valuemin\\\",\\\"0\\\"],[14,\\\"aria-valuemax\\\",\\\"100\\\"],[15,5,[28,[37,1],[[28,[37,4],[\\\"width: \\\",[30,0,[\\\"progress\\\"]],\\\"%\\\"],null]],null]],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Awaiting Completion\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@message\\\"],[\\\"div\\\",\\\"html-safe\\\",\\\"did-insert\\\",\\\"h3\\\",\\\"concat\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"@testable/shared-ui/components/waiting-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  let WaitingModalComponent = _exports.default = (_class = class WaitingModalComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"progress\", _descriptor, this);\n    }\n    animateProgressBar(start, end, timeMs) {\n      const self = this;\n      const range = end - start;\n      const stepMs = Math.ceil(timeMs / range);\n      let current = start;\n      const progressUpdater = setInterval(() => {\n        current += 1;\n        this.progress = current;\n\n        // todo: do glimmer support isDestroyed?\n        if (current >= end || self.isDestroyed) {\n          clearInterval(progressUpdater);\n        }\n      }, stepMs);\n    }\n    didInsert() {\n      const self = this;\n      $('#waitingModal').on('hidden.bs.modal', function () {\n        self.args.modalClosed();\n      });\n      $('#waitingModal').modal('show');\n      $('#waitingModal').on('shown.bs.modal', function () {\n        const p = self.args.promise;\n        if (p) {\n          p.then(function () {\n            $('#waitingModal').modal('hide');\n          }, function (err) {\n            _lib.default.error(err);\n            $('#waitingModal').modal('hide');\n          });\n        } else {\n          setTimeout(function () {\n            $('#waitingModal').modal('hide');\n          }, 120000);\n        }\n        self.animateProgressBar(0, 90, 5000);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"progress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, WaitingModalComponent);\n});","define(\"@testable/shared-ui/controllers/account/billing/change-plan-base\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@testable/shared-ui/utils/lib\"], function (_exports, _controller, _object, _tracking, _service, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ChangePlanBaseController = _exports.default = (_class = class ChangePlanBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"planDetails\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n    }\n    async loadPlan() {\n      this.isLoading = true;\n      try {\n        const planDetails = await this.api.billing.getPlan(this.model.psubId);\n        this.planDetails = planDetails;\n      } catch (error) {\n        _lib.default.fail(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"planDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadPlan\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadPlan\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/controllers/account/billing/subscription-base\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\"], function (_exports, _controller, _object, _tracking, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionBaseController = _exports.default = (_class = class SubscriptionBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"queryParams\", ['thisOrgOnly']);\n      _initializerDefineProperty(this, \"thisOrgOnly\", _descriptor, this);\n    }\n    updateSelectedOrg(orgId) {\n      (0, _runloop.next)(() => {\n        this.thisOrgOnly = orgId || false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"thisOrgOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updateSelectedOrg\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelectedOrg\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/controllers/account/billing/subscription-history-base\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\", \"@testable/shared-ui/utils/lib\"], function (_exports, _controller, _service, _tracking, _object, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let SubscriptionHistoryBaseController = _exports.default = (_class = class SubscriptionHistoryBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"queryParams\", ['thisOrgOnly']);\n      _initializerDefineProperty(this, \"subDetails\", _descriptor, this);\n      _initializerDefineProperty(this, \"accountSubscription\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"api\", _descriptor4, this);\n      _defineProperty(this, \"_thisOrgOnly\", null);\n      _defineProperty(this, \"_psubId\", null);\n      _defineProperty(this, \"_loadSeq\", 0);\n    }\n    set psubId(value) {\n      this._psubId = value;\n      if (value !== null && value !== undefined && this._thisOrgOnly !== null) {\n        this.loadData(value);\n      }\n    }\n    get psubId() {\n      return this._psubId;\n    }\n    set thisOrgOnly(value) {\n      this._thisOrgOnly = value;\n      if (this.psubId !== null && this.psubId !== undefined && value !== null) {\n        this.loadData(this.psubId);\n      }\n    }\n    get thisOrgOnly() {\n      return this._thisOrgOnly;\n    }\n    async loadData(psubId) {\n      const seq = ++this._loadSeq;\n      this.isLoading = true;\n      try {\n        const useOrgOnly = this.thisOrgOnly === 'false' ? false : this.thisOrgOnly;\n        const subDetails = await this.api.billing.getSubscriptionDetails(psubId, useOrgOnly);\n        if (seq !== this._loadSeq) return;\n        this.subDetails = subDetails;\n        if (this.thisOrgOnly && this.thisOrgOnly !== 'false') {\n          const accountSubscription = await this.api.billing.getSubscriptionDetails(psubId, false);\n          if (seq !== this._loadSeq) return;\n          this.accountSubscription = accountSubscription;\n        } else {\n          this.accountSubscription = null;\n        }\n      } catch (error) {\n        _lib.default.fail(error);\n      } finally {\n        if (seq === this._loadSeq) {\n          this.isLoading = false;\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"subDetails\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"accountSubscription\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"loadData\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loadData\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/controllers/application-base\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/login-redirect\"], function (_exports, _controller, _service, _object, _tracking, _runloop, _environment, _loginRedirect) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/login-redirect\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ApplicationBaseController = _exports.default = (_class = class ApplicationBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"aiAgent\", _descriptor2, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n      _defineProperty(this, \"stripeKey\", _environment.config.stripeKey);\n      _defineProperty(this, \"queryParams\", ['redirect']);\n      _initializerDefineProperty(this, \"redirect\", _descriptor3, this);\n      _initializerDefineProperty(this, \"sidebarCollapsed\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isMobileView\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selectedApp\", _descriptor6, this);\n    }\n    get isNoPlan() {\n      return !!_environment.config.currentUser.isNoPlan;\n    }\n    setupRedirect() {\n      if (window.location.href.includes('/oauth/authorize')) return;\n      if (_environment.config.currentUser.isLoggedIn) {\n        const redirect = this.redirect;\n        this.redirect = null;\n        if ((0, _loginRedirect.isRootRedirect)(redirect)) {\n          (0, _loginRedirect.clearRootRedirect)();\n        } else {\n          (0, _loginRedirect.redirectAfterLogin)(this.router, redirect, null);\n        }\n      }\n    }\n    _onResize() {\n      const isMobile = window.innerWidth < 768;\n      this.isMobileView = isMobile;\n      if (isMobile) {\n        this.sidebarCollapsed = false;\n        $('#page-container').removeClass('page-sidebar-minified');\n      } else {\n        const isCollapsed = window.localStorage.getItem(this.collapsedKey);\n        const sidebarCollapsed = isCollapsed !== null ? JSON.parse(isCollapsed) : true;\n        this.sidebarCollapsed = sidebarCollapsed;\n        if (sidebarCollapsed) {\n          $('#page-container').addClass('page-sidebar-minified');\n        }\n      }\n    }\n    stripeLoaded() {\n      if (_environment.config.stripeKey && window.Stripe) window.Stripe.setPublishableKey(_environment.config.stripeKey);\n    }\n    prepareSidebar() {\n      (0, _runloop.later)(() => {\n        if (this.sidebarCollapsed && this.currentUser.orgId) {\n          $('#page-container').addClass('page-sidebar-minified');\n        } else {\n          $('#page-container').removeClass('page-sidebar-minified');\n        }\n      }, 50);\n    }\n    toggleAiSidebar() {\n      this.aiAgent.toggleSidebar();\n    }\n    onEmbedModeChange() {\n      this.aiAgent.handleEmbedModeChange(this.showSidebarOnMainPage);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"aiAgent\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"redirect\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"sidebarCollapsed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isMobileView\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selectedApp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.modulePrefix;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"stripeLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stripeLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"prepareSidebar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"prepareSidebar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleAiSidebar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleAiSidebar\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onEmbedModeChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onEmbedModeChange\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/controllers/load-test-results-base\", [\"exports\", \"@ember/object\", \"@ember/runloop\", \"@ember/controller\", \"@testable/shared-ui/utils/lib\", \"lodash-es\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\"], function (_exports, _object, _runloop, _controller, _lib, _lodashEs, _service, _tracking, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/controller\",0,\"@testable/shared-ui/utils/lib\",0,\"lodash-es\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LoadTestResultsBaseController = _exports.default = (_class = class LoadTestResultsBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _defineProperty(this, \"queryParams\", ['dashboardId', 'compare', 'print', 'layout', {\n        resultsType: {\n          scope: 'controller'\n        }\n      }, {\n        limit: {\n          scope: 'controller'\n        }\n      }, {\n        period: {\n          scope: 'controller'\n        }\n      }, {\n        resourceId: {\n          scope: 'controller'\n        }\n      }, {\n        baselineResourceId: {\n          scope: 'controller'\n        }\n      }, {\n        regionId: {\n          scope: 'controller'\n        }\n      }]);\n      _initializerDefineProperty(this, \"print\", _descriptor2, this);\n      _initializerDefineProperty(this, \"compare\", _descriptor3, this);\n      _initializerDefineProperty(this, \"layout\", _descriptor4, this);\n      _initializerDefineProperty(this, \"viewLayout\", _descriptor5, this);\n      _initializerDefineProperty(this, \"hasDashboardChanges\", _descriptor6, this);\n      _initializerDefineProperty(this, \"currentlyLoading\", _descriptor7, this);\n      _initializerDefineProperty(this, \"getType\", _descriptor8, this);\n      _initializerDefineProperty(this, \"dashboardId\", _descriptor9, this);\n      _initializerDefineProperty(this, \"resultsType\", _descriptor0, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor1, this);\n      _initializerDefineProperty(this, \"period\", _descriptor10, this);\n      _initializerDefineProperty(this, \"resourceId\", _descriptor11, this);\n      _initializerDefineProperty(this, \"baselineResourceId\", _descriptor12, this);\n      _initializerDefineProperty(this, \"regionId\", _descriptor13, this);\n      _initializerDefineProperty(this, \"intervalsLoaded\", _descriptor14, this);\n      _initializerDefineProperty(this, \"baselineIntervalsLoaded\", _descriptor15, this);\n      _initializerDefineProperty(this, \"summaryHistoryLoaded\", _descriptor16, this);\n      _initializerDefineProperty(this, \"baselineSummaryHistoryLoaded\", _descriptor17, this);\n      _initializerDefineProperty(this, \"resourcesLoaded\", _descriptor18, this);\n      _initializerDefineProperty(this, \"baselineResourcesLoaded\", _descriptor19, this);\n      _initializerDefineProperty(this, \"imagesLoaded\", _descriptor20, this);\n      _initializerDefineProperty(this, \"baselineImagesLoaded\", _descriptor21, this);\n      _initializerDefineProperty(this, \"videosImagesLoaded\", _descriptor22, this);\n      _initializerDefineProperty(this, \"baselineVideosImagesLoaded\", _descriptor23, this);\n      _initializerDefineProperty(this, \"suiteImagesLoaded\", _descriptor24, this);\n      _initializerDefineProperty(this, \"baselineSuiteImagesLoaded\", _descriptor25, this);\n      _initializerDefineProperty(this, \"suiteSummariesLoaded\", _descriptor26, this);\n      _initializerDefineProperty(this, \"baselineSuiteSummariesLoaded\", _descriptor27, this);\n      _initializerDefineProperty(this, \"bucketsLoaded\", _descriptor28, this);\n      _initializerDefineProperty(this, \"baselineBucketsLoaded\", _descriptor29, this);\n      _defineProperty(this, \"currentUser\", _environment.config.currentUser);\n    }\n    get isViewer() {\n      return this.currentUser?.isViewer;\n    }\n    setType() {\n      let isBrowserBased = false;\n      if (this.layout !== 'customizable') {\n        if (this.viewLayout) {\n          isBrowserBased = this.viewLayout === 'loadTestResults';\n        } else {\n          isBrowserBased = this.model?.testType !== 'Load' && ['Selenium', 'Puppeteer', 'Playwright'].includes(this.model?.script?.scriptType);\n        }\n      }\n      this.getType = isBrowserBased ? '-browser' : '';\n    }\n    onPrintReady() {\n      if (this.print && this.intervalsLoaded && this.summaryHistoryLoaded && this.resourcesLoaded && this.imagesLoaded && this.videosImagesLoaded && this.suiteImagesLoaded && this.suiteSummariesLoaded && this.bucketsLoaded && (!this.compare || this.compare && this.baselineIntervalsLoaded && this.baselineSummaryHistoryLoaded && this.baselineResourcesLoaded && this.baselineImagesLoaded && this.baselineVideosImagesLoaded && this.baselineSuiteImagesLoaded && this.baselineSuiteSummariesLoaded && this.baselineBucketsLoaded)) {\n        setTimeout(() => {\n          if (window.htmlPdfCb) {\n            window.htmlPdfCb();\n          } else if (window.print) {\n            window.print();\n          }\n        }, 1000);\n      }\n    }\n    baselineResourcesLoadedAction(resource) {\n      if (resource && resource.id >= 0) {\n        // the resource level intervals/history/buckets will be loaded\n        this.baselineIntervalsLoaded = false;\n        this.baselineSummaryHistoryLoaded = false;\n        this.baselineBucketsLoaded = false;\n      }\n      this.baselineResourcesLoaded = true;\n      this.onPrintReady();\n    }\n    resourcesLoadedAction(resource) {\n      if (resource && resource.id >= 0) {\n        // the resource level intervals/history/buckets will be loaded\n        this.intervalsLoaded = false;\n        this.summaryHistoryLoaded = false;\n        this.bucketsLoaded = false;\n      }\n      this.resourcesLoaded = true;\n      this.onPrintReady();\n    }\n    intervalsLoadedAction() {\n      this.intervalsLoaded = true;\n      this.onPrintReady();\n    }\n    summaryHistoryLoadedAction() {\n      this.summaryHistoryLoaded = true;\n      this.onPrintReady();\n    }\n    suiteSummariesLoadedAction() {\n      this.suiteSummariesLoaded = true;\n      this.onPrintReady();\n    }\n    baselineIntervalsLoadedAction() {\n      this.baselineIntervalsLoaded = true;\n      this.onPrintReady();\n    }\n    baselineSummaryHistoryLoadedAction() {\n      this.baselineSummaryHistoryLoaded = true;\n      this.onPrintReady();\n    }\n    baselineSuiteSummariesLoadedAction() {\n      this.baselineSuiteSummariesLoaded = true;\n      this.onPrintReady();\n    }\n    onImagesLoaded() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.gallery-images img', () => {\n          this.imagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    baselineImagesLoadedAction() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.gallery-images.baseline img', () => {\n          this.baselineImagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    onVideosImagesLoaded() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.gallery-images.videos img', () => {\n          this.videosImagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    onVideoBaselineImagesLoaded() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.gallery-images.baseline.videos img', () => {\n          this.baselineVideosImagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    onSuiteImagesLoaded() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.suite-images .gallery-images img', () => {\n          this.suiteImagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    onBaselineSuiteImagesLoaded() {\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        _lib.default.waitForImages('.suite-images.baseline .gallery-images img', () => {\n          this.baselineSuiteImagesLoaded = true;\n          this.onPrintReady();\n        });\n      });\n    }\n    bucketsLoadedAction() {\n      this.bucketsLoaded = true;\n      this.onPrintReady();\n    }\n    baselineBucketsLoadedAction() {\n      this.baselineBucketsLoaded = true;\n      this.onPrintReady();\n    }\n    gotoUpdateConf(conf) {\n      this.router.transitionTo('update-test', conf);\n    }\n    executionStarted(execution) {\n      this.currentlyLoading = true;\n      this.hasDashboardChanges = false;\n      _lib.default.resetQueryParams(this);\n      (0, _runloop.scheduleOnce)('afterRender', this, () => {\n        this.router.transitionTo('loadTestResults', execution);\n        this.currentlyLoading = false;\n      });\n    }\n    executionDeleted() {\n      this.router.transitionTo('loadTest', this.model?.confId);\n    }\n    hasDashboardChanged(hasDashboardChanges) {\n      if (this.isViewer) return;\n      this.hasDashboardChanges = hasDashboardChanges;\n    }\n    transitionToRoute(path, id, params) {\n      const self = this;\n      if (path === 'loadTestResults' && id === this.model?.id && params) {\n        this.currentlyLoading = true;\n        this.hasDashboardChanges = false;\n        _lodashEs.default.forEach(params, (val, key) => {\n          (0, _object.set)(self, key, val);\n        });\n        (0, _runloop.scheduleOnce)('afterRender', this, () => {\n          this.currentlyLoading = false;\n        });\n      } else {\n        let routeProps = [path, id];\n        if (params) {\n          routeProps.push({\n            queryParams: params\n          });\n        }\n        this.router.transitionTo(...routeProps);\n      }\n    }\n\n    // QP sync callbacks from Glimmer component\n    onComparisonIdChanged(val) {\n      this.compare = val;\n      this.onPrintReady();\n    }\n    onDashboardIdChanged(val) {\n      this.dashboardId = val;\n    }\n    onQpDashboardIdChanged(val) {\n      this.dashboardId = val;\n    }\n    onQpResultsTypeChanged(val) {\n      this.resultsType = val;\n    }\n    onQpPeriodChanged(val) {\n      this.period = val;\n    }\n    onQpLimitChanged(val) {\n      this.limit = val;\n    }\n    onQpResourceIdChanged(val) {\n      this.resourceId = val;\n    }\n    onQpBaselineResourceIdChanged(val) {\n      this.baselineResourceId = val;\n    }\n    onQpRegionIdChanged(val) {\n      this.regionId = val;\n    }\n    onChangeLayout(viewLayout) {\n      const hadCompare = this.compare;\n      this.viewLayout = viewLayout;\n      this.setType();\n      this.hasDashboardChanges = true;\n      _lib.default.resetQueryParams(this);\n      const queryParams = {\n        layout: viewLayout === 'loadTestResultsView' ? 'customizable' : null\n      };\n      if (viewLayout === 'loadTestResults' && hadCompare) {\n        queryParams.compare = null;\n      }\n      this.router.transitionTo('loadTestResults', this.model?.id, {\n        queryParams\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"print\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"compare\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"layout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"viewLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"hasDashboardChanges\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"currentlyLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"getType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"dashboardId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"resultsType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"period\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"resourceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"baselineResourceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"regionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"intervalsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"baselineIntervalsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"summaryHistoryLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"baselineSummaryHistoryLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"resourcesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"baselineResourcesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"imagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"baselineImagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"videosImagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"baselineVideosImagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"suiteImagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"baselineSuiteImagesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"suiteSummariesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"baselineSuiteSummariesLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"bucketsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"baselineBucketsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setType\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onPrintReady\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPrintReady\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineResourcesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineResourcesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resourcesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resourcesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"intervalsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"intervalsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"summaryHistoryLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"summaryHistoryLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"suiteSummariesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"suiteSummariesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineIntervalsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineIntervalsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineSummaryHistoryLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineSummaryHistoryLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineSuiteSummariesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineSuiteSummariesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onImagesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onImagesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineImagesLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineImagesLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideosImagesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideosImagesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onVideoBaselineImagesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onVideoBaselineImagesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSuiteImagesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSuiteImagesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBaselineSuiteImagesLoaded\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBaselineSuiteImagesLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"bucketsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bucketsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"baselineBucketsLoadedAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"baselineBucketsLoadedAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoUpdateConf\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoUpdateConf\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"executionStarted\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"executionStarted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"executionDeleted\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"executionDeleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasDashboardChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"hasDashboardChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"transitionToRoute\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"transitionToRoute\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onComparisonIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onComparisonIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDashboardIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDashboardIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpDashboardIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpDashboardIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpResultsTypeChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpResultsTypeChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpPeriodChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpPeriodChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpLimitChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpLimitChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpResourceIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpResourceIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpBaselineResourceIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpBaselineResourceIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onQpRegionIdChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onQpRegionIdChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeLayout\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeLayout\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/controllers/reset-password-base\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\"], function (_exports, _controller, _service, _object, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ResetPasswordBaseController = _exports.default = (_class = class ResetPasswordBaseController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"showForgotPasswordModal\", _descriptor2, this);\n    }\n    passwordReset() {\n      this.router.transitionTo('index');\n    }\n    showForgotPassword() {\n      this.showForgotPasswordModal = true;\n    }\n    forgotPasswordModalClosed() {\n      this.showForgotPasswordModal = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showForgotPasswordModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"passwordReset\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"passwordReset\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showForgotPassword\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showForgotPassword\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"forgotPasswordModalClosed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"forgotPasswordModalClosed\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/helpers/add-auth-to-url\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([url]) {\n    return _lib.default.addAuthToUrl(url);\n  });\n});","define(\"@testable/shared-ui/helpers/ansi-to-html\", [\"exports\", \"@ember/component/helper\", \"@ember/template\", \"ansi-to-html\"], function (_exports, _helper, _template, _ansiToHtml) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/template\",0,\"ansi-to-html\"eaimeta@70e063a35619d71f\n  function ansiToHtml([ansiString, isHtmlSafe] /*, named*/) {\n    const converter = new _ansiToHtml.default();\n    const answer = converter.toHtml(ansiString);\n    return isHtmlSafe ? (0, _template.htmlSafe)(answer) : answer;\n  }\n  var _default = _exports.default = (0, _helper.helper)(ansiToHtml);\n});","define(\"@testable/shared-ui/helpers/camel-to-title\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.camelCaseToTitleCase(val);\n  });\n});","define(\"@testable/shared-ui/helpers/can-remove-user\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/environment\"], function (_exports, _helper, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.canRemoveUserHelper = canRemoveUserHelper;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function canRemoveUserHelper(config) {\n    return (0, _helper.helper)(function ([org, userAssoc, isAdmin]) {\n      return (isAdmin || userAssoc?.user?.id === config.currentUser.id) && org?.users?.length > 1 && (org.shared || org.name !== userAssoc?.user?.email);\n    });\n  }\n  var _default = _exports.default = canRemoveUserHelper(_environment.config);\n});","define(\"@testable/shared-ui/helpers/capitalize-text\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return _.isString(text) ? _.upperFirst(text) : text;\n  });\n});","define(\"@testable/shared-ui/helpers/contains-val\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([array, val]) {\n    return _.isArray(array) ? array.includes(val) : false;\n  });\n});","define(\"@testable/shared-ui/helpers/decode-test-case-name\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.decodeTestCaseName(val);\n  });\n});","define(\"@testable/shared-ui/helpers/disable-bubbling\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([action]) {\n    return function (event) {\n      event?.stopPropagation();\n      return action(event);\n    };\n  });\n});","define(\"@testable/shared-ui/helpers/ends-with\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([data, suffix]) {\n    return _lib.default.endsWith(data, suffix);\n  });\n});","define(\"@testable/shared-ui/helpers/find-metric\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([summary, ns, metric]) {\n    return _lib.default.findMetric(summary, ns, metric);\n  });\n});","define(\"@testable/shared-ui/helpers/generate-id\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  let id = 0;\n  var _default = _exports.default = (0, _helper.helper)(function () {\n    return id++;\n  });\n});","define(\"@testable/shared-ui/helpers/get-frequency-label-short\", [\"exports\", \"@ember/component/helper\", \"@ember/service\"], function (_exports, _helper, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let GetFrequencyLabelShort = _exports.default = (_class = class GetFrequencyLabelShort extends _helper.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n    }\n    compute([frequency]) {\n      return this.api.billing.getFrequencyLabelShort(frequency);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/helpers/get-health-service-color\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function getServiceTitle([color, transparency]) {\n    // available colors list\n    // aqua green indigo lime orange pink purple red yellow black blue grey silver teal\n\n    let typeMap = {\n      adminservice: \"aqua\",\n      aggregator: \"green\",\n      loadfinisher: \"indigo\",\n      priorityfinisher: \"lime\",\n      resultprocessor: \"orange\",\n      summarizer: \"pink\",\n      coordinator: \"purple\",\n      vucounter: \"red\",\n      gateway: \"yellow\",\n      sample: \"blue\",\n      integration: \"teal\"\n    };\n    return `bg-${typeMap[color]}-transparent-${transparency}`;\n  });\n});","define(\"@testable/shared-ui/helpers/get-health-service-max\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function getServiceTitle([services]) {\n    let service = {\n      lastUpdated: 0,\n      metrics: {\n        cpu: 0,\n        freeMemory: 0,\n        maxMemory: 0,\n        systemCpu: 0,\n        systemLoadAverage: 0,\n        totalMemory: 0\n      }\n    };\n    services && services.forEach(s => {\n      if (s.lastUpdated > service.lastUpdated) {\n        service.lastUpdated = s.lastUpdated;\n      }\n      if (s.metrics.cpu > service.metrics.cpu) {\n        service.metrics.cpu = s.metrics.cpu;\n      }\n      if (s.metrics.systemCpu > service.metrics.systemCpu) {\n        service.metrics.systemCpu = s.metrics.systemCpu;\n      }\n      if (s.metrics.systemLoadAverage > service.metrics.systemLoadAverage) {\n        service.metrics.systemLoadAverage = s.metrics.systemLoadAverage;\n      }\n      if (s.metrics.totalMemory > service.metrics.totalMemory) {\n        service.metrics.totalMemory = s.metrics.totalMemory;\n        service.metrics.freeMemory = s.metrics.freeMemory;\n        service.metrics.maxMemory = s.metrics.maxMemory;\n      }\n    });\n    return service;\n  });\n});","define(\"@testable/shared-ui/helpers/get-health-service-title\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function getServiceTitle([type]) {\n    let typeMap = {\n      adminservice: \"API\",\n      aggregator: \"Detailed Metric Aggregation\",\n      loadfinisher: \"Load Test Finalizer\",\n      priorityfinisher: \"Priority Test Finalizer\",\n      resultprocessor: \"Raw Result Storage\",\n      summarizer: \"Summary Metric Aggregation\",\n      coordinator: \"Test Coordination\",\n      vucounter: \"Virtual User Tracking\",\n      gateway: \"Gateway\",\n      sample: \"Sample\",\n      integration: \"Integration\"\n    };\n    return typeMap[type];\n  });\n});","define(\"@testable/shared-ui/helpers/get-imagediffclass\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  const DiffOkThreshold = 10;\n  const DiffAmberThreshold = 25;\n  var _default = _exports.default = (0, _helper.helper)(function ([diffPercent]) {\n    if (diffPercent <= DiffOkThreshold) {\n      return 'white';\n    } else if (diffPercent <= DiffAmberThreshold) {\n      return 'yellow';\n    } else {\n      return 'red';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/get-metric-title\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([ns, name, scriptType]) {\n    return _loadTest.default.getMetricTitle(ns, name, scriptType, true);\n  });\n});","define(\"@testable/shared-ui/helpers/get-regions\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(([provider]) => {\n    const regions = [];\n    if (provider.locations) {\n      provider.locations.forEach(location => {\n        if (location.regions && location.regions.length > 0) {\n          regions.push(...location.regions);\n        }\n      });\n    }\n    return regions;\n  });\n});","define(\"@testable/shared-ui/helpers/get-values\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([obj]) {\n    return _.values(obj);\n  });\n});","define(\"@testable/shared-ui/helpers/has-aggregators\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([ns, metric, metricDefs]) {\n    const metricDef = _loadTest.default.findMetricDef(ns, metric, metricDefs);\n    return !metricDef || !_.isBoolean(metricDef.calcAggregators) || metricDef.calcAggregators;\n  });\n});","define(\"@testable/shared-ui/helpers/has-feature\", [\"exports\", \"@ember/component/helper\", \"@ember/service\", \"@ember/utils\"], function (_exports, _helper, _service, _utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/service\",0,\"@ember/utils\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let HasFeature = _exports.default = (_class = class HasFeature extends _helper.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"orgAcl\", _descriptor, this);\n    }\n    compute([key]) {\n      let feature = this.orgAcl.lookup(key);\n      if (!(0, _utils.isEmpty)(feature.feature)) return feature.match;\n      return true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"orgAcl\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/helpers/html-safe\", [\"exports\", \"@ember/component/helper\", \"@ember/template\"], function (_exports, _helper, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/template\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return (0, _template.htmlSafe)(text || '');\n  });\n});","define(\"@testable/shared-ui/helpers/is-aws-public-shared-grid\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([provider]) {\n    if (provider.public && provider.providerType === 'Shared') {\n      var hasAwsRegion = false;\n      _.forEach(provider.locations, function (location) {\n        _.forEach(location.regions, function (region) {\n          if (!hasAwsRegion && region.name.indexOf('aws-') === 0) hasAwsRegion = true;\n        });\n      });\n      return hasAwsRegion;\n    }\n    return false;\n  });\n});","define(\"@testable/shared-ui/helpers/is-awslink-pending\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function () {\n    return _lib.default.isAwsLinkPending();\n  });\n});","define(\"@testable/shared-ui/helpers/is-boolean\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _.isBoolean(val);\n  });\n});","define(\"@testable/shared-ui/helpers/is-date-passed\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.isDatePassed(val);\n  });\n});","define(\"@testable/shared-ui/helpers/is-empty\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _.isEmpty(val);\n  });\n});","define(\"@testable/shared-ui/helpers/is-multi-user\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([scriptType]) {\n    return _loadTest.default.isMultiUser(scriptType);\n  });\n});","define(\"@testable/shared-ui/helpers/is-number\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.isNumber(val);\n  });\n});","define(\"@testable/shared-ui/helpers/is-object\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _.isObject(val);\n  });\n});","define(\"@testable/shared-ui/helpers/is-org-admin\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([currentUser, orgId]) {\n    return currentUser.accessType === 'Admin' || _.findIndex(currentUser.orgs, orgAssoc => {\n      return orgAssoc.organization.id === orgId && orgAssoc.userRole === 'Admin';\n    }) >= 0;\n  });\n});","define(\"@testable/shared-ui/helpers/is-undefined\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _.isUndefined(val);\n  });\n});","define(\"@testable/shared-ui/helpers/live-relative-duration\", [\"exports\", \"@ember/component/helper\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _tracking, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LiveRelativeDurationHelper = _exports.default = (_class = class LiveRelativeDurationHelper extends _helper.default {\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"_tick\", _descriptor, this);\n      _defineProperty(this, \"_interval\", null);\n      this._interval = setInterval(() => {\n        this._tick++;\n      }, _lib.default.RelativeDurationInterval);\n    }\n    compute([val, showFuture]) {\n      this._tick;\n      return _lib.default.liveRelativeDuration(val, showFuture);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_tick\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/helpers/lodash-function\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function (args) {\n    let [func, ...params] = args;\n    return _[func](...params);\n  });\n});","define(\"@testable/shared-ui/helpers/lookup-by-id\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([arr, id]) {\n    if (_.isArray(arr) && _.isString(id)) {\n      return _.find(arr, obj => {\n        return obj.id === id;\n      });\n    }\n    return null;\n  });\n});","define(\"@testable/shared-ui/helpers/lookup-regions\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.lookupRegionsHelper = lookupRegionsHelper;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  function lookupRegionsHelper(config) {\n    return (0, _helper.helper)(function ([providerId, regions]) {\n      let answer = [];\n      let provider = _.find(config.providers, p => {\n        return p.id === providerId;\n      });\n      if (provider && regions) {\n        _.forEach(regions.split(\",\"), regionId => {\n          _.forEach(provider.locations, location => {\n            let region = _.find(location.regions, r => {\n              return r.id === Number(regionId);\n            });\n            if (region) {\n              answer.push(region);\n            }\n          });\n        });\n      }\n      return answer;\n    });\n  }\n  var _default = _exports.default = lookupRegionsHelper;\n});","define(\"@testable/shared-ui/helpers/math-max\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val1, val2]) {\n    return Math.max(Number(val1), Number(val2));\n  });\n});","define(\"@testable/shared-ui/helpers/math-min\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val1, val2]) {\n    return Math.min(Number(val1), Number(val2));\n  });\n});","define(\"@testable/shared-ui/helpers/math-op\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val1, op, val2]) {\n    switch (op) {\n      case \"+\":\n        return Number(val1) + Number(val2);\n      case \"-\":\n        return Number(val1) - Number(val2);\n      case \"*\":\n        return Number(val1) * Number(val2);\n      case \"/\":\n        return Number(val1) / Number(val2);\n    }\n    return undefined;\n  });\n});","define(\"@testable/shared-ui/helpers/metric-label-class\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([metricType]) {\n    switch (metricType) {\n      case \"Counter\":\n        return \"label-primary\";\n      case \"Timing\":\n        return \"label-info\";\n      case \"Metered\":\n        return \"label-default\";\n      default:\n        return \"label-warning\";\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/optional\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.optional = optional;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  function optional([action]) {\n    if (typeof action === 'function') {\n      return action;\n    }\n    return i => i;\n  }\n  var _default = _exports.default = (0, _helper.helper)(optional);\n});","define(\"@testable/shared-ui/helpers/pick\", [\"exports\", \"@ember/component/helper\", \"@ember/object\"], function (_exports, _helper, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.pick = pick;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  function pick([path, action] /*, hash*/) {\n    return function (event) {\n      let value = (0, _object.get)(event, path);\n      if (!action) {\n        return value;\n      }\n      action(value);\n    };\n  }\n  var _default = _exports.default = (0, _helper.helper)(pick);\n});","define(\"@testable/shared-ui/helpers/print-browser-title\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.toBrowserVersionTitle(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-browser\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.toBrowserVersionText(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-bytes\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.printBytes(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-ccy\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([amount]) {\n    return _lib.default.printCcy(amount);\n  });\n});","define(\"@testable/shared-ui/helpers/print-change\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([change, textClass]) {\n    return _lib.default.printChange(change, textClass);\n  });\n});","define(\"@testable/shared-ui/helpers/print-date-utc\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val, format]) {\n    return _lib.default.displayDateUTC(val, format);\n  });\n});","define(\"@testable/shared-ui/helpers/print-date\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val, format]) {\n    return _lib.default.displayDate(val, format);\n  });\n});","define(\"@testable/shared-ui/helpers/print-datetime\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.displayTimestamp(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-datetimeminutes\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.displayTimestamp(val, 'L HH:mm Z');\n  });\n});","define(\"@testable/shared-ui/helpers/print-datetimesecs\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.displayTimestamp(val, 'L HH:mm:ss Z');\n  });\n});","define(\"@testable/shared-ui/helpers/print-device\", [\"exports\", \"@ember/component/helper\", \"@ember/service\"], function (_exports, _helper, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let PrintDeviceHelper = _exports.default = (_class = class PrintDeviceHelper extends _helper.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n    }\n    compute([val]) {\n      return this.api.browserManager.toDeviceText(val);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/helpers/print-duration\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.printDuration(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-exclusions\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([schedule]) {\n    return _lib.default.printExclusions(schedule);\n  });\n});","define(\"@testable/shared-ui/helpers/print-image\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\", \"@ember/service\"], function (_exports, _helper, _lib, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let PrintImageHelper = _exports.default = (_class = class PrintImageHelper extends _helper.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n    }\n    compute([image, execution, skipName]) {\n      if (image) {\n        let s = ``;\n        if (!skipName) s += `<strong>Name: </strong> ${image.name}<br>`;\n        s += `<strong>User #: </strong> ${image.globalConcurrentClientIndex}<br>` + `<strong>Iteration #: </strong> ${image.iteration}<br>`;\n        if (image.sessionNum || image.sessionNum === 0) {\n          s += `<strong>Session #: </strong> ${image.sessionNum ?? 'Not Session Specific'}<br>`;\n        }\n        if (execution) {\n          const executionRegion = _.find(execution.regions, executionRegion => {\n            return executionRegion && executionRegion.region && executionRegion.region.id === image.regionId;\n          });\n          if (executionRegion) {\n            s += `<strong>Region: </strong> ${executionRegion.region.description}`;\n          }\n        }\n        if (image.browser) s += `<br><strong>Browser: </strong> ${_lib.default.toBrowserVersionText(image.browser)}`;\n        if (image.device) s += `<br><strong>Device: </strong> ${this.api.browserManager.toDeviceText(image.device)}`;\n        if (image.duration) s += `<br><strong>Duration: </strong> ${_lib.default.printDurationFromMS(image.duration)}`;\n        return s;\n      }\n      return '';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/helpers/print-imagediffmode\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([mode]) {\n    switch (mode) {\n      case 'PreviousExecution':\n        return 'To Previous Test Run';\n      case 'ScenarioBaseline':\n        return 'To Baseline Images Uploaded to Scenario';\n      default:\n        return 'None';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-instance-type\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([instanceType]) {\n    return _loadTest.default.printInstanceType(instanceType);\n  });\n});","define(\"@testable/shared-ui/helpers/print-json\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([json]) {\n    return JSON.stringify(json, null, 2);\n  });\n});","define(\"@testable/shared-ui/helpers/print-metric\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([summary, ns, metric, units, lineBreak, metricDefs, showComparison, threshold, scriptType]) {\n    return _loadTest.default.printMetric(summary, ns, metric, units, lineBreak, metricDefs, showComparison, threshold, scriptType);\n  });\n});","define(\"@testable/shared-ui/helpers/print-network\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([network]) {\n    if (network) {\n      let answer = network.name + ' (';\n      answer += _lib.default.printKbps(network.download) + '/' + _lib.default.printKbps(network.upload) + ' ';\n      answer += network.latency + 'ms RTT';\n      if (network.packetLoss > 0) {\n        answer += ' ' + _lib.default.printNumber(network.packetLoss) + '% packet loss';\n      }\n      answer += ')';\n      return answer;\n    } else {\n      return '';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-notification-style\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([notificationStyle, isOnSuccess]) {\n    switch (notificationStyle) {\n      case 'First':\n        return isOnSuccess ? 'When Resolving Failure' : 'First Failure';\n      case 'Always':\n        return 'Always';\n      default:\n        return 'None';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-number\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.printNumber(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-operator\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([op]) {\n    switch (op) {\n      case 'GTE':\n        return '&gt;=';\n      case 'GreaterThan':\n        return '&gt;';\n      case 'LTE':\n        return '&lt;=';\n      case 'LessThan':\n        return '&lt;';\n      case 'Equals':\n        return '==';\n      case 'NotEquals':\n        return '!=';\n      default:\n        return '';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-percentage\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function printPercentage(params /*, hash*/) {\n    let first = params[0];\n    let second = params[1] || 100;\n    return Math.round(first / second * 10000) / 100 + ' %';\n  });\n});","define(\"@testable/shared-ui/helpers/print-plural\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text, count]) {\n    return _lib.default.pluralCheck(text, count);\n  });\n});","define(\"@testable/shared-ui/helpers/print-region-info\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([region]) {\n    if (region) {\n      return (region.description || region.name) + (region.name !== region.description ? ' (' + region.name + ')' : '');\n    }\n    return '';\n  });\n});","define(\"@testable/shared-ui/helpers/print-schedule\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([schedule]) {\n    return _lib.default.printSchedule(schedule);\n  });\n});","define(\"@testable/shared-ui/helpers/print-script\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([script]) {\n    if (!script) {\n      return '-';\n    }\n    if (script.sourceType) {\n      return script.sourceType;\n    }\n    switch (script.scriptType) {\n      case 'Code':\n        return 'Node.js';\n      default:\n        return script.scriptType;\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-scripttype\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([scriptType]) {\n    switch (scriptType) {\n      case 'Code':\n        return 'Node.js, Import HAR, Recording, HTTP GET';\n      case 'PhantomJs':\n        return 'PhantomJs, SlimerJs';\n      default:\n        return scriptType;\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-subnet\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([subnetType, subnet]) {\n    return _loadTest.default.printSubnet(subnetType, subnet);\n  });\n});","define(\"@testable/shared-ui/helpers/print-success-record\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([record]) {\n    if (record && record.total > 0) {\n      const success = record.success || 0;\n      const total = record.total;\n      const rate = Math.round(success / total * 10000) / 100;\n      const colorClass = rate === 100 ? 'success-rate-pass' : rate >= 90 ? 'success-rate-amber' : 'success-rate-fail';\n      return '<span class=\"success-rate-text ' + colorClass + '\">' + rate + '%<br/><span class=\"success-rate-subtext\">(' + _lib.default.printNumber(success) + ' / ' + _lib.default.printNumber(total) + ')</span></span>';\n    }\n    return '<span class=\"success-rate-text\">-</span>';\n  });\n});","define(\"@testable/shared-ui/helpers/print-test-short-summary\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([config, excludeLocation, isPerRegion]) {\n    return _loadTest.default.printShortSummary(config, excludeLocation, isPerRegion);\n  });\n});","define(\"@testable/shared-ui/helpers/print-testtype\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([testType]) {\n    switch (testType) {\n      case 'Monitor':\n        return 'synthetic monitor';\n      case 'Functional':\n        return 'functional test';\n      default:\n        return 'load test';\n    }\n  });\n});","define(\"@testable/shared-ui/helpers/print-time-from-ms\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.printDurationFromMS(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-time-hms\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.secondsToDhms(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-time\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return _lib.default.displayTime(val);\n  });\n});","define(\"@testable/shared-ui/helpers/print-unlimited-badge\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function () {\n    return '<span data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" data-bs-html=\"true\" title=\"' + _lib.default.UnlimitedTestingText + '\" class=\"label label-success m-l-10\">Unlimited Testing</span>';\n  });\n});","define(\"@testable/shared-ui/helpers/print-val\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val, units]) {\n    return _lib.default.print(val, units);\n  });\n});","define(\"@testable/shared-ui/helpers/print-vpc\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([vpc]) {\n    return _loadTest.default.printVpc(vpc);\n  });\n});","define(\"@testable/shared-ui/helpers/prop-lookup\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([obj, prop]) {\n    if (_.isObject(obj) && !_.isUndefined(obj[prop])) {\n      return obj[prop];\n    }\n    return '';\n  });\n});","define(\"@testable/shared-ui/helpers/region-popover\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.regionPopoverHelper = regionPopoverHelper;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function regionPopoverHelper(config) {\n    return (0, _helper.helper)(function ([regionMsg, regionFreeMemory, regionCpus, regionHosts, regionAgents, provider]) {\n      let answer = '<strong>Status:</strong> ' + regionMsg;\n      if (config.currentUser && config.currentUser.accessType === 'Admin' || provider && !provider.public) {\n        answer += '<br/>' + '<strong>Free Memory:</strong> ' + _lib.default.printBytes(regionFreeMemory) + '<br/>' + '<strong>vCPUs:</strong> ' + regionCpus + '<br/>' + '<strong>Hosts:</stong> ' + regionHosts + '<br/>' + '<strong>Test Runners:</stong> ' + regionAgents + '<br/>';\n      }\n      return answer;\n    });\n  }\n  var _default = _exports.default = regionPopoverHelper;\n});","define(\"@testable/shared-ui/helpers/render-markdown\", [\"exports\", \"@ember/component/helper\", \"@ember/template\", \"streaming-markdown\", \"highlight.js\"], function (_exports, _helper, _template, smd, _highlight) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.postProcessMarkdown = postProcessMarkdown;\n  _exports.renderMarkdown = renderMarkdown;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/template\",0,\"streaming-markdown\",0,\"highlight.js\"eaimeta@70e063a35619d71f\n  function sanitizeHtml(element) {\n    element.querySelectorAll('script, iframe, object, embed').forEach(el => el.remove());\n    element.querySelectorAll('*').forEach(el => {\n      [...el.attributes].forEach(attr => {\n        if (attr.name.startsWith('on')) el.removeAttribute(attr.name);\n      });\n    });\n  }\n  function postProcessMarkdown(element) {\n    sanitizeHtml(element);\n    element.querySelectorAll('pre code').forEach(block => _highlight.default.highlightElement(block));\n    element.querySelectorAll('a').forEach(a => {\n      const trailing = a.textContent.match(/[,.;:!?]+$/);\n      if (trailing && a.getAttribute('href')?.endsWith(trailing[0])) {\n        const text = a.textContent.slice(0, -trailing[0].length);\n        a.setAttribute('href', a.getAttribute('href').slice(0, -trailing[0].length));\n        a.textContent = text;\n        a.after(trailing[0]);\n      }\n      a.target = '_blank';\n      a.rel = 'noopener noreferrer';\n    });\n  }\n  function renderMarkdown([content]) {\n    if (!content) return '';\n    const temp = document.createElement('div');\n    const renderer = smd.default_renderer(temp);\n    const p = smd.parser(renderer);\n    smd.parser_write(p, content);\n    smd.parser_end(p);\n    postProcessMarkdown(temp);\n    return (0, _template.htmlSafe)(temp.innerHTML);\n  }\n  var _default = _exports.default = (0, _helper.helper)(renderMarkdown);\n});","define(\"@testable/shared-ui/helpers/set-page-title\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([pageTitle]) {\n    if (pageTitle) $(document).attr('title', `${pageTitle} - Testable`);\n  });\n});","define(\"@testable/shared-ui/helpers/sort-by-ts\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([arr, field]) {\n    const sorted = arr ? [...arr] : arr;\n    _lib.default.sortByMoment(sorted, [field]);\n    return sorted;\n  });\n});","define(\"@testable/shared-ui/helpers/sorted-scripttype\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/helpers/print-scripttype\"], function (_exports, _helper, _printScripttype) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/helpers/print-scripttype\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([data, key = false]) {\n    if (!data) return data;\n    const parseData = key ? Object.keys(data) : data;\n    const sortedData = parseData.sort((a, b) => {\n      const first = _printScripttype.default.compute([a]);\n      const second = _printScripttype.default.compute([b]);\n      return first > second ? 1 : -1;\n    });\n    if (!key) {\n      return sortedData;\n    }\n    const sortedObj = {};\n    sortedData.forEach(key => {\n      sortedObj[key] = data[key];\n    });\n    return sortedObj;\n  });\n});","define(\"@testable/shared-ui/helpers/split-text\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return _.isString(text) ? text.split(',') : [];\n  });\n});","define(\"@testable/shared-ui/helpers/started-at-popover\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([createdAt, startedAt, finishedAt, queueStartedAt, queueFinishedAt, note]) {\n    return createdAt ? _loadTest.default.buildStartedAtPopover(createdAt, startedAt, finishedAt, queueStartedAt, queueFinishedAt, note) : '';\n  });\n});","define(\"@testable/shared-ui/helpers/starts-with\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([data, start]) {\n    return data.indexOf(start) === 0;\n  });\n});","define(\"@testable/shared-ui/helpers/text-to-html\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return _lib.default.textToHtml(text);\n  });\n});","define(\"@testable/shared-ui/helpers/to-execution-outcome-html\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([execution, large, showPopover, xs]) {\n    return _loadTest.default.getExecutionOutcomeHtml(execution, large, showPopover, xs);\n  });\n});","define(\"@testable/shared-ui/helpers/to-html\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\", \"xss\"], function (_exports, _helper, _lib, _xss) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.sanitizeHtml = sanitizeHtml;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\",0,\"xss\"eaimeta@70e063a35619d71f\n  const options = {\n    whiteList: {\n      ..._xss.default.whiteList,\n      label: ['class'],\n      input: ['id', 'class', 'type']\n    }\n  };\n  const sanitizeAttributes = (str, allowedTags) => {\n    return str.replace(/<(\\w+)([^>]*)>/gi, (match, tagName, attributes) => {\n      if (allowedTags.includes(tagName)) {\n        if (tagName === 'a') {\n          attributes = attributes.replace(/href\\s*(=\\s*[\"']?([^\"'>]*)[\"']?)?/gi, (attrMatch, eqSign, url) => {\n            if (!url) return;\n            url = url.replace(/javascript:/gi, '').trim();\n            return url ? `href=\"${url}\"` : '';\n          });\n        }\n        attributes = attributes.replace(/\\s*on\\w+\\s*=\\s*[\"'][^\"']*[\"']/gi, '').replace(/\\s*on\\w+\\s*=\\s*[^ >]+/gi, '').replace(/javascript:/gi, '');\n        return `<${tagName}${attributes}>`;\n      }\n      return match;\n    });\n  };\n  const replaceTags = (str, allowedTags = ['strong', 'p', 'a']) => {\n    str = sanitizeAttributes(str, allowedTags);\n    return str.replace(/<\\/?[^>]+>/g, match => {\n      const tagName = match.replace(/[<\\/>]/g, '').split(' ')[0];\n      return allowedTags.includes(tagName) ? match : match.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    });\n  };\n  function sanitizeHtml([html, contentType = null, encoded]) {\n    if (!html) return '';\n    html = (0, _xss.default)(html, options);\n    html = replaceTags(html, ['strong', 'p', 'b', 'i', 'u', 'br', 'a', 'table', 'tr', 'td', 'th', 'thead', 'tbody']);\n    if (contentType === 'alert') {\n      html = _lib.default.htmlDecode(html);\n    } else if (contentType !== 'html' && !(contentType === 'tooltip' && encoded)) {\n      html = _lib.default.htmlEncode(html, true);\n    }\n    return html;\n  }\n  var _default = _exports.default = (0, _helper.helper)(sanitizeHtml);\n});","define(\"@testable/shared-ui/helpers/to-lowercase\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return _.isString(text) ? text.toLowerCase() : text;\n  });\n});","define(\"@testable/shared-ui/helpers/to-metric-name\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([metricDef, scriptType]) {\n    return _loadTest.default.toMetricName(metricDef, scriptType);\n  });\n});","define(\"@testable/shared-ui/helpers/to-metric-style\", [\"exports\", \"@ember/template\", \"@ember/component/helper\"], function (_exports, _template, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template\",0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([selected, color]) {\n    return (0, _template.htmlSafe)(`\n      cursor: pointer;\n      font-size: 11px;\n      width:150px;\n      padding: ${selected ? '3' : '6'}px;\n      border-width: ${selected ? '4' : '1'}px;\n      border-color: ${selected ? color + ' !important' : ''} ;\n      `);\n  });\n});","define(\"@testable/shared-ui/helpers/to-number\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return Number(val);\n  });\n});","define(\"@testable/shared-ui/helpers/to-outcome-html\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _helper, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([success]) {\n    let boolSuccess = _.isString(success) ? success === \"true\" : _.isBoolean(success) ? success : undefined;\n    return _loadTest.default.getOutcomeHtml(_loadTest.default.getExecutionSuccessOutcomeOrder(boolSuccess));\n  });\n});","define(\"@testable/shared-ui/helpers/to-string\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val]) {\n    return '' + val;\n  });\n});","define(\"@testable/shared-ui/helpers/to-url\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([url]) {\n    return _lib.default.toUrl(url);\n  });\n});","define(\"@testable/shared-ui/helpers/truncate-string\", [\"exports\", \"@ember/component/helper\", \"@testable/shared-ui/utils/lib\"], function (_exports, _helper, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([val, width, noFloat, tooltip, extraClasses]) {\n    const content = _lib.default.htmlEncode(tooltip || val, true);\n    const s = typeof width === 'string' ? content : _lib.default.truncateString(content, width || 100, false);\n    tooltip = _lib.default.textToHtmlWithSpaces(content).replace(/&gt;/g, '&gtdot;').replace(/&lt;/g, '&ltdot;');\n    if (!_.isString(tooltip) || tooltip === 'true' || !tooltip) return '';\n    if (tooltip === 'null') return tooltip;\n    return `<span\n            class=\"${noFloat ? 'truncate-no-float' : 'truncate'} ${extraClasses || ''}\"\n            style=\"max-width: ${typeof width === 'string' ? width : width + '%'};\"\n            data-bs-toggle=\"tooltip\"\n            data-bs-html=\"true\"\n            data-bs-trigger=\"hover\"\n            data-bs-title=\"${tooltip}\">${s}</span>`;\n  });\n});","define(\"@testable/shared-ui/helpers/truncate\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text, length]) {\n    if (!_.isString(text)) return text;\n    if (!length || text.length <= length) return text;\n    return text.substring(0, length) + '...';\n  });\n});","define(\"@testable/shared-ui/helpers/uppercase\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function ([text]) {\n    return _.isString(text) ? text.toUpperCase() : text;\n  });\n});","define(\"@testable/shared-ui/models/command-stream-error\", [\"exports\", \"@glimmer/tracking\"], function (_exports, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let CommandStreamError = (_class = class CommandStreamError {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"createdAt\", _descriptor2, this);\n      _initializerDefineProperty(this, \"updatedAt\", _descriptor3, this);\n      _initializerDefineProperty(this, \"commandErrorId\", _descriptor4, this);\n      _initializerDefineProperty(this, \"count\", _descriptor5, this);\n      _initializerDefineProperty(this, \"firstVersion\", _descriptor6, this);\n      _initializerDefineProperty(this, \"commandError\", _descriptor7, this);\n      _initializerDefineProperty(this, \"collapse\", _descriptor8, this);\n      this.id = data.id;\n      this.createdAt = data.createdAt;\n      this.updatedAt = data.updatedAt;\n      this.count = data.count;\n      this.firstVersion = data.firstVersion;\n      this.commandErrorId = data.commandErrorId;\n      this.commandError = data.commandError;\n\n      // internal use\n      this.limit = data.limit;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"createdAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"updatedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"commandErrorId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"count\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"firstVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"commandError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"collapse\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  var _default = _exports.default = CommandStreamError;\n});","define(\"@testable/shared-ui/models/command-stream-summary\", [\"exports\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/models/command-summary\"], function (_exports, _tracking, _trackedBuiltIns, _commandSummary) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.CommandStreamComparison = CommandStreamComparison;\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/models/command-summary\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let CommandStreamSummary = (_class = class CommandStreamSummary {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"createdAt\", _descriptor2, this);\n      _initializerDefineProperty(this, \"updatedAt\", _descriptor3, this);\n      _initializerDefineProperty(this, \"executionId\", _descriptor4, this);\n      _initializerDefineProperty(this, \"durationMean\", _descriptor5, this);\n      _initializerDefineProperty(this, \"count\", _descriptor6, this);\n      _initializerDefineProperty(this, \"commandCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"statePassed\", _descriptor8, this);\n      _initializerDefineProperty(this, \"stateFailed\", _descriptor9, this);\n      _initializerDefineProperty(this, \"stateInProgress\", _descriptor0, this);\n      _initializerDefineProperty(this, \"images\", _descriptor1, this);\n      _initializerDefineProperty(this, \"files\", _descriptor10, this);\n      _initializerDefineProperty(this, \"firstStartedAt\", _descriptor11, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor12, this);\n      _initializerDefineProperty(this, \"commandSummaries\", _descriptor13, this);\n      _initializerDefineProperty(this, \"comparisons\", _descriptor14, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor15, this);\n      this.id = data.id;\n      this.createdAt = data.createdAt;\n      this.updatedAt = data.updatedAt;\n      this.executionId = data.executionId;\n      this.durationMean = data.durationMean;\n      this.count = data.count;\n      this.commandCount = data.commandCount;\n      this.statePassed = data.statePassed;\n      this.stateFailed = data.stateFailed;\n      this.stateInProgress = data.stateInProgress;\n      this.images = data.images;\n      this.files = data.files;\n      this.firstStartedAt = data.firstStartedAt;\n      this.browser = data.browser;\n      this.comparisons = data.comparisons ? CommandStreamComparison(this, data.comparisons) : null;\n      this.commandSummaries = new _trackedBuiltIns.TrackedArray(data.commandSummaries.map(cmd => new _commandSummary.default(cmd)));\n\n      // internal use\n      this.limit = data.limit;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"createdAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"updatedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"executionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"durationMean\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"count\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"commandCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"statePassed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"stateFailed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"stateInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"images\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"files\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"firstStartedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"commandSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"comparisons\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  var _default = _exports.default = CommandStreamSummary;\n  function CommandStreamComparison(summary, comparisons) {\n    const fieldsToCompare = {\n      commandCount: summary.commandCount,\n      statePassed: summary.statePassed,\n      stateFailed: summary.stateFailed,\n      durationMean: summary.durationMean,\n      images: summary.images,\n      files: summary.file\n    };\n    if (_.isString(comparisons) && comparisons.length > 0) {\n      comparisons = JSON.parse(comparisons);\n    }\n    const baseline = {};\n    if (comparisons && comparisons.historyCount > 0) {\n      const historyCount = comparisons.historyCount;\n      _.forEach(comparisons, (val, key) => {\n        if (key !== 'historyCount' && _.isNumber(val)) {\n          baseline[key] = val / historyCount;\n        }\n      });\n    }\n    addPercents(baseline);\n    const answer = {};\n    _.forEach(fieldsToCompare, (val, key) => {\n      if (_.isNumber(val) && baseline[key] > 0) {\n        answer[key] = val / baseline[key] - 1;\n      }\n    });\n    return answer;\n  }\n  function addPercents(summary) {\n    const count = summary.testCount || summary.count;\n    if (count > 0) {\n      summary.commandCountPercent = (summary.commandCount || 0) / count;\n      summary.statePassedPercent = (summary.statePassed || 0) / count;\n      summary.stateFailedPercent = (summary.stateFailed || 0) / count;\n      summary.imagesPercent = (summary.images || 0) / count;\n      summary.filesPercent = (summary.files || 0) / count;\n    }\n  }\n});","define(\"@testable/shared-ui/models/command-stream\", [\"exports\", \"@glimmer/tracking\"], function (_exports, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let CommandStream = (_class = class CommandStream {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"createdAt\", _descriptor2, this);\n      _initializerDefineProperty(this, \"updatedAt\", _descriptor3, this);\n      _initializerDefineProperty(this, \"uuid\", _descriptor4, this);\n      _initializerDefineProperty(this, \"executionId\", _descriptor5, this);\n      _initializerDefineProperty(this, \"executionRegionId\", _descriptor6, this);\n      _initializerDefineProperty(this, \"chunkId\", _descriptor7, this);\n      _initializerDefineProperty(this, \"startedAt\", _descriptor8, this);\n      _initializerDefineProperty(this, \"finishedAt\", _descriptor9, this);\n      _initializerDefineProperty(this, \"duration\", _descriptor0, this);\n      _initializerDefineProperty(this, \"iterationId\", _descriptor1, this);\n      _initializerDefineProperty(this, \"agentId\", _descriptor10, this);\n      _initializerDefineProperty(this, \"threadId\", _descriptor11, this);\n      _initializerDefineProperty(this, \"chunkIndex\", _descriptor12, this);\n      _initializerDefineProperty(this, \"concurrentClientIndex\", _descriptor13, this);\n      _initializerDefineProperty(this, \"globalConcurrentClientIndex\", _descriptor14, this);\n      _initializerDefineProperty(this, \"regionalConcurrentClientIndex\", _descriptor15, this);\n      _initializerDefineProperty(this, \"iteration\", _descriptor16, this);\n      _initializerDefineProperty(this, \"hasError\", _descriptor17, this);\n      _initializerDefineProperty(this, \"browser\", _descriptor18, this);\n      _initializerDefineProperty(this, \"sessionNum\", _descriptor19, this);\n      _initializerDefineProperty(this, \"statePassed\", _descriptor20, this);\n      _initializerDefineProperty(this, \"stateFailed\", _descriptor21, this);\n      _initializerDefineProperty(this, \"stateInProgress\", _descriptor22, this);\n      _initializerDefineProperty(this, \"commandCount\", _descriptor23, this);\n      _initializerDefineProperty(this, \"commands\", _descriptor24, this);\n      _initializerDefineProperty(this, \"firstVersion\", _descriptor25, this);\n      _initializerDefineProperty(this, \"loadedCommands\", _descriptor26, this);\n      _initializerDefineProperty(this, \"totalCommands\", _descriptor27, this);\n      _initializerDefineProperty(this, \"limit\", _descriptor28, this);\n      this.id = data.id;\n      this.createdAt = data.createdAt;\n      this.updatedAt = data.updatedAt;\n      this.uuid = data.uuid;\n      this.executionId = data.executionId;\n      this.executionRegionId = data.executionRegionId;\n      this.chunkId = data.chunkId;\n      this.startedAt = data.startedAt;\n      this.finishedAt = data.finishedAt;\n      this.duration = data.duration;\n      this.iterationId = data.iterationId;\n      this.agentId = data.agentId;\n      this.threadId = data.threadId;\n      this.chunkIndex = data.chunkIndex;\n      this.concurrentClientIndex = data.concurrentClientIndex;\n      this.globalConcurrentClientIndex = data.globalConcurrentClientIndex;\n      this.regionalConcurrentClientIndex = data.regionalConcurrentClientIndex;\n      this.iteration = data.iteration;\n      this.hasError = data.hasError;\n      this.browser = data.browser;\n      this.sessionNum = data.sessionNum;\n      this.statePassed = data.statePassed;\n      this.stateFailed = data.stateFailed;\n      this.stateInProgress = data.stateInProgress;\n      this.commandCount = data.commandCount;\n      this.commands = data.commands;\n      this.firstVersion = data.firstVersion;\n      this.loadedCommands = 0;\n      this.totalCommands = 0;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"createdAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"updatedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"uuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"executionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"executionRegionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"chunkId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"startedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"finishedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"duration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"iterationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"agentId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"threadId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"chunkIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"concurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"globalConcurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"regionalConcurrentClientIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"iteration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"hasError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"browser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"sessionNum\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"statePassed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"stateFailed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"stateInProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"commandCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"commands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"firstVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"loadedCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"totalCommands\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"limit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  var _default = _exports.default = CommandStream;\n});","define(\"@testable/shared-ui/models/command-summary\", [\"exports\", \"tracked-built-ins\"], function (_exports, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.CommandComparison = CommandComparison;\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14;\n  0; //eaimeta@70e063a35619d71f0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let CommandSummary = (_class = class CommandSummary {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"createdAt\", _descriptor2, this);\n      _initializerDefineProperty(this, \"updatedAt\", _descriptor3, this);\n      _initializerDefineProperty(this, \"commandNameId\", _descriptor4, this);\n      _initializerDefineProperty(this, \"description\", _descriptor5, this);\n      _initializerDefineProperty(this, \"startOffsetMean\", _descriptor6, this);\n      _initializerDefineProperty(this, \"durationMean\", _descriptor7, this);\n      _initializerDefineProperty(this, \"count\", _descriptor8, this);\n      _initializerDefineProperty(this, \"statePassed\", _descriptor9, this);\n      _initializerDefineProperty(this, \"stateFailed\", _descriptor0, this);\n      _initializerDefineProperty(this, \"stateInProgress\", _descriptor1, this);\n      _initializerDefineProperty(this, \"images\", _descriptor10, this);\n      _initializerDefineProperty(this, \"files\", _descriptor11, this);\n      _initializerDefineProperty(this, \"firstStartedAt\", _descriptor12, this);\n      _initializerDefineProperty(this, \"firstVersion\", _descriptor13, this);\n      _initializerDefineProperty(this, \"comparisons\", _descriptor14, this);\n      _defineProperty(this, \"errors\", (0, _trackedBuiltIns.tracked)([]));\n      _defineProperty(this, \"commandName\", (0, _trackedBuiltIns.tracked)({}));\n      this.id = data.id;\n      this.createdAt = data.createdAt;\n      this.updatedAt = data.updatedAt;\n      this.commandNameId = data.commandNameId;\n      this.description = data.description;\n      this.startOffsetMean = data.startOffsetMean;\n      this.durationMean = data.durationMean;\n      this.count = data.count;\n      this.statePassed = data.statePassed;\n      this.stateFailed = data.stateFailed;\n      this.stateInProgress = data.stateInProgress;\n      this.images = data.images;\n      this.files = data.files;\n      this.firstStartedAt = data.firstStartedAt;\n      this.firstVersion = data.firstVersion;\n      this.comparisons = data.comparisons ? CommandComparison(this, data.comparisons) : null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"createdAt\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"updatedAt\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"commandNameId\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"description\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"startOffsetMean\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"durationMean\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"count\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"statePassed\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"stateFailed\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"stateInProgress\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"images\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"files\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"firstStartedAt\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"firstVersion\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"comparisons\", [_trackedBuiltIns.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  var _default = _exports.default = CommandSummary;\n  function CommandComparison(summary, comparisons) {\n    const fieldsToCompare = {\n      statePassed: summary.statePassed,\n      stateFailed: summary.stateFailed,\n      durationMean: summary.durationMean,\n      startOffsetMean: summary.startOffsetMean,\n      images: summary.images,\n      files: summary.file\n    };\n    if (_.isString(comparisons) && comparisons.length > 0) {\n      comparisons = JSON.parse(comparisons);\n    }\n    const baseline = {};\n    if (comparisons && comparisons.historyCount > 0) {\n      const historyCount = comparisons.historyCount;\n      _.forEach(comparisons, (val, key) => {\n        if (key !== 'historyCount' && _.isNumber(val)) {\n          baseline[key] = val / historyCount;\n        }\n      });\n    }\n    addPercents(baseline);\n    const answer = {};\n    _.forEach(fieldsToCompare, (val, key) => {\n      if (_.isNumber(val) && baseline[key] > 0) {\n        answer[key] = val / baseline[key] - 1;\n      }\n    });\n    return answer;\n  }\n  function addPercents(summary) {\n    const count = summary.testCount || summary.count;\n    if (count > 0) {\n      summary.commandCountPercent = (summary.commandCount || 0) / count;\n      summary.statePassedPercent = (summary.statePassed || 0) / count;\n      summary.stateFailedPercent = (summary.stateFailed || 0) / count;\n      summary.imagesPercent = (summary.images || 0) / count;\n      summary.filesPercent = (summary.files || 0) / count;\n    }\n  }\n});","define(\"@testable/shared-ui/models/command\", [\"exports\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\"], function (_exports, _tracking, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.toBrowserVersion = toBrowserVersion;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let Command = (_class = class Command {\n    constructor(data) {\n      _initializerDefineProperty(this, \"id\", _descriptor, this);\n      _initializerDefineProperty(this, \"createdAt\", _descriptor2, this);\n      _initializerDefineProperty(this, \"updatedAt\", _descriptor3, this);\n      _initializerDefineProperty(this, \"uuid\", _descriptor4, this);\n      _initializerDefineProperty(this, \"command\", _descriptor5, this);\n      _initializerDefineProperty(this, \"description\", _descriptor6, this);\n      _initializerDefineProperty(this, \"params\", _descriptor7, this);\n      _initializerDefineProperty(this, \"startOffset\", _descriptor8, this);\n      _initializerDefineProperty(this, \"startedAt\", _descriptor9, this);\n      _initializerDefineProperty(this, \"finishedAt\", _descriptor0, this);\n      _initializerDefineProperty(this, \"duration\", _descriptor1, this);\n      _initializerDefineProperty(this, \"status\", _descriptor10, this);\n      _initializerDefineProperty(this, \"state\", _descriptor11, this);\n      _initializerDefineProperty(this, \"commandName\", _descriptor12, this);\n      // {}\n      _initializerDefineProperty(this, \"screenshots\", _descriptor13, this);\n      _initializerDefineProperty(this, \"parentId\", _descriptor14, this);\n      _initializerDefineProperty(this, \"firstVersion\", _descriptor15, this);\n      _initializerDefineProperty(this, \"error\", _descriptor16, this);\n      _initializerDefineProperty(this, \"subDescription\", _descriptor17, this);\n      _initializerDefineProperty(this, \"detailed\", _descriptor18, this);\n      _initializerDefineProperty(this, \"videoOffset\", _descriptor19, this);\n      this.id = data.id;\n      this.createdAt = data.createdAt;\n      this.updatedAt = data.updatedAt;\n      this.uuid = data.uuid;\n      this.command = data.command;\n      this.description = data.description;\n      this.params = data.params;\n      this.startOffset = data.startOffset;\n      this.startedAt = data.startedAt;\n      this.finishedAt = data.finishedAt;\n      this.duration = data.duration;\n      this.status = data.status;\n      this.state = data.state;\n      this.commandName = data.commandName;\n      this.screenshots = data.screenshots;\n      this.parentId = data.parentId;\n      this.firstVersion = data.firstVersion;\n      this.error = data.error;\n      this.subDescription = data.subDescription;\n      this.detailed = data.detailed;\n      this.videoOffset = data.videoOffset;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"createdAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"updatedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"uuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"command\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"description\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"params\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"startOffset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"startedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"finishedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"duration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"status\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"state\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"commandName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"screenshots\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"parentId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"firstVersion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"error\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"subDescription\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"detailed\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"videoOffset\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  var _default = _exports.default = Command;\n  function toBrowserVersion(title) {\n    if (title) {\n      let cmdParts = title.split('-');\n      let browser = cmdParts[0];\n      let versionParts = cmdParts[1].split('.');\n      let version = versionParts[0] + (versionParts[1] > 0 ? '.' + versionParts[1] : '');\n      return `${_lib.default.ucFirst(browser)} v${version}`;\n    }\n    return '';\n  }\n});","define(\"@testable/shared-ui/models/conf-group-info\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/models/conf-info\", \"@testable/shared-ui/models/test-location-info\", \"@ember/service\"], function (_exports, _object, _tracking, _lib, _loadTest, _server, _confInfo, _testLocationInfo, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/models/conf-info\",0,\"@testable/shared-ui/models/test-location-info\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const PageSize = 30;\n  function doesConfMatchFilter(lastRun, runningStats, filter, lastExecution) {\n    return doesMatchFilter(1, lastRun, lastExecution && lastExecution.success, lastExecution && _.isBoolean(lastExecution.success) && !lastExecution.success, runningStats, filter);\n  }\n  function toStartTimestamp(filter) {\n    switch (filter) {\n      case 'today':\n        return moment().hours(0).minutes(0).seconds(0).milliseconds(0);\n      case 'yesterday':\n        return moment().hours(0).minutes(0).seconds(0).milliseconds(0).subtract(1, 'days');\n      case '7d':\n      case '30d':\n      case '90d':\n        {\n          let days = Number(filter.substring(0, filter.length - 1));\n          return moment().hours(0).minutes(0).seconds(0).milliseconds(0).subtract(days, 'days');\n        }\n    }\n  }\n  function doesMatchFilter(confCount, lastRun, hasPassing, hasFailing, runningStats, filter) {\n    switch (filter) {\n      case 'all':\n        return true;\n      case 'hasConf':\n        return confCount > 0;\n      case 'passing':\n        return hasPassing;\n      case 'failing':\n        return hasFailing;\n      case 'running':\n        return runningStats.count > 0;\n      case 'scheduled':\n        return runningStats.scheduled > 0;\n      case 'today':\n      case 'yesterday':\n      case '7d':\n      case '30d':\n      case '90d':\n        return toStartTimestamp(filter).isSameOrBefore(lastRun);\n      default:\n        return true;\n    }\n  }\n  function sortItems(items, sort) {\n    return _.sortBy(items, item => {\n      switch (sort) {\n        case 'lastRun':\n          return -1 * item.lastRun;\n        case 'lexical':\n          return item.name ? item.name.toLowerCase() : undefined;\n      }\n    });\n  }\n  function confMatchesPfState(conf, pfState) {\n    switch (pfState) {\n      case 'pass':\n        return conf && conf.lastSuccess;\n      case 'fail':\n        return conf && _.isBoolean(conf.lastSuccess) && !conf.lastSuccess;\n      case 'unknown':\n        return conf && conf.lastRunAt && _.isUndefined(conf.lastSuccess);\n      case 'notRun':\n        return conf && _.isUndefined(conf.lastRunAt);\n    }\n  }\n  let ConfGroupInfo = _exports.default = (_dec = (0, _object.computed)('testCase.id', 'script.id', 'pfState', 'type'), _dec2 = (0, _object.computed)('srcConfigurations', 'srcConfigurationCount'), _dec3 = (0, _object.computed)('srcConfigurations', 'srcConfigurationCount'), _dec4 = (0, _object.computed)('isLoading', 'srcConfigurationCount'), _dec5 = (0, _object.computed)('allRegions', 'srcConfigurations'), _dec6 = (0, _object.computed)('pfState'), _dec7 = (0, _object.computed)('testCase.lastRunAt', 'testCase.success'), _dec8 = (0, _object.computed)('testCase.success', 'script.success', 'pfState', 'srcConfigurationCount'), _dec9 = (0, _object.computed)('testCase.success', 'script.success', 'pfState'), _dec0 = (0, _object.computed)('testCase.success', 'script.success', 'pfState'), _dec1 = (0, _object.computed)('sortedConfs'), _dec10 = (0, _object.computed)('maxRegions', 'type'), _dec11 = (0, _object.computed)('confs', 'filter', 'search'), _dec12 = (0, _object.computed)('filteredConfs', 'sort'), _dec13 = (0, _object.computed)('running', 'matchingSchedules'), _dec14 = (0, _object.computed)('allRunning', 'testCase.running'), _dec15 = (0, _object.computed)('allScheduled', 'testCase.scheduled'), _dec16 = (0, _object.computed)('matchingSchedules'), _dec17 = (0, _object.computed)('isLoadingLocations', 'isLoadingConfs'), _dec18 = (0, _object.computed)('filteredConfs.@each.loadingLocations'), _dec19 = (0, _object.computed)('filteredConfs', 'filteredConfs.@each.locations'), _dec20 = (0, _object.computed)('hasSuccess', 'hasFailure'), _dec21 = (0, _object.computed)('outcomeOrder'), _dec22 = (0, _object.computed)('outcomeOrder'), _class = class ConfGroupInfo extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"script\", _descriptor2, this);\n      _initializerDefineProperty(this, \"filter\", _descriptor3, this);\n      _initializerDefineProperty(this, \"sort\", _descriptor4, this);\n      _initializerDefineProperty(this, \"show\", _descriptor5, this);\n      _initializerDefineProperty(this, \"search\", _descriptor6, this);\n      _initializerDefineProperty(this, \"cardLayout\", _descriptor7, this);\n      _initializerDefineProperty(this, \"hasExpanded\", _descriptor8, this);\n      _initializerDefineProperty(this, \"allRunning\", _descriptor9, this);\n      _initializerDefineProperty(this, \"allScheduled\", _descriptor0, this);\n      _initializerDefineProperty(this, \"srcConfigurations\", _descriptor1, this);\n      _initializerDefineProperty(this, \"srcConfigurationCount\", _descriptor10, this);\n      _initializerDefineProperty(this, \"isLoadingConfs\", _descriptor11, this);\n      _initializerDefineProperty(this, \"byLocation\", _descriptor12, this);\n      _initializerDefineProperty(this, \"matchesFilter\", _descriptor13, this);\n      _initializerDefineProperty(this, \"selected\", _descriptor14, this);\n    }\n    get toggleId() {\n      switch (this.type) {\n        case 'scenario':\n          return `script${this.script?.id}`;\n        case 'passFail':\n          return `tc${this.testCase?.id}${this.pfState}`;\n        case 'all':\n          return `tc${this.testCase?.id}all`;\n      }\n      return '';\n    }\n    buildQueryParams() {\n      const params = {};\n      const type = this.type;\n      const paging = _.isBoolean(this.paging) ? this.paging : true;\n      const filter = this.filter;\n      const sort = this.sort;\n      const pfState = this.pfState;\n      const start = toStartTimestamp(filter);\n      if (type === 'scenario' && this.script?.id === -1) {\n        params.emptyScript = true;\n      }\n      if (paging) {\n        params.offset = 0;\n        params.limit = PageSize;\n      }\n      if (sort) {\n        params.sort = sort;\n      }\n      if (pfState) {\n        params.state = pfState;\n      }\n      if (!pfState && filter === 'passing') {\n        params.state = 'pass';\n      }\n      if (!pfState && filter === 'failing') {\n        params.state = 'fail';\n      }\n      if (start) {\n        params.since = start.valueOf();\n      }\n      if (filter === 'running' || filter === 'scheduled') {\n        params.filter = filter;\n      }\n      return params;\n    }\n    get hasMoreConfs() {\n      return this.unloadedConfs > 0;\n    }\n    get unloadedConfs() {\n      return this.srcConfigurationCount - (this.srcConfigurations?.length || 0);\n    }\n    loadConfs(params, append) {\n      this.isLoadingConfs = true;\n      if (!append) {\n        this.srcConfigurations = [];\n        this.srcConfigurationCount = 0;\n      }\n      (this.type === 'scenario' && this.script?.id > 0 ? _server.default.getScriptConfs(this.script.id, params) : _server.default.getTestCaseConfs(this.testCase?.id, params)).then(response => {\n        this.srcConfigurationCount = response.count;\n        if (append) {\n          response.results = _.filter(response.results, conf => {\n            return _.findIndex(this.srcConfigurations, existing => {\n              return existing.id === conf.id;\n            }) === -1;\n          });\n        }\n        this.srcConfigurations = append ? _.concat(this.srcConfigurations || [], response.results) : response.results;\n        this.isLoadingConfs = false;\n      }, () => {\n        this.srcConfigurationCount = 0;\n        if (!append) {\n          this.srcConfigurations = [];\n        }\n        this.isLoadingConfs = false;\n      });\n    }\n    loadMoreConfs() {\n      const params = _.cloneDeep(this.currentQueryParams);\n      params.offset = this.srcConfigurations?.length || 0;\n      this.loadConfs(params, true);\n    }\n    get srcConfigurationCountText() {\n      const count = this.srcConfigurationCount || this.numConfs || 0;\n      return this.isLoading && count === 0 ? '' : ' (' + count + ' ' + _lib.default.pluralCheck('config', count) + ')';\n    }\n    get confs() {\n      const allRegions = this.allRegions;\n      const running = this.running;\n      const schedules = this.matchingSchedules;\n      const testCase = this.testCase;\n      const confInfos = [];\n      _.forEach(this.srcConfigurations, conf => {\n        if (this.isConfRelevant(conf)) {\n          confInfos.push(_confInfo.default.create({\n            conf: conf,\n            testCase: testCase,\n            allRegions: allRegions,\n            allRunning: running,\n            allScheduled: schedules\n          }));\n        }\n      });\n      return confInfos;\n    }\n    get pfText() {\n      const pfState = this.pfState;\n      if (pfState) {\n        switch (pfState) {\n          case 'pass':\n            return 'Passing Tests';\n          case 'fail':\n            return 'Failing Tests';\n          case 'unknown':\n            return 'Tests With No Success Criteria';\n          case 'notRun':\n            return 'Not Yet Run';\n        }\n      }\n      return '';\n    }\n    get lastRun() {\n      switch (this.type) {\n        case 'scenario':\n          return this.script?.lastRunAt ? moment(this.script.lastRunAt).valueOf() : 0;\n        case 'passFail':\n          {\n            let successStats = this.testCase?.success;\n            let key = this.pfState + 'LastRunAt';\n            return successStats && successStats[key] ? moment(successStats[key]).valueOf() : 0;\n          }\n        case 'all':\n          return this.testCase?.lastRunAt ? moment(this.testCase.lastRunAt).valueOf() : 0;\n      }\n    }\n    get numConfs() {\n      if (this.srcConfigurationCount === 0) return 0;\n      switch (this.type) {\n        case 'scenario':\n          return this.script?.success?.total || 0;\n        case 'passFail':\n          return this.testCase?.success?.[this.pfState] || 0;\n        case 'all':\n          return this.testCase?.success?.total || 0;\n      }\n      return '';\n    }\n    get hasSuccess() {\n      switch (this.type) {\n        case 'scenario':\n          return this.script?.success?.pass > 0;\n        case 'passFail':\n          return this.pfState === 'pass' && this.testCase?.success?.pass > 0;\n        case 'all':\n          return this.testCase?.success?.pass > 0;\n      }\n      return '';\n    }\n    get hasFailure() {\n      switch (this.type) {\n        case 'scenario':\n          return this.script?.success?.fail > 0;\n        case 'passFail':\n          return this.pfState === 'fail' && this.testCase?.success?.fail > 0;\n        case 'all':\n          return this.testCase?.success?.fail > 0;\n      }\n      return '';\n    }\n    get groupedConfs() {\n      return _lib.default.group(this.sortedConfs, 4);\n    }\n    get contentHeight() {\n      const showScenario = this.type !== 'scenario';\n      return 60 + (this.maxRegions || 1) * 25 + (showScenario ? 25 : 0);\n    }\n    get filteredConfs() {\n      const filter = this.filter || 'all';\n      const search = this.search;\n      const confs = this.confs;\n      let result = confs;\n      let isShowParent = false;\n      if (filter !== 'all' || search) {\n        result = _.filter(confs, conf => {\n          const confName = conf.conf?.name;\n          const itemMatched = confName.toLowerCase().includes(search);\n          const matchesFilter = doesConfMatchFilter(conf.lastRun, conf.runningStats, filter, conf.lastExecution);\n          const matchesSearch = !search || itemMatched || this.show;\n          if (itemMatched) {\n            isShowParent = true;\n          }\n          return matchesFilter && matchesSearch;\n        });\n      }\n      if (isShowParent) {\n        if (!this.show) this.show = true;\n        if (this.parent && !this.parent.show) this.parent.show = true;\n      }\n      return result;\n    }\n    get sortedConfs() {\n      return sortItems(this.filteredConfs, this.sort);\n    }\n    get runningStats() {\n      return _lib.default.computeRunningStats(this.running, this.matchingSchedules);\n    }\n    get running() {\n      return _.filter(this.testCase?.running || this.allRunning, exec => {\n        return this.isExecutionRelevant(exec);\n      });\n    }\n    get matchingSchedules() {\n      return _.filter(this.testCase?.scheduled || this.allScheduled, schedule => {\n        return this.isConfRelevant(schedule.configuration);\n      });\n    }\n    get schedules() {\n      const testCase = this.testCase;\n      return _.map(this.matchingSchedules, schedule => {\n        return {\n          schedule: schedule,\n          testCase: testCase,\n          conf: schedule.configuration\n        };\n      });\n    }\n    get isLoading() {\n      return this.isLoadingLocations || this.isLoadingConfs;\n    }\n    get isLoadingLocations() {\n      return _.findIndex(this.filteredConfs, confInfo => {\n        return confInfo.loadingLocations;\n      }) >= 0;\n    }\n    get maxRegions() {\n      return _.max(_.map(this.filteredConfs, confInfo => {\n        return confInfo.locations?.length || 0;\n      }));\n    }\n    isConfRelevant(conf) {\n      const pfState = this.pfState;\n      const scriptId = this.script?.id;\n      const testCaseId = this.testCase?.id;\n      switch (this.type) {\n        case 'scenario':\n          return conf.script && conf.script.id === scriptId || !conf.script && scriptId === -1;\n        case 'passFail':\n          return conf.testCase && conf.testCase.id === testCaseId && confMatchesPfState(conf, pfState);\n        case 'all':\n          return conf.testCase && conf.testCase.id === testCaseId;\n      }\n    }\n    isExecutionRelevant(exec) {\n      const pfState = this.pfState;\n      const scriptId = this.script?.id;\n      const testCaseId = this.testCase?.id;\n      switch (this.type) {\n        case 'scenario':\n          return exec?.configuration?.script?.id === scriptId || !exec?.configuration?.script && scriptId === -1;\n        case 'passFail':\n          return exec.configuration && exec.testCaseId === testCaseId && confMatchesPfState(exec.configuration, pfState);\n        case 'all':\n          return exec.testCaseId === testCaseId;\n      }\n    }\n    get outcomeOrder() {\n      if (this.hasFailure) {\n        return 0;\n      }\n      if (this.hasSuccess) {\n        return 2;\n      }\n      return 3;\n    }\n    get overallOutcomeHtml() {\n      return _loadTest.default.getOutcomeHtml(this.outcomeOrder, null, null, null, null, true);\n    }\n    get backgroundColorClass() {\n      const outcomeOrder = this.outcomeOrder;\n      const pfState = this.pfState;\n      if (outcomeOrder === 2 || pfState === 'pass') {\n        return 'bg-blue-transparent-2';\n      }\n      if (outcomeOrder === 0 || pfState === 'fail') {\n        return 'bg-red-transparent-2';\n      }\n      return 'bg-grey-transparent-2';\n    }\n    updateScenario(appScriptUpdates = []) {\n      if (this.isDestroyed || !appScriptUpdates.length) {\n        return;\n      }\n      if (this.matchesFilter) {\n        const script = this.script;\n        const updatedScript = appScriptUpdates.find(su => su.id === script.id);\n        if (updatedScript && !_.isEqual(script, updatedScript)) {\n          this.script = {\n            ...script,\n            ...updatedScript\n          };\n        }\n      }\n    }\n    removeConfs(removedScriptIds = []) {\n      if (this.isDestroyed || !removedScriptIds.length) {\n        return;\n      }\n      this.removeSrcConfigurations(removedScriptIds);\n    }\n    loadUpdates(appConfUpdates = []) {\n      if (this.isDestroyed) {\n        return;\n      }\n      const confInfos = this.confs;\n      if (this.matchesFilter && appConfUpdates.length > 0) {\n        const toRemove = [];\n        const toUpdate = [];\n        _.forEach(appConfUpdates, updatedConf => {\n          const confInfo = _.find(confInfos, candidate => {\n            return candidate.conf?.id === updatedConf.id;\n          });\n          if (confInfo) {\n            if (!this.isConfRelevant(updatedConf)) {\n              toRemove.push(updatedConf.id);\n              toUpdate.push(updatedConf);\n            } else {\n              confInfo.conf = {\n                ...updatedConf\n              };\n            }\n          } else if (this.script?.id === updatedConf.script?.id) {\n            const srcConfigurations = this.srcConfigurations || [];\n            srcConfigurations.push(updatedConf);\n            this.srcConfigurations = [...srcConfigurations];\n            this.srcConfigurationCount = this.srcConfigurations.length;\n          }\n        });\n        const toRemoveIds = confInfos.filter(item => !appConfUpdates.some(conf => conf.id === item.id)).map(info => info.id);\n        if (!_.isEmpty(toRemoveIds)) {\n          toRemove.concat(toRemoveIds);\n        }\n        this.removeSrcConfigurations(toRemove);\n        _.forEach(toUpdate, conf => {\n          this.onPotentialConf(conf);\n        });\n      }\n    }\n    removeSrcConfigurations(removedConfIds) {\n      if (removedConfIds.length > 0) {\n        const srcConfigurations = this.srcConfigurations;\n        if (srcConfigurations?.length > 0) {\n          const filteredConfs = _.filter(srcConfigurations, conf => {\n            return !removedConfIds.includes(conf.id);\n          });\n          this.srcConfigurations = filteredConfs;\n          this.srcConfigurationCount = filteredConfs.length;\n        }\n      }\n    }\n    onPotentialConf(conf) {\n      if (this.isConfRelevant(conf) && !this.hasConf(conf.id)) {\n        this.srcConfigurations.push(conf);\n        this.srcConfigurations = _.clone(this.srcConfigurations);\n        this.srcConfigurationCount = this.srcConfigurations.length;\n      }\n    }\n    hasConf(confId) {\n      return _.findIndex(this.srcConfigurations, conf => {\n        return conf.id === confId;\n      }) >= 0;\n    }\n    init() {\n      super.init(...arguments);\n      _lib.default.observeKeys(this, ['filter', 'sort', 'testCase', 'type', 'paging', 'matchesFilter', 'hasExpanded'], this._onConfLoadRequired);\n      _lib.default.observeKeys(this, ['running', 'matchingSchedules'], this._onRunningOrScheduledChange);\n      _lib.default.observeKeys(this, ['lastRun', 'runningStats', 'filter', 'numConfs', 'hasSuccess', 'hasFailure'], this._onMatchesFilterChange);\n      _lib.default.observeKeys(this, ['filteredConfs', 'filteredConfs.@each.locations', 'isLoadingLocations', 'sort'], this._onLocationRelatedChange);\n      this._onMatchesFilterChange();\n      this._onConfLoadRequired();\n      this._onRunningOrScheduledChange();\n      this._onLocationRelatedChange();\n    }\n    _onConfLoadRequired() {\n      if (this.matchesFilter && this.numConfs > 0) {\n        const currentParams = this.currentQueryParams;\n        const newParams = this.buildQueryParams();\n        if (!_.isEqual(currentParams, newParams)) {\n          if (this.type !== 'scenario' || this.hasExpanded) {\n            this.currentQueryParams = newParams;\n            this.loadConfs(newParams);\n          }\n        }\n      } else if (this.srcConfigurations?.length > 0 || this.srcConfigurationCount > 0) {\n        this.srcConfigurationCount = 0;\n        this.srcConfigurations = [];\n      }\n    }\n    _onRunningOrScheduledChange() {\n      const running = this.running;\n      const schedules = this.matchingSchedules;\n      _.forEach(this.confs, confInfo => {\n        confInfo.allRunning = running;\n        confInfo.allScheduled = schedules;\n      });\n    }\n    _onMatchesFilterChange() {\n      const newMatchesFilter = doesMatchFilter(this.numConfs, this.lastRun, this.hasSuccess, this.hasFailure, this.runningStats, this.filter);\n      if (_.isUndefined(this.matchesFilter) || this.matchesFilter !== newMatchesFilter) {\n        this.matchesFilter = newMatchesFilter;\n      }\n    }\n    _onLocationRelatedChange() {\n      if (this.isLoadingLocations) {\n        return;\n      }\n      const sort = this.sort;\n      const locations = {};\n      const confsByLocation = {};\n      _.forEach(this.filteredConfs, confInfo => {\n        _.forEach(confInfo.locations, locationInfo => {\n          if (locationInfo.regionInfo && locationInfo.regionInfo.location) {\n            const location = locationInfo.regionInfo.location;\n            locations[location.name] = {\n              name: location.name,\n              description: location.description,\n              latitude: location.latitude,\n              longitude: location.longitude\n            };\n            let confs = confsByLocation[location.name];\n            if (!confs) {\n              confs = new Set();\n              confsByLocation[location.name] = confs;\n            }\n            confs.add(confInfo);\n          }\n        });\n      });\n      if (!_.isEqual(locations, this.currentLocations)) {\n        this.currentLocations = locations;\n        const byLocation = _.map(_.values(locations), location => {\n          return _testLocationInfo.default.create({\n            sort: sort,\n            location: location,\n            srcConfInfos: confsByLocation[location.name] ? Array.from(confsByLocation[location.name]) : []\n          });\n        });\n        this.byLocation = _.sortBy(byLocation, locationInfo => {\n          const desc = locationInfo.location?.description;\n          return desc ? desc.toLowerCase() : undefined;\n        });\n      } else if (this.byLocation?.length > 0) {\n        _.forEach(this.byLocation, locationInfo => {\n          const locationName = locationInfo.location?.name;\n          locationInfo.sort = sort;\n          locationInfo.srcConfInfos = confsByLocation[locationName] ? Array.from(confsByLocation[locationName]) : [];\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"script\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"filter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"sort\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"show\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"cardLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"hasExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"allRunning\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"allScheduled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"srcConfigurations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"srcConfigurationCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingConfs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"byLocation\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"matchesFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"selected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleId\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasMoreConfs\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"hasMoreConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"unloadedConfs\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"unloadedConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"srcConfigurationCountText\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"srcConfigurationCountText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"confs\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"confs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"pfText\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"pfText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"lastRun\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"lastRun\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"numConfs\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"numConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasSuccess\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"hasSuccess\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasFailure\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"hasFailure\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"groupedConfs\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"groupedConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"contentHeight\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"contentHeight\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filteredConfs\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"filteredConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sortedConfs\", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, \"sortedConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runningStats\", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, \"runningStats\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"running\", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, \"running\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"matchingSchedules\", [_dec15], Object.getOwnPropertyDescriptor(_class.prototype, \"matchingSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"schedules\", [_dec16], Object.getOwnPropertyDescriptor(_class.prototype, \"schedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_dec17], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoading\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoadingLocations\", [_dec18], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoadingLocations\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"maxRegions\", [_dec19], Object.getOwnPropertyDescriptor(_class.prototype, \"maxRegions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outcomeOrder\", [_dec20], Object.getOwnPropertyDescriptor(_class.prototype, \"outcomeOrder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"overallOutcomeHtml\", [_dec21], Object.getOwnPropertyDescriptor(_class.prototype, \"overallOutcomeHtml\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"backgroundColorClass\", [_dec22], Object.getOwnPropertyDescriptor(_class.prototype, \"backgroundColorClass\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/conf-info\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _object, _tracking, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  function findMatchingExecutionRegions(execution, location) {\n    if (execution && location.regionInfo && location.testRunnerSource) {\n      return _.filter(execution.regions, function (executionRegion) {\n        return executionRegion.region.location.provider.id === location.testRunnerSource.id && executionRegion.region.location.name === location.regionInfo.location.name;\n      });\n    }\n    return [];\n  }\n  let ConfInfo = _exports.default = (_dec = (0, _object.computed)('lastExecution'), _dec2 = (0, _object.computed)('lastExecution'), _dec3 = (0, _object.computed)('conf.testType', 'conf'), _dec4 = (0, _object.computed)('locations', 'lastExecution'), _dec5 = (0, _object.computed)('conf.name'), _dec6 = (0, _object.computed)('conf.lastRunAt'), _dec7 = (0, _object.computed)('conf.executions.0'), _dec8 = (0, _object.computed)('conf.executions.0', 'running'), _dec9 = (0, _object.computed)('schedules'), _dec0 = (0, _object.computed)('lastExecution.success'), _dec1 = (0, _object.computed)('allRunning', 'conf.id', 'testCase.running'), _dec10 = (0, _object.computed)('allScheduled', 'conf.schedules.@each.active', 'testCase.scheduled'), _dec11 = (0, _object.computed)('matchingSchedules', 'testCase', 'conf'), _dec12 = (0, _object.computed)('running', 'matchingSchedules'), _class = class ConfInfo extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"conf\", _descriptor, this);\n      _initializerDefineProperty(this, \"allRunning\", _descriptor2, this);\n      _initializerDefineProperty(this, \"allScheduled\", _descriptor3, this);\n      _initializerDefineProperty(this, \"locations\", _descriptor4, this);\n      _initializerDefineProperty(this, \"loadingLocations\", _descriptor5, this);\n      _initializerDefineProperty(this, \"selected\", _descriptor6, this);\n    }\n    get outcomeHtml() {\n      return _loadTest.default.getExecutionOutcomeHtml(this.lastExecution, false, true, true);\n    }\n    get outcomeForMap() {\n      return _loadTest.default.getExecutionOutcomeMap(this.lastExecution, false, true);\n    }\n    get label() {\n      return this.conf?.testType === 'Load' ? _loadTest.default.printShortSummary(this.conf, true, true) : this.conf?.testType;\n    }\n    get regionInfos() {\n      const execution = this.lastExecution;\n      const locations = this.locations;\n      const groupedLocations = _.groupBy(locations, function (location) {\n        if (location.regionInfo && location.regionInfo.location && location.testRunnerSource) {\n          return location.testRunnerSource.id + '|' + location.regionInfo.location.name;\n        }\n        return '';\n      });\n      const answer = [];\n      _.forEach(groupedLocations, function (matchingLocations) {\n        const matchingExecutionRegions = findMatchingExecutionRegions(execution, matchingLocations[0]);\n        _.forEach(matchingLocations, function (location, index) {\n          answer.push({\n            testRunnerSource: location.testRunnerSource,\n            location: location.regionInfo ? location.regionInfo.location : null,\n            region: location.regionInfo ? location.regionInfo.region : null,\n            executionRegion: matchingExecutionRegions.length > 0 ? matchingExecutionRegions[Math.min(index, matchingExecutionRegions.length - 1)] : null,\n            execution: execution,\n            tooltip: location.regionInfo ? location.regionInfo.location.description + (location.regionInfo.location.name !== location.regionInfo.location.description ? ' (' + location.regionInfo.location.name + ')' : '') : ''\n          });\n        });\n      });\n      return answer;\n    }\n    get name() {\n      return this.conf?.name;\n    }\n    get lastRun() {\n      const lastRunAt = this.conf?.lastRunAt;\n      return lastRunAt ? moment(lastRunAt).valueOf() : 0;\n    }\n    get lastExecution() {\n      return this.conf?.executions?.[0];\n    }\n    get lastCreatedExecution() {\n      const lastFinished = this.conf?.executions?.[0];\n      const lastRunning = _.maxBy(this.running, function (exec) {\n        return moment(exec.createdAt).valueOf();\n      });\n      if (!lastFinished) {\n        return lastRunning;\n      }\n      if (!lastRunning) {\n        return lastFinished;\n      }\n      return moment(lastRunning.createdAt).valueOf() >= moment(lastFinished.createdAt).valueOf() ? lastRunning : lastFinished;\n    }\n    get firstActiveSchedule() {\n      return _.minBy(_.filter(this.schedules, function (info) {\n        return info.schedule && info.schedule.active && info.schedule.nextScheduled;\n      }), function (info) {\n        return moment(info.schedule.nextScheduled).valueOf();\n      });\n    }\n    get backgroundColorClass() {\n      const lastExecution = this.lastExecution;\n      if (lastExecution && lastExecution.success) {\n        return 'bg-blue-transparent-2';\n      }\n      if (lastExecution && _.isBoolean(lastExecution.success) && !lastExecution.success) {\n        return 'bg-red-transparent-2';\n      }\n      return 'bg-white';\n    }\n    get running() {\n      const confId = this.conf?.id;\n      return _.filter(this.testCase?.running || this.allRunning, function (exec) {\n        return exec.confId === confId;\n      });\n    }\n    get matchingSchedules() {\n      const conf = this.conf;\n      return conf?.schedules?.length > 0 ? conf.schedules : _.filter(this.testCase?.scheduled || this.allScheduled, function (schedule) {\n        return schedule.configuration && schedule.configuration.id === conf.id;\n      });\n    }\n    get schedules() {\n      const testCase = this.testCase;\n      const conf = this.conf;\n      return _.map(this.matchingSchedules, function (schedule) {\n        return {\n          schedule: schedule,\n          testCase: testCase,\n          conf: conf\n        };\n      });\n    }\n    get runningStats() {\n      return _lib.default.computeRunningStats(this.running, this.matchingSchedules);\n    }\n    loadLocations() {\n      if (this.conf?.providers?.length > 0) {\n        this.loadingLocations = true;\n        _loadTest.default.getLocations(this.conf.providers, this.allRegions, this.conf.testType, this.conf.script, false).then(locations => {\n          this.locations = locations || [];\n          this.loadingLocations = false;\n        }, () => {\n          this.locations = [];\n          this.loadingLocations = false;\n        });\n      } else {\n        this.locations = [];\n      }\n    }\n    init() {\n      super.init(...arguments);\n      this.loadLocations();\n      _lib.default.observeKeys(this, ['conf.providers', 'allRegions', 'conf.testType', 'conf.script'], this.loadLocations);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"conf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"allRunning\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"allScheduled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"locations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadingLocations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"selected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"outcomeHtml\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"outcomeHtml\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outcomeForMap\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"outcomeForMap\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"label\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"label\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionInfos\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"regionInfos\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"name\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"name\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"lastRun\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"lastRun\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"lastExecution\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"lastExecution\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"lastCreatedExecution\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"lastCreatedExecution\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"firstActiveSchedule\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"firstActiveSchedule\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"backgroundColorClass\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"backgroundColorClass\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"running\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"running\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"matchingSchedules\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"matchingSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"schedules\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"schedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runningStats\", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, \"runningStats\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/load-test-regional-results\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/suite-utils\"], function (_exports, _object, _tracking, _trackedBuiltIns, _lib, _loadTest, _suiteUtils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/suite-utils\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LoadTestRegionalResults = _exports.default = (_dec = (0, _object.computed)('executionRegion.{finishedAt,running,startedAt}', 'providerType'), _dec2 = (0, _object.computed)('executionRegion.id'), _dec3 = (0, _object.computed)('isAll', 'execution.regions', 'executionRegion.region.instances'), _dec4 = (0, _object.computed)('isAll', 'execution.regions', 'executionRegion.region'), _dec5 = (0, _object.computed)('isAll', 'execution.agents', 'execution.agents.[]', 'executionRegion', 'execution.regions', 'execution.regions.[]'), _dec6 = (0, _object.computed)('isAll', 'execution.completed', 'executionRegion.completed'), _dec7 = (0, _object.computed)('instances'), _dec8 = (0, _object.computed)('instanceCounts', 'instances'), _dec9 = (0, _object.computed)('executionRegion.region.name', 'isAll', 'isOnDemand', 'executionRegion.provider.params.region'), _dec0 = (0, _object.computed)('executionRegion.region.description'), _class = class LoadTestRegionalResults extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isFirst\", _descriptor, this);\n      _initializerDefineProperty(this, \"isVisible\", _descriptor2, this);\n      _initializerDefineProperty(this, \"execution\", _descriptor3, this);\n      _initializerDefineProperty(this, \"executionRegion\", _descriptor4, this);\n      _initializerDefineProperty(this, \"summary\", _descriptor5, this);\n      _initializerDefineProperty(this, \"intervals\", _descriptor6, this);\n      _initializerDefineProperty(this, \"errorCount\", _descriptor7, this);\n      _initializerDefineProperty(this, \"errorsDirty\", _descriptor8, this);\n      _initializerDefineProperty(this, \"resources\", _descriptor9, this);\n      _initializerDefineProperty(this, \"numResources\", _descriptor0, this);\n      _initializerDefineProperty(this, \"numTransactions\", _descriptor1, this);\n      _initializerDefineProperty(this, \"numRequests\", _descriptor10, this);\n      _initializerDefineProperty(this, \"providerType\", _descriptor11, this);\n      _initializerDefineProperty(this, \"zoomInfo\", _descriptor12, this);\n      _initializerDefineProperty(this, \"traces\", _descriptor13, this);\n      _initializerDefineProperty(this, \"suiteResults\", _descriptor14, this);\n      _initializerDefineProperty(this, \"buckets\", _descriptor15, this);\n      _initializerDefineProperty(this, \"suiteSummaries\", _descriptor16, this);\n      _initializerDefineProperty(this, \"suiteErrors\", _descriptor17, this);\n      _initializerDefineProperty(this, \"suiteResultSummariesFiltered\", _descriptor18, this);\n      _initializerDefineProperty(this, \"filesProgress\", _descriptor19, this);\n    }\n    get hasTransactions() {\n      return this.summary?.hasTxnMetrics;\n    }\n    get providerPopoverText() {\n      return _loadTest.default.getProviderPopoverText(this.providerType, this.executionRegion);\n    }\n    get isAll() {\n      return this.executionRegion?.id === 'ALL';\n    }\n    get instances() {\n      if (this.isAll) {\n        let instances = [];\n        _.forEach(this.execution?.regions, function (executionRegion) {\n          _.forEach(executionRegion.region.instances, function (instance) {\n            instance.regionName = executionRegion.region.description || '-';\n          });\n          instances.push(...(executionRegion.region.instances || []));\n        });\n        return instances;\n      } else {\n        return this.executionRegion?.region?.instances || [];\n      }\n    }\n    get isOnDemand() {\n      if (this.isAll) {\n        return _.some(this.execution?.regions, executionRegion => {\n          return this.isOnDemandRegion(executionRegion);\n        });\n      } else {\n        return this.isOnDemandRegion(this.executionRegion);\n      }\n    }\n    get agents() {\n      return this.getAgents(this.execution?.agents) || [];\n    }\n    isOnDemandRegion(executionRegion) {\n      return executionRegion && executionRegion.region && executionRegion.region.location && executionRegion.region.location.provider && executionRegion.region.location.provider.providerType === 'OnDemand';\n    }\n    getAgents(agents) {\n      const answer = [];\n      const isAll = this.isAll;\n      const executionRegion = this.executionRegion;\n      const ids = new Set();\n      _.forEach(agents, agentInfo => {\n        if (agentInfo.agent && (isAll || executionRegion && executionRegion.id === agentInfo.executionRegionId)) {\n          if (!ids.has(agentInfo.agent.id)) {\n            ids.add(agentInfo.agent.id);\n            const agent = _.cloneDeep(agentInfo.agent);\n            const myExecutionRegion = isAll ? _.find(this.execution?.regions, function (r) {\n              return r.id === agentInfo.executionRegionId;\n            }) : executionRegion;\n            if (myExecutionRegion && myExecutionRegion.region) {\n              agent.regionName = myExecutionRegion.region.name;\n              agent.regionDescription = myExecutionRegion.region.description;\n            }\n            answer.push(agent);\n          }\n        }\n      });\n      return answer;\n    }\n    get completed() {\n      if (this.isAll) {\n        return this.execution?.completed;\n      } else {\n        return this.executionRegion?.completed;\n      }\n    }\n    get instanceCounts() {\n      let errors = 0,\n        startFailures = 0,\n        connected = 0,\n        timeout = 0,\n        instances = this.instances;\n      _.forEach(instances, function (instance) {\n        if (instance.hasError && instance.connectivity) {\n          errors++;\n        }\n        if (instance.hasError && !instance.connectivity) {\n          startFailures++;\n        }\n        if (instance.connectivity) {\n          connected++;\n        }\n        if (!instance.hasError && _.isBoolean(instance.connectivity) && !instance.connectivity) {\n          timeout++;\n        }\n      });\n      return {\n        errors: errors,\n        connected: connected,\n        timeout: timeout,\n        total: instances.length\n      };\n    }\n    get instancesText() {\n      let instances = this.instances;\n      let instanceCounts = this.instanceCounts;\n      if (instances.length > 0) {\n        let text = instanceCounts.connected + ' of ' + instanceCounts.total + ' instances started';\n        if (instanceCounts.timeout > 0) {\n          text += ', ' + instanceCounts.timeout + _lib.default.pluralCheck(' instance', instanceCounts.timeout) + ' timed out';\n        }\n        if (instanceCounts.startFailures > 0) {\n          text += ', ' + instanceCounts.startFailures + _lib.default.pluralCheck(' instance', instanceCounts.startFailures) + ' failed to start';\n        }\n        if (instanceCounts.errors > 0) {\n          text += ', ' + instanceCounts.errors + _lib.default.pluralCheck(' instance', instanceCounts.errors) + ' failed during test';\n        }\n        return text;\n      } else {\n        return 'no instances requested yet';\n      }\n    }\n    get regionName() {\n      if (this.isOnDemand) {\n        return this.isAll ? 'ALL' : this.executionRegion?.provider?.params?.region;\n      } else {\n        return this.executionRegion?.region?.name;\n      }\n    }\n    get regionDescription() {\n      return this.executionRegion?.region?.description;\n    }\n    get hasResults() {\n      return _loadTest.default.hasResults(this.summary);\n    }\n    get derivedSummary() {\n      return _loadTest.default.deriveSummary(this.summary, this.intervals, this.zoomInfo);\n    }\n    get suitesSummary() {\n      return _suiteUtils.default.aggregateSuiteSummaries(this.suiteResultSummaries);\n    }\n    get suiteResultSummaries() {\n      return _suiteUtils.default.calculateSuiteResultsSummary(this.suiteResults);\n    }\n    init() {\n      super.init(...arguments);\n      _lib.default.observeKeys(this, ['numResources', 'resources'], this._onResourceCountChanged);\n    }\n    _onResourceCountChanged() {\n      let transactions = 0,\n        requests = 0;\n      _.forEach(this.resources, resource => {\n        if (resource.hasTransactions) {\n          transactions++;\n        } else {\n          requests++;\n        }\n      });\n      this.numTransactions = transactions;\n      this.numRequests = requests;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isFirst\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isVisible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"execution\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"executionRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"summary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"intervals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"errorCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"errorsDirty\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"resources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"numResources\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"numTransactions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"numRequests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"providerType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"zoomInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"traces\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"suiteResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"buckets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"suiteSummaries\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"suiteErrors\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"suiteResultSummariesFiltered\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"filesProgress\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"providerPopoverText\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"providerPopoverText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isAll\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"isAll\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"instances\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"instances\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isOnDemand\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"isOnDemand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"agents\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"agents\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"completed\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"completed\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"instanceCounts\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"instanceCounts\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"instancesText\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"instancesText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionName\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"regionName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"regionDescription\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"regionDescription\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"derivedSummary\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"derivedSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"suitesSummary\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"suitesSummary\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"suiteResultSummaries\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"suiteResultSummaries\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/location\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/utils\", \"@ember/runloop\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/environment\"], function (_exports, _object, _tracking, _utils, _runloop, _loadTest, _server, _lib, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40, _descriptor41, _descriptor42, _descriptor43, _descriptor44;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const AutomaticSubnetChoice = {\n    name: '[Automatic]'\n  };\n  const AutomaticNetworkChoice = {\n    id: -1,\n    name: '[Automatic]',\n    subnets: [AutomaticSubnetChoice]\n  };\n  const AutomaticResourceGroupChoice = {\n    id: -1,\n    name: '[Automatic]',\n    networks: [AutomaticNetworkChoice]\n  };\n  const AutomaticName = '[Automatic]';\n  const MetadataCache = {\n    Aws: {},\n    Azure: {},\n    Gcp: {}\n  };\n  async function getMetadata(type, regionName, providerId, testRunnerType) {\n    testRunnerType = testRunnerType || 'Basic';\n    const cache = MetadataCache[type];\n    const key = providerId + '|' + regionName + '|' + testRunnerType;\n    const alternateKey = providerId + '|' + regionName + '|Advanced';\n    if (!cache[key] && !cache[alternateKey]) {\n      try {\n        cache[key] = await _server.default[`get${type}MetadataForProvider`](regionName, providerId, testRunnerType !== 'Basic');\n      } catch (e) {\n        delete cache[key];\n        throw e;\n      }\n    }\n    await _lib.default.sleep(0);\n    return cache[key] || cache[alternateKey];\n  }\n  function addAutoChoicesToAzureMetadata(metadata) {\n    if (!metadata.resourceGroups) {\n      metadata.resourceGroups = [];\n    }\n    _.forEach(metadata.resourceGroups, rg => {\n      _.forEach(rg.networks, network => {\n        if (!network.subnets.filter(sub => sub.name === '[Automatic]').length) network.subnets.push(AutomaticSubnetChoice);\n      });\n      if (!rg.networks.filter(net => net.id === -1).length) rg.networks.push(AutomaticNetworkChoice);\n    });\n    if (!metadata.resourceGroups.filter(rg => rg.id === -1).length) metadata.resourceGroups.push(AutomaticResourceGroupChoice);\n  }\n  function getBooleanValue(src, field, defaultVal) {\n    let value = src && src.metadata && src.metadata[field];\n    return _.isUndefined(value) ? defaultVal : value === 'true';\n  }\n  function hasValue(src, field) {\n    return _.isString(src && src.metadata && src.metadata[field]);\n  }\n  let Location = _exports.default = (_dec = (0, _object.computed)('currentUser.org.account.subscriptions.@each.{planProduct,active,metadata,resources}', 'isOnDemand', 'regionInfo.region.name', 'testRunnerSource'), _dec2 = (0, _object.computed)('currentUser.org.account.subscriptions.@each.{planProduct,active,metadata,resources}', 'isOnDemand', 'regionInfo.region.name', 'testRunnerSource'), _dec3 = (0, _object.computed)('allocatedElasticIps.length', 'enableElasticIps', 'loadMetadataOptions'), _dec4 = (0, _object.computed)('allocatedPublicIps.length', 'enablePublicIps', 'loadMetadataOptions'), _dec5 = (0, _object.computed)('currentUser.org.settings.thisHostedOnly'), _dec6 = (0, _object.computed)('regionInfo.providers.[]', 'thisHostedOnly'), _dec7 = (0, _object.computed)('testRunnerSources'), _dec8 = (0, _object.computed)('testRunnerSource.providerType'), _dec9 = (0, _object.computed)('testRunnerSource.providerType', 'regionInfo.source'), _dec0 = (0, _object.computed)('testRunnerSource.providerType'), _dec1 = (0, _object.computed)('params.concurrentClients', 'testRunnerSource', 'isLoadingMetadata', 'sharedTestRunnerInfoText', 'awsTestRunnerInfoText', 'azureTestRunnerInfoText', 'gcpTestRunnerInfoText', 'instancesConfigs.@each.{instanceType,ratio}'), _dec10 = (0, _object.computed)('params.concurrentClients', 'testRunnerSource', 'isLoadingMetadata', 'sharedTestRunnerInfoText', 'awsTestRunnerInfoText', 'azureTestRunnerInfoText', 'gcpTestRunnerInfoText', 'instancesConfigs.@each.{instanceType,ratio}'), _dec11 = (0, _object.computed)('regionInfo.region.agents', 'testRunnerSource'), _dec12 = (0, _object.computed)('testRunnerSource', 'vpc', 'subnetType', 'subnet', 'params.concurrentClients', 'instancesConfigs.Aws'), _dec13 = (0, _object.computed)('instancesConfigs.Azure', 'network.name', 'resourceGroup.name', 'subnet.name', 'testRunnerSource', 'params.concurrentClients'), _dec14 = (0, _object.computed)('instancesConfigs.Gcp', 'network.name', 'subnet.{name,ipCidrRange}', 'testRunnerSource', 'params.concurrentClients'), _class = class Location extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"loadMetadataOptions\", _descriptor, this);\n      _initializerDefineProperty(this, \"regionInfo\", _descriptor2, this);\n      _initializerDefineProperty(this, \"testRunnerSource\", _descriptor3, this);\n      _initializerDefineProperty(this, \"concurrents\", _descriptor4, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor5, this);\n      _initializerDefineProperty(this, \"awsAvailableElasticIps\", _descriptor6, this);\n      _initializerDefineProperty(this, \"awsMetadata\", _descriptor7, this);\n      _initializerDefineProperty(this, \"azureAvailablePublicIps\", _descriptor8, this);\n      _initializerDefineProperty(this, \"azureMetadata\", _descriptor9, this);\n      _initializerDefineProperty(this, \"chooseAnyElasticIp\", _descriptor0, this);\n      _initializerDefineProperty(this, \"chooseAnyPublicIp\", _descriptor1, this);\n      _initializerDefineProperty(this, \"enableElasticIps\", _descriptor10, this);\n      _initializerDefineProperty(this, \"enablePublicIps\", _descriptor11, this);\n      _initializerDefineProperty(this, \"executionRegion\", _descriptor12, this);\n      _initializerDefineProperty(this, \"forceAssociateElasticIps\", _descriptor13, this);\n      _initializerDefineProperty(this, \"forceAssociatePublicIps\", _descriptor14, this);\n      _initializerDefineProperty(this, \"gcpMetadata\", _descriptor15, this);\n      _initializerDefineProperty(this, \"initialRegionInfo\", _descriptor16, this);\n      _initializerDefineProperty(this, \"instanceTypes\", _descriptor17, this);\n      _initializerDefineProperty(this, \"instancesConfigs\", _descriptor18, this);\n      _initializerDefineProperty(this, \"isInit\", _descriptor19, this);\n      _initializerDefineProperty(this, \"isLoadingMetadata\", _descriptor20, this);\n      _initializerDefineProperty(this, \"keyPair\", _descriptor21, this);\n      _initializerDefineProperty(this, \"loadingAwsElasticIps\", _descriptor22, this);\n      _initializerDefineProperty(this, \"loadingAzurePublicIps\", _descriptor23, this);\n      _initializerDefineProperty(this, \"lockElasticIpChoices\", _descriptor24, this);\n      _initializerDefineProperty(this, \"lockKeyPairChoices\", _descriptor25, this);\n      _initializerDefineProperty(this, \"lockNetworkChoices\", _descriptor26, this);\n      _initializerDefineProperty(this, \"lockPublicIpChoices\", _descriptor27, this);\n      _initializerDefineProperty(this, \"lockResourceGroupChoices\", _descriptor28, this);\n      _initializerDefineProperty(this, \"lockSubnetChoices\", _descriptor29, this);\n      _initializerDefineProperty(this, \"lockVpcChoices\", _descriptor30, this);\n      _initializerDefineProperty(this, \"metadataError\", _descriptor31, this);\n      _initializerDefineProperty(this, \"network\", _descriptor32, this);\n      _initializerDefineProperty(this, \"orgId\", _descriptor33, this);\n      _initializerDefineProperty(this, \"params\", _descriptor34, this);\n      _initializerDefineProperty(this, \"resourceGroup\", _descriptor35, this);\n      _initializerDefineProperty(this, \"selectedScript\", _descriptor36, this);\n      _initializerDefineProperty(this, \"subnet\", _descriptor37, this);\n      _initializerDefineProperty(this, \"subnetType\", _descriptor38, this);\n      _initializerDefineProperty(this, \"testRunnerType\", _descriptor39, this);\n      _initializerDefineProperty(this, \"testType\", _descriptor40, this);\n      _initializerDefineProperty(this, \"viewOnly\", _descriptor41, this);\n      _initializerDefineProperty(this, \"vpc\", _descriptor42, this);\n      _initializerDefineProperty(this, \"zone\", _descriptor43, this);\n      _initializerDefineProperty(this, \"zoneType\", _descriptor44, this);\n    }\n    get allocatedElasticIps() {\n      let subscriptions = this.currentUser?.org?.account?.subscriptions;\n      const regionName = this.regionInfo?.region?.name;\n      if (!subscriptions) return [];\n      return subscriptions.filter(sub => sub.planProduct?.product?.code === 'EIP' && sub.active && sub.metadata?.region === regionName).map(sub => sub.resources).reduce((a, b) => a.concat(b), []).map(elasticIp => elasticIp.split('|')[1]);\n    }\n    get allocatedPublicIps() {\n      let subscriptions = this.currentUser?.org?.account?.subscriptions;\n      const regionName = this.regionInfo?.region?.name;\n      if (!subscriptions) return [];\n      return subscriptions.filter(sub => sub.planProduct?.product?.code === 'PublicIP' && sub.active && sub.metadata?.region === regionName).map(sub => sub.resources).reduce((a, b) => a.concat(b), []).map(publicIp => publicIp.split('|')[1]);\n    }\n    get hasElasticIpSettings() {\n      const loadMetadataOptions = this.loadMetadataOptions;\n      return !loadMetadataOptions && _.isBoolean(this.enableElasticIps) || loadMetadataOptions && this.allocatedElasticIps?.length > 0;\n    }\n    get hasPublicIpSettings() {\n      const loadMetadataOptions = this.loadMetadataOptions;\n      return !loadMetadataOptions && _.isBoolean(this.enablePublicIps) || loadMetadataOptions && this.allocatedPublicIps?.length > 0;\n    }\n    get thisHostedOnly() {\n      return this.currentUser?.org?.settings?.thisHostedOnly === 'true';\n    }\n    get testRunnerSources() {\n      const thisHostedOnly = this.thisHostedOnly;\n      const regionInfo = this.regionInfo;\n      const isSelfHosted = _lib.default.isSelfHostedCheck();\n      if (regionInfo && regionInfo.provider) {\n        return [regionInfo.provider];\n      } else if (regionInfo && regionInfo.providers) {\n        const answer = !thisHostedOnly && regionInfo.region.publicShared ? [regionInfo.region.publicShared.provider] : [];\n        _.forEach(regionInfo.providers, provider => {\n          if (!thisHostedOnly || !provider.public) {\n            answer.push(provider);\n          }\n        });\n        answer.push({\n          isAdd: true,\n          text: 'Register New ' + regionInfo.source + ' Account...'\n        });\n        if (isSelfHosted || _environment.config.currentUser.org.settings.selfHostedOnly === 'true') {\n          return answer.filter(s => !s.public);\n        }\n        return answer;\n      }\n      return [];\n    }\n    get groupedTestRunnerSources() {\n      let isSelfHosted = _lib.default.isSelfHostedCheck();\n      const publicSources = {\n        groupName: _environment.config.isOnPrem ? 'Shared' : 'Testable Hosted',\n        options: []\n      };\n      const pvtSourcesByOrg = {};\n      _.forEach(this.testRunnerSources, source => {\n        if (source.public) {\n          if (!_environment.config.isOnPrem || _environment.config.isOnPrem && source.metadata?.enableForTesting !== 'false') {\n            publicSources.options.push(source);\n          }\n        } else {\n          const name = source.isAdd ? _environment.config.currentUser.org.name : source.organization && source.organization.name;\n          let group = pvtSourcesByOrg[name];\n          if (!group) {\n            group = {\n              groupName: 'Self-Hosted' + (name ? ': ' + name : ''),\n              options: []\n            };\n            pvtSourcesByOrg[name] = group;\n          }\n          group.options.push(source);\n        }\n      });\n      const answer = [];\n      if (!isSelfHosted && publicSources.options.length > 0) {\n        answer.push(publicSources);\n      }\n      const sortedKeys = Object.keys(pvtSourcesByOrg).sort((a, b) => a.localeCompare(b));\n      const sortedObject = {};\n      sortedKeys.forEach(key => {\n        sortedObject[key] = pvtSourcesByOrg[key];\n      });\n      if (!_.isEmpty(sortedObject)) {\n        answer.push(..._.values(sortedObject));\n      }\n      return answer;\n    }\n    get isOnDemand() {\n      return this.testRunnerSource?.providerType === 'OnDemand';\n    }\n    get isSelfHostedSharedGrid() {\n      return this.testRunnerSource && !this.regionInfo?.source && this.testRunnerSource?.providerType === 'Shared';\n    }\n    get showMaxAgents() {\n      return this.testRunnerSource && this.testRunnerSource?.providerType === 'Shared';\n    }\n    onTestRunnerSourcesChanged() {\n      const sources = this.testRunnerSources;\n      const current = this.testRunnerSource;\n      if (sources && sources.length === 1) {\n        this.testRunnerSource = sources[0];\n      } else if (current && !sources.includes(current)) {\n        this.testRunnerSource = null;\n      }\n    }\n    onRegionChanges() {\n      this.onRegionChangesFunction();\n    }\n    init() {\n      super.init(...arguments);\n      _lib.default.observeKeys(this, ['testRunnerSources'], this.onTestRunnerSourcesChanged);\n      _lib.default.observeKeys(this, ['regionInfo', 'testRunnerSource', 'testRunnerType'], this.onRegionChanges);\n      _lib.default.observeKeys(this, ['regionInfo', 'testType', 'thisHostedOnly'], this.onRegionInfoSelected);\n      _lib.default.observeKeys(this, ['chooseAnyElasticIp', 'enableElasticIps', 'chooseAnyPublicIp', 'enablePublicIps', 'testRunnerSource', 'regionInfo', 'isInit'], this.onChooseAnyIpChange);\n      _lib.default.observeKeys(this, ['resourceGroup'], this.onResourceGroupChanged);\n      _lib.default.observeKeys(this, ['network'], this.onNetworkChanged);\n      _lib.default.observeKeys(this, ['vpc'], this.onVpcChanged);\n      _lib.default.observeKeys(this, ['network'], this.onNetworkChange);\n      this.onRegionChangesFunction();\n    }\n    async onRegionChangesFunction() {\n      this.isInit = true;\n      const isOnDemand = this.isOnDemand;\n      const src = this.testRunnerSource;\n      const isPublic = src?.public;\n      const regionName = this.regionInfo?.region?.name;\n      if (regionName && isOnDemand && src.source === 'Aws') {\n        const allocatedElasticIps = this.allocatedElasticIps;\n        if (this.loadMetadataOptions) {\n          this.isLoadingMetadata = true;\n          this.metadataError = '';\n          try {\n            const result = await getMetadata('Aws', regionName, src.id, this.testRunnerType);\n            const updated = this.initialRegionInfo?.region?.name !== regionName;\n            this.awsMetadata = result;\n            _.forEach(result.instanceTypes, instanceType => {\n              instanceType.family = instanceType.name.substring(0, instanceType.name.indexOf('.'));\n            });\n            // if using Testable's account, do not allow the really big instance types\n            const instanceTypes = isPublic && !_environment.config.isOnPrem ? _.filter(result.instanceTypes, instanceType => {\n              const name = instanceType.name;\n              return !_lib.default.endsWith(name, 'xlarge') || _lib.default.endsWith(name, '.xlarge') || _lib.default.endsWith(name, '.2xlarge');\n            }) : result.instanceTypes;\n            this.instanceTypes = _.sortBy(instanceTypes, ['family', 'memory']);\n            if (!isPublic) {\n              const lockChoices = src && src.metadata && ((0, _utils.isNone)(src.metadata['lockChoices']) || src.metadata['lockChoices'] === 'true');\n              const defaultVpcId = src && src.metadata && src.metadata[regionName + ':vpcId'];\n              const defaultSubnetId = src && src.metadata && src.metadata[regionName + ':subnetId'];\n              const defaultKeyPair = src && src.metadata && src.metadata[regionName + ':keyPair'];\n              const defaultVpc = this.findVpc(defaultVpcId);\n              const hasDefaultEnableElasticIps = hasValue(src, regionName + ':enableElasticIps');\n              const defaultEnableElasticIps = getBooleanValue(src, regionName + ':enableElasticIps', false);\n              const defaultChooseAnyElasticIps = getBooleanValue(src, regionName + ':chooseAnyElasticIp', true);\n              const defaultForceAssociateElasticIps = getBooleanValue(src, regionName + ':forceAssociateElasticIps', false);\n              const lockVpcChoices = lockChoices && defaultVpc;\n              const lockSubnetChoices = lockChoices && defaultSubnetId;\n              const lockKeyPairChoices = lockChoices && defaultKeyPair;\n              const lockElasticIpChoices = lockChoices && hasDefaultEnableElasticIps;\n              this.lockVpcChoices = lockVpcChoices;\n              this.lockSubnetChoices = lockSubnetChoices;\n              this.lockKeyPairChoices = lockKeyPairChoices;\n              this.lockElasticIpChoices = lockElasticIpChoices;\n              let vpc;\n              if (lockVpcChoices) {\n                vpc = defaultVpc;\n              } else if (!updated) {\n                vpc = this.vpc || this.findVpc(this.params?.vpc) || defaultVpc;\n              } else {\n                vpc = this.findVpc(this.params?.vpc) || defaultVpc;\n              }\n              this.vpc = vpc;\n              (0, _runloop.next)(this, () => {\n                if (defaultSubnetId === 'any') this.subnetType = 'any';else {\n                  this.subnet = this.subnet || this.findSubnet(lockSubnetChoices ? defaultSubnetId : this.params?.subnet || defaultSubnetId, this.vpc);\n                  if (this.subnet) {\n                    this.subnetType = 'choose';\n                  }\n                }\n              });\n              this.keyPair = lockKeyPairChoices ? defaultKeyPair : this.keyPair || this.params?.keyPair || defaultKeyPair;\n              if (this.keyPair && !result.keyPairs.includes(this.keyPair)) {\n                this.keyPair = null;\n              } else if (result.keyPairs && result.keyPairs.length === 1) {\n                this.keyPair = result.keyPairs[0];\n              }\n              this.enableElasticIps = lockElasticIpChoices ? defaultEnableElasticIps : this.enableElasticIps ?? (_.isUndefined(this.params?.enableElasticIps) ? defaultEnableElasticIps : this.params?.enableElasticIps === 'true');\n              if (this.enableElasticIps) {\n                this.chooseAnyElasticIp = lockElasticIpChoices ? defaultChooseAnyElasticIps : this.chooseAnyElasticIp ?? (_.isUndefined(this.params?.chooseAnyElasticIp) ? defaultChooseAnyElasticIps : this.params?.chooseAnyElasticIp === 'true');\n                this.forceAssociateElasticIps = lockElasticIpChoices ? defaultForceAssociateElasticIps : this.forceAssociateElasticIps ?? (_.isUndefined(this.params?.forceAssociateElasticIps) ? defaultForceAssociateElasticIps : this.params?.forceAssociateElasticIps === 'true');\n              }\n            } else if (allocatedElasticIps?.length > 0) {\n              this.enableElasticIps = _.isUndefined(this.params?.enableElasticIps) || this.params?.enableElasticIps === 'true';\n              this.chooseAnyElasticIp = _.isUndefined(this.params?.chooseAnyElasticIp) || this.params?.chooseAnyElasticIp === 'true';\n              this.forceAssociateElasticIps = _.isUndefined(this.params?.forceAssociateElasticIps) || this.params?.forceAssociateElasticIps === 'true';\n            }\n          } catch (e) {\n            this.metadataError = _lib.default.messageFromFail(e);\n          }\n          this.isLoadingMetadata = false;\n        } else {\n          this.vpc = {\n            vpcId: this.params?.vpc || '-'\n          };\n          this.subnetType = this.params?.subnet === 'any' ? 'any' : 'choose';\n          this.subnet = {\n            subnetId: this.params?.subnet || '-'\n          };\n          this.keyPair = this.params?.keyPair;\n          if (!_.isUndefined(this.params?.enableElasticIps)) {\n            this.enableElasticIps = this.params?.enableElasticIps === 'true';\n            this.chooseAnyElasticIp = this.params?.chooseAnyElasticIp === 'true';\n            this.forceAssociateElasticIps = this.params?.forceAssociateElasticIps === 'true';\n            const chosen = this.params?.chosenElasticIps;\n            this.awsAvailableElasticIps = chosen ? _.map(chosen.split(','), publicIp => {\n              return {\n                selected: true,\n                publicIp: publicIp\n              };\n            }).sort() : [];\n          }\n        }\n      } else if (regionName && isOnDemand && src.source === 'Azure') {\n        if (this.loadMetadataOptions) {\n          this.isLoadingMetadata = true;\n          this.metadataError = '';\n          try {\n            const result = await getMetadata('Azure', regionName, src.id, this.testRunnerType);\n            if (result) {\n              addAutoChoicesToAzureMetadata(result);\n              this.azureMetadata = result;\n              this.instanceTypes = _.sortBy(result.instanceTypes, ['name']);\n              let lockResourceGroupChoices = false;\n              let lockNetworkChoices = false;\n              let lockSubnetChoices = false;\n              let defaultResourceGroup = '';\n              let defaultNetwork = '';\n              let defaultSubnetId = '';\n              if (!isPublic) {\n                const lockChoices = src && src.metadata && ((0, _utils.isNone)(src.metadata['lockChoices']) || src.metadata['lockChoices'] === 'true');\n                defaultResourceGroup = src && src.metadata && src.metadata[regionName + ':resourceGroup'];\n                defaultNetwork = src && src.metadata && src.metadata[regionName + ':network'];\n                defaultSubnetId = src && src.metadata && src.metadata[regionName + ':subnetId'];\n                const hasDefaultEnablePublicIps = hasValue(src, regionName + ':enablePublicIps');\n                const defaultEnablePublicIps = getBooleanValue(src, regionName + ':enablePublicIps', false);\n                const defaultChooseAnyPublicIps = getBooleanValue(src, regionName + ':chooseAnyPublicIp', true);\n                const defaultForceAssociatePublicIps = getBooleanValue(src, regionName + ':forceAssociatePublicIps', false);\n                lockResourceGroupChoices = lockChoices && defaultResourceGroup;\n                lockNetworkChoices = lockChoices && defaultNetwork;\n                lockSubnetChoices = lockChoices && defaultSubnetId;\n                const lockPublicIpChoices = lockChoices && hasDefaultEnablePublicIps;\n                this.lockResourceGroupChoices = lockResourceGroupChoices;\n                this.lockNetworkChoices = lockNetworkChoices;\n                this.lockSubnetChoices = lockSubnetChoices;\n                this.lockPublicIpChoices = lockPublicIpChoices;\n                this.enablePublicIps = lockPublicIpChoices ? defaultEnablePublicIps : this.enablePublicIps ?? (_.isUndefined(this.params?.enablePublicIps) ? defaultEnablePublicIps : this.params?.enablePublicIps === 'true');\n                if (this.enablePublicIps) {\n                  this.chooseAnyPublicIp = lockPublicIpChoices ? defaultChooseAnyPublicIps : this.chooseAnyPublicIp ?? (_.isUndefined(this.params?.chooseAnyPublicIp) ? defaultChooseAnyPublicIps : this.params?.chooseAnyPublicIp === 'true');\n                  this.forceAssociatePublicIps = lockPublicIpChoices ? defaultForceAssociatePublicIps : this.forceAssociatePublicIps ?? (_.isUndefined(this.params?.forceAssociatePublicIps) ? defaultForceAssociatePublicIps : this.params?.forceAssociatePublicIps === 'true');\n                }\n              } else if (this.allocatedPublicIps?.length > 0) {\n                this.enablePublicIps = _.isUndefined(this.params?.enablePublicIps) || this.params?.enablePublicIps === 'true';\n                this.chooseAnyPublicIp = _.isUndefined(this.params?.chooseAnyPublicIp) || this.params?.chooseAnyPublicIp === 'true';\n                this.forceAssociatePublicIps = _.isUndefined(this.params?.forceAssociatePublicIps) || this.params?.forceAssociatePublicIps === 'true';\n              }\n              await this.setValueFromList('resourceGroup', result.resourceGroups, lockResourceGroupChoices ? this.findResourceGroup(defaultResourceGroup)?.name : this.resourceGroup?.name || this.params?.resourceGroup || this.findResourceGroup(defaultResourceGroup)?.name || AutomaticName, AutomaticResourceGroupChoice);\n              await this.setValueFromList('network', this.resourceGroup?.networks, lockNetworkChoices ? this.findNetwork(defaultNetwork)?.name : this.network?.name || this.params?.network || this.findNetwork(defaultNetwork)?.name || AutomaticName, AutomaticNetworkChoice);\n              await this.setValueFromList('subnet', this.network?.subnets, lockSubnetChoices ? defaultSubnetId : this.subnet?.name || this.params?.subnet || defaultSubnetId || AutomaticName, AutomaticSubnetChoice);\n            }\n          } catch (e) {\n            this.metadataError = _lib.default.messageFromFail(e);\n          }\n          this.isLoadingMetadata = false;\n        } else {\n          this.resourceGroup = {\n            name: this.params?.resourceGroup || AutomaticName\n          };\n          this.network = {\n            name: this.params?.network || AutomaticName\n          };\n          this.subnet = {\n            name: this.params?.subnet || AutomaticName\n          };\n          if (!_.isUndefined(this.params?.enablePublicIps)) {\n            this.enablePublicIps = this.params?.enablePublicIps === 'true';\n            this.chooseAnyPublicIp = this.params?.chooseAnyPublicIp === 'true';\n            this.forceAssociatePublicIps = this.params?.forceAssociatePublicIps === 'true';\n            const chosen = this.params?.chosenPublicIps;\n            this.azureAvailablePublicIps = chosen ? _.map(chosen.split(','), publicIp => {\n              return {\n                selected: true,\n                publicIp: publicIp\n              };\n            }).sort() : [];\n          }\n        }\n      } else if (regionName && isOnDemand && src.source === 'Gcp') {\n        if (this.loadMetadataOptions) {\n          this.isLoadingMetadata = true;\n          this.metadataError = '';\n          try {\n            const data = await getMetadata('Gcp', regionName, src.id, this.testRunnerType);\n            let result = {\n              ...data\n            };\n            result.zones = data.zones.sort();\n            result.networksInfos = _.sortBy(data.networksInfos, 'name');\n            const instanceTypes = isPublic ? _.filter(result.instanceTypes, instanceType => {\n              const name = instanceType.name;\n              return _lib.default.endsWith(name, '-1') || _lib.default.endsWith(name, '-2') || _lib.default.endsWith(name, '-4');\n            }) : result.instanceTypes;\n            this.instanceTypes = _.sortBy(instanceTypes, ['name']);\n            await this.setValueFromList('network', result.networksInfos, this.network?.name || this.params?.network || null, null);\n            await this.setValueFromList('subnet', this.network?.subnets, this.subnet?.name || this.params?.subnet || null, null);\n            (0, _runloop.next)(this, () => {\n              this.gcpMetadata = result;\n              this.zone = this.zone || this.params?.zone;\n              if (this.zone) {\n                this.zoneType = 'choose';\n              }\n            });\n          } catch (e) {\n            this.metadataError = _lib.default.messageFromFail(e);\n          }\n          this.isLoadingMetadata = false;\n        } else {\n          this.resourceGroup = {\n            name: this.params?.resourceGroup || AutomaticName\n          };\n          this.network = {\n            name: this.params?.network || AutomaticName\n          };\n          this.subnet = {\n            name: this.params?.subnet || AutomaticName\n          };\n        }\n      }\n      this.isInit = false;\n    }\n    onRegionInfoSelected() {\n      const regionInfo = this.regionInfo;\n      const testType = this.testType;\n      const thisHostedOnly = this.thisHostedOnly;\n      const isSelfHosted = _lib.default.isSelfHostedCheck();\n      if (isSelfHosted) return;\n      if (!this.testRunnerSource && regionInfo && testType && testType !== 'Load') {\n        if (!thisHostedOnly && regionInfo.region?.publicShared) {\n          this.testRunnerSource = regionInfo.region.publicShared.provider;\n        }\n        if (regionInfo.providers && regionInfo.providers.length > 0) {\n          this.testRunnerSource = thisHostedOnly ? _.find(regionInfo.providers, provider => {\n            return !provider.public;\n          }) : regionInfo.providers[0];\n        }\n      }\n    }\n    loadElasticIps() {\n      const src = this.testRunnerSource;\n      const regionName = this.regionInfo?.region?.name;\n      if (src && src.providerType === 'OnDemand' && (!src.public || this.allocatedElasticIps?.length > 0) && this.loadMetadataOptions && regionName && this.enableElasticIps && !this.chooseAnyElasticIp) {\n        const defaultChosen = src && src.metadata && src.metadata[regionName + ':chosenElasticIps'];\n        const chosenStr = this.lockElasticIpChoices ? defaultChosen : this.params?.chosenElasticIps || defaultChosen;\n        const chosen = chosenStr ? chosenStr.split(',') : [];\n        if (this.viewOnly) {\n          this.awsAvailableElasticIps = _.map(chosen, publicIp => {\n            return {\n              selected: true,\n              publicIp: publicIp\n            };\n          }).sort();\n        } else {\n          this.loadingAwsElasticIps = true;\n          _server.default.getAwsElasticIpsForProvider(regionName, src.id, this.currentUser?.org?.id).then(results => {\n            _.forEach(results, eip => {\n              eip.popoverText = _lib.default.toIpPopoverText(eip);\n              eip.selected = chosen.includes(eip.publicIp);\n            });\n            this.awsAvailableElasticIps = _lib.default.sortRegionIps(results);\n            this.loadingAwsElasticIps = false;\n          }, () => {\n            this.loadingAwsElasticIps = false;\n          });\n        }\n      }\n    }\n    loadPublicIps() {\n      const src = this.testRunnerSource;\n      const regionName = this.regionInfo?.region?.name;\n      if (src && src.providerType === 'OnDemand' && (!src.public || this.allocatedPublicIps?.length > 0) && this.loadMetadataOptions && regionName && this.enablePublicIps && !this.chooseAnyPublicIp) {\n        const defaultChosen = src && src.metadata && src.metadata[regionName + ':chosenPublicIps'];\n        const chosenStr = this.lockPublicIpChoices ? defaultChosen : this.params?.chosenPublicIps || defaultChosen;\n        const chosen = chosenStr ? chosenStr.split(',') : [];\n        if (this.viewOnly) {\n          this.azureAvailablePublicIps = _.map(chosen, publicIp => {\n            return {\n              selected: true,\n              publicIp: publicIp\n            };\n          }).sort();\n        } else {\n          this.loadingAzurePublicIps = true;\n          _server.default.getAzurePublicIpsForProvider(regionName, src.id, this.currentUser?.org?.id).then(results => {\n            _.forEach(results, pip => {\n              pip.popoverText = _lib.default.toIpPopoverText(pip);\n              pip.selected = chosen.includes(pip.publicIp);\n            });\n            this.azureAvailablePublicIps = _lib.default.sortRegionIps(results);\n            this.loadingAzurePublicIps = false;\n          }, () => {\n            this.loadingAzurePublicIps = false;\n          });\n        }\n      }\n    }\n    onChooseAnyIpChange() {\n      if (this.isInit) return;\n      if (this.regionInfo?.source === \"Aws\") {\n        (0, _runloop.once)(this, 'loadElasticIps');\n      }\n      if (this.regionInfo?.source === \"Azure\") {\n        (0, _runloop.once)(this, 'loadPublicIps');\n      }\n    }\n    async setValueFromList(name, choices, val, defaultVal) {\n      return new Promise(resolve => {\n        if (choices && choices.length === 1) {\n          this[name] = choices[0];\n        } else if (choices && choices.length > 1) {\n          this[name] = this.findByName(choices, val);\n        } else {\n          this[name] = defaultVal;\n        }\n        resolve();\n      });\n    }\n    findVpc(vpcId) {\n      return _.find(this.awsMetadata?.vpcs, vpc => {\n        return vpc.vpcId === vpcId;\n      });\n    }\n    findResourceGroup(rgId) {\n      return _.find(this.azureMetadata?.resourceGroups, rg => {\n        return rg.id === rgId;\n      });\n    }\n    findNetwork(rgId) {\n      return _.find(this.resourceGroup?.networks, nw => {\n        return nw.id === rgId;\n      });\n    }\n    findSubnet(subnetId, vpc) {\n      return vpc ? _.find(vpc.subnets, subnet => {\n        return subnet.subnetId === subnetId;\n      }) : null;\n    }\n    findByName(items, name) {\n      return items.find(i => i.name === name);\n    }\n    onResourceGroupChanged() {\n      if (this.isInit) return;\n      this.setValueFromList('network', this.resourceGroup?.networks, this.params?.networks || AutomaticName, AutomaticNetworkChoice);\n    }\n    onNetworkChanged() {\n      if (this.isInit) return;\n      this.setValueFromList('subnet', this.network?.subnets, this.params?.subnet || AutomaticName, AutomaticSubnetChoice);\n    }\n    onVpcChanged() {\n      if (this.isInit) return;\n      this.subnetType = 'any';\n      this.subnet = null;\n    }\n    onNetworkChange() {\n      if (this.isInit) return;\n      this.zoneType = 'any';\n      this.zone = null;\n    }\n    get testRunnerInfoRunnerText() {\n      const provider = this.testRunnerSource;\n      if (provider) {\n        if (provider.providerType === 'Shared') {\n          return this.sharedTestRunnerInfoText;\n        } else {\n          let isPrintable;\n          if (this.testRunnerType === 'Basic') {\n            isPrintable = provider.providerType === 'OnDemand';\n          } else {\n            const instancesConfig = this.instancesConfigs?.[provider.source];\n            isPrintable = provider.providerType === 'OnDemand' && instancesConfig && instancesConfig.ratio && instancesConfig.instanceType;\n          }\n          if (isPrintable && provider.source === 'Aws') {\n            return this.onDemandInfoTextPrefix('EC2 instance');\n          } else if (isPrintable && provider.source === 'Azure') {\n            return this.onDemandInfoTextPrefix('VM');\n          } else if (isPrintable && provider.source === 'Gcp') {\n            return this.onDemandInfoTextPrefix('VM');\n          }\n        }\n      }\n      return this.metadataError ? this.metadataError : ' [awaiting location configuration below]';\n    }\n    get testRunnerInfoText() {\n      const provider = this.testRunnerSource;\n      if (provider) {\n        if (provider.providerType === 'Shared') {\n          return this.sharedTestRunnerInfoText;\n        } else {\n          let isPrintable;\n          if (this.testRunnerType === 'Basic') {\n            isPrintable = provider.providerType === 'OnDemand';\n          } else {\n            const instancesConfig = this.instancesConfigs?.[provider.source];\n            isPrintable = provider.providerType === 'OnDemand' && instancesConfig && instancesConfig.ratio && instancesConfig.instanceType;\n          }\n          if (isPrintable && provider.source === 'Aws') {\n            return this.awsTestRunnerInfoText;\n          } else if (isPrintable && provider.source === 'Azure') {\n            return this.azureTestRunnerInfoText;\n          } else if (isPrintable && provider.source === 'Gcp') {\n            return this.gcpTestRunnerInfoText;\n          }\n        }\n      }\n      return this.metadataError ? this.metadataError : ' [awaiting location configuration below]';\n    }\n    get sharedTestRunnerInfoText() {\n      const provider = this.testRunnerSource;\n      if (provider && provider.public) {\n        return ' available test runners in our public shared grid';\n      } else {\n        return ` available test runners in this private region (${this.regionInfo?.region?.agents || 0}\n         test ${_lib.default.pluralCheck('runner', this.regionInfo?.region?.agents || 0)} currently available)`;\n      }\n    }\n    get awsTestRunnerInfoText() {\n      const provider = this.testRunnerSource;\n      const vpc = _loadTest.default.printVpc(this.vpc) || this.params?.vpc;\n      const subnetType = this.subnetType;\n      const subnet = _loadTest.default.printSubnet(subnetType, this.subnet) || this.params?.subnet;\n      let answer = '';\n      if (provider.public) {\n        answer += ` in ${_environment.config.envLabel} AWS VPC`;\n      } else {\n        answer += vpc ? ` in your AWS VPC (${vpc}) and ` : '';\n        answer += !subnetType || subnetType === 'any' ? `any subnet` : `subnet (${subnet})`;\n      }\n      return answer;\n    }\n    get azureTestRunnerInfoText() {\n      const provider = this.testRunnerSource;\n      const resourceGroup = this.resourceGroup?.name || this.params?.resourceGroup || 'N/A';\n      const networkName = this.network?.name || this.params?.network || 'N/A';\n      const subnetName = this.subnet?.name || this.params?.subnet || 'N/A';\n      let answer = '';\n      if (provider.public) {\n        answer += ` in ${_environment.config.envLabel} Azure network`;\n      } else {\n        answer += ` in your Azure resource group (${resourceGroup}), network (${networkName}),\n                  and subnet (${subnetName})`;\n      }\n      return answer;\n    }\n    get gcpTestRunnerInfoText() {\n      const provider = this.testRunnerSource;\n      const networkName = this.network?.name || this.params?.network || 'N/A';\n      const subnetName = this.subnet?.name || this.params?.subnet || 'N/A';\n      const subnetiPCidrRange = this.subnet?.ipCidrRange || '-';\n      let answer = '';\n      if (provider.public) {\n        answer += ` in ${_environment.config.envLabel} GCP network`;\n      } else {\n        answer += ` in your GCP network (${networkName}), and subnet (${subnetName} ${subnetiPCidrRange})`;\n      }\n      return answer;\n    }\n    onDemandInfoTextPrefix(instanceLabel) {\n      const provider = this.testRunnerSource;\n      if (provider) {\n        const instancesConfig = this.instancesConfigs?.[provider.source];\n        const concurrents = this.params?.concurrentClients;\n        let nodes = '-';\n        if (concurrents && instancesConfig?.ratio) nodes = Math.ceil(Number(concurrents) / Number(instancesConfig?.ratio));\n        let instanceType = _loadTest.default.printInstanceType(instancesConfig?.instanceType);\n        if (instanceType === 'undefined') instanceType = '[loading...]';\n        return '<strong>' + nodes + ' ' + instanceType + ' ' + _lib.default.pluralCheck(instanceLabel, nodes) + '</strong>';\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"loadMetadataOptions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"regionInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"testRunnerSource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"concurrents\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return _environment.config.currentUser;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"awsAvailableElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"awsMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"azureAvailablePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"azureMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"chooseAnyElasticIp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"chooseAnyPublicIp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"enableElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"enablePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"executionRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"forceAssociateElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"forceAssociatePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"gcpMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"initialRegionInfo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"instanceTypes\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"instancesConfigs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"isInit\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingMetadata\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"keyPair\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"loadingAwsElasticIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"loadingAzurePublicIps\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"lockElasticIpChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"lockKeyPairChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"lockNetworkChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"lockPublicIpChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"lockResourceGroupChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"lockSubnetChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"lockVpcChoices\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"metadataError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"network\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"orgId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"params\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"resourceGroup\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"selectedScript\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"subnet\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"subnetType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"testRunnerType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"testType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor41 = _applyDecoratedDescriptor(_class.prototype, \"viewOnly\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor42 = _applyDecoratedDescriptor(_class.prototype, \"vpc\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor43 = _applyDecoratedDescriptor(_class.prototype, \"zone\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor44 = _applyDecoratedDescriptor(_class.prototype, \"zoneType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"allocatedElasticIps\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"allocatedElasticIps\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"allocatedPublicIps\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"allocatedPublicIps\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasElasticIpSettings\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"hasElasticIpSettings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasPublicIpSettings\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"hasPublicIpSettings\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"thisHostedOnly\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"thisHostedOnly\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testRunnerSources\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"testRunnerSources\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"groupedTestRunnerSources\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"groupedTestRunnerSources\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isOnDemand\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"isOnDemand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isSelfHostedSharedGrid\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"isSelfHostedSharedGrid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showMaxAgents\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"showMaxAgents\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testRunnerInfoRunnerText\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"testRunnerInfoRunnerText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"testRunnerInfoText\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"testRunnerInfoText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sharedTestRunnerInfoText\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"sharedTestRunnerInfoText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"awsTestRunnerInfoText\", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, \"awsTestRunnerInfoText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"azureTestRunnerInfoText\", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, \"azureTestRunnerInfoText\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gcpTestRunnerInfoText\", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, \"gcpTestRunnerInfoText\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/resource\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"tracked-built-ins\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _object, _tracking, _trackedBuiltIns, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let Resource = _exports.default = (_class = class Resource extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"summary\", _descriptor, this);\n      _initializerDefineProperty(this, \"intervals\", _descriptor2, this);\n      _defineProperty(this, \"zoomInfo\", null);\n      _initializerDefineProperty(this, \"id\", _descriptor3, this);\n      _initializerDefineProperty(this, \"buckets\", _descriptor4, this);\n    }\n    get derivedSummary() {\n      const zoomInfo = this.zoomInfo;\n      const summary = this.summary;\n      const intervals = this.intervals;\n      return _loadTest.default.deriveSummary(summary, intervals, zoomInfo);\n    }\n    get hasTransactions() {\n      return this.summary?.hasTxnMetrics;\n    }\n    get hasRequests() {\n      return this.summary?.hasRequestMetrics;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"summary\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"intervals\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"buckets\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new _trackedBuiltIns.TrackedArray([]);\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"derivedSummary\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"derivedSummary\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/test-case-info\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/models/conf-group-info\", \"@ember/service\"], function (_exports, _object, _tracking, _runloop, _lib, _loadTest, _server, _environment, _confGroupInfo, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/models/conf-group-info\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const PassFailStates = _loadTest.default.PassFailStates;\n  let confGroupIndex = 0;\n  function doesMatchFilter(filter, lastRun, runningStats, successStats) {\n    switch (filter) {\n      case 'all':\n        return true;\n      case 'hasConf':\n        return successStats && successStats.total > 0;\n      case 'passing':\n        return successStats.success > 0;\n      case 'failing':\n        return successStats.fail > 0;\n      case 'running':\n        return runningStats.count > 0;\n      case 'scheduled':\n        return runningStats.scheduled > 0;\n      case 'today':\n        {\n          let today = moment().hours(0).minutes(0).seconds(0).milliseconds(0);\n          return today.isSameOrBefore(lastRun);\n        }\n      case 'yesterday':\n        {\n          let yesterday = moment().hours(0).minutes(0).seconds(0).milliseconds(0).subtract(1, 'days');\n          return yesterday.isSameOrBefore(lastRun);\n        }\n      case '7d':\n      case '30d':\n      case '90d':\n        {\n          let days = Number(filter.substring(0, filter.length - 1));\n          let start = moment().hours(0).minutes(0).seconds(0).milliseconds(0).subtract(days, 'days');\n          return start.isSameOrBefore(lastRun);\n        }\n      default:\n        return true;\n    }\n  }\n  let TestCaseInfo = _exports.default = (_dec = (0, _object.computed)('providers', 'providers.[]'), _dec2 = (0, _object.computed)('testCase.lastRunAt'), _dec3 = (0, _object.computed)('running', 'matchingSchedules'), _dec4 = (0, _object.computed)('summary.running', 'testCase.{id,running}'), _dec5 = (0, _object.computed)('summary.scheduled', 'testCase.{id,scheduled}'), _dec6 = (0, _object.computed)('matchingSchedules'), _dec7 = (0, _object.computed)('testCase', 'scripts', 'allRegions', 'filter'), _dec8 = (0, _object.computed)('scenarios', 'sort'), _dec9 = (0, _object.computed)('testCase', 'allRegions'), _dec0 = (0, _object.computed)('testCase', 'allRegions'), _dec1 = (0, _object.computed)('groupBy', 'allConfGroups', 'byPassFail', 'sortedScenarios', 'hasExpanded'), _dec10 = (0, _object.computed)('currentConfGroups.@each.matchesFilter', 'currentConfGroups.@each.show'), _dec11 = (0, _object.computed)('filteredConfGroups'), _class = class TestCaseInfo extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"EventBus\", _descriptor, this);\n      _initializerDefineProperty(this, \"scripts\", _descriptor2, this);\n      _initializerDefineProperty(this, \"isLoading\", _descriptor3, this);\n      _initializerDefineProperty(this, \"matchesFilter\", _descriptor4, this);\n      _defineProperty(this, \"_matchesFilterValue\", void 0);\n      _initializerDefineProperty(this, \"show\", _descriptor5, this);\n      _initializerDefineProperty(this, \"search\", _descriptor6, this);\n      _initializerDefineProperty(this, \"filter\", _descriptor7, this);\n      _initializerDefineProperty(this, \"sort\", _descriptor8, this);\n      _initializerDefineProperty(this, \"cardLayout\", _descriptor9, this);\n      _initializerDefineProperty(this, \"groupBy\", _descriptor0, this);\n      _initializerDefineProperty(this, \"hasExpanded\", _descriptor1, this);\n      _initializerDefineProperty(this, \"hasExpandedTestConf\", _descriptor10, this);\n      _initializerDefineProperty(this, \"selected\", _descriptor11, this);\n      _initializerDefineProperty(this, \"collapseId\", _descriptor12, this);\n    }\n    get providers() {\n      return _environment.config.providers;\n    }\n    get allRegions() {\n      return _loadTest.default.getAllRegions();\n    }\n    get lastRun() {\n      const lastRunAt = this.testCase?.lastRunAt;\n      return lastRunAt ? moment(lastRunAt).valueOf() : 0;\n    }\n    get runningStats() {\n      return _lib.default.computeRunningStats(this.running, this.matchingSchedules);\n    }\n    get running() {\n      const testCaseId = this.testCase?.id;\n      return _.filter(this.summary?.running || this.testCase?.running, exec => {\n        return exec.testCaseId === testCaseId;\n      });\n    }\n    get matchingSchedules() {\n      const testCaseId = this.testCase?.id;\n      return _.filter(this.summary?.scheduled || this.testCase?.scheduled, schedule => {\n        return schedule.configuration.testCase.id === testCaseId;\n      });\n    }\n    get schedules() {\n      return _.map(this.matchingSchedules, schedule => {\n        return {\n          schedule: schedule,\n          conf: schedule.configuration,\n          testCase: schedule.configuration.testCase\n        };\n      });\n    }\n    get scenarios() {\n      const testCase = this.testCase;\n      const sort = this.sort;\n      const filter = this.filter?.id;\n      const cardLayout = this.cardLayout;\n      const scripts = _.clone(this.scripts);\n      const allRegions = this.allRegions;\n      const allRunning = this.summary?.running;\n      const allScheduled = this.summary?.scheduled;\n      const hasExpanded = this.hasExpandedTestConf;\n      const EventBus = this.EventBus;\n      return _.map(scripts, script => {\n        return _confGroupInfo.default.create({\n          id: confGroupIndex++,\n          type: 'scenario',\n          hasExpanded,\n          testCase: testCase,\n          script: script,\n          filter: filter,\n          sort: sort,\n          show: true,\n          cardLayout: cardLayout,\n          allRegions: allRegions,\n          allRunning: allRunning,\n          allScheduled: allScheduled,\n          EventBus: EventBus\n        });\n      });\n    }\n    get sortedScenarios() {\n      return _loadTest.default.sortConfGroups(this.scenarios, this.sort);\n    }\n    get byPassFail() {\n      const testCase = this.testCase;\n      const sort = this.sort;\n      const filter = this.filter?.id;\n      const cardLayout = this.cardLayout;\n      const allRegions = this.allRegions;\n      const allRunning = this.summary?.running;\n      const allScheduled = this.summary?.scheduled;\n      const EventBus = this.EventBus;\n      const answer = [];\n      _.forEach(PassFailStates, pfState => {\n        answer.push(_confGroupInfo.default.create({\n          id: confGroupIndex++,\n          type: 'passFail',\n          pfState: pfState,\n          testCase: testCase,\n          filter: filter,\n          sort: sort,\n          show: true,\n          cardLayout: cardLayout,\n          allRegions: allRegions,\n          allRunning: allRunning,\n          allScheduled: allScheduled,\n          EventBus: EventBus\n        }));\n      });\n      return answer;\n    }\n    get allConfGroups() {\n      const testCase = this.testCase;\n      const sort = this.sort;\n      const filter = this.filter?.id;\n      const cardLayout = this.cardLayout;\n      const allRegions = this.allRegions;\n      const allRunning = this.summary?.running;\n      const allScheduled = this.summary?.scheduled;\n      const EventBus = this.EventBus;\n      return [_confGroupInfo.default.create({\n        id: confGroupIndex++,\n        type: 'all',\n        testCase: testCase,\n        filter: filter,\n        sort: sort,\n        show: true,\n        cardLayout: cardLayout,\n        allRegions: allRegions,\n        allRunning: allRunning,\n        allScheduled: allScheduled,\n        EventBus: EventBus\n      })];\n    }\n    get currentConfGroups() {\n      if (!this.hasExpanded) {\n        return [];\n      }\n      switch (this.groupBy || 'scenario') {\n        case 'scenario':\n          return this.sortedScenarios;\n        case 'pf':\n          return this.byPassFail;\n        case 'none':\n          return this.allConfGroups;\n      }\n    }\n    get filteredConfGroups() {\n      return _.filter(this.currentConfGroups, confGroup => {\n        return confGroup.matchesFilter && confGroup.show;\n      });\n    }\n    get groupedConfGroups() {\n      return _lib.default.group(this.filteredConfGroups, 2);\n    }\n    init() {\n      super.init(...arguments);\n      _lib.default.observeKeys(this, ['lastRun', 'runningStats', 'testCase.success', 'filter'], this._onMatchesFilterChange);\n      _lib.default.observeKeys(this, ['groupBy', 'hasExpanded'], this._onGroupByChanged);\n      _lib.default.observeKeys(this, ['currentConfGroups', 'summary.scheduled'], this._onScheduledChange);\n      _lib.default.observeKeys(this, ['currentConfGroups', 'summary.running'], this._onRunningChange);\n      _lib.default.observeKeys(this, ['filter', 'sort', 'cardLayout', 'currentConfGroups', 'search'], this._onDisplayChange);\n      this._onMatchesFilterChange();\n      this._onGroupByChanged();\n    }\n    _onMatchesFilterChange() {\n      const newMatchesFilter = doesMatchFilter(this.filter?.id, this.lastRun, this.runningStats, this.testCase?.success || {});\n      // read the untracked shadow so we never consume the tracked tag before writing it\n      if (_.isUndefined(this._matchesFilterValue)) {\n        this._matchesFilterValue = newMatchesFilter;\n        this.matchesFilter = newMatchesFilter;\n      } else if (this._matchesFilterValue !== newMatchesFilter) {\n        this._matchesFilterValue = newMatchesFilter;\n        (0, _runloop.next)(this, function () {\n          if (!this.isDestroyed) {\n            this.matchesFilter = newMatchesFilter;\n          }\n        });\n      }\n    }\n    _onGroupByChanged() {\n      if (this.groupBy === 'scenario' && this.hasExpanded && this.testCase?.scriptCount) {\n        this.loadScenarios();\n      }\n    }\n    _onScheduledChange() {\n      const allScheduled = this.summary?.scheduled;\n      _.forEach(this.currentConfGroups, confGroup => {\n        confGroup.allScheduled = allScheduled;\n      });\n    }\n    _onRunningChange() {\n      const allRunning = this.summary?.running;\n      _.forEach(this.currentConfGroups, confGroup => {\n        confGroup.allRunning = allRunning;\n      });\n    }\n    _onDisplayChange() {\n      if (this._isUpdatingDisplay) return;\n      this._isUpdatingDisplay = true;\n      try {\n        const filter = this.filter?.id;\n        const sort = this.sort;\n        const search = this.search;\n        const cardLayout = this.cardLayout;\n        let isShowParent = false;\n        _.forEach(this.currentConfGroups, confGroup => {\n          const itemMatched = confGroup?.script?.name.toLowerCase().includes(search);\n          const show = !search || itemMatched || this.show;\n          if (itemMatched) isShowParent = true;\n          if (confGroup.parent !== this) confGroup.parent = this;\n          if (confGroup.filter !== filter) confGroup.filter = filter;\n          if (confGroup.sort !== sort) confGroup.sort = sort;\n          if (confGroup.cardLayout !== cardLayout) confGroup.cardLayout = cardLayout;\n          if (confGroup.show !== show) confGroup.show = show;\n          if (confGroup.search !== search) confGroup.search = search;\n        });\n        if (isShowParent && !this.show) {\n          this.show = true;\n        }\n      } finally {\n        (0, _runloop.next)(this, () => {\n          this._isUpdatingDisplay = false;\n        });\n      }\n    }\n    loadScenarios() {\n      if (!this.scripts) {\n        this.isLoading = true;\n        _server.default.getScripts(this.testCase?.id, true, true).then(scripts => {\n          this.scripts = scripts;\n          this.isLoading = false;\n        }, () => {\n          this.scripts = [];\n          this.isLoading = false;\n        });\n      }\n    }\n    loadUpdates(appConfUpdates) {\n      _.forEach(this.filteredConfGroups, confGroupInfo => {\n        confGroupInfo.loadUpdates(appConfUpdates);\n      });\n    }\n    removeConfs(removedConfIds) {\n      _.forEach(this.filteredConfGroups, confGroupInfo => {\n        confGroupInfo.removeConfs(removedConfIds);\n      });\n    }\n    updateScenarios(appScriptUpdates) {\n      const scripts = this.scripts;\n      appScriptUpdates.forEach(asu => {\n        if (scripts && this.testCase?.id === asu.testCaseId && !scripts?.some(script => script.id === asu.id)) {\n          scripts.push(asu);\n          this.scripts = [...scripts];\n        }\n      });\n      _.forEach(this.filteredConfGroups, confGroupInfo => {\n        confGroupInfo.updateScenario(appScriptUpdates);\n      });\n    }\n    removeScenarios(removedScriptIds) {\n      if (this.isDestroyed) {\n        return;\n      }\n      if (this.matchesFilter) {\n        if (this.scripts?.some(obj => new Set(removedScriptIds).has(obj.id))) {\n          this.scripts = [..._.filter(this.scripts, script => {\n            return !removedScriptIds.includes(script.id);\n          })];\n        }\n      }\n    }\n    expandAll(isTestCasePage) {\n      this.toggleExpandCollapse('show', isTestCasePage);\n    }\n    collapseAll(isTestCasePage) {\n      this.toggleExpandCollapse('hide', isTestCasePage);\n    }\n    collapseChildren(isTestCasePage) {\n      this.toggleExpandCollapse('hide', isTestCasePage, true);\n    }\n    toggleExpandCollapse(state, isTestCasePage, childrenOnly) {\n      if (!childrenOnly) {\n        $(`#${this.collapseId || `testCase${this.testCase?.id}`}`).collapse(state);\n      }\n      _.forEach(this.filteredConfGroups, confGroup => {\n        if (isTestCasePage) {\n          $(`#${confGroup.toggleId}`).collapse(state);\n        } else {\n          $(`#main${confGroup.toggleId}`).collapse(state);\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"EventBus\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"scripts\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"matchesFilter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"show\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"search\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"filter\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"sort\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"cardLayout\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"groupBy\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"hasExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"hasExpandedTestConf\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"selected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"collapseId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"allRegions\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"allRegions\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"lastRun\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"lastRun\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runningStats\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"runningStats\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"running\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"running\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"matchingSchedules\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"matchingSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"schedules\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"schedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"scenarios\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"scenarios\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"sortedScenarios\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"sortedScenarios\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"byPassFail\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"byPassFail\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"allConfGroups\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"allConfGroups\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"currentConfGroups\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"currentConfGroups\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"filteredConfGroups\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"filteredConfGroups\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"groupedConfGroups\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"groupedConfGroups\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/test-location-conf-info\", [\"exports\", \"@ember/object\"], function (_exports, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\"eaimeta@70e063a35619d71f\n  class TestLocationConfInfo extends _object.default {}\n  _exports.default = TestLocationConfInfo;\n});","define(\"@testable/shared-ui/models/test-location-info\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/models/test-location-conf-info\"], function (_exports, _object, _tracking, _lib, _loadTest, _testLocationConfInfo) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/models/test-location-conf-info\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  function sortLocationConfInfos(locationConfInfos, sort) {\n    return _.sortBy(locationConfInfos, function (locationConfInfo) {\n      switch (sort) {\n        case 'lastRun':\n          {\n            let createdAt = locationConfInfo.execution?.createdAt;\n            return -1 * (createdAt ? moment(createdAt).valueOf() : 0);\n          }\n        case 'lexical':\n          {\n            let name = locationConfInfo.info?.conf?.name;\n            return name ? name.toLowerCase() : undefined;\n          }\n      }\n    });\n  }\n  let TestLocationInfo = _exports.default = (_dec = (0, _object.computed)('location.name', 'sort', 'srcConfInfos.@each.regionInfos'), _dec2 = (0, _object.computed)('location.{name,description}'), _dec3 = (0, _object.computed)('confs'), _dec4 = (0, _object.computed)('confs'), _dec5 = (0, _object.computed)('outcomeOrder'), _dec6 = (0, _object.computed)('outcomeOrder'), _dec7 = (0, _object.computed)('outcomeOrder'), _dec8 = (0, _object.computed)('outcomeOrder'), _dec9 = (0, _object.computed)('uniqueConfs.@each.info'), _dec0 = (0, _object.computed)('uniqueConfs', 'confInfos.@each.runningStats', 'matchingSchedules'), _dec1 = (0, _object.computed)('confInfos', 'confInfos.@each.running'), _dec10 = (0, _object.computed)('confInfos', 'confInfos.@each.matchingSchedules'), _dec11 = (0, _object.computed)('confInfos', 'confInfos.@each.schedules'), _class = class TestLocationInfo extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"location\", _descriptor, this);\n      _initializerDefineProperty(this, \"sort\", _descriptor2, this);\n      _initializerDefineProperty(this, \"srcConfInfos\", _descriptor3, this);\n    }\n    get confs() {\n      const locationName = this.location?.name;\n      const answer = [];\n      _.forEach(this.srcConfInfos, function (confInfo) {\n        _.forEach(confInfo.regionInfos, function (regionInfo) {\n          if (!regionInfo.location || regionInfo.location.name !== locationName) {\n            return;\n          }\n          if (_.isUndefined(_.find(answer, a => a.info.name === confInfo.name))) {\n            const loc = _testLocationConfInfo.default.create({\n              info: confInfo,\n              executionRegion: regionInfo.executionRegion,\n              execution: regionInfo.execution,\n              outcomeHtml: confInfo.outcomeHtml\n            });\n            answer.push(loc);\n          }\n        });\n      });\n      return sortLocationConfInfos(answer, this.sort);\n    }\n    get tooltip() {\n      const location = this.location;\n      return location ? location.description + (location.name !== location.description ? ' (' + location.name + ')' : '') : '';\n    }\n    get uniqueConfs() {\n      const answer = [];\n      const ids = new Set();\n      _.forEach(this.confs, function (confDetails) {\n        const id = confDetails.info?.conf?.id;\n        if (!ids.has(id)) {\n          answer.push(confDetails);\n          ids.add(id);\n        }\n      });\n      return answer;\n    }\n    get outcomeOrder() {\n      return _.min(_.map(this.confs, function (confDetails) {\n        return _loadTest.default.getExecutionOutcomeOrder(confDetails.executionRegion);\n      }));\n    }\n    get overallOutcomeHtml() {\n      return _loadTest.default.getOutcomeHtml(this.outcomeOrder, null, null, null, null, true);\n    }\n    get overallOutcomeForMap() {\n      return _loadTest.default.getOutcomeForMap(this.outcomeOrder, 16);\n    }\n    get backgroundColorClass() {\n      const outcomeOrder = this.outcomeOrder;\n      if (outcomeOrder === 2) {\n        return 'bg-blue-transparent-2';\n      }\n      if (outcomeOrder === 0) {\n        return 'bg-red-transparent-2';\n      }\n      return 'bg-grey-transparent-2';\n    }\n    get imageName() {\n      const outcomeOrder = this.outcomeOrder;\n      if (outcomeOrder === 2) {\n        return 'check.svg';\n      }\n      if (outcomeOrder === 0) {\n        return 'delete.svg';\n      }\n      if (outcomeOrder === 3) {\n        return 'question.svg';\n      }\n      return 'minus.svg';\n    }\n    get confInfos() {\n      return _.map(this.uniqueConfs, function (confDetails) {\n        return confDetails.info;\n      });\n    }\n    get runningStats() {\n      return _lib.default.mergeStats(_.map(this.confInfos, function (confInfo) {\n        return confInfo.runningStats;\n      }), this.matchingSchedules);\n    }\n    get running() {\n      const answer = [];\n      _.forEach(this.confInfos, function (confInfo) {\n        const running = confInfo.running;\n        answer.push.apply(answer, running || []);\n      });\n      return answer;\n    }\n    get matchingSchedules() {\n      const answer = [];\n      _.forEach(this.confInfos, function (confInfo) {\n        const schedules = confInfo.matchingSchedules;\n        answer.push.apply(answer, schedules || []);\n      });\n      return answer;\n    }\n    get schedules() {\n      const answer = [];\n      _.forEach(this.confInfos, function (confInfo) {\n        const schedules = confInfo.schedules;\n        answer.push.apply(answer, schedules || []);\n      });\n      return answer;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"location\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"sort\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"srcConfInfos\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"confs\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"confs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"tooltip\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"tooltip\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"uniqueConfs\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"uniqueConfs\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"outcomeOrder\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"outcomeOrder\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"overallOutcomeHtml\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"overallOutcomeHtml\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"overallOutcomeForMap\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"overallOutcomeForMap\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"backgroundColorClass\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"backgroundColorClass\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"imageName\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"imageName\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"confInfos\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"confInfos\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"runningStats\", [_dec0], Object.getOwnPropertyDescriptor(_class.prototype, \"runningStats\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"running\", [_dec1], Object.getOwnPropertyDescriptor(_class.prototype, \"running\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"matchingSchedules\", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, \"matchingSchedules\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"schedules\", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, \"schedules\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/models/testable-new-app\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\"], function (_exports, _object, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let TestableNewApp = _exports.default = (_class = class TestableNewApp extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isSaved\", _descriptor, this);\n      _initializerDefineProperty(this, \"orgId\", _descriptor2, this);\n      _initializerDefineProperty(this, \"gateway\", _descriptor3, this);\n      _initializerDefineProperty(this, \"testCase\", _descriptor4, this);\n      _initializerDefineProperty(this, \"recording\", _descriptor5, this);\n      _initializerDefineProperty(this, \"script\", _descriptor6, this);\n      _initializerDefineProperty(this, \"configuration\", _descriptor7, this);\n      _initializerDefineProperty(this, \"loadTestExecution\", _descriptor8, this);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSaved\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"orgId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"gateway\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"testCase\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"recording\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"script\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"configuration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"loadTestExecution\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/models/trigger-condition\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/object/observers\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\"], function (_exports, _object, _tracking, _observers, _loadTest, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/object/observers\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const PercentSuffix = '-percent';\n  let ConditionId = 1;\n  let TriggerCondition = _exports.default = (_class = class TriggerCondition extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"type\", _descriptor, this);\n      _initializerDefineProperty(this, \"valueType\", _descriptor2, this);\n      _initializerDefineProperty(this, \"timePeriod\", _descriptor3, this);\n      _initializerDefineProperty(this, \"metricText\", _descriptor4, this);\n      _initializerDefineProperty(this, \"metricKey\", _descriptor5, this);\n      _initializerDefineProperty(this, \"metric\", _descriptor6, this);\n      _initializerDefineProperty(this, \"namespace\", _descriptor7, this);\n      _initializerDefineProperty(this, \"isPercentage\", _descriptor8, this);\n      _initializerDefineProperty(this, \"isCumulative\", _descriptor9, this);\n      _initializerDefineProperty(this, \"isBreakingPoint\", _descriptor0, this);\n      _initializerDefineProperty(this, \"metricDefs\", _descriptor1, this);\n      _initializerDefineProperty(this, \"operator\", _descriptor10, this);\n      _initializerDefineProperty(this, \"threshold\", _descriptor11, this);\n      _initializerDefineProperty(this, \"lastValue\", _descriptor12, this);\n      _initializerDefineProperty(this, \"conditionMet\", _descriptor13, this);\n      _initializerDefineProperty(this, \"scriptType\", _descriptor14, this);\n      _initializerDefineProperty(this, \"level\", _descriptor15, this);\n      _initializerDefineProperty(this, \"resource\", _descriptor16, this);\n      _initializerDefineProperty(this, \"resourceChooser\", _descriptor17, this);\n      _initializerDefineProperty(this, \"resourceId\", _descriptor18, this);\n      _initializerDefineProperty(this, \"id\", _descriptor19, this);\n    }\n    get allowLastMinuteTimePeriod() {\n      const isBreakingPoint = this.isBreakingPoint;\n      const metricKey = this.metricKey;\n      const metricDef = this.metricDef;\n      return isBreakingPoint && (!metricDef || metricDef.metricType !== 'Counter' || !metricKey || metricKey.indexOf('peak') !== 0);\n    }\n    get metricDef() {\n      return _loadTest.default.findMetricDef(this.namespace, this.metric, this.metricDefs);\n    }\n    get metricUnits() {\n      const valueType = this.valueType;\n      return valueType === 'Change' || this.isPercentage ? '%' : _loadTest.default.getUnits(this.namespace, this.metricText, this.metricDefs);\n    }\n    get lastValueText() {\n      return _lib.default.printMetricValue(this.lastValue, this.metricUnits);\n    }\n    get isPass() {\n      const conditionMet = this.conditionMet;\n      const isBreakingPoint = this.isBreakingPoint;\n      return _.isUndefined(conditionMet) || conditionMet && !isBreakingPoint || !conditionMet && isBreakingPoint;\n    }\n    get typeText() {\n      let combo = this.valueType + '|' + this.timePeriod;\n      switch (combo) {\n        case 'Change|EntireTest':\n          return 'Change from previous test runs';\n        case 'Change|LastMinute':\n          return 'Change minute over minute';\n        case 'Absolute|EntireTest':\n          return 'Value during test';\n        case 'Absolute|LastMinute':\n          return 'Active value';\n      }\n    }\n    get conditionText() {\n      const metric = _loadTest.default.printConditionMetric(this, this.metricDefs, this.scriptType);\n      const operator = _loadTest.default.printOperator(this.operator);\n      const threshold = _lib.default.printMetricValue(this.threshold, this.metricUnits);\n      return metric + operator + threshold;\n    }\n    get displayName() {\n      return _loadTest.default.toMetricName(this, this.scriptType);\n    }\n    toMetricText() {\n      let answer = this.metric;\n      if (this.metricKey) {\n        answer += '-' + this.metricKey;\n      }\n      if (this.isPercentage) {\n        answer += PercentSuffix;\n      }\n      return answer;\n    }\n    init() {\n      super.init(...arguments);\n      this.metricText = this.toMetricText();\n      this.id = ConditionId++;\n      const allowLastMinuteTimePeriod = this.allowLastMinuteTimePeriod;\n      const valueType = this.valueType || 'Absolute';\n      const timePeriod = this.timePeriod || (allowLastMinuteTimePeriod ? 'LastMinute' : 'EntireTest');\n      this.type = valueType + '|' + timePeriod;\n      (0, _observers.addObserver)(this, 'type', this, this._typeChanged);\n      (0, _observers.addObserver)(this, 'allowLastMinuteTimePeriod', this, this._isAllowLastMinuteChanged);\n      (0, _observers.addObserver)(this, 'metricText', this, this._metricTextChanged);\n    }\n    _typeChanged() {\n      const valueTypeAndTimePeriod = this.type;\n      if (_.isString(valueTypeAndTimePeriod)) {\n        const parts = valueTypeAndTimePeriod.split('|');\n        if (parts.length === 2) {\n          if (this.valueType !== parts[0]) {\n            this.valueType = parts[0];\n          }\n          if (this.timePeriod !== parts[1]) {\n            this.timePeriod = parts[1];\n          }\n        }\n      }\n    }\n    _isAllowLastMinuteChanged() {\n      const allowLastMinuteTimePeriod = this.allowLastMinuteTimePeriod;\n      const valueType = this.valueType || 'Absolute';\n      const timePeriod = allowLastMinuteTimePeriod ? 'LastMinute' : 'EntireTest';\n      const newType = valueType + '|' + timePeriod;\n      if (this.type !== newType) {\n        this.type = newType;\n      }\n    }\n    _metricTextChanged() {\n      const metricDetails = _loadTest.default.parseMetric(this.metricText);\n      if (this.isPercentage !== metricDetails.isPercentage) {\n        this.isPercentage = metricDetails.isPercentage;\n      }\n      if (this.metricKey !== metricDetails.key) {\n        this.metricKey = metricDetails.key;\n      }\n      if (this.metric !== metricDetails.name) {\n        this.metric = metricDetails.name;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"type\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"valueType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"timePeriod\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"metricText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"metricKey\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"metric\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"namespace\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isPercentage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"isCumulative\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"isBreakingPoint\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"metricDefs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"operator\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"threshold\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"lastValue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"conditionMet\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"scriptType\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"level\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"resource\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"resourceChooser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"resourceId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/models/user\", [\"exports\", \"@ember/object\", \"@glimmer/tracking\"], function (_exports, _object, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let User = _exports.default = (_class = class User extends _object.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isLoggedIn\", _descriptor, this);\n      _initializerDefineProperty(this, \"isNoPlan\", _descriptor2, this);\n      _initializerDefineProperty(this, \"monitoringActivationError\", _descriptor3, this);\n      _initializerDefineProperty(this, \"id\", _descriptor4, this);\n      _initializerDefineProperty(this, \"email\", _descriptor5, this);\n      _initializerDefineProperty(this, \"sid\", _descriptor6, this);\n      _initializerDefineProperty(this, \"orgId\", _descriptor7, this);\n      _initializerDefineProperty(this, \"org\", _descriptor8, this);\n      _initializerDefineProperty(this, \"plan\", _descriptor9, this);\n      _initializerDefineProperty(this, \"orgs\", _descriptor0, this);\n      _initializerDefineProperty(this, \"myOrg\", _descriptor1, this);\n    }\n    printLimits(limitType, scriptType) {\n      return null;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isLoggedIn\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isNoPlan\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"monitoringActivationError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"id\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"email\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"sid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"orgId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"org\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"plan\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"orgs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"myOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/modifiers/autofocusAndSelect\", [\"exports\", \"ember-modifier\"], function (_exports, _emberModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-modifier\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _emberModifier.modifier)((element /*, positional, named*/) => {\n    element.focus();\n    element.select();\n  });\n});","define(\"@testable/shared-ui/modifiers/cleanup-overlays\", [\"exports\", \"ember-modifier\"], function (_exports, _emberModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-modifier\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _emberModifier.modifier)(() => {\n    return () => {\n      document.querySelectorAll('.popover').forEach(el => el.remove());\n      document.querySelectorAll('.tooltip').forEach(el => el.remove());\n    };\n  });\n});","define(\"@testable/shared-ui/routes/confirm-email-base\", [\"exports\", \"@ember/routing/route\", \"@ember/service\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/environment\"], function (_exports, _route, _service, _login, _server, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ConfirmEmailBaseRoute = _exports.default = (_class = class ConfirmEmailBaseRoute extends _route.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _defineProperty(this, \"queryParams\", {\n        email: {\n          refreshModel: true\n        }\n      });\n    }\n    async model(params) {\n      const result = await _server.default.confirmEmail(params.code, params.email);\n      if (result.success) {\n        _login.default.applyLoginResult(_environment.config.currentUser, result);\n        this.router.transitionTo('index');\n      }\n      return result;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/routes/load-test-results-base\", [\"exports\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/session\", \"@testable/shared-ui/utils/lib\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\"], function (_exports, _server, _session, _lib, _service, _tracking, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/session\",0,\"@testable/shared-ui/utils/lib\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LoadTestResultsBaseRoute = _exports.default = (_class = class LoadTestResultsBaseRoute extends _session.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"applicationState\", _descriptor, this);\n      _initializerDefineProperty(this, \"allowTransition\", _descriptor2, this);\n      _initializerDefineProperty(this, \"hasDashboardChanges\", _descriptor3, this);\n    }\n    beforeModel() {\n      let result = super.beforeModel(...arguments);\n      window.onbeforeunload = () => {\n        if (this.controller?.hasDashboardChanges) {\n          return 'View has unsaved layout changes.';\n        }\n      };\n      return result;\n    }\n    model(params) {\n      let options = '';\n      if (params.compare) {\n        options = `baseline=${params.compare}`;\n      }\n      return _server.default.getLoadTestExecution(params.executionId, options);\n    }\n    afterModel(model) {\n      super.afterModel(...arguments);\n      $(document).attr('title', 'Test Results - ' + (model && model.confName || 'N/A') + ' - Testable');\n    }\n    serialize(model) {\n      return {\n        executionId: model.id\n      };\n    }\n    resetController(controller, isExiting) {\n      if (isExiting) {\n        (0, _object.set)(controller, 'hasDashboardChanges', false);\n        _lib.default.resetQueryParams(controller);\n      }\n    }\n    willTransition(transition) {\n      const self = this;\n      if (this.controller?.hasDashboardChanges && !this.allowTransition) {\n        transition.abort();\n        _lib.default.confirm('View has unsaved layout changes, are you sure you want to continue?', 'Continue', () => {\n          window.onbeforeunload = null;\n          self.allowTransition = true;\n          self.hasDashboardChanges = false;\n          transition.retry();\n        }, 'Cancel');\n      } else {\n        window.onbeforeunload = null;\n        this.allowTransition = false;\n        this.applicationState.setProp('selectedId', -1);\n      }\n      return true;\n    }\n    loading(transition) {\n      const controller = this.controllerFor('loadTestResults');\n      if (controller) {\n        (0, _object.set)(controller, 'currentlyLoading', true);\n        (0, _object.set)(controller, 'hasDashboardChanges', false);\n        transition.promise.finally(() => {\n          (0, _object.set)(controller, 'currentlyLoading', false);\n        });\n      }\n      return true;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"applicationState\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"allowTransition\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"hasDashboardChanges\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"willTransition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"willTransition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"loading\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"loading\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/routes/login-base\", [\"exports\", \"@ember/routing/route\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/login-redirect\"], function (_exports, _route, _service, _environment, _login, _server, _loginRedirect) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/login-redirect\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let LoginBaseRoute = _exports.default = (_class = class LoginBaseRoute extends _route.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    beforeModel(transition) {\n      if (_environment.config.requireAccessCode && _.isEmpty(_login.default.getAccessCodeCookie())) {\n        this.router.transitionTo('access');\n      } else if (!_environment.config.currentUser.isLoggedIn) {\n        return _login.default.userInfoFromSession(_environment.config.currentUser, transition.to.queryParams.sid, transition.to.queryParams.org);\n      }\n    }\n    getSubdomainModel({\n      skipSubdomains = []\n    } = {}) {\n      let hostname = window.location.hostname;\n      if (_environment.config.isSamlOnPremEnabled) {\n        return _server.default.getSubdomain('default');\n      } else if (!_environment.config.isOnPrem && hostname !== _environment.config.websiteHost && hostname.includes('.testable.io')) {\n        let subdomain = hostname.substring(0, hostname.indexOf('.'));\n        return skipSubdomains.includes(subdomain) ? {} : _server.default.getSubdomain(subdomain).then(null, () => {\n          window.location.href = _environment.config.websiteUrl;\n        });\n      }\n      return null;\n    }\n    setupController(controller, model) {\n      super.setupController(...arguments);\n      const redirect = this.controllerFor('application').redirect;\n      controller.redirect = redirect;\n      if (_environment.config.currentUser.isLoggedIn) {\n        this.controllerFor('application').redirect = null;\n        (0, _loginRedirect.redirectAfterLogin)(this.router, redirect);\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/routes/reset-password-base\", [\"exports\", \"@ember/routing/route\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/environment\"], function (_exports, _route, _login, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  class ResetPasswordBaseRoute extends _route.default {\n    model(params) {\n      return _login.default.validatePasswordResetCode(params.code).then(data => {\n        if (data) {\n          return {\n            code: params.code,\n            codeValid: true,\n            email: data.email\n          };\n        }\n        return {\n          codeValid: false\n        };\n      });\n    }\n    afterModel() {\n      const appName = _environment.config.isMonitoring ? 'Testable Monitoring' : 'Testable';\n      $(document).attr('title', `Reset Password - ${appName}`);\n    }\n    serialize(model) {\n      return {\n        code: model.code\n      };\n    }\n  }\n  _exports.default = ResetPasswordBaseRoute;\n});","define(\"@testable/shared-ui/services/ai-agent\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"tracked-built-ins\"], function (_exports, _service, _tracking, _environment, _lib, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _descriptor32, _descriptor33, _descriptor34, _descriptor35, _descriptor36, _descriptor37, _descriptor38, _descriptor39, _descriptor40;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const ModeOptions = [{\n    value: 'agent',\n    label: 'Agent',\n    description: 'Can make changes to your monitors'\n  }, {\n    value: 'ask',\n    label: 'Ask',\n    description: 'Read-only mode for questions'\n  }];\n  const HISTORY_LIMIT = 20;\n  const AUTO_APPROVE_ALL_TOOLS_NAME = '__all_tools__';\n  const AUTO_APPROVED_TOOLS_STORAGE_KEY = 'ai-agent-auto-approved-tools';\n  const AUTO_APPROVE_ALL_TOOLS_STORAGE_KEY = 'ai-agent-auto-approve-all-tools';\n  const WelcomePrompts = {\n    Monitoring: `Let us know how we can assist you today. For example, you can ask me to:\n* **Summarize** my monitors and highlight any areas of concern.\n* **Create** a monitor that loads https://testable.io in a browser, checks that the title contains \"Testable\", and takes a screenshot. Run it every 15 minutes.\n* **Change** all monitors that run every 5 minutes to run every 15 minutes.\n* **Add** a teammate to notifications (e.g. \"Add alice@company.com for all monitors\").\n* **Create** a maintenance window from Friday 8pm UTC to Sunday 4pm UTC. Do not apply it to any monitor with ALWAYS in the name.\n* **Analyze** my latest incidents and suggest where to focus my investigation.`,\n    MonitoringEmptyOrg: `Let us know how we can assist you today. Here are some ways to get started:\n* **Create** a monitor that loads https://testable.io in a browser, checks that the title contains \"Testable\", and takes a screenshot. Run it every 15 minutes.\n* **Add** someone to receive notifications (e.g. \"Add alice@company.com for all monitors\").\n* **Create** a maintenance window (e.g. \"Friday 8pm UTC to Sunday 4pm UTC\") so monitors are paused during that time.\n* **Explain** what kinds of monitors I can create and how often they can run.\n* **Create** a simple HTTP monitor that checks my staging URL returns 200 every 5 minutes.`,\n    Testable: `Let us know how we can assist you today. For example, you can ask me to:\n* **Summarize** my test cases and highlight any areas of concern.\n* **Create and run** a functional test: load https://testable.io, check the title contains \"Testable\", and take a screenshot.\n* **Change** all load tests to run for twice as long as they do now.\n* **Add** a teammate to test notifications (e.g. \"Add alice@company.com for all tests\").\n* **Create** a Locust scenario that requests https://testable.io and follows links from the response.\n* **Analyze** the latest test result and list specific areas of concern.`,\n    TestableEmptyOrg: `Let us know how we can assist you today. Here are some ways to get started:\n* **Create** a functional test that loads https://testable.io, checks that the title contains \"Testable\", and takes a screenshot.\n* **Set up** a load test that runs for 5 minutes and hits https://example.com.\n* **Add** someone to receive test notifications (e.g. \"Add alice@company.com for all tests\").\n* **Create** a Locust scenario that requests https://testable.io and follows links from the response.\n* **Explain** what kinds of tests I can run in Testable and how to run them.\n* **Create** a simple smoke test that verifies my staging URL returns 200.`\n  };\n  let AiAgentService = _exports.default = (_class = class AiAgentService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"api\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _defineProperty(this, \"_initialized\", false);\n      _defineProperty(this, \"_historyOffset\", 0);\n      _defineProperty(this, \"socket\", null);\n      _defineProperty(this, \"appName\", null);\n      _defineProperty(this, \"modeOptions\", ModeOptions);\n      _defineProperty(this, \"_messageQueue\", []);\n      _defineProperty(this, \"_parseDebounceTimer\", null);\n      _defineProperty(this, \"_connectionTimeout\", null);\n      _defineProperty(this, \"_CONNECTION_TIMEOUT_MS\", 30000);\n      // 30 second timeout for socket connection\n      _initializerDefineProperty(this, \"isStreaming\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isConversationReady\", _descriptor4, this);\n      _initializerDefineProperty(this, \"_loadingHistoryConversationId\", _descriptor5, this);\n      _initializerDefineProperty(this, \"hasMoreHistory\", _descriptor6, this);\n      _initializerDefineProperty(this, \"historyLoaded\", _descriptor7, this);\n      _initializerDefineProperty(this, \"authError\", _descriptor8, this);\n      _initializerDefineProperty(this, \"errorMessage\", _descriptor9, this);\n      _initializerDefineProperty(this, \"currentSessionId\", _descriptor0, this);\n      _initializerDefineProperty(this, \"replyQueue\", _descriptor1, this);\n      _initializerDefineProperty(this, \"queueCancelledNotice\", _descriptor10, this);\n      _defineProperty(this, \"_queueCancelledTimer\", null);\n      _initializerDefineProperty(this, \"aiModels\", _descriptor11, this);\n      _initializerDefineProperty(this, \"regions\", _descriptor12, this);\n      _initializerDefineProperty(this, \"conversations\", _descriptor13, this);\n      _initializerDefineProperty(this, \"isLoadingConversations\", _descriptor14, this);\n      _initializerDefineProperty(this, \"activeConversationId\", _descriptor15, this);\n      _initializerDefineProperty(this, \"conversationTitle\", _descriptor16, this);\n      _initializerDefineProperty(this, \"chatMessages\", _descriptor17, this);\n      _initializerDefineProperty(this, \"currentResponseText\", _descriptor18, this);\n      _initializerDefineProperty(this, \"currentReasoningSummaryText\", _descriptor19, this);\n      _initializerDefineProperty(this, \"liveCycleStartedAt\", _descriptor20, this);\n      _initializerDefineProperty(this, \"liveCycleNow\", _descriptor21, this);\n      _initializerDefineProperty(this, \"conversationModel\", _descriptor22, this);\n      _initializerDefineProperty(this, \"conversationContextSize\", _descriptor23, this);\n      _initializerDefineProperty(this, \"conversationCost\", _descriptor24, this);\n      _initializerDefineProperty(this, \"conversationInputTokens\", _descriptor25, this);\n      _initializerDefineProperty(this, \"conversationCachedInputTokens\", _descriptor26, this);\n      _initializerDefineProperty(this, \"conversationOutputTokens\", _descriptor27, this);\n      _initializerDefineProperty(this, \"conversationStartTime\", _descriptor28, this);\n      _initializerDefineProperty(this, \"activeConversation\", _descriptor29, this);\n      _initializerDefineProperty(this, \"toolCalls\", _descriptor30, this);\n      _initializerDefineProperty(this, \"_toolCallsDirty\", _descriptor31, this);\n      _initializerDefineProperty(this, \"_approvedHistoryCallIds\", _descriptor32, this);\n      _initializerDefineProperty(this, \"_historyToolResults\", _descriptor33, this);\n      _initializerDefineProperty(this, \"selectedModel\", _descriptor34, this);\n      _initializerDefineProperty(this, \"selectedRegion\", _descriptor35, this);\n      _initializerDefineProperty(this, \"selectedMode\", _descriptor36, this);\n      /** When true, show the empty-org welcome prompt (no monitors / no test cases). Set via setEmptyOrg(). */\n      _initializerDefineProperty(this, \"isEmptyOrg\", _descriptor37, this);\n      _initializerDefineProperty(this, \"isSidebarOpen\", _descriptor38, this);\n      _initializerDefineProperty(this, \"_showOnMainPage\", _descriptor39, this);\n      _initializerDefineProperty(this, \"activeDataStoreId\", _descriptor40, this);\n      _defineProperty(this, \"contextMap\", {});\n      _defineProperty(this, \"_wasEmbedMode\", false);\n    }\n    get isVisible() {\n      return this.isSidebarOpen || this._showOnMainPage;\n    }\n    get showAiToggle() {\n      return _environment.config.currentUser.isLoggedIn && this.router.currentRouteName !== 'conversations' && !this._showOnMainPage;\n    }\n    get isReadOnly() {\n      return _environment.config.currentUser.isViewer;\n    }\n    get modelOptions() {\n      return [{\n        name: 'auto',\n        description: 'Auto'\n      }, ...this.aiModels];\n    }\n    get conversationsList() {\n      return this.conversations.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));\n    }\n    get toolCallsList() {\n      this._toolCallsDirty;\n      return Array.from(this.toolCalls.values());\n    }\n    get isLoadingHistory() {\n      return this._loadingHistoryConversationId === this.activeConversationId && this._loadingHistoryConversationId !== null;\n    }\n    get browserSessions() {\n      return this.activeConversation?.browserSessions || [];\n    }\n    get liveWorkCycleHeader() {\n      if (!this.liveCycleStartedAt || !this.isStreaming) return null;\n      const now = this.liveCycleNow || new Date();\n      return {\n        itemType: 'LiveWorkCycle',\n        durationMs: Math.max(0, now - this.liveCycleStartedAt)\n      };\n    }\n    get attachments() {\n      return this.activeConversation?.attachments || [];\n    }\n    get hasActiveToolCalls() {\n      return this.toolCallsList.some(t => t.status === 'in_progress' || t.requiresApproval);\n    }\n    get isReplyQueued() {\n      return this.currentSessionId != null && this.replyQueue.some(q => q.sessionId == this.currentSessionId);\n    }\n    _eventSessionId(event) {\n      return event?.sessionId ?? event?.data?.sessionId ?? null;\n    }\n    get welcomePrompt() {\n      if (_environment.config.isMonitoring && this.isEmptyOrg) return WelcomePrompts.MonitoringEmptyOrg || '';\n      if (!_environment.config.isMonitoring && this.isEmptyOrg) return WelcomePrompts.TestableEmptyOrg || '';\n      const app = _environment.config.isMonitoring ? 'Monitoring' : 'Testable';\n      return WelcomePrompts[app] || '';\n    }\n    get conversationMeta() {\n      if (!this.conversationStartTime) return null;\n      return {\n        elapsed: _lib.default.displayRelativeDuration(this.conversationStartTime, moment(), true),\n        absoluteTime: _lib.default.displayDateTime(this.conversationStartTime),\n        model: this.conversationModel,\n        contextSize: this.conversationContextSize != null ? this.formatContextSize(this.conversationContextSize) : ''\n      };\n    }\n    get contextUsage() {\n      if (this.conversationContextSize == null || !this.conversationModel) return null;\n      const model = this.aiModels.find(m => m.name === this.conversationModel);\n      if (!model?.contextWindow) return null;\n      const percent = this.conversationContextSize / model.contextWindow * 100;\n      return {\n        percent: percent.toFixed(1),\n        dashOffset: 100 - Math.min(percent, 100),\n        tooltip: `${percent.toFixed(1)}% · ${this.formatContextSize(this.conversationContextSize)} / ${this.formatContextSize(model.contextWindow)} context used`\n      };\n    }\n    get costDisplay() {\n      if (this.conversationCost == null || this.conversationCost === 0) return null;\n      const formattedCost = this.conversationCost.toFixed(4);\n      const tooltipLines = [`${this.formatContextSize(this.conversationInputTokens)} input tokens`, `${this.formatContextSize(this.conversationCachedInputTokens)} cached input tokens`, `${this.formatContextSize(this.conversationOutputTokens)} output tokens`];\n      return {\n        cost: formattedCost,\n        tooltipHtml: tooltipLines.join('<br>')\n      };\n    }\n    setup(appName, contextMap) {\n      this.appName = appName;\n      this.contextMap = contextMap;\n    }\n\n    /**\n     * Set whether the current org is empty (no monitors in Monitoring, no test cases in Testable).\n     * When true, the empty-org welcome prompt is shown instead of the default one.\n     * @param {boolean} value\n     */\n    setEmptyOrg(value) {\n      this.isEmptyOrg = !!value;\n    }\n    initialize() {\n      if (this._initialized) return;\n      this._initialized = true;\n      this.loadModels();\n      this.loadRegions();\n      this.loadConversations();\n    }\n    async loadModels() {\n      try {\n        this.aiModels = await this.api.conversations.getAiModels();\n      } catch (error) {\n        _lib.default.error('Failed to load AI models:', error);\n      }\n    }\n    async loadRegions() {\n      try {\n        this.regions = await this.api.monitors.loadAllRegions();\n      } catch (error) {\n        _lib.default.error('Failed to load regions:', error);\n      }\n    }\n    async loadConversations() {\n      this.isLoadingConversations = true;\n      try {\n        const response = await this.api.conversations.getAll({\n          app: _environment.config.isMonitoring ? 'Monitoring' : 'Testable'\n        });\n        this.conversations = response?.results || [];\n        this._restoreConversationFromUrl();\n      } catch (error) {\n        _lib.default.error('Failed to load conversations:', error);\n      } finally {\n        this.isLoadingConversations = false;\n      }\n    }\n    formatContextSize(tokens) {\n      return _lib.default.printContextSize(tokens);\n    }\n    createNewConversation() {\n      if (!this.activeConversationId && !this.chatMessages.length && !this.isStreaming) {\n        return;\n      }\n      this.closeSocket();\n      this._resetConversationState();\n      this._updateConversationUrl(null);\n    }\n    _parseCreatedDate(createdAt) {\n      return createdAt ? new Date(createdAt) : null;\n    }\n    _startLiveCycle(createdAt = new Date()) {\n      this._stopLiveCycle();\n      const startedAt = createdAt instanceof Date ? createdAt : new Date(createdAt);\n      this.liveCycleStartedAt = Number.isNaN(startedAt.getTime()) ? new Date() : startedAt;\n      this.liveCycleNow = new Date();\n      this._liveCycleTimer = setInterval(() => {\n        this.liveCycleNow = new Date();\n      }, 1000);\n    }\n    _stopLiveCycle() {\n      if (this._liveCycleTimer) {\n        clearInterval(this._liveCycleTimer);\n        this._liveCycleTimer = null;\n      }\n      this.liveCycleStartedAt = null;\n      this.liveCycleNow = null;\n    }\n    _setConversationProperties(conversation, useCurrentTime = false) {\n      this.conversationTitle = conversation.title || '';\n      this.conversationModel = conversation.model || '';\n      this.conversationContextSize = conversation.contextUsed || 0;\n      this.conversationCost = conversation.cost || 0;\n      this.conversationInputTokens = conversation.inputTokens || 0;\n      this.conversationCachedInputTokens = conversation.cachedInputTokens || 0;\n      this.conversationOutputTokens = conversation.outputTokens || 0;\n      this.conversationStartTime = useCurrentTime ? new Date() : this._parseCreatedDate(conversation.createdAt);\n    }\n    _conversationUpdateFromEventData(eventData = {}) {\n      const conversation = eventData.conversation ? {\n        ...eventData.conversation\n      } : {};\n      ['inputTokens', 'cachedInputTokens', 'outputTokens', 'cost'].forEach(prop => {\n        if (Object.prototype.hasOwnProperty.call(eventData, prop)) {\n          conversation[prop] = eventData[prop];\n        }\n      });\n      return Object.keys(conversation).length ? conversation : null;\n    }\n    _mergeActiveConversationUpdate(update) {\n      const existing = this.activeConversation || {};\n      const merged = {\n        ...existing,\n        ...update,\n        id: update.id || this.activeConversationId\n      };\n      if ((!update.browserSessions || update.browserSessions.length === 0) && existing.browserSessions?.length) {\n        merged.browserSessions = existing.browserSessions;\n      }\n      if ((!update.attachments || update.attachments.length === 0) && existing.attachments?.length) {\n        merged.attachments = existing.attachments;\n      }\n      return merged;\n    }\n    selectConversation(conversation) {\n      if (conversation.id === this.activeConversationId) return;\n      this.closeSocket();\n      this._resetConversationState();\n      this.activeConversationId = conversation.id;\n      this._setConversationProperties(conversation);\n      this._updateConversationUrl(conversation.id);\n      this.loadHistory(conversation.id);\n      this.loadConversationDetail(conversation.id);\n      this.joinConversation(conversation.id);\n    }\n    joinConversation(conversationId) {\n      this.closeSocket(false);\n      const socket = _lib.default.newSockjs(_environment.config.apiBaseUrl + '/real-time/monitor-ai');\n      this.socket = socket;\n      this._connectionTimeout = setTimeout(() => {\n        if (this.socket === socket) {\n          console.error('[ai-agent] Connection timeout - closing socket');\n          this.closeSocket(false);\n        }\n      }, this._CONNECTION_TIMEOUT_MS);\n      socket.onopen = () => {\n        this._clearConnectionTimeout();\n        const ctx = this.currentContext;\n        const model = this.selectedModel && this.selectedModel.name !== 'auto' ? this.selectedModel.name : null;\n        const payload = {\n          sid: _environment.config.currentUser.sid\n        };\n        const join = {\n          orgId: _environment.config.currentUser.orgId,\n          conversationId\n        };\n        if (model) join.model = model;\n        if (ctx) join.context = ctx;\n        payload.join = join;\n        payload.mode = this.selectedMode.value;\n        if (this.selectedRegion) payload.regionId = this.selectedRegion.id;\n        socket.send(JSON.stringify(payload));\n      };\n      socket.onmessage = e => {\n        if (this.socket !== socket) return;\n        this._queueMessage(e.data, socket);\n      };\n      socket.onclose = () => {\n        if (this.socket !== socket) return;\n        this._clearConnectionTimeout();\n        this.isStreaming = false;\n        this.isConversationReady = false;\n        this._stopLiveCycle();\n        this._pendingToolApproval = null;\n        this.socket = null;\n      };\n      socket.onerror = error => {\n        if (this.socket !== socket) return;\n        this._clearConnectionTimeout();\n        console.error('[ai-agent] Connection error:', error);\n        this.isStreaming = false;\n        this._stopLiveCycle();\n        this._pendingToolApproval = null;\n      };\n    }\n    async loadConversationDetail(conversationId) {\n      try {\n        const detail = await this.api.conversations.get(conversationId);\n        if (this.activeConversationId === conversationId) {\n          this.activeConversation = this._mergeActiveConversationUpdate(detail);\n          this._setConversationProperties(detail);\n        }\n      } catch (error) {\n        _lib.default.error('Failed to load conversation detail:', error);\n      }\n    }\n    async loadHistory(conversationId) {\n      if (this._loadingHistoryConversationId === conversationId) return;\n      this._loadingHistoryConversationId = conversationId;\n      this._historyOffset = 0;\n      this.hasMoreHistory = false;\n      try {\n        const response = await this.api.conversations.getHistoryCycles(conversationId, {\n          limit: HISTORY_LIMIT,\n          offset: 0\n        });\n        const cycles = response?.results || [];\n        if (!cycles.length) {\n          await this._loadRawHistoryFallback(conversationId);\n          return;\n        }\n        const displayCycles = [...cycles].reverse();\n        const chatMessages = this._cyclesToChatMessages(displayCycles);\n        const model = cycles[0]?.finalEntry?.model || cycles[0]?.userEntry?.model || '';\n        const hasMoreHistory = cycles.length >= HISTORY_LIMIT;\n        const historyOffset = cycles.length;\n        const startTime = this._parseCreatedDate(displayCycles[0]?.startedAt);\n        if (this.activeConversationId === conversationId) {\n          this.hasMoreHistory = hasMoreHistory;\n          this._historyOffset = historyOffset;\n          this.conversationModel = model;\n          this.conversationStartTime = startTime;\n          this.chatMessages = chatMessages;\n          this.historyLoaded++;\n        }\n      } catch (error) {\n        _lib.default.error('Failed to load conversation history:', error);\n      } finally {\n        if (this._loadingHistoryConversationId === conversationId) {\n          this._loadingHistoryConversationId = null;\n        }\n      }\n    }\n    async loadMoreHistory() {\n      if (this.isLoadingHistory || !this.hasMoreHistory || !this.activeConversationId) return;\n      const conversationId = this.activeConversationId;\n      this._loadingHistoryConversationId = conversationId;\n      try {\n        const response = await this.api.conversations.getHistoryCycles(conversationId, {\n          limit: HISTORY_LIMIT,\n          offset: this._historyOffset\n        });\n        if (this.activeConversationId !== conversationId) return;\n        const cycles = response?.results || [];\n        if (!cycles.length) {\n          this.hasMoreHistory = false;\n          return;\n        }\n        this.hasMoreHistory = cycles.length >= HISTORY_LIMIT;\n        this._historyOffset += cycles.length;\n        const displayCycles = [...cycles].reverse();\n        this.conversationStartTime = this._parseCreatedDate(displayCycles[0]?.startedAt);\n        this.chatMessages = [...this._cyclesToChatMessages(displayCycles), ...this.chatMessages];\n      } catch (error) {\n        _lib.default.error('Failed to load more history:', error);\n      } finally {\n        if (this._loadingHistoryConversationId === conversationId) {\n          this._loadingHistoryConversationId = null;\n        }\n      }\n    }\n    async _loadRawHistoryFallback(conversationId) {\n      const response = await this.api.conversations.getHistory(conversationId, {\n        limit: HISTORY_LIMIT,\n        offset: 0\n      });\n      const items = response?.results || [];\n      if (!items.length || this.activeConversationId !== conversationId) return;\n      const displayItems = [...items].reverse();\n      this.hasMoreHistory = false;\n      this._historyOffset = items.length;\n      this.conversationModel = items[0].model || '';\n      this.conversationStartTime = this._parseCreatedDate(displayItems[0]?.createdAt);\n      this.chatMessages = displayItems;\n      this.historyLoaded++;\n    }\n    _cyclesToChatMessages(cycles) {\n      return cycles.flatMap(cycle => {\n        const messages = [];\n        if (cycle.userEntry) messages.push(cycle.userEntry);\n        if (cycle.hasWork) {\n          messages.push({\n            itemType: 'WorkCycle',\n            cycleId: cycle.cycleId,\n            startedAt: cycle.startedAt,\n            finishedAt: cycle.finishedAt,\n            durationMs: cycle.durationMs,\n            workEntryCount: cycle.workEntryCount,\n            toolCallCount: cycle.toolCallCount,\n            webSearchCount: cycle.webSearchCount,\n            videoCount: cycle.videoCount,\n            expanded: false,\n            loading: false,\n            loaded: false,\n            entries: null\n          });\n        }\n        if (cycle.finalEntry) messages.push(cycle.finalEntry);\n        return messages;\n      });\n    }\n    _updateWorkCycle(workCycle, updates) {\n      let updatedWorkCycle = null;\n      this.chatMessages = this.chatMessages.map(item => {\n        if (item !== workCycle && !(workCycle?.cycleId && item?.itemType === 'WorkCycle' && item.cycleId === workCycle.cycleId)) {\n          return item;\n        }\n        updatedWorkCycle = {\n          ...item,\n          ...updates\n        };\n        return updatedWorkCycle;\n      });\n      return updatedWorkCycle;\n    }\n    async toggleWorkCycle(workCycle) {\n      if (!workCycle) return;\n      let updatedWorkCycle = this._updateWorkCycle(workCycle, {\n        expanded: !workCycle.expanded\n      });\n      if (!updatedWorkCycle?.expanded || updatedWorkCycle.loaded || updatedWorkCycle.loading || !this.activeConversationId) return;\n      updatedWorkCycle = this._updateWorkCycle(updatedWorkCycle, {\n        loading: true\n      });\n      try {\n        const response = await this.api.conversations.getHistoryCycleWork(this.activeConversationId, updatedWorkCycle.cycleId);\n        updatedWorkCycle = this._updateWorkCycle(updatedWorkCycle, {\n          entries: response?.results || [],\n          loaded: true\n        });\n      } catch (error) {\n        _lib.default.error('Failed to load work cycle:', error);\n        updatedWorkCycle = this._updateWorkCycle(updatedWorkCycle, {\n          expanded: false\n        });\n      } finally {\n        this._updateWorkCycle(updatedWorkCycle, {\n          loading: false\n        });\n      }\n    }\n    _foldLatestLiveCycle(cycleId) {\n      const userIndex = [...this.chatMessages].reverse().findIndex(item => item?.message?.role === 'User');\n      if (userIndex < 0) return;\n      const startIndex = this.chatMessages.length - 1 - userIndex;\n      const turnItems = this.chatMessages.slice(startIndex + 1);\n      if (turnItems.some(item => item.itemType === 'WorkCycle')) return;\n      const finalRelativeIndex = [...turnItems].reverse().findIndex(item => item?.message?.role === 'Assistant' && item.message.content && !item.message.toolCalls?.length);\n      if (finalRelativeIndex < 0) return;\n      const finalIndex = turnItems.length - 1 - finalRelativeIndex;\n      const finalEntry = turnItems[finalIndex];\n      const workEntries = turnItems.filter((_, index) => index !== finalIndex);\n      if (!workEntries.length) return;\n      const userEntry = this.chatMessages[startIndex];\n      const startedAt = userEntry.createdAt || new Date().toISOString();\n      const finishedAt = new Date().toISOString();\n      const durationMs = Math.max(0, new Date(finishedAt) - new Date(startedAt));\n      const workCycle = {\n        itemType: 'WorkCycle',\n        cycleId: cycleId || `live-${Date.now()}`,\n        startedAt,\n        finishedAt,\n        durationMs,\n        workEntryCount: workEntries.length,\n        toolCallCount: workEntries.reduce((sum, item) => sum + (item.message?.toolCalls?.length || (item.itemType === 'ToolResult' ? 1 : 0)), 0),\n        webSearchCount: workEntries.filter(item => item.itemType === 'WebSearch').length,\n        videoCount: workEntries.filter(item => item.itemType === 'Video').length,\n        expanded: false,\n        loading: false,\n        loaded: true,\n        entries: workEntries\n      };\n      this.chatMessages = [...this.chatMessages.slice(0, startIndex + 1), workCycle, finalEntry];\n    }\n    async saveTitle(conversation, title) {\n      try {\n        const response = await this.api.conversations.update(conversation.id, {\n          title\n        });\n        const savedTitle = response.title;\n        this.conversations = this.conversations.map(c => c.id === conversation.id ? {\n          ...c,\n          title: savedTitle\n        } : c);\n        if (this.activeConversationId === conversation.id) {\n          this.conversationTitle = savedTitle;\n        }\n        _lib.default.info('Conversation renamed successfully');\n      } catch (e) {\n        _lib.default.error(e);\n      }\n    }\n    async deleteConversation(conversationId) {\n      try {\n        await this.api.conversations.delete(conversationId);\n        this.conversations = this.conversations.filter(c => c.id !== conversationId);\n        if (this.activeConversationId === conversationId) {\n          this.closeSocket();\n          this._resetConversationState();\n          this._updateConversationUrl(null);\n        }\n        _lib.default.info('Conversation deleted successfully');\n      } catch (error) {\n        _lib.default.error(error);\n      }\n    }\n    get currentContext() {\n      const mapping = this.contextMap[this.router.currentRouteName];\n      if (!mapping) return {\n        app: this.appName\n      };\n      const ctx = {\n        app: this.appName,\n        contextType: mapping.contextType\n      };\n      if (mapping.entityParam) {\n        const params = this.router.currentRoute?.params || {};\n        const entityId = params[mapping.entityParam];\n        if (entityId) ctx.entityId = Number(entityId) || entityId;\n      }\n      if (this.activeDataStoreId && mapping.contextType === 'scenario') {\n        ctx.contextType = 'datastore';\n        ctx.entityId = this.activeDataStoreId;\n      }\n      return ctx;\n    }\n    openSidebar() {\n      this.isSidebarOpen = true;\n      this.initialize();\n    }\n    closeSidebar() {\n      this.isSidebarOpen = false;\n      if (this.activeConversationId) {\n        this.closeSocket();\n      }\n    }\n    handleRouteChange(newRouteName) {\n      if (newRouteName !== 'conversations' && this.activeConversationId) {\n        this.closeSocket();\n      }\n    }\n    handleEmbedModeChange(showOnMainPage) {\n      const wasEmbed = this._wasEmbedMode;\n      this._showOnMainPage = showOnMainPage;\n      this._wasEmbedMode = showOnMainPage;\n      if (wasEmbed && !showOnMainPage && this.showAiToggle && this.activeConversationId) {\n        this.openSidebar();\n      }\n    }\n    toggleSidebar() {\n      if (this.isSidebarOpen) {\n        this.closeSidebar();\n      } else {\n        this.openSidebar();\n      }\n    }\n    sendMessage(text) {\n      if (!text || this.isStreaming) return;\n      if (_environment.config.currentUser.isViewer) {\n        this.errorMessage = 'Write access required to send messages';\n        return;\n      }\n      this.isStreaming = true;\n      this.authError = null;\n      this.errorMessage = null;\n      this._lastSentMessage = text;\n      const createdAt = new Date().toISOString();\n      this.chatMessages = [...this.chatMessages, {\n        itemType: 'Message',\n        createdAt,\n        userName: _environment.config.currentUser.name,\n        userEmail: _environment.config.currentUser.email,\n        message: {\n          role: 'User',\n          content: text,\n          toolCalls: []\n        }\n      }];\n      this._startLiveCycle(createdAt);\n      if (this.socket && this.isConversationReady) {\n        this.sendReply(text);\n      } else {\n        this.connectAndSend(text);\n      }\n    }\n    sendReply(message) {\n      this._resetResponseState();\n      this.isConversationReady = false;\n      const payload = {\n        reply: message\n      };\n      if (this.selectedModel && this.selectedModel.name !== 'auto') {\n        payload.model = this.selectedModel.name;\n      }\n      this.socket.send(JSON.stringify(payload));\n    }\n    stopStreaming() {\n      try {\n        if (this.socket) {\n          this.socket.send(JSON.stringify({\n            stop: true\n          }));\n        }\n      } catch (e) {/* ignore */}\n      this.finalizeResponse();\n      this.isStreaming = false;\n      this._stopLiveCycle();\n    }\n    closeSocket(resetStreaming = true) {\n      this._clearConnectionTimeout();\n      if (this.socket) {\n        try {\n          this.socket.send(JSON.stringify({\n            close: true\n          }));\n          this.socket.close();\n        } catch (e) {/* ignore */}\n        this.socket = null;\n      }\n      if (resetStreaming) this.isStreaming = false;\n      if (resetStreaming) this._stopLiveCycle();\n      this.isConversationReady = false;\n      this._clearMessageQueue();\n    }\n    _queueMessage(rawMessage, socket) {\n      this._messageQueue.push({\n        data: rawMessage,\n        socket\n      });\n      this._debounceParse();\n    }\n    _debounceParse() {\n      if (this._parseDebounceTimer) return;\n      // Use fixed 100ms debounce for consistent message batching during streaming\n      this._parseDebounceTimer = setTimeout(() => {\n        this._processBatchedMessages();\n        this._parseDebounceTimer = null;\n      }, 100);\n    }\n    _processBatchedMessages() {\n      const queue = this._messageQueue;\n      this._messageQueue = [];\n      queue.forEach(({\n        data,\n        socket\n      }) => {\n        if (this.socket !== socket) return;\n        try {\n          this.handleSocketMessage(JSON.parse(data));\n        } catch (err) {\n          // Silently ignore parse errors\n        }\n      });\n    }\n    _clearMessageQueue() {\n      this._messageQueue = [];\n      if (this._parseDebounceTimer) {\n        // Cancel the pending debounce timeout\n        clearTimeout(this._parseDebounceTimer);\n        this._parseDebounceTimer = null;\n      }\n    }\n    _clearConnectionTimeout() {\n      if (this._connectionTimeout) {\n        clearTimeout(this._connectionTimeout);\n        this._connectionTimeout = null;\n      }\n    }\n    respondToolApproval(callId, allow) {\n      if (this.socket) {\n        this.socket.send(JSON.stringify({\n          toolApproval: {\n            callId,\n            allow\n          }\n        }));\n      } else {\n        this._pendingToolApproval = {\n          callId,\n          allow\n        };\n        this.connectAndSend(null);\n      }\n    }\n    connectAndSend(prompt) {\n      if (!prompt && !this._pendingToolApproval) return;\n      this._resetResponseState();\n      this.closeSocket(false); // Ensure old socket is closed before creating new one\n\n      const socket = _lib.default.newSockjs(_environment.config.apiBaseUrl + '/real-time/monitor-ai');\n      this.socket = socket;\n\n      // Set connection timeout - close socket if it doesn't connect within 30 seconds\n      this._connectionTimeout = setTimeout(() => {\n        if (this.socket === socket) {\n          console.error('[ai-agent] Connection timeout - closing socket');\n          this.closeSocket(false);\n        }\n      }, this._CONNECTION_TIMEOUT_MS);\n      socket.onopen = () => {\n        // Clear connection timeout on successful connection\n        this._clearConnectionTimeout();\n        const ctx = this.currentContext;\n        const model = this.selectedModel && this.selectedModel.name !== 'auto' ? this.selectedModel.name : null;\n        const payload = {\n          sid: _environment.config.currentUser.sid\n        };\n        if (this.activeConversationId) {\n          if (prompt) this._pendingReply = prompt;\n          const join = {\n            orgId: _environment.config.currentUser.orgId,\n            conversationId: this.activeConversationId\n          };\n          if (model) join.model = model;\n          if (ctx) join.context = ctx;\n          payload.join = join;\n        } else {\n          const start = {\n            orgId: _environment.config.currentUser.orgId,\n            prompt\n          };\n          if (model) start.model = model;\n          if (ctx) start.context = ctx;\n          payload.start = start;\n        }\n        payload.mode = this.selectedMode.value;\n        if (this.selectedRegion) payload.regionId = this.selectedRegion.id;\n        socket.send(JSON.stringify(payload));\n      };\n      socket.onmessage = e => {\n        if (this.socket !== socket) return;\n        this._queueMessage(e.data, socket);\n      };\n      socket.onclose = () => {\n        if (this.socket !== socket) return;\n        this._clearConnectionTimeout();\n        this.isStreaming = false;\n        this.isConversationReady = false;\n        this._pendingToolApproval = null;\n        this.socket = null;\n      };\n      socket.onerror = error => {\n        if (this.socket !== socket) return;\n        this._clearConnectionTimeout();\n        console.error('[ai-agent] Connection error:', error);\n        this.isStreaming = false;\n        this._pendingToolApproval = null;\n      };\n    }\n    handleSocketMessage(data) {\n      if (data.authenticated === false) {\n        this.authError = 'Authentication failed';\n        this.isStreaming = false;\n        this.socket?.close();\n        return;\n      }\n      if (data.authenticated === true) return;\n      const {\n        eventType\n      } = data;\n      switch (eventType) {\n        case 'start':\n          {\n            const sessionId = this._eventSessionId(data);\n            if (sessionId != null) {\n              this.currentSessionId = sessionId;\n              this._lastSentMessage = null;\n            }\n          }\n          if (data.data?.conversation) {\n            const conv = data.data.conversation;\n            this.activeConversationId = conv.id;\n            this._setConversationProperties(conv, true);\n            this._updateConversationUrl(conv.id);\n            const newConv = {\n              ...conv,\n              createdAt: new Date().toISOString()\n            };\n            this._updateConversationList({\n              [conv.id]: newConv\n            });\n          }\n          break;\n        case 'title':\n          if (data.data?.title) {\n            this.conversationTitle = data.data.title;\n            if (this.activeConversationId) {\n              const existing = this.conversations.find(c => c.id === this.activeConversationId);\n              if (existing) {\n                this._updateConversationList({\n                  [this.activeConversationId]: {\n                    ...existing,\n                    title: data.data.title\n                  }\n                });\n              }\n            }\n          }\n          break;\n        case 'stream':\n          this.handleStreamEvent(data.data);\n          break;\n        case 'tool_call':\n          this.handleToolCall(data.data);\n          break;\n        case 'tool_approval_required':\n          this.handleToolApprovalRequired(data.data);\n          break;\n        case 'tool_approval_recorded':\n          this.handleToolApprovalRecorded(data.data);\n          break;\n        case 'tool_result':\n          this.handleToolResult(data.data);\n          break;\n        case 'conversation_ready':\n          {\n            const sessionId = this._eventSessionId(data);\n            if (sessionId != null) {\n              this.currentSessionId = sessionId;\n              this._lastSentMessage = null;\n            }\n          }\n          if (data.data?.historyEntryId) {\n            this._currentResponseHistoryEntryId = data.data.historyEntryId;\n          }\n          if (data.data?.files && !this._currentResponseFiles?.length) {\n            this._currentResponseFiles = data.data.files;\n          }\n          this.finalizeResponse();\n          this._foldLatestLiveCycle(data.data?.cycleId);\n          this._stopLiveCycle();\n          this.isConversationReady = true;\n          {\n            const conversationUpdate = this._conversationUpdateFromEventData(data.data);\n            if (conversationUpdate) {\n              const activeConversation = this._mergeActiveConversationUpdate(conversationUpdate);\n              this.activeConversation = activeConversation;\n              this._setConversationProperties(activeConversation);\n              if (activeConversation.id) {\n                this._updateConversationList({\n                  [activeConversation.id]: activeConversation\n                });\n              }\n            }\n          }\n          if (data.data?.contextSize) {\n            this.conversationContextSize = data.data.contextSize;\n          }\n          if (this._pendingToolApproval) {\n            const {\n              callId,\n              allow\n            } = this._pendingToolApproval;\n            this._pendingToolApproval = null;\n            this.respondToolApproval(callId, allow);\n          } else if (this._pendingReply) {\n            this.sendReply(this._pendingReply);\n            this._pendingReply = null;\n          } else {\n            this.isStreaming = false;\n          }\n          break;\n        case 'stream_stopped':\n          this.finalizeResponse();\n          this.isStreaming = false;\n          this._stopLiveCycle();\n          break;\n        case 'web_search_done':\n          this.handleWebSearchDone(data.data);\n          break;\n        case 'video_saved':\n          this.handleVideoSaved(data.data);\n          break;\n        case 'user_message':\n          this.handleUserMessage(data.data);\n          break;\n        case 'reply_queued':\n          this.handleReplyQueued(data.data);\n          break;\n        case 'reply_dequeued':\n          this.handleReplyDequeued(data.data);\n          break;\n        case 'reply_removed_from_queue':\n          this.handleReplyRemovedFromQueue(data.data);\n          break;\n        case 'context_summarized':\n          this.handleContextSummarized(data.data);\n          break;\n        case 'error':\n          if (data.data?.message) {\n            this.errorMessage = data.data.message;\n          }\n          this.isStreaming = false;\n          this._stopLiveCycle();\n          break;\n      }\n    }\n    handleStreamEvent(data) {\n      if (!data) return;\n      switch (data.type) {\n        case 'content_delta':\n          if (this.toolCalls.size) {\n            this._flushCurrentToolCallsSegment();\n          }\n          this.currentResponseText += data.text || '';\n          break;\n        case 'reasoning_summary_delta':\n          if (this.toolCalls.size) {\n            this._flushCurrentToolCallsSegment();\n          }\n          if (this.currentResponseText) {\n            this._flushCurrentTextSegment();\n          }\n          this.currentReasoningSummaryText += data.text || '';\n          break;\n        case 'stream_end':\n          if (data.files?.length) {\n            this._currentResponseFiles = data.files;\n            this._currentResponseFileContents = this._extractFileContents(this.currentResponseText, data.files);\n          }\n          if (data.message && (!data.hasToolCalls || !this.currentResponseText)) {\n            this.currentResponseText = data.message;\n          }\n          if (data.historyEntryId) {\n            this._currentResponseHistoryEntryId = data.historyEntryId;\n          }\n          if (data.hasToolCalls) {\n            this._flushCurrentAssistantTextSegments();\n          }\n          break;\n        case 'web_search_call':\n          this._flushCurrentAssistantTextSegments();\n          this._upsertToolCall({\n            callId: data.itemId,\n            name: 'web_search',\n            callDescription: 'Web search',\n            status: data.status === 'completed' ? 'success' : 'in_progress'\n          }, false);\n          break;\n      }\n    }\n    handleToolCall(data) {\n      if (!data?.callId) return;\n      this._flushCurrentAssistantTextSegments();\n      this._upsertToolCall(data, false);\n    }\n    handleToolApprovalRequired(data) {\n      if (!data?.callId) return;\n      this._flushCurrentAssistantTextSegments();\n      this._upsertToolCall(data, true);\n      if (this.isAutoApproved(data.name)) {\n        this.respondToolApproval(data.callId, true);\n      }\n    }\n    handleVideoSaved(data) {\n      if (!data?.video) return;\n      const video = data.video;\n      const sessionId = data.sessionId || video.browserSessionId || video.sessionId;\n      if (!this.activeConversation) {\n        this.activeConversation = {\n          id: this.activeConversationId,\n          browserSessions: []\n        };\n      }\n      const sessions = this.activeConversation.browserSessions || [];\n      const existing = sessions.find(s => s.browserSessionId === sessionId);\n      if (existing) {\n        existing.video = video;\n      } else {\n        sessions.push({\n          browserSessionId: sessionId,\n          video\n        });\n      }\n      this.activeConversation = {\n        ...this.activeConversation,\n        browserSessions: [...sessions]\n      };\n      this.chatMessages = [...this.chatMessages, {\n        itemType: 'Video',\n        historyEntryId: data.historyEntryId,\n        browserSessionId: sessionId,\n        video\n      }];\n    }\n    handleUserMessage(data) {\n      if (!data?.content) return;\n      if (this.currentSessionId != null && data.sessionId == this.currentSessionId) return;\n      if (this._lastSentMessage && data.content === this._lastSentMessage) {\n        this._lastSentMessage = null;\n        return;\n      }\n      const createdAt = new Date().toISOString();\n      this.chatMessages = [...this.chatMessages, {\n        itemType: 'Message',\n        createdAt,\n        userName: data.userName || null,\n        userEmail: data.userEmail || null,\n        message: {\n          role: 'User',\n          content: data.content,\n          toolCalls: [],\n          userId: data.userId || null\n        }\n      }];\n      if (this.isStreaming) {\n        this._startLiveCycle(createdAt);\n      }\n    }\n    handleReplyQueued(data) {\n      if (!data?.requesterSessionId) return;\n      this.replyQueue = [...this.replyQueue, {\n        sessionId: data.requesterSessionId\n      }];\n    }\n    handleReplyDequeued(data) {\n      if (!data?.requesterSessionId) return;\n      this.replyQueue = this.replyQueue.filter(q => q.sessionId !== data.requesterSessionId);\n    }\n    handleReplyRemovedFromQueue(data) {\n      if (!data?.requesterSessionId) return;\n      this.replyQueue = this.replyQueue.filter(q => q.sessionId !== data.requesterSessionId);\n      const isSelf = this.currentSessionId != null && data.requesterSessionId == this.currentSessionId;\n      this.queueCancelledNotice = isSelf ? 'Your queued reply was cancelled' : 'A queued reply was cancelled';\n      if (this._queueCancelledTimer) clearTimeout(this._queueCancelledTimer);\n      this._queueCancelledTimer = setTimeout(() => {\n        this.queueCancelledNotice = null;\n      }, 5000);\n    }\n    handleContextSummarized(data) {\n      if (!data) return;\n      this.chatMessages = [...this.chatMessages, {\n        itemType: 'Summarize',\n        historyEntryId: data.historyEntryId\n      }];\n    }\n    handleWebSearchDone(data) {\n      if (!data?.itemId) return;\n      const tool = this.toolCalls.get(data.itemId);\n      if (tool) {\n        tool.callDescription = `Web search - ${data.callDescription}`;\n        tool.paramsDescription = data.query;\n        tool.status = 'success';\n        if (data.historyEntryId) tool.historyEntryId = data.historyEntryId;\n        this._toolCallsDirty = !this._toolCallsDirty;\n      } else {\n        const existing = this._findStreamedToolCall(data.itemId);\n        if (existing) {\n          existing.callDescription = `Web search - ${data.callDescription}`;\n          existing.paramsDescription = data.query;\n          existing.status = 'success';\n          if (data.historyEntryId) existing.historyEntryId = data.historyEntryId;\n          this._toolCallsDirty = !this._toolCallsDirty;\n        }\n      }\n    }\n    getAutoApprovedTools() {\n      try {\n        return JSON.parse(localStorage.getItem(AUTO_APPROVED_TOOLS_STORAGE_KEY)) || [];\n      } catch (e) {\n        return [];\n      }\n    }\n    addAutoApprovedTool(name, callDescription) {\n      const tools = this.getAutoApprovedTools();\n      if (tools.some(t => t.name === name)) return;\n      tools.push({\n        name,\n        callDescription\n      });\n      localStorage.setItem(AUTO_APPROVED_TOOLS_STORAGE_KEY, JSON.stringify(tools));\n    }\n    removeAutoApprovedTool(name) {\n      const tools = this.getAutoApprovedTools().filter(t => t.name !== name);\n      localStorage.setItem(AUTO_APPROVED_TOOLS_STORAGE_KEY, JSON.stringify(tools));\n    }\n    getSpecificAutoApprovedTools() {\n      return this.getAutoApprovedTools().filter(t => t.name !== AUTO_APPROVE_ALL_TOOLS_NAME);\n    }\n    addAllToolsAutoApproved() {\n      localStorage.setItem(AUTO_APPROVE_ALL_TOOLS_STORAGE_KEY, 'true');\n      this.removeAutoApprovedTool(AUTO_APPROVE_ALL_TOOLS_NAME);\n    }\n    removeAllToolsAutoApproved() {\n      localStorage.removeItem(AUTO_APPROVE_ALL_TOOLS_STORAGE_KEY);\n      this.removeAutoApprovedTool(AUTO_APPROVE_ALL_TOOLS_NAME);\n    }\n    isAllToolsAutoApproved() {\n      return localStorage.getItem(AUTO_APPROVE_ALL_TOOLS_STORAGE_KEY) === 'true';\n    }\n    isAutoApproved(name) {\n      return this.isAllToolsAutoApproved() || this.getAutoApprovedTools().some(t => t.name === name);\n    }\n    _parseBrowserSessionId(paramsDescription) {\n      if (!paramsDescription) return null;\n      const match = paramsDescription.match(/\\(sessionId\\):\\s*(ai-browser-[^\\s;]+)/);\n      return match ? match[1] : null;\n    }\n\n    /**\n     * Resolves a tool call for display, handling both active and historical tools\n     * Centralizes complex resolution logic in one place\n     */\n    resolveToolForDisplay(tool) {\n      if (!tool) return tool;\n      if (tool.toolResult) {\n        const tr = tool.toolResult;\n        const resolvedResult = this._historyToolResults.get(tr.id);\n        if (resolvedResult) {\n          return {\n            callId: tr.id,\n            name: tr.name,\n            callDescription: resolvedResult.callDescription || tr.callDescription,\n            paramsDescription: resolvedResult.paramsDescription || tr.paramsDescription,\n            arguments: tr.arguments,\n            historyEntryId: resolvedResult.historyEntryId || tool.historyEntryId || tool.id,\n            files: resolvedResult.files || tool.files,\n            status: resolvedResult.status || 'success',\n            reason: resolvedResult.reason,\n            message: resolvedResult.message,\n            durationMs: resolvedResult.durationMs,\n            requiresApproval: false\n          };\n        }\n        const isPendingApproval = tr?.state === 'PendingApproval' && !this._approvedHistoryCallIds.has(tr.id);\n        return {\n          callId: tr.id,\n          name: tr.name,\n          callDescription: tr.callDescription,\n          paramsDescription: tr.paramsDescription,\n          arguments: tr.arguments,\n          historyEntryId: tool.historyEntryId || tool.id,\n          files: tool.files,\n          status: isPendingApproval ? 'in_progress' : tr?.state?.toLowerCase() || 'success',\n          reason: tr.response?.reason,\n          message: tr.response?.message,\n          durationMs: tool.toolDurationMs,\n          requiresApproval: isPendingApproval\n        };\n      }\n      return tool;\n    }\n    _upsertToolCall(data, requiresApproval) {\n      const browserSessionId = data.browserSessionId || this._parseBrowserSessionId(data.paramsDescription);\n      const existing = this.toolCalls.get(data.callId);\n      if (existing) {\n        existing.requiresApproval = requiresApproval;\n        if (data.name) existing.name = data.name;\n        if (data.status) existing.status = data.status;\n        if (data.callDescription) existing.callDescription = data.callDescription;\n        if (data.paramsDescription) existing.paramsDescription = data.paramsDescription;\n        if (data.historyEntryId) existing.historyEntryId = data.historyEntryId;\n        if (browserSessionId) existing.browserSessionId = browserSessionId;\n        return;\n      }\n      this.toolCalls.set(data.callId, new _trackedBuiltIns.TrackedObject({\n        callId: data.callId,\n        name: data.name,\n        callDescription: data.callDescription,\n        paramsDescription: data.paramsDescription,\n        historyEntryId: data.historyEntryId,\n        browserSessionId,\n        status: 'in_progress',\n        requiresApproval\n      }));\n      this._toolCallsDirty = !this._toolCallsDirty;\n    }\n    handleToolApprovalRecorded(data) {\n      if (!data?.callId) return;\n      const tool = this.toolCalls.get(data.callId);\n      if (tool) {\n        tool.requiresApproval = false;\n        this._toolCallsDirty = !this._toolCallsDirty;\n      } else {\n        const existing = this._findStreamedToolCall(data.callId);\n        if (existing) {\n          existing.requiresApproval = false;\n          this._toolCallsDirty = !this._toolCallsDirty;\n          return;\n        }\n        this._approvedHistoryCallIds = new Set([...this._approvedHistoryCallIds, data.callId]);\n      }\n    }\n    handleToolResult(data) {\n      if (!data?.callId) return;\n      const tool = this.toolCalls.get(data.callId);\n      if (tool) {\n        tool.status = data.status;\n        tool.durationMs = data.durationMs;\n        tool.reason = data.reason;\n        tool.message = data.message;\n        tool.requiresApproval = false;\n        if (data.callDescription) tool.callDescription = data.callDescription;\n        if (data.paramsDescription) tool.paramsDescription = data.paramsDescription;\n        if (data.historyEntryId) tool.historyEntryId = data.historyEntryId;\n        if (data.files) tool.files = data.files;\n        this._toolCallsDirty = !this._toolCallsDirty;\n      } else {\n        const existing = this._findStreamedToolCall(data.callId);\n        if (existing) {\n          existing.status = data.status;\n          existing.durationMs = data.durationMs;\n          existing.reason = data.reason;\n          existing.message = data.message;\n          existing.requiresApproval = false;\n          if (data.callDescription) existing.callDescription = data.callDescription;\n          if (data.paramsDescription) existing.paramsDescription = data.paramsDescription;\n          if (data.historyEntryId) existing.historyEntryId = data.historyEntryId;\n          if (data.files) existing.files = data.files;\n          this._toolCallsDirty = !this._toolCallsDirty;\n          return;\n        }\n        this._historyToolResults = new Map([...this._historyToolResults, [data.callId, data]]);\n      }\n    }\n    _appendChatItems(items) {\n      if (items.length) {\n        this.chatMessages = [...this.chatMessages, ...items];\n      }\n    }\n    _flushCurrentReasoningSummarySegment() {\n      if (this.currentReasoningSummaryText) {\n        this._appendChatItems([{\n          itemType: 'ReasoningSummary',\n          content: this.currentReasoningSummaryText\n        }]);\n        this.currentReasoningSummaryText = '';\n      }\n    }\n    _flushCurrentTextSegment(options = {}) {\n      if (!this.currentResponseText) return;\n      const msg = {\n        itemType: 'Message',\n        message: {\n          role: 'Assistant',\n          content: this.currentResponseText,\n          toolCalls: []\n        }\n      };\n      if (options.files?.length) {\n        msg.files = options.files;\n      }\n      if (options.historyEntryId) {\n        msg.historyEntryId = options.historyEntryId;\n      }\n      if (options.fileContents) {\n        msg.fileContents = options.fileContents;\n      }\n      this._appendChatItems([msg]);\n      this.currentResponseText = '';\n    }\n    _flushCurrentToolCallsSegment() {\n      if (this.toolCalls.size) {\n        const msg = {\n          itemType: 'Message',\n          message: {\n            role: 'Assistant',\n            content: '',\n            toolCalls: Array.from(this.toolCalls.values())\n          }\n        };\n        this._appendChatItems([msg]);\n        this.toolCalls = new Map();\n        this._toolCallsDirty = !this._toolCallsDirty;\n      }\n    }\n    _flushCurrentAssistantTextSegments() {\n      this._flushCurrentReasoningSummarySegment();\n      this._flushCurrentTextSegment();\n    }\n    _findStreamedToolCall(callId) {\n      for (const item of this.chatMessages) {\n        const tool = item?.message?.toolCalls?.find(t => t.callId === callId);\n        if (tool) return tool;\n      }\n      return null;\n    }\n    finalizeResponse() {\n      this._flushCurrentReasoningSummarySegment();\n      const files = this._currentResponseFiles;\n      const fileContents = this._currentResponseFileContents;\n      const historyEntryId = this._currentResponseHistoryEntryId;\n      this._flushCurrentTextSegment({\n        files,\n        fileContents,\n        historyEntryId\n      });\n      this._flushCurrentToolCallsSegment();\n      this._currentResponseFiles = null;\n      this._currentResponseHistoryEntryId = null;\n      this._currentResponseFileContents = null;\n    }\n    _extractFileContents(streamedText, files) {\n      if (!streamedText || !files?.length) return null;\n      const fileNames = files.map(f => typeof f === 'string' ? f : f.name);\n      const contents = {};\n      const codeBlockRegex = /```[^\\n]*\\n([\\s\\S]*?)```/g;\n      const blocks = [];\n      let match;\n      while (match = codeBlockRegex.exec(streamedText)) {\n        blocks.push(match[1]);\n      }\n      if (blocks.length === 1 && fileNames.length === 1) {\n        contents[fileNames[0]] = blocks[0].trimEnd();\n      } else if (blocks.length === fileNames.length) {\n        fileNames.forEach((name, i) => {\n          contents[name] = blocks[i].trimEnd();\n        });\n      } else if (blocks.length > 0) {\n        fileNames.forEach((name, i) => {\n          if (blocks[i]) contents[name] = blocks[i].trimEnd();\n        });\n      }\n      return Object.keys(contents).length ? contents : null;\n    }\n    applyConversationUpdates(updates) {\n      if (updates && Object.keys(updates).length) {\n        this._updateConversationList(updates);\n      }\n    }\n    applyConversationRemovals(removedIds) {\n      if (!removedIds || removedIds.length === 0) return;\n      const filtered = this.conversations.filter(item => !removedIds.some(id => id == item.id));\n      if (filtered.length !== this.conversations.length) {\n        this.conversations = filtered;\n        if (this.activeConversationId && removedIds.some(id => id == this.activeConversationId)) {\n          this.closeSocket();\n          this._resetConversationState();\n          this._updateConversationUrl(null);\n        }\n      }\n    }\n    async addAttachment(file) {\n      if (!this.activeConversationId) return;\n      const result = await this.api.conversations.uploadAttachment(this.activeConversationId, file);\n      if (!this.activeConversation) {\n        this.activeConversation = {\n          id: this.activeConversationId,\n          browserSessions: [],\n          attachments: []\n        };\n      }\n      const attachments = [...(this.activeConversation.attachments || []), ...result];\n      this.activeConversation = {\n        ...this.activeConversation,\n        attachments\n      };\n      return result;\n    }\n    async createEmptyConversation() {\n      const conv = await this.api.conversations.create({});\n      if (!conv?.id) throw new Error('Failed to create conversation');\n      this.activeConversationId = conv.id;\n      this._setConversationProperties(conv);\n      this.activeConversation = {\n        ...conv,\n        attachments: [],\n        browserSessions: []\n      };\n      this._updateConversationUrl(conv.id);\n      this._updateConversationList({\n        [conv.id]: {\n          ...conv,\n          createdAt: conv.createdAt || new Date().toISOString()\n        }\n      });\n    }\n    async removeAttachment(attachmentId) {\n      if (!this.activeConversationId) return;\n      await this.api.conversations.deleteAttachment(this.activeConversationId, attachmentId);\n      const attachments = (this.activeConversation?.attachments || []).filter(a => a.id !== attachmentId);\n      this.activeConversation = {\n        ...this.activeConversation,\n        attachments\n      };\n    }\n    _resetResponseState() {\n      this.isStreaming = true;\n      this.currentResponseText = '';\n      this.currentReasoningSummaryText = '';\n      this.toolCalls = new Map();\n      this._toolCallsDirty = !this._toolCallsDirty;\n      this._currentResponseFiles = null;\n      this._currentResponseHistoryEntryId = null;\n      this._currentResponseFileContents = null;\n    }\n    _resetConversationState() {\n      this._stopLiveCycle();\n      this.activeConversationId = null;\n      this.conversationTitle = '';\n      this.chatMessages = [];\n      this.currentResponseText = '';\n      this.currentReasoningSummaryText = '';\n      this.toolCalls = new Map();\n      this._toolCallsDirty = !this._toolCallsDirty;\n      this.authError = null;\n      this.errorMessage = null;\n      this.conversationModel = '';\n      this.conversationContextSize = 0;\n      this.conversationCost = 0;\n      this.conversationInputTokens = 0;\n      this.conversationCachedInputTokens = 0;\n      this.conversationOutputTokens = 0;\n      this.conversationStartTime = null;\n      this.activeConversation = null;\n      this._approvedHistoryCallIds = new Set();\n      this._historyToolResults = new Map();\n      this._loadingHistoryConversationId = null;\n      this.hasMoreHistory = false;\n      this._historyOffset = 0;\n      this.currentSessionId = null;\n      this.replyQueue = [];\n      this.queueCancelledNotice = null;\n      if (this._queueCancelledTimer) clearTimeout(this._queueCancelledTimer);\n    }\n    _isOnAiAgentsPage() {\n      return this.router.currentRouteName === 'conversations';\n    }\n    _updateConversationUrl(conversationId) {\n      if (!this._isOnAiAgentsPage()) return;\n      let url = new URL(window.location);\n      if (conversationId) {\n        url.searchParams.set('conversationId', conversationId);\n      } else {\n        url.searchParams.delete('conversationId');\n      }\n      window.history.replaceState({}, '', url);\n    }\n    _restoreConversationFromUrl() {\n      if (!this._isOnAiAgentsPage()) return;\n      const url = new URL(window.location);\n      const conversationId = url.searchParams.get('conversationId');\n      if (!conversationId) return;\n      const conversation = this.conversations.find(c => c.id == conversationId);\n      if (conversation) {\n        this.selectConversation(conversation);\n      } else {\n        _lib.default.error('Conversation not found. It may have been deleted or belong to another organization.');\n        this._updateConversationUrl(null);\n      }\n    }\n    _updateConversationList(updates) {\n      const result = this._applyUpdates(this.conversations, updates);\n      if (result) this.conversations = result;\n    }\n    _applyUpdates(items, updates) {\n      if (!updates || Object.keys(updates).length === 0) return null;\n      const updatedItems = [...items];\n      Object.values(updates).forEach(update => {\n        const existing = updatedItems.find(item => item.id == update.id);\n        if (existing) {\n          Object.assign(existing, update);\n        } else {\n          updatedItems.unshift(new _trackedBuiltIns.TrackedObject(update));\n        }\n      });\n      return updatedItems;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isStreaming\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isConversationReady\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"_loadingHistoryConversationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"hasMoreHistory\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"historyLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"authError\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"errorMessage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"currentSessionId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"replyQueue\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"queueCancelledNotice\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"aiModels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"regions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"conversations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"isLoadingConversations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"activeConversationId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"conversationTitle\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"chatMessages\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"currentResponseText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"currentReasoningSummaryText\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"liveCycleStartedAt\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor21 = _applyDecoratedDescriptor(_class.prototype, \"liveCycleNow\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor22 = _applyDecoratedDescriptor(_class.prototype, \"conversationModel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor23 = _applyDecoratedDescriptor(_class.prototype, \"conversationContextSize\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor24 = _applyDecoratedDescriptor(_class.prototype, \"conversationCost\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor25 = _applyDecoratedDescriptor(_class.prototype, \"conversationInputTokens\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor26 = _applyDecoratedDescriptor(_class.prototype, \"conversationCachedInputTokens\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor27 = _applyDecoratedDescriptor(_class.prototype, \"conversationOutputTokens\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor28 = _applyDecoratedDescriptor(_class.prototype, \"conversationStartTime\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor29 = _applyDecoratedDescriptor(_class.prototype, \"activeConversation\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor30 = _applyDecoratedDescriptor(_class.prototype, \"toolCalls\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new Map();\n    }\n  }), _descriptor31 = _applyDecoratedDescriptor(_class.prototype, \"_toolCallsDirty\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor32 = _applyDecoratedDescriptor(_class.prototype, \"_approvedHistoryCallIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new Set();\n    }\n  }), _descriptor33 = _applyDecoratedDescriptor(_class.prototype, \"_historyToolResults\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return new Map();\n    }\n  }), _descriptor34 = _applyDecoratedDescriptor(_class.prototype, \"selectedModel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor35 = _applyDecoratedDescriptor(_class.prototype, \"selectedRegion\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor36 = _applyDecoratedDescriptor(_class.prototype, \"selectedMode\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ModeOptions[0];\n    }\n  }), _descriptor37 = _applyDecoratedDescriptor(_class.prototype, \"isEmptyOrg\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor38 = _applyDecoratedDescriptor(_class.prototype, \"isSidebarOpen\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor39 = _applyDecoratedDescriptor(_class.prototype, \"_showOnMainPage\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor40 = _applyDecoratedDescriptor(_class.prototype, \"activeDataStoreId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"conversationsList\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"conversationsList\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toolCallsList\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"toolCallsList\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"welcomePrompt\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"welcomePrompt\"), _class.prototype), _class);\n});","define(\"@testable/shared-ui/services/api\", [\"exports\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/services/api/tag-manager\", \"@testable/shared-ui/services/api/reports-manager\", \"@testable/shared-ui/services/api/metric-manager\", \"@testable/shared-ui/services/api/integration-teams\", \"@testable/shared-ui/services/api/browser-manager\", \"@testable/shared-ui/services/api/changelog-manager\", \"@testable/shared-ui/services/api/test-runs-manager\", \"@testable/shared-ui/services/api/admin\", \"@testable/shared-ui/services/api/live-videos\", \"@testable/shared-ui/services/api/live-test\", \"@testable/shared-ui/services/api/usage\", \"@testable/shared-ui/services/api/billing\", \"@testable/shared-ui/services/api/test-cases\", \"@testable/shared-ui/services/api/regions\", \"@testable/shared-ui/services/api/countries\", \"@testable/shared-ui/services/api/current-user\", \"@testable/shared-ui/services/api/users\", \"@testable/shared-ui/services/api/command-streams\", \"@testable/shared-ui/services/api/test-confs\", \"@testable/shared-ui/services/api/data-stores\", \"@testable/shared-ui/services/api/test-scenarios\", \"@testable/shared-ui/services/api/vcs\", \"@testable/shared-ui/services/api/success-history\", \"@testable/shared-ui/services/api/executions\", \"@testable/shared-ui/services/api/monitors\", \"@testable/shared-ui/services/api/conversations\"], function (_exports, _service, _environment, _tagManager, _reportsManager, _metricManager, _integrationTeams, _browserManager, _changelogManager, _testRunsManager, _admin, _liveVideos, _liveTest, _usage, _billing, _testCases, _regions, _countries, _currentUser, _users, _commandStreams, _testConfs, _dataStores, _testScenarios, _vcs, _successHistory, _executions, _monitors, _conversations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/services/api/tag-manager\",0,\"@testable/shared-ui/services/api/reports-manager\",0,\"@testable/shared-ui/services/api/metric-manager\",0,\"@testable/shared-ui/services/api/integration-teams\",0,\"@testable/shared-ui/services/api/browser-manager\",0,\"@testable/shared-ui/services/api/changelog-manager\",0,\"@testable/shared-ui/services/api/test-runs-manager\",0,\"@testable/shared-ui/services/api/admin\",0,\"@testable/shared-ui/services/api/live-videos\",0,\"@testable/shared-ui/services/api/live-test\",0,\"@testable/shared-ui/services/api/usage\",0,\"@testable/shared-ui/services/api/billing\",0,\"@testable/shared-ui/services/api/test-cases\",0,\"@testable/shared-ui/services/api/regions\",0,\"@testable/shared-ui/services/api/countries\",0,\"@testable/shared-ui/services/api/current-user\",0,\"@testable/shared-ui/services/api/users\",0,\"@testable/shared-ui/services/api/command-streams\",0,\"@testable/shared-ui/services/api/test-confs\",0,\"@testable/shared-ui/services/api/data-stores\",0,\"@testable/shared-ui/services/api/test-scenarios\",0,\"@testable/shared-ui/services/api/vcs\",0,\"@testable/shared-ui/services/api/success-history\",0,\"@testable/shared-ui/services/api/executions\",0,\"@testable/shared-ui/services/api/monitors\",0,\"@testable/shared-ui/services/api/conversations\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class ApiService extends _service.default {\n    constructor() {\n      // inject parent to child objects so nested functions can use that\n      // e.g. from inside tagManager, any function can use `this.parent.currentUser`\n      super(...arguments);\n      _defineProperty(this, \"user\", null);\n      _defineProperty(this, \"websiteUrl\", null);\n      _defineProperty(this, \"integrations\", {\n        teams: _integrationTeams.default\n      });\n      _defineProperty(this, \"tagManager\", _tagManager.default);\n      _defineProperty(this, \"reportManager\", _reportsManager.default);\n      _defineProperty(this, \"metricManager\", _metricManager.default);\n      _defineProperty(this, \"browserManager\", _browserManager.default);\n      _defineProperty(this, \"changeLogManager\", _changelogManager.default);\n      _defineProperty(this, \"testRunsManager\", _testRunsManager.default);\n      _defineProperty(this, \"admin\", _admin.default);\n      _defineProperty(this, \"liveVideos\", _liveVideos.default);\n      _defineProperty(this, \"liveTest\", _liveTest.default);\n      _defineProperty(this, \"usage\", _usage.default);\n      _defineProperty(this, \"billing\", _billing.default);\n      _defineProperty(this, \"testCases\", _testCases.default);\n      _defineProperty(this, \"regions\", _regions.default);\n      _defineProperty(this, \"countries\", _countries.default);\n      _defineProperty(this, \"currentUser\", _currentUser.default);\n      _defineProperty(this, \"users\", _users.default);\n      _defineProperty(this, \"commandStreams\", _commandStreams.default);\n      _defineProperty(this, \"testConfs\", _testConfs.default);\n      _defineProperty(this, \"dataStores\", _dataStores.default);\n      _defineProperty(this, \"testScenarios\", _testScenarios.default);\n      _defineProperty(this, \"successHistory\", _successHistory.default);\n      _defineProperty(this, \"executions\", _executions.default);\n      _defineProperty(this, \"monitors\", _monitors.default);\n      _defineProperty(this, \"conversations\", _conversations.default);\n      _defineProperty(this, \"vcs\", _vcs.default);\n      this.user = _environment.config.currentUser;\n      this.websiteUrl = _environment.config.websiteUrl;\n      this.orgUri = `/orgs/${_environment.config.currentUser?.org?.id}`;\n      const self = this;\n      _environment.config.currentUser.addObserver('orgId', () => {\n        if (_environment.config.currentUser.isLoggedIn) {\n          self.orgUri = `/orgs/${_environment.config.currentUser?.org?.id}`;\n        }\n      });\n      this.tagManager.parent = this;\n      this.dataStores.parent = this;\n      this.testScenarios.parent = this;\n      this.reportManager.parent = this;\n      this.metricManager.parent = this;\n      this.browserManager.parent = this;\n      this.changeLogManager.parent = this;\n      this.testRunsManager.parent = this;\n      this.admin.parent = this;\n      this.integrations.teams.parent = this;\n      this.liveVideos.parent = this;\n      this.liveTest.parent = this;\n      this.usage.parent = this;\n      this.billing.parent = this;\n      this.testCases.parent = this;\n      this.regions.parent = this;\n      this.countries.parent = this;\n      this.currentUser.parent = this;\n      this.users.parent = this;\n      this.commandStreams.parent = this;\n      this.vcs.parent = this;\n      this.successHistory.parent = this;\n      this.executions.parent = this;\n      this.testConfs.parent = this;\n      this.monitors.parent = this;\n      this.conversations.parent = this;\n      this.testConfs.baseline.parent = this;\n    }\n\n    /**\n     * Inject this to other services to call onComplete function after ajax call\n     * @param {string} path - URL\n     * @param {string} type - GET, POST, PUT, DELETE\n     * @param {object} data - data to send\n     * @param onComplete - function to call after ajax call\n     * @returns {{dataType: string, contentType: string, url}}\n     * @private\n     */\n    _getRequestObj(path, type, data, onComplete) {\n      let obj = {\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      };\n      obj.type = type ? type.toUpperCase() : 'GET';\n      if (data) {\n        obj.data = JSON.stringify(data);\n      }\n      if (typeof onComplete === 'function') {\n        obj.complete = onComplete;\n      }\n      return obj;\n    }\n  }\n  _exports.default = ApiService;\n});","define(\"@testable/shared-ui/services/api/admin\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    isOnPremEnvInitialized() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/is-env-initialized\")\n      });\n    },\n    getAllRunningExecutions() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/running-executions\"),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getLicense() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/license\"),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getAllUsers(limit, offset, email = '') {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/users\", {\n          limit,\n          offset,\n          email\n        }),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    createFeError({\n      stack,\n      message\n    }) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl('/fe-errors'),\n        dataType: 'json',\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          url: window.location.href,\n          stackTrace: stack,\n          additionalDetails: message\n        })\n      });\n    },\n    getAllErrors(params, onComplete) {\n      const url = _lib.default.toUrl('/fe-errors', params);\n      const requestObject = this.parent._getRequestObj(url, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    getAllOrgs(limit, offset, name = '') {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/orgs\", {\n          limit,\n          offset,\n          name\n        }),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    health() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/admin/health\"),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    buildInfo() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/build-info\"),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getApiKeys() {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl('/admin/api-keys'),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    createApiKey(description) {\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl('/api-keys'),\n        data: JSON.stringify({\n          description: description,\n          accessType: \"Admin\"\n        }),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    updateApiKey(key, description) {\n      return $.ajax({\n        type: \"PUT\",\n        url: _lib.default.toUrl('/api-keys/' + key),\n        data: JSON.stringify({\n          description: description\n        }),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    deleteApiKey(key) {\n      return $.ajax({\n        type: \"DELETE\",\n        url: _lib.default.toUrl('/api-keys/' + key),\n        dataType: \"json\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/billing\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    /**\n     * Get the billing information for the current user.\n     * @param {number} offset\n     * @param {number} limit\n     * @param {Date} start\n     * @param {Date} end\n     * @param {boolean} linked\n     * @param {number} minCharge\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async historyUsage(offset, limit, start, end, linked, minCharge, onComplete) {\n      let params = {};\n      if (offset) params.offset = offset;\n      if (limit) params.limit = limit;\n      if (start) params.start = start;\n      if (end) params.end = end;\n      if (linked) params.linked = linked;\n      if (minCharge) params.minCharge = minCharge;\n      let path = _lib.default.toUrl(`${this.parent.orgUri}/usage-records`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject);\n    },\n    /**\n     * Get the billing information\n     * @param {string} start - start date\n     * @param {string} end - end date\n     * @param {boolean} linked - load linked organizations\n     * @param {number} minCharge - minimum charge\n     * @returns {string}\n     */\n    getHistoryUsageDownloadUrl(start, end, linked, minCharge) {\n      let params = {};\n      if (start) params.start = start;\n      if (end) params.end = end;\n      if (linked) params.linked = linked;\n      if (minCharge) params.minCharge = minCharge;\n      return _lib.default.toUrl(`${this.parent.orgUri}/usage-records.csv`, params);\n    },\n    /**\n     * Get history details for a specific usage record.\n     * @param {number} recordId\n     * @returns {Promise<*>}\n     */\n    async historyDetails(recordId) {\n      let path = _lib.default.toUrl(`/usage-records/${recordId}`);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * @param {number} offset\n     * @param {number} limit\n     * @param {Date} start\n     * @param {Date} end\n     * @param {boolean} linked\n     * @param {number} minCharge\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async historyUsageBySubscription(offset, limit, start, end, linked, minCharge, onComplete) {\n      let params = {};\n      if (offset) params.offset = offset;\n      if (limit) params.limit = limit;\n      if (start) params.start = start;\n      if (end) params.end = end;\n      if (linked) params.linked = linked;\n      if (minCharge) params.minCharge = minCharge;\n      let path = _lib.default.toUrl(`${this.parent.orgUri}/sub-usage`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject);\n    },\n    /**\n     * Get the billing information\n     * @param {string} start - start date\n     * @param {string} end - end date\n     * @param {boolean} linked - load linked organizations\n     * @param {number} minCharge - minimum charge\n     * @returns {string}\n     */\n    getHistoryUsageBySubscriptionDownloadUrl(start, end, linked, minCharge) {\n      let params = {};\n      if (start) params.start = start;\n      if (end) params.end = end;\n      if (linked) params.linked = linked;\n      if (minCharge) params.minCharge = minCharge;\n      return _lib.default.toUrl(`${this.parent.orgUri}/sub-usage.csv`, params);\n    },\n    /**\n     * Get the invoices for the current organization.\n     * @returns {Promise<*>}\n     */\n    async getInvoices() {\n      let path = _lib.default.toUrl(`${this.parent.orgUri}/invoices`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Get the invoice details.\n     * @param {number} invoiceId - the invoice id\n     * @returns {Promise<*>}\n     */\n    getInvoiceDetails(invoiceId, limit = 0, offset = 0) {\n      const params = {};\n      if (offset) params.offset = offset;\n      if (limit) params.limit = limit;\n      let path = _lib.default.toUrl(`/invoices/${invoiceId}/items`, params);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    // Current Subscription Module Related Methods\n    /**\n     * Get the current subscription for the current user.\n     * @param {number} orgId - Optional, if not provided will use the current organization\n     * @returns {Promise<*>}\n     */\n    async getAccount(orgId, thisOrgOnly = false) {\n      let path;\n      if (orgId) {\n        path = _lib.default.toUrl(`/orgs/${orgId}/account?thisOrgOnly=${thisOrgOnly}`);\n      } else {\n        path = _lib.default.toUrl(`${this.parent.orgUri}/account`);\n      }\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Get all testable offered plans\n     * @param {number} accountId\n     * @returns {Promise<*>}\n     */\n    async getPlans(accountId, app) {\n      let path = _lib.default.toUrl(`/accounts/${accountId}/plans`, app ? {\n        app\n      } : undefined);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Add plan to the organization\n     * @param {number} newPlanId\n     * @param {number} quantity\n     * @param {number} orgId optional, if not provided will use the current organization\n     * @returns {Promise<*>}\n     */\n    activateMonitoring(orgId) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${orgId}/monitoring/activate`),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      });\n    },\n    async addPlan(newPlanId, quantity, orgId) {\n      let path = _lib.default.toUrl(`${orgId ? `/orgs/${orgId}` : this.parent.orgUri}/plans`);\n      quantity = quantity || 1;\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify({\n          newPlan: newPlanId,\n          quantity: quantity\n        }),\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get Plan details\n     * @param {number} planId\n     * @returns {Promise<*>}\n     */\n    async getPlan(planId) {\n      let path = _lib.default.toUrl(`/purchased-plans/${planId}`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get Plan history\n     * @param {number} planId\n     * @returns {Promise<*>}\n     */\n    async getPlanHistory(planId) {\n      let path = _lib.default.toUrl(`/purchased-plans/${planId}/periods`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get Plan usage history\n     * @param {number} periodId\n     * @param {number} offset\n     * @param {number} limit\n     * @param {Function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getPeriodHistory(periodId, offset, limit, onComplete) {\n      const params = {};\n      if (offset) params.offset = offset;\n      if (limit) params.limit = limit;\n      let path = _lib.default.toUrl(`/purchased-plan-periods/${periodId}/usage`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject);\n    },\n    /**\n     * Get Plan usage history CSV download link\n     * @param {number} periodId - period id\n     * @returns {string}\n     */\n    getPeriodHistoryDownloadUrl(periodId) {\n      return _lib.default.toUrl(`/purchased-plan-periods/${periodId}/usage.csv`);\n    },\n    /**\n     * Change a plan to new one\n     * @param {number} currentPlanId\n     * @param {number} newPlanId\n     * @param {number} quantity\n     * @returns {Promise<*>}\n     */\n    async changePlan(currentPlanId, newPlanId, quantity) {\n      let path = _lib.default.toUrl(`/purchased-plans/${currentPlanId}`);\n      quantity = quantity || 1;\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify({\n          newPlan: newPlanId,\n          quantity: quantity\n        }),\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Terminate an existing plan\n     * @param {number} planId\n     * @returns {Promise<*>}\n     */\n    async terminatePlan(planId) {\n      let path = _lib.default.toUrl(`/purchased-plans/${planId}`);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Undo plan change or termination\n     * @param {number} planId\n     * @returns {Promise<*>}\n     */\n    async undoTerminatePlan(planId) {\n      let path = _lib.default.toUrl(`/purchased-plans/${planId}/undo-change`);\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get all available plans\n     * @param {number} subId - subscription ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @returns {Promise<*>}\n     */\n    async getSubscriptionDetails(subId, orgId) {\n      let path = _lib.default.toUrl(`${orgId ? `/orgs/${orgId}` : ''}/subscriptions/${subId}`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get all periods for a subscription\n     * @param {number} subId - subscription ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @returns {Promise<*>}\n     */\n    async getSubscriptionPeriods(subId, orgId) {\n      let path = _lib.default.toUrl(`${orgId ? `/orgs/${orgId}` : ''}/subscriptions/${subId}/periods`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get current entities using a non-usage-based subscription\n     * @param {number} subId - subscription ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @returns {Promise<*>}\n     */\n    async getSubscriptionEntities(subId, orgId) {\n      let path = _lib.default.toUrl(`${orgId ? `/orgs/${orgId}` : ''}/subscriptions/${subId}/entities`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get details for a subscription period\n     * @param {number} periodId - period ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @param {number} offset\n     * @param {number} limit\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getSubscriptionPeriodDetails(periodId, orgId, offset, limit, onComplete) {\n      const params = {};\n      if (offset) params.offset = offset;\n      if (limit) params.limit = limit;\n      let path = _lib.default.toUrl(`/subscription-periods/${periodId}/usage`, params);\n      if (orgId) path = _lib.default.toUrl(`/orgs/${orgId}/subscription-periods/${periodId}/usage`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject);\n    },\n    /**\n     * Get details for a subscription period\n     * @param {number} periodId - period ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @param {number} offset\n     * @param {number} limit\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getSubscriptionPeriod(periodId) {\n      let path = _lib.default.toUrl(`/subscription-periods/${periodId}`);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      return await $.ajax(requestObject);\n    },\n    /**\n     * Get download URL for Period usage history CSV\n     * @param {number} periodId - period ID\n     * @param {number} orgId - optional, if not provided will use the current organization\n     * @returns {string}\n     */\n    getSubscriptionPeriodDetailsUrl(periodId, orgId) {\n      let path = _lib.default.toUrl(`/subscription-periods/${periodId}/usage.csv`);\n      if (orgId) path = _lib.default.toUrl(`/orgs/${orgId}/subscription-periods/${periodId}/usage.csv`);\n      return path;\n    },\n    /**\n     * Update Subscription Limit\n     * @param {number} subId - subscription ID\n     * @param {Object} limitObj - limit object\n     * @returns {Promise<*>}\n     */\n    async updateSubscriptionLimit(subId, limitObj) {\n      let path = _lib.default.toUrl(`/subscriptions/${subId}`);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(limitObj),\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get all available cards for an organization\n     * @param {number} orgId - organization ID\n     * @returns {Promise<*>}\n     */\n    async getCards(orgId) {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/cards\"),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Save Allocations Details\n     * @param {number} accountId - account ID\n     * @param {Object} body - allocation details\n     * @returns {Promise<*>}\n     */\n    async saveAllocations(accountId, body) {\n      let path = _lib.default.toUrl(`/accounts/${accountId}/allocations`);\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        data: JSON.stringify(body),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Purchase a new Add On\n     * @param {number} accountId - account ID\n     * @param {Object} body - add on details\n     * @returns {Promise<*>}\n     */\n    async purchaseAddOn(accountId, body) {\n      let path = _lib.default.toUrl(`/accounts/${accountId}/addons`);\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        data: JSON.stringify(body),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Update an existing Add On\n     * @param {number} addonId - addon ID\n     * @param {Object} body - add on details\n     * @returns {Promise<*>}\n     */\n    async updateAddOn(addonId, body) {\n      let path = _lib.default.toUrl(`/addons/${addonId}`);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        data: JSON.stringify(body),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Terminate an Add On\n     * @param {number} addonId - addon ID\n     * @returns {Promise<*>}\n     */\n    async terminateAddOn(addonId) {\n      let path = _lib.default.toUrl(`/addons/${addonId}`);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    /**\n     * Get billing categories for an account or org\n     * @param {number} accountId - account ID\n     * @param {number} orgId - optional org ID (for org view)\n     * @returns {Promise<*>}\n     */\n    async getBillingCategoriesList(accountId, orgId) {\n      let path = orgId ? _lib.default.toUrl(`/orgs/${orgId}/billing-categories`) : _lib.default.toUrl(`/accounts/${accountId}/billing-categories`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get subscriptions for a specific billing category\n     * @param {string} category - category name\n     * @param {number} accountId - account ID\n     * @param {number} orgId - optional org ID (for org view)\n     * @returns {Promise<*>}\n     */\n    async getCategorySubscriptions(category, accountId, orgId) {\n      let path = orgId ? _lib.default.toUrl(`/orgs/${orgId}/billing-categories/${category}/subscriptions`) : _lib.default.toUrl(`/accounts/${accountId}/billing-categories/${category}/subscriptions`);\n      return $.ajax({\n        type: \"GET\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Update a billing category (alerts, limits)\n     * @param {string} category - category name\n     * @param {number} accountId - account ID\n     * @param {number} orgId - optional org ID (for org view)\n     * @param {Object} body - update payload\n     * @returns {Promise<*>}\n     */\n    async updateBillingCategory(category, accountId, orgId, body) {\n      let path = orgId ? _lib.default.toUrl(`/orgs/${orgId}/billing-categories/${category}`) : _lib.default.toUrl(`/accounts/${accountId}/billing-categories/${category}`);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        data: JSON.stringify(body),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Update account settings (balance alerts, PAYG spend limit)\n     * @param {number} accountId - account ID\n     * @param {Object} body - update payload\n     * @returns {Promise<*>}\n     */\n    async updateAccount(accountId, body) {\n      let path = _lib.default.toUrl(`/accounts/${accountId}`);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        data: JSON.stringify(body),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    getBillingCategories(subs) {\n      let categories = [];\n      subs.forEach(function (sub) {\n        const category = sub?.planProduct?.product?.category;\n        if (category && categories.indexOf(category) === -1) {\n          categories.push(category);\n        }\n      });\n      return categories;\n    },\n    /**\n     * Get Adds from purchased subscriptions\n     * @param {object} purchasedPlans\n     * @returns {*[]}\n     */\n    getPurchasedAddons(purchasedPlans) {\n      if (!purchasedPlans) return;\n      const addons = [];\n      purchasedPlans.forEach(p => {\n        addons.push(...p.plan.products.filter(pp => !pp.included));\n      });\n\n      // get unique addons where addon.product.code is matched\n      const uniqueAddons = addons.reduce((acc, addon) => {\n        if (!acc.find(a => a.product.code === addon.product.code)) acc.push(addon);\n        return acc;\n      }, []);\n\n      // loop over unique addons and get the addons which have lowest price\n      const addonsFiltered = [];\n      uniqueAddons.forEach(a => {\n        const existing = addons.filter(ao => ao.product.code === a.product.code);\n\n        // extract object where existing.priceSchedule.prices[0].price is lowest from existing\n        const lowestPrice = existing.reduce((acc, curr) => acc.priceSchedule?.prices[0].price < curr.priceSchedule?.prices[0].price ? acc : curr, existing[0]);\n        addonsFiltered.push(lowestPrice);\n      });\n      return addonsFiltered;\n    },\n    /**\n     * Get all possible add-ons across all purchased plans including duplicates\n     * @param {object} purchasedPlans\n     * @returns {*[]}\n     */\n    getAllPossibleAddons(purchasedPlans) {\n      const addons = [];\n      purchasedPlans?.forEach(p => {\n        addons.push(...p.plan.products.filter(pp => !pp.included));\n      });\n      return addons;\n    },\n    /**\n     * Check if an Addon exits in Purchased Addons\n     * @param {object} addons\n     * @param {object} purchasedAddon\n     * @returns {*}\n     */\n    getPurchasedAddonFromPlans(addons, purchasedAddon) {\n      return addons.find(a => a.id === purchasedAddon.planProduct.id);\n    },\n    /**\n     * Format number to 3 decimal places\n     * @param {number} num\n     * @returns {string}\n     */\n    formatNum(num) {\n      return _.isNumber(parseFloat(num)) ? numeral(num).format('0,0.[000]a') : i;\n    },\n    /**\n     * Convert a resource object to string based on specified code\n     * @param {Array} resource - resource object\n     * @param {string} code - code to use\n     * @returns {string}\n     */\n    getResourceString(resource, code) {\n      const splitFunction = (resource, code) => {\n        if (code === 'EIP' || code === 'PublicIP') {\n          return resource.split('|')[1];\n        } else if (code === 'test') {\n          return resource.split('-')[0];\n        }\n      };\n      if (!_.isArray(resource)) {\n        return splitFunction(resource, code);\n      } else {\n        let result = [];\n        _.each(resource, item => result.push(splitFunction(item, code)));\n        return result.join(', ');\n      }\n    },\n    /**\n     * Returns the type of product based on different conditions\n     * @param {object} subscription - subscription object\n     * @returns {string}\n     */\n    getProductType(productType, paymentType) {\n      if (productType === 'Capacity') {\n        return 'Capacity';\n      } else if (paymentType === 'Upfront') {\n        return 'Consumable';\n      } else {\n        return 'PayAsYouGo';\n      }\n    },\n    /**\n     * Returns the type of product based on different conditions\n     * @param {object} subscription - subscription object\n     * @returns {string}\n     */\n    getProductTypeFromSubscription(subscription) {\n      return this.getProductType(subscription.planProduct.product.productType, subscription.planProduct.paymentType);\n    },\n    hasUsageMetrics(subscription) {\n      return subscription?.planProduct?.product?.hasUsageMetrics !== false;\n    },\n    /**\n     * Get the resource string for a given subscription\n     * @param {Object} subscription - subscription object\n     * @returns {string}\n     */\n    getSubscriptionUsageInfo(subscription, thisOrgOnly, single = false) {\n      const {\n        planProduct: {\n          frequency,\n          product: {\n            consumableUnits\n          }\n        },\n        currentPeriod: {\n          includedQty = 0,\n          currentTotalUsage = 0,\n          currentPrimaryTotalUsage = 0,\n          totalUsageTime = 0,\n          invoicedQty = false,\n          remainingQty = 0,\n          invoicedTotal\n        } = {},\n        effectiveDate\n      } = subscription || {};\n      const currentOrgPeriod = subscription.organization?.currentPeriod || subscription?.currentPeriod;\n      let content;\n      if (subscription?.currentPeriod && this.getProductTypeFromSubscription(subscription) === 'Capacity') {\n        if (thisOrgOnly) {\n          content = `<strong class=\"f-w-600\">Current Org:</strong> ${this.formatNum(currentOrgPeriod?.currentTotalUsage)} / ${this.formatNum(currentOrgPeriod?.includedQty)} in use`;\n          content += `<br><strong class=\"f-w-600\">Product Overall:</strong> ${this.formatNum(currentPrimaryTotalUsage)} / ${this.formatNum(includedQty)} in use`;\n        } else {\n          content = single ? remainingQty : `${this.formatNum(currentTotalUsage)} / ${this.formatNum(includedQty)} in use`;\n        }\n      } else if (subscription?.currentPeriod && this.getProductTypeFromSubscription(subscription) === 'Consumable') {\n        if (thisOrgOnly) {\n          content = `<strong class=\"f-w-600\">Current Org:</strong> ${this.formatNum(currentOrgPeriod?.totalUsageTime)} / ${this.formatNum(currentOrgPeriod?.includedQty)} used`;\n          content += `<br><strong class=\"f-w-600\">Product Overall:</strong> ${this.formatNum(totalUsageTime)} / ${this.formatNum(includedQty)} used`;\n        } else {\n          content = `${this.formatNum(totalUsageTime)} / ${this.formatNum(includedQty)} used`;\n        }\n      } else if (subscription?.currentPeriod && invoicedQty) {\n        const units = subscription.planProduct.product.consumableUnits;\n        if (thisOrgOnly) {\n          content = `<strong class=\"f-w-600\">Current Org:</strong> ${this.formatNum(currentOrgPeriod?.invoicedQty)} ${units} for ${_lib.default.printCcy(currentOrgPeriod?.invoicedTotal)}`;\n          content += `<br><strong class=\"f-w-600\">Product Overall:</strong> ${this.formatNum(invoicedQty)} ${units} for ${_lib.default.printCcy(invoicedTotal)}`;\n        } else {\n          content = `${this.formatNum(invoicedQty)} ${units} billed for ${_lib.default.printCcy(invoicedTotal)}`;\n        }\n      } else if (effectiveDate && moment(effectiveDate) > new Date()) {\n        content = 'Starts on ' + _lib.default.displayDate(moment(effectiveDate), \"MMM D 'YY\");\n      } else {\n        content = 'No usage yet';\n        if (frequency !== 'OneTime' && !single) {\n          content += ` this ${this.getFrequencyLabelSmall(frequency)}`;\n        }\n      }\n      return content;\n    },\n    /**\n     * Get the resource string for a given subscription detail\n     * @param {Object} subscription - subscription detail object\n     * @returns {string}\n     */\n    getSubscriptionDetailsUsageInfo(full, subDetails, accountSubDetails, thisOrgOnly, type, showSearch = false) {\n      let content;\n      let content2;\n      if (this.getProductTypeFromSubscription(subDetails) === 'Capacity') {\n        const totalUsage = full.totalUsageTime || 0;\n        let duration;\n        if (totalUsage) {\n          duration = this.formatNum(totalUsage);\n        }\n        content = `${this.formatNum(full.peakUsage || 0)} / ${this.formatNum(full.includedQty)} peak usage`;\n        content2 = full.peakUsage;\n        if (duration) {\n          content += `<br />${duration} total ${subDetails.planProduct.product.consumableUnits}s`;\n        }\n      } else if (this.getProductTypeFromSubscription(subDetails) === 'Consumable') {\n        if (thisOrgOnly) {\n          content = `<strong class=\"f-w-600\">Current Org:</strong> ${this.formatNum(full.totalUsageTime)} / ${this.formatNum(full.includedQty)} used`;\n          content += `<br><strong class=\"f-w-600\">Product Overall:</strong> ${this.formatNum(full.accountPeriod?.totalUsageTime || 0)} / ${this.formatNum(full.accountPeriod?.includedQty)} used`;\n        } else {\n          content = `<strong class=\"f-w-600\">Product:</strong> ${this.formatNum(full.totalUsageTime)} / ${this.formatNum(full.includedQty)} used`;\n        }\n        content2 = full.peakUsage;\n      } else {\n        if (full.invoicedQty) {\n          if (thisOrgOnly) {\n            content = `<strong class=\"f-w-600\">Current Org:</strong> ${this.formatNum(full.invoicedQty)} ${subDetails.planProduct.product.consumableUnits} for ${_lib.default.printCcy(full.invoicedTotal)}`;\n            content += `<br><strong class=\"f-w-600\">Product Overall:</strong> ${this.formatNum(full.accountPeriod.invoicedQty)} ${accountSubDetails?.planProduct?.product?.consumableUnits} for ${_lib.default.printCcy(full.accountPeriod.invoicedTotal)}`;\n          } else {\n            content = `<strong class=\"f-w-600\">Product:</strong> ${this.formatNum(full.invoicedQty)} ${subDetails.planProduct.product.consumableUnits} billed for ${_lib.default.printCcy(full.invoicedTotal)}`;\n          }\n          content2 = full.invoicedQty;\n        } else {\n          content = 'No usage this period';\n          content2 = content;\n        }\n      }\n      if (content !== 'No usage this period') {\n        const totalQueued = full.queuedExecutions || full.totalExecutions ? Math.round(full.queuedExecutions / full.totalExecutions * 100) : 0;\n        content += `<br><strong class=\"f-w-600\">Queued:</strong> ${totalQueued}% `;\n        if (totalQueued) {\n          content += `(${_lib.default.printShortNumber(full.queuedExecutions)}/${_lib.default.printShortNumber(full.totalExecutions)})`;\n          content += `<br><strong class=\"f-w-600\">Queued Time:</strong> ${full.totalQueuedTime ? this.getUsageTime(full.totalQueuedTime / full.queuedExecutions, true, false) : '0s'} avg`;\n        }\n        if (showSearch) {\n          content += \" <a class='usage-icon' href='javascript:;' data-ember-action='showUsageModal' data-ember-action-type='json' data-ember-action-json='\" + JSON.stringify({\n            id: full.id\n          }) + \"'>\" + '<i class=\"fa fa-search\"></i></a> ';\n        }\n      }\n      if (type === 'display') {\n        return content;\n      } else {\n        return content2;\n      }\n    },\n    /**\n     * Get price for a quantity based on priceSchedule\n     * @param {number} start\n     * @param {number} qty\n     * @param {Object<Array>} priceSchedule\n     * @returns {number}\n     */\n    getPrice(start, qty, priceSchedule) {\n      let remaining = qty;\n      let current = start || 0;\n      let cost = 0;\n      if (priceSchedule?.prices?.length > 0) priceSchedule.prices.forEach(function (p) {\n        if (remaining > 0 && (!p.end || current >= p.start)) {\n          let toUse = Math.min(remaining, p.total || 99999999);\n          remaining -= toUse;\n          current += toUse;\n          cost += toUse * p.price;\n        }\n      });\n      return cost;\n    },\n    /**\n     * Get String from provided object {key: value}\n     * @param {Object} metadata\n     * @returns {string}\n     */\n    printMetadata(metadata) {\n      return _.map(metadata, (v, k) => `${k} = ${v}`).join(', ');\n    },\n    /**\n     * Get the price for a given subscription based on frequency\n     * @param {number} price\n     * @param {string} frequency\n     * @returns {string|number}\n     */\n    getPriceFromFrequency(price, frequency) {\n      if (!_.isNumber(price)) {\n        return '-';\n      } else if (!frequency || frequency === 'Monthly' || frequency === 'OneTime') {\n        return price;\n      } else if (frequency === 'Quarterly') {\n        return price / 3;\n      } else if (frequency === 'Bi-Annually') {\n        return price / 6;\n      } else if (frequency === 'Yearly') {\n        return price / 12;\n      } else if (frequency === 'Biennially') {\n        return price / 24;\n      } else if (frequency === 'Triennially') {\n        return price / 36;\n      }\n    },\n    getFrequencyLabelShort(frequency) {\n      if (frequency === 'OneTime') {\n        return '';\n      } else if (frequency === 'Monthly') {\n        return '/mo';\n      } else if (frequency === 'Quarterly') {\n        return '/qtr';\n      } else if (frequency === 'Bi-Annually') {\n        return '/half-yr';\n      } else if (frequency === 'Yearly') {\n        return '/yr';\n      } else if (frequency === 'Biennially') {\n        return '/2yr';\n      } else if (frequency === 'Triennially') {\n        return '/3yr';\n      }\n    },\n    getFrequencyLabel(frequency) {\n      if (frequency === 'OneTime') {\n        return '';\n      } else if (frequency === 'Monthly') {\n        return 'Monthly';\n      } else if (frequency === 'Quarterly') {\n        return 'Quarter';\n      } else if (frequency === 'Bi-Annually') {\n        return 'Bi-Annual';\n      } else if (frequency === 'Yearly') {\n        return 'Annual';\n      } else if (frequency === 'Biennially') {\n        return 'Biennial';\n      } else if (frequency === 'Triennially') {\n        return 'Triennial';\n      }\n    },\n    getFrequencyLabelSmall(frequency) {\n      if (frequency === 'OneTime') {\n        return '';\n      } else if (frequency === 'Monthly') {\n        return 'month';\n      } else if (frequency === 'Quarterly') {\n        return 'quarter';\n      } else if (frequency === 'Bi-Annually') {\n        return 'bi-annual';\n      } else if (frequency === 'Yearly') {\n        return 'annual';\n      } else if (frequency === 'Biennially') {\n        return 'biennial';\n      } else if (frequency === 'Triennially') {\n        return 'triennial';\n      }\n    },\n    getUsageInfo(sub) {\n      const totalUsageTime = sub.totalUsageTime || 0;\n      const totalQueuedTime = sub.totalQueuedTime || 0;\n      return this.getStats(this.getProductTypeFromSubscription(sub), sub.planProduct.product.description, sub.planProduct.relatedConsumableProduct?.description, sub.peakUsage, totalUsageTime, sub.planProduct.frequency, sub.queuedExecutions, sub.totalExecutions, totalQueuedTime);\n    },\n    getTotalUsageText(description, totalExecutions, totalUsage) {\n      return totalExecutions ? `${totalExecutions} tests run @ ${this.formatNum(totalUsage / totalExecutions)} ${description} per test avg` : '-';\n    },\n    getStats(productType, description, consumableDescription, peakUsage, totalUsageTime, frequency, queuedExecutions, totalExecutions, totalQueuedTime) {\n      const queuedTests = queuedExecutions || totalExecutions ? Math.round(queuedExecutions / totalExecutions * 100) : 0;\n      const averageQueuedTime = totalQueuedTime ? this.getUsageTime(totalQueuedTime / queuedExecutions, true) : '0s';\n      let content = '';\n      consumableDescription = consumableDescription || description;\n      if (productType === 'Capacity') {\n        content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Peak Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The peak capacity used at any point since the product was purchased\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                    </div>\n                    ${this.formatNum(peakUsage)} ${description}</div>\n                    <div class=\"m-b-5\"><strong class=\"f-w-600\">Total Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"Total usage of this product. If a test utilizes 2 ${description} for 1 hour that counts as 2 hours of usage time\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${this.getTotalUsageText(consumableDescription, totalExecutions, totalUsageTime)}</div>`;\n      } else if (productType === 'Consumable' || productType === 'PayAsYouGo') {\n        if (frequency !== 'OneTime' && productType === 'Consumable') {\n          content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Peak ${this.getFrequencyLabel(frequency)} Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The peak ${consumableDescription}\n                     used during any ${this.getFrequencyLabelSmall(frequency)} since the product was purchased\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n\n                    ${this.formatNum(peakUsage)} ${consumableDescription}</div>`;\n        }\n        if (productType === 'PayAsYouGo') {\n          content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Peak ${this.getFrequencyLabel(frequency)} Billed:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The peak ${consumableDescription}\n                     billed during any ${this.getFrequencyLabelSmall(frequency)} since the product was purchased\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                     </div>\n                    ${this.formatNum(peakUsage)} ${consumableDescription}</div>`;\n        }\n        content += `  <div class=\"m-b-5\"><strong class=\"f-w-600\">Total Usage:</strong>\n                    <div class=\"inline-info-icon\"  data-bs-toggle=\"tooltip\" data-bs-title=\"The total usage since the product was purchased\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${this.getTotalUsageText(consumableDescription, totalExecutions, totalUsageTime)}</div>`;\n      }\n      content += `  <div class=\"m-b-5\"><strong class=\"f-w-600\">Queued Tests:</strong>\n                  <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"Total queued tests since the product was purchased\">\n                  <i class=\"fa fa-info-circle\" ></i>\n                  </div>\n                  ${queuedTests}%${queuedTests ? ` (${_lib.default.printShortNumber(queuedExecutions)}/${_lib.default.printShortNumber(totalExecutions)})` : ''}</div>`;\n      if (totalQueuedTime) {\n        content += `  <div class=\"m-b-5\"><strong class=\"f-w-600\">Average Queued Time:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"Average queued time since the product was purchased\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${averageQueuedTime}</div>`;\n      }\n      return content;\n    },\n    getStatsDetails(productType, description, consumableDescription, peakUsage, totalUsageTime, frequency, isSubDetails, queuedExecutions, totalExecutions, totalQueuedTime) {\n      const queuedTests = queuedExecutions || totalExecutions ? Math.round(queuedExecutions / totalExecutions * 100) : 0;\n      const averageQueuedTime = totalQueuedTime ? this.getUsageTime(totalQueuedTime / queuedExecutions, true) : '0s';\n      consumableDescription = consumableDescription || description;\n      let content = '';\n      if (productType === 'Capacity') {\n        content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Peak Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The peak capacity used at point since the start of the period\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                    </div>\n                    ${peakUsage} ${description}</div>\n                    <div class=\"m-b-5\"><strong class=\"f-w-600\">Total Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"Total usage of this product in current period. If a test utilizes 2 ${description} for 1 hour that counts as 2 hours of usage time\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${this.getTotalUsageText(consumableDescription, totalExecutions, totalUsageTime)}</div>`;\n      } else if (productType === 'Consumable' || productType === 'PayAsYouGo') {\n        let content = '';\n        if (frequency !== 'OneTime' && productType === 'Consumable') {\n          if (isSubDetails) {\n            content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Quantity Used:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The ${consumableDescription}\n                     used during this  ${this.getFrequencyLabelSmall(frequency)} period\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                    </div>\n                    ${peakUsage} ${consumableDescription}</div>`;\n          } else {\n            content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Peak ${this.getFrequencyLabel(frequency)} Usage:</strong>\n                    <div class=\"inline-info-icon\"  data-bs-toggle=\"tooltip\" data-bs-title=\"The peak ${consumableDescription}\n                     used during this  ${this.getFrequencyLabelSmall(frequency)} period\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${peakUsage} ${consumableDescription}</div>`;\n          }\n        }\n        if (productType === 'PayAsYouGo') {\n          content += `<div class=\"m-b-5\"><strong class=\"f-w-600\">Quantity Billed:</strong>\n                    <div class=\"inline-info-icon\"  data-bs-toggle=\"tooltip\" data-bs-title=\"The total ${consumableDescription}\n                     billed during this period\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${this.formatNum(peakUsage)} ${consumableDescription}</div>`;\n        }\n        content += ` <div class=\"m-b-5\"><strong class=\"f-w-600\">Total Usage:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"The total usage since the start of the period\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                    </div>\n                    ${this.getTotalUsageText(consumableDescription, totalExecutions, totalUsageTime)}</div>`;\n      }\n      content += `  <div class=\"m-b-5\"><strong class=\"f-w-600\">Queued Tests:</strong>\n                    <div class=\"inline-info-icon\" data-bs-toggle=\"tooltip\" data-bs-title=\"Total queued tests since the product was purchased\">\n                    <i class=\"fa fa-info-circle\" ></i>\n                    </div>\n                    ${queuedTests}%${queuedTests ? ` (${_lib.default.printShortNumber(queuedExecutions)}/${_lib.default.printShortNumber(totalExecutions)})` : ''}</div>`;\n      if (totalQueuedTime) {\n        content += `  <div class=\"m-b-5\"><strong class=\"f-w-600\">Average Queued Time:</strong>\n                    <div class=\"inline-info-icon\"  data-bs-toggle=\"tooltip\" data-bs-title=\"Average queued time since the product was purchased\">\n                    <i class=\"fa fa-info-circle\"></i>\n                    </div>\n                    ${averageQueuedTime}</div>`;\n      }\n      return content;\n    },\n    getUsageTime(totalTime, limitValues, isMonthly = true) {\n      const months = isMonthly ? Math.floor(totalTime / (1000 * 60 * 60 * 24 * 30)) : 0;\n      const days = Math.floor(totalTime % (1000 * 60 * 60 * 24 * 30) / (1000 * 60 * 60 * 24));\n      const hours = Math.floor(totalTime % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));\n      const minutes = Math.floor(totalTime % (1000 * 60 * 60) / (1000 * 60));\n      const seconds = Math.floor(totalTime % (1000 * 60) / 1000);\n      let duration = '';\n      if (months > 0) {\n        duration = months + 'mo ';\n      }\n      if (limitValues) {\n        if (days) {\n          duration += `${days}d `;\n        }\n        if (hours) {\n          duration += `${hours}h `;\n        }\n        if (minutes) {\n          duration += `${minutes}m `;\n        }\n        duration += `${seconds}s`;\n      } else {\n        duration += `${days}d ${hours}h ${minutes}m ${seconds}s`;\n      }\n      return duration;\n    },\n    getPlanColumn(subscription) {\n      let result;\n      let price = this.getPrice(0, subscription.includedQty, subscription.priceSchedule);\n      price = _lib.default.printCcy(this.getPriceFromFrequency(price, subscription.planProduct.frequency));\n      if (subscription.planProduct.frequency !== 'OneTime') price += '/mo';\n      if (subscription.planProduct.frequency === 'OneTime' || subscription.terminationDate) {\n        result = `${price} expiring on ${moment(subscription.terminationDate).format(\"MMM D 'YY\")}`;\n      } else if (moment(subscription.effectiveDate) > new Date()) {\n        result = `${price} starting on ${moment(subscription.effectiveDate).format(\"MMM D 'YY\")}`;\n      } else if (!subscription.hasChanges) {\n        result = `${price} renews on ${moment(subscription.currentPeriod.endDate).format(\"MMM D 'YY\")}`;\n      } else if (subscription.hasChanges) {\n        let p1 = this.getPrice(0, subscription.currentPeriod.includedQty, subscription.currentPeriod.priceSchedule);\n        p1 = this.getPriceFromFrequency(p1, subscription.planProduct.frequency);\n        result = `${_lib.default.printCcy(p1)}/mo until ${moment(subscription.currentPeriod.endDate).format(\"MMM D 'YY\")} <br> and then ${price}/mo`;\n      }\n      return result;\n    },\n    async associateAws(id, type) {\n      let path;\n      if (type === 'account') {\n        path = `/accounts/${id}/aws-associate`;\n      } else {\n        path = `/orgs/${id}/aws-associate`;\n      }\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(path),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/browser-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    browsers: null,\n    // stored it for cache reasons\n    devices: [],\n    // stored it for cache reasons\n    defaultDevice: {\n      name: 'Desktop 1920 x 1080',\n      displaySize: '1920x1080x24',\n      type: 'desktop',\n      width: 1920,\n      height: 1080,\n      scaleFactor: 1\n    },\n    // stored it for cache reasons\n\n    /**\n     * Get All Browsers\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    async getAllBrowsers() {\n      if (this.browsers) {\n        return this.browsers;\n      } else {\n        let path = _lib.default.toUrl('/browser-versions');\n        if (this.debug) console.log(path);\n        let response = await $.ajax({\n          url: path,\n          contentType: \"application/json; charset=utf-8\",\n          dataType: \"json\"\n        });\n        response.chrome.unshift({\n          version: 'Beta',\n          driverVersion: 'Beta'\n        });\n        response.firefox.unshift({\n          version: 'Beta',\n          driverVersion: 'Beta'\n        });\n        response.edge.unshift({\n          version: 'Beta',\n          driverVersion: 'Beta'\n        });\n        response.chrome.unshift({\n          version: 'Latest',\n          driverVersion: 'Latest'\n        });\n        response.firefox.unshift({\n          version: 'Latest',\n          driverVersion: 'Latest'\n        });\n        response.edge.unshift({\n          version: 'Latest',\n          driverVersion: 'Latest'\n        });\n        response.webkit.unshift({\n          version: 'Latest',\n          driverVersion: 'Latest'\n        });\n        response.config = [{\n          version: 'Latest',\n          driverVersion: 'Latest'\n        }];\n        this.browsers = response;\n        this.devices = response['devices'];\n        this.defaultDevice = this.devices[0];\n        return response;\n      }\n    },\n    async getAllDevices() {\n      await this.getAllBrowsers();\n      return this.devices;\n    },\n    getDevice(deviceStr) {\n      if (deviceStr) {\n        try {\n          const device = _.isObject(deviceStr) ? deviceStr : JSON.parse(deviceStr);\n          if (device.name) {\n            const listItem = _.find(this.devices, function (d) {\n              return d.name === device.name;\n            });\n            if (listItem) {\n              const answer = _.cloneDeep(listItem);\n              _.merge(answer, device);\n              return answer;\n            }\n          }\n          return device;\n        } catch (err) {}\n      }\n    },\n    toDeviceLabel(deviceText) {\n      const device = this.getDevice(deviceText);\n      if (device) {\n        return device.name;\n      }\n      return '';\n    },\n    toDeviceText(device) {\n      return this.toDeviceLabel(device);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/changelog-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    pageSize: 20,\n    loadMoreSize: 5,\n    /**\n     * Fetch all the announcements for current organization\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    all(offset, limit) {\n      let path = _lib.default.toUrl(\"/changelog?offset=\" + (offset || 0) + \"&limit=\" + (limit || 5));\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Search announcements\n     * @param {string} text Search term\n     * @param {number} offset Offset\n     * @param {number} limit Limit\n     * @returns {*}\n     */\n    search(text, offset, limit) {\n      return $.ajax({\n        url: _lib.default.toUrl(\"/changelog-search?text=\" + text + \"&offset=\" + (offset || 0) + \"&limit=\" + (limit || 5)),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch one report for current organization\n     * @param {number} changeLogId Report to fetch\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    get(changeLogId) {\n      let path = _lib.default.toUrl(`/changelog/${changeLogId}`);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Get total announcements since ...\n     * @param {date} since\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    count(since) {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/changelog-count\" + (since ? \"?since=\" + since : \"\")),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Add single changelog to server\n     * @param {object} changeLog ChangeLog to add [Object]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    add(changeLog) {\n      let path = _lib.default.toUrl(\"/changelog\");\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(changeLog),\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Add single changelog to server\n     * @param {number} changeLogId Changelog ID to update\n     * @param {object} changeLog Changelog data [Object]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    update(changeLogId, changeLog) {\n      let path = _lib.default.toUrl(\"/changelog/\" + changeLogId);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(changeLog),\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Delete single changelog from server\n     * @param {number} changeLogId Changelog ID\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    delete(changeLogId) {\n      let path = _lib.default.toUrl(\"/changelog/\" + changeLogId);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/command-streams\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    defaultLimit: 100,\n    /**\n     * Get Execution Commands\n     * @param {object} execution\n     * @param {integer|null} regionId\n     * @param {object} params\n     * @param {Function} onComplete\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    async getCommandStreams(execution, regionId, params, onComplete) {\n      let url = execution.uuid ? `/p/${execution.uuid}` : `/executions/${execution.id}`;\n      url += regionId ? `/regions/${regionId}/command-streams` : '/command-streams';\n      let path = _lib.default.toUrl(url, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    getCommandsDownloadUrl(streamId, uuid) {\n      let url = uuid ? `/p/${uuid}/command-streams/${streamId}` : `/command-streams/${streamId}`;\n      url += '/commands.csv?';\n      return _lib.default.toUrl(url);\n    },\n    /**\n     * Get Commands for a stream\n     * @param {number} streamId\n     * @param {object} params\n     * @param {string} uuid if it is provided it is considered as public execution\n     * @param {function} onComplete\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    async getCommands(streamId, params, uuid, onComplete) {\n      let url = uuid ? `/p/${uuid}/command-streams/${streamId}` : `/command-streams/${streamId}`;\n      url += '/commands?';\n      let path = _lib.default.toUrl(url, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    /**\n     * Get Command Details\n     * @param {number} commandId\n     * @param {uuid|null} uuid\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getCommandDetails(commandId, uuid, onComplete) {\n      let url;\n      let params = {};\n      if (uuid) {\n        url = `/p/${uuid}`;\n        params = {\n          commandResultId: commandId\n        };\n      } else {\n        url = `/commands/${commandId}`;\n      }\n      let path = _lib.default.toUrl(`${url}?includeData=true`, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    /**\n     * Get Command Stream Summaries\n     * @param {number} executionId\n     * @param {number} regionId\n     * @param {object} params\n     * @param onComplete\n     * @returns {Promise<*>}\n     */\n    async getCommandStreamRelated(executionId, regionId, params, onComplete) {\n      let url;\n      if (regionId) {\n        url = `/executions/${executionId}/regions/${regionId}/command-stream-related`;\n      } else {\n        url = `/executions/${executionId}/command-stream-related`;\n      }\n      let path = _lib.default.toUrl(url, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    /**\n     * Get Command Stream Errors\n     * @param {number} executionId\n     * @param {number} commandNameId\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getCommandSummariesErrors(executionId, commandNameId, onComplete) {\n      let path = _lib.default.toUrl(`/executions/${executionId}/command-summaries/${commandNameId}/errors`);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    async getCommandRelatedUsers(id, params, isPublic, onComplete) {\n      let urlString = (isPublic ? `/p/` : `/executions/`) + id;\n      let path = _lib.default.toUrl(`${urlString}/command-related-users`, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    async getCommandRelatedThreads(id, userId, params, isPublic, onComplete) {\n      let urlString = (isPublic ? `/p/` : `/executions/`) + id;\n      let path = _lib.default.toUrl(`${urlString}/command-related-threads?${userId ? `&user=${userId}` : ''}`, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    async getCommandRelatedIterations(id, threadId, params, isPublic, onComplete) {\n      let urlString = (isPublic ? `/p/` : `/executions/`) + id;\n      let path = _lib.default.toUrl(`${urlString}/command-related-iterations?${threadId ? `&threadId=${threadId}` : ''}`, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    },\n    async getIterationCommandStreams(id, iterationId, params = {}, isPublic = false, onComplete = null) {\n      let urlString = (isPublic ? `/p/` : `/executions/`) + id;\n      urlString += `/iterations/${iterationId}`;\n      urlString += `/command-streams`;\n      let path = _lib.default.toUrl(urlString, params);\n      const requestObject = this.parent._getRequestObj(path, 'GET', null, onComplete);\n      return $.ajax(requestObject);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/conversations\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    getAll(params = {}) {\n      const org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/conversations`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    get(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/conversations/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getAiModels() {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl('/ai-models'),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    create(data = {}) {\n      const org = this.parent.user.org;\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${org.id}/conversations`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    update(id, data) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/conversations/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    getHistory(id, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/conversations/${id}/history`),\n        contentType: 'application/json; charset=utf-8',\n        data: params\n      });\n    },\n    getHistoryCycles(id, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/conversations/${id}/history-cycles`),\n        contentType: 'application/json; charset=utf-8',\n        data: params\n      });\n    },\n    getHistoryCycleWork(id, cycleId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/conversations/${id}/history-cycles/${cycleId}/work`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    delete(id) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/conversations/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getFile(historyEntryId, fileName) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/conversation-history-entries/${historyEntryId}/files?name=${encodeURIComponent(fileName)}`),\n        dataType: 'text',\n        converters: {\n          'text text': data => data\n        }\n      });\n    },\n    uploadAttachment(conversationId, file) {\n      const data = new FormData();\n      data.append('file', file);\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/conversations/${conversationId}/attachments`),\n        data,\n        cache: false,\n        contentType: false,\n        processData: false\n      });\n    },\n    deleteAttachment(conversationId, attachmentId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/conversations/${conversationId}/attachments/${attachmentId}`)\n      });\n    },\n    getAttachmentDownloadUrl(conversationId, attachmentId) {\n      return _lib.default.toUrl(`/conversations/${conversationId}/attachments/${attachmentId}/download`);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/countries\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  const cache = {\n    holidays: {}\n  };\n  var _default = _exports.default = {\n    async getCountries() {\n      const cachedCountries = localStorage.getItem('countries');\n      if (cachedCountries) {\n        return JSON.parse(cachedCountries);\n      }\n      const path = _lib.default.toUrl('/countries');\n      const requestObject = this.parent._getRequestObj(path, 'GET');\n      const result = await $.ajax(requestObject);\n      localStorage.setItem('countries', JSON.stringify(result.sort((a, b) => a.description.localeCompare(b.description, 'en', {\n        sensitivity: 'base'\n      }))));\n      return result;\n    },\n    async getHolidays(countryId, year) {\n      if (cache.holidays[`${countryId}${year}`]) {\n        return cache.holidays[`${countryId}${year}`];\n      }\n      const path = _lib.default.toUrl(`/holidays/${countryId}`, {\n        year\n      });\n      const requestObject = this.parent._getRequestObj(path, 'GET');\n      const result = await $.ajax(requestObject);\n      cache.holidays[`${countryId}${year}`] = result.sort((a, b) => new Date(a.observed) - new Date(b.observed));\n      return cache.holidays[`${countryId}${year}`];\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/current-user\", [\"exports\", \"@testable/shared-ui/utils/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    liveTest: ['LiveSession', 'LiveSessionMinute', 'SelfHostedLiveSession', 'SelfHostedLiveSessionMinute', 'EIP'],\n    functionalTest: ['LiveSession', 'LiveSessionMinute', 'SelfHostedLiveSession', 'SelfHostedLiveSessionMinute', 'BrowserSession', 'BrowserSessionMinute', 'SelfHostedBrowserSession', 'SelfHostedBrowserSessionMinute', 'EIP'],\n    monitoringTest: ['Monitor', 'MonitorRun', 'SelfHostedMonitor', 'SelfHostedMonitorRun', 'EIP'],\n    isLiveTestCache: null,\n    isFunctionalTestCache: null,\n    isMonitoringTestCache: null,\n    isLiveTest() {\n      if (this.isLiveTestCache !== null) return this.isLiveTestCache;\n      let accountSubs = _environment.config.currentUser?.org?.account?.subscriptions || [];\n      let isLiveTest = true;\n      accountSubs.forEach(sub => {\n        if (!this.liveTest.includes(sub.planProduct.product.code)) {\n          isLiveTest = false;\n        }\n      });\n      this.isLiveTestCache = isLiveTest;\n      return isLiveTest;\n    },\n    isFunctionalTest() {\n      if (this.isFunctionalTestCache !== null) return this.isFunctionalTestCache;\n      let accountSubs = _environment.config.currentUser?.org?.account?.subscriptions || [];\n      let isFunctionalTest = true;\n      accountSubs.forEach(sub => {\n        if (!this.functionalTest.includes(sub.planProduct.product.code)) {\n          isFunctionalTest = false;\n        }\n      });\n      this.isFunctionalTestCache = isFunctionalTest;\n      return isFunctionalTest;\n    },\n    isMonitoringTest() {\n      if (this.isMonitoringTestCache !== null) return this.isMonitoringTestCache;\n      let accountSubs = _environment.config.currentUser?.org?.account?.subscriptions || [];\n      let isMonitoringTest = true;\n      accountSubs.forEach(sub => {\n        if (!this.monitoringTest.includes(sub.planProduct.product.code)) {\n          isMonitoringTest = false;\n        }\n      });\n      this.isMonitoringTestCache = isMonitoringTest;\n      return isMonitoringTest;\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/data-stores\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"js-base64\"], function (_exports, _lib, _jsBase) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"js-base64\"eaimeta@70e063a35619d71f\n  function clientUpdateHeaders() {\n    return {\n      'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n    };\n  }\n  var _default = _exports.default = {\n    get(dataStoreId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl('/data-stores/' + dataStoreId),\n        contentType: 'application/json; charset=utf-8'\n      }).then(ds => {\n        _lib.default.addAuthToDataStore(ds);\n        return ds;\n      }, _lib.default.fail);\n    },\n    download(ds) {\n      _lib.default.addAuthToDataStore(ds);\n      return $.ajax({\n        type: 'GET',\n        dataType: 'text',\n        url: ds.url\n      });\n    },\n    uploadFile(scriptId, file, name, path) {\n      const data = new FormData();\n      data.append('file0', file);\n      data.append('path0', path);\n      data.append('name0', name);\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/data-stores'),\n        data,\n        cache: false,\n        contentType: false,\n        processData: false,\n        headers: clientUpdateHeaders()\n      });\n    },\n    updateName(dataStoreId, name) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl('/data-stores/' + dataStoreId),\n        data: JSON.stringify({\n          name\n        }),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    updateRelativePaths(scriptId, paths) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/scripts/${scriptId}/update-paths`),\n        data: JSON.stringify({\n          paths\n        }),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    updateContents(dataStoreId, name, path, contents) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl('/data-stores/' + dataStoreId + '/contents'),\n        data: JSON.stringify({\n          name: name,\n          path: path,\n          contents: _jsBase.Base64.encode(contents)\n        }),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    extractFile(dataStoreId) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl('/data-stores/' + dataStoreId + '/extract'),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      });\n    },\n    async create(scriptId, name, contents = '', isFolder = false, path = '/') {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/data-stores/contents'),\n        data: JSON.stringify({\n          name,\n          isFolder,\n          path,\n          contents: _jsBase.Base64.encode(contents)\n        }),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      });\n    },\n    deleteFile(dataStoreId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl('/data-stores/' + dataStoreId),\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    deleteFolder(scriptId, path) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/data-stores/path'),\n        data: JSON.stringify({\n          path\n        }),\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    deleteAll(scriptId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/data-stores/all'),\n        dataType: 'json',\n        headers: clientUpdateHeaders()\n      }).then(null, _lib.default.fail);\n    },\n    deleteGeneratedFiles(scriptId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/generated-files')\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/executions\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    getSuiteResults(executionId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/executions/${executionId}/suite-results`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getSuiteResultsChildResults(testResultId, uuid) {\n      let url = _lib.default.toUrl('/suite-test-results/' + testResultId + '/child-results');\n      if (uuid) {\n        const params = {};\n        params.suiteTestResultId = testResultId;\n        params.children = true;\n        url = _lib.default.toUrl(`/public/${uuid}`, params);\n      }\n      return $.ajax({\n        type: 'GET',\n        url,\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getSuiteRelatedTests(executionId, suiteId, limit, offset, parentSuiteTestId, uuid) {\n      let url = _lib.default.toUrl(\"/executions/\" + executionId + \"/suite-summaries/\" + suiteId + \"/tests?offset=\" + offset + \"&limit=\" + limit + (parentSuiteTestId ? `&parentSuiteTestId=${parentSuiteTestId}` : ''));\n      if (uuid) {\n        const params = {};\n        params.suiteId = suiteId;\n        params.parentSuiteTestId = parentSuiteTestId;\n        params.suiteTestSummaries = true;\n        url = _lib.default.toUrl(`/public/${uuid}`, params);\n      }\n      return $.ajax({\n        type: \"GET\",\n        url,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getRegionSuiteRelatedTests(executionId, suiteId, regionId, limit, offset, parentSuiteTestId, uuid) {\n      let url = _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + regionId + \"/suite-summaries/\" + suiteId + \"/tests?offset=\" + offset + \"&limit=\" + limit + (parentSuiteTestId ? `&parentSuiteTestId=${parentSuiteTestId}` : ''));\n      if (uuid) {\n        const params = {};\n        params.suiteId = suiteId;\n        params.regions = regionId;\n        params.parentSuiteTestId = parentSuiteTestId;\n        params.suiteTestSummaries = true;\n        url = _lib.default.toUrl(`/public/${uuid}`, params);\n      }\n      return $.ajax({\n        type: \"GET\",\n        url,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getSuiteSummariesTestsAnnotations(executionId, suiteId, suiteTestId, uuid) {\n      let url = _lib.default.toUrl(\"/executions/\" + executionId + \"/suite-summaries/\" + suiteId + \"/tests/\" + suiteTestId + \"/annotations\");\n      if (uuid) {\n        const params = {};\n        params.suiteId = suiteId;\n        params.suiteTestId = suiteTestId;\n        params.annotations = true;\n        url = _lib.default.toUrl(`/public/${uuid}`, params);\n      }\n      return $.ajax({\n        type: \"GET\",\n        url,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getSuiteTestOutputFiles(executionId, suiteTestId, type) {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/executions/\" + executionId + \"/output-files?suiteTestIds=\" + suiteTestId + \"&\" + type + '=true'),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    getExecutionChildResults(executionId, uuid, queryParams = '') {\n      let url = _lib.default.toUrl(\"/executions/\" + executionId + \"/children\", queryParams);\n      if (uuid) {\n        const params = {};\n        params.parentExecutionId = executionId;\n        params.includeChildren = true;\n        if (queryParams.includes('includeTriggers')) {\n          params.includeTriggers = true;\n        }\n        if (queryParams.includes('includeSummary')) {\n          params.includeSummary = true;\n        }\n        url = _lib.default.toUrl(`/public/${uuid}`, params);\n      }\n      return $.ajax({\n        type: \"GET\",\n        url,\n        contentType: \"application/json; charset=utf-8\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/integration-teams\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    /**\n     * Get the auth url of team\n     * @returns {string}\n     */\n    getAuthUrl() {\n      let org = this.parent.user.org;\n      let sid = this.parent.user.sid;\n      let teamAuthUrl = this.parent.websiteUrl + '/api/teams/auth';\n      return 'https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize' + '?client_id=5fc1f63b-a110-4ecc-a993-65f2c7aa4bb1' + '&response_type=code' + '&response_mode=query' + '&scope=Channel.ReadBasic.All Team.ReadBasic.All offline_access' + `&state=${org.id}|${sid}` + `&redirect_uri=${teamAuthUrl}`;\n    },\n    /**\n     * Fetch all the teams for user\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getTeams() {\n      let org = this.parent.user.org;\n      let path = _lib.default.toUrl(`/orgs/${org.id}/teams`);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch all the channels against a team\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getChannels(teamId) {\n      let org = this.parent.user.org;\n      let path = _lib.default.toUrl(`/orgs/${org.id}/teams/${teamId}/channels`);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/live-test\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    /**\n     * Create Live Test\n     * @param {object} metadata Payload for the test\n     * @returns {promise}\n     */\n    async create(metadata) {\n      let url = _lib.default.toUrl(this.parent.orgUri + '/live-test');\n      return $.ajax({\n        type: \"POST\",\n        url,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(metadata),\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Update existing live test\n     * @param {number} testId Live Test ID\n     * @param {object} metadata Payload for the test\n     * @returns {promise}\n     */\n    update(testId, metadata) {\n      let url = _lib.default.toUrl(`/live-test/${testId}`);\n      return $.ajax({\n        type: \"PUT\",\n        url,\n        data: JSON.stringify(metadata),\n        dataType: \"json\",\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Take screenshot on a live test\n     * @param {number} executionId Execution / Live Session ID\n     * @returns {promise}\n     */\n    screenshot(executionId) {\n      let url = _lib.default.toUrl(`/executions/${executionId}/live-screenshot`);\n      return $.ajax({\n        type: \"POST\",\n        url,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/live-videos\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    /**\n     * Fetch videos for an execution\n     * @param {number} id Execution ID or UUID for public to fetch the videos for\n     * @param {number|null} regionId Region ID for videos\n     * @param {object} params Extra parameters for URL\n     * @param {boolean} isPublic If the URl for public path or not\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getExecutionVideos(id, regionId, params = {}, isPublic = false) {\n      let urlString = (isPublic ? \"/p/\" : \"/executions/\") + id;\n      if (regionId) {\n        urlString += \"/regions/\" + regionId;\n      }\n      urlString += \"/videos\";\n      let url = _lib.default.toUrl(urlString, params);\n      return $.ajax({\n        type: \"GET\",\n        url: url,\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch videos for an execution\n     * @param {number} id Execution ID or UUID for public to fetch the videos for\n     * @param {number} iterationId Iteration ID for videos\n     * @param {object} params Extra parameters for URL\n     * @param {boolean} isPublic If the URl for public path or not\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getIterationVideos(id, iterationId, params = {}, isPublic = false) {\n      let urlString = (isPublic ? \"/p/\" : \"/executions/\") + id;\n      urlString += \"/iterations/\" + iterationId;\n      urlString += \"/videos\";\n      let url = _lib.default.toUrl(urlString, params);\n      return $.ajax({\n        type: \"GET\",\n        url: url,\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Request a new live session for a specific virtual user within an execution.\n     *\n     * @param {number} id Execution ID\n     * @param {string} user Global concurrent client index\n     * @param {string} uuid The uuid of the session. The real-time update once the session is ready will also include this uuid.\n     * @param {boolean} isPublic Is this a public request\n     */\n    requestLiveSession(id, user, uuid, session, isPublic = false) {\n      let url = `/${isPublic ? 'p' : 'executions'}/${id}/vnc/${user}?uuid=${uuid}`;\n      let params = {};\n      if (session) {\n        params.session = session;\n      }\n      return $.ajax({\n        type: \"PUT\",\n        url: _lib.default.toUrl(url, params),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Request a new live session for a specific virtual user within an execution.\n     *\n     * @param {number} id Execution ID\n     * @param {boolean} isPublic Is this a public request\n     */\n    getExecutionBrowsers(id, isPublic = false) {\n      let url = `/${isPublic ? 'p' : 'executions'}/${id}/browsers-by-user`;\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(url),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/metric-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _lib, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    _metricDefsCache: null,\n    _metricDefsPromise: null,\n    /**\n     * Fetch all the metrics for current organization\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    all() {\n      let path = _lib.default.toUrl(this.parent.orgUri + '/metric-defs');\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch and cache processed metric definitions.\n     * Returns the same promise/result on subsequent calls.\n     */\n    async getMetricDefs() {\n      if (this._metricDefsCache) return this._metricDefsCache;\n      if (this._metricDefsPromise) return this._metricDefsPromise;\n      this._metricDefsPromise = this.all().then(resp => {\n        this._metricDefsCache = _loadTest.default.getMetricDefs(null, resp);\n        this._metricDefsPromise = null;\n        return this._metricDefsCache;\n      }).catch(error => {\n        this._metricDefsPromise = null;\n        throw error;\n      });\n      return this._metricDefsPromise;\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/monitors\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\"], function (_exports, _lib, _server) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    getAll(params = {}, orgId = this.parent.user.org.id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${orgId}/monitors`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getFolders(params) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-folders`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getGroups(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitor-groups/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    create(monitorData) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitors`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(monitorData)\n      });\n    },\n    estimateCheckUsage(monitorData) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-check-usage/estimate`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(monitorData)\n      });\n    },\n    getCheckUsage(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/monitor-check-usage`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgCheckUsage(orgId, params = {}) {\n      if (typeof orgId === 'object' || orgId === undefined) {\n        params = orgId || {};\n        orgId = this.parent.user.org.id;\n      }\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${orgId}/monitor-check-usage`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getAccountCheckUsage(accountId, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/accounts/${accountId}/monitor-check-usage`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    get(id, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    update(id, monitorData) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/monitors/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(monitorData)\n      });\n    },\n    run(id) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/monitors/${id}/run`),\n        contentType: 'application/json; charset=utf-8'\n      }).then(null, _lib.default.fail);\n    },\n    delete(id) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/monitors/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    deleteFolder(params) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitors`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getIncidents(id, params) {\n      return $.ajax({\n        url: _lib.default.toUrl(`/monitors/${id}/incidents`, params),\n        contentType: 'application/json; charset=utf-8',\n        dataType: \"json\"\n      });\n    },\n    getIncident(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/incidents/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getMetrics(monitorId, metric, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${monitorId}/metrics/${metric}`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getChecks(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/checks`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getPings(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/pings`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getComments(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/comments`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createComment(monitorId, commentData) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/monitors/${monitorId}/comments`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(commentData)\n      });\n    },\n    updateComment(commentId, commentData) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/comments/${commentId}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(commentData)\n      });\n    },\n    deleteComment(commentId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/comments/${commentId}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getIncidentComments(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/incidents/${id}/comments`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createIncidentComment(incidentId, commentData) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/incidents/${incidentId}/comments`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(commentData)\n      });\n    },\n    getCheck(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/checks/${id}`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgIncidents(params) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/incidents`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgActivity() {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-activity`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgRegions(params) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/runners`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getRegionRunners(regionName, params) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/runners/${regionName}`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getActivity(id, params) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/activity`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getIncidentActivity(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/incidents/${id}/activity`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    toggleStatus(id) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/monitors/${id}/toggle`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStats(id, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitors/${id}/stats`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgStats(params = {}) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-stats`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getOrgScenarios(params = {}, orgId = this.parent.user.org.id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${orgId}/monitor-scenarios`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getScenarioMonitors(scenarioId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/monitor-scenarios/${scenarioId}/monitors`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getCheckRegions(regionId, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/check-regions/${regionId}/requests`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getTags() {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitors/tags`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    addTags(monitorId, tagNames) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/monitors/${monitorId}/tags`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          names: tagNames\n        })\n      });\n    },\n    removeTags(monitorId, tagIds) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/monitors/${monitorId}/tags`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          tagIds\n        })\n      });\n    },\n    createScenario(name, scenarioType, params, options) {\n      let data = {\n        name,\n        scriptType: scenarioType\n      };\n      if (options && _.isObject(options.source) && options.source.id > 0) {\n        data.sourceType = options.source.type;\n        data.sourceId = options.source.id;\n      }\n      if (options && options.mainCode) {\n        data.main = Base64.encode(options.mainCode);\n      }\n      if (options && options.metadata) {\n        data.metadata = options.metadata;\n      }\n      if (scenarioType) {\n        _lib.default.trackEvent(scenarioType.toLowerCase() + '-feature');\n      }\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-scenarios-internal`, params),\n        data: JSON.stringify(data),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(function (result) {\n        if (_.isUndefined(result.dataStores)) {\n          result.dataStores = [];\n        }\n        _server.default.decodeCode(result);\n        return result;\n      }, _lib.default.fail);\n    },\n    getMaintenanceWindow(id, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/maintenance-windows/${id}`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getMaintenanceWindows(params = {}) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/maintenance-windows`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createMaintenanceWindow(data) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${org.id}/maintenance-windows`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    updateMaintenanceWindow(id, data) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/maintenance-windows/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    updateMaintenanceWindowAssociations(id, data) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/maintenance-windows/${id}/associations`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      }).then(null, _lib.default.fail);\n    },\n    deleteMaintenanceWindow(id) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/maintenance-windows/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      }).then(null, _lib.default.fail);\n    },\n    maintenanceWindowToggleStatus(id, status) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/maintenance-windows/${id}/${status}`),\n        contentType: 'application/json; charset=utf-8'\n      }).then(null, _lib.default.fail);\n    },\n    getMonitorSettings() {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-settings`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    updateMonitorSettings(settings) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-settings`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(settings)\n      }).then(null, _lib.default.fail);\n    },\n    async loadAllRegions() {\n      const publicSharedGridRegions = await this.getOrgRegions({\n        public: true,\n        includeRunnerDetails: false\n      });\n      const selfHostedRegions = await this.getOrgRegions({\n        public: false,\n        includeRunnerDetails: false\n      });\n      const sortByName = (a, b) => (a.name || a.description || '').localeCompare(b.name || b.description || '');\n      return [{\n        groupName: 'Testable Hosted',\n        options: publicSharedGridRegions.sort(sortByName)\n      }, {\n        groupName: 'Self Hosted',\n        options: selfHostedRegions.sort(sortByName)\n      }];\n    },\n    loadAwsRegions() {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/aws/regions`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStatusPages(params = {}) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/status-pages`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStatusPage(id) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/status-pages/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createStatusPage(data) {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/orgs/${org.id}/status-pages`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    updateStatusPage(id, data) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/status-pages/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    deleteStatusPage(id) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/status-pages/${id}`),\n        contentType: 'application/json; charset=utf-8'\n      }).then(null, _lib.default.fail);\n    },\n    publishStatusPage(id) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/status-pages/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          active: true\n        })\n      }).then(null, _lib.default.fail);\n    },\n    unpublishStatusPage(id) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/status-pages/${id}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          active: false\n        })\n      }).then(null, _lib.default.fail);\n    },\n    getStatusPageCertificateDns(domain) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/certificate-dns-check`, {\n          domain\n        }),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    regenerateStatusPageCertificate(statusPageId) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/regenerate-certificate`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStatusPageAnnouncements(statusPageId, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/announcements`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStatusPageAnnouncement(statusPageId, announcementId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/announcements/${announcementId}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createStatusPageAnnouncement(statusPageId, data) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/announcements`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    updateStatusPageAnnouncement(statusPageId, announcementId, data) {\n      return $.ajax({\n        type: 'PUT',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/announcements/${announcementId}`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(data)\n      });\n    },\n    deleteStatusPageAnnouncement(statusPageId, announcementId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/announcements/${announcementId}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getStatusPageSubscribers(statusPageId, params = {}) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/subscribers`, params),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    createStatusPageSubscribers(statusPageId, emails) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/subscribers`),\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify(emails)\n      });\n    },\n    deleteStatusPageSubscriber(statusPageId, subscriberId) {\n      return $.ajax({\n        type: 'DELETE',\n        url: _lib.default.toUrl(`/status-pages/${statusPageId}/subscribers/${subscriberId}`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getCalendarLink() {\n      let org = this.parent.user.org;\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/orgs/${org.id}/monitor-calendar-link`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/regions\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    async getAgents(regionId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/regions/${regionId}/agents`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    async getQueuedExecutions(regionId, offset = 0, limit = 10) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl(`/regions/${regionId}/queued-executions`),\n        data: {\n          offset,\n          limit\n        },\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    async getSystemLogs(instanceId) {\n      return $.ajax({\n        type: 'get',\n        url: _lib.default.toUrl(`/region-instances/${instanceId}/logs`),\n        contentType: 'application/json; charset=utf-8'\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/reports-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    /**\n     * Create URI path for request\n     * @returns {string}\n     */\n    getUri() {\n      return this.parent.orgUri + `/reports`;\n    },\n    /**\n     * Fetch all the reports for current organization\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    all() {\n      let path = _lib.default.toUrl(this.getUri());\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch one report for current organization\n     * @param {number} reportId Report to fetch\n     * @param {boolean} includeMatches\n     * @param {number} offset\n     * @param {number} limit\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    get(reportId, params = {}) {\n      let path = `${this.getUri()}/${reportId}`;\n      let url = _lib.default.toUrl(path, params);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Fetch one report counts for current organization\n     * @param {number} reportId Report to fetch\n     * @param {boolean} includeMatches\n     * @param {number} offset\n     * @param {number} limit\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getCounts(reportId, params = {}) {\n      let path = `${this.getUri()}/${reportId}/count`;\n      let url = _lib.default.toUrl(path, params);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Add single reports to server\n     * @param {object} report Report to add [Object]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    add(report) {\n      let path = _lib.default.toUrl(this.getUri());\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: \"POST\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(report),\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Add single reports to server\n     * @param {number} reportId Report ID to update\n     * @param {object} report Report data [Object]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    update(reportId, report) {\n      let path = _lib.default.toUrl(this.getUri() + '/' + reportId);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: \"PUT\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(report),\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Delete single report from server\n     * @param {number} reportId Report ID\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    delete(reportId) {\n      let path = _lib.default.toUrl(this.getUri() + '/' + reportId);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/success-history\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    /**\n     * Get success history for an organization.\n     * @param {number} orgId\n     * @param {function} onComplete (optional)\n     * @returns {Promise<*>}\n     */\n    async ofOrg(orgId, onComplete) {\n      const path = _lib.default.toUrl('/orgs/' + orgId + '/success-histories');\n      const requestObject = {\n        type: 'GET',\n        url: path,\n        contentType: 'application/json; charset=utf-8'\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get success history for a test case.\n     * @param {number} testCaseId\n     * @param {function} onComplete (optional)\n     * @returns {Promise<*>}\n     */\n    async ofTestCase(testCaseId, onComplete) {\n      const path = _lib.default.toUrl('/test-cases/' + testCaseId + '/success-histories');\n      const requestObject = {\n        type: 'GET',\n        url: path,\n        contentType: 'application/json; charset=utf-8'\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get success history for a test configuration.\n     * @param {number} testConfId\n     * @param {function} onComplete (optional)\n     * @returns {Promise<*>}\n     */\n    async ofTestConf(testConfId, onComplete) {\n      const path = _lib.default.toUrl('/test-confs/' + testConfId + '/success-histories');\n      const requestObject = {\n        type: 'GET',\n        url: path,\n        contentType: 'application/json; charset=utf-8'\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get success history for a region.\n     * @param {number} regionId\n     * @param {function} onComplete (optional)\n     * @returns {Promise<*>}\n     */\n    async ofRegion(regionId, onComplete) {\n      const path = _lib.default.toUrl('/regions/' + regionId + '/success-histories');\n      const requestObject = {\n        type: 'GET',\n        url: path,\n        contentType: 'application/json; charset=utf-8'\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get success history for VCS root stats with a specific URL.\n     * @param {string} orgId\n     * @param {string} url\n     * @param {string} since (optional)\n     * @param {string} until (optional)\n     * @param {function} onComplete (optional)\n     * @returns {Promise<*>}\n     */\n    async ofVcsRoot(orgId, url = '', branch = null, since = null, until = null, onComplete = null) {\n      const params = {};\n      params.url = url;\n      if (branch) params.branch = branch;\n      if (since) params.since = since;\n      if (until) params.until = until;\n      const path = _lib.default.toUrl(`/orgs/${orgId}/vcs-root-stats/url/success-histories`, params);\n      const requestObject = {\n        type: 'GET',\n        url: path,\n        contentType: 'application/json; charset=utf-8'\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/tag-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@ember/object\"], function (_exports, _lib, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    totalTags: 0,\n    /**\n     * Create URI path for request\n     * @param {string} type Request Type\n     * @returns {string}\n     */\n    getUri(type) {\n      switch (type) {\n        case 'testCase':\n          return '/test-cases/';\n        case 'testConf':\n          return '/test-confs/';\n        case 'script':\n          return '/scripts/';\n        default:\n          return '/executions/';\n      }\n    },\n    info(limit = 0, offset = 0, includeCounts = false) {\n      let org = this.parent.user.org;\n      let params = {};\n      if (limit) {\n        params = {\n          limit,\n          offset,\n          includeCounts\n        };\n      }\n      let path = _lib.default.toUrl(`/orgs/${org.id}/tag-info`, params);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      });\n    },\n    /**\n     * Fetch all the tags for current organization\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    all() {\n      let org = this.parent.user.org;\n      let path = _lib.default.toUrl(`/orgs/${org.id}/tags`);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      });\n    },\n    /**\n     * Add multiple tags to server\n     * @param {string} type Tag Type, TestCase, Execution or Script etc.\n     * @param {number} modelId Model ID\n     * @param {string<Array>} tags Tags to add [Array]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    add(type, modelId, tags) {\n      let path = _lib.default.toUrl(this.getUri(type) + modelId + '/tags');\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: 'POST',\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          names: tags\n        }),\n        dataType: 'json'\n      }).then(null, _lib.default.fail);\n    },\n    /**\n     * Delete Multiple tags from server\n     * @param {string} type Tag Type, TestCase, Execution or Script etc.\n     * @param {number} modelId Model ID\n     * @param {number<Array>} tagIds Tags to remove [Array]\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    delete(type, modelId, tagIds) {\n      let path = _lib.default.toUrl(this.getUri(type) + modelId + '/tags');\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: 'DELETE',\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        data: JSON.stringify({\n          tagIds\n        }),\n        dataType: 'json'\n      }).then(null, _lib.default.fail);\n    },\n    deleteOrgTag(tagId) {\n      let orgId = this.parent.user.org.id;\n      let path = _lib.default.toUrl(`/orgs/${orgId}/tags/${tagId}`);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      }).then(null, _lib.default.fail);\n    },\n    deleteOrgTags(tagIds) {\n      let orgId = this.parent.user.org.id;\n      let path = _lib.default.toUrl(`/orgs/${orgId}/tags`);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        type: \"DELETE\",\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        data: JSON.stringify(tagIds),\n        dataType: \"json\"\n      });\n    },\n    get(tag_id) {\n      let path = _lib.default.toUrl(`/tags/${tag_id}`);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        url: path,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      });\n    },\n    getAgentTags(orgId) {\n      const path = _lib.default.toUrl('/orgs/' + orgId + '/agent-tags');\n      const requestObject = this.parent._getRequestObj(path);\n      return $.ajax(requestObject);\n    },\n    loadCount() {\n      this.info(1).then((res, status, xhr) => {\n        (0, _object.set)(this, 'totalTags', xhr.getResponseHeader('X-Testable-Count'));\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/test-cases\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    recalculateSummary(id) {\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(`/executions/${id}/recalculate-summary`),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    recalculateAggregations(id) {\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(`/executions/${id}/replay`),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(null, _lib.default.fail);\n    },\n    async potentialCost(testCaseId, details) {\n      let path = `/test-cases/${testCaseId}/potential-costs`;\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(path),\n        data: JSON.stringify(details),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    async liveTestPotentialCost(details) {\n      let path = this.parent.orgUri + `/live-test/potential-costs`;\n      return $.ajax({\n        type: \"POST\",\n        url: _lib.default.toUrl(path),\n        data: JSON.stringify(details),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    },\n    async moveCase(testCaseId, orgId, params) {\n      let path = `/test-cases/${testCaseId}/move/${orgId}`;\n      return $.ajax({\n        type: \"PUT\",\n        url: _lib.default.toUrl(path, params),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    async moveFolder(params) {\n      return $.ajax({\n        type: \"PUT\",\n        url: _lib.default.toUrl(`/test-cases/move/folder`),\n        data: JSON.stringify(params),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    async getScenarioNames(testCaseId) {\n      let path = \"/test-cases/\" + testCaseId + \"/script-names\";\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(path),\n        contentType: \"application/json; charset=utf-8\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/test-confs\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  const baseline = {\n    save(confId, data) {\n      if (!confId || !data.executionId) {\n        throw new Error('confId and executionId are required');\n      }\n      let url = _lib.default.toUrl(`/test-confs/${confId}/baseline`);\n      const requestObject = this.parent._getRequestObj(url, 'PUT', data);\n      return $.ajax(requestObject);\n    },\n    delete(confId) {\n      if (!confId) {\n        throw new Error('confId is required');\n      }\n      let url = _lib.default.toUrl(`/test-confs/${confId}/baseline`);\n      const requestObject = this.parent._getRequestObj(url, 'DELETE');\n      return $.ajax(requestObject);\n    }\n  };\n  var _default = _exports.default = {\n    baseline\n  };\n});","define(\"@testable/shared-ui/services/api/test-runs-manager\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    /**\n     * Create URI path for request\n     * @param {boolean} ignoreOrg\n     * @returns {string}\n     */\n    getUri(ignoreOrg) {\n      return ignoreOrg ? '/search' : this.parent.orgUri + `/search`;\n    },\n    /**\n     * Fetch all the recent test runs for current organization\n     * @param {number} limit\n     * @param {number} offset\n     * @param {object} data\n     * @param {boolean} ignoreOrg\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    get(limit = 20, offset = 0, data = {}, ignoreOrg) {\n      const params = {\n        limit,\n        offset\n      };\n      if (data.tags) params.countMatches = false;\n      let path = _lib.default.toUrl(this.getUri(ignoreOrg), params);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        method: 'POST',\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n        data: JSON.stringify(data)\n      });\n    },\n    /**\n     * Fetch all the recent test runs count for current organization\n     * @returns {*|PromiseLike<any>|Promise<any>}\n     */\n    getCounts(data = {}) {\n      const getUri = this.parent.orgUri + `/count`;\n      let path = _lib.default.toUrl(getUri);\n      if (this.debug) console.log(path);\n      return $.ajax({\n        method: 'POST',\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n        data: JSON.stringify(data)\n      });\n    },\n    /**\n     * Add users to region\n     * @param {number} executionId\n     * @param {number} users\n     * @param {number} regionId\n     */\n    testUsersAdd(executionId, users, regionId) {\n      let path = _lib.default.toUrl(`/executions/${executionId}/add-users`);\n      if (this.debug) console.log(path);\n      const data = {\n        users: users,\n        executionRegion: regionId\n      };\n      return $.ajax({\n        method: 'POST',\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n        data: JSON.stringify(data)\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/test-scenarios\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    getSuccessHistory(scenarioId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl('/scripts/' + scenarioId + '/success-histories'),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    getInstructions(scriptId) {\n      return $.ajax({\n        type: 'GET',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/instructions'),\n        contentType: 'application/json; charset=utf-8'\n      });\n    },\n    saveInstructions(scriptId, instructions) {\n      return $.ajax({\n        type: 'POST',\n        url: _lib.default.toUrl('/scripts/' + scriptId + '/instructions'),\n        data: JSON.stringify(instructions),\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'json'\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/usage\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    debug: false,\n    /**\n     * Get usage data for a given limit.\n     * @param {string} limitName\n     * @param {boolean} includeByEntity\n     * @param {boolean} includeEntityDetails\n     * @param {boolean} includeLinkedOrgs\n     * @returns {*}\n     */\n    async getTotalUsage(limitNames, includeByEntity, includeEntityDetails, includeLinkedOrgs) {\n      const params = {};\n      if (includeByEntity) params.includeByEntity = true;\n      if (includeEntityDetails) params.includeEntityDetails = true;\n      if (includeLinkedOrgs) params.primary = true;\n      if (includeLinkedOrgs) params.primary = true;\n      params.limitNames = limitNames;\n      let path = _lib.default.toUrl(`/total-usage`, params);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    },\n    /**\n     * Get usage data for a given limit.\n     * @param {string} limit\n     * @param {boolean} includeByEntity\n     * @param {boolean} includeEntityDetails\n     * @param {boolean} includeLinkedOrgs\n     * @returns {Promise<*>}\n     */\n    async get(limit, includeByEntity, includeEntityDetails, includeLinkedOrgs) {\n      const params = {};\n      if (includeByEntity) params.includeByEntity = true;\n      if (includeEntityDetails) params.includeEntityDetails = true;\n      if (includeLinkedOrgs) params.primary = true;\n      params.limitNames = limit;\n      let path = _lib.default.toUrl(this.parent.orgUri + '/usage', params);\n      return $.ajax({\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/users\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    async userLookup(email) {\n      return $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl('/user-lookup/' + email),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/api/vcs\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@ember/object\"], function (_exports, _lib, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    totalRootUrlCounts: 0,\n    /**\n     * Get the VCS roots for the given organization.\n     * @param {number} orgId\n     * @param {boolean} includeTracking\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRoots(orgId, includeTracking, onComplete) {\n      let params = {};\n      if (includeTracking !== undefined) params.includeTracking = includeTracking;\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-roots`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get the VCS root URLs for the given organization.\n     * @param {number} orgId\n     * @param {number} limit\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRootsUrls(orgId, limit = 0, onComplete) {\n      let params = {};\n      if (limit) params.limit = limit;\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-roots/urls`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get the branches for a specific VCS root in the given organization.\n     * @param {number} orgId\n     * @param {string} url\n     * @param {number} limit\n     * @param {number} offset\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRootBranches(orgId, url, limit = 0, offset = 0, onComplete) {\n      let params = {\n        url,\n        limit,\n        offset\n      };\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-roots/branches`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get the VCS root stats for the given organization.\n     * @param {number} orgId\n     * @param {number} limit\n     * @param {number} offset\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRootStats(orgId, limit = 0, offset = 0, onComplete) {\n      let params = {\n        limit,\n        offset\n      };\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-root-stats`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get the branch stats for a specific VCS root in the given organization.\n     * @param {number} orgId\n     * @param {string} url\n     * @param {number} limit\n     * @param {number} offset\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRootStatsBranches(orgId, url, limit = 0, offset = 0, onComplete) {\n      let params = {\n        url,\n        limit,\n        offset\n      };\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-root-stats/branches`, params);\n      const requestObject = {\n        url: path,\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Get or create refs for the given VCS root.\n     * @param {object} vcsDetails\n     * @param {number} id\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async getRefs(vcsDetails, id, onComplete) {\n      let path = _lib.default.toUrl(id ? `/vcs-roots/${id}/refs` : \"/vcs-roots/refs\");\n      const requestObject = {\n        type: \"POST\",\n        url: path,\n        data: JSON.stringify(vcsDetails),\n        contentType: \"application/json; charset=utf-8\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Create a new VCS root for the given organization.\n     * @param {number} orgId\n     * @param {object} details\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async createRoot(orgId, details, onComplete) {\n      let path = _lib.default.toUrl(`/orgs/${orgId}/vcs-roots`);\n      const requestObject = {\n        type: \"POST\",\n        url: path,\n        data: JSON.stringify(details),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Update a specific VCS root.\n     * @param {number} id\n     * @param {object} details\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async updateRoot(id, details, onComplete) {\n      let path = _lib.default.toUrl(`/vcs-roots/${id}`);\n      const requestObject = {\n        type: \"PUT\",\n        url: path,\n        data: JSON.stringify(details),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    /**\n     * Delete a specific VCS root.\n     * @param {number} id\n     * @param {function} onComplete\n     * @returns {Promise<*>}\n     */\n    async deleteRoot(id, onComplete) {\n      let path = _lib.default.toUrl(`/vcs-roots/${id}`);\n      const requestObject = {\n        type: \"DELETE\",\n        url: path,\n        dataType: \"json\"\n      };\n      if (onComplete) {\n        requestObject.complete = onComplete;\n      }\n      return await $.ajax(requestObject).then(null, _lib.default.fail);\n    },\n    loadRootsUrlsCount(orgId) {\n      this.getRootStats(orgId, 1, 0, r => {\n        (0, _object.set)(this, 'totalRootUrlCounts', r.getResponseHeader('X-Testable-Count') || 0);\n      });\n    }\n  };\n});","define(\"@testable/shared-ui/services/application-state\", [\"exports\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@glimmer/tracking\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"json-joy/lib/json-patch\", \"@testable/shared-ui/services/realtime-service\"], function (_exports, _service, _object, _runloop, _tracking, _environment, _lib, _jsonPatch, _realtimeService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"json-joy/lib/json-patch\",0,\"@testable/shared-ui/services/realtime-service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ApplicationStateService = _exports.default = (_class = class ApplicationStateService extends _realtimeService.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n      _initializerDefineProperty(this, \"selectedId\", _descriptor3, this);\n      _initializerDefineProperty(this, \"applications\", _descriptor4, this);\n      _initializerDefineProperty(this, \"confUpdates\", _descriptor5, this);\n      _initializerDefineProperty(this, \"scriptUpdates\", _descriptor6, this);\n      _initializerDefineProperty(this, \"removedConfIds\", _descriptor7, this);\n      _initializerDefineProperty(this, \"removedScriptIds\", _descriptor8, this);\n      _initializerDefineProperty(this, \"runningTests\", _descriptor9, this);\n      _initializerDefineProperty(this, \"scheduled\", _descriptor0, this);\n      _initializerDefineProperty(this, \"usages\", _descriptor1, this);\n      _initializerDefineProperty(this, \"runningCount\", _descriptor10, this);\n      _initializerDefineProperty(this, \"applicationsLoaded\", _descriptor11, this);\n      _initializerDefineProperty(this, \"lastUpdated\", _descriptor12, this);\n      _initializerDefineProperty(this, \"conversations\", _descriptor13, this);\n      _initializerDefineProperty(this, \"removedConversationIds\", _descriptor14, this);\n      _initializerDefineProperty(this, \"dataStoreUpdates\", _descriptor15, this);\n      _initializerDefineProperty(this, \"dataStoreContentDiffs\", _descriptor16, this);\n      _initializerDefineProperty(this, \"dataStoreContentRefreshRequiredIds\", _descriptor17, this);\n      _initializerDefineProperty(this, \"removedDataStoreIds\", _descriptor18, this);\n      _initializerDefineProperty(this, \"minimal\", _descriptor19, this);\n      _defineProperty(this, \"viewingConfId\", null);\n      _defineProperty(this, \"viewingScriptId\", null);\n      _initializerDefineProperty(this, \"viewingDataStoreIds\", _descriptor20, this);\n      _defineProperty(this, \"_transientFieldConfig\", {\n        objects: ['confUpdates', 'scriptUpdates', 'dataStoreUpdates', 'dataStoreContentDiffs'],\n        arrays: ['dataStoreContentRefreshRequiredIds', 'removedConfIds', 'removedScriptIds', 'removedDataStoreIds', 'removedConversationIds']\n      });\n      _defineProperty(this, \"bigData\", ['index', 'view', 'recent-test-runs', 'running-tests', 'reports.by-date']);\n      // Holds the latest pending selectedId so _applySelectedId can use a stable\n      // method reference as the debounce key (avoids creating a new function per call).\n      _defineProperty(this, \"_pendingSelectedId\", null);\n    }\n    _applySelectedId() {\n      const value = this._pendingSelectedId;\n      if (value) {\n        this.selectedApplication = _.find(this.applications, app => {\n          return app.id === Number(value);\n        });\n      }\n    }\n    setProp(prop, value) {\n      if (prop === 'selectedId' && value) {\n        this._pendingSelectedId = value;\n        (0, _runloop.debounce)(this, this._applySelectedId, 150);\n      } else {\n        this[prop] = value;\n      }\n    }\n\n    // Applies all event data to tracked properties in a single batch. Called via\n    // a properly-keyed debounce so multiple rapid socket messages collapse into\n    // one render cycle instead of triggering 10+ separate renders per message.\n    _flushEventData() {\n      const event = this.event;\n      if (!event) return;\n      const {\n        usages,\n        summary,\n        conversations\n      } = event;\n      const {\n        running,\n        testCases,\n        scheduled,\n        runningCount\n      } = summary;\n      const pt = this._pendingTransient;\n      this._pendingTransient = null;\n      const clientOriginatedUuid = pt?.clientOriginatedUuid || null;\n      const isOwnUpdate = _lib.default.isOwnClientUpdateId(clientOriginatedUuid);\n\n      // Always apply non-transient state\n      this.setProp('applications', Object.values(testCases).map(obj => _object.default.create(obj)));\n      this.setProp('applicationsLoaded', true);\n      this.setProp('usages', usages ? Object.values(usages) : []);\n      this.setProp('runningTests', running ? Object.values(running) : []);\n      this.setProp('scheduled', scheduled ? Object.values(scheduled) : []);\n      this.setProp('runningCount', runningCount || 0);\n      this.setProp('conversations', conversations ? {\n        ...conversations\n      } : {});\n\n      // Skip transient fields if this is our own update (already applied optimistically)\n      if (!isOwnUpdate && pt) {\n        this.isProcessingRemoteUpdate = true;\n        this.setProp('confUpdates', !_.isEmpty(pt.confUpdates) ? Object.values(pt.confUpdates) : []);\n        this.setProp('scriptUpdates', !_.isEmpty(pt.scriptUpdates) ? Object.values(pt.scriptUpdates) : []);\n        this.setProp('removedConfIds', pt.removedConfIds.length ? pt.removedConfIds : []);\n        this.setProp('removedScriptIds', pt.removedScriptIds.length ? pt.removedScriptIds : []);\n        this.setProp('removedConversationIds', pt.removedConversationIds.length ? pt.removedConversationIds : []);\n        this.setProp('dataStoreUpdates', !_.isEmpty(pt.dataStoreUpdates) ? {\n          ...pt.dataStoreUpdates\n        } : {});\n        this.setProp('dataStoreContentDiffs', !_.isEmpty(pt.dataStoreContentDiffs) ? {\n          ...pt.dataStoreContentDiffs\n        } : {});\n        this.setProp('dataStoreContentRefreshRequiredIds', pt.dataStoreContentRefreshRequiredIds.length ? pt.dataStoreContentRefreshRequiredIds : []);\n        this.setProp('removedDataStoreIds', pt.removedDataStoreIds.length ? pt.removedDataStoreIds : []);\n        this.setProp('clientOriginatedUuid', clientOriginatedUuid);\n        this._startRemoteUpdateTimer();\n      }\n    }\n    orgRealTimeData() {\n      const socket = _lib.default.newSockjs(_environment.config.apiBaseUrl + '/real-time/org');\n      this.socket = socket;\n      this._setupSocket(socket);\n    }\n    _onSocketOpen() {\n      this.sendFrequently();\n    }\n    _applyPatch(data, events) {\n      this.applyPatchMatchErrors(data, events);\n    }\n    sendFrequently() {\n      const params = this._buildParams();\n      const socket = this.socket;\n      if (socket && this.router.currentRouteName) {\n        this.minimal = params['minimal'];\n        const socketObj = JSON.stringify({\n          sid: _environment.config.currentUser.sid,\n          subscribe: [_environment.config.currentUser.orgId],\n          params\n        });\n        socket.send(socketObj);\n      }\n    }\n    updateViewingState({\n      viewingConfId = null,\n      viewingScriptId = null,\n      viewingDataStoreIds = null\n    } = {}) {\n      this.viewingConfId = viewingConfId;\n      this.viewingScriptId = viewingScriptId;\n      this.viewingDataStoreIds = viewingDataStoreIds;\n      this._sendViewingStateUpdate();\n    }\n    _buildParams() {\n      const params = {};\n      params['limitNames'] = 'browserSessions,concurrentUsers,processingExecutions,publicConcurrentUsers,publicInstances,publicLoadEngines,publicRunners,queueSize,requestsPerSec,runningExecutions,selfHostedInstances,throughput,totalRunners';\n      params['granularity'] = '10s';\n      params['minimal'] = `${!this.bigData.includes(this.router.currentRouteName)}`;\n      if (this.viewingConfId) params['viewingConfId'] = `${this.viewingConfId}`;\n      if (this.viewingScriptId) params['viewingScriptId'] = `${this.viewingScriptId}`;\n      if (this.viewingDataStoreIds) params['viewingDataStoreIds'] = `${this.viewingDataStoreIds}`;\n      return params;\n    }\n    _connect() {\n      this.orgRealTimeData();\n    }\n    applyPatchMatchErrors(data, events) {\n      let oldEvent = data;\n      let newEvent = data;\n      for (const event of events) {\n        try {\n          newEvent = (0, _jsonPatch.applyPatch)(oldEvent, [event], false).doc;\n          oldEvent = newEvent;\n        } catch (error) {\n          const splitPath = event.path.split('/');\n          let applyTo;\n          const pathMappings = {\n            '/summary/testCases/': oldEvent.summary.testCases,\n            '/summary/running/': oldEvent.summary.running,\n            '/summary/scheduled/': oldEvent.summary.scheduled\n          };\n          const basePath = Object.keys(pathMappings).find(path => event.path.includes(path));\n          if (basePath) {\n            applyTo = JSON.stringify(pathMappings[basePath][splitPath[3]]);\n          } else {\n            applyTo = JSON.stringify(oldEvent[splitPath[1]]);\n          }\n          const patch = JSON.stringify({\n            op: event.op,\n            path: event.path\n          });\n          const stackMessage = JSON.stringify(error.stack);\n          const stack = `Error:\\n${stackMessage}\\n\\nPatch:\\n${patch}\\n\\nOld Original:\\n${applyTo}`;\n          const message = \"Uncaught Error: \" + error.message;\n          console.log('patch errors:', message, stack);\n          if (!['local', 'test' /*, 'development'*/].includes(_environment.config.environment)) {\n            this.api.admin.createFeError({\n              message,\n              stack\n            });\n          }\n        }\n      }\n      this.event = {\n        ...newEvent\n      };\n      return newEvent;\n    }\n    startRealTimeConnection() {\n      if (_environment.config.currentUser.isLoggedIn && !this.socket) {\n        this.orgRealTimeData();\n      }\n    }\n    updateRouteOptimization() {\n      if (this.socket && this.socket.readyState === SockJS.OPEN) {\n        const minimal = this.minimal;\n        const isPageMinimal = !this.bigData.includes(this.router.currentRouteName);\n        if (minimal === null || minimal.toString() !== isPageMinimal.toString()) {\n          this.sendFrequently();\n        }\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"selectedId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"applications\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"confUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"scriptUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"removedConfIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"removedScriptIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"runningTests\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"scheduled\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"usages\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"runningCount\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"applicationsLoaded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"lastUpdated\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return moment();\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"conversations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"removedConversationIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"dataStoreUpdates\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"dataStoreContentDiffs\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"dataStoreContentRefreshRequiredIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"removedDataStoreIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"minimal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"viewingDataStoreIds\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/services/env-config\", [\"exports\", \"@ember/service\", \"@testable/shared-ui/utils/environment\", \"@ember/runloop\"], function (_exports, _service, _environment, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  class EnvConfigService extends _service.default {\n    constructor() {\n      super(...arguments);\n      this.isOnPrem = _environment.config.isOnPrem;\n      this.envLabel = _environment.config.envLabel;\n      this.isGcpEnabled = _environment.config.isGcpEnabled;\n      this.isAwsEnabled = _environment.config.isAwsEnabled;\n      this.isAzureEnabled = _environment.config.isAzureEnabled;\n      this.isSmsEnabled = _environment.config.isSmsEnabled;\n      this.isProxyEnabled = _environment.config.isProxyEnabled;\n      this.isGatewayEnabled = _environment.config.isGatewayEnabled;\n      this.isRecordingEnabled = _environment.config.isProxyEnabled || _environment.config.isGatewayEnabled;\n      this.isCloudEnabled = _environment.config.isGcpEnabled || _environment.config.isAwsEnabled || _environment.config.isAzureEnabled;\n      this.isPaidPlan();\n    }\n    isCloudSourceEnabled(source) {\n      const key = `is${source}Enabled`;\n      const orgSetting = _environment.config.currentUser?.org?.settings?.[key];\n      return !!_environment.config[key] && (orgSetting === undefined || orgSetting === 'true');\n    }\n    isPaidPlan() {\n      if (!_environment.config.currentUser?.org?.account?.subscriptions) {\n        (0, _runloop.later)(this, this.isPaidPlan, 250);\n      } else {\n        const subscriptions = _environment.config.currentUser.org.account.subscriptions;\n        let plans = subscriptions.filter(sub => !sub.srcAccountPlan?.plan?.name?.endsWith('free'));\n        let uniquePlanIds = subscriptions.map(sub => sub.srcAccountPlan?.id).filter((value, index, self) => self.indexOf(value) === index);\n        this.isPaid = !(plans?.length <= 0 && uniquePlanIds?.length === 1);\n        this.freePlanID = !this.isPaid && !_environment.config.currentUser?.org?.primaryOrg ? uniquePlanIds[0] : false;\n        const aiSubs = subscriptions.filter(sub => sub.planProduct?.product?.code === 'AiCredit');\n        this.hasAiCredits = aiSubs.length > 0;\n        const upfrontRemaining = aiSubs.filter(sub => sub.planProduct?.paymentType === 'Upfront').reduce((sum, sub) => sum + (sub.currentPeriod?.remainingQty ?? 0), 0);\n        const hasUsablePayg = aiSubs.some(sub => sub.planProduct?.paymentType === 'PayAsYouGo' && (sub.totalLimit === undefined || sub.totalLimit > (sub.currentPeriod?.invoicedQty ?? 0)));\n        this.aiCreditsExhausted = this.hasAiCredits && upfrontRemaining === 0 && !hasUsablePayg;\n      }\n    }\n  }\n  _exports.default = EnvConfigService;\n});","define(\"@testable/shared-ui/services/environment\", [\"exports\", \"@ember/service\"], function (_exports, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class EnvironmentService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"_config\", null);\n    }\n    /**\n     * Set the configuration for the current project\n     * @param {Object} config - The configuration object from the project\n     */\n    setConfig(config) {\n      this._config = config;\n    }\n\n    /**\n     * Get the current configuration\n     * @returns {Object|null} The configuration object\n     */\n    get config() {\n      return this._config;\n    }\n\n    /**\n     * Get a specific config property with optional default value\n     * @param {string} key - The config key to retrieve\n     * @param {*} defaultValue - Default value if key doesn't exist\n     * @returns {*} The config value or default\n     */\n    getConfig(key, defaultValue = null) {\n      if (!this._config) {\n        return defaultValue;\n      }\n\n      // If no key provided, return the entire config\n      if (!key) {\n        return this._config;\n      }\n\n      // Support nested keys like 'api.baseUrl'\n      const keys = key.split('.');\n      let value = this._config;\n      for (const k of keys) {\n        if (value && typeof value === 'object' && k in value) {\n          value = value[k];\n        } else {\n          return defaultValue;\n        }\n      }\n      return value;\n    }\n\n    /**\n     * Check if config has been set\n     * @returns {boolean}\n     */\n    get hasConfig() {\n      return this._config !== null;\n    }\n  }\n  _exports.default = EnvironmentService;\n});","define(\"@testable/shared-ui/services/event-bus\", [\"exports\", \"@ember/service\", \"@ember/object/evented\"], function (_exports, _service, _evented) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/object/evented\"eaimeta@70e063a35619d71f\n  class EventBus extends _service.default.extend(_evented.default) {\n    publish() {\n      return this.trigger.apply(this, arguments);\n    }\n    subscribe() {\n      return this.on.apply(this, arguments);\n    }\n    unsubscribe() {\n      return this.off.apply(this, arguments);\n    }\n  }\n  _exports.default = EventBus;\n});","define(\"@testable/shared-ui/services/gtag\", [\"exports\", \"@ember/service\", \"@testable/shared-ui/utils/environment\"], function (_exports, _service, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  class GtagService extends _service.default {\n    setupGoogleAnalytics() {\n      window.dataLayer = window.dataLayer || [];\n      const measurementID = _environment.config.googleAnalyticsId;\n      if (measurementID) {\n        this.loadScript(`https://www.googletagmanager.com/gtag/js?id=${measurementID}`).then(() => {\n          this.push('js', new Date());\n          this.push('config', measurementID);\n          this.push('config', 'AW-933527959');\n        }).catch(err => {\n          console.error(err);\n        });\n      }\n    }\n    push() {\n      window.dataLayer.push(arguments);\n    }\n    loadScript(FILE_URL, async = true, type = 'text/javascript') {\n      return new Promise((resolve, reject) => {\n        try {\n          const scriptEle = document.createElement('script');\n          scriptEle.type = type;\n          scriptEle.async = async;\n          scriptEle.src = FILE_URL;\n          scriptEle.addEventListener('load', ev => {\n            resolve({\n              status: true\n            });\n          });\n          scriptEle.addEventListener('error', ev => {\n            reject({\n              status: false,\n              message: `Failed to load the script ${FILE_URL}`\n            });\n          });\n          document.body.appendChild(scriptEle);\n        } catch (error) {\n          reject(error);\n        }\n      });\n    }\n    addPaidPlanConversion(planId, price) {\n      const eventParams = {\n        send_to: 'AW-933527959/scDQCL_4iZkZEJeDkr0D',\n        value: price,\n        currency: 'USD',\n        transaction_id: planId\n      };\n      this.push('event', 'conversion', eventParams);\n    }\n    registerConversion() {\n      const eventParams = {\n        send_to: 'AW-933527959/WpuZCNSL2pcZEJeDkr0D'\n      };\n      this.push('event', 'conversion', eventParams);\n    }\n  }\n  _exports.default = GtagService;\n});","define(\"@testable/shared-ui/services/org-acl\", [\"exports\", \"@ember/service\", \"@testable/shared-ui/utils/environment\"], function (_exports, _service, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  class OrgAclService extends _service.default {\n    lookup(key) {\n      let feature;\n      let match;\n      let aclDetails = _environment.config.currentUser.org.includedFeatures.filter(acl => acl.code === key);\n      if (aclDetails && aclDetails[0]) {\n        feature = aclDetails[0];\n        match = true;\n      }\n      aclDetails = _environment.config.currentUser.org.excludedFeatures.filter(acl => acl.code === key);\n      if (aclDetails && aclDetails[0]) {\n        match = false;\n        feature = aclDetails[0];\n      }\n      return {\n        match,\n        feature\n      };\n    }\n    featureInfo(key) {\n      const {\n        match,\n        feature\n      } = this.lookup(key);\n      if (match) return null;\n      if (!feature) return 'This feature is not available with your plan.';\n      const plan = feature.minimumPlan;\n      return plan ? `${plan}+ Plan Only | ${feature.name} is not available with your plan` : `${feature.name} is not available with your plan`;\n    }\n  }\n  _exports.default = OrgAclService;\n});","define(\"@testable/shared-ui/services/realtime-service\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/runloop\", \"@testable/shared-ui/utils/realtime-state\", \"@testable/shared-ui/utils/environment\"], function (_exports, _service, _tracking, _runloop, _realtimeState, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/realtime-state\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let RealtimeService = _exports.default = (_class = class RealtimeService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"socket\", _descriptor, this);\n      _initializerDefineProperty(this, \"isConnected\", _descriptor2, this);\n      _initializerDefineProperty(this, \"clientOriginatedUuid\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isProcessingRemoteUpdate\", _descriptor4, this);\n      _defineProperty(this, \"event\", null);\n      _defineProperty(this, \"_pendingTransient\", null);\n      _defineProperty(this, \"_remoteUpdateTimer\", null);\n      _defineProperty(this, \"_transientFieldConfig\", {\n        objects: [],\n        arrays: []\n      });\n    }\n    _captureTransientFields() {\n      this._pendingTransient = (0, _realtimeState.captureTransientFields)(this.event, this._pendingTransient, this._transientFieldConfig);\n    }\n    _startRemoteUpdateTimer() {\n      if (this._remoteUpdateTimer) (0, _runloop.cancel)(this._remoteUpdateTimer);\n      this._remoteUpdateTimer = (0, _runloop.later)(this, () => {\n        this.isProcessingRemoteUpdate = false;\n        this._remoteUpdateTimer = null;\n      }, 500);\n    }\n\n    // Shared socket setup — subclasses override _onSocketOpen, _shouldSkipMessage, _applyPatch\n    _setupSocket(socket) {\n      socket.onopen = () => {\n        this.isConnected = true;\n        this._onSocketOpen();\n      };\n      socket.onmessage = e => {\n        const wrapper = JSON.parse(e.data);\n        if (this._shouldSkipMessage(wrapper)) return;\n        switch (wrapper.eventType) {\n          case 'Subscribed':\n            break;\n          case 'result':\n            this.event = wrapper.event;\n            this._captureTransientFields();\n            (0, _runloop.debounce)(this, this._flushEventData, 150);\n            break;\n          case 'patch':\n            if (!_.isEmpty(wrapper.event)) {\n              this._applyPatch(this.event, wrapper.event);\n              this._captureTransientFields();\n              (0, _runloop.debounce)(this, this._flushEventData, 150);\n            }\n            break;\n          case 'Error':\n            this.closeSocketAndReconnect();\n            break;\n        }\n      };\n      socket.onclose = () => {\n        this._handleSocketClose(socket);\n      };\n      socket.onerror = () => {\n        this.isConnected = false;\n        this.closeSocketAndReconnect();\n      };\n    }\n    _onSocketOpen() {}\n    _shouldSkipMessage(_wrapper) {\n      return false;\n    }\n    _applyPatch(_data, _events) {}\n\n    // Shared socket-send for updateViewingState implementations\n    _sendViewingStateUpdate() {\n      const socket = this.socket;\n      if (socket && socket.readyState === SockJS.OPEN) {\n        socket.send(JSON.stringify({\n          update: [_environment.config.currentUser.orgId],\n          params: this._buildParams()\n        }));\n      }\n    }\n    _handleSocketClose(currentSocket) {\n      this.isConnected = false;\n      if (!this.isDestroyed && _.isUndefined(currentSocket?.userInitiatedClose)) {\n        if (_.isUndefined(currentSocket?.reconnectImmediately)) {\n          setTimeout(() => {\n            this._connect();\n          }, 5000);\n        } else {\n          this._connect();\n        }\n      }\n      if (!this.isDestroyed) {\n        this.socket = null;\n      }\n    }\n    closeSocketAndReconnect() {\n      const currentSocket = this.socket;\n      if (currentSocket) {\n        try {\n          currentSocket.close();\n          this.socket = null;\n          this.isConnected = false;\n        } catch (e) {\n          console.log('Error closing socket', e);\n        }\n      }\n      setTimeout(() => {\n        this._connect();\n      }, 3000);\n    }\n    stopRealTimeConnection() {\n      if (this.socket) {\n        this.socket.userInitiatedClose = true;\n        this.socket.close();\n        this.socket = null;\n        this.isConnected = false;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"socket\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isConnected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"clientOriginatedUuid\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isProcessingRemoteUpdate\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/services/test-case-folders\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\"], function (_exports, _service, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let TestCaseFoldersService = _exports.default = (_class = class TestCaseFoldersService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"folders\", _descriptor, this);\n      _initializerDefineProperty(this, \"showOrganizeModal\", _descriptor2, this);\n    }\n    getFolders() {\n      return this.folders.slice().sort();\n    }\n    setFolders(folders) {\n      // this.folders = []; // Reset the folders\n      folders.forEach(folder => {\n        if (folder.isFolder) {\n          this.pushFolder(folder.path);\n        } else {\n          const pathParts = folder.path.split('/').filter(part => part !== '');\n          let currentPath = '/';\n          for (let i = 0; i < pathParts.length - 1; i++) {\n            currentPath += pathParts[i] + '/';\n            this.pushFolder(currentPath.slice(0, -1));\n          }\n        }\n      });\n    }\n    pushFolder(folder) {\n      const exists = this.folders.some(f => f === folder);\n      if (!exists) {\n        this.folders = [...this.folders, folder];\n      }\n    }\n    showOrganize() {\n      this.showOrganizeModal = true;\n    }\n    hideOrganize() {\n      this.showOrganizeModal = false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"folders\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['/'];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"showOrganizeModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/services/test-results\", [\"exports\", \"@ember/object\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/models/load-test-regional-results\", \"@testable/shared-ui/models/resource\", \"@testable/shared-ui/utils/server\", \"@ember/service\", \"tracked-built-ins\"], function (_exports, _object, _environment, _lib, _loadTest, _loadTestRegionalResults, _resource, _server, _service, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/models/load-test-regional-results\",0,\"@testable/shared-ui/models/resource\",0,\"@testable/shared-ui/utils/server\",0,\"@ember/service\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class TestResultsService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"EventBus\", null);\n      _defineProperty(this, \"lastUpdate\", null);\n      _defineProperty(this, \"IdGenerator\", 1);\n      _defineProperty(this, \"UserNs\", 'User');\n    }\n    addMetricsToSummary(execution) {\n      if (_.isObject(execution) && _.isObject(execution.summary)) {\n        this.processSummary(execution.summary);\n      }\n    }\n    initComponent(component) {\n      this.EventBus = component.EventBus;\n      if (_.isNumber(component.currentId) && component.currentId === component.args.model?.id) {\n        return;\n      }\n      component.currentId = component.args.model?.id;\n      component.hasDashboardChanges = false;\n      if (!_.isUndefined(component.socket)) {\n        component.socket.setupSubscription = true;\n        component.socket.close();\n      } else if (!component.args.model?.completed) {\n        this._setupSubscription(component);\n      }\n      this._updateSummaries(component, component.args.model);\n      this.EventBus.publish(\"map.invalidate\");\n    }\n    connect(component) {\n      console.log('Connection established');\n      if (_.isEmpty(component.socket)) {\n        _server.default.getLoadTestExecution(component.args.model?.id).then(result => {\n          this._updateExecution(component, result);\n        });\n        this._setupSubscription(component);\n      }\n    }\n    disconnect(component) {\n      console.log('Connection destroyed');\n      this._clearIntervalTasks(component);\n      if (component.socket) {\n        component.socket.userInitiatedClose = true;\n        component.socket.close();\n      }\n    }\n    destroyResultsView(component) {\n      component.dashboard = null;\n      component.pendingTraces = {};\n      component.pendingResults = {};\n      delete component['currentId'];\n    }\n    invalidateResultsGrids(regionName) {\n      let href = $(\"ul#\" + regionName + \"_resultsTabsNav li.active a\").attr('href');\n      if (_.isString(href)) {\n        let tab = href.substring(1);\n        if (tab === regionName + \"_resourcesTab\") {\n          this.EventBus.publish(regionName + \"_resultsGrid.invalidate\");\n        } else if (tab === regionName + \"_tracesTab\") {\n          this.EventBus.publish(regionName + \"_tracesGrid.invalidate\");\n        }\n      }\n    }\n    invalidateRegionalResults() {\n      let href = $(\"ul#loadTestResultTabNav li.active a\").attr('href');\n      if (_.isString(href)) {\n        let region = href.substring(1);\n        region = region || \"ALL\";\n        this.EventBus.publish(region + \".charts.invalidate\");\n        this.EventBus.publish(region + \"_resultsGrid.invalidate\");\n        this.EventBus.publish(region + \"_tracesGrid.invalidate\");\n      }\n    }\n    logLevelChanged(component, level, force) {\n      if (component.socket && component.socket.readyState === SockJS.OPEN) {\n        let currentLevel = component.currentLogLevel;\n        if (force || !currentLevel || currentLevel !== level) {\n          component.currentLogLevel = level;\n          const id = component.args.model?.id;\n          const token = component.args.model?.uuid;\n          component.socket.send(JSON.stringify({\n            update: token ? [] : [id],\n            updateUuid: token ? [token] : [],\n            params: {\n              level: level\n            }\n          }));\n        }\n      } else if (!force) {\n        component.currentLogLevel = level;\n      }\n    }\n    processIntervals(intervals, metricDefsByName, summary) {\n      if (intervals?.length > 0) {\n        let prevInterval = null;\n        const histogramKeysByName = {};\n        let startDate = summary?.firstResultAt ? _lib.default.intervalFor(moment(summary.firstResultAt).valueOf(), summary.granularity) : intervals[0].intervalStart;\n        _.forEach(intervals, interval => {\n          if (!_.isUndefined(interval)) {\n            this.processSummary(interval);\n            interval.date = new Date(interval.intervalStart);\n            interval._diff = _lib.default.printDurationFromMS(interval.date - startDate);\n            this._addTotalsToInterval(interval, prevInterval, metricDefsByName, histogramKeysByName);\n            prevInterval = interval;\n          }\n        });\n      }\n    }\n    processSummary(summary) {\n      let key, val, valPercent;\n      if (_.isObject(summary)) {\n        summary.date = new Date(summary.firstResultAt || summary.createdAt);\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'pf')] = 1;\n        if (_.isString(summary.comparisons)) {\n          summary.comparisons = JSON.parse(summary.comparisons);\n        }\n        this._upgradeComparisons(summary);\n        if (summary.cpu) {\n          summary.cpu = summary.cpu / 100;\n        }\n        _.forEach(summary, (val, key) => {\n          // load this from load-test;\n          if (_loadTest.default.MetricDictionary[key]) {\n            summary[_lib.default.toMetricKey(_lib.default.SystemNs, key)] = val;\n          }\n        });\n        _.forEach(_loadTest.default.DefaultMetricDefs, metricDef => {\n          if (!_.isBoolean(metricDef.calcAggregators) || metricDef.calcAggregators) {\n            const name = _lib.default.toMetricKey(metricDef.namespace, metricDef.name);\n            this._addCountPerSecMetrics(summary, name);\n          }\n        });\n        if (summary.metrics?.length === 1) {\n          summary.metrics.push({\n            namespace: _lib.default.SystemNs,\n            metricDef: 'count',\n            metricType: 'Counter',\n            metricValue: summary.count,\n            metricValueMap: {\n              peak: summary.intervalPeakCount || summary.count\n            }\n          });\n        }\n        _.forEach(summary.metrics, metric => {\n          this._upgradeMetric(metric, summary);\n          const name = _lib.default.toMetricKey(metric.namespace, metric.metricDef);\n          if (_.isNumber(metric.metricValue) && metric.metricType === 'Counter') {\n            let value = _lib.default.toMetricValue(metric.metricValue, metric);\n            if (metric.metricModifier) {\n              summary[name] = {\n                value: value,\n                prefix: metric.metricModifier\n              };\n            } else {\n              summary[name] = value;\n            }\n            if (summary.intervalStart === 0) {\n              summary[name + _loadTest.default.TotalSuffix] = summary[name];\n              summary[name + '-peak'] = metric.metricValueMap && metric.metricValueMap['peak'] || NaN;\n            } else {\n              summary[name + '-peak'] = summary[name];\n            }\n            this._addCountPerSecMetrics(summary, name);\n          }\n          if (_.isObject(metric.metricValueMap) && (metric.metricType === 'Timing' || metric.metricType === 'Counter')) {\n            for (key in metric.metricValueMap) {\n              const val = metric.metricValueMap[key];\n              summary[name + \"-\" + key] = val;\n            }\n          } else if (_.isObject(metric.metricValueMap)) {\n            if (metric.metricType === 'Metered') {\n              summary[name + \"-peak\"] = _lib.default.toMetricValue(metric.metricValue, metric);\n              summary[name + \"-largest\"] = _lib.default.toMetricValue(metric.metricValueMap['largest'], metric);\n            } else if (metric.metricType === 'Histogram') {\n              const total = _lib.default.toMetricValue(metric.metricValue, metric);\n              summary[name + _loadTest.default.TotalSuffix] = total;\n              summary[name + _loadTest.default.TotalSuffix + _loadTest.default.TotalSuffix] = total;\n              const data = [];\n              for (key in metric.metricValueMap) {\n                val = _lib.default.toMetricValue(metric.metricValueMap[key], metric);\n                valPercent = Math.round(10000 * val / total) / 100;\n                data.push({\n                  key: key,\n                  val: val\n                });\n                summary[name + \"-\" + key] = val;\n                summary[name + \"-\" + key + _loadTest.default.TotalSuffix] = val;\n                summary[name + \"-\" + key + _loadTest.default.TotalSuffix + _loadTest.default.PercentSuffix] = valPercent;\n                summary[name + \"-\" + key + _loadTest.default.PercentSuffix] = valPercent;\n              }\n              summary[name + \"-buckets\"] = data;\n            }\n          }\n        });\n        this._processJMeterTxnMetrics(summary);\n      }\n    }\n    processBucket(bucket) {\n      if (_.isObject(bucket)) {\n        if (_.isNumber(bucket.id) && bucket.id === 0) {\n          this.IdGenerator = this.IdGenerator + 1;\n          bucket.id = this.IdGenerator;\n        }\n        _.forEach(bucket.metrics, metric => {\n          const name = _lib.default.toMetricKey(metric.namespace, metric.metricDef);\n          if (_.isNumber(metric.bucketValue)) {\n            const value = _lib.default.toMetricValue(metric.bucketValue, metric);\n            bucket[name] = value;\n            bucket[name + \"-peak\"] = value;\n            bucket[name + \"-largest\"] = value;\n          }\n        });\n      }\n    }\n    toRegionSummary(execution, executionRegion, parent) {\n      let providerType = this._getProviderType(executionRegion.region.location.provider);\n      return _loadTestRegionalResults.default.create({\n        execution: execution,\n        executionRegion: executionRegion,\n        resources: {},\n        numResources: 0,\n        outputFiles: [],\n        providerType: providerType,\n        parent: parent\n      });\n    }\n    updateStreamingRegions(component) {\n      const regionIds = component.visibleRegionIds;\n      if (component.socket && component.socket.readyState === SockJS.OPEN && regionIds && regionIds.length > 0) {\n        const id = component.args.model?.id;\n        const token = component.args.model?.uuid;\n        component.socket.send(JSON.stringify({\n          update: token ? [] : [id],\n          updateUuid: token ? [token] : [],\n          params: {\n            regions: regionIds ? regionIds.join() : \"\"\n          }\n        }));\n      }\n    }\n    updateResources(component, resourcesUpdates, resources, intervals, metricDefsByName, zoomInfo) {\n      if (_.isArray(resourcesUpdates) && _.isObject(resources)) {\n        _.forEach(resourcesUpdates, resourceUpdate => {\n          let resource = resources[resourceUpdate.resource.id] || resources[resourceUpdate.resource.resource];\n          if (_.isUndefined(resource)) {\n            resource = _resource.default.create({\n              id: resourceUpdate.resource.id,\n              resource: resourceUpdate.resource.resource,\n              zoomInfo: zoomInfo\n            });\n            resources[resource.id] = resource;\n          }\n          resource.setProperties(this._processUpdate(component, resourceUpdate, resource, false, intervals, metricDefsByName));\n        });\n      }\n    }\n    _addActiveMetrics(component, execution, summary, intervals, existingSummary) {\n      const isLoad = execution.testType === 'Load';\n      const interval = this._getActiveInterval(summary, intervals, existingSummary);\n      const scriptType = component.args.model?.script?.scriptType;\n      if (isLoad && execution.running && interval) {\n        const intervalSeconds = interval.timespan / 1000;\n        const latestInterval = intervals[Math.max(0, intervals.length - 2)];\n        if (_loadTest.default.isMultiUser(scriptType)) {\n          summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeInstances')] = (summary['Testable-clientsStarted'] || 0) - (summary['Testable-clientsFinished'] || 0);\n        }\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeConcurrentClients')] = this._getActiveConcurrents(scriptType, summary, interval, latestInterval);\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeRequestRate')] = interval.expected / intervalSeconds;\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeThroughput')] = interval.expectedBandwidth / intervalSeconds;\n      } else if (!isLoad && execution.running) {\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeConcurrentClients')] = this._getActiveConcurrents(scriptType, summary, summary, summary);\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeRequestRate')] = summary.requestsPerSec;\n        summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeThroughput')] = summary.throughput;\n      } else {\n        delete summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeConcurrentClients')];\n        delete summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeRequestRate')];\n        delete summary[_lib.default.toMetricKey(_lib.default.SystemNs, 'activeThroughput')];\n      }\n    }\n    _addTotalsToInterval(interval, prevInterval, metricDefsByName, histogramKeysByName) {\n      _.forEach(_loadTest.default.DefaultMetricDefs, metricDef => {\n        this._addTotalToInterval(metricDef.namespace, metricDef.name, interval, prevInterval);\n      });\n      _.forEach(metricDefsByName, (metricDef, name) => {\n        if (metricDef.metricType === 'Counter') {\n          this._addTotalToInterval(metricDef.namespace, metricDef.name, interval, prevInterval);\n        } else if (metricDef.metricType === 'Histogram') {\n          let keys = histogramKeysByName[name];\n          if (!keys) {\n            keys = new Set();\n            histogramKeysByName[name] = keys;\n          }\n          const cumulativeTotal = this._addTotalToInterval(metricDef.namespace, metricDef.name + _loadTest.default.TotalSuffix, interval, prevInterval);\n          const metricObj = this._getMetric(metricDef.namespace, metricDef.name, interval);\n          const prevMetricObj = prevInterval && this._getMetric(metricDef.namespace, metricDef.name, prevInterval);\n          if (metricObj) {\n            for (let key in metricObj.metricValueMap) {\n              keys.add(key);\n            }\n          }\n          const _this = this;\n          keys.forEach(key => {\n            const cumulativeKey = _this._addTotalToInterval(metricDef.namespace, metricDef.name + '-' + key, interval, prevInterval);\n            interval[name + '-' + key + _loadTest.default.TotalSuffix + _loadTest.default.PercentSuffix] = Math.round(10000 * (cumulativeKey || 0) / cumulativeTotal) / 100;\n          });\n        }\n      });\n    }\n    _addCountPerSecMetrics(summary, name) {\n      if (summary[name] && summary.totalTime) {\n        summary[name + '-countPerSec'] = summary[name] / summary.totalTime;\n        const peakVal = summary[name + '-peak'];\n        if (_.isNumber(peakVal) && !_.isNaN(peakVal)) {\n          summary[name + '-peakCountPerSec'] = peakVal / (_lib.default.intervalMs(summary.granularity) / 1000);\n        }\n      }\n    }\n    _applyPendingResults(component) {\n      let pending = component.pendingResults;\n      if (pending) {\n        component.pendingResults = {};\n        let regionSummaries = component.regionSummaries,\n          allRegionSummary = this._regionSummaryById(regionSummaries, 'ALL');\n        _.forEach(pending, (results, regionId) => {\n          let regionSummary = this._regionSummaryById(regionSummaries, regionId);\n          if (allRegionSummary) {\n            this._onResultInRegion(component, results, allRegionSummary);\n          }\n          if (regionSummary) {\n            this._onResultInRegion(component, results, regionSummary);\n          }\n        });\n      }\n    }\n    _applyPendingTraces(component) {\n      let pending = component.pendingTraces;\n      if (pending) {\n        component.pendingTraces = {};\n        let regionSummaries = component.regionSummaries,\n          allRegionSummary = this._regionSummaryById(regionSummaries, 'ALL');\n        _.forEach(pending, (traces, regionId) => {\n          let regionSummary = this._regionSummaryById(regionSummaries, regionId);\n          if (allRegionSummary) {\n            this._onTraceInRegion(component, traces, allRegionSummary);\n          }\n          if (regionSummary) {\n            this._onTraceInRegion(component, traces, regionSummary);\n          }\n        });\n      }\n    }\n    _addTotalToInterval(ns, metricName, interval, prevInterval) {\n      let key = _lib.default.toMetricKey(ns, metricName);\n      let totalVar = key + _loadTest.default.TotalSuffix;\n      interval[totalVar] = (interval && interval[key] ? interval[key] : 0) + (prevInterval && prevInterval[totalVar] ? prevInterval[totalVar] : 0);\n      return interval[totalVar];\n    }\n    _clearIntervalTasks(component) {\n      if (component.applyTraces) {\n        clearInterval(component.applyTraces);\n        component.applyTraces = null;\n      }\n      component.pendingTraces = {};\n      component.pendingResults = {};\n    }\n    _getActiveConcurrents(scriptType, summary, activeInterval, latestInterval) {\n      let clients;\n      const actualStarted = summary['Testable-actualClientsStarted'];\n      const actualFinished = summary['Testable-actualClientsFinished'];\n      if (scriptType === 'JMeter') {\n        clients = Math.max(activeInterval['Testable-jmeterConcurrents-peak'] || 0, latestInterval['Testable-jmeterConcurrents-peak'] || 0);\n      } else if (actualStarted && actualStarted - (actualFinished || 0) > 0) {\n        clients = actualStarted - (actualFinished || 0);\n      } else {\n        clients = activeInterval.maxConcurrentClients;\n      }\n      return clients;\n    }\n    _getActiveInterval(summary, intervals, existingSummary) {\n      let interval;\n      if (_.isArray(intervals) && intervals.length > 0) {\n        if (_.isObject(summary) && _.isObject(existingSummary)) {\n          let latestActiveInterval = Math.max(summary.expectedLatestInterval, existingSummary.expectedLatestInterval);\n          if (latestActiveInterval && latestActiveInterval > 0) {\n            let index = _.findIndex(intervals, interval => {\n              return interval.intervalStart === latestActiveInterval;\n            });\n            if (index >= 0) {\n              interval = intervals[Math.max(0, index - 1)];\n            }\n          }\n        }\n        if (_.isUndefined(interval)) {\n          interval = intervals[Math.max(0, intervals.length - 3)];\n        }\n      }\n      return interval;\n    }\n    _getMetric(ns, name, summary) {\n      return _.find(summary.metrics, metric => {\n        return metric.metricDef === name && (!metric.namespace || metric.namespace === ns);\n      });\n    }\n    _getProviderType(provider) {\n      if (provider) {\n        switch (provider.providerType) {\n          case 'Shared':\n            return provider.public ? 'Shared' : 'Private Shared';\n          case 'OnDemand':\n            return provider.public ? 'On Demand' : 'Private On Demand';\n        }\n      }\n      return 'Shared';\n    }\n    _mergeIntervals(existingIntervals, newIntervals) {\n      _.forEach(newIntervals, newInterval => {\n        let existingInterval = _.find(existingIntervals, existingInterval => {\n          return existingInterval.intervalStart === newInterval.intervalStart;\n        });\n        if (_.isUndefined(existingInterval)) {\n          let index = _.findIndex(existingIntervals, existingInterval => {\n            return newInterval.intervalStart < existingInterval.intervalStart;\n          });\n          if (index === -1) {\n            existingIntervals.push(newInterval);\n          } else {\n            existingIntervals.splice(index, 0, newInterval);\n          }\n        } else {\n          _.merge(existingInterval, newInterval);\n          existingInterval.metrics = newInterval.metrics;\n        }\n      });\n    }\n    _onExecutionAgent(component, executionAgent) {\n      component.EventBus.publish('onNewAgent', executionAgent);\n    }\n    _onSuiteResult(component, suiteResult) {\n      if (!suiteResult) return;\n      let regionSummaries = component.regionSummaries,\n        regionSummary = this._regionSummaryById(regionSummaries, suiteResult.executionRegionId);\n      if (regionSummary) {\n        const existingSuiteResult = _.find(regionSummary.suiteResults, existing => {\n          return existing.id === suiteResult.id;\n        });\n        if (existingSuiteResult) {\n          Object.assign(existingSuiteResult, suiteResult);\n        } else {\n          regionSummary.suiteResults.push(new _trackedBuiltIns.TrackedObject(suiteResult));\n        }\n      }\n    }\n    _onCommandStream(component, commandStreamData) {\n      component.EventBus.publish('onCommandStreamEvent', commandStreamData || {});\n    }\n    _onCommand(component, commandData) {\n      if (!commandData) return;\n      _.forEach(commandData.screenshots, s => {\n        _lib.default.addAuthToOutputFile(s);\n      });\n      component.EventBus.publish('onCommandEvent', commandData);\n    }\n    _onResultInRegion(component, results, regionSummary) {\n      let regionName = regionSummary.executionRegion.region.name;\n      component.EventBus.publish(regionName + \"_executionResultsGrid.update\", results);\n    }\n    _onResult(component, action, result) {\n      if (!result) return;\n      let pendingResults = component.pendingResults;\n      if (!_.has(pendingResults, result.executionRegionId)) {\n        pendingResults[result.executionRegionId] = new _trackedBuiltIns.TrackedArray([]);\n      }\n      pendingResults[result.executionRegionId].push({\n        action,\n        result\n      });\n    }\n    _onTrace(component, action, trace) {\n      if (!trace) return;\n      let pendingTraces = component.pendingTraces;\n      if (!_.has(pendingTraces, trace.regionId)) {\n        pendingTraces[trace.regionId] = new _trackedBuiltIns.TrackedArray([]);\n      }\n      pendingTraces[trace.regionId].push({\n        action,\n        trace\n      });\n    }\n    _onTraceInRegion(component, traces, regionSummary) {\n      _.forEach(traces, traceUpdate => {\n        if (traceUpdate.action === 'Delete' || traceUpdate.action === 'Update') {\n          _.remove(regionSummary.traces, existingTrace => {\n            return traceUpdate.trace.id === existingTrace.id;\n          });\n        }\n        if (traceUpdate.action !== 'Delete') {\n          regionSummary.traces.push(traceUpdate.trace);\n        }\n      });\n      let regionName = regionSummary.executionRegion.region.name;\n      component.EventBus.publish(regionName + \"_tracesGrid.update\", traces);\n    }\n    _onOutputFile(component, action, outputFile) {\n      if (action === 'Delete' && outputFile) {\n        component.EventBus.publish(\"outputFile.delete\", outputFile);\n      } else if (outputFile && outputFile.executionId && outputFile.executionId === component.args.model?.id) {\n        _lib.default.addAuthToOutputFile(outputFile);\n        component.EventBus.publish(\"outputFile.update\", outputFile, action === 'Update');\n      }\n    }\n    _processIntervalsUpdate(update, existing, metricDefsByName) {\n      if (!_.isEmpty(update)) {\n        update.sort((interval1, interval2) => {\n          if (interval1.intervalStart < interval2.intervalStart) {\n            return -1;\n          }\n          if (interval1.intervalStart > interval2.intervalStart) {\n            return 1;\n          }\n          return 0;\n        });\n        this.processIntervals(update, metricDefsByName);\n        if (_.isEmpty(existing)) {\n          return new _trackedBuiltIns.TrackedArray(update);\n        } else {\n          this._mergeIntervals(existing, update);\n          this.processIntervals(existing, metricDefsByName);\n          return existing;\n        }\n      }\n    }\n    _processUpdate(component, update, existing, calcActiveMetrics, executionIntervals, metricDefsByName) {\n      let result = {};\n      let intervals;\n      if (_.isObject(update.summary)) {\n        this.processSummary(update.summary);\n        result.summary = update.summary;\n      }\n      if (!_.isEmpty(update.intervals)) {\n        let newIntervals = _.isEmpty(existing.intervals);\n        intervals = this._processIntervalsUpdate(update.intervals, existing.intervals, metricDefsByName, update.summary || existing.summary);\n        if (newIntervals) {\n          result.intervals = intervals;\n        }\n      } else {\n        intervals = executionIntervals;\n      }\n      if (_.isObject(result.summary) && _.isArray(intervals) && calcActiveMetrics) {\n        this._addActiveMetrics(component, update, result.summary, intervals, existing.summary);\n      }\n      return result;\n    }\n    _processJMeterTxnMetrics(summary) {\n      if (summary) {\n        _.forEach(summary.metrics, metric => {\n          if (!summary.hasRequestMetrics && metric.namespace === _lib.default.SystemNs && _loadTest.default.RequestMetrics.includes(metric.metricDef)) summary.hasRequestMetrics = true;\n        });\n      }\n      const prefixToMatch = _lib.default.toMetricKey(_lib.default.SystemNs, _lib.default.JMeterTxnPrefix);\n      _.forEach(summary, (val, key) => {\n        if (key.indexOf(prefixToMatch) === 0) {\n          summary.hasTxnMetrics = true;\n          const relatedKey = _lib.default.toMetricKey(_lib.default.SystemNs, key.charAt(prefixToMatch.length).toLowerCase() + key.substring(prefixToMatch.length + 1));\n          if (_.isUndefined(summary[relatedKey])) {\n            summary[relatedKey] = val;\n          }\n        }\n      });\n    }\n    _regionSummaryById(regionSummaries, executionRegionId) {\n      let id = executionRegionId ? executionRegionId : 'ALL';\n      return _.find(regionSummaries, regionSummary => {\n        return id === regionSummary.executionRegion.id;\n      });\n    }\n    _setupSubscription(component) {\n      const _this = this;\n      let lastUpdate = this.lastUpdate;\n      let newConn = () => {\n        this._clearIntervalTasks(component);\n        component.applyTraces = setInterval(() => {\n          this._applyPendingTraces(component);\n          this._applyPendingResults(component);\n        }, 5000);\n        component.socket = _lib.default.newSockjs(_environment.config.apiBaseUrl + \"/real-time/results\");\n        component.socket.currentId = component.currentId;\n        component.socket.onopen = () => {\n          lastUpdate = null;\n          console.log('opening connection to /real-time/results');\n          _this._toggleConnectionOn(component);\n          if (_environment.config.currentUser.isLoggedIn) {\n            component.socket.send(JSON.stringify({\n              sid: _environment.config.currentUser.sid\n            }));\n          } else {\n            _this._subscribe(component);\n          }\n        };\n        component.socket.onmessage = function (e) {\n          if (lastUpdate === e.data || this.currentId !== component.currentId) {\n            return;\n          }\n          lastUpdate = e.data;\n          let wrapper = JSON.parse(e.data);\n          if (!_.isUndefined(wrapper.authenticated)) {\n            _this._subscribe(component);\n          } else {\n            switch (wrapper.eventType) {\n              case \"Subscribed\":\n                // try to get execution one more time in case we missed any updates between the time\n                // we loaded the page model and now\n                _this.logLevelChanged(component, component.currentLogLevel || 'Info', true);\n                const action = component.args.model?.uuid ? _server.default.getTokenContent(component.args.model?.uuid) : _server.default.getLoadTestExecutionOutputFiles(component.args.model?.id);\n                action.then(result => {\n                  _this._updateExecution(component, result);\n                });\n                break;\n              case \"Execution\":\n                _this._updateExecution(component, wrapper.event);\n                break;\n              case \"ExecutionLog\":\n                component.EventBus.publish(\"log.update\", wrapper.event);\n                break;\n              case \"ExecutionIntervals\":\n                _this._updateIntervals(component, wrapper.event);\n                break;\n              case \"ExecutionTrace\":\n                _this._onTrace(component, wrapper.event.action, wrapper.event.data);\n                break;\n              case \"ExecutionFile\":\n                _this._onOutputFile(component, wrapper.event.action, wrapper.event.data);\n                break;\n              case \"ExecutionAgent\":\n                _this._onExecutionAgent(component, wrapper.event);\n                break;\n              case \"Result\":\n                if (wrapper.event.subtype === 'SuiteResult') {\n                  _this._onSuiteResult(component, wrapper.event.data);\n                } else if (wrapper.event.subtype === 'CommandStream') {\n                  _this._onCommandStream(component, wrapper.event.data);\n                } else if (wrapper.event.subtype === 'Command') {\n                  _this._onCommand(component, wrapper.event.data);\n                } else {\n                  _this._onResult(component, wrapper.event.action, wrapper.event.data);\n                }\n                break;\n              case \"Error\":\n                _lib.default.error(wrapper.event, \"Streaming Test Result Error\");\n                break;\n              case \"FilesProgress\":\n                _this._updateFilesProgress(component, wrapper.event);\n                break;\n              case \"Metrics\":\n                _this._updateBucketMetrics(component, wrapper.event);\n                break;\n              case \"Video\":\n                {\n                  _this._updateLiveVideos(component, wrapper.event.action, wrapper.event.data);\n                  break;\n                }\n              case \"VncStarted\":\n                {\n                  _this._onVncStarted(component, wrapper.event);\n                  break;\n                }\n              case \"ExecutionResources\":\n                {\n                  _this._updateExecutionResources(component, wrapper.event);\n                  break;\n                }\n              case \"CommandStreamSummaries\":\n                {\n                  const summaries = wrapper.event;\n                  component.EventBus.publish('onCommandStreamSummaryEvent', summaries.length ? summaries[0] : null);\n                  break;\n                }\n              case \"CommandStreamErrors\":\n                {\n                  component.EventBus.publish('onCommandStreamErrorsEvent', wrapper.event);\n                  break;\n                }\n              case \"SuiteSummaries\":\n                {\n                  _this._updateExecutionData(component, wrapper.event, 'suiteSummaries');\n                  break;\n                }\n              case \"SuiteErrors\":\n                {\n                  _this._updateExecutionData(component, wrapper.event, 'suiteErrors');\n                  break;\n                }\n              default:\n                break;\n            }\n          }\n        };\n        component.socket.onclose = function () {\n          if (this.currentId !== component.currentId && !this.setupSubscription) {\n            return;\n          }\n          component.currentLogLevel = null;\n          _this._toggleConnectionOff(component);\n          console.log('closing connection to /real-time/results');\n          delete component.socket;\n          if (this._setupSubscription) {\n            _this._setupSubscription(component);\n          } else if (_.isUndefined(this.userInitiatedClose)) {\n            setTimeout(function () {\n              newConn();\n            }, 5000);\n          }\n        };\n      };\n      newConn();\n    }\n    _subscribe(component) {\n      const id = component.args.model?.id;\n      const token = component.args.model?.uuid;\n      component.socket.send(JSON.stringify({\n        subscribe: token ? [] : [id],\n        subscribeUuid: token ? [token] : [],\n        params: {\n          level: component.currentLogLevel || 'Info'\n        }\n      }));\n      this.updateStreamingRegions(component);\n    }\n    _toggleConnectionOn(component) {\n      component.isSystemConnectionToggle = true;\n      $('#connectionState').bootstrapToggle('on');\n      component.isSystemConnectionToggle = false;\n    }\n    _toggleConnectionOff(component) {\n      component.isSystemConnectionToggle = true;\n      $('#connectionState').bootstrapToggle('off');\n      component.isSystemConnectionToggle = false;\n    }\n    _updateExecutionData(component, update, column) {\n      let regionSummaries = component.regionSummaries,\n        regionSummary = this._regionSummaryById(regionSummaries, 'ALL');\n      if (update && update.length > 0) {\n        regionSummary.setProperties({\n          [column]: update\n        });\n      }\n    }\n    _updateExecutionResources(component, update) {\n      let regionSummary = this._regionSummaryById(component.regionSummaries, 'ALL');\n      const zoomInfo = component.zoomInfo;\n      const metricDefsByName = component.metricDefsByName;\n      let props = this._processUpdate(component, update, regionSummary, true, regionSummary.intervals, metricDefsByName);\n      this.updateResources(component, update, regionSummary.resources, props.intervals || regionSummary.intervals, metricDefsByName, zoomInfo);\n      props.numResources = _.size(regionSummary.resources);\n      regionSummary.setProperties(props);\n    }\n    _updateRegionSummary(component, update, regionSummary) {\n      const zoomInfo = component.zoomInfo;\n      const metricDefsByName = component.metricDefsByName;\n      const props = this._processUpdate(component, update, regionSummary, true, regionSummary.intervals, metricDefsByName);\n      const regionName = _.isUndefined(update.region) ? \"ALL\" : update.region.name;\n      this.updateResources(component, update.resources, regionSummary.resources, props.intervals || regionSummary.intervals, metricDefsByName, zoomInfo);\n      props.numResources = _.size(regionSummary.resources);\n      if (regionName !== \"ALL\" && _.isObject(update.summary)) {\n        let mapRegion = _.find(component.mapRegions, mapRegion => {\n          return mapRegion.region === regionSummary.executionRegion.region.name;\n        });\n        if (_.isObject(mapRegion)) {\n          mapRegion.value = update.summary.iterationsExecuted;\n          if (_.isNumber(update.expectedResultCount)) {\n            mapRegion.expected = update.expectedResultCount;\n          }\n          mapRegion.summary = update.summary;\n        }\n      }\n      regionSummary.setProperties(props);\n      if (props.summary && regionSummary.isAll) {\n        (0, _object.set)(component.args.model, 'summary', props.summary);\n      }\n      component.EventBus.publish(regionName + \".data.update\");\n      component.EventBus.publish(regionName + \"_resultsGrid.update\");\n    }\n    _updateFilesProgress(component, filesProgress) {\n      const regionSummaries = component.regionSummaries;\n      const regionSummary = this._regionSummaryById(regionSummaries, filesProgress.executionRegionId);\n      if (regionSummary) {\n        regionSummary.filesProgress = filesProgress;\n      }\n    }\n    _updateLiveVideos(component, action, video) {\n      if (action === 'Delete' && video) {\n        component.EventBus.publish(\"liveVideoFile.delete\", video);\n      } else if (video && video.executionId && video.executionId === component.args.model?.id) {\n        component.EventBus.publish(\"liveVideoFile.update\", video, action === 'Update');\n      }\n    }\n    _onVncStarted(component, vncInfo) {\n      component.EventBus.publish(\"liveSessions.start\", vncInfo);\n    }\n    _updateExecution(component, execution) {\n      // there is a chance we get a real time update from before we started the recording after we start it, so we ignore that case\n      // we also ignore an update if we've already processed a more recent one as determined by updatedAt\n      if (component.args.model?.startedAt != null && _.isEmpty(execution.startedAt) || component.args.model?.updatedAt != null && moment(component.args.model?.updatedAt).isAfter(moment(execution.updatedAt))) {\n        return;\n      }\n      if ((execution?.configuration?.testCase?.metricDefs || []).length > 0 && !_.isEqual(component.args.model?.configuration?.testCase?.metricDefs, execution.configuration.testCase.metricDefs)) {\n        (0, _object.set)(component.args.model.configuration.testCase, 'metricDefs', execution.configuration.testCase.metricDefs);\n      }\n      if (_.isObject(execution.limit)) {\n        (0, _object.set)(component.args.model, 'limit', execution.limit);\n      }\n      if (_.isObject(execution.usageRecord)) {\n        (0, _object.set)(component.args.model, 'usageRecord', execution.usageRecord);\n      }\n      if (execution.completed && !_.isUndefined(component.socket)) {\n        let socket = component.socket;\n        setTimeout(function () {\n          if (!_.isUndefined(socket)) {\n            socket.userInitiatedClose = true;\n            socket.close();\n          }\n        }, 5000);\n      }\n      const previousQueueSignature = (component.model?.regions || []).filter(region => region.queued).map(region => region.id).sort().join('|');\n      let regionSummaries = component.regionSummaries;\n      _.forEach(execution.regions, executionRegion => {\n        let regionSummary = this._regionSummaryById(regionSummaries, executionRegion.id);\n        if (regionSummary) {\n          regionSummary.setProperties({\n            'executionRegion.startedAt': executionRegion.startedAt,\n            'executionRegion.finishedAt': executionRegion.finishedAt,\n            'executionRegion.running': executionRegion.running,\n            'executionRegion.allocated': executionRegion.allocated,\n            'executionRegion.completed': executionRegion.completed,\n            'executionRegion.updatedAt': executionRegion.updatedAt,\n            'executionRegion.expectedResultCount': executionRegion.expectedResultCount,\n            'executionRegion.infraReady': executionRegion.infraReady,\n            'executionRegion.region': executionRegion.region,\n            'executionRegion.provider': executionRegion.provider,\n            'executionRegion.triggers': executionRegion.triggers,\n            'executionRegion.success': executionRegion.success,\n            'executionRegion.maxSessionNum': executionRegion.maxSessionNum,\n            'executionRegion.queued': executionRegion.queued,\n            'executionRegion.queueStartedAt': executionRegion.queueStartedAt,\n            'executionRegion.queueFinishedAt': executionRegion.queueFinishedAt\n          });\n        } else {\n          regionSummaries.pushObject(this.toRegionSummary(component.args.model, executionRegion, regionSummaries));\n        }\n      });\n      this._updateSummaries(component, execution);\n      (0, _object.setProperties)(component.args.model, {\n        queued: execution.queued,\n        startedAt: execution.startedAt,\n        finishedAt: execution.finishedAt,\n        running: execution.running,\n        cancelledByUser: execution.cancelledByUser,\n        durationSecs: execution.durationSecs,\n        iterations: execution.iterations,\n        limit: execution.limit,\n        limitField: execution.limitField,\n        limitVal: execution.limitVal,\n        limitObservedVal: execution.limitObservedVal,\n        limitBreached: execution.limitBreached,\n        updatedAt: execution.updatedAt,\n        completed: execution.completed,\n        maxSessionNum: execution.maxSessionNum,\n        concurrentClients: execution.concurrentClients,\n        actualConcurrentClients: execution.actualConcurrentClients,\n        expectedResultCount: execution.expectedResultCount,\n        triggerBreached: execution.triggerBreached,\n        fatalLogging: execution.fatalLogging,\n        timedOut: execution.timedOut,\n        allocatingInfra: execution.allocatingInfra,\n        summaryCalculated: execution.summaryCalculated,\n        hasSavedSummaries: execution.hasSavedSummaries,\n        numSavedSummaries: execution.numSavedSummaries,\n        numRedisSummaries: execution.numRedisSummaries,\n        success: execution.success,\n        manualSuccess: execution.manualSuccess,\n        triggers: execution.triggers,\n        regions: execution.regions,\n        aggregated: execution.aggregated,\n        immediateContentSaved: execution.immediateContentSaved,\n        diffsCalculated: execution.diffsCalculated,\n        summarySaved: execution.summarySaved,\n        infraReady: execution.infraReady,\n        infraReadyAt: execution.infraReadyAt,\n        logGroups: execution.logGroups,\n        browsersExecuted: execution.browsersExecuted,\n        vcsRoot: execution.vcsRoot\n      });\n      const queueSignature = (execution.regions || []).filter(region => region.queued).map(region => region.id).sort().join('|');\n      if (previousQueueSignature !== queueSignature) {\n        this.EventBus.publish('executionQueue.invalidate');\n      }\n      this.EventBus.publish('map.data.update');\n    }\n    _updateIntervals(component, intervalsUpdate) {\n      const zoomInfo = component.zoomInfo;\n      if (!zoomInfo || zoomInfo.isAll) {\n        let regionSummary = this._regionSummaryById(component.regionSummaries, intervalsUpdate.executionRegionId);\n        const regionName = regionSummary.executionRegion.region.name;\n        if (intervalsUpdate.isFullUpdate) {\n          regionSummary.intervals = new _trackedBuiltIns.TrackedArray([]);\n          component.EventBus.publish(regionName + '.rt.data.refresh');\n        }\n        let newIntervals = _.isEmpty(regionSummary.intervals);\n        if (regionSummary.intervals && intervalsUpdate?.intervals?.length && !_.isUndefined(intervalsUpdate.intervals[0])) {\n          intervalsUpdate.intervals.push(regionSummary.intervals[0]);\n        }\n        intervalsUpdate.intervals = intervalsUpdate.intervals.filter(x => x !== undefined);\n        let intervals = this._processIntervalsUpdate(intervalsUpdate.intervals, regionSummary.intervals, component.metricDefsByName);\n        component.EventBus.publish(regionName + '.rt.data.update', intervalsUpdate.intervals);\n        if (newIntervals) {\n          regionSummary.intervals = intervals;\n        }\n      }\n    }\n    _updateSummaries(component, executionUpdate) {\n      let regionSummaries = component.regionSummaries,\n        allRegionSummary = this._regionSummaryById(regionSummaries, 'ALL');\n      this._updateRegionSummary(component, executionUpdate, allRegionSummary);\n      _.forEach(executionUpdate.regions, regionUpdate => {\n        let regionSummary = this._regionSummaryById(regionSummaries, regionUpdate.id);\n        this._updateRegionSummary(component, regionUpdate, regionSummary);\n      });\n    }\n    _upgradeComparisons(summary) {\n      if (summary && summary.comparisons && summary.comparisons['success'] && !summary.comparisons['outcome-success']) {\n        summary.comparisons['outcome-success'] = summary.comparisons['success'];\n        summary.comparisons['outcome-success-percent'] = summary.comparisons['success-percent'];\n      }\n      if (summary && summary.comparisons && summary.comparisons['count']) {\n        // split up by namespace\n        const systemComparisons = summary.comparisons;\n        const newComparisons = {};\n        newComparisons[_lib.default.SystemNs] = systemComparisons;\n        const userComparisons = {};\n        _.forEach(systemComparisons, (val, metric) => {\n          const name = _lib.default.getMetricName(metric);\n          if (!_loadTest.default.MetricDictionary[name]) {\n            delete systemComparisons[metric];\n            userComparisons[metric] = val;\n          }\n        });\n        if (!_.isEmpty(userComparisons)) {\n          newComparisons[this.UserNs] = userComparisons;\n        }\n        summary.comparisons = newComparisons;\n      }\n    }\n    _upgradeMetric(metric, summary) {\n      if (metric.metricDef === 'success' && _.isNumber(metric.metricValue) && _.isEmpty(metric.metricValueMap) && _.isEmpty(this._getMetric(_lib.default.SystemNs, 'outcome', summary))) {\n        let value = _lib.default.toMetricValue(metric.metricValue, metric);\n        metric.metricType = 'Histogram';\n        metric.metricDef = 'outcome';\n        metric.metricValueMap = {\n          'success': value,\n          'failure': summary.count - value\n        };\n      }\n    }\n    _updateBucketMetrics(component, update) {\n      if (component.bucketsLoaded && update && !_.isEmpty(update.updates)) {\n        const metricDefsByName = component.metricDefsByName;\n        const metricDef = metricDefsByName[update.fullName];\n        if (metricDef) {\n          const regionSummaries = component.regionSummaries;\n          const regionSummary = this._regionSummaryById(regionSummaries, update.executionRegionId || 'ALL');\n          const buckets = regionSummary.buckets;\n          if (_.isArray(buckets)) {\n            const toAdd = new Set();\n            const updated = new Set();\n            _.forEach(update.updates, (newBucketValue, bucketName) => {\n              let bucket = _.find(buckets, b => {\n                return b.bucket === bucketName;\n              });\n              if (bucket && !toAdd.has(bucket)) {\n                updated.add(bucket);\n              } else if (!bucket) {\n                this.IdGenerator = this.IdGenerator + 1;\n                bucket = {\n                  id: this.IdGenerator,\n                  bucket: bucketName,\n                  metrics: []\n                };\n                buckets.push(bucket);\n                toAdd.add(bucket);\n              }\n              let metric = _.find(bucket.metrics, m => {\n                return m.metricDefId === metricDef.id;\n              });\n              if (!metric) {\n                metric = {\n                  metricDefId: metricDef.id,\n                  namespace: metricDef.namespace,\n                  metricDef: metricDef.name,\n                  metricType: metricDef.metricType,\n                  metricUnits: metricDef.metricUnits\n                };\n                bucket.metrics.push(metric);\n              }\n              metric.bucketValue = newBucketValue;\n              this.processBucket(bucket);\n            });\n            if (toAdd.size > 0 || updated.size > 0) {\n              component.EventBus.publish('buckets.update', {\n                added: Array.from(toAdd),\n                updated: Array.from(updated)\n              });\n            }\n          }\n        }\n      }\n    }\n  }\n  _exports.default = TestResultsService;\n});","define(\"@testable/shared-ui/services/zoom-info\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\"], function (_exports, _service, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ZoomInfoService = _exports.default = (_class = class ZoomInfoService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"isAll\", _descriptor, this);\n      _initializerDefineProperty(this, \"startTimestamp\", _descriptor2, this);\n      _initializerDefineProperty(this, \"endTimestamp\", _descriptor3, this);\n    }\n    update(zoomInfo) {\n      this.isAll = zoomInfo.isAll;\n      this.startTimestamp = zoomInfo.startTimestamp;\n      this.endTimestamp = zoomInfo.endTimestamp;\n    }\n    reset() {\n      this.isAll = true;\n      this.startTimestamp = -1;\n      this.endTimestamp = -1;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isAll\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"startTimestamp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"endTimestamp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _class);\n});","define(\"@testable/shared-ui/utils/ai-instruction-templates\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const instructionTemplates = [{\n    group: 'Authentication',\n    templates: [{\n      title: 'Login Flow',\n      contents: 'Navigate to the login page. Enter valid credentials (username and password). Click the login button. Verify the user is redirected to the dashboard.'\n    }, {\n      title: 'Logout Flow',\n      contents: 'While logged in, locate and click the logout button or link. Verify the user is redirected to the login page and the session is terminated.'\n    }, {\n      title: 'Signup Registration',\n      contents: 'Navigate to the registration page. Fill in all required fields (name, email, password, confirm password). Submit the form. Verify the account is created and the user receives a confirmation.'\n    }]\n  }, {\n    group: 'Navigation',\n    templates: [{\n      title: 'Page Navigation',\n      contents: 'Navigate to the target URL. Verify the page loads successfully. Check that the page title and key elements are visible.'\n    }, {\n      title: 'Multi-Page Flow',\n      contents: 'Start at the home page. Navigate through a sequence of pages using links or buttons. Verify each page loads correctly and contains the expected content.'\n    }]\n  }, {\n    group: 'Forms',\n    templates: [{\n      title: 'Form Submission',\n      contents: 'Navigate to the form page. Fill in all required fields with valid data. Submit the form. Verify a success message is displayed and data is saved correctly.'\n    }, {\n      title: 'Form Validation',\n      contents: 'Navigate to the form page. Submit the form without filling required fields. Verify appropriate error messages appear for each required field. Fill in fields with invalid data and verify validation errors.'\n    }]\n  }, {\n    group: 'E-Commerce',\n    templates: [{\n      title: 'Add to Cart',\n      contents: 'Navigate to a product page. Select product options if applicable. Click the Add to Cart button. Verify the item appears in the cart with the correct details.'\n    }, {\n      title: 'Checkout Flow',\n      contents: 'Add items to the cart. Proceed to checkout. Fill in shipping and payment information. Complete the order. Verify the order confirmation page displays with correct details.'\n    }]\n  }, {\n    group: 'Search & Filter',\n    templates: [{\n      title: 'Search Functionality',\n      contents: 'Locate the search input. Enter a search query. Submit the search. Verify relevant results are displayed and match the search criteria.'\n    }, {\n      title: 'Filter Results',\n      contents: 'Navigate to a page with filterable content. Apply one or more filters. Verify the displayed results match the selected filter criteria. Remove filters and verify all results return.'\n    }]\n  }];\n  var _default = _exports.default = instructionTemplates;\n});","define(\"@testable/shared-ui/utils/amcharts\", [\"exports\", \"@testable/shared-ui/utils/environment\", \"@amcharts/amcharts5\", \"@amcharts/amcharts5/percent\", \"@amcharts/amcharts5/plugins/exporting\", \"@amcharts/amcharts5/xy\"], function (_exports, _environment, am5, am5percent, am5exporting, am5xy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\",0,\"@amcharts/amcharts5\",0,\"@amcharts/amcharts5/percent\",0,\"@amcharts/amcharts5/plugins/exporting\",0,\"@amcharts/amcharts5/xy\"eaimeta@70e063a35619d71f\n  function addExportOptions(root) {\n    // check if print param is in query string, if not add export option\n    if (window.location.search.indexOf('print=true') === -1) {\n      let exporting = am5exporting.Exporting.new(root, {\n        menu: am5exporting.ExportingMenu.new(root, {})\n      });\n      exporting.get(\"menu\").set(\"items\", _environment.config.AmCharts.exportMenu);\n    }\n  }\n  function getYRenderer(root, color, opposite) {\n    let renderer = am5xy.AxisRendererY.new(root, {\n      opposite\n    });\n    renderer.grid.template.set(\"strokeOpacity\", 0);\n    renderer.setAll({\n      stroke: color,\n      strokeOpacity: 1,\n      opacity: 0.5\n    });\n    return renderer;\n  }\n  function getDataItemToolTipObj(root, buildText) {\n    let tooltip = getToolTipObj(root);\n    let currentText = '';\n    tooltip.label.adapters.add('text', function (text, target) {\n      return currentText;\n    });\n    tooltip.events.on('dataitemchanged', () => {\n      if (tooltip.dataItem?.dataContext) {\n        const data = tooltip.dataItem.dataContext;\n        currentText = buildText(data);\n      }\n    });\n    return tooltip;\n  }\n  function getToolTipObj(root, vertical) {\n    let tooltip = am5.Tooltip.new(root, {\n      getFillFromSprite: false,\n      getStrokeFromSprite: true,\n      autoTextColor: false,\n      pointerOrientation: vertical ? \"vertical\" : \"horizontal\"\n    });\n    tooltip.get(\"background\").setAll({\n      fill: am5.color(0xffffff)\n    });\n    tooltip.label.setAll({\n      text: '',\n      fill: am5.color(0x000000)\n    });\n    return tooltip;\n  }\n  function makeChartColumn(root, chart, name, fieldName, xAxis, yAxis) {\n    return chart.series.push(am5xy.ColumnSeries.new(root, {\n      name: name,\n      xAxis: xAxis,\n      yAxis: yAxis,\n      valueYField: fieldName,\n      valueField: 'successValue',\n      categoryXField: \"date\",\n      fill: 'successColor',\n      calculateAggregates: true,\n      clustered: false,\n      maskBullets: false\n    }));\n  }\n  function makeChartLine(root, chart, name, fieldName, xAxis, yAxis) {\n    return chart.series.push(am5xy.LineSeries.new(root, {\n      name: name,\n      xAxis: xAxis,\n      yAxis: yAxis,\n      valueYField: fieldName,\n      categoryXField: \"date\",\n      maskBullets: false\n    }));\n  }\n  function getOutcome(success) {\n    return success ? '[#348fe2]✓[/]' : '[#ff5b57]![/]';\n  }\n  function hasData(chart, chartData) {\n    return _.some(chartData, function (summary) {\n      return _.some(chart.series.values, function (g) {\n        return summary[g.get('valueYField')];\n      });\n    });\n  }\n  function checkEmptyData(chartRoot, chart, chartData) {\n    try {\n      if (chart && (_.isEmpty(chartData) || !(chart instanceof am5percent.PieChart) && !hasData(chart, chartData))) {\n        // add label\n        if (!chart.emptyDataLabel) {\n          const label = chart.children.unshift(am5.Label.new(chartRoot, {\n            text: 'The chart contains no data',\n            fontSize: 14,\n            textAlign: \"center\",\n            fill: 'rgba(0,0,0,0.2)',\n            x: am5.percent(50),\n            y: am5.percent(50),\n            centerX: am5.percent(50),\n            centerY: am5.percent(50)\n          }));\n          chart.emptyDataLabel = label;\n        }\n        chart.series.values.forEach(series => {\n          series.hide();\n        });\n      } else if (chart && chart.emptyDataLabel) {\n        chart.emptyDataLabel?.dispose();\n        chart.series.values.forEach(series => {\n          series.show();\n        });\n        delete chart.emptyDataLabel;\n      }\n    } catch (err) {}\n  }\n  function addZoomButton(root, chart, xAxis) {\n    chart.zoomOutButton.set(\"forceHidden\", true);\n    let button = chart.plotContainer.children.push(am5.Button.new(root, {\n      dx: 10,\n      cursorOverStyle: \"pointer\",\n      label: am5.Label.new(root, {\n        text: \"Zoom Out\",\n        fontSize: 12,\n        paddingTop: 1,\n        paddingRight: 2,\n        paddingBottom: 1,\n        paddingLeft: 2,\n        fill: am5.color(0x007bff)\n      })\n    }));\n    button.get(\"background\").setAll({\n      cornerRadiusTL: 3,\n      cornerRadiusTR: 3,\n      cornerRadiusBR: 3,\n      cornerRadiusBL: 3,\n      fill: am5.color(0xFFFFFF),\n      fillOpacity: 0.8,\n      stroke: am5.color(0x000000),\n      strokeOpacity: 0.2\n    });\n    button.get(\"background\").states.create(\"hover\", {}).setAll({\n      fill: am5.color(0x007bff),\n      fillOpacity: 0.2\n    });\n    button.get(\"background\").states.create(\"down\", {}).setAll({\n      fill: am5.color(0x007bff),\n      fillOpacity: 0.4\n    });\n    button.hide();\n    button.events.on(\"click\", () => {\n      chart.zoomOut();\n      button.hide();\n    });\n    let cursor = chart.set(\"cursor\", am5xy.XYCursor.new(root, {\n      xAxis: xAxis,\n      behavior: 'zoomX'\n    }));\n    cursor.lineY.setAll({\n      visible: false\n    }); // hide the cursor line on Y axes\n    cursor.lineX.setAll({\n      stroke: am5.color(0x000000),\n      strokeOpacity: 0.2\n    });\n    cursor.selection.setAll({\n      fill: am5.color(0x000055),\n      fillOpacity: 0.4\n    });\n    cursor.events.on(\"selectended\", () => button.show());\n  }\n  function initLicense() {\n    am5.addLicense(_environment.config.AmCharts.licenses.charts);\n    am5.addLicense(_environment.config.AmCharts.licenses.maps);\n  }\n  var _default = _exports.default = {\n    addExportOptions,\n    getYRenderer,\n    getToolTipObj,\n    getDataItemToolTipObj,\n    makeChartLine,\n    makeChartColumn,\n    getOutcome,\n    checkEmptyData,\n    initLicense,\n    addZoomButton\n  };\n});","define(\"@testable/shared-ui/utils/app-initializer\", [\"exports\", \"@glimmer/component\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/models/user\", \"@ember/runloop\", \"@testable/shared-ui/services/api\"], function (_exports, _component, _environment, _lib, _server, _user, _runloop, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.initializeApp = initializeApp;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/models/user\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/services/api\"eaimeta@70e063a35619d71f\n  function setupAjax() {\n    let xhrPool = [];\n    $(document).ajaxSend(function (e, jqXHR, options) {\n      xhrPool.push(jqXHR);\n    });\n    $(document).ajaxComplete(function (e, jqXHR, options) {\n      xhrPool = $.grep(xhrPool, function (x) {\n        return x !== jqXHR;\n      });\n    });\n    window.abortAllMyAjaxRequests = function () {\n      $.each(xhrPool, function (idx, jqXHR) {\n        jqXHR.abort();\n      });\n    };\n  }\n  function refreshProviderRelatedInfo() {\n    if (!_environment.config.isMonitoring && !_environment.config.currentUser.isNoPlan) {\n      _server.default.refreshProviderInfo();\n    }\n  }\n  function setConfiguration(application, appConfig) {\n    const container = application.__container__;\n    const environmentService = container.lookup('service:environment');\n    (0, _environment.setEnvironmentService)(environmentService);\n    environmentService.setConfig(appConfig);\n  }\n  async function applyAwsLink() {\n    const apiX = new _api.default();\n    await apiX.billing.associateAws(_environment.config.currentUser.org.account.id, 'account');\n    _lib.default.info('Successfully linked this account to your AWS account for billing', 'AWS Marketplace Link', true);\n    setTimeout(function () {\n      location.href = '/account/billing/subscription';\n    }, 3000);\n  }\n  function initializeApp(application, appConfig) {\n    setConfiguration(application, appConfig);\n    appConfig.currentUser = _user.default.create();\n    appConfig.currentUser.addObserver('orgId', function () {\n      if (appConfig.currentUser.isLoggedIn) {\n        refreshProviderRelatedInfo();\n        let orgIds = _.uniq(_.map(appConfig.currentUser.orgs, 'organization.account.id'));\n        if (_lib.default.isAwsLinkPending() && orgIds.length === 1) {\n          if (appConfig.currentUser.org.primaryOrg) {\n            (0, _runloop.later)(this, () => {\n              _lib.default.error('Cannot create an AWS link when you do not have access to the account\\'s primary organization.', 'AWS Marketplace Link');\n            }, 500);\n          } else {\n            applyAwsLink();\n          }\n        }\n      }\n    });\n    if (!Date.now) {\n      Date.now = function () {\n        return new Date().getTime();\n      };\n    }\n    const originalWillDestroy = _component.default.prototype.willDestroy;\n    _component.default.prototype.willDestroy = function () {\n      originalWillDestroy.call(this, ...arguments);\n      $('.popover').remove();\n      $('.tooltip').remove();\n    };\n    $(window).on('hashchange', function () {\n      const el = document.getElementById(window.location.hash.substr(1));\n      if (el) {\n        _lib.default.scrollElementVert(el, -72);\n      }\n    });\n    $(window).resize(_lib.default.setupHeaderSize);\n    window.ParsleyConfig = {\n      excluded: 'input[type=button], input[type=submit], input[type=reset]',\n      inputs: 'input, textarea, select, input[type=hidden], :hidden'\n    };\n    if ($.fn.dataTable) {\n      $.fn.dataTable.ext.errMode = 'none';\n    }\n    setupAjax();\n  }\n});","define(\"@testable/shared-ui/utils/apps\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@ember/runloop\", \"@testable/shared-ui/utils/environment\"], function (_exports, _lib, _runloop, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  /*\n  Template Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 4\n  Version: 4.2.0\n  Author: Sean Ngu\n  Website: http://www.seantheme.com/color-admin-v4.2/admin/\n  \t----------------------------\n  \tAPPS CONTENT TABLE\n  \t----------------------------\n  \n  \t<!-- ======== GLOBAL SCRIPT SETTING ======== -->\n  \t01. Handle Scrollbar\n  \t02. Handle Sidebar - Menu\n  \t03. Handle Sidebar - Mobile View Toggle\n  \t04. Handle Sidebar - Minify / Expand\n  \t05. Handle Page Load - fade show\n  \t06. Handle Panel - Remove / Reload / Collapse / Expand\n  \t07. Handle Panel - Draggable\n  \t08. Handle Tooltip & Popover Activation\n  \t09. Handle Scroll to Top Button Activation\n  \n  \t<!-- ======== Added in V1.2 ======== -->\n  \t10. Handle Theme & Page Structure Configuration - added in V1.2\n  \t11. Handle Theme Panel Expand - added in V1.2\n  \t12. Handle After Page Load Add Class Function - added in V1.2\n  \n  \t<!-- ======== Added in V1.5 ======== -->\n  \t13. Handle Save Panel Position Function - added in V1.5\n  \t14. Handle Draggable Panel Local Storage Function - added in V1.5\n  \t15. Handle Reset Local Storage - added in V1.5\n  \n  \t<!-- ======== Added in V1.6 ======== -->\n  \t16. Handle IE Full Height Page Compatibility - added in V1.6\n  \t17. Handle Unlimited Nav Tabs - added in V1.6\n  \n  \t<!-- ======== Added in V1.9 ======== -->\n  \t18. Handle Top Menu - Unlimited Top Menu Render - added in V1.9\n  \t19. Handle Top Menu - Sub Menu Toggle - added in V1.9\n  \t20. Handle Top Menu - Mobile Sub Menu Toggle - added in V1.9\n  \t21. Handle Top Menu - Mobile Top Menu Toggle - added in V1.9\n  \t22. Handle Clear Sidebar Selection & Hide Mobile Menu - added in V1.9\n  \n  \t<!-- ======== Added in V4.0 ======== -->\n  \t23. Handle Check Bootstrap Version - added in V4.0\n  \t24. Handle Page Scroll Class - added in V4.0\n  \t25. Handle Toggle Navbar Profile - added in V4.0\n  \t26. Handle Sidebar Scroll Memory - added in V4.0\n  \t27. Handle Sidebar Minify Sub Menu - added in V4.0\n  \t28. Handle Ajax Mode - added in V4.0\n  \t29. Handle Float Navbar Search - added in V4.0\n  \n  \t<!-- ======== APPLICATION SETTING ======== -->\n  \tApplication Controller\n  */\n  /* 02. Handle Sidebar - Menu\n  ------------------------------------------------ */\n  let handleSidebarMenu = function () {\n    \"use strict\";\n\n    let expandTime = $('.sidebar').attr('data-disable-slide-animation') ? 0 : 250;\n    $('.sidebar .nav').on('click', '> .has-sub > a', function () {\n      let target = $(this).next('.sub-menu');\n      let otherMenu = $('.sidebar .nav > li.has-sub > .sub-menu').not(target);\n      if ($('.page-sidebar-minified').length === 0) {\n        $(otherMenu).closest('li').addClass('closing');\n        $(otherMenu).slideUp(expandTime, function () {\n          $(otherMenu).closest('li').addClass('closed').removeClass('expand closing');\n        });\n        if ($(target).is(':visible')) {\n          $(target).closest('li').addClass('closing').removeClass('expand');\n        } else {\n          $(target).closest('li').addClass('expanding').removeClass('closed');\n        }\n        $(target).slideToggle(expandTime, function () {\n          let targetLi = $(this).closest('li');\n          if (!$(target).is(':visible')) {\n            $(targetLi).addClass('closed');\n            $(targetLi).removeClass('expand');\n          } else {\n            $(targetLi).addClass('expand');\n            $(targetLi).removeClass('closed');\n          }\n          $(targetLi).removeClass('expanding closing');\n        });\n      }\n    });\n    $('.sidebar .nav').on('click', '.has-sub .sub-menu li.has-sub > a', function () {\n      if ($('.page-sidebar-minified').length === 0) {\n        let target = $(this).next('.sub-menu');\n        if ($(target).is(':visible')) {\n          $(target).closest('li').addClass('closing').removeClass('expand');\n        } else {\n          $(target).closest('li').addClass('expanding').removeClass('closed');\n        }\n        $(target).slideToggle(expandTime, function () {\n          let targetLi = $(this).closest('li');\n          if (!$(target).is(':visible')) {\n            $(targetLi).addClass('closed');\n            $(targetLi).removeClass('expand');\n          } else {\n            $(targetLi).addClass('expand');\n            $(targetLi).removeClass('closed');\n          }\n          $(targetLi).removeClass('expanding closing');\n        });\n      }\n    });\n    $('.is-mobile').on('click', 'a:not(.dropdown-toggle)[href!=\"javascript:;\"]', function () {\n      if ($('#sidebar').hasClass('show')) {\n        $('#sidebar').removeClass('show');\n        $('.navbar-toggle').addClass('collapsed');\n      }\n    });\n  };\n\n  /* 03. Handle Sidebar - Mobile View Toggle\n  ------------------------------------------------ */\n  let handleMobileSidebarToggle = function () {\n    let sidebarProgress = false;\n    $('.sidebar').bind('click touchstart', function (e) {\n      if ($(e.target).closest('.sidebar').length !== 0) {\n        sidebarProgress = true;\n      } else {\n        sidebarProgress = false;\n        e.stopPropagation();\n      }\n    });\n    $(document).bind('click touchstart', function (e) {\n      if ($(e.target).closest('.sidebar').length === 0) {\n        sidebarProgress = false;\n      }\n      if ($(e.target).closest('#float-sub-menu').length !== 0) {\n        sidebarProgress = true;\n      }\n      if (!e.isPropagationStopped() && sidebarProgress !== true) {\n        if ($('#page-container').hasClass('page-sidebar-toggled')) {\n          sidebarProgress = true;\n          $('#page-container').removeClass('page-sidebar-toggled');\n        }\n        if ($(window).width() <= 767) {\n          if ($('#page-container').hasClass('page-right-sidebar-toggled')) {\n            sidebarProgress = true;\n            $('#page-container').removeClass('page-right-sidebar-toggled');\n          }\n        }\n      }\n    });\n    $('[data-click=right-sidebar-toggled]').click(function (e) {\n      e.stopPropagation();\n      let targetContainer = '#page-container';\n      let targetClass = 'page-right-sidebar-collapsed';\n      targetClass = $(window).width() < 979 ? 'page-right-sidebar-toggled' : targetClass;\n      if ($(targetContainer).hasClass(targetClass)) {\n        $(targetContainer).removeClass(targetClass);\n      } else if (sidebarProgress !== true) {\n        $(targetContainer).addClass(targetClass);\n      } else {\n        sidebarProgress = false;\n      }\n      if ($(window).width() < 480) {\n        $('#page-container').removeClass('page-sidebar-toggled');\n      }\n      $(window).trigger('resize');\n    });\n    $('[data-click=sidebar-toggled]').click(function (e) {\n      e.stopPropagation();\n      let sidebarClass = 'page-sidebar-toggled';\n      let targetContainer = '#page-container';\n      if ($(targetContainer).hasClass(sidebarClass)) {\n        $(targetContainer).removeClass(sidebarClass);\n      } else if (sidebarProgress !== true) {\n        $(targetContainer).addClass(sidebarClass);\n      } else {\n        sidebarProgress = false;\n      }\n      if ($(window).width() < 480) {\n        $('#page-container').removeClass('page-right-sidebar-toggled');\n      }\n    });\n  };\n\n  /* 05. Handle Page Load - fade show\n  ------------------------------------------------ */\n  let handlePageContentView = function () {\n    \"use strict\";\n\n    let hideClass = '';\n    let showClass = '';\n    let bootstrapVersion = handleCheckBootstrapVersion();\n    if (bootstrapVersion >= 3 && bootstrapVersion < 4) {\n      hideClass = 'hide';\n      showClass = 'in';\n    } else if (bootstrapVersion >= 4 && bootstrapVersion <= 5) {\n      hideClass = 'd-none';\n      showClass = 'show';\n    }\n    $(window).on('load', function () {\n      $.when($('#page-loader').addClass(hideClass)).done(function () {\n        $('#page-container').addClass(showClass);\n      });\n    });\n  };\n\n  /* 06. Handle Panel - Remove / Reload / Collapse / Expand\n  ------------------------------------------------ */\n  let panelActionRunning = false;\n  let handlePanelAction = function () {\n    \"use strict\";\n\n    if (panelActionRunning) {\n      return false;\n    }\n    panelActionRunning = true;\n\n    // remove\n    $(document).on('hover', '[data-click=panel-remove]', function (e) {\n      if (!$(this).attr('data-init')) {\n        $(this).tooltip({\n          title: 'Remove',\n          placement: 'bottom',\n          trigger: 'hover',\n          container: 'body'\n        });\n        $(this).tooltip('show');\n        $(this).attr('data-init', true);\n      }\n    });\n    $(document).on('click', '[data-click=panel-remove]', function (e) {\n      e.preventDefault();\n      let bootstrapVersion = handleCheckBootstrapVersion();\n      if (bootstrapVersion >= 4 && bootstrapVersion < 5) {\n        $(this).tooltip('dispose');\n      } else {\n        $(this).tooltip('destroy');\n      }\n      $(this).closest('.panel').remove();\n    });\n\n    // collapse\n    $(document).on('hover', '[data-click=panel-collapse]', function (e) {\n      if (!$(this).attr('data-init')) {\n        $(this).tooltip({\n          title: 'Collapse / Expand',\n          placement: 'bottom',\n          trigger: 'hover',\n          container: 'body'\n        });\n        $(this).tooltip('show');\n        $(this).attr('data-init', true);\n      }\n    });\n    $(document).on('click', '[data-click=panel-collapse]', function (e) {\n      e.preventDefault();\n      $(this).closest('.panel').find('.panel-body').slideToggle();\n    });\n\n    // reload\n    $(document).on('hover', '[data-click=panel-reload]', function (e) {\n      if (!$(this).attr('data-init')) {\n        $(this).tooltip({\n          title: 'Reload',\n          placement: 'bottom',\n          trigger: 'hover',\n          container: 'body'\n        });\n        $(this).tooltip('show');\n        $(this).attr('data-init', true);\n      }\n    });\n    $(document).on('click', '[data-click=panel-reload]', function (e) {\n      e.preventDefault();\n      let target = $(this).closest('.panel');\n      if (!$(target).hasClass('panel-loading')) {\n        let targetBody = $(target).find('.panel-body');\n        let spinnerHtml = '<div class=\"panel-loader\"><span class=\"spinner-small\"></span></div>';\n        $(target).addClass('panel-loading');\n        $(targetBody).prepend(spinnerHtml);\n        setTimeout(function () {\n          $(target).removeClass('panel-loading');\n          $(target).find('.panel-loader').remove();\n        }, 2000);\n      }\n    });\n\n    // expand\n    $(document).on('hover', '[data-click=panel-expand]', function (e) {\n      if (!$(this).attr('data-init')) {\n        $(this).tooltip({\n          title: 'Expand / Compress',\n          placement: 'bottom',\n          trigger: 'hover',\n          container: 'body'\n        });\n        $(this).tooltip('show');\n        $(this).attr('data-init', true);\n      }\n    });\n    $(document).on('click', '[data-click=panel-expand]', function (e) {\n      e.preventDefault();\n      let target = $(this).closest('.panel');\n      let targetBody = $(target).find('.panel-body');\n      let targetTop = 40;\n      if ($(targetBody).length !== 0) {\n        let targetOffsetTop = $(target).offset().top;\n        let targetBodyOffsetTop = $(targetBody).offset().top;\n        targetTop = targetBodyOffsetTop - targetOffsetTop;\n      }\n      if ($('body').hasClass('panel-expand') && $(target).hasClass('panel-expand')) {\n        $('body, .panel').removeClass('panel-expand');\n        $('.panel').removeAttr('style');\n        $(targetBody).removeAttr('style');\n      } else {\n        $('body').addClass('panel-expand');\n        $(this).closest('.panel').addClass('panel-expand');\n        if ($(targetBody).length !== 0 && targetTop !== 40) {\n          let finalHeight = 40;\n          $(target).find(' > *').each(function () {\n            let targetClass = $(this).attr('class');\n            if (targetClass !== 'panel-heading' && targetClass !== 'panel-body') {\n              finalHeight += $(this).height() + 30;\n            }\n          });\n          if (finalHeight !== 40) {\n            $(targetBody).css('top', finalHeight + 'px');\n          }\n        }\n      }\n      $(window).trigger('resize');\n      if (window.dispatchEvent) window.dispatchEvent(new Event('resize'));\n    });\n  };\n\n  /* 07. Handle Panel - Draggable\n  ------------------------------------------------ */\n  let handleDraggablePanel = function () {\n    \"use strict\";\n\n    let target = $('.panel:not([data-sortable=\"false\"])').parent('[class*=col]');\n    let targetHandle = '.panel-heading';\n    let connectedTarget = '.row > [class*=col]';\n    $(target).sortable({\n      handle: targetHandle,\n      connectWith: connectedTarget,\n      stop: function (event, ui) {\n        ui.item.find('.panel-title').append('<i class=\"fas fa-sync white fa-spin m-l-5\" data-id=\"title-spinner\"></i>');\n        handleSavePanelPosition(ui.item);\n      }\n    });\n  };\n\n  /* 08. Handle Tooltip & Popover Activation\n  ------------------------------------------------ */\n  let handleTooltipPopoverActivation = function () {\n    \"use strict\";\n\n    // TESTABLE MOD\n    $('[data-bs-toggle=\"popover\"]').popover({\n      container: 'body',\n      trigger: 'hover',\n      boundary: 'window'\n    });\n    $('[data-bs-toggle-second=\"popover\"]').popover({\n      container: 'body',\n      trigger: 'hover',\n      boundary: 'window'\n    });\n    $('[data-bs-toggle=\"tooltip\"]').tooltip({\n      container: 'body',\n      boundary: 'window',\n      delay: 500\n    });\n    $('[data-bs-toggle-second=\"tooltip\"]').tooltip({\n      container: 'body',\n      boundary: 'window',\n      delay: 500\n    });\n  };\n\n  /* 09. Handle Scroll to Top Button Activation\n  ------------------------------------------------ */\n  let handleScrollToTopButton = function () {\n    \"use strict\";\n\n    let bootstrapVersion = handleCheckBootstrapVersion();\n    let showClass = '';\n    if (bootstrapVersion >= 3 && bootstrapVersion < 4) {\n      showClass = 'in';\n    } else if (bootstrapVersion >= 4 && bootstrapVersion < 5) {\n      showClass = 'show';\n    }\n    $(document).scroll(function () {\n      let totalScroll = $(document).scrollTop();\n      if (totalScroll >= 200) {\n        $('[data-click=scroll-top]').addClass(showClass);\n      } else {\n        $('[data-click=scroll-top]').removeClass(showClass);\n      }\n    });\n    $('[data-click=scroll-top]').click(function (e) {\n      e.preventDefault();\n      $('html, body').animate({\n        scrollTop: $(\"body\").offset().top\n      }, 500);\n    });\n  };\n  /* 11. Handle Theme Panel Expand - added in V1.2\n  ------------------------------------------------ */\n  let handleThemePanelExpand = function () {\n    $(document).on('click', '[data-click=\"theme-panel-expand\"]', function () {\n      let targetContainer = '.theme-panel';\n      let targetClass = 'active';\n      if ($(targetContainer).hasClass(targetClass)) {\n        $(targetContainer).removeClass(targetClass);\n      } else {\n        $(targetContainer).addClass(targetClass);\n      }\n    });\n  };\n\n  /* 13. Handle Save Panel Position Function - added in V1.5\n  ------------------------------------------------ */\n  let handleSavePanelPosition = function (element) {\n    \"use strict\";\n\n    if ($('.ui-sortable').length !== 0) {\n      let newValue = [];\n      let index = 0;\n      $.when($('.ui-sortable').each(function () {\n        let panelSortableElement = $(this).find('[data-sortable-id]');\n        if (panelSortableElement.length !== 0) {\n          let columnValue = [];\n          $(panelSortableElement).each(function () {\n            let targetSortId = $(this).attr('data-sortable-id');\n            columnValue.push({\n              id: targetSortId\n            });\n          });\n          newValue.push(columnValue);\n        } else {\n          newValue.push([]);\n        }\n        index++;\n      })).done(function () {\n        let targetPage = window.location.href;\n        targetPage = targetPage.split('?');\n        targetPage = targetPage[0];\n        localStorage.setItem(targetPage, JSON.stringify(newValue));\n        $(element).find('[data-id=\"title-spinner\"]').delay(500).fadeOut(500, function () {\n          $(this).remove();\n        });\n      });\n    }\n  };\n\n  /* 14. Handle Draggable Panel Local Storage Function - added in V1.5\n  ------------------------------------------------ */\n  let handleLocalStorage = function () {\n    \"use strict\";\n\n    if (typeof Storage !== 'undefined' && typeof localStorage !== 'undefined') {\n      let targetPage = window.location.href;\n      targetPage = targetPage.split('?');\n      targetPage = targetPage[0];\n      let panelPositionData = localStorage.getItem(targetPage);\n      if (panelPositionData) {\n        panelPositionData = JSON.parse(panelPositionData);\n        let i = 0;\n        $.when($('.panel:not([data-sortable=\"false\"])').parent('[class*=\"col-\"]').each(function () {\n          let storageData = panelPositionData[i];\n          let targetColumn = $(this);\n          if (storageData) {\n            $.each(storageData, function (index, data) {\n              let targetId = $('[data-sortable-id=\"' + data.id + '\"]').not('[data-init=\"true\"]');\n              if ($(targetId).length !== 0) {\n                let targetHtml = $(targetId).clone();\n                $(targetId).remove();\n                $(targetColumn).append(targetHtml);\n                $('[data-sortable-id=\"' + data.id + '\"]').attr('data-init', 'true');\n              }\n            });\n          }\n          i++;\n        })).done(function () {\n          window.dispatchEvent(new CustomEvent('localstorage-position-loaded'));\n        });\n      }\n    } else {\n      alert('Your browser is not supported with the local storage');\n    }\n  };\n\n  /* 15. Handle Reset Local Storage - added in V1.5\n  ------------------------------------------------ */\n  let handleResetLocalStorage = function () {\n    \"use strict\";\n\n    $(document).on('click', '[data-click=reset-local-storage]', function (e) {\n      e.preventDefault();\n      let targetModalHtml = '' + '<div class=\"modal fade\" data-modal-id=\"reset-local-storage-confirmation\">' + '    <div class=\"modal-dialog\">' + '        <div class=\"modal-content\">' + '            <div class=\"modal-header\">' + '                <h4 class=\"modal-title\"><i class=\"fa fa-redo m-r-5\"></i> Reset Local Storage Confirmation</h4>' + '                <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">×</button>' + '            </div>' + '            <div class=\"modal-body\">' + '                <div class=\"alert alert-info m-b-0\">Would you like to RESET all your saved widgets and clear Local Storage?</div>' + '            </div>' + '            <div class=\"modal-footer\">' + '                <a href=\"javascript:;\" class=\"btn btn-sm btn-default\" data-bs-dismiss=\"modal\"><i class=\"fa fa-times\"></i> No</a>' + '                <a href=\"javascript:;\" class=\"btn btn-sm btn-inverse\" data-click=\"confirm-reset-local-storage\"><i class=\"fa fa-check\"></i> Yes</a>' + '            </div>' + '        </div>' + '    </div>' + '</div>';\n      $('body').append(targetModalHtml);\n      $('[data-modal-id=\"reset-local-storage-confirmation\"]').modal('show');\n    });\n    $(document).on('hidden.bs.modal', '[data-modal-id=\"reset-local-storage-confirmation\"]', function (e) {\n      $('[data-modal-id=\"reset-local-storage-confirmation\"]').remove();\n    });\n    $(document).on('click', '[data-click=confirm-reset-local-storage]', function (e) {\n      e.preventDefault();\n      let localStorageName = window.location.href;\n      localStorageName = localStorageName.split('?');\n      localStorageName = localStorageName[0];\n      localStorage.removeItem(localStorageName);\n      location.reload();\n    });\n  };\n\n  /* 16. Handle IE Full Height Page Compatibility - added in V1.6\n  ------------------------------------------------ */\n  let handleIEFullHeightContent = function () {\n    let userAgent = window.navigator.userAgent;\n    let msie = userAgent.indexOf(\"MSIE \");\n    if (msie > 0) {\n      $('.vertical-box-row [data-scrollbar=\"true\"][data-height=\"100%\"]').each(function () {\n        let targetRow = $(this).closest('.vertical-box-row');\n        let targetHeight = $(targetRow).height();\n        $(targetRow).find('.vertical-box-cell').height(targetHeight);\n      });\n    }\n  };\n\n  /* 17. Handle Unlimited Nav Tabs - added in V1.6\n  ------------------------------------------------ */\n  let handleUnlimitedTabsRender = function () {\n    // function handle tab overflow scroll width\n    function handleTabOverflowScrollWidth(obj, animationSpeed) {\n      let targetElm = 'li.active';\n      if ($(obj).find('li').first().hasClass('nav-item')) {\n        targetElm = $(obj).find('.nav-item .active').closest('li');\n      }\n      let targetCss = $('body').hasClass('rtl-mode') ? 'margin-right' : 'margin-left';\n      let marginLeft = parseInt($(obj).css(targetCss));\n      let viewWidth = $(obj).width();\n      let prevWidth = $(obj).find(targetElm).width();\n      let speed = animationSpeed > -1 ? animationSpeed : 150;\n      let fullWidth = 0;\n      $(obj).find(targetElm).prevAll().each(function () {\n        prevWidth += $(this).width();\n      });\n      $(obj).find('li').each(function () {\n        fullWidth += $(this).width();\n      });\n      if (prevWidth >= viewWidth) {\n        let finalScrollWidth = prevWidth - viewWidth;\n        if (fullWidth !== prevWidth) {\n          finalScrollWidth += 40;\n        }\n        if ($('body').hasClass('rtl-mode')) {\n          $(obj).find('.nav.nav-tabs').animate({\n            marginRight: '-' + finalScrollWidth + 'px'\n          }, speed);\n        } else {\n          $(obj).find('.nav.nav-tabs').animate({\n            marginLeft: '-' + finalScrollWidth + 'px'\n          }, speed);\n        }\n      }\n      if (prevWidth !== fullWidth && fullWidth >= viewWidth) {\n        $(obj).addClass('overflow-right');\n      } else {\n        $(obj).removeClass('overflow-right');\n      }\n      if (prevWidth >= viewWidth && fullWidth >= viewWidth) {\n        $(obj).addClass('overflow-left');\n      } else {\n        $(obj).removeClass('overflow-left');\n      }\n    }\n\n    // function handle tab button action - next / prev\n    function handleTabButtonAction(element, direction) {\n      let obj = $(element).closest('.tab-overflow');\n      let targetCss = $('body').hasClass('rtl-mode') ? 'margin-right' : 'margin-left';\n      let marginLeft = parseInt($(obj).find('.nav.nav-tabs').css(targetCss));\n      let containerWidth = $(obj).width();\n      let totalWidth = 0;\n      let finalScrollWidth = 0;\n      $(obj).find('li').each(function () {\n        if (!$(this).hasClass('next-button') && !$(this).hasClass('prev-button')) {\n          totalWidth += $(this).width();\n        }\n      });\n      switch (direction) {\n        case 'next':\n          {\n            let widthLeft = totalWidth + marginLeft - containerWidth;\n            if (widthLeft <= containerWidth) {\n              finalScrollWidth = widthLeft - marginLeft;\n              setTimeout(function () {\n                $(obj).removeClass('overflow-right');\n              }, 150);\n            } else {\n              finalScrollWidth = containerWidth - marginLeft - 80;\n            }\n            if (finalScrollWidth !== 0) {\n              if (!$('body').hasClass('rtl-mode')) {\n                $(obj).find('.nav.nav-tabs').animate({\n                  marginLeft: '-' + finalScrollWidth + 'px'\n                }, 150, function () {\n                  $(obj).addClass('overflow-left');\n                });\n              } else {\n                $(obj).find('.nav.nav-tabs').animate({\n                  marginRight: '-' + finalScrollWidth + 'px'\n                }, 150, function () {\n                  $(obj).addClass('overflow-left');\n                });\n              }\n            }\n            break;\n          }\n        case 'prev':\n          {\n            let widthLeft = -marginLeft;\n            if (widthLeft <= containerWidth) {\n              $(obj).removeClass('overflow-left');\n              finalScrollWidth = 0;\n            } else {\n              finalScrollWidth = widthLeft - containerWidth + 80;\n            }\n            if (!$('body').hasClass('rtl-mode')) {\n              $(obj).find('.nav.nav-tabs').animate({\n                marginLeft: '-' + finalScrollWidth + 'px'\n              }, 150, function () {\n                $(obj).addClass('overflow-right');\n              });\n            } else {\n              $(obj).find('.nav.nav-tabs').animate({\n                marginRight: '-' + finalScrollWidth + 'px'\n              }, 150, function () {\n                $(obj).addClass('overflow-right');\n              });\n            }\n            break;\n          }\n      }\n    }\n\n    // handle page load active tab focus\n    function handlePageLoadTabFocus() {\n      $('.tab-overflow').each(function () {\n        handleTabOverflowScrollWidth(this, 0);\n      });\n    }\n\n    // handle tab next button click action\n    $('[data-click=\"next-tab\"]').click(function (e) {\n      e.preventDefault();\n      handleTabButtonAction(this, 'next');\n    });\n\n    // handle tab prev button click action\n    $('[data-click=\"prev-tab\"]').click(function (e) {\n      e.preventDefault();\n      handleTabButtonAction(this, 'prev');\n    });\n\n    // handle unlimited tabs responsive setting\n    $(window).resize(function () {\n      $('.tab-overflow .nav.nav-tabs').removeAttr('style');\n      handlePageLoadTabFocus();\n    });\n    handlePageLoadTabFocus();\n  };\n\n  /* 18. Handle Top Menu - Unlimited Top Menu Render - added in V1.9\n  ------------------------------------------------ */\n  let handleUnlimitedTopMenuRender = function () {\n    \"use strict\";\n\n    // function handle menu button action - next / prev\n    function handleMenuButtonAction(element, direction) {\n      let obj = $(element).closest('.nav');\n      let targetCss = $('body').hasClass('rtl-mode') ? 'margin-right' : 'margin-left';\n      let marginLeft = parseInt($(obj).css(targetCss));\n      let containerWidth = $('.top-menu').width() - 88;\n      let totalWidth = 0;\n      let finalScrollWidth = 0;\n      $(obj).find('li').each(function () {\n        if (!$(this).hasClass('menu-control')) {\n          totalWidth += $(this).width();\n        }\n      });\n      switch (direction) {\n        case 'next':\n          {\n            let widthLeft = totalWidth + marginLeft - containerWidth;\n            if (widthLeft <= containerWidth) {\n              finalScrollWidth = widthLeft - marginLeft + 128;\n              setTimeout(function () {\n                $(obj).find('.menu-control.menu-control-right').removeClass('show');\n              }, 150);\n            } else {\n              finalScrollWidth = containerWidth - marginLeft - 128;\n            }\n            if (finalScrollWidth !== 0) {\n              if (!$('body').hasClass('rtl-mode')) {\n                $(obj).animate({\n                  marginLeft: '-' + finalScrollWidth + 'px'\n                }, 150, function () {\n                  $(obj).find('.menu-control.menu-control-left').addClass('show');\n                });\n              } else {\n                $(obj).animate({\n                  marginRight: '-' + finalScrollWidth + 'px'\n                }, 150, function () {\n                  $(obj).find('.menu-control.menu-control-left').addClass('show');\n                });\n              }\n            }\n            break;\n          }\n        case 'prev':\n          {\n            let widthLeft = -marginLeft;\n            if (widthLeft <= containerWidth) {\n              $(obj).find('.menu-control.menu-control-left').removeClass('show');\n              finalScrollWidth = 0;\n            } else {\n              finalScrollWidth = widthLeft - containerWidth + 88;\n            }\n            if (!$('body').hasClass('rtl-mode')) {\n              $(obj).animate({\n                marginLeft: '-' + finalScrollWidth + 'px'\n              }, 150, function () {\n                $(obj).find('.menu-control.menu-control-right').addClass('show');\n              });\n            } else {\n              $(obj).animate({\n                marginRight: '-' + finalScrollWidth + 'px'\n              }, 150, function () {\n                $(obj).find('.menu-control.menu-control-right').addClass('show');\n              });\n            }\n            break;\n          }\n      }\n    }\n\n    // handle page load active menu focus\n    function handlePageLoadMenuFocus() {\n      let targetMenu = $('.top-menu .nav');\n      let targetList = $('.top-menu .nav > li');\n      let targetActiveList = $('.top-menu .nav > li.active');\n      let targetContainer = $('.top-menu');\n      let targetCss = $('body').hasClass('rtl-mode') ? 'margin-right' : 'margin-left';\n      let marginLeft = parseInt($(targetMenu).css(targetCss));\n      let viewWidth = $(targetContainer).width() - 128;\n      let prevWidth = $('.top-menu .nav > li.active').width();\n      let speed = 0;\n      let fullWidth = 0;\n      $(targetActiveList).prevAll().each(function () {\n        prevWidth += $(this).width();\n      });\n      $(targetList).each(function () {\n        if (!$(this).hasClass('menu-control')) {\n          fullWidth += $(this).width();\n        }\n      });\n      if (prevWidth >= viewWidth) {\n        let finalScrollWidth = prevWidth - viewWidth + 128;\n        if (!$('body').hasClass('rtl-mode')) {\n          $(targetMenu).animate({\n            marginLeft: '-' + finalScrollWidth + 'px'\n          }, speed);\n        } else {\n          $(targetMenu).animate({\n            marginRight: '-' + finalScrollWidth + 'px'\n          }, speed);\n        }\n      }\n      if (prevWidth !== fullWidth && fullWidth >= viewWidth) {\n        $(targetMenu).find('.menu-control.menu-control-right').addClass('show');\n      } else {\n        $(targetMenu).find('.menu-control.menu-control-right').removeClass('show');\n      }\n      if (prevWidth >= viewWidth && fullWidth >= viewWidth) {\n        $(targetMenu).find('.menu-control.menu-control-left').addClass('show');\n      } else {\n        $(targetMenu).find('.menu-control.menu-control-left').removeClass('show');\n      }\n    }\n\n    // handle menu next button click action\n    $('[data-click=\"next-menu\"]').click(function (e) {\n      e.preventDefault();\n      handleMenuButtonAction(this, 'next');\n    });\n\n    // handle menu prev button click action\n    $('[data-click=\"prev-menu\"]').click(function (e) {\n      e.preventDefault();\n      handleMenuButtonAction(this, 'prev');\n    });\n\n    // handle unlimited menu responsive setting\n    $(window).resize(function () {\n      $('.top-menu .nav').removeAttr('style');\n      handlePageLoadMenuFocus();\n    });\n    handlePageLoadMenuFocus();\n  };\n\n  /* 19. Handle Top Menu - Sub Menu Toggle - added in V1.9\n  ------------------------------------------------ */\n  let handleTopMenuSubMenu = function () {\n    \"use strict\";\n\n    $('.top-menu .sub-menu .has-sub > a').click(function () {\n      let target = $(this).closest('li').find('.sub-menu').first();\n      let otherMenu = $(this).closest('ul').find('.sub-menu').not(target);\n      $(otherMenu).not(target).slideUp(250, function () {\n        $(this).closest('li').removeClass('expand');\n      });\n      $(target).slideToggle(250, function () {\n        let targetLi = $(this).closest('li');\n        if ($(targetLi).hasClass('expand')) {\n          $(targetLi).removeClass('expand');\n        } else {\n          $(targetLi).addClass('expand');\n        }\n      });\n    });\n  };\n\n  /* 20. Handle Top Menu - Mobile Sub Menu Toggle - added in V1.9\n  ------------------------------------------------ */\n  let handleMobileTopMenuSubMenu = function () {\n    \"use strict\";\n\n    $('.top-menu .nav > li.has-sub > a').click(function () {\n      if ($(window).width() <= 767) {\n        let target = $(this).closest('li').find('.sub-menu').first();\n        let otherMenu = $(this).closest('ul').find('.sub-menu').not(target);\n        $(otherMenu).not(target).slideUp(250, function () {\n          $(this).closest('li').removeClass('expand');\n        });\n        $(target).slideToggle(250, function () {\n          let targetLi = $(this).closest('li');\n          if ($(targetLi).hasClass('expand')) {\n            $(targetLi).removeClass('expand');\n          } else {\n            $(targetLi).addClass('expand');\n          }\n        });\n      }\n    });\n  };\n\n  /* 21. Handle Top Menu - Mobile Top Menu Toggle - added in V1.9\n  ------------------------------------------------ */\n  let handleTopMenuMobileToggle = function () {\n    \"use strict\";\n\n    $('[data-click=\"top-menu-toggled\"]').click(function () {\n      $('.top-menu').slideToggle(250);\n    });\n  };\n\n  /* 22. Handle Clear Sidebar Selection & Hide Mobile Menu - added in V1.9\n  ------------------------------------------------ */\n  let handleClearSidebarSelection = function () {\n    $('.sidebar .nav > li, .sidebar .nav .sub-menu').removeClass('expand').removeAttr('style');\n  };\n  let handleClearSidebarMobileSelection = function () {\n    $('#page-container').removeClass('page-sidebar-toggled');\n  };\n\n  /* 23. Handle Check Bootstrap Version - added in V4.0\n  ------------------------------------------------ */\n  let handleCheckBootstrapVersion = function () {\n    return parseInt($.fn.tooltip.Constructor.VERSION);\n  };\n\n  /* 24. Handle Page Scroll Class - added in V4.0\n  ------------------------------------------------ */\n  let handleCheckScrollClass = function () {\n    if ($(window).scrollTop() > 0) {\n      $('#page-container').addClass('has-scroll');\n    } else {\n      $('#page-container').removeClass('has-scroll');\n    }\n  };\n  let handlePageScrollClass = function () {\n    $(window).on('scroll', function () {\n      handleCheckScrollClass();\n    });\n    handleCheckScrollClass();\n  };\n\n  /* 25. Handle Toggle Navbar Profile - added in V4.0\n  ------------------------------------------------ */\n  let handleToggleNavProfile = function () {\n    let expandTime = $('.sidebar').attr('data-disable-slide-animation') ? 0 : 250;\n    $('[data-bs-toggle=\"nav-profile\"]').click(function (e) {\n      e.preventDefault();\n      let targetLi = $(this).closest('li');\n      let targetProfile = $('.sidebar .nav.nav-profile');\n      let targetClass = 'active';\n      let targetExpandingClass = 'expanding';\n      let targetExpandClass = 'expand';\n      let targetClosingClass = 'closing';\n      let targetClosedClass = 'closed';\n      if ($(targetProfile).is(':visible')) {\n        $(targetLi).removeClass(targetClass);\n        $(targetProfile).removeClass(targetClosingClass);\n      } else {\n        $(targetLi).addClass(targetClass);\n        $(targetProfile).addClass(targetExpandingClass);\n      }\n      $(targetProfile).slideToggle(expandTime, function () {\n        if (!$(targetProfile).is(':visible')) {\n          $(targetProfile).addClass(targetClosedClass);\n          $(targetProfile).removeClass(targetExpandClass);\n        } else {\n          $(targetProfile).addClass(targetExpandClass);\n          $(targetProfile).removeClass(targetClosedClass);\n        }\n        $(targetProfile).removeClass(targetExpandingClass + ' ' + targetClosingClass);\n      });\n    });\n  };\n\n  /* 27. Handle Sidebar Minify Sub Menu - added in V4.0\n  ------------------------------------------------ */\n  let floatSubMenuTimeout;\n  let targetFloatMenu;\n  let handleMouseoverFloatSubMenu = function (elm) {\n    clearTimeout(floatSubMenuTimeout);\n  };\n  let handleMouseoutFloatSubMenu = function (elm) {\n    floatSubMenuTimeout = setTimeout(function () {\n      $('#float-sub-menu').fadeOut(function () {\n        $(this).remove();\n      });\n    }, 150);\n  };\n  window.handleMouseoverFloatSubMenu = handleMouseoverFloatSubMenu;\n  window.handleMouseoutFloatSubMenu = handleMouseoutFloatSubMenu;\n  let handleSidebarMinifyFloatMenu = function () {\n    $(document).on('click', '#float-sub-menu li.has-sub > a', function (e) {\n      let target = $(this).next('.sub-menu');\n      let targetLi = $(target).closest('li');\n      let close = false;\n      let expand = false;\n      if ($(target).is(':visible')) {\n        $(targetLi).addClass('closing');\n        close = true;\n      } else {\n        $(targetLi).addClass('expanding');\n        expand = true;\n      }\n      $(target).slideToggle({\n        duration: 250,\n        progress: function () {\n          let targetMenu = $('#float-sub-menu');\n          let targetHeight = $(targetMenu).height();\n          let targetOffset = $(targetMenu).offset();\n          let targetOriTop = $(targetMenu).attr('data-bs-offset-top');\n          let targetMenuTop = $(targetMenu).attr('data-menu-offset-top');\n          let targetTop = targetOffset.top - $(window).scrollTop();\n          let windowHeight = $(window).height();\n          if (close) {\n            if (targetTop > targetOriTop) {\n              targetTop = targetTop > targetOriTop ? targetOriTop : targetTop;\n              $('#float-sub-menu').css({\n                'top': targetTop + 'px',\n                'bottom': 'auto'\n              });\n              $('#float-sub-menu-arrow').css({\n                'top': '20px',\n                'bottom': 'auto'\n              });\n              $('#float-sub-menu-line').css({\n                'top': '20px',\n                'bottom': 'auto'\n              });\n            }\n          }\n          if (expand) {\n            if (windowHeight - targetTop < targetHeight) {\n              let arrowBottom = windowHeight - targetMenuTop - 22;\n              $('#float-sub-menu').css({\n                'top': 'auto',\n                'bottom': 0\n              });\n              $('#float-sub-menu-arrow').css({\n                'top': 'auto',\n                'bottom': arrowBottom + 'px'\n              });\n              $('#float-sub-menu-line').css({\n                'top': '20px',\n                'bottom': arrowBottom + 'px'\n              });\n            }\n          }\n        },\n        complete: function () {\n          if ($(target).is(':visible')) {\n            $(targetLi).addClass('expand');\n          } else {\n            $(targetLi).addClass('closed');\n          }\n          $(targetLi).removeClass('closing expanding');\n        }\n      });\n    });\n    $('.sidebar .nav > li.has-sub > a').hover(function () {\n      if ($('#page-container').hasClass('page-sidebar-minified')) {\n        clearTimeout(floatSubMenuTimeout);\n        let targetMenu = $(this).closest('li').find('.sub-menu').first();\n        if (targetFloatMenu == this && $('#float-sub-menu').length !== 0) {\n          return;\n        } else {\n          targetFloatMenu = this;\n        }\n        let targetMenuHtml = $(targetMenu).html();\n        if (targetMenuHtml) {\n          let sidebarOffset = $('#sidebar').offset();\n          let sidebarX = !$('#page-container').hasClass('page-with-right-sidebar') ? sidebarOffset.left + 60 : $(window).width() - sidebarOffset.left;\n          let targetOffset = $(this).offset();\n          let targetTop = targetOffset.top - $(window).scrollTop();\n          let targetLeft = !$('#page-container').hasClass('page-with-right-sidebar') ? sidebarX : 'auto';\n          let targetRight = !$('#page-container').hasClass('page-with-right-sidebar') ? 'auto' : sidebarX;\n          let windowHeight = $(window).height();\n          if ($('#float-sub-menu').length === 0) {\n            targetMenuHtml = '' + '<div class=\"float-sub-menu-container\" id=\"float-sub-menu\" data-bs-offset-top=\"' + targetTop + '\" data-menu-offset-top=\"' + targetTop + '\" onmouseover=\"handleMouseoverFloatSubMenu(this)\" onmouseout=\"handleMouseoutFloatSubMenu(this)\">' + '\t<div class=\"float-sub-menu-arrow\" id=\"float-sub-menu-arrow\"></div>' + '\t<div class=\"float-sub-menu-line\" id=\"float-sub-menu-line\"></div>' + '\t<ul class=\"float-sub-menu\">' + targetMenuHtml + '</ul>' + '</div>';\n            $('#page-container').append(targetMenuHtml);\n          } else {\n            $('#float-sub-menu').attr('data-bs-offset-top', targetTop);\n            $('#float-sub-menu').attr('data-menu-offset-top', targetTop);\n            $('.float-sub-menu').html(targetMenuHtml);\n          }\n          let targetHeight = $('#float-sub-menu').height();\n          if (windowHeight - targetTop > targetHeight) {\n            $('#float-sub-menu').css({\n              'top': targetTop,\n              'left': targetLeft,\n              'bottom': 'auto',\n              'right': targetRight\n            });\n            $('#float-sub-menu-arrow').css({\n              'top': '20px',\n              'bottom': 'auto'\n            });\n            $('#float-sub-menu-line').css({\n              'top': '20px',\n              'bottom': 'auto'\n            });\n          } else {\n            $('#float-sub-menu').css({\n              'bottom': 0,\n              'top': 'auto',\n              'left': targetLeft,\n              'right': targetRight\n            });\n            let arrowBottom = windowHeight - targetTop - 21;\n            $('#float-sub-menu-arrow').css({\n              'top': 'auto',\n              'bottom': arrowBottom + 'px'\n            });\n            $('#float-sub-menu-line').css({\n              'top': '20px',\n              'bottom': arrowBottom + 'px'\n            });\n          }\n        } else {\n          $('#float-sub-menu').remove();\n          targetFloatMenu = '';\n        }\n      }\n    }, function () {\n      if ($('#page-container').hasClass('page-sidebar-minified')) {\n        floatSubMenuTimeout = setTimeout(function () {\n          $('#float-sub-menu').remove();\n          targetFloatMenu = '';\n        }, 250);\n      }\n    });\n  };\n\n  /* 28. Handle Ajax Mode - added in V4.0\n  ------------------------------------------------ */\n  let CLEAR_OPTION = '';\n  let handleAjaxMode = function (setting) {\n    let emptyHtml = setting.emptyHtml ? setting.emptyHtml : '<div class=\"p-t-40 p-b-40 text-center f-s-20 content\"><i class=\"fa fa-warning fa-lg text-muted m-r-5\"></i> <span class=\"f-w-600 text-inverse\">Error 404! Page not found.</span></div>';\n    let defaultUrl = setting.ajaxDefaultUrl ? setting.ajaxDefaultUrl : '';\n    defaultUrl = window.location.hash ? window.location.hash : defaultUrl;\n    if (defaultUrl === '') {\n      $('#content').html(emptyHtml);\n    } else {\n      renderAjax(defaultUrl, '', true);\n    }\n    function clearElement() {\n      $('.jvectormap-label, .jvector-label, .AutoFill_border ,#gritter-notice-wrapper, .ui-autocomplete, .colorpicker, .FixedHeader_Header, .FixedHeader_Cloned .lightboxOverlay, .lightbox, .introjs-hints, .nvtooltip, #float-sub-menu').remove();\n      if ($.fn.DataTable) {\n        $('.dataTable').DataTable().destroy();\n      }\n      if ($('#page-container').hasClass('page-sidebar-toggled')) {\n        $('#page-container').removeClass('page-sidebar-toggled');\n      }\n    }\n    function checkSidebarActive(url) {\n      let targetElm = '#sidebar [data-bs-toggle=\"ajax\"][href=\"' + url + '\"]';\n      if ($(targetElm).length !== 0) {\n        $('#sidebar li').removeClass('active');\n        $(targetElm).closest('li').addClass('active');\n        $(targetElm).parents().addClass('active');\n      }\n    }\n    function checkPushState(url) {\n      let targetUrl = url.replace('#', '');\n      let targetUserAgent = window.navigator.userAgent;\n      let isIE = targetUserAgent.indexOf('MSIE ');\n      if (isIE && isIE > 0 && isIE < 9) {\n        window.location.href = targetUrl;\n      } else {\n        history.pushState('', '', '#' + targetUrl);\n      }\n    }\n    function checkClearOption() {\n      if (CLEAR_OPTION) {\n        App.clearPageOption(CLEAR_OPTION);\n        CLEAR_OPTION = '';\n      }\n    }\n    function checkLoading(load) {\n      if (!load) {\n        if ($('#page-content-loader').length === 0) {\n          $('body').addClass('page-content-loading');\n          $('#content').append('<div id=\"page-content-loader\"><span class=\"spinner\"></span></div>');\n        }\n      } else {\n        $('#page-content-loader').remove();\n        $('body').removeClass('page-content-loading');\n      }\n    }\n    function renderAjax(url, elm, disablePushState) {\n      Pace.restart();\n      checkLoading(false);\n      clearElement();\n      checkSidebarActive(url);\n      checkClearOption();\n      if (!disablePushState) {\n        checkPushState(url);\n      }\n      let targetContainer = '#content';\n      let targetUrl = url.replace('#', '');\n      let targetType = setting.ajaxType ? setting.ajaxType : 'GET';\n      let targetDataType = setting.ajaxDataType ? setting.ajaxDataType : 'html';\n      if (elm) {\n        targetDataType = $(elm).attr('data-type') ? $(elm).attr('data-type') : targetDataType;\n      }\n      $.ajax({\n        url: targetUrl,\n        type: targetType,\n        dataType: targetDataType,\n        success: function (data) {\n          $(targetContainer).html(data);\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n          $(targetContainer).html(emptyHtml);\n        }\n      }).done(function () {\n        checkLoading(true);\n        $('html, body').animate({\n          scrollTop: 0\n        }, 0);\n        App.initComponent();\n      });\n    }\n    $(window).on('hashchange', function () {\n      if (window.location.hash) {\n        renderAjax(window.location.hash, '', true);\n      }\n    });\n    $(document).on('click', '[data-bs-toggle=\"ajax\"]', function (e) {\n      e.preventDefault();\n      renderAjax($(this).attr('href'), this);\n    });\n  };\n  let handleSetPageOption = function (option) {\n    if (option.pageContentFullHeight) {\n      $('#page-container').addClass('page-content-full-height');\n    }\n    if (option.pageSidebarLight) {\n      $('#page-container').addClass('page-with-light-sidebar');\n    }\n    if (option.pageSidebarRight) {\n      $('#page-container').addClass('page-with-right-sidebar');\n    }\n    if (option.pageSidebarWide) {\n      $('#page-container').addClass('page-with-wide-sidebar');\n    }\n    if (option.pageSidebarMinified) {\n      $('#page-container').addClass('page-sidebar-minified');\n    }\n    if (option.pageSidebarTransparent) {\n      $('#sidebar').addClass('sidebar-transparent');\n    }\n    if (option.pageContentFullWidth) {\n      $('#content').addClass('content-full-width');\n    }\n    if (option.pageContentInverseMode) {\n      $('#content').addClass('content-inverse-mode');\n    }\n    if (option.pageBoxedLayout) {\n      $('body').addClass('boxed-layout');\n    }\n    if (option.clearOptionOnLeave) {\n      CLEAR_OPTION = option;\n    }\n  };\n  let handleClearPageOption = function (option) {\n    if (option.pageContentFullHeight) {\n      $('#page-container').removeClass('page-content-full-height');\n    }\n    if (option.pageSidebarLight) {\n      $('#page-container').removeClass('page-with-light-sidebar');\n    }\n    if (option.pageSidebarRight) {\n      $('#page-container').removeClass('page-with-right-sidebar');\n    }\n    if (option.pageSidebarWide) {\n      $('#page-container').removeClass('page-with-wide-sidebar');\n    }\n    if (option.pageSidebarMinified) {\n      $('#page-container').removeClass('page-sidebar-minified');\n    }\n    if (option.pageSidebarTransparent) {\n      $('#sidebar').removeClass('sidebar-transparent');\n    }\n    if (option.pageContentFullWidth) {\n      $('#content').removeClass('content-full-width');\n    }\n    if (option.pageContentInverseMode) {\n      $('#content').removeClass('content-inverse-mode');\n    }\n    if (option.pageBoxedLayout) {\n      $('body').removeClass('boxed-layout');\n    }\n  };\n\n  /* 29. Handle Float Navbar Search - added in V4.0\n  ------------------------------------------------ */\n  let handleToggleNavbarSearch = function () {\n    $('[data-bs-toggle=\"navbar-search\"]').click(function (e) {\n      e.preventDefault();\n      $('.header').addClass('header-search-toggled');\n    });\n    $('[data-bs-dismiss=\"navbar-search\"]').click(function (e) {\n      e.preventDefault();\n      $('.header').removeClass('header-search-toggled');\n    });\n  };\n\n  /* Application Controller\n  ------------------------------------------------ */\n  let App = function () {\n    \"use strict\";\n\n    let setting;\n    return {\n      //main function\n      init: function (option) {\n        if (option) {\n          setting = option;\n        }\n        this.initLocalStorage();\n        this.initTopMenu();\n        this.initComponent();\n        this.initThemePanel();\n        this.initPageLoad();\n        $(window).trigger('load');\n        if (setting && setting.ajaxMode) {\n          this.initAjax();\n        }\n        $(document).ajaxError(function (event, request, settings) {\n          if (request.status === 401) {\n            if (location.search.indexOf('reload=true') === -1) {\n              const newUrl = `${location.href}${location.href.indexOf('?') !== -1 ? '&' : '?'}reload=true`;\n              history.replaceState(null, null, newUrl);\n              location.reload();\n            } else {\n              window.location.href = '/';\n            }\n          }\n        });\n      },\n      initSidebar: function () {\n        handleSidebarMenu();\n        handleMobileSidebarToggle();\n        handleSidebarMinifyFloatMenu();\n        handleToggleNavProfile();\n        handleToggleNavbarSearch();\n      },\n      initSidebarSelection: function () {\n        handleClearSidebarSelection();\n      },\n      initSidebarMobileSelection: function () {\n        handleClearSidebarMobileSelection();\n      },\n      initTopMenu: function () {\n        handleUnlimitedTopMenuRender();\n        handleTopMenuSubMenu();\n        handleMobileTopMenuSubMenu();\n        handleTopMenuMobileToggle();\n      },\n      initPageLoad: function () {\n        handlePageContentView();\n      },\n      initComponent: function () {\n        if (!setting || setting && !setting.disableDraggablePanel) {\n          handleDraggablePanel();\n        }\n        handleIEFullHeightContent();\n        handleUnlimitedTabsRender();\n        handlePanelAction();\n        handleTooltipPopoverActivation();\n        handleScrollToTopButton();\n        handlePageScrollClass();\n      },\n      initLocalStorage: function () {\n        handleLocalStorage();\n      },\n      initThemePanel: function () {\n        handleThemePanelExpand();\n        handleResetLocalStorage();\n      },\n      initAjax: function () {\n        handleAjaxMode(setting);\n        $.ajaxSetup({\n          cache: true\n        });\n      },\n      setPageTitle: function (pageTitle) {\n        document.title = pageTitle;\n      },\n      setPageOption: function (option) {\n        handleSetPageOption(option);\n      },\n      clearPageOption: function (option) {\n        handleClearPageOption(option);\n      },\n      restartGlobalFunction: function () {\n        this.initLocalStorage();\n        this.initTopMenu();\n        this.initComponent();\n      },\n      scrollTop: function () {\n        $('html, body').animate({\n          scrollTop: $('body').offset().top\n        }, 0);\n      }\n    };\n  }();\n  let setupBootstrapAndMutations = function (_this) {\n    (0, _runloop.scheduleOnce)('afterRender', () => {\n      $('#loading').remove();\n      _lib.default.modalPosition();\n      _lib.default.setupAllToggles();\n      App.init();\n      $('.btn-group .btn.disabled').click(function (event) {\n        event.stopPropagation();\n      });\n      $(document).on('click', '[data-ember-path]', function (e) {\n        let path = $(e.target).closest('a').data('ember-path');\n        let id = $(e.target).closest('a').data('ember-id');\n        _this.router.transitionTo(path, id);\n      });\n      _lib.default.setupHeaderSize();\n      _lib.default.setupPrintRelatedCode(_this.EventBus);\n    });\n    $.fn.tooltip.Constructor.Default.allowList['dl'] = [];\n    $.fn.tooltip.Constructor.Default.allowList['dt'] = [];\n    $.fn.tooltip.Constructor.Default.allowList['dd'] = [];\n    $(document).on('afterLoad.fb', function (e, instance) {\n      const triggerElem = instance.group[0].opts.modalId;\n      if (triggerElem) {\n        const modalElement = document.getElementById(triggerElem);\n        const modal = bootstrap.Modal.getInstance(modalElement);\n        if (modal && modal._config.keyboard) {\n          modal._config.keyboard = false;\n        }\n      }\n    });\n    $(document).on('beforeClose.fb', function (e, instance) {\n      const triggerElem = instance.group[0].opts.modalId;\n      if (triggerElem) {\n        const modalElement = document.getElementById(triggerElem);\n        const modal = bootstrap.Modal.getInstance(modalElement);\n        if (modal && !modal._config.keyboard) {\n          modal._config.keyboard = true;\n        }\n      }\n    });\n    if (_environment.config.isDev) {\n      window.Parsley.on('field:error', function () {\n        // This global callback will be called for any field that fails validation.\n        console.log('Validation failed for: ', this.$element);\n      });\n    }\n    const initializedNodes = new WeakSet();\n    const initializeTooltip = node => {\n      const title = node.getAttribute('title') || node.getAttribute('data-bs-title') || node.getAttribute('data-bs-original-title');\n\n      // Bootstrap normalizes data attributes with JSON.parse. Passing the title\n      // explicitly keeps JSON-looking tooltip text as a string instead of\n      // turning it into an object that fails Bootstrap's type check.\n      return title === null ? new bootstrap.Tooltip(node) : new bootstrap.Tooltip(node, {\n        title\n      });\n    };\n    const initializeBootstrap = childNode => {\n      const node = childNode.tagName === 'svg' ? childNode.parentNode : childNode;\n      if (!node.getAttribute) return;\n      if (node.getAttribute('data-bs-toggle') === 'popover' || node.getAttribute('data-bs-toggle-second') === 'popover') {\n        new bootstrap.Popover(node);\n        initializedNodes.add(node);\n      } else if (node.getAttribute('data-bs-toggle') === 'tooltip' || node.getAttribute('data-bs-toggle-second') === 'tooltip') {\n        initializeTooltip(node);\n        initializedNodes.add(node);\n      }\n      for (let i = 0; i < node.getElementsByTagName('*').length; i++) {\n        const nestedNode = node.getElementsByTagName('*')[i];\n        const title = nestedNode.getAttribute('title') || nestedNode.getAttribute('data-bs-title') || nestedNode.getAttribute('data-bs-original-title');\n        if (!initializedNodes.has(nestedNode)) {\n          if (nestedNode.getAttribute('data-bs-toggle') === 'popover' || nestedNode.getAttribute('data-bs-toggle-second') === 'popover') {\n            try {\n              new bootstrap.Popover(nestedNode);\n              initializedNodes.add(nestedNode);\n            } catch (error) {\n              const stack = new Error().stack;\n              const message = `Error initializing popover for: ${nestedNode.outerHTML} - ${error.message}`;\n              if (_environment.config.environment === 'development') console.warn(message, error);\n              if (!['test', 'local'].includes(_environment.config.environment)) {\n                _this.api.admin.createFeError({\n                  stack,\n                  message\n                });\n              }\n            }\n          } else if (nestedNode.getAttribute('data-bs-toggle') === 'tooltip' || nestedNode.getAttribute('data-bs-toggle-second') === 'tooltip') {\n            try {\n              if (title !== null && typeof title !== 'string' && !(title instanceof Element) && typeof title !== 'function') {\n                let titleString;\n                try {\n                  titleString = JSON.stringify(title); // Attempt to convert to string\n                } catch (jsonError) {\n                  titleString = String(title); // Fallback to String conversion if JSON fails\n                }\n                const message = `Invalid title type for tooltip: ${nestedNode.outerHTML} - Title: ${titleString}`;\n                if (_environment.config.environment === 'development') console.warn(message);\n                if (!['test', 'local'].includes(_environment.config.environment)) {\n                  _this.api.admin.createFeError({\n                    stack: new Error().stack,\n                    message\n                  });\n                }\n              } else {\n                initializeTooltip(nestedNode);\n                initializedNodes.add(nestedNode);\n              }\n            } catch (error) {\n              const stack = new Error().stack;\n              const message = `Error initializing tooltip for: ${nestedNode.outerHTML} - ${error.message}`;\n              if (_environment.config.environment === 'development') console.warn(message, error);\n              if (!['test', 'local'].includes(_environment.config.environment)) {\n                _this.api.admin.createFeError({\n                  stack,\n                  message\n                });\n              }\n            }\n          }\n        }\n      }\n    };\n    const disposeTooltipIfExists = element => {\n      const type = element.getAttribute('data-bs-toggle') || element.getAttribute('data-bs-toggle-second');\n      if (!['tooltip', 'popover'].includes(type)) return;\n      const BootstrapComponent = type === 'tooltip' ? bootstrap.Tooltip : bootstrap.Popover;\n      const instance = BootstrapComponent.getInstance(element);\n      if (!instance) return;\n\n      // Bootstrap's hide callback reads instance state after the CSS transition.\n      // Disposing before that callback completes nulls the state and causes\n      // Tooltip._isWithActiveTrigger() to throw.\n      if (instance.tip) {\n        const hiddenEvent = `hidden.bs.${type}`;\n        const dispose = () => {\n          element.removeEventListener(hiddenEvent, dispose);\n          BootstrapComponent.getInstance(element)?.dispose();\n        };\n        element.addEventListener(hiddenEvent, dispose, {\n          once: true\n        });\n        instance.hide();\n        return;\n      }\n      instance.dispose();\n    };\n    const observer = new MutationObserver(function (mutations) {\n      mutations.forEach(function (mutation) {\n        mutation.addedNodes.forEach(node => {\n          if (node.nodeType === Node.TEXT_NODE) {\n            if (node.nodeValue.includes('data-toggle=\"popover\"') || node.nodeValue.includes('data-toggle=\"tooltip\"') || node.nodeValue.includes('data-bs-toggle=\"popover\"') || node.nodeValue.includes('data-bs-toggle=\"tooltip\"')) {\n              const template = document.createElement('template');\n              template.innerHTML = node.nodeValue.trim();\n              const fragment = document.createDocumentFragment();\n              while (template.content.firstChild) {\n                const newNode = template.content.firstChild;\n                if (!initializedNodes.has(newNode)) {\n                  initializeBootstrap(newNode);\n                }\n                fragment.appendChild(newNode);\n              }\n              if (node.parentNode !== null) node.parentNode.replaceChild(fragment, node);\n            }\n            return;\n          }\n          if (node.nodeType === Node.ELEMENT_NODE && !initializedNodes.has(node)) {\n            initializeBootstrap(node);\n          }\n          if (node.id === 'ember-right-click-menu-wormhole') {\n            startRightClickMutationObserver(node);\n          }\n        });\n        mutation.removedNodes.forEach(node => {\n          if (node.nodeType === Node.ELEMENT_NODE) {\n            disposeTooltipIfExists(node);\n            // Recursively check child nodes\n            node.querySelectorAll('[data-bs-toggle=\"tooltip\"], [data-bs-toggle=\"popover\"], [data-bs-toggle-second=\"tooltip\"], [data-bs-toggle-second=\"popover\"]').forEach(child => {\n              disposeTooltipIfExists(child);\n            });\n          }\n        });\n      });\n    });\n\n    // Start observer\n    observer.observe(document.body, {\n      childList: true,\n      attributes: true,\n      attributeOldValue: true,\n      characterData: true,\n      subtree: true\n    });\n\n    // disable mousewheel on a input number field when in focus\n    // (to prevent Chromium browsers change the value when scrolling)\n    $('body').on('focus', 'input[type=number]', function () {\n      $(this).on('wheel.disableScroll', function (e) {\n        e.preventDefault();\n      });\n    });\n    $('body').on('blur', 'input[type=number]', function () {\n      $(this).off('wheel.disableScroll');\n    });\n  };\n  var _default = _exports.default = {\n    initializeSidebar: function () {\n      App.initSidebar();\n    },\n    setupBootstrapAndMutations,\n    handleTooltipPopoverActivation: handleTooltipPopoverActivation\n  };\n});","define(\"@testable/shared-ui/utils/auth\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    extractParams(params, toExtract) {\n      let extractedParams = {};\n      for (let k in params) {\n        // Loop through the object\n        if (~k.indexOf(toExtract)) {\n          // if it is any password\n          extractedParams[k] = params[k]; // get the key and its value\n        }\n      }\n      return extractedParams;\n    }\n  };\n});","define(\"@testable/shared-ui/utils/auto-queue\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  class Queue {\n    constructor() {\n      this._items = [];\n    }\n    enqueue(item) {\n      this._items.push(item);\n    }\n    dequeue() {\n      return this._items.shift();\n    }\n    get size() {\n      return this._items.length;\n    }\n  }\n  class AutoQueue extends Queue {\n    constructor() {\n      super();\n      this._pendingPromise = false;\n    }\n    enqueue(action) {\n      return new Promise((resolve, reject) => {\n        super.enqueue({\n          action,\n          resolve,\n          reject\n        });\n        this.dequeue();\n      });\n    }\n    async dequeue() {\n      if (this._pendingPromise) return false;\n      let item = super.dequeue();\n      if (!item) return false;\n      try {\n        this._pendingPromise = true;\n        let payload = await item.action(this);\n        this._pendingPromise = false;\n        item.resolve(payload);\n      } catch (e) {\n        this._pendingPromise = false;\n        item.reject(e);\n      } finally {\n        this.dequeue();\n      }\n      return true;\n    }\n  }\n  var _default = _exports.default = AutoQueue;\n});","define(\"@testable/shared-ui/utils/aws\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function findAwsPublicProvider(providers) {\n    return _.find(providers, function (provider) {\n      return provider.public && provider.source === 'Aws' && provider.providerType === 'OnDemand';\n    });\n  }\n  var _default = _exports.default = {\n    findAwsPublicProvider: findAwsPublicProvider\n  };\n});","define(\"@testable/shared-ui/utils/azure\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function findAzurePublicProvider(providers) {\n    return _.find(providers, function (provider) {\n      return provider.public && provider.source === 'Azure' && provider.providerType === 'OnDemand';\n    });\n  }\n  var _default = _exports.default = {\n    findAzurePublicProvider: findAzurePublicProvider\n  };\n});","define(\"@testable/shared-ui/utils/cookie-consent\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const COOKIEYES_SCRIPT_ID = 'cookieyes';\n  const COOKIEYES_SCRIPT_URL = 'https://cdn-cookieyes.com/client_data/8616061527b209ae3a2ad50c/script.js';\n  var _default = _exports.default = {\n    init() {\n      if (document.getElementById(COOKIEYES_SCRIPT_ID)) return;\n      const script = document.createElement('script');\n      script.src = COOKIEYES_SCRIPT_URL;\n      script.id = COOKIEYES_SCRIPT_ID;\n      script.type = 'text/javascript';\n      document.head.appendChild(script);\n    },\n    remove() {\n      const script = document.getElementById(COOKIEYES_SCRIPT_ID);\n      if (script) script.remove();\n    }\n  };\n});","define(\"@testable/shared-ui/utils/dashboards\", [\"exports\", \"@testable/shared-ui/utils/load-test\", \"tracked-built-ins\"], function (_exports, _loadTest, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/load-test\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  const DashboardVersion = 2;\n  const PercentSuffix = '-percent';\n  const DefaultLoadDashboard = createDefaultLoadDashboard();\n  const DefaultFunctionalDashboard = createDefaultFunctionalDashboard();\n  function getDefaultDashboard(testType) {\n    return _.cloneDeep(testType && testType !== 'Load' ? DefaultFunctionalDashboard : DefaultLoadDashboard);\n  }\n  function createDefaultDashboard(testType) {\n    const dashboard = testType && testType !== 'Load' ? createDefaultFunctionalDashboard() : createDefaultLoadDashboard();\n    if (dashboard.config?.order) {\n      dashboard.config.order = new _trackedBuiltIns.TrackedArray(dashboard.config.order);\n    }\n    if (dashboard.config) {\n      dashboard.config.settings = new _trackedBuiltIns.TrackedObject(dashboard.config.settings || {});\n      dashboard.config = new _trackedBuiltIns.TrackedObject(dashboard.config);\n    }\n    return dashboard;\n  }\n  function createDefaultLoadDashboard() {\n    return {\n      id: 0,\n      name: 'Default',\n      description: 'System default view',\n      public: true,\n      version: DashboardVersion,\n      isLoad: true,\n      config: {\n        settings: {\n          utilizationWarningThreshold: 80,\n          resultsType: 'thisRun',\n          period: 'recent',\n          limit: 15\n        },\n        charts: [{\n          id: 'overviewChart',\n          name: 'Overview',\n          chartType: 'Line',\n          showMetricValues: true,\n          hideMetricValuesInHistoryReport: true,\n          metrics: [{\n            title: 'Concurrents',\n            namespace: 'Testable',\n            name: 'maxConcurrentClients',\n            units: 'users',\n            selected: true,\n            useFailColor: true,\n            failColor: 'rgba(255,91,87,.3)'\n          }, {\n            title: 'Median Response',\n            namespace: 'Testable',\n            name: 'firstReceivedMs-p50',\n            units: 'ms',\n            selected: true\n          }, {\n            title: 'Throughput',\n            namespace: 'Testable',\n            name: 'bandwidth-countPerSec',\n            units: 'bytes/sec',\n            selected: false\n          }, {\n            title: 'Successful ' + '<div class=\"inline-info-icon\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\" ' + 'data-bs-html=\"true\" data-bs-content=\"A request is considered successful if a connection to the target is opened without error.  For <strong>HTTP</strong> requests, the response must also have a status code <strong>&amp;lt; 400</strong> to be considered successful.\" ' + 'data-bs-placement=\"auto\"><i class=\"fa fa-info-circle\"></i></div>',\n            namespace: 'Testable',\n            name: 'outcome-success' + PercentSuffix,\n            units: '%',\n            selected: true\n          }, {\n            title: '99th %ile Response',\n            namespace: 'Testable',\n            name: 'firstReceivedMs-p99',\n            units: 'ms',\n            selected: false\n          }, {\n            title: 'Peak Requests/Sec',\n            namespace: 'Testable',\n            name: 'peakRequestsPerSec',\n            units: 'req/sec',\n            selected: false\n          }]\n        }, {\n          id: 'responseInfoChart',\n          name: 'Response Breakdown',\n          chartType: 'Histogram',\n          metrics: [{\n            title: 'Response Codes',\n            namespace: 'Testable',\n            name: 'responseCode'\n          }, {\n            title: 'HTTP Methods',\n            namespace: 'Testable',\n            name: 'httpMethod'\n          }]\n        }, {\n          id: 'usageChart',\n          name: 'Test Runner Usage',\n          chartType: 'Metered',\n          showMetricValues: true,\n          metrics: [{\n            title: 'Peak Memory %',\n            namespace: 'Testable',\n            name: 'memoryUtilization',\n            units: '%',\n            selected: true\n          }, {\n            title: 'Peak CPU %',\n            namespace: 'Testable',\n            name: 'cpuUtilization',\n            units: '%',\n            selected: true\n          }, {\n            title: 'Peak Bandwidth',\n            namespace: 'Testable',\n            name: 'testRunnerBandwidth',\n            units: 'bytes/sec',\n            selected: false\n          }, {\n            title: 'Peak Connections',\n            namespace: 'Testable',\n            name: 'testRunnerConnections',\n            units: 'connections',\n            selected: false\n          }]\n        }],\n        console: {\n          level: 'Info',\n          wrap: true,\n          systemOnly: false\n        },\n        grid: {\n          showComparisons: true,\n          metrics: [{\n            title: 'Transactions',\n            namespace: 'Testable',\n            metric: 'count',\n            units: ''\n          }, {\n            title: 'Throughput',\n            namespace: 'Testable',\n            metric: 'bandwidth-countPerSec',\n            units: 'bytes/sec'\n          }, {\n            title: 'Median',\n            namespace: 'Testable',\n            metric: 'firstReceivedMs-p50',\n            units: 'ms'\n          }, {\n            title: '99th %ile',\n            namespace: 'Testable',\n            metric: 'firstReceivedMs-p99',\n            units: 'ms'\n          }, {\n            title: 'Successful',\n            namespace: 'Testable',\n            metric: 'outcome-success' + PercentSuffix,\n            units: '%'\n          }]\n        },\n        glance: {\n          showUserMetrics: true,\n          metrics: [{\n            title: 'Max Concurrent Users',\n            namespace: 'Testable',\n            metric: 'maxConcurrentClients',\n            units: 'users',\n            isDefault: true,\n            higherIsBetter: true,\n            amber: 10,\n            red: 25,\n            improved: 10\n          }, {\n            title: 'Median Response',\n            namespace: 'Testable',\n            metric: 'firstReceivedMs-p50',\n            units: 'ms',\n            isDefault: true,\n            higherIsBetter: false,\n            amber: 10,\n            red: 25,\n            improved: 10\n          }, {\n            title: 'Success Rate',\n            namespace: 'Testable',\n            metric: 'outcome-success' + PercentSuffix,\n            units: '%',\n            isDefault: true,\n            higherIsBetter: true,\n            amber: 10,\n            red: 25,\n            improved: 10\n          }]\n        },\n        order: [{\n          type: 'Glance',\n          id: 'glance'\n        }, {\n          type: 'SuiteSummaries',\n          id: 'suiteSummaries'\n        }, {\n          type: 'Chart',\n          id: 'overviewChart'\n        }, {\n          type: 'Grid',\n          id: 'grid'\n        }, {\n          type: 'Chart',\n          id: 'responseInfoChart'\n        }, {\n          type: 'Chart',\n          id: 'usageChart'\n        }]\n      }\n    };\n  }\n  function createDefaultFunctionalDashboard() {\n    return {\n      id: 0,\n      name: 'Default',\n      description: 'System default view',\n      public: true,\n      version: DashboardVersion,\n      isLoad: false,\n      config: {\n        settings: {\n          utilizationWarningThreshold: 80\n        },\n        charts: [{\n          id: 'overviewChart',\n          name: 'Overview',\n          chartType: 'Line',\n          showMetricValues: true,\n          showPFIndicator: true,\n          metrics: [{\n            title: 'Median Response',\n            namespace: 'Testable',\n            name: 'firstReceivedMs-p50',\n            units: 'ms',\n            graphType: 'line',\n            selected: true\n          }, {\n            title: 'Throughput',\n            namespace: 'Testable',\n            name: 'bandwidth-countPerSec',\n            graphType: 'line',\n            units: 'bytes/sec',\n            selected: false\n          }, {\n            title: 'Successful ' + '<div class=\"inline-info-icon\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover\" ' + 'data-bs-html=\"true\" data-bs-content=\"A request is considered successful if a connection to the target is opened without error.  For <strong>HTTP</strong> requests, the response must also have a status code <strong>&amp;lt; 400</strong> to be considered successful.\" ' + 'data-bs-placement=\"auto\"><i class=\"fa fa-info-circle\"></i></div>',\n            namespace: 'Testable',\n            name: 'outcome-success' + PercentSuffix,\n            units: '%',\n            graphType: 'line',\n            selected: true\n          }, {\n            title: '99th %ile Response',\n            namespace: 'Testable',\n            name: 'firstReceivedMs-p99',\n            units: 'ms',\n            graphType: 'line',\n            selected: false\n          }, {\n            title: 'Peak Test Runner CPU %',\n            namespace: 'Testable',\n            name: 'cpuUtilization-largest',\n            units: '%',\n            graphType: 'line',\n            selected: false,\n            color: '#FFCCCC'\n          }, {\n            title: 'Peak Test Runner Memory %',\n            namespace: 'Testable',\n            name: 'memoryUtilization-largest',\n            units: '%',\n            graphType: 'line',\n            selected: false,\n            color: '#00ab6f'\n          }]\n        }, {\n          id: 'responseInfoChart',\n          name: 'Response Breakdown',\n          chartType: 'Histogram',\n          metrics: [{\n            title: 'Response Codes',\n            namespace: 'Testable',\n            name: 'responseCode'\n          }, {\n            title: 'HTTP Methods',\n            namespace: 'Testable',\n            name: 'httpMethod'\n          }]\n        }],\n        console: {\n          level: 'Info',\n          wrap: true,\n          systemOnly: false\n        },\n        glance: {\n          showUserMetrics: true,\n          metrics: [{\n            title: 'Median Response',\n            namespace: 'Testable',\n            metric: 'firstReceivedMs-p50',\n            units: 'ms',\n            isDefault: true,\n            higherIsBetter: false,\n            amber: 10,\n            red: 25,\n            improved: 10\n          }, {\n            title: 'Success Rate',\n            namespace: 'Testable',\n            metric: 'outcome-success' + PercentSuffix,\n            units: '%',\n            isDefault: true,\n            higherIsBetter: true,\n            amber: 10,\n            red: 25,\n            improved: 10\n          }]\n        },\n        order: [{\n          type: 'Glance',\n          id: 'glance'\n        }, {\n          type: 'SuiteSummaries',\n          id: 'suiteSummaries'\n        }, {\n          type: 'Chart',\n          id: 'overviewChart'\n        }, {\n          type: 'Grid',\n          id: 'grid'\n        }, {\n          type: 'Chart',\n          id: 'responseInfoChart'\n        }]\n      }\n    };\n  }\n  function prepare(dashboard) {\n    if (dashboard && dashboard.config) {\n      _.forEach(dashboard.config.charts, function (chart) {\n        _.forEach(chart.metrics, function (metric) {\n          if (!metric.namespace) {\n            metric.namespace = _loadTest.default.getDefaultMetricNamepsace(metric.name);\n          }\n        });\n      });\n      if (dashboard.config.grid) _.forEach(dashboard.config.grid.metrics, function (metric) {\n        if (!metric.namespace) {\n          metric.namespace = _loadTest.default.getDefaultMetricNamepsace(metric.metric);\n        }\n      });\n      if (dashboard.config.glance && _.isArray(dashboard.config.glance)) {\n        dashboard.config.glance = {\n          showUserMetrics: false,\n          metrics: dashboard.config.glance\n        };\n      }\n      if (dashboard.config.glance) {\n        _.forEach(dashboard.config.glance.metrics, function (metric) {\n          if (!metric.namespace) {\n            metric.namespace = _loadTest.default.getDefaultMetricNamepsace(metric.metric);\n          }\n        });\n      }\n      if (dashboard.config.order) {\n        const glance = _.find(dashboard.config.order, function (portlet) {\n          return portlet.type === 'Glance';\n        });\n        const regionalResults = _.find(dashboard.config.order, function (portlet) {\n          return portlet.type === 'Regional Results';\n        });\n        if (regionalResults) {\n          if (glance) {\n            regionalResults.order.unshift(glance);\n          }\n          dashboard.config.order = regionalResults.order;\n        }\n        dashboard.config.order = new _trackedBuiltIns.TrackedArray(dashboard.config.order);\n      }\n      dashboard.config.settings = new _trackedBuiltIns.TrackedObject(dashboard.config.settings || {});\n      dashboard.config = new _trackedBuiltIns.TrackedObject(dashboard.config);\n    }\n  }\n  function getTestConfDashboard(testConf, revertToDefault) {\n    let isLoad = testConf.testType === 'Load';\n    let dashboard = testConf.dashboard || testConf.testCase && testConf.testCase[isLoad ? 'dashboard' : 'dashboardFunctional'] || testConf.testCase && testConf.testCase.organization && testConf.testCase.organization[isLoad ? 'dashboard' : 'dashboardFunctional'];\n    if (dashboard && _.isString(dashboard.config)) {\n      dashboard.config = JSON.parse(dashboard.config);\n    }\n    return _.cloneDeep(dashboard || (revertToDefault ? DefaultLoadDashboard : null));\n  }\n  function getDashboardOrder(element, target, subTarget) {\n    let order = [];\n    if (element.find(target).length !== 0) {\n      element.find(target).each(function () {\n        let targetSortId = $(this).attr('data-sortable-id');\n        let targetType = $(this).attr('data-type');\n        let subOrder = [];\n        if (_.isString(subTarget)) {\n          let subElements = $(this).find(subTarget);\n          if (subElements.length !== 0) {\n            $(subElements).each(function () {\n              let subSortId = $(this).attr('data-sortable-id');\n              let subType = $(this).attr('data-type');\n              if (_.isUndefined(_.find(subOrder, function (subOrderElem) {\n                return subOrderElem.id === subSortId;\n              }))) {\n                subOrder.push({\n                  id: subSortId,\n                  type: subType\n                });\n              }\n            });\n          }\n        }\n        if (_.isUndefined(_.find(order, function (orderVal) {\n          return orderVal.id === targetSortId;\n        }))) {\n          let orderVal = {\n            id: targetSortId,\n            type: targetType\n          };\n          if (subOrder.length > 0) {\n            orderVal.order = subOrder;\n          }\n          order.push(orderVal);\n        }\n      });\n    }\n    return order;\n  }\n  function toComparableState(config, reportSettings) {\n    const chartFields = ['id', 'name', 'chartType', 'showUserMetrics', 'showMetricValues', 'showPFIndicator', 'metrics'];\n    const metricFields = ['name', 'namespace', 'title', 'units', 'failColor', 'useFailColor'];\n    const sortKeys = v => Object.keys(v).sort().reduce((a, key) => {\n      a[key] = v[key];\n      return a;\n    }, {});\n    return JSON.stringify({\n      order: config.order || [],\n      charts: _.map(config.charts || [], c => ({\n        ..._.pick(c, chartFields),\n        metrics: _.map(c.metrics || [], m => _.pick(m, metricFields))\n      })),\n      grid: config.grid || null,\n      glance: config.glance ? {\n        visibility: 'thisRun',\n        ...config.glance\n      } : null,\n      console: config.console || null,\n      ...reportSettings\n    }, (k, v) => _.isPlainObject(v) ? sortKeys(v) : v);\n  }\n  var _default = _exports.default = {\n    DashboardVersion: DashboardVersion,\n    getDefaultDashboard: getDefaultDashboard,\n    getTestConfDashboard: getTestConfDashboard,\n    getDashboardOrder: getDashboardOrder,\n    createDefaultDashboard: createDefaultDashboard,\n    prepare: prepare,\n    toComparableState: toComparableState\n  };\n});","define(\"@testable/shared-ui/utils/data-store-utils\", [\"exports\", \"js-base64\", \"json-joy/lib/json-patch\"], function (_exports, _jsBase, _jsonPatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"js-base64\",0,\"json-joy/lib/json-patch\"eaimeta@70e063a35619d71f\n  /**\n   * Apply a content diff to the current file content.\n   *\n   * @param {string} currentContent - The current file content as a string.\n   * @param {{ encoding: string, data: string }} diff - The diff payload from the server.\n   * @returns {string} The new file content after applying the diff.\n   */\n  function applyContentDiff(currentContent, diff) {\n    switch (diff.encoding) {\n      case 'json-patch':\n        return applyJsonPatch(currentContent, diff.data);\n      case 'unified':\n        return applyUnifiedDiff(currentContent, diff.data);\n      case 'full':\n        return _jsBase.Base64.decode(diff.data);\n      default:\n        return currentContent;\n    }\n  }\n\n  /**\n   * Handle a dataStoreContentDiffs RT event for all loaded files.\n   *\n   * @param {object} diffs - Map of data store id → diff payload from the RT stream.\n   * @param {object[]} loadedFiles - Array of loaded file objects (each must have numeric id and code).\n   * @param {function} setContentFromRemote - Callback to apply new content: (file, content) => void.\n   * @param {function} refetchFileContent - Callback to refetch content on diff error: (file) => void.\n   */\n  function handleContentDiff(diffs, loadedFiles, setContentFromRemote, refetchFileContent) {\n    if (!diffs || _.isEmpty(diffs)) return;\n    const files = _.isArray(loadedFiles) ? loadedFiles : [loadedFiles];\n    files.forEach(file => {\n      if (!file || typeof file.id !== 'number') return;\n      const diff = diffs[file.id];\n      if (!diff) return;\n      try {\n        const newContent = applyContentDiff(file.code, diff);\n        file.size = new TextEncoder().encode(newContent).length;\n        setContentFromRemote(file, newContent);\n      } catch (e) {\n        console.error('[data-store-utils] handleContentDiff — error applying diff, refetching:', e);\n        refetchFileContent(file);\n      }\n    });\n  }\n\n  /**\n   * Handle a dataStoreContentRefreshRequiredIds RT event.\n   *\n   * @param {number[]} ids - Array of data store ids that require a content refetch.\n   * @param {object|object[]} fileOrFiles - A single file or array of file objects (each must have numeric id).\n   * @param {function} refetchFileContent - Callback to refetch content: (file) => void.\n   */\n  function handleContentRefreshRequired(ids, loadedFiles, refetchFileContent) {\n    if (!ids?.length) return;\n    const files = _.isArray(loadedFiles) ? loadedFiles : [loadedFiles];\n    files.forEach(file => {\n      if (!file || typeof file.id !== 'number') return;\n      if (ids.includes(file.id)) {\n        refetchFileContent(file);\n      }\n    });\n  }\n\n  /**\n   * Refetch file content from the server and apply it via the provided setter.\n   *\n   * @param {object} api - The api service (must have api.dataStores.download)\n   * @param {object} file - The file object (must have fileType and size)\n   * @param {function} setContentFromRemote - Callback: (file, content) => void\n   */\n  function refetchFileContent(api, file, setContentFromRemote) {\n    if (file && file.fileType !== 'download' && file.size < 1048576) {\n      api.dataStores.download(file).then(contents => {\n        setContentFromRemote(file, contents);\n      });\n    }\n  }\n  var _default = _exports.default = {\n    applyContentDiff,\n    handleContentDiff,\n    handleContentRefreshRequired,\n    refetchFileContent\n  };\n  function applyJsonPatch(currentContent, patchData) {\n    const doc = JSON.parse(currentContent);\n    const ops = JSON.parse(patchData);\n    const result = (0, _jsonPatch.applyPatch)(doc, ops, false).doc;\n    return JSON.stringify(result, null, 2);\n  }\n  function applyUnifiedDiff(currentContent, diffData) {\n    const result = currentContent.split('\\n');\n    const diffLines = diffData.split('\\n');\n    let offset = 0;\n    let i = 0;\n    while (i < diffLines.length) {\n      const dl = diffLines[i];\n      if (dl.startsWith('@@')) {\n        const match = dl.match(/@@ -(\\d+)(?:,(\\d+))? \\+/);\n        if (!match) {\n          i++;\n          continue;\n        }\n        const oldStart = parseInt(match[1], 10);\n        const oldCount = match[2] !== undefined ? parseInt(match[2], 10) : 1;\n        // oldCount === 0 means pure insertion after line oldStart (no lines removed)\n        let pos = (oldCount === 0 ? oldStart : oldStart - 1) + offset;\n        i++;\n        while (i < diffLines.length && !diffLines[i].startsWith('@@')) {\n          const hl = diffLines[i];\n          if (hl.startsWith('-')) {\n            result.splice(pos, 1);\n            offset--;\n          } else if (hl.startsWith('+')) {\n            result.splice(pos, 0, hl.substring(1));\n            pos++;\n            offset++;\n          } else if (hl.startsWith(' ')) {\n            pos++; // context line — advance position, no change\n          }\n          // empty trailing lines (artifact of final \\n) are skipped\n          i++;\n        }\n      } else {\n        i++;\n      }\n    }\n    return result.join('\\n');\n  }\n});","define(\"@testable/shared-ui/utils/environment\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.config = void 0;\n  _exports.getEnvironmentService = getEnvironmentService;\n  _exports.getFullConfig = getFullConfig;\n  _exports.setEnvironmentService = setEnvironmentService;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  // Global environment configuration utility\n  let _environmentService = null;\n\n  /**\n   * Set the environment service instance\n   * This should be called during app initialization\n   */\n  function setEnvironmentService(service) {\n    _environmentService = service;\n\n    // Update the getConfig proxy object with new config properties\n    if (service && service.config) {\n      Object.keys(service.config).forEach(key => {\n        getConfig[key] = service.config[key];\n      });\n    }\n  }\n\n  /**\n   * Get the current environment service\n   */\n  function getEnvironmentService() {\n    return _environmentService;\n  }\n\n  /**\n   * Direct config object access\n   */\n  const config = _exports.config = new Proxy({}, {\n    get(target, prop) {\n      if (!_environmentService) {\n        return undefined;\n      }\n      return _environmentService.config ? _environmentService.config[prop] : undefined;\n    }\n  });\n\n  /**\n   * Get the full config object\n   */\n  function getFullConfig() {\n    if (!_environmentService) {\n      return null;\n    }\n    return _environmentService.config;\n  }\n});","define(\"@testable/shared-ui/utils/formatters\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    bytes: function (value) {\n      return _lib.default.printBytes(value);\n    },\n    number: function (value) {\n      return _lib.default.printNumber(value);\n    },\n    icon: function (cellvalue, trueIcon, falseIcon, trueTitle, falseTitle) {\n      const title = cellvalue === null || cellvalue === \"\" || cellvalue <= 0 || !cellvalue ? falseTitle : trueTitle;\n      let span = '';\n      if (!_.isUndefined(title)) {\n        span += `<span data-bs-toggle=\"tooltip\" data-bs-html=\"true\" title=\"${title}\" >`;\n      }\n      span += '<i class=\"' + (cellvalue === null || cellvalue === \"\" || cellvalue <= 0 || !cellvalue ? falseIcon : trueIcon) + '\" ></i>';\n      if (!_.isUndefined(title)) {\n        span += '</span>';\n      }\n      return span;\n    },\n    timestamp: function (cellvalue) {\n      if (_.isUndefined(cellvalue) || cellvalue === null || cellvalue === \"\") {\n        return \"\";\n      } else if (_.isString(cellvalue)) {\n        return cellvalue;\n      }\n      return _lib.default.displayDateTime(cellvalue);\n    },\n    relativeDuration: function (cellvalue, now) {\n      if (_.isUndefined(cellvalue) || cellvalue === null || cellvalue === \"\") {\n        return \"\";\n      }\n      return _lib.default.displayRelativeDuration(cellvalue, now, true);\n    },\n    milliseconds: function (cellvalue) {\n      if (_.isUndefined(cellvalue) || cellvalue === null || cellvalue === \"\") {\n        return \"\";\n      } else if (_.isNumber(cellvalue)) {\n        return Math.round(cellvalue) + 'ms';\n      }\n      return cellvalue.asMilliseconds() + 'ms';\n    },\n    percentage: function (cellvalue) {\n      if (_.isUndefined(cellvalue) || cellvalue === null || cellvalue === \"\") {\n        return \"\";\n      }\n      return _lib.default.displayPercent(cellvalue);\n    },\n    timeline: function (firstTimestamp, lastTimestamp, record, popoverContent, popoverTitle) {\n      if (!_.isEmpty(firstTimestamp) && !_.isEmpty(lastTimestamp)) {\n        let totalWidth = moment.duration(lastTimestamp.diff(firstTimestamp)).asMilliseconds(),\n          start = moment.duration(record.opened.diff(firstTimestamp)).asMilliseconds(),\n          left = Math.min(97, start / totalWidth * 100),\n          width = Math.max(3, record.time / totalWidth * 100);\n        let popoverAttrs = popoverContent ? 'data-bs-toggle=\"popover\" data-bs-placement=\"auto\" data-bs-trigger=\"hover\" data-bs-html=\"true\" data-bs-content=\"' + popoverContent + '\"' : '';\n        if (popoverTitle) {\n          popoverAttrs += ' data-bs-title=\"' + popoverTitle + '\"';\n        }\n        return '<div style=\"left: ' + left + '%; width: ' + width + '%;\" class=\"timebar\" ' + popoverAttrs + '></div>';\n      }\n      return \"\";\n    },\n    progressBar: function (percentage) {\n      return '<div style=\"left: 0%; width: ' + percentage + '%;\" class=\"timebar\"></div>';\n    }\n  };\n});","define(\"@testable/shared-ui/utils/gcp\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function findGcpPublicProvider(providers) {\n    return _.find(providers, function (provider) {\n      return provider.public && provider.source === 'Gcp' && provider.providerType === 'OnDemand';\n    });\n  }\n  var _default = _exports.default = {\n    findGcpPublicProvider\n  };\n});","define(\"@testable/shared-ui/utils/general-columns\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  // Column catalog and defaults for all report types.\n  // recent-test-runs-view.js has its own getAllColumns() with different value properties\n  // (e.g. 'execution.vcsRoot' instead of 'repo') but titles must match.\n  const reportGeneralColumns = [{\n    title: 'P/F',\n    value: 'outcome'\n  }, {\n    title: 'Status',\n    value: 'status'\n  }, {\n    title: 'Notes',\n    value: 'notes'\n  }, {\n    title: 'Run at',\n    value: 'execution.startedAt'\n  }, {\n    title: 'Test Case',\n    value: 'execution.testCaseName'\n  }, {\n    title: 'Test Configuration',\n    value: 'execution.confName'\n  }, {\n    title: 'Scenario',\n    value: 'execution.scenarioName'\n  }, {\n    title: 'Locations',\n    value: 'locations'\n  }, {\n    title: 'Repo',\n    value: 'repo'\n  }, {\n    title: 'Test Type',\n    value: 'execution.testType'\n  }, {\n    title: 'Concurrent Users',\n    metricTitle: 'maxConcurrentClients',\n    metric: 'maxConcurrentClients',\n    namespace: 'Testable'\n  }, {\n    title: 'Median Response Time',\n    metricKey: 'p50',\n    metricTitle: 'firstReceivedMs',\n    metric: 'firstReceivedMs-p50',\n    namespace: 'Testable'\n  }, {\n    title: 'Success Rate',\n    metricTitle: 'outcome',\n    metricKey: 'success',\n    metric: 'outcome-success-percent',\n    namespace: 'Testable'\n  }, {\n    title: 'Browsers',\n    value: 'browsers'\n  }, {\n    title: 'Devices',\n    value: 'devices'\n  }, {\n    title: 'Multimedia',\n    value: 'multimedia'\n  }, {\n    title: 'Tags',\n    value: 'tags'\n  }];\n  const defaultColumns = reportGeneralColumns.filter(c => !['Notes', 'Browsers', 'Devices', 'Locations', 'Repo', 'Tags'].includes(c.title));\n  var _default = _exports.default = {\n    reportGeneralColumns,\n    defaultColumns\n  };\n});","define(\"@testable/shared-ui/utils/google-analytics\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    init(gaId) {\n      if (!gaId || document.querySelector(`script[src*=\"gtag/js?id=${gaId}\"]`)) return;\n      window.dataLayer = window.dataLayer || [];\n      const script = document.createElement('script');\n      script.async = true;\n      script.src = `https://www.googletagmanager.com/gtag/js?id=${gaId}`;\n      document.head.appendChild(script);\n      this.push('js', new Date());\n      this.push('config', gaId);\n    },\n    push(...args) {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push(args);\n    }\n  };\n});","define(\"@testable/shared-ui/utils/http\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const HttpResponseCodes = {\n    '100': 'Continue',\n    '101': 'Switching Protocols',\n    '102': 'Protocols',\n    '200': 'OK',\n    '201': 'Created',\n    '202': 'Accepted',\n    '203': 'Non-authoritative Information',\n    '204': 'No Content',\n    '205': 'Reset Content',\n    '206': 'Partial Content',\n    '207': 'Multi-Status',\n    '208': 'Already Reported',\n    '226': 'IM Used',\n    '300': 'Multiple Choices',\n    '301': 'Moved Permanently',\n    '302': 'Found',\n    '303': 'See Other',\n    '304': 'Not Modified',\n    '305': 'Use Proxy',\n    '307': 'Temporary Redirect',\n    '308': 'Permanent Redirect',\n    '400': 'Bad Request',\n    '401': 'Unauthorized',\n    '402': 'Payment Required',\n    '403': 'Forbidden',\n    '404': 'Not Found',\n    '405': 'Method Not Allowed',\n    '406': 'Not Acceptable',\n    '407': 'Proxy Authentication Required',\n    '408': 'Request Timeout',\n    '409': 'Conflict',\n    '410': 'Gone',\n    '411': 'Length Required',\n    '412': 'Precondition Failed',\n    '413': 'Payload Too Large',\n    '414': 'Request-URI Too Long',\n    '415': 'Unsupported Media Type',\n    '416': 'Request Range Not Satisfiable',\n    '417': 'Expectation Failed',\n    '418': \"I'm a teapot\",\n    '421': 'Misdirected Request',\n    '422': 'Unprocessable Entity',\n    '423': 'Locked',\n    '424': 'Failed Dependency',\n    '426': 'Upgrade Required',\n    '428': 'Precondition Required',\n    '429': 'Too Many Requests',\n    '431': 'Request Header Fields Too Large',\n    '500': 'Internal Server Error',\n    '501': 'Not Implemented',\n    '502': 'Bad Gateway',\n    '503': 'Service Unavailable',\n    '504': 'Gateway Timeout',\n    '505': 'HTTP Version Not Supported',\n    '506': 'Variant Also Negotiates',\n    '507': 'Insufficient Storage',\n    '508': 'Loop Detected',\n    '510': 'Not Extended',\n    '511': 'Network Authentication Required',\n    '520': 'Network Connect Timeout Error'\n  };\n  var _default = _exports.default = {\n    HttpResponseCodes: HttpResponseCodes\n  };\n});","define(\"@testable/shared-ui/utils/instance-conf\", [\"exports\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function getInstanceConf(source, location) {\n    const sourceType = source?.source;\n    let instanceConf = {};\n    if (sourceType === 'Aws') {\n      instanceConf = getInstanceConfAws(location);\n    } else if (sourceType === 'Azure') {\n      instanceConf = getInstanceConfAzure(location);\n    } else if (sourceType === 'Gcp') {\n      instanceConf = getInstanceConfGcp(location);\n    }\n    if (!instanceConf) return false;\n    instanceConf.image = {\n      id: 'agent-external',\n      name: 'Standard'\n    };\n    instanceConf.configType = 'auto';\n    instanceConf.instanceStrategy = 'Automatic';\n    instanceConf.useDefaultTags = true;\n    instanceConf.spot = true;\n    return instanceConf;\n  }\n  function getInstanceConfAws(location) {\n    const instanceTypes = _loadTest.default.getInstanceTypes([location]);\n    const instanceType = _loadTest.default.getRecommendedInstanceType(instanceTypes, 'default', {\n      'default': ['t3.medium']\n    });\n    if (!instanceType) return false;\n    let spotMaxPrice;\n    if (instanceType && instanceType.price) {\n      spotMaxPrice = instanceType.price;\n    } else {\n      spotMaxPrice = null;\n    }\n    return {\n      instanceType,\n      spotMaxPrice,\n      t2Unlimited: true,\n      awsTags: []\n    };\n  }\n  function getInstanceConfAzure(location) {\n    const instanceTypes = _loadTest.default.getInstanceTypes([location]);\n    const instanceType = _loadTest.default.getRecommendedInstanceType(instanceTypes, 'default', {\n      'default': ['Standard_A2_v2']\n    });\n    if (!instanceType) return false;\n    return {\n      instanceType,\n      azureTags: []\n    };\n  }\n  function getInstanceConfGcp(location) {\n    const instanceTypes = _loadTest.default.getInstanceTypes([location]);\n    const instanceType = _loadTest.default.getRecommendedInstanceType(instanceTypes, 'default', {\n      'default': ['e2-standard-2']\n    });\n    if (!instanceType) return false;\n    return {\n      instanceType,\n      gcpTags: []\n    };\n  }\n  var _default = _exports.default = {\n    getInstanceConf\n  };\n});","define(\"@testable/shared-ui/utils/intercom\", [\"exports\", \"@testable/shared-ui/utils/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  const INTERCOM_SCRIPT_ID = 'intercom-widget';\n  const INTERCOM_WIDGET_URL = 'https://widget.intercom.io/widget/';\n  var _default = _exports.default = {\n    init() {\n      const appId = _environment.config.intercom.appId;\n      if (!appId || document.getElementById(INTERCOM_SCRIPT_ID)) return;\n\n      // Queue shim: collects calls made before the widget script finishes loading,\n      // then replays them once Intercom boots. Required by Intercom's loader contract.\n      const shim = function () {\n        shim.c(arguments);\n      };\n      shim.q = [];\n      shim.c = args => shim.q.push(args);\n      window.Intercom = shim;\n      const script = document.createElement('script');\n      script.src = INTERCOM_WIDGET_URL + appId;\n      script.id = INTERCOM_SCRIPT_ID;\n      script.type = 'text/javascript';\n      script.async = true;\n      document.head.appendChild(script);\n\n      // no boot() here: the widget stays hidden until lib.intercomUpdate() runs\n      // post-login, matching the pre-upgrade behavior\n    },\n    remove() {\n      if (window.Intercom) window.Intercom('shutdown');\n      const script = document.getElementById(INTERCOM_SCRIPT_ID);\n      if (script) script.remove();\n    }\n  };\n});","define(\"@testable/shared-ui/utils/lib\", [\"exports\", \"@ember/object\", \"@ember/object/observers\", \"@ember/template\", \"rsvp\", \"@ember/runloop\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/helpers/to-html\", \"ember-uuid\", \"tracked-built-ins\"], function (_exports, _object, _observers, _template, _rsvp, _runloop, _environment, _toHtml, _emberUuid, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/object/observers\",0,\"@ember/template\",0,\"rsvp\",0,\"@ember/runloop\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/helpers/to-html\",0,\"ember-uuid\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  const RelativeDurationInterval = 60000;\n  function endsWith(val, suffix) {\n    if (!val || _.isEmpty(val) || val.length < suffix.length) {\n      return false;\n    }\n    return val.lastIndexOf(suffix) === val.length - suffix.length;\n  }\n  function ucFirst(val) {\n    return val.charAt(0).toUpperCase() + val.slice(1);\n  }\n  function getRelativeDuration(val, now) {\n    return _.isUndefined(val) ? '-' : displayRelativeDuration(val, now);\n  }\n  function displayRelativeDuration(val, now, showFuture) {\n    if (!val) return '-';\n    const valMoment = moment(val);\n    if (!showFuture && now && now.isBefore(valMoment)) return 'now';\n    return moment.duration(valMoment.diff(now)).humanize(true);\n  }\n  function liveRelativeDuration(val, showFuture) {\n    return displayRelativeDuration(val, moment(), showFuture);\n  }\n  function toUrl(path, params) {\n    let url = addAuthToUrl(_environment.config.apiBaseUrl + path);\n    params = _.isObject(params) ? $.param(params) : params;\n    if (!_.isUndefined(params)) {\n      url += (url.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + params;\n    }\n    return url;\n  }\n  function addAuthToUrl(url) {\n    if (url && !_.isUndefined(_environment.config.currentUser) && !_.isEmpty(_environment.config.currentUser.sid)) {\n      const sid = _environment.config.currentUser.sid;\n      try {\n        const isAbsolute = /^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\//.test(url);\n        const base = 'http://localhost';\n\n        // Use URL parsing to correctly update query params without breaking fragments.\n        const urlObj = new URL(url, base);\n        urlObj.searchParams.delete('sid'); // delete all occurrences\n        urlObj.searchParams.append('sid', sid);\n        if (isAbsolute) {\n          return urlObj.toString();\n        }\n\n        // Preserve relative URL shape for common cases.\n        if (url.startsWith('?')) {\n          return urlObj.search + urlObj.hash;\n        }\n        if (url.startsWith('#')) {\n          return urlObj.hash;\n        }\n        const pathname = url.startsWith('/') ? urlObj.pathname : urlObj.pathname.replace(/^\\/+/, '');\n        return pathname + urlObj.search + urlObj.hash;\n      } catch (e) {\n        // Fallback to previous behavior if URL parsing fails for an unexpected input format.\n        url += (url.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"sid=\" + sid;\n      }\n    }\n    return url;\n  }\n  function removeScheme(url) {\n    if (!_.isEmpty(url)) {\n      let index = url.indexOf('://');\n      return index !== -1 ? url.substring(index + 3) : url;\n    }\n    return url;\n  }\n  function displayDateUTC(timestamp, format) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).utc().format(format || 'L');\n  }\n  function displayDate(timestamp, format) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).local().format(format || 'L');\n  }\n  function displayTime(timestamp) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).local().format('hh:mm:ss.SSS A');\n  }\n  function displayMilitaryTime(timestamp) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).local().format('HH:mm:ss');\n  }\n  function displayDateTime(timestamp) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).local().format('L LTS');\n  }\n  function displayTimestamp(timestamp, format) {\n    if (_.isUndefined(timestamp)) {\n      return '';\n    }\n    return moment(timestamp).local().format(format || 'L hh:mm:ss.SSS A');\n  }\n  function displayPercent(val, prevVal) {\n    let answer = _.isUndefined(val) || _.isNull(val) || isNaN(val) ? \"-\" : print(val, \"%\");\n    if (isNumber(prevVal) && !isNaN(prevVal) && isNumber(val) && !isNaN(val)) {\n      answer += getChangeDisplay(val, prevVal);\n    }\n    return answer;\n  }\n  function getChangeHtml(change, textClass) {\n    return '<div class=\"text-info inline-text\">' + '  <i class=\"fa ' + (change >= 0 ? 'fa-caret-up' : 'fa-caret-down') + ' m-l-5\"></i>' + '  <span class=\"' + (textClass || '') + ' subtext\">' + numeral(change).format('0,0.[00]') + '%</span>' + '</div>';\n  }\n  function getChangeDisplay(val, prevVal) {\n    if (isNumber(prevVal) && !isNaN(prevVal) && isNumber(val) && !isNaN(val)) {\n      let change = Math.round(prevVal === 0 ? val : 100 * val / prevVal - 100);\n      return getChangeHtml(change);\n    }\n    return '';\n  }\n  function printChange(change, textClass) {\n    change = Math.round(100 * change);\n    return getChangeHtml(change, textClass);\n  }\n  function printNumberWithUnits(val, units, roundThreshold) {\n    if (units === '%') {\n      val = Math.round(100 * val) / 100;\n    } else {\n      roundThreshold = _.isUndefined(roundThreshold) ? 10 : roundThreshold;\n      if (val === 1 && _.isString(units) && units.charAt(units.length - 1) === 's' && units !== 'ms' && units !== 's') {\n        units = units.substring(0, units.length - 1);\n      }\n      val = val > roundThreshold ? Math.round(val) : val;\n    }\n    return numeral(val).format('0,0.[00]') + (units ? (units === '%' ? '' : ' ') + units : '');\n  }\n  function print(val, units, roundThreshold) {\n    units = units || '';\n    if (units === '%d') {\n      units = '';\n    }\n    if (_.isUndefined(val) || val === '' || isNaN(val)) {\n      return '-';\n    }\n    if (units === 'bytes/sec') {\n      return val === 0 ? '0 bytes/sec' : printBitRate(val);\n    }\n    if (units === 'bytes') {\n      return printBytes(val);\n    }\n    if (_.isObject(val) && val.value) {\n      return val.prefix + ' ' + printNumberWithUnits(val.value, units);\n    }\n    return printNumberWithUnits(val, units, roundThreshold);\n  }\n  function printNoRounding(val, units) {\n    return print(val, units, Number.MAX_SAFE_INTEGER);\n  }\n  function toText(val, change, units, lineBreak, relatedVal, relatedUnits, color) {\n    let answer = color ? '<span class=\"' + color + '\">' : '';\n    answer += _.isUndefined(val) || _.isNull(val) || !_.isObject(val) && isNaN(val) ? \"-\" : print(val, units);\n    if (relatedVal) answer += ' (' + print(relatedVal, relatedUnits) + ')';\n    if (color) answer += '</span>';\n    if (lineBreak) answer += '<br/>';\n    if (isNumber(change) && !isNaN(change)) {\n      answer += printChange(change);\n    }\n    return answer;\n  }\n  function getMetricName(metric) {\n    if (metric) {\n      const index = metric.indexOf('-');\n      return index === -1 ? metric : metric.substring(0, index);\n    }\n    return null;\n  }\n  function findMetric(summary, ns, metric) {\n    if (summary && metric) {\n      let answer = findExactMetric(summary, ns, metric);\n      if (!answer && ns === SystemNs && metric.indexOf(JMeterTxnPrefix) !== 0) answer = findExactMetric(summary, ns, JMeterTxnPrefix + _.upperFirst(metric));\n      return answer;\n    }\n  }\n  function findExactMetric(summary, ns, metric) {\n    if (summary && metric) {\n      let name = getMetricName(metric);\n      return _.find(summary.metrics, function (metricObj) {\n        return metricObj.namespace === ns && metricObj.metricDef === name;\n      });\n    }\n  }\n  function printMetricValue(val, units) {\n    return toText(val, null, units);\n  }\n  const UtilizationSuffix = 'Utilization';\n  function isUtilizationMetric(metric) {\n    return endsWith(getMetricName(metric), UtilizationSuffix);\n  }\n  function getRelatedMetric(name) {\n    const isUtilization = endsWith(name, UtilizationSuffix);\n    const related = isUtilization ? name.substring(0, name.length - UtilizationSuffix.length) : name + UtilizationSuffix;\n    return {\n      name: related,\n      isUtilization: isUtilization\n    };\n  }\n  function printMetric(summary, ns, metric, units, lineBreak, getUnits, showComparison, threshold) {\n    showComparison = _.isBoolean(showComparison) ? showComparison : true;\n    let key = ns + '-' + metric;\n    if (endsWith(metric, '-percent')) units = '%';\n    if (units && !endsWith(units, '/sec') && (endsWith(metric, '-countPerSec') || endsWith(metric, '-peakCountPerSec'))) units = units + '/sec';\n    if (summary && endsWith(metric, '-total') && !summary[key]) {\n      metric = metric.substring(0, metric.length - 6);\n      key = key.substring(0, key.length - 6);\n    }\n    // if this metric has a related utilization metric (e.g. cpu, memory) print the related metric in parantheses\n    const name = getMetricName(metric);\n    const totalKey = ns + '-' + name + '-total';\n    const bucketsKey = ns + '-' + name + '-buckets';\n    const aggregator = name === metric ? '' : metric.substring(name.length);\n    const relatedMetric = summary ? getRelatedMetric(name) : null;\n    const relatedMetricKey = relatedMetric ? ns + '-' + relatedMetric.name + aggregator : null;\n    let relatedValue, relatedUnits;\n    if (summary && relatedMetricKey && summary[relatedMetricKey]) {\n      relatedValue = summary[relatedMetricKey];\n      relatedUnits = relatedMetric.isUtilization ? getUnits ? getUnits(ns, relatedMetric.name) : '' : '%';\n    }\n    const val = summary && isNumber(summary[key]) ? summary[key] : aggregator && summary && summary[bucketsKey] ? 0 : null;\n    const isUtilization = isUtilizationMetric(name);\n    const color = isUtilization && val >= threshold || !isUtilization && relatedMetric && relatedValue >= threshold ? 'red' : null;\n    let change = null;\n    if (showComparison && _.isObject(summary) && _.isObject(summary.comparisons) && _.isObject(summary.comparisons[ns])) {\n      change = summary.comparisons[ns][metric];\n      if (!isNumber(change)) change = aggregator && summary.comparisons[ns][totalKey] ? 0 : null;\n    }\n    return toText(val, change, units, lineBreak, relatedValue, relatedUnits, color);\n  }\n  function toMetricKey(ns, name) {\n    return ns + '-' + name;\n  }\n  function toMetricValue(val, metric) {\n    return metric.metricUnits === '%d' ? val / 100 : val;\n  }\n  function toMetricUnits(metric, bucket) {\n    if (bucket === 'count') return '';\n    if (metric.metricUnits && bucket && endsWith(bucket, 'PerSec') && !endsWith(metric.metricUnits, '/sec')) return metric.metricUnits + '/sec';\n    if (metric) return metric.metricType === 'Timing' && _.isEmpty(metric.metricUnits) ? 'ms' : metric.metricUnits;\n    return '';\n  }\n  function toPromise(deferred) {\n    return new _rsvp.Promise(function (resolve, reject) {\n      deferred.then(resolve, reject);\n    });\n  }\n  function alert(type, msg, header, keepOpen) {\n    return $.gritter.add({\n      title: header,\n      text: msg,\n      sticky: keepOpen,\n      time: 3000\n    });\n  }\n  function stickyFail(jqxhr, status, errMsg) {\n    return fail(jqxhr, status, errMsg, true);\n  }\n  function fail(jqxhr, status, errMsg, keepOpen) {\n    if (jqxhr && jqxhr.status === 403) {\n      window.location = \"/\";\n    } else {\n      if (status !== 'parseerror') error(messageFromFail(jqxhr, status, errMsg), \"Error\", keepOpen);\n      return $.Deferred().reject(jqxhr, status, errMsg).promise();\n    }\n  }\n  function messageFromFail(jqxhr, status, errMsg) {\n    if (_.isUndefined(jqxhr) && _.isUndefined(errMsg)) return \"Unknown error occurred\";\n    if (jqxhr.responseJSON && jqxhr.responseJSON.error && jqxhr.responseJSON.error.message) return jqxhr.responseJSON.error.message;\n    if (!_.isEmpty(jqxhr.responseText)) return jqxhr.responseText;\n    if (errMsg === '' && jqxhr.readyState === 0) return \"Could not connect to the server.  Please try again later.\";\n    return \"Unknown error occurred\";\n  }\n  function error(msg, header, keepOpen) {\n    alert('alert-danger', msg === \"\" ? \"Error occurred\" : (0, _toHtml.sanitizeHtml)([msg, 'tooltip', true]), _.isString(header) ? header : 'Error', _.isUndefined(keepOpen) ? true : keepOpen);\n  }\n  function info(msg, header, keepOpen) {\n    alert('alert-info', (0, _toHtml.sanitizeHtml)([msg, 'tooltip', true]), header, keepOpen);\n  }\n  let confirmEventCounter = 1;\n  function confirm(msg, confirmText, onConfirm, cancelText, onCancel, header, skipSanitaztion = false) {\n    msg = skipSanitaztion ? msg : (0, _toHtml.sanitizeHtml)([msg, 'alert']);\n    let body = '<p>' + msg + '</p><br>' + '<p>' + '\t<button id=\"alertConfirm' + confirmEventCounter + '\" type=\"button\" class=\"btn btn-primary\"><strong>' + confirmText + '</strong></button>' + '\t<button id=\"alertCancel' + confirmEventCounter + '\" type=\"button\" class=\"btn btn-primary\"><strong>' + cancelText + '</strong></button>' + '</p>';\n    let id = alert('alert-info', body, header, true);\n    $('#alertConfirm' + confirmEventCounter).click(function () {\n      $.gritter.remove(id);\n      if (_.isFunction(onConfirm)) onConfirm();\n    });\n    $('#alertCancel' + confirmEventCounter).click(function () {\n      if (_.isFunction(onCancel)) onCancel();\n      $.gritter.remove(id);\n    });\n    confirmEventCounter += 1;\n  }\n  function makeColumnsDraggable(scope) {\n    const root = scope ? $(scope) : $(document);\n    const target = root.find('[data-column-id]').closest('[class*=col]');\n    target.each(function () {\n      if ($(this).data('ui-sortable')) {\n        $(this).sortable('destroy');\n      }\n    });\n    $(target).sortable({\n      items: '[data-column-id]',\n      cancel: 'input, textarea, select, button, a, .ember-power-select-trigger'\n    });\n  }\n  function scrollToTop() {\n    $(\"html, body\").animate({\n      scrollTop: 0\n    }, \"slow\");\n  }\n  function scrollTo(selector) {\n    if ($(selector).length > 0) {\n      $('html, body').animate({\n        scrollTop: $(selector).offset().top - 75\n      }, 1000);\n    }\n  }\n  function printBytes(value) {\n    if (!$.isNumeric(value) || isNaN(value)) return \"-\";\n    return numeral(value).format(value < 1024 * 1024 ? '0 ib' : '0.0 ib');\n  }\n  const BitUnits = ['Kbps', 'Mbps', 'Gbps', 'Tbps'];\n  function printBitRate(value) {\n    if (!isNumber(value) || isNaN(value)) return \"-\";\n    value = 8 * value; // bytes -> bits\n    let i = -1;\n    do {\n      value = value / 1024;\n      i++;\n    } while (value > 1024);\n    return Math.max(value, 0.1).toFixed(1) + ' ' + BitUnits[i];\n  }\n  function printNumber(value) {\n    if ($.isNumeric(value) || _.isString(value)) return numeral(value).format('0,0.[0000]');\n    return \"-\";\n  }\n  function printShortNumber(value) {\n    if (isNumber(value) || _.isString(value)) return numeral(value).format('0[.]0a');\n    return \"-\";\n  }\n  function printContextSize(tokens) {\n    return tokens >= 1000 ? `${Math.round(tokens / 1000)}k` : String(tokens);\n  }\n  function printContextWindow(tokens) {\n    if (!tokens) return '';\n    return `${printContextSize(tokens)} context window`;\n  }\n  function printKbps(value) {\n    let num, units;\n    if (value >= 1024) {\n      num = value / 1024;\n      units = ' Mbps';\n    } else {\n      num = value;\n      units = ' Kbps';\n    }\n    return printNumber(num) + units;\n  }\n  function printCcy(amount) {\n    if (_.isUndefined(amount)) return '-';\n    if (_.isString(amount)) return amount;\n    return '$' + numeral(amount).format('0,0[.]00');\n  }\n  function updateGrid(grid, items, refresh) {\n    if (refresh) {\n      grid.records = _.isEmpty(items) ? [] : items;\n      grid.total = _.isEmpty(items) ? 0 : items.length;\n      grid.localSort();\n      grid.refresh();\n    } else {\n      let existingItems = [],\n        createdItems = [];\n      for (let i = 0; i < items.length; i++) {\n        let existing = grid.get(items[i].recid);\n        if (_.isEmpty(existing)) createdItems.push(items[i]);else existingItems.push(items[i]);\n      }\n      if (createdItems.length > 0) grid.add(createdItems);\n      if (existingItems.length > 0) for (let i = 0; i < existingItems.length; i++) grid.set(existingItems[i].recid, existingItems[i]);\n    }\n  }\n  function sortByMoment(arr, props, desc) {\n    if (_.isArray(arr)) arr.sort(function (l1, l2) {\n      let val1,\n        val2,\n        i = 0;\n      do {\n        val1 = l1[props[i]];\n        val2 = l2[props[i]];\n        i++;\n      } while (i < props.length && (_.isUndefined(val1) || _.isUndefined(val2)));\n      if (!_.isUndefined(val1) && !_.isUndefined(val2)) {\n        let moment1 = moment(val1),\n          moment2 = moment(val2);\n        if (moment1.isBefore(moment2)) return desc ? 1 : -1;else if (moment1.isAfter(moment2)) return desc ? -1 : 1;\n      }\n      return 0;\n    });\n  }\n  function sortByIgnoreCase(arr, prop, desc) {\n    sortByFunction(arr, function (obj) {\n      let val = obj ? obj[prop] : null;\n      return val ? val.toUpperCase() : null;\n    }, desc);\n  }\n  function sortByFunction(arr, func, desc) {\n    if (_.isArray(arr)) arr.sort(function (l1, l2) {\n      let val1 = func(l1);\n      let val2 = func(l2);\n      if (!_.isUndefined(val1) && !_.isUndefined(val2)) {\n        if (val1 < val2) return desc ? 1 : -1;else if (val1 > val2) return desc ? -1 : 1;\n      }\n      return 0;\n    });\n  }\n  function sortBy(arr, props, desc) {\n    if (_.isArray(arr)) arr.sort(function (l1, l2) {\n      let val1,\n        val2,\n        i = 0;\n      do {\n        val1 = l1[props[i]];\n        val2 = l2[props[i]];\n        i++;\n      } while (i < props.length && (_.isUndefined(val1) || _.isUndefined(val2)));\n      if (!_.isUndefined(val1) && !_.isUndefined(val2)) {\n        if (val1 < val2) return desc ? 1 : -1;else if (val1 > val2) return desc ? -1 : 1;\n      }\n      return 0;\n    });\n  }\n  function findById(items, id) {\n    return _.find(items, function (item) {\n      return item.id === id;\n    });\n  }\n  function hasId(items, id) {\n    return _.isObject(findById(items, id));\n  }\n  let origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n  function toPlanHtml(plan, isPlanAnnual) {\n    let description = JSON.parse(plan.description);\n    let result = '<div class=\"package package-selected\">\\n' + '  <h5 class=\"package-title package-title-small\">' + plan.name + '<span class=\"label label-success m-l-10\">' + (isPlanAnnual ? 'Annual' : 'Monthly') + '</span></h5>\\n' + '  <div class=\"package-price\">\\n' + '    ' + printCcy(isPlanAnnual ? plan.annualPrice / 12 : plan.price) + '\\n' + '    per month' + (isPlanAnnual ? ' (paid annually)' : '') + '\\n' + '  </div>\\n' + '  <ul class=\"package-ul\">\\n';\n    _.forEach(description, function (itemText) {\n      result += '<li class=\"package-li\">' + itemText + '</li>\\n';\n    });\n    result += '  </ul>\\n' + '  <a class=\"btn btn-rounded btn-primary package-button\" href=\"/account/billing/buy-plan\">Change/View Details</a>\\n' + '</div>';\n    return result;\n  }\n  function userAborted(xhr) {\n    return xhr && !xhr.getAllResponseHeaders();\n  }\n  function modalPosition() {\n    function reposition() {\n      let modal = $(this),\n        dialog = modal.find('.modal-dialog');\n      modal.css('display', 'block');\n\n      // Dividing by two centers the modal exactly, but dividing by three\n      // or four works better for larger screens.\n      dialog.css(\"margin-top\", Math.max(0, ($(window).height() - dialog.height()) / 2));\n      dialog.css(\"margin-left\", Math.max(0, ($(window).width() - dialog.width()) / 2));\n    }\n\n    // Reposition when a modal is shown\n    $('.modal').on('show.bs.modal', reposition);\n\n    // Reposition when the window is resized\n    $(window).on('resize', function () {\n      $('.modal:visible').each(reposition);\n    });\n  }\n  function camelCaseToTitleCase(camelCase) {\n    if (camelCase === null || camelCase === \"\") {\n      return camelCase;\n    }\n    return String(camelCase).trim().replace(/[_-]+/g, ' ').replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2').split(/\\s+/).filter(Boolean).map(word => /^[A-Z0-9]+$/.test(word) ? word : ucFirst(word)).join(' ');\n  }\n  function scrollElementVert(el, num) {\n    // to scroll up use a negative number\n    let re = /html$/i;\n    while (!re.test(el.tagName) && 1 > el.scrollTop) el = el.parentNode;\n    if (0 < el.scrollTop) el.scrollTop += num;\n  }\n  function setupAllToggles() {\n    $(document).on('show.bs.collapse', '.collapse', function (e) {\n      if ($(this).is(e.target)) {\n        const target = $('[href=\"#' + e.target.id + '\"]');\n        if (target.length > 0) {\n          updateIcon(target);\n        }\n      }\n    });\n    $(document).on('hide.bs.collapse', '.collapse', function (e) {\n      if ($(this).is(e.target)) {\n        const target = $('[href=\"#' + e.target.id + '\"]');\n        if (target.length > 0) {\n          updateIcon(target, true);\n        }\n      }\n    });\n  }\n  function updateIcon(target, add) {\n    if (target.find('svg').length) {\n      const targetIcon = target.find('svg');\n      if (targetIcon.length) {\n        const removeClass = add ? 'fa-minus' : 'fa-plus';\n        const addClass = add ? 'fa-plus' : 'fa-minus';\n        targetIcon.removeClass(removeClass).addClass(addClass);\n      }\n    } else {\n      (0, _runloop.later)(this, () => {\n        updateIcon(target, add);\n      }, 250);\n    }\n  }\n  let PercentSuffix = 'percent';\n  function splitMetricName(metricName) {\n    let index = metricName.indexOf('-');\n    let type = index === -1 ? metricName : metricName.substring(0, index);\n    let answer = {\n      type: type,\n      subtype: '',\n      isPercent: false\n    };\n    let remaining = index === -1 ? \"\" : metricName.substring(index + 1);\n    if (remaining && remaining === PercentSuffix) {\n      answer.isPercent = true;\n    } else if (remaining) {\n      index = remaining.indexOf('-');\n      answer.isPercent = index !== -1 && remaining.substring(index + 1) === PercentSuffix;\n      answer.subtype = index !== -1 ? remaining.substring(0, index) : remaining;\n    }\n    return answer;\n  }\n  function htmlEncode(value, replace = false) {\n    let html = $('<div/>').text(value).html();\n    if (replace) {\n      html = html.replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n    }\n    return html;\n  }\n  function htmlDecode(value) {\n    return $('<div/>').html(value).text();\n  }\n  function popoverRow(title, content) {\n    return '<div class=\"row text-primary\">' + '  <div class=\"col-md-4\"><strong>' + title + '</strong></div>' + '  <div class=\"col-md-8\">' + content + '</div>' + '</div>';\n  }\n  function base64ToBinary(data) {\n    let raw = atob(data);\n    let rawLength = raw.length;\n    let array = new Uint8Array(new ArrayBuffer(rawLength));\n    for (let i = 0; i < rawLength; i++) {\n      array[i] = raw.charCodeAt(i);\n    }\n    return array;\n  }\n  function binaryToBase64(arr) {\n    let CHUNK_SZ = 0x8000;\n    let c = [];\n    for (let i = 0; i < arr.length; i += CHUNK_SZ) {\n      c.push(String.fromCharCode.apply(null, arr.subarray(i, i + CHUNK_SZ)));\n    }\n    return btoa(c.join(\"\"));\n  }\n  function toDataUrl(blob, cb) {\n    let reader = new FileReader();\n    reader.onload = function (e) {\n      cb(e.target.result);\n    };\n    reader.readAsDataURL(blob);\n  }\n  function byteLength(normalVal) {\n    // Force string type\n    normalVal = String(normalVal);\n    let byteLen = 0;\n    for (let i = 0; i < normalVal.length; i++) {\n      let c = normalVal.charCodeAt(i);\n      byteLen += c < 1 << 7 ? 1 : c < 1 << 11 ? 2 : c < 1 << 16 ? 3 : c < 1 << 21 ? 4 : c < 1 << 26 ? 5 : c < 1 << 31 ? 6 : Number.NaN;\n    }\n    return byteLen;\n  }\n  function removeById(array, item) {\n    if (_.isArray(array)) {\n      const idx = array.findIndex(function (a) {\n        return a.id === item.id;\n      });\n      if (idx > -1) {\n        array.splice(idx, 1);\n      }\n    }\n  }\n  function newSockjs(url) {\n    return new SockJS(url, null, {\n      transports: ['websocket', 'xhr-polling', 'xdr-polling']\n    });\n  }\n  const _sentClientUpdateIds = new Set();\n  function generateClientUpdateId() {\n    const id = (0, _emberUuid.v4)();\n    _sentClientUpdateIds.add(id);\n    setTimeout(() => _sentClientUpdateIds.delete(id), 30000);\n    return id;\n  }\n  function isOwnClientUpdateId(uuid) {\n    if (!uuid) return false;\n    const match = _sentClientUpdateIds.has(uuid);\n    if (match) _sentClientUpdateIds.delete(uuid);\n    return match;\n  }\n  function toUrlAndScheme(url) {\n    let httpScheme = url.indexOf('http://') === 0;\n    let httpsScheme = url.indexOf('https://') === 0;\n    let tcpScheme = url.indexOf('tcp://') === 0;\n    let tcpsScheme = url.indexOf('tcps://') === 0;\n    let wsScheme = url.indexOf('ws://') === 0;\n    let wssScheme = url.indexOf('wss://') === 0;\n    let scheme;\n    if (!httpScheme && !httpsScheme && tcpScheme && tcpsScheme && wsScheme && wssScheme) {\n      url = 'http://' + url;\n      httpScheme = true;\n    }\n    if (httpScheme) scheme = 'http';else if (httpsScheme) scheme = 'https';else if (tcpScheme) scheme = 'tcp';else if (tcpsScheme) scheme = 'tcps';else if (wsScheme) scheme = 'ws';else if (wssScheme) scheme = 'wss';\n    return {\n      url,\n      scheme\n    };\n  }\n  function replaceAll(str, search, replacement) {\n    return str.split(search).join(replacement);\n  }\n  function printDuration(duration) {\n    if (isNumber(duration) && duration > 0) {\n      let hours = Math.round(100 * moment.duration(duration, 'seconds').asHours()) / 100;\n      return print(hours, 'hours');\n    }\n    return '-';\n  }\n  function printDurationFromMS(ms) {\n    if (isNumber(ms)) {\n      let duration = moment.duration(ms, 'milliseconds');\n      let fromHours = Math.floor(duration.asHours());\n      let fromMinutes = Math.floor(duration.asMinutes() - fromHours * 60);\n      let fromSeconds = Math.floor(duration.asSeconds() - fromHours * 3600 - fromMinutes * 60);\n      let output = '';\n      if (fromHours > 0) output += (fromHours <= 9 ? '0' + fromHours : fromHours) + ':';\n      return output + (fromMinutes === 0 ? '00' : fromMinutes <= 9 ? '0' + fromMinutes : fromMinutes) + ':' + (fromSeconds <= 9 ? '0' + fromSeconds : fromSeconds);\n    }\n    return '-';\n  }\n  function secondsToDhms(seconds, allowZeroDays, allowZeroHours, allowZeroMinutes, allowZeroSeconds) {\n    seconds = Number(seconds);\n    let d = Math.floor(seconds / (3600 * 24));\n    let h = Math.floor(seconds % (3600 * 24) / 3600);\n    let m = Math.floor(seconds % 3600 / 60);\n    let s = Math.floor(seconds % 60);\n    let dDisplay = d > 0 || allowZeroDays ? d + (d === 1 ? \" day\" : \" days\") : \"\";\n    let hDisplay = h > 0 || allowZeroHours ? h + (h === 1 ? \" hour\" : \" hours\") : \"\";\n    let mDisplay = m > 0 || allowZeroMinutes ? m + (m === 1 ? \" minute\" : \" minutes\") : \"\";\n    let sDisplay = s > 0 || allowZeroSeconds ? s + (s === 1 ? \" second\" : \" seconds\") : \"\";\n    let output = [];\n    if (d || dDisplay) output.push(dDisplay);\n    if (h || hDisplay && !output.length) output.push(hDisplay);\n    if (m || mDisplay && !output.length) output.push(mDisplay);\n    if (s || sDisplay && !output.length) output.push(sDisplay);\n    return output.join(', ');\n  }\n  function timeToMs(time) {\n    const milliseconds = (h, m, s) => (parseInt(h) * 60 * 60 + parseInt(m) * 60 + parseInt(s)) * 1000;\n    const timeParts = time.split(\":\");\n    if (timeParts.length === 2) {\n      return milliseconds(0, timeParts[0], timeParts[1]);\n    }\n    return milliseconds(timeParts[0], timeParts[1], timeParts[2]);\n  }\n  function nextBillingDate() {\n    return moment().utc().add(1, 'months').date(1).format('L');\n  }\n  function prevBillingDate() {\n    return moment().utc().date(1).format('L');\n  }\n  function addAuthToDataStore(ds) {\n    ds.url = addAuthToUrl(ds.url);\n    ds.viewUrl = addAuthToUrl(ds.viewUrl);\n    ds.thumbnailUrl = addAuthToUrl(ds.thumbnailUrl);\n    ds.deleteUrl = addAuthToUrl(ds.deleteUrl);\n  }\n  function addAuthToOutputFile(file) {\n    addAuthToDataStore(file);\n    if (file.diffOutputFile) addAuthToDataStore(file.diffOutputFile);\n    if (file.diffDataStore) addAuthToDataStore(file.diffDataStore);\n  }\n  function printTime(hour, minute) {\n    return numeral(hour || 0).format('00') + ':' + `0${numeral(minute || 0).format('00')}`.slice(-2);\n  }\n  function printDay(day) {\n    day = day || 1;\n    if (day === 1 || day === 21) return day + 'st';\n    if (day === 2 || day === 22) return day + 'nd';\n    if (day === 3 || day === 23) return day + 'rd';\n    return day + 'th';\n  }\n  function printDayOfWeek(dayOfWeek) {\n    dayOfWeek = dayOfWeek || 1;\n    switch (dayOfWeek) {\n      case 1:\n        return 'Monday';\n      case 2:\n        return 'Tuesday';\n      case 3:\n        return 'Wednesday';\n      case 4:\n        return 'Thursday';\n      case 5:\n        return 'Friday';\n      case 6:\n        return 'Saturday';\n      case 7:\n        return 'Sunday';\n    }\n  }\n  function printSchedule(schedule) {\n    if (_.isEmpty(schedule)) return 'Not scheduled.';\n    if (schedule.scheduleType === 'Single') return 'One time.';\n    let answer = 'Runs every ';\n    switch (schedule.recurringInterval) {\n      case 'Month':\n        {\n          let month = Number(schedule.month) || 1;\n          answer += (month > 1 ? month : '') + ' ' + pluralCheck('month', month) + ' on the ' + printDay(schedule.day) + ' at ' + printTime(schedule.hour, schedule.minute) + ' UTC';\n          break;\n        }\n      case 'Week':\n        {\n          let week = Number(schedule.week) || 1;\n          answer += (week > 1 ? week : '') + ' ' + pluralCheck('week', week) + ' on ' + printDayOfWeek(schedule.dayOfWeek) + ' at ' + printTime(schedule.hour, schedule.minute) + ' UTC';\n          break;\n        }\n      case 'Day':\n        {\n          let day = Number(schedule.day) || 1;\n          answer += (day > 1 ? day : '') + ' ' + pluralCheck('day', day) + ' at ' + printTime(schedule.hour, schedule.minute) + ' UTC';\n          break;\n        }\n      case 'WeekDay':\n        {\n          let weekdays = Number(schedule.dayOfWeek) || 1;\n          answer += (weekdays > 1 ? weekdays : '') + ' ' + pluralCheck('weekday', weekdays) + ' at ' + printTime(schedule.hour, schedule.minute) + ' UTC';\n          break;\n        }\n      case 'Hour':\n        {\n          let hour = Number(schedule.hour) || 1;\n          let minute = schedule.minute || 0;\n          answer += (hour > 1 ? hour : '') + ' ' + pluralCheck('hour', hour) + ' at ' + minute + ' ' + pluralCheck('minute', minute) + ' passed the hour';\n          break;\n        }\n      case 'Minute':\n        {\n          let minutes = Number(schedule.minute) || 1;\n          answer += (minutes > 1 ? minutes : '') + ' ' + pluralCheck('minute', minutes);\n          break;\n        }\n      case 'Holiday':\n        {\n          answer += `${schedule.country.description} holidays`;\n          break;\n        }\n    }\n    answer += '.';\n    return answer;\n  }\n  function printExclusion(exclusion) {\n    let answer = '';\n    switch (exclusion.recurringInterval) {\n      case 'Month':\n        answer += 'Monthly from the ' + printDay(exclusion.startDay) + ' at ' + printTime(exclusion.startHour, exclusion.startMinute) + ' UTC to the ' + printDay(exclusion.endDay) + ' at ' + printTime(exclusion.endHour, exclusion.endMinute) + ' UTC';\n        break;\n      case 'Week':\n        answer += 'Weekly from ' + printDayOfWeek(exclusion.startDayOfWeek) + ' at ' + printTime(exclusion.startHour, exclusion.startMinute) + ' UTC to ' + printDayOfWeek(exclusion.endDayOfWeek) + ' at ' + printTime(exclusion.endHour, exclusion.endMinute) + ' UTC';\n        break;\n      case 'Day':\n        answer += 'Daily from ' + printTime(exclusion.startHour, exclusion.startMinute) + ' to ' + printTime(exclusion.endHour, exclusion.endMinute) + ' UTC';\n        break;\n      case 'WeekDay':\n        answer += 'Each week day from ' + printTime(exclusion.startHour, exclusion.startMinute) + ' to ' + printTime(exclusion.endHour, exclusion.endMinute) + ' UTC';\n        break;\n      case 'Hour':\n        answer += 'Hourly from ' + exclusion.startMinute + ' minutes to ' + exclusion.endMinute + ' minutes passed the hour';\n        break;\n      case 'Holiday':\n        answer += `${exclusion.country.description} holidays`;\n        break;\n    }\n    return answer;\n  }\n  function printExclusions(schedule) {\n    if (schedule.exclusions && schedule.exclusions.length > 0) {\n      let answer = '<p>Exclusions:</p><ul>';\n      _.forEach(schedule.exclusions, function (exclusion) {\n        answer += '<li>' + printExclusion(exclusion) + '</li>';\n      });\n      answer += '</ul>';\n      return answer;\n    } else {\n      return '';\n    }\n  }\n  function isAwsLinkPending() {\n    return !_.isEmpty($.cookie('aws-customer-id')) && !_.isEmpty($.cookie('aws-product-code'));\n  }\n  function isAwsContract() {\n    return !!(!_.isEmpty($.cookie('aws-is-contract')) && $.cookie('aws-is-contract') === 'true');\n  }\n  function findPlan(currentUser) {\n    return currentUser.org?.account?.purchasedPlans[0];\n  }\n  function intercomUpdate(currentUser) {\n    if (_environment.config.intercom.appId && window.Intercom) {\n      const purchasedPlan = findPlan(currentUser);\n      const application = _environment.config.isMonitoring ? 'Monitoring' : 'Testable';\n      const applicationUserAttribute = _environment.config.isMonitoring ? 'monitoring_user' : 'testable_user';\n      window.Intercom('update', {\n        app_id: _environment.config.intercom.appId,\n        name: currentUser.name,\n        email: currentUser.email,\n        created_at: currentUser.createdAt.unix(),\n        user_hash: currentUser.hmac,\n        plan_name: purchasedPlan?.plan?.name,\n        plan_price: purchasedPlan?.price || 0,\n        user_id: currentUser.id,\n        last_used_application: application,\n        [applicationUserAttribute]: true\n      });\n    }\n  }\n  function trackEvent(eventName, metadata) {\n    if (window.Intercom) window.Intercom('trackEvent', eventName, metadata);\n\n    // todo: bit hacky solution to track google analytics events\n    // actual code is in services/gtag.js file which should be used instead, but cannot import service from here\n    if (window.dataLayer) window.dataLayer.push({\n      event: eventName,\n      ...metadata\n    });\n  }\n  function toBaseResultUrl(model, regionSummary, selectedResource, uuid = null) {\n    const region = regionSummary.isAll ? null : regionSummary.executionRegion?.id;\n    const resource = selectedResource && selectedResource.id > 0 ? selectedResource.id : null;\n    let path = model.uuid || uuid ? '/p/' + (model.uuid || uuid) : '/executions/' + model.id;\n    if (region) path += '/regions/' + region;\n    if (resource) path += '/resources/' + resource;\n    return path;\n  }\n  function tryParseJson(input) {\n    try {\n      return JSON.parse(input);\n    } catch (err) {\n      return null;\n    }\n  }\n  function printPercent(percent) {\n    return isNumber(percent) ? Math.round(10000 * percent) / 100 + '%' : '-';\n  }\n  function printGranularity(granularity) {\n    switch (granularity) {\n      case 'FiveMinutes':\n        return '5m';\n      case 'OneMinute':\n        return '1m';\n      default:\n        return '10s';\n    }\n  }\n  function intervalFor(timestamp, granularity) {\n    return timestamp - timestamp % intervalMs(granularity);\n  }\n  function intervalMs(granularity) {\n    switch (granularity) {\n      case 'OneMinute':\n        return 60000;\n      case 'FiveMinutes':\n        return 300000;\n      default:\n        return 10000;\n    }\n  }\n  function granularityForTimespan(timespan) {\n    switch (timespan) {\n      case 60000:\n        return 'OneMinute';\n      case 300000:\n        return 'FiveMinutes';\n      default:\n        return 'TenSeconds';\n    }\n  }\n  function group(input, count) {\n    const answer = [];\n    let current = [];\n    let i = 0;\n    _.forEach(input, function (item) {\n      current.push(item);\n      if (i % count === count - 1 || i === input.length - 1) {\n        answer.push(current);\n        current = [];\n      }\n      i++;\n    });\n    return answer;\n  }\n  function splitArray(arr, splitSize) {\n    const answer = [];\n    if (_.isArray(arr)) {\n      let index = 0;\n      while (index < arr.length) {\n        const row = arr.slice(index, index + splitSize);\n        answer.push(row);\n        index += splitSize;\n      }\n    }\n    return answer;\n  }\n  function showLinkedTab() {\n    const hash = document.location.hash;\n    const prefix = \"tab_\";\n    if (hash) {\n      $('.nav-tabs a[href=\"' + hash.replace(prefix, \"\") + '\"]').tab('show');\n    }\n    $('.nav-tabs a').on('shown.bs.tab', function (e) {\n      window.location.hash = e.target.hash.replace(\"#\", \"#\" + prefix);\n    });\n  }\n  function getJson(method, url, retry) {\n    return new _rsvp.Promise(function (resolve, reject) {\n      const xmlhttp = new XMLHttpRequest();\n      xmlhttp.onreadystatechange = function () {\n        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {\n          try {\n            resolve(JSON.parse(xmlhttp.responseText));\n          } catch (err) {\n            if (!retry || retry < 3) {\n              setTimeout(function () {\n                getJson(method, url, (retry || 0) + 1).then(function (result) {\n                  resolve(result);\n                });\n              }, 500);\n            } else {\n              resolve({});\n            }\n          }\n        }\n      };\n      xmlhttp.open(method, url, true);\n      xmlhttp.setRequestHeader('Content-Type', 'application/json');\n      xmlhttp.send();\n    });\n  }\n  function setupHeaderSize() {\n    const topHeight = $('#header').height();\n    const isPrint = window.matchMedia(\"print\").matches;\n    if (!isPrint && $('.fixed-subheader').length) {\n      const subheaderHeight = $('.fixed-subheader').height();\n      $('#page').attr('style', (0, _template.htmlSafe)('padding-top: ' + (topHeight + subheaderHeight + 1) + 'px'));\n      $('.fixed-subheader').attr('style', (0, _template.htmlSafe)('top: ' + topHeight + 'px'));\n    } else if (!isPrint) {\n      $('#page').attr('style', (0, _template.htmlSafe)('padding-top: ' + topHeight + 'px'));\n    } else {\n      $('#page').attr('style', (0, _template.htmlSafe)('padding-top: 0px'));\n      $('.fixed-subheader').attr('style', (0, _template.htmlSafe)('top: 0px'));\n    }\n  }\n  function setupPrintRelatedCode(EventBus) {\n    const beforePrint = function () {\n      if (EventBus) EventBus.publish('beforePrint');\n      setupHeaderSize();\n    };\n    const afterPrint = function () {\n      if (EventBus) EventBus.publish('afterPrint');\n      setupHeaderSize();\n    };\n    if (window.matchMedia) {\n      let mediaQueryList = window.matchMedia('print');\n      mediaQueryList.addListener(function (mql) {\n        if (mql.matches) {\n          beforePrint();\n        } else {\n          afterPrint();\n        }\n      });\n    }\n    window.onbeforeprint = beforePrint;\n    window.onafterprint = afterPrint;\n  }\n  function waitForImages(selector, cb) {\n    const matches = $(selector);\n    if (matches.length === 0) cb();else {\n      const onLoadOrError = function () {\n        loaded++;\n        if (loaded >= matches.length) cb();\n      };\n      let loaded = 0;\n      matches.on('load', onLoadOrError);\n      matches.on('error', onLoadOrError);\n      for (let i = 0; i < matches.length; i++) {\n        if (matches[i].complete && matches[i].load) matches[i].load();\n      }\n      if (loaded >= matches.length) cb();\n    }\n  }\n  function mergeStats(statsList, schedules) {\n    const stats = {\n      scheduled: 0,\n      singleScheduled: 0,\n      recurringScheduled: 0,\n      activeScheduled: 0,\n      singleActiveScheduled: 0,\n      recurringActiveScheduled: 0,\n      count: 0,\n      Load: 0,\n      Functional: 0,\n      Monitor: 0\n    };\n    _.forEach(statsList, function (statsToMerge) {\n      _.mergeWith(stats, statsToMerge, function (c1, c2) {\n        return c1 + c2;\n      });\n    });\n    stats.tooltip = toRunningText(stats);\n    stats.scheduleTooltip = toScheduledText(stats, schedules);\n    return stats;\n  }\n  function computeRunningStats(running, scheduled) {\n    const stats = {\n      scheduled: 0,\n      singleScheduled: 0,\n      recurringScheduled: 0,\n      activeScheduled: 0,\n      singleActiveScheduled: 0,\n      recurringActiveScheduled: 0,\n      count: 0,\n      Load: 0,\n      Functional: 0,\n      Monitor: 0\n    };\n    _.forEach(running, function (exec) {\n      stats.count += 1;\n      stats[exec.testType] += 1;\n    });\n    _.forEach(scheduled, function (schedule) {\n      stats.scheduled += 1;\n      if (schedule.scheduleType === 'Single') stats.singleScheduled += 1;else stats.recurringScheduled += 1;\n      if (schedule.active) {\n        stats.activeScheduled += 1;\n        if (schedule.scheduleType === 'Single') stats.singleActiveScheduled += 1;else stats.recurringActiveScheduled += 1;\n      }\n    });\n    stats.tooltip = toRunningText(stats);\n    stats.scheduleTooltip = toScheduledText(stats, scheduled);\n    return stats;\n  }\n  function toRunningText(stats) {\n    if (stats && stats.count > 0) {\n      let hasText = false;\n      let answer = 'Currently running ';\n      if (stats.Load) {\n        answer += stats.Load + ' ' + pluralCheck('load test', Number(stats.Load));\n        hasText = true;\n      }\n      if (stats.Functional) {\n        if (hasText) answer += ', ';\n        answer += stats.Functional + ' ' + pluralCheck('functional test', Number(stats.Functional));\n        hasText = true;\n      }\n      if (stats.Monitor) {\n        if (hasText) answer += ', ';\n        answer += stats.Monitor + ' ' + pluralCheck('monitor', Number(stats.Monitor));\n      }\n      return answer;\n    }\n    return '';\n  }\n  function toScheduledText(stats, scheduled) {\n    if (stats.scheduled > 0) {\n      const next = _.maxBy(scheduled, function (schedule) {\n        return schedule.active && schedule.nextScheduled ? -1 * moment(schedule.nextScheduled).valueOf() : Number.MIN_VALUE;\n      });\n      let answer = 'Scheduled runs: ';\n      if (stats.singleActiveScheduled > 0) answer += `${stats.singleActiveScheduled} one-time ${pluralCheck('run', stats.singleActiveScheduled)}, `;\n      if (stats.recurringActiveScheduled > 0) answer += `${stats.recurringActiveScheduled} recurring ${pluralCheck('run', stats.recurringActiveScheduled)}, `;\n      if (stats.singleScheduled - stats.singleActiveScheduled > 0) {\n        const paused = stats.singleScheduled - stats.singleActiveScheduled;\n        answer += `${paused} paused one-time ${pluralCheck('run', paused)}, `;\n      }\n      if (stats.recurringScheduled - stats.recurringActiveScheduled > 0) {\n        const paused = stats.recurringScheduled - stats.recurringActiveScheduled;\n        answer += `${paused} paused recurring ${pluralCheck('run', paused)}, `;\n      }\n      answer = answer.substring(0, answer.length - 2) + '.';\n      if (next && next.nextScheduled) answer += `<br>Next scheduled: ${displayDateTime(next.nextScheduled)}`;\n      answer += '<br>Click for more details...';\n      return answer;\n    }\n    return '';\n  }\n  function pluralCheck(text, count) {\n    return count === 1 ? text : text + 's';\n  }\n  function buildSuccessHistory(histories) {\n    if (!histories || histories.length === 0) {\n      return [];\n    }\n    let minDate, maxDate;\n    _.forEach(histories, history => {\n      const date = moment(history.endingDate);\n      if (!minDate || date.isBefore(minDate)) {\n        minDate = date;\n      }\n      if (!maxDate || date.isAfter(maxDate)) {\n        maxDate = date;\n      }\n    });\n    const answer = [];\n    const byDate = new Map();\n    let date = maxDate;\n    while (date.isSameOrAfter(minDate)) {\n      const data = {\n        date: date\n      };\n      byDate.set(date.valueOf(), data);\n      answer.push(data);\n      date = date.clone().subtract(1, 'days');\n    }\n    _.forEach(histories, history => {\n      const date = moment(history.endingDate);\n      const data = byDate.get(date.valueOf());\n      if (data) {\n        data[history.granularity] = history;\n      }\n    });\n    return answer;\n  }\n  const unnamedLabel = '(unnamed)';\n  function testCaseDisplayName(name) {\n    return name?.trim() || unnamedLabel;\n  }\n  function getZoomParams(zoomInfo) {\n    const answer = {};\n    if (zoomInfo && !zoomInfo.isAll) {\n      answer.since = zoomInfo.startTimestamp;\n      answer.until = zoomInfo.endTimestamp;\n    }\n    return answer;\n  }\n  function isNumber(val) {\n    return _.isNumber(val) || _.isString(val) && val.length > 0 && !_.isNaN(Number(val));\n  }\n\n  // Wraps each item so plain property assignment on an item triggers a re-render.\n  function toTrackedObjects(items) {\n    return (items || []).map(item => new _trackedBuiltIns.TrackedObject(item));\n  }\n  function b64DecodeUnicode(str) {\n    try {\n      // Going backwards: from bytestream, to percent-encoding, to original string.\n      return decodeURIComponent(atob(str).split('').map(function (c) {\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n      }).join(''));\n    } catch (err) {\n      return atob(str);\n    }\n  }\n  function difference(object, base) {\n    function changes(object, base) {\n      return _.transform(object, function (result, value, key) {\n        if (!_.isEqual(value, base[key])) {\n          result[key] = _.isObject(value) && _.isObject(base[key]) ? changes(value, base[key]) : value;\n        }\n      });\n    }\n    return changes(object, base);\n  }\n  function stripHtml(html) {\n    const doc = new DOMParser().parseFromString(html, 'text/html');\n    return doc.body.textContent || \"\";\n  }\n  function displayPeriod(period) {\n    switch (period) {\n      case '7d':\n        return '7 Days';\n      case '1m':\n        return '1 Month';\n      case '3m':\n        return '3 Months';\n      default:\n        return 'Recent';\n    }\n  }\n  function resetQueryParams(controller) {\n    if (controller) {\n      _.forEach(controller.queryParams, function (val) {\n        if (_.isString(val)) controller[val] = undefined;else {\n          _.forEach(val, function (v, queryParamName) {\n            controller[queryParamName] = undefined;\n          });\n        }\n      });\n    }\n  }\n  function toListItem(title, value) {\n    return '<dt class=\"text-inverse\">' + title + '</dt><dd>' + value + '</dd>';\n  }\n  function toIpPopoverText(ip) {\n    let answer = '<dl class=\"dl-horizontal\">';\n    answer += toListItem('Status', ip.instanceId ? 'In Use' : 'Available');\n    if (ip.instanceId) answer += toListItem('Associated Instance', ip.instanceId);\n    answer += toListItem('Public IP', ip.publicIp);\n    if (ip.privateIp) answer += toListItem('Private IP', ip.privateIp);\n    answer += toListItem('ID', ip.id);\n    answer += '</dl>';\n    return answer;\n  }\n  function sortRegionIps(eips) {\n    return _.sortBy(eips, function (eip) {\n      return (eip.instanceId ? '' : '000') + eip.publicIp;\n    });\n  }\n  function revertToggle(id) {\n    const active = $(id).prop('checked');\n    const toggle = $(id).data('bs.toggle');\n    if (active) toggle.off(true);else toggle.on(true);\n  }\n  function isDatePassed(date) {\n    return moment(date).diff(moment()) <= 0;\n  }\n  function textToHtmlWithSpaces(text) {\n    return text ? text.split('\\n').join('<br>').split(' ').join('&nbsp;') : '';\n  }\n  function textToHtml(text) {\n    return text ? text.split('\\n').join('<br>') : '';\n  }\n  function parseBrowserInfo(info) {\n    if (info) {\n      const parts = info.split('-');\n      if (parts.length === 2) {\n        const browser = parts[0];\n        const fullVersion = parts[1];\n        const index = fullVersion.indexOf('.');\n        const version = index === -1 ? fullVersion : fullVersion.substring(0, index);\n        return {\n          browser,\n          version,\n          fullVersion\n        };\n      }\n    }\n    return null;\n  }\n  function toBrowserVersionLabel(info) {\n    const parsedInfo = parseBrowserInfo(info);\n    if (parsedInfo) {\n      const {\n        browser,\n        version,\n        fullVersion\n      } = parsedInfo;\n      const icon = toBrowserIcon(browser);\n      const className = (icon === 'fa-circle-nodes' ? 'fa ' : 'fab ') + icon;\n      return `<span class=\"label label-primary m-r-5\" data-bs-toggle=\"tooltip\" data-bs-title=\"${_.upperFirst(browser)} ${fullVersion}\">` + `<i class=\"${className} m-r-5\"></i>${version}</span>`;\n    }\n    return '';\n  }\n  function getBrowserLabel(info) {\n    info = info.split('-')?.[1] ? info : info + 'All';\n    return toBrowserVersionLabel(info);\n  }\n  function toBrowserVersionTitle(info) {\n    const parsedInfo = parseBrowserInfo(info);\n    if (parsedInfo) {\n      const {\n        browser,\n        version\n      } = parsedInfo;\n      return `${_.upperFirst(browser)} ${version}`;\n    }\n    return '';\n  }\n  function toBrowserVersion(info) {\n    const parsedInfo = parseBrowserInfo(info);\n    if (parsedInfo) {\n      const {\n        version\n      } = parsedInfo;\n      return version;\n    }\n    return '';\n  }\n  function toBrowserVersionText(info) {\n    const parsedInfo = parseBrowserInfo(info);\n    if (parsedInfo) {\n      const {\n        browser,\n        fullVersion\n      } = parsedInfo;\n      return `${_.upperFirst(browser)} ${fullVersion}`;\n    }\n    return 'N/A';\n  }\n  function toBrowserIcon(browser) {\n    switch (browser) {\n      case 'firefox':\n        return 'fa-firefox';\n      case 'edge':\n      case 'MicrosoftEdge':\n      case 'msedge':\n        return 'fa-edge';\n      case 'openfin':\n        return 'fa-circle-nodes';\n      case 'webkit':\n        return 'fa-safari';\n      default:\n        return 'fa-chrome';\n    }\n  }\n  function toDeviceLabel(device) {\n    if (device) {\n      let icon = '';\n      if (device.type === 'desktop') {\n        icon = 'fa-desktop';\n      } else {\n        icon = 'fa-mobile-alt';\n      }\n      let deviceLabel = `${device.width} x ${device.height}`;\n      let deviceTitle = `\n      Name: ${device.name}<br>\n      Type: ${ucFirst(device.type || 'device')}<br>\n    `;\n      if (device.type === 'device') {\n        deviceTitle += `\n          Scale Factor: ${device.scaleFactor || ''}<br>\n          Mobile: ${device.isMobile ? '&#10003;' : '&#x2715;'}<br>\n          Touch: ${device.isTouch ? '&#10003;' : '&#x2715;'}<br>\n          Landscape: ${device.isLandscape ? '&#10003;' : '&#x2715;'}<br>\n          User Agent: ${device.userAgent || ''}\n        `;\n      }\n      return `<span class=\"label label-primary m-r-5\" data-bs-html=\"true\" data-bs-toggle=\"tooltip\" data-bs-title=\"${deviceTitle}\">` + `<i class=\"fa ${icon} m-r-5\"></i>${deviceLabel}</span>`;\n    }\n    return '';\n  }\n  function getFilesWithExt(files, ext) {\n    let answer = [];\n    _.forEach(files, file => {\n      if (endsWith(file.name, ext)) {\n        answer.push(file);\n      }\n    });\n    return answer;\n  }\n  function isVisualScriptType(scriptType) {\n    return scriptType === 'Puppeteer' || scriptType === 'Selenium' || scriptType === 'Playwright';\n  }\n  function getResourceDropdown(testType, scriptType, vuText, count) {\n    const resourcesOptions = [];\n    if (testType !== 'Remote') {\n      if (scriptType !== 'Selenium' && scriptType !== 'Puppeteer' && scriptType !== 'Playwright' && scriptType !== 'Postman') {\n        resourcesOptions.push({\n          label: '1/16th (1 vCPU + 0.5 GB RAM per ' + count + ' ' + vuText + ')',\n          value: 1 / 16\n        });\n        resourcesOptions.push({\n          label: '1/8th (1 vCPU + 1 GB RAM per ' + count + ' ' + vuText + ')',\n          value: 1 / 8\n        });\n      }\n      if (scriptType !== 'Selenium') {\n        resourcesOptions.push({\n          label: '1/4th (1 vCPU + 2 GB RAM per ' + count + ' ' + vuText + ')',\n          value: 1 / 4\n        });\n      }\n      resourcesOptions.push({\n        label: '1/2 (2 vCPU + 4 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 1 / 2\n      });\n      resourcesOptions.push({\n        label: 'Normal (2 vCPU + 8 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 1\n      });\n      resourcesOptions.push({\n        label: '1.5x (2 vCPU + 8 GB RAM per ' + Math.ceil(count / 1.5) + ' ' + vuText + ')',\n        value: 1.5\n      });\n      resourcesOptions.push({\n        label: '2x (4 vCPU + 16 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 2\n      });\n      resourcesOptions.push({\n        label: '4x (8 vCPU + 32 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 4\n      });\n      resourcesOptions.push({\n        label: '8x (16 vCPU + 64 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 8\n      });\n      resourcesOptions.push({\n        label: '16x (32 vCPU + 128 GB RAM per ' + count + ' ' + vuText + ')',\n        value: 16\n      });\n    } else {\n      resourcesOptions.push({\n        value: 1,\n        label: \"Normal (2 vCPU + 4GB RAM)\"\n      });\n      resourcesOptions.push({\n        value: 2,\n        label: \"2x (2 vCPU + 8GB RAM)\"\n      });\n      resourcesOptions.push({\n        value: 4,\n        label: \"4x (4 vCPU + 16GB RAM)\"\n      });\n    }\n    return resourcesOptions;\n  }\n  let isSelfHostedCache = null;\n  function isSelfHostedOnly() {\n    if (isSelfHostedCache !== null) return isSelfHostedCache;\n    let accountSubs = _environment.config?.currentUser?.org?.account?.subscriptions;\n    let isSelfHosted = true;\n    accountSubs && accountSubs.forEach(sub => {\n      if (!sub.planProduct.product.selfHosted) {\n        isSelfHosted = false;\n      }\n    });\n    isSelfHostedCache = isSelfHosted;\n    return isSelfHostedCache;\n  }\n  function isSelfHostedCheck() {\n    if (_environment.config.currentUser?.org?.settings?.selfHostedOnly === 'true') {\n      return true;\n    }\n    return isSelfHostedOnly();\n  }\n  function updateLocationConcurrents(locations, keyVal, key) {\n    if (!locations || !locations.length) return;\n    locations.forEach(loc => {\n      loc.paramsWeight = parseInt(loc.params.weight);\n    });\n    const totalWeight = locations.reduce((total, loc) => total + parseInt(loc.params.weight), 0);\n    const weights = [];\n    locations.sort((a, b) => a.paramsWeight < b.paramsWeight ? 1 : -1).forEach(loc => {\n      weights.push(parseInt(loc.params.weight));\n    });\n    const normalizedWeights = weights.map(a => a / totalWeight);\n    const usableCount = keyVal - weights.length;\n    let buckets = normalizedWeights.map(a => 1 + Math.floor(a * usableCount));\n    let remainder = keyVal - buckets.reduce((a, b) => a + b, 0);\n    buckets = buckets.map(a => {\n      if (remainder > 0) {\n        a++;\n        remainder--;\n      }\n      return a;\n    });\n    let index = 0;\n    locations.sort((a, b) => a.paramsWeight < b.paramsWeight ? 1 : -1).forEach(loc => {\n      (0, _object.set)(loc.params, key, buckets[index]);\n      index++;\n    });\n  }\n  function getOrdinal(n) {\n    let s = [\"th\", \"st\", \"nd\", \"rd\"];\n    let v = n % 100;\n    return n + (s[(v - 20) % 10] || s[v] || s[0]);\n  }\n\n  /**\n   * Returns an array of surrounding years based on a given range.\n   *\n   * @param {number} [range=1] - The range of years to include before and after the current year.\n   * @return {number[]} - An array of surrounding years.\n   */\n  function getSurroundingYearsArray(range = 1) {\n    const currentYear = new Date().getFullYear();\n    let yearsArray = [];\n    for (let i = -range; i <= range; i++) {\n      let year = currentYear + i;\n      yearsArray.push(year);\n    }\n    return yearsArray;\n  }\n  function getMonthDaysArray() {\n    let days = [];\n    for (let i = 1; i <= 31; i++) {\n      days.push({\n        value: i,\n        text: getOrdinal(i)\n      });\n    }\n    return days;\n  }\n  function getMonthsArray() {\n    let months = [];\n    for (let i = 1; i <= 12; i++) {\n      months.push({\n        value: i,\n        text: moment().month(i - 1).format('MMMM')\n      });\n    }\n    return months;\n  }\n  function getWeekDaysArray() {\n    let days = [];\n    for (let i = 1; i <= 7; i++) {\n      days.push({\n        value: i,\n        text: moment().day(i).format('dddd')\n      });\n    }\n    return days;\n  }\n  function getDurationOptionsArray() {\n    let options = ['Month', 'Week', 'Day', 'WeekDay', 'Holiday', 'Hour', 'Minute'];\n    return options;\n  }\n  function javaPropertiesToString(flag, props) {\n    let sysPropStr = '';\n    _.forEach(props, (val, key) => {\n      sysPropStr += flag + key + '=' + val + ' ';\n    });\n    return sysPropStr.length > 1 ? sysPropStr.substring(0, sysPropStr.length - 1) : '';\n  }\n  function splitJavaProperties(flag, val) {\n    let answer = {};\n    if (!_.isEmpty(val)) {\n      val = val.trim();\n      _.forEach(val.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g), prop => {\n        if (prop.length > 0) {\n          let part = prop.split('=');\n          if (part[0].startsWith(flag) && part[1]?.trim()) {\n            answer[part[0].substring(flag.length).trim()] = part[1].trim();\n          }\n        }\n      });\n    }\n    return answer;\n  }\n  function truncateString(str, num, ellipsis) {\n    if (str.length <= num) {\n      return str;\n    }\n    const val = str && str.toString() || '';\n    const newLineIndex = val.indexOf('\\n');\n    str = newLineIndex === -1 ? val : val.substring(0, newLineIndex);\n    return str.slice(0, num) + (ellipsis === false ? \"\" : '...');\n  }\n  function sleep(ms) {\n    return new _rsvp.Promise(resolve => setTimeout(resolve, ms));\n  }\n  function msFromDuration(s = 0, m = 0, h = 0) {\n    return parseInt(h, 10) * 60 * 60 + parseInt(m, 10) * 60 + parseInt(s, 10);\n  }\n  function mergeArrayOfObjects(currentArr, newArr, key) {\n    const mergedArr = [];\n    currentArr.forEach(obj => {\n      const obj2 = newArr.find(o => o[key] === obj[key]);\n      if (obj2) {\n        mergedArr.push({\n          ...obj2,\n          ...obj\n        });\n      } else {\n        mergedArr.push(obj);\n      }\n    });\n    newArr.forEach(obj2 => {\n      const obj = currentArr.find(o => o[key] === obj2[key]);\n      if (!obj) {\n        mergedArr.push(obj2);\n      }\n    });\n    return mergedArr;\n  }\n  function elementInView(elem) {\n    return elem && elem.length > 0 ? $(window).height() + $(window).scrollTop() > $(elem).offset().top : false;\n  }\n  function addHistoryToIntervals(intervals) {\n    return intervals.map(obj => {\n      const modifiedObj = {};\n      Object.keys(obj).forEach(key => {\n        if (key.startsWith(\"Testable-\")) {\n          modifiedObj[`${key}-history`] = obj[key]; // add -history with all testable metrics for baseline in amcharts\n        } else {\n          modifiedObj[key] = obj[key];\n        }\n      });\n      return modifiedObj;\n    });\n  }\n  function getSessionsList(maxSessionNum, onlySessions = false) {\n    return Array.from({\n      length: maxSessionNum + 2\n    }, (_, i) => ({\n      value: i === 0 ? -1 : i - 1,\n      title: i === 0 ? 'ALL' : i === 1 ? 'Not Session Specific' : `Session ${i - 1}`\n    })).filter((item, index) => {\n      return !(onlySessions && (index === 0 || index === 1));\n    });\n  }\n  function getUniqueName(baseName, array) {\n    const namePattern = new RegExp(`^${baseName}( \\\\((\\\\d+)\\\\))?$`);\n    let highestSuffix = 0;\n    let baseNameExists = false;\n    array.forEach(name => {\n      const match = name.match(namePattern);\n      if (match && match[2]) {\n        const suffix = parseInt(match[2], 10);\n        if (suffix > highestSuffix) {\n          highestSuffix = suffix;\n        }\n      } else if (match) {\n        baseNameExists = true;\n      }\n    });\n    if (!baseNameExists) {\n      highestSuffix = -1;\n    }\n    const newSuffix = highestSuffix + 1;\n    return `${baseName}${newSuffix > 0 ? ` (${newSuffix})` : ''}`;\n  }\n  const operators = ['GTE', 'GreaterThan', 'LTE', 'LessThan', 'Equals', 'NotEquals'];\n  function createCondition(type) {\n    switch (type) {\n      case 'latency':\n        return {\n          valueType: 'Absolute',\n          timePeriod: 'EntireTest',\n          operator: 'LTE',\n          namespace: 'Testable',\n          metric: 'firstReceivedMs',\n          metricKey: 'p50'\n        };\n      case 'throughput':\n        return {\n          valueType: 'Absolute',\n          timePeriod: 'EntireTest',\n          operator: 'GTE',\n          namespace: 'Testable',\n          metric: 'throughput'\n        };\n      case 'success':\n        return {\n          valueType: 'Absolute',\n          timePeriod: 'EntireTest',\n          operator: 'GTE',\n          namespace: 'Testable',\n          metric: 'outcome',\n          metricKey: 'success',\n          isPercentage: true\n        };\n      case 'assertion':\n        return {\n          valueType: 'Absolute',\n          timePeriod: 'EntireTest',\n          operator: 'GTE',\n          namespace: 'Testable',\n          metric: 'assertions',\n          metricKey: 'passed',\n          isPercentage: true\n        };\n      default:\n        return {\n          valueType: 'Absolute',\n          timePeriod: 'EntireTest',\n          operator: 'LTE'\n        };\n    }\n  }\n  function getTestLinks(isLiveTest, isFunctionalTest) {\n    const liveTestLink = {\n      type: 'live',\n      title: 'Live Test',\n      icon: 'fa-rss',\n      route: 'live-test'\n    };\n    const createTestLink = {\n      type: 'create',\n      title: 'Create Test',\n      icon: 'fa-plus',\n      route: 'new'\n    };\n    const remoteTestLink = {\n      type: 'remote',\n      title: 'Remote Test',\n      icon: 'fa-diagram-project',\n      route: 'remote-configurator'\n    };\n    const testLinks = [];\n    if (isLiveTest) {\n      testLinks.push(liveTestLink);\n      testLinks.push(remoteTestLink);\n      testLinks.push(createTestLink);\n    } else if (isFunctionalTest) {\n      testLinks.push(remoteTestLink);\n      testLinks.push(liveTestLink);\n      testLinks.push(createTestLink);\n    } else {\n      testLinks.push(createTestLink);\n      testLinks.push(remoteTestLink);\n      testLinks.push(liveTestLink);\n    }\n    return testLinks;\n  }\n  function sanitizeTestCaseName(name) {\n    return name.replace('/', '%2F');\n  }\n  function decodeTestCaseName(name) {\n    return name.replace('%2F', '/');\n  }\n  function sanitizeFolderName(folderPath) {\n    const disallowedCharacters = /[<>:\"/\\\\|?*\\x00-\\x1F]/g; // Windows disallowed characters\n\n    // Check for reserved names (Windows specific)\n    const reservedNames = ['.', '..', 'CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'];\n    const folders = folderPath.split('/');\n    for (let folder of folders) {\n      folder = folder.trim();\n      if (reservedNames.includes(folder.toUpperCase())) {\n        return false;\n      }\n      folder = folder.replace(disallowedCharacters, '_');\n    }\n    let path = folders.join('/');\n    path = path.replace(/\\/{2,}/g, '/');\n    path = path.replace(/^\\/?(.*)/, '/$1');\n    return path;\n  }\n  function deepCopy(obj) {\n    return JSON.parse(JSON.stringify(obj));\n  }\n  function userRoles() {\n    return ['Admin', 'Regular', 'Viewer'];\n  }\n  function getRepoLink(vcsRoot) {\n    const repoLink = data => {\n      let url = data.url;\n      url = url.replace(/\\.git$/, '');\n      if (url.startsWith('git@')) {\n        url = url.replace('git@', 'https://').replace(':', '/');\n      }\n      return `${url}/commit/${data.vcsCommit}`;\n    };\n    const repoName = url => {\n      if (!url.includes(\"://\")) url = url.replace(\":\", \"/\", 1);\n      const path = new URL(url.includes('://') ? url : `https://${url}`).pathname;\n      return path.replace(/\\.git$/, '').replace(/^\\/+|\\/+$/g, '');\n    };\n    const {\n      url,\n      branch = '',\n      vcsCommit = ''\n    } = vcsRoot || {};\n    let html;\n    if (url) {\n      const link = repoLink({\n        url,\n        vcsCommit\n      });\n      const name = repoName(url);\n      const fullCommit = name + '@' + branch + (vcsCommit ? `#${vcsCommit.slice(0, 6)}` : '');\n      html = `<a href=\"${link}\" target=\"_blank\">${fullCommit}</a>`;\n    }\n    return html;\n  }\n  const UnlimitedTestingText = '<p>All test runners in this region are pre-paid externally (e.g. AWS Marketplace AMI).</p>' + '<p>No additional credits will be charged by Testable for running a test in this region. Generate as much load as you want ' + 'in this region. Just be careful not to overload the resources (i.e. CPU, memory, network bandwidth) of the test runner for accurate results.</p>';\n  const UnlimitedInfo = '<p>Unlimited test runners are pre-paid externally (e.g. AWS Marketplace AMI). Tests run in regions with only pre-paid test runners do not incur any additional credit charges on Testable.</p>' + '<p>Tests run on regular, non-unlimited test runners are charged credits according to the policy outlined at Documentation => Billing.</p>';\n  const UpdateInterval = 10000;\n  const SplitCsvText = 'If checked, any CSV files (including within a zip file) will be split evenly across the allocated ' + 'test runner instances when this scenario is used in a test run. The CSV needs to have at least as many rows as there ' + 'are allocated test runners. Applies only to files with a .csv extension.';\n  const JMeterTxnPrefix = 'jmeterTxn';\n  const SystemNs = 'Testable';\n  const CleanupPolicyText = '<p><strong>Intelligent Sampling: </strong>Per test configuration, delete all tests older than the account maximum results retention time (typically 90 days for free accounts and 1 year for paid accounts). ' + 'If more than 10 test runs still remain after that, apply the following logic: ' + '<ul><li><i>For test runs older than 30 days: </i>Keep all failures and at most one successful run per 6 hours.</li>' + '<li><i>For tests runs between 7-30 days old: </i>Keep all failures and at most one successful run per 4 hours.</li>' + '<li><i>For tests runs between 3-7 days old: </i>Keep all failures and at most one successful run per 1 hour.</li>' + '<li><i>For tests runs less than 3 days old: </i>Keep all test runs.</li></ul>' + '</p>' + '<p><strong>Choose # of test runs to keep: </strong> Choose how many past test runs to keep per test configuration. ' + 'Test runs older than the account maximum result retention time will still get deleted unless it is the most recent run.</p>' + '<p><strong>Choose # of days to keep: </strong> Choose how many days worth of test runs to keep per test configuration. ' + 'Test runs older than the account maximum result retention time will still get deleted unless it is the most recent run.</p>';\n  const TestRunnerEquivalentText = 'For billing/licensing purposes 1 test runner  = 2 vCPU + 8GB RAM. So for example if you launch a test runner with ' + 'access to 4 vCPU + 16GB RAM that will count as 2 test runners for licensing purposes. For long running self-hosted ' + ' test runners you can limit the resources via container launch options.';\n  const InstalledBrowsersText = 'Test runners come with the latest version of each browser pre-installed. Additional browser versions are ' + 'installed as required on demand. When a test starts, Testable will try to assign virtual users that require ' + 'certain browser versions to test runners that already have that version installed if possible.';\n  const EncryptionText = \"Use an AWS KMS key, Azure KeyVault key, or a Google Cloud key to encrypt and protect your data. This include \" + \"any uploaded files, scripts, parameters, screenshots, video, and output files. If you do not provide your own key, \" + \"we will automatically use a Testable's KMS key to encrypt your data.\";\n  function observeKeys(context, keys, handler) {\n    keys.forEach(k => {\n      const root = k.split('.')[0];\n      if (root !== k) void context[root];\n      (0, _observers.addObserver)(context, k, handler);\n    });\n  }\n  function unobserveKeys(context, keys, handler) {\n    keys.forEach(k => (0, _observers.removeObserver)(context, k, handler));\n  }\n  function stripEvents(...args) {\n    return args.map(arg => arg instanceof Event ? undefined : arg);\n  }\n\n  // Narrows a bulk schedule request to the most specific target given.\n  function toScheduleIds(testCaseId, scriptId, confId) {\n    if (confId) return {\n      conf: confId\n    };\n    if (scriptId) return {\n      script: scriptId\n    };\n    return {\n      testCase: testCaseId\n    };\n  }\n  const lib = {\n    toScheduleIds: toScheduleIds,\n    unnamedLabel: unnamedLabel,\n    testCaseDisplayName: testCaseDisplayName,\n    endsWith: endsWith,\n    getRelativeDuration: getRelativeDuration,\n    displayRelativeDuration: displayRelativeDuration,\n    liveRelativeDuration: liveRelativeDuration,\n    RelativeDurationInterval: RelativeDurationInterval,\n    toUrl: toUrl,\n    addAuthToUrl: addAuthToUrl,\n    removeScheme: removeScheme,\n    displayDate: displayDate,\n    displayTime: displayTime,\n    displayMilitaryTime: displayMilitaryTime,\n    displayDateTime: displayDateTime,\n    displayTimestamp: displayTimestamp,\n    displayPercent: displayPercent,\n    getChangeDisplay: getChangeDisplay,\n    printChange: printChange,\n    toMetricKey: toMetricKey,\n    printMetric: printMetric,\n    printMetricValue: printMetricValue,\n    printNoRounding: printNoRounding,\n    findMetric: findMetric,\n    toPromise: toPromise,\n    stickyFail: stickyFail,\n    fail: fail,\n    messageFromFail: messageFromFail,\n    error: error,\n    info: info,\n    confirm: confirm,\n    scrollToTop: scrollToTop,\n    makeColumnsDraggable: makeColumnsDraggable,\n    scrollTo: scrollTo,\n    printBytes: printBytes,\n    printBitRate: printBitRate,\n    updateGrid: updateGrid,\n    print: print,\n    printNumber: printNumber,\n    printShortNumber: printShortNumber,\n    printContextSize: printContextSize,\n    printContextWindow: printContextWindow,\n    printKbps: printKbps,\n    printCcy: printCcy,\n    sortByMoment: sortByMoment,\n    sortBy: sortBy,\n    sortByIgnoreCase: sortByIgnoreCase,\n    sortByFunction: sortByFunction,\n    findById: findById,\n    hasId: hasId,\n    origin: origin,\n    toPlanHtml: toPlanHtml,\n    userAborted: userAborted,\n    modalPosition: modalPosition,\n    camelCaseToTitleCase: camelCaseToTitleCase,\n    scrollElementVert: scrollElementVert,\n    setupAllToggles: setupAllToggles,\n    splitMetricName: splitMetricName,\n    htmlEncode: htmlEncode,\n    htmlDecode: htmlDecode,\n    popoverRow: popoverRow,\n    base64ToBinary: base64ToBinary,\n    binaryToBase64: binaryToBase64,\n    toDataUrl: toDataUrl,\n    byteLength: byteLength,\n    removeById: removeById,\n    newSockjs: newSockjs,\n    toUrlAndScheme: toUrlAndScheme,\n    replaceAll: replaceAll,\n    printDuration: printDuration,\n    nextBillingDate: nextBillingDate,\n    prevBillingDate: prevBillingDate,\n    addAuthToDataStore: addAuthToDataStore,\n    addAuthToOutputFile: addAuthToOutputFile,\n    toMetricValue: toMetricValue,\n    toMetricUnits: toMetricUnits,\n    getMetricName: getMetricName,\n    getRelatedMetric: getRelatedMetric,\n    toText: toText,\n    printTime: printTime,\n    printDay: printDay,\n    printDayOfWeek: printDayOfWeek,\n    printSchedule: printSchedule,\n    printExclusion: printExclusion,\n    printExclusions: printExclusions,\n    isAwsLinkPending: isAwsLinkPending,\n    isAwsContract: isAwsContract,\n    intercomUpdate: intercomUpdate,\n    toBaseResultUrl: toBaseResultUrl,\n    isUtilizationMetric: isUtilizationMetric,\n    tryParseJson: tryParseJson,\n    printPercent: printPercent,\n    printGranularity: printGranularity,\n    intervalFor: intervalFor,\n    intervalMs: intervalMs,\n    granularityForTimespan: granularityForTimespan,\n    group: group,\n    splitArray: splitArray,\n    trackEvent: trackEvent,\n    showLinkedTab: showLinkedTab,\n    getJson: getJson,\n    setupHeaderSize: setupHeaderSize,\n    setupPrintRelatedCode: setupPrintRelatedCode,\n    waitForImages: waitForImages,\n    isNumber: isNumber,\n    getZoomParams: getZoomParams,\n    b64DecodeUnicode: b64DecodeUnicode,\n    mergeStats: mergeStats,\n    computeRunningStats: computeRunningStats,\n    toRunningText: toRunningText,\n    pluralCheck: pluralCheck,\n    buildSuccessHistory: buildSuccessHistory,\n    difference: difference,\n    stripHtml: stripHtml,\n    displayPeriod: displayPeriod,\n    resetQueryParams: resetQueryParams,\n    toIpPopoverText: toIpPopoverText,\n    sortRegionIps: sortRegionIps,\n    revertToggle: revertToggle,\n    toTrackedObjects: toTrackedObjects,\n    isDatePassed,\n    textToHtml,\n    textToHtmlWithSpaces,\n    toBrowserVersionLabel,\n    getBrowserLabel,\n    toBrowserVersionText,\n    toBrowserVersionTitle,\n    toBrowserVersion,\n    toBrowserIcon,\n    toDeviceLabel,\n    getFilesWithExt,\n    isVisualScriptType,\n    UnlimitedTestingText: UnlimitedTestingText,\n    UnlimitedInfo: UnlimitedInfo,\n    UpdateInterval: UpdateInterval,\n    SplitCsvText: SplitCsvText,\n    JMeterTxnPrefix: JMeterTxnPrefix,\n    SystemNs: SystemNs,\n    CleanupPolicyText: CleanupPolicyText,\n    TestRunnerEquivalentText: TestRunnerEquivalentText,\n    InstalledBrowsersText: InstalledBrowsersText,\n    EncryptionText,\n    printDurationFromMS,\n    secondsToDhms,\n    timeToMs,\n    ucFirst,\n    getOrdinal,\n    getSurroundingYearsArray,\n    getMonthDaysArray,\n    getMonthsArray,\n    getWeekDaysArray,\n    getDurationOptionsArray,\n    isSelfHostedOnly,\n    isSelfHostedCheck,\n    getResourceDropdown,\n    updateLocationConcurrents,\n    displayDateUTC,\n    splitJavaProperties,\n    javaPropertiesToString,\n    truncateString,\n    sleep,\n    operators,\n    createCondition,\n    elementInView,\n    msFromDuration,\n    mergeArrayOfObjects,\n    addHistoryToIntervals,\n    getSessionsList,\n    getTestLinks,\n    updateIcon,\n    deepCopy,\n    getUniqueName,\n    userRoles,\n    sanitizeTestCaseName,\n    sanitizeFolderName,\n    decodeTestCaseName,\n    getRepoLink,\n    generateClientUpdateId,\n    isOwnClientUpdateId,\n    observeKeys,\n    unobserveKeys,\n    stripEvents\n  };\n  var _default = _exports.default = lib;\n});","define(\"@testable/shared-ui/utils/load-test\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/http\", \"@testable/shared-ui/utils/server\", \"@testable/shared-ui/utils/aws\", \"@testable/shared-ui/utils/azure\", \"@testable/shared-ui/utils/gcp\", \"@testable/shared-ui/utils/environment\", \"@testable/shared-ui/models/location\", \"@testable/shared-ui/models/trigger-condition\", \"tracked-built-ins\"], function (_exports, _lib, _http, _server, _aws, _azure, _gcp, _environment, _location, _triggerCondition, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/http\",0,\"@testable/shared-ui/utils/server\",0,\"@testable/shared-ui/utils/aws\",0,\"@testable/shared-ui/utils/azure\",0,\"@testable/shared-ui/utils/gcp\",0,\"@testable/shared-ui/utils/environment\",0,\"@testable/shared-ui/models/location\",0,\"@testable/shared-ui/models/trigger-condition\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  const PercentSuffix = '-percent';\n  const TotalSuffix = '-total';\n  const SystemNs = _lib.default.SystemNs;\n  const UserNs = 'User';\n  const MaxUsersDropdown = 500;\n  const JMeterTxnPrefix = _lib.default.JMeterTxnPrefix;\n  const MetadataCache = {\n    Aws: {},\n    Azure: {},\n    Gcp: {}\n  };\n  function doesFileMatchFilter(file, filter) {\n    if (!filter || !file) {\n      return true;\n    }\n    if (filter.agent && filter.agent !== 'ALL' && file.agentId !== Number(filter.agent)) {\n      return false;\n    }\n    if (filter.region && filter.region !== 'ALL' && file.executionRegionId !== Number(filter.region)) {\n      return false;\n    }\n    if (_.isNumber(filter.user) && file.globalConcurrentClientIndex !== Number(filter.user)) {\n      return false;\n    }\n    if (_.isNumber(filter.iteration) && file.iteration !== Number(filter.iteration)) {\n      return false;\n    }\n    if (filter.failuresOnly && !file.isRelatedToFailure) {\n      return false;\n    }\n    if (filter.suiteTestIds && filter.suiteTestIds.length > 0 && !filter.suiteTestIds.includes(file.suiteTestId)) {\n      return false;\n    }\n    if (filter.suiteErrorIds && filter.suiteErrorIds.length > 0 && !filter.suiteErrorIds.includes(file.suiteErrorId)) {\n      return false;\n    }\n    if (filter.commandNameIds && filter.commandNameIds.length > 0 && !filter.commandNameIds.includes(file.commandNameIds)) {\n      return false;\n    }\n    if (filter.commandErrorIds && filter.commandErrorIds.length > 0 && !filter.commandErrorIds.includes(file.commandErrorIds)) {\n      return false;\n    }\n    return true;\n  }\n  function toFileFilterParams(filter, zoomInfo, execId) {\n    let answer = {};\n    if ((!execId || execId >= _environment.config.minExecutionIdLoggingRegionFilterEnabled) && filter.agent && filter.agent !== 'ALL') {\n      answer.agents = filter.agent;\n    }\n    if (filter.region && filter.region !== 'ALL') {\n      answer.regions = filter.region;\n    }\n    if (!_.isUndefined(filter.user) && filter.user !== 'ALL') {\n      answer.client = filter.user;\n    }\n    if (!_.isUndefined(filter.iteration) && filter.iteration !== 'ALL') {\n      answer.iteration = filter.iteration;\n    }\n    if (!_.isUndefined(filter.browser) && filter.browser !== 'ALL') {\n      answer.browsers = filter.browser;\n    }\n    _.merge(answer, _lib.default.getZoomParams(zoomInfo));\n    if (filter.failuresOnly) {\n      answer.failuresOnly = true;\n    }\n    if (filter.suiteTestIds && filter.suiteTestIds.length > 0) {\n      answer.suiteTestIds = filter.suiteTestIds.join();\n    }\n    if (filter.suiteErrorIds && filter.suiteErrorIds.length > 0) {\n      answer.suiteErrorIds = filter.suiteErrorIds.join();\n    }\n    return answer;\n  }\n  async function getDefaultSizing(instanceTypesInternal, type, scenarioType) {\n    let newInstanceTypes = instanceTypesInternal;\n    const {\n      settings\n    } = _environment.config.currentUser.org;\n    const capType = _.capitalize(type);\n    const ratio = settings[`${type}AdvancedRatio${scenarioType}`];\n    let instanceTypeName = settings[`${type}AdvancedInstanceType`];\n    let selectedInstanceType;\n    if (instanceTypeName) {\n      selectedInstanceType = await this.findInstanceType(instanceTypeName, newInstanceTypes);\n      if (!selectedInstanceType) {\n        const source = _environment.config.providersAll.find(provider => provider.source === capType && provider.public && provider.providerType === 'OnDemand');\n        const sourceId = source.id;\n        const metadata = await this.getMetadata(sourceId, type, getDefaultRegion(capType));\n        if (_.isArray(metadata) && metadata.length) {\n          newInstanceTypes = metadata;\n          selectedInstanceType = await this.findInstanceType(instanceTypeName, newInstanceTypes);\n        }\n      }\n    }\n    return {\n      configType: 'manual',\n      instanceStrategy: 'Manual',\n      ratio,\n      selectedInstanceFamily: selectedInstanceType,\n      selectedInstanceSeries: selectedInstanceType,\n      instanceType: selectedInstanceType,\n      newInstanceTypes\n    };\n  }\n  async function getMetadata(providerId, selectedCloudProvider, regionName = '') {\n    const type = _.capitalize(selectedCloudProvider);\n    if (!providerId || !regionName) return;\n    const cache = MetadataCache[type];\n    const key = providerId + '|' + regionName + '|' + 'Advanced';\n    const alternateKey = providerId + '|' + regionName + '|Advanced';\n    if (!cache[key] && !cache[alternateKey]) {\n      try {\n        cache[key] = await _server.default[`get${type}MetadataForProvider`](regionName, providerId, true);\n      } catch (e) {\n        delete cache[key];\n        throw e;\n      }\n    }\n    await _lib.default.sleep(0);\n    const result = cache[key] || cache[alternateKey];\n    _.forEach(result.instanceTypes, instanceType => {\n      instanceType.family = instanceType.name.substring(0, instanceType.name.indexOf('.'));\n    });\n    const instanceTypes = !_environment.config.isOnPrem ? _.filter(result.instanceTypes, instanceType => {\n      const name = instanceType.name;\n      return !_lib.default.endsWith(name, 'xlarge') || _lib.default.endsWith(name, '.xlarge') || _lib.default.endsWith(name, '.2xlarge');\n    }) : result.instanceTypes;\n    return _.sortBy(instanceTypes, ['family', 'memory']);\n  }\n  function toCreateDetails(uniqueId, confId, testType, isMultiUser, scriptId, locations, instancesConfigs, bpTrigger, successTrigger, overrideTraceEnabled, tracesEnabled, scheduleParamsList, useDefaultNotifications, notifications, profileType, type, ipFilters, network, imageDiffMode, percentiles, manualStart, hostsFile, hostAliasesFile, overrideReassignOnFail, reassignOnFail, outputFileRetention, outputFileMaxCount, cleanupPolicy, retentionCount, browsers, locationsDistribution, onlyCaptureFailure, billingDisableStrategyOption, billingStrategy, billingAsapStrategy, billingChosenAsapCategory, testRunnerSettings, testRunnerType, loadType, concurrentClients, maxDuration, useDefaultRunnerSettings, scriptType) {\n    let details = {\n      testType: testType,\n      active: true,\n      name: $('#loadTestName').val(),\n      scriptId: scriptId,\n      triggers: getTriggers(bpTrigger, successTrigger),\n      scriptParams: getScriptParams('conf'),\n      imageDiffMode: imageDiffMode,\n      percentiles: _.isString(percentiles) ? percentiles.trim() : null,\n      useDefaultPercentiles: _.isEmpty(percentiles),\n      manualStart: manualStart,\n      hostsFile: hostsFile,\n      hostAliasesFile: hostAliasesFile,\n      deleteHostFields: hostsFile === null && hostAliasesFile === null,\n      outputFileRetention: outputFileRetention,\n      outputFileMaxCount: Number(outputFileMaxCount),\n      cleanupPolicy,\n      retentionCount,\n      useDefaultNotifications,\n      notifications,\n      browsers,\n      locationsDistribution,\n      useDefaultRunnerSettings\n    };\n    if (testType === 'Load') {\n      details.concurrentClients = profileType === 'BreakingPoint' ? 1 : Number(concurrentClients);\n      details.iterationSleepSecs = !isMultiUser ? parseInt($('#iterationSleepSecs').val().trim()) : 0;\n      details.rampupSecs = !isMultiUser && profileType === 'Flat' ? parseInt($('#rampupMins').val().trim()) * 60 : 0;\n      details.profileType = profileType;\n      if (details.profileType === 'Step') {\n        details.startConcurrentClients = Number($('#startConcurrentClients').val());\n        details.step = Number($('#step').val());\n      }\n      if (isMultiUser) {\n        details.iterations = 1;\n      } else if (type === 'iterations') {\n        details.iterations = Number($('#testLength').val().trim());\n      } else {\n        details.durationSecs = Math.max(60, Number($('#testLength').val().trim()) * 60);\n      }\n      if (maxDuration) {\n        details.maxDuration = maxDuration;\n      } else {\n        details.deleteMaxDuration = true;\n      }\n    } else {\n      details.concurrentClients = isMultiUser ? 1 : locations?.length;\n      details.rampupSecs = 0;\n      details.profileType = 'Flat';\n      details.iterations = 1;\n      details.iterationSleepSecs = 0;\n    }\n    details.overrideTraces = overrideTraceEnabled;\n    if (overrideTraceEnabled) {\n      details.tracesEnabled = tracesEnabled;\n      details.onlyCaptureFailure = onlyCaptureFailure;\n      details.overrideOnlyCaptureFailure = true;\n    }\n    details.overrideReassignOnFail = overrideReassignOnFail;\n    if (overrideReassignOnFail) {\n      details.reassignOnFail = reassignOnFail;\n    }\n    if (scheduleParamsList) {\n      const schedules = _.cloneDeep(scheduleParamsList);\n      _.forEach(schedules, function (schedule) {\n        if (schedule.nextScheduled && schedule.nextScheduled.valueOf) {\n          schedule.nextScheduled = schedule.nextScheduled.valueOf();\n        }\n      });\n      details.schedules = schedules;\n    } else if (scheduleParamsList && scheduleParamsList.length === 0) {\n      details.schedules = [];\n    }\n    if (_.isEmpty(ipFilters)) {\n      details.deleteIpFilters = true;\n    } else {\n      details.ipFilters = ipFilters;\n    }\n    if (_.isEmpty(network)) {\n      details.deleteNetwork = true;\n    } else {\n      details.network = network;\n    }\n    let billingSettingsObj = {};\n    billingSettingsObj.strategy = billingStrategy;\n    if (billingStrategy === 'ASAP') {\n      billingSettingsObj.asapStrategy = billingAsapStrategy;\n      if (billingAsapStrategy === 'choose') {\n        billingSettingsObj.chosenCategories = billingChosenAsapCategory;\n      }\n    }\n    if (_.isNumber(confId)) {\n      if (billingDisableStrategyOption) {\n        details.useDefaultBillingSettings = true;\n      } else {\n        details.useDefaultBillingSettings = false;\n        details.billingSettings = billingSettingsObj;\n      }\n    } else {\n      if (!billingDisableStrategyOption) {\n        details.billingSettings = billingSettingsObj;\n      }\n    }\n    details.providers = getProviders(locations, instancesConfigs, profileType, scriptType);\n    if (testRunnerType === 'Basic') {\n      details.providers = details.providers.map(provider => {\n        delete provider.params.spot;\n        delete provider.params.spotMaxPrice;\n        delete provider.params.instanceType;\n        delete provider.params.nodes;\n        delete provider.params.image;\n        delete provider.params.instanceStrategy;\n        delete provider.params.ratio;\n        delete provider.params.awsTags;\n        delete provider.params.azureTags;\n        delete provider.params.gcpTags;\n        return provider;\n      });\n      details.testRunnerSettings = testRunnerSettings || {};\n    } else {\n      details.deleteTestRunnerSettings = true;\n    }\n    if (isMultiUser) {\n      details.loadType = loadType;\n    }\n    return details;\n  }\n  function getTriggers(bpTrigger, successTrigger) {\n    let triggers = [];\n    if (bpTrigger) {\n      triggers.push(bpTrigger);\n    }\n    if (successTrigger) {\n      triggers.push(successTrigger);\n    }\n    return triggers;\n  }\n  function getDefaultRegion(source) {\n    let region;\n    switch (source) {\n      case 'Aws':\n        region = 'us-east-1';\n        break;\n      case 'Azure':\n        region = 'eastus';\n        break;\n      case 'Gcp':\n        region = 'us-east1';\n        break;\n    }\n    return region;\n  }\n  function getProviders(locations, instancesConfigs, profileType, scriptType) {\n    const answer = [];\n    const sharedLocations = {};\n    _.forEach(locations, function (loc) {\n      if (loc?.testRunnerSource) {\n        switch (loc.testRunnerSource.providerType) {\n          case 'Shared':\n            {\n              let locsPerSource = sharedLocations[loc.testRunnerSource.id];\n              if (!locsPerSource) {\n                locsPerSource = [];\n                sharedLocations[loc.testRunnerSource.id] = locsPerSource;\n              }\n              locsPerSource.push(loc);\n              break;\n            }\n          case 'OnDemand':\n            if (instancesConfigs && instancesConfigs[loc.testRunnerSource?.source] && loc?.regionInfo) {\n              answer.push({\n                providerId: loc.testRunnerSource.id,\n                params: getParams(loc, instancesConfigs[loc.testRunnerSource.source], profileType, scriptType),\n                numRegions: 1\n              });\n            }\n            break;\n        }\n      }\n    });\n    _.forEach(sharedLocations, function (locations, providerId) {\n      let regions = '';\n      let startConcurrentClients = '';\n      let step = '';\n      let concurrentClients = '';\n      let weight = '';\n      let freeAgentsOnly = '';\n      let maxAgents = '';\n      let tags = '';\n      let numRegions = 0;\n      _.forEach(locations, function (location) {\n        if (location.regionInfo && location.regionInfo.region) {\n          const r = location.regionInfo.region;\n          regions += (r.publicShared ? r.publicShared.region.id : r.id) + ',';\n          if (profileType === 'Step') {\n            startConcurrentClients += location.params.startConcurrentClients + ',';\n            step += location.params.step + ',';\n          }\n          concurrentClients += location.params.concurrentClients + ',';\n          weight += location.params.weight + ',';\n          if (location.params.tags && location.params.tags !== 'undefined') {\n            tags += location.params.tags + ',';\n          }\n          if (location.params.useDefaultAgentSettings) {\n            freeAgentsOnly += ',';\n            maxAgents += ',';\n          } else {\n            freeAgentsOnly += location.params.freeAgentsOnly + \",\";\n            maxAgents += location.params.maxAgents + \",\";\n          }\n          numRegions++;\n        }\n      });\n      if (regions.length > 0) {\n        let params = {\n          regions: regions.substring(0, regions.length - 1),\n          weight: weight.substring(0, weight.length - 1)\n        };\n        if (tags) params.tags = tags.substring(0, tags.length - 1);\n        if (freeAgentsOnly !== '' && freeAgentsOnly !== ',' && freeAgentsOnly !== 'undefined,') params.freeAgentsOnly = freeAgentsOnly.substring(0, freeAgentsOnly.length - 1);\n        if (maxAgents !== '' && maxAgents !== ',' && maxAgents !== 'undefined,') params.maxAgents = maxAgents.substring(0, maxAgents.length - 1);\n        if (concurrentClients !== '' && concurrentClients !== ',' && concurrentClients !== 'undefined,') params.concurrentClients = concurrentClients.substring(0, concurrentClients.length - 1);\n        if (profileType === 'Step') {\n          params.startConcurrentClients = startConcurrentClients.substring(0, startConcurrentClients.length - 1);\n          params.step = step.substring(0, step.length - 1);\n        }\n        answer.push({\n          providerId: Number(providerId),\n          params,\n          numRegions: numRegions\n        });\n      }\n    });\n    return answer;\n  }\n  function getParams(loc, instancesConfig, profileType, scriptType) {\n    const params = _.cloneDeep(instancesConfig);\n    params.concurrentClients = loc.params?.concurrentClients;\n    const instanceCredits = Number(params.instanceType?.credits);\n    if (scriptType && params.instanceStrategy === 'Automatic' && Number.isFinite(instanceCredits) && instanceCredits > 0) {\n      params.ratio = getDefaultRatio(params.instanceType, scriptType);\n    }\n    if (params.concurrentClients && params.ratio) params.nodes = Math.ceil(Number(params.concurrentClients) / Number(params.ratio));\n    params.region = loc.regionInfo?.region?.name;\n    if (params.instanceType) {\n      params.instanceType = params.instanceType.name;\n    }\n    if (params.image) {\n      params.image = params.image.id;\n    }\n    if (loc.testRunnerSource.source === 'Aws') {\n      getAwsParams(params, loc, instancesConfig);\n    } else if (loc.testRunnerSource.source === 'Azure') {\n      getAzureParams(params, loc, instancesConfig);\n    } else if (loc.testRunnerSource.source === 'Gcp') {\n      getGcpParams(params, loc, instancesConfig);\n    }\n    params.weight = loc.params.weight;\n    if (profileType === 'Step') {\n      params.startConcurrentClients = loc.params.startConcurrentClients;\n      params.step = loc.params.step;\n    }\n    return params;\n  }\n  function getAwsParams(params, loc, instancesConfig) {\n    params.enableElasticIps = loc.enableElasticIps;\n    params.chooseAnyElasticIp = loc.chooseAnyElasticIp;\n    params.forceAssociateElasticIps = loc.forceAssociateElasticIps;\n    const selectedElasticIps = [];\n    _.forEach(loc.awsAvailableElasticIps, function (eip) {\n      if (eip.selected) {\n        selectedElasticIps.push(eip.publicIp);\n      }\n    });\n    params.chosenElasticIps = selectedElasticIps.join(',');\n    if (loc.testRunnerSource.public) {\n      delete params['awsTags'];\n    } else {\n      params.vpc = loc?.vpc?.vpcId;\n      params.subnet = loc?.subnetType === 'any' || !loc?.subnet ? 'any' : loc?.subnet?.subnetId;\n      params.keyPair = loc?.keyPair;\n      params.awsTags = params.awsTags && params.awsTags.length > 0 && !instancesConfig?.useDefaultTags ? JSON.stringify(params.awsTags) : '[]';\n    }\n  }\n  function getAzureParams(params, loc, instancesConfig) {\n    params.enablePublicIps = loc.enablePublicIps;\n    params.chooseAnyPublicIp = loc.chooseAnyPublicIp;\n    params.forceAssociatePublicIps = loc.forceAssociatePublicIps;\n    const selectedPublicIps = [];\n    _.forEach(loc.azureAvailablePublicIps, function (eip) {\n      if (eip.selected) {\n        selectedPublicIps.push(eip.publicIp);\n      }\n    });\n    params.chosenPublicIps = selectedPublicIps.join(',');\n    if (loc.testRunnerSource.public) {\n      delete params['azureTags'];\n    } else {\n      params.resourceGroup = toParamVal(loc.resourceGroup?.name);\n      params.network = toParamVal(loc.network?.name);\n      params.subnet = toParamVal(loc.subnet?.name);\n      params.azureTags = params.azureTags && params.azureTags.length > 0 && !instancesConfig.useDefaultTags ? JSON.stringify(params.azureTags) : '[]';\n    }\n  }\n  function getGcpParams(params, loc, instancesConfig) {\n    if (loc.testRunnerSource.public) {\n      delete params['gcpTags'];\n    } else {\n      params.network = toParamVal(loc.network?.name);\n      params.subnet = toParamVal(loc.subnet?.name);\n      params.zone = loc.zoneType === 'any' || !loc.zone ? '' : loc.zone;\n      params.gcpTags = params.gcpTags && params.gcpTags.length > 0 && !instancesConfig.useDefaultTags ? JSON.stringify(params.gcpTags) : '[]';\n    }\n  }\n  function toParamVal(val) {\n    return val === '[Automatic]' ? null : val;\n  }\n  function getScriptParams(category) {\n    let params = {};\n    $('[data-capture-param-id]').each(function () {\n      let paramId = $(this).attr('data-capture-param-id');\n      let paramCategory = $(this).attr('data-capture-category');\n      let isDefault = $(this).is('[data-is-default]');\n      if ((!category || paramCategory === category) && !isDefault) {\n        let name = $('#paramName-' + paramId).val();\n        let val = $('#paramVal-' + paramId).val();\n        params[name] = val;\n      }\n    });\n    return params;\n  }\n  function getProviderPopoverText(providerType, executionRegion) {\n    let provider = executionRegion.provider;\n    let region = executionRegion.region;\n    let prefix;\n    if (!executionRegion.running && !executionRegion.finishedAt) {\n      prefix = 'Test is provisioning ';\n    } else if (executionRegion.startedAt && executionRegion.finishedAt) {\n      prefix = 'Test was executed with ';\n    } else if (!executionRegion.running && executionRegion.finishedAt) {\n      prefix = 'Test failed to provision ';\n    } else {\n      prefix = 'Test is executing with ';\n    }\n    switch (providerType) {\n      case 'On Demand':\n      case 'Private On Demand':\n        {\n          let text = prefix + 'an on demand grid running in <strong>' + getRegionText(region) + '</strong>. ';\n          if (provider) {\n            text += 'The grid has <strong>' + provider.params.nodes + ' ' + getInstancePrefix(provider.params) + provider.params.instanceType + ' ' + (provider.params.nodes > 1 ? 'nodes' : 'node') + '</strong> ' + (provider.params.spot === 'true' ? 'with a max price of ' + provider.params.spotMaxPrice : '') + ' and is provisioned for this test only.';\n            if (!region.location.provider.public) {\n              if (provider.params.vpc) {\n                text += '<br/>Test runners were started within VPC <strong>' + provider.params.vpc + '</strong>';\n                if (provider.params.subnet) {\n                  text += ' and Subnet <strong>' + provider.params.subnet + '</strong>';\n                }\n                text += '.';\n                if (provider.params.keyPair) {\n                  text += '<br/>Connect to grid nodes using the <strong>' + provider.params.keyPair + '</strong> key pair during test execution.';\n                }\n              } else if (provider.params.resourceGroup) {\n                text += '<br/>Test runners were started in resource group <strong>' + provider.params.resourceGroup + '</strong>';\n                if (provider.params.network) {\n                  text += ', network <strong>' + provider.params.network + '</strong>';\n                }\n                if (provider.params.subnet) {\n                  text += ', subnet <strong>' + provider.params.subnet + '</strong>';\n                }\n                text += '.';\n              }\n            }\n          } else {\n            text += 'The grid was spun up for this test only.';\n          }\n          return text;\n        }\n      case 'Private Shared':\n        return prefix + 'a private shared grid running in <strong>' + getRegionText(region) + '</strong>. This grid is shared across tests run under your account only.';\n      default:\n        return prefix + 'a public shared grid running in <strong>' + getRegionText(region) + '</strong>. This grid is shared across all Testable accounts.';\n    }\n  }\n  function getInstancePrefix(params) {\n    if (params.spot === 'true') {\n      return 'spot ';\n    }\n    if (params.lowPriority === 'true') {\n      return 'low priority ';\n    }\n    return '';\n  }\n  function getRegionText(region) {\n    return region.description || region.name;\n  }\n  function getStandardMetricDefs(scriptType) {\n    switch (scriptType) {\n      case 'PhantomJs':\n        return StandardMetricDefs.concat(PhantomJsMetricDefs);\n      case 'Selenium':\n        return StandardMetricDefs.concat(SeleniumMetricDefs);\n      case 'Gatling':\n        return StandardMetricDefs.concat(ConcurrencyEnabledMetricDefs);\n      case 'Locust':\n        return StandardMetricDefs.concat(ConcurrencyEnabledMetricDefs);\n      case 'JMeter':\n        return StandardMetricDefs.concat(ConcurrencyEnabledMetricDefs).concat(JMeterMetricDefs);\n      case 'Java':\n        return StandardMetricDefs.concat(JavaMetricDefs);\n      default:\n        return StandardMetricDefs;\n    }\n  }\n  function getMetricDefs(scriptType, ltMetricDefs) {\n    let standard = getStandardMetricDefs(scriptType);\n    let metricDefs = _.isEmpty(ltMetricDefs) ? _.clone(DefaultMetricDefs) : DefaultMetricDefs.concat(ltMetricDefs);\n    _.forEach(standard, function (stdMetricDef) {\n      let existing = findMetricDef(stdMetricDef.namespace, stdMetricDef.name, metricDefs);\n      if (!existing) {\n        metricDefs.push(stdMetricDef);\n      } else if (stdMetricDef.defaultBuckets) {\n        existing.defaultBuckets = stdMetricDef.defaultBuckets;\n      }\n    });\n    return _.sortBy(metricDefs, function (metricDef) {\n      return getMetricTitle(metricDef.namespace, metricDef.name, scriptType).toLowerCase();\n    });\n  }\n  function getUnits(ns, metric, metricDefs, scriptType) {\n    if (_.isUndefined(metric)) {\n      return '';\n    }\n    if (metric === 'processedResultDimensions' || metric === 'expectedResultDimensions') {\n      return 'aggregations';\n    }\n    if (metric === 'activeRequestRate') {\n      return 'req/sec';\n    }\n    if (metric === 'activeThroughput') {\n      return 'bytes/sec';\n    }\n    if (_lib.default.endsWith(metric, '-count')) {\n      return '';\n    }\n    if (_lib.default.endsWith(metric, PercentSuffix)) {\n      return '%';\n    }\n    if (_.isEmpty(metricDefs)) {\n      metricDefs = getMetricDefs(scriptType || 'Code');\n    }\n    const metricDef = _.isArray(metricDefs) ? findMetricDef(ns, _lib.default.getMetricName(metric), metricDefs) : metricDefs;\n    let answer;\n    if (_.isUndefined(metricDef) || _.isUndefined(metricDef.metricUnits)) {\n      answer = '';\n    } else if (_.isObject(metricDef.metricUnits)) {\n      answer = getUnitsForScriptType(metricDef.metricUnits, scriptType);\n    } else if (ns === SystemNs && MultiUserMetrics.includes(metric)) {\n      answer = getUnitsForScriptType(MultiUserUnits, scriptType);\n    } else {\n      answer = metricDef.metricUnits;\n    }\n    if (!_lib.default.endsWith(answer, '/sec') && (_lib.default.endsWith(metric, '-countPerSec') || _lib.default.endsWith(metric, '-peakCountPerSec'))) {\n      answer = (answer || 'count') + '/sec';\n    }\n    return answer;\n  }\n  function getUnitsForScriptType(units, scriptType) {\n    return units[scriptType || 'default'] || units['default'];\n  }\n  function findMetricDef(ns, metric, metricDefs) {\n    const name = _lib.default.getMetricName(metric);\n    return _.find(metricDefs, function (metricDef) {\n      return metricDef.namespace === (ns || SystemNs) && metricDef.name === name;\n    });\n  }\n  function getMetricNamespace(metric) {\n    const index = metric.indexOf('-');\n    return index === -1 ? metric : metric.substring(0, index);\n  }\n  function getDefaultMetricNamepsace(metric) {\n    const name = _lib.default.getMetricName(metric);\n    return MetricDictionary[name] ? SystemNs : UserNs;\n  }\n  function toMetricKey(ns, metric) {\n    return _lib.default.toMetricKey(ns || getDefaultMetricNamepsace(metric), metric);\n  }\n  function toMetricName(metricDef, scriptType) {\n    if (metricDef && (metricDef.name || metricDef.metric)) {\n      let result = MetricDictionary[_lib.default.getMetricName(metricDef.name || metricDef.metric)];\n      if (_.isObject(result)) {\n        return scriptType && result[scriptType] ? result[scriptType] : result['default'];\n      } else if (_.isString(result)) {\n        return result;\n      } else {\n        return _lib.default.getMetricName(metricDef.name || metricDef.metric);\n      }\n    }\n    return '';\n  }\n  function toUnitsLookup(metricDefs, scriptType) {\n    if (metricDefs) {\n      return function (ns, metric) {\n        return getUnits(ns, metric, metricDefs, scriptType);\n      };\n    } else {\n      return null;\n    }\n  }\n  function printMetric(summary, ns, metric, units, lineBreak, metricDefs, showComparison, threshold, scriptType) {\n    ns = ns || getDefaultMetricNamepsace(metric);\n    units = getUnits(ns, metric, metricDefs, scriptType) || units;\n    let answer = _lib.default.printMetric(summary, ns, metric, units, lineBreak, toUnitsLookup(metricDefs, scriptType), showComparison, threshold);\n    if (scriptType === 'JMeter' && metric && (getSummaryCount(summary) === 0 || !answer || answer === '-' || answer === '-<br/>')) {\n      const altMetric = JMeterTxnPrefix + _.upperFirst(metric);\n      const altKey = toMetricKey(ns, altMetric);\n      if (summary && _.isNumber(summary[altKey])) {\n        answer = _lib.default.printMetric(summary, ns, altMetric, getUnits(ns, altMetric, metricDefs, scriptType) || units, lineBreak, toUnitsLookup(metricDefs, scriptType), showComparison, threshold);\n      }\n    }\n    return answer;\n  }\n  function printOperator(operator) {\n    switch (operator) {\n      case 'GTE':\n        return ' >= ';\n      case 'LTE':\n        return ' <= ';\n      case 'GreaterThan':\n        return ' > ';\n      case 'LessThan':\n        return ' < ';\n      case 'Equals':\n        return ' == ';\n      case 'NotEquals':\n        return ' != ';\n    }\n  }\n  function getMetricTitle(ns, name, scriptType, includeNs) {\n    if (!ns || ns === SystemNs) {\n      let answer = MetricDictionary[name] || name;\n      let title = _.isObject(answer) ? answer[scriptType] || answer['default'] : answer;\n      return (includeNs ? ns + '/' : '') + title;\n    } else {\n      return (ns || UserNs) + '/' + name;\n    }\n  }\n  function printConditionMetric(condition, metricDefs, scriptType) {\n    scriptType = scriptType || 'default';\n    let metricDef = findMetricDef(condition.namespace, condition.metric, metricDefs);\n    let answer = getMetricTitle(metricDef ? metricDef.namespace : SystemNs, condition.metric, scriptType);\n    if (condition.metricKey) {\n      let aggregator = metricDef ? printAggregator(condition.metricKey, metricDef.metricType) : condition.metricKey;\n      if (!aggregator) {\n        aggregator = condition.metricKey;\n      }\n      answer += ' ' + aggregator;\n    }\n    if (condition.isPercentage) {\n      if (metricDef && metricDef.metricType === 'Counter') {\n        answer += ' (% of reqs)';\n      } else if (metricDef && metricDef.metricType === 'Histogram') {\n        answer += ' (% of total)';\n      } else {\n        answer += ' (%)';\n      }\n    }\n    return answer;\n  }\n  function printConditionMetricMonitor(condition, metricDefs, scriptType) {\n    scriptType = scriptType || 'default';\n    let metricDef = findMetricDef(condition.namespace, condition.metric, metricDefs);\n    let answer = getMetricTitle(metricDef ? metricDef.namespace : SystemNs, condition.metric, scriptType);\n    let aggregator;\n    if (condition.metricKey) {\n      aggregator = metricDef ? printAggregator(condition.metricKey, metricDef.metricType) : condition.metricKey;\n      if (!aggregator) {\n        aggregator = condition.metricKey;\n      }\n    }\n    let percentage;\n    if (condition.isPercentage) {\n      if (metricDef && metricDef.metricType === 'Counter') {\n        percentage = ' %';\n      } else if (metricDef && metricDef.metricType === 'Histogram') {\n        percentage = ' %';\n      }\n    }\n    if (aggregator) {\n      answer += (percentage ? ' (' : ' ') + aggregator;\n      if (percentage) answer += percentage + ')';\n    }\n    return answer;\n  }\n  let MetricAggregators = {\n    'Timing': {\n      'p50': 'Median',\n      'mean': 'Average',\n      'min': 'Min',\n      'max': 'Max',\n      'count': 'Count',\n      'sum': 'Sum',\n      'sd': 'Std Dev',\n      'var': 'Variance'\n    },\n    'Histogram': {\n      'total': 'Total'\n    },\n    'Metered': {\n      'peak': 'Peak Total',\n      'largest': 'Peak Value'\n    },\n    'Counter': {\n      'peak': 'Peak In Interval',\n      'total': 'Total',\n      'peakCountPerSec': 'Peak Rate',\n      'countPerSec': 'Average Rate'\n    }\n  };\n  function printAggregator(aggregator, metricType) {\n    let result = MetricAggregators[metricType][aggregator];\n    if (!result && metricType === 'Timing' && aggregator.charAt(0) === 'p') {\n      result = aggregator.substring(1) + ' %-ile';\n    }\n    return result;\n  }\n  function printConditionUnits(condition, metricDefs) {\n    return condition.isPercentage || condition.valueType === 'Change' ? '%' : getUnits(condition.namespace, condition.metric, metricDefs);\n  }\n  function getOutcomeIcon(order) {\n    switch (order) {\n      case 0:\n        return {\n          icon: 'fa-exclamation',\n          bg: 'text-danger'\n        };\n      case 1:\n        return {\n          icon: 'fa-ellipsis-h',\n          bg: 'text-info'\n        };\n      case 2:\n        return {\n          icon: 'fa-check',\n          bg: 'text-primary'\n        };\n      case 3:\n        return {\n          icon: 'fa-question',\n          bg: 'text-info'\n        };\n      case 4:\n        return {\n          icon: 'fa-minus',\n          bg: 'text-info'\n        };\n      default:\n        return {\n          icon: 'fa-question',\n          bg: 'text-info'\n        };\n    }\n  }\n  function getOutcomeForMap(order, size) {\n    if (!size) size = \"14\";\n    switch (order) {\n      case 0:\n        return `[fontSize:${size}px #ff5b57]![/]`;\n      case 1:\n        return `[fontSize:${size}px #49b6d6]…[/]`;\n      case 2:\n        return `[fontSize:${size}px #348fe2]✓[/]`;\n      case 3:\n        return `[fontSize:${size}px #49b6d6]?[/]`;\n      case 4:\n        return `[fontSize:${size}px #49b6d6]-[/]`;\n      default:\n        return `[fontSize:${size}px #49b6d6]?[/]`;\n    }\n  }\n  function getExecutionOutcomeOrder(execution) {\n    if (execution && execution.completed) {\n      return getExecutionSuccessOutcomeOrder(execution.success);\n    } else if (execution) {\n      return 1;\n    } else {\n      return 4;\n    }\n  }\n  function getExecutionSuccessOutcomeOrder(success) {\n    if (_.isUndefined(success)) {\n      return 3;\n    } else if (success) {\n      return 2;\n    } else {\n      return 0;\n    }\n  }\n  function getExecutionOutcomeText(execution, includeExtra) {\n    if (execution && !execution.completed) {\n      return 'Test in progress. Test outcome will be determined when it completes.';\n    }\n    if (execution && _.isBoolean(execution.success)) {\n      let regionText = '';\n      if (execution.region) {\n        regionText = ' in ' + execution.region.description + ' ';\n      }\n      return execution.success ? 'Test ' + regionText + 'passed all success criteria.' + (includeExtra ? ' Click for more details.' : '') : 'Test ' + regionText + 'did not pass all success criteria.' + (includeExtra ? ' Click for more details.' : '');\n    } else if (execution) {\n      return 'No success criteria were defined.';\n    }\n    return 'Not yet run.';\n  }\n  function getExecutionOutcomeHtml(execution, large, showPopover, xs) {\n    return getOutcomeHtml(getExecutionOutcomeOrder(execution), getExecutionOutcomeText(execution), large, execution ? execution.id : null, showPopover, xs);\n  }\n  function getExecutionOutcomeMap(execution, large, xs) {\n    let size = 14;\n    if (large) size = 16;\n    if (xs) size = 12;\n    return getOutcomeForMap(getExecutionOutcomeOrder(execution), size);\n  }\n  function getOutcomeHtml(order, text, large, executionId, showPopover, xs, shortText) {\n    let outcomeIcon = getOutcomeIcon(order);\n    let answer = '<span class=\"fa-stack ' + (large ? 'fa-1-5x ' : ' ') + (xs ? 'fa-xs ' : '') + outcomeIcon.bg + '\"';\n    if (text) {\n      if (!_.isBoolean(showPopover) || showPopover) {\n        answer += 'data-bs-toggle=\"tooltip\" title=\"' + text + '\" data-bs-html=\"true\"';\n      }\n      answer += executionId ? ' data-execution-id=\"' + executionId + '\"' : '';\n    }\n    if (shortText) {\n      answer += 'data-bs-toggle=\"tooltip\" data-csv-title=\"' + shortText + '\"  ';\n    }\n    answer += '>\\n';\n    answer += '    <i class=\"fa fa-square fa-stack-1x \" style=\"font-size:2em\"></i>\\n';\n    answer += '    <i class=\"fa ' + outcomeIcon.icon + ' fa-stack-1x fa-inverse\" style=\"font-size:1em\"></i>\\n';\n    answer += '</span>';\n    return answer;\n  }\n  function hasPublicLocation(locations) {\n    return _.findIndex(locations, function (location) {\n      return location.testRunnerSource && location.testRunnerSource.public && location.testRunnerSource.providerType === 'Shared';\n    }) !== -1;\n  }\n  function weightedAverageInIntervals(intervals, count, key, countKey) {\n    let answer;\n    _.forEach(intervals, function (interval) {\n      if (interval[countKey] > 0 && interval[key]) {\n        if (!answer) answer = 0;\n        answer += interval[countKey] / count * interval[key];\n      }\n    });\n    return answer;\n  }\n  function averageInIntervals(intervals, key) {\n    const sum = sumInIntervals(intervals, key);\n    return sum / intervals.length;\n  }\n  function sumInIntervals(intervals, key) {\n    let answer = 0;\n    _.forEach(intervals, function (interval) {\n      answer += interval[key] || 0;\n    });\n    return answer;\n  }\n  function maxInIntervals(intervals, key) {\n    let answer;\n    _.forEach(intervals, function (interval) {\n      if (interval[key] && (!answer || interval[key] > answer)) {\n        answer = interval[key];\n      }\n    });\n    return answer;\n  }\n  function minInIntervals(intervals, key) {\n    let answer;\n    _.forEach(intervals, function (interval) {\n      if (interval[key] && (!answer || interval[key] < answer)) {\n        answer = interval[key];\n      }\n    });\n    return answer;\n  }\n  function deriveSummary(summary, intervals, zoomInfo) {\n    if (!zoomInfo || zoomInfo.isAll || !summary || !intervals || intervals.length === 0) {\n      return summary;\n    }\n    const ourIntervals = _.filter(intervals, function (interval) {\n      return interval.intervalStart >= zoomInfo.startTimestamp && interval.intervalStart < zoomInfo.endTimestamp;\n    });\n    const timespan = (zoomInfo.endTimestamp - zoomInfo.startTimestamp) / 1000;\n    if (_.isObject(summary)) {\n      const derivedSummary = _.cloneDeep(summary);\n      if (derivedSummary.cpu) {\n        derivedSummary.cpu = maxInIntervals(ourIntervals, 'cpu');\n      }\n      _.forEach(summary, function (val, key) {\n        if (MetricDictionary[key]) {\n          const nsKey = _lib.default.toMetricKey(SystemNs, key);\n          switch (key) {\n            case 'requestsPerSec':\n            case 'throughput':\n              // skip these for now since we calc them after we have counts\n              break;\n            case 'peakRequestsPerSec':\n            case 'actualConcurrentClients':\n            case 'concurrentClients':\n            case 'maxConcurrentClients':\n              derivedSummary[nsKey] = maxInIntervals(ourIntervals, key);\n              break;\n            default:\n              derivedSummary[nsKey] = sumInIntervals(ourIntervals, key);\n          }\n        }\n      });\n      let key;\n      _.forEach(summary.metrics, function (metric) {\n        const name = _lib.default.toMetricKey(metric.namespace, metric.metricDef);\n        if ((!metric.namespace || metric.namespace === SystemNs) && metric.metricDef === 'breakingPoint') {\n          delete derivedSummary[name];\n        } else if (_.isNumber(metric.metricValue) && metric.metricType === 'Counter') {\n          derivedSummary[name] = sumInIntervals(ourIntervals, name);\n          derivedSummary[name + TotalSuffix] = derivedSummary[name];\n          if (_.isObject(metric.metricValueMap) && _.isNumber(metric.metricValueMap['peak'])) {\n            derivedSummary[name + '-peak'] = maxInIntervals(ourIntervals, name + '-peak');\n          }\n          derivedSummary[name + '-peakCountPerSec'] = maxInIntervals(ourIntervals, name + '-peakCountPerSec');\n          derivedSummary[name + '-countPerSec'] = timespan ? derivedSummary[name] / timespan : NaN;\n        } else if (_.isObject(metric.metricValueMap) && metric.metricType === 'Timing') {\n          const countKey = name + '-count';\n          const sumKey = name + '-sum';\n          const count = sumInIntervals(ourIntervals, countKey);\n          const sum = sumInIntervals(ourIntervals, sumKey);\n          derivedSummary[countKey] = count;\n          derivedSummary[sumKey] = sum;\n          derivedSummary[name + '-mean'] = Math.round(sum / count);\n          derivedSummary[name + '-max'] = maxInIntervals(ourIntervals, name + '-max');\n          derivedSummary[name + '-min'] = minInIntervals(ourIntervals, name + '-min');\n          for (key in metric.metricValueMap) {\n            const subkey = name + '-' + key;\n            if (key.indexOf('p') === 0 || key === 'sd' || key === 'let' || key === 'sqdiffs') {\n              derivedSummary[subkey] = weightedAverageInIntervals(ourIntervals, count, subkey, countKey);\n            }\n          }\n        } else if (_.isObject(metric.metricValueMap) && metric.metricType === 'Histogram') {\n          const total = sumInIntervals(ourIntervals, name + TotalSuffix);\n          const buckets = [];\n          for (key in metric.metricValueMap) {\n            const bucketKey = name + '-' + key;\n            derivedSummary[bucketKey] = sumInIntervals(ourIntervals, bucketKey);\n            derivedSummary[bucketKey + PercentSuffix] = Math.round(10000 * derivedSummary[bucketKey] / total) / 100;\n            buckets.push({\n              key: key,\n              val: derivedSummary[bucketKey]\n            });\n          }\n          derivedSummary[name + TotalSuffix] = total;\n          derivedSummary[name + '-buckets'] = buckets;\n        } else if (_.isObject(metric.metricValueMap) && metric.metricType === 'Metered') {\n          derivedSummary[name + '-peak'] = maxInIntervals(ourIntervals, name + '-peak');\n          derivedSummary[name + '-largest'] = maxInIntervals(ourIntervals, name + '-largest');\n          const buckets = [];\n          for (key in metric.metricValueMap) {\n            const bucketKey = name + '-' + key;\n            derivedSummary[bucketKey] = maxInIntervals(ourIntervals, bucketKey);\n            buckets.push({\n              key: key,\n              val: derivedSummary[bucketKey]\n            });\n          }\n          derivedSummary[name + '-buckets'] = buckets;\n        }\n      });\n      derivedSummary[_lib.default.toMetricKey(SystemNs, 'requestsPerSec')] = timespan ? derivedSummary[_lib.default.toMetricKey(SystemNs, 'count')] / timespan : NaN;\n      derivedSummary[_lib.default.toMetricKey(SystemNs, 'throughput')] = timespan ? derivedSummary[_lib.default.toMetricKey(SystemNs, 'bandwidth')] / timespan : NaN;\n      return derivedSummary;\n    }\n  }\n  function isFileRelevant(outputFile, zoomInfo, regionId) {\n    if (!outputFile) {\n      return false;\n    }\n    const capturedAt = moment(outputFile.capturedAt).valueOf();\n    return (_.isEmpty(regionId) || regionId === 'ALL' || Number(regionId) === outputFile.regionId) && isMatchZoom(zoomInfo, capturedAt);\n  }\n  function isTraceRelevant(trace, zoomInfo, selectedResource) {\n    if (!trace) {\n      return false;\n    }\n    const traceAt = moment(trace.traceAt).valueOf();\n    const matchResource = _.isEmpty(selectedResource) || selectedResource.id < 0 || trace.resource === selectedResource.resource;\n    return matchResource && isMatchZoom(zoomInfo, traceAt);\n  }\n  function isMatchZoom(zoomInfo, ts) {\n    return !zoomInfo || zoomInfo.isAll || ts >= zoomInfo.startTimestamp && ts <= zoomInfo.endTimestamp;\n  }\n  function hasResults(summary) {\n    return summary && (summary.count > 0 || summary.concurrentClients > 0 || summary.metrics && summary.metrics.length > 2);\n  }\n  function getAllRegions() {\n    // load list of shared grid regions\n    const publicSharedRegions = {};\n    let privateSharedRegions = [];\n    const onDemandProviders = {};\n    const regions = [];\n    _.forEach(_environment.config.providers, function (provider) {\n      if (provider.providerType === 'Shared') {\n        _.forEach(provider.locations, function (location) {\n          _.forEach(location.regions, function (region) {\n            if (provider.public && region.name.indexOf('aws-') === 0) {\n              publicSharedRegions[region.name] = {\n                location: location,\n                region: region,\n                provider: provider\n              };\n            } else {\n              privateSharedRegions.push({\n                location: location,\n                region: region,\n                provider: provider\n              });\n            }\n          });\n        });\n      } else if (provider.providerType === 'OnDemand') {\n        if (!onDemandProviders[provider.source]) {\n          onDemandProviders[provider.source] = [];\n        }\n        onDemandProviders[provider.source].push(provider);\n      }\n    });\n    if (_environment.config.isAwsEnabled && (typeof _environment.config.currentUser?.org?.settings?.isAwsEnabled === \"undefined\" || _environment.config.currentUser?.org?.settings?.isAwsEnabled === \"true\")) {\n      // load aws region list\n      const awsPublicProvider = _aws.default.findAwsPublicProvider(_environment.config.providers);\n      const awsRegions = [];\n      if (awsPublicProvider) {\n        let awsRegionsSelected = [];\n        const isAwsEnabledAllRegions = _environment.config.currentUser?.org?.settings?.isAwsEnabledAllRegions === \"false\";\n        if (isAwsEnabledAllRegions) {\n          awsRegionsSelected = _environment.config.currentUser.org.settings.awsRegionsSelected;\n        }\n        _.forEach(awsPublicProvider.locations, function (location) {\n          if (!isAwsEnabledAllRegions || awsRegionsSelected.some(region => region.name === location.name.substring('aws-'.length))) {\n            awsRegions.push({\n              source: 'Aws',\n              location: location,\n              region: {\n                name: location.name.substring('aws-'.length),\n                description: location.description.substring('AWS '.length),\n                publicShared: publicSharedRegions[location.name]\n              },\n              providers: onDemandProviders['Aws']\n            });\n          }\n        });\n      }\n      if (awsRegions.length) {\n        regions.push({\n          groupName: 'Aws',\n          options: _.sortBy(awsRegions, function (r) {\n            return r.region.description;\n          })\n        });\n      }\n    }\n    if (_environment.config.isAzureEnabled && (typeof _environment.config.currentUser?.org?.settings?.isAzureEnabled === \"undefined\" || _environment.config.currentUser?.org?.settings?.isAzureEnabled === \"true\")) {\n      const azurePublicProvider = _azure.default.findAzurePublicProvider(_environment.config.providers);\n      const azureRegions = [];\n      if (azurePublicProvider) {\n        let azureRegionsSelected = [];\n        const isAzureEnabledAllRegions = _environment.config?.currentUser?.org?.settings?.isAzureEnabledAllRegions === \"false\";\n        if (isAzureEnabledAllRegions) {\n          azureRegionsSelected = _environment.config.currentUser.org.settings.azureRegionsSelected;\n        }\n        _.forEach(azurePublicProvider.locations, function (location) {\n          if (!isAzureEnabledAllRegions || azureRegionsSelected.some(region => region.name === location.name.substring('azure-'.length))) {\n            azureRegions.push({\n              source: 'Azure',\n              location: location,\n              region: {\n                name: location.name.substring('azure-'.length),\n                description: location.description.substring('Azure '.length)\n              },\n              providers: onDemandProviders['Azure']\n            });\n          }\n        });\n      }\n      if (azureRegions.length) {\n        regions.push({\n          groupName: 'Azure',\n          options: _.sortBy(azureRegions, function (r) {\n            return r.region.description;\n          })\n        });\n      }\n    }\n    if (_environment.config.isGcpEnabled && (typeof _environment.config.currentUser?.org?.settings?.isGcpEnabled === \"undefined\" || _environment.config.currentUser?.org?.settings?.isGcpEnabled === \"true\")) {\n      const gcpPublicProvider = _gcp.default.findGcpPublicProvider(_environment.config.providers);\n      const gcpRegions = [];\n      if (gcpPublicProvider) {\n        let gcpRegionsSelected = [];\n        let isGcpEnabledAllRegions = _environment.config?.currentUser?.org?.settings?.isGcpEnabledAllRegions === \"false\";\n        if (isGcpEnabledAllRegions) {\n          gcpRegionsSelected = _environment.config.currentUser.org.settings.gcpRegionsSelected;\n        }\n        _.forEach(gcpPublicProvider.locations, function (location) {\n          if (!isGcpEnabledAllRegions || gcpRegionsSelected.some(region => region.name === location.name.substring('gcp-'.length))) {\n            gcpRegions.push({\n              source: 'Gcp',\n              location: location,\n              region: {\n                name: location.name.substring('gcp-'.length),\n                description: location.description.substring('Gcp '.length)\n              },\n              providers: onDemandProviders['Gcp']\n            });\n          }\n        });\n      }\n      if (gcpRegions.length) {\n        regions.push({\n          groupName: 'Gcp',\n          options: _.sortBy(gcpRegions, function (r) {\n            return r.region.description;\n          })\n        });\n      }\n    }\n    privateSharedRegions = privateSharedRegions.sort((a, b) => a.region.description.localeCompare(b.region.description));\n    privateSharedRegions.push({\n      isRegister: true,\n      text: 'Associate shared test runner to new region...'\n    });\n    privateSharedRegions.push({\n      isAdd: true,\n      text: 'Run Docker test runner in new region...'\n    });\n    regions.push({\n      groupName: 'Self-Hosted',\n      options: privateSharedRegions\n    });\n    return regions;\n  }\n  function getExecutedLocations(executionRegions, testRunnerType) {\n    const answer = new _trackedBuiltIns.TrackedArray([]);\n    _.forEach(executionRegions, function (executionRegion) {\n      const regionInfo = {\n        region: _.cloneDeep(executionRegion.region),\n        provider: executionRegion.provider.provider\n      };\n      if (regionInfo.region.location) {\n        regionInfo.region.name = regionInfo.region.location.name || regionInfo.region.name;\n      }\n      const provider = executionRegion.provider.provider;\n      const params = executionRegion.provider.params;\n      params.tags = params.tags?.replaceAll(',', '|');\n      let location = _location.default.create({\n        regionInfo: regionInfo,\n        testRunnerSource: provider,\n        loadMetadataOptions: false,\n        executionRegion: executionRegion,\n        currentUser: _environment.config.currentUser,\n        testRunnerType,\n        params\n      });\n      // location.onRegionChangesFunction();\n      answer.push(location);\n    });\n    return answer;\n  }\n  const AdditionalRegions = {};\n  function getLocations(modelProviders, groupedRegions, testType, script, loadMetadataOptions, testRunnerType) {\n    return new Promise(function (resolve, reject) {\n      const answer = new _trackedBuiltIns.TrackedArray([]);\n      const pendingTasks = [];\n      if (modelProviders && modelProviders.length > 0) {\n        const pvtRegionInfos = _.find(groupedRegions, function (gr) {\n          return gr.groupName === 'Self-Hosted';\n        });\n        const awsRegionInfos = _.find(groupedRegions, function (gr) {\n          return gr.groupName === 'Aws';\n        });\n        _.forEach(modelProviders, function (testProvider) {\n          const provider = _.find(_environment.config.providers, function (p) {\n            return p.id === testProvider.provider.id;\n          }) || testProvider.provider;\n          if (provider && provider.providerType === 'Shared') {\n            toSharedLocations(testProvider, provider, answer, awsRegionInfos, pvtRegionInfos, testType, script, pendingTasks, testRunnerType);\n          } else if (provider && provider.providerType === 'OnDemand') {\n            const regionInfos = _.find(groupedRegions, function (gr) {\n              return gr.groupName === provider.source;\n            });\n            toOnDemandLocations(testProvider, provider, answer, regionInfos, testType, script, loadMetadataOptions, testRunnerType);\n          }\n        });\n      }\n      if (answer.length === 0) {\n        let location = _location.default.create({\n          testType: testType,\n          selectedScript: script,\n          params: {\n            weight: 100,\n            concurrentClients: 1\n          },\n          currentUser: _environment.config.currentUser,\n          testRunnerType\n        });\n        if (_environment.config.currentUser.org.settings.defaultRegionType) {\n          const settings = _environment.config.currentUser.org.settings;\n          const allRegions = getAllRegions();\n          let locationParams = {};\n          if (settings.defaultRegionType === 'existing') {\n            if (isNaN(Number(settings.defaultRegion))) {\n              const regionInfo = allRegions.filter(r => r.groupName === 'Aws')[0]?.options.find(option => option.location.name === settings.defaultRegion);\n              location.regionInfo = regionInfo;\n              location.testRunnerSource = location.testRunnerSources.find(option => option.id === 1);\n            } else {\n              const regionInfo = allRegions.filter(r => r.groupName === 'Self-Hosted')[0]?.options.find(option => option.region.id === Number(settings.defaultRegion));\n              location.regionInfo = regionInfo;\n              location.testRunnerSource = location.testRunnerSources.find(option => option.name === 'My Shared Grid');\n            }\n          } else {\n            const source = _environment.config.providersAll.find(provider => provider.id === settings.defaultProviderId);\n            const regionInfo = allRegions.filter(r => r.groupName === source?.source)[0]?.options.find(option => option.region.name === settings.defaultRegion);\n            location.regionInfo = regionInfo;\n            location.testRunnerSource = source;\n          }\n          if (settings['defaultRegion:multiplier']) {\n            locationParams.multiplier = settings['defaultRegion:multiplier'];\n          }\n          if (settings['defaultRegion:spot']) {\n            locationParams.spot = settings['defaultRegion:spot'] === 'true';\n          }\n          if (settings['defaultRegion:vpc']) {\n            locationParams.vpc = settings['defaultRegion:vpc'];\n          }\n          if (settings['defaultRegion:subnet']) {\n            locationParams.subnet = settings['defaultRegion:subnet'];\n          }\n          if (settings['defaultRegion:keyPair']) {\n            locationParams.keyPair = settings['defaultRegion:keyPair'];\n          }\n          if (settings['defaultRegion:elasticIps']) {\n            locationParams.elasticIps = settings['defaultRegion:elasticIps'];\n            locationParams.enableElasticIps = 'true';\n            location.enableElasticIps = true;\n            if (locationParams.elasticIps === 'any') {\n              locationParams.chooseAnyElasticIp = 'true';\n            } else {\n              locationParams.chooseAnyElasticIp = 'false';\n              locationParams.chosenElasticIps = locationParams.elasticIps;\n            }\n          }\n          if (settings['defaultRegion:chosenElasticIps']) {\n            locationParams.chosenElasticIps = settings['defaultRegion:chosenElasticIps'];\n          }\n          if (settings['defaultRegion:forceAssociateElasticIps']) {\n            locationParams.forceAssociateElasticIps = settings['defaultRegion:forceAssociateElasticIps'];\n          }\n          if (settings['defaultRegion:resourceGroup']) {\n            locationParams.resourceGroup = settings['defaultRegion:resourceGroup'];\n          }\n          if (settings['defaultRegion:network']) {\n            locationParams.network = settings['defaultRegion:network'];\n          }\n          if (settings['defaultRegion:subnet']) {\n            locationParams.subnet = settings['defaultRegion:subnet'];\n            if (locationParams.subnet === 'any') {\n              location.subnetType = 'any';\n            } else {\n              location.subnetType = 'choose';\n            }\n          }\n          if (settings['defaultRegion:gcpNetwork']) {\n            locationParams.gcpNetwork = settings['defaultRegion:gcpNetwork'];\n          }\n          if (settings['defaultRegion:gcpSubNetwork']) {\n            locationParams.gcpSubNetwork = settings['defaultRegion:gcpSubNetwork'];\n          }\n          if (settings['defaultRegion:gcpZone']) {\n            locationParams.gcpZone = settings['defaultRegion:gcpZone'];\n            if (locationParams.gcpZone === 'any') {\n              location.zoneType = 'any';\n            } else {\n              location.zoneType = 'choose';\n            }\n          }\n          location.params = locationParams;\n        }\n\n        // location.onRegionChangesFunction();\n        answer.push(location);\n      }\n      if (pendingTasks.length > 0) {\n        Promise.all(pendingTasks).then(function () {\n          resolve(answer);\n        }, function () {\n          resolve(answer);\n        });\n      } else {\n        resolve(answer);\n      }\n    });\n  }\n  function toSharedLocations(testProvider, provider, locations, awsRegionInfos, pvtRegionInfos, testType, script, pending, testRunnerType) {\n    const selectedRegions = testProvider.params.regions;\n    if (selectedRegions) {\n      const startConcurrentClients = testProvider.params.startConcurrentClients;\n      const step = testProvider.params.step;\n      const concurrentClients = testProvider.params.concurrentClients;\n      const weight = testProvider.params.weight;\n      const tags = testProvider.params.tags;\n      const freeAgentsOnly = testProvider.params.freeAgentsOnly;\n      const maxAgents = testProvider.params.maxAgents;\n      let startConcurrentClientsParts = [];\n      let stepParts = [];\n      let concurrentClientsParts = [];\n      let weightParts = [];\n      let tagParts = [];\n      let freeAgentsOnlyParts = [];\n      let maxAgentsParts = [];\n      let index = 0;\n      if (concurrentClients && weight) {\n        concurrentClientsParts = concurrentClients.split(',');\n        weightParts = weight.split(',');\n      }\n      if (tags) {\n        tagParts = tags.split(',');\n      }\n      if (startConcurrentClients && step) {\n        startConcurrentClientsParts = startConcurrentClients.split(',');\n        stepParts = step.split(',');\n      }\n      if (freeAgentsOnly && maxAgents) {\n        freeAgentsOnlyParts = freeAgentsOnly.split(',');\n        maxAgentsParts = maxAgents.split(',');\n      }\n      _.forEach(selectedRegions.split(','), function (selectedRegionId) {\n        const selectedLocation = _.find(provider.locations, function (location) {\n          return findRegionById(location, selectedRegionId);\n        });\n        let regionInfo;\n        if (selectedLocation) {\n          const selectedRegion = findRegionById(selectedLocation, selectedRegionId);\n          regionInfo = _.find(pvtRegionInfos.options, function (opt) {\n            return opt.region && opt.region.id === selectedRegion.id;\n          });\n          if (!regionInfo && provider.public) {\n            regionInfo = _.find(awsRegionInfos.options, function (opt) {\n              return opt && opt.region && opt.region.publicShared && opt.region.publicShared.region.id === selectedRegion.id;\n            });\n          }\n        }\n        if (!regionInfo) {\n          regionInfo = AdditionalRegions[selectedRegionId];\n          if (regionInfo && regionInfo.pendingTask) {\n            pending.push(regionInfo.pendingTask);\n          }\n        }\n        if (!regionInfo) {\n          // retrieve region from server because its not in our provider cache\n          regionInfo = {\n            provider: provider\n          };\n          regionInfo.pendingTask = loadRegion(selectedRegionId, regionInfo);\n          pending.push(regionInfo.pendingTask);\n          AdditionalRegions[selectedRegionId] = regionInfo;\n        }\n        let params = {};\n        if (concurrentClientsParts[index] && weightParts[index]) {\n          params.concurrentClients = concurrentClientsParts[index];\n          params.weight = weightParts[index];\n        }\n        if (startConcurrentClientsParts[index] && stepParts[index]) {\n          params.startConcurrentClients = startConcurrentClientsParts[index];\n          params.step = stepParts[index];\n        }\n        if (freeAgentsOnlyParts[index] && maxAgentsParts[index]) {\n          params.freeAgentsOnly = freeAgentsOnlyParts[index];\n          params.maxAgents = maxAgentsParts[index];\n        }\n        if (tagParts[index]) {\n          params.tags = tagParts[index];\n        }\n        if (regionInfo) {\n          let location = _location.default.create({\n            regionInfo: regionInfo,\n            testRunnerSource: regionInfo.region?.publicShared?.provider || regionInfo.provider,\n            testType: testType,\n            selectedScript: script,\n            params: params,\n            currentUser: _environment.config.currentUser,\n            testRunnerType\n          });\n          // location.onRegionChangesFunction();\n          locations.push(location);\n        }\n        index++;\n      });\n    }\n  }\n  function loadRegion(regionId, regionInfo) {\n    return new Promise(function (resolve, reject) {\n      _server.default.getRegion(regionId).then(function (region) {\n        regionInfo.region = region || {\n          id: regionId,\n          name: 'Unknown',\n          description: 'Unknown'\n        };\n        regionInfo.location = region && region.location || {\n          name: 'Unknown',\n          description: 'Unknown'\n        };\n        delete regionInfo['pendingTask'];\n        resolve(regionInfo);\n      }, function () {\n        regionInfo.location = {\n          name: 'Unknown',\n          description: 'Unknown'\n        };\n        regionInfo.region = {\n          id: regionId,\n          name: 'Unknown',\n          description: 'Unknown'\n        };\n        delete regionInfo['pendingTask'];\n        resolve(regionInfo);\n      });\n    });\n  }\n  function findRegionById(location, id) {\n    return _.find(location.regions, function (region) {\n      return region.id === Number(id);\n    });\n  }\n  function toOnDemandLocations(testProvider, provider, locations, regionInfos, testType, script, loadMetadataOptions, testRunnerType) {\n    if (testProvider.params && testProvider.params.region) {\n      const regionInfo = _.find(regionInfos.options, function (opt) {\n        return opt && opt.region && opt.region.name === testProvider.params.region;\n      });\n      if (regionInfo) {\n        let location = _location.default.create({\n          regionInfo: regionInfo,\n          initialRegionInfo: regionInfo,\n          testRunnerSource: _.find(regionInfo.providers, function (p) {\n            return p.id === provider.id;\n          }) || provider,\n          params: testProvider.params,\n          testType: testType,\n          selectedScript: script,\n          currentUser: _environment.config.currentUser,\n          loadMetadataOptions: _.isBoolean(loadMetadataOptions) ? loadMetadataOptions : true,\n          testRunnerType\n        });\n        // location.onRegionChangesFunction();\n        locations.push(location);\n      }\n    }\n  }\n  function printInstanceType(instanceType) {\n    if (instanceType) {\n      return instanceType.name + (instanceType.cpu ? ' ' + ' (' + instanceType.cpu + ' vCPU, ' + instanceType.memory + 'GB RAM)' : '');\n    }\n    return '';\n  }\n  function printVpc(vpc) {\n    if (vpc) {\n      return (vpc.name ? vpc.name + ' | ' : '') + vpc.vpcId;\n    }\n    return '';\n  }\n  function printSubnet(subnetType, subnet) {\n    if (subnetType === 'any' || !subnet) {\n      return 'any subnet';\n    } else {\n      return (subnet.name ? subnet.name + ' | ' : '') + (subnet.availabilityZone ? subnet.availabilityZone + ' | ' : '') + subnet.subnetId;\n    }\n  }\n  function printConcurrentUser(count, scriptType) {\n    const label = scriptType && isMultiUser(scriptType) ? scriptType + ' engine' : 'virtual user';\n    return _lib.default.pluralCheck(label, count);\n  }\n  const MultiUserScriptTypes = ['JMeter', 'Gatling', 'Locust'];\n  function isMultiUser(scriptType) {\n    return MultiUserScriptTypes.includes(scriptType);\n  }\n  function printMultiUserScriptType(scriptType) {\n    switch (scriptType) {\n      case 'JMeter':\n        return 'JMeter test plan';\n      case 'Gatling':\n        return 'Gatling simulation';\n      case 'Locust':\n        return 'Locust script';\n      default:\n        return '';\n    }\n  }\n  function getConditions(successTrigger, bpTrigger, metricDefs, testType) {\n    const conditions = new _trackedBuiltIns.TrackedArray([]);\n    addConditions(successTrigger, false, metricDefs, conditions, testType);\n    addConditions(bpTrigger, true, metricDefs, conditions, testType);\n    return conditions;\n  }\n  function applyConditionsToTriggers(conditions, successTrigger, bpTrigger) {\n    if (successTrigger) {\n      successTrigger.conditions = [];\n    }\n    if (bpTrigger) {\n      bpTrigger.conditions = [];\n    }\n    _.forEach(conditions, function (condition) {\n      if (condition.isBreakingPoint || successTrigger) {\n        const toSave = {\n          namespace: condition.namespace,\n          metric: condition.metric,\n          metricKey: condition.metricKey,\n          isPercentage: condition.isPercentage,\n          timePeriod: condition.timePeriod,\n          operator: condition.isBreakingPoint ? getReverseOp(condition.operator) : condition.operator,\n          valueType: condition.valueType,\n          threshold: condition.threshold,\n          level: condition.level,\n          resourceChooser: condition.resourceChooser,\n          resourceId: condition.resourceId\n        };\n        if (condition.isBreakingPoint) {\n          bpTrigger.conditions.push(toSave);\n        } else if (successTrigger) {\n          successTrigger.conditions.push(toSave);\n        }\n      }\n    });\n  }\n  function addConditions(trigger, isBreakingPoint, metricDefs, conditions, testType) {\n    const isFunctionalTest = testType && testType !== 'Load';\n    if (trigger) {\n      _.forEach(trigger.conditions, function (triggerCondition) {\n        const src = _.clone(triggerCondition);\n        if (isFunctionalTest) {\n          if (src.timePeriod === 'LastMinute') {\n            src.timePeriod = 'EntireTest';\n          }\n          delete src.level;\n          delete src.resourceChooser;\n          delete src.resourceId;\n          delete src.resource;\n        }\n        src.isBreakingPoint = isBreakingPoint;\n        src.metricDefs = metricDefs;\n        src.units = printConditionUnits(src, metricDefs);\n        if (isBreakingPoint) {\n          src.operator = getReverseOp(src.operator);\n        }\n        conditions.push(_triggerCondition.default.create(src));\n      });\n    }\n  }\n  function getReverseOp(op) {\n    if (op) {\n      switch (op) {\n        case 'GTE':\n          return 'LessThan';\n        case 'GreaterThan':\n          return 'LTE';\n        case 'LTE':\n          return 'GreaterThan';\n        case 'LessThan':\n          return 'GTE';\n        case 'Equals':\n          return 'NotEquals';\n        case 'NotEquals':\n          return 'Equals';\n      }\n    }\n  }\n  function findTrigger(triggers, type) {\n    return _.find(triggers, function (trigger) {\n      return trigger.triggerType === type;\n    });\n  }\n  function printShortSummary(config, excludeLocation, isPerRegion) {\n    let answer = '';\n    if (config.testType === 'Monitor' || config.testType === 'Functional' || config.testType === 'Remote' || config.testType === 'Live') {\n      answer = config.testType;\n    }\n    if (config.testType === 'Remote') {\n      excludeLocation = true;\n    }\n    if (config.concurrentClients && config.expectedNumRegions) {\n      const numRegions = isPerRegion ? 1 : config.expectedNumRegions;\n      if (config.testType === 'Load') {\n        const label = _lib.default.pluralCheck(config.script && isMultiUser(config.script.scriptType) ? 'instance' : 'user', Number(config.concurrentClients));\n        if (config.startConcurrentClients) {\n          answer += _lib.default.printShortNumber(config.startConcurrentClients) + ' => ';\n        }\n        answer += _lib.default.printShortNumber(config.concurrentClients) + ' ' + label;\n      }\n      if (!excludeLocation) {\n        answer += ' | ' + numRegions + ' location' + (numRegions > 1 ? 's' : '');\n      }\n    }\n    return answer;\n  }\n  function getInstanceSeries(instanceTypes, instanceFamily) {\n    if (!instanceFamily) {\n      return null;\n    }\n    const instanceSeries = [];\n    instanceTypes.forEach(type => {\n      if (instanceFamily.instanceFamily === type.instanceFamily && !instanceSeries.some(ifs => ifs.series === type.series)) {\n        instanceSeries.push(type);\n      }\n    });\n    return _.sortBy(instanceSeries, 'series');\n  }\n  function getInstanceTypesForSeries(instanceTypes, instanceSeries) {\n    if (!instanceSeries) {\n      return null;\n    }\n    const answer = [];\n    instanceTypes.forEach(type => {\n      if (instanceSeries.instanceFamily === type.instanceFamily && instanceSeries.series === type.series && !answer.some(ifs => ifs.name === type.name)) {\n        answer.push(type);\n      }\n    });\n    return _.sortBy(answer, 'name');\n  }\n  function getInstanceTypes(locations) {\n    const byType = {};\n    let onDemandRegions = 0;\n    _.forEach(locations, function (location) {\n      if (location.instanceTypes) {\n        onDemandRegions++;\n        _.forEach(location.instanceTypes, function (instanceType) {\n          let locationsForInstanceType = byType[instanceType.name];\n          if (!locationsForInstanceType) {\n            locationsForInstanceType = [];\n            byType[instanceType.name] = locationsForInstanceType;\n          }\n          locationsForInstanceType.push(instanceType);\n        });\n      }\n    });\n    const answer = [];\n    if (onDemandRegions > 0) {\n      _.forEach(byType, function (locationInstanceTypes, instanceTypeName) {\n        if (locationInstanceTypes.length === onDemandRegions) {\n          answer.push({\n            name: instanceTypeName,\n            price: _.maxBy(locationInstanceTypes, function (lit) {\n              return lit.price;\n            }).price,\n            cpu: locationInstanceTypes[0].cpu,\n            memory: locationInstanceTypes[0].memory,\n            credits: locationInstanceTypes[0].credits,\n            instanceFamily: locationInstanceTypes[0].instanceFamily,\n            series: locationInstanceTypes[0].series\n          });\n        }\n      });\n    }\n    return answer;\n  }\n  function getDefaultRatio(instanceType, scriptType) {\n    if (instanceType) {\n      const credits = instanceType.credits || 1;\n      switch (scriptType || 'Code') {\n        case 'JMeter':\n        case 'Gatling':\n        case 'Locust':\n          return 1;\n        case 'Selenium':\n          return Math.ceil(2.5 * credits);\n        case 'PhantomJs':\n        case 'Puppeteer':\n        case 'Playwright':\n          return Math.ceil(5 * credits);\n        case 'Postman':\n        case 'Java':\n          return Math.ceil(10 * credits);\n        default:\n          return Math.ceil(100 * credits);\n      }\n    }\n    return null;\n  }\n  function getRecommendedInstanceType(instanceTypes, scriptType, recommendations) {\n    if (instanceTypes) {\n      const recommendedTypes = recommendations[scriptType || 'default'] || recommendations['default'];\n      for (let i = 0; i < recommendedTypes.length; i++) {\n        const answer = findInstanceType(recommendedTypes[i], instanceTypes);\n        if (answer) {\n          return answer;\n        }\n      }\n    }\n    return null;\n  }\n  function findInstanceType(name, instanceTypes) {\n    return _.find(instanceTypes, function (candidate) {\n      return candidate.name === name;\n    });\n  }\n  function stopExecutions(executions, cb) {\n    if (!executions || executions.length === 0) {\n      return;\n    }\n    const single = executions.length === 1;\n    _lib.default.confirm('Are you sure you want to stop ' + (single ? 'this test run?' : 'these test runs?'), 'OK', function () {\n      let tasks = _.map(executions, function (execution) {\n        return function (callback) {\n          _server.default.stopLoadTestExecution(execution.id).then(function (data) {\n            callback(null, data);\n          }, function () {\n            callback('Error');\n          });\n        };\n      });\n      async.parallel(tasks, function (err, results) {\n        if (results) {\n          _lib.default.info((single ? 'Executions' : 'Execution') + ' stop requested');\n          if (cb) cb();\n        }\n      });\n    }, 'Cancel');\n  }\n  function toTextClass(status) {\n    if (status === 2) {\n      return 'text-danger';\n    } else if (status === 1) {\n      return 'text-warning';\n    } else if (status === 0) {\n      return 'text-info';\n    } else {\n      return 'text-success';\n    }\n  }\n  function toIconClass(status) {\n    if (status === 2) {\n      return 'fa-times';\n    } else if (status === 1) {\n      return 'fa-minus';\n    } else if (status === 0) {\n      return 'fa-check';\n    } else {\n      return 'fa-star';\n    }\n  }\n  function toNoteClass(status) {\n    if (status === 2) {\n      return 'note-danger';\n    } else if (status === 1) {\n      return 'note-warning';\n    } else if (status === 0) {\n      return 'note-info';\n    } else {\n      return 'note-success';\n    }\n  }\n  function toColorClass(status) {\n    if (status === 2) {\n      return 'bg-red';\n    } else if (status === 1) {\n      return 'bg-orange-lighter';\n    } else if (status === 0) {\n      return 'bg-aqua';\n    } else {\n      return 'bg-blue';\n    }\n  }\n  function toMetric(metricConfig, summary, comparisons) {\n    let metric = {\n      title: metricConfig.title,\n      namespace: metricConfig.namespace,\n      metric: metricConfig.metric,\n      units: metricConfig.units\n    };\n    metric.currentVal = summary[_lib.default.toMetricKey(metricConfig.namespace, metricConfig.metric)];\n    if (_.isUndefined(metric.currentVal)) {\n      metric.exists = false;\n      metric.status = 1;\n    } else {\n      if (!_.isEmpty(comparisons)) {\n        metric.exists = true;\n        const nsComparisons = comparisons[metricConfig.namespace];\n        let rawChange = Number(nsComparisons && nsComparisons[metricConfig.metric] || 0);\n        metric.first = !isFinite(rawChange) || isNaN(rawChange);\n        rawChange = metric.first ? 0 : rawChange;\n        metric.change = Math.round(10000 * rawChange) / 100;\n        let change = metricConfig.higherIsBetter ? -1 * metric.change : metric.change;\n        if (change > metricConfig.red) {\n          metric.status = 2;\n        } else if (change > metricConfig.amber) {\n          metric.status = 1;\n        } else if (change * -1 > metricConfig.improved) {\n          metric.status = -1;\n        } else {\n          metric.status = 0;\n        }\n        metric.absChange = Math.abs(metric.change);\n        metric.changeWord = change * -1 > 0 ? 'Better than' : change * -1 < 0 ? 'Worse than' : 'Same as';\n      } else {\n        metric.status = 0;\n        metric.first = true;\n      }\n    }\n    metric.textClass = toTextClass(metric.status);\n    metric.iconClass = toIconClass(metric.status);\n    metric.noteClass = toNoteClass(metric.status);\n    metric.colorClass = toColorClass(metric.status);\n    return metric;\n  }\n  function sortConfGroups(items, sort) {\n    return _.sortBy(items, function (item) {\n      switch (sort) {\n        case 'lastRun':\n          return -1 * (item.lastRun || 0);\n        case 'lexical':\n          return item.script?.name ? item.script.name.toLowerCase() : null;\n      }\n    });\n  }\n  function getLastRun(lastRunAt, running) {\n    return Math.max(lastRunAt ? moment(lastRunAt).valueOf() : 0, _.max(_.map(running, function (exec) {\n      return moment(exec.createdAt).valueOf();\n    })) || 0);\n  }\n  function buildStartedAtPopover(createdAt, startedAt, finishedAt, queueStartedAt, queueFinishedAt, note) {\n    let result = '';\n    if (_.isUndefined(startedAt)) {\n      result += _lib.default.popoverRow('Created', _lib.default.displayDateTime(createdAt));\n    } else {\n      if (!_.isUndefined(queueStartedAt)) {\n        result += _lib.default.popoverRow('Queued', _lib.default.displayDateTime(queueStartedAt));\n      }\n      if (!_.isUndefined(queueFinishedAt)) {\n        result += _lib.default.popoverRow('Dequeued', _lib.default.displayDateTime(queueFinishedAt));\n      }\n      result += _lib.default.popoverRow('Started', _lib.default.displayDateTime(startedAt));\n      if (!_.isUndefined(finishedAt)) {\n        result += _lib.default.popoverRow('Finished', _lib.default.displayDateTime(finishedAt));\n      }\n    }\n    if (note && note.contents && note.contents.length > 0) result += _lib.default.popoverRow('Note', note.contentsHtml);\n    return result;\n  }\n  function parseMetric(metric) {\n    const isPercentage = _lib.default.endsWith(metric, PercentSuffix);\n    let key = null;\n    if (isPercentage) {\n      metric = metric.substring(0, metric.length - PercentSuffix.length);\n    }\n    let isCumulative = false;\n    if (_lib.default.endsWith(metric, TotalSuffix)) {\n      metric = metric.substring(0, metric.length - TotalSuffix.length);\n      if (metric.indexOf('-') > 0) {\n        isCumulative = true;\n      } else {\n        key = 'total';\n      }\n    }\n    const dashIndex = metric.indexOf('-');\n    if (dashIndex !== -1) {\n      key = metric.substring(dashIndex + 1);\n      metric = metric.substring(0, dashIndex);\n    }\n    return {\n      name: metric,\n      key: key,\n      isPercentage: isPercentage,\n      isCumulative: isCumulative\n    };\n  }\n  function buildRegionMap(regionSummaries) {\n    const byRegionId = new Map();\n    _.forEach(regionSummaries, regionSummary => {\n      const execRegion = regionSummary.executionRegion;\n      let regionInfo = byRegionId.get(execRegion.region.id);\n      if (!regionInfo) {\n        regionInfo = {\n          execRegionIds: [],\n          region: execRegion.region\n        };\n        byRegionId.set(execRegion.region.id, regionInfo);\n      }\n      regionInfo.execRegionIds.push(execRegion.id);\n    });\n    return byRegionId;\n  }\n  function getAgentsForRegion(modelAgents, region) {\n    let agents = [],\n      agentIds = new Set();\n    _.forEach(modelAgents, function (agentInfo) {\n      if (!agentIds.has(agentInfo.agent.id)) {\n        let matchesRegion = !region || region === 'ALL' || Number(region) === agentInfo.regionId;\n        if (matchesRegion) {\n          agentIds.add(agentInfo.agent.id);\n          let name = (agentInfo.agent.instanceId ? agentInfo.agent.instanceId + ' [' : '') + agentInfo.agent.host + (agentInfo.agent.instanceId ? ']' : '');\n          agents.push({\n            id: agentInfo.agent.id,\n            name: name\n          });\n        }\n      }\n    });\n    return _.sortBy(agents, function (agent) {\n      return agent.name;\n    });\n  }\n  function getAssertionOptions(suiteSummaries) {\n    const answer = [{\n      suiteTest: {\n        id: -1,\n        name: 'ALL'\n      }\n    }];\n    _lib.default.sortByMoment(suiteSummaries, ['firstStartedAt']);\n    _.forEach(suiteSummaries, function (suiteSummary) {\n      _lib.default.sortByMoment(suiteSummary.testSummaries, ['firstStartedAt']);\n      answer.push({\n        groupName: suiteSummary.suite.name,\n        options: suiteSummary.testSummaries\n      });\n    });\n    return answer;\n  }\n  function findAssertionOption(assertion, assertionOptions) {\n    let answer = assertionOptions[0];\n    if (assertion && assertion.suiteTest) {\n      _.forEach(assertionOptions, function (opt) {\n        _.forEach(opt.options, function (singleOpt) {\n          if (singleOpt.suiteTest.id === assertion.suiteTest.id) {\n            answer = singleOpt;\n          }\n        });\n      });\n    }\n    return answer;\n  }\n  function findSuiteErrorOption(error, errorOptions) {\n    let answer = errorOptions[0];\n    if (error && error.suiteError) {\n      _.forEach(errorOptions, function (opt) {\n        if (opt.suiteError.id === error.suiteError.id) {\n          answer = opt;\n        }\n      });\n    }\n    return answer;\n  }\n  function getErrorOptions(suiteErrors) {\n    const answer = [{\n      suiteError: {\n        id: -1,\n        name: 'ALL'\n      }\n    }];\n    _.forEach(suiteErrors, function (suiteError) {\n      answer.push(suiteError);\n    });\n    return answer;\n  }\n  function getSummaryCount(summary) {\n    if (summary) {\n      const txnCount = summary['Testable-jmeterTxnCount'];\n      return _.isNumber(txnCount) && summary.count === 0 ? txnCount : summary.count;\n    }\n    return 0;\n  }\n  let HttpResponseCodes = _.keys(_http.default.HttpResponseCodes);\n  let HttpResponseStatuses = _.values(_http.default.HttpResponseCodes);\n  let ResponseCodes = ['Connected', 'Error', 'Failed to Connect', 'Connection Closed'].concat(HttpResponseCodes);\n  let ResponseStatuses = ['Connected', 'Error', 'Failed to Connect', 'Connection Closed'].concat(HttpResponseStatuses);\n  let MultiUserUnits = {\n    'default': 'users',\n    'JMeter': 'instances',\n    'Gatling': 'instances',\n    'Locust': 'instances'\n  };\n  let MultiUserMetrics = ['concurrentClients', 'clientsStarted', 'clientsFinished'];\n  let DefaultMetricDefs = [{\n    namespace: SystemNs,\n    name: \"count\",\n    metricType: \"Counter\",\n    metricUnits: \"reqs\",\n    isSystem: true\n  }, {\n    namespace: SystemNs,\n    name: \"expected\",\n    metricType: \"Counter\",\n    metricUnits: \"reqs\",\n    isSystem: true,\n    excludedAggregators: ['peak', 'peakCountPerSec']\n  }, {\n    namespace: SystemNs,\n    name: \"iterationsExecuted\",\n    metricType: \"Counter\",\n    metricUnits: \"iterations\",\n    isSystem: true,\n    excludedAggregators: ['peak', 'peakCountPerSec']\n  }, {\n    namespace: SystemNs,\n    name: \"concurrentClients\",\n    metricType: \"Counter\",\n    metricUnits: MultiUserUnits,\n    isSystem: true,\n    calcAggregators: false\n  }, {\n    namespace: SystemNs,\n    name: \"actualConcurrentClients\",\n    metricType: \"Counter\",\n    metricUnits: \"users\",\n    isSystem: true,\n    calcAggregators: false\n  }, {\n    namespace: SystemNs,\n    name: \"maxConcurrentClients\",\n    metricType: \"Counter\",\n    metricUnits: \"users\",\n    isSystem: true,\n    calcAggregators: false\n  }, {\n    namespace: SystemNs,\n    name: \"throughput\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes/sec\",\n    isSystem: true,\n    calcAggregators: false\n  }, {\n    namespace: SystemNs,\n    name: \"requestsPerSec\",\n    metricType: \"Counter\",\n    metricUnits: \"req/sec\",\n    isSystem: true,\n    calcAggregators: false\n  }, {\n    namespace: SystemNs,\n    name: \"peakRequestsPerSec\",\n    metricType: \"Counter\",\n    metricUnits: \"req/sec\",\n    isSystem: true,\n    calcAggregators: false\n  }];\n  let StandardMetricDefs = [{\n    namespace: SystemNs,\n    name: \"bandwidth\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"bytesReceived\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"bytesSent\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"blockedMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"commands\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['Passed', 'Failed']\n  }, {\n    namespace: SystemNs,\n    name: \"commandStreams\",\n    metricType: \"Counter\",\n    metricUnits: \"streams\"\n  }, {\n    namespace: SystemNs,\n    name: \"connectionCloseMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"connectionOpenMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"disconnectMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"dataPacketsReceived\",\n    metricType: \"Counter\",\n    metricUnits: \"packets\"\n  }, {\n    namespace: SystemNs,\n    name: \"dataPacketsSent\",\n    metricType: \"Counter\",\n    metricUnits: \"packets\"\n  }, {\n    namespace: SystemNs,\n    name: \"dnsLookupMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstSentMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstReceivedMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"httpContentType\",\n    metricType: \"Histogram\",\n    metricUnits: \"\"\n  }, {\n    namespace: SystemNs,\n    name: \"httpMethod\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['GET', 'POST', 'PATCH', 'DELETE', 'PUT']\n  }, {\n    namespace: SystemNs,\n    name: \"httpResponseCode\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: HttpResponseCodes\n  }, {\n    namespace: SystemNs,\n    name: \"responseCode\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ResponseCodes\n  }, {\n    namespace: SystemNs,\n    name: \"responseStatus\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ResponseStatuses\n  }, {\n    namespace: SystemNs,\n    name: \"errors\",\n    metricType: \"Histogram\",\n    metricUnits: \"\"\n  }, {\n    namespace: SystemNs,\n    name: \"iterationExecutedMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"outcome\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['success', 'failure']\n  }, {\n    namespace: SystemNs,\n    name: \"memory\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"memory1mMA\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"memory5mMA\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"memoryUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"memory1mMAUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"memory5mMAUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpu\",\n    metricType: \"Metered\",\n    metricUnits: \"%d\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpu1mMA\",\n    metricType: \"Metered\",\n    metricUnits: \"%d\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpu5mMA\",\n    metricType: \"Metered\",\n    metricUnits: \"%d\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpuUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpu1mMAUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"cpu5mMAUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"testRunnerBandwidth\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes/sec\"\n  }, {\n    namespace: SystemNs,\n    name: \"testRunnerSent\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes/sec\"\n  }, {\n    namespace: SystemNs,\n    name: \"testRunnerReceived\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes/sec\"\n  }, {\n    namespace: SystemNs,\n    name: \"testRunnerConnections\",\n    metricType: \"Metered\",\n    metricUnits: \"connections\"\n  }, {\n    namespace: SystemNs,\n    name: \"testRunnerConnectionsEstablished\",\n    metricType: \"Metered\",\n    metricUnits: \"connections\"\n  }, {\n    namespace: SystemNs,\n    name: \"diskUsed\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"diskFree\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"diskTotal\",\n    metricType: \"Metered\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"diskUtilization\",\n    metricType: \"Metered\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"clientsStarted\",\n    metricType: \"Counter\",\n    metricUnits: MultiUserUnits\n  }, {\n    namespace: SystemNs,\n    name: \"clientsFinished\",\n    metricType: \"Counter\",\n    metricUnits: MultiUserUnits\n  }, {\n    namespace: SystemNs,\n    name: \"imageDiff\",\n    metricType: \"Timing\",\n    metricUnits: \"%\"\n  }, {\n    namespace: SystemNs,\n    name: \"assertions\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['passed', 'failed', 'skipped']\n  }, {\n    namespace: SystemNs,\n    name: \"eventsSent\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: []\n  }, {\n    namespace: SystemNs,\n    name: \"eventsReceived\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: []\n  }];\n  let PhantomJsMetricDefs = [{\n    namespace: SystemNs,\n    name: \"pageLoadMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }];\n  let SeleniumMetricDefs = [{\n    namespace: SystemNs,\n    name: \"wdioAssertions\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['passed', 'failed', 'skipped']\n  }, {\n    namespace: SystemNs,\n    name: \"pageLoadMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"speedIndex\",\n    metricType: \"Timing\",\n    metricUnits: \"\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstByte\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstPaint\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstContentfulPaint\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"firstInteractive\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"pageWeight\",\n    metricType: \"Timing\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"pageRequests\",\n    metricType: \"Timing\",\n    metricUnits: \"reqs\"\n  }];\n  let ConcurrencyEnabledMetricDefs = [{\n    namespace: SystemNs,\n    name: \"actualClientsStarted\",\n    metricType: \"Counter\",\n    metricUnits: \"users\"\n  }, {\n    namespace: SystemNs,\n    name: \"actualClientsFinished\",\n    metricType: \"Counter\",\n    metricUnits: \"users\"\n  }];\n  let JMeterMetricDefs = [{\n    namespace: SystemNs,\n    name: \"jmeterConcurrents\",\n    metricType: \"Metered\",\n    metricUnits: \"users\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnConnectionOpenMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnFirstReceivedMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnConnectionCloseMs\",\n    metricType: \"Timing\",\n    metricUnits: \"ms\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnCount\",\n    metricType: \"Counter\",\n    metricUnits: \"txns\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnBandwidth\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnBytesReceived\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnBytesSent\",\n    metricType: \"Counter\",\n    metricUnits: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnResponseCode\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ResponseCodes\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnResponseStatus\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ResponseStatuses\n  }, {\n    namespace: SystemNs,\n    name: \"jmeterTxnOutcome\",\n    metricType: \"Histogram\",\n    metricUnits: \"\",\n    defaultBuckets: ['success', 'failure']\n  }];\n  let JavaMetricDefs = [{\n    namespace: SystemNs,\n    name: \"kafkaBandwidth\",\n    type: \"Counter\",\n    units: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"kafkaBytesSent\",\n    type: \"Counter\",\n    units: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"kafkaBytesReceived\",\n    type: \"Counter\",\n    units: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"kafkaMessagesProduced\",\n    type: \"Counter\",\n    units: \"bytes\"\n  }, {\n    namespace: SystemNs,\n    name: \"kafkaMessagesConsumed\",\n    type: \"Counter\",\n    units: \"bytes\"\n  }];\n  let RequestMetrics = ['firstReceivedMs', 'bandwidth', 'bytesSent', 'bytesReceived', 'responseCode', 'responseStatus', 'outcome'];\n  let DefaultPercentiles = '50,95,99';\n  let MetricDictionary = {\n    count: 'Count',\n    processedResultDimensions: 'Aggregations',\n    expectedResultDimensions: 'Aggregations',\n    expected: 'Expected',\n    iterationsExecuted: 'Iterations Executed',\n    iterationExecutedMs: 'Iteration Time',\n    concurrentClients: {\n      'default': 'Concurrent Users',\n      'JMeter': 'JMeter Instances',\n      'Gatling': 'Gatling Instances',\n      'Locust': 'Locust Instances'\n    },\n    actualConcurrentClients: 'Active Concurrent Users',\n    maxConcurrentClients: 'Max Concurrent Users',\n    clientsStarted: {\n      'default': 'Virtual Users Started',\n      'JMeter': 'JMeter Instances Started',\n      'Gatling': 'Gatling Instances Started',\n      'Locust': 'Locust Instances Started'\n    },\n    actualClientsStarted: 'Virtual Users Started',\n    clientsFinished: {\n      'default': 'Virtual Users Finished',\n      'JMeter': 'JMeter Instances Finished',\n      'Gatling': 'Gatling Instances Finished',\n      'Locust': 'Locust Instances Finished'\n    },\n    jmeterConcurrents: 'JMeter Active Threads',\n    jmeterTxnCount: 'JMeter Transactions',\n    jmeterTxnConnectionOpenMs: 'JMeter Transaction Connection Open Time',\n    jmeterTxnFirstReceivedMs: 'JMeter Transaction Response Time',\n    jmeterTxnConnectionCloseMs: 'JMeter Transaction Total Time',\n    jmeterTxnBandwidth: 'JMeter Transaction Bandwidth',\n    jmeterTxnBytesReceived: 'JMeter Transaction Bytes Received',\n    jmeterTxnBytesSent: 'JMeter Transaction Bytes Sent',\n    jmeterTxnResponseCode: 'JMeter Transaction Response Code',\n    jmeterTxnResponseStatus: 'JMeter Transaction Response Status',\n    jmeterTxnOutcome: 'JMeter Transaction Outcome',\n    actualClientsFinished: 'Virtual Users Finished',\n    breakingPoint: 'Breaking Point',\n    throughput: 'Throughput',\n    requestsPerSec: 'Requests/Sec',\n    peakRequestsPerSec: 'Peak Requests/Sec',\n    memory: 'Memory',\n    memory1mMA: 'Memory (1 min MA)',\n    memory5mMA: 'Memory (5 min MA)',\n    memoryUtilization: 'Memory %',\n    memory1mMAUtilization: 'Memory % (1 min MA)',\n    memory5mMAUtilization: 'Memory % (5 min MA)',\n    cpu: 'CPU',\n    cpu1mMA: 'CPU (1 min MA)',\n    cpu5mMA: 'CPU (5 min MA)',\n    cpuUtilization: 'CPU %',\n    cpu1mMAUtilization: 'CPU % (1 min MA)',\n    cpu5mMAUtilization: 'CPU % (5 min MA)',\n    bandwidth: 'Bandwidth',\n    bytesReceived: 'Bytes Received',\n    bytesSent: 'Bytes Sent',\n    commands: 'Commands',\n    commandStreams: 'Command Streams',\n    connectionCloseMs: 'Connection Close',\n    disconnectMs: 'Disconnect Time',\n    connectionOpenMs: 'Connection Open',\n    dataPacketsReceived: 'Packets Received',\n    dataPacketsSent: 'Packets Sent',\n    dnsLookupMs: 'DNS Lookup',\n    files: 'Files',\n    firstSentMs: 'First Sent Time',\n    firstReceivedMs: 'Response Time',\n    blockedMs: 'Blocked Time',\n    httpContentType: 'HTTP Content Type',\n    httpMethod: 'HTTP Method',\n    httpResponseCode: 'HTTP Response Code',\n    responseCode: 'Response Code',\n    success: 'Success',\n    outcome: 'Outcome',\n    testRunnerBandwidth: 'Test Runner Bandwidth',\n    testRunnerReceived: 'Test Runner Bytes Received',\n    testRunnerSent: 'Test Runner Bytes Sent',\n    testRunnerConnections: 'Test Runner Connections',\n    testRunnerConnectionsEstablished: 'Test Runner Connections Established',\n    diskTotal: 'Test Runner Disk Total',\n    diskUsed: 'Test Runner Disk Used',\n    diskFree: 'Test Runner Disk Free',\n    diskUtilization: 'Test Runner Disk Utilization %',\n    pageLoadMs: 'Page Load',\n    wdioAssertions: 'Webdriver.io Assertions',\n    assertions: 'Assertions',\n    images: 'Images',\n    imageDiff: 'Image Difference',\n    errors: 'Errors',\n    responseStatus: 'Response Status',\n    speedIndex: 'Speed Index',\n    firstByte: 'Time to First Byte',\n    firstPaint: 'Time to First Paint',\n    firstContentfulPaint: 'Time to First Contentful Paint',\n    firstInteractive: 'Time to Interactive',\n    pageWeight: 'Page Weight',\n    pageRequests: 'Page Requests',\n    jsHeapSizeLimit: 'Browser JS Heap Size Limit',\n    totalJSHeapSize: 'Browser Total JS Heap Size',\n    usedJSHeapSize: 'Browser Used JS Heap Size',\n    kafkaBandwidth: \"Kafka Bandwidth\",\n    kafkaBytesSent: \"Kafka Bytes Sent\",\n    kafkaBytesReceived: \"Kafka Bytes Received\",\n    kafkaMessagesProduced: \"Kafka Messages Produced\",\n    kafkaMessagesConsumed: \"Kafka Messages Consumed\",\n    eventsSent: 'Events Sent',\n    eventsReceived: 'Events Received'\n  };\n  const OverallResource = {\n    id: -1,\n    resource: '!overall!'\n  };\n  const DefaultSuccessTrigger = {\n    triggerType: 'OnTestFinish',\n    operator: 'AND',\n    dependsOnRtTriggers: true,\n    conditions: [],\n    actions: []\n  };\n  const DefaultBreakingPointTrigger = {\n    triggerType: 'RealTime',\n    operator: 'OR',\n    conditions: [],\n    actions: [{\n      actionType: 'StopExecution'\n    }]\n  };\n  const TestCaseFilters = [{\n    id: 'all',\n    name: 'All'\n  }, {\n    id: 'running',\n    name: 'Running'\n  }, {\n    id: 'scheduled',\n    name: 'Scheduled'\n  }, {\n    id: 'failing',\n    name: 'Failing'\n  }, {\n    id: 'passing',\n    name: 'Passing'\n  }, {\n    id: 'hasConf',\n    name: 'Has Test Configuration'\n  }, {\n    id: 'today',\n    name: 'Ran Today'\n  }, {\n    id: 'yesterday',\n    name: 'Ran Since Yesterday'\n  }, {\n    id: '7d',\n    name: 'Ran Last 7 days'\n  }, {\n    id: '30d',\n    name: 'Ran Last 30 days'\n  }, {\n    id: '90d',\n    name: 'Ran Last 90 days'\n  }];\n  const TestCasesFilters = TestCaseFilters;\n  const PassFailStates = ['fail', 'pass', 'unknown', 'notRun'];\n  var _default = _exports.default = {\n    DefaultPercentiles: DefaultPercentiles,\n    DefaultMetricDefs: DefaultMetricDefs,\n    StandardMetricDefs: StandardMetricDefs,\n    MetricDictionary: MetricDictionary,\n    SystemNs: SystemNs,\n    OverallResource: OverallResource,\n    toCreateDetails: toCreateDetails,\n    getScriptParams: getScriptParams,\n    getStandardMetricDefs: getStandardMetricDefs,\n    getMetricDefs: getMetricDefs,\n    getUnits: getUnits,\n    findMetricDef: findMetricDef,\n    printOperator: printOperator,\n    printConditionMetric: printConditionMetric,\n    printConditionUnits: printConditionUnits,\n    printAggregator: printAggregator,\n    getProviderPopoverText: getProviderPopoverText,\n    toFileFilterParams: toFileFilterParams,\n    isMultiUser: isMultiUser,\n    getOutcomeIcon: getOutcomeIcon,\n    getOutcomeForMap: getOutcomeForMap,\n    getOutcomeHtml: getOutcomeHtml,\n    getExecutionOutcomeHtml: getExecutionOutcomeHtml,\n    getExecutionOutcomeMap: getExecutionOutcomeMap,\n    getExecutionOutcomeOrder: getExecutionOutcomeOrder,\n    getExecutionSuccessOutcomeOrder: getExecutionSuccessOutcomeOrder,\n    getDefaultMetricNamepsace: getDefaultMetricNamepsace,\n    toMetricKey: toMetricKey,\n    toMetricName: toMetricName,\n    printMetric: printMetric,\n    getMetricTitle: getMetricTitle,\n    hasPublicLocation: hasPublicLocation,\n    deriveSummary: deriveSummary,\n    isTraceRelevant: isTraceRelevant,\n    isFileRelevant: isFileRelevant,\n    hasResults: hasResults,\n    getAllRegions: getAllRegions,\n    printInstanceType: printInstanceType,\n    printVpc: printVpc,\n    printSubnet: printSubnet,\n    printConcurrentUser: printConcurrentUser,\n    printMultiUserScriptType: printMultiUserScriptType,\n    getExecutedLocations: getExecutedLocations,\n    getLocations: getLocations,\n    getConditions: getConditions,\n    applyConditionsToTriggers: applyConditionsToTriggers,\n    findTrigger: findTrigger,\n    printShortSummary: printShortSummary,\n    getInstanceTypes: getInstanceTypes,\n    getInstanceSeries: getInstanceSeries,\n    getInstanceTypesForSeries: getInstanceTypesForSeries,\n    getDefaultRatio: getDefaultRatio,\n    getRecommendedInstanceType: getRecommendedInstanceType,\n    findInstanceType: findInstanceType,\n    stopExecutions: stopExecutions,\n    toTextClass: toTextClass,\n    toIconClass: toIconClass,\n    toNoteClass: toNoteClass,\n    toColorClass: toColorClass,\n    toMetric: toMetric,\n    sortConfGroups: sortConfGroups,\n    buildStartedAtPopover: buildStartedAtPopover,\n    getLastRun: getLastRun,\n    parseMetric: parseMetric,\n    getAgentsForRegion: getAgentsForRegion,\n    buildRegionMap: buildRegionMap,\n    getAssertionOptions: getAssertionOptions,\n    getErrorOptions: getErrorOptions,\n    findSuiteErrorOption: findSuiteErrorOption,\n    findAssertionOption: findAssertionOption,\n    doesFileMatchFilter: doesFileMatchFilter,\n    DefaultSuccessTrigger: DefaultSuccessTrigger,\n    DefaultBreakingPointTrigger: DefaultBreakingPointTrigger,\n    TestCaseFilters: TestCaseFilters,\n    TestCasesFilters: TestCasesFilters,\n    PassFailStates: PassFailStates,\n    MaxUsersDropdown: MaxUsersDropdown,\n    getParams,\n    TotalSuffix,\n    PercentSuffix,\n    RequestMetrics,\n    getProviders,\n    getSummaryCount,\n    getDefaultSizing,\n    getDefaultRegion,\n    getMetadata,\n    printConditionMetricMonitor\n  };\n});","define(\"@testable/shared-ui/utils/login-redirect\", [\"exports\", \"@testable/shared-ui/utils/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.clearRootRedirect = clearRootRedirect;\n  _exports.isRootRedirect = isRootRedirect;\n  _exports.isSafeAuthorizeRedirect = isSafeAuthorizeRedirect;\n  _exports.isSafeMcpAuthorizeRedirect = isSafeMcpAuthorizeRedirect;\n  _exports.prepareSafeAuthorizeRedirect = prepareSafeAuthorizeRedirect;\n  _exports.redirectAfterLogin = redirectAfterLogin;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function decodeRedirect(redirect) {\n    try {\n      return decodeURIComponent(redirect).trim();\n    } catch (e) {\n      return redirect.trim();\n    }\n  }\n  function isHttpUrl(url) {\n    return url.protocol === 'http:' || url.protocol === 'https:';\n  }\n  function webHostToMcpAuthorizeHosts(hostname) {\n    const host = (hostname || '').toLowerCase();\n    if (host === 'testable.io' || host === 'a.testable.io') {\n      return ['mcp.testable.io', 'a.mcp.testable.io'];\n    }\n    if (host === 'm.testable.io') {\n      return ['m.mcp.testable.io'];\n    }\n    if (host.endsWith('.m.testable.io')) {\n      return [`${host.slice(0, -'.m.testable.io'.length)}.m.mcp.testable.io`];\n    }\n    if (host.endsWith('.testable.io')) {\n      return [`${host.slice(0, -'.testable.io'.length)}.mcp.testable.io`];\n    }\n    return [];\n  }\n  function isSameHostRedirect(redirect) {\n    try {\n      const url = new URL(redirect);\n      return isHttpUrl(url) && url.hostname === window.location.hostname;\n    } catch (e) {\n      return false;\n    }\n  }\n  function isAbsoluteUrl(redirect) {\n    return /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(redirect);\n  }\n  function isSafeMcpAuthorizeRedirect(redirect) {\n    try {\n      const url = redirect instanceof URL ? redirect : new URL(redirect);\n      return isHttpUrl(url) && url.pathname === '/oauth/authorize' && webHostToMcpAuthorizeHosts(window.location.hostname).includes(url.hostname.toLowerCase());\n    } catch (e) {\n      return false;\n    }\n  }\n  function isSafeAuthorizeRedirect(redirect) {\n    try {\n      const url = redirect instanceof URL ? redirect : new URL(redirect);\n      return isHttpUrl(url) && url.pathname === '/oauth/authorize' && (url.hostname === window.location.hostname || isSafeMcpAuthorizeRedirect(url));\n    } catch (e) {\n      return false;\n    }\n  }\n  function prepareSafeAuthorizeRedirect(redirect) {\n    const url = redirect instanceof URL ? redirect : new URL(redirect);\n    if (isSafeMcpAuthorizeRedirect(url) && _environment.config.currentUser.sid) {\n      url.searchParams.set('sid', _environment.config.currentUser.sid);\n    }\n    return url.toString();\n  }\n  function redirectAfterLogin(router, redirect, fallbackRoute = 'index') {\n    if (!redirect) {\n      if (fallbackRoute) router.transitionTo(fallbackRoute);\n      return false;\n    }\n    const decodedRedirect = decodeRedirect(redirect);\n    if (!decodedRedirect || decodedRedirect === '/' || decodedRedirect.endsWith('register')) {\n      if (fallbackRoute) router.transitionTo(fallbackRoute);\n      return false;\n    }\n    if (isSameHostRedirect(decodedRedirect)) {\n      window.location.assign(decodedRedirect);\n      return true;\n    }\n    if (isSafeMcpAuthorizeRedirect(decodedRedirect)) {\n      window.location.assign(prepareSafeAuthorizeRedirect(decodedRedirect));\n      return true;\n    }\n    if (isAbsoluteUrl(decodedRedirect)) {\n      if (fallbackRoute) router.transitionTo(fallbackRoute);\n      return false;\n    }\n    router.transitionTo(decodedRedirect);\n    return true;\n  }\n  function isRootRedirect(redirect) {\n    return redirect && decodeRedirect(redirect) === '/';\n  }\n  function clearRootRedirect() {\n    const url = new URL(window.location.href);\n    url.searchParams.delete('redirect');\n    window.history.replaceState({}, document.title, url.toString());\n  }\n});","define(\"@testable/shared-ui/utils/login\", [\"exports\", \"rsvp\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/environment\", \"tracked-built-ins\", \"@testable/shared-ui/utils/marketing-attribution\", \"@testable/shared-ui/utils/session-cookie\"], function (_exports, _rsvp, _lib, _loadTest, _environment, _trackedBuiltIns, _marketingAttribution, _sessionCookie) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/environment\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/marketing-attribution\",0,\"@testable/shared-ui/utils/session-cookie\"eaimeta@70e063a35619d71f\n  function userInfoFromSession(resultUser, qpSid, qpOrg) {\n    let sid = getSid(qpSid);\n    if (!_.isUndefined(sid)) {\n      return new _rsvp.Promise(function (resolve, reject) {\n        const done = user => {\n          clearSessionQueryParams();\n          resolve(user);\n        };\n        if (_environment.config.requireAccessCode && !_.isEmpty(getAccessCodeCookie())) {\n          verifyAccessCode(getAccessCodeCookie()).then(function (data) {\n            if (data.success) {\n              validateSid(resultUser, sid, done, reject, qpOrg);\n            } else {\n              clearAccessCodeCookie();\n              done(resultUser);\n            }\n          }, function (jqxhr, state, errMsg) {\n            done(resultUser);\n          });\n        } else {\n          validateSid(resultUser, sid, done, reject, qpOrg);\n        }\n      });\n    }\n  }\n  function clearSessionQueryParams() {\n    const url = new URL(window.location.href);\n    if (!url.searchParams.has('sid') && !url.searchParams.has('org')) {\n      return;\n    }\n    url.searchParams.delete('sid');\n    url.searchParams.delete('org');\n    window.history.replaceState({}, document.title, url.toString());\n  }\n  function validateSid(resultUser, sid, resolve, reject, qpOrg) {\n    // A remembered organization is a preference, not an explicit login target.\n    // Forward only an org supplied in the URL (for example by the app switcher).\n    const org = qpOrg;\n    $.ajax({\n      type: \"GET\",\n      url: `${_environment.config.apiBaseUrl}/login?sid=${sid}` + (org ? `&org=${org}` : ''),\n      cache: false,\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (data) {\n      resultUser.setProperties(toUserInfo(data, false, data.redirect));\n      if (qpOrg && resultUser.orgId) {\n        setOrgCookie(resultUser.orgId);\n      }\n      resolve(resultUser);\n    }, function (jqxhr, state, errMsg) {\n      resolve(resultUser);\n    });\n  }\n  function verifyAccessCode(accessCode) {\n    return $.ajax({\n      type: \"POST\",\n      url: _environment.config.apiBaseUrl + \"/verify-access-code?code=\" + accessCode,\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (data) {\n      if (!data.success) {\n        clearAccessCodeCookie();\n        _lib.default.error(data.error, 'Invalid Access Code');\n      } else {\n        $.cookie('accessCode', accessCode, {\n          domain: window.location.hostname,\n          path: '/'\n        });\n      }\n      return data;\n    });\n  }\n  function logout(resultUser) {\n    clearSid();\n    if (window.Intercom) window.Intercom(\"shutdown\");\n    location.reload();\n  }\n  function login(resultUser) {\n    let email = $('#email').val();\n    let password = $('#password').val();\n    return doLogin(email, password, resultUser);\n  }\n  function doLogin(email, password, resultUser) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/login\"),\n      data: JSON.stringify({\n        user: email,\n        password: password\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data, status, jqxhr) {\n      if (data && data.redirect && data.user) {\n        return applyLoginResult(resultUser, data, data.redirect);\n      } else {\n        return applyLoginResult(resultUser, data);\n      }\n    }, function (jqxhr, status, errMsg) {\n      // Authentication failures belong on the login form. The generic handler\n      // reloads the app on 403, which sends the user straight back to login.\n      _lib.default.error(_lib.default.messageFromFail(jqxhr, status, errMsg), 'Login Error');\n      return _rsvp.Promise.reject(jqxhr);\n    });\n  }\n  function applyLoginResult(resultUser, data, isNoPlan) {\n    const result = toUserInfo(data, true, isNoPlan);\n    resultUser.setProperties(result);\n    return data;\n  }\n  const DefaultConcurrentClientsLimit = 50;\n  function toUserInfo(data, showError, isNoPlan) {\n    if (data.success) {\n      const myOrgAssoc = findMyOrgAssoc(data.user);\n      const assoc = findOrgAssoc(data.user);\n      setSid(data.sid);\n      if (assoc) {\n        setOrgCookie(assoc.organization.id);\n        return {\n          isLoggedIn: true,\n          sid: data.sid,\n          isNoPlan: isNoPlan || null,\n          name: data.user.name,\n          email: data.user.email,\n          confirmed: data.user.confirmed,\n          accessType: data.user.accessType,\n          isAdmin: data.user.accessType === 'Admin',\n          isViewer: assoc.userRole === 'Viewer',\n          id: data.user.id,\n          createdAt: moment(data.user.createdAt),\n          hmac: data.user.hmac,\n          invitedOrgId: data.user.invitedOrgId,\n          myOrg: _.isObject(myOrgAssoc) ? myOrgAssoc.organization : null,\n          orgId: _.isObject(assoc) ? assoc.organization.id : null,\n          org: new _trackedBuiltIns.TrackedObject(assoc.organization),\n          activeIntegrations: assoc.activeIntegrations || [],\n          getConcurrentClientsLimit: function (scriptType, locations) {\n            let answer = DefaultConcurrentClientsLimit;\n            let type = _loadTest.default.hasPublicLocation(locations) ? 'Public' : 'Default';\n            let field = toConcurrentsField(scriptType, type);\n            let limit = findLimit(assoc, field);\n            if (limit.value) {\n              answer = limit.value;\n            } else {\n              return DefaultConcurrentClientsLimit;\n            }\n            return answer;\n          },\n          findLimit: function (field) {\n            return findLimit(assoc, field);\n          },\n          printLimits: function (limitType, scriptType) {\n            const field = toConcurrentsField(scriptType, limitType);\n            const limit = findLimit(assoc, field);\n            if (limit) {\n              let text = '';\n              if (_loadTest.default.isMultiUser(scriptType)) {\n                text += `${limit.value} ${scriptType} instances with `;\n              }\n              const concurrents = _lib.default.printNumber(limit.value);\n              const requestsPerSecLimit = findLimit(assoc, 'requestsPerSec');\n              const rps = requestsPerSecLimit.value ? _lib.default.printNumber(requestsPerSecLimit.value) : 'unlimited';\n              const throughputLimit = findLimit(assoc, 'throughput');\n              const throughput = throughputLimit.value ? _lib.default.print(throughputLimit.value, 'bytes/sec') : 'unlimited';\n              text += `${concurrents} total ${scriptType === 'Selenium' ? 'Selenium' : 'concurrent'} users, ${rps} RPS, and ${throughput} throughput.`;\n              return text;\n            }\n            return null;\n          },\n          toConcurrentsField: toConcurrentsField,\n          isOrgAdmin: assoc.userRole === 'Admin' || data.user.accessType === 'Admin',\n          orgs: new _trackedBuiltIns.TrackedArray(_.each(data.user.orgAssociations, a => {\n            a.organization = new _trackedBuiltIns.TrackedObject(a.organization);\n          }))\n        };\n      } else {\n        return onLoginError('User has no organizations', 'Account Error', showError);\n      }\n    } else {\n      return onLoginError(data.error, 'Login Error', showError);\n    }\n  }\n  function toConcurrentsField(scriptType, limitType) {\n    if (limitType === 'Public') {\n      if (scriptType === 'JMeter' || scriptType === 'Gatling' || scriptType === 'Locust') {\n        return 'publicLoadEngines';\n      } else {\n        return 'publicConcurrentUsers';\n      }\n    } else {\n      return 'concurrentUsers';\n    }\n  }\n  function findLimit(assoc, field) {\n    if (assoc && assoc.organization) {\n      return _.find(assoc.organization.account.limits, limit => limit.name === field);\n    }\n    return null;\n  }\n  function findMyOrgAssoc(user) {\n    return _.find(user.orgAssociations, function (assoc) {\n      return assoc.organization && assoc.organization.name.toLowerCase() === user.email.toLowerCase();\n    });\n  }\n  function findInvitedOrgId(user) {\n    if (user.invitedOrgId) {\n      return _.find(user.orgAssociations, function (assoc) {\n        return assoc.organization && assoc.organization.id === user.invitedOrgId;\n      });\n    }\n    return null;\n  }\n  function findOrgAssoc(user) {\n    let preferredOrg = getOrgCookie();\n    let assoc;\n    if (preferredOrg) {\n      assoc = _.find(user.orgAssociations, function (assoc) {\n        return assoc.organization && assoc.organization.id === Number(preferredOrg);\n      });\n      if (!assoc) (0, _sessionCookie.clearSessionCookie)('org');\n    }\n    if (_.isUndefined(assoc)) {\n      assoc = findInvitedOrgId(user) || findMyOrgAssoc(user);\n    }\n    if (_.isUndefined(assoc) && user.orgAssociations && user.orgAssociations.length > 0) {\n      assoc = user.orgAssociations[0];\n    }\n    return assoc;\n  }\n  function onLoginError(error, title, showError) {\n    if (showError) {\n      _lib.default.error(error, title);\n    }\n    clearSid();\n    return emptyUserInfo();\n  }\n  function emptyUserInfo() {\n    return {\n      isLoggedIn: false,\n      sid: '',\n      orgId: '',\n      plan: {}\n    };\n  }\n  function signup(resultUser) {\n    let name = $('#signupName').val();\n    let email = $('#signupEmail').val();\n    let password = $('#signupPassword').val();\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/users\"),\n      data: JSON.stringify({\n        name: name,\n        email: email,\n        password: password,\n        active: true,\n        attributionId: (0, _marketingAttribution.getAttributionId)()\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function () {\n      $('#signupModal').modal('hide');\n      clearSignupFields();\n      return doLogin(email, password, resultUser);\n    }, _lib.default.stickyFail);\n  }\n  function clearSignupFields() {\n    $('#signupName').val('');\n    $('#signupEmail').val('');\n    $('#signupPassword').val('');\n  }\n  function configureOnPremEnv(data, resultUser) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/admin/configure-env\"),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      return applyLoginResult(resultUser, data);\n    }, _lib.default.stickyFail);\n  }\n  function getOrgCookie() {\n    return $.cookie('org');\n  }\n  function setOrgCookie(org) {\n    (0, _sessionCookie.setSessionCookie)('org', org, {\n      expires: 365\n    });\n  }\n  function getAccessCodeCookie() {\n    return $.cookie('accessCode');\n  }\n  function clearAccessCodeCookie() {\n    $.removeCookie('accessCode', {\n      domain: window.location.hostname,\n      path: '/'\n    });\n  }\n  function getSid(sid) {\n    if (!_.isUndefined(sid)) {\n      return sid;\n    }\n    return $.cookie('sid');\n  }\n  function setSid(sid) {\n    (0, _sessionCookie.setSessionCookie)('sid', sid);\n  }\n  function clearSid() {\n    (0, _sessionCookie.clearSessionCookie)('sid');\n  }\n  function requestPasswordReset(email) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/password-reset/code?email=\" + email),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function validatePasswordResetCode(code) {\n    return new _rsvp.Promise(function (resolve, reject) {\n      $.ajax({\n        type: \"GET\",\n        url: _lib.default.toUrl(\"/password-reset/\" + code),\n        dataType: \"json\"\n      }).then(function (data) {\n        resolve(data);\n      }, function (jqxhr, state, errMsg) {\n        resolve(false);\n      });\n    });\n  }\n  function resetPassword(code, password) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/password-reset\"),\n      data: JSON.stringify({\n        code: code,\n        password: password\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      toUserInfo(data, true);\n      return data;\n    }, _lib.default.fail);\n  }\n  function resendCode(email) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/users/admin/confirmation\"),\n      data: JSON.stringify({\n        email\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    });\n  }\n  function validateAllowedDomain(email) {\n    const allowedDomains = _environment.config.allowedDomains;\n    return allowedDomains ? !!allowedDomains.split(',').includes(email.split('@')[1]) : true;\n  }\n  const loginUtils = {\n    userInfoFromSession: userInfoFromSession,\n    verifyAccessCode: verifyAccessCode,\n    logout: logout,\n    login: login,\n    applyLoginResult: applyLoginResult,\n    signup: signup,\n    requestPasswordReset: requestPasswordReset,\n    validatePasswordResetCode: validatePasswordResetCode,\n    resetPassword: resetPassword,\n    setOrgCookie: setOrgCookie,\n    getAccessCodeCookie: getAccessCodeCookie,\n    configureOnPremEnv: configureOnPremEnv,\n    resendCode,\n    validateAllowedDomain\n  };\n  var _default = _exports.default = loginUtils;\n});","define(\"@testable/shared-ui/utils/marketing-attribution\", [\"exports\", \"@testable/shared-ui/utils/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.captureAttribution = captureAttribution;\n  _exports.default = void 0;\n  _exports.getAttributionId = getAttributionId;\n  _exports.parseMarketingConsent = parseMarketingConsent;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  const ATTRIBUTION_COOKIE = 'testable_attribution_id';\n  const PENDING_COOKIE = 'testable_attribution_pending';\n  const COOKIE_DAYS = 90;\n  const CAMPAIGN_FIELDS = ['gclid', 'gbraid', 'wbraid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];\n  let consentUpdateListenerRegistered = false;\n  function cookieDomain() {\n    return window.location.hostname === 'testable.io' || window.location.hostname.endsWith('.testable.io') ? '.testable.io' : window.location.hostname;\n  }\n  function cookieOptions() {\n    return {\n      expires: COOKIE_DAYS,\n      domain: cookieDomain(),\n      path: '/',\n      secure: window.location.protocol === 'https:'\n    };\n  }\n  function newId() {\n    if (window.crypto?.randomUUID) return window.crypto.randomUUID();\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, char => {\n      const random = Math.floor(Math.random() * 16);\n      const value = char === 'x' ? random : random & 0x3 | 0x8;\n      return value.toString(16);\n    });\n  }\n  function readJsonCookie(name) {\n    try {\n      return JSON.parse($.cookie(name) || '{}');\n    } catch (_error) {\n      return {};\n    }\n  }\n  function parseMarketingConsent(raw, consentRequired = true, categoryCookies = {}) {\n    if (!consentRequired) {\n      return {\n        analyticsConsent: true,\n        adUserDataConsent: true,\n        adPersonalizationConsent: true\n      };\n    }\n    const category = name => {\n      const cookieValue = categoryCookies[name];\n      if (cookieValue === 'yes' || cookieValue === 'no') return cookieValue === 'yes';\n      const match = raw.match(new RegExp(`(?:^|,)${name}:(yes|no)(?:,|$)`));\n      return match ? match[1] === 'yes' : null;\n    };\n    const advertising = category('advertisement');\n    return {\n      analyticsConsent: category('analytics'),\n      adUserDataConsent: advertising,\n      adPersonalizationConsent: advertising\n    };\n  }\n  function readConsent() {\n    const raw = decodeURIComponent($.cookie('cookieyes-consent') || $.cookie('cky-consent') || '');\n    return parseMarketingConsent(raw, _environment.config.marketingAttributionConsentRequired !== false, {\n      analytics: $.cookie('cookieyes-analytics'),\n      advertisement: $.cookie('cookieyes-advertisement')\n    });\n  }\n  function readGaIds() {\n    const ga = $.cookie('_ga');\n    const clientId = ga ? ga.split('.').slice(-2).join('.') : null;\n    const gaSessionCookie = Object.keys($.cookie()).find(name => name.startsWith('_ga_'));\n    const sessionValue = gaSessionCookie ? $.cookie(gaSessionCookie) : '';\n    const sessionMatch = sessionValue.match(/(?:^|\\.)s(\\d+)/);\n    return {\n      gaClientId: clientId || null,\n      gaSessionId: sessionMatch?.[1] || null\n    };\n  }\n  function buildPayload() {\n    const url = new URL(window.location.href);\n    const pending = readJsonCookie(PENDING_COOKIE);\n    const attributionId = $.cookie(ATTRIBUTION_COOKIE) || pending.attributionId || newId();\n    const consent = readConsent();\n    const payload = {\n      ...pending,\n      attributionId,\n      landingPage: pending.landingPage || url.href,\n      referrer: pending.referrer || document.referrer || null,\n      ...consent\n    };\n    if (consent.analyticsConsent) Object.assign(payload, readGaIds());else {\n      delete payload.gaClientId;\n      delete payload.gaSessionId;\n    }\n    CAMPAIGN_FIELDS.forEach(field => {\n      const value = url.searchParams.get(field);\n      const isAdClickId = ['gclid', 'gbraid', 'wbraid'].includes(field);\n      const property = field.replace(/_([a-z])/g, (_match, letter) => letter.toUpperCase());\n      if (isAdClickId && !consent.adUserDataConsent) delete payload[property];else if (value) payload[property] = value;\n    });\n    return payload;\n  }\n  function getAttributionId() {\n    return $.cookie(ATTRIBUTION_COOKIE) || readJsonCookie(PENDING_COOKIE).attributionId || null;\n  }\n  function listenForConsentUpdates() {\n    if (consentUpdateListenerRegistered) return;\n    consentUpdateListenerRegistered = true;\n    document.addEventListener('cookieyes_consent_update', captureAttribution);\n  }\n  function captureAttribution() {\n    if (_environment.config.isOnPrem) return Promise.resolve(null);\n    listenForConsentUpdates();\n    const payload = buildPayload();\n    $.cookie(ATTRIBUTION_COOKIE, payload.attributionId, cookieOptions());\n    $.cookie(PENDING_COOKIE, JSON.stringify(payload), cookieOptions());\n    return $.ajax({\n      type: 'POST',\n      url: `${_environment.config.apiBaseUrl}/marketing/attributions`,\n      data: JSON.stringify(payload),\n      contentType: 'application/json; charset=utf-8',\n      dataType: 'json'\n    }).then(captured => {\n      $.cookie(ATTRIBUTION_COOKIE, captured.attributionId, cookieOptions());\n      $.removeCookie(PENDING_COOKIE, {\n        domain: cookieDomain(),\n        path: '/'\n      });\n      return captured;\n    }, () => null);\n  }\n  var _default = _exports.default = {\n    captureAttribution,\n    getAttributionId\n  };\n});","define(\"@testable/shared-ui/utils/matchers\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function searchRegion(regionInfo, text) {\n    text = text.toLowerCase();\n    if (regionInfo.region) {\n      let index = regionInfo.region.name.toLowerCase().indexOf(text);\n      if (index === -1) {\n        index = regionInfo.region.description.toLowerCase().indexOf(text);\n      }\n      return index;\n    } else if (regionInfo.text) {\n      return regionInfo.text.toLowerCase().indexOf(text);\n    }\n    return -1;\n  }\n  function searchSource(sourceInfo, text) {\n    text = text.toLowerCase();\n    if (sourceInfo.name) {\n      let index = sourceInfo.name.toLowerCase().indexOf(text);\n      if (index === -1) {\n        index = sourceInfo.source.toLowerCase().indexOf(text);\n      }\n      return index;\n    } else if (sourceInfo.text) {\n      return sourceInfo.text.toLowerCase().indexOf(text);\n    }\n    return -1;\n  }\n  var _default = _exports.default = {\n    searchRegion,\n    searchSource\n  };\n});","define(\"@testable/shared-ui/utils/mcp-server-url\", [\"exports\", \"@testable/shared-ui/utils/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.mcpServerUrl = mcpServerUrl;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  function productionMcpServerUrl(hostname, isMonitoring) {\n    const host = (hostname || '').toLowerCase();\n    if (!host.endsWith('.testable.io')) return null;\n    if (isMonitoring) {\n      if (host === 'm.testable.io') return 'https://m.mcp.testable.io';\n      if (host.endsWith('.m.testable.io')) {\n        const subdomain = host.slice(0, -'.m.testable.io'.length);\n        return subdomain ? `https://${subdomain}.m.mcp.testable.io` : null;\n      }\n      return null;\n    }\n    if (host === 'a.testable.io') return 'https://mcp.testable.io';\n    if (host.endsWith('.m.testable.io')) return null;\n    const subdomain = host.slice(0, -'.testable.io'.length);\n    return subdomain ? `https://${subdomain}.mcp.testable.io` : null;\n  }\n  function mcpServerUrl() {\n    if (_environment.config.isDev || typeof window === 'undefined') return _environment.config.mcpServerUrl;\n    return productionMcpServerUrl(window.location.hostname, _environment.config.isMonitoring) || _environment.config.mcpServerUrl;\n  }\n});","define(\"@testable/shared-ui/utils/monitor\", [\"exports\", \"tracked-built-ins\", \"@testable/shared-ui/utils/load-test\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/models/trigger-condition\", \"@testable/shared-ui/utils/environment\"], function (_exports, _trackedBuiltIns, _loadTest, _lib, _triggerCondition, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/load-test\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/models/trigger-condition\",0,\"@testable/shared-ui/utils/environment\"eaimeta@70e063a35619d71f\n  const ScenarioType = 'Monitor';\n  const authTypes = ['None', 'Basic'];\n  const monitorSortings = [{\n    value: 'DownFirst',\n    label: 'Down First'\n  }, {\n    value: 'UpFirst',\n    label: 'Up First'\n  }, {\n    value: 'Alphabetical',\n    label: 'Alphabetical'\n  }, {\n    value: 'NewestFirst',\n    label: 'Newest First'\n  }, {\n    value: 'OldestFirst',\n    label: 'Oldest First'\n  }];\n  const monitorFilters = ['All', 'Active', 'Up', 'Down', 'Paused'];\n  const acceptedStatusesOptions = [{\n    groupName: '1XX',\n    options: [{\n      value: '1XX',\n      label: '1XX - Informational responses',\n      isBold: true\n    }, {\n      value: '100',\n      label: '100 - Continue'\n    }, {\n      value: '101',\n      label: '101 - Switching Protocols'\n    }, {\n      value: '102',\n      label: '102 - Processing'\n    }, {\n      value: '103',\n      label: '103 - Early Hints'\n    }]\n  }, {\n    groupName: '2XX',\n    options: [{\n      value: '2XX',\n      label: '2XX - Success',\n      isBold: true\n    }, {\n      value: '200',\n      label: '200 - OK'\n    }, {\n      value: '201',\n      label: '201 - Created'\n    }, {\n      value: '202',\n      label: '202 - Accepted'\n    }, {\n      value: '203',\n      label: '203 - Non-Authoritative Information'\n    }, {\n      value: '204',\n      label: '204 - No Content'\n    }, {\n      value: '205',\n      label: '205 - Reset Content'\n    }, {\n      value: '206',\n      label: '206 - Partial Content'\n    }, {\n      value: '207',\n      label: '207 - Multi-Status'\n    }, {\n      value: '208',\n      label: '208 - Already Reported'\n    }, {\n      value: '226',\n      label: '226 - IM Used'\n    }]\n  }, {\n    groupName: '3XX',\n    options: [{\n      value: '3XX',\n      label: '3XX - Redirection',\n      isBold: true\n    }, {\n      value: '300',\n      label: '300 - Multiple Choices'\n    }, {\n      value: '301',\n      label: '301 - Moved Permanently'\n    }, {\n      value: '302',\n      label: '302 - Found'\n    }, {\n      value: '303',\n      label: '303 - See Other'\n    }, {\n      value: '304',\n      label: '304 - Not Modified'\n    }, {\n      value: '305',\n      label: '305 - Use Proxy'\n    }, {\n      value: '307',\n      label: '307 - Temporary Redirect'\n    }, {\n      value: '308',\n      label: '308 - Permanent Redirect'\n    }]\n  }, {\n    groupName: '4XX',\n    options: [{\n      value: '4XX',\n      label: '4XX - Client Errors',\n      isBold: true\n    }, {\n      value: '400',\n      label: '400 - Bad Request'\n    }, {\n      value: '401',\n      label: '401 - Unauthorized'\n    }, {\n      value: '402',\n      label: '402 - Payment Required'\n    }, {\n      value: '403',\n      label: '403 - Forbidden'\n    }, {\n      value: '404',\n      label: '404 - Not Found'\n    }, {\n      value: '405',\n      label: '405 - Method Not Allowed'\n    }, {\n      value: '406',\n      label: '406 - Not Acceptable'\n    }, {\n      value: '407',\n      label: '407 - Proxy Authentication Required'\n    }, {\n      value: '408',\n      label: '408 - Request Timeout'\n    }, {\n      value: '409',\n      label: '409 - Conflict'\n    }, {\n      value: '410',\n      label: '410 - Gone'\n    }, {\n      value: '411',\n      label: '411 - Length Required'\n    }, {\n      value: '412',\n      label: '412 - Precondition Failed'\n    }, {\n      value: '413',\n      label: '413 - Payload Too Large'\n    }, {\n      value: '414',\n      label: '414 - URI Too Long'\n    }, {\n      value: '415',\n      label: '415 - Unsupported Media Type'\n    }, {\n      value: '416',\n      label: '416 - Range Not Satisfiable'\n    }, {\n      value: '417',\n      label: '417 - Expectation Failed'\n    }, {\n      value: '418',\n      label: `418 - I'm a teapot`\n    }, {\n      value: '421',\n      label: '421 - Misdirected Request'\n    }, {\n      value: '422',\n      label: '422 - Unprocessable Entity'\n    }, {\n      value: '423',\n      label: '423 - Locked'\n    }, {\n      value: '424',\n      label: '424 - Failed Dependency'\n    }, {\n      value: '425',\n      label: '425 - Too Early'\n    }, {\n      value: '426',\n      label: '426 - Upgrade Required'\n    }, {\n      value: '428',\n      label: '428 - Precondition Required'\n    }, {\n      value: '429',\n      label: '429 - Too Many Requests'\n    }, {\n      value: '431',\n      label: '431 - Request Header Fields Too Large'\n    }, {\n      value: '451',\n      label: '451 - Unavailable For Legal Reason'\n    }]\n  }, {\n    groupName: '5XX',\n    options: [{\n      value: '5XX',\n      label: '5XX - Server Errors',\n      isBold: true\n    }, {\n      value: '500',\n      label: '500 - Internal Server Error'\n    }, {\n      value: '501',\n      label: '501 - Not Implemented'\n    }, {\n      value: '502',\n      label: '502 - Bad Gateway'\n    }, {\n      value: '503',\n      label: '503 - Service Unavailable'\n    }, {\n      value: '504',\n      label: '504 - Gateway Timeout'\n    }, {\n      value: '505',\n      label: '505 - HTTP Version Not Supported'\n    }, {\n      value: '506',\n      label: '506 - Variant Also Negotiates'\n    }, {\n      value: '507',\n      label: '507 - Insufficient Storage'\n    }, {\n      value: '508',\n      label: '508 - Loop Detected'\n    }, {\n      value: '511',\n      label: '511 - Network Authentication Required'\n    }]\n  }];\n  const monitorTypes = [{\n    label: 'Ping',\n    value: 'Ping',\n    description: 'Ensure a host responds to an ICMP ping'\n  }, {\n    label: 'Port Monitor',\n    value: 'PortMonitor',\n    description: 'Ensure a service available via a TCP port is available'\n  }, {\n    label: 'HTTP',\n    value: 'HTTP',\n    description: 'Monitor a website or API via HTTP(s)'\n  }];\n  const allMonitorTypes = [...monitorTypes, {\n    label: 'Heartbeat',\n    value: 'Heartbeat',\n    description: 'Ensure your service is running by sending periodic heartbeats'\n  }, {\n    label: 'Custom',\n    value: 'Custom',\n    description: 'Monitor custom user flows using a variety of popular automation frameworks'\n  }];\n  const httpMethods = ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'];\n  const defaultMetrics = ['Testable-firstReceivedMs-p50', 'Testable-outcome-success-percent', 'Testable-assertions-passed-percent'];\n  const timeRangeOptions = [{\n    value: '1d',\n    label: 'Last 24 hours',\n    key: '1'\n  }, {\n    value: '7d',\n    label: 'Last 7 days',\n    key: '7'\n  }, {\n    value: '30d',\n    label: 'Last 30 days',\n    key: '30'\n  }, {\n    value: '90d',\n    label: 'Last 90 days',\n    key: '90'\n  }, {\n    value: '365d',\n    label: 'Last 365 days',\n    key: '365'\n  }, {\n    value: 'custom',\n    label: 'Custom Time Range'\n  }];\n  const defaultTimeRange = timeRangeOptions[0];\n  const dateRecentOption = {\n    value: 'recent',\n    label: 'Recent'\n  };\n  const hourOption = {\n    value: '1h',\n    label: 'Last hour'\n  };\n  const noneOption = {\n    value: '',\n    label: 'None'\n  };\n\n  /**\n   * Get time range options based on context\n   * @param {Object} options - Configuration options\n   * @param {boolean} options.includeNone - Include \"None\" option at start\n   * @param {boolean} options.includeHour - Include \"Last hour\" option\n   * @param {boolean} options.includeRecent - Include \"Recent\" option\n   * @param {boolean} options.includeCustom - Include \"Custom Time Range\" option\n   * @returns {Array} Array of time range options\n   */\n  function getTimeRangeOptions({\n    includeNone = false,\n    includeHour = false,\n    includeRecent = false,\n    includeCustom = true\n  } = {}) {\n    const options = [];\n    if (includeNone) options.push(noneOption);\n    if (includeHour) options.push(hourOption);\n    if (includeRecent) options.push(dateRecentOption);\n    const baseOptions = includeCustom ? timeRangeOptions : timeRangeOptions.filter(o => o.value !== 'custom');\n    return [...options, ...baseOptions];\n  }\n\n  /**\n   * Check if current time range includes \"now\" (eligible for real-time updates)\n   * - Non-custom ranges (1d, 7d, 30d, 90d, recent) always include \"now\"\n   * - Custom range: only if endDate >= now\n   */\n  function timeRangeIncludesNow(timeRange) {\n    if (!timeRange || timeRange.value !== 'custom') return true;\n    if (!timeRange.endDate) return true;\n    return new Date(Number(timeRange.endDate) || timeRange.endDate) >= new Date();\n  }\n  function getUptimePercentage(stats) {\n    const {\n      uptimeMs = 0,\n      downtimeMs = 0\n    } = stats;\n    const totalMs = uptimeMs + downtimeMs;\n    if (totalMs === 0) return '100% uptime';\n    const uptimePercent = Math.max(0, uptimeMs / totalMs * 100);\n    const roundedPercent = Math.round(uptimePercent * 10000) / 10000;\n    const formattedPercent = roundedPercent % 1 === 0 ? roundedPercent.toFixed(0) : roundedPercent.toFixed(4);\n    return `${formattedPercent}% uptime`;\n  }\n  function getIncidentCount(stats) {\n    const {\n      incidentCount = 0\n    } = stats;\n    return `${incidentCount} ${_lib.default.pluralCheck('incident', incidentCount)}`;\n  }\n  function affectedMonitors(stats) {\n    const affectedMonitors = stats.affectedMonitors || 0;\n    return `affecting ${affectedMonitors} ${_lib.default.pluralCheck('monitor', affectedMonitors)}`;\n  }\n  function getDuration(startDate, endDate) {\n    if (!startDate) return 'N/A';\n    const start = moment(startDate);\n    const end = endDate ? moment(endDate) : moment();\n    return moment.duration(end.diff(start)).humanize();\n  }\n  function getMonitorStatusClass(active, up) {\n    return active ? up ? 'text-success' : 'text-danger' : 'text-grey';\n  }\n  function isValidEmail(email) {\n    const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n    return emailRegex.test(email);\n  }\n  function getMonitorStatus(active, up) {\n    if (!active) return 'PAUSED';\n    return up ? 'UP' : 'DOWN';\n  }\n  function getDateParams(selectedTimeRange) {\n    const {\n      value,\n      startDate: start,\n      endDate: end\n    } = selectedTimeRange;\n    return start ? {\n      start,\n      end\n    } : {\n      duration: value\n    };\n  }\n  function getFolderName(path) {\n    return path && path.length > 1 && path.endsWith('/') ? path.slice(0, -1) : path;\n  }\n  function getFolderPath(data, display = false) {\n    const path = `${data.folder === '/' ? '/' : data.folder + '/'}${data.group}`;\n    return display ? path.split('/').join(' / ') : path;\n  }\n  function getFolderId(folderPath = '-', groupName) {\n    return folderPath.split(/[\\/ ]/).join('-') + (groupName ? '-' + groupName.split(/[\\/ ]/).join('-') : '');\n  }\n  function getMonitorsGroupedByRegion(monitors, existingGroups) {\n    const regionGroups = existingGroups || {};\n    const isNew = !existingGroups;\n    let hasChanges = false;\n    (monitors || []).forEach(m => {\n      const regions = m.regions || [];\n      if (regions.length === 0) {\n        const key = 'No Region';\n        if (!regionGroups[key]) {\n          regionGroups[key] = {\n            name: key,\n            monitors: new _trackedBuiltIns.TrackedArray([])\n          };\n          hasChanges = true;\n        }\n        if (!regionGroups[key].monitors.find(existing => existing.id === m.id)) {\n          regionGroups[key].monitors.push(m);\n          hasChanges = true;\n        }\n      } else {\n        regions.forEach(region => {\n          const key = region.description || region.name || 'Unknown';\n          if (!regionGroups[key]) {\n            regionGroups[key] = {\n              name: key,\n              monitors: new _trackedBuiltIns.TrackedArray([]),\n              latitude: region.latitude,\n              longitude: region.longitude\n            };\n            hasChanges = true;\n          }\n          if (!regionGroups[key].monitors.find(existing => existing.id === m.id)) {\n            regionGroups[key].monitors.push(m);\n            hasChanges = true;\n          }\n        });\n      }\n    });\n    return isNew || hasChanges ? {\n      ...regionGroups\n    } : regionGroups;\n  }\n  function getMetricParts(metric) {\n    const dashIndex = metric.indexOf('-');\n    return {\n      namespace: metric.substring(0, dashIndex),\n      metricText: metric.substring(dashIndex + 1)\n    };\n  }\n  function getMetricsOrder(metrics) {\n    const $container = $('.metrics-sortable');\n    let orderedMetrics = metrics;\n    if ($container.length && $container.data('ui-sortable')) {\n      const indices = $container.sortable('toArray', {\n        attribute: 'data-metric-index'\n      });\n      orderedMetrics = indices.map(idx => metrics[parseInt(idx, 10)]);\n    }\n    return orderedMetrics.map(metric => _lib.default.toMetricKey(metric.namespace, metric.metricText));\n  }\n  function getMetricsDetail(metrics, metricDefs, hasMetricValue = false) {\n    let checkMetrics = [];\n    metrics.forEach(metric => {\n      const parts = getMetricParts(metric.metric);\n      const metricDetails = _loadTest.default.parseMetric(parts.metricText);\n      let metricDef = {};\n      metricDef.isPercentage = metricDetails.isPercentage;\n      metricDef.metricKey = metricDetails.key;\n      metricDef.metric = metricDetails.name;\n      metricDef.namespace = parts.namespace;\n      const label = _loadTest.default.printConditionMetricMonitor(metricDef, metricDefs, ScenarioType);\n      const unit = _loadTest.default.getUnits(parts.namespace, parts.metricText, [], ScenarioType);\n      if (hasMetricValue) {\n        const metricValue = _lib.default.print(metric.metricValue, unit);\n        checkMetrics.push({\n          label,\n          value: metricValue\n        });\n      } else {\n        checkMetrics.push({\n          label,\n          value: metric.metric,\n          unit\n        });\n      }\n    });\n    return checkMetrics;\n  }\n  function getSuccessCriteriaMetrics(successCriteria = []) {\n    let conditions = [];\n    successCriteria.forEach(criteria => {\n      const parts = getMetricParts(criteria.metric);\n      const metricDetails = _loadTest.default.parseMetric(parts.metricText);\n      let condition = {};\n      condition.isPercentage = !!criteria.threshold;\n      condition.metricKey = metricDetails.key;\n      condition.metric = metricDetails.name;\n      condition.namespace = parts.namespace;\n      condition = {\n        ...criteria,\n        ...condition\n      };\n      condition.threshold = criteria.threshold;\n      condition.lastValue = criteria.observedValue;\n      condition.scriptType = 'Monitor';\n      condition.valueType = 'Absolute';\n      condition.timePeriod = 'EntireTest';\n      condition.conditionMet = criteria.success;\n      conditions.push(_triggerCondition.default.create(condition));\n    });\n    return conditions;\n  }\n  function getHeartbeatCaptureMetricsOptions(metrics) {\n    return metrics.map(metric => ({\n      label: metric.split('[')[0],\n      unit: metric.split('[')[1]?.replace(']', '') || '',\n      value: metric\n    }));\n  }\n  function maintenanceWindowDescription(window) {\n    if (window.windowType === 'Single') {\n      return `From ${_lib.default.displayDate(window.start, 'MMM D, YYYY h:mm A')} to ${_lib.default.displayDate(window.end, 'MMM D, YYYY h:mm A')}`;\n    }\n    const formatTime = (hour, minute) => `${String(hour || 0).padStart(2, '0')}:${String(minute || 0).padStart(2, '0')}`;\n    const dayNames = ['', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n    switch (window.recurringInterval) {\n      case 'Month':\n        return `Monthly from day ${String(window.startDay).padStart(2, '0')} at ${formatTime(window.startHour, window.startMinute)} UTC to day ${String(window.endDay).padStart(2, '0')} at ${formatTime(window.endHour, window.endMinute)} UTC`;\n      case 'Hour':\n        return `Hourly from ${window.startMinute} minutes past the hour to ${window.endMinute} minutes past the hour`;\n      case 'Week':\n        return `Weekly from ${dayNames[window.startDayOfWeek]} at ${formatTime(window.startHour, window.startMinute)} UTC to ${dayNames[window.endDayOfWeek]} at ${formatTime(window.endHour, window.endMinute)} UTC`;\n      case 'Day':\n        return `Daily from ${formatTime(window.startHour, window.startMinute)} UTC to ${formatTime(window.endHour, window.endMinute)} UTC`;\n      case 'WeekDay':\n        return `Each week day from ${formatTime(window.startHour, window.startMinute)} UTC to ${formatTime(window.endHour, window.endMinute)} UTC`;\n      case 'Holiday':\n        return `All public holidays in ${window.country?.description || 'N/A'}`;\n      default:\n        return 'N/A';\n    }\n  }\n  function getSelectedAcceptedStatuses(acceptedStatuses) {\n    const allOptions = acceptedStatusesOptions.flatMap(group => group.options);\n    const savedValues = (_.isString(acceptedStatuses) ? acceptedStatuses : '1XX,2XX,3XX').split(',').map(v => v.trim());\n    return allOptions.filter(opt => savedValues.includes(opt.value));\n  }\n  function setNotificationTargets(targets = []) {\n    const org = _environment.config.currentUser.org;\n    return targets.map(notification => ({\n      medium: notification.notificationMedium,\n      details: {\n        target: notification.notificationTarget === 'OrgEmail' ? org.email : notification.customNotificationList || notification.defaultNotificationList,\n        repeat: notification.repeat || 0,\n        delay: notification.delay || 0\n      }\n    }));\n  }\n  function getNotificationTargets(targets, pass) {\n    return new _trackedBuiltIns.TrackedArray(targets.map(notification => ({\n      ...(pass && notification),\n      notificationMedium: notification.medium,\n      defaultNotificationList: notification.details.target,\n      customNotificationList: notification.details.target,\n      delay: notification.details.delay || 0,\n      repeat: notification.details.repeat || 0\n    })));\n  }\n  function getNotificationAtrrs(notifications) {\n    return {\n      ...notifications,\n      sslExpiryWarningDays: notifications.sslExpiryWarningDays ? _.isString(notifications.sslExpiryWarningDays) ? notifications.sslExpiryWarningDays.split(',').map(Number) : notifications.sslExpiryWarningDays : [],\n      domainExpiryWarningDays: notifications.domainExpiryWarningDays ? _.isString(notifications.domainExpiryWarningDays) ? notifications.domainExpiryWarningDays.split(',').map(Number) : notifications.domainExpiryWarningDays : [],\n      targets: setNotificationTargets(notifications.targets)\n    };\n  }\n  function activeSourcesDetails(monitor) {\n    const lastHeartbeats = monitor.lastHeartbeats || [];\n    const cutoffTime = moment().subtract(monitor.monitorParams.waitSecs + monitor.monitorParams.intervalSecs, 'seconds');\n    const activeCount = lastHeartbeats.filter(heartbeat => moment(heartbeat.timestamp).isAfter(cutoffTime)).length || 0;\n    const text = `${activeCount} ${_lib.default.pluralCheck('active source', activeCount)}`;\n    let popover = '<div class=\"container-fluid active-sources\">';\n    popover += '<div class=\"row text-primary\">';\n    popover += '  <div class=\"col-3\" style=\"white-space: nowrap;\"><strong>Source</strong></div>';\n    popover += '  <div class=\"col-7\" style=\"white-space: nowrap;\"><strong>Last Ping</strong></div>';\n    popover += '  <div class=\"col-2\" style=\"white-space: nowrap;\"><strong>Is Up</strong></div>';\n    popover += '</div>';\n    popover += '<hr style=\"margin:0;\">';\n    if (lastHeartbeats.length) {\n      lastHeartbeats.forEach(heartbeat => {\n        const source = heartbeat.source || 'N/A';\n        const lastPing = _lib.default.displayDateTime(heartbeat.timestamp);\n        const isUp = moment(heartbeat.timestamp).isAfter(cutoffTime);\n        const status = isUp ? '<i class=\"fa fa-check text-success\"></i>' : '<i class=\"fa fa-times text-danger\"></i>';\n        popover += '<div class=\"row\">';\n        popover += `  <div class=\"col-3 text-left\" style=\"white-space: nowrap;\">${source}</div>`;\n        popover += `  <div class=\"col-7\" style=\"white-space: nowrap;\">${lastPing}</div>`;\n        popover += `  <div class=\"col-2 text-center\" style=\"white-space: nowrap;\">${status}</div>`;\n        popover += '</div>';\n      });\n    } else {\n      popover += 'No data available';\n    }\n    popover += '</div>';\n    return {\n      text,\n      popover\n    };\n  }\n  function transitionToNewTab(router, event, page, pageId, queryParams) {\n    if (event.button === 1) {\n      event.preventDefault();\n      let url = pageId ? router.urlFor(page, pageId) : router.urlFor(page);\n      if (queryParams) {\n        const params = new URLSearchParams(queryParams).toString();\n        url += `?${params}`;\n      }\n      window.open(url, '_blank');\n    }\n  }\n  function formatPingData(data) {\n    if (!data) return '';\n    try {\n      let parsed = JSON.parse(data);\n      if (typeof parsed === 'string') {\n        parsed = JSON.parse(parsed);\n      }\n      return JSON.stringify(parsed, null, 2);\n    } catch {\n      return data;\n    }\n  }\n  function getMonitorTypeDisplay(monitor, fullName = false) {\n    if (monitor.monitorType === 'Custom') {\n      if (fullName) {\n        return monitor.customScenarioName || 'Custom';\n      }\n      return monitor.customScenarioType || 'Custom';\n    }\n    if (monitor.monitorType === 'PortMonitor') {\n      return fullName ? 'Port Monitor' : 'Port';\n    }\n    return monitor.monitorType;\n  }\n  function getStatusPageUrl(page) {\n    if (page.domain) {\n      const port = _environment.config.isDev ? ':8003' : '';\n      return `https://${page.domain}${port}`;\n    }\n    return `${_environment.config.statusPageAppUrl}/${page.uuid}`;\n  }\n  function mapAssociationsToIds(monitors = [], groups = [], folders = [], tags = []) {\n    return {\n      monitorInfos: monitors.map(m => m.id),\n      groups: groups.map(g => g.id),\n      folders: folders.map(f => f.folder || f),\n      tags: tags.map(t => t.name)\n    };\n  }\n  function monitorsTooltipContent(collection, monitorsKey = 'monitors') {\n    const monitors = collection[monitorsKey] || [];\n    if (!monitors.length) return 'No monitors';\n    const sortedMonitors = [...monitors].sort((a, b) => a.name.localeCompare(b.name));\n    let html = '<div class=\"container-fluid active-sources\">';\n    html += '<div class=\"row text-primary\">';\n    html += '  <div class=\"col-3\"><strong>Status</strong></div>';\n    html += '  <div class=\"col-9\"><strong>Monitor</strong></div>';\n    html += '</div>';\n    html += '<hr style=\"margin:0;\">';\n    sortedMonitors.forEach(m => {\n      const isUp = m.active && m.up;\n      const isPaused = !m.active;\n      const statusIcon = isPaused ? '<i class=\"fa fa-pause text-secondary\"></i>' : isUp ? '<i class=\"fa fa-check text-success\"></i>' : '<i class=\"fa fa-times text-danger\"></i>';\n      const folder = m.folder === '/' ? '' : m.folder;\n      const path = folder ? `${folder}/${m.group}/` : m.group ? `/${m.group}/` : '';\n      html += '<div class=\"row\">';\n      html += `  <div class=\"col-3 text-center\">${statusIcon}</div>`;\n      html += `  <div class=\"col-9 text-start\">${path}${m.name}</div>`;\n      html += '</div>';\n    });\n    html += '</div>';\n    return html;\n  }\n  function getValue(event) {\n    if (event?.target) {\n      return event.target.value;\n    }\n    return typeof event === 'object' && event?.value !== undefined ? event.value : event;\n  }\n  var _default = _exports.default = {\n    getValue,\n    getIncidentCount,\n    getUptimePercentage,\n    affectedMonitors,\n    getDateParams,\n    getDuration,\n    getFolderName,\n    monitorTypes,\n    httpMethods,\n    allMonitorTypes,\n    defaultTimeRange,\n    timeRangeOptions,\n    dateRecentOption,\n    hourOption,\n    getTimeRangeOptions,\n    timeRangeIncludesNow,\n    defaultMetrics,\n    acceptedStatusesOptions,\n    getSelectedAcceptedStatuses,\n    maintenanceWindowDescription,\n    authTypes,\n    getMetricParts,\n    getMetricsOrder,\n    getMetricsDetail,\n    getSuccessCriteriaMetrics,\n    getHeartbeatCaptureMetricsOptions,\n    setNotificationTargets,\n    getNotificationTargets,\n    getNotificationAtrrs,\n    getFolderId,\n    getFolderPath,\n    monitorSortings,\n    monitorFilters,\n    activeSourcesDetails,\n    transitionToNewTab,\n    formatPingData,\n    getMonitorStatusClass,\n    getMonitorStatus,\n    getMonitorTypeDisplay,\n    getMonitorsGroupedByRegion,\n    getStatusPageUrl,\n    mapAssociationsToIds,\n    monitorsTooltipContent,\n    isValidEmail\n  };\n});","define(\"@testable/shared-ui/utils/providers\", [\"exports\", \"@testable/shared-ui/utils/environment\", \"@ember/runloop\"], function (_exports, _environment, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/environment\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  /**\n   * Return AWS Regions\n   * @param {boolean} useAll To use All Providers or not\n   * @returns {Array<Object>}\n   */\n  function getAwsRegions(useAll = false) {\n    return getPublicRegions('Aws', 'aws-', 'AWS ', useAll);\n  }\n\n  /**\n   * Return Azure Regions\n   * @param {boolean} useAll To use All Providers or not\n   * @returns {Array<Object>}\n   */\n  function getAzureRegions(useAll = false) {\n    return getPublicRegions('Azure', 'azure-', 'Azure ', useAll);\n  }\n\n  /**\n   * Return GCP Regions\n   * @param {boolean} useAll To use All Providers or not\n   * @returns {Array<Object>}\n   */\n  function getGcpRegions(useAll = false) {\n    return getPublicRegions('Gcp', 'gcp-', 'Gcp ', useAll);\n  }\n\n  /**\n   * Return Regions Array from providers list available\n   * @param {String} type AWS, GCP or Azure\n   * @param {String} clrName Remove test from the beginning of the Name\n   * @param {String} clrDesc Remove text from the beginning of the Description\n   * @param {Boolean} useAll To use All Providers or not\n   * @returns {Array<Object>}\n   */\n  function getPublicRegions(type, clrName, clrDesc, useAll = false) {\n    const regions = [];\n    const providers = useAll ? _environment.config.providersAll : _environment.config.providers;\n    const publicProviders = _.find(providers, provider => provider.public && provider.providerType === 'OnDemand' && provider.source === type);\n    if (publicProviders) {\n      _.forEach(publicProviders.locations, function (location) {\n        regions.push({\n          name: clrName && location.name.indexOf(clrName) === 0 ? location.name.slice(clrName.length) : location.name,\n          description: clrDesc && location.description.indexOf(clrDesc) === 0 ? location.description.slice(clrDesc.length) : location.description\n        });\n      });\n    }\n    return _.sortBy(regions, 'description');\n  }\n\n  /**\n   * Return the regions visible to the current user, filtered by hosting mode and org.\n   * Waits for the regions to load if they are not available yet.\n   * @param {Boolean} selfHostedOnly Exclude public regions\n   * @returns {Promise<Array<Object>>}\n   */\n  function getRegions(selfHostedOnly = false) {\n    return new Promise(resolve => {\n      if (!_environment.config.regions.length) {\n        (0, _runloop.later)(() => resolve(getRegions(selfHostedOnly)), 250);\n      } else {\n        const regions = selfHostedOnly ? _environment.config.regions.filter(r => !r.public) : _environment.config.regions;\n        resolve(regions.filter(r => !r.org || r.org && r.org.id === _environment.config.currentUser.orgId));\n      }\n    });\n  }\n  var _default = _exports.default = {\n    getPublicRegions,\n    getAwsRegions,\n    getAzureRegions,\n    getGcpRegions,\n    getRegions\n  };\n});","define(\"@testable/shared-ui/utils/realtime-state\", [\"exports\", \"json-joy/lib/json-patch\"], function (_exports, _jsonPatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.applyPatchWithErrorHandling = applyPatchWithErrorHandling;\n  _exports.captureTransientFields = captureTransientFields;\n  0; //eaimeta@70e063a35619d71f0,\"json-joy/lib/json-patch\"eaimeta@70e063a35619d71f\n  /**\n   * Applies a list of JSON Patch events to the current event state, logging\n   * errors for individual patches that fail without aborting the rest.\n   *\n   * @param {Object} data - The current event state to patch\n   * @param {Array} events - Array of JSON Patch operations\n   * @returns {Object} The patched event state (spread into a new object)\n   */\n  function applyPatchWithErrorHandling(data, events) {\n    let oldEvent = data;\n    let newEvent = data;\n    for (const event of events) {\n      try {\n        newEvent = (0, _jsonPatch.applyPatch)(oldEvent, [event], false).doc;\n        oldEvent = newEvent;\n      } catch (error) {\n        const patch = JSON.stringify({\n          op: event.op,\n          path: event.path\n        });\n        const stackMessage = JSON.stringify(error.stack);\n        const stack = `Error:\\n${stackMessage}\\n\\nPatch:\\n${patch}`;\n        const message = 'Uncaught Error: ' + error.message;\n        console.log('patch error:', message, stack);\n      }\n    }\n    return {\n      ...newEvent\n    };\n  }\n\n  /**\n   * Captures non-empty transient fields from a socket event into an accumulator.\n   * Called after each patch/result so data survives the server's clearing patch\n   * that arrives before the debounced flush runs.\n   *\n   * @param {Object} event - The current socket event state\n   * @param {Object|null} pending - The existing accumulator (null on first call)\n   * @param {Object} fieldConfig - { objects: string[], arrays: string[] }\n   * @returns {Object} The updated accumulator\n   */\n  function captureTransientFields(event, pending, {\n    objects = [],\n    arrays = []\n  }) {\n    if (!event) return pending;\n    if (!pending) {\n      pending = {\n        clientOriginatedUuid: null\n      };\n      objects.forEach(key => {\n        pending[key] = {};\n      });\n      arrays.forEach(key => {\n        pending[key] = [];\n      });\n    }\n    objects.forEach(key => {\n      if (!_.isEmpty(event[key])) {\n        Object.assign(pending[key], event[key]);\n      }\n    });\n    arrays.forEach(key => {\n      if (event[key]?.length) {\n        pending[key] = [...new Set([...pending[key], ...event[key]])];\n      }\n    });\n    if (event.clientOriginatedUuid) pending.clientOriginatedUuid = event.clientOriginatedUuid;\n    return pending;\n  }\n});","define(\"@testable/shared-ui/utils/recording\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/server\"], function (_exports, _lib, _server) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/server\"eaimeta@70e063a35619d71f\n  function invalidateGrid(component) {\n    component.EventBus.publish('connectionsGrid.invalidate');\n    component.EventBus.publish('packetsGrid.invalidate');\n  }\n  function stopRecording(component) {\n    if (validateHasSteps(component)) {\n      _lib.default.confirm('Are you sure you want to stop the scenario?', 'OK', function () {\n        _server.default.stopRecording(component.recording.id).then(function (data) {\n          component.recording.finishedAt = data.finishedAt;\n          component.recording.updatedAt = data.updatedAt;\n          component.args?.recordingUpdated?.(component.recording);\n          _lib.default.info('Recording stopped successfully.');\n        });\n      }, 'Cancel');\n    }\n  }\n  function validateHasSteps(component) {\n    let steps = component.recording.connections;\n    if (_.isUndefined(steps) || steps === 0) {\n      _lib.default.error('Your recording has zero steps. Please see the information at the top of this page on how to generate scenario steps.', 'No Steps Recorded', true);\n      return false;\n    } else {\n      return true;\n    }\n  }\n  var _default = _exports.default = {\n    invalidateGrid: invalidateGrid,\n    stopRecording: stopRecording,\n    validateHasSteps: validateHasSteps\n  };\n});","define(\"@testable/shared-ui/utils/scenario\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  const scenarioTypes = {\n    script: 'Code',\n    jmeter: 'JMeter',\n    phantomjs: 'PhantomJs',\n    selenium: 'Selenium',\n    puppeteer: 'Puppeteer',\n    playwright: 'Playwright',\n    gatling: 'Gatling',\n    locust: 'Locust',\n    monitor: 'Monitor',\n    har: 'Har',\n    postman: 'Postman',\n    java: 'Java',\n    ai: 'AI'\n  };\n  function getScenarioTypes() {\n    return Object.values(scenarioTypes);\n  }\n  const customScenarioTypes = [{\n    label: 'Playwright',\n    value: 'Playwright'\n  }, {\n    label: 'Puppeteer',\n    value: 'Puppeteer'\n  }, {\n    label: 'Selenium',\n    value: 'Selenium'\n  }, {\n    label: 'Node.js Script',\n    value: 'Code'\n  }, {\n    label: 'JMeter',\n    value: 'JMeter'\n  }, {\n    label: 'Gatling',\n    value: 'Gatling'\n  }, {\n    label: 'Monitor',\n    value: 'Monitor'\n  }, {\n    label: 'AI',\n    value: 'AI'\n  }, {\n    label: 'Locust',\n    value: 'Locust'\n  }, {\n    label: 'PhantomJS',\n    value: 'PhantomJs'\n  }, {\n    label: 'HAR Replay',\n    value: 'Har'\n  }, {\n    label: 'Postman',\n    value: 'Postman'\n  }, {\n    label: 'Java',\n    value: 'Java'\n  }];\n  function getInstructionsFilePath(script) {\n    const configured = script?.metadata?.instructionsFilePath;\n    const trimmed = configured != null && String(configured).trim();\n    return trimmed || 'instructions.txt';\n  }\n  const SKIP_KEYS = new Set(['id', 'createdAt', 'testCase', 'testCaseId', 'firstVersion', 'configurations', 'configurationCount', 'success', 'todaySuccessHistory', 'yesterdaySuccessHistory', 'lastRunAt', 'lastRunExecutionId']);\n  const B64_KEYS = new Set(['main', 'init', 'teardown']);\n  function findAndApplyScriptUpdate(scenario, updates, setter) {\n    if (!scenario || !updates || _.isEmpty(updates)) return;\n    const updated = updates.find(u => u.id === scenario.id);\n    if (!updated) return;\n    applyScriptUpdate(scenario, updated, setter);\n  }\n\n  // `setter` receives a bare property name (e.g. 'metadata'), not a path.\n  function applyScriptUpdate(scenario, updated, setter) {\n    if (!scenario || !updated) return;\n    Object.keys(updated).forEach(key => {\n      if (SKIP_KEYS.has(key)) return;\n      if (key === 'dataStores' && updated.dataStores) {\n        const sorted = _.sortBy(updated.dataStores, ['name']);\n        _.forEach(sorted, ds => _lib.default.addAuthToDataStore(ds));\n        setter('dataStores', sorted);\n        return;\n      }\n      if (B64_KEYS.has(key) && _.has(updated, key)) {\n        const decoded = _lib.default.b64DecodeUnicode(updated[key]);\n        if (decoded !== scenario[key]) {\n          setter(key, decoded);\n        }\n        return;\n      }\n      if (!_.isEqual(updated[key], scenario[key])) {\n        setter(key, updated[key]);\n      }\n    });\n  }\n  var _default = _exports.default = {\n    getInstructionsFilePath,\n    applyScriptUpdate,\n    findAndApplyScriptUpdate,\n    scenarioTypes,\n    customScenarioTypes,\n    getScenarioTypes\n  };\n});","define(\"@testable/shared-ui/utils/serialization\", [\"exports\", \"@testable/shared-ui/utils/lib\"], function (_exports, _lib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\"eaimeta@70e063a35619d71f\n  let browserManager;\n  function toResults(browserManagerService, phase, fbResults) {\n    browserManager = browserManagerService;\n    return {\n      phase: phase,\n      testCase: toLong(fbResults.testCase()),\n      execution: toLong(fbResults.execution()),\n      executionRegion: toLong(fbResults.executionRegion()),\n      chunk: toLong(fbResults.chunk()),\n      executionType: toChunkExecutionType(fbResults.executionType()),\n      agentId: fbResults.agentId(),\n      regionName: fbResults.regionName(),\n      results: toResultArray(phase, fbResults),\n      files: toFileArray(fbResults),\n      suiteResults: toSuiteResultsArray(fbResults),\n      suiteActions: toSuiteActionsArray(fbResults),\n      commandActions: toCommandActionsArray(fbResults),\n      traceContinuation: toTrace(fbResults.traceContinuation()),\n      attributes: toAttributesArray(fbResults)\n    };\n  }\n  function toChunkExecutionType(executionType) {\n    switch (executionType) {\n      case io.testable.agent.ChunkExecutionType.Init:\n        return 'Init';\n      case io.testable.agent.ChunkExecutionType.Main:\n        return 'Main';\n      case io.testable.agent.ChunkExecutionType.Teardown:\n        return 'Teardown';\n    }\n  }\n  function toSuiteActionsArray(holder) {\n    let answer = [];\n    for (let i = 0; i < holder.suiteActionsLength(); i++) {\n      const suiteAction = holder.suiteActions(i);\n      answer.push(toSuiteAction(suiteAction));\n    }\n    return answer;\n  }\n  function toSuiteAction(suiteAction) {\n    const type = toSuiteActionType(suiteAction.type());\n    let action;\n    switch (type) {\n      case 'StartSuite':\n        action = toStartSuiteAction(suiteAction.startSuite());\n        break;\n      case 'FinishSuite':\n        action = toFinishSuiteAction(suiteAction.finishSuite());\n        break;\n      case 'StartSuiteTest':\n        action = toStartSuiteTestAction(suiteAction.startSuiteTest());\n        break;\n      case 'FinishSuiteTest':\n        action = toFinishSuiteTestAction(suiteAction.finishSuiteTest());\n        break;\n    }\n    return {\n      type: type,\n      action: action\n    };\n  }\n  function toAttributeOutcome(outcome) {\n    switch (outcome) {\n      case io.testable.agent.AttributeOutcome.Success:\n        return 'Success';\n      case io.testable.agent.AttributeOutcome.Error:\n        return 'Error';\n      case io.testable.agent.AttributeOutcome.Unknown:\n        return 'Unknown';\n    }\n  }\n  function toAttributesArray(holder) {\n    let answer = [];\n    for (let i = 0; i < holder.attributesLength(); i++) {\n      const attribute = holder.attributes(i);\n      answer.push({\n        attributeType: attribute.attributeType(),\n        outcome: toAttributeOutcome(attribute.outcome()),\n        status: attribute.status(),\n        statusCode: attribute.statusCode(),\n        expiration: attribute.expiration() ? new Date(toLong(attribute.expiration())) : null,\n        data: attribute.data() ? JSON.parse(attribute.data()) : {}\n      });\n    }\n    return answer;\n  }\n  function toCommandActionsArray(holder) {\n    let answer = [];\n    for (let i = 0; i < holder.commandsLength(); i++) {\n      const commands = holder.commands(i);\n      answer.push(toCommandAction(commands));\n    }\n    return answer;\n  }\n  function toCommandAction(commandAction) {\n    const type = toCommandActionType(commandAction.type());\n    let action;\n    switch (type) {\n      case 'StartStream':\n        action = toCommandStartStreamAction(commandAction.startStream());\n        break;\n      case 'FinishStream':\n        action = toCommandFinishStreamAction(commandAction.finishStream());\n        break;\n      case 'StartCommand':\n        action = toCommandStartCommandAction(commandAction.startCommand());\n        break;\n      case 'FinishCommand':\n        action = toCommandFinishCommandAction(commandAction.finishCommand());\n        break;\n    }\n    return {\n      type: type,\n      action: action\n    };\n  }\n  function toBrowser(browser) {\n    if (browser) {\n      return {\n        browserType: browser.browserType(),\n        version: browser.version()\n      };\n    }\n    return null;\n  }\n  function toStartSuiteAction(startSuite) {\n    return {\n      uuid: startSuite.uuid(),\n      suite: {\n        id: -1,\n        name: startSuite.name()\n      },\n      startedAt: toLong(startSuite.started()),\n      globalConcurrentClientIndex: toLong(startSuite.globalConcurrentClientIndex()),\n      regionalConcurrentClientIndex: toLong(startSuite.regionalConcurrentClientIndex()),\n      concurrentClientIndex: toLong(startSuite.concurrentClientIndex()),\n      threadId: startSuite.threadId(),\n      iterationId: startSuite.iterationId(),\n      iteration: startSuite.iteration(),\n      browser: toBrowser(startSuite.browser()),\n      device: browserManager.getDevice(startSuite.device()),\n      testResults: []\n    };\n  }\n  function toFinishSuiteAction(finishSuite) {\n    return {\n      uuid: finishSuite.uuid(),\n      finishedAt: toLong(finishSuite.finished()),\n      duration: toLong(finishSuite.duration()),\n      hasError: finishSuite.hasError()\n    };\n  }\n  function toStartSuiteTestAction(startSuiteTest) {\n    return {\n      suiteUuid: startSuiteTest.suiteUuid(),\n      uuid: startSuiteTest.uuid(),\n      parentUuid: startSuiteTest.parentUuid(),\n      suiteTest: {\n        id: -1,\n        name: startSuiteTest.name()\n      },\n      startedAt: toLong(startSuiteTest.started())\n    };\n  }\n  function toFinishSuiteTestAction(finishSuiteTest) {\n    return {\n      suiteUuid: finishSuiteTest.suiteUuid(),\n      uuid: finishSuiteTest.uuid(),\n      parentUuid: finishSuiteTest.parentUuid(),\n      finishedAt: toLong(finishSuiteTest.finished()),\n      duration: toLong(finishSuiteTest.duration()),\n      state: toTestState(finishSuiteTest.state()),\n      errorType: finishSuiteTest.errorType(),\n      error: finishSuiteTest.error(),\n      errorTrace: finishSuiteTest.errorTrace(),\n      screenshots: toScreenshotArray(finishSuiteTest),\n      annotations: toAnnotationsArray(finishSuiteTest)\n    };\n  }\n  function toSuiteResultsArray(holder) {\n    let answer = [];\n    for (let i = 0; i < holder.testSuiteResultsLength(); i++) {\n      const suiteResult = holder.testSuiteResults(i);\n      answer.push(toSuiteResult(suiteResult));\n    }\n    return answer;\n  }\n  function toSuiteResult(suiteResult) {\n    const suiteTestResults = toSuiteTestResults(suiteResult);\n    const hasError = _.findIndex(suiteTestResults, function (testResult) {\n      return testResult.errorType !== null;\n    }) !== -1;\n    return {\n      startedAt: toLong(suiteResult.started()),\n      finishedAt: toLong(suiteResult.finished()),\n      duration: toLong(suiteResult.duration()),\n      suite: {\n        id: -1,\n        name: suiteResult.name()\n      },\n      threadId: suiteResult.threadId(),\n      iterationId: suiteResult.iterationId(),\n      testResults: suiteTestResults,\n      hasError: hasError,\n      globalConcurrentClientIndex: toLong(suiteResult.globalConcurrentClientIndex()),\n      regionalConcurrentClientIndex: toLong(suiteResult.regionalConcurrentClientIndex()),\n      concurrentClientIndex: toLong(suiteResult.concurrentClientIndex()),\n      browser: toBrowser(suiteResult.browser()),\n      device: browserManager.getDevice(suiteResult.device())\n    };\n  }\n  function toSuiteTestResults(suiteResult) {\n    let answer = [];\n    for (let i = 0; i < suiteResult.testResultsLength(); i++) {\n      const testResult = suiteResult.testResults(i);\n      answer.push({\n        uuid: testResult.uuid(),\n        startedAt: toLong(testResult.started()),\n        finishedAt: toLong(testResult.finished()),\n        duration: toLong(testResult.duration()),\n        suiteTest: {\n          id: -1,\n          name: testResult.name()\n        },\n        state: toTestState(testResult.state()),\n        errorType: testResult.errorType(),\n        error: testResult.error(),\n        errorTrace: testResult.errorTrace(),\n        screenshots: toScreenshotArray(testResult)\n      });\n    }\n    return answer;\n  }\n  function toScreenshotArray(screenshotsHolder) {\n    const screenshots = [];\n    for (let i = 0; i < screenshotsHolder.screenshotsLength(); i++) {\n      const screenshot = screenshotsHolder.screenshots(i);\n      screenshots.push(toFile(screenshot));\n    }\n    return screenshots;\n  }\n  function toAnnotationsArray(annotationsHolder) {\n    const annotations = [];\n    for (let i = 0; i < annotationsHolder.annotationsLength(); i++) {\n      const annotation = annotationsHolder.annotations(i);\n      annotations.push({\n        annotationType: annotation.annotationType(),\n        description: annotation.description()\n      });\n    }\n    return annotations;\n  }\n  function toFileArray(results) {\n    let files = [];\n    for (let i = 0; i < results.filesLength(); i++) {\n      let file = results.files(i);\n      files.push(toFile(file));\n    }\n    return files;\n  }\n  function toFile(file) {\n    return {\n      name: file.name(),\n      uuid: file.uuid(),\n      contentType: file.contentType(),\n      charset: file.charset(),\n      contents: [file.contentsArray()],\n      length: file.contentsLength(),\n      timestamp: toLong(file.timestamp()),\n      hasMorePackets: file.hasMorePackets(),\n      isFinalPacket: file.isFinalPacket(),\n      relatedSuiteUuid: file.relatedSuiteUuid(),\n      commandUuid: file.commandUuid(),\n      sessionNum: file.sessionNum(),\n      relatedSuiteTestUuid: file.relatedSuiteTestUuid(),\n      browser: toBrowser(file.browser()),\n      device: browserManager.getDevice(file.device())\n    };\n  }\n  function toResultArray(phase, results) {\n    let answer = [];\n    for (let i = 0; i < results.resultsLength(); i++) {\n      const result = results.results(i);\n      const hasClientIndices = result.hasClientIndices();\n      answer.push({\n        phase: phase,\n        connectionId: result.connectionId(),\n        threadId: result.threadId(),\n        iterationId: result.iterationId(),\n        globalConcurrentClientIndex: hasClientIndices ? toLong(result.globalConcurrentClientIndex()) : null,\n        regionalConcurrentClientIndex: hasClientIndices ? toLong(result.regionalConcurrentClientIndex()) : null,\n        iteration: hasClientIndices ? toLong(result.iteration()) : null,\n        browser: toBrowser(result.browser()),\n        device: browserManager.getDevice(result.device()),\n        resource: result.resource(),\n        url: result.url(),\n        timestamp: toLong(result.timestamp()),\n        createdAt: toLong(result.createdAt()),\n        firstReport: result.firstReport(),\n        excludeFromCount: result.excludeFromCount(),\n        metrics: toMetrics(result),\n        trace: toTrace(result.trace()),\n        suiteResults: toSuiteResultsArray(result)\n      });\n    }\n    return answer;\n  }\n  function toMetrics(result) {\n    let answer = [];\n    for (let i = 0; i < result.metricsLength(); i++) {\n      let metric = result.metrics(i);\n      answer.push({\n        namespace: metric.ns(),\n        name: metric.name(),\n        metricType: toMetricType(metric.metricType()),\n        metricKey: metric.metricKey(),\n        metricValue: toLong(metric.metricValue()),\n        metricUnits: metric.metricUnits()\n      });\n    }\n    return answer;\n  }\n  function toMetricType(metricType) {\n    switch (metricType) {\n      case io.testable.agent.MetricType.Timing:\n        return 'Timing';\n      case io.testable.agent.MetricType.Counter:\n        return 'Counter';\n      case io.testable.agent.MetricType.Histogram:\n        return 'Histogram';\n      case io.testable.agent.MetricType.Metered:\n        return 'Metered';\n    }\n  }\n  function toTrace(trace) {\n    if (trace != null) {\n      return {\n        uuid: trace.uuid(),\n        tooLarge: trace.tooLarge(),\n        status: trace.status(),\n        statusMsg: trace.statusMsg(),\n        length: toLong(trace.length()),\n        packets: toTracePackets(trace)\n      };\n    }\n  }\n  function toTracePackets(trace) {\n    let answer = [];\n    for (let i = 0; i < trace.packetsLength(); i++) {\n      let packet = trace.packets(i);\n      answer.push({\n        timestamp: toLong(packet.timestamp()),\n        lastTimestamp: toLong(packet.lastTimestamp()),\n        type: packet.type(),\n        headers: packet.headers(),\n        body: toTracePacketBody(packet.body()),\n        bodyTooLarge: packet.bodyTooLarge(),\n        length: toLong(packet.length())\n      });\n    }\n    return answer;\n  }\n  function toTracePacketBody(body) {\n    if (body) {\n      return {\n        type: body.type(),\n        data: _lib.default.binaryToBase64(new Uint8Array(body.dataArray()))\n      };\n    }\n  }\n  function toLogs(log) {\n    let answer = [];\n    const logGroup = log.logGroup();\n    for (let i = 0; i < log.messagesLength(); i++) {\n      let msg = log.messages(i);\n      answer.push({\n        group: logGroup,\n        level: toLogLevel(msg.level()),\n        message: msg.message(),\n        timestamp: toLong(msg.timestamp())\n      });\n    }\n    return answer;\n  }\n  function toLogLevel(level) {\n    switch (level) {\n      case io.testable.agent.LogLevel.Trace:\n        return 'Trace';\n      case io.testable.agent.LogLevel.Debug:\n        return 'Debug';\n      case io.testable.agent.LogLevel.Info:\n        return 'Info';\n      case io.testable.agent.LogLevel.Error:\n        return 'Error';\n      case io.testable.agent.LogLevel.Fatal:\n        return 'Fatal';\n    }\n  }\n  function toTestState(testState) {\n    switch (testState) {\n      case io.testable.agent.TestState.Passed:\n        return 'Passed';\n      case io.testable.agent.TestState.Failed:\n        return 'Failed';\n      case io.testable.agent.TestState.Skipped:\n        return 'Skipped';\n      case io.testable.agent.TestState.NA:\n        return 'NA';\n      case io.testable.agent.TestState.Retried:\n        return 'Retried';\n      case io.testable.agent.TestState.Delete:\n        return 'Delete';\n    }\n  }\n  function toSuiteActionType(type) {\n    switch (type) {\n      case io.testable.agent.AgentSuiteActionType.StartSuite:\n        return 'StartSuite';\n      case io.testable.agent.AgentSuiteActionType.StartSuiteTest:\n        return 'StartSuiteTest';\n      case io.testable.agent.AgentSuiteActionType.FinishSuite:\n        return 'FinishSuite';\n      case io.testable.agent.AgentSuiteActionType.FinishSuiteTest:\n        return 'FinishSuiteTest';\n    }\n  }\n  function toCommandActionType(type) {\n    switch (type) {\n      case io.testable.agent.AgentCommandActionType.StartStream:\n        return 'StartStream';\n      case io.testable.agent.AgentCommandActionType.FinishStream:\n        return 'FinishStream';\n      case io.testable.agent.AgentCommandActionType.StartCommand:\n        return 'StartCommand';\n      case io.testable.agent.AgentCommandActionType.FinishCommand:\n        return 'FinishCommand';\n    }\n  }\n  function toCommandStartStreamAction(startStream) {\n    return {\n      id: startStream.id(),\n      started: toLong(startStream.started()),\n      concurrentClientIndex: toLong(startStream.concurrentClientIndex()),\n      globalConcurrentClientIndex: toLong(startStream.globalConcurrentClientIndex()),\n      regionalConcurrentClientIndex: toLong(startStream.regionalConcurrentClientIndex()),\n      sessionNum: startStream.sessionNum(),\n      iteration: startStream.iteration(),\n      iterationId: startStream.iterationId(),\n      threadId: startStream.threadId(),\n      browser: toBrowser(startStream.browser()),\n      device: browserManager.getDevice(startStream.device())\n    };\n  }\n  function toCommandFinishStreamAction(finishStream) {\n    return {\n      id: finishStream.id(),\n      finished: toLong(finishStream.finished()),\n      duration: toLong(finishStream.duration()),\n      hasError: finishStream.hasError(),\n      browser: toBrowser(finishStream.browser())\n    };\n  }\n  function toCommandStartCommandAction(startCommand) {\n    return {\n      id: startCommand.id(),\n      streamId: startCommand.streamId(),\n      browser: toBrowser(startCommand.browser()),\n      command: startCommand.command(),\n      name: startCommand.name(),\n      detailed: startCommand.detailed(),\n      requestBody: startCommand.requestBody(),\n      params: startCommand.params(),\n      started: toLong(startCommand.started()),\n      offset: toLong(startCommand.offset()),\n      videoOffset: toLong(startCommand.videoOffset())\n    };\n  }\n  function toCommandFinishCommandAction(finishCommand) {\n    return {\n      id: finishCommand.id(),\n      streamId: finishCommand.streamId(),\n      browser: toBrowser(finishCommand.browser()),\n      name: finishCommand.name(),\n      status: finishCommand.status(),\n      responseBody: finishCommand.responseBody(),\n      params: finishCommand.params(),\n      error: finishCommand.error(),\n      success: finishCommand.success(),\n      finished: toLong(finishCommand.finished()),\n      duration: toLong(finishCommand.duration()),\n      files: toFileArray(finishCommand),\n      filesLength: finishCommand.filesLength()\n    };\n  }\n  function toProgress(progress) {\n    return {\n      timestamp: toLong(progress.timestamp()),\n      cpu: progress.cpu(),\n      memory: toLong(progress.memory()),\n      cpuUtilization: toLong(progress.cpuUtilization()),\n      memoryUtilization: toLong(progress.memoryUtilization())\n    };\n  }\n  let TWO_PWR_16_DBL = 1 << 16;\n  let TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n  function toLong(val) {\n    if (val) {\n      return Number(val);\n    }\n  }\n  var _default = _exports.default = {\n    toResults: toResults,\n    toLogs: toLogs,\n    toProgress: toProgress\n  };\n});","define(\"@testable/shared-ui/utils/server\", [\"exports\", \"rsvp\", \"@ember/object\", \"tracked-built-ins\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/dashboards\", \"@testable/shared-ui/utils/environment\", \"js-base64\"], function (_exports, _rsvp, _object, _trackedBuiltIns, _lib, _dashboards, _environment, _jsBase) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/object\",0,\"@ember/object\",0,\"tracked-built-ins\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/dashboards\",0,\"@testable/shared-ui/utils/environment\",0,\"js-base64\"eaimeta@70e063a35619d71f\n  function sortTestCase(testCase) {\n    if (_.isArray(testCase.configurations)) {\n      sortByName(testCase.configurations);\n      _.forEach(testCase.configurations, function (configuration) {\n        sortByStartedAt(configuration.executions);\n      });\n    }\n    if (testCase.gateways && testCase.gateways.length > 0) {\n      sortByName(testCase.gateways[0].recordings);\n    }\n    sortByName(testCase.scripts);\n  }\n  function sortByName(arr) {\n    _lib.default.sortByIgnoreCase(arr, 'name');\n  }\n  function sortByStartedAt(arr) {\n    _lib.default.sortByMoment(arr, ['startedAt', 'createdAt'], true);\n  }\n  function getServerTime() {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/date\")\n    });\n  }\n  function getTestCase(testCaseId, queryParams) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId, queryParams),\n      dataType: \"json\"\n    }).then(function (result) {\n      sortTestCase(result);\n      return result;\n    });\n  }\n  function getTestCaseConfs(testCaseId, queryParams) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/confs\", queryParams),\n      dataType: \"json\"\n    });\n  }\n  function getConfUpdates(confUpdates) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/conf-updates\"),\n      dataType: \"json\",\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        confs: confUpdates\n      })\n    });\n  }\n  function getMetricDefs(testCaseId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/metric-defs\"),\n      dataType: \"json\"\n    });\n  }\n  function updateMetricDefs(testCaseId, updates) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/metric-defs\"),\n      dataType: \"json\",\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        updates: updates\n      })\n    });\n  }\n  function tryItOut(orgId, url) {\n    if (url.indexOf('://') === -1) {\n      url = 'http://' + url;\n    }\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/single-url?url=\" + url),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function createTestCase(org, name, description, result, path = '/', isFolder = false) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases\"),\n      data: JSON.stringify({\n        org,\n        name,\n        description,\n        path,\n        active: true,\n        isFolder\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      if (result) {\n        result.setProperties({\n          testCase: data,\n          isSaved: true\n        });\n      }\n      return data;\n    }, _lib.default.fail);\n  }\n  function updateTestCase(testCaseId, name, description, path) {\n    const data = {\n      name: name\n    };\n    if (_.isString(description)) {\n      data.description = description;\n    }\n    if (_.isString(path)) {\n      data.path = path;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateTestCasePath(orgId, data) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(`/orgs/${orgId}/update-paths`),\n      data: JSON.stringify({\n        paths: data\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteTestCase(id) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/test-cases/\" + id),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteTestCaseFolder(orgId, path) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(`/orgs/${orgId}/test-cases/path`),\n      data: JSON.stringify({\n        path\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function createTestConfiguration(testCaseId, details) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/confs\"),\n      data: JSON.stringify(details),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function deleteTestConfiguration(id) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/test-confs/\" + id),\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function updateTestConfiguration(confId, details) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId),\n      data: JSON.stringify(details),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function updateTestConfigurationName(confId, name) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId),\n      data: JSON.stringify({\n        name: name\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function updateTestConfigurationDashboard(confId, dashboardId) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId),\n      data: JSON.stringify({\n        dashboardId: dashboardId\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function cancelSchedule(scheduleId) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-schedules/\" + scheduleId + \"/cancel\"),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function skipSchedule(scheduleId) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-schedules/\" + scheduleId + \"/skip\"),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function toggleSchedule(scheduleId, active) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-schedules/\" + scheduleId),\n      data: JSON.stringify({\n        active: active\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function cancelBulkSchedule(ids) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-schedules/cancel\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(ids),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function skipBulkSchedule(ids) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-schedules/skip\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(ids),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function toggleBulkSchedule(ids, active) {\n    ids.active = active;\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-schedules\"),\n      data: JSON.stringify(ids),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateOrgDashboard(orgId, dashboardId, isLoad) {\n    let data = {};\n    data[isLoad ? 'dashboardId' : 'dashboardFunctionalId'] = dashboardId;\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateOrgSettings(orgId, settings, notifications) {\n    const data = {};\n    data.settings = settings;\n    if (notifications) data.notifications = notifications;\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateTestCaseDashboard(testCaseId, dashboardId, isLoad) {\n    let data = {};\n    data[isLoad ? 'dashboardId' : 'dashboardFunctionalId'] = dashboardId;\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function createLoadTestExecution(confId) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId + \"/executions\"),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (result) {\n      _lib.default.trackEvent('start-test', {\n        'test_conf': _.get(result, 'configuration.name', '-'),\n        'test_case': _.get(result, 'configuration.testCase.name', '-'),\n        'scenario': _.get(result, 'script.name', '-'),\n        'users': result.concurrentClients || 0,\n        'id': result.id\n      });\n      return result;\n    }, _lib.default.fail);\n  }\n  function getLoadTestExecution(executionId, options) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + (options ? '?' + options : '')),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionIntervals(executionId, zoomInfo) {\n    let params = _lib.default.getZoomParams(zoomInfo);\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/intervals\", params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionRegionIntervals(executionId, executionRegionId, zoomInfo) {\n    let params = _lib.default.getZoomParams(zoomInfo);\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + executionRegionId + \"/intervals\", params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionSuiteRelated(executionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/suite-related\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n  function getLoadTestExecutionSuiteRelatedTests(executionId, suiteId, limit, offset) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/suite-summaries/\" + suiteId + \"/tests?offset=\" + offset + \"&limit=\" + limit),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n  function getLoadTestExecutionRegionSuiteRelatedTests(executionId, suiteId, regionId, limit, offset) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + regionId + \"/suite-summaries/\" + suiteId + \"/tests?offset=\" + offset + \"&limit=\" + limit),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n  function getLoadTestExecutionRegionSuiteRelated(executionId, executionRegionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + executionRegionId + \"/suite-related\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n  function getSuiteTestSummaryErrors(executionId, suiteId, suiteTestId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/suite-summaries/\" + suiteId + \"/tests/\" + suiteTestId + \"/errors\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n  function getRegionSuiteTestSummaryErrors(executionId, executionRegionId, suiteId, suiteTestId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + executionRegionId + \"/suite-summaries/\" + suiteId + \"/tests/\" + suiteTestId + \"/errors\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(sortSuiteSummaries, _lib.default.fail);\n  }\n\n  // Need to remove this function from al other places instead confirming from all places instead getLoadTestExecutionSuiteRelatedTests\n  // if suiteSummaries.testSummaries is not being received from the backend\n  function sortSuiteSummaries(suiteSummaries) {\n    _lib.default.sortByMoment(suiteSummaries, ['firstStartedAt']);\n    _.forEach(suiteSummaries, function (suiteSummary) {\n      _lib.default.sortByMoment(suiteSummary.testSummaries, ['firstStartedAt']);\n    });\n    return suiteSummaries;\n  }\n  function getLoadTestExecutionResult(resultId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/results/\" + resultId),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionTrace(traceId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/execution-traces/\" + traceId),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getTracePackets(traceId, offset, limit, desc) {\n    offset = offset || 0;\n    limit = limit || 25;\n    desc = desc || false;\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/execution-traces/\" + traceId + \"/packets?offset=\" + offset + \"&limit=\" + limit + \"&desc=\" + desc),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionOutputFiles(executionId, params) {\n    return _lib.default.getJson(\"GET\", _lib.default.toUrl(\"/executions/\" + executionId + \"/output-files\", params)).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionTraces(executionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/traces\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionRegionTraces(executionId, executionRegionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + executionRegionId + \"/traces\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestSummaryHistory(testConfId, params) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-confs/\" + testConfId + \"/summary-history\", params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionResources(executionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/resources\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionRegionResources(executionId, executionRegionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/regions/\" + executionRegionId + \"/resources\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionLogs(executionId, params) {\n    return _lib.default.getJson(\"GET\", _lib.default.toUrl(\"/executions/\" + executionId + \"/logs?\", params)).then(null, _lib.default.error);\n  }\n  function deleteLoadTestExecution(executionId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getExecutions(confId, params) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId + \"/executions\", params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (data) {\n      sortByStartedAt(data);\n      return data;\n    }, _lib.default.fail);\n  }\n  function getExecutionMetrics(confId, params) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId + \"/execution-metrics\", params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (data) {\n      sortByStartedAt(data);\n      return data;\n    }, _lib.default.fail);\n  }\n  function getTestConfiguration(confId, down, limit) {\n    limit = _.isNumber(limit) ? limit : 1;\n    down = _.isBoolean(down) ? down : false;\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-confs/\" + confId + \"?limit=\" + limit + \"&down=\" + down),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (data) {\n      sortByStartedAt(data.executions);\n      return data;\n    });\n  }\n  function getTokenContent(uuid, params, zoomInfo) {\n    params = params || {};\n    _.merge(params, _lib.default.getZoomParams(zoomInfo));\n    return _lib.default.toPromise($.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/public/\" + uuid, params),\n      contentType: \"application/json; charset=utf-8\"\n    }));\n  }\n  function getPublicResults(uuid) {\n    return _lib.default.toPromise($.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/p/\" + uuid + \"/results\"),\n      contentType: \"application/json; charset=utf-8\"\n    }));\n  }\n  function getRegion(regionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/regions/\" + regionId),\n      dataType: \"json\"\n    });\n  }\n  function getProviders(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl((orgId ? \"/orgs/\" + orgId : \"\") + \"/providers\", {\n        down: true,\n        includeRunningExecutions: false,\n        linkedOrgsOnly: _environment.config.isMonitoring\n      }),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function refreshProviderInfo() {\n    return getProviders().then(function (providers) {\n      _environment.config.regions.splice(0, _environment.config.regions.length);\n      _environment.config.providers.splice(0, _environment.config.providers.length);\n      _environment.config.providersAll.splice(0, _environment.config.providersAll.length);\n      _environment.config.providersAll.push(...providers);\n      if (!_environment.config.isAwsEnabled || _environment.config.currentUser?.org?.settings?.isAwsEnabled === \"false\") providers = providers.filter(p => p.source !== \"Aws\");\n      if (!_environment.config.isAzureEnabled || _environment.config.currentUser?.org?.settings?.isAzureEnabled === \"false\") providers = providers.filter(p => p.source !== \"Azure\");\n      if (!_environment.config.isGcpEnabled || _environment.config.currentUser?.org?.settings?.isGcpEnabled === \"false\") providers = providers.filter(p => p.source !== \"Gcp\");\n      _environment.config.providers.push(...providers);\n      let regions = [];\n      _.forEach(providers, function (provider) {\n        if (provider.providerType === 'Shared') {\n          _.forEach(provider.locations, function (location) {\n            let locationRegions = [];\n            _.forEach(location.regions, function (region) {\n              region.textClass = \"green\";\n              region.colorClass = \"text-primary\";\n              region.iconClass = \"fa-check\";\n              region.message = \"Plenty of capacity in this region\";\n              region.load = 0;\n              region.hosts = 0;\n              region.agents = 0;\n              region.cpus = 0;\n              region.cpuUtilization = null;\n              region.freeMemory = 0;\n              region.totalMemory = 0;\n              region.providerId = provider.id;\n              region.org = provider.organization;\n              let emberizedRegion = _object.default.create(region);\n              regions.push(emberizedRegion);\n              locationRegions.push(emberizedRegion);\n            });\n            location.regions = locationRegions;\n          });\n        }\n      });\n      _environment.config.regions.push(...regions);\n      return updateRegionLoad(_environment.config.providers);\n    }, function () {});\n  }\n  function createProvider(details) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/providers\"),\n      data: JSON.stringify(details),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateProvider(id, details) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/providers/\" + id),\n      data: JSON.stringify(details),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteProvider(id) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/providers/\" + id),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deactivateRegion(id) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/regions/\" + id),\n      data: JSON.stringify({\n        active: false\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getNpmModules() {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/allowed-node-modules\"),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function gatewayUrlFor(type, key, targetUrl) {\n    switch (type) {\n      case \"Http\":\n        {\n          let isHttps = _.isString(targetUrl) && targetUrl.indexOf('https://') === 0;\n          let url = _environment.config.isGatewaySslEnabled && isHttps ? _environment.config.gatewayHttpsUrl : _environment.config.gatewayHttpUrl;\n          return url ? url.replace('{key}', key) : '';\n        }\n      case \"RawTcp\":\n        {\n          let isTcps = _.isString(targetUrl) && targetUrl.indexOf('tcps://') === 0;\n          let url = _environment.config.isGatewaySslEnabled && isTcps ? _environment.config.gatewayTcpsUrl : _environment.config.gatewayTcpUrl;\n          return url ? url.replace('{key}', key) : '';\n        }\n    }\n    return \"\";\n  }\n  function getTestCases(orgId, params) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/new-summary\", params),\n      dataType: \"json\"\n    }).then(function (results) {\n      if (_.isObject(results.testCases)) {\n        results.testCases = _.values(results.testCases);\n      }\n      if (_.isObject(results.running)) {\n        results.running = _.values(results.running);\n      }\n      if (_.isObject(results.scheduled)) {\n        results.scheduled = _.values(results.scheduled);\n      }\n      let testCases = _.map(results.testCases, function (result) {\n        return _object.default.create(result);\n      });\n      if (params && (params.includeConfigurations || params.includeLatestExecution || params.includeRunning)) {\n        return {\n          testCases: testCases || [],\n          running: results.running || [],\n          scheduled: results.scheduled || []\n        };\n      } else {\n        return {\n          testCases: _.sortBy(testCases, function (testCase) {\n            return testCase.name.toLowerCase();\n          })\n        };\n      }\n    });\n  }\n  function loadGatewayInChrome(gatewayId, path, endRecording) {\n    return loadGateway(gatewayId, \"chrome\", path, endRecording);\n  }\n  function loadGatewayHttpGet(gatewayId, path, endRecording) {\n    return loadGateway(gatewayId, \"http-get\", path, endRecording);\n  }\n  function loadGateway(gatewayId, action, path, endRecording) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/gateways/\" + gatewayId + \"/load?action=\" + action + (path && path.length > 0 ? \"&path=\" + path : \"\") + (endRecording ? \"&endRecording=\" + endRecording : \"\")),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function createRecording(name, url, testCaseId) {\n    if (url.indexOf('://') === -1) {\n      url = 'http://' + url;\n    }\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/recordings\"),\n      data: JSON.stringify({\n        name: name,\n        url: url,\n        active: true\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (result) {\n      _lib.default.trackEvent('recording-feature');\n      return result;\n    }, _lib.default.fail);\n  }\n  function getRecording(recordingId, includeTests) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId + (includeTests ? \"?includeTests=true\" : \"\")),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateRecording(recordingId, name) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId),\n      data: JSON.stringify({\n        name: name\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (result) {\n      _lib.default.trackEvent('recording-feature');\n      return result;\n    }, _lib.default.fail);\n  }\n  function updateRecordingUrl(recordingId, url) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId),\n      data: JSON.stringify({\n        url: url\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (result) {\n      _lib.default.trackEvent('recording-feature');\n      return result;\n    }, _lib.default.fail);\n  }\n  function deleteRecording(recordingId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function decodeCode(script) {\n    if (script.main) {\n      script.main = _lib.default.b64DecodeUnicode(script.main);\n    }\n    if (script.init) {\n      script.init = _lib.default.b64DecodeUnicode(script.init);\n    }\n    if (script.teardown) {\n      script.teardown = _lib.default.b64DecodeUnicode(script.teardown);\n    }\n  }\n  function createScript(name, testCaseId, scriptType, options) {\n    let data = {\n      name: name,\n      scriptType: scriptType\n    };\n    if (options && _.isObject(options.source) && options.source.id > 0) {\n      data.sourceType = options.source.type;\n      data.sourceId = options.source.id;\n    }\n    if (options && options.mainCode) {\n      data.main = _jsBase.Base64.encode(options.mainCode);\n    }\n    if (options && options.metadata) {\n      data.metadata = options.metadata;\n    }\n    if (scriptType) {\n      _lib.default.trackEvent(scriptType.toLowerCase() + '-feature');\n    }\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/scripts\"),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(function (result) {\n      if (_.isUndefined(result.dataStores)) {\n        result.dataStores = [];\n      }\n      decodeCode(result);\n      return result;\n    }, _lib.default.fail);\n  }\n  function getScript(scriptId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (result) {\n      if (_.isUndefined(result.dataStores)) {\n        result.dataStores = [];\n      }\n      result.dataStores = _.sortBy(result.dataStores, ['name']);\n      _.forEach(result.dataStores, function (ds) {\n        _lib.default.addAuthToDataStore(ds);\n      });\n      decodeCode(result);\n      return new _trackedBuiltIns.TrackedObject(result);\n    }, _lib.default.fail);\n  }\n  function getScriptConfs(scriptId, queryParams) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId + \"/confs\", queryParams),\n      dataType: \"json\"\n    });\n  }\n  function getScripts(testCaseId, includeEmptyScript, includeTestCount) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/scripts\", {\n        includeEmptyScript,\n        includeTestCount\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateScriptParamsConfig(scriptId, paramsConfig, expectedUpdatedAt) {\n    let data = {\n      paramsConfig: paramsConfig\n    };\n    if (expectedUpdatedAt) {\n      data.expectedUpdatedAt = expectedUpdatedAt;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(function (data) {\n      if (data && data.scriptType) {\n        _lib.default.trackEvent(data.scriptType.toLowerCase() + '-feature');\n      }\n      return data;\n    });\n  }\n  function updateScriptCode(scriptId, type, code, expectedUpdatedAt) {\n    let data = {};\n    data[type] = _jsBase.Base64.encode(code);\n    if (expectedUpdatedAt) {\n      data.expectedUpdatedAt = expectedUpdatedAt;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    });\n  }\n  function updateScriptMetadata(scriptId, metadata, expectedUpdatedAt) {\n    let data = {\n      metadata: metadata\n    };\n    if (expectedUpdatedAt) {\n      data.expectedUpdatedAt = expectedUpdatedAt;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(function (data) {\n      if (data && data.scriptType) {\n        _lib.default.trackEvent(data.scriptType.toLowerCase() + '-feature');\n      }\n      return data;\n    });\n  }\n  function updateScriptName(scriptId, name) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify({\n        name: name\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function updateScriptType(scriptId, scriptType) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify({\n        scriptType: scriptType\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(function (result) {\n      decodeCode(result);\n      return new _trackedBuiltIns.TrackedObject(result);\n    }, _lib.default.fail);\n  }\n  function convertScriptToCode(scriptId) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/scripts/\" + scriptId),\n      data: JSON.stringify({\n        convertToCode: true\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\",\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function deleteScenario(scriptId) {\n    return $.ajax({\n      type: 'DELETE',\n      url: _lib.default.toUrl('/scripts/' + scriptId),\n      dataType: 'json',\n      headers: {\n        'X-Client-Update-Id': _lib.default.generateClientUpdateId()\n      }\n    }).then(null, _lib.default.fail);\n  }\n  function createDashboard(orgId, name, config, description, isLoad, isPublic) {\n    let data = {\n      name: name,\n      config: JSON.stringify(config),\n      version: _dashboards.default.DashboardVersion,\n      isLoad: isLoad\n    };\n    if (_.isString(description)) {\n      data.description = description;\n    }\n    if (_.isBoolean(isPublic)) data.public = isPublic;\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/dashboards\"),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      _lib.default.trackEvent('custom-view-feature', {\n        'name': data.name\n      });\n      return data;\n    }, _lib.default.fail);\n  }\n  function getDashboard(dashboardId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/dashboards/\" + dashboardId),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getDashboardByName(orgId, name, isLoad) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/dashboards/by-name?name=\" + name + \"&isLoad=\" + isLoad),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getDashboards(orgId, isLoad) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/dashboards?isLoad=\" + isLoad),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateDashboardConfig(dashboardId, config, description, isPublic) {\n    let data = {\n      config: JSON.stringify(config)\n    };\n    if (_.isString(description)) {\n      data.description = description;\n    }\n    if (_.isBoolean(isPublic)) {\n      data.public = isPublic;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/dashboards/\" + dashboardId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      _lib.default.trackEvent('custom-view-feature', {\n        'name': data.name\n      });\n      return data;\n    }, _lib.default.fail);\n  }\n  function updateDashboardName(dashboardId, name, description, result) {\n    let data = {\n      name: name\n    };\n    if (_.isString(description)) {\n      data.description = description;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/dashboards/\" + dashboardId),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      (0, _object.set)(result.dashboard, 'name', data.name);\n      (0, _object.set)(result.dashboard, 'description', data.description);\n      _lib.default.trackEvent('custom-view-feature', {\n        'name': data.name\n      });\n      return data;\n    }, _lib.default.fail);\n  }\n  function deleteDashboard(dashboardId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/dashboards/\" + dashboardId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function stopRecording(recordingId) {\n    return doRecordingAction(\"Stop\", recordingId);\n  }\n  function doRecordingAction(action, recordingId) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId + \"/\" + action.toLowerCase()),\n      data: JSON.stringify({\n        action: action\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function stopLoadTestExecution(executionId) {\n    _lib.default.trackEvent('stop-test', {\n      'id': executionId\n    });\n    return doLoadTestExecutionAction(\"Stop\", executionId);\n  }\n  function stopAllExecutions(orgId) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + '/stop-all'),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function doLoadTestExecutionAction(action, loadTestExecutionId) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/executions/\" + loadTestExecutionId + \"/\" + action.toLowerCase()),\n      data: JSON.stringify({\n        action: action\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function loadTraffic(recordingId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId + \"/traffic\"),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function trafficForConn(recordingId, connId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/recordings/\" + recordingId + \"/traffic/\" + connId, \"includeData=true\"),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestResource(executionId, region, resource, zoomInfo) {\n    let url = \"/executions/\" + executionId;\n    if (region !== \"ALL\") {\n      url += \"/regions/\" + region;\n    }\n    url += \"/resources/\" + resource;\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url, _lib.default.getZoomParams(zoomInfo)),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getBuckets(executionId, region, resource, zoomInfo) {\n    let url = \"/executions/\" + executionId;\n    if (region && region !== \"ALL\") {\n      url += \"/regions/\" + region;\n    }\n    if (resource && resource > 0) {\n      url += \"/resources/\" + resource;\n    }\n    url += \"/buckets\";\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url, _lib.default.getZoomParams(zoomInfo)),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getBucketIntervals(executionId, region, bucket, zoomInfo) {\n    let url = \"/executions/\" + executionId;\n    if (region && region !== \"ALL\") {\n      url += \"/regions/\" + region;\n    }\n    url += \"/bucket-intervals\";\n    const params = _lib.default.getZoomParams(zoomInfo);\n    params.bucket = bucket;\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url, params),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getBucketHistory(testConfId, maxExecutionId, regionId, bucket) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/test-confs/\" + testConfId + \"/bucket-history?bucket=\" + bucket + \"&maxExecutionId=\" + maxExecutionId + (regionId ? \"&region=\" + regionId : \"\")),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLoadTestExecutionStatus(execution) {\n    let status = '';\n    if (execution.cancelledByUser) {\n      status = 'Stopped By User';\n    }\n    if (execution.timedOut) {\n      status = 'Timed Out';\n    }\n    if (execution.limitBreached) {\n      let limitType = _.isUndefined(execution.limit) ? \"\" : execution.limit.description + \" \";\n      status = limitType + 'Limit Breached';\n    }\n    if (execution.triggerBreached) {\n      status = 'Breaking Point Hit';\n    }\n    if (execution.fatalLogging) {\n      status = 'Fatal Logging Hit';\n    }\n    if (execution.insufficientSubs) {\n      status = 'Insufficient Plans';\n    }\n    if (execution.completed && status.length > 0) {\n      return status;\n    }\n    if (execution.completed) {\n      return 'Completed';\n    }\n    if (execution.queued) {\n      return 'Queued';\n    }\n    if (_.isEmpty(execution.startedAt)) {\n      return 'Initializing';\n    }\n    if (status.length > 0) {\n      status += ' - ';\n    }\n    if (execution.allocatingInfra) {\n      return status + 'Provisioning Infrastructure';\n    }\n    if (execution.running) {\n      return status + 'Running';\n    }\n    if (!execution.aggregated) {\n      return status + 'Processing Results';\n    }\n    if (!execution.immediateContentSaved) {\n      return status + 'Saving Output Files';\n    }\n    if (!execution.diffsCalculated) {\n      return status + 'Calculating Image Diffs';\n    }\n    if (!execution.summaryCalculated) {\n      return status + 'Waiting For Aggregator';\n    }\n    if (!execution.hasSavedSummaries) {\n      return status + 'Loading Aggregated Metrics';\n    }\n    if (!execution.summarySaved) {\n      return status + 'Saving Aggregated Metrics';\n    }\n    return status + 'Analyzing Results';\n  }\n  function getRecordingStatus(recording) {\n    if (!_.isEmpty(recording) && recording.limitBreached) {\n      return 'Limit Breached';\n    }\n    if (!_.isEmpty(recording) && !_.isEmpty(recording.finishedAt)) {\n      return 'Completed';\n    }\n    if (!_.isEmpty(recording) && recording.running) {\n      return 'Running';\n    }\n    if (!_.isEmpty(recording)) {\n      return 'Not Started';\n    } else {\n      return '-';\n    }\n  }\n  function latestExecution(executions) {\n    return _.reduce(executions, function (newest, exec) {\n      if (_.isUndefined(newest) || moment(newest.updatedAt).isAfter(moment(exec.updatedAt))) {\n        return newest;\n      }\n      return exec;\n    });\n  }\n  function createUser(email, name, isSuperAdmin) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/users\"),\n      data: JSON.stringify({\n        email: email,\n        name: name,\n        isSuperAdmin: isSuperAdmin,\n        autoGenPassword: true\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  async function getOrgMembers(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + '/users'),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function createOrg(name, email, primaryOrgId, userId, shareAwsLink) {\n    let data = {\n      name: name,\n      email: email,\n      users: userId ? [userId] : [],\n      shared: true,\n      active: true\n    };\n    if (primaryOrgId) {\n      data.primaryOrgId = Number(primaryOrgId);\n    }\n    if (_.isBoolean(shareAwsLink)) {\n      data.shareAwsLink = shareAwsLink;\n    }\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs\"),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, handleOrgError);\n  }\n  function updateOrg(orgId, name, email) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId),\n      data: JSON.stringify({\n        name: name,\n        email: email\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (result) {\n      return result.data;\n    }, handleOrgError);\n  }\n  function addUserToOrg(orgId, userId, name, role, linkPlans) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/users/\" + userId + \"?userRole=\" + role + \"&linkPlans=\" + (linkPlans || false) + (name ? \"&name=\" + name : \"\"))\n    }).then(null, _lib.default.fail);\n  }\n  function updateOrgUserRole(orgId, userId, role) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/users/\" + userId + \"?userRole=\" + role)\n    }).then(null, _lib.default.fail);\n  }\n  function removeUserFromOrg(orgId, userId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/users/\" + userId)\n    }).then(null, _lib.default.fail);\n  }\n  function deleteOrg(orgId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function handleOrgError(jqxhr, status, errMsg) {\n    if (jqxhr.responseJSON.error.message.indexOf('Duplicate entry') !== -1) {\n      _lib.default.error('Name already registered. Try selecting a different organization name.', 'Duplicate Name', true);\n      $('#orgName').text('');\n    } else {\n      _lib.default.stickyFail(jqxhr, status, errMsg);\n    }\n  }\n  function updateOrgTriggers(orgId, triggers) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/triggers\"),\n      data: JSON.stringify(triggers),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateOrgFilters(orgId, filters) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/filters\"),\n      data: JSON.stringify(filters),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getOrgActivity(orgId, limit) {\n    return getOrgActivitySince(orgId, undefined, limit);\n  }\n  function getOrgActivitySince(orgId, minId, limit) {\n    limit = limit || 25;\n    let url = \"/orgs/\" + orgId + \"/audit?limit=\" + limit;\n    if (minId) {\n      url += \"&minId=\" + minId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getOrgActivityUntil(orgId, maxId, limit) {\n    limit = limit || 25;\n    let url = \"/orgs/\" + orgId + \"/audit?limit=\" + limit;\n    if (maxId) {\n      url += \"&maxId=\" + maxId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getTestCaseActivity(testCaseId, limit) {\n    return getTestCaseActivitySince(testCaseId, undefined, limit);\n  }\n  function getTestCaseActivitySince(testCaseId, minId, limit) {\n    limit = limit || 25;\n    let url = \"/test-cases/\" + testCaseId + \"/audit?limit=\" + limit;\n    if (minId) {\n      url += \"&minId=\" + minId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getTestCaseActivityUntil(testCaseId, maxId, limit) {\n    limit = limit || 25;\n    let url = \"/test-cases/\" + testCaseId + \"/audit?limit=\" + limit;\n    if (maxId) {\n      url += \"&maxId=\" + maxId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getTestConfActivity(testConfId, limit) {\n    return getTestConfActivitySince(testConfId, undefined, limit);\n  }\n  function getTestConfActivitySince(testConfId, minId, limit) {\n    limit = limit || 25;\n    let url = \"/test-confs/\" + testConfId + \"/audit?limit=\" + limit;\n    if (minId) {\n      url += \"&minId=\" + minId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getTestConfActivityUntil(testConfId, maxId, limit) {\n    limit = limit || 25;\n    let url = \"/test-confs/\" + testConfId + \"/audit?limit=\" + limit;\n    if (maxId) {\n      url += \"&maxId=\" + maxId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getScriptActivity(scriptId, limit) {\n    return getScriptActivitySince(scriptId, undefined, limit);\n  }\n  function getScriptActivitySince(scriptId, minId, limit) {\n    limit = limit || 25;\n    let url = \"/scripts/\" + scriptId + \"/audit?limit=\" + limit;\n    if (minId) {\n      url += \"&minId=\" + minId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getScriptActivityUntil(scriptId, maxId, limit) {\n    limit = limit || 25;\n    let url = \"/scripts/\" + scriptId + \"/audit?limit=\" + limit;\n    if (maxId) {\n      url += \"&maxId=\" + maxId;\n    }\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(url),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function deleteTestCaseEncryptionKey(testCaseId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl('/test-cases/' + testCaseId + '/encryption-key'),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function userExists(userId) {\n    return new _rsvp.Promise((resolve, reject) => {\n      $.ajax({\n        type: \"HEAD\",\n        url: _lib.default.toUrl(\"/users/\" + userId),\n        contentType: \"application/json; charset=utf-8\"\n      }).then(function () {\n        resolve();\n      }, function () {\n        reject(new Error());\n      });\n    });\n  }\n  function getUser(userId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/users/\" + userId),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (result) {\n      return result.data;\n    });\n  }\n  function updateUser(id, updatedUser) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/users/\" + id),\n      data: JSON.stringify(updatedUser),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteUser(id) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/users/\" + id)\n    }).then(null, _lib.default.fail);\n  }\n  function getIntegrations(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/integrations\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function createIntegration(orgId, type, settings) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/integrations\"),\n      data: JSON.stringify({\n        settings: settings,\n        integrationType: type\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateIntegration(orgId, id, settings, active) {\n    const data = {};\n    if (settings) {\n      data.settings = settings;\n    }\n    if (!_.isUndefined(active)) {\n      data.active = _.isBoolean(active) ? active : true;\n    }\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/integrations/\" + id),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteIntegration(orgId, id) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/integrations/\" + id),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getApiKeys(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/api-keys\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function lookupOrCreateApiKey(orgId, description) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/api-key-by-description?description=\" + description),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function createApiKey(orgId, description, accessType) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/api-keys\"),\n      data: JSON.stringify({\n        description,\n        accessType\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateApiKey(key, description, accessType) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/api-keys/\" + key),\n      data: JSON.stringify({\n        description,\n        accessType\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteApiKey(key) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/api-keys/\" + key),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getToken(token) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/tokens/\" + token),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getTokens(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/tokens\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function createToken(orgId, targetId, targetType, description, id2) {\n    const data = {\n      targetType,\n      targetId,\n      description\n    };\n    if (id2) {\n      data.targetId2 = id2;\n    }\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/tokens\"),\n      data: JSON.stringify(data),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateToken(orgId, key, description) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/tokens/\" + key),\n      data: JSON.stringify({\n        description: description\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteToken(orgId, key) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/tokens/\" + key),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getCards(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/cards\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function createCard(orgId, token, makeDefault) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/cards?makeDefault=\" + makeDefault),\n      contentType: \"text/plain; charset=utf-8\",\n      data: token,\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteCard(orgId, cardId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/cards/\" + cardId),\n      dataType: \"json\"\n    });\n  }\n  function updateCard(orgId, cardId, updateParams) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/cards/\" + cardId),\n      data: JSON.stringify(updateParams),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getLimits(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/limits\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getUsage(orgId, primary) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/usage\" + (primary ? \"?primary=true\" : \"\")),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getLinkedOrgs(orgId, down) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/linked-orgs\", {\n        down: down || false\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getOrg(orgId, down = false) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId, {\n        down\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (result) {\n      return result.data;\n    });\n  }\n  function confirmEmail(code, email) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/users/admin/confirmation\"),\n      data: JSON.stringify({\n        code: code,\n        email: email\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      if (!data.success && data.errorCode === \"ALREADY_CONFIRMED\") {\n        data.alreadyConfirmed = true;\n      }\n      return data;\n    }, _lib.default.fail);\n  }\n  function sendEmailConfirmation(email) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/users/admin/confirmation\"),\n      data: JSON.stringify({\n        email: email\n      }),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    }).then(function (data) {\n      let result = {\n        success: data.success\n      };\n      if (!data.success && data.errorCode === \"ALREADY_CONFIRMED\") {\n        result.alreadyConfirmed = true;\n      }\n      if (!data.success) {\n        result.error = data.error;\n      }\n      return result;\n    }, _lib.default.fail);\n  }\n  function updateRegionLoad(providers) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/providers/all/agents?providerType=Shared\"),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(function (regionalLoads) {\n      _.forEach(providers, function (provider) {\n        if (provider.providerType === 'Shared') {\n          _.forEach(provider.locations, function (location) {\n            _.forEach(location.regions, function (region) {\n              let regionalLoad = _.find(regionalLoads.regions, function (regionalLoad) {\n                return region.id === regionalLoad.region.id;\n              });\n              let load = _.isObject(regionalLoad) ? 100 - 100 * regionalLoad.availableCapacity / regionalLoad.totalCapacity : 100;\n              let hosts = _.isObject(regionalLoad) ? regionalLoad.numHosts : 0;\n              let agents = _.isObject(regionalLoad) ? regionalLoad.numAgents : 0;\n              let windowsAgents = _.isObject(regionalLoad) ? regionalLoad.numWindowsAgents : 0;\n              let linuxAgents = agents - windowsAgents;\n              let freeMemory = _.isObject(regionalLoad) ? regionalLoad.freeMemory : 0;\n              let totalMemory = _.isObject(regionalLoad) ? regionalLoad.totalMemory : 0;\n              let cpus = _.isObject(regionalLoad) ? regionalLoad.totalCpus : 0;\n              let cpuUtilization = _.isObject(regionalLoad) ? regionalLoad.cpuUtilization : null;\n              let isMaxLoad = load === 100 || isNaN(load);\n              (0, _object.setProperties)(region, {\n                public: provider.public,\n                hosts: hosts,\n                agents: agents,\n                windowsAgents: windowsAgents,\n                linuxAgents: linuxAgents,\n                cpus: cpus,\n                cpuUtilization: cpuUtilization,\n                freeMemory: freeMemory,\n                totalMemory: totalMemory,\n                load: load,\n                textClass: isMaxLoad ? \"red\" : load >= 90 ? \"orange\" : \"green\",\n                colorClass: isMaxLoad ? \"text-danger\" : load >= 90 ? \"text-warning\" : \"text-primary\",\n                iconClass: isMaxLoad ? \"fa-times\" : load >= 90 ? \"fa-minus\" : \"fa-check\",\n                message: isMaxLoad ? \"No capacity available in this region\" : load >= 90 ? \"Capacity for running tests is low\" : \"Plenty of capacity in this region\"\n              });\n            });\n          });\n        }\n      });\n      return providers;\n    }, _lib.default.fail);\n  }\n  async function getAwsMetadataForProvider(awsRegionName, providerId, populateInstanceTypes) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/aws/metadata\", {\n        region: awsRegionName,\n        provider: providerId,\n        populateInstanceTypes\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  async function getAzureMetadataForProvider(azureRegionName, providerId, populateInstanceTypes) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/azure/metadata\", {\n        region: azureRegionName,\n        provider: providerId,\n        populateInstanceTypes\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  async function getGcpMetadataForProvider(gcpRegionName, providerId, populateInstanceTypes) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/gcp/metadata\", {\n        region: gcpRegionName,\n        provider: providerId,\n        populateInstanceTypes\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function getAwsMetadata(awsRegionName, metadata) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/aws/metadata/\" + awsRegionName),\n      data: JSON.stringify(metadata),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    });\n  }\n  function getAzureMetadata(metadata) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/azure/metadata\"),\n      data: JSON.stringify(metadata),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    });\n  }\n  function getAwsElasticIpsForProvider(awsRegionName, providerId, orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/aws/elastic-ips\", {\n        region: awsRegionName,\n        provider: providerId,\n        currentOrg: orgId\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getAzurePublicIpsForProvider(awsRegionName, providerId, orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/azure/public-ips\", {\n        region: awsRegionName,\n        provider: providerId,\n        currentOrg: orgId\n      }),\n      contentType: \"application/json; charset=utf-8\"\n    }).then(null, _lib.default.fail);\n  }\n  function getAwsElasticIps(awsRegionName, metadata) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/aws/elastic-ips/\" + awsRegionName),\n      data: JSON.stringify(metadata),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    });\n  }\n  function getAzurePublicIps(azureRegionName, metadata) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/azure/public-ips/\" + azureRegionName),\n      data: JSON.stringify(metadata),\n      contentType: \"application/json; charset=utf-8\",\n      dataType: \"json\"\n    });\n  }\n  function createSamlConfig(orgId, samlConfig) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/saml-configs\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(samlConfig),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateSamlConfig(samlId, samlConfig) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/saml-configs/\" + samlId),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(samlConfig),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteSamlConfig(samlId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/saml-configs/\" + samlId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getSubdomain(subdomain) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/saml-configs/\" + subdomain),\n      contentType: \"application/json; charset=utf-8\"\n    });\n  }\n  function liveExtendExecution(executionId, body) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/live-extension\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(body),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function liveEvent(executionId, event) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/send-event\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify(event),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function manualStart(executionId) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/executions/\" + executionId + \"/manual-start\"),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getSuiteTestResult(suiteTestResultId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/suite-test-results/\" + suiteTestResultId),\n      dataType: \"json\"\n    });\n  }\n  function encrypt(testCaseId, content) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/test-cases/\" + testCaseId + \"/encrypt\"),\n      contentType: \"application/octet-stream; charset=utf-8\",\n      data: content,\n      dataType: \"text\"\n    }).then(null, _lib.default.fail);\n  }\n  function getAgents(regionId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/regions/\" + regionId + \"/agents\"),\n      dataType: \"json\"\n    });\n  }\n  function queryAgents(q) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/agents?q=\" + q),\n      dataType: \"json\"\n    });\n  }\n  function createRegion(orgId, name, description) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/regions\"),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        name: name,\n        description: description || name\n      }),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function associateAgentToRegions(agentId, regionIds) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/agents/\" + agentId),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        regionIds\n      }),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function getAmis(regions) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/aws/amis?regions=\" + regions),\n      dataType: \"json\"\n    });\n  }\n  function getSlackChannels(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/slack/channels\"),\n      dataType: \"json\"\n    });\n  }\n  function getTeamsData(orgId) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/teams/channels\"),\n      dataType: \"json\"\n    });\n  }\n  function exportToPdf(executionId, params) {\n    return exportToPdfWithUrl(_lib.default.toUrl(\"/executions/\" + executionId + \"/results.pdf\", params), executionId);\n  }\n  function exportPublicToPdf(uuid, executionId, params) {\n    return exportToPdfWithUrl(_lib.default.toUrl(\"/p/\" + uuid + \"/results.pdf\", params), executionId);\n  }\n  function exportToPdfWithUrl(url, executionId) {\n    return downloadBinary(url).then(function (data) {\n      saveAs(new Blob([data]), 'test-' + executionId + '.pdf');\n    });\n  }\n  function downloadBinary(url) {\n    return new _rsvp.Promise(function (resolve, reject) {\n      const req = new XMLHttpRequest();\n      req.open(\"GET\", url, true);\n      req.responseType = \"arraybuffer\";\n      req.onload = function (event) {\n        if (req.status === 200) {\n          resolve(req.response);\n        } else {\n          reject('Failed to download PDF: ' + req.status + ' ' + req.statusText);\n        }\n      };\n      req.onerror = function (err) {\n        reject(err);\n      };\n      req.send();\n    });\n  }\n  function createOrgNote(orgId, contents) {\n    return createNote('/orgs/' + orgId + '/notes', contents);\n  }\n  function createTestCaseNote(testCaseId, contents) {\n    return createNote('/test-cases/' + testCaseId + '/notes', contents);\n  }\n  function createTestConfNote(testConfId, contents) {\n    return createNote('/test-confs/' + testConfId + '/notes', contents);\n  }\n  function createExecutionNote(execId, contents) {\n    return createNote('/executions/' + execId + '/notes', contents);\n  }\n  function createScriptNote(scriptId, contents) {\n    return createNote('/scripts/' + scriptId + '/notes', contents);\n  }\n  function createNote(path, contents) {\n    return $.ajax({\n      type: \"POST\",\n      url: _lib.default.toUrl(path),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        noteType: 'Description',\n        contents: contents\n      }),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function updateNote(noteId, contents) {\n    return $.ajax({\n      type: \"PUT\",\n      url: _lib.default.toUrl(\"/notes/\" + noteId),\n      contentType: \"application/json; charset=utf-8\",\n      data: JSON.stringify({\n        contents: contents\n      }),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function deleteNote(noteId) {\n    return $.ajax({\n      type: \"DELETE\",\n      url: _lib.default.toUrl(\"/notes/\" + noteId),\n      dataType: \"json\"\n    }).then(null, _lib.default.fail);\n  }\n  function loadOrgResources(orgId, text) {\n    return $.ajax({\n      type: \"GET\",\n      url: _lib.default.toUrl(\"/orgs/\" + orgId + \"/resources\"),\n      data: {\n        text\n      },\n      dataType: \"json\"\n    });\n  }\n  var _default = _exports.default = {\n    getServerTime: getServerTime,\n    getTestCase: getTestCase,\n    getTestCaseConfs: getTestCaseConfs,\n    getConfUpdates: getConfUpdates,\n    getMetricDefs: getMetricDefs,\n    updateMetricDefs: updateMetricDefs,\n    tryItOut: tryItOut,\n    getTokenContent: getTokenContent,\n    getPublicResults: getPublicResults,\n    createTestCase: createTestCase,\n    updateTestCase: updateTestCase,\n    updateTestCasePath: updateTestCasePath,\n    deleteTestCase: deleteTestCase,\n    deleteTestCaseFolder: deleteTestCaseFolder,\n    createTestConfiguration: createTestConfiguration,\n    deleteTestConfiguration: deleteTestConfiguration,\n    updateTestConfiguration: updateTestConfiguration,\n    updateTestConfigurationName: updateTestConfigurationName,\n    updateTestConfigurationDashboard: updateTestConfigurationDashboard,\n    updateTestCaseDashboard: updateTestCaseDashboard,\n    updateOrgDashboard: updateOrgDashboard,\n    createLoadTestExecution: createLoadTestExecution,\n    getLoadTestExecution: getLoadTestExecution,\n    getLoadTestExecutionIntervals: getLoadTestExecutionIntervals,\n    getLoadTestExecutionRegionIntervals: getLoadTestExecutionRegionIntervals,\n    getLoadTestExecutionSuiteRelated: getLoadTestExecutionSuiteRelated,\n    getLoadTestExecutionSuiteRelatedTests: getLoadTestExecutionSuiteRelatedTests,\n    getLoadTestExecutionRegionSuiteRelated: getLoadTestExecutionRegionSuiteRelated,\n    getLoadTestExecutionRegionSuiteRelatedTests: getLoadTestExecutionRegionSuiteRelatedTests,\n    getSuiteTestSummaryErrors: getSuiteTestSummaryErrors,\n    getRegionSuiteTestSummaryErrors: getRegionSuiteTestSummaryErrors,\n    getLoadTestExecutionOutputFiles: getLoadTestExecutionOutputFiles,\n    getLoadTestExecutionResult: getLoadTestExecutionResult,\n    getLoadTestExecutionTrace: getLoadTestExecutionTrace,\n    getLoadTestExecutionTraces: getLoadTestExecutionTraces,\n    getLoadTestExecutionRegionTraces: getLoadTestExecutionRegionTraces,\n    getLoadTestSummaryHistory: getLoadTestSummaryHistory,\n    getLoadTestExecutionResources: getLoadTestExecutionResources,\n    getLoadTestExecutionRegionResources: getLoadTestExecutionRegionResources,\n    getLoadTestExecutionLogs: getLoadTestExecutionLogs,\n    deleteLoadTestExecution: deleteLoadTestExecution,\n    getExecutions: getExecutions,\n    getExecutionMetrics: getExecutionMetrics,\n    getTestConfiguration: getTestConfiguration,\n    getRegion: getRegion,\n    getProviders: getProviders,\n    refreshProviderInfo: refreshProviderInfo,\n    createProvider: createProvider,\n    updateProvider: updateProvider,\n    deleteProvider: deleteProvider,\n    deactivateRegion: deactivateRegion,\n    getNpmModules: getNpmModules,\n    gatewayUrlFor: gatewayUrlFor,\n    getTestCases: getTestCases,\n    createScript: createScript,\n    getScript: getScript,\n    getScripts: getScripts,\n    getScriptConfs: getScriptConfs,\n    updateScriptName: updateScriptName,\n    updateScriptParamsConfig: updateScriptParamsConfig,\n    updateScriptCode: updateScriptCode,\n    updateScriptMetadata: updateScriptMetadata,\n    updateScriptType: updateScriptType,\n    convertScriptToCode: convertScriptToCode,\n    deleteScenario: deleteScenario,\n    createDashboard: createDashboard,\n    getDashboard: getDashboard,\n    getDashboardByName: getDashboardByName,\n    getDashboards: getDashboards,\n    updateDashboardName: updateDashboardName,\n    updateDashboardConfig: updateDashboardConfig,\n    deleteDashboard: deleteDashboard,\n    loadGatewayInChrome: loadGatewayInChrome,\n    loadGatewayHttpGet: loadGatewayHttpGet,\n    createRecording: createRecording,\n    getRecording: getRecording,\n    updateRecording: updateRecording,\n    updateRecordingUrl: updateRecordingUrl,\n    deleteRecording: deleteRecording,\n    stopRecording: stopRecording,\n    stopLoadTestExecution: stopLoadTestExecution,\n    loadTraffic: loadTraffic,\n    trafficForConn: trafficForConn,\n    getLoadTestResource: getLoadTestResource,\n    getBuckets: getBuckets,\n    getBucketIntervals: getBucketIntervals,\n    getBucketHistory: getBucketHistory,\n    getLoadTestExecutionStatus: getLoadTestExecutionStatus,\n    getRecordingStatus: getRecordingStatus,\n    latestExecution: latestExecution,\n    createUser: createUser,\n    getOrg: getOrg,\n    createOrg: createOrg,\n    updateOrg: updateOrg,\n    updateOrgSettings: updateOrgSettings,\n    updateOrgTriggers: updateOrgTriggers,\n    updateOrgFilters: updateOrgFilters,\n    deleteOrg: deleteOrg,\n    addUserToOrg: addUserToOrg,\n    removeUserFromOrg: removeUserFromOrg,\n    updateOrgUserRole: updateOrgUserRole,\n    getOrgActivity: getOrgActivity,\n    getOrgActivityUntil: getOrgActivityUntil,\n    getOrgActivitySince: getOrgActivitySince,\n    getTestCaseActivity: getTestCaseActivity,\n    getTestCaseActivityUntil: getTestCaseActivityUntil,\n    getTestCaseActivitySince: getTestCaseActivitySince,\n    getTestConfActivity: getTestConfActivity,\n    getTestConfActivityUntil: getTestConfActivityUntil,\n    getTestConfActivitySince: getTestConfActivitySince,\n    getScriptActivity: getScriptActivity,\n    getScriptActivityUntil: getScriptActivityUntil,\n    getScriptActivitySince: getScriptActivitySince,\n    userExists: userExists,\n    getUser: getUser,\n    updateUser: updateUser,\n    deleteUser: deleteUser,\n    getIntegrations: getIntegrations,\n    createIntegration: createIntegration,\n    updateIntegration: updateIntegration,\n    deleteIntegration: deleteIntegration,\n    getApiKeys: getApiKeys,\n    lookupOrCreateApiKey: lookupOrCreateApiKey,\n    createApiKey: createApiKey,\n    updateApiKey: updateApiKey,\n    deleteApiKey: deleteApiKey,\n    getCards: getCards,\n    createCard: createCard,\n    updateCard: updateCard,\n    deleteCard: deleteCard,\n    getLimits: getLimits,\n    getUsage: getUsage,\n    getLinkedOrgs: getLinkedOrgs,\n    confirmEmail: confirmEmail,\n    sendEmailConfirmation: sendEmailConfirmation,\n    getToken: getToken,\n    getTokens: getTokens,\n    createToken: createToken,\n    updateToken: updateToken,\n    deleteToken: deleteToken,\n    updateRegionLoad: updateRegionLoad,\n    getAwsMetadataForProvider: getAwsMetadataForProvider,\n    getAzureMetadataForProvider: getAzureMetadataForProvider,\n    getAwsMetadata: getAwsMetadata,\n    getAzureMetadata: getAzureMetadata,\n    getAwsElasticIpsForProvider: getAwsElasticIpsForProvider,\n    getAzurePublicIpsForProvider: getAzurePublicIpsForProvider,\n    getAwsElasticIps: getAwsElasticIps,\n    getAzurePublicIps: getAzurePublicIps,\n    createSamlConfig: createSamlConfig,\n    updateSamlConfig: updateSamlConfig,\n    deleteSamlConfig: deleteSamlConfig,\n    getSubdomain: getSubdomain,\n    cancelSchedule: cancelSchedule,\n    skipSchedule: skipSchedule,\n    toggleSchedule: toggleSchedule,\n    cancelBulkSchedule: cancelBulkSchedule,\n    skipBulkSchedule: skipBulkSchedule,\n    toggleBulkSchedule: toggleBulkSchedule,\n    liveExtendExecution: liveExtendExecution,\n    liveEvent: liveEvent,\n    manualStart: manualStart,\n    getSuiteTestResult: getSuiteTestResult,\n    encrypt: encrypt,\n    getTracePackets: getTracePackets,\n    queryAgents: queryAgents,\n    getAgents: getAgents,\n    createRegion: createRegion,\n    associateAgentToRegions,\n    getAmis: getAmis,\n    getSlackChannels: getSlackChannels,\n    getTeamsData: getTeamsData,\n    exportToPdf: exportToPdf,\n    exportPublicToPdf: exportPublicToPdf,\n    createOrgNote: createOrgNote,\n    createTestCaseNote: createTestCaseNote,\n    createTestConfNote: createTestConfNote,\n    createExecutionNote: createExecutionNote,\n    createScriptNote: createScriptNote,\n    updateNote: updateNote,\n    deleteNote: deleteNote,\n    deleteTestCaseEncryptionKey,\n    getGcpMetadataForProvider,\n    loadOrgResources,\n    getOrgMembers,\n    stopAllExecutions,\n    decodeCode\n  };\n});","define(\"@testable/shared-ui/utils/session-cookie\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.clearSessionCookie = clearSessionCookie;\n  _exports.setSessionCookie = setSessionCookie;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  // Remove legacy copies before writing a session cookie. A cookie at a more\n  // specific path (or a parent domain) can otherwise hide the newly written value.\n  function clearSessionCookie(name) {\n    const hostname = window.location.hostname;\n    const domains = [undefined, hostname];\n    const labels = hostname.split('.');\n    // The browser ignores public suffixes and domains outside the current host.\n    for (let i = 1; i < labels.length - 1; i++) {\n      domains.push(labels.slice(i).join('.'));\n    }\n    const paths = new Set(['/']);\n    const segments = window.location.pathname.split('/');\n    for (let i = 1; i <= segments.length; i++) {\n      const path = segments.slice(0, i).join('/') || '/';\n      paths.add(path);\n      paths.add(path.endsWith('/') ? path : `${path}/`);\n    }\n    for (const domain of domains) {\n      for (const path of paths) {\n        // Write the expiry directly: removeCookie can skip deletion when another\n        // same-name cookie masks the value it checks first.\n        $.cookie(name, '', {\n          expires: -1,\n          path,\n          ...(domain ? {\n            domain\n          } : {})\n        });\n      }\n    }\n  }\n  function setSessionCookie(name, value, options = {}) {\n    clearSessionCookie(name);\n    $.cookie(name, value, {\n      ...options,\n      domain: window.location.hostname,\n      path: '/'\n    });\n  }\n});","define(\"@testable/shared-ui/utils/session\", [\"exports\", \"@ember/routing/route\", \"@testable/shared-ui/utils/lib\", \"@testable/shared-ui/utils/login\", \"@testable/shared-ui/utils/environment\", \"@ember/service\"], function (_exports, _route, _lib, _login, _environment, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@testable/shared-ui/utils/lib\",0,\"@testable/shared-ui/utils/login\",0,\"@testable/shared-ui/utils/environment\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const authorizedRoutes = ['reports.new', 'reports.copy', 'reports.edit', 'create-test-for-scenario', 'new', 'account.billing', 'account.integrations', 'account.organizations', 'account.organization', 'update-test', 'live-test', 'admin'];\n  const monitoringAuthorizedRoutes = ['monitors.new', 'monitors.copy', 'monitors.form', 'maintenance-windows.new', 'maintenance-windows.form', 'status-pages.new', 'status-pages.edit', 'account.billing', 'account.integrations', 'account.organizations', 'account.organization', 'account.vcs-roots'];\n  let SessionRoute = _exports.default = (_class = class SessionRoute extends _route.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"api\", _descriptor2, this);\n    }\n    async beforeModel(transition) {\n      let _this = this;\n      if (_environment.config.requireAccessCode && _.isEmpty(_login.default.getAccessCodeCookie())) {\n        this.router.transitionTo('access');\n      } else if (!_environment.config.currentUser.isLoggedIn) {\n        let loginPromise = _login.default.userInfoFromSession(_environment.config.currentUser, transition.to.queryParams.sid, transition.to.queryParams.org);\n        if (loginPromise) {\n          return loginPromise.then(async function (result) {\n            if (!_environment.config.currentUser.isLoggedIn) {\n              transition.abort();\n              _this.transitionToLogin();\n              return;\n            }\n            await _this.ensureMonitoringAccess();\n            if (_environment.config.currentUser.isNoPlan) {\n              if (transition.to.name === 'no-plan') return;\n              _this.transitionToNoPlan(transition);\n              return;\n            } else if (transition.to.name === 'no-plan') {\n              _this.router.transitionTo('index');\n              return;\n            }\n            _this.handleAuthorizedRoute(transition);\n            _lib.default.trackEvent('login');\n            if (!_environment.config.isMonitoring) {\n              await _this.api.browserManager.getAllBrowsers();\n            }\n            return result;\n          });\n        } else {\n          _this.transitionToLogin();\n        }\n      } else {\n        await this.ensureMonitoringAccess();\n        if (_environment.config.currentUser.isNoPlan) {\n          if (transition.to.name === 'no-plan') return;\n          _this.transitionToNoPlan(transition);\n          return;\n        } else if (transition.to.name === 'no-plan') {\n          _this.router.transitionTo('index');\n          return;\n        }\n        _this.handleAuthorizedRoute(transition);\n      }\n    }\n    async ensureMonitoringAccess() {\n      const user = _environment.config.currentUser;\n      if (!_environment.config.isMonitoring || !user.isLoggedIn || user.isAdmin) return;\n      if (!user.isNoPlan && user.org?.account?.appAccess?.monitoring !== false) return;\n\n      // Share a single attempt across route hooks. A fresh login/org selection can try again.\n      const key = `${user.sid}:${user.orgId}`;\n      if (user.monitoringActivationKey === key) return user.monitoringActivationPromise;\n      user.monitoringActivationKey = key;\n      user.monitoringActivationPromise = this.activateMonitoring(user, user.orgId);\n      return user.monitoringActivationPromise;\n    }\n    async activateMonitoring(user, orgId) {\n      try {\n        const result = await this.api.billing.activateMonitoring(orgId);\n        if (user.orgId !== orgId) return;\n        if (!result.active) {\n          user.setProperties({\n            isNoPlan: _environment.config.testingAppUrl,\n            monitoringActivationError: result.message\n          });\n          return;\n        }\n        await _login.default.userInfoFromSession(user, user.sid, orgId);\n        user.setProperties({\n          isNoPlan: null,\n          monitoringActivationError: null\n        });\n        if (result.created) _lib.default.info('You’re on Monitoring Free.');\n      } catch (e) {\n        if (user.orgId !== orgId) return;\n        user.setProperties({\n          isNoPlan: _environment.config.testingAppUrl,\n          monitoringActivationError: 'Unable to enable free Monitoring. Please reload to retry or contact support@testable.io.'\n        });\n      }\n    }\n    afterModel(model, transition) {\n      if (!_environment.config.currentUser.isLoggedIn) {\n        this.transitionToLogin();\n      }\n    }\n    handleAuthorizedRoute(transition) {\n      if (!_environment.config.currentUser.isViewer) return;\n      const toRoute = transition.to.name;\n      const restrictedRoutes = _environment.config.isMonitoring ? monitoringAuthorizedRoutes : authorizedRoutes;\n      const isRestricted = restrictedRoutes.includes(toRoute) || restrictedRoutes.some(item => toRoute.includes(item));\n      if (isRestricted) {\n        if (!_environment.config.isMonitoring && toRoute === 'update-test') {\n          this.router.transitionTo('loadTest', transition.to.params.confId);\n        } else {\n          const routes = toRoute.split('.');\n          let transitionTo = routes.length > 1 ? routes[0] : 'index';\n          this.router.transitionTo(transitionTo);\n        }\n      }\n    }\n    transitionToNoPlan(transition) {\n      transition.abort();\n      this.router.transitionTo('no-plan', {\n        queryParams: {\n          redirectUrl: _environment.config.currentUser.isNoPlan\n        }\n      });\n    }\n    transitionToLogin() {\n      if (window.location.pathname !== '/login') {\n        const redirect = _environment.config.currentUser.isNoPlan || window.location.pathname.includes('/no-plan') ? null : encodeURIComponent(window.location.pathname + window.location.search);\n        this.router.transitionTo('login', {\n          queryParams: {\n            redirect: redirect\n          }\n        });\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"api\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"@testable/shared-ui/utils/starts-with-key-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  /* Map that lets you find items that start with a key extracted from items\n  */\n  class StartsWithKeyMap {\n    constructor(items, getKey) {\n      this.items = items;\n      this.getKey = getKey;\n      this.keyedItems = new Map();\n      for (let i = 0; i < items.length; i++) {\n        this._index(items[i]);\n      }\n    }\n    add(item) {\n      if (item) {\n        this.items.push(item);\n        this._index(item);\n      }\n    }\n    find(text) {\n      if (text && text.length > 0 && this.items.length > 0) {\n        for (let i = this.minLength; i <= text.length; i++) {\n          const candidateKey = text.substring(0, i);\n          const candidate = this.keyedItems.get(candidateKey);\n          if (candidate) {\n            return candidate;\n          }\n        }\n      }\n      return null;\n    }\n    _index(item) {\n      if (item) {\n        const key = this.getKey(item);\n        if (key) {\n          if (!this.minLength || key.length < this.minLength) {\n            this.minLength = key.length;\n          }\n          this.keyedItems.set(key, item);\n        }\n      }\n    }\n  }\n  _exports.default = StartsWithKeyMap;\n});","define(\"@testable/shared-ui/utils/status-page\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const LIGHT_THEME_COLORS = {\n    headerBackgroundColor: '#151a26',\n    headerFontColor: '#ffffff',\n    linkColor: '#0d6efd',\n    bodyTextColor: '#212529'\n  };\n  const DARK_THEME_COLORS = {\n    headerBackgroundColor: '#3f484c',\n    headerFontColor: '#ffffff',\n    linkColor: '#6ea8fe',\n    bodyTextColor: '#dee2e6'\n  };\n  const DEFAULT_DATA_SETTINGS = {\n    url: '',\n    showPaused: false,\n    showMonitorDetails: false,\n    showUptimePercentage: true,\n    showUptimeBarChart: true,\n    showMetricChart: true,\n    showOverallStats: true,\n    showLastStateChange: true,\n    showIncidents: true,\n    showIncidentDetails: true,\n    showMonitorDetailsPage: true,\n    organizeByFolderAndGroup: false,\n    exportCalendar: true,\n    showDescriptions: false,\n    announcements: false\n  };\n  const DEFAULT_DISPLAY_SETTINGS = {\n    layout: 'wide',\n    logoPosition: 'left',\n    theme: 'light',\n    font: 'system',\n    ...LIGHT_THEME_COLORS,\n    allowRobots: true,\n    defaultHistory: {\n      incidents: '7d',\n      uptime: '90d',\n      announcements: '7d',\n      metrics: '30d'\n    }\n  };\n  const FONT_OPTIONS = [{\n    value: 'system',\n    label: 'System Default',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif'\n  }, {\n    value: 'inter',\n    label: 'Inter',\n    fontFamily: '\"Inter\", sans-serif'\n  }, {\n    value: 'roboto',\n    label: 'Roboto',\n    fontFamily: '\"Roboto\", sans-serif'\n  }, {\n    value: 'open-sans',\n    label: 'Open Sans',\n    fontFamily: '\"Open Sans\", sans-serif'\n  }, {\n    value: 'lato',\n    label: 'Lato',\n    fontFamily: '\"Lato\", sans-serif'\n  }, {\n    value: 'poppins',\n    label: 'Poppins',\n    fontFamily: '\"Poppins\", sans-serif'\n  }, {\n    value: 'montserrat',\n    label: 'Montserrat',\n    fontFamily: '\"Montserrat\", sans-serif'\n  }];\n  const HISTORY_ROWS = [{\n    key: 'incidents',\n    label: 'Incidents',\n    defaultValue: '7d'\n  }, {\n    key: 'uptime',\n    label: 'Uptime',\n    defaultValue: '90d'\n  }, {\n    key: 'announcements',\n    label: 'Announcements',\n    defaultValue: '7d'\n  }, {\n    key: 'metrics',\n    label: 'Metrics',\n    defaultValue: '30d'\n  }];\n  var _default = _exports.default = {\n    LIGHT_THEME_COLORS,\n    DARK_THEME_COLORS,\n    DEFAULT_DATA_SETTINGS,\n    DEFAULT_DISPLAY_SETTINGS,\n    FONT_OPTIONS,\n    HISTORY_ROWS\n  };\n});","define(\"@testable/shared-ui/utils/suite-utils\", [\"exports\", \"@testable/shared-ui/utils/lib\", \"tracked-built-ins\"], function (_exports, _lib, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/lib\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  const maxTests = 100;\n  function getChildren(testResults, parentUuid) {\n    return testResults.filter(test => test.parentUuid === parentUuid).map(test => ({\n      ...test,\n      children: getChildren(testResults, test.uuid)\n    }));\n  }\n  function calculateSuiteResultsSummary(suiteResults, hierarchy) {\n    return _.map(suiteResults, function (suiteResult) {\n      const eachSuiteResult = {\n        ...suiteResult\n      };\n      let testResults = eachSuiteResult.testResults;\n      let duration = 0;\n      let totalTestResults = eachSuiteResult.testResults.length;\n      if (hierarchy) {\n        testResults = getChildren(suiteResult.testResults, null);\n        eachSuiteResult.testResults = testResults;\n        duration = testResults.reduce((sum, level) => sum + level.duration, 0);\n        totalTestResults = testResults.length;\n      }\n      const summary = {\n        passed: 0,\n        failed: 0,\n        skipped: 0,\n        na: 0,\n        pending: 0,\n        retried: 0,\n        images: 0,\n        suiteResult: eachSuiteResult,\n        totalTestResults,\n        duration\n      };\n      _.forEach(testResults, function (testResult) {\n        switch (testResult.state) {\n          case 'Passed':\n            summary.passed += 1;\n            break;\n          case 'Failed':\n            summary.failed += 1;\n            break;\n          case 'Skipped':\n            summary.skipped += 1;\n            break;\n          case 'NA':\n            summary.na += 1;\n            break;\n          case 'Retried':\n            summary.retried += 1;\n            break;\n          default:\n            summary.pending += 1;\n            break;\n        }\n        summary.images += testResult.screenshots && testResult.screenshots.length || 0;\n      });\n      return summary;\n    });\n  }\n  function aggregateSuiteSummaries(suiteResultSummaries) {\n    const answer = {\n      duration: 0,\n      suites: 0,\n      tests: 0,\n      passed: 0,\n      failed: 0,\n      skipped: 0,\n      pending: 0,\n      retried: 0,\n      na: 0,\n      images: 0\n    };\n    _.forEach(suiteResultSummaries, function (summary) {\n      answer.suites += 1;\n      answer.duration += summary.suiteResult.duration;\n      answer.tests += summary.suiteResult.testResults.length;\n      answer.passed += summary.passed;\n      answer.failed += summary.failed;\n      answer.skipped += summary.skipped;\n      answer.pending += summary.pending;\n      answer.retried += summary.retried;\n      answer.na += summary.na;\n      answer.images += summary.images;\n    });\n    return answer;\n  }\n  function aggregateAllSuiteSummaries(suiteSummaries) {\n    const answer = {\n      duration: 0,\n      suites: 0,\n      tests: 0,\n      passed: 0,\n      failed: 0,\n      skipped: 0,\n      pending: 0,\n      retried: 0,\n      na: 0,\n      images: 0\n    };\n    _.forEach(suiteSummaries, function (summary) {\n      answer.suites = summary.suites;\n      answer.duration += summary.duration;\n      answer.tests = summary.tests;\n      answer.passed += summary.passed;\n      answer.failed += summary.failed;\n      answer.skipped += summary.skipped;\n      answer.pending += summary.pending;\n      answer.retried += summary.retried;\n      answer.na += summary.na;\n      answer.images += summary.images;\n    });\n    return answer;\n  }\n  function toDisplaySummary(summary, comparisons, isBaseline) {\n    return {\n      id: summary.id,\n      suite: summary.suite,\n      suiteId: summary.suiteId,\n      durationMean: _lib.default.toText(summary.durationMean, comparisons.durationMean, 'ms', false),\n      count: _lib.default.toText(summary.count, comparisons.count, '', false),\n      testCount: _lib.default.toText(summary.testCount, comparisons.testCount, '', false),\n      statePassed: printFieldSummary(summary, comparisons, 'statePassed'),\n      stateFailed: printFieldSummary(summary, comparisons, 'stateFailed'),\n      stateFailedCount: summary.stateFailed,\n      stateSkipped: summary.stateSkipped > 0 ? printFieldSummary(summary, comparisons, 'stateSkipped') : null,\n      stateNa: summary.stateNa > 0 ? printFieldSummary(summary, comparisons, 'stateNa') : null,\n      stateRetried: summary.stateRetried > 0 ? printFieldSummary(summary, comparisons, 'stateRetried') : null,\n      stateInProgress: summary.stateInProgress > 0 ? printFieldSummary(summary, comparisons, 'stateInProgress') : null,\n      images: summary.images > 0 ? printFieldSummary(summary, comparisons, 'images') : null,\n      files: summary.files > 0 && summary.files !== summary.images ? printFieldSummary(summary, comparisons, 'files') : null,\n      firstStartedAt: summary.firstStartedAt,\n      testSummaryCount: summary.testSummaryCount,\n      showLoadMore: showLoadMoreButton(summary.testSummaries, summary.testSummaryCount),\n      isLoading: false,\n      testSummaries: toTestSummaries(summary.testSummaries || [], isBaseline)\n    };\n  }\n  function toTestSummaries(testSummaries, isBaseline = false) {\n    return new _trackedBuiltIns.TrackedArray(_.map(testSummaries || [], testSummary => {\n      addPercentsToSummary(testSummary);\n      const comparisons = isBaseline ? {} : toChangeSummaryComparison(testSummary, testSummary.comparisons);\n      return {\n        suiteTest: testSummary.suiteTest,\n        suiteTestId: testSummary.suiteTestId,\n        firstStartedAt: testSummary.firstStartedAt,\n        count: testSummary.count,\n        durationMean: _lib.default.toText(testSummary.durationMean, comparisons.durationMean, 'ms', false),\n        statePassed: printFieldSummary(testSummary, comparisons, 'statePassed'),\n        baselineStatePassed: printFieldSummary(testSummary, comparisons, 'statePassed', false),\n        stateFailed: printFieldSummary(testSummary, comparisons, 'stateFailed'),\n        baselineStateFailed: printFieldSummary(testSummary, comparisons, 'stateFailed', false),\n        stateFailedCount: testSummary.stateFailed || 0,\n        stateSkipped: testSummary.stateSkipped > 0 ? printFieldSummary(testSummary, comparisons, 'stateSkipped') : null,\n        stateNa: testSummary.stateNa > 0 ? printFieldSummary(testSummary, comparisons, 'stateNa') : null,\n        stateRetried: testSummary.stateRetried > 0 ? printFieldSummary(testSummary, comparisons, 'stateRetried') : null,\n        hasChildren: testSummary.hasChildren,\n        stateInProgress: testSummary.stateInProgress > 0 ? printFieldSummary(testSummary, comparisons, 'stateInProgress') : null,\n        images: testSummary.images > 0 ? printFieldSummary(testSummary, comparisons, 'images') : null,\n        imagesCount: testSummary.images || 0,\n        files: testSummary.files > 0 ? printFieldSummary(testSummary, comparisons, 'files') : null\n      };\n    }));\n  }\n  function showLoadMoreButton(testSummaries, testSummaryCount) {\n    return testSummaries && testSummaryCount > testSummaries.length && testSummaryCount > maxTests;\n  }\n  function toChangeSummaryComparison(summary, comparisons) {\n    if (_.isString(comparisons) && comparisons.length > 0) {\n      comparisons = JSON.parse(comparisons);\n    }\n    const baseline = {};\n    if (comparisons && comparisons.historyCount > 0) {\n      const historyCount = comparisons.historyCount;\n      _.forEach(comparisons, (val, key) => {\n        if (key !== 'historyCount' && _.isNumber(val)) {\n          baseline[key] = val / historyCount;\n        }\n      });\n    }\n    addPercentsToSummary(baseline);\n    const answer = {};\n    _.forEach(summary, (val, key) => {\n      if (_.isNumber(val) && baseline[key] > 0) {\n        answer[key] = val / baseline[key] - 1;\n      }\n    });\n    return answer;\n  }\n  function printFieldSummary(summary, comparisons, key, comparison = true) {\n    let answer = _lib.default.toText(summary[key], null, '', false);\n    const percentKey = key + 'Percent';\n    if (_.isNumber(summary[percentKey])) {\n      if (comparison) {\n        answer += ' (' + _lib.default.toText(100 * summary[percentKey], comparisons[percentKey], '%', false) + ')';\n      } else {\n        answer += ' (' + _lib.default.toText(100 * summary[percentKey], '', '%', false) + ')';\n      }\n    }\n    return answer;\n  }\n  function addPercentsToSummary(summary) {\n    const count = summary.testCount || summary.count;\n    if (count > 0) {\n      summary.statePassedPercent = (summary.statePassed || 0) / count;\n      summary.stateFailedPercent = (summary.stateFailed || 0) / count;\n      summary.stateSkippedPercent = (summary.stateSkipped || 0) / count;\n      summary.stateNaPercent = (summary.stateNa || 0) / count;\n      summary.stateRetriedPercent = (summary.stateRetried || 0) / count;\n      summary.stateInProgressPercent = (summary.stateInProgress || 0) / count;\n    }\n  }\n  var _default = _exports.default = {\n    calculateSuiteResultsSummary: calculateSuiteResultsSummary,\n    aggregateSuiteSummaries: aggregateSuiteSummaries,\n    aggregateAllSuiteSummaries: aggregateAllSuiteSummaries,\n    toChangeSummaryComparison: toChangeSummaryComparison,\n    addPercentsToSummary: addPercentsToSummary,\n    toDisplaySummary: toDisplaySummary,\n    showLoadMoreButton,\n    toTestSummaries,\n    maxTests\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-java\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const JavaTemplates = {};\n  JavaTemplates['skeleton'] = `import io.testable.java.*;\n\nimport java.io.*;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class TestClass {\n\n  public static void main(String[] args) throws Exception {\n    URL url = new URL(\"http://sample.testable.io/stocks/IBM\");\n    HttpURLConnection con = (HttpURLConnection) url.openConnection();\n\n    con.setRequestMethod(\"GET\");\n\n    Reader streamReader = new InputStreamReader(con.getInputStream());\n\n    BufferedReader in = new BufferedReader(streamReader);\n    String inputLine;\n    StringBuilder content = new StringBuilder();\n    while ((inputLine = in.readLine()) != null) {\n      content.append(inputLine);\n    }\n\n    in.close();\n\n    con.disconnect();\n    System.out.println(content);\n  }\n\n}`;\n  JavaTemplates['url'] = 'URL url = new URL(\"http://sample.testable.io/stocks/IBM\");';\n  JavaTemplates['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  JavaTemplates['logging-fatal'] = 'Testable.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  JavaTemplates['logging-error'] = 'Testable.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  JavaTemplates['logging-info'] = 'Testable.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  JavaTemplates['logging-debug'] = 'Testable.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  JavaTemplates['logging-trace'] = 'Testable.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  JavaTemplates['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  JavaTemplates['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  JavaTemplates['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  JavaTemplates['metrics-timing'] = `Testable.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  JavaTemplates['metrics-counter'] = `Testable.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  JavaTemplates['metrics-histogram'] = `Testable.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  JavaTemplates['metrics-metered'] = `Testable.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  JavaTemplates['start-test'] = 'TestableTest test = Testable.startTest(\"Google Related\");';\n  JavaTemplates['finish-test'] = 'test.finish();';\n  JavaTemplates['test-step'] = `test.startStep(\"Open google home page\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  JavaTemplates['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n    // Code for running the test step goes here\n  }\n});`;\n  const JavaTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }]\n  }];\n  var _default = _exports.default = {\n    java: JavaTemplates,\n    javaOptions: JavaTemplateOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-junit\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const JUnitTemplates = {};\n  JUnitTemplates['skeleton'] = `import io.testable.java.*;\nimport org.junit.Test;\n\nimport java.io.*;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertTrue;\n\npublic class TestClass {\n\n  @Test\n  public void getSampleQuote() throws Exception {\n    URL url = new URL(\"http://sample.testable.io/stocks/IBM\");\n    HttpURLConnection con = (HttpURLConnection) url.openConnection();\n\n    con.setRequestMethod(\"GET\");\n\n    Reader streamReader = new InputStreamReader(con.getInputStream());\n\n    BufferedReader in = new BufferedReader(streamReader);\n    String inputLine;\n    StringBuilder content = new StringBuilder();\n    while ((inputLine = in.readLine()) != null) {\n      content.append(inputLine);\n    }\n\n    in.close();\n\n    int status = con.getResponseCode();\n    assertEquals(\"status code incorrect\", status, 200);\n\n    con.disconnect();\n    System.out.println(content);\n  }\n}`;\n  JUnitTemplates['url'] = 'URL url = new URL(\"http://sample.testable.io/stocks/IBM\");';\n  JUnitTemplates['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  JUnitTemplates['logging-fatal'] = 'Testable.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  JUnitTemplates['logging-error'] = 'Testable.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  JUnitTemplates['logging-info'] = 'Testable.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  JUnitTemplates['logging-debug'] = 'Testable.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  JUnitTemplates['logging-trace'] = 'Testable.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  JUnitTemplates['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['metrics-timing'] = `Testable.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  JUnitTemplates['metrics-counter'] = `Testable.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  JUnitTemplates['metrics-histogram'] = `Testable.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  JUnitTemplates['metrics-metered'] = `Testable.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  JUnitTemplates['start-test'] = 'TestableTest test = Testable.startTest(\"Google Related\");';\n  JUnitTemplates['finish-test'] = 'test.finish();';\n  JUnitTemplates['test-step'] = `test.startStep(\"Open google home page\");\ndriver.get(\"https://www.google.com\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  JUnitTemplates['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n    // Code for running the test step goes here\n  }\n});`;\n  const JunitemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }]\n  }];\n  var _default = _exports.default = {\n    junit: JUnitTemplates,\n    junitOptions: JunitemplateOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-selenium-junit\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const JUnitTemplates = {};\n  JUnitTemplates['skeleton'] = `import org.junit.Test;\n\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeOptions;\n\nimport io.testable.selenium.*;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertTrue;\n\npublic class TestClass {\n\n  @Test\n  public void getSampleQuote() throws Exception {\n    ChromeOptions options = new ChromeOptions();\n    WebDriver driver = TestableSelenium.newWebDriver(options);\n    driver.get(\"https://www.google.com\");\n    TestableSelenium.takeScreenshot(driver, \"HomePage.png\");\n\n    assertEquals(\"Page Title is \", driver.getTitle(), \"Google\");\n\n    driver.close();\n  }\n\n}`;\n  JUnitTemplates['new-driver'] = 'WebDriver driver = TestableSelenium.newWebDriver(options);';\n  JUnitTemplates['url'] = 'driver.get(\"https://www.google.com\");';\n  JUnitTemplates['screenshot'] = 'TestableSelenium.takeScreenshot(driver, \"HomePage.png\");';\n  JUnitTemplates['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  JUnitTemplates['logging-fatal'] = 'TestableSelenium.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  JUnitTemplates['logging-error'] = 'TestableSelenium.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  JUnitTemplates['logging-info'] = 'TestableSelenium.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  JUnitTemplates['logging-debug'] = 'TestableSelenium.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  JUnitTemplates['logging-trace'] = 'TestableSelenium.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  JUnitTemplates['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  JUnitTemplates['metrics-timing'] = `TestableSelenium.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  JUnitTemplates['metrics-counter'] = `TestableSelenium.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  JUnitTemplates['metrics-histogram'] = `TestableSelenium.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  JUnitTemplates['metrics-metered'] = `TestableSelenium.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  JUnitTemplates['perf-metrics'] = 'TestableSelenium.capturePerformanceMetrics(driver);';\n  JUnitTemplates['start-test'] = 'TestableTest test = TestableSelenium.startTest(\"Google Related\");';\n  JUnitTemplates['finish-test'] = 'test.finish();';\n  JUnitTemplates['test-step'] = `test.startStep(\"Open google home page\");\ndriver.get(\"https://www.google.com\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  JUnitTemplates['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n    driver.get(\"https://news.google.com\"); // any exception here gets logged as a test step failure\n  }\n});`;\n  const JavaTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'perf-metrics',\n      name: 'Browser performance metrics'\n    }, {\n      id: 'new-driver',\n      name: 'New WebDriver'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'script-param',\n      name: 'Script parameter'\n    }]\n  }];\n  var _default = _exports.default = {\n    seleniumJunit: JUnitTemplates,\n    seleniumJunitOptions: JavaTemplateOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-selenium-testng\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const TestNGTemplates = {};\n  TestNGTemplates['skeleton'] = `import org.testng.annotations.*;\nimport org.testng.Assert;\n\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeOptions;\n\nimport io.testable.selenium.*;\n\npublic class TestClass {\n\n  @Test\n  public void getSampleQuote() throws Exception {\n    ChromeOptions options = new ChromeOptions();\n    WebDriver driver = TestableSelenium.newWebDriver(options);\n    driver.get(\"https://www.google.com\");\n    TestableSelenium.takeScreenshot(driver, \"HomePage.png\");\n\n    Assert.assertEquals(driver.getTitle(), \"Google\");\n    driver.close();\n  }\n\n}`;\n  TestNGTemplates['new-driver'] = 'WebDriver driver = TestableSelenium.newWebDriver(options);';\n  TestNGTemplates['url'] = 'driver.get(\"https://www.google.com\");';\n  TestNGTemplates['screenshot'] = 'TestableSelenium.takeScreenshot(driver, \"HomePage.png\");';\n  TestNGTemplates['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  TestNGTemplates['logging-fatal'] = 'TestableSelenium.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  TestNGTemplates['logging-error'] = 'TestableSelenium.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  TestNGTemplates['logging-info'] = 'TestableSelenium.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  TestNGTemplates['logging-debug'] = 'TestableSelenium.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  TestNGTemplates['logging-trace'] = 'TestableSelenium.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  TestNGTemplates['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['metrics-timing'] = `TestableSelenium.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  TestNGTemplates['metrics-counter'] = `TestableSelenium.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  TestNGTemplates['metrics-histogram'] = `TestableSelenium.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  TestNGTemplates['metrics-metered'] = `TestableSelenium.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  TestNGTemplates['perf-metrics'] = 'TestableSelenium.capturePerformanceMetrics(driver);';\n  TestNGTemplates['start-test'] = 'TestableTest test = TestableSelenium.startTest(\"Google Related\");';\n  TestNGTemplates['finish-test'] = 'test.finish();';\n  TestNGTemplates['test-step'] = `test.startStep(\"Open google home page\");\ndriver.get(\"https://www.google.com\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  TestNGTemplates['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n    driver.get(\"https://news.google.com\"); // any exception here gets logged as a test step failure\n  }\n});`;\n  const JavaTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'perf-metrics',\n      name: 'Browser performance metrics'\n    }, {\n      id: 'new-driver',\n      name: 'New WebDriver'\n    }, {\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }]\n  }];\n  var _default = _exports.default = {\n    seleniumTestNG: TestNGTemplates,\n    seleniumTestNGOptions: JavaTemplateOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-selenium\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const selenium = {};\n  selenium['skeleton'] = `import org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeOptions;\n\nimport io.testable.selenium.*;\n\n/**\n * Simple example of loading Google and taking a screenshot in a way that is compatible with the Testable platform.\n */\npublic class Test {\n\n  public static void main(String[] args) throws Exception {\n    ChromeOptions options = new ChromeOptions();\n    WebDriver driver = TestableSelenium.newWebDriver(options);\n    driver.get(\"https://www.google.com\");\n    TestableSelenium.takeScreenshot(driver, \"HomePage.png\");\n    driver.close();\n  }\n\n}`;\n  selenium['new-driver'] = 'WebDriver driver = TestableSelenium.newWebDriver(options);';\n  selenium['url'] = 'driver.get(\"https://www.google.com\");';\n  selenium['screenshot'] = 'TestableSelenium.takeScreenshot(driver, \"HomePage.png\");';\n  selenium['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  selenium['logging-fatal'] = 'TestableSelenium.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  selenium['logging-error'] = 'TestableSelenium.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  selenium['logging-info'] = 'TestableSelenium.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  selenium['logging-debug'] = 'TestableSelenium.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  selenium['logging-trace'] = 'TestableSelenium.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  selenium['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  selenium['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  selenium['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  selenium['metrics-timing'] = `TestableSelenium.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  selenium['metrics-counter'] = `TestableSelenium.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  selenium['metrics-histogram'] = `TestableSelenium.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  selenium['metrics-metered'] = `TestableSelenium.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  selenium['perf-metrics'] = 'TestableSelenium.capturePerformanceMetrics(driver);';\n  selenium['start-test'] = 'TestableTest test = TestableSelenium.startTest(\"Google Related\");';\n  selenium['finish-test'] = 'test.finish();';\n  selenium['test-step'] = `test.startStep(\"Open google home page\");\ndriver.get(\"https://www.google.com\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  selenium['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n    driver.get(\"https://news.google.com\"); // any exception here gets logged as a test step failure\n  }\n});`;\n  const seleniumOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'perf-metrics',\n      name: 'Browser performance metrics'\n    }, {\n      id: 'new-driver',\n      name: 'New WebDriver'\n    }, {\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }]\n  }];\n  var _default = _exports.default = {\n    selenium,\n    seleniumOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates-testng\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const TestNGTemplates = {};\n  TestNGTemplates['skeleton'] = `import io.testable.java.*;\nimport org.testng.annotations.*;\nimport org.testng.Assert;\n\nimport java.io.*;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class TestClass {\n\n  @Test\n  public void getSampleQuote() throws Exception {\n    URL url = new URL(\"http://sample.testable.io/stocks/IBM\");\n    HttpURLConnection con = (HttpURLConnection) url.openConnection();\n\n    con.setRequestMethod(\"GET\");\n\n    Reader streamReader = new InputStreamReader(con.getInputStream());\n\n    BufferedReader in = new BufferedReader(streamReader);\n    String inputLine;\n    StringBuilder content = new StringBuilder();\n    while ((inputLine = in.readLine()) != null) {\n      content.append(inputLine);\n    }\n\n    in.close();\n\n    int status = con.getResponseCode();\n    Assert.assertEquals(200, status);\n\n    con.disconnect();\n    System.out.println(content);\n  }\n}`;\n  TestNGTemplates['url'] = 'URL url = new URL(\"http://sample.testable.io/stocks/IBM\");';\n  TestNGTemplates['script-param'] = 'System.getProperty(\"Abc\"); // script parameter Abc';\n  TestNGTemplates['logging-fatal'] = 'Testable.log(TestableLog.Level.Fatal, \"Use this to cause the entire test execution to stop as a result of an error\");';\n  TestNGTemplates['logging-error'] = 'Testable.log(TestableLog.Level.Error, \"Use this to log errors to display in the results\");';\n  TestNGTemplates['logging-info'] = 'Testable.log(TestableLog.Level.Info, \"Use this to log info statements to display in the results\");';\n  TestNGTemplates['logging-debug'] = 'Testable.log(TestableLog.Level.Debug, \"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  TestNGTemplates['logging-trace'] = 'Testable.log(TestableLog.Level.Trace, \"Only logged during a smoke test!\");';\n  TestNGTemplates['datatable-next'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.next();\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['datatable-get'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.get(2); // get the 3rd row in the file\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['datatable-random'] = `TestableCSVReader reader = new TestableCSVReader(\"credentials.csv\");\norg.apache.commons.csv.CSVRecord record = reader.random();\nSystem.out.println(record.get(\"username\"));`;\n  TestNGTemplates['metrics-timing'] = `Testable.reportMetric(TestableMetric.newTimingBuilder()\n          .withName(\"My Custom Timing\")\n          .withVal(125)\n          .withUnits(\"ms\")\n          .build());`;\n  TestNGTemplates['metrics-counter'] = `Testable.reportMetric(TestableMetric.newCounterBuilder()\n          .withName(\"My Request Counter\")\n          .withVal(1)\n          .withUnits(\"requests\")\n          .build());`;\n  TestNGTemplates['metrics-histogram'] = `Testable.reportMetric(TestableMetric.newHistogramBuilder()\n          .withName(\"Status Histogram\")\n          .withVal(1)\n          .withKey(\"Internal Server Error\")\n          .build());`;\n  TestNGTemplates['metrics-metered'] = `Testable.reportMetric(TestableMetric.newMeteredBuilder()\n          .withName(\"Browser Memory\")\n          .withVal(2342212)\n          .withKey(InetAddress.getHostName())\n          .build());`;\n  TestNGTemplates['start-test'] = 'TestableTest test = Testable.startTest(\"Google Related\");';\n  TestNGTemplates['finish-test'] = 'test.finish();';\n  TestNGTemplates['test-step'] = `test.startStep(\"Open google home page\");\ndriver.get(\"https://www.google.com\");\ntest.finishSuccessfulStep(); // or test.finishFailedStep(\"My error message\");`;\n  TestNGTemplates['test-step-with-runnable'] = `test.runStep(\"Open google news using Runnable\", new Runnable() {\n  public void run() {\n\n  }\n});`;\n  const JavaTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Java test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Assertions/Test Steps',\n    options: [{\n      id: 'start-test',\n      name: 'Start Test Suite'\n    }, {\n      id: 'finish-test',\n      name: 'Finish Test Suite'\n    }, {\n      id: 'test-step',\n      name: 'Test Step'\n    }, {\n      id: 'test-step-with-runnable',\n      name: 'Test Step Using Runnable'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }]\n  }];\n  var _default = _exports.default = {\n    testNG: TestNGTemplates,\n    testNGOptions: JavaTemplateOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/java-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/java-templates-java\", \"@testable/shared-ui/utils/templates/java-templates-junit\", \"@testable/shared-ui/utils/templates/java-templates-testng\", \"@testable/shared-ui/utils/templates/java-templates-selenium\", \"@testable/shared-ui/utils/templates/java-templates-selenium-junit\", \"@testable/shared-ui/utils/templates/java-templates-selenium-testng\"], function (_exports, _javaTemplatesJava, _javaTemplatesJunit, _javaTemplatesTestng, _javaTemplatesSelenium, _javaTemplatesSeleniumJunit, _javaTemplatesSeleniumTestng) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/java-templates-java\",0,\"@testable/shared-ui/utils/templates/java-templates-junit\",0,\"@testable/shared-ui/utils/templates/java-templates-testng\",0,\"@testable/shared-ui/utils/templates/java-templates-selenium\",0,\"@testable/shared-ui/utils/templates/java-templates-selenium-junit\",0,\"@testable/shared-ui/utils/templates/java-templates-selenium-testng\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    java: _javaTemplatesJava.default.java,\n    junit: _javaTemplatesJunit.default.junit,\n    testNG: _javaTemplatesTestng.default.testNG,\n    javaOptions: _javaTemplatesJava.default.javaOptions,\n    junitOptions: _javaTemplatesJunit.default.junitOptions,\n    testNGOptions: _javaTemplatesTestng.default.testNGOptions,\n    selenium: _javaTemplatesSelenium.default.selenium,\n    seleniumJunit: _javaTemplatesSeleniumJunit.default.seleniumJunit,\n    seleniumTestNG: _javaTemplatesSeleniumTestng.default.seleniumTestNG,\n    seleniumOptions: _javaTemplatesSelenium.default.seleniumOptions,\n    seleniumJunitOptions: _javaTemplatesSeleniumJunit.default.seleniumJunitOptions,\n    seleniumTestNGOptions: _javaTemplatesSeleniumTestng.default.seleniumTestNGOptions\n  };\n});","define(\"@testable/shared-ui/utils/templates/js-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const JsSpecTemplates = {};\n  JsSpecTemplates['url'] = 'await driver.get(\\'http://www.google.com\\');';\n  JsSpecTemplates['skeleton'] = `const webdriver = require('selenium-webdriver');\nconst util = require('util');\nconst fs = require('fs');\nconst writeFile = util.promisify(fs.writeFile);\nconst path = require('path');\n\nasync function takeScreenshot(driver, file){\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\n(async function example() {\n  global.driver = await new webdriver.Builder()\n    .withCapabilities(webdriver.Capabilities.chrome())\n    .build();\n  try {\n    await driver.get('http://www.google.com');\n    await takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));\n    await driver.wait(webdriver.until.titleIs('Google'), 10000);\n  } finally {\n    await driver.quit();\n  }\n})();`;\n  JsSpecTemplates['screenshot'] = `async function takeScreenshot(driver, file){\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\nawait takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));`;\n  JsSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  JsSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  JsSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  JsSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  JsSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  JsSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  JsSpecTemplates['delay'] = 'await driver.sleep(10000);';\n  JsSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  JsSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  JsSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  JsSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  JsSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  JsSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  JsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"webdriver-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Webdriver Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"selenium-webdriver\": \"${_versions.default.seleniumWebdriver}\"\n  }\n}`;\n  const JsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: JsSpecTemplateOptions,\n    spec: JsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/locust-templates\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const PythonFileTemplates0x = {};\n  PythonFileTemplates0x['url'] = 'self.client.get(\"/stocks/IBM\")';\n  PythonFileTemplates0x['skeleton'] = `from locust import HttpLocust, TaskSet, between, task, events\n\nclass MyTaskSet(TaskSet):\n  @task(1)\n  def ibm(self):\n    self.client.get(\"/stocks/IBM\")\n\nclass MyLocust(HttpLocust):\n  wait_time = between(5, 15)\n  task_set = MyTaskSet`;\n  const PythonFileTemplates1x = {};\n  PythonFileTemplates1x['url'] = 'self.client.get(\"/stocks/IBM\")';\n  PythonFileTemplates1x['skeleton'] = `from locust import HttpUser, TaskSet, between, task, events\n\nclass MyTaskSet(TaskSet):\n  @task(1)\n  def ibm(self):\n    self.client.get(\"/stocks/IBM\")\n\nclass MyLocust(HttpUser):\n  wait_time = between(5, 15)\n  tasks = [MyTaskSet]`;\n  const PythonFileTemplates = {};\n  PythonFileTemplates['url'] = 'self.client.get(\"/stocks/IBM\")';\n  PythonFileTemplates['skeleton'] = `from locust import HttpUser, between, task, events\n\nclass MyLocust(HttpUser):\n  wait_time = between(5, 15)\n\n  @task\n  def ibm(self):\n    self.client.get(\"/stocks/IBM\")\n\n  @task\n  def aapl(self):\n    self.client.get(\"/stocks/AAPL\")`;\n  const JavaFileTemplates = {};\n  JavaFileTemplates['skeleton'] = `import com.github.myzhan.locust4j.Locust;\nimport com.github.myzhan.locust4j.AbstractTask;\n\npublic class Main {\n\n  public static void main(String[] args) {\n\n    // setup locust, LOCUST_MASTER_* sys props must be used when run on Testable\n    Locust locust = Locust.getInstance();\n    locust.setMasterHost(System.getProperty(\"LOCUST_MASTER_HOST\", \"127.0.0.1\"));\n    locust.setMasterPort(Integer.getInteger(\"LOCUST_MASTER_PORT\", 5557));\n\n    locust.run(new TaskAlwaysSuccess());\n  }\n\n  private static class TaskAlwaysSuccess extends AbstractTask {\n\n    public int weight = 20;\n    public String name = \"success\";\n\n    public TaskAlwaysSuccess() {\n    }\n\n    @Override\n    public int getWeight() {\n      return this.weight;\n    }\n\n    @Override\n    public String getName() {\n      return this.name;\n    }\n\n    @Override\n    public void execute() {\n      try {\n        long startTime = System.currentTimeMillis();\n        Thread.sleep(1000);\n        long elapsed = System.currentTimeMillis() - startTime;\n        Locust.getInstance().recordSuccess(\"http\", \"success\", elapsed, 1);\n      } catch (Exception ex) {\n        ex.printStackTrace();\n      }\n    }\n  }\n}`;\n  const PythonFileTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Locustfile skeleton'\n    }]\n  }];\n  const JavaFileTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'skeleton',\n      name: 'Main class skeleton'\n    }]\n  }];\n  var _default = _exports.default = {\n    JavaFileTemplateOptions,\n    PythonFileTemplateOptions,\n    JavaFileTemplates,\n    PythonFileTemplates0x,\n    PythonFileTemplates1x,\n    PythonFileTemplates\n  };\n});","define(\"@testable/shared-ui/utils/templates/mocha-templates-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = 'await driver.get(\\'http://www.google.com\\');';\n  MochaSpecTemplates['skeleton'] = `import * as webdriver from 'selenium-webdriver';\nimport * as util from 'util';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { expect } from 'chai';\n\nconst writeFile = util.promisify(fs.writeFile);\n\nlet takeScreenshot = async (driver, file) => {\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\ndescribe('DefaultTest', () => {\n  let driver = new webdriver.Builder()\n    .withCapabilities(webdriver.Capabilities.chrome())\n    .build();\n\n  it('should go to google.com and check title', async () => {\n    await driver.get('https://www.google.com');\n    await takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));\n    const title = await driver.getTitle();\n    expect(title).to.equal('Google');\n  });\n\n  after(async () => driver.quit());\n});`;\n  MochaSpecTemplates['screenshot'] = `let takeScreenshot = async (driver, file) => {\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\nawait takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));`;\n  MochaSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  MochaSpecTemplates['delay'] = `await driver.sleep(10000);`;\n  MochaSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  MochaSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  MochaSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  MochaSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"webdriver-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Webdriver Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/mocha\": \"${_versions.default.types.mocha}\",\n    \"@types/chai\": \"${_versions.default.types.chai}\",\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"selenium-webdriver\": \"${_versions.default.seleniumWebdriver}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\", \"@types/mocha\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson,\n    tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/mocha-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = 'await driver.get(\\'http://www.google.com\\');';\n  MochaSpecTemplates['skeleton'] = `const webdriver = require('selenium-webdriver');\nconst util = require('util');\nconst fs = require('fs');\nconst writeFile = util.promisify(fs.writeFile);\nconst path = require('path');\nconst { expect } = require('chai');\n\nasync function takeScreenshot(driver, file){\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\ndescribe('DefaultTest', () => {\n  let driver = new webdriver.Builder()\n    .withCapabilities(webdriver.Capabilities.chrome())\n    .build();\n\n  it('should go to google.com and check title', async () => {\n    await driver.get('https://www.google.com');\n    await takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));\n    const title = await driver.getTitle();\n    expect(title).to.equal('Google');\n  });\n\n  after(async () => driver.quit());\n});`;\n  MochaSpecTemplates['screenshot'] = `async function takeScreenshot(driver, file){\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\nawait takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));`;\n  MochaSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  MochaSpecTemplates['delay'] = 'await driver.sleep(10000);';\n  MochaSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  MochaSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  MochaSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  MochaSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"webdriver-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Webdriver Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"selenium-webdriver\": \"${_versions.default.seleniumWebdriver}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/playwright-mocha-templates-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = 'await page.goto(\\'http://www.google.com\\');';\n  MochaSpecTemplates['skeleton'] = `import { chromium } from 'playwright';\nimport { expect } from 'chai';\n\nbefore (async function () {\n  global.browser = await chromium.launch();\n});\n\ndescribe('DefaultTest', () => {\n  it('should go to google.com and check title', async () => {\n    const page = await browser.newPage();\n    await page.goto('https://www.google.com');\n    await page.screenshot({path: 'screenshot.png'});\n    const title = await page.title();\n    expect(title).to.equal('Google');\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['screenshot'] = `await page.goto('https://www.google.com');\nawait page.screenshot({path: 'screenshot.png'});`;\n  MochaSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  MochaSpecTemplates['delay'] = 'await page.waitForTimeout(10000);';\n  MochaSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  MochaSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  MochaSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  MochaSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"playwright-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Playwright Typescript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/mocha\": \"${_versions.default.types.mocha}\",\n    \"@types/chai\": \"${_versions.default.types.chai}\",\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"playwright\": \"\\${playwrightVersion}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\", \"@types/mocha\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson,\n    tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/playwright-mocha-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = `await page.goto('http://www.google.com');`;\n  MochaSpecTemplates['skeleton'] = `const { chromium } = require('playwright');\nconst { expect } = require('chai');\n\nbefore (async function () {\n  global.browser = await chromium.launch();\n});\n\ndescribe('DefaultTest', () => {\n  it('should go to google.com and check title', async () => {\n    const page = await browser.newPage();\n    await page.goto('https://www.google.com');\n    await page.screenshot({path: 'screenshot.png'});\n    const title = await page.title();\n    expect(title).to.equal('Google');\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['loadInChromeSkeleton'] = `const { chromium } = require('playwright');\n\nbefore (async function () {\n  global.browser = await chromium.launch();\n});\n\ndescribe('Page Load', () => {\n  it('should load \\${url}', async () => {\n    const page = await browser.newPage();\n    await page.goto('\\${url}');\n    await page.screenshot({path: 'screenshot.png'});\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['screenshot'] = `await page.goto('https://www.google.com');\nawait page.screenshot({path: 'screenshot.png'});`;\n  MochaSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  MochaSpecTemplates['delay'] = `await page.waitForTimeout(10000);`;\n  MochaSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  MochaSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  MochaSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  MochaSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"playwright-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Playwright + Mocha Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"playwright\": \"\\${playwrightVersion}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/playwright-template-py\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const testExample = `import re\nimport pytest\nfrom playwright.sync_api import Page, expect, BrowserType\nfrom urllib.parse import urlencode\n\ndef test_has_title(page: Page):\n  page.goto(\"https://playwright.dev/\")\n\n  # Expect a title \"to contain\" a substring.\n  expect(page).to_have_title(re.compile(\"Playwright\"))\n`;\n  var _default = _exports.default = {\n    testExample\n  };\n});","define(\"@testable/shared-ui/utils/templates/playwright-template-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const TsSpecTemplates = {};\n  TsSpecTemplates['url'] = 'await page.goto(\\'http://www.google.com\\');';\n  TsSpecTemplates['skeleton'] = `import { chromium } from 'playwright';\n\n(async () => {\n    const browser = await chromium.launch({ headless: false });\n    const page = await browser.newPage();\n\n    try {\n        await page.goto('http://www.google.com');\n        await page.screenshot({ path: 'screenshot.png' });\n\n        // Fetches page's title\n        const title = await page.title();\n        console.info(\\`The title is: \\${title}\\`);\n    } finally {\n        await browser.close();\n    }\n})();`;\n  TsSpecTemplates['testmode-skeleton'] = `import { expect, test } from '@playwright/test';\n\ntest('has title', async ({ page }) => {\n  await page.goto('https://google.com/');\n\n  // Expect a title \"to contain\" a substring.\n  await expect(page).toHaveTitle(/Google/);\n\n  await page.screenshot({ path: 'google.png' });\n});\n\ntest('get started link', async ({ page }) => {\n  await page.goto('https://playwright.dev/');\n\n  // Click the get started link.\n  await page.getByRole('link', { name: 'Get started' }).click();\n\n  // Expects the URL to contain intro.\n  await expect(page).toHaveURL(/.*intro/);\n\n  await page.screenshot({ path: 'playwright.png' });\n});`;\n  TsSpecTemplates['screenshot'] = 'await page.screenshot({ path: \\'screenshot.png\\' });';\n  TsSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  TsSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  TsSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  TsSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  TsSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  TsSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  TsSpecTemplates['delay'] = 'await page.waitForTimeout(10000);';\n  TsSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  TsSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  TsSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  TsSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  TsSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  TsSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  TsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"playwright-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Playwright Typescript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"playwright\": \"\\${playwrightVersion}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\"\n  }\n}`;\n  const DefaultTestModePackageJson = `{\n  \"name\": \"playwright-test-remote-testable\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {},\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"@playwright/test\": \"\\${playwrightVersion}\",\n    \"testable-playwright-test\": \"${_versions.default.testablePlaywrightTest}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const testModeConfig = `import { defineConfig, devices } from '@playwright/test';\n\nexport default defineConfig({\n  testDir: './tests',\n  fullyParallel: true,\n  retries: 2,\n  workers: 2,\n  reporter: [\n    ['html', { open: 'never' }]\n  ],\n  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */\n  use: {\n    trace: 'on-first-retry',\n  },\n  projects: [\n    {\n      name: 'chromium',\n      use: { ...devices['Desktop Chrome'] },\n    },\n\n    {\n      name: 'firefox',\n      use: { ...devices['Desktop Firefox'] },\n    },\n\n    {\n      name: 'webkit',\n      use: { ...devices['Desktop Safari'] },\n    },\n\n    /* Test against mobile viewports. */\n    {\n      name: 'Mobile Chrome',\n      use: { ...devices['Pixel 5'] },\n    },\n    {\n      name: 'Mobile Safari',\n      use: { ...devices['iPhone 12'] },\n    },\n\n    /* Test against branded browsers. */\n    {\n      name: 'Microsoft Edge',\n      use: { ...devices['Desktop Edge'], channel: 'msedge' },\n    },\n    {\n      name: 'Google Chrome',\n      use: { ...devices['Desktop Chrome'], channel: 'chrome' },\n    },\n  ]\n});`;\n  const TsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-trace',\n      name: 'Trace'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: TsSpecTemplateOptions,\n    spec: TsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson,\n    defaultTestModePackageJson: DefaultTestModePackageJson,\n    tsconfig,\n    testModeConfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/playwright-template\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const JsSpecTemplates = {};\n  JsSpecTemplates['url'] = 'await page.goto(\\'http://www.google.com\\');';\n  JsSpecTemplates['skeleton'] = `const { chromium } = require('playwright');\n\n(async () => {\n  const browser = await chromium.launch({ headless: false });\n  const page = await browser.newPage();\n\n  // Instructs the blank page to navigate to a URL\n  await page.goto('https://www.google.com');\n  await page.screenshot({ path: 'screenshot.png' });\n\n  // Fetches page's title\n  const title = await page.title();\n  console.info(\\`The title is: \\${title}\\`);\n\n  await browser.close();\n})();`;\n  JsSpecTemplates['screenshot'] = 'await page.screenshot({ path: \\'screenshot.png\\' });';\n  JsSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  JsSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  JsSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  JsSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  JsSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  JsSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  JsSpecTemplates['delay'] = 'await page.waitForTimeout(10000);';\n  JsSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  JsSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  JsSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  JsSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  JsSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  JsSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  JsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"playwright-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Playwright Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"playwright\": \"\\${playwrightVersion}\"\n  }\n}`;\n  const JsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-trace',\n      name: 'Trace'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: JsSpecTemplateOptions,\n    spec: JsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/protractor-templates-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const ProtractorSpecTemplates = {};\n  ProtractorSpecTemplates['url'] = 'browser.get(\"https://www.google.com\");';\n  ProtractorSpecTemplates['skeleton'] = `import { browser } from 'protractor';\n\ndescribe('Protractor Demo App', () => {\n  it('should have a title', () => {\n    browser.get('http://juliemr.github.io/protractor-demo/');\n    expect(browser.getTitle()).toEqual('Super Calculator');\n  });\n});`;\n  ProtractorSpecTemplates['screenshot'] = `browser.takeScreenshot().then((base64Data) => {\n  fs.writeFileSync((process.env.OUTPUT_DIR || '') + '/HomePage.png', base64Data, 'base64');\n});`;\n  ProtractorSpecTemplates['datatable-next'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .next()\n  .then((rows) => {\n    http.get('http://sample.testable.io/stocks/' + rows[0].data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['datatable-get'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .get(5)\n  .then((row) => {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['datatable-random'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .random()\n  .then((row) => {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['metrics-timing'] = `require('testable-utils').results().timing({ namespace: 'User', name: 'tickLatencyMs', val: 123, units: 'ms' });`;\n  ProtractorSpecTemplates['metrics-counter'] = `require('testable-utils').results().counter({ namespace: 'User', name: 'stockTicks', val: 1, units: 'ticks' });`;\n  ProtractorSpecTemplates['metrics-histogram'] = `require('testable-utils').results().histogram({ namespace: 'User', name: 'responseCodes', key: '200', val: 1 });`;\n  ProtractorSpecTemplates['metrics-metered'] = `require('testable-utils').results().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  ProtractorSpecTemplates['events'] = `const testableUtils = require('testable-utils');\n// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\nconst events = testableUtils.events;\nconst execute = testableUtils.execute;\nconst fireNow = testableUtils.isLocal || testableUtils.isSmokeTest;\n\nexecute((done) => {\n  events.on('my-custom-event', () => {\n    // perform some action here like an API call and done() when completed\n    done();\n  });\n});\n\nif (fireNow)\n  events.emit('my-custom-event');`;\n  ProtractorSpecTemplates['waitForFinish'] = `require('testable-utils').waitForFinish().then(() => {\n  // cleanup code after test duration has passed.\n});`;\n  ProtractorSpecTemplates['logging'] = `const testableUtils = require('testable-utils');\ntestableUtils.log.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");\ntestableUtils.log.error(\"Use this to log errors to display in the results\");\ntestableUtils.log.info(\"Use this to log info statements to display in the results\");\ntestableUtils.log.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");\ntestableUtils.log.trace(\"Only logged during a smoke test!\");`;\n  const ProtractorConfTemplates = {};\n  ProtractorConfTemplates['skeleton'] = `import {Config} from 'protractor';\n\nexport let config: Config = {\n  framework: 'jasmine',\n  specs: ['test.js'],\n  capabilities: {\n    browserName: 'chrome'\n  }\n};`;\n  const DefaultProtractorPackageJson = `{\n    \"name\": \"protractor-testable-demo\",\n    \"version\": \"0.0.1\",\n    \"description\": \"Simple Protractor Example\",\n    \"author\": \"Testable\",\n    \"scripts\": {\n      \"tsc\": \"tsc\",\n      \"pretest\": \"npm run tsc\",\n      \"test\": \"protractor tmp/conf.js\"\n    },\n    \"dependencies\": {\n      \"@types/jasmine\": \"${_versions.default.types.jasmine}\",\n      \"@types/jasminewd2\": \"${_versions.default.types.jasminewd2}\",\n      \"@types/node\": \"${_versions.default.types.node}\",\n      \"jasmine\": \"${_versions.default.jasmine}\",\n      \"typescript\": \"${_versions.default.typescript}\",\n    },\n    \"devDependencies\": {\n      \"@types/jasminewd2\": \"${_versions.default.types.jasminewd2}\",\n      \"testable-utils\": \"${_versions.default.testableUtils}\",\n      \"protractor\": \"${_versions.default.protractor}\",\n      \"ts-node\": \"${_versions.default.tsNode}\",\n    }\n  }`;\n  const ProtractorSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Jasmine test skeleton'\n    }, {\n      id: 'screenshot',\n      name: 'Take screenshot'\n    }]\n  }, {\n    groupName: 'Custom Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Capture a custom timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Increment a custom counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Increment a specific bucket in a histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Capture a custom metered metric'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'logging',\n      name: 'Logging'\n    }, {\n      id: 'events',\n      name: 'Perform action on live event'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  const ProtractorConfTemplateOptions = [{\n    id: 'skeleton',\n    name: 'Configuration skeleton'\n  }];\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\", \"@types/jasmine\", \"@types/jasminewd2\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  var _default = _exports.default = {\n    specOptions: ProtractorSpecTemplateOptions,\n    spec: ProtractorSpecTemplates,\n    confOptions: ProtractorConfTemplateOptions,\n    conf: ProtractorConfTemplates,\n    defaultPackageJson: DefaultProtractorPackageJson,\n    tsconfig: tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/protractor-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const ProtractorSpecTemplates = {};\n  ProtractorSpecTemplates['url'] = 'browser.get(\"https://www.google.com\");';\n  ProtractorSpecTemplates['skeleton'] = `describe('Protractor Demo App', function() {\n  it('should have a title', function() {\n    browser.get('http://juliemr.github.io/protractor-demo/');\n    expect(browser.getTitle()).toEqual('Super Calculator');\n  });\n});`;\n  ProtractorSpecTemplates['screenshot'] = `browser.takeScreenshot().then(function(base64Data) {\n  fs.writeFileSync((process.env.OUTPUT_DIR || '') + '/HomePage.png', base64Data, 'base64');\n});`;\n  ProtractorSpecTemplates['datatable-next'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .next()\n  .then(function(rows) {\n    http.get('http://sample.testable.io/stocks/' + rows[0].data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['datatable-get'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .get(5)\n  .then(function(row) {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['datatable-random'] = `require('testable-utils').dataTable\n  .open('symbols.csv')\n  .random()\n  .then(function(row) {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  ProtractorSpecTemplates['metrics-timing'] = `require('testable-utils').results().timing({ namespace: 'User', name: 'tickLatencyMs', val: 123, units: 'ms' });`;\n  ProtractorSpecTemplates['metrics-counter'] = `require('testable-utils').results().counter({ namespace: 'User', name: 'stockTicks', val: 1, units: 'ticks' });`;\n  ProtractorSpecTemplates['metrics-histogram'] = `require('testable-utils').results().histogram({ namespace: 'User', name: 'responseCodes', key: '200', val: 1 });`;\n  ProtractorSpecTemplates['metrics-metered'] = `require('testable-utils').results().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  ProtractorSpecTemplates['events'] = `const testableUtils = require('testable-utils');\n// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\nconst events = testableUtils.events;\nconst execute = testableUtils.execute;\nconst fireNow = testableUtils.isLocal || testableUtils.isSmokeTest;\n\nexecute(function(done) {\n  events.on('my-custom-event', function() {\n    // perform some action here like an API call and done() when completed\n    done();\n  });\n});\n\nif (fireNow)\n  events.emit('my-custom-event');`;\n  ProtractorSpecTemplates['waitForFinish'] = `require('testable-utils').waitForFinish().then(() => {\n  // cleanup code after test duration has passed.\n});`;\n  ProtractorSpecTemplates['logging'] = `const testableUtils = require('testable-utils');\ntestableUtils.log.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");\ntestableUtils.log.error(\"Use this to log errors to display in the results\");\ntestableUtils.log.info(\"Use this to log info statements to display in the results\");\ntestableUtils.log.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");\ntestableUtils.log.trace(\"Only logged during a smoke test!\");`;\n  const ProtractorConfTemplates = {};\n  ProtractorConfTemplates['skeleton'] = `exports.config = {\n  framework: 'jasmine',\n  specs: ['test.js'],\n  capabilities: {\n    browserName: 'chrome'\n  }\n};`;\n  const DefaultProtractorPackageJson = `{\n  \"name\": \"protractor-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Protractor Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"jasmine\": \"${_versions.default.jasmine}\",\n    \"protractor\": \"${_versions.default.protractor}\"\n  }\n}`;\n  const ProtractorSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Jasmine test skeleton'\n    }, {\n      id: 'screenshot',\n      name: 'Take screenshot'\n    }]\n  }, {\n    groupName: 'Custom Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Capture a custom timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Increment a custom counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Increment a specific bucket in a histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Capture a custom metered metric'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'logging',\n      name: 'Logging'\n    }, {\n      id: 'events',\n      name: 'Perform action on live event'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  const ProtractorConfTemplateOptions = [{\n    id: 'skeleton',\n    name: 'Configuration skeleton'\n  }];\n  var _default = _exports.default = {\n    specOptions: ProtractorSpecTemplateOptions,\n    spec: ProtractorSpecTemplates,\n    confOptions: ProtractorConfTemplateOptions,\n    conf: ProtractorConfTemplates,\n    defaultPackageJson: DefaultProtractorPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/puppeteer-mocha-templates-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = `await page.goto('http://www.google.com');`;\n  MochaSpecTemplates['skeleton'] = `import * as puppeteer from 'puppeteer';\nimport { expect } from 'chai';\n\nbefore (async function () {\n  global.browser = await puppeteer.launch();\n});\n\ndescribe('DefaultTest', () => {\n  it('should go to google.com and check title', async () => {\n    const page = await browser.newPage();\n    await page.goto('https://www.google.com');\n    await page.screenshot({path: 'screenshot.png'});\n    const title = await page.title();\n    expect(title).to.equal('Google');\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['screenshot'] = `await page.goto('https://www.google.com');\nawait page.screenshot({path: 'screenshot.png'});`;\n  MochaSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  MochaSpecTemplates['delay'] = `await page.waitForTimeout(10000);`;\n  MochaSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  MochaSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  MochaSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  MochaSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"Puppeteer-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Puppeteer Typescript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/mocha\": \"${_versions.default.types.mocha}\",\n    \"@types/chai\": \"${_versions.default.types.chai}\",\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"puppeteer\": \"\\${puppeteerVersion}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\", \"@types/mocha\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson,\n    tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/puppeteer-mocha-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const MochaSpecTemplates = {};\n  MochaSpecTemplates['url'] = `await page.goto('http://www.google.com');`;\n  MochaSpecTemplates['skeleton'] = `const puppeteer = require('puppeteer');\nconst { expect } = require('chai');\n\nbefore (async function () {\n  global.browser = await puppeteer.launch();\n});\n\ndescribe('DefaultTest', () => {\n  it('should go to google.com and check title', async () => {\n    const page = await browser.newPage();\n    await page.goto('https://www.google.com');\n    await page.screenshot({path: 'screenshot.png'});\n    const title = await page.title();\n    expect(title).to.equal('Google');\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['loadInChromeSkeleton'] = `const puppeteer = require('puppeteer');\n\nbefore (async function () {\n  global.browser = await puppeteer.launch();\n});\n\ndescribe('Page Load', () => {\n  it('should load \\${url}', async () => {\n    const page = await browser.newPage();\n    await page.goto('\\${url}');\n    await page.screenshot({path: 'screenshot.png'});\n  });\n});\n\nafter(async () => browser.close());`;\n  MochaSpecTemplates['screenshot'] = `await page.goto('https://www.google.com');\nawait page.screenshot({path: 'screenshot.png'});`;\n  MochaSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  MochaSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  MochaSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  MochaSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  MochaSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  MochaSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  MochaSpecTemplates['delay'] = `await page.waitForTimeout(10000);`;\n  MochaSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  MochaSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  MochaSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: 'User', name: 'My Custom Timing', val: 125, units: 'ms' });`;\n  MochaSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: 'User', name: 'My Custom Counter', val: 3, units: 'bytes' });`;\n  MochaSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: 'User', name: 'My Custom Histogram', key: 'Success Bucket', val: 2 });`;\n  MochaSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: 'User', name: 'Browser Memory', key: require('os').hostname(), val: 2123432, units: 'bytes' });`;\n  MochaSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, 'My Timing Metric', [resource]);`;\n  MochaSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultMochaPackageJson = `{\n  \"name\": \"puppeteer-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Puppeteer + Mocha Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"puppeteer\": \"\\${puppeteerVersion}\",\n    \"mocha\": \"${_versions.default.mocha}\",\n    \"chai\": \"${_versions.default.chai}\"\n  }\n}`;\n  const MochaSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: MochaSpecTemplateOptions,\n    spec: MochaSpecTemplates,\n    defaultPackageJson: DefaultMochaPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/puppeteer-template-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const TsSpecTemplates = {};\n  TsSpecTemplates['url'] = `await page.goto('http://www.google.com');`;\n  TsSpecTemplates['skeleton'] = `import * as puppeteer from 'puppeteer';\n\n(async () => {\n  const browser = await puppeteer.launch({ headless: false });\n  const page = await browser.newPage();\n\n  try {\n    await page.goto('http://www.google.com');\n    await page.screenshot({ path: 'screenshot.png' });\n\n    // Fetches page's title\n    const title = await page.title();\n    console.info(\\`The title is: \\${title}\\`);\n  } finally {\n    await browser.close();\n  }\n})();`;\n  TsSpecTemplates['screenshot'] = `await page.screenshot({ path: 'screenshot.png' });`;\n  TsSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  TsSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  TsSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  TsSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  TsSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  TsSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  TsSpecTemplates['delay'] = `await page.waitForTimeout(10000);`;\n  TsSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1 });\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  TsSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  TsSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  TsSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  TsSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  TsSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  TsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"puppeteer-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Puppeteer Typescript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"puppeteer\": \"\\${puppeteerVersion}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const TsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-trace',\n      name: 'Trace'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: TsSpecTemplateOptions,\n    spec: TsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson,\n    tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/puppeteer-template\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const JsSpecTemplates = {};\n  JsSpecTemplates['url'] = `await page.goto('http://www.google.com');`;\n  JsSpecTemplates['skeleton'] = `const puppeteer = require('puppeteer');\n\n(async () => {\n  const browser = await puppeteer.launch({ headless: false });\n  const page = await browser.newPage();\n\n  // Instructs the blank page to navigate a URL\n  await page.goto('https://www.google.com');\n  await page.screenshot({path: 'screenshot.png'});\n\n  // Fetches page's title\n  const title = await page.title();\n  console.info(\\`The title is: \\${title}\\`);\n\n  await browser.close();\n})();`;\n  JsSpecTemplates['screenshot'] = `await page.screenshot({path: 'screenshot.png'});`;\n  JsSpecTemplates['logging-fatal'] = `const log = require('testable-utils').log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  JsSpecTemplates['logging-error'] = `const log = require('testable-utils').log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  JsSpecTemplates['logging-info'] = `const log = require('testable-utils').log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  JsSpecTemplates['logging-debug'] = `const log = require('testable-utils').log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  JsSpecTemplates['logging-trace'] = `const log = require('testable-utils').log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  JsSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  JsSpecTemplates['delay'] = `await page.waitForTimeout(10000);`;\n  JsSpecTemplates['datatable-next'] = `const dataTable = require('testable-utils').dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  JsSpecTemplates['datatable-get'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['datatable-random'] = `const dataTable = require('testable-utils').dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  JsSpecTemplates['metrics-timing'] = `const results = require('testable-utils').results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  JsSpecTemplates['metrics-counter'] = `const results = require('testable-utils').results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  JsSpecTemplates['metrics-histogram'] = `const results = require('testable-utils').results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  JsSpecTemplates['metrics-metered'] = `const results = require('testable-utils').results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  JsSpecTemplates['stopwatch'] = `// blocks until done() is called\nconst stopwatch = require('testable-utils').stopwatch;\nawait stopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  JsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nconst testableUtils = require('testable-utils');\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"puppeteer-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Puppeteer Javascript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"puppeteer\": \"\\${puppeteerVersion}\"\n  }\n}`;\n  const JsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-trace',\n      name: 'Trace'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: JsSpecTemplateOptions,\n    spec: JsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/templates/script-code-js\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const TemplatesJS = {};\n  TemplatesJS['steps-skeleton'] = `const axios = require('axios');\nconst assert = require('assert');\ndescribe('My Test Suite', function() {\n  it('An example test step', async function() {\n    const quote = await axios({ url: 'http://sample.testable.io/stocks/IBM', responseType: 'json' });\n    assert(quote.data.symbol === 'IBM', 'Symbol of the quote should be IBM');\n  });\n});`;\n  TemplatesJS['steps-single'] = `const axios = require('axios');\nconst assert = require('assert');\nit('An example test step', async function() {\n  const quote = await axios({ url: 'http://sample.testable.io/stocks/IBM', responseType: 'json' });\n  assert(quote.data.symbol === 'IBM', 'Symbol of the quote should be IBM');\n});`;\n  TemplatesJS['request-get'] = `await axios.get('http://sample.testable.io/stocks/IBM');`;\n  TemplatesJS['request-post'] = `const resp = await axios.post('http://httpbin.org/post', 'request body test', {\n  headers: {\n    'X-Test-Header': 'blablabla'\n  }\n});\n\nlog.info('BODY: ' + resp.data.data);`;\n  TemplatesJS['http-get'] = `// see https://nodejs.org/api/http.html for full API\nhttp.get('http://sample.testable.io/stocks/IBM');`;\n  TemplatesJS['https-get'] = `// see https://nodejs.org/api/https.html for full API\nhttps.get('https://www.google.com');`;\n  TemplatesJS['http-post'] = `// see https://nodejs.org/api/http.html for full API\nconst req = http.request({\n  hostname: 'httpbin.org',\n  path: '/post',\n  method: 'POST',\n  headers: {\n    'X-Test-Header': 'blablabla'\n  }\n}, function(res) {\n  res.on('data', function (chunk) {\n    log.info('BODY: ' + chunk);\n  });\n});\nreq.write('request body test');\nreq.end();`;\n  TemplatesJS['http-resp'] = `// see https://nodejs.org/api/http.html for full API\nhttp.get('http://sample.testable.io/stocks/IBM', function(res) {\n  res.on('data', function(data) {\n    log.info(data);\n    const quote = JSON.parse(data);\n    if (quote.price > 50)\n      http.get('http://sample.testable.io/stocks/MSFT');\n  });\n});`;\n  TemplatesJS['logging'] = `log.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");\nlog.error(\"Use this to log errors to display in the results\");\nlog.info(\"Use this to log info statements to display in the results\");\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");\nlog.trace(\"Only logged during a smoke test!\");`;\n  TemplatesJS['script-param'] = `params['myParamName'];`;\n  TemplatesJS['ws'] = `// see https://github.com/websockets/ws/blob/master/doc/ws.md for full API\nconst ws = new WebSocket(\"ws://sample.testable.io/streaming/websocket\");\n\nws.on('open', function open() {\n  ws.send('{ \"subscribe\": \"IBM\" }');\n});\n\nws.on('message', function(data, flags) {\n  log.info(data);\n  ws.close();\n});\n\nws.on('error', function(error) {\n  log.error(error);\n  ws.close();\n});`;\n  TemplatesJS['wss'] = `// see https://github.com/websockets/ws/blob/master/doc/ws.md for full API\nconst wss = new WebSocket(\"wss://wss.websocketstest.com/service\");\n\nwss.on('open', function open() {\n  wss.send('echo,test message');\n});\n\nwss.on('message', function(data, flags) {\n  log.info(data);\n  wss.close();\n});\n\nwss.on('error', function(error) {\n  log.error(error);\n  wss.close();\n});`;\n  TemplatesJS['socketio'] = `const socket = socketio('http://sample-streaming.testable.io:5811');\nsocket.on('connect', function(){\n  log.info('connected');\n  socket.emit('event', 'This is a test');\n});\nsocket.on('event', function(data){\n  log.info(data);\n  socket.close();\n});\nsocket.on('disconnect', function(){\n  log.info('disconnected');\n});`;\n  TemplatesJS['engineio'] = `const socket = new engineio.Socket('http://sample-streaming.testable.io:5812', { transports: [ 'websocket' ] });\nsocket.on('open', function() {\n  log.info('opened');\n  socket.send('This is a test');\n  socket.on('message', function(data){\n    log.info(data);\n    socket.close();\n  });\n  socket.on('close', function(){\n    log.info('closed');\n  });\n});`;\n  TemplatesJS['tcp'] = `// see https://nodejs.org/api/net.html for full API\nconst client = net.connect({ host: 'sample-streaming.testable.io', port: 8091 }, function() {\n  // connected!\n  client.write('test echo message');\n});\n\nclient.on('data', function(data) {\n  log.info(data.toString());\n  client.end();\n});\n\nclient.on('end', function() {\n  log.info('disconnected from server');\n});`;\n  TemplatesJS['tcps'] = `// see https://nodejs.org/api/tls.html for full API\nconst client = tls.connect({ host: 'myurlgoeshere.com', port: 443 }, function() {\n  // connected!\n  client.write('test echo message');\n});\n\nclient.on('data', function(data) {\n  log.info(data.toString());\n  client.end();\n});\n\nclient.on('end', function() {\n  log.info('disconnected from server');\n});`;\n  TemplatesJS['delay'] = `setTimeout(function() {\n  // your scenario code here\n\n}, 100); // 100ms delay`;\n  TemplatesJS['math'] = `Math.random();`;\n  TemplatesJS['moment'] = `log.info('Current unix epoch (ms): ' + moment().valueOf());`;\n  TemplatesJS['process-hrtime'] = `const time = process.hrtime();\nlog.info('some logging op');\nconst diff = process.hrtime(time);\nlog.info('Logging op took (nanoseconds): ' + (diff[0] * 1e9 + diff[1]));`;\n  TemplatesJS['lodash'] = `const symbols = ['IBM', 'MSFT', 'AAPL'];\n_.forEach(symbols, function(symbol) {\n  http.get('http://sample.testable.io/stocks/' + symbol);\n});`;\n  TemplatesJS['datatable-next'] = `dataTable\n  .open('symbols.csv')\n  .next()\n  .then(function(rows) {\n    http.get('http://sample.testable.io/stocks/' + rows[0].data['SYMBOL']);\n  });`;\n  TemplatesJS['datatable-get'] = `dataTable\n  .open('symbols.csv')\n  .get(5)\n  .then(function(row) {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  TemplatesJS['datatable-random'] = `dataTable\n  .open('symbols.csv')\n  .random()\n  .then(function(row) {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  TemplatesJS['metrics-timing'] = `results().timing({ namespace: 'User', name: 'tickLatencyMs', val: 123, units: 'ms' });`;\n  TemplatesJS['metrics-counter'] = `results().counter({ namespace: 'User', name: 'stockTicks', val: 1, units: 'ticks' });`;\n  TemplatesJS['metrics-histogram'] = `results().histogram({ namespace: 'User', name: 'responseCodes', key: '200', val: 1 });`;\n  TemplatesJS['metrics-advanced'] = `let subscribeSentAt = 0;\nconst ws = new WebSocket(\"ws://sample.testable.io/streaming/websocket\");\n\nws.on('open', function open() {\n  subscribeSentAt = moment().valueOf();\n  ws.send('{ \"subscribe\": \"IBM\" }');\n});\n\nws.on('message', function(data, flags) {\n  results('IBM').timing({ namespace: 'User', name: 'sub2tick', val: moment().valueOf() - subscribeSentAt, units: 'ms' });\n  ws.close();\n});`;\n  TemplatesJS['stopwatch'] = `stopwatch(function(done) {\n\t// some code here that we want to time, can be async\n\tdone();\n}, { namespace: 'User', name: 'myCustomTimingMs' });`;\n  TemplatesJS['har-replay'] = `const harReplay = require('har-replay');\nharReplay.load('myUploaded.har');`;\n  TemplatesJS['events'] = `const testableUtils = require('testable-utils');\n// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\nconst events = testableUtils.events;\nconst execute = testableUtils.execute;\nconst fireNow = testableUtils.isLocal || testableUtils.isSmokeTest;\n\nexecute(function(done) {\n  events.on('my-custom-event', function() {\n    // perform some action here like an API call and done() when completed\n    done();\n  });\n});\n\nif (fireNow)\n  events.emit('my-custom-event');`;\n  TemplatesJS['async'] = `execute(function(done) {\n  // async code goes here, call done() when finished.\n});`;\n  TemplatesJS['waitForFinish'] = `waitForFinish().then(() => {\n  // cleanup code after test duration has passed.\n});`;\n  TemplatesJS['asyncAwait'] = `const axios = require('axios');\n\nasync function overallTest() {\n  await stopwatch(transactionA, 'Overall Time', 'Tx A');\n}\n\nasync function transactionA(done) {\n  async function subTx1(done1) {\n    await axios.get('http://sample.testable.io/stocks/GOOG');\n    done1();\n  }\n  await stopwatch(subTx1, 'Load Time', 'Tx A => Sub Tx 1');\n  done();\n}\n\noverallTest();`;\n  var _default = _exports.default = TemplatesJS;\n});","define(\"@testable/shared-ui/utils/templates/script-code-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/script-code-js\", \"@testable/shared-ui/utils/templates/script-code-ts\"], function (_exports, _scriptCodeJs, _scriptCodeTs) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Options = void 0;\n  Object.defineProperty(_exports, \"TemplatesJS\", {\n    enumerable: true,\n    get: function () {\n      return _scriptCodeJs.default;\n    }\n  });\n  Object.defineProperty(_exports, \"TemplatesTS\", {\n    enumerable: true,\n    get: function () {\n      return _scriptCodeTs.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/script-code-js\",0,\"@testable/shared-ui/utils/templates/script-code-ts\"eaimeta@70e063a35619d71f\n  const Options = _exports.Options = [{\n    groupName: 'Test Steps (Mocha.js Syntax)',\n    options: [{\n      id: 'steps-skeleton',\n      name: 'Test suite skeleton'\n    }, {\n      id: 'steps-single',\n      name: 'Single test step'\n    }]\n  }, {\n    groupName: 'Axios',\n    options: [{\n      id: 'request-get',\n      name: 'HTTP GET'\n    }, {\n      id: 'request-post',\n      name: 'HTTP POST'\n    }]\n  }, {\n    groupName: 'HTTP',\n    options: [{\n      id: 'http-get',\n      name: 'HTTP GET request'\n    }, {\n      id: 'https-get',\n      name: 'HTTPS GET request'\n    }, {\n      id: 'http-post',\n      name: 'HTTP POST request'\n    }, {\n      id: 'http-resp',\n      name: 'Async HTTP response handling'\n    }]\n  }, {\n    groupName: 'WebSocket',\n    options: [{\n      id: 'ws',\n      name: 'WebSocket connection'\n    }, {\n      id: 'wss',\n      name: 'Secure WebSocket connection'\n    }, {\n      id: 'socketio',\n      name: 'Socket.io connection'\n    }, {\n      id: 'engineio',\n      name: 'Engine.io connection'\n    }]\n  }, {\n    groupName: 'TCP',\n    options: [{\n      id: 'tcp',\n      name: 'TCP connection'\n    }, {\n      id: 'tcps',\n      name: 'Secure TCP connection'\n    }]\n  }, {\n    groupName: 'Custom Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Capture a custom timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Increment a custom counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Increment a specific bucket in a histogram'\n    }, {\n      id: 'stopwatch',\n      name: 'Stopwatch to capture a timing'\n    }, {\n      id: 'metrics-advanced',\n      name: 'Measure subscription to first tick latency on a websocket'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'logging',\n      name: 'Logging'\n    }, {\n      id: 'script-param',\n      name: 'Script Parameter'\n    }, {\n      id: 'delay',\n      name: 'Delay 100ms before execution'\n    }, {\n      id: 'math',\n      name: 'Math functions'\n    }, {\n      id: 'moment',\n      name: 'Use momentjs to get current timestamp (ms)'\n    }, {\n      id: 'process-hrtime',\n      name: 'High resolution nanotime'\n    }, {\n      id: 'lodash',\n      name: 'Lodash functions'\n    }, {\n      id: 'har-replay',\n      name: 'Replay uploaded HAR file'\n    }, {\n      id: 'events',\n      name: 'Perform action on live event'\n    }, {\n      id: 'async',\n      name: 'Run async code'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }, {\n      id: 'asyncAwait',\n      name: 'Use async/await to capture transaction times'\n    }]\n  }];\n});","define(\"@testable/shared-ui/utils/templates/script-code-ts\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const TemplatesTS = {};\n  TemplatesTS['steps-skeleton'] = '// Test steps are not yet supported for Typescript.';\n  TemplatesTS['steps-single'] = '// Test steps are not yet supported for Typescript.';\n  TemplatesTS['request-get'] = `import axios from 'axios';\naxios.get('http://sample.testable.io/stocks/IBM');`;\n  TemplatesTS['request-post'] = `import axios from 'axios';\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst resp = await axios.post('http://httpbin.org/post', 'request body test', {\n  headers: {\n    'X-Test-Header': 'blablabla'\n  }\n});\n\nlog.info('BODY: ' + resp.data.data);`;\n  TemplatesTS['http-get'] = `// see https://nodejs.org/api/http.html for full API\nimport * as http from 'http';\nhttp.get('http://sample.testable.io/stocks/IBM');`;\n  TemplatesTS['https-get'] = `// see https://nodejs.org/api/https.html for full API\nimport * as https from 'https';\nhttps.get('https://www.google.com');`;\n  TemplatesTS['http-post'] = `// see https://nodejs.org/api/http.html for full API\nimport * as http from 'http';\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst req = http.request({\n  hostname: 'httpbin.org',\n  path: '/post',\n  method: 'POST',\n  headers: {\n    'X-Test-Header': 'blablabla'\n  }\n}, (res) => {\n  res.on('data', (chunk) => {\n    log.info('BODY: ' + chunk);\n  });\n});\nreq.write('request body test');\nreq.end();`;\n  TemplatesTS['http-resp'] = `// see https://nodejs.org/api/http.html for full API\nimport * as http from 'http';\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nhttp.get('http://sample.testable.io/stocks/IBM', (res) => {\n  res.on('data', (data) => {\n    log.info(data);\n    const quote = JSON.parse(data);\n    if (quote.price > 50)\n      http.get('http://sample.testable.io/stocks/MSFT');\n  });\n});`;\n  TemplatesTS['logging'] = `import * as testableUtils from \"testable-utils\";\nconst log = testableUtils.log;\n\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");\nlog.error(\"Use this to log errors to display in the results\");\nlog.info(\"Use this to log info statements to display in the results\");\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");\nlog.trace(\"Only logged during a smoke test!\");`;\n  TemplatesTS['script-param'] = `let params: Array<any>;\nparams['myParamName'];`;\n  TemplatesTS['ws'] = `// see https://github.com/websockets/ws/blob/master/doc/ws.md for full API\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst ws = new WebSocket(\"ws://sample.testable.io/streaming/websocket\");\n\nws.onopen = () => {\n  ws.send('{ \"subscribe\": \"IBM\" }');\n};\n\nws.onmessage = (data) => {\n   log.info(data);\n  ws.close();\n}\n\nws.onerror = (error) => {\n  log.error(error);\n  ws.close();\n};`;\n  TemplatesTS['wss'] = `// see https://github.com/websockets/ws/blob/master/doc/ws.md for full API\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst wss = new WebSocket(\"wss://wss.websocketstest.com/service\");\n\nwss.onopen = () => {\n  wss.send('echo, test message');\n}\n\nwss.onmessage = (data) => {\n  log.info(data);\n  wss.close();\n}\n\nwss.onerror = (error) => {\n  log.error(error);\n  wss.close();\n};`;\n  TemplatesTS['socketio'] = `import * as socketio from \"socket.io-client\";\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst socket = socketio('http://sample-streaming.testable.io:5811');\nsocket.on('connect', () => {\n\tlog.info('connected');\n\tsocket.emit('event', 'This is a test');\n});\nsocket.on('event', (data) => {\n\tlog.info(data);\n\tsocket.close();\n});\nsocket.on('disconnect', () => {\n\tlog.info('disconnected');\n});`;\n  TemplatesTS['engineio'] = `import * as engineio from \"engine.io-client\";\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst socket = new engineio.Socket('http://sample-streaming.testable.io:5812', { transports: [ 'websocket' ] });\nsocket.on('open', () => {\n\tlog.info('opened');\n\tsocket.send('This is a test');\n\tsocket.on('message', (data) => {\n\t\tlog.info(data);\n\t\tsocket.close();\n\t});\n\tsocket.on('close', () => {\n\t\tlog.info('closed');\n\t});\n});`;\n  TemplatesTS['tcp'] = `// see https://nodejs.org/api/net.html for full API\nimport * as net from \"net\";\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst client = net.connect({ host: 'sample-streaming.testable.io', port: 8091 }, () => {\n  // connected!\n  client.write('test echo message');\n});\n\nclient.on('data', (data) => {\n  log.info(data.toString());\n  client.end();\n});\n\nclient.on('end', () => {\n  log.info('disconnected from server');\n});`;\n  TemplatesTS['tcps'] = `// see https://nodejs.org/api/tls.html for full API\nimport * as tls from \"tls\";\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst client = tls.connect({ host: 'myurlgoeshere.com', port: 443 }, () => {\n  // connected!\n  client.write('test echo message');\n});\n\nclient.on('data', (data) => {\n  log.info(data.toString());\n  client.end();\n});\n\nclient.on('end', () => {\n  log.info('disconnected from server');\n});`;\n  TemplatesTS['delay'] = `setTimeout(() => {\n  // your scenario code here\n}, 100); // 100ms delay`;\n  TemplatesTS['math'] = `Math.random();`;\n  TemplatesTS['moment'] = `import * as moment from 'moment';\nimport * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nlog.info('Current unix epoch (ms): ' + moment().valueOf());`;\n  TemplatesTS['process-hrtime'] = `import * as testableUtils from \"testable-utils\";\n\nconst log = testableUtils.log;\nconst time = process.hrtime();\nlog.info('some logging op');\nconst diff = process.hrtime(time);\nlog.info('Logging op took (nanoseconds): ' + (diff[0] * 1e9 + diff[1]));`;\n  TemplatesTS['lodash'] = `import * as http from \"http\";\nimport * as _ from \"lodash\";\n\nconst symbols: Array<any> = ['IBM', 'MSFT', 'AAPL'];\n_.forEach(symbols, (symbol) => {\n  http.get('http://sample.testable.io/stocks/' + symbol);\n});`;\n  TemplatesTS['datatable-next'] = `import * as http from 'http';\nimport * as testableUtils from \"testable-utils\";\n\nconst dataTable = testableUtils.dataTable;\ndataTable\n  .open('symbols.csv')\n  .next()\n  .then((rows) => {\n    http.get('http://sample.testable.io/stocks/' + rows[0].data['SYMBOL']);\n  });`;\n  TemplatesTS['datatable-get'] = `import * as http from 'http';\nimport * as testableUtils from \"testable-utils\";\n\nconst dataTable = testableUtils.dataTable;\ndataTable\n  .open('symbols.csv')\n  .get(5)\n  .then((row) => {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  TemplatesTS['datatable-random'] = `import * as http from 'http';\nimport * as testableUtils from \"testable-utils\";\n\nconst dataTable = testableUtils.dataTable;\ndataTable\n  .open('symbols.csv')\n  .random()\n  .then((row) => {\n    http.get('http://sample.testable.io/stocks/' + row.data['SYMBOL']);\n  });`;\n  TemplatesTS['metrics-timing'] = `import * as testableUtils from \"testable-utils\";\n\nconst results = testableUtils.results;\nresults().timing({ namespace: 'User', name: 'tickLatencyMs', val: 123, units: 'ms' });`;\n  TemplatesTS['metrics-counter'] = `import * as testableUtils from \"testable-utils\";\nconst results = testableUtils.results;\nresults().counter({ namespace: 'User', name: 'stockTicks', val: 1 });`;\n  TemplatesTS['metrics-histogram'] = `import * as testableUtils from \"testable-utils\";\n\nconst results = testableUtils.results;\nresults().histogram({ namespace: 'User', name: 'responseCodes', key: '200', val: 1 });`;\n  TemplatesTS['metrics-advanced'] = `import * as moment from 'moment';\nimport * as testableUtils from \"testable-utils\";\n\nconst results = testableUtils.results;\nconst ws = new WebSocket(\"ws://sample.testable.io/streaming/websocket\");\n\nlet subscribeSentAt: number = 0;\n\nws.onopen = () => {\n  subscribeSentAt = moment().valueOf();\n  ws.send('{ \"subscribe\": \"IBM\" }');\n}\n\nws.onmessage = (data) => {\n  results('IBM').timing({ namespace: 'User', name: 'sub2tick', val: moment().valueOf() - subscribeSentAt, units: 'ms' });\n  ws.close();\n}`;\n  TemplatesTS['stopwatch'] = `import * as testableUtils from \"testable-utils\";\n\nconst stopwatch = testableUtils.stopwatch;\nstopwatch((done) => {\n  // some code here that we want to time, can be async\n  done();\n}, { namespace: 'User', name: 'myCustomTimingMs' });`;\n  TemplatesTS['har-replay'] = `import * as harReplay from \"har-replay\";\nharReplay.load('myUploaded.har');`;\n  TemplatesTS['events'] = `import * as testableUtils from \"testable-utils\";\n// events is an instance of EventEmitter (https://nodejs.org/dist/latest/docs/api/events.html)\nconst events = testableUtils.events;\nconst execute = testableUtils.execute;\nconst fireNow = testableUtils.isLocal || testableUtils.isSmokeTest;\n\nexecute((done: Function) => {\n  events.on('my-custom-event', () => {\n    // perform some action here like an API call and done() when completed\n    done();\n  });\n});\n\nif (fireNow)\n  events.emit('my-custom-event');`;\n  TemplatesTS['async'] = `import * as testableUtils from \"testable-utils\";\nconst execute = testableUtils.execute;\n\nexecute((done) => {\n  // async code goes here, call done() when finished.\n});`;\n  TemplatesTS['waitForFinish'] = `import * as testableUtils from \"testable-utils\";\nconst waitForFinish = testableUtils.waitForFinish;\n\nwaitForFinish().then(() => {\n  // cleanup code after test duration has passed.\n});`;\n  TemplatesTS['asyncAwait'] = `import axios from 'axios';\nimport * as testableUtils from \"testable-utils\";\n\nconst stopwatch = testableUtils.stopwatch;\nconst overallTest = async () => {\n  await stopwatch(transactionA, 'Overall Time', 'Tx A');\n}\n\nconst transactionA = async (done: Function) => {\n  const subTx1 = async (done1: Function) => {\n    await axios.get('http://sample.testable.io/stocks/GOOG');\n    done1();\n  }\n  await stopwatch(subTx1, 'Load Time', 'Tx A => Sub Tx 1');\n  done();\n}\n\noverallTest();`;\n  var _default = _exports.default = TemplatesTS;\n});","define(\"@testable/shared-ui/utils/templates/ts-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const TsSpecTemplates = {};\n  TsSpecTemplates['url'] = 'await driver.get(\\'http://www.google.com\\');';\n  TsSpecTemplates['skeleton'] = `import * as webdriver from 'selenium-webdriver';\nimport * as util from 'util';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nconst writeFile = util.promisify(fs.writeFile);\n\nlet takeScreenshot = async (driver, file) => {\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\n(async () => {\n  let driver = new webdriver.Builder()\n    .withCapabilities(webdriver.Capabilities.chrome())\n    .build();\n\n  try {\n    await driver.get('http://www.google.com');\n    await takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));\n    await driver.wait(webdriver.until.titleIs('Google'), 10000);\n  } finally {\n    await driver.quit();\n  }\n})();`;\n  TsSpecTemplates['screenshot'] = `let takeScreenshot = async (driver, file) => {\n  let image = await driver.takeScreenshot();\n  await writeFile(file, image, 'base64');\n}\n\nawait takeScreenshot(driver, path.join(process.env.OUTPUT_DIR || '.', 'HomePage.png'));`;\n  TsSpecTemplates['logging-fatal'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.fatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  TsSpecTemplates['logging-error'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.error(\"Use this to log errors to display in the results\");`;\n  TsSpecTemplates['logging-info'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.info(\"Use this to log info statements to display in the results\");`;\n  TsSpecTemplates['logging-debug'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.debug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  TsSpecTemplates['logging-trace'] = `import * as TestableUtils from 'testable-utils';\nconst log = TestableUtils.log;\nlog.trace(\"Only logged during a smoke test!\");`;\n  TsSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  TsSpecTemplates['delay'] = 'await driver.sleep(10000);';\n  TsSpecTemplates['datatable-next'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst results = await dataTable.open('data.csv').next({ wrap: true, rows: 1});\nconsole.log('Symbol: ' + results[0].data['Symbol']);`;\n  TsSpecTemplates['datatable-get'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').get(1);\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['datatable-random'] = `import * as TestableUtils from 'testable-utils';\nconst dataTable = TestableUtils.dataTable;\nconst result = await dataTable.open('data.csv').random();\nconsole.log('Symbol: ' + result.data['Symbol']);`;\n  TsSpecTemplates['metrics-timing'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().timing({ namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  TsSpecTemplates['metrics-counter'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().counter({ namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  TsSpecTemplates['metrics-histogram'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().histogram({ namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  TsSpecTemplates['metrics-metered'] = `import * as TestableUtils from 'testable-utils';\nconst results = TestableUtils.results;\nresults().metered({ namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  TsSpecTemplates['stopwatch'] = `import * as TestableUtils from 'testable-utils';\n// blocks until done() is called\nconst stopwatch = TestableUtils.stopwatch;\nawait stopwatch((done) => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  TsSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nimport * as TestableUtils from 'testable-utils';\ntestableUtils.waitForFinish();`;\n  const DefaultJsPackageJson = `{\n  \"name\": \"webdriver-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple Webdriver Typescript Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"selenium-webdriver\": \"${_versions.default.seleniumWebdriver}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\"\n  }\n}`;\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"testable-utils\"],\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"inlineSourceMap\": true,\n    \"declaration\": false,\n    \"noImplicitAny\": false\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"asyncAwait\"\n  ]\n}`;\n  const TsSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  var _default = _exports.default = {\n    specOptions: TsSpecTemplateOptions,\n    spec: TsSpecTemplates,\n    defaultPackageJson: DefaultJsPackageJson,\n    tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/versions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const versions = {\n    wdio: {\n      version: '8.40.6',\n      cli: '^8.40.6',\n      localRunner: '^8.40.6',\n      mochaFramework: '^8.40.6'\n    },\n    types: {\n      mocha: '^10.0.1',\n      chai: '^4.3.4',\n      node: '^14.6.4',\n      jasmine: '3.5.14',\n      jasminewd2: '^2.0.8'\n    },\n    seleniumWebdriver: '4.8.2',\n    testableUtils: '0.6.2',\n    mocha: '10.2.0',\n    chai: '4.3.7',\n    tsNode: '^10.9.1',\n    tsconfigPaths: '^4.2.0',\n    typescript: '^5.0.2',\n    jasmine: '3.6.1',\n    protractor: '7.0.0',\n    testablePlaywrightTest: '^0.1.6'\n  };\n  var _default = _exports.default = versions;\n});","define(\"@testable/shared-ui/utils/templates/wdio-templates-ts\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const WdioSpecTemplateOptions = [{\n    groupName: 'Getting Started',\n    options: [{\n      id: 'url',\n      name: 'Open a URL'\n    }, {\n      id: 'skeleton',\n      name: 'Mocha test skeleton'\n    }]\n  }, {\n    groupName: 'CSV Data',\n    options: [{\n      id: 'datatable-next',\n      name: 'Execution wide iterator, get next row'\n    }, {\n      id: 'datatable-random',\n      name: 'Get random row'\n    }, {\n      id: 'datatable-get',\n      name: 'Get row by index'\n    }]\n  }, {\n    groupName: 'Metrics',\n    options: [{\n      id: 'metrics-timing',\n      name: 'Timing'\n    }, {\n      id: 'metrics-counter',\n      name: 'Counter'\n    }, {\n      id: 'metrics-histogram',\n      name: 'Histogram'\n    }, {\n      id: 'metrics-metered',\n      name: 'Metered'\n    }]\n  }, {\n    groupName: 'Logging',\n    options: [{\n      id: 'logging-trace',\n      name: 'Trace'\n    }, {\n      id: 'logging-debug',\n      name: 'Debug'\n    }, {\n      id: 'logging-info',\n      name: 'Info'\n    }, {\n      id: 'logging-error',\n      name: 'Error'\n    }, {\n      id: 'logging-fatal',\n      name: 'Fatal'\n    }]\n  }, {\n    groupName: 'Misc',\n    options: [{\n      id: 'script-param',\n      name: 'Script parameter'\n    }, {\n      id: 'screenshot',\n      name: 'Take a screenshot'\n    }, {\n      id: 'error-screenshot',\n      name: 'Take a screenshot on errors'\n    }, {\n      id: 'delay',\n      name: 'Pause'\n    }, {\n      id: 'barrier',\n      name: 'Wait for all users to reach this point'\n    }, {\n      id: 'waitForFinish',\n      name: 'Wait for remaining test duration to pass'\n    }]\n  }];\n  const WdioSpecTemplates = {};\n  WdioSpecTemplates['url'] = 'await browser.url(\"https://www.google.com\");';\n  WdioSpecTemplates['skeleton'] = `import * as assert from 'assert';\n\ndescribe('A basic test', () => {\n  it('should be possible to go to google', async () => {\n    await browser.url('https://www.google.com');\n    await browser.saveScreenshot('HomePage.png');\n    let title = await browser.getTitle();\n    assert.strictEqual(title, 'Google');\n  });\n});`;\n  WdioSpecTemplates['screenshot'] = 'await browser.saveScreenshot(\\'HomePage.png\\');';\n  WdioSpecTemplates['error-screenshot'] = `browser.on('error', async e => {\n  await browser.saveScreenshot('Error.png');\n});`;\n  WdioSpecTemplates['logging-fatal'] = 'browser.testableLogFatal(\"Use this to cause the entire test execution to stop as a result of an error\");';\n  WdioSpecTemplates['logging-error'] = 'browser.testableLogError(\"Use this to log errors to display in the results\");';\n  WdioSpecTemplates['logging-info'] = 'browser.testableLogInfo(\"Use this to log info statements to display in the results\");';\n  WdioSpecTemplates['logging-debug'] = 'browser.testableLogDebug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");';\n  WdioSpecTemplates['logging-trace'] = 'browser.testableLogTrace(\"Only logged during a smoke test!\");';\n  WdioSpecTemplates['script-param'] = 'process.env.ABC // script parameter Abc';\n  WdioSpecTemplates['delay'] = 'await browser.pause(5000);';\n  WdioSpecTemplates['datatable-next'] = `let results = browser.testableCsvNext(csvFile, [options]);\nconsole.log(\"Symbol: \" + results[0].data[\"Symbol\"]);`;\n  WdioSpecTemplates['datatable-get'] = `let result = browser.testableCsvGet(csvFile, index);\nconsole.log(\"Symbol: \" + result.data[\"Symbol\"]);`;\n  WdioSpecTemplates['datatable-random'] = `let result = browser.testableCsvRandom(csvFile);\nconsole.log(\"Symbol: \" + result.data[\"Symbol\"]);`;\n  WdioSpecTemplates['metrics-timing'] = `let result = browser.testableResult();\nbrowser.testableTiming(result, { namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  WdioSpecTemplates['metrics-counter'] = `let result = browser.testableResult();\nbrowser.testableCounter(result, { namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  WdioSpecTemplates['metrics-histogram'] = `let result = browser.testableResult();\nbrowser.testableHistogram(result, { namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  WdioSpecTemplates['metrics-metered'] = `let result = browser.testableResult();\nbrowser.testableMetered(result, { namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  WdioSpecTemplates['stopwatch'] = `// blocks until done() is called\nbrowser.testableStopwatch(done => {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  WdioSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nawait browser.testableWaitForFinish();`;\n  WdioSpecTemplates['barrier'] = `// wait for all users to reach this point in the test before continuing\nawait browser.testableBarrier('Login');`;\n  WdioSpecTemplates['skeletonCode'] = `const { remote } = require('webdriverio');\n\n(async () => {\n  const browser = await remote({\n    capabilities: {\n      browserName: 'chrome'\n    }\n  });\n\n  await browser.url('https://webdriver.io');\n\n  const apiLink = await browser.$('=API');\n  await apiLink.click();\n\n  await browser.saveScreenshot('./screenshot.png');\n  await browser.deleteSession();\n})();`;\n  const WdioConfTemplates = {};\n  WdioConfTemplates['skeleton'] = `exports.config = {\n  specs: [\n    \"test.ts\"\n  ],\n  capabilities: [\n    {\n      browserName: \"chrome\"\n    }\n  ],\n  logLevel: \"warn\",\n  coloredLogs: true,\n  framework: \"mocha\",\n  waitforTimeout: 60000,\n  mochaOpts: {\n    ui: \"bdd\",\n    timeout: 60000,\n  },\n  autoCompileOpts: {\n    autoCompile: true,\n    tsNodeOpts: {\n      transpileOnly: true,\n      project: 'tsconfig.json'\n    }\n  }\n};`;\n  WdioConfTemplates['chrome'] = `{\n  browserName: \"chrome\"\n}\n`;\n  WdioConfTemplates['firefox'] = `{\n  browserName: \"firefox\"\n}\n`;\n  const DefaultWdioPackageJson = `{\n  \"name\": \"wdio-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple WebDriver.io Testable Example in TypeScript\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"@types/mocha\": \"${_versions.default.types.mocha}\",\n    \"@types/node\": \"${_versions.default.types.node}\",\n    \"@wdio/cli\": \"${_versions.default.wdio.cli}\",\n    \"@wdio/local-runner\": \"${_versions.default.wdio.localRunner}\",\n    \"@wdio/mocha-framework\": \"${_versions.default.wdio.mochaFramework}\",\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"ts-node\": \"${_versions.default.tsNode}\",\n    \"tsconfig-paths\": \"${_versions.default.tsconfigPaths}\",\n    \"typescript\": \"${_versions.default.typescript}\",\n    \"webdriverio\": \"${_versions.default.wdio.version}\"\n  }\n}`;\n  const WdioConfTemplateOptions = [{\n    id: 'skeleton',\n    name: 'Configuration skeleton'\n  }, {\n    id: 'chrome',\n    name: 'Chrome capability'\n  }, {\n    id: 'firefox',\n    name: 'Firefox capability'\n  }];\n  const tsconfig = `{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"*\": [ \"./*\" ],\n      \"test/*\": [\"./*\"]\n    },\n    \"types\": [\"node\", \"@wdio/sync\", \"@wdio/mocha-framework\", \"testable-utils\"]\n  },\n  \"include\": [\n    \"./**/*.ts\"\n  ]\n}\n`;\n  var _default = _exports.default = {\n    specOptions: WdioSpecTemplateOptions,\n    spec: WdioSpecTemplates,\n    confOptions: WdioConfTemplateOptions,\n    conf: WdioConfTemplates,\n    defaultPackageJson: DefaultWdioPackageJson,\n    tsconfig: tsconfig\n  };\n});","define(\"@testable/shared-ui/utils/templates/wdio-templates\", [\"exports\", \"@testable/shared-ui/utils/templates/versions\"], function (_exports, _versions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/templates/versions\"eaimeta@70e063a35619d71f\n  const WdioSpecTemplateOptions = type => {\n    return [{\n      groupName: 'Getting Started',\n      options: [{\n        id: 'url',\n        name: 'Open a URL'\n      }, {\n        id: 'skeleton',\n        name: type === 'Mocha' ? 'Mocha Test skeleton' : 'Test skeleton'\n      }]\n    }, {\n      groupName: 'CSV Data',\n      options: [{\n        id: 'datatable-next',\n        name: 'Execution wide iterator, get next row'\n      }, {\n        id: 'datatable-random',\n        name: 'Get random row'\n      }, {\n        id: 'datatable-get',\n        name: 'Get row by index'\n      }]\n    }, {\n      groupName: 'Metrics',\n      options: [{\n        id: 'metrics-timing',\n        name: 'Timing'\n      }, {\n        id: 'metrics-counter',\n        name: 'Counter'\n      }, {\n        id: 'metrics-histogram',\n        name: 'Histogram'\n      }, {\n        id: 'metrics-metered',\n        name: 'Metered'\n      }]\n    }, {\n      groupName: 'Logging',\n      options: [{\n        id: 'logging-trace',\n        name: 'Trace'\n      }, {\n        id: 'logging-debug',\n        name: 'Debug'\n      }, {\n        id: 'logging-info',\n        name: 'Info'\n      }, {\n        id: 'logging-error',\n        name: 'Error'\n      }, {\n        id: 'logging-fatal',\n        name: 'Fatal'\n      }]\n    }, {\n      groupName: 'Misc',\n      options: [{\n        id: 'script-param',\n        name: 'Script parameter'\n      }, {\n        id: 'screenshot',\n        name: 'Take a screenshot'\n      }, {\n        id: 'error-screenshot',\n        name: 'Take a screenshot on errors'\n      }, {\n        id: 'delay',\n        name: 'Pause'\n      }, {\n        id: 'barrier',\n        name: 'Wait for all users to reach this point'\n      }, {\n        id: 'waitForFinish',\n        name: 'Wait for remaining test duration to pass'\n      }]\n    }];\n  };\n  const WdioSpecTemplates = {};\n  WdioSpecTemplates['url'] = 'await browser.url(\"https://www.google.com\");';\n  WdioSpecTemplates['skeleton'] =\n  // `Conf file`\n  `const assert = require('assert');\n\ndescribe('A basic test', function() {\n  it('should be possible to go to google', async function() {\n    await browser.url('https://www.google.com');\n    await browser.saveScreenshot('HomePage.png');\n    const title = await browser.getTitle();\n    assert.equal(title, 'Google');\n  });\n});`;\n  WdioSpecTemplates['screenshot'] = 'await browser.saveScreenshot(\\'HomePage.png\\');';\n  WdioSpecTemplates['error-screenshot'] = `browser.on('error', function(e) {\n  await browser.saveScreenshot('Error.png');\n});`;\n  WdioSpecTemplates['logging-fatal'] = `browser.testableLogFatal(\"Use this to cause the entire test execution to stop as a result of an error\");`;\n  WdioSpecTemplates['logging-error'] = `browser.testableLogError(\"Use this to log errors to display in the results\");`;\n  WdioSpecTemplates['logging-info'] = `browser.testableLogInfo(\"Use this to log info statements to display in the results\");`;\n  WdioSpecTemplates['logging-debug'] = `browser.testableLogDebug(\"Use this for debugging. Remember that during a load test the scenario can get executed many times!\");`;\n  WdioSpecTemplates['logging-trace'] = `browser.testableLogTrace(\"Only logged during a smoke test!\");`;\n  WdioSpecTemplates['script-param'] = `process.env.ABC // script parameter Abc`;\n  WdioSpecTemplates['delay'] = `await browser.pause(5000);`;\n  WdioSpecTemplates['datatable-next'] = `const results = browser.testableCsvNext(csvFile, [options]);\nconsole.log(\"Symbol: \" + results[0].data[\"Symbol\"]);`;\n  WdioSpecTemplates['datatable-get'] = `const result = browser.testableCsvGet(csvFile, index);\nconsole.log(\"Symbol: \" + result.data[\"Symbol\"]);`;\n  WdioSpecTemplates['datatable-random'] = `const result = browser.testableCsvRandom(csvFile);\nconsole.log(\"Symbol: \" + result.data[\"Symbol\"]);`;\n  WdioSpecTemplates['metrics-timing'] = `const result = browser.testableResult();\nbrowser.testableTiming(result, { namespace: \"User\", name: \"My Custom Timing\", val: 125, units: \"ms\" });`;\n  WdioSpecTemplates['metrics-counter'] = `const result = browser.testableResult();\nbrowser.testableCounter(result, { namespace: \"User\", name: \"My Custom Counter\", val: 3, units: \"bytes\" });`;\n  WdioSpecTemplates['metrics-histogram'] = `const result = browser.testableResult();\nbrowser.testableHistogram(result, { namespace: \"User\", name: \"My Custom Histogram\", key: \"Success Bucket\", val: 2 });`;\n  WdioSpecTemplates['metrics-metered'] = `const result = browser.testableResult();\nbrowser.testableMetered(result, { namespace: \"User\", name: \"Browser Memory\", key: require('os').hostname(), val: 2123432, units: \"bytes\" });`;\n  WdioSpecTemplates['stopwatch'] = `// blocks until done() is called\nbrowser.testableStopwatch(function(done) {\n  // some code to time\n  done();\n}, \"My Timing Metric\", [resource]);`;\n  WdioSpecTemplates['waitForFinish'] = `// blocks for however long remains in this test\nawait browser.testableWaitForFinish();`;\n  WdioSpecTemplates['barrier'] = `// wait for all users to reach this point in the test before continuing\nawait browser.testableBarrier('Login');`;\n  WdioSpecTemplates['skeletonCode'] =\n  // Script + None\n  `const { remote } = require('webdriverio');\n\n(async () => {\n  const browser = await remote({\n    capabilities: {\n      browserName: 'chrome'\n    }\n  });\n\n  await browser.url('https://webdriver.io');\n\n  const apiLink = await browser.$('=API');\n  await apiLink.click();\n\n  await browser.saveScreenshot('./screenshot.png');\n  await browser.deleteSession();\n})();\n`;\n  WdioSpecTemplates['script'] =\n  // Script + Mocha\n  `const assert = require('assert');\nconst { remote } = require('webdriverio');\n\ndescribe('A basic test', function() {\n  before(async () => {\n    global.browser = await remote({\n      capabilities: {\n        browserName: 'chrome'\n      }\n    });\n  });\n\n  it('should be possible to go to google', async () => {\n    await browser.url('https://www.google.com');\n    await browser.saveScreenshot('HomePage.png');\n    const title = await browser.getTitle();\n    assert.equal(title, 'Google');\n  });\n\n  after(async () => {\n    await browser.deleteSession();\n  });\n});`;\n  const WdioConfTemplates = {};\n  WdioConfTemplates['skeleton'] = `exports.config = {\n  specs: [\n    \"./test.js\"\n  ],\n  maxInstances: 1,\n  capabilities: [\n    {\n      browserName: \"chrome\"\n    }\n  ],\n  logLevel: \"warn\",\n  coloredLogs: true,\n  framework: \"mocha\",\n  waitforTimeout: 60000,\n  mochaOpts: {\n    ui: \"bdd\",\n    timeout: 60000\n  }\n};\n`;\n  WdioConfTemplates['chrome'] = `{\n  browserName: \"chrome\"\n}\n`;\n  WdioConfTemplates['firefox'] = `{\n  browserName: \"firefox\"\n}\n`;\n  const DefaultWdioPackageJson = `{\n  \"name\": \"wdio-testable-demo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Simple WebDriver.io Example\",\n  \"author\": \"Testable\",\n  \"devDependencies\": {\n    \"testable-utils\": \"${_versions.default.testableUtils}\",\n    \"webdriverio\": \"${_versions.default.wdio.version}\",\n    \"@wdio/cli\": \"${_versions.default.wdio.cli}\",\n    \"@wdio/local-runner\": \"${_versions.default.wdio.localRunner}\",\n    \"@wdio/mocha-framework\": \"${_versions.default.wdio.mochaFramework}\"\n  }\n}\n`;\n  const WdioConfTemplateOptions = [{\n    id: 'skeleton',\n    name: 'Configuration skeleton'\n  }, {\n    id: 'chrome',\n    name: 'Chrome capability'\n  }, {\n    id: 'firefox',\n    name: 'Firefox capability'\n  }];\n  var _default = _exports.default = {\n    specOptions: WdioSpecTemplateOptions,\n    spec: WdioSpecTemplates,\n    confOptions: WdioConfTemplateOptions,\n    conf: WdioConfTemplates,\n    defaultPackageJson: DefaultWdioPackageJson\n  };\n});","define(\"@testable/shared-ui/utils/test-cases\", [\"exports\", \"@ember/object\", \"tracked-built-ins\"], function (_exports, _object, _trackedBuiltIns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n  function getCollapse(path) {\n    const storageKey = window.localStorage.getItem(path);\n    return storageKey === 'true';\n  }\n  function folderId(path) {\n    const encoded = path.replace(/[^a-zA-Z0-9]/g, c => `-${c.charCodeAt(0).toString(16)}-`);\n    return `dir-${encoded}`;\n  }\n  function getFolderStructure(data, expandAll) {\n    const nestedStructure = {\n      id: 'base',\n      name: '/',\n      isFolder: true,\n      readOnly: true,\n      children: {}\n    };\n    const nestedStructureInit = [new _trackedBuiltIns.TrackedObject({\n      ...nestedStructure,\n      path: '/',\n      baseFolder: true\n    })];\n    data.forEach((testCases, i) => {\n      const item = testCases.testCase || testCases;\n      const parts = item.path ? item.path.split('/').slice(0, -1).filter(Boolean) : [];\n      let currentLevel = nestedStructure;\n      let folderPath = '/';\n      parts.forEach(part => {\n        folderPath += `${part}/`;\n        const path = folderPath.slice(0, -1); // Remove trailing slash\n        if (!currentLevel.children[part]) {\n          currentLevel.children[part] = new _trackedBuiltIns.TrackedObject({\n            id: folderId(path),\n            name: part,\n            isFolder: true,\n            path,\n            children: {}\n          });\n        }\n        currentLevel = currentLevel.children[part];\n      });\n      if (!currentLevel.children[item.name]) {\n        const childInstance = testCases;\n        childInstance.children = {};\n        currentLevel.children[item.name] = childInstance;\n      }\n    });\n    const convertToArr = nested => {\n      return Object.entries(nested.children).map(([name, child]) => {\n        const childInstance = child;\n        (0, _object.set)(childInstance, 'name', name);\n        (0, _object.set)(childInstance, 'isClosed', expandAll ? expandAll === 'false' : getCollapse(childInstance.path));\n        (0, _object.set)(childInstance, 'children', convertToArr(childInstance));\n        return childInstance;\n      });\n    };\n    const structure = nestedStructureInit;\n    structure[0].children = convertToArr(nestedStructure);\n    return structure;\n  }\n  function findFolder(structure, path) {\n    if (!path || path === '/') {\n      return structure[0];\n    }\n    const parts = path.split('/').filter(Boolean);\n    let current = structure[0];\n    for (const part of parts) {\n      current = _.find(current?.children, child => child.isFolder && child.name === part);\n      if (!current) {\n        return null;\n      }\n    }\n    return current;\n  }\n\n  // Creates any folders along path that don't exist yet, and returns the deepest one\n  function ensureFolder(structure, path, expandAll) {\n    const parts = path.split('/').filter(Boolean);\n    let current = structure[0];\n    let folderPath = '';\n    for (const part of parts) {\n      folderPath += `/${part}`;\n      let next = _.find(current.children, child => child.isFolder && child.name === part);\n      if (!next) {\n        next = new _trackedBuiltIns.TrackedObject({\n          id: folderId(folderPath),\n          name: part,\n          isFolder: true,\n          path: folderPath,\n          children: [],\n          isClosed: expandAll ? expandAll === 'false' : getCollapse(folderPath)\n        });\n        (0, _object.set)(current, 'children', [...(current.children || []), next]);\n      }\n      current = next;\n    }\n    return current;\n  }\n\n  // Removes folders left empty by a move, walking back up to the root\n  function pruneEmptyFolders(structure, path) {\n    let currentPath = path;\n    while (currentPath && currentPath !== '/') {\n      const folder = findFolder(structure, currentPath);\n      if (!folder || folder.children?.length > 0) {\n        return;\n      }\n      const parentPath = currentPath.split('/').slice(0, -1).join('/');\n      const parent = findFolder(structure, parentPath || '/');\n      if (!parent) {\n        return;\n      }\n      (0, _object.set)(parent, 'children', _.filter(parent.children, child => child !== folder));\n      currentPath = parentPath;\n    }\n  }\n\n  // Removes the node from wherever it currently sits, and returns the folder it was removed from\n  function removeNode(folder, id) {\n    let removedFrom = null;\n    _.forEach(folder.children, child => {\n      if (child.isFolder) {\n        removedFrom = removeNode(child, id) || removedFrom;\n      }\n    });\n    if (_.some(folder.children, child => !child.isFolder && child.id === id)) {\n      (0, _object.set)(folder, 'children', _.filter(folder.children, child => child.isFolder || child.id !== id));\n      removedFrom = folder;\n    }\n    return removedFrom;\n  }\n\n  // Relocates a single node in place so the rest of the tree keeps its identity\n  function moveNode(structure, node, newPath, expandAll) {\n    if (!structure?.length) {\n      return;\n    }\n    const newFolderPath = newPath ? newPath.split('/').slice(0, -1).join('/') : '';\n    const oldFolder = removeNode(structure[0], node.id);\n    const newFolder = ensureFolder(structure, newFolderPath, expandAll);\n\n    // The full rebuild used to restamp these; a relocated node has to carry them itself\n    const newName = newPath ? newPath.split('/').filter(Boolean).pop() : node.name;\n    if (node.path !== newPath) (0, _object.set)(node, 'path', newPath);\n    if (newName && node.name !== newName) (0, _object.set)(node, 'name', newName);\n    if (!_.includes(newFolder.children, node)) {\n      (0, _object.set)(newFolder, 'children', [...(newFolder.children || []), node]);\n    }\n    if (oldFolder && oldFolder !== newFolder && oldFolder.path) {\n      pruneEmptyFolders(structure, oldFolder.path);\n    }\n  }\n  function mergeTestCases(updatedTestCases, existingTestCases) {\n    if (!_.isArray(updatedTestCases)) {\n      return;\n    }\n    const toRemove = [];\n    const toAdd = [];\n    _.forEach(existingTestCases, existingTestCase => {\n      const updated = _.find(updatedTestCases, candidate => {\n        return candidate.id === existingTestCase.id;\n      });\n      if (!updated) {\n        toRemove.push(existingTestCase);\n      } else {\n        existingTestCase.setProperties(updated);\n      }\n    });\n    _.forEach(updatedTestCases, updatedTestCase => {\n      const existing = _.find(existingTestCases, candidate => {\n        return candidate.id === updatedTestCase.id;\n      });\n      if (!existing) {\n        toAdd.push(updatedTestCase);\n      }\n    });\n    if (toRemove.length > 0) {\n      existingTestCases.removeObjects(toRemove);\n    }\n    if (toAdd.length > 0) {\n      existingTestCases.pushObjects(toAdd);\n    }\n  }\n  var _default = _exports.default = {\n    getFolderStructure: getFolderStructure,\n    mergeTestCases: mergeTestCases,\n    moveNode: moveNode\n  };\n});","define(\"@testable/shared-ui/utils/utilization\", [\"exports\", \"@testable/shared-ui/utils/load-test\"], function (_exports, _loadTest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@testable/shared-ui/utils/load-test\"eaimeta@70e063a35619d71f\n  function getThreshold(config) {\n    return Number(config?.settings?.utilizationWarningThreshold || 80);\n  }\n  function getNumIntervalsMovingAverage(config) {\n    return Number(config?.settings?.numIntervalsMovingAverage || 6);\n  }\n  function getShowRelativeTime(config) {\n    return Number(config?.settings?.showRelativeTime === 1 ? 1 : 0);\n  }\n  function getMetricSuffix(config) {\n    const numIntervalsMA = getNumIntervalsMovingAverage(config);\n    if (numIntervalsMA === 1) {\n      return '';\n    }\n    if (numIntervalsMA === 30) {\n      return '5mMA';\n    }\n    return '1mMA';\n  }\n  function printNumIntervals(numIntervals) {\n    if (numIntervals === 1) {\n      return '10 seconds';\n    }\n    if (numIntervals === 30) {\n      return '5 minutes';\n    }\n    return '1 minute';\n  }\n  function getBucketCountExceedingThresholdForMetric(buckets, threshold, metric) {\n    return _.reduce(buckets, function (sum, bucket) {\n      if (bucket && bucket.metrics && bucket.metrics.length > 0) {\n        const match = _.find(bucket.metrics, function (m) {\n          return m.namespace === _loadTest.default.SystemNs && m.metricDef === metric;\n        });\n        if (match && match.bucketValue >= threshold) {\n          return sum + 1;\n        }\n      }\n      return sum;\n    }, 0);\n  }\n  function exceedsThreshold(bucket, threshold, metric) {\n    if (bucket && bucket.metrics && bucket.metrics.length > 0) {\n      const match = _.find(bucket.metrics, function (m) {\n        return m.namespace === _loadTest.default.SystemNs && m.metricDef === metric;\n      });\n      return match && match.bucketValue >= threshold;\n    }\n    return false;\n  }\n  function getBucketsExceedingThreshold(buckets, config) {\n    const answer = new Set();\n    if (buckets && buckets.length > 0) {\n      const threshold = getThreshold(config);\n      const suffix = getMetricSuffix(config);\n      _.forEach(buckets, function (bucket) {\n        if (exceedsThreshold(bucket, threshold, 'memory' + suffix + 'Utilization') || exceedsThreshold(bucket, threshold, 'cpu' + suffix + 'Utilization')) {\n          answer.add(bucket.bucket);\n        }\n      });\n    }\n    return answer;\n  }\n  function hasMetrics(bucket, metrics) {\n    if (bucket && bucket.metrics && bucket.metrics.length > 0) {\n      return _.findIndex(bucket.metrics, function (m) {\n        return _.findIndex(metrics, function (candidateMetric) {\n          return m.namespace === candidateMetric.namespace && m.metricDef === candidateMetric.name;\n        }) >= 0;\n      }) >= 0;\n    }\n    return false;\n  }\n  function getBucketCount(buckets, metrics) {\n    return _.reduce(buckets, function (sum, bucket) {\n      return hasMetrics(bucket, metrics) ? sum + 1 : sum;\n    }, 0);\n  }\n  function getBucketsWithMetrics(buckets, metrics) {\n    return _.filter(buckets, function (bucket) {\n      return hasMetrics(bucket, metrics);\n    });\n  }\n  function getUtilizationWarning(buckets, config) {\n    if (buckets && buckets.length > 0) {\n      const threshold = getThreshold(config);\n      const numIntervalsMA = getNumIntervalsMovingAverage(config);\n      const suffix = getMetricSuffix(config);\n      const memCount = getBucketCountExceedingThresholdForMetric(buckets, threshold, 'memory' + suffix + 'Utilization');\n      const cpuCount = getBucketCountExceedingThresholdForMetric(buckets, threshold, 'cpu' + suffix + 'Utilization');\n      // if a test runner has more than 25k connections open we start to run the risk of running out of ports\n      const connectionsCount = getBucketCountExceedingThresholdForMetric(buckets, 25000, 'testRunnerConnections');\n      const overallCount = getBucketCount(buckets, [{\n        namespace: _loadTest.default.SystemNs,\n        name: 'memoryUtilization'\n      }]);\n      if (memCount > 0 || cpuCount > 0 || connectionsCount > 0) {\n        let text = '<strong>Warning: Test runner overloading may have affected the ' + 'results of this test.</strong>';\n        if (memCount > 0) {\n          text += ' Average memory utilization exceeded ' + threshold + '% on <strong>' + memCount + ' of ' + overallCount + '</strong> test runners for at least ' + printNumIntervals(numIntervalsMA) + '.';\n        }\n        if (cpuCount > 0) {\n          text += ' Average CPU utilization exceeded ' + threshold + '% on <strong>' + cpuCount + ' of ' + overallCount + '</strong> test runners for at least ' + printNumIntervals(numIntervalsMA) + '.';\n        }\n        if (connectionsCount > 0) {\n          text += ' Total open connections exceeded 25k on <strong>' + connectionsCount + ' of ' + overallCount + '</strong> test runners causing the test to potentially run out of open ports to make requests.';\n        }\n        return text;\n      }\n    }\n    return null;\n  }\n  var _default = _exports.default = {\n    getThreshold: getThreshold,\n    getUtilizationWarning: getUtilizationWarning,\n    getNumIntervalsMovingAverage: getNumIntervalsMovingAverage,\n    getBucketsExceedingThreshold: getBucketsExceedingThreshold,\n    getBucketCount: getBucketCount,\n    getBucketsWithMetrics: getBucketsWithMetrics,\n    getShowRelativeTime\n  };\n});","define(\"ember-bootstrap/components/bs-accordion\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"ember-bootstrap/components/bs-accordion/item\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _item, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"ember-bootstrap/components/bs-accordion/item\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"accordion\"\n    ...attributes\n  >\n    {{yield\n      (hash\n        item=(component (ensure-safe-component this.itemComponent) selected=this.isSelected onClick=this.doChange)\n        change=this.doChange\n      )\n    }}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"accordion\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,2,[[28,[37,2],null,[[\\\"item\\\",\\\"change\\\"],[[50,[28,[37,4],[[30,0,[\\\"itemComponent\\\"]]],null],0,null,[[\\\"selected\\\",\\\"onClick\\\"],[[30,0,[\\\"isSelected\\\"]],[30,0,[\\\"doChange\\\"]]]]],[30,0,[\\\"doChange\\\"]]]]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-accordion.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Bootstrap-style [accordion group](http://getbootstrap.com/javascript/#collapse-example-accordion),\n    with collapsible/expandable items.\n  \n    ### Usage\n  \n    Use as a block level component with any number of yielded [Components.AccordionItem](Components.AccordionItem.html)\n    components as children:\n  \n    ```handlebars\n    <BsAccordion as |acc|>\n      <acc.item @value={{1}} @title=\"First item\">\n        <p>Lorem ipsum...</p>\n        <button {{on \"click\" (fn acc.change 2)}}>\n          Next\n        </button>\n      </acc.item>\n      <acc.item @value={{2}} @title=\"Second item\">\n        <p>Lorem ipsum...</p>\n      </acc.item>\n      <acc.item @value={{3}} @title=\"Third item\">\n        <p>Lorem ipsum...</p>\n      </acc.item>\n    </BsAccordion>\n    ```\n  \n    In the example above the first accordion item utilizes the yielded `change` action to add some custom behaviour.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Accordion\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let Accordion = _exports.default = (_class = class Accordion extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * The value of the currently selected accordion item. Set this to change selection programmatically.\n       *\n       * When the selection is changed by user interaction this property will not update by using two-way bindings in order\n       * to follow DDAU best practices. If you want to react to such changes, subscribe to the `onChange` action\n       *\n       * @property selected\n       * @public\n       */\n      /**\n       * @property itemComponent\n       * @type {String}\n       * @private\n       */\n      // Updates to `@selected` argument are observed implicitly. See `isSelected`\n      // getter and setter for details.\n      //\n      // We should evaluate if we can refactor to localCopy decorator from the tracked-toolbox\n      // to reduce complexity.\n      //\n      // eslint-disable-next-line ember/no-tracked-properties-from-args\n      _initializerDefineProperty(this, \"_isSelected\", _descriptor, this);\n      _defineProperty(this, \"_isSelectedNonTracked\", this.args.selected);\n      _defineProperty(this, \"_prevSelected\", this.args.selected);\n    }\n    get itemComponent() {\n      return this.args.itemComponent ?? _item.default;\n    }\n\n    /**\n     * The value of the currently selected accordion item\n     *\n     * @property isSelected\n     * @private\n     */\n    get isSelected() {\n      // ideally we would have used @localCopy here, but unfortunately this fails for Ember 3.16 in this special case\n      // see https://github.com/pzuraq/tracked-toolbox/issues/17\n      // So don't look at this, it is going to get ugly...\n      this._isSelected; // just consume this to invalidate the getter when this changes\n\n      if (this.args.selected && this._prevSelected !== this.args.selected) {\n        // eslint-disable-next-line ember/no-side-effects\n        this._isSelectedNonTracked = this._prevSelected = this.args.selected;\n      }\n      return this._isSelectedNonTracked;\n    }\n    set isSelected(value) {\n      this._isSelectedNonTracked = value;\n      this._isSelected = value;\n    }\n\n    /**\n     * Action when the selected accordion item is about to be changed.\n     *\n     * You can return false to prevent changing the active item, and do that in your action by\n     * setting the `selected` accordingly.\n     *\n     * @event onChange\n     * @param newValue\n     * @param oldValue\n     * @public\n     */\n\n    doChange(newValue) {\n      const oldValue = this.isSelected;\n      if (oldValue === newValue) {\n        newValue = null;\n      }\n      if (this.args.onChange?.(newValue, oldValue) !== false) {\n        this.isSelected = newValue;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_isSelected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.selected;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"doChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doChange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Accordion);\n});","define(\"ember-bootstrap/components/bs-accordion/item\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object/internals\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _component2, _internals, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object/internals\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#let\n    (component (ensure-safe-component (bs-default @titleComponent (component \"bs-accordion/item/title\"))) collapsed=this.collapsed disabled=@disabled onClick=(fn (bs-default @onClick (bs-noop)) this.value))\n    (component (ensure-safe-component (bs-default @bodyComponent (component \"bs-accordion/item/body\"))) collapsed=this.collapsed)\n    (unique-id)\n    (unique-id)\n  as |Title Body titleId collapsableId|\n  }}\n    <div\n      class=\"{{if @disabled \"disabled\"}} {{this.typeClass}} {{if (macroCondition (macroGetOwnConfig \"isBS4\")) \"card\"}} {{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"accordion-item\"}}\"\n      ...attributes\n    >\n      {{#if (has-block-params)}}\n        {{yield\n          (hash\n            title=Title\n            body=Body\n          )\n        }}\n      {{else}}\n        <Title id={{titleId}} @controls={{collapsableId}}>\n          {{@title}}\n        </Title>\n        <Body @collapsableId={{collapsableId}} @describedby={{titleId}}>\n          {{yield\n            (hash\n              title=Title\n              body=Body\n            )\n          }}\n        </Body>\n      {{/if}}\n    </div>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[50,[28,[37,2],[[28,[37,3],[[30,1],[50,\\\"bs-accordion/item/title\\\",0,null,null]],null]],null],0,null,[[\\\"collapsed\\\",\\\"disabled\\\",\\\"onClick\\\"],[[30,0,[\\\"collapsed\\\"]],[30,2],[28,[37,4],[[28,[37,3],[[30,3],[28,[37,5],null,null]],null],[30,0,[\\\"value\\\"]]],null]]]],[50,[28,[37,2],[[28,[37,3],[[30,4],[50,\\\"bs-accordion/item/body\\\",0,null,null]],null]],null],0,null,[[\\\"collapsed\\\"],[[30,0,[\\\"collapsed\\\"]]]]],[28,[37,6],null,null],[28,[37,6],null,null]],[[[1,\\\"  \\\"],[11,0],[16,0,[29,[[52,[30,2],\\\"disabled\\\"],\\\" \\\",[30,0,[\\\"typeClass\\\"]],\\\" \\\",[27],\\\" \\\",\\\"accordion-item\\\"]]],[17,9],[12],[1,\\\"\\\\n\\\"],[41,[49,[30,11]],[[[1,\\\"      \\\"],[18,11,[[28,[37,11],null,[[\\\"title\\\",\\\"body\\\"],[[30,5],[30,6]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[30,5],[[16,1,[30,7]]],[[\\\"@controls\\\"],[[30,8]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[30,10]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[30,6],null,[[\\\"@collapsableId\\\",\\\"@describedby\\\"],[[30,8],[30,7]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[18,11,[[28,[37,11],null,[[\\\"title\\\",\\\"body\\\"],[[30,5],[30,6]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[5,6,7,8]]]],[\\\"@titleComponent\\\",\\\"@disabled\\\",\\\"@onClick\\\",\\\"@bodyComponent\\\",\\\"Title\\\",\\\"Body\\\",\\\"titleId\\\",\\\"collapsableId\\\",\\\"&attrs\\\",\\\"@title\\\",\\\"&default\\\"],[\\\"let\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"fn\\\",\\\"bs-noop\\\",\\\"unique-id\\\",\\\"div\\\",\\\"if\\\",\\\"has-block-params\\\",\\\"yield\\\",\\\"hash\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-accordion/item.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   A collapsible/expandable item within an accordion\n  \n   See [Components.Accordion](Components.Accordion.html) for examples.\n  \n   @class AccordionItem\n   @namespace Components\n   @extends Ember.Component\n   @public\n   */\n  let AccordionItem = _exports.default = (_class = class AccordionItem extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * The title of the accordion item, displayed as a .panel-title element\n       *\n       * @property title\n       * @type string\n       * @public\n       */\n      /**\n       * The value of the accordion item, which is used as the value of the `selected` property of the parent [Components.Accordion](Components.Accordion.html) component\n       *\n       * @property value\n       * @public\n       */\n      _initializerDefineProperty(this, \"value\", _descriptor, this);\n      /**\n       * @property disabled\n       * @type boolean\n       * @public\n       */\n      /**\n       * Property for type styling\n       *\n       * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/navbar/#color-schemes)\n       *\n       * @property type\n       * @type String\n       * @default 'default'\n       * @public\n       */\n      _initializerDefineProperty(this, \"type\", _descriptor2, this);\n    }\n    /**\n     * @property selected\n     * @private\n     */\n\n    /**\n     * @property titleComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property bodyComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property collapsed\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get collapsed() {\n      return this.value !== this.args.selected;\n    }\n    get typeClass() {\n      return `bg-${this.type}`;\n    }\n\n    /**\n     * Reference to the parent `Components.Accordion` class.\n     *\n     * @property accordion\n     * @private\n     */\n\n    /**\n     * @event onClick\n     * @public\n     */\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"value\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return (0, _internals.guidFor)(this);\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"type\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'default';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccordionItem);\n});","define(\"ember-bootstrap/components/bs-accordion/item/body\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <BsCollapse @collapsed={{@collapsed}} class=\"accordion-collapse\" id={{@collapsableId}} aria-describedby={{@describedby}}>\n    <div class=\"{{if (macroCondition (macroGetOwnConfig \"isBS4\")) \"card-body\"}} {{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"accordion-body\"}}\">\n      {{yield}}\n    </div>\n  </BsCollapse>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"accordion-collapse\\\"],[16,1,[30,1]],[16,\\\"aria-describedby\\\",[30,2]]],[[\\\"@collapsed\\\"],[[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[27],\\\" \\\",\\\"accordion-body\\\"]]],[12],[1,\\\"\\\\n    \\\"],[18,4,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]]]],[\\\"@collapsableId\\\",\\\"@describedby\\\",\\\"@collapsed\\\",\\\"&default\\\"],[\\\"bs-collapse\\\",\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-accordion/item/body.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   Component for an accordion item body.\n  \n   See [Components.Accordion](Components.Accordion.html) for examples.\n  \n   @class AccordionItemBody\n   @namespace Components\n   @extends Ember.Component\n   @public\n   */\n\n  /**\n   * @property collapsed\n   * @type boolean\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-accordion/item/title\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- template-lint-disable no-nested-interactive --}}\n  {{!-- @todo fix this, see https://github.com/kaliber5/ember-bootstrap/issues/999 --}}\n  {{#if (macroCondition (macroGetOwnConfig \"isBS5\"))}}\n    <h2\n      class=\"accordion-header\"\n      ...attributes\n    >\n      <button\n        class=\"accordion-button {{if @disabled \"disabled\"}} {{if @collapsed \"collapsed\"}}\"\n        type=\"button\"\n        disabled={{@disabled}}\n        aria-controls={{@controls}}\n        aria-expanded={{if @collapsed \"false\" \"true\"}}\n        {{on \"click\" this.handleClick}}\n      >\n        {{yield}}\n      </button>\n    </h2>\n  {{else}}\n    <div\n      class=\"card-header\"\n    >\n      <h2\n        class=\"mb-0\"\n        ...attributes\n      >\n        <button\n          class=\"btn btn-link {{if @disabled \"disabled\"}} {{if @collapsed \"collapsed\" \"expanded\"}}\"\n          type=\"button\"\n          disabled={{@disabled}}\n          aria-controls={{@controls}}\n          aria-expanded={{if @collapsed \"false\" \"true\"}}\n          {{on \"click\" this.handleClick}}\n        >\n          {{yield}}\n        </button>\n      </h2>\n    </div>\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,\\\"  \\\"],[11,\\\"h2\\\"],[24,0,\\\"accordion-header\\\"],[17,1],[12],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"accordion-button \\\",[52,[30,2],\\\"disabled\\\"],\\\" \\\",[52,[30,3],\\\"collapsed\\\"]]]],[16,\\\"disabled\\\",[30,2]],[16,\\\"aria-controls\\\",[30,4]],[16,\\\"aria-expanded\\\",[52,[30,3],\\\"false\\\",\\\"true\\\"]],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[18,5,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@disabled\\\",\\\"@collapsed\\\",\\\"@controls\\\",\\\"&default\\\"],[\\\"h2\\\",\\\"button\\\",\\\"if\\\",\\\"on\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-accordion/item/title.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   Component for an accordion item title.\n  \n   See [Components.Accordion](Components.Accordion.html) for examples.\n  \n   @class AccordionItemTitle\n   @namespace Components\n   @extends Glimmer.Component\n   @public\n   */\n  let AccordionItemTitle = _exports.default = (_class = class AccordionItemTitle extends _component2.default {\n    /**\n     * @property collapsed\n     * @type boolean\n     * @public\n     */\n\n    /**\n     * @property disabled\n     * @type boolean\n     * @private\n     */\n\n    /**\n     * @event onClick\n     * @public\n     */\n\n    handleClick(e) {\n      e.preventDefault();\n      if (!this.args.disabled) {\n        this.args.onClick?.();\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccordionItemTitle);\n});","define(\"ember-bootstrap/components/bs-alert\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/runloop\", \"ember-bootstrap/utils/decorators/uses-transition\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _runloop, _usesTransition, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"ember-bootstrap/utils/decorators/uses-transition\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"{{unless this.hidden \"alert\"}} {{if this.fade \"fade\"}} {{if this.dismissible \"alert-dismissible\"}} {{bs-type-class \"alert\" @type}} {{if this.showAlert \"show\"}}\"\n    ...attributes\n    {{did-update this.showOrHide this._visible}}\n    {{did-update this.updateVisibility @visible}}\n  >\n    {{#unless this.hidden}}\n      {{#if this.dismissible}}\n        <button type=\"button\" class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"btn-close\" \"close\"}} aria-label=\"Close\" {{on \"click\" this.dismiss}}>\n          {{#if (macroCondition (macroGetOwnConfig \"isBS4\"))}}<span aria-hidden=\"true\">&times;</span>{{/if}}\n        </button>\n      {{/if}}\n  \n      {{#if (has-block \"header\")}}\n        {{#let (element (bs-default @headerTag \"h4\")) as |Tag|}}\n          <Tag class=\"alert-heading\">\n            {{yield to=\"header\"}}\n          </Tag>\n        {{/let}}\n      {{/if}}\n  \n      {{#if (has-block \"body\")}}\n        {{yield to=\"body\"}}\n      {{else}}\n        {{yield}}\n      {{/if}}\n    {{/unless}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[52,[51,[30,0,[\\\"hidden\\\"]]],\\\"alert\\\"],\\\" \\\",[52,[30,0,[\\\"fade\\\"]],\\\"fade\\\"],\\\" \\\",[52,[30,0,[\\\"dismissible\\\"]],\\\"alert-dismissible\\\"],\\\" \\\",[28,[37,3],[\\\"alert\\\",[30,1]],null],\\\" \\\",[52,[30,0,[\\\"showAlert\\\"]],\\\"show\\\"]]]],[17,2],[4,[38,4],[[30,0,[\\\"showOrHide\\\"]],[30,0,[\\\"_visible\\\"]]],null],[4,[38,4],[[30,0,[\\\"updateVisibility\\\"]],[30,3]],null],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"hidden\\\"]]],[[[41,[30,0,[\\\"dismissible\\\"]],[[[1,\\\"      \\\"],[11,\\\"button\\\"],[24,0,\\\"btn-close\\\"],[24,\\\"aria-label\\\",\\\"Close\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"dismiss\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[48,[30,6]],[[[44,[[28,[37,9],[[28,[37,10],[[30,4],\\\"h4\\\"],null]],null]],[[[1,\\\"        \\\"],[8,[30,5],[[24,0,\\\"alert-heading\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[18,6,null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[5]]]],[]],null],[1,\\\"\\\\n\\\"],[41,[48,[30,7]],[[[1,\\\"      \\\"],[18,7,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[18,8,null],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[13]],[\\\"@type\\\",\\\"&attrs\\\",\\\"@visible\\\",\\\"@headerTag\\\",\\\"Tag\\\",\\\"&header\\\",\\\"&body\\\",\\\"&default\\\"],[\\\"div\\\",\\\"unless\\\",\\\"if\\\",\\\"bs-type-class\\\",\\\"did-update\\\",\\\"button\\\",\\\"on\\\",\\\"has-block\\\",\\\"let\\\",\\\"element\\\",\\\"bs-default\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-alert.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Implements [Bootstrap alerts](http://getbootstrap.com/components/#alerts)\n  \n    ### Usage\n  \n    By default, it is a user dismissible alert with a fade out animation, both of which can be disabled. Be sure to set the\n    `type` property for proper styling.\n  \n    ```hbs\n    <BsAlert @type=\"success\">\n      <strong>Well done!</strong> You successfully read this important alert message.\n    </BsAlert>\n    ```\n  \n    Optionally you can render a header for the alert using named blocks syntax:\n  \n    ```hbs\n    <BsAlert>\n      <:header>\n        Well done!\n      </:header>\n      <:body>\n        You successfully read this important alert message.\n      </:body>\n    </BsAlert>\n    ```\n  \n    The header is rendered using a `<h4>` element by default. You can customize\n    that one by setting `@headerTag` argument of `<BsAlert>`.\n  \n    Using named block syntax as shown above may require installing\n    [ember-named-blocks-polyfill](https://github.com/ember-polyfills/ember-named-blocks-polyfill)\n    in your project depending on the Ember version used.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Alert\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let Alert = _exports.default = (_dec = (0, _usesTransition.default)('fade'), _class = class Alert extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * A dismissible alert will have a close button in the upper right corner, that the user can click to dismiss\n       * the alert.\n       *\n       * @property dismissible\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"dismissible\", _descriptor, this);\n      /**\n       * If true the alert is completely hidden. Will be set when the fade animation has finished.\n       *\n       * @property hidden\n       * @type boolean\n       * @default false\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"hidden\", _descriptor2, this);\n      /**\n       * @property _visible\n       * @private\n       */\n      // Changes to `@visible` argument are observed implicitly through a `{{did-update}}`\n      // template helper and the `updateVisibility` method.\n      //\n      // We should evaluate if we can refactor to localCopy decorator from the tracked-toolbox\n      // to reduce complexity.\n      //\n      // eslint-disable-next-line ember/no-tracked-properties-from-args\n      _initializerDefineProperty(this, \"_visible\", _descriptor3, this);\n      /**\n       * Set to false to disable the fade out animation when hiding the alert.\n       *\n       * @property fade\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"fade\", _descriptor4, this);\n      /**\n       * The duration of the fade out animation\n       *\n       * @property fadeDuration\n       * @type number\n       * @default 150\n       * @public\n       */\n      _initializerDefineProperty(this, \"fadeDuration\", _descriptor5, this);\n      /**\n       * HTML tag to be used for the header\n       *\n       * @property headerTag\n       * @type string\n       * @default 'h4'\n       * @public\n       */\n      /**\n       * Property for type styling\n       *\n       * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/alerts/)\n       *\n       * @property type\n       * @type String\n       * @public\n       */\n      /**\n       * Use CSS transitions?\n       *\n       * @property usesTransition\n       * @type boolean\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"usesTransition\", _descriptor6, this);\n    }\n    /**\n     * This property controls if the alert should be visible. If false it might still be in the DOM until the fade animation\n     * has completed.\n     *\n     * When the alert is dismissed by user interaction this property will not update by using two-way bindings in order\n     * to follow DDAU best practices. If you want to react to such changes, subscribe to the `onDismiss` action\n     *\n     * @property visible\n     * @type boolean\n     * @default true\n     * @public\n     */\n    get visible() {\n      return this._visible ?? true;\n    }\n    get showAlert() {\n      return this.visible && this.args.fade !== false;\n    }\n    /**\n     * The action to be sent after the alert has been dismissed (including the CSS transition).\n     *\n     * @event onDismissed\n     * @public\n     */\n\n    /**\n     * The action is called when the close button is clicked.\n     *\n     * You can return false to prevent closing the alert automatically, and do that in your action by\n     * setting `visible` to false.\n     *\n     * @event onDismiss\n     * @public\n     */\n\n    dismiss() {\n      if (this.args.onDismiss?.() !== false) {\n        this._visible = false;\n      }\n    }\n\n    /**\n     * Call to make the alert visible again after it has been hidden\n     *\n     * @method show\n     * @private\n     */\n    show() {\n      this.hidden = false;\n    }\n\n    /**\n     * Call to hide the alert. If the `fade` property is true, this will fade out the alert before being finally\n     * dismissed.\n     *\n     * @method hide\n     * @private\n     */\n    hide() {\n      if (this.hidden) {\n        return;\n      }\n      if (this.usesTransition) {\n        (0, _runloop.later)(this, function () {\n          if (!this.isDestroyed) {\n            this.hidden = true;\n            this.args.onDismissed?.();\n          }\n        }, this.fadeDuration);\n      } else {\n        this.hidden = true;\n        this.args.onDismissed?.();\n      }\n    }\n    showOrHide() {\n      if (this.visible) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }\n    updateVisibility() {\n      this._visible = this.args.visible;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"dismissible\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"hidden\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return !this.visible;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"_visible\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.visible;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"fade\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"fadeDuration\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 150;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"usesTransition\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"dismiss\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dismiss\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showOrHide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showOrHide\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateVisibility\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateVisibility\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Alert);\n});","define(\"ember-bootstrap/components/bs-button-group\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@ember/array\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _array, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/array\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div class=\"{{if @vertical \"btn-group-vertical\" \"btn-group\"}} {{bs-size-class \"btn-group\" @size}}\" role=\"group\" ...attributes>\n    {{yield\n      (hash\n        button=(component (ensure-safe-component (bs-default @buttonComponent (component \"bs-button-group/button\"))) buttonGroupType=@type groupValue=@value onClick=this.buttonPressed)\n      )\n    }}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[52,[30,1],\\\"btn-group-vertical\\\",\\\"btn-group\\\"],\\\" \\\",[28,[37,2],[\\\"btn-group\\\",[30,2]],null]]]],[24,\\\"role\\\",\\\"group\\\"],[17,3],[12],[1,\\\"\\\\n  \\\"],[18,7,[[28,[37,4],null,[[\\\"button\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,4],[50,\\\"bs-button-group/button\\\",0,null,null]],null]],null],0,null,[[\\\"buttonGroupType\\\",\\\"groupValue\\\",\\\"onClick\\\"],[[30,5],[30,6],[30,0,[\\\"buttonPressed\\\"]]]]]]]]]],[1,\\\"\\\\n\\\"],[13]],[\\\"@vertical\\\",\\\"@size\\\",\\\"&attrs\\\",\\\"@buttonComponent\\\",\\\"@type\\\",\\\"@value\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-size-class\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-button-group.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Bootstrap-style button group, that visually groups buttons, and optionally adds radio/checkbox like behaviour.\n    See http://getbootstrap.com/components/#btn-groups\n  \n    Use as a block level component with any number of [Components.Button](Components.Button.html) components provided as\n    a yielded pre-configured contextual component:\n  \n    ```handlebars\n    <BsButtonGroup as |bg|>\n      <bg.button>1</bg.button>\n      <bg.button>2</bg.button>\n      <bg.button>3</bg.button>\n    </BsButtonGroup>\n    ```\n  \n    ### Radio-like behaviour\n  \n    Use the `type` property set to \"radio\" to make the child buttons toggle like radio buttons, i.e. only one button can be active.\n    Set the `value` property of the buttons to something meaningful. The `value` property of the button group will then reflect\n    the value of the active button:\n  \n    ```handlebars\n    <BsButtonGroup @value={{this.buttonGroupValue}} @type=\"radio\" @onChange={{fn (mut this.buttonGroupValue}} as |bg|>\n      <bg.button @type=\"default\" @value={{1}}>1</bg.button>\n      <bg.button @type=\"default\" @value={{2}}>2</bg.button>\n      <bg.button @type=\"default\" @value={{3}}>3</bg.button>\n    </BsButtonGroup>\n  \n    You selected: {{this.buttonGroupValue}}!\n    ```\n  \n    ### Checkbox-like behaviour\n  \n    Set `type` to \"checkbox\" to make any number of child buttons selectable. The `value` property will be an array\n    of all the values of the active buttons:\n  \n    ```handlebars\n    <BsButtonGroup @value={{this.buttonGroupValue}} @type=\"checkbox\" @onChange={{fn (mut this.buttonGroupValue}} as |bg|>\n      <bg.button @type=\"default\" @value={{1}}>1</bg.button>\n      <bg.button @type=\"default\" @value={{2}}>2</bg.button>\n      <bg.button @type=\"default\" @value={{3}}>3</bg.button>\n    </BsButtonGroup>\n  \n    You selected:\n    <ul>\n      {{#each value in this.buttonGroupValue}}\n        <li>{{value}}</li>\n      {{/each}}\n    </ul>\n    ```\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class ButtonGroup\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let ButtonGroup = _exports.default = (_class = class ButtonGroup extends _component2.default {\n    /**\n     * @property buttonComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * Set to true for a vertically stacked button group, see http://getbootstrap.com/components/#btn-groups-vertical\n     *\n     * @property vertical\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * The type of the button group specifies how child buttons behave and how the `value` property will be computed:\n     *\n     * ### null\n     * If `type` is not set (null), the button group will add no functionality besides Bootstrap styling\n     *\n     * ### radio\n     * if `type` is set to \"radio\", the buttons will behave like radio buttons:\n     * * the `value` property of the button group will reflect the `value` property of the active button\n     * * thus only one button may be active\n     *\n     * ### checkbox\n     * if `type` is set to \"checkbox\", the buttons will behave like checkboxes:\n     * * any number of buttons may be active\n     * * the `value` property of the button group will be an array containing the `value` properties of all active buttons\n     *\n     * @property type\n     * @type string\n     * @default null\n     * @public\n     */\n\n    /**\n     * The value of the button group, computed by its child buttons.\n     * See the `type` property for how the value property is constructed.\n     *\n     * When you set the value, the corresponding buttons will be activated:\n     * * use a single value for a radio button group to activate the button with the same value\n     * * use an array of values for a checkbox button group to activate all the buttons with values contained in the array\n     *\n     * @property value\n     * @type array\n     * @public\n     */\n\n    /**\n     * Property for size styling, set to 'lg', 'sm' or 'xs'\n     *\n     * Also see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/button-group/#sizing)\n     *\n     * @property size\n     * @type String\n     * @public\n     */\n\n    /**\n     * This action is called whenever the button group's value should be changed because the user clicked a button.\n     * You will receive the new value of the button group (based on the `type` property), which you should use to update the\n     * `value` property.\n     *\n     * @event onChange\n     * @param {*} value\n     * @public\n     */\n\n    buttonPressed(pressedValue) {\n      if (!this.args.onChange) {\n        return;\n      }\n      let newValue;\n      if (this.args.type === 'radio') {\n        if (pressedValue === this.args.value) {\n          return;\n        }\n        newValue = pressedValue;\n      } else {\n        if (!(0, _array.isArray)(this.args.value)) {\n          newValue = [pressedValue];\n        } else {\n          if (this.args.value.includes(pressedValue)) {\n            newValue = this.args.value.filter(v => v !== pressedValue);\n          } else {\n            newValue = [...this.args.value, pressedValue];\n          }\n        }\n\n        // For compatibility we continue to return an EmberArray instance for now\n        // @todo this should be changed for the next major release!\n        newValue = (0, _array.A)(newValue);\n      }\n      this.args.onChange(newValue);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"buttonPressed\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"buttonPressed\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ButtonGroup);\n});","define(\"ember-bootstrap/components/bs-button-group/button\", [\"exports\", \"@ember/component\", \"@ember/array\", \"ember-bootstrap/components/bs-button\", \"@ember/object/internals\", \"@ember/template-factory\"], function (_exports, _component, _array, _bsButton, _internals, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/array\",0,\"ember-bootstrap/components/bs-button\",0,\"@ember/object/internals\",0,\"@embroider/macros\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if this.isBS5ToggleButton}}\n    <input\n      type={{@buttonGroupType}}\n      class=\"btn-check\"\n      id={{this.formId}}\n      autocomplete=\"off\"\n      checked={{this.active}}\n      ...attributes\n      {{on \"click\" this.handleClick}}\n      {{did-update this.resetState @reset}}\n    >\n    <label\n      class=\"btn {{bs-size-class \"btn\" @size}} {{bs-type-class \"btn\" @type default=\"secondary\" outline=@outline}}\"\n      for={{this.formId}}\n    >\n      {{#if this.icon}}\n        <i class={{this.icon}}></i>\n      {{/if}}\n      {{this.text}}\n      {{yield\n        (hash\n          isFulfilled=this.isFulfilled\n          isPending=this.isPending\n          isRejected=this.isRejected\n          isSettled=this.isSettled\n        )\n      }}\n    </label>\n  {{else}}\n    <button\n      disabled={{this.__disabled}}\n      type=\"button\"\n      class=\"btn {{if this.active \"active\"}} {{if this.block \"btn-block\"}} {{bs-size-class \"btn\" @size}} {{bs-type-class \"btn\" @type default=\"secondary\" outline=@outline}}\"\n      ...attributes\n      {{on \"click\" this.handleClick}}\n      {{did-update this.resetState @reset}}\n    >\n      {{#if this.icon}}\n        <i class={{this.icon}}></i>\n      {{/if}}\n      {{this.text}}\n      {{yield\n        (hash\n          isFulfilled=this.isFulfilled\n          isPending=this.isPending\n          isRejected=this.isRejected\n          isSettled=this.isSettled\n        )\n      }}\n    </button>\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,0,[\\\"isBS5ToggleButton\\\"]],[[[1,\\\"  \\\"],[11,\\\"input\\\"],[16,4,[30,1]],[24,0,\\\"btn-check\\\"],[16,1,[30,0,[\\\"formId\\\"]]],[24,\\\"autocomplete\\\",\\\"off\\\"],[16,\\\"checked\\\",[30,0,[\\\"active\\\"]]],[17,2],[4,[38,2],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[4,[38,3],[[30,0,[\\\"resetState\\\"]],[30,3]],null],[12],[13],[1,\\\"\\\\n  \\\"],[10,\\\"label\\\"],[15,0,[29,[\\\"btn \\\",[28,[37,5],[\\\"btn\\\",[30,4]],null],\\\" \\\",[28,[37,6],[\\\"btn\\\",[30,5]],[[\\\"default\\\",\\\"outline\\\"],[\\\"secondary\\\",[30,6]]]]]]],[15,\\\"for\\\",[30,0,[\\\"formId\\\"]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"icon\\\"]],[[[1,\\\"      \\\"],[10,\\\"i\\\"],[15,0,[30,0,[\\\"icon\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[1,[30,0,[\\\"text\\\"]]],[1,\\\"\\\\n    \\\"],[18,7,[[28,[37,9],null,[[\\\"isFulfilled\\\",\\\"isPending\\\",\\\"isRejected\\\",\\\"isSettled\\\"],[[30,0,[\\\"isFulfilled\\\"]],[30,0,[\\\"isPending\\\"]],[30,0,[\\\"isRejected\\\"]],[30,0,[\\\"isSettled\\\"]]]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"__disabled\\\"]]],[24,4,\\\"button\\\"],[16,0,[29,[\\\"btn \\\",[52,[30,0,[\\\"active\\\"]],\\\"active\\\"],\\\" \\\",[52,[30,0,[\\\"block\\\"]],\\\"btn-block\\\"],\\\" \\\",[28,[37,5],[\\\"btn\\\",[30,4]],null],\\\" \\\",[28,[37,6],[\\\"btn\\\",[30,5]],[[\\\"default\\\",\\\"outline\\\"],[\\\"secondary\\\",[30,6]]]]]]],[17,2],[4,[38,2],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[4,[38,3],[[30,0,[\\\"resetState\\\"]],[30,3]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"icon\\\"]],[[[1,\\\"      \\\"],[10,\\\"i\\\"],[15,0,[30,0,[\\\"icon\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[1,[30,0,[\\\"text\\\"]]],[1,\\\"\\\\n    \\\"],[18,7,[[28,[37,9],null,[[\\\"isFulfilled\\\",\\\"isPending\\\",\\\"isRejected\\\",\\\"isSettled\\\"],[[30,0,[\\\"isFulfilled\\\"]],[30,0,[\\\"isPending\\\"]],[30,0,[\\\"isRejected\\\"]],[30,0,[\\\"isSettled\\\"]]]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@buttonGroupType\\\",\\\"&attrs\\\",\\\"@reset\\\",\\\"@size\\\",\\\"@type\\\",\\\"@outline\\\",\\\"&default\\\"],[\\\"if\\\",\\\"input\\\",\\\"on\\\",\\\"did-update\\\",\\\"label\\\",\\\"bs-size-class\\\",\\\"bs-type-class\\\",\\\"i\\\",\\\"yield\\\",\\\"hash\\\",\\\"button\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-button-group/button.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Internal component for button-group buttons\n  \n   @class ButtonGroupButton\n   @namespace Components\n   @extends Components.Button\n   @private\n   */\n  class ButtonGroupButton extends _bsButton.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"formId\", (0, _internals.guidFor)(this));\n    }\n    /**\n     * @property groupValue\n     * @private\n     */\n\n    /**\n     * @property buttonGroupType\n     * @type string\n     * @private\n     */\n\n    /**\n     * @property active\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get active() {\n      let {\n        value,\n        groupValue\n      } = this.args;\n      if (this.args.buttonGroupType === 'radio') {\n        return value === groupValue;\n      } else {\n        if ((0, _array.isArray)(groupValue)) {\n          return groupValue.indexOf(value) !== -1;\n        }\n      }\n      return false;\n    }\n    get isBS5ToggleButton() {\n      {\n        return this.args.buttonGroupType === 'radio' || this.args.buttonGroupType === 'checkbox';\n      }\n    }\n  }\n  _exports.default = ButtonGroupButton;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ButtonGroupButton);\n});","define(\"ember-bootstrap/components/bs-button\", [\"exports\", \"@ember/component\", \"@glimmer/tracking\", \"@ember/object\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _component2, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <button\n    disabled={{this.__disabled}}\n    type={{if @attrTypePrivateWorkaround @attrTypePrivateWorkaround \"button\"}}\n    class=\"btn {{if @active 'active'}} {{if (macroCondition (macroGetOwnConfig 'isNotBS5')) (if this.block 'btn-block')}} {{bs-size-class 'btn' @size}} {{bs-type-class 'btn' @type default=\"secondary\" outline=@outline}}\"\n    ...attributes\n    {{on \"click\" this.handleClick}}\n    {{did-update this.resetState @reset}}\n  >\n    {{#if this.icon}}<i class={{this.icon}}></i> {{/if}}{{this.text}}{{yield\n      (hash\n        isFulfilled=this.isFulfilled\n        isPending=this.isPending\n        isRejected=this.isRejected\n        isSettled=this.isSettled\n      )\n    }}\n  </button>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"button\\\"],[16,\\\"disabled\\\",[30,0,[\\\"__disabled\\\"]]],[16,4,[52,[30,1],[30,1],\\\"button\\\"]],[16,0,[29,[\\\"btn \\\",[52,[30,2],\\\"active\\\"],\\\" \\\",[27],\\\" \\\",[28,[37,2],[\\\"btn\\\",[30,3]],null],\\\" \\\",[28,[37,3],[\\\"btn\\\",[30,4]],[[\\\"default\\\",\\\"outline\\\"],[\\\"secondary\\\",[30,5]]]]]]],[17,6],[4,[38,4],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[4,[38,5],[[30,0,[\\\"resetState\\\"]],[30,7]],null],[12],[1,\\\"\\\\n  \\\"],[41,[30,0,[\\\"icon\\\"]],[[[10,\\\"i\\\"],[15,0,[30,0,[\\\"icon\\\"]]],[12],[13],[1,\\\" \\\"]],[]],null],[1,[30,0,[\\\"text\\\"]]],[18,8,[[28,[37,8],null,[[\\\"isFulfilled\\\",\\\"isPending\\\",\\\"isRejected\\\",\\\"isSettled\\\"],[[30,0,[\\\"isFulfilled\\\"]],[30,0,[\\\"isPending\\\"]],[30,0,[\\\"isRejected\\\"]],[30,0,[\\\"isSettled\\\"]]]]]]],[1,\\\"\\\\n\\\"],[13]],[\\\"@attrTypePrivateWorkaround\\\",\\\"@active\\\",\\\"@size\\\",\\\"@type\\\",\\\"@outline\\\",\\\"&attrs\\\",\\\"@reset\\\",\\\"&default\\\"],[\\\"button\\\",\\\"if\\\",\\\"bs-size-class\\\",\\\"bs-type-class\\\",\\\"on\\\",\\\"did-update\\\",\\\"i\\\",\\\"yield\\\",\\\"hash\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-button.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Implements a HTML button element, with support for all [Bootstrap button CSS styles](http://getbootstrap.com/css/#buttons)\n    as well as advanced functionality such as button states.\n  \n    ### Basic Usage\n  \n    ```hbs\n    <BsButton @type=\"primary\" @icon=\"glyphicon glyphicon-download\">\n      Downloads\n    </BsButton>\n    ```\n  \n    ### Actions\n  \n    Use the `onClick` property of the component to send an action to your controller. It will receive the button's value\n    (see the `value` property) as an argument.\n  \n    ```hbs\n    <BsButton @type=\"primary\" @icon=\"glyphicon glyphicon-download\" @onClick={{this.download}}>\n      Downloads\n    </BsButton>\n    ```\n  \n    ### Promise support for automatic state change\n  \n    When returning a Promise for any asynchronous operation from the `onClick` closure action the button will\n    manage an internal state (\"default\" > \"pending\" > \"fulfilled\"/\"rejected\") automatically.\n  \n    The button is disabled by default if it's in pending state. You could override this behavior by passing\n    the `disabled` HTML attribute or by setting `@preventConcurrency` to false.\n  \n    ```hbs\n    <BsButton\n      disabled={{false}}\n    />\n    ```\n  \n    ```hbs\n    <BsButton\n      @preventConcurrency={{false}}\n    />\n    ```\n  \n    The label could be changed automatically according to the state of the promise with `@defaultText`,\n    `@pendingText`, `@fulfilledText` and `@rejectedText` arguments:\n  \n    ```hbs\n    <BsButton\n      @type=\"primary\"\n      @icon=\"glyphicon glyphicon-download\"\n      @defaultText=\"Download\"\n      @pendingText=\"Loading...\"\n      @fulfilledText=\"Completed!\"\n      @rejectedText=\"Oups!?\"\n      @onClick={{this.download}}\n    />\n    ```\n  \n    ```js\n    // controller.js\n    import { Controller } from '@ember/controller';\n    import { action } from '@ember/object';\n  \n    export default class MyController extends Controller {\n      @action\n      download() {\n        return new Promise(...);\n      }\n    }\n    ```\n  \n    For further customization `isPending`, `isFulfilled`, `isRejected` and `isSettled` properties are yielded:\n  \n    ```hbs\n    <BsButton @onClick={{this.download}} as |button|>\n      Download\n      {{#if button.isPending}}\n        <span class=\"loading-spinner\"></span>\n      {{/if}}\n    </BsButton>\n    ```\n  \n    You can `reset` the state represented by these properties and used for button's text by setting `reset` property to\n    `true`.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Button\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let Button = _exports.default = (_class = class Button extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * Set the 'active' class to apply active/pressed CSS styling\n       *\n       * @property active\n       * @type boolean\n       * @default false\n       * @public\n       */\n      /**\n       * Property for block level buttons (BS3 and BS4 only!)\n       *\n       * See the [Bootstrap docs](http://getbootstrap.com/css/#buttons-sizes)\n       * @property block\n       * @type boolean\n       * @default false\n       * @public\n       */\n      _initializerDefineProperty(this, \"block\", _descriptor, this);\n      /**\n       * Supply a value that will be associated with this button. This will be sent\n       * as a parameter of the default action triggered when clicking the button\n       *\n       * @property value\n       * @type any\n       * @public\n       */\n      /**\n       * Controls if `onClick` action is fired concurrently. If `true` clicking button multiple times will not trigger\n       * `onClick` action if a Promise returned by previous click is not settled yet.\n       *\n       * This does not affect event bubbling.\n       *\n       * @property preventConcurrency\n       * @type Boolean\n       * @default true\n       * @public\n       */\n      /**\n       * State of the button. The button's label (if not used as a block component) will be set to the\n       * `<state>Text` property.\n       * This property will automatically be set when using a click action that supplies the callback with a promise.\n       * Possible values are: \"default\" > \"pending\" > \"fulfilled\" / \"rejected\".\n       * It could be resetted by `reset` property.\n       *\n       * @property state\n       * @type String\n       * @default 'default'\n       * @private\n       */\n      _initializerDefineProperty(this, \"_state\", _descriptor2, this);\n    }\n    /**\n     * Default label of the button. Not need if used as a block component\n     *\n     * @property defaultText\n     * @type string\n     * @public\n     */\n\n    /**\n     * Label of the button used if `onClick` event has returned a Promise which is pending.\n     * Not considered if used as a block component.\n     *\n     * @property pendingText\n     * @type string\n     * @public\n     */\n\n    /**\n     * Label of the button used if `onClick` event has returned a Promise which succeeded.\n     * Not considered if used as a block component.\n     *\n     * @property fulfilledText\n     * @type string\n     * @public\n     */\n\n    /**\n     * Label of the button used if `onClick` event has returned a Promise which failed.\n     * Not considered if used as a block component.\n     *\n     * @property rejectedText\n     * @type string\n     * @public\n     */\n\n    /**\n     * Property to disable the button only used in internal communication\n     * between Ember Boostrap components.\n     *\n     * @property _disabled\n     * @type ?boolean\n     * @default null\n     * @private\n     */\n    get __disabled() {\n      if (this.args._disabled !== undefined) {\n        return this.args._disabled;\n      }\n      return this.isPending && this.args.preventConcurrency !== false;\n    }\n    /**\n     * A click event on a button will not bubble up the DOM tree if it has an `onClick` action handler. Set to true to\n     * enable the event to bubble\n     *\n     * @property bubble\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * If button is active and this is set, the icon property will match this property\n     *\n     * @property iconActive\n     * @type String\n     * @public\n     */\n\n    /**\n     * If button is inactive and this is set, the icon property will match this property\n     *\n     * @property iconInactive\n     * @type String\n     * @public\n     */\n\n    /**\n     * Class(es) (e.g. glyphicons or font awesome) to use as a button icon\n     * This will render a <i class=\"{{icon}}\"></i> element in front of the button's label\n     *\n     * @property icon\n     * @type String\n     * @public\n     */\n    get icon() {\n      return this.args.icon || (this.args.active ? this.args.iconActive : this.args.iconInactive);\n    }\n    get state() {\n      return this.args.state ?? this._state;\n    }\n    set state(state) {\n      this._state = state;\n    }\n\n    /**\n     * Promise returned by `onClick` event is pending.\n     *\n     * @property isPending\n     * @type Boolean\n     * @private\n     */\n    get isPending() {\n      return this.state === 'pending';\n    }\n\n    /**\n     * Promise returned by `onClick` event has been succeeded.\n     *\n     * @property isFulfilled\n     * @type Boolean\n     * @private\n     */\n    get isFulfilled() {\n      return this.state === 'fulfilled';\n    }\n\n    /**\n     * Promise returned by `onClick` event has been rejected.\n     *\n     * @property isRejected\n     * @type Boolean\n     * @private\n     */\n    get isRejected() {\n      return this.state === 'rejected';\n    }\n\n    /**\n     * Promise returned by `onClick` event has been succeeded or rejected.\n     *\n     * @property isSettled\n     * @type Boolean\n     * @private\n     */\n    get isSettled() {\n      return this.isFulfilled || this.isRejected;\n    }\n\n    /**\n     * Set this to `true` to reset the `state`. A typical use case is to bind this attribute with ember-data isDirty flag.\n     *\n     * The old value is not taken into consideration. Setting a `true` value to `true` again will also reset `state`.\n     * In that case it's even to notify the observer system that the property has changed by calling\n     * [`notifyPropertyChange()`](https://www.emberjs.com/api/ember/3.2/classes/EmberObject/methods/notifyPropertyChange?anchor=notifyPropertyChange).\n     *\n     * @property reset\n     * @type boolean\n     * @public\n     */\n\n    /**\n     * Property for size styling, set to 'lg', 'sm' or 'xs'\n     *\n     * Also see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/buttons/#sizes)\n     *\n     * @property size\n     * @type String\n     * @public\n     */\n\n    /**\n     * Property for type styling\n     *\n     * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/buttons/)\n     *\n     * @property type\n     * @type String\n     * @default 'secondary'\n     * @public\n     */\n\n    /**\n     * Property to create outline buttons (BS4+ only)\n     *\n     * @property outline\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * When clicking the button this action is called with the value of the button (that is the value of the \"value\" property).\n     *\n     * Return a promise object, and the buttons state will automatically set to \"pending\", \"resolved\" and/or \"rejected\".\n     * This could be used to automatically set the button's text depending on promise state (`defaultText`, `pendingText`,\n     * `fulfilledText`, `rejectedText`) and for further customization using the yielded `isPending`, `isFulfilled`,\n     * `isRejected` properties.\n     *\n     * The click event will not bubble up, unless you set `bubble` to true.\n     *\n     * @event onClick\n     * @param {*} value\n     * @public\n     */\n\n    /**\n     * This will reset the state property to 'default', and with that the button's label to defaultText\n     *\n     * @method resetState\n     * @private\n     */\n    resetState() {\n      this.state = 'default';\n    }\n    get text() {\n      return this.args[`${this.state}Text`] || this.args.defaultText;\n    }\n\n    /**\n     * @method click\n     * @private\n     */\n    async handleClick(e) {\n      const {\n        bubble,\n        onClick,\n        preventConcurrency\n      } = this.args;\n      if (typeof onClick !== 'function') {\n        return;\n      }\n\n      // Shouldn't we prevent propagation regardless if `@onClick` is a function?\n      if (!bubble) {\n        e.stopPropagation();\n      }\n      if (preventConcurrency && this.isPending) {\n        return;\n      }\n      this.state = 'pending';\n      try {\n        await onClick(this.args.value);\n        if (!this.isDestroyed) {\n          this.state = 'fulfilled';\n        }\n      } catch (error) {\n        if (!this.isDestroyed) {\n          this.state = 'rejected';\n        }\n        throw error;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"block\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_state\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'default';\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"resetState\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetState\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Button);\n});","define(\"ember-bootstrap/components/bs-carousel\", [\"exports\", \"@ember/component\", \"@ember/object\", \"ember-bootstrap/components/bs-carousel/slide\", \"@glimmer/component\", \"@ember/runloop\", \"ember-concurrency\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _object, _slide, _component2, _runloop, _emberConcurrency, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"ember-bootstrap/components/bs-carousel/slide\",0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"ember-concurrency\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    {{!-- template-lint-disable no-positive-tabindex --}}\n    tabindex={{this.tabindex}}\n    class=\"carousel slide {{if this.carouselFade \"carousel-fade\"}}\"\n    ...attributes\n    {{on \"keydown\" this.handleKeyDown}}\n    {{on \"mouseenter\" this.handleMouseEnter}}\n    {{on \"mouseleave\" this.handleMouseLeave}}\n    {{did-update this.childSlidesObserver this.childSlides this.autoPlay}}\n    {{did-update this.indexObserver this.index}}\n  >\n    {{#if this.showIndicators}}\n      {{#if (macroCondition (macroGetOwnConfig \"isBS5\"))}}\n        <div class=\"carousel-indicators\">\n          {{#each this.indicators as |indicator _index|}}\n            <button\n              data-bs-target\n              type=\"button\"\n              class={{if (bs-eq this.currentIndex _index) \"active\"}}\n              aria-current=\"{{bs-eq this.currentIndex _index}}\"\n              {{on \"click\" (fn this.toSlide _index)}}\n            />\n          {{/each}}\n        </div>\n      {{else}}\n        <ol class=\"carousel-indicators\">\n          {{#each this.indicators as |indicator _index|}}\n            <li\n              role=\"button\"\n              class={{if (bs-eq this.currentIndex _index) \"active\"}}\n              {{on \"click\" (fn this.toSlide _index)}}\n            />\n          {{/each}}\n        </ol>\n      {{/if}}\n  \n    {{/if}}\n  \n    <div class=\"carousel-inner\" role=\"listbox\">\n      {{yield\n        (hash\n          slide=(component (ensure-safe-component (bs-default @slideComponent (component \"bs-carousel/slide\")))\n            currentSlide=this.currentSlide\n            directionalClassName=this.directionalClassName\n            followingSlide=this.followingSlide\n            orderClassName=this.orderClassName\n            presentationState=this.presentationState\n            registerChild=this.registerChild\n            unregisterChild=this.unregisterChild\n          )\n        )\n      }}\n    </div>\n  \n    {{#if this.showControls}}\n      <button class=\"carousel-control-prev\" type=\"button\" {{on \"click\" this.toPrevSlide}}>\n        <span aria-hidden=\"true\" class=\"carousel-control-prev-icon\"></span>\n        <span class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\"}}>{{this.prevControlLabel}}</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" {{on \"click\" this.toNextSlide}}>\n        <span aria-hidden=\"true\" class=\"carousel-control-next-icon\"></span>\n        <span class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\"}}>{{this.nextControlLabel}}</span>\n      </button>\n    {{/if}}\n  \n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,\\\"tabindex\\\",[30,0,[\\\"tabindex\\\"]]],[16,0,[29,[\\\"carousel slide \\\",[52,[30,0,[\\\"carouselFade\\\"]],\\\"carousel-fade\\\"]]]],[17,1],[4,[38,2],[\\\"keydown\\\",[30,0,[\\\"handleKeyDown\\\"]]],null],[4,[38,2],[\\\"mouseenter\\\",[30,0,[\\\"handleMouseEnter\\\"]]],null],[4,[38,2],[\\\"mouseleave\\\",[30,0,[\\\"handleMouseLeave\\\"]]],null],[4,[38,3],[[30,0,[\\\"childSlidesObserver\\\"]],[30,0,[\\\"childSlides\\\"]],[30,0,[\\\"autoPlay\\\"]]],null],[4,[38,3],[[30,0,[\\\"indexObserver\\\"]],[30,0,[\\\"index\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showIndicators\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"carousel-indicators\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,0,[\\\"indicators\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[11,\\\"button\\\"],[24,\\\"data-bs-target\\\",\\\"\\\"],[16,0,[52,[28,[37,7],[[30,0,[\\\"currentIndex\\\"]],[30,3]],null],\\\"active\\\"]],[16,\\\"aria-current\\\",[29,[[28,[37,7],[[30,0,[\\\"currentIndex\\\"]],[30,3]],null]]]],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"toSlide\\\"]],[30,3]],null]],null],[12],[13],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"carousel-inner\\\"],[14,\\\"role\\\",\\\"listbox\\\"],[12],[1,\\\"\\\\n    \\\"],[18,5,[[28,[37,10],null,[[\\\"slide\\\"],[[50,[28,[37,12],[[28,[37,13],[[30,4],[50,\\\"bs-carousel/slide\\\",0,null,null]],null]],null],0,null,[[\\\"currentSlide\\\",\\\"directionalClassName\\\",\\\"followingSlide\\\",\\\"orderClassName\\\",\\\"presentationState\\\",\\\"registerChild\\\",\\\"unregisterChild\\\"],[[30,0,[\\\"currentSlide\\\"]],[30,0,[\\\"directionalClassName\\\"]],[30,0,[\\\"followingSlide\\\"]],[30,0,[\\\"orderClassName\\\"]],[30,0,[\\\"presentationState\\\"]],[30,0,[\\\"registerChild\\\"]],[30,0,[\\\"unregisterChild\\\"]]]]]]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showControls\\\"]],[[[1,\\\"    \\\"],[11,\\\"button\\\"],[24,0,\\\"carousel-control-prev\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"toPrevSlide\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,\\\"aria-hidden\\\",\\\"true\\\"],[14,0,\\\"carousel-control-prev-icon\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"visually-hidden\\\"],[12],[1,[30,0,[\\\"prevControlLabel\\\"]]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,0,\\\"carousel-control-next\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"toNextSlide\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,1],[14,\\\"aria-hidden\\\",\\\"true\\\"],[14,0,\\\"carousel-control-next-icon\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[10,1],[14,0,\\\"visually-hidden\\\"],[12],[1,[30,0,[\\\"nextControlLabel\\\"]]],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"indicator\\\",\\\"_index\\\",\\\"@slideComponent\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"on\\\",\\\"did-update\\\",\\\"each\\\",\\\"-track-array\\\",\\\"button\\\",\\\"bs-eq\\\",\\\"fn\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-carousel.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Ember implementation of Bootstrap's Carousel. Supports all original features but API is partially different:\n  \n    | Description | Original | Component |\n    | ------ | ------ | ------ |\n    | Autoplays after first user event or on page load. | ride='carousel'\\|false | autoPlay=false\\|true |\n    | Disable automatic cycle. | interval=false | interval=0 |\n    | If first slide should follow last slide on \"previous\" event, the opposite will also be true for \"next\" event. | wrap=false\\|true | wrap=false\\|true |\n    | Jumps into specific slide index | data-slide-to=n | index=n |\n    | Keyboard events. | keyboard=false\\|true | keyboard=false\\|true |\n    | Left-to-right or right-to-left sliding. | N/A |  ltr=false\\|true |\n    | Pause current cycle on mouse enter. | pause='hover'\\|null | pauseOnMouseEnter=false\\|true |\n    | Show or hide controls  | Tag manipulation. | showControls=false\\|true |\n    | Show or hide indicators  | Tag manipulation. | showIndicators=false\\|true |\n    | Waiting time of slides in an automatic cycle. | interval=n | interval=n |\n  \n    Default settings are the same as the original, so you don't have to worry about changing parameters.\n  \n    ```hbs\n    <BsCarousel as |car|>\n      <car.slide>\n        <img alt=\"First slide\" src=\"slide1.jpg\">\n      </car.slide>\n      <car.slide>\n        <img alt=\"Second slide\" src=\"slide2.jpg\">\n      </car.slide>\n      <car.slide>\n        <img alt=\"Third slide\" src=\"slide3.jpg\">\n      </car.slide>\n    </BsCarousel>\n    ```\n  \n    To better understand the whole documentation, you should be aware of the following operations:\n  \n    | Operation | Description |\n    | ------ | ------ |\n    | Transition | Swaps two slides. |\n    | Interval | Waiting time after a transition. |\n    | Presentation | Represents a single transition, or a single interval, or the union of both. |\n    | Cycle | Presents all slides until it reaches first or last slide. |\n    | Wrap | wrap slides, cycles without stopping at first or last slide. |\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Carousel\n    @namespace Components\n    @extends Component\n    @public\n  */\n  let Carousel = _exports.default = (_dec = (0, _emberConcurrency.task)({\n    restartable: true\n  }), _dec2 = (0, _emberConcurrency.task)({\n    drop: true\n  }), _dec3 = (0, _emberConcurrency.task)({\n    restartable: true\n  }), _class = class Carousel extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"tabindex\", '1');\n      _initializerDefineProperty(this, \"children\", _descriptor, this);\n      /**\n       * Indicates the current index of the current slide.\n       *\n       * @property currentIndex\n       * @private\n       */\n      _initializerDefineProperty(this, \"currentIndex\", _descriptor2, this);\n      /**\n       * Bootstrap style to indicate that a given slide should be moving to left/right.\n       *\n       * @property directionalClassName\n       * @private\n       * @type { 'left' | 'right' | null }\n       */\n      _initializerDefineProperty(this, \"directionalClassName\", _descriptor3, this);\n      /**\n       * Indicates the next slide index to move into.\n       *\n       * @property followingIndex\n       * @private\n       * @type number | null\n       */\n      _initializerDefineProperty(this, \"followingIndex\", _descriptor4, this);\n      /**\n       * If user is hovering its cursor on component.\n       * This property is only manipulated when 'pauseOnMouseEnter' is true.\n       *\n       * @property isMouseHovering\n       * @private\n       * @type boolean\n       */\n      _initializerDefineProperty(this, \"isMouseHovering\", _descriptor5, this);\n      /**\n       * The class name to append to the next control link element.\n       *\n       * @property nextControlClassName\n       * @type string\n       * @private\n       */\n      /**\n       * Bootstrap style to indicate the next/previous slide.\n       *\n       * @property orderClassName\n       * @private\n       * @type string\n       */\n      _initializerDefineProperty(this, \"orderClassName\", _descriptor6, this);\n      /**\n       * The current state of the current presentation, can be either \"didTransition\"\n       * or \"willTransit\".\n       *\n       * @private\n       * @property presentationState\n       * @type { 'didTransition' | 'willTransit' | null }\n       */\n      _initializerDefineProperty(this, \"presentationState\", _descriptor7, this);\n      /**\n       * Action called after the slide has changed.\n       *\n       * @event onSlideChanged\n       * @param toIndex\n       * @public\n       */\n      /**\n       * Do a presentation and calls itself to perform a cycle.\n       *\n       * @method cycle\n       * @this Carousel\n       * @private\n       */\n      _initializerDefineProperty(this, \"cycle\", _descriptor8, this);\n      /**\n       * @method transitioner\n       * @this Carousel\n       * @private\n       */\n      _initializerDefineProperty(this, \"transitioner\", _descriptor9, this);\n      /**\n       * Waits an interval time to start a cycle.\n       *\n       * @method waitIntervalToInitCycle\n       * @this Carousel\n       * @private\n       */\n      _initializerDefineProperty(this, \"waitIntervalToInitCycle\", _descriptor0, this);\n    }\n    /**\n     * @property slideComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * If a slide can turn to left, including corners.\n     *\n     * @private\n     * @property canTurnToLeft\n     */\n    get canTurnToLeft() {\n      return this.wrap || this.currentIndex > 0;\n    }\n\n    /**\n     * If a slide can turn to right, including corners.\n     *\n     * @private\n     * @property canTurnToRight\n     */\n    get canTurnToRight() {\n      return this.wrap || this.currentIndex < this.childSlides.length - 1;\n    }\n    /**\n     * All `CarouselSlide` child components.\n     *\n     * @private\n     * @property childSlides\n     * @readonly\n     * @type array\n     */\n    get childSlides() {\n      return this.children.filter(view => view instanceof (this.args.slideComponent ?? _slide.default));\n    }\n\n    /**\n     * This observer is the entry point for real time insertion and removing of slides.\n     *\n     * @private\n     * @property childSlidesObserver\n     */\n    childSlidesObserver() {\n      const childSlides = this.childSlides;\n      if (childSlides.length === 0) {\n        return;\n      }\n      // Sets new current index\n      let currentIndex = this.currentIndex;\n      if (currentIndex >= childSlides.length) {\n        currentIndex = childSlides.length - 1;\n        this.currentIndex = currentIndex;\n      }\n      // Automatic sliding\n      if (this.autoPlay) {\n        this.waitIntervalToInitCycle.perform();\n      }\n      // Initial slide state\n      this.presentationState = null;\n    }\n    /**\n     * The current slide object that is going to be used by the nested slides components.\n     *\n     * @property currentSlide\n     * @private\n     *\n     */\n    get currentSlide() {\n      return this.childSlides[this.currentIndex];\n    }\n    /**\n     * The following slide object that is going to be used by the nested slides components.\n     *\n     * @property followingIndex\n     * @private\n     */\n    get followingSlide() {\n      return this.followingIndex != null ? this.childSlides[this.followingIndex] : undefined;\n    }\n\n    /**\n     * @private\n     * @property hasInterval\n     * @type boolean\n     */\n    get hasInterval() {\n      return this.interval > 0;\n    }\n\n    /**\n     * This observer is the entry point for programmatically slide changing.\n     *\n     * @property indexObserver\n     * @private\n     */\n    indexObserver() {\n      this.toSlide(this.index);\n    }\n\n    /**\n     * @property indicators\n     * @private\n     */\n    get indicators() {\n      return [...Array(this.childSlides.length)];\n    }\n    /**\n     * The class name to append to the previous control link element.\n     *\n     * @property prevControlClassName\n     * @type string\n     * @private\n     */\n\n    /**\n     * @private\n     * @property shouldNotDoPresentation\n     * @type boolean\n     */\n    get shouldNotDoPresentation() {\n      return this.childSlides.length <= 1;\n    }\n\n    /**\n     * @private\n     * @property shouldRunAutomatically\n     * @type boolean\n     */\n    get shouldRunAutomatically() {\n      return this.hasInterval;\n    }\n\n    /**\n     * Starts automatic sliding on page load.\n     * This parameter has no effect if interval is less than or equal to zero.\n     *\n     * @default false\n     * @property autoPlay\n     * @public\n     * @type boolean\n     */\n    get autoPlay() {\n      return this.args.autoPlay ?? false;\n    }\n\n    /**\n     * If false will hard stop on corners, i.e., first slide won't make a transition to the\n     * last slide and vice versa.\n     *\n     * @default true\n     * @property wrap\n     * @public\n     * @type boolean\n     */\n    get wrap() {\n      return this.args.wrap ?? true;\n    }\n\n    /**\n     * Index of starting slide.\n     *\n     * @default 0\n     * @property index\n     * @public\n     * @type number\n     */\n    get index() {\n      return this.args.index ?? 0;\n    }\n\n    /**\n     * Waiting time before automatically show another slide.\n     * Automatic sliding is canceled if interval is less than or equal to zero.\n     *\n     * @default 5000\n     * @property interval\n     * @public\n     * @type number\n     */\n    get interval() {\n      return this.args.interval ?? 5000;\n    }\n\n    /**\n     * Should bind keyboard events into sliding.\n     *\n     * @default true\n     * @property keyboard\n     * @public\n     * @type boolean\n     */\n    get keyboard() {\n      return this.args.keyboard ?? true;\n    }\n\n    /**\n     * If automatic sliding should be left-to-right or right-to-left.\n     * This parameter has no effect if interval is less than or equal to zero.\n     *\n     * @default true\n     * @property ltr\n     * @public\n     * @type boolean\n     */\n    get ltr() {\n      return this.args.ltr ?? true;\n    }\n\n    /**\n     * The next control icon to be displayed.\n     *\n     * @default null\n     * @property nextControlIcon\n     * @type string\n     * @public\n     */\n\n    /**\n     * Label for screen readers, defaults to 'Next'.\n     *\n     * @default 'Next'\n     * @property nextControlLabel\n     * @type string\n     * @public\n     */\n    get nextControlLabel() {\n      return this.args.nextControlLabel ?? 'Next';\n    }\n\n    /**\n     * Pauses automatic sliding if mouse cursor is hovering the component.\n     * This parameter has no effect if interval is less than or equal to zero.\n     *\n     * @default true\n     * @property pauseOnMouseEnter\n     * @public\n     * @type boolean\n     */\n    get pauseOnMouseEnter() {\n      return this.args.pauseOnMouseEnter ?? true;\n    }\n\n    /**\n     * The previous control icon to be displayed.\n     *\n     * @default null\n     * @property prevControlIcon\n     * @type string\n     * @public\n     */\n\n    /**\n     * Label for screen readers, defaults to 'Previous'.\n     *\n     * @default 'Previous'\n     * @property prevControlLabel\n     * @type string\n     * @public\n     */\n    get prevControlLabel() {\n      return this.args.prevControlLabel ?? 'Previous';\n    }\n\n    /**\n     * Show or hide controls.\n     *\n     * @default true\n     * @property showControls\n     * @public\n     * @type boolean\n     */\n    get showControls() {\n      return this.args.showControls ?? true;\n    }\n\n    /**\n     * Show or hide indicators.\n     *\n     * @default true\n     * @property showIndicators\n     * @public\n     * @type boolean\n     */\n    get showIndicators() {\n      return this.args.showIndicators ?? true;\n    }\n\n    /**\n     * The duration of the slide transition.\n     * You should also change this parameter in Bootstrap CSS file.\n     *\n     * @default 600\n     * @property transitionDuration\n     * @public\n     * @type number\n     */\n    get transitionDuration() {\n      return this.args.transitionDuration ?? 600;\n    }\n\n    /**\n     * The type slide transition to perform.\n     * Options are 'fade' or 'slide'. Note: BS4 only\n     *\n     * @default 'slide'\n     * @property transition\n     * @public\n     * @type string\n     */\n    get transition() {\n      return this.args.transition ?? 'slide';\n    }\n    get carouselFade() {\n      return this.transition === 'fade';\n    }\n    toSlide(toIndex) {\n      if (this.currentIndex === toIndex || this.shouldNotDoPresentation) {\n        return;\n      }\n      this.assignClassNameControls(toIndex);\n      this.setFollowingIndex(toIndex);\n      if (this.shouldRunAutomatically === false || this.isMouseHovering) {\n        this.transitioner.perform();\n      } else {\n        this.cycle.perform();\n      }\n      this.args.onSlideChanged?.(toIndex);\n    }\n    toNextSlide() {\n      if (this.canTurnToRight) {\n        this.toSlide(this.currentIndex + 1);\n      }\n    }\n    toPrevSlide() {\n      if (this.canTurnToLeft) {\n        this.toSlide(this.currentIndex - 1);\n      }\n    }\n\n    /**\n     * Indicates what class names should be applicable to the current transition slides.\n     *\n     * @method assignClassNameControls\n     * @private\n     */\n    assignClassNameControls(toIndex) {\n      if (toIndex < this.currentIndex) {\n        this.directionalClassName = 'right';\n        this.orderClassName = 'prev';\n      } else {\n        this.directionalClassName = 'left';\n        this.orderClassName = 'next';\n      }\n    }\n    handleMouseEnter() {\n      if (this.pauseOnMouseEnter) {\n        this.isMouseHovering = true;\n        this.cycle.cancelAll();\n        this.waitIntervalToInitCycle.cancelAll();\n      }\n    }\n    handleMouseLeave() {\n      if (this.pauseOnMouseEnter && (this.transitioner.last !== null || this.waitIntervalToInitCycle.last !== null)) {\n        this.isMouseHovering = false;\n        this.waitIntervalToInitCycle.perform();\n      }\n    }\n    handleKeyDown(e) {\n      const code = e.keyCode || e.which;\n      if (this.keyboard === false || !(e.target instanceof HTMLElement) || /input|textarea/i.test(e.target.tagName)) {\n        return;\n      }\n      switch (code) {\n        case 37:\n          this.toPrevSlide();\n          break;\n        case 39:\n          this.toNextSlide();\n          break;\n        default:\n          break;\n      }\n    }\n\n    /**\n     * Sets the following slide index within the lower and upper bounds.\n     *\n     * @method setFollowingIndex\n     * @private\n     */\n    setFollowingIndex(toIndex) {\n      const slidesLengthMinusOne = this.childSlides.length - 1;\n      if (toIndex > slidesLengthMinusOne) {\n        this.followingIndex = 0;\n      } else if (toIndex < 0) {\n        this.followingIndex = slidesLengthMinusOne;\n      } else {\n        this.followingIndex = toIndex;\n      }\n    }\n\n    /**\n     * Coordinates the correct slide movement direction.\n     *\n     * @method toAppropriateSlide\n     * @private\n     */\n    toAppropriateSlide() {\n      if (this.ltr) {\n        this.toNextSlide();\n      } else {\n        this.toPrevSlide();\n      }\n    }\n    // This means any component. Component and Component<unknown> don't work for this purpose.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    registerChild(element) {\n      (0, _runloop.schedule)('actions', this, () => {\n        this.children = [...this.children, element];\n      });\n    }\n    // This means any component. Component and Component<unknown> don't work for this purpose.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    unregisterChild(element) {\n      (0, _runloop.schedule)('actions', this, () => {\n        this.children = this.children.filter(value => value !== element);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"children\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"childSlidesObserver\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"childSlidesObserver\"), _class.prototype), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.index;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"directionalClassName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"followingIndex\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"indexObserver\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"indexObserver\"), _class.prototype), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isMouseHovering\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"orderClassName\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"presentationState\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"cycle\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return function* () {\n        yield this.transitioner.perform();\n        yield (0, _emberConcurrency.timeout)(this.interval);\n        this.toAppropriateSlide();\n      };\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"transitioner\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return function* () {\n        this.presentationState = 'willTransit';\n        yield (0, _emberConcurrency.timeout)(this.transitionDuration);\n        this.presentationState = 'didTransition';\n        // Must change current index after execution of 'presentationStateObserver' method\n        // from child components.\n        yield new Promise(resolve => {\n          (0, _runloop.schedule)('afterRender', this, () => {\n            if (this.followingIndex !== undefined && this.followingIndex !== null) {\n              this.currentIndex = this.followingIndex;\n            }\n            resolve();\n          });\n        });\n      };\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"waitIntervalToInitCycle\", [_dec3], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return function* () {\n        if (this.shouldRunAutomatically === false) {\n          return;\n        }\n        yield (0, _emberConcurrency.timeout)(this.interval);\n        this.toAppropriateSlide();\n      };\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toSlide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toSlide\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toNextSlide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toNextSlide\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toPrevSlide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toPrevSlide\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleMouseEnter\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleMouseEnter\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleMouseLeave\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleMouseLeave\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleKeyDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleKeyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"registerChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"registerChild\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"unregisterChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"unregisterChild\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Carousel);\n});","define(\"ember-bootstrap/components/bs-carousel/slide\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/runloop\", \"ember-ref-bucket\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/destroyable\", \"@ember/template-factory\"], function (_exports, _component, _component2, _runloop, _emberRefBucket, _tracking, _object, _destroyable, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"ember-ref-bucket\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/destroyable\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"carousel-item {{if this.active \"active\"}} {{if this.left (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"carousel-item-start\" \"carousel-item-left\")}} {{if this.next \"carousel-item-next\"}} {{if this.prev \"carousel-item-prev\"}} {{if this.right (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"carousel-item-end\" \"carousel-item-right\")}}\"\n    ...attributes\n    {{create-ref \"mainNode\"}}\n    {{did-update this.presentationStateObserver @presentationState @currentSlide}}\n  >\n    {{yield}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"carousel-item \\\",[52,[30,0,[\\\"active\\\"]],\\\"active\\\"],\\\" \\\",[52,[30,0,[\\\"left\\\"]],\\\"carousel-item-start\\\"],\\\" \\\",[52,[30,0,[\\\"next\\\"]],\\\"carousel-item-next\\\"],\\\" \\\",[52,[30,0,[\\\"prev\\\"]],\\\"carousel-item-prev\\\"],\\\" \\\",[52,[30,0,[\\\"right\\\"]],\\\"carousel-item-end\\\"]]]],[17,1],[4,[38,2],[\\\"mainNode\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[4,[38,3],[[30,0,[\\\"presentationStateObserver\\\"]],[30,2],[30,3]],null],[12],[1,\\\"\\\\n  \\\"],[18,4,null],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"@presentationState\\\",\\\"@currentSlide\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"create-ref\\\",\\\"did-update\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-carousel/slide.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    A visible user-defined slide.\n  \n    See [Components.Carousel](Components.Carousel.html) for examples.\n  \n    @class CarouselSlide\n    @namespace Components\n    @extends Component\n    @public\n   */\n  let CarouselSlide = _exports.default = (_dec = (0, _emberRefBucket.ref)('mainNode'), _class = class CarouselSlide extends _component2.default {\n    /**\n     * @private\n     * @property isCurrentSlide\n     * @type boolean\n     */\n    get isCurrentSlide() {\n      return this.args.currentSlide === this;\n    }\n\n    /**\n     * @private\n     * @property isFollowingSlide\n     * @type boolean\n     */\n    get isFollowingSlide() {\n      return this.args.followingSlide === this;\n    }\n\n    /**\n     * Slide is moving to the left.\n     *\n     * @property left\n     * @type boolean\n     * @private\n     */\n\n    constructor(owner, args) {\n      super(owner, args);\n      /**\n       * @property _element\n       * @type null | HTMLElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      /**\n       * Defines slide visibility.\n       *\n       * @property active\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"active\", _descriptor2, this);\n      _initializerDefineProperty(this, \"left\", _descriptor3, this);\n      /**\n       * Next to appear in a left sliding.\n       *\n       * @property next\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"next\", _descriptor4, this);\n      /**\n       * Next to appear in a right sliding.\n       *\n       * @property prev\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"prev\", _descriptor5, this);\n      /**\n       * Slide is moving to the right.\n       *\n       * @property right\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"right\", _descriptor6, this);\n      args.registerChild?.(this);\n      (0, _destroyable.registerDestructor)(this, () => {\n        this.args.unregisterChild?.(this);\n      });\n    }\n\n    /**\n     * Coordinates the execution of a presentation.\n     *\n     * @method presentationStateObserver\n     * @private\n     */\n    presentationStateObserver() {\n      if (!this.active) {\n        this.active = this.isCurrentSlide && this.args.presentationState === null;\n      }\n      const presentationState = this.args.presentationState;\n      if (this.isCurrentSlide) {\n        switch (presentationState) {\n          case 'didTransition':\n            this.currentSlideDidTransition();\n            break;\n          case 'willTransit':\n            this.currentSlideWillTransit();\n            break;\n        }\n      }\n      if (this.isFollowingSlide) {\n        switch (presentationState) {\n          case 'didTransition':\n            this.followingSlideDidTransition();\n            break;\n          case 'willTransit':\n            this.followingSlideWillTransit();\n            break;\n        }\n      }\n    }\n\n    /**\n     * @method currentSlideDidTransition\n     * @private\n     */\n    currentSlideDidTransition() {\n      if (this.args.directionalClassName) {\n        this[this.args.directionalClassName] = false;\n      }\n      this.active = false;\n    }\n\n    /**\n     * @method currentSlideWillTransit\n     * @private\n     */\n    currentSlideWillTransit() {\n      this.active = true;\n      (0, _runloop.next)(this, function () {\n        if (this.args.directionalClassName) {\n          this[this.args.directionalClassName] = true;\n        }\n      });\n    }\n\n    /**\n     * @method followingSlideDidTransition\n     * @private\n     */\n    followingSlideDidTransition() {\n      this.active = true;\n      if (this.args.directionalClassName) {\n        this[this.args.directionalClassName] = false;\n      }\n      if (this.args.orderClassName) {\n        this[this.args.orderClassName] = false;\n      }\n    }\n\n    /**\n     * @method followingSlideWillTransit\n     * @private\n     */\n    followingSlideWillTransit() {\n      if (this.args.orderClassName) {\n        this[this.args.orderClassName] = true;\n      }\n      (0, _runloop.next)(this, () => {\n        this.reflow();\n        if (this.args.directionalClassName) {\n          this[this.args.directionalClassName] = true;\n        }\n      });\n    }\n\n    /**\n     * Makes things more stable, especially when fast changing.\n     */\n    reflow() {\n      this._element?.offsetHeight;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"active\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.isCurrentSlide && this.args.presentationState === null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"left\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"next\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"prev\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"right\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"presentationStateObserver\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"presentationStateObserver\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CarouselSlide);\n});","define(\"ember-bootstrap/components/bs-collapse\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@ember/utils\", \"@ember/runloop\", \"ember-bootstrap/utils/transition-end\", \"ember-ref-bucket\", \"ember-bootstrap/utils/decorators/arg\", \"@glimmer/tracking\", \"@ember/debug\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _utils, _runloop, _transitionEnd, _emberRefBucket, _arg, _tracking, _debug, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"ember-bootstrap/utils/transition-end\",0,\"ember-ref-bucket\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@glimmer/tracking\",0,\"@ember/debug\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"{{if this.collapse \"collapse\"}} {{if this.transitioning \"collapsing\"}} {{if this.showContent \"show\"}}\"\n    ...attributes\n    {{create-ref \"mainNode\"}}\n    {{style this.cssStyle}}\n    {{did-update this._onCollapsedChange this.collapsed}}\n    {{did-update this._updateCollapsedSize this.collapsedSize}}\n    {{did-update this._updateExpandedSize this.expandedSize}}\n  >\n    {{yield}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[52,[30,0,[\\\"collapse\\\"]],\\\"collapse\\\"],\\\" \\\",[52,[30,0,[\\\"transitioning\\\"]],\\\"collapsing\\\"],\\\" \\\",[52,[30,0,[\\\"showContent\\\"]],\\\"show\\\"]]]],[17,1],[4,[38,2],[\\\"mainNode\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[4,[38,3],[[30,0,[\\\"cssStyle\\\"]]],null],[4,[38,4],[[30,0,[\\\"_onCollapsedChange\\\"]],[30,0,[\\\"collapsed\\\"]]],null],[4,[38,4],[[30,0,[\\\"_updateCollapsedSize\\\"]],[30,0,[\\\"collapsedSize\\\"]]],null],[4,[38,4],[[30,0,[\\\"_updateExpandedSize\\\"]],[30,0,[\\\"expandedSize\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[18,2,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"create-ref\\\",\\\"style\\\",\\\"did-update\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-collapse.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    An Ember component that mimics the behaviour of [Bootstrap's collapse.js plugin](http://getbootstrap.com/javascript/#collapse)\n  \n    ### Usage\n  \n    ```hbs\n    <BsCollapse @collapsed={{this.collapsed}}>\n      <div class=\"well\">\n        <h2>Collapse</h2>\n        <p>This is collapsible content</p>\n      </div>\n    </BsCollapse>\n    ```\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Collapse\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let Collapse = _exports.default = (_dec = (0, _emberRefBucket.ref)('mainNode'), _class = class Collapse extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property _element\n       * @type null | HTMLElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      /**\n       * Collapsed/expanded state\n       *\n       * @property collapsed\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"collapsed\", _descriptor2, this);\n      /**\n       * True if this item is expanded\n       *\n       * @property active\n       * @private\n       */\n      _defineProperty(this, \"active\", !this.collapsed);\n      /**\n       * true if the component is currently transitioning\n       *\n       * @property transitioning\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"transitioning\", _descriptor3, this);\n      /**\n       * The size of the element when collapsed. Defaults to 0.\n       *\n       * @property collapsedSize\n       * @type number\n       * @default 0\n       * @public\n       */\n      _initializerDefineProperty(this, \"collapsedSize\", _descriptor4, this);\n      /**\n       * The size of the element when expanded. When null the value is calculated automatically to fit the containing elements.\n       *\n       * @property expandedSize\n       * @type number\n       * @default null\n       * @public\n       */\n      _initializerDefineProperty(this, \"expandedSize\", _descriptor5, this);\n      /**\n       * Usually the size (height) of the element is only set while transitioning, and reseted afterwards. Set to true to always set a size.\n       *\n       * @property resetSizeWhenNotCollapsing\n       * @type boolean\n       * @default true\n       * @private\n       */\n      _defineProperty(this, \"resetSizeWhenNotCollapsing\", true);\n      /**\n       * The direction (height/width) of the collapse animation.\n       * When setting this to 'width' you should also define custom CSS transitions for the width property, as the Bootstrap\n       * CSS does only support collapsible elements for the height direction.\n       *\n       * @property collapseDimension\n       * @type string\n       * @default 'height'\n       * @public\n       */\n      _initializerDefineProperty(this, \"collapseDimension\", _descriptor6, this);\n      /**\n       * The duration of the fade transition\n       *\n       * @property transitionDuration\n       * @type number\n       * @default 350\n       * @public\n       */\n      _initializerDefineProperty(this, \"transitionDuration\", _descriptor7, this);\n      _initializerDefineProperty(this, \"collapseSize\", _descriptor8, this);\n    }\n    get collapse() {\n      return !this.transitioning;\n    }\n    get showContent() {\n      return this.collapse && this.active;\n    }\n    /**\n     * Calculates a hash for style attribute.\n     */\n    get cssStyle() {\n      if ((0, _utils.isNone)(this.collapseSize)) {\n        return {};\n      }\n      return {\n        [this.collapseDimension]: `${this.collapseSize}px`\n      };\n    }\n    /**\n     * The action to be sent when the element is about to be hidden.\n     *\n     * @event onHide\n     * @public\n     */\n\n    /**\n     * The action to be sent after the element has been completely hidden (including the CSS transition).\n     *\n     * @event onHidden\n     * @public\n     */\n\n    /**\n     * The action to be sent when the element is about to be shown.\n     *\n     * @event onShow\n     * @public\n     */\n\n    /**\n     * The action to be sent after the element has been completely shown (including the CSS transition).\n     *\n     * @event onShown\n     * @public\n     */\n\n    /**\n     * Triggers the show transition\n     *\n     * @method show\n     * @protected\n     */\n    show() {\n      (false && !(this._element) && (0, _debug.assert)('Reference to collapse div element exists.', this._element));\n      this.args.onShow?.();\n      this.transitioning = true;\n      this.active = true;\n      this.collapseSize = this.collapsedSize;\n      (0, _transitionEnd.default)(this._element, this.transitionDuration).then(() => {\n        if (this.isDestroyed) {\n          return;\n        }\n        this.transitioning = false;\n        if (this.resetSizeWhenNotCollapsing) {\n          this.collapseSize = null;\n        }\n        this.args.onShown?.();\n      });\n      (0, _runloop.next)(this, function () {\n        if (!this.isDestroyed) {\n          this.collapseSize = this.getExpandedSize('show');\n        }\n      });\n    }\n\n    /**\n     * Get the size of the element when expanded\n     *\n     * @method getExpandedSize\n     * @param action\n     * @return {Number}\n     * @private\n     */\n    getExpandedSize(action) {\n      (false && !(this._element) && (0, _debug.assert)('Reference to collapse div element exists.', this._element));\n      const expandedSize = this.expandedSize;\n      if (expandedSize != null) {\n        return expandedSize;\n      }\n      const collapseElement = this._element;\n      const prefix = action === 'show' ? 'scroll' : 'offset';\n      const measureProperty = `${prefix}${this.collapseDimension.substring(0, 1).toUpperCase()}${this.collapseDimension.substring(1)}`;\n      return collapseElement[measureProperty];\n    }\n\n    /**\n     * Triggers the hide transition\n     *\n     * @method hide\n     * @protected\n     */\n    hide() {\n      (false && !(this._element) && (0, _debug.assert)('Reference to collapse div element exists.', this._element));\n      this.args.onHide?.();\n      this.transitioning = true;\n      this.active = false;\n      this.collapseSize = this.getExpandedSize('hide');\n      (0, _transitionEnd.default)(this._element, this.transitionDuration).then(() => {\n        if (this.isDestroyed) {\n          return;\n        }\n        this.transitioning = false;\n        if (this.resetSizeWhenNotCollapsing) {\n          this.collapseSize = null;\n        }\n        this.args.onHidden?.();\n      });\n      (0, _runloop.next)(this, function () {\n        if (!this.isDestroyed) {\n          this.collapseSize = this.collapsedSize;\n        }\n      });\n    }\n    _onCollapsedChange() {\n      const collapsed = this.collapsed;\n      const active = this.active;\n      if (collapsed !== active) {\n        return;\n      }\n      if (collapsed === false) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }\n    _updateCollapsedSize() {\n      if (!this.resetSizeWhenNotCollapsing && this.collapsed && !this.transitioning) {\n        this.collapseSize = this.collapsedSize;\n      }\n    }\n    _updateExpandedSize() {\n      if (!this.resetSizeWhenNotCollapsing && !this.collapsed && !this.transitioning) {\n        this.collapseSize = this.expandedSize;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"collapsed\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"transitioning\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"collapsedSize\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"expandedSize\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"collapseDimension\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'height';\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"transitionDuration\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 350;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"collapseSize\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"_onCollapsedChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onCollapsedChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_updateCollapsedSize\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_updateCollapsedSize\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_updateExpandedSize\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_updateExpandedSize\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Collapse);\n});","define(\"ember-bootstrap/components/bs-contextual-help\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/runloop\", \"ember-bootstrap/utils/transition-end\", \"ember-bootstrap/utils/dom\", \"ember-bootstrap/utils/decorators/uses-transition\", \"@ember/debug\", \"@ember/-internals/views\", \"ember-bootstrap/utils/decorators/arg\", \"@glimmer/tracking\", \"ember-ref-bucket\"], function (_exports, _component, _object, _runloop, _transitionEnd, _dom, _usesTransition, _debug, _views, _arg, _tracking, _emberRefBucket) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"ember-bootstrap/utils/transition-end\",0,\"ember-bootstrap/utils/dom\",0,\"ember-bootstrap/utils/decorators/uses-transition\",0,\"@ember/debug\",0,\"@ember/-internals/views\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@glimmer/tracking\",0,\"ember-ref-bucket\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const HOVERSTATE_NONE = 'none';\n  const HOVERSTATE_IN = 'in';\n  const HOVERSTATE_OUT = 'out';\n  function noop() {}\n  /**\n    @class ContextualHelp\n    @namespace Components\n    @extends Glimmer.Component\n    @private\n  */\n  let ContextualHelp = _exports.default = (_dec = (0, _usesTransition.default)('fade'), _dec2 = (0, _emberRefBucket.ref)('overlayElement'), _class = class ContextualHelp extends _component.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property title\n       * @type string\n       * @public\n       */\n      /**\n       * How to position the tooltip/popover - top | bottom | left | right\n       *\n       * @property title\n       * @type string\n       * @default 'top'\n       * @public\n       */\n      _initializerDefineProperty(this, \"placement\", _descriptor, this);\n      /**\n       * By default, it will dynamically reorient the tooltip/popover based on the available space in the viewport. For\n       * example, if `placement` is \"left\", the tooltip/popover will display to the left when possible, otherwise it will\n       * display right. Set to `false` to force placement according to the `placement` property\n       *\n       * @property autoPlacement\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"autoPlacement\", _descriptor2, this);\n      /**\n       * You can programmatically show the tooltip/popover by setting this to `true`\n       *\n       * @property visible\n       * @type boolean\n       * @default false\n       * @public\n       */\n      _initializerDefineProperty(this, \"visible\", _descriptor3, this);\n      /**\n       * @property inDom\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"_inDom\", _descriptor4, this);\n      /**\n       * Set to false to disable fade animations.\n       *\n       * @property fade\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"fade\", _descriptor5, this);\n      /**\n       * Used to apply Bootstrap's visibility class\n       *\n       * @property showHelp\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _initializerDefineProperty(this, \"showHelp\", _descriptor6, this);\n      /**\n       * Delay showing and hiding the tooltip/popover (ms). Individual delays for showing and hiding can be specified by using the\n       * `delayShow` and `delayHide` properties.\n       *\n       * @property delay\n       * @type number\n       * @default 0\n       * @public\n       */\n      _initializerDefineProperty(this, \"delay\", _descriptor7, this);\n      /**\n       * Delay showing the tooltip/popover. This property overrides the general delay set with the `delay` property.\n       *\n       * @property delayShow\n       * @type number\n       * @default 0\n       * @public\n       */\n      _initializerDefineProperty(this, \"delayShow\", _descriptor8, this);\n      /**\n       * Delay hiding the tooltip/popover. This property overrides the general delay set with the `delay` property.\n       *\n       * @property delayHide\n       * @type number\n       * @default 0\n       * @public\n       */\n      _initializerDefineProperty(this, \"delayHide\", _descriptor9, this);\n      /**\n       * The duration of the fade transition\n       *\n       * @property transitionDuration\n       * @type number\n       * @default 150\n       * @public\n       */\n      _initializerDefineProperty(this, \"transitionDuration\", _descriptor0, this);\n      /**\n       * Keeps the tooltip/popover within the bounds of this element when `autoPlacement` is true. Can be any valid CSS selector.\n       *\n       * @property viewportSelector\n       * @type string\n       * @default 'body'\n       * @see viewportPadding\n       * @see autoPlacement\n       * @public\n       */\n      _initializerDefineProperty(this, \"viewportSelector\", _descriptor1, this);\n      /**\n       * Take a padding into account for keeping the tooltip/popover within the bounds of the element given by `viewportSelector`.\n       *\n       * @property viewportPadding\n       * @type number\n       * @default 0\n       * @see viewportSelector\n       * @see autoPlacement\n       * @public\n       */\n      _initializerDefineProperty(this, \"viewportPadding\", _descriptor10, this);\n      _defineProperty(this, \"_parent\", void 0);\n      _defineProperty(this, \"_parentFinder\", self.document ? self.document.createTextNode('') : '');\n      /**\n       * The DOM element that triggers the tooltip/popover. By default, it is the parent element of this component.\n       * You can set this to any CSS selector to have any other element trigger the tooltip/popover.\n       *\n       * @property triggerElement\n       * @type string | null\n       * @public\n       */\n      _initializerDefineProperty(this, \"triggerElement\", _descriptor11, this);\n      _defineProperty(this, \"triggerTargetElement\", void 0);\n      /**\n       * The event(s) that should trigger the tooltip/popover - click | hover | focus.\n       * You can set this to a single event or multiple events, given as an array or a string separated by spaces.\n       *\n       * @property triggerEvents\n       * @type array|string\n       * @default 'hover focus'\n       * @public\n       */\n      _initializerDefineProperty(this, \"triggerEvents\", _descriptor12, this);\n      /**\n       * Current hover state, 'in', 'out' or null\n       *\n       * @property hoverState\n       * @type number\n       * @private\n       */\n      _defineProperty(this, \"hoverState\", HOVERSTATE_NONE);\n      /**\n       * Current state for events\n       */\n      _defineProperty(this, \"hover\", false);\n      _defineProperty(this, \"focus\", false);\n      _defineProperty(this, \"click\", false);\n      /**\n       * Ember.run timer\n       *\n       * @property timer\n       * @private\n       */\n      _defineProperty(this, \"timer\", null);\n      /**\n       * Use CSS transitions?\n       *\n       * @property usesTransition\n       * @type boolean\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"usesTransition\", _descriptor13, this);\n      /**\n       * The DOM element of the overlay element.\n       *\n       * @property overlayElement\n       * @type object\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"overlayElement\", _descriptor14, this);\n    }\n    get inDom() {\n      return this._inDom ?? !!(this.visible && this.triggerTargetElement);\n    }\n    set inDom(value) {\n      if (this._inDom === value) {\n        return;\n      }\n      this._inDom = value;\n    }\n    /**\n     * The DOM element of the arrow element.\n     *\n     * @property arrowElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    /**\n     * The wormhole destinationElement\n     *\n     * @property destinationElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    get destinationElement() {\n      return (0, _dom.getDestinationElement)(this);\n    }\n\n    /**\n     * The DOM element of the viewport element.\n     *\n     * @property viewportElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    get viewportElement() {\n      return document.querySelector(this.viewportSelector);\n    }\n    /**\n     * @method getTriggerTargetElement\n     * @private\n     */\n    getTriggerTargetElement() {\n      const triggerElement = this.triggerElement;\n      let el;\n      if (!triggerElement) {\n        el = this._parent;\n      } else {\n        el = document.querySelector(triggerElement);\n      }\n      (false && !(el) && (0, _debug.assert)('Could not find trigger element for tooltip/popover component', el));\n      return el;\n    }\n    get _triggerEvents() {\n      let events = this.triggerEvents;\n      if (typeof events === 'string') {\n        events = events.split(' ');\n      }\n      return events.map(event => {\n        switch (event) {\n          case 'hover':\n            return ['mouseenter', 'mouseleave'];\n          case 'focus':\n            return ['focusin', 'focusout'];\n          default:\n            return event;\n        }\n      });\n    }\n\n    /**\n     * If true component will render in place, rather than be wormholed.\n     *\n     * @property renderInPlace\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * @property _renderInPlace\n     * @type boolean\n     * @private\n     */\n    get _renderInPlace() {\n      return this.args.renderInPlace || !this.destinationElement;\n    }\n    get shouldShowHelp() {\n      return this.hover || this.focus || this.click;\n    }\n    /**\n     * This action is called immediately when the tooltip/popover is about to be shown.\n     *\n     * @event onShow\n     * @public\n     */\n\n    /**\n     * This action will be called when the tooltip/popover has been made visible to the user (will wait for CSS transitions to complete).\n     *\n     * @event onShown\n     * @public\n     */\n\n    /**\n     * This action is called immediately when the tooltip/popover is about to be hidden.\n     *\n     * @event onHide\n     * @public\n     */\n\n    /**\n     * This action is called when the tooltip/popover has finished being hidden from the user (will wait for CSS transitions to complete).\n     *\n     * @event onHidden\n     * @public\n     */\n\n    /**\n     * Called when a show event has been received\n     *\n     * @method enter\n     * @param e\n     * @private\n     */\n    enter(e) {\n      if (e) {\n        const eventType = e.type === 'focusin' ? 'focus' : 'hover';\n        this[eventType] = true;\n      }\n      if (this.showHelp || this.hoverState === HOVERSTATE_IN) {\n        this.hoverState = HOVERSTATE_IN;\n        return;\n      }\n      (0, _runloop.cancel)(this.timer ?? undefined);\n      this.hoverState = HOVERSTATE_IN;\n      if (!this.delayShow) {\n        return this.show();\n      }\n      this.timer = (0, _runloop.later)(this, function () {\n        if (this.hoverState === HOVERSTATE_IN) {\n          this.show();\n        }\n      }, this.delayShow);\n    }\n\n    /**\n     * Called when a hide event has been received\n     *\n     * @method leave\n     * @param e\n     * @private\n     */\n    leave(e) {\n      if (e) {\n        const eventType = e.type === 'focusout' ? 'focus' : 'hover';\n        this[eventType] = false;\n      }\n      if (this.shouldShowHelp) {\n        return;\n      }\n      (0, _runloop.cancel)(this.timer ?? undefined);\n      this.hoverState = HOVERSTATE_OUT;\n      if (!this.delayHide) {\n        return this.hide();\n      }\n      this.timer = (0, _runloop.later)(() => {\n        if (this.hoverState === HOVERSTATE_OUT) {\n          this.hide();\n        }\n      }, this.delayHide);\n    }\n\n    /**\n     * Called for a click event\n     *\n     * @method toggle\n     * @private\n     */\n    toggle() {\n      this.click = !this.click;\n      if (this.shouldShowHelp) {\n        this.enter();\n      } else {\n        this.leave();\n      }\n    }\n\n    /**\n     * Show the tooltip/popover\n     *\n     * @method show\n     * @private\n     */\n    show() {\n      if (this.isDestroyed || this.isDestroying) {\n        return;\n      }\n      if (false === this.args.onShow?.(this)) {\n        return;\n      }\n      this.inDom = true;\n      (0, _runloop.schedule)('afterRender', this, this._show);\n    }\n    _show(skipTransition = false) {\n      if (this.isDestroyed || this.isDestroying) {\n        return;\n      }\n      this.showHelp = true;\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n      // See https://github.com/twbs/bootstrap/pull/22481\n      if ('ontouchstart' in document.documentElement) {\n        for (const child of document.body.children) {\n          child.addEventListener('mouseover', noop);\n        }\n      }\n      const tooltipShowComplete = () => {\n        if (this.isDestroyed) {\n          return;\n        }\n        const prevHoverState = this.hoverState;\n        this.args.onShown?.(this);\n        this.hoverState = HOVERSTATE_NONE;\n        if (prevHoverState === HOVERSTATE_OUT) {\n          this.leave();\n        }\n      };\n      if (!skipTransition && this.usesTransition && this.overlayElement) {\n        (0, _transitionEnd.default)(this.overlayElement, this.transitionDuration).then(tooltipShowComplete);\n      } else {\n        tooltipShowComplete();\n      }\n    }\n\n    /**\n     * Position the tooltip/popover's arrow\n     *\n     * @method replaceArrow\n     * @param delta\n     * @param dimension\n     * @param isVertical\n     * @private\n     */\n    replaceArrow(delta, dimension, isVertical) {\n      const el = this.arrowElement;\n      if (!el) {\n        return;\n      }\n      el.style[isVertical ? 'left' : 'top'] = `${50 * (1 - delta / dimension)}%`;\n      el.style[isVertical ? 'top' : 'left'] = '';\n    }\n\n    /**\n     * Hide the tooltip/popover\n     *\n     * @method hide\n     * @private\n     */\n    hide() {\n      if (this.isDestroyed) {\n        return;\n      }\n      if (false === this.args.onHide?.(this)) {\n        return;\n      }\n      const tooltipHideComplete = () => {\n        if (this.isDestroyed) {\n          return;\n        }\n        if (this.hoverState !== HOVERSTATE_IN) {\n          this.inDom = false;\n        }\n        this.args.onHidden?.(this);\n      };\n      this.showHelp = false;\n\n      // if this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const child of document.body.children) {\n          child.removeEventListener('mouseover', noop);\n        }\n      }\n      if (this.usesTransition && this.overlayElement) {\n        (0, _transitionEnd.default)(this.overlayElement, this.transitionDuration).then(tooltipHideComplete);\n      } else {\n        tooltipHideComplete();\n      }\n      this.hoverState = HOVERSTATE_NONE;\n    }\n\n    /**\n     * @method addListeners\n     * @private\n     */\n    addListeners() {\n      const target = this.triggerTargetElement;\n      if (!target || !(target instanceof Element)) {\n        return;\n      }\n      this._triggerEvents.forEach(event => {\n        if (typeof event === 'string') {\n          target.addEventListener(event, this._handleToggle);\n        } else {\n          const [inEvent, outEvent] = event;\n          if (inEvent) {\n            target.addEventListener(inEvent, this._handleEnter);\n          }\n          if (outEvent) {\n            target.addEventListener(outEvent, this._handleLeave);\n          }\n        }\n      });\n    }\n\n    /**\n     * @method removeListeners\n     * @private\n     */\n    removeListeners() {\n      try {\n        const target = this.triggerTargetElement;\n        if (!target || !(target instanceof Element)) {\n          return;\n        }\n        this._triggerEvents.forEach(event => {\n          if (typeof event === 'string') {\n            target.removeEventListener(event, this._handleToggle);\n          } else {\n            const [inEvent, outEvent] = event;\n            if (inEvent) {\n              target.removeEventListener(inEvent, this._handleEnter);\n            }\n            if (outEvent) {\n              target.removeEventListener(outEvent, this._handleLeave);\n            }\n          }\n        });\n      } catch (e) {} // eslint-disable-line no-empty\n    }\n\n    /**\n     * @method handleTriggerEvent\n     * @private\n     */\n    handleTriggerEvent(handler, e) {\n      const overlayElement = this.overlayElement;\n      if (overlayElement && e.target instanceof Node && overlayElement.contains(e.target)) {\n        return;\n      }\n      return handler.call(this, e);\n    }\n    _handleEnter(e) {\n      this.handleTriggerEvent(this.enter, e);\n    }\n    _handleLeave(e) {\n      this.handleTriggerEvent(this.leave, e);\n    }\n    _handleToggle(e) {\n      this.handleTriggerEvent(this.toggle, e);\n    }\n    close() {\n      // Make sure our click state is off, otherwise the next click would\n      // close the already-closed tooltip/popover. We don't need to worry\n      // about this for hover/focus because those aren't \"stateful\" toggle\n      // events like click.\n      this.click = false;\n      this.hide();\n    }\n    setup() {\n      if (typeof FastBoot !== 'undefined') {\n        // ember-render-helpers calls this also in FastBoot, so guard against this\n        return;\n      }\n      if (typeof this._parentFinder === 'string') {\n        return;\n      }\n      let parent = this._parentFinder.parentNode;\n      if (!(parent instanceof Element)) {\n        return;\n      }\n      // In the rare case of using FastBoot w/ rehydration, the parent finder TextNode rendered by FastBoot will be reused,\n      // so our own instance on the component is not rendered, only exists here as detached from DOM and thus has no parent.\n      // In this case we try to use Ember's private API as a fallback.\n      // Related: https://github.com/emberjs/rfcs/issues/168\n      if (!parent) {\n        try {\n          parent = (0, _views.getViewBounds)(this).parentElement;\n        } catch (e) {\n          // we catch the possibly broken private API call, the component can still work if the trigger element is defined\n          // using a CSS selector.\n        }\n      }\n      this._parent = parent;\n\n      // Look for target element after rendering has finished, in case the target DOM element is rendered *after* us\n      // see https://github.com/kaliber5/ember-bootstrap/issues/1329\n      (0, _runloop.schedule)('afterRender', () => {\n        this.triggerTargetElement = this.getTriggerTargetElement();\n        this.addListeners();\n        if (this.visible) {\n          (0, _runloop.next)(this, this.show);\n        }\n      });\n    }\n    showOrHide() {\n      if (this.args.visible) {\n        (0, _runloop.next)(this, this.show);\n      } else {\n        (0, _runloop.next)(this, this.hide);\n      }\n    }\n    willDestroy() {\n      super.willDestroy();\n      this.removeListeners();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"placement\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'top';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"autoPlacement\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"visible\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"_inDom\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"fade\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showHelp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.visible;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"delay\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"delayShow\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.delay ?? 0;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"delayHide\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.delay ?? 0;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"transitionDuration\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 150;\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"viewportSelector\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'body';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"viewportPadding\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"triggerElement\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"triggerEvents\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'hover focus';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"usesTransition\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"overlayElement\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"_handleEnter\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_handleEnter\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_handleLeave\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_handleLeave\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_handleToggle\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_handleToggle\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"close\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"close\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showOrHide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showOrHide\"), _class.prototype), _class);\n});","define(\"ember-bootstrap/components/bs-contextual-help/element\", [\"exports\", \"@ember/object\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@glimmer/tracking\", \"ember-ref-bucket\"], function (_exports, _object, _component, _arg, _tracking, _emberRefBucket) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@glimmer/tracking\",0,\"@embroider/macros\",0,\"ember-ref-bucket\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  /**\n   Internal (abstract) component for contextual help markup. Should not be used directly.\n  \n   @class ContextualHelpElement\n   @namespace Components\n   @extends Glimmer.Component\n   @private\n   */\n  let ContextualHelpElement = _exports.default = (_dec = (0, _emberRefBucket.trackedRef)('popperElement'), _class = class ContextualHelpElement extends _component.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property placement\n       * @type string\n       * @default 'top'\n       * @public\n       */\n      _initializerDefineProperty(this, \"placement\", _descriptor, this);\n      // `actualPlacement` is initialized with `@placement` and updated by Popper\n      // through the `updatePlacement` method which is bound to Popper's\n      // `onFirstUpdate` hook.\n      //\n      // The options passed to Popper are autotracked. And Ember Popper Modifier\n      // updates Popper with the new options whenever they change.\n      //\n      // `actualPlacement` is not updated when `@placement` changes and Popper's\n      // `onFirstUpdate` hook does not run. It is unclear if that situation can\n      // ever happen. But in case we get a bug report related to layout issues\n      // when `@placement` argument changed after initial rendering, it may be\n      // related.\n      //\n      // eslint-disable-next-line ember/no-tracked-properties-from-args\n      _initializerDefineProperty(this, \"actualPlacement\", _descriptor2, this);\n      /**\n       * @property fade\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"fade\", _descriptor3, this);\n      /**\n       * @property showHelp\n       * @type boolean\n       * @default false\n       * @public\n       */\n      _initializerDefineProperty(this, \"showHelp\", _descriptor4, this);\n      /**\n       * If true component will render in place, rather than be wormholed.\n       *\n       * @property renderInPlace\n       * @type boolean\n       * @default true\n       * @public\n       */\n      /**\n       * Which element to align to\n       *\n       * @property popperTarget\n       * @type {string|HTMLElement}\n       * @public\n       */\n      /**\n       * @property autoPlacement\n       * @type boolean\n       * @default true\n       * @public\n       */\n      /**\n       * The DOM element of the viewport element.\n       *\n       * @property viewportElement\n       * @type object\n       * @public\n       */\n      /**\n       * Take a padding into account for keeping the tooltip/popover within the bounds of the element given by `viewportElement`.\n       *\n       * @property viewportPadding\n       * @type number\n       * @default 0\n       * @public\n       */\n      /**\n       * @property arrowClass\n       * @private\n       */\n      _defineProperty(this, \"arrowClass\", 'arrow');\n      _defineProperty(this, \"placementClassPrefix\", '');\n      _defineProperty(this, \"offset\", [0, 0]);\n      _initializerDefineProperty(this, \"popperElement\", _descriptor5, this);\n    }\n    /**\n     * popper.js modifier config\n     *\n     * @property popperModifiers\n     * @type {object}\n     * @private\n     */\n    get popperOptions() {\n      const options = {\n        placement: this.placement,\n        // Popper's `onFirstUpdate` hook only runs when Popper positioned the element\n        // the first time. But not when it updates that position later. This may lead\n        // to `actualPlacement` property getting out of sync. It is unclear if this\n        // leads to any actual bugs. But we should investigate it as a potential root\n        // cause when we get a bug report related to placement of popovers or tooltips.\n        onFirstUpdate: this.updatePlacement,\n        modifiers: [],\n        strategy: 'absolute'\n      };\n\n      // We need popperElement, so we wait for this getter to recompute once it's available\n      if (!this.popperElement) {\n        return options;\n      }\n      options.modifiers = [{\n        name: 'arrow',\n        options: {\n          element: this.popperElement.querySelector(`.${this.arrowClass}`),\n          padding: 4\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this.offset\n        }\n      }, {\n        name: 'preventOverflow',\n        enabled: this.args.autoPlacement,\n        options: {\n          boundary: this.args.viewportElement,\n          padding: this.args.viewportPadding\n        }\n      }, {\n        name: 'flip',\n        enabled: this.args.autoPlacement\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: this.updatePlacement\n      }];\n      return options;\n    }\n    get actualPlacementClass() {\n      let ending = this.actualPlacement;\n      {\n        if (ending === 'right') {\n          ending = 'end';\n        }\n        if (ending === 'left') {\n          ending = 'start';\n        }\n      }\n      return this.placementClassPrefix + ending;\n    }\n    updatePlacement(state) {\n      // normalize argument\n      const normalizedState = 'state' in state ? state.state : state;\n      if (this.actualPlacement === normalizedState.placement) {\n        return;\n      }\n      this.actualPlacement = normalizedState.placement;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"placement\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'top';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"actualPlacement\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.placement;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"fade\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showHelp\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"popperElement\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"updatePlacement\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updatePlacement\"), _class.prototype), _class);\n});","define(\"ember-bootstrap/components/bs-dropdown\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@ember/debug\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _debug, _tracking, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/debug\",0,\"@embroider/macros\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#let (element this.htmlTag) as |Tag|}}\n    <Tag\n      class=\"{{this.containerClass}}\n        {{if this.inNav \"nav-item\"}}\n        {{if this.isOpen \"show\"}}\"\n      ...attributes\n    >\n      {{yield\n        (hash\n          button=(component (ensure-safe-component (bs-default @buttonComponent (component \"bs-dropdown/button\")))\n            isOpen=this.isOpen\n            onClick=this.toggleDropdown\n            onKeyDown=this.handleKeyEvent\n            registerChildElement=this.registerChildElement\n            unregisterChildElement=this.unregisterChildElement\n          )\n          toggle=(component (ensure-safe-component (bs-default @toggleComponent (component \"bs-dropdown/toggle\")))\n            isOpen=this.isOpen\n            inNav=@inNav\n            onClick=this.toggleDropdown\n            onKeyDown=this.handleKeyEvent\n            registerChildElement=this.registerChildElement\n            unregisterChildElement=this.unregisterChildElement\n          )\n          menu=(component (ensure-safe-component (bs-default @menuComponent (component \"bs-dropdown/menu\")))\n            isOpen=this.isOpen\n            inNav=@inNav\n            direction=this.direction\n            toggleElement=this.toggleElement\n            registerChildElement=this.registerChildElement\n            unregisterChildElement=this.unregisterChildElement\n          )\n          toggleDropdown=this.toggleDropdown\n          openDropdown=this.openDropdown\n          closeDropdown=this.closeDropdown\n          isOpen=this.isOpen\n        )\n      }}\n      {{#if this.isOpen}}\n        {{on-document \"keydown\" this.handleKeyEvent}}\n        {{on-document \"click\" this.closeHandler capture=true}}\n        {{on-document \"keyup\" this.closeHandler}}\n      {{/if}}\n  \n    </Tag>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],[[30,0,[\\\"htmlTag\\\"]]],null]],[[[1,\\\"  \\\"],[8,[30,1],[[16,0,[29,[[30,0,[\\\"containerClass\\\"]],\\\"\\\\n      \\\",[52,[30,0,[\\\"inNav\\\"]],\\\"nav-item\\\"],\\\"\\\\n      \\\",[52,[30,0,[\\\"isOpen\\\"]],\\\"show\\\"]]]],[17,2]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[18,7,[[28,[37,4],null,[[\\\"button\\\",\\\"toggle\\\",\\\"menu\\\",\\\"toggleDropdown\\\",\\\"openDropdown\\\",\\\"closeDropdown\\\",\\\"isOpen\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,3],[50,\\\"bs-dropdown/button\\\",0,null,null]],null]],null],0,null,[[\\\"isOpen\\\",\\\"onClick\\\",\\\"onKeyDown\\\",\\\"registerChildElement\\\",\\\"unregisterChildElement\\\"],[[30,0,[\\\"isOpen\\\"]],[30,0,[\\\"toggleDropdown\\\"]],[30,0,[\\\"handleKeyEvent\\\"]],[30,0,[\\\"registerChildElement\\\"]],[30,0,[\\\"unregisterChildElement\\\"]]]]],[50,[28,[37,6],[[28,[37,7],[[30,4],[50,\\\"bs-dropdown/toggle\\\",0,null,null]],null]],null],0,null,[[\\\"isOpen\\\",\\\"inNav\\\",\\\"onClick\\\",\\\"onKeyDown\\\",\\\"registerChildElement\\\",\\\"unregisterChildElement\\\"],[[30,0,[\\\"isOpen\\\"]],[30,5],[30,0,[\\\"toggleDropdown\\\"]],[30,0,[\\\"handleKeyEvent\\\"]],[30,0,[\\\"registerChildElement\\\"]],[30,0,[\\\"unregisterChildElement\\\"]]]]],[50,[28,[37,6],[[28,[37,7],[[30,6],[50,\\\"bs-dropdown/menu\\\",0,null,null]],null]],null],0,null,[[\\\"isOpen\\\",\\\"inNav\\\",\\\"direction\\\",\\\"toggleElement\\\",\\\"registerChildElement\\\",\\\"unregisterChildElement\\\"],[[30,0,[\\\"isOpen\\\"]],[30,5],[30,0,[\\\"direction\\\"]],[30,0,[\\\"toggleElement\\\"]],[30,0,[\\\"registerChildElement\\\"]],[30,0,[\\\"unregisterChildElement\\\"]]]]],[30,0,[\\\"toggleDropdown\\\"]],[30,0,[\\\"openDropdown\\\"]],[30,0,[\\\"closeDropdown\\\"]],[30,0,[\\\"isOpen\\\"]]]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isOpen\\\"]],[[[1,\\\"      \\\"],[1,[28,[35,8],[\\\"keydown\\\",[30,0,[\\\"handleKeyEvent\\\"]]],null]],[1,\\\"\\\\n      \\\"],[1,[28,[35,8],[\\\"click\\\",[30,0,[\\\"closeHandler\\\"]]],[[\\\"capture\\\"],[true]]]],[1,\\\"\\\\n      \\\"],[1,[28,[35,8],[\\\"keyup\\\",[30,0,[\\\"closeHandler\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[1]]]],[\\\"Tag\\\",\\\"&attrs\\\",\\\"@buttonComponent\\\",\\\"@toggleComponent\\\",\\\"@inNav\\\",\\\"@menuComponent\\\",\\\"&default\\\"],[\\\"let\\\",\\\"element\\\",\\\"if\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"on-document\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-dropdown.hbs\",\n    \"isStrictMode\": false\n  });\n  const ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n  const SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n  const TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n  const ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n  const ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  const SUPPORTED_KEYCODES = [ESCAPE_KEYCODE, ARROW_DOWN_KEYCODE, ARROW_UP_KEYCODE];\n\n  /**\n    Bootstrap style [dropdown menus](http://getbootstrap.com/components/#dropdowns), consisting\n    of a toggle element, and the dropdown menu itself.\n  \n    ### Usage\n  \n    Use this component together with the yielded contextual components:\n    * [Components.DropdownToggle](Components.DropdownToggle.html)\n    * [Components.DropdownButton](Components.DropdownButton.html)\n    * [Components.DropdownMenu](Components.DropdownMenu.html)\n      * [Components.DropdownMenuItem](Components.DropdownMenuItem.html)\n      * [Components.DropdownMenuDivider](Components.DropdownMenuDivider.html)\n      * [Components.DropdownMenuLinkTo](Components.DropdownMenuLinkTo.html)\n  \n    Furthermore references to the following actions are yielded:\n  \n    * `toggleDropdown`\n    * `openDropdown`\n    * `closeDropdown`\n  \n    ```hbs\n    <BsDropdown as |dd|>\n      <dd.toggle>Dropdown <span class=\"caret\"></span></dd.toggle>\n      <dd.menu as |ddm|>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something</ddm.linkTo>\n        </ddm.item>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something different</ddm.linkTo>\n        </ddm.item>\n      </dd.menu>\n    </BsDropdown>\n    ```\n  \n    If you need to use dropdowns in a [nav](Components.Nav.html), use the `bs-nav.dropdown`\n    contextual component rather than a standalone dropdown to ensure the correct styling\n    regardless of your Bootstrap version.\n  \n    > Note: the use of angle brackets `<ddm.linkTo>` as shown above is only supported for Ember >= 3.10, as it relies on its\n    > Ember's native implementation of the [`LinkComponent`](https://api.emberjs.com/ember/3.12/classes/Ember.Templates.helpers/methods/link-to?anchor=link-to).\n    > For older Ember versions please use the legacy syntax with positional arguments:\n    > `{{#ddm.link-to \"bar\" this.model}}Bar{{/ddm.link-to}}`\n  \n    ### Button dropdowns\n  \n    To use a button as the dropdown toggle element (see http://getbootstrap.com/components/#btn-dropdowns), use the\n    `Components.DropdownButton` component as the toggle:\n  \n    ```hbs\n    <BsDropdown as |dd|>\n      <dd.button>Dropdown <span class=\"caret\"></span></dd.button>\n      <dd.menu as |ddm|>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something</ddm.linkTo>\n        </ddm.item>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something different</ddm.linkTo>\n        </ddm.item>\n      </dd.menu>\n    </BsDropdown>\n    ```\n  \n    It has all the functionality of a `Components.Button` with additional dropdown support.\n  \n    ### Split button dropdowns\n  \n    To have a regular button with a dropdown button as in http://getbootstrap.com/components/#btn-dropdowns-split, use a\n    `Components.Button` component and a `Components.DropdownButton`:\n  \n    ```hbs\n    <BsDropdown as |dd|>\n      <BsButton>Dropdown</BsButton>\n      <dd.button>Dropdown <span class=\"caret\"></span></dd.button>\n      <dd.menu as |ddm|>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something</ddm.linkTo>\n        </ddm.item>\n        <ddm.item>\n          <ddm.linkTo @route=\"index\">Something different</ddm.linkTo>\n        </ddm.item>\n      </dd.menu>\n    </BsDropdown>\n    ```\n  \n    ### Dropup style\n  \n    Set the `direction` property to \"up\" to switch to a \"dropup\" style:\n  \n    ```hbs\n    <BsDropdown @direction=\"up\" as |dd|>\n      ...\n    </BsDropdown>\n    ```\n  \n    ### Open, close or toggle the dropdown programmatically\n  \n    If you wanted to control when the dropdown opens and closes programmatically, the `bs-dropdown` component yields the\n    `openDropdown`, `closeDropdown` and `toggleDropdown` actions which you can then pass to your own handlers. For example:\n  \n    ```hbs\n    <BsDropdown @closeOnMenuClick={{false}} as |dd|>\n      <BsButton>Dropdown</BsButton>\n      <dd.button>Dropdown <span class=\"caret\"></span></dd.button>\n      <dd.menu as |ddm|>\n        {{#each this.items as |item|}}\n          <ddm.item>\n            <a href {{on \"click\" (fn this.changeItems item dd.closeDropdown)}}>\n              {{item.text}}\n            </a>\n          </ddm.item>\n        {{/each}}\n      </dd.menu>\n    </BsDropdown>\n    ```\n  \n    Then in your controller or component, optionally close the dropdown:\n  \n    ```js\n    ...\n    actions: {\n      handleDropdownClicked(item, closeDropdown) {\n        if(item.isTheRightOne) {\n          this.chosenItems.pushObject(item);\n          closeDropdown();\n        } else {\n          this.set('item', this.getRandomItems());\n        }\n      },\n    }\n    ```\n  \n  \n    ### Bootstrap 3/4 Notes\n  \n    If you need to use dropdowns in a [nav](Components.Nav.html), use the `bs-nav.dropdown`\n    contextual component rather than a standalone dropdown to ensure the correct styling\n    regardless of your Bootstrap version.\n  \n    If you use the [dropdown divider](Components.DropdownMenuDivider), you don't have to worry\n    about differences in the markup between versions.\n  \n    Be sure to use the [dropdown menu link-to](Component.DropdownMenuLinkTo), for in-application\n    links as dropdown menu items. This is essential for proper styling regardless of Bootstrap\n    version and will also provide automatic `active` highlighting on dropdown menu items. If you\n    wish to have a dropdown menu item refer to an external link, be sure to apply the `dropdown-item`\n    class to the `<a>` tag for Bootstrap 4 compatibility.\n  \n    The dropdown menu will be positioned using the `popper.js` library, just as the original Bootstrap\n    version does. This also allows you to set `renderInPlace=false` on the menu component to render it in a wormhole,\n    which you might want to do if you experience clipping issues by an outer `overflow: hidden` element.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Dropdown\n    @namespace Components\n    @extends Component\n    @public\n  s*/\n  let Dropdown = _exports.default = (_class = class Dropdown extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * This property reflects the state of the dropdown, whether it is open or closed.\n       *\n       * @property isOpen\n       * @default false\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"isOpen\", _descriptor, this);\n      /**\n       * @property toggleElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"toggleElement\", _descriptor2, this);\n      /**\n       * The DOM element of the `.dropdown-menu` element\n       * @type object\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"menuElement\", _descriptor3, this);\n    }\n    /**\n     * The tag name used for the dropdown element.\n     *\n     * @property htmlTag\n     * @default 'div'\n     * @type {string}\n     * @public\n     */\n    get htmlTag() {\n      return this.args.htmlTag ?? 'div';\n    }\n    /**\n     * By default, clicking on an open dropdown menu will close it. Set this property to false for the menu to stay open.\n     *\n     * @property closeOnMenuClick\n     * @default true\n     * @type boolean\n     * @public\n     */\n    get closeOnMenuClick() {\n      return this.args.closeOnMenuClick ?? true;\n    }\n\n    /**\n     * By default, the dropdown menu will expand downwards. Other options include, 'up', 'left' and 'right'\n     *\n     * @property direction\n     * @type string\n     * @default 'down'\n     * @public\n     */\n    get direction() {\n      return this.args.direction ?? 'down';\n    }\n\n    /**\n     * Indicates the dropdown is being used as a navigation item dropdown.\n     *\n     * @property inNav\n     * @type boolean\n     * @default false\n     * @private\n     */\n\n    /**\n     * A computed property to generate the suiting class for the dropdown container, either\n     *\n     * - \"dropdown\"\n     * - \"dropup\"\n     * - \"dropstart\" (BS5) or \"dropleft\" (BS4)\n     * - \"dropend\" (BS5) or \"dropright\" (BS4)\n     *\n     * @property containerClass\n     * @type string\n     * @readonly\n     * @private\n     */\n    get containerClass() {\n      {\n        if (this.direction === 'left') {\n          return 'dropstart';\n        } else if (this.direction === 'right') {\n          return 'dropend';\n        }\n      }\n      return `drop${this.direction}`;\n    }\n    /**\n     * Action is called when dropdown is about to be shown\n     *\n     * @event onShow\n     * @param {*} value\n     * @public\n     */\n\n    /**\n     * Action is called when dropdown is about to be hidden\n     * Returning `false` will block closing the dropdown\n     *\n     * @event onHide\n     * @param {*} value\n     * @public\n     */\n\n    toggleDropdown() {\n      if (this.isOpen) {\n        this.closeDropdown();\n      } else {\n        this.openDropdown();\n      }\n    }\n    openDropdown() {\n      this.isOpen = true;\n      this.args.onShow?.();\n    }\n    closeDropdown() {\n      if (this.args.onHide?.() === false) return;\n\n      // When closing the dropdown immediately, any click event from dropdown items will be discarded.\n      // By deferring the close action to the next render cycle, we ensure that no events get lost.\n      (0, _runloop.next)(this, () => {\n        this.isOpen = false;\n      });\n    }\n\n    /**\n     * Handler for click events to close the dropdown\n     *\n     * @method closeOnClickHandler\n     * @param e\n     * @protected\n     */\n    closeHandler(e) {\n      let {\n        target\n      } = e;\n      let {\n        toggleElement,\n        menuElement\n      } = this;\n      if (!this.isDestroyed && (e.type === 'keyup' && e.which === TAB_KEYCODE && menuElement && !menuElement.contains(target) || e.type === 'click' && toggleElement && !toggleElement.contains(target) && (menuElement && !menuElement.contains(target) || this.closeOnMenuClick))) {\n        this.closeDropdown();\n      }\n    }\n    handleKeyEvent(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (['input', 'textarea'].includes(event.target.tagName.toLowerCase()) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || this.menuElement.contains(event.target)) : !SUPPORTED_KEYCODES.includes(event.which)) {\n        return;\n      }\n      event.preventDefault();\n      event.stopPropagation();\n      if (!this.isOpen) {\n        this.openDropdown();\n        return;\n      } else if (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {\n        this.closeDropdown();\n        this.toggleElement.focus();\n        return;\n      }\n      let items = [].slice.call(this.menuElement.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)'));\n      if (items.length === 0) {\n        return;\n      }\n      let index = items.indexOf(event.target);\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n      if (index < 0) {\n        index = 0;\n      }\n      items[index].focus();\n    }\n    registerChildElement(element, [type]) {\n      (false && !(type === 'toggle' || type === 'menu') && (0, _debug.assert)(`Unknown child element type \"${type}\"`, type === 'toggle' || type === 'menu'));\n      (false && !(element instanceof HTMLElement) && (0, _debug.assert)(`Registered ${type} element must be an HTMLElement`, element instanceof HTMLElement));\n      this[`${type}Element`] = element;\n    }\n    unregisterChildElement(element, [type]) {\n      (false && !(type === 'toggle' || type === 'menu') && (0, _debug.assert)(`Unknown child element type \"${type}\"`, type === 'toggle' || type === 'menu'));\n      this[`${type}Element`] = null;\n    }\n\n    /**\n     * @property buttonComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property toggleComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property menuComponent\n     * @type {String}\n     * @private\n     */\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isOpen\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"toggleElement\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"menuElement\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"toggleDropdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleDropdown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openDropdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openDropdown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeDropdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeDropdown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeHandler\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeHandler\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleKeyEvent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleKeyEvent\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"registerChildElement\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"registerChildElement\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"unregisterChildElement\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"unregisterChildElement\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Dropdown);\n});","define(\"ember-bootstrap/components/bs-dropdown/button\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <BsButton\n    {{! cannot pass @block directly because that triggers reserved keyword assertion when compiling the template }}\n    {{! template-lint-disable no-capital-arguments no-args-paths }}\n    @block={{this.args.block}}\n    @onClick={{@onClick}}\n    @active={{@active}}\n    @size={{@size}}\n    @type={{@type}}\n    @outline={{@outline}}\n    aria-expanded={{if @isOpen \"true\" \"false\"}}\n    class=\"dropdown-toggle\"\n    ...attributes\n    {{on \"keydown\" @onKeyDown}}\n    {{did-insert @registerChildElement \"toggle\"}}\n    {{will-destroy @unregisterChildElement \"toggle\"}}\n  >\n    {{yield}}\n  </BsButton>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,\\\"aria-expanded\\\",[52,[30,1],\\\"true\\\",\\\"false\\\"]],[24,0,\\\"dropdown-toggle\\\"],[17,2],[4,[38,2],[\\\"keydown\\\",[30,8]],null],[4,[38,3],[[30,9],\\\"toggle\\\"],null],[4,[38,4],[[30,10],\\\"toggle\\\"],null]],[[\\\"@block\\\",\\\"@onClick\\\",\\\"@active\\\",\\\"@size\\\",\\\"@type\\\",\\\"@outline\\\"],[[30,0,[\\\"args\\\",\\\"block\\\"]],[30,3],[30,4],[30,5],[30,6],[30,7]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[18,11,null],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"@isOpen\\\",\\\"&attrs\\\",\\\"@onClick\\\",\\\"@active\\\",\\\"@size\\\",\\\"@type\\\",\\\"@outline\\\",\\\"@onKeyDown\\\",\\\"@registerChildElement\\\",\\\"@unregisterChildElement\\\",\\\"&default\\\"],[\\\"bs-button\\\",\\\"if\\\",\\\"on\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-dropdown/button.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Button component with that can act as a dropdown toggler.\n  \n   See [Components.Dropdown](Components.Dropdown.html) for examples.\n  \n   @class DropdownButton\n   @namespace Components\n   @extends Components.Button\n   @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-dropdown/menu\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"ember-bootstrap/utils/dom\", \"ember-ref-bucket\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _dom, _emberRefBucket, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"ember-bootstrap/utils/dom\",0,\"ember-ref-bucket\",0,\"@embroider/macros\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @isOpen}}\n    {{#if this._renderInPlace}}\n      <div\n        data-bs-popper\n        class=\"dropdown-menu {{this.alignClass}} show\"\n        tabindex=\"-1\"\n        ...attributes\n        {{popper-tooltip @toggleElement this.popperOptions}}\n        {{did-insert @registerChildElement \"menu\"}}\n        {{will-destroy @unregisterChildElement \"menu\"}}\n        {{create-ref \"menuElement\"}}\n      >\n        {{yield\n          (hash\n            item=(ensure-safe-component (bs-default @itemComponent (component \"bs-dropdown/menu/item\")))\n            link-to=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"dropdown-item\")))\n            linkTo=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"dropdown-item\")))\n            divider=(ensure-safe-component (bs-default @dividerComponent (component \"bs-dropdown/menu/divider\")))\n          )\n        }}\n      </div>\n    {{else}}\n      {{#in-element this.destinationElement insertBefore=null}}\n        <div\n          data-bs-popper\n          class=\"dropdown-menu {{this.alignClass}} show\"\n          tabindex=\"-1\"\n          ...attributes\n          {{popper-tooltip @toggleElement this.popperOptions}}\n          {{did-insert @registerChildElement \"menu\"}}\n          {{will-destroy @unregisterChildElement \"menu\"}}\n          {{create-ref \"menuElement\"}}\n        >\n          {{yield\n            (hash\n              item=(ensure-safe-component (bs-default @itemComponent (component \"bs-dropdown/menu/item\")))\n              link-to=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"dropdown-item\")))\n              linkTo=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"dropdown-item\")))\n              divider=(ensure-safe-component (bs-default @dividerComponent (component \"bs-dropdown/menu/divider\")))\n            )\n          }}\n        </div>\n      {{/in-element}}\n    {{/if}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[41,[30,0,[\\\"_renderInPlace\\\"]],[[[1,\\\"    \\\"],[11,0],[24,\\\"data-bs-popper\\\",\\\"\\\"],[16,0,[29,[\\\"dropdown-menu \\\",[30,0,[\\\"alignClass\\\"]],\\\" show\\\"]]],[24,\\\"tabindex\\\",\\\"-1\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[[30,4],\\\"menu\\\"],null],[4,[38,4],[[30,5],\\\"menu\\\"],null],[4,[38,5],[\\\"menuElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n      \\\"],[18,9,[[28,[37,7],null,[[\\\"item\\\",\\\"link-to\\\",\\\"linkTo\\\",\\\"divider\\\"],[[28,[37,8],[[28,[37,9],[[30,6],[50,\\\"bs-dropdown/menu/item\\\",0,null,null]],null]],null],[28,[37,8],[[28,[37,9],[[30,7],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"dropdown-item\\\"]]]],null]],null],[28,[37,8],[[28,[37,9],[[30,7],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"dropdown-item\\\"]]]],null]],null],[28,[37,8],[[28,[37,9],[[30,8],[50,\\\"bs-dropdown/menu/divider\\\",0,null,null]],null]],null]]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[40,[[[1,\\\"      \\\"],[11,0],[24,\\\"data-bs-popper\\\",\\\"\\\"],[16,0,[29,[\\\"dropdown-menu \\\",[30,0,[\\\"alignClass\\\"]],\\\" show\\\"]]],[24,\\\"tabindex\\\",\\\"-1\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[[30,4],\\\"menu\\\"],null],[4,[38,4],[[30,5],\\\"menu\\\"],null],[4,[38,5],[\\\"menuElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n        \\\"],[18,9,[[28,[37,7],null,[[\\\"item\\\",\\\"link-to\\\",\\\"linkTo\\\",\\\"divider\\\"],[[28,[37,8],[[28,[37,9],[[30,6],[50,\\\"bs-dropdown/menu/item\\\",0,null,null]],null]],null],[28,[37,8],[[28,[37,9],[[30,7],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"dropdown-item\\\"]]]],null]],null],[28,[37,8],[[28,[37,9],[[30,7],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"dropdown-item\\\"]]]],null]],null],[28,[37,8],[[28,[37,9],[[30,8],[50,\\\"bs-dropdown/menu/divider\\\",0,null,null]],null]],null]]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],\\\"%cursor:0%\\\",[28,[37,12],[[30,0,[\\\"destinationElement\\\"]]],null],null]],[]]]],[]],null]],[\\\"@isOpen\\\",\\\"&attrs\\\",\\\"@toggleElement\\\",\\\"@registerChildElement\\\",\\\"@unregisterChildElement\\\",\\\"@itemComponent\\\",\\\"@linkToComponent\\\",\\\"@dividerComponent\\\",\\\"&default\\\"],[\\\"if\\\",\\\"div\\\",\\\"popper-tooltip\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"create-ref\\\",\\\"yield\\\",\\\"hash\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\",\\\"in-element\\\",\\\"-in-el-null\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-dropdown/menu.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Component for the dropdown menu.\n  \n   See [Components.Dropdown](Components.Dropdown.html) for examples.\n  \n   @class DropdownMenu\n   @namespace Components\n   @extends Component\n   @public\n   */\n  let DropdownMenu = _exports.default = (_dec = (0, _emberRefBucket.ref)('menuElement'), _class = class DropdownMenu extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property _element\n       * @type null | HTMLElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"menuElement\", _descriptor, this);\n      _defineProperty(this, \"flip\", true);\n    }\n    /**\n     * Alignment of the menu, either \"left\" or \"right\"\n     *\n     * @property align\n     * @type string\n     * @default left\n     * @public\n     */\n    get align() {\n      return this.args.align ?? 'left';\n    }\n\n    /**\n     * @property direction\n     * @default 'down'\n     * @type string\n     * @private\n     */\n    get direction() {\n      return this.args.direction ?? 'down';\n    }\n\n    /**\n     * By default, the menu is rendered in the same place as the dropdown. If you experience clipping\n     * issues, you can set this to false to render the menu in a wormhole at the top of the DOM.\n     *\n     * @property renderInPlace\n     * @type boolean\n     * @default true\n     * @public\n     */\n    get renderInPlace() {\n      return this.args.renderInPlace ?? true;\n    }\n\n    /**\n     * @property inNav\n     * @type {boolean}\n     * @private\n     */\n    get inNav() {\n      return this.args.inNav ?? false;\n    }\n\n    /**\n     * @property _renderInPlace\n     * @type boolean\n     * @private\n     */\n    get _renderInPlace() {\n      return this.renderInPlace || !this.destinationElement;\n    }\n\n    /**\n     * The wormhole destinationElement\n     *\n     * @property destinationElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    get destinationElement() {\n      return (0, _dom.getDestinationElement)(this);\n    }\n    get alignClass() {\n      if (this.align === 'right') {\n        const alignClass = 'end';\n        return `dropdown-menu-${alignClass}`;\n      }\n      return undefined;\n    }\n    get popperPlacement() {\n      let placement = 'bottom-start';\n      let {\n        direction,\n        align\n      } = this;\n      if (direction === 'up') {\n        placement = 'top-start';\n        if (align === 'right') {\n          placement = 'top-end';\n        }\n      } else if (direction === 'left') {\n        placement = 'left-start';\n      } else if (direction === 'right') {\n        placement = 'right-start';\n      } else if (align === 'right') {\n        placement = 'bottom-end';\n      }\n      return placement;\n    }\n    setFocus() {\n      // when the dropdown menu is rendered in place, focus can stay on the toggle element\n      if (this._renderInPlace) {\n        return;\n      }\n      if (this.menuElement) {\n        this.menuElement.focus();\n      }\n    }\n    get popperOptions() {\n      return {\n        placement: this.popperPlacement,\n        onFirstUpdate: () => this.setFocus(),\n        modifiers: [{\n          name: 'flip',\n          enabled: this.flip\n        }, {\n          name: 'applyStyles',\n          enabled: !this.inNav\n        }]\n      };\n    }\n\n    /**\n     * @property itemComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property linkToComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property dividerComponent\n     * @type {String}\n     * @private\n     */\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"menuElement\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"setFocus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setFocus\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DropdownMenu);\n});","define(\"ember-bootstrap/components/bs-dropdown/menu/divider\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div class=\"dropdown-divider\" ...attributes>\n    {{yield}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"dropdown-divider\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,2,null],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-dropdown/menu/divider.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Component for a dropdown menu divider.\n  \n   See [Components.Dropdown](Components.Dropdown.html) for examples.\n  \n   @class DropdownMenuDivider\n   @namespace Components\n   @extends Component\n   @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-dropdown/menu/item\", [\"exports\", \"@ember/component/template-only\"], function (_exports, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\"eaimeta@70e063a35619d71f\n  /**\n   Component for a dropdown menu item.\n  \n   See [Components.Dropdown](Components.Dropdown.html) for examples.\n  \n   @class DropdownMenuItem\n   @namespace Components\n   @extends Component\n   @public\n   */\n  var _default = _exports.default = (0, _templateOnly.default)();\n});","define(\"ember-bootstrap/components/bs-dropdown/toggle\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <a\n    href=\"#\"\n    class=\"dropdown-toggle {{if @inNav \"nav-link\"}}\"\n    aria-expanded={{this.aria-expanded}}\n    role=\"button\"\n    ...attributes\n    {{on \"keydown\" this.handleKeyDown}}\n    {{on \"click\" this.handleClick}}\n    {{did-insert @registerChildElement \"toggle\"}}\n    {{will-destroy @unregisterChildElement \"toggle\"}}\n  >\n    {{yield}}\n  </a>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,3],[24,6,\\\"#\\\"],[16,0,[29,[\\\"dropdown-toggle \\\",[52,[30,1],\\\"nav-link\\\"]]]],[16,\\\"aria-expanded\\\",[30,0,[\\\"aria-expanded\\\"]]],[24,\\\"role\\\",\\\"button\\\"],[17,2],[4,[38,2],[\\\"keydown\\\",[30,0,[\\\"handleKeyDown\\\"]]],null],[4,[38,2],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[4,[38,3],[[30,3],\\\"toggle\\\"],null],[4,[38,4],[[30,4],\\\"toggle\\\"],null],[12],[1,\\\"\\\\n  \\\"],[18,5,null],[1,\\\"\\\\n\\\"],[13]],[\\\"@inNav\\\",\\\"&attrs\\\",\\\"@registerChildElement\\\",\\\"@unregisterChildElement\\\",\\\"&default\\\"],[\\\"a\\\",\\\"if\\\",\\\"on\\\",\\\"did-insert\\\",\\\"will-destroy\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-dropdown/toggle.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Anchor element that triggers the parent dropdown to open.\n   Use [Components.DropdownButton](Components.DropdownButton.html) if you want a button instead of an anchor tag.\n  \n   See [Components.Dropdown](Components.Dropdown.html) for examples.\n  \n   @class DropdownToggle\n   @namespace Components\n   @extends Component\n   @publicø\n   */\n  let DropdownToggle = _exports.default = (_class = class DropdownToggle extends _component2.default {\n    /**\n     * @property inNav\n     * @type {boolean}\n     * @private\n     */\n    get inNav() {\n      return this.args.inNav ?? false;\n    }\n    get 'aria-expanded'() {\n      return this.args.isOpen ? 'true' : 'false';\n    }\n\n    /**\n     * When clicking the toggle this action is called.\n     *\n     * @event onClick\n     * @param {*} value\n     * @public\n     */\n\n    handleClick(e) {\n      e.preventDefault();\n      this.args.onClick?.();\n    }\n    handleKeyDown(e) {\n      this.args.onKeyDown(e);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleKeyDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleKeyDown\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DropdownToggle);\n});","define(\"ember-bootstrap/components/bs-form\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/debug\", \"@ember/utils\", \"@ember/runloop\", \"ember-bootstrap/utils/decorators/arg\", \"@glimmer/tracking\", \"ember-ref-bucket\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _debug, _utils, _runloop, _arg, _tracking, _emberRefBucket, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/debug\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"@embroider/macros\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@glimmer/tracking\",0,\"ember-ref-bucket\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{!-- template-lint-disable no-invalid-interactive --}}\n  <form\n    novalidate={{this.hasValidator}}\n    class={{this.layoutClass}}\n    ...attributes\n    {{on \"keypress\" this.handleKeyPress}}\n    {{on \"submit\" this.handleSubmit}}\n    {{create-ref \"formElement\"}}\n  >\n    {{yield\n      (hash\n        element=(component (ensure-safe-component (bs-default @elementComponent (component \"bs-form/element\")))\n          model=this.model\n          formLayout=this.formLayout\n          horizontalLabelGridClass=this.horizontalLabelGridClass\n          showAllValidations=this.showAllValidations\n          _disabled=@disabled\n          _readonly=@readonly\n          onChange=this.elementChanged\n          _onChange=this.resetSubmissionState\n        )\n        isSubmitting=this.isSubmitting\n        isSubmitted=this.isSubmitted\n        isRejected=this.isRejected\n        model=this.model\n        resetSubmissionState=this.resetSubmissionState\n        submit=this.doSubmit\n        submitButton=(component (ensure-safe-component (bs-default @submitButtonComponent (component \"bs-button\")))\n          type=\"primary\"\n          state=this.submitButtonState\n          _disabled=this.isSubmitting\n          attrTypePrivateWorkaround=\"submit\"\n        )\n      )\n    }}\n  </form>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"form\\\"],[16,\\\"novalidate\\\",[30,0,[\\\"hasValidator\\\"]]],[16,0,[30,0,[\\\"layoutClass\\\"]]],[17,1],[4,[38,1],[\\\"keypress\\\",[30,0,[\\\"handleKeyPress\\\"]]],null],[4,[38,1],[\\\"submit\\\",[30,0,[\\\"handleSubmit\\\"]]],null],[4,[38,2],[\\\"formElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n  \\\"],[18,6,[[28,[37,4],null,[[\\\"element\\\",\\\"isSubmitting\\\",\\\"isSubmitted\\\",\\\"isRejected\\\",\\\"model\\\",\\\"resetSubmissionState\\\",\\\"submit\\\",\\\"submitButton\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,2],[50,\\\"bs-form/element\\\",0,null,null]],null]],null],0,null,[[\\\"model\\\",\\\"formLayout\\\",\\\"horizontalLabelGridClass\\\",\\\"showAllValidations\\\",\\\"_disabled\\\",\\\"_readonly\\\",\\\"onChange\\\",\\\"_onChange\\\"],[[30,0,[\\\"model\\\"]],[30,0,[\\\"formLayout\\\"]],[30,0,[\\\"horizontalLabelGridClass\\\"]],[30,0,[\\\"showAllValidations\\\"]],[30,3],[30,4],[30,0,[\\\"elementChanged\\\"]],[30,0,[\\\"resetSubmissionState\\\"]]]]],[30,0,[\\\"isSubmitting\\\"]],[30,0,[\\\"isSubmitted\\\"]],[30,0,[\\\"isRejected\\\"]],[30,0,[\\\"model\\\"]],[30,0,[\\\"resetSubmissionState\\\"]],[30,0,[\\\"doSubmit\\\"]],[50,[28,[37,6],[[28,[37,7],[[30,5],[50,\\\"bs-button\\\",0,null,null]],null]],null],0,null,[[\\\"type\\\",\\\"state\\\",\\\"_disabled\\\",\\\"attrTypePrivateWorkaround\\\"],[\\\"primary\\\",[30,0,[\\\"submitButtonState\\\"]],[30,0,[\\\"isSubmitting\\\"]],\\\"submit\\\"]]]]]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@elementComponent\\\",\\\"@disabled\\\",\\\"@readonly\\\",\\\"@submitButtonComponent\\\",\\\"&default\\\"],[\\\"form\\\",\\\"on\\\",\\\"create-ref\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Render a form with the appropriate Bootstrap layout class (see `formLayout`).\n    Allows setting a `model` that nested `Components.FormElement`s can access, and that can provide form validation (see below)\n  \n    You can use whatever markup you like within the form.\n    However, to benefit from features such as automatic form markup, validations and validation markup, use `Components.FormElement`\n    as nested components. See below for an example.\n  \n    ### Submitting the form\n  \n    The form yields a `submitButton` component, which is a preconfigured `<BsButton>` with `@type=\"primary\"` and `type=\"submit\"`.\n    The button is disabled while a form submission is pending. Additionally, the button state is bound to the form submission state.\n  \n    ```hbs\n    <BsForm as |form|>\n      <form.submitButton>Submit</form.submitButton>\n    </BsForm>\n    ```\n  \n    When the form is submitted (e.g. by clicking the submit button), the event will be intercepted and the `onSubmit` action\n    will be sent to the controller or parent component.\n    In case the form supports validation (see \"Form validation\" below), the `onBefore` action is called (which allows you to\n    do e.g. model data normalization), then the available validation rules are evaluated, and if those fail, the `onInvalid`\n    action is sent instead of `onSubmit`.\n  \n    ### Use with Components.FormElement\n  \n    When using `Components.FormElement`s with their `property` set to property names of the form's validation enabled\n    `model`, you gain some additional powerful features:\n    * the appropriate Bootstrap markup for the given `formLayout` and the form element's `controlType` is automatically generated\n    * markup for validation states and error messages is generated based on the model's validation (if available), when submitting the form\n    with an invalid validation, or when focusing out of invalid inputs\n  \n    ```handlebars\n    <BsForm @formLayout=\"horizontal\" @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @controlType=\"email\" @label=\"Email\" @placeholder=\"Email\" @property=\"email\" />\n      <form.element @controlType=\"password\" @label=\"Password\" @placeholder=\"Password\" @property=\"password\" />\n      <form.element @controlType=\"checkbox\" @label=\"Remember me\" @property=\"rememberMe\" />\n      <form.submitButton>Submit</form.submitButton>\n    </BsForm>\n    ```\n  \n    See the [Components.FormElement](Components.FormElement.html) API docs for further information.\n  \n    ### Form validation\n  \n    All version of ember-bootstrap beginning from 0.7.0 do not come with built-in support for validation engines anymore.\n    Instead, support is added usually by additional Ember addons, for example:\n  \n    * [ember-bootstrap-validations](https://github.com/kaliber5/ember-bootstrap-validations): adds support for [ember-validations](https://github.com/DockYard/ember-validations)\n    * [ember-bootstrap-cp-validations](https://github.com/offirgolan/ember-bootstrap-cp-validations): adds support for [ember-cp-validations](https://github.com/offirgolan/ember-cp-validations)\n    * [ember-bootstrap-changeset-validations](https://github.com/kaliber5/ember-bootstrap-changeset-validations): adds support for [ember-changeset](https://github.com/poteto/ember-changeset)\n  \n    To add your own validation support, you have to:\n  \n    * extend this component, setting `hasValidator` to true if validations are available (by means of a computed property for example), and implementing the `validate` method\n    * extend the [Components.FormElement](Components.FormElement.html) component and implement the `setupValidations` hook or simply override the `errors` property to add the validation error messages to be displayed\n  \n    When validation fails, the appropriate Bootstrap markup is added automatically, i.e. the error classes are applied and\n    the validation messages are shown for each form element. In case the validation library supports it, also warning messages\n    are shown. See the [Components.FormElement](Components.FormElement.html) documentation for further details.\n  \n    See the above-mentioned addons for examples.\n  \n    The `novalidate` HTML attribute is set by default for forms that have validation.\n  \n    ### Submission state\n  \n    A `isSubmitting` property is yielded, which is `true` after submit has been triggered and before the Promise returned\n    by `onSubmit` is fulfilled. It could be used to show a loading spinner instead of the form while it's submitting for example:\n  \n    ```hbs\n    <BsForm @onSubmit={{this.save}} as |form|>\n      {{#if form.isSubmitting}}\n        <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n        Logging in...\n      {{else}}\n        <form.element @property=\"email\" @label=\"email\" />\n        <form.element @property=\"password\" @label=\"password\" @controlType=\"password\" />\n        <form.submitButton>Login</form.submitButton>\n      {{/if}}\n    </BsForm>\n    ```\n  \n    Additionaly `isSubmitted` and `isRejected` properties are yielded. `isSubmitted` is `true` if last submission was successful.\n    `isRejected` is `true` if last submission was rejected due to validation errors or by an action bound to `onSubmit` event, returning a rejected promise.\n    It could be used for visual feedback about last submission:\n  \n    ```hbs\n    <BsForm @onSubmit={{this.save}} as |form|>\n      <form.submitButton @type={{if form.isRejected \"danger\" \"primary\"}}>\n        Save\n      </form.submitButton>\n    </BsForm>\n    ```\n  \n    The submission state is reset as soon as any value of a form element changes. Additionally, it can be reset programmatically by\n    calling the yielded `resetSubmissionState` function.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Form\n    @namespace Components\n    @extends Ember.Component\n    @public\n  */\n  let Form = _exports.default = (_dec = (0, _emberRefBucket.ref)('formElement'), _class = class Form extends _component2.default {\n    /**\n     * Bootstrap form class name (computed)\n     *\n     * @property layoutClass\n     * @type string\n     * @readonly\n     * @protected\n     *\n     */\n    get layoutClass() {\n      let layout = this.formLayout;\n      {\n        return null;\n      }\n    }\n\n    /**\n     * Set a model that this form should represent. This serves several purposes:\n     *\n     * * child `Components.FormElement`s can access and bind to this model by their `property`\n     * * when the model supports validation by using the [ember-validations](https://github.com/dockyard/ember-validations) mixin,\n     * child `Components.FormElement`s will look at the validation information of their `property` and render their form group accordingly.\n     * Moreover, the form's `submit` event handler will validate the model and deny submitting if the model is not validated successfully.\n     *\n     * `<BsForm>` yields the form's model as `form` property:\n     *\n     * ```hbs\n     * <BsForm @model={{this.formModel}} as |form|>\n     *   {{! this.formModel === form.model }}\n     * </BsForm>\n     * ```\n     *\n     * @property model\n     * @type object\n     * @public\n     */\n    get model() {\n      return this.args.model ?? {};\n    }\n\n    /**\n     * Set the layout of the form to either \"vertical\", \"horizontal\" or \"inline\". See http://getbootstrap.com/css/#forms-inline and http://getbootstrap.com/css/#forms-horizontal\n     *\n     * @property formLayout\n     * @type string\n     * @public\n     */\n\n    /**\n     * @property elementComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property submitButtonComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * `isSubmitting` is `true` after `submit` event has been triggered and until Promise returned by `onSubmit` is\n     * fulfilled. If `validate` returns a Promise that one is also taken into consideration.\n     *\n     * If multiple concurrent submit events are fired, it stays `true` until all submit events have been fulfilled.\n     *\n     * @property isSubmitting\n     * @type {Boolean}\n     * @readonly\n     * @private\n     */\n    get isSubmitting() {\n      return this.pendingSubmissions > 0;\n    }\n\n    /**\n     * `isSubmitted` is `true` if last submission was successful.\n     * A change to any form element resets its value to `false`.\n     *\n     * If not using `Components.FormElement`, `resetSubmissionState` action must be triggered on each change to reset\n     * form's submission state.\n     *\n     * @property isSubmitted\n     * @type {Boolean}\n     * @private\n     */\n\n    /**\n     * State of the form expressed as state values expected by `<BsButton>`.\n     *\n     * @property submitButtonState\n     * @type {String}\n     * @private\n     */\n    get submitButtonState() {\n      if (this.isSubmitting) {\n        return 'pending';\n      }\n      if (this.isSubmitted) {\n        return 'fulfilled';\n      }\n      if (this.isRejected) {\n        return 'rejected';\n      }\n      return 'default';\n    }\n\n    /**\n     * Count of pending submissions.\n     *\n     * @property pendingSubmissions\n     * @type {Integer}\n     * @private\n     */\n\n    /**\n     * If true, after successful validation and upon submitting the form, all current element validations will be hidden.\n     * If the form remains visible, the user would have to focus out of elements of submit the form again for the\n     * validations to show up again, as if a fresh new form component had been rendered.\n     *\n     * @property hideValidationsOnSubmit\n     * @type {Boolean}\n     * @default false\n     * @public\n     */\n\n    /**\n     * If set to true the `readonly` property of all yielded form elements will be set, making their form controls read-only.\n     *\n     * @property readonly\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * If set to true the `disabled` property of all yielded form elements will be set, making their form controls disabled.\n     *\n     * @property disabled\n     * @type boolean\n     * @default false\n     * @public\n     */\n\n    /**\n     * Validate hook which will return a promise that will either resolve if the model is valid\n     * or reject if it's not. This should be overridden to add validation support.\n     *\n     * @method validate\n     * @param {Object} model\n     * @param {HTMLFormElement} form\n     * @return {Promise}\n     * @public\n     */\n    validate(model, form) {} // eslint-disable-line no-unused-vars\n\n    /**\n     * @property _showAllValidations\n     * @type boolean\n     * @default undefined\n     * @private\n     */\n\n    get showAllValidations() {\n      return this.showValidations ?? this._showAllValidations;\n    }\n    set showAllValidations(showAllValidations) {\n      this._showAllValidations = showAllValidations;\n    }\n\n    /**\n     * Controls visibility of validation errors. If `null` (default) validation errors are shown after user\n     * interactions like form submission, focus out event of input fields etc. If `true` all validation errors are shown\n     * immediately independently of user interactions. If `false` validation errors are not shown in any case (but\n     * prevent form submission if form is invalid).\n     *\n     * @property showValidations\n     * @type Boolean|null\n     * @default null\n     * @public\n     */\n\n    /**\n     * Action is called before the form is validated (if possible) and submitted.\n     *\n     * @event onBefore\n     * @param { Object } model  The form's `model`\n     * @public\n     */\n\n    /**\n     * Action is called when submit has been triggered and the model has passed all validations (if present).\n     *\n     * @event onSubmit\n     * @param { Object } model  The form's `model`\n     * @param { Object } result The returned result from the validate method, if validation is available\n     * @public\n     */\n\n    /**\n     * Action is called when validation of the model has failed.\n     *\n     * @event onInvalid\n     * @param { Object } model  The form's `model`\n     * @param { Object } error\n     * @public\n     */\n\n    /**\n     * Submit handler that will send the default action (\"action\") to the controller when submitting the form.\n     *\n     * If there is a supplied `model` that supports validation (`hasValidator`) the model will be validated before, and\n     * only if validation is successful the default action will be sent. Otherwise, an \"invalid\" action will be sent, and\n     * all the `showValidation` property of all child `Components.FormElement`s will be set to true, so error state and\n     * messages will be shown automatically.\n     *\n     * @method submit\n     * @private\n     */\n    submitHandler(e, throwValidationErrors = true) {\n      if (e) {\n        e.preventDefault();\n      }\n      if (this.preventConcurrency && this.isSubmitting) {\n        return Promise.resolve();\n      }\n      let model = this.model;\n      this.pendingSubmissions++;\n      this.args.onBefore?.(model);\n      return Promise.resolve().then(() => {\n        return this.hasValidator ? this.validate(model, this._element) : null;\n      }).then(record => {\n        if (this.args.hideValidationsOnSubmit === true) {\n          this.showAllValidations = false;\n        }\n        return Promise.resolve().then(() => {\n          return this.args.onSubmit?.(model, record);\n        }).then(() => {\n          if (this.isDestroyed) {\n            return;\n          }\n          this.isSubmitted = true;\n        }).catch(error => {\n          if (this.isDestroyed) {\n            return;\n          }\n          this.isRejected = true;\n          throw error;\n        }).finally(() => {\n          if (this.isDestroyed) {\n            return;\n          }\n          this.pendingSubmissions--;\n\n          // reset forced hiding of validations\n          if (this.showAllValidations === false) {\n            (0, _runloop.next)(() => this.showAllValidations = undefined);\n          }\n        });\n      }, error => {\n        return Promise.resolve().then(() => {\n          return this.args.onInvalid?.(model, error);\n        }).finally(() => {\n          if (this.isDestroyed) {\n            return;\n          }\n          this.showAllValidations = true;\n          this.isRejected = true;\n          this.pendingSubmissions = this.pendingSubmissions - 1;\n          if (throwValidationErrors) {\n            throw error;\n          }\n        });\n      });\n    }\n    handleSubmit(event) {\n      this.submitHandler(event, false);\n    }\n    handleKeyPress(event) {\n      let code = event.keyCode || event.which;\n      if (code === 13 && this.args.submitOnEnter) {\n        this.submitHandler();\n      }\n    }\n    constructor() {\n      super(...arguments);\n      /**\n       * @property _element\n       * @type null | HTMLFormElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      _initializerDefineProperty(this, \"formLayout\", _descriptor2, this);\n      /**\n       * Check if validating the model is supported. This needs to be implemented by another addon.\n       *\n       * @property hasValidator\n       * @type boolean\n       * @readonly\n       * @protected\n       */\n      /**\n       * The Bootstrap grid classes for form labels. This is used by the `Components.FormElement` class as a default for the\n       * whole form.\n       *\n       * @property horizontalLabelGridClass\n       * @type string\n       * @default 'col-md-4'\n       * @public\n       */\n      _initializerDefineProperty(this, \"horizontalLabelGridClass\", _descriptor3, this);\n      _initializerDefineProperty(this, \"isSubmitted\", _descriptor4, this);\n      /**\n       * `isRejected` is `true` if last submission was rejected.\n       * A submission is considered as rejected if form is invalid as well as if `onSubmit` rejects.\n       * A change to any form element resets its value to `false`.\n       *\n       * If not using `Components.FormElement`, `resetSubmissionState` action must be triggered on each change to reset\n       * form's submission state.\n       *\n       * @property isRejected\n       * @type {Boolean}\n       * @private\n       */\n      _initializerDefineProperty(this, \"isRejected\", _descriptor5, this);\n      _initializerDefineProperty(this, \"pendingSubmissions\", _descriptor6, this);\n      /**\n       * If set to true pressing enter will submit the form, even if no submit button is present\n       *\n       * @property submitOnEnter\n       * @type boolean\n       * @default false\n       * @public\n       */\n      /**\n       * Controls if `onSubmit` action is fired concurrently. If `true` submitting form multiple\n       * times will not trigger `onSubmit` action if a Promise returned by previous submission is\n       * not settled yet.\n       *\n       * Dropping a submission also prevents rerunning validation and `onBefore` hook.\n       *\n       * @property preventConcurrency\n       * @type Boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"preventConcurrency\", _descriptor7, this);\n      _initializerDefineProperty(this, \"_showAllValidations\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showValidations\", _descriptor9, this);\n      let formLayout = this.formLayout;\n      (false && !(['vertical', 'horizontal', 'inline'].indexOf(formLayout) >= 0) && (0, _debug.assert)(`Invalid formLayout property given: ${formLayout}`, ['vertical', 'horizontal', 'inline'].indexOf(formLayout) >= 0));\n    }\n    elementChanged(value, model, property) {\n      (false && !((0, _utils.isPresent)(model) && (0, _utils.isPresent)(property)) && (0, _debug.assert)(\"You cannot use the form element's default onChange action for form elements if not using a model or setting the value directly on a form element. You must add your own onChange action to the form element in this case!\", (0, _utils.isPresent)(model) && (0, _utils.isPresent)(property)));\n      if (typeof model.set === 'function') {\n        model.set(property, value);\n      } else {\n        (0, _object.set)(model, property, value);\n      }\n    }\n    resetSubmissionState() {\n      this.isSubmitted = false;\n      this.isRejected = false;\n    }\n    doSubmit() {\n      return this.submitHandler();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"model\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"model\"), _class.prototype), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"formLayout\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'vertical';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"horizontalLabelGridClass\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'col-md-4';\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"isSubmitted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isRejected\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"pendingSubmissions\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 0;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"preventConcurrency\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"_showAllValidations\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return undefined;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showValidations\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"handleSubmit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleSubmit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleKeyPress\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleKeyPress\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"elementChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"elementChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resetSubmissionState\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetSubmissionState\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"doSubmit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doSubmit\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Form);\n});","define(\"ember-bootstrap/components/bs-form/element\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/debug\", \"@ember/utils\", \"@ember/array\", \"@ember/application\", \"@ember/object/internals\", \"ember-ref-bucket\", \"ember-bootstrap/components/bs-form/element/control/input\", \"ember-bootstrap/components/bs-form/element/control/checkbox\", \"ember-bootstrap/components/bs-form/element/control/textarea\", \"ember-bootstrap/components/bs-form/element/control/radio\", \"ember-bootstrap/components/bs-form/element/control/switch\", \"ember-bootstrap/utils/decorators/arg\", \"tracked-toolbox\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _debug, _utils, _array, _application, _internals, _emberRefBucket, _input, _checkbox, _textarea, _radio, _switch, _arg, _trackedToolbox, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/debug\",0,\"@ember/utils\",0,\"@ember/array\",0,\"@ember/application\",0,\"@ember/object/internals\",0,\"ember-ref-bucket\",0,\"ember-bootstrap/components/bs-form/element/control/input\",0,\"ember-bootstrap/components/bs-form/element/control/checkbox\",0,\"ember-bootstrap/components/bs-form/element/control/textarea\",0,\"ember-bootstrap/components/bs-form/element/control/radio\",0,\"ember-bootstrap/components/bs-form/element/control/switch\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"tracked-toolbox\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{!-- template-lint-disable no-invalid-interactive --}}\n  <div\n    class=\"{{if (macroCondition (macroGetOwnConfig \"isNotBS5\")) \"form-group\"}} {{if (macroCondition (macroGetOwnConfig \"isBS5\")) (if (bs-eq @formLayout \"vertical\") \"mb-3\")}} {{if (bs-eq @formLayout \"horizontal\") (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"row mb-3\" \"row\")}}\"\n    ...attributes\n    {{create-ref \"mainNode\"}}\n    {{on \"focusout\" this.showValidationOnHandler}}\n    {{on \"change\" this.showValidationOnHandler}}\n    {{on \"input\" this.showValidationOnHandler}}\n    {{did-update this.handleShowAllValidationsChange this.showAllValidations}}\n  >\n    {{#component\n      (ensure-safe-component\n        (bs-default\n          @layoutComponent\n          (if\n            (bs-contains (array \"checkbox\" \"switch\") this.controlType)\n            (if\n              (bs-eq @formLayout \"inline\")\n              (component \"bs-form/element/layout/inline/checkbox\" controlType=this.controlType)\n              (if\n                (bs-eq @formLayout \"horizontal\")\n                (component \"bs-form/element/layout/horizontal/checkbox\" controlType=this.controlType)\n                (component \"bs-form/element/layout/vertical/checkbox\" controlType=this.controlType)\n              )\n            )\n            (if\n              (bs-eq @formLayout \"inline\")\n              (component \"bs-form/element/layout/inline\")\n              (if\n                (bs-eq @formLayout \"horizontal\")\n                (component \"bs-form/element/layout/horizontal\")\n                (component \"bs-form/element/layout/vertical\")\n              )\n            )\n          )\n        )\n      )\n      hasLabel=(if @label true false)\n      formElementId=this.formElementId\n      horizontalLabelGridClass=@horizontalLabelGridClass\n      errorsComponent=(component (ensure-safe-component (bs-default @errorsComponent (component \"bs-form/element/errors\")))\n        messages=this.validationMessages\n        show=this.showValidationMessages\n        showMultipleErrors=this.showMultipleErrors\n      )\n      feedbackIconComponent=(component (ensure-safe-component (bs-default @feedbackIconComponent (component \"bs-form/element/feedback-icon\")))\n        iconName=@iconName\n        show=this.hasFeedback\n      )\n      labelComponent=(component\n        (ensure-safe-component\n          (bs-default\n            @labelComponent\n            (if\n              (bs-eq this.controlType \"radio\")\n              (component \"bs-form/element/legend\")\n              (component \"bs-form/element/label\")\n            )\n          )\n        )\n        label=@label\n        invisibleLabel=@invisibleLabel\n        formElementId=this.formElementId\n        controlType=this.controlType\n        formLayout=@formLayout\n        size=@size\n      )\n      helpTextComponent=(if @helpText\n        (component (ensure-safe-component (bs-default @helpTextComponent (component \"bs-form/element/help-text\")))\n          text=@helpText\n          id=this.ariaDescribedBy\n        )\n      )\n    }}\n      {{!\n        Ember does not allow to access a variable with `@` in template if its name start with an underscore.\n        `@_disabled` and `@_readonly` are affected by this. As a work-a-round we access them on `this.args`.\n      }}\n      {{!-- template-lint-disable no-args-paths --}}\n      {{#let\n        (component\n          (ensure-safe-component\n            (bs-default\n              @controlComponent\n              this.controlComponent\n            )\n          )\n          value=this.value\n          id=this.formElementId\n          type=this.controlType\n          label=@label\n          disabled=this.args._disabled\n          readonly=this.args._readonly\n          required=@required\n          options=@options\n          optionLabelPath=@optionLabelPath\n          ariaDescribedBy=(if @helpText this.ariaDescribedBy)\n          onChange=this.doChange\n          validationType=this.validation\n          size=@size\n      ) as |Control|}}\n      {{!-- template-lint-enable no-args-paths --}}\n        {{#if (has-block)}}\n          {{yield\n            (hash\n              value=this.value\n              setValue=this.doChange\n              id=this.formElementId\n              validation=this.validation\n              control=Control\n            )\n          }}\n        {{else}}\n          <Control />\n        {{/if}}\n      {{/let}}\n    {{/component}}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[27],\\\" \\\",[52,[28,[37,2],[[30,1],\\\"vertical\\\"],null],\\\"mb-3\\\"],\\\" \\\",[52,[28,[37,2],[[30,1],\\\"horizontal\\\"],null],\\\"row mb-3\\\"]]]],[17,2],[4,[38,3],[\\\"mainNode\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[4,[38,4],[\\\"focusout\\\",[30,0,[\\\"showValidationOnHandler\\\"]]],null],[4,[38,4],[\\\"change\\\",[30,0,[\\\"showValidationOnHandler\\\"]]],null],[4,[38,4],[\\\"input\\\",[30,0,[\\\"showValidationOnHandler\\\"]]],null],[4,[38,5],[[30,0,[\\\"handleShowAllValidationsChange\\\"]],[30,0,[\\\"showAllValidations\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[46,[28,[37,7],[[28,[37,8],[[30,3],[52,[28,[37,9],[[28,[37,10],[\\\"checkbox\\\",\\\"switch\\\"],null],[30,0,[\\\"controlType\\\"]]],null],[52,[28,[37,2],[[30,1],\\\"inline\\\"],null],[50,\\\"bs-form/element/layout/inline/checkbox\\\",0,null,[[\\\"controlType\\\"],[[30,0,[\\\"controlType\\\"]]]]],[52,[28,[37,2],[[30,1],\\\"horizontal\\\"],null],[50,\\\"bs-form/element/layout/horizontal/checkbox\\\",0,null,[[\\\"controlType\\\"],[[30,0,[\\\"controlType\\\"]]]]],[50,\\\"bs-form/element/layout/vertical/checkbox\\\",0,null,[[\\\"controlType\\\"],[[30,0,[\\\"controlType\\\"]]]]]]],[52,[28,[37,2],[[30,1],\\\"inline\\\"],null],[50,\\\"bs-form/element/layout/inline\\\",0,null,null],[52,[28,[37,2],[[30,1],\\\"horizontal\\\"],null],[50,\\\"bs-form/element/layout/horizontal\\\",0,null,null],[50,\\\"bs-form/element/layout/vertical\\\",0,null,null]]]]],null]],null],null,[[\\\"hasLabel\\\",\\\"formElementId\\\",\\\"horizontalLabelGridClass\\\",\\\"errorsComponent\\\",\\\"feedbackIconComponent\\\",\\\"labelComponent\\\",\\\"helpTextComponent\\\"],[[52,[30,4],true,false],[30,0,[\\\"formElementId\\\"]],[30,5],[50,[28,[37,7],[[28,[37,8],[[30,6],[50,\\\"bs-form/element/errors\\\",0,null,null]],null]],null],0,null,[[\\\"messages\\\",\\\"show\\\",\\\"showMultipleErrors\\\"],[[30,0,[\\\"validationMessages\\\"]],[30,0,[\\\"showValidationMessages\\\"]],[30,0,[\\\"showMultipleErrors\\\"]]]]],[50,[28,[37,7],[[28,[37,8],[[30,7],[50,\\\"bs-form/element/feedback-icon\\\",0,null,null]],null]],null],0,null,[[\\\"iconName\\\",\\\"show\\\"],[[30,8],[30,0,[\\\"hasFeedback\\\"]]]]],[50,[28,[37,7],[[28,[37,8],[[30,9],[52,[28,[37,2],[[30,0,[\\\"controlType\\\"]],\\\"radio\\\"],null],[50,\\\"bs-form/element/legend\\\",0,null,null],[50,\\\"bs-form/element/label\\\",0,null,null]]],null]],null],0,null,[[\\\"label\\\",\\\"invisibleLabel\\\",\\\"formElementId\\\",\\\"controlType\\\",\\\"formLayout\\\",\\\"size\\\"],[[30,4],[30,10],[30,0,[\\\"formElementId\\\"]],[30,0,[\\\"controlType\\\"]],[30,1],[30,11]]]],[52,[30,12],[50,[28,[37,7],[[28,[37,8],[[30,13],[50,\\\"bs-form/element/help-text\\\",0,null,null]],null]],null],0,null,[[\\\"text\\\",\\\"id\\\"],[[30,12],[30,0,[\\\"ariaDescribedBy\\\"]]]]]]]],[[\\\"default\\\"],[[[[44,[[50,[28,[37,7],[[28,[37,8],[[30,14],[30,0,[\\\"controlComponent\\\"]]],null]],null],0,null,[[\\\"value\\\",\\\"id\\\",\\\"type\\\",\\\"label\\\",\\\"disabled\\\",\\\"readonly\\\",\\\"required\\\",\\\"options\\\",\\\"optionLabelPath\\\",\\\"ariaDescribedBy\\\",\\\"onChange\\\",\\\"validationType\\\",\\\"size\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"formElementId\\\"]],[30,0,[\\\"controlType\\\"]],[30,4],[30,0,[\\\"args\\\",\\\"_disabled\\\"]],[30,0,[\\\"args\\\",\\\"_readonly\\\"]],[30,15],[30,16],[30,17],[52,[30,12],[30,0,[\\\"ariaDescribedBy\\\"]]],[30,0,[\\\"doChange\\\"]],[30,0,[\\\"validation\\\"]],[30,11]]]]],[[[41,[48,[30,19]],[[[1,\\\"        \\\"],[18,19,[[28,[37,14],null,[[\\\"value\\\",\\\"setValue\\\",\\\"id\\\",\\\"validation\\\",\\\"control\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"doChange\\\"]],[30,0,[\\\"formElementId\\\"]],[30,0,[\\\"validation\\\"]],[30,18]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[30,18],null,null,null],[1,\\\"\\\\n\\\"]],[]]]],[18]]]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@formLayout\\\",\\\"&attrs\\\",\\\"@layoutComponent\\\",\\\"@label\\\",\\\"@horizontalLabelGridClass\\\",\\\"@errorsComponent\\\",\\\"@feedbackIconComponent\\\",\\\"@iconName\\\",\\\"@labelComponent\\\",\\\"@invisibleLabel\\\",\\\"@size\\\",\\\"@helpText\\\",\\\"@helpTextComponent\\\",\\\"@controlComponent\\\",\\\"@required\\\",\\\"@options\\\",\\\"@optionLabelPath\\\",\\\"Control\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-eq\\\",\\\"create-ref\\\",\\\"on\\\",\\\"did-update\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"bs-contains\\\",\\\"array\\\",\\\"let\\\",\\\"has-block\\\",\\\"yield\\\",\\\"hash\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Subclass of `Components.FormGroup` that adds automatic form layout markup and form validation features.\n  \n    ### Form layout\n  \n    The appropriate Bootstrap markup for the given `formLayout` and `controlType` is automatically generated to easily\n    create forms without coding the default Bootstrap form markup by hand:\n  \n    ```handlebars\n    <BsForm @formLayout=\"horizontal\" @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @controlType=\"email\" @label=\"Email\" @value={{this.email}} />\n      <form.element @controlType=\"password\" @label=\"Password\" @value={{this.password}} />\n      <form.element @controlType=\"checkbox\" @label=\"Remember me\" @value={{this.rememberMe}} />\n      <BsButton @defaultText=\"Submit\" @type=\"primary\" type=\"submit\" />\n    </BsForm>\n    ```\n  \n    ### Control types\n  \n    The following control types are supported out of the box:\n  \n    * Inputs (simple `text`, or any other HTML5 supported input types like `password`, `email` etc.)\n    * Checkbox (single)\n    * Radio Button (group)\n    * Textarea\n    * Switch (BS4 Only)\n  \n    #### Radio Buttons\n  \n    For a group of mutually exclusive radio buttons to work, you must supply the `options` property with an array of\n    options, each of which will be rendered with an appropriate radio button and its label. It can be either a simple array\n    of strings or objects. In the latter case, you would have to set `optionLabelPath` to the property, that contains the\n    label on these objects.\n  \n    ```hbs\n    <BsForm @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @controlType=\"radio\" @label=\"Gender\" @options={{this.genderOptions}} @optionLabelPath=\"title\" @property=\"gender\" />\n    </BsForm>\n    ```\n  \n    The default layout for radios is stacked, but Bootstrap's inline layout is also supported using the `inline` property\n    of the yielded control component:\n  \n    ```hbs\n    <BsForm @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @controlType=\"radio\" @label=\"Gender\" @options={{this.genderOptions}} @property=\"gender\" as |el|>\n        <el.control @inline={{true}} />\n      </form.element>\n    </BsForm>\n    ```\n  \n    #### Custom controls\n  \n    Apart from the standard built-in browser controls (see the `controlType` property), you can use any custom control simply\n    by invoking the component with a block template. Use whatever control you might want, for example a `<PikadayInput>`\n    component (from the [ember-pikaday addon](https://github.com/adopted-ember-addons/ember-pikaday)):\n  \n    ```hbs\n    <BsForm @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @label=\"Select-2\" @property=\"gender\" as |el|>\n        <PikadayInput @value={{el.value}} @onSelection={{el.setValue}} id={{el.id}} />\n      </form.element>\n    </BsForm>\n    ```\n  \n    The component yields a hash with the following properties:\n    * `control`: the component that would be used for rendering the form control based on the given `controlType`\n    * `id`: id to be used for the form control, so it matches the labels `for` attribute\n    * `value`: the value of the form element\n    * `setValue`: function to change the value of the form element\n    * `validation`: the validation state of the element, `null` if no validation is to be shown, otherwise 'success', 'error' or 'warning'\n  \n    If you just want to customize the existing control component, you can use the aforementioned yielded `control` component\n    to customize that existing component:\n  \n    ```hbs\n    <BsForm @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @label=\"Email\" @property=\"email\" as |el|>\n        <el.control class=\"input-lg\" placeholder=\"Email\" />\n      </form.element>\n    </BsForm>\n    ```\n  \n    If you are using the custom control quite often, you should consider writing an integration plugin like\n    [`ember-bootstrap-power-select`](https://github.com/kaliber5/ember-bootstrap-power-select).\n    To do so, you need to provide a component `{{bs-form/element/control/my-custom-control}}` which extends\n    [`Components.FormElementControl`](Components.FormElementControl.html).\n  \n    ### Form validation\n  \n    In the following example the control elements of the three form elements value will be bound to the properties\n    (given by `property`) of the form's `model`, which in this case is its controller (see `model=this`):\n  \n    ```handlebars\n    <BsForm @formLayout=\"horizontal\" @model={{this}} @onSubmit={{this.submit}} as |form|>\n      <form.element @controlType=\"email\" @label=\"Email\" @property=\"email\" />\n      <form.element @controlType=\"password\" @label=\"Password\" @property=\"password\" />\n      <form.element @controlType=\"checkbox\" @label=\"Remember me\" @property=\"rememberMe\" />\n      <form.submitButton>Submit</form.submitButton>\n    </BsForm>\n    ```\n  \n    By using this indirection in comparison to directly binding the `value` property, you get the benefit of automatic\n    form validation, given that your `model` has a supported means of validating itself.\n    See [Components.Form](Components.Form.html) for details on how to enable form validation.\n  \n    In the example above the `model` was our controller itself, so the control elements were bound to the appropriate\n    properties of our controller. A controller implementing validations on those properties could look like this:\n  \n    ```js\n    import Ember from 'ember';\n    import EmberValidations from 'ember-validations';\n  \n    export default Ember.Controller.extend(EmberValidations,{\n      email: null,\n      password: null,\n      rememberMe: false,\n      validations: {\n        email: {\n          presence: true,\n          format: {\n            with: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/\n          }\n        },\n        password: {\n          presence: true,\n          length: { minimum: 6, maximum: 10}\n        },\n        comments: {\n          length: { minimum: 5, maximum: 20}\n        }\n      }\n    });\n    ```\n  \n    If the `showValidation` property is `true` (which is automatically the case if a `focusOut` event is captured from the\n    control element or the containing `Components.Form` was submitted with its `model` failing validation) and there are\n    validation errors for the `model`'s `property`, the appropriate Bootstrap validation markup (see\n    http://getbootstrap.com/css/#forms-control-validation) is applied:\n  \n    * `validation` is set to 'error', which will set the `has-error` CSS class\n    * the `errorIcon` feedback icon is displayed if `controlType` is a text field\n    * the validation messages are displayed as Bootstrap `help-block`s in BS3 and `form-control-feedback` in BS4\n  \n    The same applies for warning messages, if the used validation library supports this. (Currently only\n    [ember-cp-validations](https://github.com/offirgolan/ember-cp-validations))\n  \n    As soon as the validation is successful again...\n  \n    * `validation` is set to 'success', which will set the `has-success` CSS class\n    * the `successIcon` feedback icon is displayed if `controlType` is a text field\n    * the validation messages are removed\n  \n    In case you want to display some error or warning message that is independent of the model's validation, for\n    example to display a failure message on a login form after a failed authentication attempt (so not coming from\n    the validation library), you can use the `customError` or `customWarning` properties to do so.\n  \n    ### HTML attributes\n  \n    To set HTML attributes on the control element provided by this component when using the modern angle bracket invocation,\n    you can pass them to the yielded `control` component:\n  \n    ```hbs\n    <BsForm @formLayout=\"horizontal\" @model={{this}} @onSubmit={{this.submit}} as |form|>\n    <form.element @controlType=\"email\" @label=\"Email\" @property=\"email\" as |el|>\n      <el.control\n        placeholder=\"Email\"\n        tabindex={{5}}\n        multiple\n        required\n      />\n    </form.element>\n    ...\n    </BsForm>\n    ```\n  \n    @class FormElement\n    @namespace Components\n    @extends Components.FormGroup\n    @public\n  */\n  let FormElement = _exports.default = (_dec = (0, _emberRefBucket.ref)('mainNode'), _class = class FormElement extends _component2.default {\n    /**\n     * The value of the control element is bound to this property:\n     *\n     * ```hbs\n     * <form.element @controlType=\"email\" @label=\"Email\" @value={{this.email}} />\n     * ```\n     *\n     * Note two things:\n     * * the binding is uni-directional (DDAU), so you would have to use the `onChange` action to subscribe to changes.\n     * * you lose the ability to validate this form element by directly binding to its value. It is recommended\n     * to use the `property` feature instead.\n     *\n     * @property value\n     * @public\n     */\n    get value() {\n      (false && !((0, _utils.isBlank)(this.args.property) || (0, _utils.isBlank)(this.args.value)) && (0, _debug.assert)('You can not set both property and value on a form element', (0, _utils.isBlank)(this.args.property) || (0, _utils.isBlank)(this.args.value)));\n      if (this.args.property && this.args.model) {\n        return (0, _object.get)(this.args.model, this.args.property);\n      }\n      return this.args.value;\n    }\n\n    /**\n     The property name of the form element's `model` (by default the `model` of its parent `Components.Form`) that this\n     form element should represent. The control element's value will automatically be bound to the model property's\n     value.\n      Using this property enables form validation on this element.\n      @property property\n     @type string\n     @public\n     */\n\n    /**\n     * The model used for validation. Defaults to the parent `Components.Form`'s `model`\n     *\n     * @property model\n     * @public\n     */\n\n    /**\n     * Show a help text next to the control\n     *\n     * @property helpText\n     * @type {string}\n     * @public\n     */\n\n    /**\n     * Only if there is a validator, this property makes all errors to be displayed at once\n     * inside a scrollable container.\n     *\n     * @default false\n     * @property showMultipleErrors\n     * @public\n     * @type {Boolean}\n     */\n\n    /**\n     * @property hasErrors\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get hasErrors() {\n      return Array.isArray(this.errors) && this.errors.length > 0;\n    }\n\n    /**\n     * The array of warning messages from the `model`'s validation.\n     *\n     * @property warnings\n     * @type array\n     * @protected\n     */\n    // This shouldn't be an argument. It's only an argument because tests rely on\n    // setting it as an argument. See https://github.com/kaliber5/ember-bootstrap/issues/1338\n    // for details.\n\n    /**\n     * @property hasWarnings\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get hasWarnings() {\n      return Array.isArray(this.warnings) && this.warnings.length > 0;\n    }\n\n    /**\n     * Show a custom error message that does not come from the model's validation. Will be immediately shown, regardless\n     * of any user interaction (i.e. no `focusOut` event required)\n     *\n     * @property customError\n     * @type string\n     * @public\n     */\n\n    /**\n     * @property hasCustomError\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get hasCustomError() {\n      return (0, _utils.isPresent)(this.args.customError);\n    }\n\n    /**\n     * Show a custom warning message that does not come from the model's validation. Will be immediately shown, regardless\n     * of any user interaction (i.e. no `focusOut` event required). If the model's validation has an error then the error\n     * will be shown in place of this warning.\n     *\n     * @property customWarning\n     * @type string\n     * @public\n     */\n\n    /**\n     * @property hasCustomWarning\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get hasCustomWarning() {\n      return (0, _utils.isPresent)(this.args.customWarning);\n    }\n\n    /**\n     * Property for size styling, set to 'lg', 'sm' or 'xs' (the latter only for BS3)\n     *\n     * @property size\n     * @type String\n     * @public\n     */\n\n    /**\n     * The array of validation messages (either errors or warnings) from either custom error/warnings or , if we are showing model validation messages, the model's validation\n     *\n     * @property validationMessages\n     * @type array\n     * @private\n     */\n    get validationMessages() {\n      if (this.hasCustomError) {\n        return (0, _array.A)([this.args.customError]);\n      }\n      if (this.hasErrors && this.showModelValidation) {\n        return (0, _array.A)(this.errors);\n      }\n      if (this.hasCustomWarning) {\n        return (0, _array.A)([this.args.customWarning]);\n      }\n      if (this.hasWarnings && this.showModelValidation) {\n        return (0, _array.A)(this.warnings);\n      }\n      return null;\n    }\n\n    /**\n     * @property hasValidationMessages\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get hasValidationMessages() {\n      return Array.isArray(this.validationMessages) && this.validationMessages.length > 0;\n    }\n\n    /**\n     * Set a validating state for async validations\n     *\n     * @property isValidating\n     * @type boolean\n     * @default false\n     * @protected\n     */\n\n    /**\n     * If `true` form validation markup is rendered (requires a validatable `model`).\n     *\n     * @property showValidation\n     * @type boolean\n     * @default false\n     * @private\n     */\n    get showValidation() {\n      return this.showOwnValidation || this.showAllValidations || this.hasCustomError || this.hasCustomWarning;\n    }\n\n    /**\n     * @property showOwnValidation\n     * @type boolean\n     * @default false\n     * @private\n     */\n\n    /*\n     * Resets `showOwnValidation` if `@showAllValidations` argument is changed to `false`.\n     * Must be called whenever `@showAllValidations` argument changes.\n     */\n    handleShowAllValidationsChange() {\n      if (this.args.showAllValidations === false) {\n        this.showOwnValidation = false;\n      }\n    }\n\n    /**\n     * @property showModelValidations\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get showModelValidation() {\n      return this.showOwnValidation || this.showAllValidations;\n    }\n\n    /**\n     * @property showValidationMessages\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get showValidationMessages() {\n      return this.showValidation && this.hasValidationMessages;\n    }\n\n    /**\n     * Event or list of events which enable form validation markup rendering.\n     * Supported events: ['focusout', 'change', 'input']\n     *\n     * @property showValidationOn\n     * @type string|array\n     * @default ['focusout']\n     * @public\n     */\n\n    /**\n     * @property _showValidationOn\n     * @type array\n     * @readonly\n     * @private\n     */\n    get _showValidationOn() {\n      let showValidationOn = this.showValidationOn;\n      (false && !((0, _array.isArray)(showValidationOn) || (0, _utils.typeOf)(showValidationOn) === 'string') && (0, _debug.assert)('showValidationOn must be a String or an Array', (0, _array.isArray)(showValidationOn) || (0, _utils.typeOf)(showValidationOn) === 'string'));\n      if ((0, _array.isArray)(showValidationOn)) {\n        return showValidationOn.map(type => {\n          return type.toLowerCase();\n        });\n      }\n      if (typeof showValidationOn.toString === 'function') {\n        return [showValidationOn.toLowerCase()];\n      }\n      return [];\n    }\n\n    /**\n     * @method showValidationOnHandler\n     * @param {Event} event\n     * @private\n     */\n    showValidationOnHandler({\n      target,\n      type\n    }) {\n      // Should not do anything if\n      if (\n      // validations should not be shown for this event type or\n      this._showValidationOn.indexOf(type) === -1 ||\n      // validation should not be shown for this event target\n      (0, _array.isArray)(this.doNotShowValidationForEventTargets) && this.doNotShowValidationForEventTargets.length > 0 && this._element && [...this._element.querySelectorAll(this.doNotShowValidationForEventTargets.join(','))].some(el => el.contains(target))) {\n        return;\n      }\n      this.showOwnValidation = true;\n    }\n\n    /**\n     * Controls if validation should be shown for specified event targets.\n     *\n     * It expects an array of query selectors. If event target is a children of an event that matches\n     * these selectors, an event triggered for it will not trigger validation errors to be shown.\n     *\n     * By default, events fired on elements inside an input group are skipped.\n     *\n     * If `null` or an empty array is passed validation errors are shown for all events regardless\n     * of event target.\n     *\n     * @property doNotShowValidationForEventTargets\n     * @type ?array\n     * @public\n     */\n\n    /**\n     * The validation (\"error\" (BS3)/\"danger\" (BS4), \"warning\", or \"success\") or null if no validation is to be shown. Automatically computed from the\n     * model's validation state.\n     *\n     * @property validation\n     * @readonly\n     * @type string\n     * @private\n     */\n    get validation() {\n      const shouldShowValidationState = this.showModelValidation && this.hasValidator && !this.isValidating && !this.args._disabled;\n      if (/* custom errors should be always shown */\n      this.hasCustomError || (/* validation error should be shown in preference to warnings */\n      shouldShowValidationState && this.hasErrors)) {\n        return 'error';\n      }\n      if (/* custom warning should be always shown unless there is a validation error */\n      this.hasCustomWarning || shouldShowValidationState && this.hasWarnings) {\n        return 'warning';\n      }\n      if (shouldShowValidationState) {\n        return 'success';\n      }\n      return null;\n    }\n\n    /**\n     * The form layout used for the markup generation (see http://getbootstrap.com/css/#forms):\n     *\n     * * 'horizontal'\n     * * 'vertical'\n     * * 'inline'\n     *\n     * Defaults to the parent `form`'s `formLayout` property.\n     *\n     * @property formLayout\n     * @type string\n     * @default 'vertical'\n     * @public\n     */\n\n    /**\n     * The Bootstrap grid classes for form labels within a horizontal layout form. Defaults to the value of the same\n     * property of the parent form. The corresponding grid classes for form controls are automatically computed.\n     *\n     * @property horizontalLabelGridClass\n     * @type string\n     * @public\n     */\n\n    /**\n     * ID for input field and the corresponding label's \"for\" attribute\n     *\n     * @property formElementId\n     * @type string\n     * @private\n     */\n    get formElementId() {\n      return `${this._elementId}-field`;\n    }\n\n    /**\n     * ID of the helpText, used for aria-describedby attribute of the control element\n     *\n     * @property ariaDescribedBy\n     * @type string\n     * @private\n     */\n    get ariaDescribedBy() {\n      return `${this._elementId}-help`;\n    }\n\n    /**\n     * @property layoutComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property controlComponent\n     * @private\n     */\n    get controlComponent() {\n      let owner = (0, _application.getOwner)(this);\n      let componentClass = owner.resolveRegistration(`component:bs-form/element/control/${this.controlType}`);\n      if (componentClass) {\n        return componentClass;\n      }\n      if (this.controlType === 'checkbox') {\n        return _checkbox.default;\n      } else if (this.controlType === 'textarea') {\n        return _textarea.default;\n      } else if (this.controlType === 'radio') {\n        return _radio.default;\n      } else if (this.controlType === 'switch') {\n        return _switch.default;\n      } else {\n        return _input.default;\n      }\n    }\n\n    /**\n     * @property errorsComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property feedbackIconComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property labelComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property helpTextComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * Setup validation properties. This method acts as a hook for external validation\n     * libraries to overwrite. In case of failed validations the `errors` property should contain an array of error messages.\n     *\n     * @method setupValidations\n     * @private\n     */\n\n    /**\n     * The action is called whenever the input value is changed, e.g. by typing text\n     *\n     * @event onChange\n     * @param {String} value The new value of the form control\n     * @param {Object} model The form element's model\n     * @param {String} property The value of `property`\n     * @public\n     */\n\n    /**\n     * Private duplicate of onChange event used for internal state handling between form and it's elements.\n     *\n     * @event _onChange\n     * @private\n     */\n\n    constructor() {\n      super(...arguments);\n      /**\n       * @property _element\n       * @type null | HTMLElement\n       * @private\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      /**\n       * Text to display within a `<label>` tag.\n       *\n       * You should include a label for every form input cause otherwise screen readers\n       * will have trouble with your forms. Use `invisibleLabel` property if you want\n       * to hide them.\n       *\n       * @property label\n       * @type string\n       * @public\n       */\n      /**\n       * Controls label visibility by adding 'sr-only' class.\n       *\n       * @property invisibleLabel\n       * @type boolean\n       * @default false\n       * @public\n       */\n      /**\n       * The type of the control widget.\n       * Supported types:\n       *\n       * * 'text'\n       * * 'checkbox'\n       * * 'radio'\n       * * 'switch'\n       * * 'textarea'\n       * * any other type will use an input tag with the `controlType` value as the type attribute (for e.g. HTML5 input\n       * types like 'email'), and the same layout as the 'text' type\n       *\n       * @property controlType\n       * @type string\n       * @default 'text'\n       * @public\n       */\n      _initializerDefineProperty(this, \"controlType\", _descriptor2, this);\n      _initializerDefineProperty(this, \"showMultipleErrors\", _descriptor3, this);\n      /**\n       * Array of options for control types that show a selection (e.g. radio button groups)\n       * Can be an array of simple strings or objects. For objects use `optionLabelPath` to specify the path containing the\n       * label.\n       *\n       * @property options\n       * @type {Array}\n       * @public\n       */\n      /**\n       * Property path (e.g. 'title' or 'related.name') to render the label of a selection option. See `options`.\n       *\n       * @property optionLabelPath\n       * @type {String}\n       * @public\n       */\n      /**\n       * The array of error messages from the `model`'s validation.\n       *\n       * @property errors\n       * @type array\n       * @protected\n       */\n      // This shouldn't be an argument. It's only an argument because tests rely on\n      // setting it as an argument. See https://github.com/kaliber5/ember-bootstrap/issues/1338\n      // for details.\n      _initializerDefineProperty(this, \"errors\", _descriptor4, this);\n      _initializerDefineProperty(this, \"warnings\", _descriptor5, this);\n      _initializerDefineProperty(this, \"isValidating\", _descriptor6, this);\n      _initializerDefineProperty(this, \"showOwnValidation\", _descriptor7, this);\n      /**\n       * @property showAllValidations\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _initializerDefineProperty(this, \"showAllValidations\", _descriptor8, this);\n      _initializerDefineProperty(this, \"showValidationOn\", _descriptor9, this);\n      _initializerDefineProperty(this, \"doNotShowValidationForEventTargets\", _descriptor0, this);\n      _defineProperty(this, \"_elementId\", (0, _internals.guidFor)(this));\n      if (!(0, _utils.isBlank)(this.args.property)) {\n        this.setupValidations?.();\n      }\n    }\n    doChange(value) {\n      let {\n        onChange,\n        model,\n        property,\n        _onChange\n      } = this.args;\n      onChange?.(value, model, property);\n      _onChange?.();\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"controlType\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'text';\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showMultipleErrors\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"errors\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"warnings\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"isValidating\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"showOwnValidation\", [_trackedToolbox.dedupeTracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showAllValidations\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"handleShowAllValidationsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleShowAllValidationsChange\"), _class.prototype), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"showValidationOn\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['focusOut'];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"showValidationOnHandler\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showValidationOnHandler\"), _class.prototype), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"doNotShowValidationForEventTargets\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return ['.input-group-append', '.input-group-prepend'];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"doChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doChange\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElement);\n});","define(\"ember-bootstrap/components/bs-form/element/control\", [\"exports\", \"@glimmer/component\", \"ember-bootstrap/utils/form-validation-class\"], function (_exports, _component, _formValidationClass) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-bootstrap/utils/form-validation-class\"eaimeta@70e063a35619d71f\n  /**\n  \n   @class FormElementControl\n   @namespace Components\n   @extends Ember.Component\n   @private\n   */\n  class FormElementControl extends _component.default {\n    /**\n     * @property value\n     * @public\n     */\n\n    get formValidationClass() {\n      return (0, _formValidationClass.default)(this.args.validationType);\n    }\n\n    /**\n     * This action is called whenever the `value` changes\n     *\n     * @event onChange\n     * @param {*} value\n     * @public\n     */\n  }\n  _exports.default = FormElementControl;\n});","define(\"ember-bootstrap/components/bs-form/element/control/checkbox\", [\"exports\", \"@ember/component\", \"@ember/object\", \"ember-bootstrap/components/bs-form/element/control\", \"@ember/template-factory\"], function (_exports, _component, _object, _control, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"ember-bootstrap/components/bs-form/element/control\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <input\n    type=\"checkbox\"\n    id={{@id}}\n    disabled={{@disabled}}\n    readonly={{@readonly}}\n    aria-describedby={{@ariaDescribedBy}}\n    checked={{@value}}\n    class=\"form-check-input {{this.formValidationClass}}\"\n    ...attributes\n    {{on \"click\" this.handleClick}}\n  >\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"input\\\"],[24,4,\\\"checkbox\\\"],[16,1,[30,1]],[16,\\\"disabled\\\",[30,2]],[16,\\\"readonly\\\",[30,3]],[16,\\\"aria-describedby\\\",[30,4]],[16,\\\"checked\\\",[30,5]],[16,0,[29,[\\\"form-check-input \\\",[30,0,[\\\"formValidationClass\\\"]]]]],[17,6],[4,[38,1],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n\\\"]],[\\\"@id\\\",\\\"@disabled\\\",\\\"@readonly\\\",\\\"@ariaDescribedBy\\\",\\\"@value\\\",\\\"&attrs\\\"],[\\\"input\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/control/checkbox.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementControlCheckbox\n   @namespace Components\n   @extends Components.FormElementControl\n   @private\n   */\n  let FormElementControlCheckbox = _exports.default = (_class = class FormElementControlCheckbox extends _control.default {\n    handleClick(event) {\n      this.args.onChange(event.target.checked);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementControlCheckbox);\n});","define(\"ember-bootstrap/components/bs-form/element/control/input\", [\"exports\", \"@ember/component\", \"@ember/object\", \"ember-bootstrap/components/bs-form/element/control\", \"ember-bootstrap/utils/size-class\", \"@ember/template-factory\"], function (_exports, _component, _object, _control, _sizeClass, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"ember-bootstrap/components/bs-form/element/control\",0,\"ember-bootstrap/utils/size-class\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <input\n    type={{bs-default @type \"text\"}}\n    id={{@id}}\n    disabled={{@disabled}}\n    readonly={{@readonly}}\n    aria-describedby={{@ariaDescribedBy}}\n    value={{@value}}\n    class=\"form-control {{this.formValidationClass}} {{this.sizeClass}}\"\n    ...attributes\n    {{on \"change\" this.handleChange}}\n    {{on \"input\" this.handleInput}}\n  >\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"input\\\"],[16,4,[28,[37,1],[[30,1],\\\"text\\\"],null]],[16,1,[30,2]],[16,\\\"disabled\\\",[30,3]],[16,\\\"readonly\\\",[30,4]],[16,\\\"aria-describedby\\\",[30,5]],[16,2,[30,6]],[16,0,[29,[\\\"form-control \\\",[30,0,[\\\"formValidationClass\\\"]],\\\" \\\",[30,0,[\\\"sizeClass\\\"]]]]],[17,7],[4,[38,2],[\\\"change\\\",[30,0,[\\\"handleChange\\\"]]],null],[4,[38,2],[\\\"input\\\",[30,0,[\\\"handleInput\\\"]]],null],[12],[13]],[\\\"@type\\\",\\\"@id\\\",\\\"@disabled\\\",\\\"@readonly\\\",\\\"@ariaDescribedBy\\\",\\\"@value\\\",\\\"&attrs\\\"],[\\\"input\\\",\\\"bs-default\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/control/input.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementControlInput\n   @namespace Components\n   @extends Components.FormElementControl\n   @private\n   */\n  let FormElementControlInput = _exports.default = (_class = class FormElementControlInput extends _control.default {\n    /**\n     * @property type\n     * @type {String}\n     * @public\n     */\n\n    handleChange(event) {\n      this.args.onChange(event.target.value);\n    }\n    handleInput(event) {\n      this.args.onChange(event.target.value);\n    }\n\n    /**\n     * [BS4 only] Property for size styling, set to 'lg', 'sm' or 'xs'\n     *\n     * Also see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/forms/#sizing)\n     *\n     * @property size\n     * @type String\n     * @public\n     */\n\n    get sizeClass() {\n      return (0, _sizeClass.default)('form-control', this.args.size);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleInput\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementControlInput);\n});","define(\"ember-bootstrap/components/bs-form/element/control/radio\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-form/element/control\", \"@ember/template-factory\"], function (_exports, _component, _control, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-form/element/control\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{!-- template-lint-disable no-positive-tabindex no-autofocus-attribute --}}\n  {{#each @options as |option index|}}\n    {{#let (concat @id \"-\" index) as |id|}}\n      <div class=\"form-check{{if @inline \" form-check-inline\"}}\">\n        <input\n          type=\"radio\"\n          class=\"form-check-input\"\n          id={{id}}\n          checked={{bs-eq option @value}}\n          onclick={{fn @onChange option}}\n          name={{@name}}\n          required={{@required}}\n          disabled={{@disabled}}\n          autofocus={{@autofocus}}\n          tabindex={{@tabindex}}\n          form={{@form}}\n          title={{@title}}\n          ...attributes\n        >\n        <label\n          for={{id}}\n          class=\"form-check-label\"\n        >\n          {{#if (has-block)}}\n            {{yield option index}}\n          {{else}}\n            {{#if @optionLabelPath}}\n              {{get option @optionLabelPath}}\n            {{else}}\n              {{option}}\n            {{/if}}\n          {{/if}}\n        </label>\n      </div>\n    {{/let}}\n  {{/each}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[42,[28,[37,1],[[28,[37,1],[[30,1]],null]],null],null,[[[44,[[28,[37,3],[[30,4],\\\"-\\\",[30,3]],null]],[[[1,\\\"    \\\"],[10,0],[15,0,[29,[\\\"form-check\\\",[52,[30,6],\\\" form-check-inline\\\"]]]],[12],[1,\\\"\\\\n      \\\"],[11,\\\"input\\\"],[24,4,\\\"radio\\\"],[24,0,\\\"form-check-input\\\"],[16,1,[30,5]],[16,\\\"checked\\\",[28,[37,7],[[30,2],[30,7]],null]],[16,\\\"onclick\\\",[28,[37,8],[[30,8],[30,2]],null]],[16,3,[30,9]],[16,\\\"required\\\",[30,10]],[16,\\\"disabled\\\",[30,11]],[16,\\\"autofocus\\\",[30,12]],[16,\\\"tabindex\\\",[30,13]],[16,\\\"form\\\",[30,14]],[16,\\\"title\\\",[30,15]],[17,16],[12],[13],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[30,5]],[14,0,\\\"form-check-label\\\"],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,18]],[[[1,\\\"          \\\"],[18,18,[[30,2],[30,3]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,17],[[[1,\\\"            \\\"],[1,[28,[35,12],[[30,2],[30,17]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[5]]]],[2,3]],null]],[\\\"@options\\\",\\\"option\\\",\\\"index\\\",\\\"@id\\\",\\\"id\\\",\\\"@inline\\\",\\\"@value\\\",\\\"@onChange\\\",\\\"@name\\\",\\\"@required\\\",\\\"@disabled\\\",\\\"@autofocus\\\",\\\"@tabindex\\\",\\\"@form\\\",\\\"@title\\\",\\\"&attrs\\\",\\\"@optionLabelPath\\\",\\\"&default\\\"],[\\\"each\\\",\\\"-track-array\\\",\\\"let\\\",\\\"concat\\\",\\\"div\\\",\\\"if\\\",\\\"input\\\",\\\"bs-eq\\\",\\\"fn\\\",\\\"label\\\",\\\"has-block\\\",\\\"yield\\\",\\\"get\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/control/radio.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementControlRadio\n   @namespace Components\n   @extends Components.FormElementControl\n   @private\n   */\n  class FormElementControlRadio extends _control.default {\n    /**\n     * @property inline\n     * @type {Boolean}\n     * @default false\n     * @public\n     */\n  }\n  _exports.default = FormElementControlRadio;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementControlRadio);\n});","define(\"ember-bootstrap/components/bs-form/element/control/switch\", [\"exports\", \"@ember/component\", \"@ember/object\", \"ember-bootstrap/components/bs-form/element/control\", \"@ember/template-factory\"], function (_exports, _component, _object, _control, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"ember-bootstrap/components/bs-form/element/control\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <input\n    type=\"checkbox\"\n    id={{@id}}\n    disabled={{@disabled}}\n    readonly={{@readonly}}\n    aria-describedby={{@ariaDescribedBy}}\n    checked={{@value}}\n    class=\"{{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-check-input\" \"custom-control-input\"}} {{this.formValidationClass}}\"\n    ...attributes\n    {{on \"click\" this.handleClick}}\n  >\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"input\\\"],[24,4,\\\"checkbox\\\"],[16,1,[30,1]],[16,\\\"disabled\\\",[30,2]],[16,\\\"readonly\\\",[30,3]],[16,\\\"aria-describedby\\\",[30,4]],[16,\\\"checked\\\",[30,5]],[16,0,[29,[\\\"form-check-input\\\",\\\" \\\",[30,0,[\\\"formValidationClass\\\"]]]]],[17,6],[4,[38,1],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[\\\"@id\\\",\\\"@disabled\\\",\\\"@readonly\\\",\\\"@ariaDescribedBy\\\",\\\"@value\\\",\\\"&attrs\\\"],[\\\"input\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/control/switch.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementControlSwitch\n   @namespace Components\n   @extends Components.FormElementControl\n   @private\n   */\n  let FormElementControlSwitch = _exports.default = (_class = class FormElementControlSwitch extends _control.default {\n    handleClick(event) {\n      this.args.onChange(event.target.checked);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementControlSwitch);\n});","define(\"ember-bootstrap/components/bs-form/element/control/textarea\", [\"exports\", \"@ember/component\", \"@ember/object\", \"ember-bootstrap/components/bs-form/element/control\", \"@ember/template-factory\"], function (_exports, _component, _object, _control, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"ember-bootstrap/components/bs-form/element/control\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <textarea\n    id={{@id}}\n    disabled={{@disabled}}\n    readonly={{@readonly}}\n    aria-describedby={{@ariaDescribedBy}}\n    value={{@value}}\n    class=\"form-control {{this.formValidationClass}}\"\n    ...attributes\n    {{on \"change\" this.handleChange}}\n    {{on \"input\" this.handleInput}}>\n  </textarea>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"textarea\\\"],[16,1,[30,1]],[16,\\\"disabled\\\",[30,2]],[16,\\\"readonly\\\",[30,3]],[16,\\\"aria-describedby\\\",[30,4]],[16,2,[30,5]],[16,0,[29,[\\\"form-control \\\",[30,0,[\\\"formValidationClass\\\"]]]]],[17,6],[4,[38,1],[\\\"change\\\",[30,0,[\\\"handleChange\\\"]]],null],[4,[38,1],[\\\"input\\\",[30,0,[\\\"handleInput\\\"]]],null],[12],[1,\\\"\\\"],[13]],[\\\"@id\\\",\\\"@disabled\\\",\\\"@readonly\\\",\\\"@ariaDescribedBy\\\",\\\"@value\\\",\\\"&attrs\\\"],[\\\"textarea\\\",\\\"on\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/control/textarea.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementControlTextarea\n   @namespace Components\n   @extends Components.FormElementControl\n   @private\n   */\n  let FormElementControlTextarea = _exports.default = (_class = class FormElementControlTextarea extends _control.default {\n    handleChange(event) {\n      this.args.onChange(event.target.value);\n    }\n    handleInput(event) {\n      this.args.onChange(event.target.value);\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleInput\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleInput\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementControlTextarea);\n});","define(\"ember-bootstrap/components/bs-form/element/errors\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @show}}\n    {{#if @showMultipleErrors}}\n      <div class=\"pre-scrollable\">\n        {{#each @messages as |message|}}\n          <div class=\"invalid-feedback d-block\">{{message}}</div>\n        {{/each}}\n      </div>\n    {{else}}\n      <div class=\"invalid-feedback d-block\">{{get @messages \"0\"}}</div>\n    {{/if}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[41,[30,2],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"pre-scrollable\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,3],[[28,[37,3],[[30,3]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"invalid-feedback d-block\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"invalid-feedback d-block\\\"],[12],[1,[28,[35,4],[[30,3],\\\"0\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null]],[\\\"@show\\\",\\\"@showMultipleErrors\\\",\\\"@messages\\\",\\\"message\\\"],[\\\"if\\\",\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"get\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/errors.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/feedback-icon\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @show}}\n    <span class=\"form-control-feedback {{@iconName}}\" aria-hidden=\"true\"></span>\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,1],[15,0,[29,[\\\"form-control-feedback \\\",[30,2]]]],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@show\\\",\\\"@iconName\\\"],[\\\"if\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/feedback-icon.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/help-text\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div\n    id={{@id}}\n    class=\"form-text\"\n    ...attributes\n  >\n    {{@text}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,1,[30,1]],[24,0,\\\"form-text\\\"],[17,2],[12],[1,\\\"\\\\n  \\\"],[1,[30,3]],[1,\\\"\\\\n\\\"],[13]],[\\\"@id\\\",\\\"&attrs\\\",\\\"@text\\\"],[\\\"div\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/help-text.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/label\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _component2, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <label\n    class=\"\n      {{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-label\"}}\n      {{if @invisibleLabel (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\")}}\n      {{@labelClass}}\n      {{if this.isHorizontalAndNotCheckbox \"col-form-label\"}}\n      {{if this.isCheckbox \"form-check-label\"}}\n      {{if (bs-eq \"switch\" @controlType) (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-check-label\" \"custom-control-label\")}}\n      {{if this.isHorizontal (bs-size-class \"col-form-label\" @size)}}\"\n    for={{@formElementId}}\n    ...attributes\n  >\n    {{#if (has-block)}}\n      {{yield}}\n    {{/if}}\n    {{@label}}\n  </label>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"label\\\"],[16,0,[29,[\\\"\\\\n    \\\",\\\"form-label\\\",\\\"\\\\n    \\\",[52,[30,1],\\\"visually-hidden\\\"],\\\"\\\\n    \\\",[30,2],\\\"\\\\n    \\\",[52,[30,0,[\\\"isHorizontalAndNotCheckbox\\\"]],\\\"col-form-label\\\"],\\\"\\\\n    \\\",[52,[30,0,[\\\"isCheckbox\\\"]],\\\"form-check-label\\\"],\\\"\\\\n    \\\",[52,[28,[37,2],[\\\"switch\\\",[30,3]],null],\\\"form-check-label\\\"],\\\"\\\\n    \\\",[52,[30,0,[\\\"isHorizontal\\\"]],[28,[37,3],[\\\"col-form-label\\\",[30,4]],null]]]]],[16,\\\"for\\\",[30,5]],[17,6],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,8]],[[[1,\\\"    \\\"],[18,8,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[1,[30,7]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@invisibleLabel\\\",\\\"@labelClass\\\",\\\"@controlType\\\",\\\"@size\\\",\\\"@formElementId\\\",\\\"&attrs\\\",\\\"@label\\\",\\\"&default\\\"],[\\\"label\\\",\\\"if\\\",\\\"bs-eq\\\",\\\"bs-size-class\\\",\\\"has-block\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/label.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n  \n   @class FormElementLabel\n   @namespace Components\n   @extends Ember.Component\n   @private\n   */\n  let FormElementLabel = _exports.default = (_class = class FormElementLabel extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * [BS4 only] Property for size styling, set to 'lg', 'sm'\n       *\n       * @property size\n       * @type String\n       * @public\n       */\n      /**\n       * @property formElementId\n       * @type {String}\n       * @public\n       */\n      /**\n       * @property labelClass\n       * @type {String}\n       * @public\n       */\n      /**\n       * The form layout used for the markup generation (see http://getbootstrap.com/css/#forms):\n       *\n       * * 'horizontal'\n       * * 'vertical'\n       * * 'inline'\n       *\n       * Defaults to the parent `form`'s `formLayout` property.\n       *\n       * @property formLayout\n       * @type string\n       * @default 'vertical'\n       * @public\n       */\n      _initializerDefineProperty(this, \"formLayout\", _descriptor, this);\n      /**\n       * The type of the control widget.\n       * Supported types:\n       *\n       * * 'text'\n       * * 'checkbox'\n       * * 'textarea'\n       * * any other type will use an input tag with the `controlType` value as the type attribute (for e.g. HTML5 input\n       * types like 'email'), and the same layout as the 'text' type\n       *\n       * @property controlType\n       * @type string\n       * @default 'text'\n       * @public\n       */\n      _initializerDefineProperty(this, \"controlType\", _descriptor2, this);\n    }\n    /**\n     * @property label\n     * @type string\n     * @public\n     */\n\n    /**\n     * @property invisibleLabel\n     * @type boolean\n     * @public\n     */\n\n    get isHorizontalAndNotCheckbox() {\n      return this.isHorizontal && !this.isCheckbox;\n    }\n    /**\n     * Indicates whether the type of the control widget equals `checkbox`\n     *\n     * @property isCheckbox\n     * @type boolean\n     * @private\n     */\n    get isCheckbox() {\n      return this.args.controlType === 'checkbox';\n    }\n\n    /**\n     * Indicates whether the form type equals `horizontal`\n     *\n     * @property isHorizontal\n     * @type boolean\n     * @private\n     */\n    get isHorizontal() {\n      return this.args.formLayout === 'horizontal';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"formLayout\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'vertical';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"controlType\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'text';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementLabel);\n});","define(\"ember-bootstrap/components/bs-form/element/layout/horizontal\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @hasLabel}}\n    <@labelComponent @labelClass={{@horizontalLabelGridClass}}/>\n    <div class={{bs-form-horiz-input-class @horizontalLabelGridClass}}>\n      {{yield}}\n      <@errorsComponent/>\n      <@helpTextComponent/>\n    </div>\n  {{else}}\n    <div class=\"{{bs-form-horiz-input-class @horizontalLabelGridClass}} {{bs-form-horiz-offset-class @horizontalLabelGridClass}}\">\n      {{yield}}\n      <@errorsComponent/>\n      <@helpTextComponent/>\n    </div>\n  {{/if}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[8,[30,2],null,[[\\\"@labelClass\\\"],[[30,3]]],null],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[28,[37,2],[[30,3]],null]],[12],[1,\\\"\\\\n    \\\"],[18,6,null],[1,\\\"\\\\n    \\\"],[8,[30,4],null,null,null],[1,\\\"\\\\n    \\\"],[8,[30,5],null,null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"  \\\"],[10,0],[15,0,[29,[[28,[37,2],[[30,3]],null],\\\" \\\",[28,[37,4],[[30,3]],null]]]],[12],[1,\\\"\\\\n    \\\"],[18,6,null],[1,\\\"\\\\n    \\\"],[8,[30,4],null,null,null],[1,\\\"\\\\n    \\\"],[8,[30,5],null,null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@hasLabel\\\",\\\"@labelComponent\\\",\\\"@horizontalLabelGridClass\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"if\\\",\\\"div\\\",\\\"bs-form-horiz-input-class\\\",\\\"yield\\\",\\\"bs-form-horiz-offset-class\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/horizontal.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/layout/horizontal/checkbox\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div class=\"{{bs-form-horiz-input-class @horizontalLabelGridClass}} {{bs-form-horiz-offset-class @horizontalLabelGridClass}}\">\n    <div class=\"{{if (bs-eq \"switch\" @controlType) (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-check form-switch\" \"custom-control custom-switch\") \"form-check\"}}\">\n      {{yield}}\n      <@labelComponent/>\n      <@errorsComponent/>\n      <@helpTextComponent/>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[28,[37,1],[[30,1]],null],\\\" \\\",[28,[37,2],[[30,1]],null]]]],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[[52,[28,[37,4],[\\\"switch\\\",[30,2]],null],\\\"form-check form-switch\\\",\\\"form-check\\\"]]]],[12],[1,\\\"\\\\n    \\\"],[18,6,null],[1,\\\"\\\\n    \\\"],[8,[30,3],null,null,null],[1,\\\"\\\\n    \\\"],[8,[30,4],null,null,null],[1,\\\"\\\\n    \\\"],[8,[30,5],null,null,null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@horizontalLabelGridClass\\\",\\\"@controlType\\\",\\\"@labelComponent\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"div\\\",\\\"bs-form-horiz-input-class\\\",\\\"bs-form-horiz-offset-class\\\",\\\"if\\\",\\\"bs-eq\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/horizontal/checkbox.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/layout/inline\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @hasLabel}}\n    <@labelComponent/>\n  {{/if}}\n  {{yield}}\n  <@errorsComponent/>\n  <@helpTextComponent/>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[8,[30,2],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[18,5,null],[1,\\\"\\\\n\\\"],[8,[30,3],null,null,null],[1,\\\"\\\\n\\\"],[8,[30,4],null,null,null]],[\\\"@hasLabel\\\",\\\"@labelComponent\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"if\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/inline.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/layout/inline/checkbox\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div class=\"{{if (bs-eq \"switch\" @controlType) (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-check form-switch\" \"custom-control custom-switch\") \"form-check\"}}\">\n    {{yield}}\n    <@labelComponent/>\n    <@errorsComponent/>\n    <@helpTextComponent/>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[28,[37,2],[\\\"switch\\\",[30,1]],null],\\\"form-check form-switch\\\",\\\"form-check\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[18,5,null],[1,\\\"\\\\n  \\\"],[8,[30,2],null,null,null],[1,\\\"\\\\n  \\\"],[8,[30,3],null,null,null],[1,\\\"\\\\n  \\\"],[8,[30,4],null,null,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@controlType\\\",\\\"@labelComponent\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-eq\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/inline/checkbox.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/layout/vertical\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @hasLabel}}\n    <@labelComponent/>\n  {{/if}}\n  {{yield}}\n  <@errorsComponent/>\n  <@helpTextComponent/>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[8,[30,2],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[18,5,null],[1,\\\"\\\\n\\\"],[8,[30,3],null,null,null],[1,\\\"\\\\n\\\"],[8,[30,4],null,null,null]],[\\\"@hasLabel\\\",\\\"@labelComponent\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"if\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/vertical.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/layout/vertical/checkbox\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div class=\"{{if (bs-eq \"switch\" @controlType) (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"form-check form-switch\" \"custom-control custom-switch\") \"form-check\"}}\">\n    {{yield}}\n    <@labelComponent/>\n    <@errorsComponent/>\n    <@helpTextComponent/>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,0],[15,0,[29,[[52,[28,[37,2],[\\\"switch\\\",[30,1]],null],\\\"form-check form-switch\\\",\\\"form-check\\\"]]]],[12],[1,\\\"\\\\n  \\\"],[18,5,null],[1,\\\"\\\\n  \\\"],[8,[30,2],null,null,null],[1,\\\"\\\\n  \\\"],[8,[30,3],null,null,null],[1,\\\"\\\\n  \\\"],[8,[30,4],null,null,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@controlType\\\",\\\"@labelComponent\\\",\\\"@errorsComponent\\\",\\\"@helpTextComponent\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-eq\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/layout/vertical/checkbox.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-form/element/legend\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-form/element/label\", \"@ember/template-factory\"], function (_exports, _component, _label, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-form/element/label\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <legend\n    class=\"\n      {{if @invisibleLabel (if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\")}}\n      {{@labelClass}}\n      {{if this.isHorizontalAndNotCheckbox \"col-form-label\"}}\n      {{if this.isHorizontal (bs-size-class \"col-form-label\" @size)}}\"\n  >\n    {{#if (has-block)}}\n      {{yield}}\n    {{/if}}\n    {{@label}}\n  </legend>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[10,\\\"legend\\\"],[15,0,[29,[\\\"\\\\n    \\\",[52,[30,1],\\\"visually-hidden\\\"],\\\"\\\\n    \\\",[30,2],\\\"\\\\n    \\\",[52,[30,0,[\\\"isHorizontalAndNotCheckbox\\\"]],\\\"col-form-label\\\"],\\\"\\\\n    \\\",[52,[30,0,[\\\"isHorizontal\\\"]],[28,[37,2],[\\\"col-form-label\\\",[30,3]],null]]]]],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,5]],[[[1,\\\"    \\\"],[18,5,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[1,[30,4]],[1,\\\"\\\\n\\\"],[13]],[\\\"@invisibleLabel\\\",\\\"@labelClass\\\",\\\"@size\\\",\\\"@label\\\",\\\"&default\\\"],[\\\"legend\\\",\\\"if\\\",\\\"bs-size-class\\\",\\\"has-block\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-form/element/legend.hbs\",\n    \"isStrictMode\": false\n  });\n  class FormElementLegend extends _label.default {}\n  _exports.default = FormElementLegend;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormElementLegend);\n});","define(\"ember-bootstrap/components/bs-link-to\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/debug\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _debug, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/debug\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <LinkTo\n    @route={{@route}}\n    @models={{this.models}}\n    @query={{this.query}}\n    @disabled={{@disabled}}\n    class={{@attrClassInternal}}\n    ...attributes\n  >\n    {{yield}}\n  </LinkTo>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,0,[30,1]],[17,2]],[[\\\"@route\\\",\\\"@models\\\",\\\"@query\\\",\\\"@disabled\\\"],[[30,3],[30,0,[\\\"models\\\"]],[30,0,[\\\"query\\\"]],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[18,5,null],[1,\\\"\\\\n\\\"]],[]]]]]],[\\\"@attrClassInternal\\\",\\\"&attrs\\\",\\\"@route\\\",\\\"@disabled\\\",\\\"&default\\\"],[\\\"link-to\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-link-to.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   This is largely copied from Ember.LinkComponent. It is used as extending from Ember.LinkComponent has been deprecated.\n   We need this to\n   * register ourselves to a parent component that needs to know `active` state due to Bootstrap markup requirements, see Nav/LinkTo\n   * continue supporting positional params until we can remove support\n  \n   @class LinkComponent\n   @namespace Components\n   @extends Component\n   @private\n  */\n  let LinkComponent = _exports.default = (_class = class LinkComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n    }\n    get active() {\n      if (!this.args.route) {\n        return false;\n      }\n      return this.router.isActive(this.args.route, ...this.models, {\n        queryParams: this.query\n      });\n    }\n    get models() {\n      const {\n        model,\n        models\n      } = this.args;\n      if (model !== undefined) {\n        return [model];\n      } else if (models !== undefined) {\n        (false && !(Array.isArray(models)) && (0, _debug.assert)('The `@models` argument must be an array.', Array.isArray(models)));\n        return models;\n      } else {\n        return [];\n      }\n    }\n    get query() {\n      return this.args.query ?? {};\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, LinkComponent);\n});","define(\"ember-bootstrap/components/bs-list-group\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _component2, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#let (element this.htmlTag) as |Tag|}}\n    <Tag\n      class=\"list-group {{this.horizontalClass}} {{if this.numbered \"list-group-numbered\"}} {{if this.flush \"list-group-flush\"}}\"\n      ...attributes>\n      {{yield\n        (hash\n          item=(component (ensure-safe-component (bs-default @listGroupItemComponent (component \"bs-list-group/item\"))))\n        )\n      }}\n    </Tag>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],[[30,0,[\\\"htmlTag\\\"]]],null]],[[[1,\\\"  \\\"],[8,[30,1],[[16,0,[29,[\\\"list-group \\\",[30,0,[\\\"horizontalClass\\\"]],\\\" \\\",[52,[30,0,[\\\"numbered\\\"]],\\\"list-group-numbered\\\"],\\\" \\\",[52,[30,0,[\\\"flush\\\"]],\\\"list-group-flush\\\"]]]],[17,2]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[18,4,[[28,[37,4],null,[[\\\"item\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,3],[50,\\\"bs-list-group/item\\\",0,null,null]],null]],null],0,null,null]]]]]],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[1]]]],[\\\"Tag\\\",\\\"&attrs\\\",\\\"@listGroupItemComponent\\\",\\\"&default\\\"],[\\\"let\\\",\\\"element\\\",\\\"if\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-list-group.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Component for creating [Bootstrap List Groups](https://getbootstrap.com/docs/5.2/components/list-group/) with custom markup.\n  \n   ### Usage\n  \n   ```hbs\n   <BsListGroup as |ListGroup|>\n    <ListGroup.item>An item</ListGroup.item>\n    <ListGroup.item>A second item</ListGroup.item>\n    <ListGroup.item>A third item</ListGroup.item>\n   </BsListGroup>\n   ```\n  \n   ### Advanced Usage\n  \n   ```hbs\n   <BsListGroup as |ListGroup|>\n    {{#let (component ListGroup.item htmlTag=\"a\" actionable=true) as |ListGroupItem|}}\n      <ListGroupItem @active={{true}}>An item</ListGroupItem>\n      <ListGroupItem>A second item</ListGroupItem>\n      <ListGroupItem @disabled={{true}}>A third item</ListGroupItem>\n    {{/let}}\n   </BsListGroup>\n   ```\n  \n   The component yields references to the following contextual components, that you can use to further customize the output:\n  \n   * [ListGroup.item](Components.ListGroupItem.html)\n  \n   @class ListGroup\n   @namespace Components\n   @extends Glimmer.Component\n   @public\n   */\n  let BsListGroupComponent = _exports.default = (_class = class BsListGroupComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * Determines if list should be numbered (e.g. `ol` or `ul` should be used)\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#numbered)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"numbered\", _descriptor, this);\n      /**\n       * If `true` then some borders and rounded corners are removed\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#flush)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"flush\", _descriptor2, this);\n      /**\n       * If `true` list group layout will be horizontal\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#horizontal)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"horizontal\", _descriptor3, this);\n      /**\n       * Determines the responsive variant to make a list group horizontal starting at that breakpoint’s `min-width`.\n       *\n       * Supported values are `{sm|md|lg|xl|xxl}`\n       *\n       * Live this property empty to change the layout of list group items to horizontal across all breakpoints.\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#horizontal)\n       *\n       * @default ''\n       * @type string\n       * @public\n       */\n      _initializerDefineProperty(this, \"horizontalSize\", _descriptor4, this);\n      _defineProperty(this, \"htmlTag\", this.numbered ? 'ol' : 'ul');\n    }\n    get horizontalClass() {\n      if (this.horizontal) {\n        return this.horizontalSize ? `list-group-horizontal-${this.horizontalSize}` : 'list-group-horizontal';\n      }\n      return '';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"numbered\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"flush\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"horizontal\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"horizontalSize\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BsListGroupComponent);\n});","define(\"ember-bootstrap/components/bs-list-group/item\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _component2, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#let (element this.htmlTag) as |Tag|}}\n    <Tag\n      class=\"list-group-item {{if @type (bs-type-class \"list-group-item\" @type default=\"\")}} {{if @actionable \"list-group-item-action\"}} {{if @disabled \"disabled\"}} {{if @active \"active\"}}\"\n      aria-current=\"{{if @active true}}\"\n      aria-disabled=\"{{if @disabled true}}\"\n      type=\"{{if (bs-eq this.htmlTag \"button\") \"button\"}}\"\n       ...attributes>\n      {{yield}}\n    </Tag>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],[[30,0,[\\\"htmlTag\\\"]]],null]],[[[1,\\\"  \\\"],[8,[30,1],[[16,0,[29,[\\\"list-group-item \\\",[52,[30,2],[28,[37,3],[\\\"list-group-item\\\",[30,2]],[[\\\"default\\\"],[\\\"\\\"]]]],\\\" \\\",[52,[30,3],\\\"list-group-item-action\\\"],\\\" \\\",[52,[30,4],\\\"disabled\\\"],\\\" \\\",[52,[30,5],\\\"active\\\"]]]],[16,\\\"aria-current\\\",[29,[[52,[30,5],true]]]],[16,\\\"aria-disabled\\\",[29,[[52,[30,4],true]]]],[16,4,[29,[[52,[28,[37,4],[[30,0,[\\\"htmlTag\\\"]],\\\"button\\\"],null],\\\"button\\\"]]]],[17,6]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[18,7,null],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[1]]]],[\\\"Tag\\\",\\\"@type\\\",\\\"@actionable\\\",\\\"@disabled\\\",\\\"@active\\\",\\\"&attrs\\\",\\\"&default\\\"],[\\\"let\\\",\\\"element\\\",\\\"if\\\",\\\"bs-type-class\\\",\\\"bs-eq\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-list-group/item.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   * Component to create the items for [List Group](Components.ListGroup.html).\n   *\n   * @class ListGroupItem\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @public\n   */\n  let BsListGroupItemComponent = _exports.default = (_class = class BsListGroupItemComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * On of the allowed bs-types, e.g. `primary`, `secondary` etc.\n       *\n       * Used to add contextual classes to style list items with a stateful background and color.\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#contextual-classes)\n       *\n       * @default ''\n       * @type string\n       * @public\n       */\n      _initializerDefineProperty(this, \"type\", _descriptor, this);\n      /**\n       * Used to create actionable list group items with hover, disabled, and active states.\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#links-and-buttons)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"actionable\", _descriptor2, this);\n      /**\n       * Indicate the current active selection.\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#active-items)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"active\", _descriptor3, this);\n      /**\n       * Set `true` to make list group item appear disabled.\n       *\n       * Also see the [Bootstrap Docs](https://getbootstrap.com/docs/5.2/components/list-group/#disabled-items)\n       *\n       * @default false\n       * @type boolean\n       * @public\n       */\n      _initializerDefineProperty(this, \"disabled\", _descriptor4, this);\n    }\n    /**\n     * HTML-tag used for list-group item\n     *\n     * It depends on `actionable`.\n     *\n     * @type string\n     * @default 'li'\n     * @public\n     */\n    get htmlTag() {\n      return this.args.actionable ? 'button' : 'li';\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"type\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"actionable\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"active\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"disabled\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BsListGroupItemComponent);\n});","define(\"ember-bootstrap/components/bs-modal-simple\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <BsModal\n    @open={{@open}}\n    @fade={{@fade}}\n    @backdrop={{@backdrop}}\n    @keyboard={{@keyboard}}\n    @position={{@position}}\n    @scrollable={{@scrollable}}\n    @size={{@size}}\n    @backdropClose={{@backdropClose}}\n    @renderInPlace={{@renderInPlace}}\n    @transitionDuration={{@transitionDuration}}\n    @backdropTransitionDuration={{@backdropTransitionDuration}}\n    @onSubmit={{@onSubmit}}\n    @onHide={{@onHide}}\n    @onHidden={{@onHidden}}\n    @onShow={{@onShow}}\n    @onShown={{@onShown}}\n    ...attributes\n    as |modal|\n  >\n    <modal.header @title={{@title}} @closeButton={{@closeButton}} />\n    <modal.body>\n      {{yield\n        (hash\n          close=modal.close\n          submit=modal.submit\n        )\n      }}\n    </modal.body>\n    <modal.footer\n      @closeTitle={{@closeTitle}}\n      @submitTitle={{@submitTitle}}\n      @submitButtonType={{@submitButtonType}}\n    />\n  </BsModal>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[17,1]],[[\\\"@open\\\",\\\"@fade\\\",\\\"@backdrop\\\",\\\"@keyboard\\\",\\\"@position\\\",\\\"@scrollable\\\",\\\"@size\\\",\\\"@backdropClose\\\",\\\"@renderInPlace\\\",\\\"@transitionDuration\\\",\\\"@backdropTransitionDuration\\\",\\\"@onSubmit\\\",\\\"@onHide\\\",\\\"@onHidden\\\",\\\"@onShow\\\",\\\"@onShown\\\"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[30,9],[30,10],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[8,[30,18,[\\\"header\\\"]],null,[[\\\"@title\\\",\\\"@closeButton\\\"],[[30,19],[30,20]]],null],[1,\\\"\\\\n  \\\"],[8,[30,18,[\\\"body\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n    \\\"],[18,24,[[28,[37,2],null,[[\\\"close\\\",\\\"submit\\\"],[[30,18,[\\\"close\\\"]],[30,18,[\\\"submit\\\"]]]]]]],[1,\\\"\\\\n  \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[8,[30,18,[\\\"footer\\\"]],null,[[\\\"@closeTitle\\\",\\\"@submitTitle\\\",\\\"@submitButtonType\\\"],[[30,21],[30,22],[30,23]]],null],[1,\\\"\\\\n\\\"]],[18]]]]],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@open\\\",\\\"@fade\\\",\\\"@backdrop\\\",\\\"@keyboard\\\",\\\"@position\\\",\\\"@scrollable\\\",\\\"@size\\\",\\\"@backdropClose\\\",\\\"@renderInPlace\\\",\\\"@transitionDuration\\\",\\\"@backdropTransitionDuration\\\",\\\"@onSubmit\\\",\\\"@onHide\\\",\\\"@onHidden\\\",\\\"@onShow\\\",\\\"@onShown\\\",\\\"modal\\\",\\\"@title\\\",\\\"@closeButton\\\",\\\"@closeTitle\\\",\\\"@submitTitle\\\",\\\"@submitButtonType\\\",\\\"&default\\\"],[\\\"bs-modal\\\",\\\"yield\\\",\\\"hash\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal-simple.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Component for creating [Bootstrap modals](http://getbootstrap.com/javascript/#modals) with a some common default markup\n    including a header, footer and body. Creating a simple modal is easy:\n  \n    ```hbs\n    <BsModalSimple @title=\"Simple Dialog\">\n      Hello world!\n    </BsModalSimple>\n    ```\n  \n    This will automatically create the appropriate markup, with a modal header containing the title, and a footer containing\n    a default \"Ok\" button, that will close the modal automatically (unless you return `false` from `onHide`).\n  \n    A modal created this way will be visible at once. You can use the `{{#if ...}}` helper to hide all modal elements from\n    the DOM until needed. Or you can bind the `open` argument to trigger showing and hiding the modal:\n  \n    ```hbs\n    <BsModalSimple @open={{this.openModal}} @title=\"Simple Dialog\">\n      Hello world!\n    </BsModalSimple>\n    ```\n  \n    ### Custom Markup\n  \n    To customize the markup within the modal you can use the [<BsModal>](Components.Modal.html) component.\n  \n    ### Modals with forms\n  \n    There is a special case when you have a form inside your modals body: you probably do not want to have a submit button\n    within your form but instead in your modal footer. Hover pressing the submit button outside your form would not\n    trigger the form data to be submitted. In the example below this would not trigger the submit action of the form, and\n    thus bypass the form validation feature of the form component.\n  \n    ```hbs\n    <BsModalSimple @title=\"Form Example\" @closeTitle=\"Cancel\" @submitTitle=\"Ok\">\n      <BsForm @model={{this}} @onSubmit={{this.submit}} @submitOnEnter={{true}} as |Form|>\n        <Form.element @label=\"first name\" @property=\"firstname\" />\n        <Form.element @label=\"last name\" @property=\"lastname\" />\n      </BsForm>\n    </BsModalSimple>\n    ```\n  \n    The modal component supports this common case by triggering the submit event programmatically on the body's form if\n    present whenever the footer's submit button is pressed. To allow the form to be submitted by pressing the enter key\n    also, you must either set `@submitOnEnter={{true}}` on the `<BsForm>` or include an invisible submit button in the\n    form (`<button type=\"submit\" class=\"d-hidden\">Submit</button>`).\n  \n    ### Auto-focus\n  \n    In order to allow key handling to function, the modal's root element is given focus once the modal is shown. If your\n    modal contains an element such as a text input and you would like it to be given focus rather than the modal element,\n    then give it the HTML5 autofocus attribute:\n  \n    ```hbs\n    <BsModalSimple @title=\"Form Example\" @closeTitle=\"Cancel\" @submitTitle=\"Ok\">\n      <BsForm @model={{this}} @onSubmit={{this.submit}} @submitOnEnter={{true}} as |Form|>\n        <Form.element @label=\"first name\" @property=\"firstname\" @autofocus={{true}} />\n        <Form.element @label=\"last name\" @property=\"lastname\" />\n      </BsForm>\n    </BsModalSimple>\n    ```\n  \n    ### Modals inside wormhole\n  \n    Modals make use of the [ember-wormhole](https://github.com/yapplabs/ember-wormhole) addon, which will be installed\n    automatically alongside ember-bootstrap. This is used to allow the modal to be placed in deeply nested\n    components/templates where it belongs to logically, but to have the actual DOM elements within a special container\n    element, which is a child of ember's root element. This will make sure that modals always overlay the whole app, and\n    are not effected by parent elements with `overflow: hidden` for example.\n  \n    If you want the modal to render in place, rather than being wormholed, you can set `@renderInPlace={{true}}`.\n  \n    @class ModalSimple\n    @namespace Components\n    @public\n  */\n\n  /**\n   * The title of the modal, visible in the modal header. Is ignored if `header` is false.\n   *\n   * @property title\n   * @type string\n   * @public\n   */\n\n  /**\n   * Visibility of the modal. Toggle to show/hide with CSS transitions.\n   *\n   * When the modal is closed by user interaction this property will not update by using two-way bindings in order\n   * to follow DDAU best practices. If you want to react to such changes, subscribe to the `onHide` action\n   *\n   * @property open\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * Set to false to disable fade animations.\n   *\n   * @property fade\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * Use a semi-transparent modal background to hide the rest of the page.\n   *\n   * @property backdrop\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * Closes the modal when escape key is pressed.\n   *\n   * @property keyboard\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * Vertical position, either 'top' (default) or 'center'\n   * 'center' will apply the `modal-dialog-centered` class\n   *\n   * @property position\n   * @type {string}\n   * @default 'top'\n   * @public\n   */\n\n  /**\n   * [BS4 only!] Allows scrolling within the modal body\n   * 'true' will apply the `modal-dialog-scrollable` class\n   *\n   * @property scrollable\n   * @type boolean\n   * @default false\n   * @public\n   */\n\n  /**\n   * Property for size styling, set to null (default), 'lg' or 'sm'\n   *\n   * Also see the [Bootstrap docs](http://getbootstrap.com/javascript/#modals-sizes)\n   *\n   * @property size\n   * @type String\n   * @public\n   */\n\n  /**\n   * If true clicking on the backdrop will close the modal.\n   *\n   * @property backdropClose\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * If true component will render in place, rather than be wormholed.\n   *\n   * @property renderInPlace\n   * @type boolean\n   * @default false\n   * @public\n   */\n\n  /**\n   * The duration of the fade transition\n   *\n   * @property transitionDuration\n   * @type number\n   * @default 300\n   * @public\n   */\n\n  /**\n   * The duration of the backdrop fade transition\n   *\n   * @property backdropTransitionDuration\n   * @type number\n   * @default 150\n   * @public\n   */\n\n  /**\n   * The action to be sent when the modal footer's submit button (if present) is pressed.\n   * Note that if your modal body contains a form (e.g. [Components.Form](Components.Form.html)) this action will\n   * not be triggered. Instead, a submit event will be triggered on the form itself. See the class description for an\n   * example.\n   *\n   * @property onSubmit\n   * @type function\n   * @public\n   */\n\n  /**\n   * The action to be sent when the modal is closing.\n   * This will be triggered by pressing the modal header's close button (x button) or the modal footer's close button.\n   * Note that this will happen before the modal is hidden from the DOM, as the fade transitions will still need some\n   * time to finish. Use the `onHidden` if you need the modal to be hidden when the action triggers.\n   *\n   * You can return `false` to prevent closing the modal automatically, and do that in your action by\n   * setting `@open` to `false`.\n   *\n   * @property onHide\n   * @type function\n   * @public\n   */\n\n  /**\n   * The action to be sent after the modal has been completely hidden (including the CSS transition).\n   *\n   * @property onHidden\n   * @type function\n   * @default null\n   * @public\n   */\n\n  /**\n   * The action to be sent when the modal is opening.\n   * This will be triggered immediately after the modal is shown (so it's safe to access the DOM for\n   * size calculations and the like). This means that if `@fade={{true}}`, it will be shown in between the\n   * backdrop animation and the fade animation.\n   *\n   * @property onShow\n   * @type function\n   * @default null\n   * @public\n   */\n\n  /**\n   * The action to be sent after the modal has been completely shown (including the CSS transition).\n   *\n   * @property onShown\n   * @type function\n   * @public\n   */\n\n  /**\n   * Display a close button (x icon) in the corner of the modal header.\n   *\n   * @property closeButton\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * The title of the default close button.\n   *\n   * @property closeTitle\n   * @type string\n   * @default 'Ok'\n   * @public\n   */\n\n  /**\n   * The type of the submit button (primary button).\n   *\n   * @property submitButtonType\n   * @type string\n   * @default 'primary'\n   * @public\n   */\n\n  /**\n   * The title of the submit button (primary button). Will be ignored (i.e. no button) if set to null.\n   *\n   * @property submitTitle\n   * @type string\n   * @default null\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-modal\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/debug\", \"@glimmer/component\", \"@ember/runloop\", \"@ember/service\", \"ember-bootstrap/utils/transition-end\", \"ember-bootstrap/utils/dom\", \"ember-bootstrap/utils/decorators/uses-transition\", \"ember-bootstrap/utils/is-fastboot\", \"ember-bootstrap/utils/decorators/arg\", \"@glimmer/tracking\", \"ember-ref-bucket\", \"ember-bootstrap/components/bs-modal/header\", \"ember-bootstrap/components/bs-modal/dialog\", \"ember-bootstrap/components/bs-modal/body\", \"ember-bootstrap/components/bs-modal/footer\", \"@ember/template-factory\"], function (_exports, _component, _object, _debug, _component2, _runloop, _service, _transitionEnd, _dom, _usesTransition, _isFastboot, _arg, _tracking, _emberRefBucket, _header, _dialog, _body, _footer, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/debug\",0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"@ember/service\",0,\"ember-bootstrap/utils/transition-end\",0,\"ember-bootstrap/utils/dom\",0,\"ember-bootstrap/utils/decorators/uses-transition\",0,\"ember-bootstrap/utils/is-fastboot\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@glimmer/tracking\",0,\"ember-ref-bucket\",0,\"ember-bootstrap/components/bs-modal/header\",0,\"ember-bootstrap/components/bs-modal/dialog\",0,\"ember-bootstrap/components/bs-modal/body\",0,\"ember-bootstrap/components/bs-modal/footer\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{did-insert-helper this.handleVisibilityChanges}}\n  {{did-update-helper this.handleVisibilityChanges @open}}\n  \n  {{#if this.inDom}}\n    {{!\n      ember-on-helper do not support FastBoot yet. This guard can be removed as\n      soon as ember-on-helper guards for FastBoot itself. It is tracked in this\n      GitHub issue: https://github.com/buschtoens/ember-on-helper/issues/3\n    }}\n    {{#unless this.isFastBoot}}\n      {{on-window \"resize\" this.adjustDialog}}\n    {{/unless}}\n  \n    {{#let (component (ensure-safe-component this.dialogComponent)\n      onClose=this.close\n      fade=this._fade\n      showModal=this.showModal\n      keyboard=this.keyboard\n      size=@size\n      backdropClose=this.backdropClose\n      inDom=this.inDom\n      paddingLeft=this.paddingLeft\n      paddingRight=this.paddingRight\n      centered=(bs-eq this.position \"center\")\n      scrollable=this.scrollable\n      fullscreen=@fullscreen\n    ) as |Dialog|}}\n      {{#if this._renderInPlace}}\n        <Dialog\n          {{create-ref \"modalElement\"}}\n          ...attributes\n        >\n          {{yield\n            (hash\n              header=(component (ensure-safe-component this.headerComponent) onClose=this.close)\n              body=(ensure-safe-component this.bodyComponent)\n              footer=(component (ensure-safe-component this.footerComponent) onClose=this.close onSubmit=this.doSubmit)\n              close=this.close\n              submit=this.doSubmit\n            )\n          }}\n        </Dialog>\n        <div>\n          {{#if this.shouldShowBackdrop}}\n            <div class=\"modal-backdrop {{if this._fade \"fade\"}} {{if this.showModal \"show\"}}\" {{create-ref \"backdropElement\"}}></div>\n          {{/if}}\n        </div>\n      {{else if this.destinationElement}}\n        {{#in-element this.destinationElement insertBefore=null}}\n          <Dialog\n            {{create-ref \"modalElement\"}}\n            ...attributes\n          >\n            {{yield\n              (hash\n                header=(component (ensure-safe-component this.headerComponent) onClose=this.close)\n                body=(ensure-safe-component this.bodyComponent)\n                footer=(component (ensure-safe-component this.footerComponent) onClose=this.close onSubmit=this.doSubmit)\n                close=this.close\n                submit=this.doSubmit\n              )\n            }}\n          </Dialog>\n          <div>\n            {{#if this.shouldShowBackdrop}}\n              <div class=\"modal-backdrop {{if this._fade \"fade\"}} {{if this.showModal \"show\"}}\" {{create-ref \"backdropElement\"}}></div>\n            {{/if}}\n          </div>\n        {{/in-element}}\n      {{/if}}\n    {{/let}}\n  {{/if}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[[30,0,[\\\"handleVisibilityChanges\\\"]]],null]],[1,\\\"\\\\n\\\"],[1,[28,[35,1],[[30,0,[\\\"handleVisibilityChanges\\\"]],[30,1]],null]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"inDom\\\"]],[[[41,[51,[30,0,[\\\"isFastBoot\\\"]]],[[[1,\\\"    \\\"],[1,[28,[35,4],[\\\"resize\\\",[30,0,[\\\"adjustDialog\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[44,[[50,[28,[37,7],[[30,0,[\\\"dialogComponent\\\"]]],null],0,null,[[\\\"onClose\\\",\\\"fade\\\",\\\"showModal\\\",\\\"keyboard\\\",\\\"size\\\",\\\"backdropClose\\\",\\\"inDom\\\",\\\"paddingLeft\\\",\\\"paddingRight\\\",\\\"centered\\\",\\\"scrollable\\\",\\\"fullscreen\\\"],[[30,0,[\\\"close\\\"]],[30,0,[\\\"_fade\\\"]],[30,0,[\\\"showModal\\\"]],[30,0,[\\\"keyboard\\\"]],[30,2],[30,0,[\\\"backdropClose\\\"]],[30,0,[\\\"inDom\\\"]],[30,0,[\\\"paddingLeft\\\"]],[30,0,[\\\"paddingRight\\\"]],[28,[37,8],[[30,0,[\\\"position\\\"]],\\\"center\\\"],null],[30,0,[\\\"scrollable\\\"]],[30,3]]]]],[[[41,[30,0,[\\\"_renderInPlace\\\"]],[[[1,\\\"      \\\"],[8,[30,4],[[17,5],[4,[38,9],[\\\"modalElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[18,6,[[28,[37,11],null,[[\\\"header\\\",\\\"body\\\",\\\"footer\\\",\\\"close\\\",\\\"submit\\\"],[[50,[28,[37,7],[[30,0,[\\\"headerComponent\\\"]]],null],0,null,[[\\\"onClose\\\"],[[30,0,[\\\"close\\\"]]]]],[28,[37,7],[[30,0,[\\\"bodyComponent\\\"]]],null],[50,[28,[37,7],[[30,0,[\\\"footerComponent\\\"]]],null],0,null,[[\\\"onClose\\\",\\\"onSubmit\\\"],[[30,0,[\\\"close\\\"]],[30,0,[\\\"doSubmit\\\"]]]]],[30,0,[\\\"close\\\"]],[30,0,[\\\"doSubmit\\\"]]]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShowBackdrop\\\"]],[[[1,\\\"          \\\"],[11,0],[16,0,[29,[\\\"modal-backdrop \\\",[52,[30,0,[\\\"_fade\\\"]],\\\"fade\\\"],\\\" \\\",[52,[30,0,[\\\"showModal\\\"]],\\\"show\\\"]]]],[4,[38,9],[\\\"backdropElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"destinationElement\\\"]],[[[40,[[[1,\\\"        \\\"],[8,[30,4],[[17,5],[4,[38,9],[\\\"modalElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[18,6,[[28,[37,11],null,[[\\\"header\\\",\\\"body\\\",\\\"footer\\\",\\\"close\\\",\\\"submit\\\"],[[50,[28,[37,7],[[30,0,[\\\"headerComponent\\\"]]],null],0,null,[[\\\"onClose\\\"],[[30,0,[\\\"close\\\"]]]]],[28,[37,7],[[30,0,[\\\"bodyComponent\\\"]]],null],[50,[28,[37,7],[[30,0,[\\\"footerComponent\\\"]]],null],0,null,[[\\\"onClose\\\",\\\"onSubmit\\\"],[[30,0,[\\\"close\\\"]],[30,0,[\\\"doSubmit\\\"]]]]],[30,0,[\\\"close\\\"]],[30,0,[\\\"doSubmit\\\"]]]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShowBackdrop\\\"]],[[[1,\\\"            \\\"],[11,0],[16,0,[29,[\\\"modal-backdrop \\\",[52,[30,0,[\\\"_fade\\\"]],\\\"fade\\\"],\\\" \\\",[52,[30,0,[\\\"showModal\\\"]],\\\"show\\\"]]]],[4,[38,9],[\\\"backdropElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],\\\"%cursor:0%\\\",[28,[37,14],[[30,0,[\\\"destinationElement\\\"]]],null],null],[1,\\\"    \\\"]],[]],null]],[]]]],[4]]]],[]],null]],[\\\"@open\\\",\\\"@size\\\",\\\"@fullscreen\\\",\\\"Dialog\\\",\\\"&attrs\\\",\\\"&default\\\"],[\\\"did-insert-helper\\\",\\\"did-update-helper\\\",\\\"if\\\",\\\"unless\\\",\\\"on-window\\\",\\\"let\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-eq\\\",\\\"create-ref\\\",\\\"yield\\\",\\\"hash\\\",\\\"div\\\",\\\"in-element\\\",\\\"-in-el-null\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal.hbs\",\n    \"isStrictMode\": false\n  });\n  function nextRunloop() {\n    return new Promise(resolve => (0, _runloop.next)(resolve, undefined));\n  }\n  function afterRender() {\n    return new Promise(resolve => (0, _runloop.schedule)('afterRender', resolve, undefined));\n  }\n  /**\n    Component for creating [Bootstrap modals](http://getbootstrap.com/javascript/#modals) with custom markup.\n  \n    ### Usage\n  \n    ```hbs\n    <BsModal @onSubmit={{this.submit}} as |modal|>\n      <modal.header>\n        <h4 class=\"modal-title\"><i class=\"glyphicon glyphicon-alert\"></i> Alert</h4>\n      </modal.header>\n      <modal.body>\n        Are you absolutely sure you want to do that???\n      </modal.body>\n      <modal.footer as |footer|>\n        <BsButton @onClick={{modal.close}} @type=\"danger\">Oh no, forget it!</BsButton>\n        <BsButton @onClick={{modal.submit}} @type=\"success\">Yeah!</BsButton>\n      </modal.footer>\n    </BsModal>\n    ```\n  \n    The component yields references to the following contextual components, that you can use to further customize the output:\n  \n    * [modal.body](Components.ModalBody.html)\n    * [modal.header](Components.ModalHeader.html)\n    * [modal.footer](Components.ModalFooter.html)\n  \n    Furthermore references to the following actions are yielded:\n  \n    * `close`: triggers the `onHide` action and closes the modal\n    * `submit`: triggers the `onSubmit` action (or the submit event on a form if present in the body element)\n  \n    ### Further reading\n  \n    See the documentation of the [bs-modal-simple](Components.ModalSimple.html) component for further examples.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Modal\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let Modal = _exports.default = (_dec = (0, _service.service)('-document'), _dec2 = (0, _usesTransition.default)('_fade'), _dec3 = (0, _emberRefBucket.ref)('modalElement'), _dec4 = (0, _emberRefBucket.ref)('backdropElement'), _class = class Modal extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"document\", _descriptor, this);\n      /**\n       * @property _isOpen\n       * @private\n       */\n      _defineProperty(this, \"_isOpen\", false);\n      /**\n       * Visibility of the modal. Toggle to show/hide with CSS transitions.\n       *\n       * When the modal is closed by user interaction this property will not update by using two-way bindings in order\n       * to follow DDAU best practices. If you want to react to such changes, subscribe to the `onHide` action\n       *\n       * @property open\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"open\", _descriptor2, this);\n      /**\n       * Used to apply Bootstrap's visibility classes.\n       *\n       * @property showModal\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _initializerDefineProperty(this, \"showModal\", _descriptor3, this);\n      /**\n       * Render modal markup?\n       *\n       * @property inDom\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _initializerDefineProperty(this, \"inDom\", _descriptor4, this);\n      /**\n       * @property paddingLeft\n       * @type number|undefined\n       * @private\n       */\n      _initializerDefineProperty(this, \"paddingLeft\", _descriptor5, this);\n      /**\n       * @property paddingRight\n       * @type number|undefined\n       * @private\n       */\n      _initializerDefineProperty(this, \"paddingRight\", _descriptor6, this);\n      /**\n       * Use a semi-transparent modal background to hide the rest of the page.\n       *\n       * @property backdrop\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"backdrop\", _descriptor7, this);\n      /**\n       * @property shouldShowBackdrop\n       * @type boolean\n       * @private\n       */\n      _initializerDefineProperty(this, \"shouldShowBackdrop\", _descriptor8, this);\n      /**\n       * Closes the modal when escape key is pressed.\n       *\n       * @property keyboard\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"keyboard\", _descriptor9, this);\n      /**\n       * Vertical position, either 'top' (default) or 'center'\n       * 'center' will apply the `modal-dialog-centered` class\n       *\n       * @property position\n       * @type {string}\n       * @default 'top'\n       * @public\n       */\n      _initializerDefineProperty(this, \"position\", _descriptor0, this);\n      /**\n       * [BS4 only!] Allows scrolling within the modal body\n       * 'true' will apply the `modal-dialog-scrollable` class\n       *\n       * @property scrollable\n       * @type boolean\n       * @default false\n       * @public\n       */\n      _initializerDefineProperty(this, \"scrollable\", _descriptor1, this);\n      /**\n       *  [BS5 only!] Allows adding fullscreen mode for modals. It will\n       *  apply the `modal-fullscreen` class when using `true` and\n       *  `modal-fullscreen-[x]-down` class when using BS breakpoints\n       *   ([x] = `sm`, `md`, `lg`, `xl`, `xxl`).\n       *\n       * Also see the [Bootstrap docs](https://getbootstrap.com/docs/5.1/components/modal/#fullscreen-modal)\n       *\n       * @property fullscreen\n       * @type {(Boolean|String)}\n       * @default false\n       * @public\n       */\n      /**\n       * @property dialogComponent\n       * @type {String}\n       * @private\n       */\n      /**\n       * @property headerComponent\n       * @type {String}\n       * @private\n       */\n      /**\n       * @property bodyComponent\n       * @type {String}\n       * @private\n       */\n      /**\n       * @property footerComponent\n       * @type {String}\n       * @private\n       */\n      /**\n       * Property for size styling, set to null (default), 'lg' or 'sm'\n       *\n       * Also see the [Bootstrap docs](http://getbootstrap.com/javascript/#modals-sizes)\n       *\n       * @property size\n       * @type String\n       * @public\n       */\n      /**\n       * If true clicking on the backdrop will close the modal.\n       *\n       * @property backdropClose\n       * @type boolean\n       * @default true\n       * @public\n       */\n      _initializerDefineProperty(this, \"backdropClose\", _descriptor10, this);\n      /**\n       * If true component will render in place, rather than be wormholed.\n       *\n       * @property renderInPlace\n       * @type boolean\n       * @default false\n       * @public\n       */\n      _initializerDefineProperty(this, \"renderInPlace\", _descriptor11, this);\n      /**\n       * The duration of the fade transition\n       *\n       * @property transitionDuration\n       * @type number\n       * @default 300\n       * @public\n       */\n      _initializerDefineProperty(this, \"transitionDuration\", _descriptor12, this);\n      /**\n       * The duration of the backdrop fade transition\n       *\n       * @property backdropTransitionDuration\n       * @type number\n       * @default 150\n       * @public\n       */\n      _initializerDefineProperty(this, \"backdropTransitionDuration\", _descriptor13, this);\n      /**\n       * Use CSS transitions?\n       *\n       * @property usesTransition\n       * @type boolean\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"usesTransition\", _descriptor14, this);\n      _defineProperty(this, \"destinationElement\", (0, _dom.getDestinationElement)(this));\n      /**\n       * The DOM element of the `.modal` element.\n       *\n       * @property modalElement\n       * @type HTMLElement\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"modalElement\", _descriptor15, this);\n      /**\n       * The DOM element of the backdrop element.\n       *\n       * @property backdropElement\n       * @type HTMLElement\n       * @readonly\n       * @private\n       */\n      _initializerDefineProperty(this, \"backdropElement\", _descriptor16, this);\n      /**\n       * @type boolean\n       * @readonly\n       * @private\n       */\n      _defineProperty(this, \"isFastBoot\", (0, _isFastboot.default)(this));\n      /**\n       * The action to be sent when the modal footer's submit button (if present) is pressed.\n       * Note that if your modal body contains a form (e.g. [Components.Form](Components.Form.html)) this action will\n       * not be triggered. Instead, a submit event will be triggered on the form itself. See the class description for an\n       * example.\n       *\n       * @property onSubmit\n       * @type function\n       * @public\n       */\n      /**\n       * The action to be sent when the modal is closing.\n       * This will be triggered by pressing the modal header's close button (x button) or the modal footer's close button.\n       * Note that this will happen before the modal is hidden from the DOM, as the fade transitions will still need some\n       * time to finish. Use the `onHidden` if you need the modal to be hidden when the action triggers.\n       *\n       * You can return false to prevent closing the modal automatically, and do that in your action by\n       * setting `open` to false.\n       *\n       * @property onHide\n       * @type function\n       * @public\n       */\n      /**\n       * The action to be sent after the modal has been completely hidden (including the CSS transition).\n       *\n       * @property onHidden\n       * @type function\n       * @default null\n       * @public\n       */\n      /**\n       * The action to be sent when the modal is opening.\n       * This will be triggered immediately after the modal is shown (so it's safe to access the DOM for\n       * size calculations and the like). This means that if fade=true, it will be shown in between the\n       * backdrop animation and the fade animation.\n       *\n       * @property onShow\n       * @type function\n       * @default null\n       * @public\n       */\n      /**\n       * The action to be sent after the modal has been completely shown (including the CSS transition).\n       *\n       * @property onShown\n       * @type function\n       * @public\n       */\n      /**\n       * @private\n       */\n      _defineProperty(this, \"bodyIsOverflowing\", false);\n      /**\n       * @private\n       */\n      _defineProperty(this, \"_originalBodyPad\", '');\n    }\n    /**\n     * Set to false to disable fade animations.\n     *\n     * @property fade\n     * @type boolean\n     * @default true\n     * @public\n     */\n\n    get _fade() {\n      const isFB = (0, _isFastboot.default)(this);\n      return this.args.fade === undefined ? !isFB : this.args.fade;\n    }\n    /**\n     * @property _renderInPlace\n     * @type boolean\n     * @private\n     */\n    get _renderInPlace() {\n      return this.renderInPlace || !this.destinationElement;\n    }\n    close() {\n      if (this.args.onHide?.() !== false) {\n        this.hide();\n      }\n    }\n    doSubmit() {\n      const forms = this.modalElement.querySelectorAll('.modal-body form');\n      if (forms.length > 0) {\n        // trigger submit event on body forms\n        const event = document.createEvent('Events');\n        event.initEvent('submit', true, true);\n        Array.prototype.slice.call(forms).forEach(form => form.dispatchEvent(event));\n      } else {\n        // if we have no form, we send a submit action\n        this.args.onSubmit?.();\n      }\n    }\n\n    /**\n     * Show the modal\n     *\n     * @method show\n     * @private\n     */\n    async show() {\n      if (this._isOpen) {\n        return;\n      }\n      this._isOpen = true;\n      this.addBodyClass();\n      this.inDom = true;\n      await this.showBackdrop();\n      if (this.isDestroyed) {\n        return;\n      }\n      if (!(0, _isFastboot.default)(this)) {\n        this.checkScrollbar();\n        this.setScrollbar();\n      }\n      await afterRender();\n      const {\n        modalElement\n      } = this;\n      if (!modalElement) {\n        return;\n      }\n      if (!(0, _isFastboot.default)(this)) {\n        modalElement.scrollTop = 0;\n        this.adjustDialog();\n      }\n      this.showModal = true;\n      this.args.onShow?.();\n      if (this.usesTransition) {\n        await (0, _transitionEnd.default)(modalElement, this.transitionDuration);\n      }\n      this.args.onShown?.();\n    }\n\n    /**\n     * Hide the modal\n     *\n     * @method hide\n     * @private\n     */\n    async hide() {\n      if (!this._isOpen) {\n        return;\n      }\n      this._isOpen = false;\n      this.showModal = false;\n      if (this.usesTransition) {\n        await (0, _transitionEnd.default)(this.modalElement, this.transitionDuration);\n      }\n      await this.hideModal();\n    }\n\n    /**\n     * Clean up after modal is hidden and call onHidden\n     *\n     * @method hideModal\n     * @private\n     */\n    async hideModal() {\n      if (this.isDestroyed) {\n        return;\n      }\n      await this.hideBackdrop();\n      this.removeBodyClass();\n      if (!(0, _isFastboot.default)(this)) {\n        this.resetAdjustments();\n        this.resetScrollbar();\n      }\n      this.inDom = false;\n      this.args.onHidden?.();\n    }\n\n    /**\n     * Show the backdrop\n     *\n     * @method showBackdrop\n     * @async\n     * @private\n     */\n    async showBackdrop() {\n      if (!this.backdrop || !this.usesTransition) {\n        return;\n      }\n      this.shouldShowBackdrop = true;\n      await nextRunloop();\n      const {\n        backdropElement\n      } = this;\n      (false && !(backdropElement) && (0, _debug.assert)('Backdrop element should be in DOM', backdropElement));\n      await (0, _transitionEnd.default)(backdropElement, this.backdropTransitionDuration);\n    }\n\n    /**\n     * Hide the backdrop\n     *\n     * @method hideBackdrop\n     * @async\n     * @private\n     */\n    async hideBackdrop() {\n      if (!this.backdrop) {\n        return;\n      }\n      if (this.usesTransition) {\n        const {\n          backdropElement\n        } = this;\n        (false && !(backdropElement) && (0, _debug.assert)('Backdrop element should be in DOM', backdropElement));\n        await (0, _transitionEnd.default)(backdropElement, this.backdropTransitionDuration);\n      }\n      if (this.isDestroyed) {\n        return;\n      }\n      this.shouldShowBackdrop = false;\n    }\n\n    /**\n     * @method adjustDialog\n     * @private\n     */\n    adjustDialog() {\n      const modalIsOverflowing = this.modalElement.scrollHeight > document.documentElement.clientHeight;\n      this.paddingLeft = !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : undefined;\n      this.paddingRight = this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : undefined;\n    }\n\n    /**\n     * @method resetAdjustments\n     * @private\n     */\n    resetAdjustments() {\n      this.paddingLeft = undefined;\n      this.paddingRight = undefined;\n    }\n\n    /**\n     * @method checkScrollbar\n     * @private\n     */\n    checkScrollbar() {\n      const fullWindowWidth = window.innerWidth;\n      this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;\n    }\n\n    /**\n     * @method setScrollbar\n     * @private\n     */\n    setScrollbar() {\n      const bodyPad = parseInt(document.body.style.paddingRight || '0', 10);\n      this._originalBodyPad = document.body.style.paddingRight || '';\n      if (this.bodyIsOverflowing) {\n        document.body.style.paddingRight = `${bodyPad + this.scrollbarWidth}`;\n      }\n    }\n\n    /**\n     * @method resetScrollbar\n     * @private\n     */\n    resetScrollbar() {\n      document.body.style.paddingRight = this._originalBodyPad;\n    }\n    addBodyClass() {\n      // special handling for FastBoot, where real `document` is not available\n      if ((0, _isFastboot.default)(this)) {\n        // a SimpleDOM instance with just a subset of the DOM API!\n        const document = this.document;\n        const existingClasses = document.body.getAttribute('class') || '';\n        if (!existingClasses.includes('modal-open')) {\n          document.body.setAttribute('class', `modal-open ${existingClasses}`);\n        }\n      } else {\n        document.body.classList.add('modal-open');\n      }\n    }\n    removeBodyClass() {\n      if ((0, _isFastboot.default)(this)) {\n        // no need for FastBoot support here\n        return;\n      }\n      document.body.classList.remove('modal-open');\n    }\n\n    /**\n     * @property scrollbarWidth\n     * @type number\n     * @readonly\n     * @private\n     */\n    get scrollbarWidth() {\n      const scrollDiv = document.createElement('div');\n      scrollDiv.className = 'modal-scrollbar-measure';\n      const modalEl = this.modalElement;\n      if (!modalEl.parentNode || !scrollDiv.parentNode) {\n        return 0;\n      }\n      modalEl.parentNode.insertBefore(scrollDiv, modalEl.nextSibling);\n      const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n      scrollDiv.parentNode.removeChild(scrollDiv);\n      return scrollbarWidth;\n    }\n    get dialogComponent() {\n      return this.args.dialogComponent ?? _dialog.default;\n    }\n    get headerComponent() {\n      return this.args.headerComponent ?? _header.default;\n    }\n    get footerComponent() {\n      return this.args.footerComponent ?? _footer.default;\n    }\n    get bodyComponent() {\n      return this.args.bodyComponent ?? _body.default;\n    }\n    willDestroy(...rest) {\n      super.willDestroy(...rest);\n      this.removeBodyClass();\n      if (!(0, _isFastboot.default)(this)) {\n        this.resetScrollbar();\n      }\n    }\n    handleVisibilityChanges() {\n      if (this.open) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"document\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"open\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showModal\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.open && (!this._fade || (0, _isFastboot.default)(this));\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"inDom\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.open;\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"paddingLeft\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"paddingRight\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"backdrop\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"shouldShowBackdrop\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.open && this.backdrop;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"keyboard\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"position\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'top';\n    }\n  }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"scrollable\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"backdropClose\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"renderInPlace\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"transitionDuration\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 300;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"backdropTransitionDuration\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 150;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"usesTransition\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"modalElement\", [_dec3], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"backdropElement\", [_dec4], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"close\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"close\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"doSubmit\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"doSubmit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"adjustDialog\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"adjustDialog\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"scrollbarWidth\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"scrollbarWidth\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleVisibilityChanges\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleVisibilityChanges\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Modal);\n});","define(\"ember-bootstrap/components/bs-modal/body\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"modal-body\" ...attributes>\n    {{yield}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"modal-body\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,2,null],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/body.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   *\n   * Modal body element used within [Components.Modal](Components.Modal.html) components. See there for examples.\n   *\n   * @class ModalBody\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-modal/dialog\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/utils\", \"@glimmer/component\", \"@ember/runloop\", \"ember-ref-bucket\", \"@glimmer/tracking\", \"@ember/object/internals\", \"@ember/template-factory\"], function (_exports, _component, _object, _utils, _component2, _runloop, _emberRefBucket, _tracking, _internals, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/utils\",0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"ember-ref-bucket\",0,\"@glimmer/tracking\",0,\"@ember/object/internals\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    role=\"dialog\"\n    tabindex=\"-1\"\n    aria-labelledby={{this.titleId}}\n    class=\"modal {{if @fade \"fade\"}} {{if @showModal \"show\"}} {{if @inDom \"d-block\"}}\"\n    ...attributes\n    {{on \"keydown\" this.handleKeyDown}}\n    {{on \"mousedown\" this.handleMouseDown}}\n    {{on \"mouseup\" this.handleMouseUp}}\n    {{on \"click\" this.handleClick}}\n    {{style\n      paddingLeft=(concat @paddingLeft \"px\")\n      paddingRight=(concat @paddingRight \"px\")\n      display=(if @inDom \"block\" \"\")\n    }}\n    {{create-ref \"mainNode\"}}\n    {{did-insert this.getOrSetTitleId}}\n    {{did-insert this.setInitialFocus}}\n  >\n    <div\n      class=\"modal-dialog\n        {{this.sizeClass}}\n        {{if @centered \"modal-dialog-centered\"}}\n        {{if @scrollable \"modal-dialog-scrollable\"}}\n        {{if\n          (macroCondition (macroGetOwnConfig \"isBS5\"))\n          (if\n            @fullscreen (if (bs-eq @fullscreen true) \"modal-fullscreen\" (concat \"modal-fullscreen-\" @fullscreen \"-down\"))\n          )\n        }}\n        \"\n      role=\"document\"\n    >\n      <div\n        class=\"modal-content\"\n        tabindex=\"-1\"\n        {{focus-trap shouldSelfFocus=true focusTrapOptions=(hash clickOutsideDeactivates=@backdropClose fallbackFocus=\".modal\" escapeDeactivates=@keyboard)}}\n      >\n        {{yield}}\n      </div>\n    </div>\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,\\\"role\\\",\\\"dialog\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[16,\\\"aria-labelledby\\\",[30,0,[\\\"titleId\\\"]]],[16,0,[29,[\\\"modal \\\",[52,[30,1],\\\"fade\\\"],\\\" \\\",[52,[30,2],\\\"show\\\"],\\\" \\\",[52,[30,3],\\\"d-block\\\"]]]],[17,4],[4,[38,2],[\\\"keydown\\\",[30,0,[\\\"handleKeyDown\\\"]]],null],[4,[38,2],[\\\"mousedown\\\",[30,0,[\\\"handleMouseDown\\\"]]],null],[4,[38,2],[\\\"mouseup\\\",[30,0,[\\\"handleMouseUp\\\"]]],null],[4,[38,2],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[4,[38,3],null,[[\\\"paddingLeft\\\",\\\"paddingRight\\\",\\\"display\\\"],[[28,[37,4],[[30,5],\\\"px\\\"],null],[28,[37,4],[[30,6],\\\"px\\\"],null],[52,[30,3],\\\"block\\\",\\\"\\\"]]]],[4,[38,5],[\\\"mainNode\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[4,[38,6],[[30,0,[\\\"getOrSetTitleId\\\"]]],null],[4,[38,6],[[30,0,[\\\"setInitialFocus\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[10,0],[15,0,[29,[\\\"modal-dialog\\\\n      \\\",[30,0,[\\\"sizeClass\\\"]],\\\"\\\\n      \\\",[52,[30,7],\\\"modal-dialog-centered\\\"],\\\"\\\\n      \\\",[52,[30,8],\\\"modal-dialog-scrollable\\\"],\\\"\\\\n      \\\",[52,[30,9],[52,[28,[37,7],[[30,9],true],null],\\\"modal-fullscreen\\\",[28,[37,4],[\\\"modal-fullscreen-\\\",[30,9],\\\"-down\\\"],null]]],\\\"\\\\n      \\\"]]],[14,\\\"role\\\",\\\"document\\\"],[12],[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"modal-content\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[4,[38,8],null,[[\\\"shouldSelfFocus\\\",\\\"focusTrapOptions\\\"],[true,[28,[37,9],null,[[\\\"clickOutsideDeactivates\\\",\\\"fallbackFocus\\\",\\\"escapeDeactivates\\\"],[[30,10],\\\".modal\\\",[30,11]]]]]]],[12],[1,\\\"\\\\n      \\\"],[18,12,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@fade\\\",\\\"@showModal\\\",\\\"@inDom\\\",\\\"&attrs\\\",\\\"@paddingLeft\\\",\\\"@paddingRight\\\",\\\"@centered\\\",\\\"@scrollable\\\",\\\"@fullscreen\\\",\\\"@backdropClose\\\",\\\"@keyboard\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"on\\\",\\\"style\\\",\\\"concat\\\",\\\"create-ref\\\",\\\"did-insert\\\",\\\"bs-eq\\\",\\\"focus-trap\\\",\\\"hash\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/dialog.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   * Internal component for modal's markup and event handling. Should not be used directly.\n   *\n   * @class ModalDialog\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @private\n   */\n  let ModalDialog = _exports.default = (_dec = (0, _emberRefBucket.ref)('mainNode'), _class = class ModalDialog extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property id\n       * @type null | HTMLElement\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      /**\n       * The id of the `.modal-title` element\n       *\n       * @property titleId\n       * @type string\n       * @default null\n       * @private\n       */\n      _initializerDefineProperty(this, \"titleId\", _descriptor2, this);\n      /**\n       * If true clicking on the backdrop will be ignored and will not close modal.\n       *\n       * @property ignoreBackdropClick\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _defineProperty(this, \"ignoreBackdropClick\", false);\n      /**\n       * The target DOM element of mouse down event.\n       *\n       * @property mouseDownElement\n       * @type object\n       * @default null\n       * @private\n       */\n      _defineProperty(this, \"mouseDownElement\", null);\n    }\n    /**\n     * Name of the size class\n     *\n     * @property sizeClass\n     * @type string\n     * @readOnly\n     * @private\n     */\n    get sizeClass() {\n      const size = this.args.size;\n      return (0, _utils.isBlank)(size) ? null : `modal-${size}`;\n    }\n    /**\n     * Gets or sets the id of the title element for aria accessibility tags\n     *\n     * @method getSetTitleID\n     * @private\n     */\n    getOrSetTitleId(modalNode) {\n      // Title element may be set by user, so we have to try and find it to set the id\n      let nodeId = null;\n      if (modalNode) {\n        const titleNode = modalNode.querySelector('.modal-title');\n        if (titleNode) {\n          //Get title id of .modal-title\n          nodeId = titleNode.id;\n          if (!nodeId) {\n            //no title id so we set one\n            nodeId = `${(0, _internals.guidFor)(this)}-title`;\n            titleNode.id = nodeId;\n          }\n        }\n      }\n      this.titleId = nodeId;\n    }\n    setInitialFocus(element) {\n      const autofocus = element && element.querySelector('[autofocus]');\n      if (autofocus instanceof HTMLElement) {\n        (0, _runloop.next)(() => autofocus.focus());\n      }\n    }\n    /**\n     * @event onClose\n     * @public\n     */\n\n    handleKeyDown(e) {\n      const code = e.keyCode || e.which;\n      if (code === 27 && this.args.keyboard) {\n        this.args.onClose?.();\n      }\n    }\n    handleClick(e) {\n      if (this.ignoreBackdropClick) {\n        this.ignoreBackdropClick = false;\n        return;\n      }\n      if (e.target !== this._element || !this.args.backdropClose) {\n        return;\n      }\n      this.args.onClose?.();\n    }\n    handleMouseDown(e) {\n      this.mouseDownElement = e.target;\n    }\n    handleMouseUp(e) {\n      if (this.mouseDownElement !== this._element && e.target === this._element) {\n        this.ignoreBackdropClick = true;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"titleId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"getOrSetTitleId\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"getOrSetTitleId\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setInitialFocus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setInitialFocus\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleKeyDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleKeyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleMouseDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleMouseDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"handleMouseUp\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleMouseUp\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ModalDialog);\n});","define(\"ember-bootstrap/components/bs-modal/footer\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#let (ensure-safe-component (bs-default @buttonComponent (component \"bs-button\"))) as |Button|}}\n    <div class=\"modal-footer\" ...attributes {{on \"submit\" (bs-default @onSubmit (bs-noop))}}>\n      {{#if (has-block)}}\n        {{yield}}\n      {{else}}\n        {{#if @submitTitle}}\n          <Button @onClick={{@onClose}}>{{bs-default @closeTitle \"Ok\"}}</Button>\n          <Button\n            @type={{bs-default @submitButtonType \"primary\"}}\n            @onClick={{@onSubmit}}\n            {{bs-conditional-attribute \"disabled\" @submitDisabled \"disabled\"}}\n          >\n            {{@submitTitle}}\n          </Button>\n        {{else}}\n          <Button @type=\"primary\" @onClick={{@onClose}}>{{bs-default @closeTitle \"Ok\"}}</Button>\n        {{/if}}\n      {{/if}}\n    </div>\n  {{/let}}\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],[[28,[37,2],[[30,1],[50,\\\"bs-button\\\",0,null,null]],null]],null]],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"modal-footer\\\"],[17,3],[4,[38,5],[\\\"submit\\\",[28,[37,2],[[30,4],[28,[37,6],null,null]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,10]],[[[1,\\\"      \\\"],[18,10,null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,5],[[[1,\\\"        \\\"],[8,[30,2],null,[[\\\"@onClick\\\"],[[30,6]]],[[\\\"default\\\"],[[[[1,[28,[35,2],[[30,7],\\\"Ok\\\"],null]]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[30,2],[[4,[38,10],[\\\"disabled\\\",[30,9],\\\"disabled\\\"],null]],[[\\\"@type\\\",\\\"@onClick\\\"],[[28,[37,2],[[30,8],\\\"primary\\\"],null],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,5]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[30,2],null,[[\\\"@type\\\",\\\"@onClick\\\"],[\\\"primary\\\",[30,6]]],[[\\\"default\\\"],[[[[1,[28,[35,2],[[30,7],\\\"Ok\\\"],null]]],[]]]]],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[2]]]],[\\\"@buttonComponent\\\",\\\"Button\\\",\\\"&attrs\\\",\\\"@onSubmit\\\",\\\"@submitTitle\\\",\\\"@onClose\\\",\\\"@closeTitle\\\",\\\"@submitButtonType\\\",\\\"@submitDisabled\\\",\\\"&default\\\"],[\\\"let\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\",\\\"div\\\",\\\"on\\\",\\\"bs-noop\\\",\\\"if\\\",\\\"has-block\\\",\\\"yield\\\",\\\"bs-conditional-attribute\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/footer.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   *\n   * Modal footer element used within [Components.Modal](Components.Modal.html) components. See there for examples.\n   *\n   * @class ModalFooter\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @public\n   */\n\n  /**\n   * The title of the default close button. Will be ignored (i.e. no close button) if you provide your own block\n   * template.\n   *\n   * @property closeTitle\n   * @type string\n   * @default 'Ok'\n   * @public\n   */\n\n  /**\n   * The title of the submit button (primary button). Will be ignored (i.e. no button) if set to `null` or if you provide\n   * your own block template.\n   *\n   * @property submitTitle\n   * @type string\n   * @default null\n   * @public\n   */\n\n  /**\n   * Set to `true` to disable the submit button. If you bind this to some property that indicates if submitting is allowed\n   * (form validation for example) this can be used to prevent the user from pressing the submit button.\n   *\n   * @property submitDisabled\n   * @type boolean\n   * @default false\n   * @public\n   */\n\n  /**\n   * The type of the submit button (primary button).\n   *\n   * @property submitButtonType\n   * @type string\n   * @default 'primary'\n   * @public\n   */\n\n  /**\n   * @property buttonComponent\n   * @type {String}\n   * @private\n   */\n\n  /**\n   * The action to send to the parent modal component when the modal footer's form is submitted\n   *\n   * @event onSubmit\n   * @public\n   */\n\n  /**\n   * @event onClose\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-modal/header\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#let\n    (ensure-safe-component (bs-default @titleComponent (component \"bs-modal/header/title\")))\n    (component (ensure-safe-component (bs-default @closeComponent (component \"bs-modal/header/close\"))) onClick=@onClose)\n  as |Title Close|\n  }}\n    <div class=\"modal-header\" ...attributes>\n      {{#if (has-block-params)}}\n        {{yield\n          (hash\n            title=Title\n            close=Close\n          )\n        }}\n      {{else}}\n        {{#if (has-block)}}\n          {{yield\n            (hash\n              title=Title\n              close=Close\n            )\n          }}\n        {{else}}\n          <Title>{{@title}}</Title>\n        {{/if}}\n        {{#if (bs-default @closeButton true)}}\n          <Close/>\n        {{/if}}\n      {{/if}}\n    </div>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],[[28,[37,2],[[30,1],[50,\\\"bs-modal/header/title\\\",0,null,null]],null]],null],[50,[28,[37,1],[[28,[37,2],[[30,2],[50,\\\"bs-modal/header/close\\\",0,null,null]],null]],null],0,null,[[\\\"onClick\\\"],[[30,3]]]]],[[[1,\\\"  \\\"],[11,0],[24,0,\\\"modal-header\\\"],[17,6],[12],[1,\\\"\\\\n\\\"],[41,[49,[30,9]],[[[1,\\\"      \\\"],[18,9,[[28,[37,8],null,[[\\\"title\\\",\\\"close\\\"],[[30,4],[30,5]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[48,[30,9]],[[[1,\\\"        \\\"],[18,9,[[28,[37,8],null,[[\\\"title\\\",\\\"close\\\"],[[30,4],[30,5]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[30,4],null,null,[[\\\"default\\\"],[[[[1,[30,7]]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[41,[28,[37,2],[[30,8],true],null],[[[1,\\\"        \\\"],[8,[30,5],null,null,null],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[4,5]]]],[\\\"@titleComponent\\\",\\\"@closeComponent\\\",\\\"@onClose\\\",\\\"Title\\\",\\\"Close\\\",\\\"&attrs\\\",\\\"@title\\\",\\\"@closeButton\\\",\\\"&default\\\"],[\\\"let\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\",\\\"div\\\",\\\"if\\\",\\\"has-block-params\\\",\\\"yield\\\",\\\"hash\\\",\\\"has-block\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/header.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   *\n   * Modal header element used within [Components.Modal](Components.Modal.html) components. See there for examples.\n   *\n   * @class ModalHeader\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @public\n   */\n\n  /**\n   * Show a close button (x icon)\n   *\n   * @property closeButton\n   * @type boolean\n   * @default true\n   * @public\n   */\n\n  /**\n   * The title to display in the modal header\n   *\n   * @property title\n   * @type string\n   * @default null\n   * @public\n   */\n\n  /**\n   * @property titleComponent\n   * @type {String}\n   * @private\n   */\n\n  /**\n   * @property closeComponent\n   * @type {String}\n   * @private\n   */\n\n  /**\n   * @event onClose\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-modal/header/close\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <button type=\"button\" aria-label=\"Close\" class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"btn-close\" \"close\"}} ...attributes {{on \"click\" (bs-default @onClick (bs-noop))}}>\n    {{#if (macroCondition (macroGetOwnConfig \"isBS4\"))}}<span aria-hidden=\"true\">&times;</span>{{/if}}\n  </button>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"button\\\"],[24,4,\\\"button\\\"],[24,\\\"aria-label\\\",\\\"Close\\\"],[24,0,\\\"btn-close\\\"],[17,1],[4,[38,1],[\\\"click\\\",[28,[37,2],[[30,2],[28,[37,3],null,null]],null]],null],[12],[1,\\\"\\\\n  \\\"],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"@onClick\\\"],[\\\"button\\\",\\\"on\\\",\\\"bs-default\\\",\\\"bs-noop\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/header/close.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   *\n   * @class ModalHeaderClose\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @private\n   */\n\n  /**\n   * @event onClick\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-modal/header/title\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <h5 class=\"modal-title\" ...attributes>\n    {{yield}}\n  </h5>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"h5\\\"],[24,0,\\\"modal-title\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,2,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"h5\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-modal/header/title.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   *\n   * @class ModalHeaderTitle\n   * @namespace Components\n   * @extends Glimmer.Component\n   * @private\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-nav\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <ul class=\"nav {{this.typeClass}} {{this.additionalClass}} {{if this.justified \"nav-justified\"}} {{if this.stacked \"flex-column\"}} {{if this.fill \"nav-fill\"}}\" ...attributes>\n    {{yield\n      (hash\n        item=(ensure-safe-component (bs-default @itemComponent (component \"bs-nav/item\")))\n        link-to=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"nav-link\")))\n        linkTo=(ensure-safe-component (bs-default @linkToComponent (component \"bs-link-to\" attrClassInternal=\"nav-link\")))\n        dropdown=(component (ensure-safe-component (bs-default @dropdownComponent (component \"bs-dropdown\"))) inNav=true htmlTag=\"li\")\n      )\n    }}\n  </ul>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"ul\\\"],[16,0,[29,[\\\"nav \\\",[30,0,[\\\"typeClass\\\"]],\\\" \\\",[30,0,[\\\"additionalClass\\\"]],\\\" \\\",[52,[30,0,[\\\"justified\\\"]],\\\"nav-justified\\\"],\\\" \\\",[52,[30,0,[\\\"stacked\\\"]],\\\"flex-column\\\"],\\\" \\\",[52,[30,0,[\\\"fill\\\"]],\\\"nav-fill\\\"]]]],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,5,[[28,[37,3],null,[[\\\"item\\\",\\\"link-to\\\",\\\"linkTo\\\",\\\"dropdown\\\"],[[28,[37,4],[[28,[37,5],[[30,2],[50,\\\"bs-nav/item\\\",0,null,null]],null]],null],[28,[37,4],[[28,[37,5],[[30,3],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"nav-link\\\"]]]],null]],null],[28,[37,4],[[28,[37,5],[[30,3],[50,\\\"bs-link-to\\\",0,null,[[\\\"attrClassInternal\\\"],[\\\"nav-link\\\"]]]],null]],null],[50,[28,[37,4],[[28,[37,5],[[30,4],[50,\\\"bs-dropdown\\\",0,null,null]],null]],null],0,null,[[\\\"inNav\\\",\\\"htmlTag\\\"],[true,\\\"li\\\"]]]]]]]],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"@itemComponent\\\",\\\"@linkToComponent\\\",\\\"@dropdownComponent\\\",\\\"&default\\\"],[\\\"ul\\\",\\\"if\\\",\\\"yield\\\",\\\"hash\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-nav.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Component to generate [bootstrap navs](http://getbootstrap.com/components/#nav)\n  \n    ### Usage\n  \n    Use in combination with the yielded components\n  \n    * [Components.NavItem](Components.NavItem.html)\n    * [`nav.dropdown`](Components.Dropdown.html)\n  \n    ```hbs\n    <BsNav @type=\"pills\" as |nav|>\n      <nav.item>\n        <nav.linkTo @route=\"foo\">\n          Foo\n        </nav.linkTo>\n      </nav.item>\n      <nav.item>\n        <nav.linkTo @route=\"bar\" @model={{this.model}}>\n          Bar\n        </nav.linkTo>\n      </nav.item>\n    </BsNav>\n    ```\n  \n    > Note: the use of angle brackets `<nav.linkTo>` as shown above is only supported for Ember >= 3.10, as it relies on\n    > Ember's native implementation of the [`LinkComponent`](https://api.emberjs.com/ember/3.12/classes/Ember.Templates.helpers/methods/link-to?anchor=link-to).\n    > For older Ember versions please use the legacy syntax with positional arguments: `{{#nav.link-to \"bar\" this.model}}Bar{{/nav.link-to}}`\n  \n    ### Nav styles\n  \n    The component supports the default bootstrap nav styling options \"pills\" and \"tabs\" through the `type`\n    property, as well as the `justified`, `fill` and `stacked` properties.\n  \n    ### Active items\n  \n    Bootstrap 3 expects to have the `active` class on the `<li>` element that should be the active (highlighted)\n    navigation item. To achieve that use the `@route` and optionally `@model` (or `@models`) and `@query` properties\n    of the yielded `nav.linkTo` component just as you would for Ember's `<LinkTo>` component to create a link with proper\n    `active` class support.\n  \n    ### Dropdowns\n  \n    Use the `nav.dropdown` contextual version of the [Components.Dropdown](Components.Dropdown.html) component\n    with a `tagName` of \"li\" to integrate a dropdown into your nav:\n  \n    ```hbs\n    <BsNav @type=\"pills\" as |nav|>\n      <nav.item>\n        <nav.linkTo @route=\"index\">\n          Home\n        </nav.linkTo>\n      </nav.item>\n      <nav.dropdown as |dd|>\n        <dd.toggle>Dropdown <span class=\"caret\"></span></dd.toggle>\n        <dd.menu as |ddm|>\n          <ddm.item><ddm.linkTo @route=\"foo\">Foo</ddm.linkTo></ddm.item>\n          <ddm.item><ddm.linkTo @route=\"bar\">Bar</ddm.linkTo></ddm.item>\n        </dd.menu>\n      </nav.dropdown>\n    </BsNav>\n    ```\n  \n    ### Bootstrap 3/4 Notes\n  \n    Use [`nav.linkTo`](Components.NavLinkTo.html) for in-app links to ensure proper styling regardless of\n    Bootstrap version. Explicit use of `<a>` tags in Bootstrap 4 must apply the `nav-link` class and manage\n    the `active` state explicitly.\n  \n    The `fill` styling is only available with Bootstrap 4\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Nav\n    @namespace Components\n    @extends Component\n    @public\n  \n   */\n  class Nav extends _component2.default {\n    get typeClass() {\n      let type = this.type;\n      return type ? `nav-${type}` : undefined;\n    }\n\n    /**\n     * Special type of nav, either \"pills\" or \"tabs\"\n     *\n     * @property type\n     * @type String\n     * @default null\n     * @public\n     */\n    get type() {\n      return this.args.type ?? null;\n    }\n\n    /**\n     * Make the nav justified, see [bootstrap docs](http://getbootstrap.com/components/#nav-justified)\n     *\n     * @property justified\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get justified() {\n      return this.args.justified ?? false;\n    }\n\n    /**\n     * Make the nav pills stacked, see [bootstrap docs](http://getbootstrap.com/components/#nav-pills)\n     *\n     * @property stacked\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get stacked() {\n      return this.args.stacked ?? false;\n    }\n\n    /**\n     * Make the nav flex fill (BS4 only), see [bootstrap docs](http://getbootstrap.com/docs/4.1/components/navs/#fill-and-justify)\n     *\n     * @property fill\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get fill() {\n      return this.args.fill ?? false;\n    }\n\n    /**\n     * @property itemComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property linkToComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property dropdownComponent\n     * @type {String}\n     * @private\n     */\n  }\n  _exports.default = Nav;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Nav);\n});","define(\"ember-bootstrap/components/bs-nav/item\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/debug\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _debug, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/debug\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{!-- template-lint-disable no-invalid-interactive --}}\n  <li class=\"nav-item\" ...attributes {{on \"click\" this.handleClick}}>\n    {{yield}}\n  </li>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"li\\\"],[24,0,\\\"nav-item\\\"],[17,1],[4,[38,1],[\\\"click\\\",[30,0,[\\\"handleClick\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[18,2,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"li\\\",\\\"on\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-nav/item.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Component for each item within a [Components.Nav](Components.Nav.html) component. Have a look there for examples.\n  \n   @class NavItem\n   @namespace Components\n   @extends Component\n   @public\n   */\n  let NavItem = _exports.default = (_class = class NavItem extends _component2.default {\n    /**\n     * Called when clicking the nav item\n     *\n     * @event onClick\n     * @public\n     */\n\n    handleClick() {\n      this.args.onClick?.();\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      let {\n        model,\n        models\n      } = this;\n      (false && !(!model || !models) && (0, _debug.assert)('You cannot pass both `@model` and `@models` to a nav item component!', !model || !models));\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"handleClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"handleClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NavItem);\n});","define(\"ember-bootstrap/components/bs-navbar\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/debug\", \"@ember/utils\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _debug, _utils, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/debug\",0,\"@ember/utils\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{!-- template-lint-disable no-duplicate-landmark-elements --}}\n  {{#let\n    (hash\n      toggle=(component (ensure-safe-component (bs-default @toggleComponent (component \"bs-navbar/toggle\"))) onClick=this.toggleNavbar collapsed=this.collapsed)\n      content=(component (ensure-safe-component (bs-default @contentComponent (component \"bs-navbar/content\"))) collapsed=this.collapsed onHidden=this.onCollapsed onShown=this.onExpanded)\n      nav=(component\n        (ensure-safe-component (bs-default @navComponent (component \"bs-navbar/nav\")))\n        linkToComponent=(component \"bs-navbar/link-to\" onCollapse=this.collapse attrClassInternal=\"nav-link\")\n      )\n      collapse=this.collapse\n      expand=this.expand\n      toggleNavbar=this.toggleNavbar\n    ) as |yieldedHash|}}\n    <nav class=\"navbar {{this.positionClass}} {{this.typeClass}} {{this.breakpointClass}} {{this.backgroundClass}}\" ...attributes>\n      {{#if (macroCondition (macroGetOwnConfig \"isBS4\"))}}\n        {{#if this.fluid}}\n          {{yield yieldedHash}}\n        {{else}}\n          <div class=\"container\">\n            {{yield yieldedHash}}\n          </div>\n        {{/if}}\n      {{else}}\n        <div class={{this.containerClass}}>\n          {{yield yieldedHash}}\n        </div>\n      {{/if}}\n    </nav>\n  {{/let}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[44,[[28,[37,1],null,[[\\\"toggle\\\",\\\"content\\\",\\\"nav\\\",\\\"collapse\\\",\\\"expand\\\",\\\"toggleNavbar\\\"],[[50,[28,[37,3],[[28,[37,4],[[30,1],[50,\\\"bs-navbar/toggle\\\",0,null,null]],null]],null],0,null,[[\\\"onClick\\\",\\\"collapsed\\\"],[[30,0,[\\\"toggleNavbar\\\"]],[30,0,[\\\"collapsed\\\"]]]]],[50,[28,[37,3],[[28,[37,4],[[30,2],[50,\\\"bs-navbar/content\\\",0,null,null]],null]],null],0,null,[[\\\"collapsed\\\",\\\"onHidden\\\",\\\"onShown\\\"],[[30,0,[\\\"collapsed\\\"]],[30,0,[\\\"onCollapsed\\\"]],[30,0,[\\\"onExpanded\\\"]]]]],[50,[28,[37,3],[[28,[37,4],[[30,3],[50,\\\"bs-navbar/nav\\\",0,null,null]],null]],null],0,null,[[\\\"linkToComponent\\\"],[[50,\\\"bs-navbar/link-to\\\",0,null,[[\\\"onCollapse\\\",\\\"attrClassInternal\\\"],[[30,0,[\\\"collapse\\\"]],\\\"nav-link\\\"]]]]]],[30,0,[\\\"collapse\\\"]],[30,0,[\\\"expand\\\"]],[30,0,[\\\"toggleNavbar\\\"]]]]]],[[[1,\\\"  \\\"],[11,\\\"nav\\\"],[16,0,[29,[\\\"navbar \\\",[30,0,[\\\"positionClass\\\"]],\\\" \\\",[30,0,[\\\"typeClass\\\"]],\\\" \\\",[30,0,[\\\"breakpointClass\\\"]],\\\" \\\",[30,0,[\\\"backgroundClass\\\"]]]]],[17,5],[12],[1,\\\"\\\\n\\\"],[1,\\\"      \\\"],[10,0],[15,0,[30,0,[\\\"containerClass\\\"]]],[12],[1,\\\"\\\\n        \\\"],[18,6,[[30,4]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[4]]]],[\\\"@toggleComponent\\\",\\\"@contentComponent\\\",\\\"@navComponent\\\",\\\"yieldedHash\\\",\\\"&attrs\\\",\\\"&default\\\"],[\\\"let\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"nav\\\",\\\"div\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-navbar.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Component to generate [Bootstrap navbars](http://getbootstrap.com/components/#navbar).\n  \n    ### Usage\n  \n    Uses the following components by a contextual reference:\n  \n    ```hbs\n    <BsNavbar as |navbar|>\n      <a class=\"navbar-brand\" href=\"#\">Brand</a>\n      <navbar.toggle />\n      <navbar.content>\n        <navbar.nav as |nav|>\n          <nav.item>\n            <nav.linkTo @route=\"home\">Home</nav.linkTo>\n          </nav.item>\n          <nav.item>\n            <nav.linkTo @route=\"navbars\">Navbars</nav.linkTo>\n          </nav.item>\n        </navbar.nav>\n      </navbar.content>\n    </BsNavbar>\n    ```\n  \n    The component yields references to the following contextual components:\n  \n    * [Components.NavbarContent](Components.NavbarContent.html)\n    * [Components.NavbarToggle](Components.NavbarToggle.html)\n    * [Components.NavbarNav](Components.NavbarNav.html)\n  \n    Furthermore, references to the following actions are yielded:\n  \n    * `collapse`: triggers the `onCollapse` action and collapses the navbar (mobile)\n    * `expand`: triggers the `onExpand` action and expands the navbar (mobile)\n    * `toggleNavbar`: triggers the `toggleNavbar` action and toggles the navbar (mobile)\n  \n    ### Responsive Design\n  \n    For the mobile breakpoint the Bootstrap styles will hide the navbar content (`{{navbar.content}}`). Clicking on the\n    navbar toggle button (`{{navbar.toggle}}`) will expand the menu. By default, all nav links (`<nav.linkTo @route=\"...\">`) are already\n    wired up to call the navbar's `collapse` action, so clicking any of them will collapse the navbar. To selectively\n    prevent that, you can set its `collapseNavbar` property to false:\n  \n    ```hbs\n    <nav.item>\n      <nav.linkTo @route=\"index\" @collapseNavbar={{false}}>Don't collapse</nav.linkTo>\n    </nav.item>\n    ```\n  \n    To collapse the navbar when clicking on some nav items that are not internal links, you can use the yielded `collapse`\n    action:\n  \n    ```hbs\n    <BsNavbar as |navbar|>\n      <navbar.content>\n        <navbar.nav as |nav|>\n          <nav.item>\n            <a {{on \"click\" navbar.collapse}}>Collapse</a>\n          </nav.item>\n        </navbar.nav>\n      </navbar.content>\n    </BsNavbar>\n    ```\n  \n    ### Navbar styles\n  \n    The component supports the default bootstrap navbar styling options through the `type`\n    property. Bootstrap navbars [do not currently support justified nav links](http://getbootstrap.com/components/#navbar-default),\n    so those are explicitly disallowed.\n  \n    Other bootstrap navbar variations, such as forms, buttons, etc. can be supported through direct use of\n    bootstrap styles applied through the `class` attribute on the components.\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Navbar\n    @namespace Components\n    @extends Component\n    @public\n  */\n  let Navbar = _exports.default = (_class = class Navbar extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property _toggledCollapse\n       * @private\n       */\n      _initializerDefineProperty(this, \"_toggledCollapse\", _descriptor, this);\n    }\n    /**\n     * Manages the state for the responsive menu between the toggle and the content.\n     *\n     * @property collapsed\n     * @type boolean\n     * @default true\n     * @public\n     */\n    get collapsed() {\n      return this._toggledCollapse ?? this.args.collapsed ?? true;\n    }\n    /**\n     * Controls whether the wrapping div is a fluid container or not.\n     *\n     * @property fluid\n     * @type boolean\n     * @default true\n     * @public\n     */\n    get fluid() {\n      return this.args.fluid ?? true;\n    }\n\n    /**\n     * BS5 only: Allows to override the container layout, see https://getbootstrap.com/docs/5.0/components/navbar/#containers.\n     * Allowed values: `'sm'`, `'md'`, `'lg'`, `'xl'`, `'xxl'`, `'fluid'`, see https://getbootstrap.com/docs/5.0/layout/containers/.\n     * By default, it is `.container-fluid`, or `.container` if the `@fluid` argument is set to false.\n     *\n     * @property container\n     * @type string\n     * @public\n     */\n\n    get containerClass() {\n      const {\n        container\n      } = this.args;\n      if (container) {\n        return `container-${container}`;\n      }\n      return this.fluid ? 'container-fluid' : 'container';\n    }\n\n    /**\n     * Specifies the position classes for the navbar, currently supporting none, \"fixed-top\", \"fixed-bottom\", and\n     * \"sticky-top\".\n     * See the [bootstrap docs](http://getbootstrap.com/components/#navbar-fixed-top) for details.\n     *\n     * @property position\n     * @type String\n     * @default null\n     * @public\n     */\n    get position() {\n      return this.args.position ?? null;\n    }\n    get positionClass() {\n      let position = this.position;\n      let validPositions = ['fixed-top', 'fixed-bottom', 'sticky-top'];\n      if (validPositions.indexOf(position) === -1) {\n        return null;\n      }\n      return position;\n    }\n\n    /**\n     * Property for type styling\n     *\n     * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/navbar/#color-schemes)\n     *\n     * @property type\n     * @type String\n     * @default 'light'\n     * @public\n     */\n    get type() {\n      return this.args.type ?? 'light';\n    }\n    get typeClass() {\n      let type = this.type || 'light';\n      (false && !(typeof type === 'string' && type !== '') && (0, _debug.assert)('The value of `type` must be a string', typeof type === 'string' && type !== ''));\n      return `navbar-${type}`;\n    }\n\n    /**\n     * The action to be sent when the navbar is about to be collapsed.\n     *\n     * You can return false to prevent collapsing the navbar automatically, and do that in your action by\n     * setting `collapsed` to true.\n     *\n     * @event onCollapse\n     * @public\n     */\n\n    /**\n     * The action to be sent after the navbar has been collapsed (including the CSS transition).\n     *\n     * @event onCollapsed\n     * @public\n     */\n    get onCollapsed() {\n      return this.args.onCollapsed ?? (() => {});\n    }\n\n    /**\n     * The action to be sent when the navbar is about to be expanded.\n     *\n     * You can return false to prevent expanding the navbar automatically, and do that in your action by\n     * setting `collapsed` to false.\n     *\n     * @event onExpand\n     * @public\n     */\n\n    /**\n     * The action to be sent after the navbar has been expanded (including the CSS transition).\n     *\n     * @event onExpanded\n     * @public\n     */\n    get onExpanded() {\n      return this.args.onExpanded ?? (() => {});\n    }\n\n    /**\n     * @method expand\n     * @private\n     */\n    expand() {\n      if (this.args.onExpand?.() === false) {\n        return;\n      }\n      this._toggledCollapse = false;\n    }\n\n    /**\n     * @method collapse\n     * @private\n     */\n    collapse() {\n      if (this.args.onCollapse?.() === false) {\n        return;\n      }\n      this._toggledCollapse = true;\n    }\n    toggleNavbar() {\n      if (this.collapsed) {\n        this.expand();\n      } else {\n        this.collapse();\n      }\n    }\n\n    /**\n     * Bootstrap 4 Only: Defines the responsive toggle breakpoint size. Options are the standard\n     * two character Bootstrap size abbreviations. Used to set the `navbar-expand-*`\n     * class. Set to `null` to disable collapsing.\n     *\n     * @property toggleBreakpoint\n     * @type String\n     * @default 'lg'\n     * @public\n     */\n    get toggleBreakpoint() {\n      if (this.args.toggleBreakpoint === undefined) {\n        return 'lg';\n      }\n      return this.args.toggleBreakpoint;\n    }\n\n    /**\n     * Bootstrap 4 Only: Sets the background color for the navbar. Can be any color\n     * in the set that composes the `bg-*` classes and can be extended by creating your\n     * own `bg-*` classes.\n     *\n     * @property backgroundColor\n     * @type String\n     * @default 'light'\n     * @public\n     */\n    get backgroundColor() {\n      return this.args.backgroundColor ?? 'light';\n    }\n    get breakpointClass() {\n      let toggleBreakpoint = this.toggleBreakpoint;\n      if ((0, _utils.isBlank)(toggleBreakpoint)) {\n        return 'navbar-expand';\n      } else {\n        return `navbar-expand-${toggleBreakpoint}`;\n      }\n    }\n    get backgroundClass() {\n      return `bg-${this.backgroundColor}`;\n    }\n\n    /**\n     * @property toggleComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property contentComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property navComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property linkToComponent\n     * @type {String}\n     * @private\n     */\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_toggledCollapse\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"expand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"expand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"collapse\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"collapse\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleNavbar\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleNavbar\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Navbar);\n});","define(\"ember-bootstrap/components/bs-navbar/content\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <BsCollapse\n    @collapsed={{@collapsed}}\n    @onHidden={{@onHidden}}\n    @onShown={{@onShown}}\n    class=\"navbar-collapse\"\n    ...attributes\n  >\n    {{yield}}\n  </BsCollapse>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[24,0,\\\"navbar-collapse\\\"],[17,1]],[[\\\"@collapsed\\\",\\\"@onHidden\\\",\\\"@onShown\\\"],[[30,2],[30,3],[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[18,5,null],[1,\\\"\\\\n\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@collapsed\\\",\\\"@onHidden\\\",\\\"@onShown\\\",\\\"&default\\\"],[\\\"bs-collapse\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-navbar/content.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   * Component to wrap the collapsible content of a [Components.Navbar](Components.Navbar.html) component.\n   * Have a look there for examples.\n   *\n   * @class NavbarContent\n   * @namespace Components\n   * @extends Components.Collapse\n   * @public\n   */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n});","define(\"ember-bootstrap/components/bs-navbar/link-to\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <BsLinkTo\n    @route={{@route}}\n    @model={{@model}}\n    @models={{@models}}\n    @query={{@query}}\n    @disabled={{@disabled}}\n    {{on 'click' this.onClick}}\n    class={{@attrClassInternal}}\n    ...attributes\n  >\n    {{yield}}\n  </BsLinkTo>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[8,[39,0],[[16,0,[30,1]],[17,2],[4,[38,1],[\\\"click\\\",[30,0,[\\\"onClick\\\"]]],null]],[[\\\"@route\\\",\\\"@model\\\",\\\"@models\\\",\\\"@query\\\",\\\"@disabled\\\"],[[30,3],[30,4],[30,5],[30,6],[30,7]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n  \\\"],[18,8,null],[1,\\\"\\\\n\\\"]],[]]]]]],[\\\"@attrClassInternal\\\",\\\"&attrs\\\",\\\"@route\\\",\\\"@model\\\",\\\"@models\\\",\\\"@query\\\",\\\"@disabled\\\",\\\"&default\\\"],[\\\"bs-link-to\\\",\\\"on\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-navbar/link-to.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   * Extended `{{link-to}}` component for use within Navbars.\n   *\n   * @class NavbarLinkTo\n   * @namespace Components\n   * @extends Components.NavLinkTo\n   * @public\n   */\n  let NavbarLinkTo = _exports.default = (_class = class NavbarLinkTo extends _component2.default {\n    /**\n     * @property collapseNavbar\n     * @type {Boolean}\n     * @default true\n     * @public\n     */\n\n    onClick() {\n      if (this.args.collapseNavbar ?? true) {\n        this.args.onCollapse();\n      }\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"onClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClick\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NavbarLinkTo);\n});","define(\"ember-bootstrap/components/bs-navbar/nav\", [\"exports\", \"ember-bootstrap/components/bs-nav\"], function (_exports, _bsNav) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-nav\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  /**\n   * Component for the `.nav` element within a [Components.Navbar](Components.Navbar.html)\n   * component. Have a look there for examples.\n   *\n   * Per [the bootstrap docs](http://getbootstrap.com/components/#navbar),\n   * justified navbar nav links are not supported.\n   *\n   * @class NavbarNav\n   * @namespace Components\n   * @extends Components.Nav\n   * @public\n   */\n  class NavbarNav extends _bsNav.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"additionalClass\", 'navbar-nav');\n    }\n    get justified() {\n      return this.args.justified ?? false;\n    }\n  }\n  _exports.default = NavbarNav;\n});","define(\"ember-bootstrap/components/bs-navbar/toggle\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/modifier\", \"@ember/template-factory\"], function (_exports, _component, _component2, _modifier, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/modifier\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <button\n    type=\"button\"\n    class=\"navbar-toggler\n    {{if (bs-default @collapsed true) \"collapsed\"}}\"\n    ...attributes\n    {{(if @onClick (modifier this.on \"click\" @onClick))}}\n  >\n    {{#if (has-block)}}\n      {{yield}}\n    {{else}}\n      <span class=\"navbar-toggler-icon\"></span>\n    {{/if}}\n  </button>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,\\\"button\\\"],[24,4,\\\"button\\\"],[16,0,[29,[\\\"navbar-toggler\\\\n  \\\",[52,[28,[37,2],[[30,1],true],null],\\\"collapsed\\\"]]]],[17,2],[4,[52,[30,3],[50,[28,[37,4],[[30,0,[\\\"on\\\"]]],[[\\\"type\\\",\\\"loc\\\",\\\"original\\\"],[\\\"modifier\\\",\\\"('ember-bootstrap/components/bs-navbar/toggle.hbs' @ L7:C17) \\\",\\\"this.on\\\"]]],2,[\\\"click\\\",[30,3]],null]],null,null],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,4]],[[[1,\\\"    \\\"],[18,4,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"navbar-toggler-icon\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@collapsed\\\",\\\"&attrs\\\",\\\"@onClick\\\",\\\"&default\\\"],[\\\"button\\\",\\\"if\\\",\\\"bs-default\\\",\\\"modifier\\\",\\\"-disallow-dynamic-resolution\\\",\\\"has-block\\\",\\\"yield\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-navbar/toggle.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   * Component to implement the responsive menu toggle behavior in a [Components.Navbar](Components.Navbar.html)\n   * component. Have a look there for examples.\n   *\n   * ### Bootstrap 3/4 Notes\n   *\n   * The inline version of the component uses the triple `icon-bar` styling for Bootstrap 3 and the\n   * `navbar-toggler-icon` styling for Bootstrap 4.\n   *\n   * @class NavbarToggle\n   * @namespace Components\n   * @extends Ember.Component\n   * @public\n   */\n  class NavbarToggle extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"on\", _modifier.on);\n    }\n  }\n  _exports.default = NavbarToggle;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, NavbarToggle);\n});","define(\"ember-bootstrap/components/bs-popover\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-contextual-help\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _bsContextualHelp, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-contextual-help\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{! template-lint-disable no-unbound }}\n  {{unbound this._parentFinder}}\n  {{#if this.inDom}}\n    {{#let (ensure-safe-component (bs-default @elementComponent (component \"bs-popover/element\"))) as |Element|}}\n      <Element\n        @placement={{this.placement}}\n        @fade={{this.fade}}\n        @showHelp={{this.showHelp}}\n        @title={{@title}}\n        @renderInPlace={{this._renderInPlace}}\n        @popperTarget={{this.triggerTargetElement}}\n        @destinationElement={{this.destinationElement}}\n        @autoPlacement={{this.autoPlacement}}\n        @viewportElement={{this.viewportElement}}\n        @viewportPadding={{this.viewportPadding}}\n  \n        {{create-ref \"overlayElement\"}}\n        ...attributes\n      >\n        {{yield\n          (hash\n            close=this.close\n          )\n        }}\n      </Element>\n    {{/let}}\n  {{/if}}\n  {{did-insert-helper this.setup}}\n  {{did-update-helper this.showOrHide @visible}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[[30,0,[\\\"_parentFinder\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"inDom\\\"]],[[[44,[[28,[37,3],[[28,[37,4],[[30,1],[50,\\\"bs-popover/element\\\",0,null,null]],null]],null]],[[[1,\\\"    \\\"],[8,[30,2],[[17,3],[4,[38,6],[\\\"overlayElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]]],[[\\\"@placement\\\",\\\"@fade\\\",\\\"@showHelp\\\",\\\"@title\\\",\\\"@renderInPlace\\\",\\\"@popperTarget\\\",\\\"@destinationElement\\\",\\\"@autoPlacement\\\",\\\"@viewportElement\\\",\\\"@viewportPadding\\\"],[[30,0,[\\\"placement\\\"]],[30,0,[\\\"fade\\\"]],[30,0,[\\\"showHelp\\\"]],[30,4],[30,0,[\\\"_renderInPlace\\\"]],[30,0,[\\\"triggerTargetElement\\\"]],[30,0,[\\\"destinationElement\\\"]],[30,0,[\\\"autoPlacement\\\"]],[30,0,[\\\"viewportElement\\\"]],[30,0,[\\\"viewportPadding\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[18,6,[[28,[37,8],null,[[\\\"close\\\"],[[30,0,[\\\"close\\\"]]]]]]],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]],[]],null],[1,[28,[35,9],[[30,0,[\\\"setup\\\"]]],null]],[1,\\\"\\\\n\\\"],[1,[28,[35,10],[[30,0,[\\\"showOrHide\\\"]],[30,5]],null]]],[\\\"@elementComponent\\\",\\\"Element\\\",\\\"&attrs\\\",\\\"@title\\\",\\\"@visible\\\",\\\"&default\\\"],[\\\"unbound\\\",\\\"if\\\",\\\"let\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\",\\\"create-ref\\\",\\\"yield\\\",\\\"hash\\\",\\\"did-insert-helper\\\",\\\"did-update-helper\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-popover.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Component that implements Bootstrap [popovers](http://getbootstrap.com/javascript/#popovers).\n  \n    By default, it will attach its listeners (click) to the parent DOM element to trigger\n    the popover:\n  \n    ```hbs\n    <button class=\"btn\">\n      <BsPopover @title=\"this is a title\">and this the body</BsPopover>\n    </button>\n    ```\n  \n    ### Trigger\n  \n    The trigger element is the DOM element that will cause the popover to be shown when one of the trigger events occur on\n    that element. By default, the trigger element is the parent DOM element of the component, and the trigger event will be\n    \"click\".\n  \n    The `triggerElement` property accepts any CSS selector to attach the popover to any other existing DOM element.\n  \n    To customize the events that will trigger the popover use the `triggerEvents` property, that accepts an array or a\n    string of events, with \"hover\", \"focus\" and \"click\" being supported.\n  \n    ### Placement options\n  \n    By default, the popover will show up to the right of the trigger element. Use the `placement` property to change that\n    (\"top\", \"bottom\", \"left\" and \"right\"). To make sure the popover will not exceed the viewport (see Advanced customization)\n    you can set `autoPlacement` to true. A popover with `placement=\"right\" will be placed to the right if there is enough\n    space, otherwise to the left.\n  \n    ### Advanced customization\n  \n    Several other properties allow for some advanced customization:\n    * `visible` to show/hide the popover programmatically\n    * `fade` to disable the fade in transition\n    * `delay` (or `delayShow` and `delayHide`) to add a delay\n    * `viewportSelector` and `viewportPadding` to customize the viewport that affects `autoPlacement`\n    *  a `close` action is yielded, that allows you to close the tooltip:\n  \n    ```hbs\n    <BsPopover as |po| >This is a popover <button {{on \"click\" po.close}}>Close</button></BsPopover>\n    ```\n  \n    See the individual API docs for each property.\n  \n    ### Actions\n  \n    When you want to react on the popover being shown or hidden, you can use one of the following supported actions:\n    * `onShow`\n    * `onShown`\n    * `onHide`\n    * `onHidden`\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Popover\n    @namespace Components\n    @extends Components.ContextualHelp\n    @public\n  */\n  let Popover = _exports.default = (_class = class Popover extends _bsContextualHelp.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property placement\n       * @type string\n       * @default 'right'\n       * @public\n       */\n      _initializerDefineProperty(this, \"placement\", _descriptor, this);\n      /**\n       * @property triggerEvents\n       * @type array|string\n       * @default 'click'\n       * @public\n       */\n      _initializerDefineProperty(this, \"triggerEvents\", _descriptor2, this);\n    }\n    /**\n     * @property elementComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * The DOM element of the arrow element.\n     *\n     * @property arrowElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    get arrowElement() {\n      return this.overlayElement.querySelector('.arrow');\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"placement\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'right';\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"triggerEvents\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'click';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Popover);\n});","define(\"ember-bootstrap/components/bs-popover/element\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-contextual-help/element\", \"@ember/template-factory\"], function (_exports, _component, _element, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-contextual-help/element\",0,\"@embroider/macros\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @renderInPlace}}\n    <div\n      class=\"popover {{if this.fade \"fade\"}} {{this.actualPlacementClass}} {{if this.showHelp \"show\"}}\"\n      role=\"tooltip\"\n      ...attributes\n      {{popper-tooltip @popperTarget this.popperOptions}}\n      {{create-ref \"popperElement\"}}\n    >\n      <div class={{this.arrowClass}}></div>\n      {{#if @title}}\n        <h3 class=\"popover-header\">{{@title}}</h3>\n      {{/if}}\n      <div class=\"popover-body\">{{yield}}</div>\n    </div>\n  {{else}}\n    {{#in-element @destinationElement insertBefore=null}}\n      <div\n        class=\"popover {{if this.fade \"fade\"}} {{this.actualPlacementClass}} {{if this.showHelp \"show\"}}\"\n        role=\"tooltip\"\n        ...attributes\n        {{popper-tooltip @popperTarget this.popperOptions}}\n        {{create-ref \"popperElement\"}}\n      >\n        <div class={{this.arrowClass}}></div>\n        {{#if @title}}\n          <h3 class=\"popover-header\">{{@title}}</h3>\n        {{/if}}\n        <div class=\"popover-body\">{{yield}}</div>\n      </div>\n    {{/in-element}}\n  {{/if}}\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[11,0],[16,0,[29,[\\\"popover \\\",[52,[30,0,[\\\"fade\\\"]],\\\"fade\\\"],\\\" \\\",[30,0,[\\\"actualPlacementClass\\\"]],\\\" \\\",[52,[30,0,[\\\"showHelp\\\"]],\\\"show\\\"]]]],[24,\\\"role\\\",\\\"tooltip\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[\\\"popperElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[30,0,[\\\"arrowClass\\\"]]],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"      \\\"],[10,\\\"h3\\\"],[14,0,\\\"popover-header\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[14,0,\\\"popover-body\\\"],[12],[18,6,null],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[40,[[[1,\\\"    \\\"],[11,0],[16,0,[29,[\\\"popover \\\",[52,[30,0,[\\\"fade\\\"]],\\\"fade\\\"],\\\" \\\",[30,0,[\\\"actualPlacementClass\\\"]],\\\" \\\",[52,[30,0,[\\\"showHelp\\\"]],\\\"show\\\"]]]],[24,\\\"role\\\",\\\"tooltip\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[\\\"popperElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[30,0,[\\\"arrowClass\\\"]]],[12],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"popover-header\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"popover-body\\\"],[12],[18,6,null],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],\\\"%cursor:0%\\\",[28,[37,7],[[30,5]],null],null]],[]]],[1,\\\"\\\\n\\\"]],[\\\"@renderInPlace\\\",\\\"&attrs\\\",\\\"@popperTarget\\\",\\\"@title\\\",\\\"@destinationElement\\\",\\\"&default\\\"],[\\\"if\\\",\\\"div\\\",\\\"popper-tooltip\\\",\\\"create-ref\\\",\\\"h3\\\",\\\"yield\\\",\\\"in-element\\\",\\\"-in-el-null\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-popover/element.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   Internal component for popover's markup. Should not be used directly.\n  \n   @class PopoverElement\n   @namespace Components\n   @extends Components.ContextualHelpElement\n   @private\n   */\n  class PopoverElement extends _element.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * @property title\n       * @type string\n       * @public\n       */\n      _defineProperty(this, \"arrowClass\", 'popover-arrow');\n      _defineProperty(this, \"placementClassPrefix\", 'bs-popover-');\n      _defineProperty(this, \"offset\", [0, 8]);\n    }\n  }\n  _exports.default = PopoverElement;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, PopoverElement);\n});","define(\"ember-bootstrap/components/bs-progress\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"progress\" ...attributes>\n    {{yield\n      (hash\n        bar=(bs-default @progressBarComponent (component \"bs-progress/bar\"))\n      )\n    }}\n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,0,\\\"progress\\\"],[17,1],[12],[1,\\\"\\\\n  \\\"],[18,3,[[28,[37,2],null,[[\\\"bar\\\"],[[28,[37,3],[[30,2],[50,\\\"bs-progress/bar\\\",0,null,null]],null]]]]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@progressBarComponent\\\",\\\"&default\\\"],[\\\"div\\\",\\\"yield\\\",\\\"hash\\\",\\\"bs-default\\\",\\\"component\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-progress.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Component to display a Bootstrap progress bar, see http://getbootstrap.com/components/#progress.\n  \n    ### Usage\n  \n    The component yields a [Components.ProgressBar](Components.ProgressBar.html) component that represents a single bar.\n    Use the `value` property to control the progress bar's width. To apply the different styling options supplied by\n    Bootstrap, use the appropriate properties like `type`, `showLabel`, `striped` or `animate`.\n  \n    ```hbs\n    <BsProgress as |pg| >\n      <pg.bar @value={{this.progressValue}} @minValue={{0}} @maxValue={{10}} @showLabel={{true}} @type=\"danger\" aria-label=\"Loading\" />\n    </BsProgress>\n    ```\n  \n    > Don't forget to add a `aria-label` attribute to the progress bar for accessibility!\n  \n    ### Stacked\n  \n    You can place multiple progress bar components in a single progress component to\n    create a stack of progress bars as seen in http://getbootstrap.com/components/#progress-stacked.\n  \n    ```hbs\n    <BsProgress as |pg| >\n      <pg.bar @value={{this.progressValue1}} @type=\"success\" />\n      <pg.bar @value={{this.progressValue2}} @type=\"warning\" />\n      <pg.bar @value={{this.progressValue3}} @type=\"danger\" />\n    </BsProgress>\n    ```\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Progress\n    @namespace Components\n    @extends Ember.Component\n    @public\n  */\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)());\n  /**\n   * @property progressBarComponent\n   * @type {String}\n   * @private\n   */\n});","define(\"ember-bootstrap/components/bs-progress/bar\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    role=\"progressbar\"\n    aria-valuenow={{this.value}}\n    aria-valuemin={{this.minValue}}\n    aria-valuemax={{this.maxValue}}\n    class=\"progress-bar {{if this.striped \"progress-bar-striped\"}} {{this.typeClass}} {{if this.animate \"progress-bar-animated\"}}\"\n    ...attributes\n    {{style width=this.percentStyleValue}}\n  >\n    {{#if this.showLabel}}\n      {{#if (has-block)}}\n        {{yield this.percentRounded}}\n      {{else}}\n        {{this.percentRounded}}%\n      {{/if}}\n    {{else}}\n      {{#if (has-block)}}\n        <span class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\"}}>{{yield this.percentRounded}}</span>\n      {{else}}\n        <span class={{if (macroCondition (macroGetOwnConfig \"isBS5\")) \"visually-hidden\" \"sr-only\"}}>{{this.percentRounded}}%</span>\n      {{/if}}\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[24,\\\"role\\\",\\\"progressbar\\\"],[16,\\\"aria-valuenow\\\",[30,0,[\\\"value\\\"]]],[16,\\\"aria-valuemin\\\",[30,0,[\\\"minValue\\\"]]],[16,\\\"aria-valuemax\\\",[30,0,[\\\"maxValue\\\"]]],[16,0,[29,[\\\"progress-bar \\\",[52,[30,0,[\\\"striped\\\"]],\\\"progress-bar-striped\\\"],\\\" \\\",[30,0,[\\\"typeClass\\\"]],\\\" \\\",[52,[30,0,[\\\"animate\\\"]],\\\"progress-bar-animated\\\"]]]],[17,1],[4,[38,2],null,[[\\\"width\\\"],[[30,0,[\\\"percentStyleValue\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLabel\\\"]],[[[41,[48,[30,2]],[[[1,\\\"      \\\"],[18,2,[[30,0,[\\\"percentRounded\\\"]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[1,[30,0,[\\\"percentRounded\\\"]]],[1,\\\"%\\\\n\\\"]],[]]]],[]],[[[41,[48,[30,2]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"visually-hidden\\\"],[12],[18,2,[[30,0,[\\\"percentRounded\\\"]]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,1],[14,0,\\\"visually-hidden\\\"],[12],[1,[30,0,[\\\"percentRounded\\\"]]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[13]],[\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"style\\\",\\\"has-block\\\",\\\"yield\\\",\\\"span\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-progress/bar.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   Component for a single progress bar, see [Components.Progress](Components.Progress.html) for more examples.\n  \n   @class ProgressBar\n   @namespace Components\n   @extends Ember.Component\n   @public\n   */\n  class ProgressBar extends _component2.default {\n    /**\n     * The lower limit of the value range\n     *\n     * @property minValue\n     * @type number\n     * @default 0\n     * @public\n     */\n    get minValue() {\n      return this.args.minValue ?? 0;\n    }\n\n    /**\n     * The upper limit of the value range\n     *\n     * @property maxValue\n     * @type number\n     * @default 100\n     * @public\n     */\n    get maxValue() {\n      return this.args.maxValue ?? 100;\n    }\n\n    /**\n     * The value the progress bar should represent\n     *\n     * @property value\n     * @type number\n     * @default 0\n     * @public\n     */\n    get value() {\n      return this.args.value ?? 0;\n    }\n\n    /**\n     If true a label will be shown inside the progress bar.\n      By default, it will be the percentage corresponding to the `value` property, rounded to `roundDigits` digits.\n     You can customize it by using the component with a block template, which the component yields the percentage\n     value to:\n      ```hbs\n     {{#bs-progress}}\n     {{#bs-progress-bar value=progressValue as |percent|}}{{progressValue}} ({{percent}}%){{/bs-progress-bar}}\n     {{/bs-progress}}\n     ```\n      @property showLabel\n     @type boolean\n     @default false\n     @public\n     */\n    get showLabel() {\n      return this.args.showLabel ?? false;\n    }\n\n    /**\n     * Create a striped effect, see http://getbootstrap.com/components/#progress-striped\n     *\n     * @property striped\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get striped() {\n      return this.args.striped ?? false;\n    }\n\n    /**\n     * Animate the stripes, see http://getbootstrap.com/components/#progress-animated\n     *\n     * @property animate\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get animate() {\n      return this.args.animate ?? false;\n    }\n\n    /**\n     * Specify to how many digits the progress bar label should be rounded.\n     *\n     * @property roundDigits\n     * @type number\n     * @default 0\n     * @public\n     */\n    get roundDigits() {\n      return this.args.roundDigits ?? 0;\n    }\n\n    /**\n     * Property for type styling\n     *\n     * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/4.3/components/progress/#backgrounds)\n     *\n     * @property type\n     * @type String\n     * @default 'default'\n     * @public\n     */\n    get type() {\n      return this.args.type ?? 'default';\n    }\n    get typeClass() {\n      return `bg-${this.type}`;\n    }\n\n    /**\n     * The percentage of `value`\n     *\n     * @property percent\n     * @type number\n     * @protected\n     * @readonly\n     */\n    get percent() {\n      // `parseFloat`'s types only accepts string values, but will handle numbers just fine.\n      // The casting here is meant to keep the type checking active without changing behaviour for\n      // consumers that still expect these values can be strings.\n      const value = parseFloat(this.value);\n      const minValue = parseFloat(this.minValue);\n      const maxValue = parseFloat(this.maxValue);\n      return Math.min(Math.max((value - minValue) / (maxValue - minValue), 0), 1) * 100;\n    }\n\n    /**\n     * The percentage of `value`, rounded to `roundDigits` digits\n     *\n     * @property percentRounded\n     * @type number\n     * @protected\n     * @readonly\n     */\n    get percentRounded() {\n      const roundFactor = Math.pow(10, this.roundDigits);\n      return Math.round(this.percent * roundFactor) / roundFactor;\n    }\n    get percentStyleValue() {\n      const percent = this.percent;\n      return !isNaN(percent) ? `${percent}%` : '';\n    }\n  }\n  _exports.default = ProgressBar;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProgressBar);\n});","define(\"ember-bootstrap/components/bs-spinner\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"ember-bootstrap/utils/decorators/arg\", \"@ember/template-factory\"], function (_exports, _component, _component2, _arg, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"ember-bootstrap/utils/decorators/arg\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div\n    class=\"{{this.spinnerClass}} {{if @size (bs-size-class this.spinnerClass @size)}} {{bs-type-class 'text' @type default=\"primary\" outline=false}}\"\n    role=\"status\"\n    ...attributes\n  >\n    {{#if (has-block)}}\n      <span\n        class={{if\n          (macroCondition (macroGetOwnConfig \"isBS5\"))\n          \"visually-hidden\"\n          \"sr-only\"\n        }}\n      >{{yield}}</span>\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[[30,0,[\\\"spinnerClass\\\"]],\\\" \\\",[52,[30,1],[28,[37,2],[[30,0,[\\\"spinnerClass\\\"]],[30,1]],null]],\\\" \\\",[28,[37,3],[\\\"text\\\",[30,2]],[[\\\"default\\\",\\\"outline\\\"],[\\\"primary\\\",false]]]]]],[24,\\\"role\\\",\\\"status\\\"],[17,3],[12],[1,\\\"\\\\n\\\"],[41,[48,[30,4]],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"visually-hidden\\\"],[12],[18,4,null],[13],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@size\\\",\\\"@type\\\",\\\"&attrs\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"bs-size-class\\\",\\\"bs-type-class\\\",\\\"has-block\\\",\\\"span\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-spinner.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Implements a [Spinner element](https://getbootstrap.com/docs/5.2/components/spinners/).\n  \n    ### Basic Usage\n  \n    ```hbs\n    <BsSpinner/>\n    <BsSpinner>Loading...</BsSpinner>\n    ```\n  \n    The (optional) component's block will render as visually invisible but accessible text for assistive technology like screen readers.\n  \n    ### Advanced Usage\n  \n    ```hbs\n    <BsSpinner @spinnerType=\"grow\" @size=\"sm\" @type=\"warning\"/>\n    ```\n  \n    ### Usage with `BsButton`\n  \n    ```hbs\n    <BsButton @onClick={{this.download}} as |button|>\n      Download\n      {{#if button.isPending}}\n        <BsSpinner @size=\"sm\"/>\n      {{/if}}\n    </BsButton>\n    ```\n  \n    @class Spinner\n    @namespace Components\n    @extends Glimmer.Component\n    @public\n  */\n  let BsSpinner = _exports.default = (_class = class BsSpinner extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      /**\n       * Property for size styling, set to 'sm'\n       *\n       * Also see the [Bootstrap docs](https://getbootstrap.com/docs/5.2/components/spinners/#size)\n       *\n       * @property size\n       * @type String\n       * @public\n       */\n      /**\n       * Property for type styling\n       *\n       * For the available types see the [Bootstrap docs](https://getbootstrap.com/docs/5.2/components/spinners/#colors)\n       *\n       * @property type\n       * @type String\n       * @default 'primary'\n       * @public\n       */\n      /**\n       * Spinner type - 'border' or 'grow'\n       *\n       * @property spinnerType\n       * @type string\n       * @default 'border'\n       * @public\n       */\n      _initializerDefineProperty(this, \"spinnerType\", _descriptor, this);\n    }\n    get spinnerClass() {\n      return `spinner-${this.spinnerType}`;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"spinnerType\", [_arg.default], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'border';\n    }\n  }), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, BsSpinner);\n});","define(\"ember-bootstrap/components/bs-tab\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@ember/utils\", \"ember-bootstrap/components/bs-tab/pane\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _utils, _pane, _tracking, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/utils\",0,\"ember-bootstrap/components/bs-tab/pane\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div ...attributes {{did-update this.listenToActiveId @activeId}}>\n    {{#if this.customTabs}}\n      {{yield\n        (hash\n          pane=(component (ensure-safe-component (bs-default @paneComponent (component \"bs-tab/pane\"))) parent=this activeId=this.activeId fade=this.fade fadeTransition=this.fadeTransition registerChild=this.registerChild unregisterChild=this.unregisterChild)\n          activeId=this.activeId\n          select=this.select\n        )\n      }}\n    {{else}}\n      {{#let (ensure-safe-component (bs-default @navComponent (component \"bs-nav\"))) as |NavComponent|}}\n        <NavComponent @type={{this.type}} role=\"tablist\" as |Nav|>\n          {{#each this.navItems as |item|}}\n            {{#if item.isGroup}}\n              <Nav.dropdown class={{if (bs-contains item.childIds this.activeId) \"active\"}} role=\"presentation\" as |DD|>\n                <DD.toggle>{{item.groupTitle}} <span class=\"caret\"></span></DD.toggle>\n                <DD.menu as |Menu|>\n                  {{#each item.children as |subItem|}}\n                    <Menu.item>\n                      {{!-- template-lint-disable require-context-role --}}\n                      <a\n                        href=\"#{{subItem.id}}\"\n                        role=\"tab\"\n                        class=\"dropdown-item {{if (bs-eq this.activeId subItem.id) \"active\"}}\"\n                        {{on \"click\" (fn this.select subItem.id)}}\n                      >\n                        {{subItem.title}}\n                      </a>\n                    </Menu.item>\n                  {{/each}}\n                </DD.menu>\n              </Nav.dropdown>\n            {{else}}\n              <Nav.item @active={{bs-eq item.id this.activeId}} role=\"presentation\">\n                <a\n                  href=\"#{{item.id}}\"\n                  role=\"tab\"\n                  class=\"nav-link {{if (bs-eq this.activeId item.id) \"active\"}}\"\n                  aria-selected={{if (bs-eq this.activeId item.id) \"true\" \"false\"}}\n                  {{on \"click\" (fn this.select item.id)}}\n                >\n                  {{item.title}}\n                </a>\n              </Nav.item>\n            {{/if}}\n          {{/each}}\n        </NavComponent>\n      {{/let}}\n  \n      <div class=\"tab-content\">\n        {{yield\n          (hash\n            pane=(component (ensure-safe-component (bs-default @paneComponent (component \"bs-tab/pane\"))) parent=this activeId=this.activeId fade=this.fade fadeTransition=this.fadeTransition registerChild=this.registerChild unregisterChild=this.unregisterChild)\n            activeId=this.activeId\n            select=this.select\n          )\n        }}\n      </div>\n    {{/if}}\n  \n  </div>\n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[17,1],[4,[38,1],[[30,0,[\\\"listenToActiveId\\\"]],[30,2]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"customTabs\\\"]],[[[1,\\\"    \\\"],[18,11,[[28,[37,4],null,[[\\\"pane\\\",\\\"activeId\\\",\\\"select\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,3],[50,\\\"bs-tab/pane\\\",0,null,null]],null]],null],0,null,[[\\\"parent\\\",\\\"activeId\\\",\\\"fade\\\",\\\"fadeTransition\\\",\\\"registerChild\\\",\\\"unregisterChild\\\"],[[30,0],[30,0,[\\\"activeId\\\"]],[30,0,[\\\"fade\\\"]],[30,0,[\\\"fadeTransition\\\"]],[30,0,[\\\"registerChild\\\"]],[30,0,[\\\"unregisterChild\\\"]]]]],[30,0,[\\\"activeId\\\"]],[30,0,[\\\"select\\\"]]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[44,[[28,[37,6],[[28,[37,7],[[30,4],[50,\\\"bs-nav\\\",0,null,null]],null]],null]],[[[1,\\\"      \\\"],[8,[30,5],[[24,\\\"role\\\",\\\"tablist\\\"]],[[\\\"@type\\\"],[[30,0,[\\\"type\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"navItems\\\"]]],null]],null],null,[[[41,[30,7,[\\\"isGroup\\\"]],[[[1,\\\"            \\\"],[8,[30,6,[\\\"dropdown\\\"]],[[16,0,[52,[28,[37,11],[[30,7,[\\\"childIds\\\"]],[30,0,[\\\"activeId\\\"]]],null],\\\"active\\\"]],[24,\\\"role\\\",\\\"presentation\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,8,[\\\"toggle\\\"]],null,null,[[\\\"default\\\"],[[[[1,[30,7,[\\\"groupTitle\\\"]]],[1,\\\" \\\"],[10,1],[14,0,\\\"caret\\\"],[12],[13]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[30,8,[\\\"menu\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,7,[\\\"children\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,9,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[1,\\\"                    \\\"],[11,3],[16,6,[29,[\\\"#\\\",[30,10,[\\\"id\\\"]]]]],[24,\\\"role\\\",\\\"tab\\\"],[16,0,[29,[\\\"dropdown-item \\\",[52,[28,[37,14],[[30,0,[\\\"activeId\\\"]],[30,10,[\\\"id\\\"]]],null],\\\"active\\\"]]]],[4,[38,15],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"select\\\"]],[30,10,[\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n                      \\\"],[1,[30,10,[\\\"title\\\"]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[10]],null],[1,\\\"              \\\"]],[9]]]]],[1,\\\"\\\\n            \\\"]],[8]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[30,6,[\\\"item\\\"]],[[24,\\\"role\\\",\\\"presentation\\\"]],[[\\\"@active\\\"],[[28,[37,14],[[30,7,[\\\"id\\\"]],[30,0,[\\\"activeId\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[11,3],[16,6,[29,[\\\"#\\\",[30,7,[\\\"id\\\"]]]]],[24,\\\"role\\\",\\\"tab\\\"],[16,0,[29,[\\\"nav-link \\\",[52,[28,[37,14],[[30,0,[\\\"activeId\\\"]],[30,7,[\\\"id\\\"]]],null],\\\"active\\\"]]]],[16,\\\"aria-selected\\\",[52,[28,[37,14],[[30,0,[\\\"activeId\\\"]],[30,7,[\\\"id\\\"]]],null],\\\"true\\\",\\\"false\\\"]],[4,[38,15],[\\\"click\\\",[28,[37,16],[[30,0,[\\\"select\\\"]],[30,7,[\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n                \\\"],[1,[30,7,[\\\"title\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]]]],[7]],null],[1,\\\"      \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"tab-content\\\"],[12],[1,\\\"\\\\n      \\\"],[18,11,[[28,[37,4],null,[[\\\"pane\\\",\\\"activeId\\\",\\\"select\\\"],[[50,[28,[37,6],[[28,[37,7],[[30,3],[50,\\\"bs-tab/pane\\\",0,null,null]],null]],null],0,null,[[\\\"parent\\\",\\\"activeId\\\",\\\"fade\\\",\\\"fadeTransition\\\",\\\"registerChild\\\",\\\"unregisterChild\\\"],[[30,0],[30,0,[\\\"activeId\\\"]],[30,0,[\\\"fade\\\"]],[30,0,[\\\"fadeTransition\\\"]],[30,0,[\\\"registerChild\\\"]],[30,0,[\\\"unregisterChild\\\"]]]]],[30,0,[\\\"activeId\\\"]],[30,0,[\\\"select\\\"]]]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"&attrs\\\",\\\"@activeId\\\",\\\"@paneComponent\\\",\\\"@navComponent\\\",\\\"NavComponent\\\",\\\"Nav\\\",\\\"item\\\",\\\"DD\\\",\\\"Menu\\\",\\\"subItem\\\",\\\"&default\\\"],[\\\"div\\\",\\\"did-update\\\",\\\"if\\\",\\\"yield\\\",\\\"hash\\\",\\\"component\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"let\\\",\\\"each\\\",\\\"-track-array\\\",\\\"bs-contains\\\",\\\"span\\\",\\\"a\\\",\\\"bs-eq\\\",\\\"on\\\",\\\"fn\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-tab.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n    Tab component for dynamic tab functionality that mimics the behaviour of Bootstrap's tab.js plugin,\n    see http://getbootstrap.com/javascript/#tabs\n  \n    ### Usage\n  \n    Just nest any number of yielded [Components.TabPane](Components.TabPane.html) components that hold the tab content.\n    The tab navigation is automatically generated from the tab panes' `title` property:\n  \n    ```hbs\n    <BsTab as |tab|>\n      <tab.pane @title=\"Tab 1\">\n        <p> ... </p>\n      </tab.pane>\n      <tab.pane @title=\"Tab 2\">\n        <p> ... </p>\n      </tab.pane>\n    </BsTab>\n    ```\n  \n    ### Groupable (dropdown) tabs\n  \n    Bootstrap's support for dropdown menus as tab navigation is mimiced by the use of the `groupTitle` property.\n    All panes with the same `groupTitle` will be put inside the menu of a [Components.Dropdown](Components.Dropdown.html)\n    component with `groupTitle` being the dropdown's title:\n  \n    ```hbs\n    <BsTab as |tab|>\n      <tab.pane @title=\"Tab 1\">\n        <p> ... </p>\n      </tab.pane>\n      <tab.pane @title=\"Tab 2\">\n        <p> ... </p>\n      </tab.pane>\n      <tab.pane @title=\"Tab 3\" @groupTitle=\"Dropdown\">\n        <p> ... </p>\n      </tab.pane>\n      <tab.pane @title=\"Tab 4\" @groupTitle=\"Dropdown\">\n        <p> ... </p>\n      </tab.pane>\n    </BsTab>\n    ```\n  \n    ### Custom tabs\n  \n    When having the tab pane's `title` as the tab navigation title is not sufficient, for example because you want to\n    integrate some other dynamic content, maybe even other components in the tab navigation item, then you have to set up\n    your navigation by yourself.\n  \n    Set `customTabs` to true to deactivate the automatic tab navigation generation. Then set up your navigation, probably\n    using a [Components.Nav](Components.Nav.html) component. The tab component yields the `activeId` property as well as\n    its `select` action, which you would have to use to manually set the `active` state of the navigation items and to\n    trigger the selection of the different tab panes, using their ids:\n  \n    ```hbs\n    <BsTab @customTabs={{true}} as |tab|>\n      <BsNav @type=\"tabs\" as |nav|>\n        <nav.item @active={{bs-eq tab.activeId \"pane1\"}}><a href=\"#pane1\" role=\"tab\" {{on \"click\" (fn tab.select \"pane1\")}}>Tab 1</a></nav.item>\n        <nav.item @active={{bs-eq tab.activeId \"pane2\"}}><a href=\"#pane2\" role=\"tab\" {{on \"click\" (fn tab.select \"pane2\")}}>Tab 2 <span class=\"badge\">{{badge}}</span></a></nav.item>\n      </BsNav>\n      <div class=\"tab-content\">\n        <tab.pane @id=\"pane1\" @title=\"Tab 1\">\n          <p> ... </p>\n        </tab.pane>\n        <tab.pane @id=\"pane2\" @title=\"Tab 2\">\n          <p> ... </p>\n        </tab.pane>\n      </div>\n    </BsTab>\n    ```\n  \n    Note that the `bs-eq` helper used in the example above is a private helper, which is not guaranteed to be available for\n    the future. Better use the corresponding `eq` helper of the\n    [ember-truth-helpers](https://github.com/jmurphyau/ember-truth-helpers) addon for example!\n  \n    ### Routable tabs\n  \n    The tab component purpose is to have panes of content, that are all in DOM at the same time and that are activated and\n    deactivated dynamically, just as the  original Bootstrap implementation.\n  \n    If you want to have the content delivered through individual sub routes, just use\n    the [Components.Nav](Components.Nav.html) component and an `{{outlet}}` that show the nested routes' content:\n  \n    ```hbs\n    <div>\n      <BsNav @type=\"tabs\" as |nav|>\n        <nav.item>\n          <nav.linkTo @route=\"tabs.index\">Tab 1</nav.linkTo>\n        </nav.item>\n        <nav.item>\n          <nav.linkTo @route=\"tabs.other\">Tab 3</nav.linkTo>\n        </nav.item>\n      </BsNav>\n    </div>\n    ```\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Tab\n    @namespace Components\n    @extends Component\n    @public\n  */\n  let Tab = _exports.default = (_class = class Tab extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"children\", _descriptor, this);\n      /**\n       * @property selectedId\n       * @private\n       */\n      _initializerDefineProperty(this, \"selectedId\", _descriptor2, this);\n    }\n    /**\n     * Type of nav, either \"pills\" or \"tabs\"\n     *\n     * @property type\n     * @type String\n     * @default 'tabs'\n     * @public\n     */\n    get type() {\n      return this.args.type ?? 'tabs';\n    }\n\n    /**\n     * @property paneComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * @property navComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * By default, the tabs will be automatically generated using the available [TabPane](Components.TabPane.html)\n     * components. If set to true, you can deactivate this and set up the tabs manually. See the example above.\n     *\n     * @property customTabs\n     * @type boolean\n     * @default false\n     * @public\n     */\n    get customTabs() {\n      return this.args.customTabs ?? false;\n    }\n    /**\n     * The id (`id`) of the active [TabPane](Components.TabPane.html).\n     * By default, the first tab will be active, but this can be changed by setting this property\n     *\n     * ```hbs\n     * {{#bs-tab activeId=\"pane2\"}}\n     *   {{#tab.pane id=\"pane1\" title=\"Tab 1\"}}\n     *      ...\n     *   {{/tab.pane}}\n     *   {{#tab.pane id=\"pane1\" title=\"Tab 1\"}}\n     *     ...\n     *   {{/tab.pane}}\n     * {{/bs-tab}}\n     * ```\n     *\n     * When the selection is changed by user interaction this property will not update by using two-way bindings in order\n     * to follow DDAU best practices. If you want to react to such changes, subscribe to the `onChange` action\n     *\n     * @property activeId\n     * @type string\n     * @public\n     */\n    get activeId() {\n      return this.selectedId ?? this.childPanes[0]?.id;\n    }\n    /**\n     * Set to false to disable the fade animation when switching tabs.\n     *\n     * @property fade\n     * @type boolean\n     * @default true\n     * @public\n     */\n    get fade() {\n      return this.args.fade ?? true;\n    }\n\n    /**\n     * The duration of the fade animation\n     *\n     * @property fadeDuration\n     * @type number\n     * @default 150\n     * @public\n     */\n    get fadeDuration() {\n      return this.args.fadeDuration ?? 150;\n    }\n\n    /**\n     * This action is called when switching the active tab, with the new and previous pane id\n     *\n     * You can return false to prevent changing the active tab automatically, and do that in your action by\n     * setting `activeId`.\n     *\n     * @event onChange\n     * @public\n     */\n\n    /**\n     * All `TabPane` child components\n     *\n     * @property childPanes\n     * @type array\n     * @readonly\n     * @private\n     */\n    get childPanes() {\n      return this.children.filter(child => child instanceof _pane.default);\n    }\n\n    /**\n     * Array of objects that define the tab structure\n     *\n     * @property navItems\n     * @type array\n     * @readonly\n     * @private\n     */\n    get navItems() {\n      let items = [];\n      this.childPanes.forEach(pane => {\n        let groupTitle = pane.groupTitle;\n        let item = {\n          id: pane.id,\n          title: pane.title\n        };\n        if ((0, _utils.isPresent)(groupTitle)) {\n          let group = items.find(item => item.groupTitle === groupTitle);\n          if (group) {\n            group.children.push(item);\n            group.childIds.push(item.id);\n          } else {\n            items.push({\n              isGroup: true,\n              groupTitle,\n              children: [item],\n              childIds: [item.id]\n            });\n          }\n        } else {\n          items.push(item);\n        }\n      });\n      return items;\n    }\n    select(id) {\n      let previous = this.activeId;\n      if (this.args.onChange?.(id, previous) !== false) {\n        // change active tab when `onChange` does not return false\n        this.selectedId = id;\n      }\n    }\n    registerChild(element) {\n      (0, _runloop.schedule)('actions', this, () => {\n        this.children = [...this.children, element];\n      });\n    }\n    unregisterChild(element) {\n      (0, _runloop.schedule)('actions', this, () => {\n        this.children = this.children.filter(value => value !== element);\n      });\n    }\n    listenToActiveId() {\n      this.selectedId = this.args.activeId;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"children\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedId\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"select\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"select\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"registerChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"registerChild\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"unregisterChild\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"unregisterChild\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"listenToActiveId\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"listenToActiveId\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Tab);\n});","define(\"ember-bootstrap/components/bs-tab/pane\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/runloop\", \"ember-bootstrap/utils/transition-end\", \"ember-bootstrap/utils/decorators/uses-transition\", \"@ember/object/internals\", \"ember-ref-bucket\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _runloop, _transitionEnd, _usesTransition, _internals, _emberRefBucket, _object, _tracking, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/runloop\",0,\"ember-bootstrap/utils/transition-end\",0,\"ember-bootstrap/utils/decorators/uses-transition\",0,\"@ember/object/internals\",0,\"ember-ref-bucket\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  <div\n    class=\"tab-pane {{if this.showContent \"show\"}} {{if this.active \"active\"}} {{if this.usesTransition \"fade\"}}\"\n    role=\"tabpanel\"\n    ...attributes\n    {{create-ref \"mainNode\"}}\n    {{did-insert this.updateActive @active}}\n    {{did-update this.showHide this.isActive}}\n  >\n    {{yield}}\n  </div>\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[11,0],[16,0,[29,[\\\"tab-pane \\\",[52,[30,0,[\\\"showContent\\\"]],\\\"show\\\"],\\\" \\\",[52,[30,0,[\\\"active\\\"]],\\\"active\\\"],\\\" \\\",[52,[30,0,[\\\"usesTransition\\\"]],\\\"fade\\\"]]]],[24,\\\"role\\\",\\\"tabpanel\\\"],[17,1],[4,[38,2],[\\\"mainNode\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[4,[38,3],[[30,0,[\\\"updateActive\\\"]],[30,2]],null],[4,[38,4],[[30,0,[\\\"showHide\\\"]],[30,0,[\\\"isActive\\\"]]],null],[12],[1,\\\"\\\\n  \\\"],[18,3,null],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\",\\\"@active\\\",\\\"&default\\\"],[\\\"div\\\",\\\"if\\\",\\\"create-ref\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-tab/pane.hbs\",\n    \"isStrictMode\": false\n  });\n\n  /**\n   The tab pane of a tab component.\n   See [Components.Tab](Components.Tab.html) for examples.\n  \n   @class TabPane\n   @namespace Components\n   @extends Component\n   @public\n   */\n  let TabPane = _exports.default = (_dec = (0, _emberRefBucket.ref)('mainNode'), _dec2 = (0, _usesTransition.default)('fade'), _class = class TabPane extends _component2.default {\n    /**\n     * @property id\n     * @type string\n     * @public\n     */\n    get id() {\n      return this.args.id ?? (0, _internals.guidFor)(this);\n    }\n\n    /**\n     * @property activeId\n     * @private\n     */\n    get activeId() {\n      return this.args.activeId ?? null;\n    }\n\n    /**\n     * True if this pane is active (visible)\n     *\n     * @property isActive\n     * @type boolean\n     * @readonly\n     * @private\n     */\n    get isActive() {\n      return this.activeId === this.id;\n    }\n\n    /**\n     * Used to apply Bootstrap's \"active\" class\n     *\n     * @property active\n     * @type boolean\n     * @default false\n     * @private\n     */\n\n    /**\n     * The title for this tab pane. This is used by the `bs-tab` component to automatically generate\n     * the tab navigation.\n     * See the [Components.Tab](Components.Tab.html) for examples.\n     *\n     * @property title\n     * @type string\n     * @default null\n     * @public\n     */\n    get title() {\n      return this.args.title ?? null;\n    }\n\n    /**\n     * An optional group title used by the `bs-tab` component to group all panes with the same group title\n     * under a common drop down in the tab navigation.\n     * See the [Components.Tab](Components.Tab.html) for examples.\n     *\n     * @property groupTitle\n     * @type string\n     * @default null\n     * @public\n     */\n    get groupTitle() {\n      return this.args.groupTitle ?? null;\n    }\n\n    /**\n     * Use fade animation when switching tabs.\n     *\n     * @property fade\n     * @type boolean\n     * @private\n     */\n    get fade() {\n      return this.args.fade ?? true;\n    }\n\n    /**\n     * The duration of the fade out animation\n     *\n     * @property fadeDuration\n     * @type number\n     * @default 150\n     * @private\n     */\n    get fadeDuration() {\n      return this.args.fadeDuration ?? 150;\n    }\n\n    /**\n     * Use CSS transitions?\n     *\n     * @property usesTransition\n     * @type boolean\n     * @readonly\n     * @private\n     */\n\n    /**\n     * Show the pane\n     *\n     * @method show\n     * @protected\n     */\n    show() {\n      if (this.usesTransition) {\n        if (!this._element) {\n          // _element is initially set by `{{create-ref}}` which happens in next run loop, so can be undefined here.\n          this.active = true;\n          this.showContent = true;\n        } else {\n          (0, _transitionEnd.default)(this._element, this.fadeDuration).then(() => {\n            if (!this.isDestroyed) {\n              this.active = true;\n              this.showContent = true;\n            }\n          });\n        }\n      } else {\n        this.active = true;\n      }\n    }\n\n    /**\n     * Hide the pane\n     *\n     * @method hide\n     * @protected\n     */\n    hide() {\n      if (this.usesTransition) {\n        (0, _transitionEnd.default)(this._element, this.fadeDuration).then(() => {\n          if (!this.isDestroyed) {\n            this.active = false;\n          }\n        });\n        this.showContent = false;\n      } else {\n        this.active = false;\n      }\n    }\n    showHide() {\n      if (this.isActive) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }\n    _setActive() {\n      this.active = this.isActive;\n      this.showContent = this.isActive && this.fade;\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      /**\n       * @property id\n       * @type null | HTMLElement\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n      _initializerDefineProperty(this, \"active\", _descriptor2, this);\n      /**\n       * Used to trigger the Bootstrap visibility classes.\n       *\n       * @property showContent\n       * @type boolean\n       * @default false\n       * @private\n       */\n      _initializerDefineProperty(this, \"showContent\", _descriptor3, this);\n      _initializerDefineProperty(this, \"usesTransition\", _descriptor4, this);\n      args.registerChild?.(this);\n\n      // isActive comes from parent component, so only available after render...\n      (0, _runloop.scheduleOnce)('afterRender', this, this._setActive);\n    }\n    willDestroy() {\n      super.willDestroy();\n      this.args.unregisterChild?.(this);\n    }\n    updateActive() {\n      this.active = this.args.active;\n    }\n    updateShowContent() {\n      this.showContent = this.args.showContent;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"active\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.active ?? false;\n    }\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showContent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.args.showContent ?? false;\n    }\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"usesTransition\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showHide\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showHide\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateActive\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateActive\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateShowContent\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateShowContent\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TabPane);\n});","define(\"ember-bootstrap/components/bs-tooltip\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-contextual-help\", \"@ember/template-factory\"], function (_exports, _component, _bsContextualHelp, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-contextual-help\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{! template-lint-disable no-unbound }}\n  {{unbound this._parentFinder}}\n  {{#if this.inDom}}\n    {{#let (ensure-safe-component (bs-default @elementComponent (component \"bs-tooltip/element\"))) as |Element|}}\n      <Element\n        @placement={{this.placement}}\n        @fade={{this.fade}}\n        @showHelp={{this.showHelp}}\n        @renderInPlace={{this._renderInPlace}}\n        @destinationElement={{this.destinationElement}}\n        @popperTarget={{this.triggerTargetElement}}\n        @autoPlacement={{this.autoPlacement}}\n        @viewportElement={{this.viewportElement}}\n        @viewportPadding={{this.viewportPadding}}\n  \n        {{create-ref \"overlayElement\"}}\n        ...attributes\n      >\n        {{#if (has-block)}}\n          {{yield\n            (hash\n              close=this.close\n            )\n          }}\n        {{else}}\n          {{@title}}\n        {{/if}}\n      </Element>\n    {{/let}}\n  {{/if}}\n  {{did-insert-helper this.setup}}\n  {{did-update-helper this.showOrHide @visible}}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],[[30,0,[\\\"_parentFinder\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"inDom\\\"]],[[[44,[[28,[37,3],[[28,[37,4],[[30,1],[50,\\\"bs-tooltip/element\\\",0,null,null]],null]],null]],[[[1,\\\"    \\\"],[8,[30,2],[[17,3],[4,[38,6],[\\\"overlayElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]]],[[\\\"@placement\\\",\\\"@fade\\\",\\\"@showHelp\\\",\\\"@renderInPlace\\\",\\\"@destinationElement\\\",\\\"@popperTarget\\\",\\\"@autoPlacement\\\",\\\"@viewportElement\\\",\\\"@viewportPadding\\\"],[[30,0,[\\\"placement\\\"]],[30,0,[\\\"fade\\\"]],[30,0,[\\\"showHelp\\\"]],[30,0,[\\\"_renderInPlace\\\"]],[30,0,[\\\"destinationElement\\\"]],[30,0,[\\\"triggerTargetElement\\\"]],[30,0,[\\\"autoPlacement\\\"]],[30,0,[\\\"viewportElement\\\"]],[30,0,[\\\"viewportPadding\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[48,[30,6]],[[[1,\\\"        \\\"],[18,6,[[28,[37,9],null,[[\\\"close\\\"],[[30,0,[\\\"close\\\"]]]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[30,4]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]]]],[]],null],[1,[28,[35,10],[[30,0,[\\\"setup\\\"]]],null]],[1,\\\"\\\\n\\\"],[1,[28,[35,11],[[30,0,[\\\"showOrHide\\\"]],[30,5]],null]]],[\\\"@elementComponent\\\",\\\"Element\\\",\\\"&attrs\\\",\\\"@title\\\",\\\"@visible\\\",\\\"&default\\\"],[\\\"unbound\\\",\\\"if\\\",\\\"let\\\",\\\"ensure-safe-component\\\",\\\"bs-default\\\",\\\"component\\\",\\\"create-ref\\\",\\\"has-block\\\",\\\"yield\\\",\\\"hash\\\",\\\"did-insert-helper\\\",\\\"did-update-helper\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-tooltip.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n    Component that implements Bootstrap [tooltips](http://getbootstrap.com/javascript/#tooltips).\n  \n    By default, it will attach its listeners (mouseover and focus) to the parent DOM element to trigger\n    the tooltip:\n  \n    ```hbs\n    <button class=\"btn\">\n      <BsTooltip @title=\"This is a tooltip\" />\n    </button>\n    ```\n  \n    You can also use the component in a block form to set the title:\n  \n    ```hbs\n    <button class=\"btn\">\n      <BsTooltip>\n        This is a tooltip\n      </BsTooltip>\n    </button>\n    ```\n  \n    ### Trigger\n  \n    The trigger element is the DOM element that will cause the tooltip to be shown when one of the trigger events occur on\n    that element. By default, the trigger element is the parent DOM element of the component, and the trigger events will be\n    \"hover\" and \"focus\".\n  \n    The `triggerElement` property accepts any CSS selector to attach the tooltip to any other existing DOM element.\n  \n    To customize the events that will trigger the tooltip use the `triggerEvents` property, that accepts an array or a\n    string of events, with \"hover\", \"focus\" and \"click\" being supported.\n  \n    ### Placement options\n  \n    By default, the tooltip will show up on top of the trigger element. Use the `placement` property to change that\n    (\"top\", \"bottom\", \"left\" and \"right\"). To make sure the tooltip will not exceed the viewport (see Advanced customization)\n    you can set `autoPlacement` to true. A tooltip with `placement=\"right\" will be placed to the right if there is enough\n    space, otherwise to the left.\n  \n    ### Advanced customization\n  \n    Several other properties allow for some advanced customization:\n    * `visible` to show/hide the tooltip programmatically\n    * `fade` to disable the fade in transition\n    * `delay` (or `delayShow` and `delayHide`) to add a delay\n    * `viewportSelector` and `viewportPadding` to customize the viewport that affects `autoPlacement`\n    * a `close` action is yielded, that allows you to close the tooltip:\n  \n    ```hbs\n    <BsTooltip as |tt|>This is a tooltip <button {{on \"click\" tt.close}}>Close</button></BsTooltip>\n    ```\n  \n    See the individual API docs for each property.\n  \n    ### Actions\n  \n    When you want to react on the tooltip being shown or hidden, you can use one of the following supported actions:\n    * `onShow`\n    * `onShown`\n    * `onHide`\n    * `onHidden`\n  \n    *Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.*\n  \n    @class Tooltip\n    @namespace Components\n    @extends Components.ContextualHelp\n    @public\n  */\n  class Tooltip extends _bsContextualHelp.default {\n    /**\n     * @property elementComponent\n     * @type {String}\n     * @private\n     */\n\n    /**\n     * The DOM element of the arrow element.\n     *\n     * @property arrowElement\n     * @type object\n     * @readonly\n     * @private\n     */\n    get arrowElement() {\n      return this.overlayElement.querySelector('.tooltip-arrow');\n    }\n  }\n  _exports.default = Tooltip;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Tooltip);\n});","define(\"ember-bootstrap/components/bs-tooltip/element\", [\"exports\", \"@ember/component\", \"ember-bootstrap/components/bs-contextual-help/element\", \"@ember/template-factory\"], function (_exports, _component, _element, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/components/bs-contextual-help/element\",0,\"@embroider/macros\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! @glint-nocheck }}\n  {{#if @renderInPlace}}\n    <div\n      class=\"tooltip {{if this.fade \"fade\"}} {{this.actualPlacementClass}} {{if this.showHelp \"show\"}}\"\n      role=\"tooltip\"\n      ...attributes\n      {{popper-tooltip @popperTarget this.popperOptions}}\n      {{create-ref \"popperElement\"}}\n    >\n      <div class={{this.arrowClass}}></div>\n      <div class=\"tooltip-inner\">\n        {{yield}}\n      </div>\n    </div>\n  {{else}}\n    {{#in-element @destinationElement insertBefore=null}}\n      <div\n        class=\"tooltip {{if this.fade \"fade\"}} {{this.actualPlacementClass}} {{if this.showHelp \"show\"}}\"\n        role=\"tooltip\"\n        ...attributes\n        {{popper-tooltip @popperTarget this.popperOptions}}\n        {{create-ref \"popperElement\"}}\n      >\n        <div class={{this.arrowClass}}></div>\n        <div class=\"tooltip-inner\">\n          {{yield}}\n        </div>\n      </div>\n    {{/in-element}}\n  {{/if}}\n  \n  \n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[11,0],[16,0,[29,[\\\"tooltip \\\",[52,[30,0,[\\\"fade\\\"]],\\\"fade\\\"],\\\" \\\",[30,0,[\\\"actualPlacementClass\\\"]],\\\" \\\",[52,[30,0,[\\\"showHelp\\\"]],\\\"show\\\"]]]],[24,\\\"role\\\",\\\"tooltip\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[\\\"popperElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[30,0,[\\\"arrowClass\\\"]]],[12],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"tooltip-inner\\\"],[12],[1,\\\"\\\\n      \\\"],[18,5,null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[40,[[[1,\\\"    \\\"],[11,0],[16,0,[29,[\\\"tooltip \\\",[52,[30,0,[\\\"fade\\\"]],\\\"fade\\\"],\\\" \\\",[30,0,[\\\"actualPlacementClass\\\"]],\\\" \\\",[52,[30,0,[\\\"showHelp\\\"]],\\\"show\\\"]]]],[24,\\\"role\\\",\\\"tooltip\\\"],[17,2],[4,[38,2],[[30,3],[30,0,[\\\"popperOptions\\\"]]],null],[4,[38,3],[\\\"popperElement\\\"],[[\\\"debugName\\\",\\\"bucket\\\"],[\\\"create-ref\\\",[30,0]]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[15,0,[30,0,[\\\"arrowClass\\\"]]],[12],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"tooltip-inner\\\"],[12],[1,\\\"\\\\n        \\\"],[18,5,null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],\\\"%cursor:0%\\\",[28,[37,6],[[30,4]],null],null]],[]]],[1,\\\"\\\\n\\\"]],[\\\"@renderInPlace\\\",\\\"&attrs\\\",\\\"@popperTarget\\\",\\\"@destinationElement\\\",\\\"&default\\\"],[\\\"if\\\",\\\"div\\\",\\\"popper-tooltip\\\",\\\"create-ref\\\",\\\"yield\\\",\\\"in-element\\\",\\\"-in-el-null\\\"]]\",\n    \"moduleName\": \"ember-bootstrap/components/bs-tooltip/element.hbs\",\n    \"isStrictMode\": false\n  });\n  /**\n   Internal component for tooltip's markup. Should not be used directly.\n  \n   @class TooltipElement\n   @namespace Components\n   @extends Components.ContextualHelpElement\n   @private\n   */\n  class TooltipElement extends _element.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"arrowClass\", 'tooltip-arrow');\n      _defineProperty(this, \"placementClassPrefix\", 'bs-tooltip-');\n      _defineProperty(this, \"offset\", [0, 6]);\n    }\n  }\n  _exports.default = TooltipElement;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, TooltipElement);\n});","define(\"ember-bootstrap/config\", [\"exports\", \"@ember/object\"], function (_exports, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object\"eaimeta@70e063a35619d71f\n  class Config extends _object.default {}\n  Config.reopenClass({\n    formValidationSuccessIcon: 'glyphicon glyphicon-ok',\n    formValidationErrorIcon: 'glyphicon glyphicon-remove',\n    formValidationWarningIcon: 'glyphicon glyphicon-warning-sign',\n    formValidationInfoIcon: 'glyphicon glyphicon-info-sign',\n    insertEmberWormholeElementToDom: true,\n    load(config = {}) {\n      for (let property in config) {\n        if (Object.prototype.hasOwnProperty.call(this, property) && typeof this[property] !== 'function') {\n          this[property] = config[property];\n        }\n      }\n    }\n  });\n  var _default = _exports.default = Config;\n});","define(\"ember-bootstrap/helpers/bs-contains\", [\"exports\", \"@ember/component/helper\", \"@ember/array\"], function (_exports, _helper, _array) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.bsContains = bsContains;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/array\"eaimeta@70e063a35619d71f\n  function bsContains(params /* , hash*/) {\n    return (0, _array.isArray)(params[0]) ? (0, _array.A)(params[0]).includes(params[1]) : false;\n  }\n  var _default = _exports.default = (0, _helper.helper)(bsContains);\n});","define(\"ember-bootstrap/helpers/bs-default\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.bsDefault = bsDefault;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  function bsDefault(params) {\n    return params[0] ?? params[1];\n  }\n  var _default = _exports.default = (0, _helper.helper)(bsDefault);\n});","define(\"ember-bootstrap/helpers/bs-eq\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = eq;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function eq(one, other) {\n    return one === other;\n  }\n});","define(\"ember-bootstrap/helpers/bs-form-horiz-input-class\", [\"exports\", \"@ember/component/helper\", \"@ember/debug\", \"@ember/utils\"], function (_exports, _helper, _debug, _utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/debug\",0,\"@ember/utils\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function bsFormHorizInputClass([horizontalLabelGridClass] /*, named*/) {\n    if ((0, _utils.isBlank)(horizontalLabelGridClass)) {\n      return undefined;\n    }\n    let originalClasses = horizontalLabelGridClass.split(' ');\n    let inputClasses = originalClasses.map(originalClass => {\n      let parts = originalClass.split('-');\n      (false && !(parts.length === 3) && (0, _debug.assert)('horizontalInputGridClass must match format bootstrap grid column class', parts.length === 3));\n      parts[2] = 12 - parts[2];\n      return parts.join('-');\n    });\n    return inputClasses.join(' ');\n  });\n});","define(\"ember-bootstrap/helpers/bs-form-horiz-offset-class\", [\"exports\", \"@ember/component/helper\", \"@ember/utils\"], function (_exports, _helper, _utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/utils\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _helper.helper)(function bsFormHorizOffsetClass([horizontalLabelGridClass] /*, named*/) {\n    if ((0, _utils.isBlank)(horizontalLabelGridClass)) {\n      return undefined;\n    }\n    let originalClasses = horizontalLabelGridClass.split(' ');\n    let offsetClasses = originalClasses.map(originalClass => {\n      let parts = originalClass.split('-');\n      parts.splice(0, 1, 'offset');\n      return parts.join('-');\n    });\n    return offsetClasses.join(' ');\n  });\n});","define(\"ember-bootstrap/helpers/bs-noop\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = bsNoopHelper;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const noop = () => {};\n  function bsNoopHelper() {\n    return noop;\n  }\n});","define(\"ember-bootstrap/helpers/bs-size-class\", [\"exports\", \"@ember/component/helper\", \"@ember/utils\"], function (_exports, _helper, _utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.sizeClassHelper = sizeClassHelper;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"@ember/utils\"eaimeta@70e063a35619d71f\n  function sizeClassHelper([prefix, size], {\n    default: defaultValue\n  }) {\n    size = size ?? defaultValue;\n    return (0, _utils.isBlank)(size) ? null : `${prefix}-${size}`;\n  }\n  var _default = _exports.default = (0, _helper.helper)(sizeClassHelper);\n});","define(\"ember-bootstrap/helpers/bs-type-class\", [\"exports\", \"@ember/component/helper\"], function (_exports, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.typeClassHelper = typeClassHelper;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  function typeClassHelper([prefix, type], {\n    default: defaultValue,\n    outline = false\n  }) {\n    type = type ?? defaultValue;\n    if (outline) {\n      return `${prefix}-outline-${type}`;\n    }\n    return `${prefix}-${type}`;\n  }\n  var _default = _exports.default = (0, _helper.helper)(typeClassHelper);\n});","define(\"ember-bootstrap/macros-config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n});","define(\"ember-bootstrap/modifiers/bs-conditional-attribute\", [\"exports\", \"ember-modifier\"], function (_exports, _emberModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-modifier\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _emberModifier.modifier)((element, [attribute, condition, value]) => {\n    if (condition) {\n      element.setAttribute(attribute, value);\n    } else {\n      element.removeAttribute(attribute);\n    }\n  });\n});","define(\"ember-bootstrap/template-registry\", [], function () {\n  \"use strict\";\n\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n});","define(\"ember-bootstrap/utils/decorators/arg\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  /**\n   * @internal\n   */\n\n  function arg(target, key, descriptor) {\n    return {\n      get() {\n        const argValue = this.args[key];\n        return argValue !== undefined ? argValue : descriptor.initializer ? descriptor.initializer.call(this) : undefined;\n      }\n    };\n  }\n  var _default = _exports.default = arg;\n});","define(\"ember-bootstrap/utils/decorators/uses-transition\", [\"exports\", \"ember-bootstrap/utils/is-fastboot\", \"@ember/debug\"], function (_exports, _isFastboot, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-bootstrap/utils/is-fastboot\",0,\"@ember/debug\"eaimeta@70e063a35619d71f\n  /**\n   * @internal\n   */\n  function arg(fadeProperty) {\n    (false && !(typeof fadeProperty === 'string') && (0, _debug.assert)('You have to provide a fadeProperty for typeClass', typeof fadeProperty === 'string'));\n    return function () {\n      return {\n        get() {\n          return !(0, _isFastboot.default)(this) && this.args[fadeProperty] !== false;\n        }\n      };\n    };\n  }\n  var _default = _exports.default = arg;\n});","define(\"ember-bootstrap/utils/dom\", [\"exports\", \"@ember/application\", \"@ember/debug\", \"@embroider/macros/es-compat2\"], function (_exports, _application, _debug, _esCompat) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.findElemementByIdInShadowDom = findElemementByIdInShadowDom;\n  _exports.findElementById = findElementById;\n  _exports.getDOM = getDOM;\n  _exports.getDestinationElement = getDestinationElement;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/application\",0,\"@glimmer/env\",0,\"@ember/debug\",0,\"@embroider/macros\",0,\"@ember/test-helpers/dom/get-root-element\"eaimeta@70e063a35619d71f\n  /*\n   * Implement some helpers methods for interacting with the DOM,\n   * be it Fastboot's SimpleDOM or the browser's version.\n   *\n   * Credit to https://github.com/yapplabs/ember-wormhole, from where this has been shamelessly stolen.\n   */\n  function childNodesOfElement(element) {\n    let children = [];\n    let child = element.firstChild;\n    while (child) {\n      children.push(child);\n      child = child.nextSibling;\n    }\n    return children;\n  }\n  function findElementById(doc, id) {\n    if (doc.getElementById) {\n      return doc.getElementById(id);\n    }\n    let nodes = childNodesOfElement(doc);\n    let node;\n    while (nodes.length) {\n      node = nodes.shift();\n      if (node.getAttribute && node.getAttribute('id') === id) {\n        return node;\n      }\n      nodes = childNodesOfElement(node).concat(nodes);\n    }\n  }\n\n  // Private Ember API usage. Get the dom implementation used by the current\n  // renderer, be it native browser DOM or Fastboot SimpleDOM\n  function getDOM(context) {\n    let {\n      renderer\n    } = context;\n    if (!renderer?._dom) {\n      // pre glimmer2\n      let container = _application.getOwner ? (0, _application.getOwner)(context) : context.container;\n      let documentService = container.lookup('service:-document');\n      if (documentService) {\n        return documentService;\n      }\n      renderer = container.lookup('renderer:-dom');\n    }\n    if (renderer._dom && renderer._dom.document) {\n      return renderer._dom.document;\n    } else {\n      throw new Error('Could not get DOM');\n    }\n  }\n  function getDestinationElement(context) {\n    let dom = getDOM(context);\n    const id = 'ember-bootstrap-wormhole';\n    let destinationElement = findElementById(dom, id) || findElemementByIdInShadowDom(context, id);\n    if (false /* DEBUG */ && !destinationElement) {\n      if (false && typeof FastBoot === 'undefined') {\n        let id;\n        try {\n          id = (0, _esCompat.default)(require(\"@ember/test-helpers/dom/get-root-element\")).default().id;\n        } catch (ex) {\n          // no op\n        }\n        if (!id) {\n          return document.querySelector('#ember-testing');\n        }\n        return document.getElementById(id);\n      }\n      (false && (0, _debug.warn)(`No wormhole destination element found for component ${context}. Add \\`<div id=\"ember-bootstrap-wormhole\"></div>\\` to \\`app/index.html\\` or \\`app/templates/application.hbs\\`!`, false, {\n        id: 'ember-bootstrap.no-destination-element'\n      }));\n    }\n    return destinationElement;\n  }\n  function findElemementByIdInShadowDom(context, id) {\n    const owner = (0, _application.getOwner)(context);\n    return owner.rootElement.querySelector && owner.rootElement.querySelector(`[id=\"${id}\"]`);\n  }\n});","define(\"ember-bootstrap/utils/form-validation-class\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = formValidationClass;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function formValidationClass(validationType) {\n    switch (validationType) {\n      case 'error':\n        return 'is-invalid';\n      case 'success':\n        return 'is-valid';\n      case 'warning':\n        return 'is-warning';\n      // not officially supported in BS4 :(\n      default:\n        return undefined;\n    }\n  }\n});","define(\"ember-bootstrap/utils/is-fastboot\", [\"exports\", \"@ember/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = isFastBoot;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/application\"eaimeta@70e063a35619d71f\n  function isFastBoot(context) {\n    const owner = (0, _application.getOwner)(context);\n    if (!owner) {\n      return false;\n    }\n    const fastbootService = owner.lookup('service:fastboot');\n    return fastbootService ? fastbootService.isFastBoot : false;\n  }\n});","define(\"ember-bootstrap/utils/size-class\", [\"exports\", \"@ember/utils\", \"@ember/debug\"], function (_exports, _utils, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = sizeClass;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/utils\",0,\"@ember/debug\"eaimeta@70e063a35619d71f\n  function sizeClass(prefix, size) {\n    (false && !(typeof prefix === 'string') && (0, _debug.assert)('You have to provide a prefix for sizeClass', typeof prefix === 'string'));\n    (false && !(!size || typeof size === 'string' && size !== '') && (0, _debug.assert)('The value of `size` must be a string', !size || typeof size === 'string' && size !== ''));\n    return (0, _utils.isBlank)(size) ? null : `${prefix}-${size}`;\n  }\n});","define(\"ember-bootstrap/utils/transition-end\", [\"exports\", \"@ember/runloop\"], function (_exports, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = waitForTransitionEnd;\n  _exports.skipTransition = skipTransition;\n  0; //eaimeta@70e063a35619d71f0,\"@embroider/macros\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  let _skipTransition;\n  function skipTransition(bool) {\n    _skipTransition = bool;\n  }\n  function _isSkipped() {\n    return _skipTransition === true || _skipTransition !== false && false;\n  }\n  function waitForTransitionEnd(node, duration = 0) {\n    if (!node) {\n      return Promise.reject();\n    }\n    let backup;\n    if (_isSkipped()) {\n      duration = 0;\n    }\n    return new Promise(function (resolve) {\n      const done = function () {\n        if (backup) {\n          (0, _runloop.cancel)(backup);\n          backup = null;\n        }\n        node.removeEventListener('transitionend', done);\n        resolve();\n      };\n      node.addEventListener('transitionend', done, false);\n      backup = (0, _runloop.later)(this, done, duration);\n    });\n  }\n});","define(\"ember-bootstrap/version\", [\"exports\", \"@ember/-internals/metal\"], function (_exports, _metal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VERSION = void 0;\n  _exports.registerLibrary = registerLibrary;\n  0; //eaimeta@70e063a35619d71f0,\"@embroider/macros\",0,\"@ember/-internals/metal\"eaimeta@70e063a35619d71f\n  const VERSION = _exports.VERSION = \"6.7.0\";\n  function registerLibrary() {\n    _metal.libraries.register('Ember Bootstrap', VERSION);\n  }\n});","define(\"ember-cli-app-version/initializer-factory\", [\"exports\", \"@ember/-internals/metal\"], function (_exports, _metal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = initializerFactory;\n  function initializerFactory(name, version) {\n    let registered = false;\n    return function () {\n      if (!registered && name && version) {\n        _metal.libraries.register(name, version);\n        registered = true;\n      }\n    };\n  }\n});","define(\"ember-cli-app-version/utils/regexp\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.versionRegExp = _exports.versionExtendedRegExp = _exports.shaRegExp = void 0;\n  const versionRegExp = _exports.versionRegExp = /\\d+[.]\\d+[.]\\d+/; // Match any number of 3 sections of digits separated by .\n  const versionExtendedRegExp = _exports.versionExtendedRegExp = /\\d+[.]\\d+[.]\\d+-[a-z]*([.]\\d+)?/; // Match the above but also hyphen followed by any number of lowercase letters, then optionally period and digits\n  const shaRegExp = _exports.shaRegExp = /[a-z\\d]{8}$/; // Match 8 lowercase letters and digits, at the end of the string only (to avoid matching with version extended part)\n});","define(\"ember-on-helper/helpers/on-document\", [\"exports\", \"ember-on-helper/helpers/on\"], function (_exports, _on) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = _on.default.extend({\n    compute(positional, named) {\n      return this._super([document, ...positional], named);\n    }\n  });\n});","define(\"ember-on-helper/helpers/on-window\", [\"exports\", \"ember-on-helper/helpers/on\"], function (_exports, _on) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = _on.default.extend({\n    compute(positional, named) {\n      return this._super([window, ...positional], named);\n    }\n  });\n});","define(\"ember-on-helper/helpers/on\", [\"exports\", \"@ember/component/helper\", \"ember-on-helper/utils/event-listener\", \"@ember/debug\"], function (_exports, _helper, _eventListener, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.__counts = __counts;\n  _exports.default = void 0;\n  /* eslint no-param-reassign: \"off\" */\n\n  /**\n   * These are private API and only used for testing instrumentation.\n   */\n  let adds = 0;\n  let removes = 0;\n  function __counts() {\n    return {\n      adds,\n      removes\n    };\n  }\n  const assertValidEventOptions = false /* DEBUG */ && (() => {\n    const ALLOWED_EVENT_OPTIONS = ['capture', 'once', 'passive'];\n    const joinOptions = options => options.map(o => `'${o}'`).join(', ');\n    return function (eventOptions, eventName) {\n      const invalidOptions = Object.keys(eventOptions).filter(o => !ALLOWED_EVENT_OPTIONS.includes(o));\n      (false && !(invalidOptions.length === 0) && (0, _debug.assert)(`ember-on-helper: Provided invalid event options (${joinOptions(invalidOptions)}) to '${eventName}' event listener. Only these options are valid: ${joinOptions(ALLOWED_EVENT_OPTIONS)}`, invalidOptions.length === 0));\n    };\n  })();\n  function setupListener(eventTarget, eventName, callback, eventOptions) {\n    if (false /* DEBUG */) assertValidEventOptions(eventOptions, eventName);\n    (false && !(eventTarget && typeof eventTarget.addEventListener === 'function' && typeof eventTarget.removeEventListener === 'function') && (0, _debug.assert)(`ember-on-helper: '${eventTarget}' is not a valid event target. It has to be an Element or an object that conforms to the EventTarget interface.`, eventTarget && typeof eventTarget.addEventListener === 'function' && typeof eventTarget.removeEventListener === 'function'));\n    (false && !(typeof eventName === 'string' && eventName.length > 1) && (0, _debug.assert)(`ember-on-helper: '${eventName}' is not a valid event name. It has to be a string with a minimum length of 1 character.`, typeof eventName === 'string' && eventName.length > 1));\n    (false && !(typeof callback === 'function') && (0, _debug.assert)(`ember-on-helper: '${callback}' is not a valid callback. Provide a function.`, typeof callback === 'function'));\n    adds++;\n    (0, _eventListener.addEventListener)(eventTarget, eventName, callback, eventOptions);\n    return callback;\n  }\n  function destroyListener(eventTarget, eventName, callback, eventOptions) {\n    if (eventTarget && eventName && callback) {\n      removes++;\n      (0, _eventListener.removeEventListener)(eventTarget, eventName, callback, eventOptions);\n    }\n  }\n  var _default = _exports.default = _helper.default.extend({\n    eventTarget: null,\n    eventName: undefined,\n    callback: undefined,\n    eventOptions: undefined,\n    compute([eventTarget, eventName, callback], eventOptions) {\n      destroyListener(this.eventTarget, this.eventName, this.callback, this.eventOptions);\n      this.eventTarget = eventTarget;\n      this.callback = setupListener(this.eventTarget, eventName, callback, eventOptions);\n      this.eventName = eventName;\n      this.eventOptions = eventOptions;\n    },\n    willDestroy() {\n      this._super();\n      destroyListener(this.eventTarget, this.eventName, this.callback, this.eventOptions);\n    }\n  });\n});","define(\"ember-on-helper/utils/event-listener\", [\"exports\", \"@ember/debug\"], function (_exports, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.SUPPORTS_EVENT_OPTIONS = void 0;\n  _exports.addEventListener = addEventListener;\n  _exports.addEventListenerOnce = addEventListenerOnce;\n  _exports.removeEventListener = removeEventListener;\n  /* eslint no-param-reassign: \"off\" */\n\n  /**\n   * Internet Explorer 11 does not support `once` and also does not support\n   * passing `eventOptions`. In some situations it then throws a weird script\n   * error, like:\n   *\n   * ```\n   * Could not complete the operation due to error 80020101\n   * ```\n   *\n   * This flag determines, whether `{ once: true }` and thus also event options in\n   * general are supported.\n   */\n  const SUPPORTS_EVENT_OPTIONS = _exports.SUPPORTS_EVENT_OPTIONS = (() => {\n    try {\n      const div = document.createElement('div');\n      let counter = 0;\n      div.addEventListener('click', () => counter++, {\n        once: true\n      });\n      let event;\n      if (typeof Event === 'function') {\n        event = new Event('click');\n      } else {\n        event = document.createEvent('Event');\n        event.initEvent('click', true, true);\n      }\n      div.dispatchEvent(event);\n      div.dispatchEvent(event);\n      return counter === 1;\n    } catch (error) {\n      return false;\n    }\n  })();\n\n  /**\n   * Registers an event for an `element` that is called exactly once and then\n   * unregistered again. This is effectively a polyfill for `{ once: true }`.\n   *\n   * It also accepts a fourth optional argument `useCapture`, that will be passed\n   * through to `addEventListener`.\n   *\n   * @param {Element} element\n   * @param {string} eventName\n   * @param {Function} callback\n   * @param {boolean} [useCapture=false]\n   */\n  function addEventListenerOnce(element, eventName, callback, useCapture = false) {\n    function listener() {\n      element.removeEventListener(eventName, listener, useCapture);\n      callback();\n    }\n    element.addEventListener(eventName, listener, useCapture);\n  }\n\n  /**\n   * Safely invokes `addEventListener` for IE11 and also polyfills the\n   * `{ once: true }` and `{ capture: true }` options.\n   *\n   * All other options are discarded for IE11. Currently this is only `passive`.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n   *\n   * @param {Element} element\n   * @param {string} eventName\n   * @param {Function} callback\n   * @param {object} [eventOptions]\n   */\n  function addEventListener(element, eventName, callback, eventOptions) {\n    const _callback = false /* DEBUG */ && eventOptions && eventOptions.passive ? function (event) {\n      event.preventDefault = () => {\n        (false && !(false) && (0, _debug.assert)(`ember-on-helper: You marked this listener as 'passive', meaning that you must not call 'event.preventDefault()'.`));\n      };\n      return callback.call(this, event);\n    } : callback;\n    if (SUPPORTS_EVENT_OPTIONS) {\n      element.addEventListener(eventName, _callback, eventOptions);\n    } else if (eventOptions && eventOptions.once) {\n      addEventListenerOnce(element, eventName, _callback, Boolean(eventOptions.capture));\n    } else {\n      element.addEventListener(eventName, _callback, Boolean(eventOptions && eventOptions.capture));\n    }\n  }\n\n  /**\n   * Since the same `capture` event option that was used to add the event listener\n   * needs to be used when removing the listener, it needs to be polyfilled as\n   * `useCapture` for IE11.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n   *\n   * @param {Element} element\n   * @param {string} eventName\n   * @param {Function} callback\n   * @param {object} [eventOptions]\n   */\n  function removeEventListener(element, eventName, callback, eventOptions) {\n    if (SUPPORTS_EVENT_OPTIONS) {\n      element.removeEventListener(eventName, callback, eventOptions);\n    } else {\n      element.removeEventListener(eventName, callback, Boolean(eventOptions && eventOptions.capture));\n    }\n  }\n});","define(\"ember-popper-modifier/-base-popper-modifier\", [\"exports\", \"ember-modifier\", \"@ember/destroyable\", \"@ember/array\", \"@ember/utils\", \"@popperjs/core\", \"ember-popper-modifier/index\", \"ember-popper-modifier/in-runloop-modifier\"], function (_exports, _emberModifier, _destroyable, _array, _utils, _core, _index, _inRunloopModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-modifier\",0,\"@ember/destroyable\",0,\"@ember/array\",0,\"@ember/utils\",0,\"@popperjs/core\",0,\"ember-popper-modifier/index\",0,\"ember-popper-modifier/in-runloop-modifier\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function getPopperOptions(positional, named) {\n    // Get an array of just positional \"options\"; first item is an element reference\n    const [, ...positionalArguments] = positional;\n\n    // Positional args that are not modifiers should be treated as full \"options\" objects\n    const allPositionalOptions = positionalArguments.filter(arg => !(0, _index.isModifier)(arg));\n\n    // Positional args that are modifiers will extend the rest of the configuration\n    const allPositionalModifiers = positionalArguments.filter(arg => (0, _index.isModifier)(arg));\n    const {\n      ...namedOptions\n    } = named;\n    const customOptions = {\n      ...allPositionalOptions.reduce((acc, curr) => {\n        return {\n          ...acc,\n          ...curr\n        };\n      }, {}),\n      ...namedOptions\n    };\n    const options = {\n      ...customOptions,\n      // Ensure that the `modifiers` is always an array\n      modifiers: customOptions.modifiers === undefined || (0, _utils.isEmpty)(customOptions.modifiers) ? [] : (0, _array.isArray)(customOptions.modifiers) ? customOptions.modifiers : [customOptions.modifiers]\n    };\n\n    // Add runloop integration and positional modifiers to the array of modifiers\n    options.modifiers?.push(...allPositionalModifiers, _inRunloopModifier.beginRunLoopModifier, _inRunloopModifier.endRunLoopModifier);\n    return options;\n  }\n  class PopperModifier extends _emberModifier.default {\n    modify(element, positionalArgs, namedArgs) {\n      this.primaryElement = element;\n      this.secondaryElement = positionalArgs[0];\n      const popperOptions = getPopperOptions(positionalArgs, namedArgs);\n\n      // Create the popper once all required arguments are present\n      if (!this.popper && this.referenceElement && this.tooltipElement) {\n        this.popper = (0, _core.createPopper)(this.referenceElement, this.tooltipElement, popperOptions);\n        (0, _index.setPopperForElement)(this.primaryElement, this.popper);\n      }\n      this.popper?.setOptions(popperOptions);\n    }\n    constructor(owner, args) {\n      super(owner, args);\n      _defineProperty(this, \"popper\", null);\n      _defineProperty(this, \"primaryElement\", null);\n      _defineProperty(this, \"secondaryElement\", null);\n      _defineProperty(this, \"cleanup\", () => {\n        this.popper?.destroy();\n      });\n      (0, _destroyable.registerDestructor)(this, this.cleanup);\n    }\n  }\n  _exports.default = PopperModifier;\n});","define(\"ember-popper-modifier/helpers/popper-modifier\", [\"exports\", \"@ember/component/helper\", \"ember-popper-modifier/index\"], function (_exports, _helper, _index) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.buildPopperModifier = buildPopperModifier;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"ember-popper-modifier/index\"eaimeta@70e063a35619d71f\n  function buildPopperModifier([name, positionalOptions], optionsHash) {\n    const options = {\n      ...positionalOptions,\n      ...optionsHash\n    };\n    return (0, _index.createModifier)({\n      name,\n      options\n    });\n  }\n  var _default = _exports.default = (0, _helper.helper)(buildPopperModifier);\n});","define(\"ember-popper-modifier/in-runloop-modifier\", [\"exports\", \"@ember/runloop\"], function (_exports, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.endRunLoopModifier = _exports.beginRunLoopModifier = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  // This set keeps track of whether a particular Popper instance is currently in an update\n  // loop that is tracked by the Ember Run Loop\n  //\n  // This is necessary in order to ensure that Popper changes are known to the Ember run loop,\n  // and helps make sure that, for example, Ember's test helpers wait for any re-positioning to\n  // take place before advancing\n  //\n  // We need to keep track of whether a run loop has already been started for an update cycle\n  // because the number of \"starts\" and \"ends\" of the Popper update look do not always match;\n  // if we \"start\" again before we have \"ended\", then we can open an Ember run loop that is never\n  // closed, which will cause our application to hang.\n  const POPPER_IN_RUN_LOOP = new WeakSet();\n  const FIRST_PHASE = 'beforeRead';\n  const LAST_PHASE = 'afterWrite';\n  const beginRunLoopModifier = _exports.beginRunLoopModifier = {\n    name: 'ember-runloop-begin',\n    phase: FIRST_PHASE,\n    enabled: true,\n    fn({\n      instance\n    }) {\n      if (!POPPER_IN_RUN_LOOP.has(instance)) {\n        POPPER_IN_RUN_LOOP.add(instance);\n        (0, _runloop.begin)();\n      }\n    }\n  };\n  const endRunLoopModifier = _exports.endRunLoopModifier = {\n    name: 'ember-runloop-end',\n    phase: LAST_PHASE,\n    enabled: true,\n    fn({\n      instance\n    }) {\n      if (POPPER_IN_RUN_LOOP.has(instance)) {\n        POPPER_IN_RUN_LOOP.delete(instance);\n        (0, _runloop.end)();\n      }\n    }\n  };\n});","define(\"ember-popper-modifier/index\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.createModifier = createModifier;\n  _exports.getPopperForElement = getPopperForElement;\n  _exports.isModifier = isModifier;\n  _exports.setPopperForElement = setPopperForElement;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const ELEMENT_TO_POPPER = new WeakMap();\n  const IS_POPPER_MODIFIER = Symbol('is-popper-modifier');\n  function getPopperForElement(element) {\n    const popperInstance = ELEMENT_TO_POPPER.get(element);\n    if (!popperInstance) {\n      throw new Error('Popper instance for element does not exist in cache');\n    }\n    return popperInstance;\n  }\n  function setPopperForElement(element, popperInstance) {\n    ELEMENT_TO_POPPER.set(element, popperInstance);\n  }\n\n  /**\n   * Mark an object as a Popper modifier\n   *\n   * @param {object} configuration\n   * @return {object}\n   */\n  function createModifier(configuration) {\n    return {\n      [IS_POPPER_MODIFIER]: true,\n      ...configuration\n    };\n  }\n\n  /**\n   * Check whether an object is a Popper modifier\n   *\n   * @param {object} configuration\n   * @return {boolean}\n   */\n  function isModifier(configuration) {\n    return typeof configuration === 'object' && configuration !== null && IS_POPPER_MODIFIER in configuration && configuration[IS_POPPER_MODIFIER] === true;\n  }\n});","define(\"ember-popper-modifier/modifiers/popper-tooltip\", [\"exports\", \"ember-popper-modifier/-base-popper-modifier\"], function (_exports, _basePopperModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-popper-modifier/-base-popper-modifier\"eaimeta@70e063a35619d71f\n  class PopperModifier extends _basePopperModifier.default {\n    get tooltipElement() {\n      return this.primaryElement;\n    }\n    get referenceElement() {\n      return this.secondaryElement;\n    }\n  }\n  _exports.default = PopperModifier;\n});","define(\"ember-popper-modifier/modifiers/popper\", [\"exports\", \"ember-popper-modifier/-base-popper-modifier\"], function (_exports, _basePopperModifier) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-popper-modifier/-base-popper-modifier\"eaimeta@70e063a35619d71f\n  class PopperModifier extends _basePopperModifier.default {\n    get tooltipElement() {\n      return this.secondaryElement;\n    }\n    get referenceElement() {\n      return this.primaryElement;\n    }\n  }\n  _exports.default = PopperModifier;\n});","define(\"ember-popper-modifier/template-registry\", [], function () {\n  \"use strict\";\n\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n});","define(\"ember-ref-bucket/helpers/ref-to\", [\"exports\", \"@ember/component/helper\", \"ember-ref-bucket/utils/ref\", \"@ember/destroyable\", \"@ember/application\"], function (_exports, _helper, _ref, _destroyable, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"ember-ref-bucket/utils/ref\",0,\"@ember/destroyable\",0,\"@ember/application\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class RefToHelper extends _helper.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"_watcher\", null);\n    }\n    compute([name], {\n      bucket,\n      tracked\n    }) {\n      const bucketRef = bucket || (0, _application.getOwner)(this);\n      if (this._name !== name) {\n        if (this._watcher) {\n          (0, _destroyable.unregisterDestructor)(this, this._watcher);\n        }\n        this._watcher = (0, _ref.watchFor)(name, bucketRef, () => {\n          this.recompute();\n        });\n        (0, _destroyable.registerDestructor)(this, this._watcher);\n        this._name = name;\n      }\n      if (tracked) {\n        return (0, _ref.bucketFor)(bucketRef).getTracked(name);\n      } else {\n        return (0, _ref.bucketFor)(bucketRef).get(name);\n      }\n    }\n  }\n  _exports.default = RefToHelper;\n});","define(\"ember-ref-bucket/index\", [\"exports\", \"ember-ref-bucket/utils/ref\", \"@ember/application\", \"ember-ref-bucket/utils/prototype-reference\"], function (_exports, _ref, _application, _prototypeReference) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.globalRef = globalRef;\n  _exports.nodeFor = nodeFor;\n  _exports.ref = ref;\n  Object.defineProperty(_exports, \"registerNodeDestructor\", {\n    enumerable: true,\n    get: function () {\n      return _ref.registerNodeDestructor;\n    }\n  });\n  Object.defineProperty(_exports, \"resolveGlobalRef\", {\n    enumerable: true,\n    get: function () {\n      return _ref.resolveGlobalRef;\n    }\n  });\n  _exports.trackedGlobalRef = trackedGlobalRef;\n  _exports.trackedRef = trackedRef;\n  Object.defineProperty(_exports, \"unregisterNodeDestructor\", {\n    enumerable: true,\n    get: function () {\n      return _ref.unregisterNodeDestructor;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-ref-bucket/utils/ref\",0,\"@ember/application\",0,\"ember-ref-bucket/utils/ref\",0,\"ember-ref-bucket/utils/prototype-reference\"eaimeta@70e063a35619d71f\n  function nodeFor(context, name) {\n    return (0, _ref.bucketFor)(context).get(name);\n  }\n  function maybeReturnCreated(value, createdValues, fn, ctx) {\n    if (value === null || value === undefined) {\n      return null;\n    }\n    if (typeof fn === 'function') {\n      if (!createdValues.has(value)) {\n        createdValues.set(value, fn.call(ctx, value));\n      }\n      return createdValues.get(value);\n    } else {\n      return value;\n    }\n  }\n  function ref(name, fn) {\n    return function (klass, objectKey) {\n      const createdValues = new WeakMap();\n      if (typeof fn === 'function') {\n        (0, _prototypeReference.addPrototypeReference)(klass, objectKey, name);\n      }\n      return {\n        get() {\n          const value = (0, _ref.bucketFor)(this).get(name);\n          return maybeReturnCreated(value, createdValues, fn, this);\n        },\n        configurable: true\n      };\n    };\n  }\n  function globalRef(name, fn) {\n    return function (klass, objectKey) {\n      const createdValues = new WeakMap();\n      if (typeof fn === 'function') {\n        (0, _prototypeReference.addPrototypeReference)(klass, objectKey, name);\n      }\n      return {\n        get() {\n          const value = (0, _ref.bucketFor)((0, _application.getOwner)(this) || (0, _ref.resolveGlobalRef)()).get(name);\n          return maybeReturnCreated(value, createdValues, fn, this);\n        },\n        configurable: true\n      };\n    };\n  }\n  function trackedRef(name, fn) {\n    return function (klass, objectKey) {\n      const createdValues = new WeakMap();\n      if (typeof fn === 'function') {\n        (0, _prototypeReference.addPrototypeReference)(klass, objectKey, name);\n      }\n      return {\n        get() {\n          const value = (0, _ref.bucketFor)(this).getTracked(name);\n          return maybeReturnCreated(value, createdValues, fn, this);\n        },\n        configurable: true\n      };\n    };\n  }\n  function trackedGlobalRef(name, fn) {\n    return function (klass, objectKey) {\n      const createdValues = new WeakMap();\n      if (typeof fn === 'function') {\n        (0, _prototypeReference.addPrototypeReference)(klass, objectKey, name);\n      }\n      return {\n        get() {\n          const value = (0, _ref.bucketFor)((0, _application.getOwner)(this) || (0, _ref.resolveGlobalRef)()).getTracked(name);\n          return maybeReturnCreated(value, createdValues, fn, this);\n        },\n        configurable: true\n      };\n    };\n  }\n});","define(\"ember-ref-bucket/instance-initializers/global-ref-cleanup\", [\"exports\", \"@ember/destroyable\", \"ember-ref-bucket/utils/ref\"], function (_exports, _destroyable, _ref) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/destroyable\",0,\"ember-ref-bucket/utils/ref\"eaimeta@70e063a35619d71f\n  function initialize(appInstance) {\n    (0, _destroyable.registerDestructor)(appInstance, () => {\n      (0, _ref.cleanGlobalRef)();\n    });\n  }\n  var _default = _exports.default = {\n    initialize\n  };\n});","define(\"ember-ref-bucket/modifiers/create-ref\", [\"exports\", \"ember-modifier\", \"@ember/application\", \"@ember/object\", \"@ember/debug\", \"ember-ref-bucket/utils/ref\", \"ember-ref-bucket/utils/prototype-reference\", \"@ember/destroyable\"], function (_exports, _emberModifier, _application, _object, _debug, _ref, _prototypeReference, _destroyable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class;\n  0; //eaimeta@70e063a35619d71f0,\"ember-modifier\",0,\"@ember/application\",0,\"@ember/object\",0,\"@ember/debug\",0,\"ember-ref-bucket/utils/ref\",0,\"ember-ref-bucket/utils/prototype-reference\",0,\"@ember/destroyable\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  let RefModifier = _exports.default = (_class = class RefModifier extends _emberModifier.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"_key\", void 0);\n      _defineProperty(this, \"_ctx\", void 0);\n      _defineProperty(this, \"_element\", void 0);\n      // to minimise overhead, user should be specific about\n      // what they want to observe\n      _defineProperty(this, \"defaultMutationObserverOptions\", {\n        attributes: false,\n        characterData: false,\n        childList: false,\n        subtree: false\n      });\n      (0, _ref.setGlobalRef)((0, _application.getOwner)(this));\n      (0, _destroyable.registerDestructor)(this, () => {\n        const element = this._element;\n        this.cleanMutationObservers();\n        this.cleanResizeObservers();\n        (0, _ref.getNodeDestructors)(element).forEach(cb => cb());\n        if (element === (0, _ref.bucketFor)(this._ctx).get(this._key)) {\n          (0, _ref.bucketFor)(this._ctx).add(this._key, null);\n        }\n        delete this._element;\n      });\n    }\n    markDirty() {\n      (0, _ref.bucketFor)(this._ctx).dirtyTrackedCell(this._key);\n    }\n    cleanMutationObservers() {\n      if (this._mutationsObserver) {\n        this._mutationsObserver.disconnect();\n      }\n    }\n    cleanResizeObservers() {\n      if (this._resizeObserver) {\n        this._resizeObserver.unobserve(this._element);\n      }\n    }\n    installMutationObservers(named = {}) {\n      this._mutationsObserver = new MutationObserver(this.markDirty);\n      const opts = this.getObserverOptions(named);\n      delete opts.resize;\n      if (opts.attributes || opts.characterData || opts.childList || opts.subtree) {\n        // mutations observer throws if observe is attempted\n        // with all these options disabled\n        this._mutationsObserver.observe(this._element, opts);\n      }\n    }\n    validateTrackedOptions(named = {}) {\n      const args = ['subtree', 'attributes', 'children', 'resize', 'character'];\n      if (args.some(name => name in named)) {\n        (false && !(this.isTracked(named)) && (0, _debug.assert)(`\"ember-ref-modifier\", looks like you trying to use {{${named.debugName}}} without tracked flag or alias, but, with properties, related to tracked modifier (${args.join(', ')})`, this.isTracked(named)));\n      }\n    }\n    getObserverOptions(named = {}) {\n      // to minimise overhead user\n      // should be specific about\n      // what they want to observe\n      let resize = false;\n      let subtree = this.defaultMutationObserverOptions.subtree;\n      let attributes = this.defaultMutationObserverOptions.attributes;\n      let character = this.defaultMutationObserverOptions.characterData;\n      let children = this.defaultMutationObserverOptions.childList;\n      if ('subtree' in named) {\n        subtree = named.subtree;\n      }\n      if ('attributes' in named) {\n        attributes = named.attributes;\n      }\n      if ('children' in named) {\n        children = named.children;\n      }\n      if ('resize' in named) {\n        resize = named.resize;\n      }\n      if ('character' in named) {\n        character = named.character;\n      }\n      return {\n        subtree,\n        attributes,\n        childList: children,\n        resize,\n        characterData: character\n      };\n    }\n    installResizeObservers(element) {\n      this._resizeObserver = new ResizeObserver(this.markDirty);\n      this._resizeObserver.observe(element);\n    }\n    modify(element, positional, named) {\n      const name = this.name(positional);\n      const ctx = this.ctx(named, positional);\n      this._key = name;\n      this._ctx = ctx;\n      this._element = element;\n      (false && (0, _debug.warn)(`Preprocessor was not executed on create-ref modifier. If the reference is not set, check that ember-ref-bucket is included in the dependencies (not devDependencies) in package.json.`, typeof named.debugName === 'string' || !!named.bucket, {\n        id: 'ember-ref-bucket.no-preprocessor'\n      }));\n      (false && !(typeof name === 'string' && name.length > 0) && (0, _debug.assert)(`You must provide string as first positional argument for {{${named.debugName}}}`, typeof name === 'string' && name.length > 0));\n      this.validateTrackedOptions(named);\n      this.cleanMutationObservers();\n      this.cleanResizeObservers();\n      if (name !== this._key || this._ctx !== ctx) {\n        (0, _ref.bucketFor)(this._ctx).add(this._key, null);\n      }\n      (0, _ref.watchFor)(name, ctx, () => {\n        const keys = (0, _prototypeReference.getReferencedKeys)(ctx, name);\n        keys.forEach(keyName => {\n          // consume keys with callbacks\n          ctx[keyName];\n        });\n      });\n      (0, _ref.bucketFor)(ctx).add(name, element);\n      if (this.isTracked(named)) {\n        this.installMutationObservers(named);\n        if (this.getObserverOptions(named).resize) {\n          this.installResizeObservers(element);\n        }\n      }\n    }\n    ctx(named = {}, positional = [undefined]) {\n      (false && !(named.bucket !== null) && (0, _debug.assert)(`ember-ref-bucket: You trying to use {{${named.debugName}}} as local reference for template-only component. Replace it to {{global-ref \"${positional[0]}\"}}`, named.bucket !== null));\n      return named.bucket || (0, _application.getOwner)(this);\n    }\n    isTracked(named = {}) {\n      return named.tracked || false;\n    }\n    name(positional) {\n      return positional[0];\n    }\n  }, _applyDecoratedDescriptor(_class.prototype, \"markDirty\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"markDirty\"), _class.prototype), _class);\n});","define(\"ember-ref-bucket/utils/prototype-reference\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.addPrototypeReference = addPrototypeReference;\n  _exports.getReferencedKeys = getReferencedKeys;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  const PrototypeReferences = new WeakMap();\n  function addPrototypeReference(klass, objectKey, referenceName) {\n    if (!PrototypeReferences.has(klass)) {\n      PrototypeReferences.set(klass, {});\n    }\n    let obj = PrototypeReferences.get(klass);\n    if (!(referenceName in obj)) {\n      obj[referenceName] = new Set();\n    }\n    obj[referenceName].add(objectKey);\n  }\n  function getReferencedKeys(klassInstance, referenceName) {\n    let proto = klassInstance;\n    while (proto.__proto__) {\n      proto = proto.__proto__;\n      if (PrototypeReferences.has(proto)) {\n        let maybeData = PrototypeReferences.get(proto);\n        if (referenceName in maybeData) {\n          return Array.from(maybeData[referenceName]);\n        }\n      }\n    }\n    return [];\n  }\n});","define(\"ember-ref-bucket/utils/ref\", [\"exports\", \"@ember/destroyable\", \"@glimmer/tracking\"], function (_exports, _destroyable, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.bucketFor = bucketFor;\n  _exports.cleanGlobalRef = cleanGlobalRef;\n  _exports.getNodeDestructors = getNodeDestructors;\n  _exports.registerNodeDestructor = registerNodeDestructor;\n  _exports.resolveGlobalRef = resolveGlobalRef;\n  _exports.setGlobalRef = setGlobalRef;\n  _exports.unregisterNodeDestructor = unregisterNodeDestructor;\n  _exports.watchFor = watchFor;\n  var _class, _descriptor; // @ts-check\n  /*eslint no-undef: \"warn\"*/\n  0; //eaimeta@70e063a35619d71f0,\"@ember/destroyable\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  /**\n   * @type {object | null}\n   */\n  let lastGlobalRef = null;\n  /**\n   * @type {WeakMap<object, ReturnType<typeof createBucket>>}\n   */\n  const buckets = new WeakMap();\n  /**\n   * @type {WeakMap<HTMLElement, Array<() => void>>}\n   */\n  const nodeDestructors = new WeakMap();\n  const hasWeakRef = typeof WeakRef !== 'undefined';\n  function fromWeakRefIfSupported(node) {\n    if (hasWeakRef && node instanceof WeakRef) {\n      return node.deref() ?? null;\n    }\n    return node;\n  }\n\n  /**\n   *\n   * @param {null | undefined | WeakRef | HTMLElement } node\n   * @returns\n   */\n  function toWeakRefIfSupported(node) {\n    if (node === null || node === undefined) {\n      return null;\n    }\n    if (hasWeakRef) {\n      if (node instanceof WeakRef) {\n        return node;\n      }\n      return new WeakRef(node);\n    }\n    return node;\n  }\n  let FieldCell = (_class = class FieldCell {\n    constructor() {\n      /**\n      /**\n       * @type {null | (WeakRef<HTMLElement> | HTMLElement)}\n       */\n      _initializerDefineProperty(this, \"_element\", _descriptor, this);\n    }\n    get value() {\n      if (this._element) {\n        return fromWeakRefIfSupported(this._element);\n      } else {\n        return null;\n      }\n    }\n    set value(element) {\n      if (element) {\n        this._element = toWeakRefIfSupported(element);\n      } else {\n        this._element = null;\n      }\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_element\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _class);\n  function setGlobalRef(value) {\n    lastGlobalRef = value;\n  }\n  function cleanGlobalRef() {\n    lastGlobalRef = null;\n  }\n  function resolveGlobalRef() {\n    return lastGlobalRef;\n  }\n  function createBucket() {\n    return {\n      /**\n       * @type { Record<string, HTMLElement> }\n       */\n      bucket: {},\n      /**\n       * @type { Record<string, FieldCell> }\n       */\n      keys: {},\n      /**\n       * @param {string} key\n       */\n      createTrackedCell(key) {\n        if (!(key in this.keys)) {\n          this.keys[key] = new FieldCell();\n        }\n      },\n      /**\n       * @param {string} name\n       * @returns { HTMLElement | null }\n       */\n      get(name) {\n        this.createTrackedCell(name);\n        return fromWeakRefIfSupported(this.bucket[name]) || null;\n      },\n      /**\n       * @param {string} name\n       */\n      dirtyTrackedCell(name) {\n        this.createTrackedCell(name);\n        const val = this.keys[name].value;\n        this.keys[name].value = val;\n      },\n      /**\n       * @param {string} name\n       */\n      getTracked(name) {\n        this.createTrackedCell(name);\n        return this.keys[name].value;\n      },\n      /**\n       * @param {string} name\n       * @param {HTMLElement} value\n       */\n      add(name, value) {\n        this.createTrackedCell(name);\n        this.keys[name].value = value;\n        this.bucket[name] = toWeakRefIfSupported(value);\n        if (!(name in this.notificationsFor)) {\n          this.notificationsFor[name] = [];\n        }\n        this.notificationsFor[name].forEach(fn => fn());\n      },\n      /**\n       * @param {string} name\n       * @param {() => void} fn\n       */\n      addNotificationFor(name, fn) {\n        if (!(name in this.notificationsFor)) {\n          this.notificationsFor[name] = [];\n        }\n        this.notificationsFor[name].push(fn);\n        return () => {\n          this.notificationsFor[name] = this.notificationsFor[name].filter(cb => cb !== cb);\n        };\n      },\n      /**\n       * @type { Record<string, Array<() => void>> }\n       */\n      notificationsFor: {}\n    };\n  }\n\n  /**\n   *\n   * @param {HTMLElement} node\n   * @returns {Array<() => void>}\n   */\n  function getNodeDestructors(node) {\n    return nodeDestructors.get(node) || [];\n  }\n\n  /**\n   * @param {HTMLElement} node\n   * @param {() => void} cb\n   */\n  function registerNodeDestructor(node, cb) {\n    if (!nodeDestructors.has(node)) {\n      nodeDestructors.set(node, []);\n    }\n    nodeDestructors.get(node)?.push(cb);\n  }\n  /**\n   *\n   * @param {HTMLElement} node\n   * @param {()=> void} cb\n   */\n  function unregisterNodeDestructor(node, cb) {\n    const destructors = nodeDestructors.get(node) || [];\n    nodeDestructors.set(node, destructors.filter(el => el !== cb));\n  }\n  /**\n   *\n   * @param {object} rawCtx\n   * @returns {ReturnType<typeof createBucket> | undefined}\n   */\n  function bucketFor(rawCtx) {\n    const ctx = rawCtx;\n    if (!buckets.has(ctx)) {\n      buckets.set(ctx, createBucket());\n      if ((0, _destroyable.isDestroyed)(ctx) || (0, _destroyable.isDestroying)(ctx)) {\n        try {\n          return buckets.get(ctx);\n        } finally {\n          buckets.delete(ctx);\n        }\n      }\n      (0, _destroyable.registerDestructor)(ctx, () => {\n        buckets.delete(ctx);\n      });\n    }\n    return buckets.get(ctx);\n  }\n  /**\n   *\n   * @param {string} name\n   * @param {object} bucketRef\n   * @param {()=>void} cb\n   * @returns\n   */\n  function watchFor(name, bucketRef, cb) {\n    const bucket = bucketFor(bucketRef);\n    return bucket?.addNotificationFor(name, cb);\n  }\n});","define(\"ember-resolver/container-debug-adapter\", [\"exports\", \"@ember/array\", \"@ember/debug/container-debug-adapter\", \"ember-resolver/index\", \"@ember/application\"], function (_exports, _array, _containerDebugAdapter, _index, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function getPod(type, key, prefix) {\n    let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n    if (match !== null) {\n      return match[1];\n    }\n  }\n\n  /*\n   * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n   * support for resolving from modules.\n   *\n   */\n\n  /* eslint-disable ember/no-classic-classes */\n  var _default = _exports.default = _containerDebugAdapter.default.extend({\n    _moduleRegistry: null,\n    init() {\n      this._super(...arguments);\n      this.namespace = (0, _application.getOwner)(this).lookup('application:main');\n      if (!this._moduleRegistry) {\n        this._moduleRegistry = new _index.ModuleRegistry();\n      }\n    },\n    /**\n        The container of the application being debugged.\n        This property will be injected\n        on creation.\n         @property container\n        @default null\n        */\n\n    /**\n        The resolver instance of the application\n        being debugged. This property will be injected\n        on creation.\n         @property resolver\n        @default null\n        */\n\n    /**\n        Returns true if it is possible to catalog a list of available\n        classes in the resolver for a given type.\n         @method canCatalogEntriesByType\n        @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n        @return {boolean} whether a list is available for this type.\n        */\n    canCatalogEntriesByType(type) {\n      if (type === 'model') {\n        return true;\n      }\n      return this._super(...arguments);\n    },\n    /**\n        Returns the available classes a given type.\n         @method catalogEntriesByType\n        @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n        @return {Array} An array of classes.\n        */\n    catalogEntriesByType(type) {\n      let moduleNames = this._moduleRegistry.moduleNames();\n      let types = (0, _array.A)();\n      let prefix = this.namespace.modulePrefix;\n      for (let i = 0, l = moduleNames.length; i < l; i++) {\n        let key = moduleNames[i];\n        if (key.indexOf(type) !== -1) {\n          // Check if it's a pod module\n          let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n          if (!name) {\n            // Not pod\n            name = key.split(type + 's/').pop();\n\n            // Support for different prefix (such as ember-cli addons).\n            // Uncomment the code below when\n            // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n            //let match = key.match('^/?(.+)/' + type);\n            //if (match && match[1] !== prefix) {\n            // Different prefix such as an addon\n            //name = match[1] + '@' + name;\n            //}\n          }\n          types.addObject(name);\n        }\n      }\n      return types;\n    }\n  });\n});","/*\n * This is a stub file, it must be on disk b/c babel-plugin-debug-macros\n * does not strip the module require when the transpiled variable usage is\n * stripped.\n */\ndefine(\"ember-resolver/features\", [], function () {\n  \"use strict\";\n});","define(\"ember-resolver/index\", [\"exports\", \"@ember/debug\", \"@ember/object\", \"ember-resolver/string\", \"ember-resolver/utils/class-factory\", \"@ember/owner\"], function (_exports, _debug, _object, _string, _classFactory, _owner) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ModuleRegistry = void 0;\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); } /* globals requirejs, require */\n  if (typeof requirejs.entries === 'undefined') {\n    requirejs.entries = requirejs._eak_seen;\n  }\n  class ModuleRegistry {\n    constructor(entries) {\n      this._entries = entries || requirejs.entries;\n    }\n    moduleNames() {\n      return Object.keys(this._entries);\n    }\n    has(moduleName) {\n      return moduleName in this._entries;\n    }\n    get(...args) {\n      return require(...args);\n    }\n  }\n\n  /**\n   * This module defines a subclass of Ember.DefaultResolver that adds two\n   * important features:\n   *\n   *  1) The resolver makes the container aware of es6 modules via the AMD\n   *     output. The loader's _moduleEntries is consulted so that classes can be\n   *     resolved directly via the module loader, without needing a manual\n   *     `import`.\n   *  2) is able to provide injections to classes that implement `extend`\n   *     (as is typical with Ember).\n   */\n  _exports.ModuleRegistry = ModuleRegistry;\n  class Resolver extends _object.default {\n    constructor() {\n      super(...arguments);\n      _defineProperty(this, \"moduleBasedResolver\", true);\n      _defineProperty(this, \"_deprecatedPodModulePrefix\", false);\n      _defineProperty(this, \"_normalizeCache\", Object.create(null));\n      /**\n       A listing of functions to test for moduleName's based on the provided\n       `parsedName`. This allows easy customization of additional module based\n       lookup patterns.\n        @property moduleNameLookupPatterns\n       @returns {Ember.Array}\n       */\n      _defineProperty(this, \"moduleNameLookupPatterns\", [this.podBasedModuleName, this.podBasedComponentsInSubdir, this.mainModuleName, this.defaultModuleName, this.nestedColocationComponentModuleName]);\n      if (!this._moduleRegistry) {\n        this._moduleRegistry = new ModuleRegistry();\n      }\n      this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n      if (!this.pluralizedTypes.config) {\n        this.pluralizedTypes.config = 'config';\n      }\n    }\n    makeToString(factory, fullName) {\n      return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n    }\n    shouldWrapInClassFactory(/* module, parsedName */\n    ) {\n      return false;\n    }\n    parseName(fullName) {\n      if (fullName.parsedName === true) {\n        return fullName;\n      }\n      let prefix, type, name;\n      let fullNameParts = fullName.split('@');\n      if (fullNameParts.length === 3) {\n        if (fullNameParts[0].length === 0) {\n          // leading scoped namespace: `@scope/pkg@type:name`\n          prefix = `@${fullNameParts[1]}`;\n          let prefixParts = fullNameParts[2].split(':');\n          type = prefixParts[0];\n          name = prefixParts[1];\n        } else {\n          // interweaved scoped namespace: `type:@scope/pkg@name`\n          prefix = `@${fullNameParts[1]}`;\n          type = fullNameParts[0].slice(0, -1);\n          name = fullNameParts[2];\n        }\n        if (type === 'template:components') {\n          name = `components/${name}`;\n          type = 'template';\n        }\n      } else if (fullNameParts.length === 2) {\n        let prefixParts = fullNameParts[0].split(':');\n        if (prefixParts.length === 2) {\n          if (prefixParts[1].length === 0) {\n            type = prefixParts[0];\n            name = `@${fullNameParts[1]}`;\n          } else {\n            prefix = prefixParts[1];\n            type = prefixParts[0];\n            name = fullNameParts[1];\n          }\n        } else {\n          let nameParts = fullNameParts[1].split(':');\n          prefix = fullNameParts[0];\n          type = nameParts[0];\n          name = nameParts[1];\n        }\n        if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n          name = `components/${name}`;\n          prefix = prefix.slice(11);\n        }\n      } else {\n        fullNameParts = fullName.split(':');\n        type = fullNameParts[0];\n        name = fullNameParts[1];\n      }\n      let fullNameWithoutType = name;\n      let namespace = this.namespace;\n      let root = namespace;\n      return {\n        parsedName: true,\n        fullName: fullName,\n        prefix: prefix || this.prefix({\n          type: type\n        }),\n        type: type,\n        fullNameWithoutType: fullNameWithoutType,\n        name: name,\n        root: root,\n        resolveMethodName: 'resolve' + (0, _string.classify)(type)\n      };\n    }\n    resolveOther(parsedName) {\n      (false && !(this.namespace.modulePrefix) && (0, _debug.assert)('`modulePrefix` must be defined', this.namespace.modulePrefix));\n      let normalizedModuleName = this.findModuleName(parsedName);\n      if (normalizedModuleName) {\n        let defaultExport = this._extractDefaultExport(normalizedModuleName, parsedName);\n        if (defaultExport === undefined) {\n          throw new Error(` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`);\n        }\n        if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n          defaultExport = (0, _classFactory.default)(defaultExport);\n        }\n        return defaultExport;\n      }\n    }\n    normalize(fullName) {\n      return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this._normalize(fullName));\n    }\n    resolve(fullName) {\n      let parsedName = this.parseName(fullName);\n      let resolveMethodName = parsedName.resolveMethodName;\n      let resolved;\n      if (typeof this[resolveMethodName] === 'function') {\n        resolved = this[resolveMethodName](parsedName);\n      }\n      if (resolved == null) {\n        resolved = this.resolveOther(parsedName);\n      }\n      return resolved;\n    }\n    _normalize(fullName) {\n      // A) Convert underscores to dashes\n      // B) Convert camelCase to dash-case, except for components (their\n      //    templates) and helpers where we want to avoid shadowing camelCase\n      //    expressions\n      // C) replace `.` with `/` in order to make nested controllers work in the following cases\n      //      1. `needs: ['posts/post']`\n      //      2. `{{render \"posts/post\"}}`\n      //      3. `this.render('posts/post')` from Route\n\n      let split = fullName.split(':');\n      if (split.length > 1) {\n        let type = split[0];\n        if (type === 'component' || type === 'helper' || type === 'modifier' || type === 'template' && split[1].indexOf('components/') === 0) {\n          return type + ':' + split[1].replace(/_/g, '-');\n        } else {\n          return type + ':' + (0, _string.dasherize)(split[1].replace(/\\./g, '/'));\n        }\n      } else {\n        return fullName;\n      }\n    }\n    pluralize(type) {\n      return this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's');\n    }\n    podBasedLookupWithPrefix(podPrefix, parsedName) {\n      let fullNameWithoutType = parsedName.fullNameWithoutType;\n      if (parsedName.type === 'template') {\n        fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n      }\n      return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n    }\n    podBasedModuleName(parsedName) {\n      let podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n      return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n    }\n    podBasedComponentsInSubdir(parsedName) {\n      let podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n      podPrefix = podPrefix + '/components';\n      if (parsedName.type === 'component' || /^components/.test(parsedName.fullNameWithoutType)) {\n        return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n      }\n    }\n    resolveEngine(parsedName) {\n      let engineName = parsedName.fullNameWithoutType;\n      let engineModule = engineName + '/engine';\n      if (this._moduleRegistry.has(engineModule)) {\n        return this._extractDefaultExport(engineModule);\n      }\n    }\n    resolveRouteMap(parsedName) {\n      let engineName = parsedName.fullNameWithoutType;\n      let engineRoutesModule = engineName + '/routes';\n      if (this._moduleRegistry.has(engineRoutesModule)) {\n        let routeMap = this._extractDefaultExport(engineRoutesModule);\n        (false && !(routeMap.isRouteMap) && (0, _debug.assert)(`The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`, routeMap.isRouteMap));\n        return routeMap;\n      }\n    }\n    resolveTemplate(parsedName) {\n      return this.resolveOther(parsedName);\n    }\n    mainModuleName(parsedName) {\n      if (parsedName.fullNameWithoutType === 'main') {\n        // if router:main or adapter:main look for a module with just the type first\n        return parsedName.prefix + '/' + parsedName.type;\n      }\n    }\n    defaultModuleName(parsedName) {\n      return parsedName.prefix + '/' + this.pluralize(parsedName.type) + '/' + parsedName.fullNameWithoutType;\n    }\n    nestedColocationComponentModuleName(parsedName) {\n      if (parsedName.type === 'component') {\n        return parsedName.prefix + '/' + this.pluralize(parsedName.type) + '/' + parsedName.fullNameWithoutType + '/index';\n      }\n    }\n    prefix(parsedName) {\n      let tmpPrefix = this.namespace.modulePrefix;\n      if (this.namespace[parsedName.type + 'Prefix']) {\n        tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n      }\n      return tmpPrefix;\n    }\n    findModuleName(parsedName, loggingDisabled) {\n      let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n      let moduleName;\n      for (let index = 0, length = moduleNameLookupPatterns.length; index < length; index++) {\n        let item = moduleNameLookupPatterns[index];\n        let tmpModuleName = item.call(this, parsedName);\n\n        // allow treat all dashed and all underscored as the same thing\n        // supports components with dashes and other stuff with underscores.\n        if (tmpModuleName) {\n          tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n        }\n        if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n          moduleName = tmpModuleName;\n        }\n        if (!loggingDisabled) {\n          this._logLookup(moduleName, parsedName, tmpModuleName);\n        }\n        if (moduleName) {\n          return moduleName;\n        }\n      }\n    }\n    chooseModuleName(moduleName, parsedName) {\n      let underscoredModuleName = (0, _string.underscore)(moduleName);\n      if (moduleName !== underscoredModuleName && this._moduleRegistry.has(moduleName) && this._moduleRegistry.has(underscoredModuleName)) {\n        throw new TypeError(`Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`);\n      }\n      if (this._moduleRegistry.has(moduleName)) {\n        return moduleName;\n      } else if (this._moduleRegistry.has(underscoredModuleName)) {\n        return underscoredModuleName;\n      }\n      // workaround for dasherized partials:\n      // something/something/-something => something/something/_something\n      let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n      if (this._moduleRegistry.has(partializedModuleName)) {\n        (false && !(false) && (0, _debug.deprecate)('Modules should not contain underscores. ' + 'Attempted to lookup \"' + moduleName + '\" which ' + 'was not found. Please rename \"' + partializedModuleName + '\" ' + 'to \"' + moduleName + '\" instead.', false, {\n          id: 'ember-resolver.underscored-modules',\n          until: '3.0.0',\n          for: 'ember-resolver',\n          since: '0.1.0'\n        }));\n        return partializedModuleName;\n      }\n      if (false /* DEBUG */) {\n        let isCamelCaseHelper = parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n        if (isCamelCaseHelper) {\n          this._camelCaseHelperWarnedNames = this._camelCaseHelperWarnedNames || [];\n          let alreadyWarned = this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n          if (!alreadyWarned && this._moduleRegistry.has((0, _string.dasherize)(moduleName))) {\n            this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n            (false && (0, _debug.warn)('Attempted to lookup \"' + parsedName.fullName + '\" which ' + 'was not found. In previous versions of ember-resolver, a bug would have ' + 'caused the module at \"' + (0, _string.dasherize)(moduleName) + '\" to be ' + 'returned for this camel case helper name. This has been fixed. ' + 'Use the dasherized name to resolve the module that would have been ' + 'returned in previous versions.', false, {\n              id: 'ember-resolver.camelcase-helper-names',\n              until: '3.0.0'\n            }));\n          }\n        }\n      }\n    }\n\n    // used by Ember.DefaultResolver.prototype._logLookup\n    lookupDescription(fullName) {\n      let parsedName = this.parseName(fullName);\n      let moduleName = this.findModuleName(parsedName, true);\n      return moduleName;\n    }\n\n    // only needed until 1.6.0-beta.2 can be required\n    _logLookup(found, parsedName, description) {\n      let owner = (0, _owner.getOwner)(this);\n      let env = owner?.resolveRegistration?.('config:environment');\n      if (!env?.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n        return;\n      }\n      let padding;\n      let symbol = found ? '[✓]' : '[ ]';\n      if (parsedName.fullName.length > 60) {\n        padding = '.';\n      } else {\n        padding = new Array(60 - parsedName.fullName.length).join('.');\n      }\n      if (!description) {\n        description = this.lookupDescription(parsedName);\n      }\n\n      /* eslint-disable no-console */\n      if (console && console.info) {\n        console.info(symbol, parsedName.fullName, padding, description);\n      }\n    }\n    knownForType(type) {\n      let moduleKeys = this._moduleRegistry.moduleNames();\n      let items = Object.create(null);\n      for (let index = 0, length = moduleKeys.length; index < length; index++) {\n        let moduleName = moduleKeys[index];\n        let fullname = this.translateToContainerFullname(type, moduleName);\n        if (fullname) {\n          items[fullname] = true;\n        }\n      }\n      return items;\n    }\n    translateToContainerFullname(type, moduleName) {\n      let prefix = this.prefix({\n        type\n      });\n\n      // Note: using string manipulation here rather than regexes for better performance.\n      // pod modules\n      // '^' + prefix + '/(.+)/' + type + '$'\n      let podPrefix = prefix + '/';\n      let podSuffix = '/' + type;\n      let start = moduleName.indexOf(podPrefix);\n      let end = moduleName.indexOf(podSuffix);\n      if (start === 0 && end === moduleName.length - podSuffix.length && moduleName.length > podPrefix.length + podSuffix.length) {\n        return type + ':' + moduleName.slice(start + podPrefix.length, end);\n      }\n\n      // non-pod modules\n      // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n      let pluralizedType = this.pluralize(type);\n      let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n      if (moduleName.indexOf(nonPodPrefix) === 0 && moduleName.length > nonPodPrefix.length) {\n        return type + ':' + moduleName.slice(nonPodPrefix.length);\n      }\n    }\n    _extractDefaultExport(normalizedModuleName) {\n      let module = this._moduleRegistry.get(normalizedModuleName, null, null, true /* force sync */);\n      if (module && module['default']) {\n        module = module['default'];\n      }\n      return module;\n    }\n  }\n  _defineProperty(Resolver, \"moduleBasedResolver\", true);\n  var _default = _exports.default = Resolver;\n});","define(\"ember-resolver/string/cache\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Cache {\n    constructor(limit, func, store) {\n      this.limit = limit;\n      this.func = func;\n      this.store = store;\n      this.size = 0;\n      this.misses = 0;\n      this.hits = 0;\n      this.store = store || new Map();\n    }\n    get(key) {\n      let value = this.store.get(key);\n      if (this.store.has(key)) {\n        this.hits++;\n        return this.store.get(key);\n      } else {\n        this.misses++;\n        value = this.set(key, this.func(key));\n      }\n      return value;\n    }\n    set(key, value) {\n      if (this.limit > this.size) {\n        this.size++;\n        this.store.set(key, value);\n      }\n      return value;\n    }\n    purge() {\n      this.store.clear();\n      this.size = 0;\n      this.hits = 0;\n      this.misses = 0;\n    }\n  }\n  _exports.default = Cache;\n});","define(\"ember-resolver/string/index\", [\"exports\", \"ember-resolver/string/cache\"], function (_exports, _cache) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.classify = classify;\n  _exports.dasherize = dasherize;\n  _exports.decamelize = decamelize;\n  _exports.getString = getString;\n  _exports.getStrings = getStrings;\n  _exports.setStrings = setStrings;\n  _exports.underscore = underscore;\n  /* eslint-disable no-useless-escape */\n\n  let STRINGS = {};\n  function setStrings(strings) {\n    STRINGS = strings;\n  }\n  function getStrings() {\n    return STRINGS;\n  }\n  function getString(name) {\n    return STRINGS[name];\n  }\n  const STRING_DASHERIZE_REGEXP = /[ _]/g;\n  const STRING_DASHERIZE_CACHE = new _cache.default(1000, key => decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'));\n  const STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\n  const STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\n  const STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\n  const CLASSIFY_CACHE = new _cache.default(1000, str => {\n    const replace1 = (_match, _separator, chr) => chr ? `_${chr.toUpperCase()}` : '';\n    const replace2 = (_match, initialChar, _separator, chr) => initialChar + (chr ? chr.toUpperCase() : '');\n    const parts = str.split('/');\n    for (let i = 0; i < parts.length; i++) {\n      parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n    }\n    return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) => match.toUpperCase());\n  });\n  const STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\n  const STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\n  const UNDERSCORE_CACHE = new _cache.default(1000, str => str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase());\n  const STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\n  const DECAMELIZE_CACHE = new _cache.default(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());\n  /**\n    Converts a camelized string into all lower case separated by underscores.\n  \n    ```javascript\n    import { decamelize } from '@ember/string';\n  \n    decamelize('innerHTML');          // 'inner_html'\n    decamelize('action_name');        // 'action_name'\n    decamelize('css-class-name');     // 'css-class-name'\n    decamelize('my favorite items');  // 'my favorite items'\n    ```\n  \n    @method decamelize\n    @param {String} str The string to decamelize.\n    @return {String} the decamelized string.\n    @public\n  */\n  function decamelize(str) {\n    return DECAMELIZE_CACHE.get(str);\n  }\n  /**\n    Replaces underscores, spaces, or camelCase with dashes.\n  \n    ```javascript\n    import { dasherize } from '@ember/string';\n  \n    dasherize('innerHTML');                // 'inner-html'\n    dasherize('action_name');              // 'action-name'\n    dasherize('css-class-name');           // 'css-class-name'\n    dasherize('my favorite items');        // 'my-favorite-items'\n    dasherize('privateDocs/ownerInvoice';  // 'private-docs/owner-invoice'\n    ```\n  \n    @method dasherize\n    @param {String} str The string to dasherize.\n    @return {String} the dasherized string.\n    @public\n  */\n  function dasherize(str) {\n    return STRING_DASHERIZE_CACHE.get(str);\n  }\n  /**\n    Returns the UpperCamelCase form of a string.\n  \n    ```javascript\n    import { classify } from '@ember/string';\n  \n    classify('innerHTML');                   // 'InnerHTML'\n    classify('action_name');                 // 'ActionName'\n    classify('css-class-name');              // 'CssClassName'\n    classify('my favorite items');           // 'MyFavoriteItems'\n    classify('private-docs/owner-invoice');  // 'PrivateDocs/OwnerInvoice'\n    ```\n  \n    @method classify\n    @param {String} str the string to classify\n    @return {String} the classified string\n    @public\n  */\n  function classify(str) {\n    return CLASSIFY_CACHE.get(str);\n  }\n  /**\n    More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n    form of a string.\n  \n    ```javascript\n    import { underscore } from '@ember/string';\n  \n    underscore('innerHTML');                 // 'inner_html'\n    underscore('action_name');               // 'action_name'\n    underscore('css-class-name');            // 'css_class_name'\n    underscore('my favorite items');         // 'my_favorite_items'\n    underscore('privateDocs/ownerInvoice');  // 'private_docs/owner_invoice'\n    ```\n  \n    @method underscore\n    @param {String} str The string to underscore.\n    @return {String} the underscored string.\n    @public\n  */\n  function underscore(str) {\n    return UNDERSCORE_CACHE.get(str);\n  }\n});","define(\"ember-resolver/utils/class-factory\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = classFactory;\n  function classFactory(klass) {\n    return {\n      create(injections) {\n        if (typeof klass.extend === 'function') {\n          return klass.extend(injections);\n        } else {\n          return klass;\n        }\n      }\n    };\n  }\n});","define(\"ember-tracked-storage-polyfill/index\", [\"exports\", \"@glimmer/tracking\", \"@ember/debug\"], function (_exports, _tracking, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.createStorage = createStorage;\n  _exports.getValue = getValue;\n  _exports.setValue = setValue;\n  var __decorate = void 0 && (void 0).__decorate || function (decorators, target, key, desc) {\n    var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n  };\n  class TrackedStorageImpl {\n    constructor(initialValue, isEqual) {\n      this._value = this._lastValue = initialValue;\n      this._isEqual = isEqual;\n    }\n  }\n  __decorate([_tracking.tracked], TrackedStorageImpl.prototype, \"_value\", void 0);\n  function tripleEq(a, b) {\n    return a === b;\n  }\n  function createStorage(initialValue, isEqual = tripleEq) {\n    (false && !(typeof isEqual === 'function') && (0, _debug.assert)('the second parameter to `createStorage` must be an equality function or undefined', typeof isEqual === 'function'));\n    return new TrackedStorageImpl(initialValue, isEqual);\n  }\n  function getValue(storage) {\n    (false && !(storage instanceof TrackedStorageImpl) && (0, _debug.assert)('getValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl));\n    return storage._value;\n  }\n  function setValue(storage, value) {\n    (false && !(storage instanceof TrackedStorageImpl) && (0, _debug.assert)('setValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl));\n    const {\n      _isEqual: isEqual,\n      _lastValue: lastValue\n    } = storage;\n    if (!isEqual(value, lastValue)) {\n      storage._value = storage._lastValue = value;\n    }\n  }\n});","define(\"ember-uuid/index\", [\"exports\", \"ember-uuid/utils/uuid-generator\"], function (_exports, _uuidGenerator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"parse\", {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.parse;\n    }\n  });\n  Object.defineProperty(_exports, \"unparse\", {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.unparse;\n    }\n  });\n  Object.defineProperty(_exports, \"v1\", {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.v1;\n    }\n  });\n  Object.defineProperty(_exports, \"v4\", {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.v4;\n    }\n  });\n});","define(\"ember-uuid/utils/browser-rng\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n   * Based on code from node-uuid.\n   */\n\n  let rng;\n  if (window && window.crypto && window.crypto.getRandomValues) {\n    // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n    // Moderately fast, high quality\n    let _rnds8 = new Uint8Array(16);\n    rng = function whatwgRNG() {\n      window.crypto.getRandomValues(_rnds8);\n      return _rnds8;\n    };\n  }\n  if (!rng) {\n    // Math.random()-based (RNG)\n    //\n    // If all else fails, use Math.random().  It's fast, but is of unspecified\n    // quality.\n    let _rnds = new Array(16);\n    rng = function () {\n      for (let i = 0, r; i < 16; i++) {\n        if ((i & 0x03) === 0) {\n          r = Math.random() * 0x100000000;\n        }\n        _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n      }\n      return _rnds;\n    };\n  }\n  var _default = _exports.default = rng;\n});","define(\"ember-uuid/utils/uuid-generator\", [\"exports\", \"ember-uuid/utils/browser-rng\"], function (_exports, _browserRng) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.parse = parse;\n  _exports.unparse = unparse;\n  _exports.v1 = v1;\n  _exports.v4 = v4;\n  //     uuid.js\n  //\n  //     Copyright (c) 2010-2012 Robert Kieffer\n  //     MIT License - http://opensource.org/licenses/mit-license.php\n\n  // Unique ID creation requires a high quality random # generator.  We feature\n  // detect to determine the best RNG source, normalizing to a function that\n  // returns 128-bits of randomness, since that's what's usually required\n  // var _rng = require('./rng');\n\n  // Maps for number <-> hex string conversion\n  var _byteToHex = [];\n  var _hexToByte = {};\n  for (var i = 0; i < 256; i++) {\n    _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n    _hexToByte[_byteToHex[i]] = i;\n  }\n\n  // **`parse()` - Parse a UUID into it's component bytes**\n  function parse(s, buf, offset) {\n    var i = buf && offset || 0,\n      ii = 0;\n    buf = buf || [];\n    s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) {\n      if (ii < 16) {\n        // Don't overflow!\n        buf[i + ii++] = _hexToByte[oct];\n      }\n    });\n\n    // Zero out remaining bytes if string was short\n    while (ii < 16) {\n      buf[i + ii++] = 0;\n    }\n    return buf;\n  }\n\n  // **`unparse()` - Convert UUID byte array (ala parse()) into a string**\n  function unparse(buf, offset) {\n    var i = offset || 0,\n      bth = _byteToHex;\n    return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]];\n  }\n\n  // **`v1()` - Generate time-based UUID**\n  //\n  // Inspired by https://github.com/LiosK/UUID.js\n  // and http://docs.python.org/library/uuid.html\n\n  // random #'s we need to init node and clockseq\n  var _seedBytes = (0, _browserRng.default)();\n\n  // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n  var _nodeId = [_seedBytes[0] | 0x01, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]];\n\n  // Per 4.2.2, randomize (14 bit) clockseq\n  var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n  // Previous uuid creation time\n  var _lastMSecs = 0,\n    _lastNSecs = 0;\n\n  // See https://github.com/broofa/node-uuid for API details\n  function v1(options, buf, offset) {\n    var i = buf && offset || 0;\n    var b = buf || [];\n    options = options || {};\n    var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n    // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n    // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n    // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n    // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n    var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n    // Per 4.2.1.2, use count of uuid's generated during the current clock\n    // cycle to simulate higher resolution clock\n    var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n    // Time since last uuid creation (in msecs)\n    var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;\n\n    // Per 4.2.1.2, Bump clockseq on clock regression\n    if (dt < 0 && options.clockseq === undefined) {\n      clockseq = clockseq + 1 & 0x3fff;\n    }\n\n    // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n    // time interval\n    if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n      nsecs = 0;\n    }\n\n    // Per 4.2.1.2 Throw error if too many uuids are requested\n    if (nsecs >= 10000) {\n      throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n    }\n    _lastMSecs = msecs;\n    _lastNSecs = nsecs;\n    _clockseq = clockseq;\n\n    // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n    msecs += 12219292800000;\n\n    // `time_low`\n    var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    b[i++] = tl >>> 24 & 0xff;\n    b[i++] = tl >>> 16 & 0xff;\n    b[i++] = tl >>> 8 & 0xff;\n    b[i++] = tl & 0xff;\n\n    // `time_mid`\n    var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n    b[i++] = tmh >>> 8 & 0xff;\n    b[i++] = tmh & 0xff;\n\n    // `time_high_and_version`\n    b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n    b[i++] = tmh >>> 16 & 0xff;\n\n    // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n    b[i++] = clockseq >>> 8 | 0x80;\n\n    // `clock_seq_low`\n    b[i++] = clockseq & 0xff;\n\n    // `node`\n    var node = options.node || _nodeId;\n    for (var n = 0; n < 6; n++) {\n      b[i + n] = node[n];\n    }\n    return buf ? buf : unparse(b);\n  }\n\n  // **`v4()` - Generate random UUID**\n\n  // See https://github.com/broofa/node-uuid for API details\n  function v4(options, buf, offset) {\n    // Deprecated - 'format' argument, as supported in v1.2\n    var i = buf && offset || 0;\n    if (typeof options === 'string') {\n      buf = options === 'binary' ? new Array(16) : null;\n      options = null;\n    }\n    options = options || {};\n    var rnds = options.random || (options.rng || _browserRng.default)();\n\n    // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n    rnds[6] = rnds[6] & 0x0f | 0x40;\n    rnds[8] = rnds[8] & 0x3f | 0x80;\n\n    // Copy bytes to buffer, if provided\n    if (buf) {\n      for (var ii = 0; ii < 16; ii++) {\n        buf[i + ii] = rnds[ii];\n      }\n    }\n    return buf || unparse(rnds);\n  }\n  var _default = _exports.default = {\n    v1: v1,\n    v4: v4,\n    parse: parse,\n    unparse: unparse\n  };\n});","\n"],"names":["$","Toggle","element","options","this","$element","extend","defaults","render","toggleActionPerformed","e","target","tristate","$toggle","hasClass","determinate","toggle","indeterminate","preventDefault","DEFAULTS","on","off","onstyle","offstyle","onvalue","offvalue","size","style","width","height","tabindex","name","prototype","attr","is","let","$toggleOn","html","addClass","$toggleOff","prop","$toggleHandle","$toggleGroup","append","val","$invElement","clone","removeAttr","wrap","parent","Math","max","outerWidth","outerHeight","css","key","silent","removeClass","trigger","enable","disable","readonly","update","change","proxy","destroy","remove","removeData","unwrap","old","fn","bootstrapToggle","option","optArg","Array","slice","call","arguments","each","$this","data","Constructor","noConflict","jQuery","elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","undefined","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","getSelector","hrefAttribute","trim","map","sel","join","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","effect","mathMax","mathMin","hash","allPlacements","placements","createPopper","defaultModifiers","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","ARIA_ATTRIBUTE_PATTERN","DefaultAllowlist","a","area","b","br","col","code","dd","div","dl","dt","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","item","activeNodes","node","spy","HOME_KEY","END_KEY","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting","globalID","pastWarnings","Utils","attr","element","namespace","obj","i","attribute","attributes","regex","RegExp","hasOwnProperty","length","specified","test","name","camelize","slice","deserializeValue","value","checkAttr","hasAttribute","setAttr","setAttribute","dasherize","String","getType","getAttribute","generateID","num","isNaN","Number","JSON","parse","e","str","replace","match","chr","toUpperCase","toLowerCase","warn","window","console","arguments","warnOnce","msg","_resetWarnings","trimString","string","date","parsed","map","x","parseInt","_","year","month","day","Date","getFullYear","getMonth","getDate","integer","number","parseFloat","_boolean","object","regexp","flags","parseRequirement","requirementType","converter","converted","namespaceEvents","events","split","$","evt","join","difference","array","remove","result","each","elem","indexOf","push","all","promises","when","objectCreate","Object","create","prototype","Error","TypeError","_SubmitSelector","Defaults","inputs","excluded","priorityEnabled","multiple","group","uiEnabled","validationThreshold","focus","trigger","triggerAfterFailure","errorClass","successClass","classHandler","Field","errorsContainer","errorsWrapper","errorTemplate","Base","__id__","asyncSupport","_pipeAccordingToValidationResult","pipe","r","Deferred","validationResult","reject","resolve","promise","actualizeOptions","options","domOptions","parent","_resetOptions","initOptions","_listeners","on","fn","queue","subscribe","listenTo","off","splice","unsubscribe","unsubscribeTo","target","extraArg","call","asyncIsValid","force","whenValid","_findRelated","querySelectorAll","$element","convertArrayRequirement","m","values","convertExtraOptionRequirement","requirementSpec","extraOptionReader","main","extra","key","Validator","spec","extend","validate","requirementFirstArg","Array","isArray","validateMultiple","instance","validateDate","_isDateInput","validateNumber","validateString","parseRequirements","requirements","type","isPlainObject","priority","ValidatorRegistry","validators","catalog","__class__","locale","init","typeTesters","email","digits","alphanum","url","range","decimalPlaces","Math","max","parseArguments","args","operatorToValidator","operator","requirementsAndInput","pop","comparisonOperator","addValidator","Parsley","setLocale","addCatalog","messages","set","addMessage","message","addMessages","nameMessageObject","arg1","arg2","_setValidator","hasValidator","updateValidator","removeValidator","validator","getErrorMessage","constraint","typeMessages","formatMessage","defaultMessage","en","parameters","notblank","required","step","base","tester","nb","decimals","toInt","f","round","pow","pattern","minlength","requirement","maxlength","min","mincheck","maxcheck","check","equalto","refOrValue","$reference","val","euvatin","re","UI","diffResults","newResult","oldResult","deep","added","kept","found","j","assert","removed","Form","_actualizeTriggers","onSubmitValidate","onSubmitButton","_focusedField","fields","field","noFocus","_destroyUI","_reflowUI","_buildUI","_ui","diff","lastValidationResult","_manageStatusClass","_manageErrorsMessages","_failedOnce","getErrorsMessages","errorMessage","_getErrorMessage","addError","updateClass","_addError","_errorClass","updateError","_updateError","removeError","_removeError","hasConstraints","needsValidation","_successClass","_resetClass","errorsMessagesDisabled","_insertErrorWrapper","$errorsWrapper","find","append","addClass","$errorClassHandler","errorsWrapperId","html","removeAttr","removeClass","customConstraintErrorMessage","_manageClassHandler","validationInformationVisible","$handlerFunction","$handler","jQuery","_inputHolder","nodeName","$errorsContainer","after","$toBind","_validateIfNeeded","event","getValue","debounce","clearTimeout","_debounced","setTimeout","_resetUI","children","statusMapping","pending","resolved","rejected","parsley","submitSource","_submitSource","prop","_remoteCache","whenValidate","state","_trigger","stopImmediatePropagation","preventDefault","done","_submit","currentTarget","$synthetic","appendTo","Event","submitEvent","_refreshFields","_withoutReactualizingFormOptions","fail","always","isValid","refresh","reset","destroy","removeData","_bindFields","oldFields","fieldsMappedById","not","fieldInstance","Factory","uniqueId","oldActualizeOptions","eventName","Constraint","parsleyField","isDomConstraint","validatorSpec","_validatorRegistry","_parseRequirements","capitalize","cap","requirementList","parsleyFormInstance","constraints","constraintsByName","_bindConstraints","_isInGroup","_refreshed","_isRequired","validateIfEmpty","inArray","groupedConstraints","_getGroupedConstraints","_validateConstraint","_handleWhitespace","_refreshConstraints","refreshConstraints","addConstraint","removeConstraint","updateConstraint","undefined","_bindHtml5Constraints","trimValue","whitespace","c","index","p","sort","a","b","Multiple","addElement","$elements","fieldConstraints","has","data","filter","_init","savedparsleyFormInstance","__version__","is","bind","isMultiple","handleMultiple","parsleyMultipleInstance","input","$previouslyRelated","get","doNotStore","parsleyInstance","ParsleyExtend","vernums","jquery","forEach","document","version","psly","instances","ParsleyConfig","ParsleyUtils","registry","i18n","ParsleyValidator","method","ParsleyUI","doNotUpdateClass","autoBind","o","deprecated","adapt","context","parsleyAdaptedCallback","unshift","apply","eventPrefix","lastIndexOf","substr","listen","callback","unsubscribeAll","emit","instanceGiven","asyncValidators","xhr","status","reverse","addAsyncValidator","ajaxOptions","csr","encodeURIComponent","remoteOptions","param","ajax","handleXhr","then","InputEvent","globals","global","isNativeEvent","originalEvent","isTrusted","fakeInputEvent","misbehaves","behavesOk","selector","install","inputEventPatched","uninstall","inputevent"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC39UA;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;;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;;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;;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;;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AChgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC92BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACv0CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;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;;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;;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;;AC5TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1nCA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC34DC,CAAA,SAAWA,GACV,aAKa,SAATC,EAAmBC,EAASC,GAE9BC,KAAKC,SAAWL,EAAEE,CAAO,EAEzBE,KAAKD,QAAUH,EAAEM,OAAO,GAAIF,KAAKG,SAAS,EAAGJ,CAAO,EAEpDC,KAAKI,OAAO,CACd,CAyKA,SAASC,EAAsBC,EAAGC,GAC5BA,EAAOR,QAAQS,SACbD,EAAOE,QAAQC,SAAS,eAAe,GACzCH,EAAOI,YAAY,CAAA,CAAI,EACvBJ,EAAOK,OAAO,GAEdL,EAAOM,cAAc,EAGvBN,EAAOK,OAAO,EAEhBN,EAAEQ,eAAe,CACnB,CAnLAjB,EAAOkB,SAAW,CAChBC,GAAI,KACJC,IAAK,MACLC,QAAS,UACTC,SAAU,YACVC,QAAS,KACTC,SAAU,KACVC,KAAM,SACNC,MAAO,GACPC,MAAO,KACPC,OAAQ,KACRC,SAAU,EACVlB,SAAU,CAAA,EACVmB,KAAM,IACR,EAEA9B,EAAO+B,UAAUzB,SAAW,WAC1B,MAAO,CACLa,GAAIhB,KAAKC,SAAS4B,KAAK,SAAS,GAAKhC,EAAOkB,SAASC,GACrDC,IAAKjB,KAAKC,SAAS4B,KAAK,UAAU,GAAKhC,EAAOkB,SAASE,IACvDC,QAASlB,KAAKC,SAAS4B,KAAK,cAAc,GAAKhC,EAAOkB,SAASG,QAC/DC,SAAUnB,KAAKC,SAAS4B,KAAK,eAAe,GAAKhC,EAAOkB,SAASI,SACjEC,QACEpB,KAAKC,SAAS4B,KAAK,OAAO,GAC1B7B,KAAKC,SAAS4B,KAAK,cAAc,GACjChC,EAAOkB,SAASK,QAClBC,SAAUrB,KAAKC,SAAS4B,KAAK,eAAe,GAAKhC,EAAOkB,SAASM,SACjEC,KAAMtB,KAAKC,SAAS4B,KAAK,WAAW,GAAKhC,EAAOkB,SAASO,KACzDC,MAAOvB,KAAKC,SAAS4B,KAAK,YAAY,GAAKhC,EAAOkB,SAASQ,MAC3DC,MAAOxB,KAAKC,SAAS4B,KAAK,YAAY,GAAKhC,EAAOkB,SAASS,MAC3DC,OAAQzB,KAAKC,SAAS4B,KAAK,aAAa,GAAKhC,EAAOkB,SAASU,OAC7DC,SAAU1B,KAAKC,SAAS4B,KAAK,UAAU,GAAKhC,EAAOkB,SAASW,SAC5DlB,SAAUR,KAAKC,SAAS6B,GAAG,YAAY,GAAKjC,EAAOkB,SAASP,SAC5DmB,KAAM3B,KAAKC,SAAS4B,KAAK,MAAM,GAAKhC,EAAOkB,SAASY,IACtD,CACF,EAEA9B,EAAO+B,UAAUxB,OAAS,WAExB2B,IAAIT,EACJ,OAAQtB,KAAKD,QAAQuB,MACnB,IAAK,QACL,IAAK,KACHA,EAAO,SACP,MACF,IAAK,QACL,IAAK,KACHA,EAAO,SACP,MACF,IAAK,OACL,IAAK,KACHA,EAAO,SACP,MACF,QACEA,EAAO,EAEX,CAGAS,IAAIC,EAAYpC,EAAE,qBAAqB,EACpCqC,KAAKjC,KAAKD,QAAQiB,EAAE,EACpBkB,SAAS,OAASlC,KAAKD,QAAQmB,QAAU,IAAMI,CAAI,EAMlDa,GALAnC,KAAKC,SAASmC,KAAK,IAAI,GACzBJ,EAAUI,KAAK,MAAOpC,KAAKC,SAASmC,KAAK,IAAI,CAAC,EAI/BxC,EAAE,qBAAqB,EACrCqC,KAAKjC,KAAKD,QAAQkB,GAAG,EACrBiB,SAAS,OAASlC,KAAKD,QAAQoB,SAAW,IAAMG,CAAI,GAMnDe,GALArC,KAAKC,SAASmC,KAAK,IAAI,GACzBD,EAAWC,KAAK,MAAOpC,KAAKC,SAASmC,KAAK,IAAI,CAAC,EAI7BxC,EAAE,kCAAkC,EAAEsC,SAASZ,CAAI,GAGnEgB,EAAe1C,EAAE,4BAA4B,EAAE2C,OACjDP,EACAG,EACAE,CACF,EAGI5B,EAAUb,EACZ,6DACF,EACGsC,SACClC,KAAKC,SAASmC,KAAK,SAAS,EACxB,OAASpC,KAAKD,QAAQmB,QACtB,OAASlB,KAAKD,QAAQoB,SAAW,MACvC,EACCe,SAASZ,CAAI,EACbY,SAASlC,KAAKD,QAAQwB,KAAK,EAC3BM,KAAK,WAAY7B,KAAKD,QAAQ2B,QAAQ,GACrC1B,KAAKC,SAASmC,KAAK,UAAU,GAAKpC,KAAKC,SAASmC,KAAK,UAAU,KACjE3B,EAAQyB,SAAS,UAAU,EAC3BzB,EAAQoB,KAAK,WAAY,UAAU,GAIjC7B,KAAKD,QAAQqB,SAASpB,KAAKC,SAASuC,IAAIxC,KAAKD,QAAQqB,OAAO,EAChEW,IAAIU,EAAc,KACdzC,KAAKD,QAAQsB,YACfoB,EAAczC,KAAKC,SAASyC,MAAM,GACtBF,IAAIxC,KAAKD,QAAQsB,QAAQ,EACrCoB,EAAYZ,KAAK,cAAe,eAAe,EAC/CY,EAAYE,WAAW,IAAI,EAC3BF,EAAYL,KAAK,UAAW,CAACpC,KAAKC,SAASmC,KAAK,SAAS,CAAC,GAI5DpC,KAAKC,SAAS2C,KAAKnC,CAAO,EAC1Bb,EAAEM,OAAOF,KAAM,CACbS,QAAST,KAAKC,SAAS4C,OAAO,EAC9Bb,UAAWA,EACXG,WAAYA,EACZG,aAAcA,EACdG,YAAaA,CACf,CAAC,EACDzC,KAAKS,QAAQ8B,OAAOE,EAAaH,CAAY,EAKvCd,EACFxB,KAAKD,QAAQyB,OACbsB,KAAKC,IAAIf,EAAUgB,WAAW,EAAGb,EAAWa,WAAW,CAAC,EACtDX,EAAcW,WAAW,EAAI,EAC7BvB,EACFzB,KAAKD,QAAQ0B,QACbqB,KAAKC,IAAIf,EAAUiB,YAAY,EAAGd,EAAWc,YAAY,CAAC,EAC5DjD,KAAKS,QAAQyC,IAAI,CAAE1B,MAAOA,EAAOC,OAAQA,CAAO,CAAC,EAGjDO,EAAUE,SAAS,WAAW,EAC9BC,EAAWD,SAAS,YAAY,EAG5BlC,KAAKD,QAAQ0B,SACfO,EAAUkB,IAAI,cAAelB,EAAUP,OAAO,EAAI,IAAI,EACtDU,EAAWe,IAAI,cAAef,EAAWV,OAAO,EAAI,IAAI,GAK5DzB,KAAKS,QAAQO,GAAG,aAAc,IAC5BX,EAAsBC,EAAGN,IAAI,CAC/B,CAAC,EACDA,KAAKS,QAAQO,GAAG,QAAS,IACvBX,EAAsBC,EAAGN,IAAI,CAC/B,CAAC,EACDA,KAAKS,QAAQO,GAAG,WAAY,IACb,KAATV,EAAE6C,KACJ9C,EAAsBC,EAAGN,IAAI,CAEjC,CAAC,CAGH,EAqBAH,EAAO+B,UAAUhB,OAAS,SAAUwC,EAAS,CAAA,GACvCpD,KAAKC,SAASmC,KAAK,SAAS,EAAGpC,KAAKiB,IAAImC,CAAM,EAC7CpD,KAAKgB,GAAGoC,CAAM,CACrB,EAEAvD,EAAO+B,UAAUZ,GAAK,SAAUoC,EAAS,CAAA,GACvC,GAAIpD,KAAKC,SAASmC,KAAK,UAAU,GAAKpC,KAAKC,SAASmC,KAAK,UAAU,EACjE,MAAO,CAAA,EACTpC,KAAKS,QACF4C,YAAY,OAASrD,KAAKD,QAAQoB,SAAW,MAAM,EACnDe,SAAS,OAASlC,KAAKD,QAAQmB,OAAO,EACzClB,KAAKC,SAASmC,KAAK,UAAW,CAAA,CAAI,EAC9BpC,KAAKyC,aAAazC,KAAKyC,YAAYL,KAAK,UAAW,CAAA,CAAK,EACvDgB,GAAQpD,KAAKsD,QAAQ,CAC5B,EAEAzD,EAAO+B,UAAUX,IAAM,SAAUmC,EAAS,CAAA,GACxC,GAAIpD,KAAKC,SAASmC,KAAK,UAAU,GAAKpC,KAAKC,SAASmC,KAAK,UAAU,EACjE,MAAO,CAAA,EACTpC,KAAKS,QACF4C,YAAY,OAASrD,KAAKD,QAAQmB,OAAO,EACzCgB,SAAS,OAASlC,KAAKD,QAAQoB,SAAW,MAAM,EACnDnB,KAAKC,SAASmC,KAAK,UAAW,CAAA,CAAK,EAC/BpC,KAAKyC,aAAazC,KAAKyC,YAAYL,KAAK,UAAW,CAAA,CAAI,EACtDgB,GAAQpD,KAAKsD,QAAQ,CAC5B,EAEAzD,EAAO+B,UAAUf,cAAgB,SAAUuC,EAAS,CAAA,GAClD,GACE,CAACpD,KAAKD,QAAQS,UACdR,KAAKC,SAASmC,KAAK,UAAU,GAC7BpC,KAAKC,SAASmC,KAAK,UAAU,EAE7B,MAAO,CAAA,EACTpC,KAAKS,QAAQyB,SAAS,eAAe,EACrClC,KAAKC,SAASmC,KAAK,gBAAiB,CAAA,CAAI,EACxCpC,KAAKC,SAAS0C,WAAW,MAAM,EAC3B3C,KAAKyC,aAAazC,KAAKyC,YAAYL,KAAK,gBAAiB,CAAA,CAAI,EAC7DpC,KAAKyC,aAAazC,KAAKyC,YAAYE,WAAW,MAAM,EACnDS,GAAQpD,KAAKsD,QAAQ,CAC5B,EAEAzD,EAAO+B,UAAUjB,YAAc,SAAUyC,EAAS,CAAA,GAChD,GACE,CAACpD,KAAKD,QAAQS,UACdR,KAAKC,SAASmC,KAAK,UAAU,GAC7BpC,KAAKC,SAASmC,KAAK,UAAU,EAE7B,MAAO,CAAA,EACTpC,KAAKS,QAAQ4C,YAAY,eAAe,EACxCrD,KAAKC,SAASmC,KAAK,gBAAiB,CAAA,CAAK,EACrCpC,KAAKD,QAAQ4B,MAAM3B,KAAKC,SAAS4B,KAAK,OAAQ7B,KAAKD,QAAQ4B,IAAI,EAC/D3B,KAAKyC,aAAazC,KAAKyC,YAAYL,KAAK,gBAAiB,CAAA,CAAK,EAC9DpC,KAAKyC,aAAezC,KAAKD,QAAQ4B,MACnC3B,KAAKyC,YAAYZ,KAAK,OAAQ7B,KAAKD,QAAQ4B,IAAI,EAC5CyB,GAAQpD,KAAKsD,QAAQ,CAC5B,EAEAzD,EAAO+B,UAAU2B,OAAS,WACxBvD,KAAKS,QAAQ4C,YAAY,UAAU,EACnCrD,KAAKS,QAAQkC,WAAW,UAAU,EAClC3C,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAK,EACpCpC,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAK,EAChCpC,KAAKyC,cACPzC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAK,EACvCpC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAK,EAE3C,EAEAvC,EAAO+B,UAAU4B,QAAU,WACzBxD,KAAKS,QAAQyB,SAAS,UAAU,EAChClC,KAAKS,QAAQoB,KAAK,WAAY,UAAU,EACxC7B,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAI,EACnCpC,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAK,EAChCpC,KAAKyC,cACPzC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAI,EACtCpC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAK,EAE3C,EAEAvC,EAAO+B,UAAU6B,SAAW,WAC1BzD,KAAKS,QAAQyB,SAAS,UAAU,EAChClC,KAAKS,QAAQoB,KAAK,WAAY,UAAU,EACxC7B,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAK,EACpCpC,KAAKC,SAASmC,KAAK,WAAY,CAAA,CAAI,EAC/BpC,KAAKyC,cACPzC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAK,EACvCpC,KAAKyC,YAAYL,KAAK,WAAY,CAAA,CAAI,EAE1C,EAEAvC,EAAO+B,UAAU8B,OAAS,SAAUN,GAC9BpD,KAAKC,SAASmC,KAAK,UAAU,EAAGpC,KAAKwD,QAAQ,EACxCxD,KAAKC,SAASmC,KAAK,UAAU,EAAGpC,KAAKyD,SAAS,EAClDzD,KAAKuD,OAAO,EACbvD,KAAKC,SAASmC,KAAK,SAAS,EAAGpC,KAAKgB,GAAGoC,CAAM,EAC5CpD,KAAKiB,IAAImC,CAAM,CACtB,EAEAvD,EAAO+B,UAAU0B,QAAU,SAAUF,GACnCpD,KAAKC,SAASgB,IAAI,kBAAkB,EAC/BmC,GAAQpD,KAAKC,SAAS0D,OAAO,EAClC3D,KAAKC,SAASe,GACZ,mBACApB,EAAEgE,MAAM,WACN5D,KAAK0D,OAAO,CACd,EAAG1D,IAAI,CACT,CACF,EAEAH,EAAO+B,UAAUiC,QAAU,WAEzB7D,KAAKC,SAASgB,IAAI,kBAAkB,EACpCjB,KAAKsC,aAAawB,OAAO,EACrB9D,KAAKyC,aAAazC,KAAKyC,YAAYqB,OAAO,EAG9C9D,KAAKC,SAAS8D,WAAW,WAAW,EACpC/D,KAAKC,SAAS+D,OAAO,CACvB,EA4BAjC,IAAIkC,EAAMrE,EAAEsE,GAAGC,gBAEfvE,EAAEsE,GAAGC,gBAzBL,SAAgBC,GACdrC,IAAIsC,EAASC,MAAM1C,UAAU2C,MAAMC,KAAKC,UAAW,CAAC,EAAE,GAEtD,OAAOzE,KAAK0E,KAAK,WACf3C,IAAI4C,EAAQ/E,EAAEI,IAAI,EAClB+B,IAAI6C,EAAOD,EAAMC,KAAK,WAAW,EACjC7C,IAAIhC,EAA2B,UAAjB,OAAOqE,GAAsBA,EAEtCQ,IACHA,EAAO,IAAI/E,EAAOG,KAAMD,CAAO,EAC/B4E,EAAMC,KAAK,YAAaA,CAAI,GAGV,UAAlB,OAAOR,GACPQ,EAAKR,IACa,WAAlB,OAAOC,EAEPO,EAAKR,GAAQC,CAAM,EACM,UAAlB,OAAOD,GAAuBQ,EAAKR,IAASQ,EAAKR,GAAQ,CAEpE,CAAC,CACH,EAKAxE,EAAEsE,GAAGC,gBAAgBU,YAAchF,EAKnCD,EAAEsE,GAAGtD,OAAOkE,WAAa,WAEvB,OADAlF,EAAEsE,GAAGC,gBAAkBF,EAChBjE,IACT,EAMAJ,EAAE,WACAA,EAAE,2CAA2C,EAAEuE,gBAAgB,CACjE,CAAC,CACF,EAAEY,MAAM;;;;;;;;;;;;;;ACxXT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpyEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5nlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;EClaA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;;EAEA,MAAMC,UAAU,GAAG,IAAIC,GAAG,EAAE;AAE5B,eAAe;EACbC,EAAAA,GAAGA,CAACC,OAAO,EAAEC,GAAG,EAAEC,QAAQ,EAAE;EAC1B,IAAA,IAAI,CAACL,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;QAC5BH,UAAU,CAACE,GAAG,CAACC,OAAO,EAAE,IAAIF,GAAG,EAAE,CAAC;EACpC;EAEA,IAAA,MAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC;;EAE3C;EACA;EACA,IAAA,IAAI,CAACI,WAAW,CAACD,GAAG,CAACF,GAAG,CAAC,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAK,CAAC,+EAA+EC,KAAK,CAACC,IAAI,CAACN,WAAW,CAACO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;EAClI,MAAA;EACF;EAEAP,IAAAA,WAAW,CAACL,GAAG,CAACE,GAAG,EAAEC,QAAQ,CAAC;KAC/B;EAEDG,EAAAA,GAAGA,CAACL,OAAO,EAAEC,GAAG,EAAE;EAChB,IAAA,IAAIJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC3B,MAAA,OAAOH,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAACK,GAAG,CAACJ,GAAG,CAAC,IAAI,IAAI;EACjD;EAEA,IAAA,OAAO,IAAI;KACZ;EAEDW,EAAAA,MAAMA,CAACZ,OAAO,EAAEC,GAAG,EAAE;EACnB,IAAA,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC5B,MAAA;EACF;EAEA,IAAA,MAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC;EAE3CI,IAAAA,WAAW,CAACS,MAAM,CAACZ,GAAG,CAAC;;EAEvB;EACA,IAAA,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EAC1BT,MAAAA,UAAU,CAACgB,MAAM,CAACb,OAAO,CAAC;EAC5B;EACF;EACF,CAAC;;ECtDD;EACA;EACA;EACA;EACA;EACA;;EAEA,MAAMc,OAAO,GAAG,OAAS;EACzB,MAAMC,uBAAuB,GAAG,IAAI;EACpC,MAAMC,cAAc,GAAG,eAAe;;EAEtC;EACA;EACA;EACA;EACA;EACA,MAAMC,aAAa,GAAGC,QAAQ,IAAI;IAChC,IAAIA,QAAQ,IAAIC,MAAM,CAACC,GAAG,IAAID,MAAM,CAACC,GAAG,CAACC,MAAM,EAAE;EAC/C;MACAH,QAAQ,GAAGA,QAAQ,CAACI,OAAO,CAAC,eAAe,EAAE,CAACC,KAAK,EAAEC,EAAE,KAAK,CAAA,CAAA,EAAIJ,GAAG,CAACC,MAAM,CAACG,EAAE,CAAC,EAAE,CAAC;EACnF;EAEA,EAAA,OAAON,QAAQ;EACjB,CAAC;;EAED;EACA,MAAMO,MAAM,GAAGC,MAAM,IAAI;EACvB,EAAA,IAAIA,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKC,SAAS,EAAE;MAC3C,OAAO,CAAA,EAAGD,MAAM,CAAE,CAAA;EACpB;IAEA,OAAOE,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACL,MAAM,CAAC,CAACH,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAACS,WAAW,EAAE;EACrF,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,MAAM,GAAGC,MAAM,IAAI;IACvB,GAAG;EACDA,IAAAA,MAAM,IAAIC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAGvB,OAAO,CAAC;EAC/C,GAAC,QAAQwB,QAAQ,CAACC,cAAc,CAACL,MAAM,CAAC;EAExC,EAAA,OAAOA,MAAM;EACf,CAAC;EAED,MAAMM,gCAAgC,GAAGxC,OAAO,IAAI;IAClD,IAAI,CAACA,OAAO,EAAE;EACZ,IAAA,OAAO,CAAC;EACV;;EAEA;IACA,IAAI;MAAEyC,kBAAkB;EAAEC,IAAAA;EAAgB,GAAC,GAAGvB,MAAM,CAACwB,gBAAgB,CAAC3C,OAAO,CAAC;EAE9E,EAAA,MAAM4C,uBAAuB,GAAGC,MAAM,CAACC,UAAU,CAACL,kBAAkB,CAAC;EACrE,EAAA,MAAMM,oBAAoB,GAAGF,MAAM,CAACC,UAAU,CAACJ,eAAe,CAAC;;EAE/D;EACA,EAAA,IAAI,CAACE,uBAAuB,IAAI,CAACG,oBAAoB,EAAE;EACrD,IAAA,OAAO,CAAC;EACV;;EAEA;IACAN,kBAAkB,GAAGA,kBAAkB,CAACO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrDN,eAAe,GAAGA,eAAe,CAACM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAE/C,EAAA,OAAO,CAACH,MAAM,CAACC,UAAU,CAACL,kBAAkB,CAAC,GAAGI,MAAM,CAACC,UAAU,CAACJ,eAAe,CAAC,IAAI3B,uBAAuB;EAC/G,CAAC;EAED,MAAMkC,oBAAoB,GAAGjD,OAAO,IAAI;IACtCA,OAAO,CAACkD,aAAa,CAAC,IAAIC,KAAK,CAACnC,cAAc,CAAC,CAAC;EAClD,CAAC;EAED,MAAMoC,WAAS,GAAG1B,MAAM,IAAI;EAC1B,EAAA,IAAI,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EACzC,IAAA,OAAO,KAAK;EACd;EAEA,EAAA,IAAI,OAAOA,MAAM,CAAC2B,MAAM,KAAK,WAAW,EAAE;EACxC3B,IAAAA,MAAM,GAAGA,MAAM,CAAC,CAAC,CAAC;EACpB;EAEA,EAAA,OAAO,OAAOA,MAAM,CAAC4B,QAAQ,KAAK,WAAW;EAC/C,CAAC;EAED,MAAMC,UAAU,GAAG7B,MAAM,IAAI;EAC3B;EACA,EAAA,IAAI0B,WAAS,CAAC1B,MAAM,CAAC,EAAE;MACrB,OAAOA,MAAM,CAAC2B,MAAM,GAAG3B,MAAM,CAAC,CAAC,CAAC,GAAGA,MAAM;EAC3C;IAEA,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIA,MAAM,CAAC8B,MAAM,GAAG,CAAC,EAAE;MACnD,OAAOlB,QAAQ,CAACmB,aAAa,CAACxC,aAAa,CAACS,MAAM,CAAC,CAAC;EACtD;EAEA,EAAA,OAAO,IAAI;EACb,CAAC;EAED,MAAMgC,SAAS,GAAG1D,OAAO,IAAI;EAC3B,EAAA,IAAI,CAACoD,WAAS,CAACpD,OAAO,CAAC,IAAIA,OAAO,CAAC2D,cAAc,EAAE,CAACH,MAAM,KAAK,CAAC,EAAE;EAChE,IAAA,OAAO,KAAK;EACd;EAEA,EAAA,MAAMI,gBAAgB,GAAGjB,gBAAgB,CAAC3C,OAAO,CAAC,CAAC6D,gBAAgB,CAAC,YAAY,CAAC,KAAK,SAAS;EAC/F;EACA,EAAA,MAAMC,aAAa,GAAG9D,OAAO,CAAC+D,OAAO,CAAC,qBAAqB,CAAC;IAE5D,IAAI,CAACD,aAAa,EAAE;EAClB,IAAA,OAAOF,gBAAgB;EACzB;IAEA,IAAIE,aAAa,KAAK9D,OAAO,EAAE;EAC7B,IAAA,MAAMgE,OAAO,GAAGhE,OAAO,CAAC+D,OAAO,CAAC,SAAS,CAAC;EAC1C,IAAA,IAAIC,OAAO,IAAIA,OAAO,CAACC,UAAU,KAAKH,aAAa,EAAE;EACnD,MAAA,OAAO,KAAK;EACd;MAEA,IAAIE,OAAO,KAAK,IAAI,EAAE;EACpB,MAAA,OAAO,KAAK;EACd;EACF;EAEA,EAAA,OAAOJ,gBAAgB;EACzB,CAAC;EAED,MAAMM,UAAU,GAAGlE,OAAO,IAAI;IAC5B,IAAI,CAACA,OAAO,IAAIA,OAAO,CAACsD,QAAQ,KAAKa,IAAI,CAACC,YAAY,EAAE;EACtD,IAAA,OAAO,IAAI;EACb;IAEA,IAAIpE,OAAO,CAACqE,SAAS,CAACC,QAAQ,CAAC,UAAU,CAAC,EAAE;EAC1C,IAAA,OAAO,IAAI;EACb;EAEA,EAAA,IAAI,OAAOtE,OAAO,CAACuE,QAAQ,KAAK,WAAW,EAAE;MAC3C,OAAOvE,OAAO,CAACuE,QAAQ;EACzB;EAEA,EAAA,OAAOvE,OAAO,CAACwE,YAAY,CAAC,UAAU,CAAC,IAAIxE,OAAO,CAACyE,YAAY,CAAC,UAAU,CAAC,KAAK,OAAO;EACzF,CAAC;EAED,MAAMC,cAAc,GAAG1E,OAAO,IAAI;EAChC,EAAA,IAAI,CAACsC,QAAQ,CAACqC,eAAe,CAACC,YAAY,EAAE;EAC1C,IAAA,OAAO,IAAI;EACb;;EAEA;EACA,EAAA,IAAI,OAAO5E,OAAO,CAAC6E,WAAW,KAAK,UAAU,EAAE;EAC7C,IAAA,MAAMC,IAAI,GAAG9E,OAAO,CAAC6E,WAAW,EAAE;EAClC,IAAA,OAAOC,IAAI,YAAYC,UAAU,GAAGD,IAAI,GAAG,IAAI;EACjD;IAEA,IAAI9E,OAAO,YAAY+E,UAAU,EAAE;EACjC,IAAA,OAAO/E,OAAO;EAChB;;EAEA;EACA,EAAA,IAAI,CAACA,OAAO,CAACiE,UAAU,EAAE;EACvB,IAAA,OAAO,IAAI;EACb;EAEA,EAAA,OAAOS,cAAc,CAAC1E,OAAO,CAACiE,UAAU,CAAC;EAC3C,CAAC;EAED,MAAMe,IAAI,GAAGA,MAAM,EAAE;;EAErB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,MAAM,GAAGjF,OAAO,IAAI;IACxBA,OAAO,CAACkF,YAAY,CAAC;EACvB,CAAC;EAED,MAAMC,SAAS,GAAGA,MAAM;EACtB,EAAA,IAAIhE,MAAM,CAACiE,MAAM,IAAI,CAAC9C,QAAQ,CAAC+C,IAAI,CAACb,YAAY,CAAC,mBAAmB,CAAC,EAAE;MACrE,OAAOrD,MAAM,CAACiE,MAAM;EACtB;EAEA,EAAA,OAAO,IAAI;EACb,CAAC;EAED,MAAME,yBAAyB,GAAG,EAAE;EAEpC,MAAMC,kBAAkB,GAAGC,QAAQ,IAAI;EACrC,EAAA,IAAIlD,QAAQ,CAACmD,UAAU,KAAK,SAAS,EAAE;EACrC;EACA,IAAA,IAAI,CAACH,yBAAyB,CAAC9B,MAAM,EAAE;EACrClB,MAAAA,QAAQ,CAACoD,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;EAClD,QAAA,KAAK,MAAMF,QAAQ,IAAIF,yBAAyB,EAAE;EAChDE,UAAAA,QAAQ,EAAE;EACZ;EACF,OAAC,CAAC;EACJ;EAEAF,IAAAA,yBAAyB,CAACK,IAAI,CAACH,QAAQ,CAAC;EAC1C,GAAC,MAAM;EACLA,IAAAA,QAAQ,EAAE;EACZ;EACF,CAAC;EAED,MAAMI,KAAK,GAAGA,MAAMtD,QAAQ,CAACqC,eAAe,CAACkB,GAAG,KAAK,KAAK;EAE1D,MAAMC,kBAAkB,GAAGC,MAAM,IAAI;EACnCR,EAAAA,kBAAkB,CAAC,MAAM;EACvB,IAAA,MAAMS,CAAC,GAAGb,SAAS,EAAE;EACrB;EACA,IAAA,IAAIa,CAAC,EAAE;EACL,MAAA,MAAMC,IAAI,GAAGF,MAAM,CAACG,IAAI;EACxB,MAAA,MAAMC,kBAAkB,GAAGH,CAAC,CAACI,EAAE,CAACH,IAAI,CAAC;QACrCD,CAAC,CAACI,EAAE,CAACH,IAAI,CAAC,GAAGF,MAAM,CAACM,eAAe;QACnCL,CAAC,CAACI,EAAE,CAACH,IAAI,CAAC,CAACK,WAAW,GAAGP,MAAM;QAC/BC,CAAC,CAACI,EAAE,CAACH,IAAI,CAAC,CAACM,UAAU,GAAG,MAAM;EAC5BP,QAAAA,CAAC,CAACI,EAAE,CAACH,IAAI,CAAC,GAAGE,kBAAkB;UAC/B,OAAOJ,MAAM,CAACM,eAAe;SAC9B;EACH;EACF,GAAC,CAAC;EACJ,CAAC;EAED,MAAMG,OAAO,GAAGA,CAACC,gBAAgB,EAAEC,IAAI,GAAG,EAAE,EAAEC,YAAY,GAAGF,gBAAgB,KAAK;EAChF,EAAA,OAAO,OAAOA,gBAAgB,KAAK,UAAU,GAAGA,gBAAgB,CAAC1E,IAAI,CAAC,GAAG2E,IAAI,CAAC,GAAGC,YAAY;EAC/F,CAAC;EAED,MAAMC,sBAAsB,GAAGA,CAACpB,QAAQ,EAAEqB,iBAAiB,EAAEC,iBAAiB,GAAG,IAAI,KAAK;IACxF,IAAI,CAACA,iBAAiB,EAAE;MACtBN,OAAO,CAAChB,QAAQ,CAAC;EACjB,IAAA;EACF;IAEA,MAAMuB,eAAe,GAAG,CAAC;EACzB,EAAA,MAAMC,gBAAgB,GAAGxE,gCAAgC,CAACqE,iBAAiB,CAAC,GAAGE,eAAe;IAE9F,IAAIE,MAAM,GAAG,KAAK;IAElB,MAAMC,OAAO,GAAGA,CAAC;EAAEC,IAAAA;EAAO,GAAC,KAAK;MAC9B,IAAIA,MAAM,KAAKN,iBAAiB,EAAE;EAChC,MAAA;EACF;EAEAI,IAAAA,MAAM,GAAG,IAAI;EACbJ,IAAAA,iBAAiB,CAACO,mBAAmB,CAACpG,cAAc,EAAEkG,OAAO,CAAC;MAC9DV,OAAO,CAAChB,QAAQ,CAAC;KAClB;EAEDqB,EAAAA,iBAAiB,CAACnB,gBAAgB,CAAC1E,cAAc,EAAEkG,OAAO,CAAC;EAC3DG,EAAAA,UAAU,CAAC,MAAM;MACf,IAAI,CAACJ,MAAM,EAAE;QACXhE,oBAAoB,CAAC4D,iBAAiB,CAAC;EACzC;KACD,EAAEG,gBAAgB,CAAC;EACtB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMM,oBAAoB,GAAGA,CAACC,IAAI,EAAEC,aAAa,EAAEC,aAAa,EAAEC,cAAc,KAAK;EACnF,EAAA,MAAMC,UAAU,GAAGJ,IAAI,CAAC/D,MAAM;EAC9B,EAAA,IAAIoE,KAAK,GAAGL,IAAI,CAACM,OAAO,CAACL,aAAa,CAAC;;EAEvC;EACA;EACA,EAAA,IAAII,KAAK,KAAK,EAAE,EAAE;EAChB,IAAA,OAAO,CAACH,aAAa,IAAIC,cAAc,GAAGH,IAAI,CAACI,UAAU,GAAG,CAAC,CAAC,GAAGJ,IAAI,CAAC,CAAC,CAAC;EAC1E;EAEAK,EAAAA,KAAK,IAAIH,aAAa,GAAG,CAAC,GAAG,EAAE;EAE/B,EAAA,IAAIC,cAAc,EAAE;EAClBE,IAAAA,KAAK,GAAG,CAACA,KAAK,GAAGD,UAAU,IAAIA,UAAU;EAC3C;EAEA,EAAA,OAAOJ,IAAI,CAACpF,IAAI,CAAC2F,GAAG,CAAC,CAAC,EAAE3F,IAAI,CAAC4F,GAAG,CAACH,KAAK,EAAED,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,CAAC;;EC3RD;EACA;EACA;EACA;EACA;EACA;;;EAIA;EACA;EACA;;EAEA,MAAMK,cAAc,GAAG,oBAAoB;EAC3C,MAAMC,cAAc,GAAG,MAAM;EAC7B,MAAMC,aAAa,GAAG,QAAQ;EAC9B,MAAMC,aAAa,GAAG,EAAE,CAAC;EACzB,IAAIC,QAAQ,GAAG,CAAC;EAChB,MAAMC,YAAY,GAAG;EACnBC,EAAAA,UAAU,EAAE,WAAW;EACvBC,EAAAA,UAAU,EAAE;EACd,CAAC;EAED,MAAMC,YAAY,GAAG,IAAIC,GAAG,CAAC,CAC3B,OAAO,EACP,UAAU,EACV,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,MAAM,EACN,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,OAAO,EACP,QAAQ,CACT,CAAC;;EAEF;EACA;EACA;;EAEA,SAASC,YAAYA,CAAC1I,OAAO,EAAE2I,GAAG,EAAE;EAClC,EAAA,OAAQA,GAAG,IAAI,CAAGA,EAAAA,GAAG,KAAKP,QAAQ,EAAE,CAAE,CAAA,IAAKpI,OAAO,CAACoI,QAAQ,IAAIA,QAAQ,EAAE;EAC3E;EAEA,SAASQ,gBAAgBA,CAAC5I,OAAO,EAAE;EACjC,EAAA,MAAM2I,GAAG,GAAGD,YAAY,CAAC1I,OAAO,CAAC;IAEjCA,OAAO,CAACoI,QAAQ,GAAGO,GAAG;IACtBR,aAAa,CAACQ,GAAG,CAAC,GAAGR,aAAa,CAACQ,GAAG,CAAC,IAAI,EAAE;IAE7C,OAAOR,aAAa,CAACQ,GAAG,CAAC;EAC3B;EAEA,SAASE,gBAAgBA,CAAC7I,OAAO,EAAEoG,EAAE,EAAE;EACrC,EAAA,OAAO,SAASc,OAAOA,CAAC4B,KAAK,EAAE;MAC7BC,UAAU,CAACD,KAAK,EAAE;EAAEE,MAAAA,cAAc,EAAEhJ;EAAQ,KAAC,CAAC;MAE9C,IAAIkH,OAAO,CAAC+B,MAAM,EAAE;QAClBC,YAAY,CAACC,GAAG,CAACnJ,OAAO,EAAE8I,KAAK,CAACM,IAAI,EAAEhD,EAAE,CAAC;EAC3C;MAEA,OAAOA,EAAE,CAACiD,KAAK,CAACrJ,OAAO,EAAE,CAAC8I,KAAK,CAAC,CAAC;KAClC;EACH;EAEA,SAASQ,0BAA0BA,CAACtJ,OAAO,EAAEkB,QAAQ,EAAEkF,EAAE,EAAE;EACzD,EAAA,OAAO,SAASc,OAAOA,CAAC4B,KAAK,EAAE;EAC7B,IAAA,MAAMS,WAAW,GAAGvJ,OAAO,CAACwJ,gBAAgB,CAACtI,QAAQ,CAAC;EAEtD,IAAA,KAAK,IAAI;EAAEiG,MAAAA;EAAO,KAAC,GAAG2B,KAAK,EAAE3B,MAAM,IAAIA,MAAM,KAAK,IAAI,EAAEA,MAAM,GAAGA,MAAM,CAAClD,UAAU,EAAE;EAClF,MAAA,KAAK,MAAMwF,UAAU,IAAIF,WAAW,EAAE;UACpC,IAAIE,UAAU,KAAKtC,MAAM,EAAE;EACzB,UAAA;EACF;UAEA4B,UAAU,CAACD,KAAK,EAAE;EAAEE,UAAAA,cAAc,EAAE7B;EAAO,SAAC,CAAC;UAE7C,IAAID,OAAO,CAAC+B,MAAM,EAAE;EAClBC,UAAAA,YAAY,CAACC,GAAG,CAACnJ,OAAO,EAAE8I,KAAK,CAACM,IAAI,EAAElI,QAAQ,EAAEkF,EAAE,CAAC;EACrD;UAEA,OAAOA,EAAE,CAACiD,KAAK,CAAClC,MAAM,EAAE,CAAC2B,KAAK,CAAC,CAAC;EAClC;EACF;KACD;EACH;EAEA,SAASY,WAAWA,CAACC,MAAM,EAAEC,QAAQ,EAAEC,kBAAkB,GAAG,IAAI,EAAE;IAChE,OAAOjI,MAAM,CAACkI,MAAM,CAACH,MAAM,CAAC,CACzBI,IAAI,CAACjB,KAAK,IAAIA,KAAK,CAACc,QAAQ,KAAKA,QAAQ,IAAId,KAAK,CAACe,kBAAkB,KAAKA,kBAAkB,CAAC;EAClG;EAEA,SAASG,mBAAmBA,CAACC,iBAAiB,EAAE/C,OAAO,EAAEgD,kBAAkB,EAAE;EAC3E,EAAA,MAAMC,WAAW,GAAG,OAAOjD,OAAO,KAAK,QAAQ;EAC/C;IACA,MAAM0C,QAAQ,GAAGO,WAAW,GAAGD,kBAAkB,GAAIhD,OAAO,IAAIgD,kBAAmB;EACnF,EAAA,IAAIE,SAAS,GAAGC,YAAY,CAACJ,iBAAiB,CAAC;EAE/C,EAAA,IAAI,CAACzB,YAAY,CAACrI,GAAG,CAACiK,SAAS,CAAC,EAAE;EAChCA,IAAAA,SAAS,GAAGH,iBAAiB;EAC/B;EAEA,EAAA,OAAO,CAACE,WAAW,EAAEP,QAAQ,EAAEQ,SAAS,CAAC;EAC3C;EAEA,SAASE,UAAUA,CAACtK,OAAO,EAAEiK,iBAAiB,EAAE/C,OAAO,EAAEgD,kBAAkB,EAAEjB,MAAM,EAAE;EACnF,EAAA,IAAI,OAAOgB,iBAAiB,KAAK,QAAQ,IAAI,CAACjK,OAAO,EAAE;EACrD,IAAA;EACF;EAEA,EAAA,IAAI,CAACmK,WAAW,EAAEP,QAAQ,EAAEQ,SAAS,CAAC,GAAGJ,mBAAmB,CAACC,iBAAiB,EAAE/C,OAAO,EAAEgD,kBAAkB,CAAC;;EAE5G;EACA;IACA,IAAID,iBAAiB,IAAI5B,YAAY,EAAE;MACrC,MAAMkC,YAAY,GAAGnE,EAAE,IAAI;QACzB,OAAO,UAAU0C,KAAK,EAAE;UACtB,IAAI,CAACA,KAAK,CAAC0B,aAAa,IAAK1B,KAAK,CAAC0B,aAAa,KAAK1B,KAAK,CAACE,cAAc,IAAI,CAACF,KAAK,CAACE,cAAc,CAAC1E,QAAQ,CAACwE,KAAK,CAAC0B,aAAa,CAAE,EAAE;EACjI,UAAA,OAAOpE,EAAE,CAACrE,IAAI,CAAC,IAAI,EAAE+G,KAAK,CAAC;EAC7B;SACD;OACF;EAEDc,IAAAA,QAAQ,GAAGW,YAAY,CAACX,QAAQ,CAAC;EACnC;EAEA,EAAA,MAAMD,MAAM,GAAGf,gBAAgB,CAAC5I,OAAO,CAAC;EACxC,EAAA,MAAMyK,QAAQ,GAAGd,MAAM,CAACS,SAAS,CAAC,KAAKT,MAAM,CAACS,SAAS,CAAC,GAAG,EAAE,CAAC;EAC9D,EAAA,MAAMM,gBAAgB,GAAGhB,WAAW,CAACe,QAAQ,EAAEb,QAAQ,EAAEO,WAAW,GAAGjD,OAAO,GAAG,IAAI,CAAC;EAEtF,EAAA,IAAIwD,gBAAgB,EAAE;EACpBA,IAAAA,gBAAgB,CAACzB,MAAM,GAAGyB,gBAAgB,CAACzB,MAAM,IAAIA,MAAM;EAE3D,IAAA;EACF;EAEA,EAAA,MAAMN,GAAG,GAAGD,YAAY,CAACkB,QAAQ,EAAEK,iBAAiB,CAAC3I,OAAO,CAAC0G,cAAc,EAAE,EAAE,CAAC,CAAC;EACjF,EAAA,MAAM5B,EAAE,GAAG+D,WAAW,GACpBb,0BAA0B,CAACtJ,OAAO,EAAEkH,OAAO,EAAE0C,QAAQ,CAAC,GACtDf,gBAAgB,CAAC7I,OAAO,EAAE4J,QAAQ,CAAC;EAErCxD,EAAAA,EAAE,CAACyD,kBAAkB,GAAGM,WAAW,GAAGjD,OAAO,GAAG,IAAI;IACpDd,EAAE,CAACwD,QAAQ,GAAGA,QAAQ;IACtBxD,EAAE,CAAC6C,MAAM,GAAGA,MAAM;IAClB7C,EAAE,CAACgC,QAAQ,GAAGO,GAAG;EACjB8B,EAAAA,QAAQ,CAAC9B,GAAG,CAAC,GAAGvC,EAAE;IAElBpG,OAAO,CAAC0F,gBAAgB,CAAC0E,SAAS,EAAEhE,EAAE,EAAE+D,WAAW,CAAC;EACtD;EAEA,SAASQ,aAAaA,CAAC3K,OAAO,EAAE2J,MAAM,EAAES,SAAS,EAAElD,OAAO,EAAE2C,kBAAkB,EAAE;EAC9E,EAAA,MAAMzD,EAAE,GAAGsD,WAAW,CAACC,MAAM,CAACS,SAAS,CAAC,EAAElD,OAAO,EAAE2C,kBAAkB,CAAC;IAEtE,IAAI,CAACzD,EAAE,EAAE;EACP,IAAA;EACF;IAEApG,OAAO,CAACoH,mBAAmB,CAACgD,SAAS,EAAEhE,EAAE,EAAEwE,OAAO,CAACf,kBAAkB,CAAC,CAAC;IACvE,OAAOF,MAAM,CAACS,SAAS,CAAC,CAAChE,EAAE,CAACgC,QAAQ,CAAC;EACvC;EAEA,SAASyC,wBAAwBA,CAAC7K,OAAO,EAAE2J,MAAM,EAAES,SAAS,EAAEU,SAAS,EAAE;IACvE,MAAMC,iBAAiB,GAAGpB,MAAM,CAACS,SAAS,CAAC,IAAI,EAAE;EAEjD,EAAA,KAAK,MAAM,CAACY,UAAU,EAAElC,KAAK,CAAC,IAAIlH,MAAM,CAACqJ,OAAO,CAACF,iBAAiB,CAAC,EAAE;EACnE,IAAA,IAAIC,UAAU,CAACE,QAAQ,CAACJ,SAAS,CAAC,EAAE;EAClCH,MAAAA,aAAa,CAAC3K,OAAO,EAAE2J,MAAM,EAAES,SAAS,EAAEtB,KAAK,CAACc,QAAQ,EAAEd,KAAK,CAACe,kBAAkB,CAAC;EACrF;EACF;EACF;EAEA,SAASQ,YAAYA,CAACvB,KAAK,EAAE;EAC3B;IACAA,KAAK,GAAGA,KAAK,CAACxH,OAAO,CAAC2G,cAAc,EAAE,EAAE,CAAC;EACzC,EAAA,OAAOI,YAAY,CAACS,KAAK,CAAC,IAAIA,KAAK;EACrC;EAEA,MAAMI,YAAY,GAAG;IACnBiC,EAAEA,CAACnL,OAAO,EAAE8I,KAAK,EAAE5B,OAAO,EAAEgD,kBAAkB,EAAE;MAC9CI,UAAU,CAACtK,OAAO,EAAE8I,KAAK,EAAE5B,OAAO,EAAEgD,kBAAkB,EAAE,KAAK,CAAC;KAC/D;IAEDkB,GAAGA,CAACpL,OAAO,EAAE8I,KAAK,EAAE5B,OAAO,EAAEgD,kBAAkB,EAAE;MAC/CI,UAAU,CAACtK,OAAO,EAAE8I,KAAK,EAAE5B,OAAO,EAAEgD,kBAAkB,EAAE,IAAI,CAAC;KAC9D;IAEDf,GAAGA,CAACnJ,OAAO,EAAEiK,iBAAiB,EAAE/C,OAAO,EAAEgD,kBAAkB,EAAE;EAC3D,IAAA,IAAI,OAAOD,iBAAiB,KAAK,QAAQ,IAAI,CAACjK,OAAO,EAAE;EACrD,MAAA;EACF;EAEA,IAAA,MAAM,CAACmK,WAAW,EAAEP,QAAQ,EAAEQ,SAAS,CAAC,GAAGJ,mBAAmB,CAACC,iBAAiB,EAAE/C,OAAO,EAAEgD,kBAAkB,CAAC;EAC9G,IAAA,MAAMmB,WAAW,GAAGjB,SAAS,KAAKH,iBAAiB;EACnD,IAAA,MAAMN,MAAM,GAAGf,gBAAgB,CAAC5I,OAAO,CAAC;MACxC,MAAM+K,iBAAiB,GAAGpB,MAAM,CAACS,SAAS,CAAC,IAAI,EAAE;EACjD,IAAA,MAAMkB,WAAW,GAAGrB,iBAAiB,CAACsB,UAAU,CAAC,GAAG,CAAC;EAErD,IAAA,IAAI,OAAO3B,QAAQ,KAAK,WAAW,EAAE;EACnC;QACA,IAAI,CAAChI,MAAM,CAACjB,IAAI,CAACoK,iBAAiB,CAAC,CAACvH,MAAM,EAAE;EAC1C,QAAA;EACF;EAEAmH,MAAAA,aAAa,CAAC3K,OAAO,EAAE2J,MAAM,EAAES,SAAS,EAAER,QAAQ,EAAEO,WAAW,GAAGjD,OAAO,GAAG,IAAI,CAAC;EACjF,MAAA;EACF;EAEA,IAAA,IAAIoE,WAAW,EAAE;QACf,KAAK,MAAME,YAAY,IAAI5J,MAAM,CAACjB,IAAI,CAACgJ,MAAM,CAAC,EAAE;EAC9CkB,QAAAA,wBAAwB,CAAC7K,OAAO,EAAE2J,MAAM,EAAE6B,YAAY,EAAEvB,iBAAiB,CAACwB,KAAK,CAAC,CAAC,CAAC,CAAC;EACrF;EACF;EAEA,IAAA,KAAK,MAAM,CAACC,WAAW,EAAE5C,KAAK,CAAC,IAAIlH,MAAM,CAACqJ,OAAO,CAACF,iBAAiB,CAAC,EAAE;QACpE,MAAMC,UAAU,GAAGU,WAAW,CAACpK,OAAO,CAAC4G,aAAa,EAAE,EAAE,CAAC;QAEzD,IAAI,CAACmD,WAAW,IAAIpB,iBAAiB,CAACiB,QAAQ,CAACF,UAAU,CAAC,EAAE;EAC1DL,QAAAA,aAAa,CAAC3K,OAAO,EAAE2J,MAAM,EAAES,SAAS,EAAEtB,KAAK,CAACc,QAAQ,EAAEd,KAAK,CAACe,kBAAkB,CAAC;EACrF;EACF;KACD;EAED8B,EAAAA,OAAOA,CAAC3L,OAAO,EAAE8I,KAAK,EAAEpC,IAAI,EAAE;EAC5B,IAAA,IAAI,OAAOoC,KAAK,KAAK,QAAQ,IAAI,CAAC9I,OAAO,EAAE;EACzC,MAAA,OAAO,IAAI;EACb;EAEA,IAAA,MAAMgG,CAAC,GAAGb,SAAS,EAAE;EACrB,IAAA,MAAMiF,SAAS,GAAGC,YAAY,CAACvB,KAAK,CAAC;EACrC,IAAA,MAAMuC,WAAW,GAAGvC,KAAK,KAAKsB,SAAS;MAEvC,IAAIwB,WAAW,GAAG,IAAI;MACtB,IAAIC,OAAO,GAAG,IAAI;MAClB,IAAIC,cAAc,GAAG,IAAI;MACzB,IAAIC,gBAAgB,GAAG,KAAK;MAE5B,IAAIV,WAAW,IAAIrF,CAAC,EAAE;QACpB4F,WAAW,GAAG5F,CAAC,CAAC7C,KAAK,CAAC2F,KAAK,EAAEpC,IAAI,CAAC;EAElCV,MAAAA,CAAC,CAAChG,OAAO,CAAC,CAAC2L,OAAO,CAACC,WAAW,CAAC;EAC/BC,MAAAA,OAAO,GAAG,CAACD,WAAW,CAACI,oBAAoB,EAAE;EAC7CF,MAAAA,cAAc,GAAG,CAACF,WAAW,CAACK,6BAA6B,EAAE;EAC7DF,MAAAA,gBAAgB,GAAGH,WAAW,CAACM,kBAAkB,EAAE;EACrD;MAEA,MAAMC,GAAG,GAAGpD,UAAU,CAAC,IAAI5F,KAAK,CAAC2F,KAAK,EAAE;QAAE+C,OAAO;EAAEO,MAAAA,UAAU,EAAE;OAAM,CAAC,EAAE1F,IAAI,CAAC;EAE7E,IAAA,IAAIqF,gBAAgB,EAAE;QACpBI,GAAG,CAACE,cAAc,EAAE;EACtB;EAEA,IAAA,IAAIP,cAAc,EAAE;EAClB9L,MAAAA,OAAO,CAACkD,aAAa,CAACiJ,GAAG,CAAC;EAC5B;EAEA,IAAA,IAAIA,GAAG,CAACJ,gBAAgB,IAAIH,WAAW,EAAE;QACvCA,WAAW,CAACS,cAAc,EAAE;EAC9B;EAEA,IAAA,OAAOF,GAAG;EACZ;EACF,CAAC;EAED,SAASpD,UAAUA,CAACuD,GAAG,EAAEC,IAAI,GAAG,EAAE,EAAE;EAClC,EAAA,KAAK,MAAM,CAACtM,GAAG,EAAEuM,KAAK,CAAC,IAAI5K,MAAM,CAACqJ,OAAO,CAACsB,IAAI,CAAC,EAAE;MAC/C,IAAI;EACFD,MAAAA,GAAG,CAACrM,GAAG,CAAC,GAAGuM,KAAK;OACjB,CAAC,OAAAC,OAAA,EAAM;EACN7K,MAAAA,MAAM,CAAC8K,cAAc,CAACJ,GAAG,EAAErM,GAAG,EAAE;EAC9B0M,QAAAA,YAAY,EAAE,IAAI;EAClBtM,QAAAA,GAAGA,GAAG;EACJ,UAAA,OAAOmM,KAAK;EACd;EACF,OAAC,CAAC;EACJ;EACF;EAEA,EAAA,OAAOF,GAAG;EACZ;;EC1TA;EACA;EACA;EACA;EACA;EACA;;EAEA,SAASM,aAAaA,CAACJ,KAAK,EAAE;IAC5B,IAAIA,KAAK,KAAK,MAAM,EAAE;EACpB,IAAA,OAAO,IAAI;EACb;IAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;EACrB,IAAA,OAAO,KAAK;EACd;IAEA,IAAIA,KAAK,KAAK3J,MAAM,CAAC2J,KAAK,CAAC,CAAC1K,QAAQ,EAAE,EAAE;MACtC,OAAOe,MAAM,CAAC2J,KAAK,CAAC;EACtB;EAEA,EAAA,IAAIA,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,MAAM,EAAE;EACpC,IAAA,OAAO,IAAI;EACb;EAEA,EAAA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;EAC7B,IAAA,OAAOA,KAAK;EACd;IAEA,IAAI;MACF,OAAOK,IAAI,CAACC,KAAK,CAACC,kBAAkB,CAACP,KAAK,CAAC,CAAC;KAC7C,CAAC,OAAAC,OAAA,EAAM;EACN,IAAA,OAAOD,KAAK;EACd;EACF;EAEA,SAASQ,gBAAgBA,CAAC/M,GAAG,EAAE;EAC7B,EAAA,OAAOA,GAAG,CAACqB,OAAO,CAAC,QAAQ,EAAE2L,GAAG,IAAI,CAAA,CAAA,EAAIA,GAAG,CAACjL,WAAW,EAAE,EAAE,CAAC;EAC9D;EAEA,MAAMkL,WAAW,GAAG;EAClBC,EAAAA,gBAAgBA,CAACnN,OAAO,EAAEC,GAAG,EAAEuM,KAAK,EAAE;MACpCxM,OAAO,CAACoN,YAAY,CAAC,CAAWJ,QAAAA,EAAAA,gBAAgB,CAAC/M,GAAG,CAAC,CAAA,CAAE,EAAEuM,KAAK,CAAC;KAChE;EAEDa,EAAAA,mBAAmBA,CAACrN,OAAO,EAAEC,GAAG,EAAE;MAChCD,OAAO,CAACsN,eAAe,CAAC,CAAA,QAAA,EAAWN,gBAAgB,CAAC/M,GAAG,CAAC,CAAA,CAAE,CAAC;KAC5D;IAEDsN,iBAAiBA,CAACvN,OAAO,EAAE;MACzB,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,OAAO,EAAE;EACX;MAEA,MAAMwN,UAAU,GAAG,EAAE;EACrB,IAAA,MAAMC,MAAM,GAAG7L,MAAM,CAACjB,IAAI,CAACX,OAAO,CAAC0N,OAAO,CAAC,CAACC,MAAM,CAAC1N,GAAG,IAAIA,GAAG,CAACsL,UAAU,CAAC,IAAI,CAAC,IAAI,CAACtL,GAAG,CAACsL,UAAU,CAAC,UAAU,CAAC,CAAC;EAE9G,IAAA,KAAK,MAAMtL,GAAG,IAAIwN,MAAM,EAAE;QACxB,IAAIG,OAAO,GAAG3N,GAAG,CAACqB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EACpCsM,MAAAA,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC7L,WAAW,EAAE,GAAG4L,OAAO,CAACnC,KAAK,CAAC,CAAC,CAAC;EAC5D+B,MAAAA,UAAU,CAACI,OAAO,CAAC,GAAGhB,aAAa,CAAC5M,OAAO,CAAC0N,OAAO,CAACzN,GAAG,CAAC,CAAC;EAC3D;EAEA,IAAA,OAAOuN,UAAU;KAClB;EAEDM,EAAAA,gBAAgBA,CAAC9N,OAAO,EAAEC,GAAG,EAAE;EAC7B,IAAA,OAAO2M,aAAa,CAAC5M,OAAO,CAACyE,YAAY,CAAC,CAAWuI,QAAAA,EAAAA,gBAAgB,CAAC/M,GAAG,CAAC,CAAA,CAAE,CAAC,CAAC;EAChF;EACF,CAAC;;ECpED;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAM8N,MAAM,CAAC;EACX;IACA,WAAWC,OAAOA,GAAG;EACnB,IAAA,OAAO,EAAE;EACX;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAO,EAAE;EACX;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,MAAM,IAAIgI,KAAK,CAAC,qEAAqE,CAAC;EACxF;IAEAC,UAAUA,CAACC,MAAM,EAAE;EACjBA,IAAAA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,CAAC;EACrCA,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC;EAC7B,IAAA,OAAOA,MAAM;EACf;IAEAE,iBAAiBA,CAACF,MAAM,EAAE;EACxB,IAAA,OAAOA,MAAM;EACf;EAEAC,EAAAA,eAAeA,CAACD,MAAM,EAAEpO,OAAO,EAAE;EAC/B,IAAA,MAAMwO,UAAU,GAAGpL,WAAS,CAACpD,OAAO,CAAC,GAAGkN,WAAW,CAACY,gBAAgB,CAAC9N,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;;MAE7F,OAAO;EACL,MAAA,GAAG,IAAI,CAACyO,WAAW,CAACT,OAAO;QAC3B,IAAI,OAAOQ,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,EAAE,CAAC;EACrD,MAAA,IAAIpL,WAAS,CAACpD,OAAO,CAAC,GAAGkN,WAAW,CAACK,iBAAiB,CAACvN,OAAO,CAAC,GAAG,EAAE,CAAC;QACrE,IAAI,OAAOoO,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,EAAE;OAC7C;EACH;IAEAG,gBAAgBA,CAACH,MAAM,EAAEM,WAAW,GAAG,IAAI,CAACD,WAAW,CAACR,WAAW,EAAE;EACnE,IAAA,KAAK,MAAM,CAACU,QAAQ,EAAEC,aAAa,CAAC,IAAIhN,MAAM,CAACqJ,OAAO,CAACyD,WAAW,CAAC,EAAE;EACnE,MAAA,MAAMlC,KAAK,GAAG4B,MAAM,CAACO,QAAQ,CAAC;EAC9B,MAAA,MAAME,SAAS,GAAGzL,WAAS,CAACoJ,KAAK,CAAC,GAAG,SAAS,GAAG/K,MAAM,CAAC+K,KAAK,CAAC;QAE9D,IAAI,CAAC,IAAIsC,MAAM,CAACF,aAAa,CAAC,CAACG,IAAI,CAACF,SAAS,CAAC,EAAE;UAC9C,MAAM,IAAIG,SAAS,CACjB,CAAA,EAAG,IAAI,CAACP,WAAW,CAACvI,IAAI,CAAC+I,WAAW,EAAE,aAAaN,QAAQ,CAAA,iBAAA,EAAoBE,SAAS,CAAwBD,qBAAAA,EAAAA,aAAa,IAC/H,CAAC;EACH;EACF;EACF;EACF;;EC9DA;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMM,OAAO,GAAG,OAAO;;EAEvB;EACA;EACA;;EAEA,MAAMC,aAAa,SAASpB,MAAM,CAAC;EACjCU,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,EAAE;EAEPpO,IAAAA,OAAO,GAAGuD,UAAU,CAACvD,OAAO,CAAC;MAC7B,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA;EACF;MAEA,IAAI,CAACoP,QAAQ,GAAGpP,OAAO;MACvB,IAAI,CAACqP,OAAO,GAAG,IAAI,CAAClB,UAAU,CAACC,MAAM,CAAC;EAEtCkB,IAAAA,IAAI,CAACvP,GAAG,CAAC,IAAI,CAACqP,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACc,QAAQ,EAAE,IAAI,CAAC;EAC1D;;EAEA;EACAC,EAAAA,OAAOA,GAAG;EACRF,IAAAA,IAAI,CAAC1O,MAAM,CAAC,IAAI,CAACwO,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACc,QAAQ,CAAC;EACrDrG,IAAAA,YAAY,CAACC,GAAG,CAAC,IAAI,CAACiG,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACgB,SAAS,CAAC;MAE3D,KAAK,MAAMC,YAAY,IAAI9N,MAAM,CAAC+N,mBAAmB,CAAC,IAAI,CAAC,EAAE;EAC3D,MAAA,IAAI,CAACD,YAAY,CAAC,GAAG,IAAI;EAC3B;EACF;;EAEA;IACAE,cAAcA,CAACpK,QAAQ,EAAExF,OAAO,EAAE6P,UAAU,GAAG,IAAI,EAAE;EACnDjJ,IAAAA,sBAAsB,CAACpB,QAAQ,EAAExF,OAAO,EAAE6P,UAAU,CAAC;EACvD;IAEA1B,UAAUA,CAACC,MAAM,EAAE;MACjBA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,EAAE,IAAI,CAACgB,QAAQ,CAAC;EACpDhB,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC;EAC7B,IAAA,OAAOA,MAAM;EACf;;EAEA;IACA,OAAO0B,WAAWA,CAAC9P,OAAO,EAAE;EAC1B,IAAA,OAAOsP,IAAI,CAACjP,GAAG,CAACkD,UAAU,CAACvD,OAAO,CAAC,EAAE,IAAI,CAACuP,QAAQ,CAAC;EACrD;IAEA,OAAOQ,mBAAmBA,CAAC/P,OAAO,EAAEoO,MAAM,GAAG,EAAE,EAAE;MAC/C,OAAO,IAAI,CAAC0B,WAAW,CAAC9P,OAAO,CAAC,IAAI,IAAI,IAAI,CAACA,OAAO,EAAE,OAAOoO,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,IAAI,CAAC;EACnG;IAEA,WAAWc,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO;EAChB;IAEA,WAAWK,QAAQA,GAAG;EACpB,IAAA,OAAO,CAAM,GAAA,EAAA,IAAI,CAACrJ,IAAI,CAAE,CAAA;EAC1B;IAEA,WAAWuJ,SAASA,GAAG;EACrB,IAAA,OAAO,CAAI,CAAA,EAAA,IAAI,CAACF,QAAQ,CAAE,CAAA;EAC5B;IAEA,OAAOS,SAASA,CAAC/J,IAAI,EAAE;EACrB,IAAA,OAAO,GAAGA,IAAI,CAAA,EAAG,IAAI,CAACwJ,SAAS,CAAE,CAAA;EACnC;EACF;;ECnFA;EACA;EACA;EACA;EACA;EACA;;EAIA,MAAMQ,WAAW,GAAGjQ,OAAO,IAAI;EAC7B,EAAA,IAAIkB,QAAQ,GAAGlB,OAAO,CAACyE,YAAY,CAAC,gBAAgB,CAAC;EAErD,EAAA,IAAI,CAACvD,QAAQ,IAAIA,QAAQ,KAAK,GAAG,EAAE;EACjC,IAAA,IAAIgP,aAAa,GAAGlQ,OAAO,CAACyE,YAAY,CAAC,MAAM,CAAC;;EAEhD;EACA;EACA;EACA;EACA,IAAA,IAAI,CAACyL,aAAa,IAAK,CAACA,aAAa,CAAChF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACgF,aAAa,CAAC3E,UAAU,CAAC,GAAG,CAAE,EAAE;EACtF,MAAA,OAAO,IAAI;EACb;;EAEA;EACA,IAAA,IAAI2E,aAAa,CAAChF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACgF,aAAa,CAAC3E,UAAU,CAAC,GAAG,CAAC,EAAE;QACjE2E,aAAa,GAAG,CAAIA,CAAAA,EAAAA,aAAa,CAAClN,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAA;EACnD;EAEA9B,IAAAA,QAAQ,GAAGgP,aAAa,IAAIA,aAAa,KAAK,GAAG,GAAGA,aAAa,CAACC,IAAI,EAAE,GAAG,IAAI;EACjF;IAEA,OAAOjP,QAAQ,GAAGA,QAAQ,CAAC8B,KAAK,CAAC,GAAG,CAAC,CAACoN,GAAG,CAACC,GAAG,IAAIpP,aAAa,CAACoP,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;EACvF,CAAC;EAED,MAAMC,cAAc,GAAG;IACrBxG,IAAIA,CAAC7I,QAAQ,EAAElB,OAAO,GAAGsC,QAAQ,CAACqC,eAAe,EAAE;EACjD,IAAA,OAAO,EAAE,CAAC6L,MAAM,CAAC,GAAGC,OAAO,CAAC5O,SAAS,CAAC2H,gBAAgB,CAACzH,IAAI,CAAC/B,OAAO,EAAEkB,QAAQ,CAAC,CAAC;KAChF;IAEDwP,OAAOA,CAACxP,QAAQ,EAAElB,OAAO,GAAGsC,QAAQ,CAACqC,eAAe,EAAE;MACpD,OAAO8L,OAAO,CAAC5O,SAAS,CAAC4B,aAAa,CAAC1B,IAAI,CAAC/B,OAAO,EAAEkB,QAAQ,CAAC;KAC/D;EAEDyP,EAAAA,QAAQA,CAAC3Q,OAAO,EAAEkB,QAAQ,EAAE;MAC1B,OAAO,EAAE,CAACsP,MAAM,CAAC,GAAGxQ,OAAO,CAAC2Q,QAAQ,CAAC,CAAChD,MAAM,CAACiD,KAAK,IAAIA,KAAK,CAACC,OAAO,CAAC3P,QAAQ,CAAC,CAAC;KAC/E;EAED4P,EAAAA,OAAOA,CAAC9Q,OAAO,EAAEkB,QAAQ,EAAE;MACzB,MAAM4P,OAAO,GAAG,EAAE;MAClB,IAAIC,QAAQ,GAAG/Q,OAAO,CAACiE,UAAU,CAACF,OAAO,CAAC7C,QAAQ,CAAC;EAEnD,IAAA,OAAO6P,QAAQ,EAAE;EACfD,MAAAA,OAAO,CAACnL,IAAI,CAACoL,QAAQ,CAAC;QACtBA,QAAQ,GAAGA,QAAQ,CAAC9M,UAAU,CAACF,OAAO,CAAC7C,QAAQ,CAAC;EAClD;EAEA,IAAA,OAAO4P,OAAO;KACf;EAEDE,EAAAA,IAAIA,CAAChR,OAAO,EAAEkB,QAAQ,EAAE;EACtB,IAAA,IAAI+P,QAAQ,GAAGjR,OAAO,CAACkR,sBAAsB;EAE7C,IAAA,OAAOD,QAAQ,EAAE;EACf,MAAA,IAAIA,QAAQ,CAACJ,OAAO,CAAC3P,QAAQ,CAAC,EAAE;UAC9B,OAAO,CAAC+P,QAAQ,CAAC;EACnB;QAEAA,QAAQ,GAAGA,QAAQ,CAACC,sBAAsB;EAC5C;EAEA,IAAA,OAAO,EAAE;KACV;EACD;EACAC,EAAAA,IAAIA,CAACnR,OAAO,EAAEkB,QAAQ,EAAE;EACtB,IAAA,IAAIiQ,IAAI,GAAGnR,OAAO,CAACoR,kBAAkB;EAErC,IAAA,OAAOD,IAAI,EAAE;EACX,MAAA,IAAIA,IAAI,CAACN,OAAO,CAAC3P,QAAQ,CAAC,EAAE;UAC1B,OAAO,CAACiQ,IAAI,CAAC;EACf;QAEAA,IAAI,GAAGA,IAAI,CAACC,kBAAkB;EAChC;EAEA,IAAA,OAAO,EAAE;KACV;IAEDC,iBAAiBA,CAACrR,OAAO,EAAE;EACzB,IAAA,MAAMsR,UAAU,GAAG,CACjB,GAAG,EACH,QAAQ,EACR,OAAO,EACP,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,0BAA0B,CAC3B,CAAClB,GAAG,CAAClP,QAAQ,IAAI,CAAA,EAAGA,QAAQ,CAAA,qBAAA,CAAuB,CAAC,CAACoP,IAAI,CAAC,GAAG,CAAC;MAE/D,OAAO,IAAI,CAACvG,IAAI,CAACuH,UAAU,EAAEtR,OAAO,CAAC,CAAC2N,MAAM,CAAC4D,EAAE,IAAI,CAACrN,UAAU,CAACqN,EAAE,CAAC,IAAI7N,SAAS,CAAC6N,EAAE,CAAC,CAAC;KACrF;IAEDC,sBAAsBA,CAACxR,OAAO,EAAE;EAC9B,IAAA,MAAMkB,QAAQ,GAAG+O,WAAW,CAACjQ,OAAO,CAAC;EAErC,IAAA,IAAIkB,QAAQ,EAAE;QACZ,OAAOqP,cAAc,CAACG,OAAO,CAACxP,QAAQ,CAAC,GAAGA,QAAQ,GAAG,IAAI;EAC3D;EAEA,IAAA,OAAO,IAAI;KACZ;IAEDuQ,sBAAsBA,CAACzR,OAAO,EAAE;EAC9B,IAAA,MAAMkB,QAAQ,GAAG+O,WAAW,CAACjQ,OAAO,CAAC;MAErC,OAAOkB,QAAQ,GAAGqP,cAAc,CAACG,OAAO,CAACxP,QAAQ,CAAC,GAAG,IAAI;KAC1D;IAEDwQ,+BAA+BA,CAAC1R,OAAO,EAAE;EACvC,IAAA,MAAMkB,QAAQ,GAAG+O,WAAW,CAACjQ,OAAO,CAAC;MAErC,OAAOkB,QAAQ,GAAGqP,cAAc,CAACxG,IAAI,CAAC7I,QAAQ,CAAC,GAAG,EAAE;EACtD;EACF,CAAC;;EC3HD;EACA;EACA;EACA;EACA;EACA;;EAMA,MAAMyQ,oBAAoB,GAAGA,CAACC,SAAS,EAAEC,MAAM,GAAG,MAAM,KAAK;EAC3D,EAAA,MAAMC,UAAU,GAAG,CAAA,aAAA,EAAgBF,SAAS,CAACnC,SAAS,CAAE,CAAA;EACxD,EAAA,MAAMxJ,IAAI,GAAG2L,SAAS,CAAC1L,IAAI;EAE3BgD,EAAAA,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEwP,UAAU,EAAE,CAAA,kBAAA,EAAqB7L,IAAI,CAAA,EAAA,CAAI,EAAE,UAAU6C,KAAK,EAAE;EACpF,IAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACoC,QAAQ,CAAC,IAAI,CAAC6G,OAAO,CAAC,EAAE;QACxCjJ,KAAK,CAACuD,cAAc,EAAE;EACxB;EAEA,IAAA,IAAInI,UAAU,CAAC,IAAI,CAAC,EAAE;EACpB,MAAA;EACF;EAEA,IAAA,MAAMiD,MAAM,GAAGoJ,cAAc,CAACkB,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC1N,OAAO,CAAC,CAAIkC,CAAAA,EAAAA,IAAI,EAAE,CAAC;EACtF,IAAA,MAAM/F,QAAQ,GAAG0R,SAAS,CAAC7B,mBAAmB,CAAC5I,MAAM,CAAC;;EAEtD;EACAjH,IAAAA,QAAQ,CAAC2R,MAAM,CAAC,EAAE;EACpB,GAAC,CAAC;EACJ,CAAC;;EC9BD;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAM3L,MAAI,GAAG,OAAO;EACpB,MAAMqJ,UAAQ,GAAG,UAAU;EAC3B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAEhC,MAAMyC,WAAW,GAAG,CAAQvC,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAMwC,YAAY,GAAG,CAASxC,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAMyC,iBAAe,GAAG,MAAM;EAC9B,MAAMC,iBAAe,GAAG,MAAM;;EAE9B;EACA;EACA;;EAEA,MAAMC,KAAK,SAASjD,aAAa,CAAC;EAChC;IACA,WAAWjJ,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAmM,EAAAA,KAAKA,GAAG;MACN,MAAMC,UAAU,GAAGpJ,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE4C,WAAW,CAAC;MAEnE,IAAIM,UAAU,CAACvG,gBAAgB,EAAE;EAC/B,MAAA;EACF;MAEA,IAAI,CAACqD,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;MAE/C,MAAMtC,UAAU,GAAG,IAAI,CAACT,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAAC4N,iBAAe,CAAC;EACpE,IAAA,IAAI,CAACtC,cAAc,CAAC,MAAM,IAAI,CAAC2C,eAAe,EAAE,EAAE,IAAI,CAACnD,QAAQ,EAAES,UAAU,CAAC;EAC9E;;EAEA;EACA0C,EAAAA,eAAeA,GAAG;EAChB,IAAA,IAAI,CAACnD,QAAQ,CAACxO,MAAM,EAAE;MACtBsI,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE6C,YAAY,CAAC;MACjD,IAAI,CAACzC,OAAO,EAAE;EAChB;;EAEA;IACA,OAAOnJ,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGL,KAAK,CAACrC,mBAAmB,CAAC,IAAI,CAAC;EAE5C,MAAA,IAAI,OAAO3B,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAIqE,IAAI,CAACrE,MAAM,CAAC,KAAKzM,SAAS,IAAIyM,MAAM,CAAC7C,UAAU,CAAC,GAAG,CAAC,IAAI6C,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,CAAC,IAAI,CAAC;EACpB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAuD,oBAAoB,CAACS,KAAK,EAAE,OAAO,CAAC;;EAEpC;EACA;EACA;;EAEAtM,kBAAkB,CAACsM,KAAK,CAAC;;ECpFzB;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAMlM,MAAI,GAAG,QAAQ;EACrB,MAAMqJ,UAAQ,GAAG,WAAW;EAC5B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAEhC,MAAMC,mBAAiB,GAAG,QAAQ;EAClC,MAAMC,sBAAoB,GAAG,2BAA2B;EACxD,MAAMC,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;;EAE/D;EACA;EACA;;EAEA,MAAMI,MAAM,SAAS3D,aAAa,CAAC;EACjC;IACA,WAAWjJ,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACA6M,EAAAA,MAAMA,GAAG;EACP;EACA,IAAA,IAAI,CAAC3D,QAAQ,CAAChC,YAAY,CAAC,cAAc,EAAE,IAAI,CAACgC,QAAQ,CAAC/K,SAAS,CAAC0O,MAAM,CAACJ,mBAAiB,CAAC,CAAC;EAC/F;;EAEA;IACA,OAAOtM,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGK,MAAM,CAAC/C,mBAAmB,CAAC,IAAI,CAAC;QAE7C,IAAI3B,MAAM,KAAK,QAAQ,EAAE;EACvBqE,QAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB;EACF,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAED,sBAAoB,EAAE9J,KAAK,IAAI;IAC7EA,KAAK,CAACuD,cAAc,EAAE;IAEtB,MAAM2G,MAAM,GAAGlK,KAAK,CAAC3B,MAAM,CAACpD,OAAO,CAAC6O,sBAAoB,CAAC;EACzD,EAAA,MAAMH,IAAI,GAAGK,MAAM,CAAC/C,mBAAmB,CAACiD,MAAM,CAAC;IAE/CP,IAAI,CAACM,MAAM,EAAE;EACf,CAAC,CAAC;;EAEF;EACA;EACA;;EAEAjN,kBAAkB,CAACgN,MAAM,CAAC;;ECrE1B;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAM5M,MAAI,GAAG,OAAO;EACpB,MAAMuJ,WAAS,GAAG,WAAW;EAC7B,MAAMwD,gBAAgB,GAAG,CAAaxD,UAAAA,EAAAA,WAAS,CAAE,CAAA;EACjD,MAAMyD,eAAe,GAAG,CAAYzD,SAAAA,EAAAA,WAAS,CAAE,CAAA;EAC/C,MAAM0D,cAAc,GAAG,CAAW1D,QAAAA,EAAAA,WAAS,CAAE,CAAA;EAC7C,MAAM2D,iBAAiB,GAAG,CAAc3D,WAAAA,EAAAA,WAAS,CAAE,CAAA;EACnD,MAAM4D,eAAe,GAAG,CAAY5D,SAAAA,EAAAA,WAAS,CAAE,CAAA;EAC/C,MAAM6D,kBAAkB,GAAG,OAAO;EAClC,MAAMC,gBAAgB,GAAG,KAAK;EAC9B,MAAMC,wBAAwB,GAAG,eAAe;EAChD,MAAMC,eAAe,GAAG,EAAE;EAE1B,MAAMzF,SAAO,GAAG;EACd0F,EAAAA,WAAW,EAAE,IAAI;EACjBC,EAAAA,YAAY,EAAE,IAAI;EAClBC,EAAAA,aAAa,EAAE;EACjB,CAAC;EAED,MAAM3F,aAAW,GAAG;EAClByF,EAAAA,WAAW,EAAE,iBAAiB;EAC9BC,EAAAA,YAAY,EAAE,iBAAiB;EAC/BC,EAAAA,aAAa,EAAE;EACjB,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,KAAK,SAAS9F,MAAM,CAAC;EACzBU,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,EAAE;MACP,IAAI,CAACgB,QAAQ,GAAGpP,OAAO;MAEvB,IAAI,CAACA,OAAO,IAAI,CAAC6T,KAAK,CAACC,WAAW,EAAE,EAAE;EACpC,MAAA;EACF;MAEA,IAAI,CAACzE,OAAO,GAAG,IAAI,CAAClB,UAAU,CAACC,MAAM,CAAC;MACtC,IAAI,CAAC2F,OAAO,GAAG,CAAC;MAChB,IAAI,CAACC,qBAAqB,GAAGpJ,OAAO,CAACzJ,MAAM,CAAC8S,YAAY,CAAC;MACzD,IAAI,CAACC,WAAW,EAAE;EACpB;;EAEA;IACA,WAAWlG,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAsJ,EAAAA,OAAOA,GAAG;MACRtG,YAAY,CAACC,GAAG,CAAC,IAAI,CAACiG,QAAQ,EAAEK,WAAS,CAAC;EAC5C;;EAEA;IACA0E,MAAMA,CAACrL,KAAK,EAAE;EACZ,IAAA,IAAI,CAAC,IAAI,CAACkL,qBAAqB,EAAE;QAC/B,IAAI,CAACD,OAAO,GAAGjL,KAAK,CAACsL,OAAO,CAAC,CAAC,CAAC,CAACC,OAAO;EAEvC,MAAA;EACF;EAEA,IAAA,IAAI,IAAI,CAACC,uBAAuB,CAACxL,KAAK,CAAC,EAAE;EACvC,MAAA,IAAI,CAACiL,OAAO,GAAGjL,KAAK,CAACuL,OAAO;EAC9B;EACF;IAEAE,IAAIA,CAACzL,KAAK,EAAE;EACV,IAAA,IAAI,IAAI,CAACwL,uBAAuB,CAACxL,KAAK,CAAC,EAAE;QACvC,IAAI,CAACiL,OAAO,GAAGjL,KAAK,CAACuL,OAAO,GAAG,IAAI,CAACN,OAAO;EAC7C;MAEA,IAAI,CAACS,YAAY,EAAE;EACnBhO,IAAAA,OAAO,CAAC,IAAI,CAAC6I,OAAO,CAACqE,WAAW,CAAC;EACnC;IAEAe,KAAKA,CAAC3L,KAAK,EAAE;EACX,IAAA,IAAI,CAACiL,OAAO,GAAGjL,KAAK,CAACsL,OAAO,IAAItL,KAAK,CAACsL,OAAO,CAAC5Q,MAAM,GAAG,CAAC,GACtD,CAAC,GACDsF,KAAK,CAACsL,OAAO,CAAC,CAAC,CAAC,CAACC,OAAO,GAAG,IAAI,CAACN,OAAO;EAC3C;EAEAS,EAAAA,YAAYA,GAAG;MACb,MAAME,SAAS,GAAGvS,IAAI,CAACwS,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC;MAExC,IAAIW,SAAS,IAAIjB,eAAe,EAAE;EAChC,MAAA;EACF;EAEA,IAAA,MAAMmB,SAAS,GAAGF,SAAS,GAAG,IAAI,CAACX,OAAO;MAE1C,IAAI,CAACA,OAAO,GAAG,CAAC;MAEhB,IAAI,CAACa,SAAS,EAAE;EACd,MAAA;EACF;EAEApO,IAAAA,OAAO,CAACoO,SAAS,GAAG,CAAC,GAAG,IAAI,CAACvF,OAAO,CAACuE,aAAa,GAAG,IAAI,CAACvE,OAAO,CAACsE,YAAY,CAAC;EACjF;EAEAO,EAAAA,WAAWA,GAAG;MACZ,IAAI,IAAI,CAACF,qBAAqB,EAAE;EAC9B9K,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEgE,iBAAiB,EAAEtK,KAAK,IAAI,IAAI,CAACqL,MAAM,CAACrL,KAAK,CAAC,CAAC;EAC9EI,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEiE,eAAe,EAAEvK,KAAK,IAAI,IAAI,CAACyL,IAAI,CAACzL,KAAK,CAAC,CAAC;QAE1E,IAAI,CAACsG,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAACrB,wBAAwB,CAAC;EACvD,KAAC,MAAM;EACLtK,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAE6D,gBAAgB,EAAEnK,KAAK,IAAI,IAAI,CAACqL,MAAM,CAACrL,KAAK,CAAC,CAAC;EAC7EI,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAE8D,eAAe,EAAEpK,KAAK,IAAI,IAAI,CAAC2L,KAAK,CAAC3L,KAAK,CAAC,CAAC;EAC3EI,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAE+D,cAAc,EAAErK,KAAK,IAAI,IAAI,CAACyL,IAAI,CAACzL,KAAK,CAAC,CAAC;EAC3E;EACF;IAEAwL,uBAAuBA,CAACxL,KAAK,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACkL,qBAAqB,KAAKlL,KAAK,CAACgM,WAAW,KAAKvB,gBAAgB,IAAIzK,KAAK,CAACgM,WAAW,KAAKxB,kBAAkB,CAAC;EAC3H;;EAEA;IACA,OAAOQ,WAAWA,GAAG;MACnB,OAAO,cAAc,IAAIxR,QAAQ,CAACqC,eAAe,IAAIoQ,SAAS,CAACC,cAAc,GAAG,CAAC;EACnF;EACF;;EC/IA;EACA;EACA;EACA;EACA;EACA;;;EAgBA;EACA;EACA;;EAEA,MAAM9O,MAAI,GAAG,UAAU;EACvB,MAAMqJ,UAAQ,GAAG,aAAa;EAC9B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAEhC,MAAMuC,gBAAc,GAAG,WAAW;EAClC,MAAMC,iBAAe,GAAG,YAAY;EACpC,MAAMC,sBAAsB,GAAG,GAAG,CAAC;;EAEnC,MAAMC,UAAU,GAAG,MAAM;EACzB,MAAMC,UAAU,GAAG,MAAM;EACzB,MAAMC,cAAc,GAAG,MAAM;EAC7B,MAAMC,eAAe,GAAG,OAAO;EAE/B,MAAMC,WAAW,GAAG,CAAQ/F,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAMgG,UAAU,GAAG,CAAOhG,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAMiG,eAAa,GAAG,CAAUjG,OAAAA,EAAAA,WAAS,CAAE,CAAA;EAC3C,MAAMkG,kBAAgB,GAAG,CAAalG,UAAAA,EAAAA,WAAS,CAAE,CAAA;EACjD,MAAMmG,kBAAgB,GAAG,CAAanG,UAAAA,EAAAA,WAAS,CAAE,CAAA;EACjD,MAAMoG,gBAAgB,GAAG,CAAYpG,SAAAA,EAAAA,WAAS,CAAE,CAAA;EAChD,MAAMqG,qBAAmB,GAAG,CAAA,IAAA,EAAOrG,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAC7D,MAAMG,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAE/D,MAAMqD,mBAAmB,GAAG,UAAU;EACtC,MAAMpD,mBAAiB,GAAG,QAAQ;EAClC,MAAMqD,gBAAgB,GAAG,OAAO;EAChC,MAAMC,cAAc,GAAG,mBAAmB;EAC1C,MAAMC,gBAAgB,GAAG,qBAAqB;EAC9C,MAAMC,eAAe,GAAG,oBAAoB;EAC5C,MAAMC,eAAe,GAAG,oBAAoB;EAE5C,MAAMC,eAAe,GAAG,SAAS;EACjC,MAAMC,aAAa,GAAG,gBAAgB;EACtC,MAAMC,oBAAoB,GAAGF,eAAe,GAAGC,aAAa;EAC5D,MAAME,iBAAiB,GAAG,oBAAoB;EAC9C,MAAMC,mBAAmB,GAAG,sBAAsB;EAClD,MAAMC,mBAAmB,GAAG,qCAAqC;EACjE,MAAMC,kBAAkB,GAAG,2BAA2B;EAEtD,MAAMC,gBAAgB,GAAG;IACvB,CAAC3B,gBAAc,GAAGM,eAAe;EACjC,EAAA,CAACL,iBAAe,GAAGI;EACrB,CAAC;EAED,MAAMtH,SAAO,GAAG;EACd6I,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,KAAK,EAAE,OAAO;EACdC,EAAAA,IAAI,EAAE,KAAK;EACXC,EAAAA,KAAK,EAAE,IAAI;EACXC,EAAAA,IAAI,EAAE;EACR,CAAC;EAED,MAAMjJ,aAAW,GAAG;EAClB4I,EAAAA,QAAQ,EAAE,kBAAkB;EAAE;EAC9BC,EAAAA,QAAQ,EAAE,SAAS;EACnBC,EAAAA,KAAK,EAAE,kBAAkB;EACzBC,EAAAA,IAAI,EAAE,kBAAkB;EACxBC,EAAAA,KAAK,EAAE,SAAS;EAChBC,EAAAA,IAAI,EAAE;EACR,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,QAAQ,SAAShI,aAAa,CAAC;EACnCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;MAEtB,IAAI,CAACgJ,SAAS,GAAG,IAAI;MACrB,IAAI,CAACC,cAAc,GAAG,IAAI;MAC1B,IAAI,CAACC,UAAU,GAAG,KAAK;MACvB,IAAI,CAACC,YAAY,GAAG,IAAI;MACxB,IAAI,CAACC,YAAY,GAAG,IAAI;EAExB,IAAA,IAAI,CAACC,kBAAkB,GAAGlH,cAAc,CAACG,OAAO,CAAC+F,mBAAmB,EAAE,IAAI,CAACrH,QAAQ,CAAC;MACpF,IAAI,CAACsI,kBAAkB,EAAE;EAEzB,IAAA,IAAI,IAAI,CAACrI,OAAO,CAAC2H,IAAI,KAAKjB,mBAAmB,EAAE;QAC7C,IAAI,CAAC4B,KAAK,EAAE;EACd;EACF;;EAEA;IACA,WAAW3J,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAiL,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAACyG,MAAM,CAACxC,UAAU,CAAC;EACzB;EAEAyC,EAAAA,eAAeA,GAAG;EAChB;EACA;EACA;MACA,IAAI,CAACvV,QAAQ,CAACwV,MAAM,IAAIpU,SAAS,CAAC,IAAI,CAAC0L,QAAQ,CAAC,EAAE;QAChD,IAAI,CAAC+B,IAAI,EAAE;EACb;EACF;EAEAH,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAAC4G,MAAM,CAACvC,UAAU,CAAC;EACzB;EAEA0B,EAAAA,KAAKA,GAAG;MACN,IAAI,IAAI,CAACO,UAAU,EAAE;EACnBrU,MAAAA,oBAAoB,CAAC,IAAI,CAACmM,QAAQ,CAAC;EACrC;MAEA,IAAI,CAAC2I,cAAc,EAAE;EACvB;EAEAJ,EAAAA,KAAKA,GAAG;MACN,IAAI,CAACI,cAAc,EAAE;MACrB,IAAI,CAACC,eAAe,EAAE;EAEtB,IAAA,IAAI,CAACZ,SAAS,GAAGa,WAAW,CAAC,MAAM,IAAI,CAACJ,eAAe,EAAE,EAAE,IAAI,CAACxI,OAAO,CAACwH,QAAQ,CAAC;EACnF;EAEAqB,EAAAA,iBAAiBA,GAAG;EAClB,IAAA,IAAI,CAAC,IAAI,CAAC7I,OAAO,CAAC2H,IAAI,EAAE;EACtB,MAAA;EACF;MAEA,IAAI,IAAI,CAACM,UAAU,EAAE;EACnBpO,MAAAA,YAAY,CAACkC,GAAG,CAAC,IAAI,CAACgE,QAAQ,EAAEqG,UAAU,EAAE,MAAM,IAAI,CAACkC,KAAK,EAAE,CAAC;EAC/D,MAAA;EACF;MAEA,IAAI,CAACA,KAAK,EAAE;EACd;IAEAQ,EAAEA,CAACvQ,KAAK,EAAE;EACR,IAAA,MAAMwQ,KAAK,GAAG,IAAI,CAACC,SAAS,EAAE;MAC9B,IAAIzQ,KAAK,GAAGwQ,KAAK,CAAC5U,MAAM,GAAG,CAAC,IAAIoE,KAAK,GAAG,CAAC,EAAE;EACzC,MAAA;EACF;MAEA,IAAI,IAAI,CAAC0P,UAAU,EAAE;EACnBpO,MAAAA,YAAY,CAACkC,GAAG,CAAC,IAAI,CAACgE,QAAQ,EAAEqG,UAAU,EAAE,MAAM,IAAI,CAAC0C,EAAE,CAACvQ,KAAK,CAAC,CAAC;EACjE,MAAA;EACF;MAEA,MAAM0Q,WAAW,GAAG,IAAI,CAACC,aAAa,CAAC,IAAI,CAACC,UAAU,EAAE,CAAC;MACzD,IAAIF,WAAW,KAAK1Q,KAAK,EAAE;EACzB,MAAA;EACF;MAEA,MAAM6Q,KAAK,GAAG7Q,KAAK,GAAG0Q,WAAW,GAAGlD,UAAU,GAAGC,UAAU;MAE3D,IAAI,CAACuC,MAAM,CAACa,KAAK,EAAEL,KAAK,CAACxQ,KAAK,CAAC,CAAC;EAClC;EAEA4H,EAAAA,OAAOA,GAAG;MACR,IAAI,IAAI,CAACgI,YAAY,EAAE;EACrB,MAAA,IAAI,CAACA,YAAY,CAAChI,OAAO,EAAE;EAC7B;MAEA,KAAK,CAACA,OAAO,EAAE;EACjB;;EAEA;IACAlB,iBAAiBA,CAACF,MAAM,EAAE;EACxBA,IAAAA,MAAM,CAACsK,eAAe,GAAGtK,MAAM,CAACyI,QAAQ;EACxC,IAAA,OAAOzI,MAAM;EACf;EAEAsJ,EAAAA,kBAAkBA,GAAG;EACnB,IAAA,IAAI,IAAI,CAACrI,OAAO,CAACyH,QAAQ,EAAE;EACzB5N,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEsG,eAAa,EAAE5M,KAAK,IAAI,IAAI,CAAC6P,QAAQ,CAAC7P,KAAK,CAAC,CAAC;EAC9E;EAEA,IAAA,IAAI,IAAI,CAACuG,OAAO,CAAC0H,KAAK,KAAK,OAAO,EAAE;EAClC7N,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEuG,kBAAgB,EAAE,MAAM,IAAI,CAACoB,KAAK,EAAE,CAAC;EACpE7N,MAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEwG,kBAAgB,EAAE,MAAM,IAAI,CAACsC,iBAAiB,EAAE,CAAC;EAClF;MAEA,IAAI,IAAI,CAAC7I,OAAO,CAAC4H,KAAK,IAAIpD,KAAK,CAACC,WAAW,EAAE,EAAE;QAC7C,IAAI,CAAC8E,uBAAuB,EAAE;EAChC;EACF;EAEAA,EAAAA,uBAAuBA,GAAG;EACxB,IAAA,KAAK,MAAMC,GAAG,IAAItI,cAAc,CAACxG,IAAI,CAACyM,iBAAiB,EAAE,IAAI,CAACpH,QAAQ,CAAC,EAAE;EACvElG,MAAAA,YAAY,CAACiC,EAAE,CAAC0N,GAAG,EAAEhD,gBAAgB,EAAE/M,KAAK,IAAIA,KAAK,CAACuD,cAAc,EAAE,CAAC;EACzE;MAEA,MAAMyM,WAAW,GAAGA,MAAM;EACxB,MAAA,IAAI,IAAI,CAACzJ,OAAO,CAAC0H,KAAK,KAAK,OAAO,EAAE;EAClC,QAAA;EACF;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;QAEA,IAAI,CAACA,KAAK,EAAE;QACZ,IAAI,IAAI,CAACQ,YAAY,EAAE;EACrBwB,QAAAA,YAAY,CAAC,IAAI,CAACxB,YAAY,CAAC;EACjC;EAEA,MAAA,IAAI,CAACA,YAAY,GAAGlQ,UAAU,CAAC,MAAM,IAAI,CAAC6Q,iBAAiB,EAAE,EAAE/C,sBAAsB,GAAG,IAAI,CAAC9F,OAAO,CAACwH,QAAQ,CAAC;OAC/G;EAED,IAAA,MAAMmC,WAAW,GAAG;EAClBrF,MAAAA,YAAY,EAAEA,MAAM,IAAI,CAACiE,MAAM,CAAC,IAAI,CAACqB,iBAAiB,CAAC3D,cAAc,CAAC,CAAC;EACvE1B,MAAAA,aAAa,EAAEA,MAAM,IAAI,CAACgE,MAAM,CAAC,IAAI,CAACqB,iBAAiB,CAAC1D,eAAe,CAAC,CAAC;EACzE7B,MAAAA,WAAW,EAAEoF;OACd;MAED,IAAI,CAACtB,YAAY,GAAG,IAAI3D,KAAK,CAAC,IAAI,CAACzE,QAAQ,EAAE4J,WAAW,CAAC;EAC3D;IAEAL,QAAQA,CAAC7P,KAAK,EAAE;MACd,IAAI,iBAAiB,CAACiG,IAAI,CAACjG,KAAK,CAAC3B,MAAM,CAAC4K,OAAO,CAAC,EAAE;EAChD,MAAA;EACF;EAEA,IAAA,MAAM6C,SAAS,GAAGgC,gBAAgB,CAAC9N,KAAK,CAAC7I,GAAG,CAAC;EAC7C,IAAA,IAAI2U,SAAS,EAAE;QACb9L,KAAK,CAACuD,cAAc,EAAE;QACtB,IAAI,CAACuL,MAAM,CAAC,IAAI,CAACqB,iBAAiB,CAACrE,SAAS,CAAC,CAAC;EAChD;EACF;IAEA2D,aAAaA,CAACvY,OAAO,EAAE;MACrB,OAAO,IAAI,CAACqY,SAAS,EAAE,CAACxQ,OAAO,CAAC7H,OAAO,CAAC;EAC1C;IAEAkZ,0BAA0BA,CAACtR,KAAK,EAAE;EAChC,IAAA,IAAI,CAAC,IAAI,CAAC6P,kBAAkB,EAAE;EAC5B,MAAA;EACF;MAEA,MAAM0B,eAAe,GAAG5I,cAAc,CAACG,OAAO,CAAC2F,eAAe,EAAE,IAAI,CAACoB,kBAAkB,CAAC;EAExF0B,IAAAA,eAAe,CAAC9U,SAAS,CAACzD,MAAM,CAAC+R,mBAAiB,CAAC;EACnDwG,IAAAA,eAAe,CAAC7L,eAAe,CAAC,cAAc,CAAC;EAE/C,IAAA,MAAM8L,kBAAkB,GAAG7I,cAAc,CAACG,OAAO,CAAC,CAAsB9I,mBAAAA,EAAAA,KAAK,CAAI,EAAA,CAAA,EAAE,IAAI,CAAC6P,kBAAkB,CAAC;EAE3G,IAAA,IAAI2B,kBAAkB,EAAE;EACtBA,MAAAA,kBAAkB,CAAC/U,SAAS,CAACwQ,GAAG,CAAClC,mBAAiB,CAAC;EACnDyG,MAAAA,kBAAkB,CAAChM,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;EACzD;EACF;EAEA4K,EAAAA,eAAeA,GAAG;MAChB,MAAMhY,OAAO,GAAG,IAAI,CAACqX,cAAc,IAAI,IAAI,CAACmB,UAAU,EAAE;MAExD,IAAI,CAACxY,OAAO,EAAE;EACZ,MAAA;EACF;EAEA,IAAA,MAAMqZ,eAAe,GAAGxW,MAAM,CAACyW,QAAQ,CAACtZ,OAAO,CAACyE,YAAY,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;MAErF,IAAI,CAAC4K,OAAO,CAACwH,QAAQ,GAAGwC,eAAe,IAAI,IAAI,CAAChK,OAAO,CAACqJ,eAAe;EACzE;EAEAd,EAAAA,MAAMA,CAACa,KAAK,EAAEzY,OAAO,GAAG,IAAI,EAAE;MAC5B,IAAI,IAAI,CAACsX,UAAU,EAAE;EACnB,MAAA;EACF;EAEA,IAAA,MAAM9P,aAAa,GAAG,IAAI,CAACgR,UAAU,EAAE;EACvC,IAAA,MAAMe,MAAM,GAAGd,KAAK,KAAKrD,UAAU;MACnC,MAAMoE,WAAW,GAAGxZ,OAAO,IAAIsH,oBAAoB,CAAC,IAAI,CAAC+Q,SAAS,EAAE,EAAE7Q,aAAa,EAAE+R,MAAM,EAAE,IAAI,CAAClK,OAAO,CAAC6H,IAAI,CAAC;MAE/G,IAAIsC,WAAW,KAAKhS,aAAa,EAAE;EACjC,MAAA;EACF;EAEA,IAAA,MAAMiS,gBAAgB,GAAG,IAAI,CAAClB,aAAa,CAACiB,WAAW,CAAC;MAExD,MAAME,YAAY,GAAG1J,SAAS,IAAI;QAChC,OAAO9G,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEY,SAAS,EAAE;EACpDxF,QAAAA,aAAa,EAAEgP,WAAW;EAC1B5E,QAAAA,SAAS,EAAE,IAAI,CAAC+E,iBAAiB,CAAClB,KAAK,CAAC;EACxC/X,QAAAA,IAAI,EAAE,IAAI,CAAC6X,aAAa,CAAC/Q,aAAa,CAAC;EACvC2Q,QAAAA,EAAE,EAAEsB;EACN,OAAC,CAAC;OACH;EAED,IAAA,MAAMG,UAAU,GAAGF,YAAY,CAAClE,WAAW,CAAC;MAE5C,IAAIoE,UAAU,CAAC7N,gBAAgB,EAAE;EAC/B,MAAA;EACF;EAEA,IAAA,IAAI,CAACvE,aAAa,IAAI,CAACgS,WAAW,EAAE;EAClC;EACA;EACA,MAAA;EACF;EAEA,IAAA,MAAMK,SAAS,GAAGjP,OAAO,CAAC,IAAI,CAACwM,SAAS,CAAC;MACzC,IAAI,CAACL,KAAK,EAAE;MAEZ,IAAI,CAACO,UAAU,GAAG,IAAI;EAEtB,IAAA,IAAI,CAAC4B,0BAA0B,CAACO,gBAAgB,CAAC;MACjD,IAAI,CAACpC,cAAc,GAAGmC,WAAW;EAEjC,IAAA,MAAMM,oBAAoB,GAAGP,MAAM,GAAGrD,gBAAgB,GAAGD,cAAc;EACvE,IAAA,MAAM8D,cAAc,GAAGR,MAAM,GAAGpD,eAAe,GAAGC,eAAe;EAEjEoD,IAAAA,WAAW,CAACnV,SAAS,CAACwQ,GAAG,CAACkF,cAAc,CAAC;MAEzC9U,MAAM,CAACuU,WAAW,CAAC;EAEnBhS,IAAAA,aAAa,CAACnD,SAAS,CAACwQ,GAAG,CAACiF,oBAAoB,CAAC;EACjDN,IAAAA,WAAW,CAACnV,SAAS,CAACwQ,GAAG,CAACiF,oBAAoB,CAAC;MAE/C,MAAME,gBAAgB,GAAGA,MAAM;QAC7BR,WAAW,CAACnV,SAAS,CAACzD,MAAM,CAACkZ,oBAAoB,EAAEC,cAAc,CAAC;EAClEP,MAAAA,WAAW,CAACnV,SAAS,CAACwQ,GAAG,CAAClC,mBAAiB,CAAC;QAE5CnL,aAAa,CAACnD,SAAS,CAACzD,MAAM,CAAC+R,mBAAiB,EAAEoH,cAAc,EAAED,oBAAoB,CAAC;QAEvF,IAAI,CAACxC,UAAU,GAAG,KAAK;QAEvBoC,YAAY,CAACjE,UAAU,CAAC;OACzB;EAED,IAAA,IAAI,CAAC7F,cAAc,CAACoK,gBAAgB,EAAExS,aAAa,EAAE,IAAI,CAACyS,WAAW,EAAE,CAAC;EAExE,IAAA,IAAIJ,SAAS,EAAE;QACb,IAAI,CAAClC,KAAK,EAAE;EACd;EACF;EAEAsC,EAAAA,WAAWA,GAAG;MACZ,OAAO,IAAI,CAAC7K,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAAC0R,gBAAgB,CAAC;EAC3D;EAEAwC,EAAAA,UAAUA,GAAG;MACX,OAAOjI,cAAc,CAACG,OAAO,CAAC6F,oBAAoB,EAAE,IAAI,CAACnH,QAAQ,CAAC;EACpE;EAEAiJ,EAAAA,SAASA,GAAG;MACV,OAAO9H,cAAc,CAACxG,IAAI,CAACuM,aAAa,EAAE,IAAI,CAAClH,QAAQ,CAAC;EAC1D;EAEA2I,EAAAA,cAAcA,GAAG;MACf,IAAI,IAAI,CAACX,SAAS,EAAE;EAClB8C,MAAAA,aAAa,CAAC,IAAI,CAAC9C,SAAS,CAAC;QAC7B,IAAI,CAACA,SAAS,GAAG,IAAI;EACvB;EACF;IAEA6B,iBAAiBA,CAACrE,SAAS,EAAE;MAC3B,IAAIhP,KAAK,EAAE,EAAE;EACX,MAAA,OAAOgP,SAAS,KAAKU,cAAc,GAAGD,UAAU,GAAGD,UAAU;EAC/D;EAEA,IAAA,OAAOR,SAAS,KAAKU,cAAc,GAAGF,UAAU,GAAGC,UAAU;EAC/D;IAEAsE,iBAAiBA,CAAClB,KAAK,EAAE;MACvB,IAAI7S,KAAK,EAAE,EAAE;EACX,MAAA,OAAO6S,KAAK,KAAKpD,UAAU,GAAGC,cAAc,GAAGC,eAAe;EAChE;EAEA,IAAA,OAAOkD,KAAK,KAAKpD,UAAU,GAAGE,eAAe,GAAGD,cAAc;EAChE;;EAEA;IACA,OAAOjP,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAG0E,QAAQ,CAACpH,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEvD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9BqE,QAAAA,IAAI,CAAC0F,EAAE,CAAC/J,MAAM,CAAC;EACf,QAAA;EACF;EAEA,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,IAAIqE,IAAI,CAACrE,MAAM,CAAC,KAAKzM,SAAS,IAAIyM,MAAM,CAAC7C,UAAU,CAAC,GAAG,CAAC,IAAI6C,MAAM,KAAK,aAAa,EAAE;EACpF,UAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,QAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB;EACF,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAE6D,mBAAmB,EAAE,UAAU5N,KAAK,EAAE;EACpF,EAAA,MAAM3B,MAAM,GAAGoJ,cAAc,CAACkB,sBAAsB,CAAC,IAAI,CAAC;EAE1D,EAAA,IAAI,CAACtK,MAAM,IAAI,CAACA,MAAM,CAAC9C,SAAS,CAACC,QAAQ,CAACyR,mBAAmB,CAAC,EAAE;EAC9D,IAAA;EACF;IAEAjN,KAAK,CAACuD,cAAc,EAAE;EAEtB,EAAA,MAAM8N,QAAQ,GAAGhD,QAAQ,CAACpH,mBAAmB,CAAC5I,MAAM,CAAC;EACrD,EAAA,MAAMiT,UAAU,GAAG,IAAI,CAAC3V,YAAY,CAAC,kBAAkB,CAAC;EAExD,EAAA,IAAI2V,UAAU,EAAE;EACdD,IAAAA,QAAQ,CAAChC,EAAE,CAACiC,UAAU,CAAC;MACvBD,QAAQ,CAACjC,iBAAiB,EAAE;EAC5B,IAAA;EACF;IAEA,IAAIhL,WAAW,CAACY,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE;MAC1DqM,QAAQ,CAAChJ,IAAI,EAAE;MACfgJ,QAAQ,CAACjC,iBAAiB,EAAE;EAC5B,IAAA;EACF;IAEAiC,QAAQ,CAACnJ,IAAI,EAAE;IACfmJ,QAAQ,CAACjC,iBAAiB,EAAE;EAC9B,CAAC,CAAC;EAEFhP,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAE2U,qBAAmB,EAAE,MAAM;EACjD,EAAA,MAAMuE,SAAS,GAAG9J,cAAc,CAACxG,IAAI,CAAC4M,kBAAkB,CAAC;EAEzD,EAAA,KAAK,MAAMwD,QAAQ,IAAIE,SAAS,EAAE;EAChClD,IAAAA,QAAQ,CAACpH,mBAAmB,CAACoK,QAAQ,CAAC;EACxC;EACF,CAAC,CAAC;;EAEF;EACA;EACA;;EAEArU,kBAAkB,CAACqR,QAAQ,CAAC;;ECvd5B;EACA;EACA;EACA;EACA;EACA;;;EAWA;EACA;EACA;;EAEA,MAAMjR,MAAI,GAAG,UAAU;EACvB,MAAMqJ,UAAQ,GAAG,aAAa;EAC9B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAEhC,MAAM4H,YAAU,GAAG,CAAO7K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM8K,aAAW,GAAG,CAAQ9K,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAM+K,YAAU,GAAG,CAAO/K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAMgL,cAAY,GAAG,CAAShL,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAMoD,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAE/D,MAAMP,iBAAe,GAAG,MAAM;EAC9B,MAAMuI,mBAAmB,GAAG,UAAU;EACtC,MAAMC,qBAAqB,GAAG,YAAY;EAC1C,MAAMC,oBAAoB,GAAG,WAAW;EACxC,MAAMC,0BAA0B,GAAG,CAAA,QAAA,EAAWH,mBAAmB,CAAA,EAAA,EAAKA,mBAAmB,CAAE,CAAA;EAC3F,MAAMI,qBAAqB,GAAG,qBAAqB;EAEnD,MAAMC,KAAK,GAAG,OAAO;EACrB,MAAMC,MAAM,GAAG,QAAQ;EAEvB,MAAMC,gBAAgB,GAAG,sCAAsC;EAC/D,MAAMrI,sBAAoB,GAAG,6BAA6B;EAE1D,MAAM5E,SAAO,GAAG;EACdkN,EAAAA,MAAM,EAAE,IAAI;EACZnI,EAAAA,MAAM,EAAE;EACV,CAAC;EAED,MAAM9E,aAAW,GAAG;EAClBiN,EAAAA,MAAM,EAAE,gBAAgB;EACxBnI,EAAAA,MAAM,EAAE;EACV,CAAC;;EAED;EACA;EACA;;EAEA,MAAMoI,QAAQ,SAAShM,aAAa,CAAC;EACnCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;MAEtB,IAAI,CAACgN,gBAAgB,GAAG,KAAK;MAC7B,IAAI,CAACC,aAAa,GAAG,EAAE;EAEvB,IAAA,MAAMC,UAAU,GAAG/K,cAAc,CAACxG,IAAI,CAAC6I,sBAAoB,CAAC;EAE5D,IAAA,KAAK,MAAM2I,IAAI,IAAID,UAAU,EAAE;EAC7B,MAAA,MAAMpa,QAAQ,GAAGqP,cAAc,CAACiB,sBAAsB,CAAC+J,IAAI,CAAC;EAC5D,MAAA,MAAMC,aAAa,GAAGjL,cAAc,CAACxG,IAAI,CAAC7I,QAAQ,CAAC,CAChDyM,MAAM,CAAC8N,YAAY,IAAIA,YAAY,KAAK,IAAI,CAACrM,QAAQ,CAAC;EAEzD,MAAA,IAAIlO,QAAQ,KAAK,IAAI,IAAIsa,aAAa,CAAChY,MAAM,EAAE;EAC7C,QAAA,IAAI,CAAC6X,aAAa,CAAC1V,IAAI,CAAC4V,IAAI,CAAC;EAC/B;EACF;MAEA,IAAI,CAACG,mBAAmB,EAAE;EAE1B,IAAA,IAAI,CAAC,IAAI,CAACrM,OAAO,CAAC6L,MAAM,EAAE;EACxB,MAAA,IAAI,CAACS,yBAAyB,CAAC,IAAI,CAACN,aAAa,EAAE,IAAI,CAACO,QAAQ,EAAE,CAAC;EACrE;EAEA,IAAA,IAAI,IAAI,CAACvM,OAAO,CAAC0D,MAAM,EAAE;QACvB,IAAI,CAACA,MAAM,EAAE;EACf;EACF;;EAEA;IACA,WAAW/E,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACA6M,EAAAA,MAAMA,GAAG;EACP,IAAA,IAAI,IAAI,CAAC6I,QAAQ,EAAE,EAAE;QACnB,IAAI,CAACC,IAAI,EAAE;EACb,KAAC,MAAM;QACL,IAAI,CAACC,IAAI,EAAE;EACb;EACF;EAEAA,EAAAA,IAAIA,GAAG;MACL,IAAI,IAAI,CAACV,gBAAgB,IAAI,IAAI,CAACQ,QAAQ,EAAE,EAAE;EAC5C,MAAA;EACF;MAEA,IAAIG,cAAc,GAAG,EAAE;;EAEvB;EACA,IAAA,IAAI,IAAI,CAAC1M,OAAO,CAAC6L,MAAM,EAAE;EACvBa,MAAAA,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACf,gBAAgB,CAAC,CAC3DtN,MAAM,CAAC3N,OAAO,IAAIA,OAAO,KAAK,IAAI,CAACoP,QAAQ,CAAC,CAC5CgB,GAAG,CAACpQ,OAAO,IAAImb,QAAQ,CAACpL,mBAAmB,CAAC/P,OAAO,EAAE;EAAE+S,QAAAA,MAAM,EAAE;EAAM,OAAC,CAAC,CAAC;EAC7E;MAEA,IAAIgJ,cAAc,CAACvY,MAAM,IAAIuY,cAAc,CAAC,CAAC,CAAC,CAACX,gBAAgB,EAAE;EAC/D,MAAA;EACF;MAEA,MAAMa,UAAU,GAAG/S,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEkL,YAAU,CAAC;MAClE,IAAI2B,UAAU,CAAClQ,gBAAgB,EAAE;EAC/B,MAAA;EACF;EAEA,IAAA,KAAK,MAAMmQ,cAAc,IAAIH,cAAc,EAAE;QAC3CG,cAAc,CAACL,IAAI,EAAE;EACvB;EAEA,IAAA,MAAMM,SAAS,GAAG,IAAI,CAACC,aAAa,EAAE;MAEtC,IAAI,CAAChN,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC8Z,mBAAmB,CAAC;MACnD,IAAI,CAACtL,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC8F,qBAAqB,CAAC;MAElD,IAAI,CAACvL,QAAQ,CAACiN,KAAK,CAACF,SAAS,CAAC,GAAG,CAAC;MAElC,IAAI,CAACR,yBAAyB,CAAC,IAAI,CAACN,aAAa,EAAE,IAAI,CAAC;MACxD,IAAI,CAACD,gBAAgB,GAAG,IAAI;MAE5B,MAAMkB,QAAQ,GAAGA,MAAM;QACrB,IAAI,CAAClB,gBAAgB,GAAG,KAAK;QAE7B,IAAI,CAAChM,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC+Z,qBAAqB,CAAC;QACrD,IAAI,CAACvL,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC6F,mBAAmB,EAAEvI,iBAAe,CAAC;QAEjE,IAAI,CAAC/C,QAAQ,CAACiN,KAAK,CAACF,SAAS,CAAC,GAAG,EAAE;QAEnCjT,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEmL,aAAW,CAAC;OACjD;EAED,IAAA,MAAMgC,oBAAoB,GAAGJ,SAAS,CAAC,CAAC,CAAC,CAAClN,WAAW,EAAE,GAAGkN,SAAS,CAAC1Q,KAAK,CAAC,CAAC,CAAC;EAC5E,IAAA,MAAM+Q,UAAU,GAAG,CAASD,MAAAA,EAAAA,oBAAoB,CAAE,CAAA;MAElD,IAAI,CAAC3M,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAAClN,QAAQ,EAAE,IAAI,CAAC;EAClD,IAAA,IAAI,CAACA,QAAQ,CAACiN,KAAK,CAACF,SAAS,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC/M,QAAQ,CAACoN,UAAU,CAAC,CAAI,EAAA,CAAA;EACnE;EAEAX,EAAAA,IAAIA,GAAG;MACL,IAAI,IAAI,CAACT,gBAAgB,IAAI,CAAC,IAAI,CAACQ,QAAQ,EAAE,EAAE;EAC7C,MAAA;EACF;MAEA,MAAMK,UAAU,GAAG/S,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEoL,YAAU,CAAC;MAClE,IAAIyB,UAAU,CAAClQ,gBAAgB,EAAE;EAC/B,MAAA;EACF;EAEA,IAAA,MAAMoQ,SAAS,GAAG,IAAI,CAACC,aAAa,EAAE;EAEtC,IAAA,IAAI,CAAChN,QAAQ,CAACiN,KAAK,CAACF,SAAS,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC/M,QAAQ,CAACqN,qBAAqB,EAAE,CAACN,SAAS,CAAC,CAAI,EAAA,CAAA;EAExFlX,IAAAA,MAAM,CAAC,IAAI,CAACmK,QAAQ,CAAC;MAErB,IAAI,CAACA,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC8F,qBAAqB,CAAC;MAClD,IAAI,CAACvL,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC8Z,mBAAmB,EAAEvI,iBAAe,CAAC;EAEpE,IAAA,KAAK,MAAMxG,OAAO,IAAI,IAAI,CAAC0P,aAAa,EAAE;EACxC,MAAA,MAAMrb,OAAO,GAAGuQ,cAAc,CAACkB,sBAAsB,CAAC9F,OAAO,CAAC;QAE9D,IAAI3L,OAAO,IAAI,CAAC,IAAI,CAAC4b,QAAQ,CAAC5b,OAAO,CAAC,EAAE;UACtC,IAAI,CAAC2b,yBAAyB,CAAC,CAAChQ,OAAO,CAAC,EAAE,KAAK,CAAC;EAClD;EACF;MAEA,IAAI,CAACyP,gBAAgB,GAAG,IAAI;MAE5B,MAAMkB,QAAQ,GAAGA,MAAM;QACrB,IAAI,CAAClB,gBAAgB,GAAG,KAAK;QAC7B,IAAI,CAAChM,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC+Z,qBAAqB,CAAC;QACrD,IAAI,CAACvL,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC6F,mBAAmB,CAAC;QAChDxR,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEqL,cAAY,CAAC;OAClD;MAED,IAAI,CAACrL,QAAQ,CAACiN,KAAK,CAACF,SAAS,CAAC,GAAG,EAAE;MAEnC,IAAI,CAACvM,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAAClN,QAAQ,EAAE,IAAI,CAAC;EACpD;;EAEA;EACAwM,EAAAA,QAAQA,CAAC5b,OAAO,GAAG,IAAI,CAACoP,QAAQ,EAAE;EAChC,IAAA,OAAOpP,OAAO,CAACqE,SAAS,CAACC,QAAQ,CAAC6N,iBAAe,CAAC;EACpD;IAEA7D,iBAAiBA,CAACF,MAAM,EAAE;MACxBA,MAAM,CAAC2E,MAAM,GAAGnI,OAAO,CAACwD,MAAM,CAAC2E,MAAM,CAAC,CAAC;MACvC3E,MAAM,CAAC8M,MAAM,GAAG3X,UAAU,CAAC6K,MAAM,CAAC8M,MAAM,CAAC;EACzC,IAAA,OAAO9M,MAAM;EACf;EAEAgO,EAAAA,aAAaA,GAAG;EACd,IAAA,OAAO,IAAI,CAAChN,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAACwW,qBAAqB,CAAC,GAAGC,KAAK,GAAGC,MAAM;EACjF;EAEAU,EAAAA,mBAAmBA,GAAG;EACpB,IAAA,IAAI,CAAC,IAAI,CAACrM,OAAO,CAAC6L,MAAM,EAAE;EACxB,MAAA;EACF;EAEA,IAAA,MAAMvK,QAAQ,GAAG,IAAI,CAACqL,sBAAsB,CAACpJ,sBAAoB,CAAC;EAElE,IAAA,KAAK,MAAM5S,OAAO,IAAI2Q,QAAQ,EAAE;EAC9B,MAAA,MAAM+L,QAAQ,GAAGnM,cAAc,CAACkB,sBAAsB,CAACzR,OAAO,CAAC;EAE/D,MAAA,IAAI0c,QAAQ,EAAE;EACZ,QAAA,IAAI,CAACf,yBAAyB,CAAC,CAAC3b,OAAO,CAAC,EAAE,IAAI,CAAC4b,QAAQ,CAACc,QAAQ,CAAC,CAAC;EACpE;EACF;EACF;IAEAV,sBAAsBA,CAAC9a,QAAQ,EAAE;EAC/B,IAAA,MAAMyP,QAAQ,GAAGJ,cAAc,CAACxG,IAAI,CAAC8Q,0BAA0B,EAAE,IAAI,CAACxL,OAAO,CAAC6L,MAAM,CAAC;EACrF;MACA,OAAO3K,cAAc,CAACxG,IAAI,CAAC7I,QAAQ,EAAE,IAAI,CAACmO,OAAO,CAAC6L,MAAM,CAAC,CAACvN,MAAM,CAAC3N,OAAO,IAAI,CAAC2Q,QAAQ,CAACzF,QAAQ,CAAClL,OAAO,CAAC,CAAC;EAC1G;EAEA2b,EAAAA,yBAAyBA,CAACgB,YAAY,EAAEC,MAAM,EAAE;EAC9C,IAAA,IAAI,CAACD,YAAY,CAACnZ,MAAM,EAAE;EACxB,MAAA;EACF;EAEA,IAAA,KAAK,MAAMxD,OAAO,IAAI2c,YAAY,EAAE;QAClC3c,OAAO,CAACqE,SAAS,CAAC0O,MAAM,CAAC6H,oBAAoB,EAAE,CAACgC,MAAM,CAAC;EACvD5c,MAAAA,OAAO,CAACoN,YAAY,CAAC,eAAe,EAAEwP,MAAM,CAAC;EAC/C;EACF;;EAEA;IACA,OAAOvW,eAAeA,CAAC+H,MAAM,EAAE;MAC7B,MAAMiB,OAAO,GAAG,EAAE;MAClB,IAAI,OAAOjB,MAAM,KAAK,QAAQ,IAAI,WAAW,CAACW,IAAI,CAACX,MAAM,CAAC,EAAE;QAC1DiB,OAAO,CAAC0D,MAAM,GAAG,KAAK;EACxB;EAEA,IAAA,OAAO,IAAI,CAACP,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAG0I,QAAQ,CAACpL,mBAAmB,CAAC,IAAI,EAAEV,OAAO,CAAC;EAExD,MAAA,IAAI,OAAOjB,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,UAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,QAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB;EACF,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAED,sBAAoB,EAAE,UAAU9J,KAAK,EAAE;EACrF;EACA,EAAA,IAAIA,KAAK,CAAC3B,MAAM,CAAC4K,OAAO,KAAK,GAAG,IAAKjJ,KAAK,CAACE,cAAc,IAAIF,KAAK,CAACE,cAAc,CAAC+I,OAAO,KAAK,GAAI,EAAE;MAClGjJ,KAAK,CAACuD,cAAc,EAAE;EACxB;IAEA,KAAK,MAAMrM,OAAO,IAAIuQ,cAAc,CAACmB,+BAA+B,CAAC,IAAI,CAAC,EAAE;EAC1EyJ,IAAAA,QAAQ,CAACpL,mBAAmB,CAAC/P,OAAO,EAAE;EAAE+S,MAAAA,MAAM,EAAE;EAAM,KAAC,CAAC,CAACA,MAAM,EAAE;EACnE;EACF,CAAC,CAAC;;EAEF;EACA;EACA;;EAEAjN,kBAAkB,CAACqV,QAAQ,CAAC;;ECtSrB,IAAI,GAAG,GAAG,KAAK;EACf,IAAI,MAAM,GAAG,QAAQ;EACrB,IAAI,KAAK,GAAG,OAAO;EACnB,IAAI,IAAI,GAAG,MAAM;EACjB,IAAI,IAAI,GAAG,MAAM;EACjB,IAAI,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;EAC/C,IAAI,KAAK,GAAG,OAAO;EACnB,IAAI,GAAG,GAAG,KAAK;EACf,IAAI,eAAe,GAAG,iBAAiB;EACvC,IAAI,QAAQ,GAAG,UAAU;EACzB,IAAI,MAAM,GAAG,QAAQ;EACrB,IAAI,SAAS,GAAG,WAAW;EAC3B,IAAI,mBAAmB,gBAAgB,cAAc,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE;EAC9F,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK,EAAE,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;EACrE,CAAC,EAAE,EAAE,CAAC;EACC,IAAI,UAAU,gBAAgB,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE;EACxG,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,KAAK,EAAE,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;EAChF,CAAC,EAAE,EAAE,CAAC,CAAC;;EAEA,IAAI,UAAU,GAAG,YAAY;EAC7B,IAAI,IAAI,GAAG,MAAM;EACjB,IAAI,SAAS,GAAG,WAAW,CAAC;;EAE5B,IAAI,UAAU,GAAG,YAAY;EAC7B,IAAI,IAAI,GAAG,MAAM;EACjB,IAAI,SAAS,GAAG,WAAW,CAAC;;EAE5B,IAAI,WAAW,GAAG,aAAa;EAC/B,IAAI,KAAK,GAAG,OAAO;EACnB,IAAI,UAAU,GAAG,YAAY;EAC7B,IAAI,cAAc,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;;EC9BvG,SAAS,WAAW,CAAC,OAAO,EAAE;EAC7C,EAAE,OAAO,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI;EAChE;;ECFe,SAAS,SAAS,CAAC,IAAI,EAAE;EACxC,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;EACpB,IAAI,OAAO,MAAM;EACjB;;EAEA,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,iBAAiB,EAAE;EAC7C,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa;EAC1C,IAAI,OAAO,aAAa,GAAG,aAAa,CAAC,WAAW,IAAI,MAAM,GAAG,MAAM;EACvE;;EAEA,EAAE,OAAO,IAAI;EACb;;ECTA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO;EAC1C,EAAE,OAAO,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,OAAO;EAC9D;;EAEA,SAAS,aAAa,CAAC,IAAI,EAAE;EAC7B,EAAE,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW;EAC9C,EAAE,OAAO,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,WAAW;EAClE;;EAEA,SAAS,YAAY,CAAC,IAAI,EAAE;EAC5B;EACA,EAAE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;EACzC,IAAI,OAAO,KAAK;EAChB;;EAEA,EAAE,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU;EAC7C,EAAE,OAAO,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,UAAU;EACjE;;EClBA;;EAEA,SAAS,WAAW,CAAC,IAAI,EAAE;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;EACxC,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;EACjD,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;EAEvC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;EAC1D,MAAM;EACN,KAAK;EACL;EACA;;;EAGA,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;EACvC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACpD,MAAM,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;;EAElC,MAAM,IAAI,KAAK,KAAK,KAAK,EAAE;EAC3B,QAAQ,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;EACrC,OAAO,MAAM;EACb,QAAQ,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;EAC/D;EACA,KAAK,CAAC;EACN,GAAG,CAAC;EACJ;;EAEA,SAAS0B,QAAM,CAAC,KAAK,EAAE;EACvB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;EACzB,EAAE,IAAI,aAAa,GAAG;EACtB,IAAI,MAAM,EAAE;EACZ,MAAM,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;EACtC,MAAM,IAAI,EAAE,GAAG;EACf,MAAM,GAAG,EAAE,GAAG;EACd,MAAM,MAAM,EAAE;EACd,KAAK;EACL,IAAI,KAAK,EAAE;EACX,MAAM,QAAQ,EAAE;EAChB,KAAK;EACL,IAAI,SAAS,EAAE;EACf,GAAG;EACH,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;EAClE,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa;;EAE9B,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;EAC5B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;EAClE;;EAEA,EAAE,OAAO,YAAY;EACrB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACxD,MAAM,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;EACxC,MAAM,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;EACnD,MAAM,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;;EAEtH,MAAM,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,QAAQ,EAAE;EACpE,QAAQ,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;EAC5B,QAAQ,OAAO,KAAK;EACpB,OAAO,EAAE,EAAE,CAAC,CAAC;;EAEb,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;EAC5D,QAAQ;EACR;;EAEA,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;EACzC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,SAAS,EAAE;EAC3D,QAAQ,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC;EAC1C,OAAO,CAAC;EACR,KAAK,CAAC;EACN,GAAG;EACH,CAAC;;;AAGD,wBAAe;EACf,EAAE,IAAI,EAAE,aAAa;EACrB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,OAAO;EAChB,EAAE,EAAE,EAAE,WAAW;EACjB,EAAE,MAAM,EAAEA,QAAM;EAChB,EAAE,QAAQ,EAAE,CAAC,eAAe;EAC5B,CAAC;;EClFc,SAAS,gBAAgB,CAAC,SAAS,EAAE;EACpD,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAChC;;ECHO,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;EAClB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;EAClB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;;ECFd,SAAS,WAAW,GAAG;EACtC,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,aAAa;;EAEtC,EAAE,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;EACvE,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;EAC7C,MAAM,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO;EAC5C,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAChB;;EAEA,EAAE,OAAO,SAAS,CAAC,SAAS;EAC5B;;ECTe,SAAS,gBAAgB,GAAG;EAC3C,EAAE,OAAO,CAAC,gCAAgC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;EAC9D;;ECCe,SAAS,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE;EACtF,EAAE,IAAI,YAAY,KAAK,MAAM,EAAE;EAC/B,IAAI,YAAY,GAAG,KAAK;EACxB;;EAEA,EAAE,IAAI,eAAe,KAAK,MAAM,EAAE;EAClC,IAAI,eAAe,GAAG,KAAK;EAC3B;;EAEA,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE;EAClD,EAAE,IAAI,MAAM,GAAG,CAAC;EAChB,EAAE,IAAI,MAAM,GAAG,CAAC;;EAEhB,EAAE,IAAI,YAAY,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;EAC9C,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;EAC7F,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;EAChG;;EAEA,EAAE,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM;EAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;;EAE1C,EAAE,IAAI,gBAAgB,GAAG,CAAC,gBAAgB,EAAE,IAAI,eAAe;EAC/D,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,gBAAgB,IAAI,cAAc,GAAG,cAAc,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,MAAM;EAC3G,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,gBAAgB,IAAI,cAAc,GAAG,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,MAAM;EACzG,EAAE,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM;EACvC,EAAE,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM;EACzC,EAAE,OAAO;EACT,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,GAAG,EAAE,CAAC;EACV,IAAI,KAAK,EAAE,CAAC,GAAG,KAAK;EACpB,IAAI,MAAM,EAAE,CAAC,GAAG,MAAM;EACtB,IAAI,IAAI,EAAE,CAAC;EACX,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;EACH;;ECvCA;;EAEe,SAAS,aAAa,CAAC,OAAO,EAAE;EAC/C,EAAE,IAAI,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;EAClD;;EAEA,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,WAAW;EACjC,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY;;EAEnC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;EAC/C,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;EAC5B;;EAEA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;EACjD,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;EAC9B;;EAEA,EAAE,OAAO;EACT,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU;EACzB,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS;EACxB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,MAAM,EAAE;EACZ,GAAG;EACH;;ECvBe,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE;EAChD,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;;EAE1D,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;EAC9B,IAAI,OAAO,IAAI;EACf,GAAG;EACH,OAAO,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;EAC/C,MAAM,IAAI,IAAI,GAAG,KAAK;;EAEtB,MAAM,GAAG;EACT,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;EAC7C,UAAU,OAAO,IAAI;EACrB,SAAS;;;EAGT,QAAQ,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI;EAC3C,OAAO,QAAQ,IAAI;EACnB,KAAK;;;EAGL,EAAE,OAAO,KAAK;EACd;;ECrBe,SAASla,kBAAgB,CAAC,OAAO,EAAE;EAClD,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;EACrD;;ECFe,SAAS,cAAc,CAAC,OAAO,EAAE;EAChD,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;EACjE;;ECFe,SAAS,kBAAkB,CAAC,OAAO,EAAE;EACpD;EACA,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa;EACrD,EAAE,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe;EACvD;;ECFe,SAAS,aAAa,CAAC,OAAO,EAAE;EAC/C,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE;EACvC,IAAI,OAAO,OAAO;EAClB;;EAEA,EAAE;EACF;EACA;EACA,IAAI,OAAO,CAAC,YAAY;EACxB,IAAI,OAAO,CAAC,UAAU;EACtB,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;EAChD;EACA,IAAI,kBAAkB,CAAC,OAAO,CAAC;;EAE/B;EACA;;ECVA,SAAS,mBAAmB,CAAC,OAAO,EAAE;EACtC,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;EAC7B,EAAEA,kBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE;EAClD,IAAI,OAAO,IAAI;EACf;;EAEA,EAAE,OAAO,OAAO,CAAC,YAAY;EAC7B,CAAC;EACD;;;EAGA,SAAS,kBAAkB,CAAC,OAAO,EAAE;EACrC,EAAE,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;EAChD,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;EAE3C,EAAE,IAAI,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;EACtC;EACA,IAAI,IAAI,UAAU,GAAGA,kBAAgB,CAAC,OAAO,CAAC;;EAE9C,IAAI,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE;EACzC,MAAM,OAAO,IAAI;EACjB;EACA;;EAEA,EAAE,IAAI,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;;EAE1C,EAAE,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE;EACjC,IAAI,WAAW,GAAG,WAAW,CAAC,IAAI;EAClC;;EAEA,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE;EAC/F,IAAI,IAAI,GAAG,GAAGA,kBAAgB,CAAC,WAAW,CAAC,CAAC;EAC5C;EACA;;EAEA,IAAI,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;EAC1P,MAAM,OAAO,WAAW;EACxB,KAAK,MAAM;EACX,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU;EAC1C;EACA;;EAEA,EAAE,OAAO,IAAI;EACb,CAAC;EACD;;;EAGe,SAAS,eAAe,CAAC,OAAO,EAAE;EACjD,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;EACjC,EAAE,IAAI,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC;;EAEjD,EAAE,OAAO,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC,IAAIA,kBAAgB,CAAC,YAAY,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE;EAC/G,IAAI,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC;EACpD;;EAEA,EAAE,IAAI,YAAY,KAAK,WAAW,CAAC,YAAY,CAAC,KAAK,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,KAAK,MAAM,IAAIA,kBAAgB,CAAC,YAAY,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;EAC9J,IAAI,OAAO,MAAM;EACjB;;EAEA,EAAE,OAAO,YAAY,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,MAAM;EAC9D;;ECpEe,SAAS,wBAAwB,CAAC,SAAS,EAAE;EAC5D,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG;EAC9D;;ECDO,SAAS,MAAM,CAACoF,KAAG,EAAE,KAAK,EAAED,KAAG,EAAE;EACxC,EAAE,OAAOgV,GAAO,CAAC/U,KAAG,EAAEgV,GAAO,CAAC,KAAK,EAAEjV,KAAG,CAAC,CAAC;EAC1C;EACO,SAAS,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EAChD,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;EACjC,EAAE,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1B;;ECPe,SAAS,kBAAkB,GAAG;EAC7C,EAAE,OAAO;EACT,IAAI,GAAG,EAAE,CAAC;EACV,IAAI,KAAK,EAAE,CAAC;EACZ,IAAI,MAAM,EAAE,CAAC;EACb,IAAI,IAAI,EAAE;EACV,GAAG;EACH;;ECNe,SAAS,kBAAkB,CAAC,aAAa,EAAE;EAC1D,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,aAAa,CAAC;EAC/D;;ECHe,SAAS,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE;EACrD,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,OAAO,EAAE,GAAG,EAAE;EAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;EACxB,IAAI,OAAO,OAAO;EAClB,GAAG,EAAE,EAAE,CAAC;EACR;;ECKA,IAAI,eAAe,GAAG,SAAS,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE;EAC/D,EAAE,OAAO,GAAG,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE;EACnF,IAAI,SAAS,EAAE,KAAK,CAAC;EACrB,GAAG,CAAC,CAAC,GAAG,OAAO;EACf,EAAE,OAAO,kBAAkB,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;EAC7G,CAAC;;EAED,SAAS,KAAK,CAAC,IAAI,EAAE;EACrB,EAAE,IAAI,qBAAqB;;EAE3B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;EACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;EAC5B,EAAE,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;EACzC,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa;EACvD,EAAE,IAAI,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;EACvD,EAAE,IAAI,IAAI,GAAG,wBAAwB,CAAC,aAAa,CAAC;EACpD,EAAE,IAAI,UAAU,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;EAC5D,EAAE,IAAI,GAAG,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO;;EAE3C,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;EACvC,IAAI;EACJ;;EAEA,EAAE,IAAI,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;EAC7D,EAAE,IAAI,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC;EAC7C,EAAE,IAAI,OAAO,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI;EACzC,EAAE,IAAI,OAAO,GAAG,IAAI,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK;EAC7C,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;EACxH,EAAE,IAAI,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;EACnE,EAAE,IAAI,iBAAiB,GAAG,eAAe,CAAC,YAAY,CAAC;EACvD,EAAE,IAAI,UAAU,GAAG,iBAAiB,GAAG,IAAI,KAAK,GAAG,GAAG,iBAAiB,CAAC,YAAY,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;EAClI,EAAE,IAAI,iBAAiB,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;EACtD;;EAEA,EAAE,IAAI,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC;EAClC,EAAE,IAAI,GAAG,GAAG,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;EAChE,EAAE,IAAI,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB;EACtE,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;;EAExC,EAAE,IAAI,QAAQ,GAAG,IAAI;EACrB,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,qBAAqB,GAAG,EAAE,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,qBAAqB,CAAC;EACjL;;EAEA,SAAS+U,QAAM,CAAC,KAAK,EAAE;EACvB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;EACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,EAAE,IAAI,gBAAgB,GAAG,OAAO,CAAC,OAAO;EACxC,MAAM,YAAY,GAAG,gBAAgB,KAAK,MAAM,GAAG,qBAAqB,GAAG,gBAAgB;;EAE3F,EAAE,IAAI,YAAY,IAAI,IAAI,EAAE;EAC5B,IAAI;EACJ,GAAG;;;EAGH,EAAE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;EACxC,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;;EAEpE,IAAI,IAAI,CAAC,YAAY,EAAE;EACvB,MAAM;EACN;EACA;;EAEA,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;EACtD,IAAI;EACJ;;EAEA,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,YAAY;EACrC,CAAC;;;AAGD,kBAAe;EACf,EAAE,IAAI,EAAE,OAAO;EACf,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,EAAE,EAAE,KAAK;EACX,EAAE,MAAM,EAAEA,QAAM;EAChB,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC;EAC7B,EAAE,gBAAgB,EAAE,CAAC,iBAAiB;EACtC,CAAC;;ECzFc,SAAS,YAAY,CAAC,SAAS,EAAE;EAChD,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAChC;;ECOA,IAAI,UAAU,GAAG;EACjB,EAAE,GAAG,EAAE,MAAM;EACb,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,MAAM,EAAE,MAAM;EAChB,EAAE,IAAI,EAAE;EACR,CAAC,CAAC;EACF;EACA;;EAEA,SAAS,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE;EACtC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;EAChB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;EAChB,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,gBAAgB,IAAI,CAAC;EACrC,EAAE,OAAO;EACT,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;EAChC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI;EAC/B,GAAG;EACH;;EAEO,SAAS,WAAW,CAAC,KAAK,EAAE;EACnC,EAAE,IAAI,eAAe;;EAErB,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;EAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;EACnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;EACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;EACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;EAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe;EAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;EAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY;EACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC;EAC5B,MAAM,CAAC,GAAG,UAAU,KAAK,MAAM,GAAG,CAAC,GAAG,UAAU;EAChD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC;EAC5B,MAAM,CAAC,GAAG,UAAU,KAAK,MAAM,GAAG,CAAC,GAAG,UAAU;;EAEhD,EAAE,IAAI,KAAK,GAAG,OAAO,YAAY,KAAK,UAAU,GAAG,YAAY,CAAC;EAChE,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG,CAAC,GAAG;EACP,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;;EAEH,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;EACb,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;EACb,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;EACxC,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;EACxC,EAAE,IAAI,KAAK,GAAG,IAAI;EAClB,EAAE,IAAI,KAAK,GAAG,GAAG;EACjB,EAAE,IAAI,GAAG,GAAG,MAAM;;EAElB,EAAE,IAAI,QAAQ,EAAE;EAChB,IAAI,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;EAC9C,IAAI,IAAI,UAAU,GAAG,cAAc;EACnC,IAAI,IAAI,SAAS,GAAG,aAAa;;EAEjC,IAAI,IAAI,YAAY,KAAK,SAAS,CAAC,MAAM,CAAC,EAAE;EAC5C,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC;;EAE/C,MAAM,IAAIla,kBAAgB,CAAC,YAAY,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,UAAU,EAAE;EAC3F,QAAQ,UAAU,GAAG,cAAc;EACnC,QAAQ,SAAS,GAAG,aAAa;EACjC;EACA,KAAK;;;EAGL,IAAI,YAAY,GAAG,YAAY;;EAE/B,IAAI,IAAI,SAAS,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,GAAG,EAAE;EAC/F,MAAM,KAAK,GAAG,MAAM;EACpB,MAAM,IAAI,OAAO,GAAG,OAAO,IAAI,YAAY,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM;EACrG,MAAM,YAAY,CAAC,UAAU,CAAC;EAC9B,MAAM,CAAC,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM;EACtC,MAAM,CAAC,IAAI,eAAe,GAAG,CAAC,GAAG,EAAE;EACnC;;EAEA,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,GAAG,EAAE;EAChG,MAAM,KAAK,GAAG,KAAK;EACnB,MAAM,IAAI,OAAO,GAAG,OAAO,IAAI,YAAY,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK;EACpG,MAAM,YAAY,CAAC,SAAS,CAAC;EAC7B,MAAM,CAAC,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK;EACrC,MAAM,CAAC,IAAI,eAAe,GAAG,CAAC,GAAG,EAAE;EACnC;EACA;;EAEA,EAAE,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;EACnC,IAAI,QAAQ,EAAE;EACd,GAAG,EAAE,QAAQ,IAAI,UAAU,CAAC;;EAE5B,EAAE,IAAI,KAAK,GAAG,YAAY,KAAK,IAAI,GAAG,iBAAiB,CAAC;EACxD,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG;EAC1B,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;;EAEH,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;EACb,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;;EAEb,EAAE,IAAI,eAAe,EAAE;EACvB,IAAI,IAAI,cAAc;;EAEtB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,cAAc,GAAG,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,cAAc,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,cAAc,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,cAAc,EAAE;EACrT;;EAEA,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,eAAe,GAAG,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,eAAe,CAAC,SAAS,GAAG,EAAE,EAAE,eAAe,EAAE;EAC/M;;EAEA,SAAS,aAAa,CAAC,KAAK,EAAE;EAC9B,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;EACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,EAAE,IAAI,qBAAqB,GAAG,OAAO,CAAC,eAAe;EACrD,MAAM,eAAe,GAAG,qBAAqB,KAAK,MAAM,GAAG,IAAI,GAAG,qBAAqB;EACvF,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ;EAC1C,MAAM,QAAQ,GAAG,iBAAiB,KAAK,MAAM,GAAG,IAAI,GAAG,iBAAiB;EACxE,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY;EAClD,MAAM,YAAY,GAAG,qBAAqB,KAAK,MAAM,GAAG,IAAI,GAAG,qBAAqB;EACpF,EAAE,IAAI,YAAY,GAAG;EACrB,IAAI,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;EAChD,IAAI,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;EAC5C,IAAI,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;EACjC,IAAI,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;EAClC,IAAI,eAAe,EAAE,eAAe;EACpC,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK;EACxC,GAAG;;EAEH,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,EAAE;EACjD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE;EAC7G,MAAM,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,aAAa;EAChD,MAAM,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;EACtC,MAAM,QAAQ,EAAE,QAAQ;EACxB,MAAM,YAAY,EAAE;EACpB,KAAK,CAAC,CAAC,CAAC;EACR;;EAEA,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,EAAE;EACzC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE;EAC3G,MAAM,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK;EACxC,MAAM,QAAQ,EAAE,UAAU;EAC1B,MAAM,QAAQ,EAAE,KAAK;EACrB,MAAM,YAAY,EAAE;EACpB,KAAK,CAAC,CAAC,CAAC;EACR;;EAEA,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;EACvE,IAAI,uBAAuB,EAAE,KAAK,CAAC;EACnC,GAAG,CAAC;EACJ,CAAC;;;AAGD,0BAAe;EACf,EAAE,IAAI,EAAE,eAAe;EACvB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,aAAa;EACtB,EAAE,EAAE,EAAE,aAAa;EACnB,EAAE,IAAI,EAAE;EACR,CAAC;;ECtKD,IAAI,OAAO,GAAG;EACd,EAAE,OAAO,EAAE;EACX,CAAC;;EAED,SAAS,MAAM,CAAC,IAAI,EAAE;EACtB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;EAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;EAC5B,EAAE,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM;EACtC,MAAM,MAAM,GAAG,eAAe,KAAK,MAAM,GAAG,IAAI,GAAG,eAAe;EAClE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM;EACtC,MAAM,MAAM,GAAG,eAAe,KAAK,MAAM,GAAG,IAAI,GAAG,eAAe;EAClE,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;EAC/C,EAAE,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;;EAE1F,EAAE,IAAI,MAAM,EAAE;EACd,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,YAAY,EAAE;EAClD,MAAM,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;EACvE,KAAK,CAAC;EACN;;EAEA,EAAE,IAAI,MAAM,EAAE;EACd,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;EAC/D;;EAEA,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,aAAa,CAAC,OAAO,CAAC,UAAU,YAAY,EAAE;EACpD,QAAQ,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;EAC5E,OAAO,CAAC;EACR;;EAEA,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;EACpE;EACA,GAAG;EACH,CAAC;;;AAGD,yBAAe;EACf,EAAE,IAAI,EAAE,gBAAgB;EACxB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,OAAO;EAChB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;EACtB,EAAE,MAAM,EAAE,MAAM;EAChB,EAAE,IAAI,EAAE;EACR,CAAC;;EChDD,IAAIqa,MAAI,GAAG;EACX,EAAE,IAAI,EAAE,OAAO;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,GAAG,EAAE;EACP,CAAC;EACc,SAAS,oBAAoB,CAAC,SAAS,EAAE;EACxD,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAU,OAAO,EAAE;EACxE,IAAI,OAAOA,MAAI,CAAC,OAAO,CAAC;EACxB,GAAG,CAAC;EACJ;;ECVA,IAAI,IAAI,GAAG;EACX,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,GAAG,EAAE;EACP,CAAC;EACc,SAAS,6BAA6B,CAAC,SAAS,EAAE;EACjE,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,OAAO,EAAE;EAC5D,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;EACxB,GAAG,CAAC;EACJ;;ECPe,SAAS,eAAe,CAAC,IAAI,EAAE;EAC9C,EAAE,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,UAAU,GAAG,GAAG,CAAC,WAAW;EAClC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,WAAW;EACjC,EAAE,OAAO;EACT,IAAI,UAAU,EAAE,UAAU;EAC1B,IAAI,SAAS,EAAE;EACf,GAAG;EACH;;ECNe,SAAS,mBAAmB,CAAC,OAAO,EAAE;EACrD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,OAAO,qBAAqB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU;EACtG;;ECRe,SAAS,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE;EAC3D,EAAE,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC;EAC9B,EAAE,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC;EACxC,EAAE,IAAI,cAAc,GAAG,GAAG,CAAC,cAAc;EACzC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW;EAC9B,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY;EAChC,EAAE,IAAI,CAAC,GAAG,CAAC;EACX,EAAE,IAAI,CAAC,GAAG,CAAC;;EAEX,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK;EAChC,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM;EAClC,IAAI,IAAI,cAAc,GAAG,gBAAgB,EAAE;;EAE3C,IAAI,IAAI,cAAc,IAAI,CAAC,cAAc,IAAI,QAAQ,KAAK,OAAO,EAAE;EACnE,MAAM,CAAC,GAAG,cAAc,CAAC,UAAU;EACnC,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS;EAClC;EACA;;EAEA,EAAE,OAAO;EACT,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC;EACvC,IAAI,CAAC,EAAE;EACP,GAAG;EACH;;ECzBA;;EAEe,SAAS,eAAe,CAAC,OAAO,EAAE;EACjD,EAAE,IAAI,qBAAqB;;EAE3B,EAAE,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC;EACxC,EAAE,IAAI,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC;EAC1C,EAAE,IAAI,IAAI,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,GAAG,MAAM,GAAG,qBAAqB,CAAC,IAAI;EAC1G,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EAC/G,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;EACpH,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC;EAC9D,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS;;EAE9B,EAAE,IAAIra,kBAAgB,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE;EAC1D,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK;EACnE;;EAEA,EAAE,OAAO;EACT,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;EACH;;EC3Be,SAAS,cAAc,CAAC,OAAO,EAAE;EAChD;EACA,EAAE,IAAI,iBAAiB,GAAGA,kBAAgB,CAAC,OAAO,CAAC;EACnD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ;EAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS;EAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS;;EAE7C,EAAE,OAAO,4BAA4B,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;EAC5E;;ECLe,SAAS,eAAe,CAAC,IAAI,EAAE;EAC9C,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;EACrE;EACA,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI;EAClC;;EAEA,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;EACnD,IAAI,OAAO,IAAI;EACf;;EAEA,EAAE,OAAO,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;EAC7C;;ECXA;EACA;EACA;EACA;EACA;EACA;;EAEe,SAAS,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE;EACzD,EAAE,IAAI,qBAAqB;;EAE3B,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE;EACvB,IAAI,IAAI,GAAG,EAAE;EACb;;EAEA,EAAE,IAAI,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC;EAC7C,EAAE,IAAI,MAAM,GAAG,YAAY,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,GAAG,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC;EAC/H,EAAE,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC;EACnC,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC,GAAG,YAAY;EAC/H,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;EACvC,EAAE,OAAO,MAAM,GAAG,WAAW;EAC7B,EAAE,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;EAC9D;;ECzBe,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAC/C,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;EACjC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;EAChB,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;EACf,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;EAC9B,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EAC1B,GAAG,CAAC;EACJ;;ECQA,SAAS,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE;EACvD,EAAE,IAAI,IAAI,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;EACxE,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS;EACzC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU;EAC5C,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY;EAC/C,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW;EAC9C,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW;EAClC,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY;EACpC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;EACpB,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;EACnB,EAAE,OAAO,IAAI;EACb;;EAEA,SAAS,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE;EACvE,EAAE,OAAO,cAAc,KAAK,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,0BAA0B,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,gBAAgB,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;EAC/O,CAAC;EACD;EACA;;;EAGA,SAAS,kBAAkB,CAAC,OAAO,EAAE;EACrC,EAAE,IAAI,eAAe,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EACjE,EAAE,IAAI,iBAAiB,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAACA,kBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;EAChG,EAAE,IAAI,cAAc,GAAG,iBAAiB,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO;;EAEvG,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;EAClC,IAAI,OAAO,EAAE;EACb,GAAG;;;EAGH,EAAE,OAAO,eAAe,CAAC,MAAM,CAAC,UAAU,cAAc,EAAE;EAC1D,IAAI,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,MAAM;EAC1H,GAAG,CAAC;EACJ,CAAC;EACD;;;EAGe,SAAS,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE;EACnF,EAAE,IAAI,mBAAmB,GAAG,QAAQ,KAAK,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC9G,EAAE,IAAI,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,CAAC;EACtE,EAAE,IAAI,mBAAmB,GAAG,eAAe,CAAC,CAAC,CAAC;EAC9C,EAAE,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,OAAO,EAAE,cAAc,EAAE;EAC/E,IAAI,IAAI,IAAI,GAAG,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC;EAC5E,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;EAC5C,IAAI,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;EAClD,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;EACrD,IAAI,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;EAC/C,IAAI,OAAO,OAAO;EAClB,GAAG,EAAE,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;EACxE,EAAE,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI;EAC7D,EAAE,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG;EAC9D,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI;EACpC,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG;EACnC,EAAE,OAAO,YAAY;EACrB;;ECjEe,SAAS,cAAc,CAAC,IAAI,EAAE;EAC7C,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS;EAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;EAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;EAChC,EAAE,IAAI,aAAa,GAAG,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI;EACpE,EAAE,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;EAC5D,EAAE,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;EACrE,EAAE,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;EACvE,EAAE,IAAI,OAAO;;EAEb,EAAE,QAAQ,aAAa;EACvB,IAAI,KAAK,GAAG;EACZ,MAAM,OAAO,GAAG;EAChB,QAAQ,CAAC,EAAE,OAAO;EAClB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC;EACjC,OAAO;EACP,MAAM;;EAEN,IAAI,KAAK,MAAM;EACf,MAAM,OAAO,GAAG;EAChB,QAAQ,CAAC,EAAE,OAAO;EAClB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;EACnC,OAAO;EACP,MAAM;;EAEN,IAAI,KAAK,KAAK;EACd,MAAM,OAAO,GAAG;EAChB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK;EACxC,QAAQ,CAAC,EAAE;EACX,OAAO;EACP,MAAM;;EAEN,IAAI,KAAK,IAAI;EACb,MAAM,OAAO,GAAG;EAChB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK;EACtC,QAAQ,CAAC,EAAE;EACX,OAAO;EACP,MAAM;;EAEN,IAAI;EACJ,MAAM,OAAO,GAAG;EAChB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;EACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;EACrB,OAAO;EACP;;EAEA,EAAE,IAAI,QAAQ,GAAG,aAAa,GAAG,wBAAwB,CAAC,aAAa,CAAC,GAAG,IAAI;;EAE/E,EAAE,IAAI,QAAQ,IAAI,IAAI,EAAE;EACxB,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO;;EAEnD,IAAI,QAAQ,SAAS;EACrB,MAAM,KAAK,KAAK;EAChB,QAAQ,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACvF,QAAQ;;EAER,MAAM,KAAK,GAAG;EACd,QAAQ,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACvF,QAAQ;EAGR;EACA;;EAEA,EAAE,OAAO,OAAO;EAChB;;EC3De,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;EACvD,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE;EAC1B,IAAI,OAAO,GAAG,EAAE;EAChB;;EAEA,EAAE,IAAI,QAAQ,GAAG,OAAO;EACxB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS;EAC7C,MAAM,SAAS,GAAG,kBAAkB,KAAK,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,kBAAkB;EACtF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ;EAC3C,MAAM,QAAQ,GAAG,iBAAiB,KAAK,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,iBAAiB;EAClF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ;EAC3C,MAAM,QAAQ,GAAG,iBAAiB,KAAK,MAAM,GAAG,eAAe,GAAG,iBAAiB;EACnF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,YAAY;EACnD,MAAM,YAAY,GAAG,qBAAqB,KAAK,MAAM,GAAG,QAAQ,GAAG,qBAAqB;EACxF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,cAAc;EACrD,MAAM,cAAc,GAAG,qBAAqB,KAAK,MAAM,GAAG,MAAM,GAAG,qBAAqB;EACxF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,WAAW;EACjD,MAAM,WAAW,GAAG,oBAAoB,KAAK,MAAM,GAAG,KAAK,GAAG,oBAAoB;EAClF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO;EACzC,MAAM,OAAO,GAAG,gBAAgB,KAAK,MAAM,GAAG,CAAC,GAAG,gBAAgB;EAClE,EAAE,IAAI,aAAa,GAAG,kBAAkB,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;EAC1H,EAAE,IAAI,UAAU,GAAG,cAAc,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM;EACjE,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;EACrC,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;EACzE,EAAE,IAAI,kBAAkB,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;EAChL,EAAE,IAAI,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;EAC3E,EAAE,IAAI,aAAa,GAAG,cAAc,CAAC;EACrC,IAAI,SAAS,EAAE,mBAAmB;EAClC,IAAI,OAAO,EAAE,UAAU;EACvB,IACI,SAAS,EAAE;EACf,GAAG,CAAC;EACJ,EAAE,IAAI,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;EACvF,EAAE,IAAI,iBAAiB,GAAG,cAAc,KAAK,MAAM,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;EAC7F;;EAEA,EAAE,IAAI,eAAe,GAAG;EACxB,IAAI,GAAG,EAAE,kBAAkB,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG;EAC3E,IAAI,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;EACvF,IAAI,IAAI,EAAE,kBAAkB,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;EAC/E,IAAI,KAAK,EAAE,iBAAiB,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,GAAG,aAAa,CAAC;EAC9E,GAAG;EACH,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;;EAE9C,EAAE,IAAI,cAAc,KAAK,MAAM,IAAI,UAAU,EAAE;EAC/C,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;EACtC,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACxD,MAAM,IAAI,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;EAC/D,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG;EAC5D,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ;EACrD,KAAK,CAAC;EACN;;EAEA,EAAE,OAAO,eAAe;EACxB;;EC5De,SAAS,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE;EAC7D,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE;EAC1B,IAAI,OAAO,GAAG,EAAE;EAChB;;EAEA,EAAE,IAAI,QAAQ,GAAG,OAAO;EACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS;EACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ;EAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;EAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;EAChC,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc;EAC9C,MAAM,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB;EAC5D,MAAM,qBAAqB,GAAG,qBAAqB,KAAK,MAAM,GAAGsa,UAAa,GAAG,qBAAqB;EACtG,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;EACzC,EAAE,IAAIC,YAAU,GAAG,SAAS,GAAG,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,SAAS,EAAE;EACtH,IAAI,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS;EAChD,GAAG,CAAC,GAAG,cAAc;EACrB,EAAE,IAAI,iBAAiB,GAAGA,YAAU,CAAC,MAAM,CAAC,UAAU,SAAS,EAAE;EACjE,IAAI,OAAO,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;EACxD,GAAG,CAAC;;EAEJ,EAAE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;EACtC,IAAI,iBAAiB,GAAGA,YAAU;EAClC,GAAG;;;EAGH,EAAE,IAAI,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE;EACrE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE;EAC3C,MAAM,SAAS,EAAE,SAAS;EAC1B,MAAM,QAAQ,EAAE,QAAQ;EACxB,MAAM,YAAY,EAAE,YAAY;EAChC,MAAM,OAAO,EAAE;EACf,KAAK,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;EACnC,IAAI,OAAO,GAAG;EACd,GAAG,EAAE,EAAE,CAAC;EACR,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EACrD,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACtC,GAAG,CAAC;EACJ;;EClCA,SAAS,6BAA6B,CAAC,SAAS,EAAE;EAClD,EAAE,IAAI,gBAAgB,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;EAC5C,IAAI,OAAO,EAAE;EACb;;EAEA,EAAE,IAAI,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC;EACzD,EAAE,OAAO,CAAC,6BAA6B,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;EACxH;;EAEA,SAAS,IAAI,CAAC,IAAI,EAAE;EACpB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;EAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;;EAEtB,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;EACvC,IAAI;EACJ;;EAEA,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,QAAQ;EAC1C,MAAM,aAAa,GAAG,iBAAiB,KAAK,MAAM,GAAG,IAAI,GAAG,iBAAiB;EAC7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO;EACxC,MAAM,YAAY,GAAG,gBAAgB,KAAK,MAAM,GAAG,IAAI,GAAG,gBAAgB;EAC1E,MAAM,2BAA2B,GAAG,OAAO,CAAC,kBAAkB;EAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;EAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;EACjC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;EACzC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;EACvC,MAAM,qBAAqB,GAAG,OAAO,CAAC,cAAc;EACpD,MAAM,cAAc,GAAG,qBAAqB,KAAK,MAAM,GAAG,IAAI,GAAG,qBAAqB;EACtF,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB;EAC3D,EAAE,IAAI,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS;EAClD,EAAE,IAAI,aAAa,GAAG,gBAAgB,CAAC,kBAAkB,CAAC;EAC1D,EAAE,IAAI,eAAe,GAAG,aAAa,KAAK,kBAAkB;EAC5D,EAAE,IAAI,kBAAkB,GAAG,2BAA2B,KAAK,eAAe,IAAI,CAAC,cAAc,GAAG,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,GAAG,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;EAC/L,EAAE,IAAI,UAAU,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE;EACpG,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE;EACzF,MAAM,SAAS,EAAE,SAAS;EAC1B,MAAM,QAAQ,EAAE,QAAQ;EACxB,MAAM,YAAY,EAAE,YAAY;EAChC,MAAM,OAAO,EAAE,OAAO;EACtB,MAAM,cAAc,EAAE,cAAc;EACpC,MAAM,qBAAqB,EAAE;EAC7B,KAAK,CAAC,GAAG,SAAS,CAAC;EACnB,GAAG,EAAE,EAAE,CAAC;EACR,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS;EAC3C,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;EACrC,EAAE,IAAI,SAAS,GAAG,IAAI,GAAG,EAAE;EAC3B,EAAE,IAAI,kBAAkB,GAAG,IAAI;EAC/B,EAAE,IAAI,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC;;EAE3C,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC9C,IAAI,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;;EAEjC,IAAI,IAAI,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC;;EAEpD,IAAI,IAAI,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,KAAK;EAC5D,IAAI,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;EAC/D,IAAI,IAAI,GAAG,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ;EAC7C,IAAI,IAAI,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE;EACzC,MAAM,SAAS,EAAE,SAAS;EAC1B,MAAM,QAAQ,EAAE,QAAQ;EACxB,MAAM,YAAY,EAAE,YAAY;EAChC,MAAM,WAAW,EAAE,WAAW;EAC9B,MAAM,OAAO,EAAE;EACf,KAAK,CAAC;EACN,IAAI,IAAI,iBAAiB,GAAG,UAAU,GAAG,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,gBAAgB,GAAG,MAAM,GAAG,GAAG;;EAE1G,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE;EAC9C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;EACjE;;EAEA,IAAI,IAAI,gBAAgB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;EAClE,IAAI,IAAI,MAAM,GAAG,EAAE;;EAEnB,IAAI,IAAI,aAAa,EAAE;EACvB,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;EAChD;;EAEA,IAAI,IAAI,YAAY,EAAE;EACtB,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;EACpF;;EAEA,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE;EACtC,MAAM,OAAO,KAAK;EAClB,KAAK,CAAC,EAAE;EACR,MAAM,qBAAqB,GAAG,SAAS;EACvC,MAAM,kBAAkB,GAAG,KAAK;EAChC,MAAM;EACN;;EAEA,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACpC;;EAEA,EAAE,IAAI,kBAAkB,EAAE;EAC1B;EACA,IAAI,IAAI,cAAc,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC;;EAE/C,IAAI,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,EAAE,EAAE;EACnC,MAAM,IAAI,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,SAAS,EAAE;EAClE,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;;EAE7C,QAAQ,IAAI,MAAM,EAAE;EACpB,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE;EAC5D,YAAY,OAAO,KAAK;EACxB,WAAW,CAAC;EACZ;EACA,OAAO,CAAC;;EAER,MAAM,IAAI,gBAAgB,EAAE;EAC5B,QAAQ,qBAAqB,GAAG,gBAAgB;EAChD,QAAQ,OAAO,OAAO;EACtB;EACA,KAAK;;EAEL,IAAI,KAAK,IAAI,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;EAChD,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;;EAE1B,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;EAC5B;EACA;;EAEA,EAAE,IAAI,KAAK,CAAC,SAAS,KAAK,qBAAqB,EAAE;EACjD,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI;EAC1C,IAAI,KAAK,CAAC,SAAS,GAAG,qBAAqB;EAC3C,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI;EACtB;EACA,CAAC;;;AAGD,iBAAe;EACf,EAAE,IAAI,EAAE,MAAM;EACd,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,EAAE,EAAE,IAAI;EACV,EAAE,gBAAgB,EAAE,CAAC,QAAQ,CAAC;EAC9B,EAAE,IAAI,EAAE;EACR,IAAI,KAAK,EAAE;EACX;EACA,CAAC;;EC/ID,SAAS,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;EAC1D,EAAE,IAAI,gBAAgB,KAAK,MAAM,EAAE;EACnC,IAAI,gBAAgB,GAAG;EACvB,MAAM,CAAC,EAAE,CAAC;EACV,MAAM,CAAC,EAAE;EACT,KAAK;EACL;;EAEA,EAAE,OAAO;EACT,IAAI,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;EACxD,IAAI,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC;EAC3D,IAAI,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;EAC9D,IAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;EACxD,GAAG;EACH;;EAEA,SAAS,qBAAqB,CAAC,QAAQ,EAAE;EACzC,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;EACzD,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;EAC9B,GAAG,CAAC;EACJ;;EAEA,SAAS,IAAI,CAAC,IAAI,EAAE;EACpB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;EACtB,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS;EAC3C,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;EACrC,EAAE,IAAI,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC,eAAe;EAC5D,EAAE,IAAI,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE;EAChD,IAAI,cAAc,EAAE;EACpB,GAAG,CAAC;EACJ,EAAE,IAAI,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE;EAChD,IAAI,WAAW,EAAE;EACjB,GAAG,CAAC;EACJ,EAAE,IAAI,wBAAwB,GAAG,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC;EACjF,EAAE,IAAI,mBAAmB,GAAG,cAAc,CAAC,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,CAAC;EAC3F,EAAE,IAAI,iBAAiB,GAAG,qBAAqB,CAAC,wBAAwB,CAAC;EACzE,EAAE,IAAI,gBAAgB,GAAG,qBAAqB,CAAC,mBAAmB,CAAC;EACnE,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG;EAC9B,IAAI,wBAAwB,EAAE,wBAAwB;EACtD,IAAI,mBAAmB,EAAE,mBAAmB;EAC5C,IAAI,iBAAiB,EAAE,iBAAiB;EACxC,IAAI,gBAAgB,EAAE;EACtB,GAAG;EACH,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;EACvE,IAAI,8BAA8B,EAAE,iBAAiB;EACrD,IAAI,qBAAqB,EAAE;EAC3B,GAAG,CAAC;EACJ,CAAC;;;AAGD,iBAAe;EACf,EAAE,IAAI,EAAE,MAAM;EACd,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;EACvC,EAAE,EAAE,EAAE;EACN,CAAC;;ECzDM,SAAS,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;EAClE,EAAE,IAAI,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC;EACjD,EAAE,IAAI,cAAc,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;;EAEvE,EAAE,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;EAC5E,IAAI,SAAS,EAAE;EACf,GAAG,CAAC,CAAC,GAAG,MAAM;EACd,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;EACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;;EAExB,EAAE,QAAQ,GAAG,QAAQ,IAAI,CAAC;EAC1B,EAAE,QAAQ,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,cAAc;EAC7C,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG;EACrD,IAAI,CAAC,EAAE,QAAQ;EACf,IAAI,CAAC,EAAE;EACP,GAAG,GAAG;EACN,IAAI,CAAC,EAAE,QAAQ;EACf,IAAI,CAAC,EAAE;EACP,GAAG;EACH;;EAEA,SAAS,MAAM,CAAC,KAAK,EAAE;EACvB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;EACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;EACvB,EAAE,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM;EACtC,MAAM,MAAM,GAAG,eAAe,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe;EACpE,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE;EACzD,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;EAC5E,IAAI,OAAO,GAAG;EACd,GAAG,EAAE,EAAE,CAAC;EACR,EAAE,IAAI,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;EACnD,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC;EACjC,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC;;EAEjC,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,EAAE;EACjD,IAAI,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;EAC5C,IAAI,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;EAC5C;;EAEA,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;EAClC,CAAC;;;AAGD,mBAAe;EACf,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC;EAC7B,EAAE,EAAE,EAAE;EACN,CAAC;;ECnDD,SAAS,aAAa,CAAC,IAAI,EAAE;EAC7B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;EACtB;EACA;EACA;EACA;EACA,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;EAC7C,IAAI,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;EACpC,IAAI,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;EAC/B,IACI,SAAS,EAAE,KAAK,CAAC;EACrB,GAAG,CAAC;EACJ,CAAC;;;AAGD,0BAAe;EACf,EAAE,IAAI,EAAE,eAAe;EACvB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,EAAE,EAAE,aAAa;EACnB,EAAE,IAAI,EAAE;EACR,CAAC;;ECxBc,SAAS,UAAU,CAAC,IAAI,EAAE;EACzC,EAAE,OAAO,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG;EACjC;;ECUA,SAAS,eAAe,CAAC,IAAI,EAAE;EAC/B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;EAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;EACtB,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,QAAQ;EAC1C,MAAM,aAAa,GAAG,iBAAiB,KAAK,MAAM,GAAG,IAAI,GAAG,iBAAiB;EAC7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO;EACxC,MAAM,YAAY,GAAG,gBAAgB,KAAK,MAAM,GAAG,KAAK,GAAG,gBAAgB;EAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;EACjC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;EACzC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;EACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;EAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM;EACtC,MAAM,MAAM,GAAG,eAAe,KAAK,MAAM,GAAG,IAAI,GAAG,eAAe;EAClE,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY;EAClD,MAAM,YAAY,GAAG,qBAAqB,KAAK,MAAM,GAAG,CAAC,GAAG,qBAAqB;EACjF,EAAE,IAAI,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE;EACvC,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,YAAY,EAAE,YAAY;EAC9B,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,WAAW,EAAE;EACjB,GAAG,CAAC;EACJ,EAAE,IAAI,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;EACvD,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;EAC/C,EAAE,IAAI,eAAe,GAAG,CAAC,SAAS;EAClC,EAAE,IAAI,QAAQ,GAAG,wBAAwB,CAAC,aAAa,CAAC;EACxD,EAAE,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;EACpC,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa;EACvD,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS;EAC3C,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;EACrC,EAAE,IAAI,iBAAiB,GAAG,OAAO,YAAY,KAAK,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE;EAC3G,IAAI,SAAS,EAAE,KAAK,CAAC;EACrB,GAAG,CAAC,CAAC,GAAG,YAAY;EACpB,EAAE,IAAI,2BAA2B,GAAG,OAAO,iBAAiB,KAAK,QAAQ,GAAG;EAC5E,IAAI,QAAQ,EAAE,iBAAiB;EAC/B,IAAI,OAAO,EAAE;EACb,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;EACpB,IAAI,QAAQ,EAAE,CAAC;EACf,IAAI,OAAO,EAAE;EACb,GAAG,EAAE,iBAAiB,CAAC;EACvB,EAAE,IAAI,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI;EAC3G,EAAE,IAAI,IAAI,GAAG;EACb,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;;EAEH,EAAE,IAAI,CAAC,aAAa,EAAE;EACtB,IAAI;EACJ;;EAEA,EAAE,IAAI,aAAa,EAAE;EACrB,IAAI,IAAI,qBAAqB;;EAE7B,IAAI,IAAI,QAAQ,GAAG,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI;EAChD,IAAI,IAAI,OAAO,GAAG,QAAQ,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK;EACnD,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO;EACnD,IAAI,IAAI,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;EACxC,IAAI,IAAInV,KAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;EACzC,IAAI,IAAID,KAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;EACxC,IAAI,IAAI,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EACpD,IAAI,IAAI,MAAM,GAAG,SAAS,KAAK,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;EAC3E,IAAI,IAAI,MAAM,GAAG,SAAS,KAAK,KAAK,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;EAC9E;;EAEA,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;EAC3C,IAAI,IAAI,SAAS,GAAG,MAAM,IAAI,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,GAAG;EAC3E,MAAM,KAAK,EAAE,CAAC;EACd,MAAM,MAAM,EAAE;EACd,KAAK;EACL,IAAI,IAAI,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,OAAO,GAAG,kBAAkB,EAAE;EAC7I,IAAI,IAAI,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC;EACtD,IAAI,IAAI,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;EACtD;EACA;EACA;EACA;;EAEA,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;EAChE,IAAI,IAAI,SAAS,GAAG,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,2BAA2B,CAAC,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,2BAA2B,CAAC,QAAQ;EACxN,IAAI,IAAI,SAAS,GAAG,eAAe,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,2BAA2B,CAAC,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,2BAA2B,CAAC,QAAQ;EACzN,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;EACzF,IAAI,IAAI,YAAY,GAAG,iBAAiB,GAAG,QAAQ,KAAK,GAAG,GAAG,iBAAiB,CAAC,SAAS,IAAI,CAAC,GAAG,iBAAiB,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC;EACtI,IAAI,IAAI,mBAAmB,GAAG,CAAC,qBAAqB,GAAG,mBAAmB,IAAI,IAAI,GAAG,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,qBAAqB,GAAG,CAAC;EAChK,IAAI,IAAI,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,YAAY;EAC3E,IAAI,IAAI,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,mBAAmB;EAC5D,IAAI,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,GAAGiV,GAAO,CAAChV,KAAG,EAAE,SAAS,CAAC,GAAGA,KAAG,EAAE,MAAM,EAAE,MAAM,GAAG+U,GAAO,CAAChV,KAAG,EAAE,SAAS,CAAC,GAAGA,KAAG,CAAC;EACxH,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,eAAe;EAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,eAAe,GAAG,MAAM;EAC7C;;EAEA,EAAE,IAAI,YAAY,EAAE;EACpB,IAAI,IAAI,sBAAsB;;EAE9B,IAAI,IAAI,SAAS,GAAG,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI;;EAEjD,IAAI,IAAI,QAAQ,GAAG,QAAQ,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK;;EAEpD,IAAI,IAAI,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;;EAExC,IAAI,IAAI,IAAI,GAAG,OAAO,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO;;EAEnD,IAAI,IAAI,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;;EAE5C,IAAI,IAAI,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;;EAE3C,IAAI,IAAI,YAAY,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE;;EAEhE,IAAI,IAAI,oBAAoB,GAAG,CAAC,sBAAsB,GAAG,mBAAmB,IAAI,IAAI,GAAG,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,sBAAsB,GAAG,CAAC;;EAElK,IAAI,IAAI,UAAU,GAAG,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,GAAG,2BAA2B,CAAC,OAAO;;EAExJ,IAAI,IAAI,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,GAAG,2BAA2B,CAAC,OAAO,GAAG,IAAI;;EAExJ,IAAI,IAAI,gBAAgB,GAAG,MAAM,IAAI,YAAY,GAAG,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;;EAE7K,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,gBAAgB;EAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,gBAAgB,GAAG,OAAO;EAC9C;;EAEA,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;EAClC,CAAC;;;AAGD,4BAAe;EACf,EAAE,IAAI,EAAE,iBAAiB;EACzB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,KAAK,EAAE,MAAM;EACf,EAAE,EAAE,EAAE,eAAe;EACrB,EAAE,gBAAgB,EAAE,CAAC,QAAQ;EAC7B,CAAC;;EC7Ic,SAAS,oBAAoB,CAAC,OAAO,EAAE;EACtD,EAAE,OAAO;EACT,IAAI,UAAU,EAAE,OAAO,CAAC,UAAU;EAClC,IAAI,SAAS,EAAE,OAAO,CAAC;EACvB,GAAG;EACH;;ECDe,SAAS,aAAa,CAAC,IAAI,EAAE;EAC5C,EAAE,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;EACxD,IAAI,OAAO,eAAe,CAAC,IAAI,CAAC;EAChC,GAAG,MAAM;EACT,IAAI,OAAO,oBAAoB,CAAC,IAAI,CAAC;EACrC;EACA;;ECDA,SAAS,eAAe,CAAC,OAAO,EAAE;EAClC,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;EAC5C,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC;EAC3D,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;EAC7D,EAAE,OAAO,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;EACrC,CAAC;EACD;;;EAGe,SAAS,gBAAgB,CAAC,uBAAuB,EAAE,YAAY,EAAE,OAAO,EAAE;EACzF,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE;EAC1B,IAAI,OAAO,GAAG,KAAK;EACnB;;EAEA,EAAE,IAAI,uBAAuB,GAAG,aAAa,CAAC,YAAY,CAAC;EAC3D,EAAE,IAAI,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC;EACzF,EAAE,IAAI,eAAe,GAAG,kBAAkB,CAAC,YAAY,CAAC;EACxD,EAAE,IAAI,IAAI,GAAG,qBAAqB,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,OAAO,CAAC;EAC1F,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,UAAU,EAAE,CAAC;EACjB,IAAI,SAAS,EAAE;EACf,GAAG;EACH,EAAE,IAAI,OAAO,GAAG;EAChB,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,CAAC,EAAE;EACP,GAAG;;EAEH,EAAE,IAAI,uBAAuB,IAAI,CAAC,uBAAuB,IAAI,CAAC,OAAO,EAAE;EACvE,IAAI,IAAI,WAAW,CAAC,YAAY,CAAC,KAAK,MAAM;EAC5C,IAAI,cAAc,CAAC,eAAe,CAAC,EAAE;EACrC,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC;EAC1C;;EAEA,IAAI,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE;EACrC,MAAM,OAAO,GAAG,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC;EACzD,MAAM,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU;EAC1C,MAAM,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,SAAS;EACzC,KAAK,MAAM,IAAI,eAAe,EAAE;EAChC,MAAM,OAAO,CAAC,CAAC,GAAG,mBAAmB,CAAC,eAAe,CAAC;EACtD;EACA;;EAEA,EAAE,OAAO;EACT,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;EAChD,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;EAC9C,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK;EACrB,IAAI,MAAM,EAAE,IAAI,CAAC;EACjB,GAAG;EACH;;ECvDA,SAAS,KAAK,CAAC,SAAS,EAAE;EAC1B,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE;EACrB,EAAE,IAAI,OAAO,GAAG,IAAI,GAAG,EAAE;EACzB,EAAE,IAAI,MAAM,GAAG,EAAE;EACjB,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EACxC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;EACpC,GAAG,CAAC,CAAC;;EAEL,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE;EAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;EAC9B,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC;EACtF,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACpC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;EAC7B,QAAQ,IAAI,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;;EAEtC,QAAQ,IAAI,WAAW,EAAE;EACzB,UAAU,IAAI,CAAC,WAAW,CAAC;EAC3B;EACA;EACA,KAAK,CAAC;EACN,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;EACzB;;EAEA,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EACxC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;EACrC;EACA,MAAM,IAAI,CAAC,QAAQ,CAAC;EACpB;EACA,GAAG,CAAC;EACJ,EAAE,OAAO,MAAM;EACf;;EAEe,SAAS,cAAc,CAAC,SAAS,EAAE;EAClD;EACA,EAAE,IAAI,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;;EAE1C,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE;EACrD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,QAAQ,EAAE;EAClE,MAAM,OAAO,QAAQ,CAAC,KAAK,KAAK,KAAK;EACrC,KAAK,CAAC,CAAC;EACP,GAAG,EAAE,EAAE,CAAC;EACR;;EC3Ce,SAAS,QAAQ,CAAC,EAAE,EAAE;EACrC,EAAE,IAAI,OAAO;EACb,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,CAAC,OAAO,EAAE;EAClB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE;EAC/C,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY;EAC3C,UAAU,OAAO,GAAG,SAAS;EAC7B,UAAU,OAAO,CAAC,EAAE,EAAE,CAAC;EACvB,SAAS,CAAC;EACV,OAAO,CAAC;EACR;;EAEA,IAAI,OAAO,OAAO;EAClB,GAAG;EACH;;ECde,SAAS,WAAW,CAAC,SAAS,EAAE;EAC/C,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,MAAM,EAAE,OAAO,EAAE;EAC3D,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;EACvC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;EAC3E,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;EACnE,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI;EACzD,KAAK,CAAC,GAAG,OAAO;EAChB,IAAI,OAAO,MAAM;EACjB,GAAG,EAAE,EAAE,CAAC,CAAC;;EAET,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAChD,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC;EACtB,GAAG,CAAC;EACJ;;ECJA,IAAI,eAAe,GAAG;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,EAAE;EACf,EAAE,QAAQ,EAAE;EACZ,CAAC;;EAED,SAAS,gBAAgB,GAAG;EAC5B,EAAE,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EAC3F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;EAChC;;EAEA,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE;EACvC,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,OAAO,CAAC,qBAAqB,KAAK,UAAU,CAAC;EAC5E,GAAG,CAAC;EACJ;;EAEO,SAAS,eAAe,CAAC,gBAAgB,EAAE;EAClD,EAAE,IAAI,gBAAgB,KAAK,MAAM,EAAE;EACnC,IAAI,gBAAgB,GAAG,EAAE;EACzB;;EAEA,EAAE,IAAI,iBAAiB,GAAG,gBAAgB;EAC1C,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,gBAAgB;EAChE,MAAM,gBAAgB,GAAG,qBAAqB,KAAK,MAAM,GAAG,EAAE,GAAG,qBAAqB;EACtF,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,cAAc;EAC/D,MAAM,cAAc,GAAG,sBAAsB,KAAK,MAAM,GAAG,eAAe,GAAG,sBAAsB;EACnG,EAAE,OAAO,SAAS,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;EAC3D,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE;EAC5B,MAAM,OAAO,GAAG,cAAc;EAC9B;;EAEA,IAAI,IAAI,KAAK,GAAG;EAChB,MAAM,SAAS,EAAE,QAAQ;EACzB,MAAM,gBAAgB,EAAE,EAAE;EAC1B,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,cAAc,CAAC;EACjE,MAAM,aAAa,EAAE,EAAE;EACvB,MAAM,QAAQ,EAAE;EAChB,QAAQ,SAAS,EAAE,SAAS;EAC5B,QAAQ,MAAM,EAAE;EAChB,OAAO;EACP,MAAM,UAAU,EAAE,EAAE;EACpB,MAAM,MAAM,EAAE;EACd,KAAK;EACL,IAAI,IAAI,gBAAgB,GAAG,EAAE;EAC7B,IAAI,IAAI,WAAW,GAAG,KAAK;EAC3B,IAAI,IAAI,QAAQ,GAAG;EACnB,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,SAAS,UAAU,CAAC,gBAAgB,EAAE;EACxD,QAAQ,IAAI,OAAO,GAAG,OAAO,gBAAgB,KAAK,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,gBAAgB;EACjH,QAAQ,sBAAsB,EAAE;EAChC,QAAQ,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EACjF,QAAQ,KAAK,CAAC,aAAa,GAAG;EAC9B,UAAU,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE;EACtJ,UAAU,MAAM,EAAE,iBAAiB,CAAC,MAAM;EAC1C,SAAS,CAAC;EACV;;EAEA,QAAQ,IAAI,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;EAEjH,QAAQ,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;EACtE,UAAU,OAAO,CAAC,CAAC,OAAO;EAC1B,SAAS,CAAC;EACV,QAAQ,kBAAkB,EAAE;EAC5B,QAAQ,OAAO,QAAQ,CAAC,MAAM,EAAE;EAChC,OAAO;EACP;EACA;EACA;EACA;EACA;EACA,MAAM,WAAW,EAAE,SAAS,WAAW,GAAG;EAC1C,QAAQ,IAAI,WAAW,EAAE;EACzB,UAAU;EACV;;EAEA,QAAQ,IAAI,eAAe,GAAG,KAAK,CAAC,QAAQ;EAC5C,YAAY,SAAS,GAAG,eAAe,CAAC,SAAS;EACjD,YAAY,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;EAC5C;;EAEA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;EAClD,UAAU;EACV,SAAS;;;EAGT,QAAQ,KAAK,CAAC,KAAK,GAAG;EACtB,UAAU,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;EAC7G,UAAU,MAAM,EAAE,aAAa,CAAC,MAAM;EACtC,SAAS,CAAC;EACV;EACA;EACA;EACA;;EAEA,QAAQ,KAAK,CAAC,KAAK,GAAG,KAAK;EAC3B,QAAQ,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;EAClD;EACA;EACA;;EAEA,QAAQ,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAC3D,UAAU,OAAO,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC;EACtF,SAAS,CAAC;;EAEV,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;EAC5E,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;EACpC,YAAY,KAAK,CAAC,KAAK,GAAG,KAAK;EAC/B,YAAY,KAAK,GAAG,EAAE;EACtB,YAAY;EACZ;;EAEA,UAAU,IAAI,qBAAqB,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;EACnE,cAAc,EAAE,GAAG,qBAAqB,CAAC,EAAE;EAC3C,cAAc,sBAAsB,GAAG,qBAAqB,CAAC,OAAO;EACpE,cAAc,QAAQ,GAAG,sBAAsB,KAAK,MAAM,GAAG,EAAE,GAAG,sBAAsB;EACxF,cAAc,IAAI,GAAG,qBAAqB,CAAC,IAAI;;EAE/C,UAAU,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;EACxC,YAAY,KAAK,GAAG,EAAE,CAAC;EACvB,cAAc,KAAK,EAAE,KAAK;EAC1B,cAAc,OAAO,EAAE,QAAQ;EAC/B,cAAc,IAAI,EAAE,IAAI;EACxB,cAAc,QAAQ,EAAE;EACxB,aAAa,CAAC,IAAI,KAAK;EACvB;EACA;EACA,OAAO;EACP;EACA;EACA,MAAM,MAAM,EAAE,QAAQ,CAAC,YAAY;EACnC,QAAQ,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE;EAC9C,UAAU,QAAQ,CAAC,WAAW,EAAE;EAChC,UAAU,OAAO,CAAC,KAAK,CAAC;EACxB,SAAS,CAAC;EACV,OAAO,CAAC;EACR,MAAM,OAAO,EAAE,SAAS,OAAO,GAAG;EAClC,QAAQ,sBAAsB,EAAE;EAChC,QAAQ,WAAW,GAAG,IAAI;EAC1B;EACA,KAAK;;EAEL,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;EAC9C,MAAM,OAAO,QAAQ;EACrB;;EAEA,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;EACvD,MAAM,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE;EACjD,QAAQ,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;EACpC;EACA,KAAK,CAAC,CAAC;EACP;EACA;EACA;EACA;;EAEA,IAAI,SAAS,kBAAkB,GAAG;EAClC,MAAM,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACrD,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;EAC5B,YAAY,YAAY,GAAG,IAAI,CAAC,OAAO;EACvC,YAAY,OAAO,GAAG,YAAY,KAAK,MAAM,GAAG,EAAE,GAAG,YAAY;EACjE,YAAY,MAAM,GAAG,IAAI,CAAC,MAAM;;EAEhC,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;EAC1C,UAAU,IAAI,SAAS,GAAG,MAAM,CAAC;EACjC,YAAY,KAAK,EAAE,KAAK;EACxB,YAAY,IAAI,EAAE,IAAI;EACtB,YAAY,QAAQ,EAAE,QAAQ;EAC9B,YAAY,OAAO,EAAE;EACrB,WAAW,CAAC;;EAEZ,UAAU,IAAI,MAAM,GAAG,SAAS,MAAM,GAAG,EAAE;;EAE3C,UAAU,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;EACpD;EACA,OAAO,CAAC;EACR;;EAEA,IAAI,SAAS,sBAAsB,GAAG;EACtC,MAAM,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE;EAC7C,QAAQ,OAAO,EAAE,EAAE;EACnB,OAAO,CAAC;EACR,MAAM,gBAAgB,GAAG,EAAE;EAC3B;;EAEA,IAAI,OAAO,QAAQ;EACnB,GAAG;EACH;EACO,IAAIqV,cAAY,gBAAgB,eAAe,EAAE,CAAC;;EC/LzD,IAAIC,kBAAgB,GAAG,CAAC,cAAc,EAAEC,eAAa,EAAEC,eAAa,EAAEC,aAAW,CAAC;EAClF,IAAIJ,cAAY,gBAAgB,eAAe,CAAC;EAChD,EAAE,gBAAgB,EAAEC;EACpB,CAAC,CAAC,CAAC;;ECEH,IAAI,gBAAgB,GAAG,CAAC,cAAc,EAAEC,eAAa,EAAEC,eAAa,EAAEC,aAAW,EAAEC,QAAM,EAAEC,MAAI,EAAEC,iBAAe,EAAEC,OAAK,EAAE9B,MAAI,CAAC;EAC9H,IAAI,YAAY,gBAAgB,eAAe,CAAC;EAChD,EAAE,gBAAgB,EAAE;EACpB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECbH;EACA;EACA;EACA;EACA;EACA;;;EAmBA;EACA;EACA;;EAEA,MAAM3V,MAAI,GAAG,UAAU;EACvB,MAAMqJ,UAAQ,GAAG,aAAa;EAC9B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAEhC,MAAMkL,YAAU,GAAG,QAAQ;EAC3B,MAAMC,SAAO,GAAG,KAAK;EACrB,MAAMC,cAAY,GAAG,SAAS;EAC9B,MAAMC,gBAAc,GAAG,WAAW;EAClC,MAAMC,kBAAkB,GAAG,CAAC,CAAC;;EAE7B,MAAMxD,YAAU,GAAG,CAAO/K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAMgL,cAAY,GAAG,CAAShL,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAM6K,YAAU,GAAG,CAAO7K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM8K,aAAW,GAAG,CAAQ9K,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAMoD,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAC/D,MAAMuL,sBAAsB,GAAG,CAAA,OAAA,EAAUxO,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EACnE,MAAMwL,oBAAoB,GAAG,CAAA,KAAA,EAAQzO,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAE/D,MAAMP,iBAAe,GAAG,MAAM;EAC9B,MAAMgM,iBAAiB,GAAG,QAAQ;EAClC,MAAMC,kBAAkB,GAAG,SAAS;EACpC,MAAMC,oBAAoB,GAAG,WAAW;EACxC,MAAMC,wBAAwB,GAAG,eAAe;EAChD,MAAMC,0BAA0B,GAAG,iBAAiB;EAEpD,MAAM3L,sBAAoB,GAAG,2DAA2D;EACxF,MAAM4L,0BAA0B,GAAG,CAAA,EAAG5L,sBAAoB,CAAA,CAAA,EAAIT,iBAAe,CAAE,CAAA;EAC/E,MAAMsM,aAAa,GAAG,gBAAgB;EACtC,MAAMC,eAAe,GAAG,SAAS;EACjC,MAAMC,mBAAmB,GAAG,aAAa;EACzC,MAAMC,sBAAsB,GAAG,6DAA6D;EAE5F,MAAMC,aAAa,GAAGjZ,KAAK,EAAE,GAAG,SAAS,GAAG,WAAW;EACvD,MAAMkZ,gBAAgB,GAAGlZ,KAAK,EAAE,GAAG,WAAW,GAAG,SAAS;EAC1D,MAAMmZ,gBAAgB,GAAGnZ,KAAK,EAAE,GAAG,YAAY,GAAG,cAAc;EAChE,MAAMoZ,mBAAmB,GAAGpZ,KAAK,EAAE,GAAG,cAAc,GAAG,YAAY;EACnE,MAAMqZ,eAAe,GAAGrZ,KAAK,EAAE,GAAG,YAAY,GAAG,aAAa;EAC9D,MAAMsZ,cAAc,GAAGtZ,KAAK,EAAE,GAAG,aAAa,GAAG,YAAY;EAC7D,MAAMuZ,mBAAmB,GAAG,KAAK;EACjC,MAAMC,sBAAsB,GAAG,QAAQ;EAEvC,MAAMpR,SAAO,GAAG;EACdqR,EAAAA,SAAS,EAAE,IAAI;EACfC,EAAAA,QAAQ,EAAE,iBAAiB;EAC3BC,EAAAA,OAAO,EAAE,SAAS;EAClB/B,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdgC,EAAAA,YAAY,EAAE,IAAI;EAClBC,EAAAA,SAAS,EAAE;EACb,CAAC;EAED,MAAMxR,aAAW,GAAG;EAClBoR,EAAAA,SAAS,EAAE,kBAAkB;EAC7BC,EAAAA,QAAQ,EAAE,kBAAkB;EAC5BC,EAAAA,OAAO,EAAE,QAAQ;EACjB/B,EAAAA,MAAM,EAAE,yBAAyB;EACjCgC,EAAAA,YAAY,EAAE,wBAAwB;EACtCC,EAAAA,SAAS,EAAE;EACb,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,QAAQ,SAASvQ,aAAa,CAAC;EACnCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;MAEtB,IAAI,CAACuR,OAAO,GAAG,IAAI;MACnB,IAAI,CAACC,OAAO,GAAG,IAAI,CAACxQ,QAAQ,CAACnL,UAAU,CAAC;EACxC;EACA,IAAA,IAAI,CAAC4b,KAAK,GAAGtP,cAAc,CAACY,IAAI,CAAC,IAAI,CAAC/B,QAAQ,EAAEqP,aAAa,CAAC,CAAC,CAAC,CAAC,IAC/DlO,cAAc,CAACS,IAAI,CAAC,IAAI,CAAC5B,QAAQ,EAAEqP,aAAa,CAAC,CAAC,CAAC,CAAC,IACpDlO,cAAc,CAACG,OAAO,CAAC+N,aAAa,EAAE,IAAI,CAACmB,OAAO,CAAC;EACrD,IAAA,IAAI,CAACE,SAAS,GAAG,IAAI,CAACC,aAAa,EAAE;EACvC;;EAEA;IACA,WAAW/R,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACA6M,EAAAA,MAAMA,GAAG;EACP,IAAA,OAAO,IAAI,CAAC6I,QAAQ,EAAE,GAAG,IAAI,CAACC,IAAI,EAAE,GAAG,IAAI,CAACC,IAAI,EAAE;EACpD;EAEAA,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI5X,UAAU,CAAC,IAAI,CAACkL,QAAQ,CAAC,IAAI,IAAI,CAACwM,QAAQ,EAAE,EAAE;EAChD,MAAA;EACF;EAEA,IAAA,MAAMpR,aAAa,GAAG;QACpBA,aAAa,EAAE,IAAI,CAAC4E;OACrB;EAED,IAAA,MAAM4Q,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEkL,YAAU,EAAE9P,aAAa,CAAC;MAEhF,IAAIwV,SAAS,CAACjU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,IAAI,CAACkU,aAAa,EAAE;;EAEpB;EACA;EACA;EACA;EACA,IAAA,IAAI,cAAc,IAAI3d,QAAQ,CAACqC,eAAe,IAAI,CAAC,IAAI,CAACib,OAAO,CAAC7b,OAAO,CAAC4a,mBAAmB,CAAC,EAAE;EAC5F,MAAA,KAAK,MAAM3e,OAAO,IAAI,EAAE,CAACwQ,MAAM,CAAC,GAAGlO,QAAQ,CAAC+C,IAAI,CAACsL,QAAQ,CAAC,EAAE;UAC1DzH,YAAY,CAACiC,EAAE,CAACnL,OAAO,EAAE,WAAW,EAAEgF,IAAI,CAAC;EAC7C;EACF;EAEA,IAAA,IAAI,CAACoK,QAAQ,CAAC8Q,KAAK,EAAE;MACrB,IAAI,CAAC9Q,QAAQ,CAAChC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC;MAEjD,IAAI,CAACyS,KAAK,CAACxb,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;MACzC,IAAI,CAAC/C,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;MAC5CjJ,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEmL,aAAW,EAAE/P,aAAa,CAAC;EACjE;EAEAqR,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI3X,UAAU,CAAC,IAAI,CAACkL,QAAQ,CAAC,IAAI,CAAC,IAAI,CAACwM,QAAQ,EAAE,EAAE;EACjD,MAAA;EACF;EAEA,IAAA,MAAMpR,aAAa,GAAG;QACpBA,aAAa,EAAE,IAAI,CAAC4E;OACrB;EAED,IAAA,IAAI,CAAC+Q,aAAa,CAAC3V,aAAa,CAAC;EACnC;EAEAgF,EAAAA,OAAOA,GAAG;MACR,IAAI,IAAI,CAACmQ,OAAO,EAAE;EAChB,MAAA,IAAI,CAACA,OAAO,CAACS,OAAO,EAAE;EACxB;MAEA,KAAK,CAAC5Q,OAAO,EAAE;EACjB;EAEA6Q,EAAAA,MAAMA,GAAG;EACP,IAAA,IAAI,CAACP,SAAS,GAAG,IAAI,CAACC,aAAa,EAAE;MACrC,IAAI,IAAI,CAACJ,OAAO,EAAE;EAChB,MAAA,IAAI,CAACA,OAAO,CAACU,MAAM,EAAE;EACvB;EACF;;EAEA;IACAF,aAAaA,CAAC3V,aAAa,EAAE;EAC3B,IAAA,MAAM8V,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEoL,YAAU,EAAEhQ,aAAa,CAAC;MAChF,IAAI8V,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;;EAEA;EACA;EACA,IAAA,IAAI,cAAc,IAAIzJ,QAAQ,CAACqC,eAAe,EAAE;EAC9C,MAAA,KAAK,MAAM3E,OAAO,IAAI,EAAE,CAACwQ,MAAM,CAAC,GAAGlO,QAAQ,CAAC+C,IAAI,CAACsL,QAAQ,CAAC,EAAE;UAC1DzH,YAAY,CAACC,GAAG,CAACnJ,OAAO,EAAE,WAAW,EAAEgF,IAAI,CAAC;EAC9C;EACF;MAEA,IAAI,IAAI,CAAC2a,OAAO,EAAE;EAChB,MAAA,IAAI,CAACA,OAAO,CAACS,OAAO,EAAE;EACxB;MAEA,IAAI,CAACP,KAAK,CAACxb,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;MAC5C,IAAI,CAAC/C,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;MAC/C,IAAI,CAAC/C,QAAQ,CAAChC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;MACpDF,WAAW,CAACG,mBAAmB,CAAC,IAAI,CAACwS,KAAK,EAAE,QAAQ,CAAC;MACrD3W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEqL,cAAY,EAAEjQ,aAAa,CAAC;;EAEhE;EACA,IAAA,IAAI,CAAC4E,QAAQ,CAAC8Q,KAAK,EAAE;EACvB;IAEA/R,UAAUA,CAACC,MAAM,EAAE;EACjBA,IAAAA,MAAM,GAAG,KAAK,CAACD,UAAU,CAACC,MAAM,CAAC;MAEjC,IAAI,OAAOA,MAAM,CAACqR,SAAS,KAAK,QAAQ,IAAI,CAACrc,WAAS,CAACgL,MAAM,CAACqR,SAAS,CAAC,IACtE,OAAOrR,MAAM,CAACqR,SAAS,CAAChD,qBAAqB,KAAK,UAAU,EAC5D;EACA;QACA,MAAM,IAAIzN,SAAS,CAAC,CAAG9I,EAAAA,MAAI,CAAC+I,WAAW,EAAE,CAAA,8FAAA,CAAgG,CAAC;EAC5I;EAEA,IAAA,OAAOb,MAAM;EACf;EAEA6R,EAAAA,aAAaA,GAAG;EACd,IAAA,IAAI,OAAOM,MAAM,KAAK,WAAW,EAAE;EACjC,MAAA,MAAM,IAAIvR,SAAS,CAAC,wEAAwE,CAAC;EAC/F;EAEA,IAAA,IAAIwR,gBAAgB,GAAG,IAAI,CAACpR,QAAQ;EAEpC,IAAA,IAAI,IAAI,CAACC,OAAO,CAACoQ,SAAS,KAAK,QAAQ,EAAE;QACvCe,gBAAgB,GAAG,IAAI,CAACZ,OAAO;OAChC,MAAM,IAAIxc,WAAS,CAAC,IAAI,CAACiM,OAAO,CAACoQ,SAAS,CAAC,EAAE;QAC5Ce,gBAAgB,GAAGjd,UAAU,CAAC,IAAI,CAAC8L,OAAO,CAACoQ,SAAS,CAAC;OACtD,MAAM,IAAI,OAAO,IAAI,CAACpQ,OAAO,CAACoQ,SAAS,KAAK,QAAQ,EAAE;EACrDe,MAAAA,gBAAgB,GAAG,IAAI,CAACnR,OAAO,CAACoQ,SAAS;EAC3C;EAEA,IAAA,MAAMD,YAAY,GAAG,IAAI,CAACiB,gBAAgB,EAAE;EAC5C,IAAA,IAAI,CAACd,OAAO,GAAGY,YAAmB,CAACC,gBAAgB,EAAE,IAAI,CAACX,KAAK,EAAEL,YAAY,CAAC;EAChF;EAEA5D,EAAAA,QAAQA,GAAG;MACT,OAAO,IAAI,CAACiE,KAAK,CAACxb,SAAS,CAACC,QAAQ,CAAC6N,iBAAe,CAAC;EACvD;EAEAuO,EAAAA,aAAaA,GAAG;EACd,IAAA,MAAMC,cAAc,GAAG,IAAI,CAACf,OAAO;MAEnC,IAAIe,cAAc,CAACtc,SAAS,CAACC,QAAQ,CAAC8Z,kBAAkB,CAAC,EAAE;EACzD,MAAA,OAAOa,eAAe;EACxB;MAEA,IAAI0B,cAAc,CAACtc,SAAS,CAACC,QAAQ,CAAC+Z,oBAAoB,CAAC,EAAE;EAC3D,MAAA,OAAOa,cAAc;EACvB;MAEA,IAAIyB,cAAc,CAACtc,SAAS,CAACC,QAAQ,CAACga,wBAAwB,CAAC,EAAE;EAC/D,MAAA,OAAOa,mBAAmB;EAC5B;MAEA,IAAIwB,cAAc,CAACtc,SAAS,CAACC,QAAQ,CAACia,0BAA0B,CAAC,EAAE;EACjE,MAAA,OAAOa,sBAAsB;EAC/B;;EAEA;EACA,IAAA,MAAMwB,KAAK,GAAGje,gBAAgB,CAAC,IAAI,CAACkd,KAAK,CAAC,CAAChc,gBAAgB,CAAC,eAAe,CAAC,CAACsM,IAAI,EAAE,KAAK,KAAK;MAE7F,IAAIwQ,cAAc,CAACtc,SAAS,CAACC,QAAQ,CAAC6Z,iBAAiB,CAAC,EAAE;EACxD,MAAA,OAAOyC,KAAK,GAAG9B,gBAAgB,GAAGD,aAAa;EACjD;EAEA,IAAA,OAAO+B,KAAK,GAAG5B,mBAAmB,GAAGD,gBAAgB;EACvD;EAEAgB,EAAAA,aAAaA,GAAG;MACd,OAAO,IAAI,CAAC3Q,QAAQ,CAACrL,OAAO,CAAC2a,eAAe,CAAC,KAAK,IAAI;EACxD;EAEAmC,EAAAA,UAAUA,GAAG;MACX,MAAM;EAAErD,MAAAA;OAAQ,GAAG,IAAI,CAACnO,OAAO;EAE/B,IAAA,IAAI,OAAOmO,MAAM,KAAK,QAAQ,EAAE;EAC9B,MAAA,OAAOA,MAAM,CAACxa,KAAK,CAAC,GAAG,CAAC,CAACoN,GAAG,CAAC5D,KAAK,IAAI3J,MAAM,CAACyW,QAAQ,CAAC9M,KAAK,EAAE,EAAE,CAAC,CAAC;EACnE;EAEA,IAAA,IAAI,OAAOgR,MAAM,KAAK,UAAU,EAAE;QAChC,OAAOsD,UAAU,IAAItD,MAAM,CAACsD,UAAU,EAAE,IAAI,CAAC1R,QAAQ,CAAC;EACxD;EAEA,IAAA,OAAOoO,MAAM;EACf;EAEAiD,EAAAA,gBAAgBA,GAAG;EACjB,IAAA,MAAMM,qBAAqB,GAAG;EAC5BC,MAAAA,SAAS,EAAE,IAAI,CAACN,aAAa,EAAE;EAC/BO,MAAAA,SAAS,EAAE,CAAC;EACVhb,QAAAA,IAAI,EAAE,iBAAiB;EACvBib,QAAAA,OAAO,EAAE;EACP5B,UAAAA,QAAQ,EAAE,IAAI,CAACjQ,OAAO,CAACiQ;EACzB;EACF,OAAC,EACD;EACErZ,QAAAA,IAAI,EAAE,QAAQ;EACdib,QAAAA,OAAO,EAAE;EACP1D,UAAAA,MAAM,EAAE,IAAI,CAACqD,UAAU;EACzB;SACD;OACF;;EAED;MACA,IAAI,IAAI,CAACf,SAAS,IAAI,IAAI,CAACzQ,OAAO,CAACkQ,OAAO,KAAK,QAAQ,EAAE;QACvDrS,WAAW,CAACC,gBAAgB,CAAC,IAAI,CAAC0S,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7DkB,qBAAqB,CAACE,SAAS,GAAG,CAAC;EACjChb,QAAAA,IAAI,EAAE,aAAa;EACnBkb,QAAAA,OAAO,EAAE;EACX,OAAC,CAAC;EACJ;MAEA,OAAO;EACL,MAAA,GAAGJ,qBAAqB;EACxB,MAAA,GAAGva,OAAO,CAAC,IAAI,CAAC6I,OAAO,CAACmQ,YAAY,EAAE,CAAC7d,SAAS,EAAEof,qBAAqB,CAAC;OACzE;EACH;EAEAK,EAAAA,eAAeA,CAAC;MAAEnhB,GAAG;EAAEkH,IAAAA;EAAO,GAAC,EAAE;MAC/B,MAAMiR,KAAK,GAAG7H,cAAc,CAACxG,IAAI,CAAC6U,sBAAsB,EAAE,IAAI,CAACiB,KAAK,CAAC,CAAClS,MAAM,CAAC3N,OAAO,IAAI0D,SAAS,CAAC1D,OAAO,CAAC,CAAC;EAE3G,IAAA,IAAI,CAACoY,KAAK,CAAC5U,MAAM,EAAE;EACjB,MAAA;EACF;;EAEA;EACA;MACA8D,oBAAoB,CAAC8Q,KAAK,EAAEjR,MAAM,EAAElH,GAAG,KAAK8d,gBAAc,EAAE,CAAC3F,KAAK,CAAClN,QAAQ,CAAC/D,MAAM,CAAC,CAAC,CAAC+Y,KAAK,EAAE;EAC9F;;EAEA;IACA,OAAO7Z,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGiN,QAAQ,CAAC3P,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEvD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB,KAAC,CAAC;EACJ;IAEA,OAAOiT,UAAUA,CAACvY,KAAK,EAAE;EACvB,IAAA,IAAIA,KAAK,CAACkK,MAAM,KAAKgL,kBAAkB,IAAKlV,KAAK,CAACM,IAAI,KAAK,OAAO,IAAIN,KAAK,CAAC7I,GAAG,KAAK4d,SAAQ,EAAE;EAC5F,MAAA;EACF;EAEA,IAAA,MAAMyD,WAAW,GAAG/Q,cAAc,CAACxG,IAAI,CAACyU,0BAA0B,CAAC;EAEnE,IAAA,KAAK,MAAMzL,MAAM,IAAIuO,WAAW,EAAE;EAChC,MAAA,MAAMC,OAAO,GAAG7B,QAAQ,CAAC5P,WAAW,CAACiD,MAAM,CAAC;QAC5C,IAAI,CAACwO,OAAO,IAAIA,OAAO,CAAClS,OAAO,CAACgQ,SAAS,KAAK,KAAK,EAAE;EACnD,QAAA;EACF;EAEA,MAAA,MAAMmC,YAAY,GAAG1Y,KAAK,CAAC0Y,YAAY,EAAE;QACzC,MAAMC,YAAY,GAAGD,YAAY,CAACtW,QAAQ,CAACqW,OAAO,CAAC1B,KAAK,CAAC;EACzD,MAAA,IACE2B,YAAY,CAACtW,QAAQ,CAACqW,OAAO,CAACnS,QAAQ,CAAC,IACtCmS,OAAO,CAAClS,OAAO,CAACgQ,SAAS,KAAK,QAAQ,IAAI,CAACoC,YAAa,IACxDF,OAAO,CAAClS,OAAO,CAACgQ,SAAS,KAAK,SAAS,IAAIoC,YAAa,EACzD;EACA,QAAA;EACF;;EAEA;EACA,MAAA,IAAIF,OAAO,CAAC1B,KAAK,CAACvb,QAAQ,CAACwE,KAAK,CAAC3B,MAAM,CAAC,KAAM2B,KAAK,CAACM,IAAI,KAAK,OAAO,IAAIN,KAAK,CAAC7I,GAAG,KAAK4d,SAAO,IAAK,oCAAoC,CAAC9O,IAAI,CAACjG,KAAK,CAAC3B,MAAM,CAAC4K,OAAO,CAAC,CAAC,EAAE;EAClK,QAAA;EACF;EAEA,MAAA,MAAMvH,aAAa,GAAG;UAAEA,aAAa,EAAE+W,OAAO,CAACnS;SAAU;EAEzD,MAAA,IAAItG,KAAK,CAACM,IAAI,KAAK,OAAO,EAAE;UAC1BoB,aAAa,CAACsH,UAAU,GAAGhJ,KAAK;EAClC;EAEAyY,MAAAA,OAAO,CAACpB,aAAa,CAAC3V,aAAa,CAAC;EACtC;EACF;IAEA,OAAOkX,qBAAqBA,CAAC5Y,KAAK,EAAE;EAClC;EACA;;MAEA,MAAM6Y,OAAO,GAAG,iBAAiB,CAAC5S,IAAI,CAACjG,KAAK,CAAC3B,MAAM,CAAC4K,OAAO,CAAC;EAC5D,IAAA,MAAM6P,aAAa,GAAG9Y,KAAK,CAAC7I,GAAG,KAAK2d,YAAU;EAC9C,IAAA,MAAMiE,eAAe,GAAG,CAAC/D,cAAY,EAAEC,gBAAc,CAAC,CAAC7S,QAAQ,CAACpC,KAAK,CAAC7I,GAAG,CAAC;EAE1E,IAAA,IAAI,CAAC4hB,eAAe,IAAI,CAACD,aAAa,EAAE;EACtC,MAAA;EACF;EAEA,IAAA,IAAID,OAAO,IAAI,CAACC,aAAa,EAAE;EAC7B,MAAA;EACF;MAEA9Y,KAAK,CAACuD,cAAc,EAAE;;EAEtB;MACA,MAAMyV,eAAe,GAAG,IAAI,CAACjR,OAAO,CAAC+B,sBAAoB,CAAC,GACxD,IAAI,GACHrC,cAAc,CAACS,IAAI,CAAC,IAAI,EAAE4B,sBAAoB,CAAC,CAAC,CAAC,CAAC,IACjDrC,cAAc,CAACY,IAAI,CAAC,IAAI,EAAEyB,sBAAoB,CAAC,CAAC,CAAC,CAAC,IAClDrC,cAAc,CAACG,OAAO,CAACkC,sBAAoB,EAAE9J,KAAK,CAACE,cAAc,CAAC/E,UAAU,CAAE;EAElF,IAAA,MAAM/D,QAAQ,GAAGwf,QAAQ,CAAC3P,mBAAmB,CAAC+R,eAAe,CAAC;EAE9D,IAAA,IAAID,eAAe,EAAE;QACnB/Y,KAAK,CAACiZ,eAAe,EAAE;QACvB7hB,QAAQ,CAAC4b,IAAI,EAAE;EACf5b,MAAAA,QAAQ,CAACkhB,eAAe,CAACtY,KAAK,CAAC;EAC/B,MAAA;EACF;EAEA,IAAA,IAAI5I,QAAQ,CAAC0b,QAAQ,EAAE,EAAE;EAAE;QACzB9S,KAAK,CAACiZ,eAAe,EAAE;QACvB7hB,QAAQ,CAAC2b,IAAI,EAAE;QACfiG,eAAe,CAAC5B,KAAK,EAAE;EACzB;EACF;EACF;;EAEA;EACA;EACA;;EAEAhX,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAE2b,sBAAsB,EAAErL,sBAAoB,EAAE8M,QAAQ,CAACgC,qBAAqB,CAAC;EACvGxY,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAE2b,sBAAsB,EAAEQ,aAAa,EAAEiB,QAAQ,CAACgC,qBAAqB,CAAC;EAChGxY,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAE6M,QAAQ,CAAC2B,UAAU,CAAC;EACpEnY,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAE4b,oBAAoB,EAAEwB,QAAQ,CAAC2B,UAAU,CAAC;EACpEnY,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAED,sBAAoB,EAAE,UAAU9J,KAAK,EAAE;IACrFA,KAAK,CAACuD,cAAc,EAAE;IACtBqT,QAAQ,CAAC3P,mBAAmB,CAAC,IAAI,CAAC,CAACgD,MAAM,EAAE;EAC7C,CAAC,CAAC;;EAEF;EACA;EACA;;EAEAjN,kBAAkB,CAAC4Z,QAAQ,CAAC;;ECvc5B;EACA;EACA;EACA;EACA;EACA;;;EAQA;EACA;EACA;;EAEA,MAAMxZ,MAAI,GAAG,UAAU;EACvB,MAAMgM,iBAAe,GAAG,MAAM;EAC9B,MAAMC,iBAAe,GAAG,MAAM;EAC9B,MAAM6P,eAAe,GAAG,CAAgB9b,aAAAA,EAAAA,MAAI,CAAE,CAAA;EAE9C,MAAM8H,SAAO,GAAG;EACdiU,EAAAA,SAAS,EAAE,gBAAgB;EAC3BC,EAAAA,aAAa,EAAE,IAAI;EACnBrS,EAAAA,UAAU,EAAE,KAAK;EACjBnM,EAAAA,SAAS,EAAE,IAAI;EAAE;IACjBye,WAAW,EAAE,MAAM;EACrB,CAAC;EAED,MAAMlU,aAAW,GAAG;EAClBgU,EAAAA,SAAS,EAAE,QAAQ;EACnBC,EAAAA,aAAa,EAAE,iBAAiB;EAChCrS,EAAAA,UAAU,EAAE,SAAS;EACrBnM,EAAAA,SAAS,EAAE,SAAS;EACpBye,EAAAA,WAAW,EAAE;EACf,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,QAAQ,SAASrU,MAAM,CAAC;IAC5BU,WAAWA,CAACL,MAAM,EAAE;EAClB,IAAA,KAAK,EAAE;MACP,IAAI,CAACiB,OAAO,GAAG,IAAI,CAAClB,UAAU,CAACC,MAAM,CAAC;MACtC,IAAI,CAACiU,WAAW,GAAG,KAAK;MACxB,IAAI,CAACjT,QAAQ,GAAG,IAAI;EACtB;;EAEA;IACA,WAAWpB,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;IACA4V,IAAIA,CAACtW,QAAQ,EAAE;EACb,IAAA,IAAI,CAAC,IAAI,CAAC6J,OAAO,CAAC3L,SAAS,EAAE;QAC3B8C,OAAO,CAAChB,QAAQ,CAAC;EACjB,MAAA;EACF;MAEA,IAAI,CAAC8c,OAAO,EAAE;EAEd,IAAA,MAAMtiB,OAAO,GAAG,IAAI,CAACuiB,WAAW,EAAE;EAClC,IAAA,IAAI,IAAI,CAAClT,OAAO,CAACQ,UAAU,EAAE;QAC3B5K,MAAM,CAACjF,OAAO,CAAC;EACjB;EAEAA,IAAAA,OAAO,CAACqE,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;MAEtC,IAAI,CAACqQ,iBAAiB,CAAC,MAAM;QAC3Bhc,OAAO,CAAChB,QAAQ,CAAC;EACnB,KAAC,CAAC;EACJ;IAEAqW,IAAIA,CAACrW,QAAQ,EAAE;EACb,IAAA,IAAI,CAAC,IAAI,CAAC6J,OAAO,CAAC3L,SAAS,EAAE;QAC3B8C,OAAO,CAAChB,QAAQ,CAAC;EACjB,MAAA;EACF;MAEA,IAAI,CAAC+c,WAAW,EAAE,CAACle,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;MAEpD,IAAI,CAACqQ,iBAAiB,CAAC,MAAM;QAC3B,IAAI,CAAChT,OAAO,EAAE;QACdhJ,OAAO,CAAChB,QAAQ,CAAC;EACnB,KAAC,CAAC;EACJ;EAEAgK,EAAAA,OAAOA,GAAG;EACR,IAAA,IAAI,CAAC,IAAI,CAAC6S,WAAW,EAAE;EACrB,MAAA;EACF;MAEAnZ,YAAY,CAACC,GAAG,CAAC,IAAI,CAACiG,QAAQ,EAAE4S,eAAe,CAAC;EAEhD,IAAA,IAAI,CAAC5S,QAAQ,CAACxO,MAAM,EAAE;MACtB,IAAI,CAACyhB,WAAW,GAAG,KAAK;EAC1B;;EAEA;EACAE,EAAAA,WAAWA,GAAG;EACZ,IAAA,IAAI,CAAC,IAAI,CAACnT,QAAQ,EAAE;EAClB,MAAA,MAAMqT,QAAQ,GAAGngB,QAAQ,CAACogB,aAAa,CAAC,KAAK,CAAC;EAC9CD,MAAAA,QAAQ,CAACR,SAAS,GAAG,IAAI,CAAC5S,OAAO,CAAC4S,SAAS;EAC3C,MAAA,IAAI,IAAI,CAAC5S,OAAO,CAACQ,UAAU,EAAE;EAC3B4S,QAAAA,QAAQ,CAACpe,SAAS,CAACwQ,GAAG,CAAC3C,iBAAe,CAAC;EACzC;QAEA,IAAI,CAAC9C,QAAQ,GAAGqT,QAAQ;EAC1B;MAEA,OAAO,IAAI,CAACrT,QAAQ;EACtB;IAEAd,iBAAiBA,CAACF,MAAM,EAAE;EACxB;MACAA,MAAM,CAAC+T,WAAW,GAAG5e,UAAU,CAAC6K,MAAM,CAAC+T,WAAW,CAAC;EACnD,IAAA,OAAO/T,MAAM;EACf;EAEAkU,EAAAA,OAAOA,GAAG;MACR,IAAI,IAAI,CAACD,WAAW,EAAE;EACpB,MAAA;EACF;EAEA,IAAA,MAAMriB,OAAO,GAAG,IAAI,CAACuiB,WAAW,EAAE;MAClC,IAAI,CAAClT,OAAO,CAAC8S,WAAW,CAACQ,MAAM,CAAC3iB,OAAO,CAAC;EAExCkJ,IAAAA,YAAY,CAACiC,EAAE,CAACnL,OAAO,EAAEgiB,eAAe,EAAE,MAAM;EAC9Cxb,MAAAA,OAAO,CAAC,IAAI,CAAC6I,OAAO,CAAC6S,aAAa,CAAC;EACrC,KAAC,CAAC;MAEF,IAAI,CAACG,WAAW,GAAG,IAAI;EACzB;IAEAG,iBAAiBA,CAAChd,QAAQ,EAAE;EAC1BoB,IAAAA,sBAAsB,CAACpB,QAAQ,EAAE,IAAI,CAAC+c,WAAW,EAAE,EAAE,IAAI,CAAClT,OAAO,CAACQ,UAAU,CAAC;EAC/E;EACF;;ECpJA;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAM3J,MAAI,GAAG,WAAW;EACxB,MAAMqJ,UAAQ,GAAG,cAAc;EAC/B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMqT,eAAa,GAAG,CAAUnT,OAAAA,EAAAA,WAAS,CAAE,CAAA;EAC3C,MAAMoT,iBAAiB,GAAG,CAAcpT,WAAAA,EAAAA,WAAS,CAAE,CAAA;EAEnD,MAAMoO,OAAO,GAAG,KAAK;EACrB,MAAMiF,eAAe,GAAG,SAAS;EACjC,MAAMC,gBAAgB,GAAG,UAAU;EAEnC,MAAM/U,SAAO,GAAG;EACdgV,EAAAA,SAAS,EAAE,IAAI;IACfC,WAAW,EAAE,IAAI;EACnB,CAAC;EAED,MAAMhV,aAAW,GAAG;EAClB+U,EAAAA,SAAS,EAAE,SAAS;EACpBC,EAAAA,WAAW,EAAE;EACf,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,SAAS,SAASnV,MAAM,CAAC;IAC7BU,WAAWA,CAACL,MAAM,EAAE;EAClB,IAAA,KAAK,EAAE;MACP,IAAI,CAACiB,OAAO,GAAG,IAAI,CAAClB,UAAU,CAACC,MAAM,CAAC;MACtC,IAAI,CAAC+U,SAAS,GAAG,KAAK;MACtB,IAAI,CAACC,oBAAoB,GAAG,IAAI;EAClC;;EAEA;IACA,WAAWpV,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAmd,EAAAA,QAAQA,GAAG;MACT,IAAI,IAAI,CAACF,SAAS,EAAE;EAClB,MAAA;EACF;EAEA,IAAA,IAAI,IAAI,CAAC9T,OAAO,CAAC2T,SAAS,EAAE;EAC1B,MAAA,IAAI,CAAC3T,OAAO,CAAC4T,WAAW,CAAC/C,KAAK,EAAE;EAClC;EAEAhX,IAAAA,YAAY,CAACC,GAAG,CAAC7G,QAAQ,EAAEmN,WAAS,CAAC,CAAC;EACtCvG,IAAAA,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEsgB,eAAa,EAAE9Z,KAAK,IAAI,IAAI,CAACwa,cAAc,CAACxa,KAAK,CAAC,CAAC;EAC7EI,IAAAA,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEugB,iBAAiB,EAAE/Z,KAAK,IAAI,IAAI,CAACya,cAAc,CAACza,KAAK,CAAC,CAAC;MAEjF,IAAI,CAACqa,SAAS,GAAG,IAAI;EACvB;EAEAK,EAAAA,UAAUA,GAAG;EACX,IAAA,IAAI,CAAC,IAAI,CAACL,SAAS,EAAE;EACnB,MAAA;EACF;MAEA,IAAI,CAACA,SAAS,GAAG,KAAK;EACtBja,IAAAA,YAAY,CAACC,GAAG,CAAC7G,QAAQ,EAAEmN,WAAS,CAAC;EACvC;;EAEA;IACA6T,cAAcA,CAACxa,KAAK,EAAE;MACpB,MAAM;EAAEma,MAAAA;OAAa,GAAG,IAAI,CAAC5T,OAAO;MAEpC,IAAIvG,KAAK,CAAC3B,MAAM,KAAK7E,QAAQ,IAAIwG,KAAK,CAAC3B,MAAM,KAAK8b,WAAW,IAAIA,WAAW,CAAC3e,QAAQ,CAACwE,KAAK,CAAC3B,MAAM,CAAC,EAAE;EACnG,MAAA;EACF;EAEA,IAAA,MAAMsc,QAAQ,GAAGlT,cAAc,CAACc,iBAAiB,CAAC4R,WAAW,CAAC;EAE9D,IAAA,IAAIQ,QAAQ,CAACjgB,MAAM,KAAK,CAAC,EAAE;QACzByf,WAAW,CAAC/C,KAAK,EAAE;EACrB,KAAC,MAAM,IAAI,IAAI,CAACkD,oBAAoB,KAAKL,gBAAgB,EAAE;QACzDU,QAAQ,CAACA,QAAQ,CAACjgB,MAAM,GAAG,CAAC,CAAC,CAAC0c,KAAK,EAAE;EACvC,KAAC,MAAM;EACLuD,MAAAA,QAAQ,CAAC,CAAC,CAAC,CAACvD,KAAK,EAAE;EACrB;EACF;IAEAqD,cAAcA,CAACza,KAAK,EAAE;EACpB,IAAA,IAAIA,KAAK,CAAC7I,GAAG,KAAK4d,OAAO,EAAE;EACzB,MAAA;EACF;MAEA,IAAI,CAACuF,oBAAoB,GAAGta,KAAK,CAAC4a,QAAQ,GAAGX,gBAAgB,GAAGD,eAAe;EACjF;EACF;;EChHA;EACA;EACA;EACA;EACA;EACA;;;EAMA;EACA;EACA;;EAEA,MAAMa,sBAAsB,GAAG,mDAAmD;EAClF,MAAMC,uBAAuB,GAAG,aAAa;EAC7C,MAAMC,gBAAgB,GAAG,eAAe;EACxC,MAAMC,eAAe,GAAG,cAAc;;EAEtC;EACA;EACA;;EAEA,MAAMC,eAAe,CAAC;EACpBtV,EAAAA,WAAWA,GAAG;EACZ,IAAA,IAAI,CAACW,QAAQ,GAAG9M,QAAQ,CAAC+C,IAAI;EAC/B;;EAEA;EACA2e,EAAAA,QAAQA,GAAG;EACT;EACA,IAAA,MAAMC,aAAa,GAAG3hB,QAAQ,CAACqC,eAAe,CAACuf,WAAW;MAC1D,OAAO/hB,IAAI,CAACwS,GAAG,CAACxT,MAAM,CAACgjB,UAAU,GAAGF,aAAa,CAAC;EACpD;EAEApI,EAAAA,IAAIA,GAAG;EACL,IAAA,MAAMuI,KAAK,GAAG,IAAI,CAACJ,QAAQ,EAAE;MAC7B,IAAI,CAACK,gBAAgB,EAAE;EACvB;EACA,IAAA,IAAI,CAACC,qBAAqB,CAAC,IAAI,CAAClV,QAAQ,EAAEyU,gBAAgB,EAAEU,eAAe,IAAIA,eAAe,GAAGH,KAAK,CAAC;EACvG;EACA,IAAA,IAAI,CAACE,qBAAqB,CAACX,sBAAsB,EAAEE,gBAAgB,EAAEU,eAAe,IAAIA,eAAe,GAAGH,KAAK,CAAC;EAChH,IAAA,IAAI,CAACE,qBAAqB,CAACV,uBAAuB,EAAEE,eAAe,EAAES,eAAe,IAAIA,eAAe,GAAGH,KAAK,CAAC;EAClH;EAEAI,EAAAA,KAAKA,GAAG;MACN,IAAI,CAACC,uBAAuB,CAAC,IAAI,CAACrV,QAAQ,EAAE,UAAU,CAAC;MACvD,IAAI,CAACqV,uBAAuB,CAAC,IAAI,CAACrV,QAAQ,EAAEyU,gBAAgB,CAAC;EAC7D,IAAA,IAAI,CAACY,uBAAuB,CAACd,sBAAsB,EAAEE,gBAAgB,CAAC;EACtE,IAAA,IAAI,CAACY,uBAAuB,CAACb,uBAAuB,EAAEE,eAAe,CAAC;EACxE;EAEAY,EAAAA,aAAaA,GAAG;EACd,IAAA,OAAO,IAAI,CAACV,QAAQ,EAAE,GAAG,CAAC;EAC5B;;EAEA;EACAK,EAAAA,gBAAgBA,GAAG;MACjB,IAAI,CAACM,qBAAqB,CAAC,IAAI,CAACvV,QAAQ,EAAE,UAAU,CAAC;EACrD,IAAA,IAAI,CAACA,QAAQ,CAACiN,KAAK,CAACuI,QAAQ,GAAG,QAAQ;EACzC;EAEAN,EAAAA,qBAAqBA,CAACpjB,QAAQ,EAAE2jB,aAAa,EAAErf,QAAQ,EAAE;EACvD,IAAA,MAAMsf,cAAc,GAAG,IAAI,CAACd,QAAQ,EAAE;MACtC,MAAMe,oBAAoB,GAAG/kB,OAAO,IAAI;EACtC,MAAA,IAAIA,OAAO,KAAK,IAAI,CAACoP,QAAQ,IAAIjO,MAAM,CAACgjB,UAAU,GAAGnkB,OAAO,CAACkkB,WAAW,GAAGY,cAAc,EAAE;EACzF,QAAA;EACF;EAEA,MAAA,IAAI,CAACH,qBAAqB,CAAC3kB,OAAO,EAAE6kB,aAAa,CAAC;EAClD,MAAA,MAAMN,eAAe,GAAGpjB,MAAM,CAACwB,gBAAgB,CAAC3C,OAAO,CAAC,CAAC6D,gBAAgB,CAACghB,aAAa,CAAC;EACxF7kB,MAAAA,OAAO,CAACqc,KAAK,CAAC2I,WAAW,CAACH,aAAa,EAAE,CAAGrf,EAAAA,QAAQ,CAAC3C,MAAM,CAACC,UAAU,CAACyhB,eAAe,CAAC,CAAC,IAAI,CAAC;OAC9F;EAED,IAAA,IAAI,CAACU,0BAA0B,CAAC/jB,QAAQ,EAAE6jB,oBAAoB,CAAC;EACjE;EAEAJ,EAAAA,qBAAqBA,CAAC3kB,OAAO,EAAE6kB,aAAa,EAAE;MAC5C,MAAMK,WAAW,GAAGllB,OAAO,CAACqc,KAAK,CAACxY,gBAAgB,CAACghB,aAAa,CAAC;EACjE,IAAA,IAAIK,WAAW,EAAE;QACfhY,WAAW,CAACC,gBAAgB,CAACnN,OAAO,EAAE6kB,aAAa,EAAEK,WAAW,CAAC;EACnE;EACF;EAEAT,EAAAA,uBAAuBA,CAACvjB,QAAQ,EAAE2jB,aAAa,EAAE;MAC/C,MAAME,oBAAoB,GAAG/kB,OAAO,IAAI;QACtC,MAAMwM,KAAK,GAAGU,WAAW,CAACY,gBAAgB,CAAC9N,OAAO,EAAE6kB,aAAa,CAAC;EAClE;QACA,IAAIrY,KAAK,KAAK,IAAI,EAAE;EAClBxM,QAAAA,OAAO,CAACqc,KAAK,CAAC8I,cAAc,CAACN,aAAa,CAAC;EAC3C,QAAA;EACF;EAEA3X,MAAAA,WAAW,CAACG,mBAAmB,CAACrN,OAAO,EAAE6kB,aAAa,CAAC;QACvD7kB,OAAO,CAACqc,KAAK,CAAC2I,WAAW,CAACH,aAAa,EAAErY,KAAK,CAAC;OAChD;EAED,IAAA,IAAI,CAACyY,0BAA0B,CAAC/jB,QAAQ,EAAE6jB,oBAAoB,CAAC;EACjE;EAEAE,EAAAA,0BAA0BA,CAAC/jB,QAAQ,EAAEkkB,QAAQ,EAAE;EAC7C,IAAA,IAAIhiB,WAAS,CAAClC,QAAQ,CAAC,EAAE;QACvBkkB,QAAQ,CAAClkB,QAAQ,CAAC;EAClB,MAAA;EACF;EAEA,IAAA,KAAK,MAAMmP,GAAG,IAAIE,cAAc,CAACxG,IAAI,CAAC7I,QAAQ,EAAE,IAAI,CAACkO,QAAQ,CAAC,EAAE;QAC9DgW,QAAQ,CAAC/U,GAAG,CAAC;EACf;EACF;EACF;;EC/GA;EACA;EACA;EACA;EACA;EACA;;;EAaA;EACA;EACA;;EAEA,MAAMnK,MAAI,GAAG,OAAO;EACpB,MAAMqJ,UAAQ,GAAG,UAAU;EAC3B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAChC,MAAMkL,YAAU,GAAG,QAAQ;EAE3B,MAAMpD,YAAU,GAAG,CAAO/K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM4V,sBAAoB,GAAG,CAAgB5V,aAAAA,EAAAA,WAAS,CAAE,CAAA;EACxD,MAAMgL,cAAY,GAAG,CAAShL,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAM6K,YAAU,GAAG,CAAO7K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM8K,aAAW,GAAG,CAAQ9K,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAM6V,cAAY,GAAG,CAAS7V,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAM8V,mBAAmB,GAAG,CAAgB9V,aAAAA,EAAAA,WAAS,CAAE,CAAA;EACvD,MAAM+V,uBAAuB,GAAG,CAAoB/V,iBAAAA,EAAAA,WAAS,CAAE,CAAA;EAC/D,MAAMgW,uBAAqB,GAAG,CAAkBhW,eAAAA,EAAAA,WAAS,CAAE,CAAA;EAC3D,MAAMoD,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAE/D,MAAMgT,eAAe,GAAG,YAAY;EACpC,MAAMxT,iBAAe,GAAG,MAAM;EAC9B,MAAMC,iBAAe,GAAG,MAAM;EAC9B,MAAMwT,iBAAiB,GAAG,cAAc;EAExC,MAAMC,eAAa,GAAG,aAAa;EACnC,MAAMC,eAAe,GAAG,eAAe;EACvC,MAAMC,mBAAmB,GAAG,aAAa;EACzC,MAAMlT,sBAAoB,GAAG,0BAA0B;EAEvD,MAAM5E,SAAO,GAAG;EACdyU,EAAAA,QAAQ,EAAE,IAAI;EACdvC,EAAAA,KAAK,EAAE,IAAI;EACXpJ,EAAAA,QAAQ,EAAE;EACZ,CAAC;EAED,MAAM7I,aAAW,GAAG;EAClBwU,EAAAA,QAAQ,EAAE,kBAAkB;EAC5BvC,EAAAA,KAAK,EAAE,SAAS;EAChBpJ,EAAAA,QAAQ,EAAE;EACZ,CAAC;;EAED;EACA;EACA;;EAEA,MAAMiP,KAAK,SAAS5W,aAAa,CAAC;EAChCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;EAEtB,IAAA,IAAI,CAAC4X,OAAO,GAAGzV,cAAc,CAACG,OAAO,CAACmV,eAAe,EAAE,IAAI,CAACzW,QAAQ,CAAC;EACrE,IAAA,IAAI,CAAC6W,SAAS,GAAG,IAAI,CAACC,mBAAmB,EAAE;EAC3C,IAAA,IAAI,CAACC,UAAU,GAAG,IAAI,CAACC,oBAAoB,EAAE;MAC7C,IAAI,CAACxK,QAAQ,GAAG,KAAK;MACrB,IAAI,CAACR,gBAAgB,GAAG,KAAK;EAC7B,IAAA,IAAI,CAACiL,UAAU,GAAG,IAAItC,eAAe,EAAE;MAEvC,IAAI,CAACrM,kBAAkB,EAAE;EAC3B;;EAEA;IACA,WAAW1J,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;IACA6M,MAAMA,CAACvI,aAAa,EAAE;EACpB,IAAA,OAAO,IAAI,CAACoR,QAAQ,GAAG,IAAI,CAACC,IAAI,EAAE,GAAG,IAAI,CAACC,IAAI,CAACtR,aAAa,CAAC;EAC/D;IAEAsR,IAAIA,CAACtR,aAAa,EAAE;EAClB,IAAA,IAAI,IAAI,CAACoR,QAAQ,IAAI,IAAI,CAACR,gBAAgB,EAAE;EAC1C,MAAA;EACF;MAEA,MAAM4E,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEkL,YAAU,EAAE;EAChE9P,MAAAA;EACF,KAAC,CAAC;MAEF,IAAIwV,SAAS,CAACjU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,IAAI,CAAC6P,QAAQ,GAAG,IAAI;MACpB,IAAI,CAACR,gBAAgB,GAAG,IAAI;EAE5B,IAAA,IAAI,CAACiL,UAAU,CAACxK,IAAI,EAAE;MAEtBvZ,QAAQ,CAAC+C,IAAI,CAAChB,SAAS,CAACwQ,GAAG,CAAC6Q,eAAe,CAAC;MAE5C,IAAI,CAACY,aAAa,EAAE;EAEpB,IAAA,IAAI,CAACL,SAAS,CAACnK,IAAI,CAAC,MAAM,IAAI,CAACyK,YAAY,CAAC/b,aAAa,CAAC,CAAC;EAC7D;EAEAqR,EAAAA,IAAIA,GAAG;MACL,IAAI,CAAC,IAAI,CAACD,QAAQ,IAAI,IAAI,CAACR,gBAAgB,EAAE;EAC3C,MAAA;EACF;MAEA,MAAMkF,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEoL,YAAU,CAAC;MAEjE,IAAI8F,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,IAAI,CAAC6P,QAAQ,GAAG,KAAK;MACrB,IAAI,CAACR,gBAAgB,GAAG,IAAI;EAC5B,IAAA,IAAI,CAAC+K,UAAU,CAAC3C,UAAU,EAAE;MAE5B,IAAI,CAACpU,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;EAE/C,IAAA,IAAI,CAACvC,cAAc,CAAC,MAAM,IAAI,CAAC4W,UAAU,EAAE,EAAE,IAAI,CAACpX,QAAQ,EAAE,IAAI,CAAC6K,WAAW,EAAE,CAAC;EACjF;EAEAzK,EAAAA,OAAOA,GAAG;EACRtG,IAAAA,YAAY,CAACC,GAAG,CAAChI,MAAM,EAAEsO,WAAS,CAAC;MACnCvG,YAAY,CAACC,GAAG,CAAC,IAAI,CAAC6c,OAAO,EAAEvW,WAAS,CAAC;EAEzC,IAAA,IAAI,CAACwW,SAAS,CAACzW,OAAO,EAAE;EACxB,IAAA,IAAI,CAAC2W,UAAU,CAAC3C,UAAU,EAAE;MAE5B,KAAK,CAAChU,OAAO,EAAE;EACjB;EAEAiX,EAAAA,YAAYA,GAAG;MACb,IAAI,CAACH,aAAa,EAAE;EACtB;;EAEA;EACAJ,EAAAA,mBAAmBA,GAAG;MACpB,OAAO,IAAI9D,QAAQ,CAAC;QAClB1e,SAAS,EAAEkH,OAAO,CAAC,IAAI,CAACyE,OAAO,CAACoT,QAAQ,CAAC;EAAE;EAC3C5S,MAAAA,UAAU,EAAE,IAAI,CAACoK,WAAW;EAC9B,KAAC,CAAC;EACJ;EAEAmM,EAAAA,oBAAoBA,GAAG;MACrB,OAAO,IAAIlD,SAAS,CAAC;QACnBD,WAAW,EAAE,IAAI,CAAC7T;EACpB,KAAC,CAAC;EACJ;IAEAmX,YAAYA,CAAC/b,aAAa,EAAE;EAC1B;MACA,IAAI,CAAClI,QAAQ,CAAC+C,IAAI,CAACf,QAAQ,CAAC,IAAI,CAAC8K,QAAQ,CAAC,EAAE;QAC1C9M,QAAQ,CAAC+C,IAAI,CAACsd,MAAM,CAAC,IAAI,CAACvT,QAAQ,CAAC;EACrC;EAEA,IAAA,IAAI,CAACA,QAAQ,CAACiN,KAAK,CAACkD,OAAO,GAAG,OAAO;EACrC,IAAA,IAAI,CAACnQ,QAAQ,CAAC9B,eAAe,CAAC,aAAa,CAAC;MAC5C,IAAI,CAAC8B,QAAQ,CAAChC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC;MAC9C,IAAI,CAACgC,QAAQ,CAAChC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;EAC5C,IAAA,IAAI,CAACgC,QAAQ,CAACsX,SAAS,GAAG,CAAC;MAE3B,MAAMC,SAAS,GAAGpW,cAAc,CAACG,OAAO,CAACoV,mBAAmB,EAAE,IAAI,CAACE,OAAO,CAAC;EAC3E,IAAA,IAAIW,SAAS,EAAE;QACbA,SAAS,CAACD,SAAS,GAAG,CAAC;EACzB;EAEAzhB,IAAAA,MAAM,CAAC,IAAI,CAACmK,QAAQ,CAAC;MAErB,IAAI,CAACA,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;MAE5C,MAAMyU,kBAAkB,GAAGA,MAAM;EAC/B,MAAA,IAAI,IAAI,CAACvX,OAAO,CAAC6Q,KAAK,EAAE;EACtB,QAAA,IAAI,CAACiG,UAAU,CAAC9C,QAAQ,EAAE;EAC5B;QAEA,IAAI,CAACjI,gBAAgB,GAAG,KAAK;QAC7BlS,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEmL,aAAW,EAAE;EAC/C/P,QAAAA;EACF,OAAC,CAAC;OACH;EAED,IAAA,IAAI,CAACoF,cAAc,CAACgX,kBAAkB,EAAE,IAAI,CAACZ,OAAO,EAAE,IAAI,CAAC/L,WAAW,EAAE,CAAC;EAC3E;EAEAvC,EAAAA,kBAAkBA,GAAG;MACnBxO,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEqW,uBAAqB,EAAE3c,KAAK,IAAI;EAC7D,MAAA,IAAIA,KAAK,CAAC7I,GAAG,KAAK2d,YAAU,EAAE;EAC5B,QAAA;EACF;EAEA,MAAA,IAAI,IAAI,CAACvO,OAAO,CAACyH,QAAQ,EAAE;UACzB,IAAI,CAAC+E,IAAI,EAAE;EACX,QAAA;EACF;QAEA,IAAI,CAACgL,0BAA0B,EAAE;EACnC,KAAC,CAAC;EAEF3d,IAAAA,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAEmkB,cAAY,EAAE,MAAM;QAC1C,IAAI,IAAI,CAAC1J,QAAQ,IAAI,CAAC,IAAI,CAACR,gBAAgB,EAAE;UAC3C,IAAI,CAACkL,aAAa,EAAE;EACtB;EACF,KAAC,CAAC;MAEFpd,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEoW,uBAAuB,EAAE1c,KAAK,IAAI;EAC/D;QACAI,YAAY,CAACkC,GAAG,CAAC,IAAI,CAACgE,QAAQ,EAAEmW,mBAAmB,EAAEuB,MAAM,IAAI;EAC7D,QAAA,IAAI,IAAI,CAAC1X,QAAQ,KAAKtG,KAAK,CAAC3B,MAAM,IAAI,IAAI,CAACiI,QAAQ,KAAK0X,MAAM,CAAC3f,MAAM,EAAE;EACrE,UAAA;EACF;EAEA,QAAA,IAAI,IAAI,CAACkI,OAAO,CAACoT,QAAQ,KAAK,QAAQ,EAAE;YACtC,IAAI,CAACoE,0BAA0B,EAAE;EACjC,UAAA;EACF;EAEA,QAAA,IAAI,IAAI,CAACxX,OAAO,CAACoT,QAAQ,EAAE;YACzB,IAAI,CAAC5G,IAAI,EAAE;EACb;EACF,OAAC,CAAC;EACJ,KAAC,CAAC;EACJ;EAEA2K,EAAAA,UAAUA,GAAG;EACX,IAAA,IAAI,CAACpX,QAAQ,CAACiN,KAAK,CAACkD,OAAO,GAAG,MAAM;MACpC,IAAI,CAACnQ,QAAQ,CAAChC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC;EAC/C,IAAA,IAAI,CAACgC,QAAQ,CAAC9B,eAAe,CAAC,YAAY,CAAC;EAC3C,IAAA,IAAI,CAAC8B,QAAQ,CAAC9B,eAAe,CAAC,MAAM,CAAC;MACrC,IAAI,CAAC8N,gBAAgB,GAAG,KAAK;EAE7B,IAAA,IAAI,CAAC6K,SAAS,CAACpK,IAAI,CAAC,MAAM;QACxBvZ,QAAQ,CAAC+C,IAAI,CAAChB,SAAS,CAACzD,MAAM,CAAC8kB,eAAe,CAAC;QAC/C,IAAI,CAACqB,iBAAiB,EAAE;EACxB,MAAA,IAAI,CAACV,UAAU,CAAC7B,KAAK,EAAE;QACvBtb,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEqL,cAAY,CAAC;EACnD,KAAC,CAAC;EACJ;EAEAR,EAAAA,WAAWA,GAAG;MACZ,OAAO,IAAI,CAAC7K,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAAC4N,iBAAe,CAAC;EAC1D;EAEA2U,EAAAA,0BAA0BA,GAAG;MAC3B,MAAMvG,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEiW,sBAAoB,CAAC;MAC3E,IAAI/E,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;EAEA,IAAA,MAAMib,kBAAkB,GAAG,IAAI,CAAC5X,QAAQ,CAAC6X,YAAY,GAAG3kB,QAAQ,CAACqC,eAAe,CAACuiB,YAAY;MAC7F,MAAMC,gBAAgB,GAAG,IAAI,CAAC/X,QAAQ,CAACiN,KAAK,CAAC+K,SAAS;EACtD;EACA,IAAA,IAAID,gBAAgB,KAAK,QAAQ,IAAI,IAAI,CAAC/X,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAACqhB,iBAAiB,CAAC,EAAE;EACxF,MAAA;EACF;MAEA,IAAI,CAACqB,kBAAkB,EAAE;EACvB,MAAA,IAAI,CAAC5X,QAAQ,CAACiN,KAAK,CAAC+K,SAAS,GAAG,QAAQ;EAC1C;MAEA,IAAI,CAAChY,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC8Q,iBAAiB,CAAC;MAC9C,IAAI,CAAC/V,cAAc,CAAC,MAAM;QACxB,IAAI,CAACR,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC+kB,iBAAiB,CAAC;QACjD,IAAI,CAAC/V,cAAc,CAAC,MAAM;EACxB,QAAA,IAAI,CAACR,QAAQ,CAACiN,KAAK,CAAC+K,SAAS,GAAGD,gBAAgB;EAClD,OAAC,EAAE,IAAI,CAACnB,OAAO,CAAC;EAClB,KAAC,EAAE,IAAI,CAACA,OAAO,CAAC;EAEhB,IAAA,IAAI,CAAC5W,QAAQ,CAAC8Q,KAAK,EAAE;EACvB;;EAEA;EACF;EACA;;EAEEoG,EAAAA,aAAaA,GAAG;EACd,IAAA,MAAMU,kBAAkB,GAAG,IAAI,CAAC5X,QAAQ,CAAC6X,YAAY,GAAG3kB,QAAQ,CAACqC,eAAe,CAACuiB,YAAY;MAC7F,MAAMpC,cAAc,GAAG,IAAI,CAACuB,UAAU,CAACrC,QAAQ,EAAE;EACjD,IAAA,MAAMqD,iBAAiB,GAAGvC,cAAc,GAAG,CAAC;EAE5C,IAAA,IAAIuC,iBAAiB,IAAI,CAACL,kBAAkB,EAAE;QAC5C,MAAMrY,QAAQ,GAAG/I,KAAK,EAAE,GAAG,aAAa,GAAG,cAAc;QACzD,IAAI,CAACwJ,QAAQ,CAACiN,KAAK,CAAC1N,QAAQ,CAAC,GAAG,CAAGmW,EAAAA,cAAc,CAAI,EAAA,CAAA;EACvD;EAEA,IAAA,IAAI,CAACuC,iBAAiB,IAAIL,kBAAkB,EAAE;QAC5C,MAAMrY,QAAQ,GAAG/I,KAAK,EAAE,GAAG,cAAc,GAAG,aAAa;QACzD,IAAI,CAACwJ,QAAQ,CAACiN,KAAK,CAAC1N,QAAQ,CAAC,GAAG,CAAGmW,EAAAA,cAAc,CAAI,EAAA,CAAA;EACvD;EACF;EAEAiC,EAAAA,iBAAiBA,GAAG;EAClB,IAAA,IAAI,CAAC3X,QAAQ,CAACiN,KAAK,CAACiL,WAAW,GAAG,EAAE;EACpC,IAAA,IAAI,CAAClY,QAAQ,CAACiN,KAAK,CAACkL,YAAY,GAAG,EAAE;EACvC;;EAEA;EACA,EAAA,OAAOlhB,eAAeA,CAAC+H,MAAM,EAAE5D,aAAa,EAAE;EAC5C,IAAA,OAAO,IAAI,CAACgI,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGsT,KAAK,CAAChW,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEpD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,CAAC5D,aAAa,CAAC;EAC7B,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAtB,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAED,sBAAoB,EAAE,UAAU9J,KAAK,EAAE;EACrF,EAAA,MAAM3B,MAAM,GAAGoJ,cAAc,CAACkB,sBAAsB,CAAC,IAAI,CAAC;EAE1D,EAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACvG,QAAQ,CAAC,IAAI,CAAC6G,OAAO,CAAC,EAAE;MACxCjJ,KAAK,CAACuD,cAAc,EAAE;EACxB;IAEAnD,YAAY,CAACkC,GAAG,CAACjE,MAAM,EAAEmT,YAAU,EAAE0F,SAAS,IAAI;MAChD,IAAIA,SAAS,CAACjU,gBAAgB,EAAE;EAC9B;EACA,MAAA;EACF;EAEA7C,IAAAA,YAAY,CAACkC,GAAG,CAACjE,MAAM,EAAEsT,cAAY,EAAE,MAAM;EAC3C,MAAA,IAAI/W,SAAS,CAAC,IAAI,CAAC,EAAE;UACnB,IAAI,CAACwc,KAAK,EAAE;EACd;EACF,KAAC,CAAC;EACJ,GAAC,CAAC;;EAEF;EACA,EAAA,MAAMsH,WAAW,GAAGjX,cAAc,CAACG,OAAO,CAACkV,eAAa,CAAC;EACzD,EAAA,IAAI4B,WAAW,EAAE;MACfzB,KAAK,CAACjW,WAAW,CAAC0X,WAAW,CAAC,CAAC3L,IAAI,EAAE;EACvC;EAEA,EAAA,MAAMpJ,IAAI,GAAGsT,KAAK,CAAChW,mBAAmB,CAAC5I,MAAM,CAAC;EAE9CsL,EAAAA,IAAI,CAACM,MAAM,CAAC,IAAI,CAAC;EACnB,CAAC,CAAC;EAEFpB,oBAAoB,CAACoU,KAAK,CAAC;;EAE3B;EACA;EACA;;EAEAjgB,kBAAkB,CAACigB,KAAK,CAAC;;ECvXzB;EACA;EACA;EACA;EACA;EACA;;;EAeA;EACA;EACA;;EAEA,MAAM7f,MAAI,GAAG,WAAW;EACxB,MAAMqJ,UAAQ,GAAG,cAAc;EAC/B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,cAAY,GAAG,WAAW;EAChC,MAAMoD,qBAAmB,GAAG,CAAA,IAAA,EAAOrG,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAC7D,MAAMkL,UAAU,GAAG,QAAQ;EAE3B,MAAMzL,iBAAe,GAAG,MAAM;EAC9B,MAAMsV,oBAAkB,GAAG,SAAS;EACpC,MAAMC,iBAAiB,GAAG,QAAQ;EAClC,MAAMC,mBAAmB,GAAG,oBAAoB;EAChD,MAAM/B,aAAa,GAAG,iBAAiB;EAEvC,MAAMtL,YAAU,GAAG,CAAO7K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM8K,aAAW,GAAG,CAAQ9K,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAM+K,YAAU,GAAG,CAAO/K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM4V,oBAAoB,GAAG,CAAgB5V,aAAAA,EAAAA,WAAS,CAAE,CAAA;EACxD,MAAMgL,cAAY,GAAG,CAAShL,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAM6V,YAAY,GAAG,CAAS7V,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAMoD,sBAAoB,GAAG,CAAA,KAAA,EAAQpD,WAAS,CAAA,EAAGiD,cAAY,CAAE,CAAA;EAC/D,MAAM+S,qBAAqB,GAAG,CAAkBhW,eAAAA,EAAAA,WAAS,CAAE,CAAA;EAE3D,MAAMmD,sBAAoB,GAAG,8BAA8B;EAE3D,MAAM5E,SAAO,GAAG;EACdyU,EAAAA,QAAQ,EAAE,IAAI;EACd3L,EAAAA,QAAQ,EAAE,IAAI;EACd8Q,EAAAA,MAAM,EAAE;EACV,CAAC;EAED,MAAM3Z,aAAW,GAAG;EAClBwU,EAAAA,QAAQ,EAAE,kBAAkB;EAC5B3L,EAAAA,QAAQ,EAAE,SAAS;EACnB8Q,EAAAA,MAAM,EAAE;EACV,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,SAAS,SAAS1Y,aAAa,CAAC;EACpCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;MAEtB,IAAI,CAACwN,QAAQ,GAAG,KAAK;EACrB,IAAA,IAAI,CAACqK,SAAS,GAAG,IAAI,CAACC,mBAAmB,EAAE;EAC3C,IAAA,IAAI,CAACC,UAAU,GAAG,IAAI,CAACC,oBAAoB,EAAE;MAC7C,IAAI,CAAC1O,kBAAkB,EAAE;EAC3B;;EAEA;IACA,WAAW1J,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;IACA6M,MAAMA,CAACvI,aAAa,EAAE;EACpB,IAAA,OAAO,IAAI,CAACoR,QAAQ,GAAG,IAAI,CAACC,IAAI,EAAE,GAAG,IAAI,CAACC,IAAI,CAACtR,aAAa,CAAC;EAC/D;IAEAsR,IAAIA,CAACtR,aAAa,EAAE;MAClB,IAAI,IAAI,CAACoR,QAAQ,EAAE;EACjB,MAAA;EACF;MAEA,MAAMoE,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEkL,YAAU,EAAE;EAAE9P,MAAAA;EAAc,KAAC,CAAC;MAEpF,IAAIwV,SAAS,CAACjU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,IAAI,CAAC6P,QAAQ,GAAG,IAAI;EACpB,IAAA,IAAI,CAACqK,SAAS,CAACnK,IAAI,EAAE;EAErB,IAAA,IAAI,CAAC,IAAI,CAACzM,OAAO,CAACuY,MAAM,EAAE;EACxB,MAAA,IAAI7D,eAAe,EAAE,CAAClI,IAAI,EAAE;EAC9B;MAEA,IAAI,CAACzM,QAAQ,CAAChC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC;MAC9C,IAAI,CAACgC,QAAQ,CAAChC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;MAC5C,IAAI,CAACgC,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC4S,oBAAkB,CAAC;MAE/C,MAAMzN,gBAAgB,GAAGA,MAAM;EAC7B,MAAA,IAAI,CAAC,IAAI,CAAC3K,OAAO,CAACuY,MAAM,IAAI,IAAI,CAACvY,OAAO,CAACoT,QAAQ,EAAE;EACjD,QAAA,IAAI,CAAC0D,UAAU,CAAC9C,QAAQ,EAAE;EAC5B;QAEA,IAAI,CAACjU,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;QAC5C,IAAI,CAAC/C,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC6mB,oBAAkB,CAAC;QAClDve,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEmL,aAAW,EAAE;EAAE/P,QAAAA;EAAc,OAAC,CAAC;OACpE;MAED,IAAI,CAACoF,cAAc,CAACoK,gBAAgB,EAAE,IAAI,CAAC5K,QAAQ,EAAE,IAAI,CAAC;EAC5D;EAEAyM,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAAC,IAAI,CAACD,QAAQ,EAAE;EAClB,MAAA;EACF;MAEA,MAAM0E,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEoL,YAAU,CAAC;MAEjE,IAAI8F,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;EAEA,IAAA,IAAI,CAACoa,UAAU,CAAC3C,UAAU,EAAE;EAC5B,IAAA,IAAI,CAACpU,QAAQ,CAAC0Y,IAAI,EAAE;MACpB,IAAI,CAAClM,QAAQ,GAAG,KAAK;MACrB,IAAI,CAACxM,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC6S,iBAAiB,CAAC;EAC9C,IAAA,IAAI,CAACzB,SAAS,CAACpK,IAAI,EAAE;MAErB,MAAMkM,gBAAgB,GAAGA,MAAM;QAC7B,IAAI,CAAC3Y,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAACuR,iBAAe,EAAEuV,iBAAiB,CAAC;EAClE,MAAA,IAAI,CAACtY,QAAQ,CAAC9B,eAAe,CAAC,YAAY,CAAC;EAC3C,MAAA,IAAI,CAAC8B,QAAQ,CAAC9B,eAAe,CAAC,MAAM,CAAC;EAErC,MAAA,IAAI,CAAC,IAAI,CAAC+B,OAAO,CAACuY,MAAM,EAAE;EACxB,QAAA,IAAI7D,eAAe,EAAE,CAACS,KAAK,EAAE;EAC/B;QAEAtb,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEqL,cAAY,CAAC;OAClD;MAED,IAAI,CAAC7K,cAAc,CAACmY,gBAAgB,EAAE,IAAI,CAAC3Y,QAAQ,EAAE,IAAI,CAAC;EAC5D;EAEAI,EAAAA,OAAOA,GAAG;EACR,IAAA,IAAI,CAACyW,SAAS,CAACzW,OAAO,EAAE;EACxB,IAAA,IAAI,CAAC2W,UAAU,CAAC3C,UAAU,EAAE;MAC5B,KAAK,CAAChU,OAAO,EAAE;EACjB;;EAEA;EACA0W,EAAAA,mBAAmBA,GAAG;MACpB,MAAMhE,aAAa,GAAGA,MAAM;EAC1B,MAAA,IAAI,IAAI,CAAC7S,OAAO,CAACoT,QAAQ,KAAK,QAAQ,EAAE;UACtCvZ,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEiW,oBAAoB,CAAC;EACzD,QAAA;EACF;QAEA,IAAI,CAACxJ,IAAI,EAAE;OACZ;;EAED;MACA,MAAMnY,SAAS,GAAGkH,OAAO,CAAC,IAAI,CAACyE,OAAO,CAACoT,QAAQ,CAAC;MAEhD,OAAO,IAAIL,QAAQ,CAAC;EAClBH,MAAAA,SAAS,EAAE0F,mBAAmB;QAC9BjkB,SAAS;EACTmM,MAAAA,UAAU,EAAE,IAAI;EAChBsS,MAAAA,WAAW,EAAE,IAAI,CAAC/S,QAAQ,CAACnL,UAAU;EACrCie,MAAAA,aAAa,EAAExe,SAAS,GAAGwe,aAAa,GAAG;EAC7C,KAAC,CAAC;EACJ;EAEAkE,EAAAA,oBAAoBA,GAAG;MACrB,OAAO,IAAIlD,SAAS,CAAC;QACnBD,WAAW,EAAE,IAAI,CAAC7T;EACpB,KAAC,CAAC;EACJ;EAEAsI,EAAAA,kBAAkBA,GAAG;MACnBxO,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEqW,qBAAqB,EAAE3c,KAAK,IAAI;EAC7D,MAAA,IAAIA,KAAK,CAAC7I,GAAG,KAAK2d,UAAU,EAAE;EAC5B,QAAA;EACF;EAEA,MAAA,IAAI,IAAI,CAACvO,OAAO,CAACyH,QAAQ,EAAE;UACzB,IAAI,CAAC+E,IAAI,EAAE;EACX,QAAA;EACF;QAEA3S,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEiW,oBAAoB,CAAC;EAC3D,KAAC,CAAC;EACJ;;EAEA;IACA,OAAOhf,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGoV,SAAS,CAAC9X,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAExD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAIqE,IAAI,CAACrE,MAAM,CAAC,KAAKzM,SAAS,IAAIyM,MAAM,CAAC7C,UAAU,CAAC,GAAG,CAAC,IAAI6C,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,CAAC,IAAI,CAAC;EACpB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,sBAAoB,EAAED,sBAAoB,EAAE,UAAU9J,KAAK,EAAE;EACrF,EAAA,MAAM3B,MAAM,GAAGoJ,cAAc,CAACkB,sBAAsB,CAAC,IAAI,CAAC;EAE1D,EAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACvG,QAAQ,CAAC,IAAI,CAAC6G,OAAO,CAAC,EAAE;MACxCjJ,KAAK,CAACuD,cAAc,EAAE;EACxB;EAEA,EAAA,IAAInI,UAAU,CAAC,IAAI,CAAC,EAAE;EACpB,IAAA;EACF;EAEAgF,EAAAA,YAAY,CAACkC,GAAG,CAACjE,MAAM,EAAEsT,cAAY,EAAE,MAAM;EAC3C;EACA,IAAA,IAAI/W,SAAS,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAACwc,KAAK,EAAE;EACd;EACF,GAAC,CAAC;;EAEF;EACA,EAAA,MAAMsH,WAAW,GAAGjX,cAAc,CAACG,OAAO,CAACkV,aAAa,CAAC;EACzD,EAAA,IAAI4B,WAAW,IAAIA,WAAW,KAAKrgB,MAAM,EAAE;MACzC0gB,SAAS,CAAC/X,WAAW,CAAC0X,WAAW,CAAC,CAAC3L,IAAI,EAAE;EAC3C;EAEA,EAAA,MAAMpJ,IAAI,GAAGoV,SAAS,CAAC9X,mBAAmB,CAAC5I,MAAM,CAAC;EAClDsL,EAAAA,IAAI,CAACM,MAAM,CAAC,IAAI,CAAC;EACnB,CAAC,CAAC;EAEF7J,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAE2U,qBAAmB,EAAE,MAAM;IACjD,KAAK,MAAM5U,QAAQ,IAAIqP,cAAc,CAACxG,IAAI,CAAC6b,aAAa,CAAC,EAAE;MACzDiC,SAAS,CAAC9X,mBAAmB,CAAC7O,QAAQ,CAAC,CAAC4a,IAAI,EAAE;EAChD;EACF,CAAC,CAAC;EAEF5S,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAEmkB,YAAY,EAAE,MAAM;IAC1C,KAAK,MAAMtlB,OAAO,IAAIuQ,cAAc,CAACxG,IAAI,CAAC,8CAA8C,CAAC,EAAE;MACzF,IAAIpH,gBAAgB,CAAC3C,OAAO,CAAC,CAACgoB,QAAQ,KAAK,OAAO,EAAE;QAClDH,SAAS,CAAC9X,mBAAmB,CAAC/P,OAAO,CAAC,CAAC6b,IAAI,EAAE;EAC/C;EACF;EACF,CAAC,CAAC;EAEFlK,oBAAoB,CAACkW,SAAS,CAAC;;EAE/B;EACA;EACA;;EAEA/hB,kBAAkB,CAAC+hB,SAAS,CAAC;;ECvR7B;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA,MAAMI,sBAAsB,GAAG,gBAAgB;EAExC,MAAMC,gBAAgB,GAAG;EAC9B;EACA,EAAA,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAED,sBAAsB,CAAC;IACnEE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;EACrCC,EAAAA,IAAI,EAAE,EAAE;EACRC,EAAAA,CAAC,EAAE,EAAE;EACLC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,GAAG,EAAE,EAAE;EACPC,EAAAA,IAAI,EAAE,EAAE;EACRC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,GAAG,EAAE,EAAE;EACPC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,CAAC,EAAE,EAAE;EACLxQ,EAAAA,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;EACzDyQ,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,EAAE,EAAE,EAAE;EACNC,EAAAA,CAAC,EAAE,EAAE;EACLC,EAAAA,GAAG,EAAE,EAAE;EACPC,EAAAA,CAAC,EAAE,EAAE;EACLC,EAAAA,KAAK,EAAE,EAAE;EACTC,EAAAA,IAAI,EAAE,EAAE;EACRC,EAAAA,GAAG,EAAE,EAAE;EACPC,EAAAA,GAAG,EAAE,EAAE;EACPC,EAAAA,MAAM,EAAE,EAAE;EACVC,EAAAA,CAAC,EAAE,EAAE;EACLC,EAAAA,EAAE,EAAE;EACN,CAAC;EACD;;EAEA,MAAMC,aAAa,GAAG,IAAIzhB,GAAG,CAAC,CAC5B,YAAY,EACZ,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,YAAY,CACb,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA,MAAM0hB,gBAAgB,GAAG,yDAAyD;EAElF,MAAMC,gBAAgB,GAAGA,CAACC,SAAS,EAAEC,oBAAoB,KAAK;IAC5D,MAAMC,aAAa,GAAGF,SAAS,CAACG,QAAQ,CAACxoB,WAAW,EAAE;EAEtD,EAAA,IAAIsoB,oBAAoB,CAACpf,QAAQ,CAACqf,aAAa,CAAC,EAAE;EAChD,IAAA,IAAIL,aAAa,CAAC/pB,GAAG,CAACoqB,aAAa,CAAC,EAAE;QACpC,OAAO3f,OAAO,CAACuf,gBAAgB,CAACpb,IAAI,CAACsb,SAAS,CAACI,SAAS,CAAC,CAAC;EAC5D;EAEA,IAAA,OAAO,IAAI;EACb;;EAEA;IACA,OAAOH,oBAAoB,CAAC3c,MAAM,CAAC+c,cAAc,IAAIA,cAAc,YAAY5b,MAAM,CAAC,CACnF6b,IAAI,CAACC,KAAK,IAAIA,KAAK,CAAC7b,IAAI,CAACwb,aAAa,CAAC,CAAC;EAC7C,CAAC;EAEM,SAASM,YAAYA,CAACC,UAAU,EAAEC,SAAS,EAAEC,gBAAgB,EAAE;EACpE,EAAA,IAAI,CAACF,UAAU,CAACtnB,MAAM,EAAE;EACtB,IAAA,OAAOsnB,UAAU;EACnB;EAEA,EAAA,IAAIE,gBAAgB,IAAI,OAAOA,gBAAgB,KAAK,UAAU,EAAE;MAC9D,OAAOA,gBAAgB,CAACF,UAAU,CAAC;EACrC;EAEA,EAAA,MAAMG,SAAS,GAAG,IAAI9pB,MAAM,CAAC+pB,SAAS,EAAE;IACxC,MAAMC,eAAe,GAAGF,SAAS,CAACG,eAAe,CAACN,UAAU,EAAE,WAAW,CAAC;EAC1E,EAAA,MAAMrH,QAAQ,GAAG,EAAE,CAACjT,MAAM,CAAC,GAAG2a,eAAe,CAAC9lB,IAAI,CAACmE,gBAAgB,CAAC,GAAG,CAAC,CAAC;EAEzE,EAAA,KAAK,MAAMxJ,OAAO,IAAIyjB,QAAQ,EAAE;MAC9B,MAAM4H,WAAW,GAAGrrB,OAAO,CAACwqB,QAAQ,CAACxoB,WAAW,EAAE;EAElD,IAAA,IAAI,CAACJ,MAAM,CAACjB,IAAI,CAACoqB,SAAS,CAAC,CAAC7f,QAAQ,CAACmgB,WAAW,CAAC,EAAE;QACjDrrB,OAAO,CAACY,MAAM,EAAE;EAChB,MAAA;EACF;MAEA,MAAM0qB,aAAa,GAAG,EAAE,CAAC9a,MAAM,CAAC,GAAGxQ,OAAO,CAACwN,UAAU,CAAC;EACtD,IAAA,MAAM+d,iBAAiB,GAAG,EAAE,CAAC/a,MAAM,CAACua,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAEA,SAAS,CAACM,WAAW,CAAC,IAAI,EAAE,CAAC;EAEvF,IAAA,KAAK,MAAMhB,SAAS,IAAIiB,aAAa,EAAE;EACrC,MAAA,IAAI,CAAClB,gBAAgB,CAACC,SAAS,EAAEkB,iBAAiB,CAAC,EAAE;EACnDvrB,QAAAA,OAAO,CAACsN,eAAe,CAAC+c,SAAS,CAACG,QAAQ,CAAC;EAC7C;EACF;EACF;EAEA,EAAA,OAAOW,eAAe,CAAC9lB,IAAI,CAACmmB,SAAS;EACvC;;ECnHA;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMtlB,MAAI,GAAG,iBAAiB;EAE9B,MAAM8H,SAAO,GAAG;EACd+c,EAAAA,SAAS,EAAE7C,gBAAgB;IAC3BuD,OAAO,EAAE,EAAE;EAAE;EACbC,EAAAA,UAAU,EAAE,EAAE;EACdC,EAAAA,IAAI,EAAE,KAAK;EACXC,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,UAAU,EAAE,IAAI;EAChBC,EAAAA,QAAQ,EAAE;EACZ,CAAC;EAED,MAAM7d,aAAW,GAAG;EAClB8c,EAAAA,SAAS,EAAE,QAAQ;EACnBU,EAAAA,OAAO,EAAE,QAAQ;EACjBC,EAAAA,UAAU,EAAE,mBAAmB;EAC/BC,EAAAA,IAAI,EAAE,SAAS;EACfC,EAAAA,QAAQ,EAAE,SAAS;EACnBC,EAAAA,UAAU,EAAE,iBAAiB;EAC7BC,EAAAA,QAAQ,EAAE;EACZ,CAAC;EAED,MAAMC,kBAAkB,GAAG;EACzBC,EAAAA,KAAK,EAAE,gCAAgC;EACvC9qB,EAAAA,QAAQ,EAAE;EACZ,CAAC;;EAED;EACA;EACA;;EAEA,MAAM+qB,eAAe,SAASle,MAAM,CAAC;IACnCU,WAAWA,CAACL,MAAM,EAAE;EAClB,IAAA,KAAK,EAAE;MACP,IAAI,CAACiB,OAAO,GAAG,IAAI,CAAClB,UAAU,CAACC,MAAM,CAAC;EACxC;;EAEA;IACA,WAAWJ,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAgmB,EAAAA,UAAUA,GAAG;MACX,OAAOtqB,MAAM,CAACkI,MAAM,CAAC,IAAI,CAACuF,OAAO,CAACoc,OAAO,CAAC,CACvCrb,GAAG,CAAChC,MAAM,IAAI,IAAI,CAAC+d,wBAAwB,CAAC/d,MAAM,CAAC,CAAC,CACpDT,MAAM,CAAC/C,OAAO,CAAC;EACpB;EAEAwhB,EAAAA,UAAUA,GAAG;MACX,OAAO,IAAI,CAACF,UAAU,EAAE,CAAC1oB,MAAM,GAAG,CAAC;EACrC;IAEA6oB,aAAaA,CAACZ,OAAO,EAAE;EACrB,IAAA,IAAI,CAACa,aAAa,CAACb,OAAO,CAAC;EAC3B,IAAA,IAAI,CAACpc,OAAO,CAACoc,OAAO,GAAG;EAAE,MAAA,GAAG,IAAI,CAACpc,OAAO,CAACoc,OAAO;QAAE,GAAGA;OAAS;EAC9D,IAAA,OAAO,IAAI;EACb;EAEAc,EAAAA,MAAMA,GAAG;EACP,IAAA,MAAMC,eAAe,GAAGlqB,QAAQ,CAACogB,aAAa,CAAC,KAAK,CAAC;EACrD8J,IAAAA,eAAe,CAAChB,SAAS,GAAG,IAAI,CAACiB,cAAc,CAAC,IAAI,CAACpd,OAAO,CAACyc,QAAQ,CAAC;EAEtE,IAAA,KAAK,MAAM,CAAC5qB,QAAQ,EAAEwrB,IAAI,CAAC,IAAI9qB,MAAM,CAACqJ,OAAO,CAAC,IAAI,CAACoE,OAAO,CAACoc,OAAO,CAAC,EAAE;QACnE,IAAI,CAACkB,WAAW,CAACH,eAAe,EAAEE,IAAI,EAAExrB,QAAQ,CAAC;EACnD;EAEA,IAAA,MAAM4qB,QAAQ,GAAGU,eAAe,CAAC7b,QAAQ,CAAC,CAAC,CAAC;MAC5C,MAAM+a,UAAU,GAAG,IAAI,CAACS,wBAAwB,CAAC,IAAI,CAAC9c,OAAO,CAACqc,UAAU,CAAC;EAEzE,IAAA,IAAIA,UAAU,EAAE;EACdI,MAAAA,QAAQ,CAACznB,SAAS,CAACwQ,GAAG,CAAC,GAAG6W,UAAU,CAAC1oB,KAAK,CAAC,GAAG,CAAC,CAAC;EAClD;EAEA,IAAA,OAAO8oB,QAAQ;EACjB;;EAEA;IACAvd,gBAAgBA,CAACH,MAAM,EAAE;EACvB,IAAA,KAAK,CAACG,gBAAgB,CAACH,MAAM,CAAC;EAC9B,IAAA,IAAI,CAACke,aAAa,CAACle,MAAM,CAACqd,OAAO,CAAC;EACpC;IAEAa,aAAaA,CAACM,GAAG,EAAE;EACjB,IAAA,KAAK,MAAM,CAAC1rB,QAAQ,EAAEuqB,OAAO,CAAC,IAAI7pB,MAAM,CAACqJ,OAAO,CAAC2hB,GAAG,CAAC,EAAE;QACrD,KAAK,CAACre,gBAAgB,CAAC;UAAErN,QAAQ;EAAE8qB,QAAAA,KAAK,EAAEP;SAAS,EAAEM,kBAAkB,CAAC;EAC1E;EACF;EAEAY,EAAAA,WAAWA,CAACb,QAAQ,EAAEL,OAAO,EAAEvqB,QAAQ,EAAE;MACvC,MAAM2rB,eAAe,GAAGtc,cAAc,CAACG,OAAO,CAACxP,QAAQ,EAAE4qB,QAAQ,CAAC;MAElE,IAAI,CAACe,eAAe,EAAE;EACpB,MAAA;EACF;EAEApB,IAAAA,OAAO,GAAG,IAAI,CAACU,wBAAwB,CAACV,OAAO,CAAC;MAEhD,IAAI,CAACA,OAAO,EAAE;QACZoB,eAAe,CAACjsB,MAAM,EAAE;EACxB,MAAA;EACF;EAEA,IAAA,IAAIwC,WAAS,CAACqoB,OAAO,CAAC,EAAE;QACtB,IAAI,CAACqB,qBAAqB,CAACvpB,UAAU,CAACkoB,OAAO,CAAC,EAAEoB,eAAe,CAAC;EAChE,MAAA;EACF;EAEA,IAAA,IAAI,IAAI,CAACxd,OAAO,CAACsc,IAAI,EAAE;QACrBkB,eAAe,CAACrB,SAAS,GAAG,IAAI,CAACiB,cAAc,CAAChB,OAAO,CAAC;EACxD,MAAA;EACF;MAEAoB,eAAe,CAACE,WAAW,GAAGtB,OAAO;EACvC;IAEAgB,cAAcA,CAACG,GAAG,EAAE;MAClB,OAAO,IAAI,CAACvd,OAAO,CAACuc,QAAQ,GAAGf,YAAY,CAAC+B,GAAG,EAAE,IAAI,CAACvd,OAAO,CAAC0b,SAAS,EAAE,IAAI,CAAC1b,OAAO,CAACwc,UAAU,CAAC,GAAGe,GAAG;EACzG;IAEAT,wBAAwBA,CAACS,GAAG,EAAE;MAC5B,OAAOpmB,OAAO,CAAComB,GAAG,EAAE,CAACjrB,SAAS,EAAE,IAAI,CAAC,CAAC;EACxC;EAEAmrB,EAAAA,qBAAqBA,CAAC9sB,OAAO,EAAE6sB,eAAe,EAAE;EAC9C,IAAA,IAAI,IAAI,CAACxd,OAAO,CAACsc,IAAI,EAAE;QACrBkB,eAAe,CAACrB,SAAS,GAAG,EAAE;EAC9BqB,MAAAA,eAAe,CAAClK,MAAM,CAAC3iB,OAAO,CAAC;EAC/B,MAAA;EACF;EAEA6sB,IAAAA,eAAe,CAACE,WAAW,GAAG/sB,OAAO,CAAC+sB,WAAW;EACnD;EACF;;EC7JA;EACA;EACA;EACA;EACA;EACA;;;EAYA;EACA;EACA;;EAEA,MAAM7mB,MAAI,GAAG,SAAS;EACtB,MAAM8mB,qBAAqB,GAAG,IAAIvkB,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;EAE9E,MAAMyJ,iBAAe,GAAG,MAAM;EAC9B,MAAM+a,gBAAgB,GAAG,OAAO;EAChC,MAAM9a,iBAAe,GAAG,MAAM;EAE9B,MAAM+a,sBAAsB,GAAG,gBAAgB;EAC/C,MAAMC,cAAc,GAAG,CAAIF,CAAAA,EAAAA,gBAAgB,CAAE,CAAA;EAE7C,MAAMG,gBAAgB,GAAG,eAAe;EAExC,MAAMC,aAAa,GAAG,OAAO;EAC7B,MAAMC,aAAa,GAAG,OAAO;EAC7B,MAAMC,aAAa,GAAG,OAAO;EAC7B,MAAMC,cAAc,GAAG,QAAQ;EAE/B,MAAMhT,YAAU,GAAG,MAAM;EACzB,MAAMC,cAAY,GAAG,QAAQ;EAC7B,MAAMH,YAAU,GAAG,MAAM;EACzB,MAAMC,aAAW,GAAG,OAAO;EAC3B,MAAMkT,cAAc,GAAG,UAAU;EACjC,MAAMC,aAAW,GAAG,OAAO;EAC3B,MAAM9K,eAAa,GAAG,SAAS;EAC/B,MAAM+K,gBAAc,GAAG,UAAU;EACjC,MAAMhY,gBAAgB,GAAG,YAAY;EACrC,MAAMC,gBAAgB,GAAG,YAAY;EAErC,MAAMgY,aAAa,GAAG;EACpBC,EAAAA,IAAI,EAAE,MAAM;EACZC,EAAAA,GAAG,EAAE,KAAK;EACVC,EAAAA,KAAK,EAAEnoB,KAAK,EAAE,GAAG,MAAM,GAAG,OAAO;EACjCooB,EAAAA,MAAM,EAAE,QAAQ;EAChBC,EAAAA,IAAI,EAAEroB,KAAK,EAAE,GAAG,OAAO,GAAG;EAC5B,CAAC;EAED,MAAMoI,SAAO,GAAG;EACd+c,EAAAA,SAAS,EAAE7C,gBAAgB;EAC3BgG,EAAAA,SAAS,EAAE,IAAI;EACf5O,EAAAA,QAAQ,EAAE,iBAAiB;EAC3B6O,EAAAA,SAAS,EAAE,KAAK;EAChBC,EAAAA,WAAW,EAAE,EAAE;EACfC,EAAAA,KAAK,EAAE,CAAC;IACRC,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;EACtD3C,EAAAA,IAAI,EAAE,KAAK;EACXnO,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdwD,EAAAA,SAAS,EAAE,KAAK;EAChBxB,EAAAA,YAAY,EAAE,IAAI;EAClBoM,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,UAAU,EAAE,IAAI;EAChB3qB,EAAAA,QAAQ,EAAE,KAAK;EACf4qB,EAAAA,QAAQ,EAAE,sCAAsC,GACtC,mCAAmC,GACnC,mCAAmC,GACnC,QAAQ;EAClByC,EAAAA,KAAK,EAAE,EAAE;EACT5iB,EAAAA,OAAO,EAAE;EACX,CAAC;EAED,MAAMsC,aAAW,GAAG;EAClB8c,EAAAA,SAAS,EAAE,QAAQ;EACnBmD,EAAAA,SAAS,EAAE,SAAS;EACpB5O,EAAAA,QAAQ,EAAE,kBAAkB;EAC5B6O,EAAAA,SAAS,EAAE,0BAA0B;EACrCC,EAAAA,WAAW,EAAE,mBAAmB;EAChCC,EAAAA,KAAK,EAAE,iBAAiB;EACxBC,EAAAA,kBAAkB,EAAE,OAAO;EAC3B3C,EAAAA,IAAI,EAAE,SAAS;EACfnO,EAAAA,MAAM,EAAE,yBAAyB;EACjCwD,EAAAA,SAAS,EAAE,mBAAmB;EAC9BxB,EAAAA,YAAY,EAAE,wBAAwB;EACtCoM,EAAAA,QAAQ,EAAE,SAAS;EACnBC,EAAAA,UAAU,EAAE,iBAAiB;EAC7B3qB,EAAAA,QAAQ,EAAE,kBAAkB;EAC5B4qB,EAAAA,QAAQ,EAAE,QAAQ;EAClByC,EAAAA,KAAK,EAAE,2BAA2B;EAClC5iB,EAAAA,OAAO,EAAE;EACX,CAAC;;EAED;EACA;EACA;;EAEA,MAAM6iB,OAAO,SAASrf,aAAa,CAAC;EAClCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,IAAI,OAAOmS,MAAM,KAAK,WAAW,EAAE;EACjC,MAAA,MAAM,IAAIvR,SAAS,CAAC,uEAAuE,CAAC;EAC9F;EAEA,IAAA,KAAK,CAAChP,OAAO,EAAEoO,MAAM,CAAC;;EAEtB;MACA,IAAI,CAACqgB,UAAU,GAAG,IAAI;MACtB,IAAI,CAACC,QAAQ,GAAG,CAAC;MACjB,IAAI,CAACC,UAAU,GAAG,IAAI;EACtB,IAAA,IAAI,CAACC,cAAc,GAAG,EAAE;MACxB,IAAI,CAACjP,OAAO,GAAG,IAAI;MACnB,IAAI,CAACkP,gBAAgB,GAAG,IAAI;MAC5B,IAAI,CAACC,WAAW,GAAG,IAAI;;EAEvB;MACA,IAAI,CAACC,GAAG,GAAG,IAAI;MAEf,IAAI,CAACC,aAAa,EAAE;EAEpB,IAAA,IAAI,CAAC,IAAI,CAAC3f,OAAO,CAACnO,QAAQ,EAAE;QAC1B,IAAI,CAAC+tB,SAAS,EAAE;EAClB;EACF;;EAEA;IACA,WAAWjhB,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAgpB,EAAAA,MAAMA,GAAG;MACP,IAAI,CAACT,UAAU,GAAG,IAAI;EACxB;EAEAU,EAAAA,OAAOA,GAAG;MACR,IAAI,CAACV,UAAU,GAAG,KAAK;EACzB;EAEAW,EAAAA,aAAaA,GAAG;EACd,IAAA,IAAI,CAACX,UAAU,GAAG,CAAC,IAAI,CAACA,UAAU;EACpC;EAEA1b,EAAAA,MAAMA,GAAG;EACP,IAAA,IAAI,CAAC,IAAI,CAAC0b,UAAU,EAAE;EACpB,MAAA;EACF;EAEA,IAAA,IAAI,IAAI,CAAC7S,QAAQ,EAAE,EAAE;QACnB,IAAI,CAACyT,MAAM,EAAE;EACb,MAAA;EACF;MAEA,IAAI,CAACC,MAAM,EAAE;EACf;EAEA9f,EAAAA,OAAOA,GAAG;EACRuJ,IAAAA,YAAY,CAAC,IAAI,CAAC2V,QAAQ,CAAC;EAE3BxlB,IAAAA,YAAY,CAACC,GAAG,CAAC,IAAI,CAACiG,QAAQ,CAACrL,OAAO,CAACopB,cAAc,CAAC,EAAEC,gBAAgB,EAAE,IAAI,CAACmC,iBAAiB,CAAC;MAEjG,IAAI,IAAI,CAACngB,QAAQ,CAAC3K,YAAY,CAAC,wBAAwB,CAAC,EAAE;EACxD,MAAA,IAAI,CAAC2K,QAAQ,CAAChC,YAAY,CAAC,OAAO,EAAE,IAAI,CAACgC,QAAQ,CAAC3K,YAAY,CAAC,wBAAwB,CAAC,CAAC;EAC3F;MAEA,IAAI,CAAC+qB,cAAc,EAAE;MACrB,KAAK,CAAChgB,OAAO,EAAE;EACjB;EAEAsM,EAAAA,IAAIA,GAAG;MACL,IAAI,IAAI,CAAC1M,QAAQ,CAACiN,KAAK,CAACkD,OAAO,KAAK,MAAM,EAAE;EAC1C,MAAA,MAAM,IAAIrR,KAAK,CAAC,qCAAqC,CAAC;EACxD;MAEA,IAAI,EAAE,IAAI,CAACuhB,cAAc,EAAE,IAAI,IAAI,CAAChB,UAAU,CAAC,EAAE;EAC/C,MAAA;EACF;EAEA,IAAA,MAAMzO,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAACsK,YAAU,CAAC,CAAC;EAC7F,IAAA,MAAMoV,UAAU,GAAGhrB,cAAc,CAAC,IAAI,CAAC0K,QAAQ,CAAC;EAChD,IAAA,MAAMugB,UAAU,GAAG,CAACD,UAAU,IAAI,IAAI,CAACtgB,QAAQ,CAACwgB,aAAa,CAACjrB,eAAe,EAAEL,QAAQ,CAAC,IAAI,CAAC8K,QAAQ,CAAC;EAEtG,IAAA,IAAI4Q,SAAS,CAACjU,gBAAgB,IAAI,CAAC4jB,UAAU,EAAE;EAC7C,MAAA;EACF;;EAEA;MACA,IAAI,CAACH,cAAc,EAAE;EAErB,IAAA,MAAMT,GAAG,GAAG,IAAI,CAACc,cAAc,EAAE;EAEjC,IAAA,IAAI,CAACzgB,QAAQ,CAAChC,YAAY,CAAC,kBAAkB,EAAE2hB,GAAG,CAACtqB,YAAY,CAAC,IAAI,CAAC,CAAC;MAEtE,MAAM;EAAE0pB,MAAAA;OAAW,GAAG,IAAI,CAAC9e,OAAO;EAElC,IAAA,IAAI,CAAC,IAAI,CAACD,QAAQ,CAACwgB,aAAa,CAACjrB,eAAe,CAACL,QAAQ,CAAC,IAAI,CAACyqB,GAAG,CAAC,EAAE;EACnEZ,MAAAA,SAAS,CAACxL,MAAM,CAACoM,GAAG,CAAC;EACrB7lB,MAAAA,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAACyd,cAAc,CAAC,CAAC;EACjF;MAEA,IAAI,CAAC9N,OAAO,GAAG,IAAI,CAACM,aAAa,CAAC8O,GAAG,CAAC;EAEtCA,IAAAA,GAAG,CAAC1qB,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;;EAElC;EACA;EACA;EACA;EACA,IAAA,IAAI,cAAc,IAAI7P,QAAQ,CAACqC,eAAe,EAAE;EAC9C,MAAA,KAAK,MAAM3E,OAAO,IAAI,EAAE,CAACwQ,MAAM,CAAC,GAAGlO,QAAQ,CAAC+C,IAAI,CAACsL,QAAQ,CAAC,EAAE;UAC1DzH,YAAY,CAACiC,EAAE,CAACnL,OAAO,EAAE,WAAW,EAAEgF,IAAI,CAAC;EAC7C;EACF;MAEA,MAAMsX,QAAQ,GAAGA,MAAM;EACrBpT,MAAAA,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAACuK,aAAW,CAAC,CAAC;EAE5E,MAAA,IAAI,IAAI,CAACoU,UAAU,KAAK,KAAK,EAAE;UAC7B,IAAI,CAACU,MAAM,EAAE;EACf;QAEA,IAAI,CAACV,UAAU,GAAG,KAAK;OACxB;EAED,IAAA,IAAI,CAAC/e,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAACyS,GAAG,EAAE,IAAI,CAAC9U,WAAW,EAAE,CAAC;EAC7D;EAEA4B,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAAC,IAAI,CAACD,QAAQ,EAAE,EAAE;EACpB,MAAA;EACF;EAEA,IAAA,MAAM0E,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAACwK,YAAU,CAAC,CAAC;MAC7F,IAAI8F,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;EAEA,IAAA,MAAMgjB,GAAG,GAAG,IAAI,CAACc,cAAc,EAAE;EACjCd,IAAAA,GAAG,CAAC1qB,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;;EAErC;EACA;EACA,IAAA,IAAI,cAAc,IAAI7P,QAAQ,CAACqC,eAAe,EAAE;EAC9C,MAAA,KAAK,MAAM3E,OAAO,IAAI,EAAE,CAACwQ,MAAM,CAAC,GAAGlO,QAAQ,CAAC+C,IAAI,CAACsL,QAAQ,CAAC,EAAE;UAC1DzH,YAAY,CAACC,GAAG,CAACnJ,OAAO,EAAE,WAAW,EAAEgF,IAAI,CAAC;EAC9C;EACF;EAEA,IAAA,IAAI,CAAC4pB,cAAc,CAACrB,aAAa,CAAC,GAAG,KAAK;EAC1C,IAAA,IAAI,CAACqB,cAAc,CAACtB,aAAa,CAAC,GAAG,KAAK;EAC1C,IAAA,IAAI,CAACsB,cAAc,CAACvB,aAAa,CAAC,GAAG,KAAK;EAC1C,IAAA,IAAI,CAACsB,UAAU,GAAG,IAAI,CAAC;;MAEvB,MAAMrS,QAAQ,GAAGA,MAAM;EACrB,MAAA,IAAI,IAAI,CAACwT,oBAAoB,EAAE,EAAE;EAC/B,QAAA;EACF;EAEA,MAAA,IAAI,CAAC,IAAI,CAACnB,UAAU,EAAE;UACpB,IAAI,CAACa,cAAc,EAAE;EACvB;EAEA,MAAA,IAAI,CAACpgB,QAAQ,CAAC9B,eAAe,CAAC,kBAAkB,CAAC;EACjDpE,MAAAA,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAACyK,cAAY,CAAC,CAAC;OAC9E;EAED,IAAA,IAAI,CAAC7K,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAACyS,GAAG,EAAE,IAAI,CAAC9U,WAAW,EAAE,CAAC;EAC7D;EAEAoG,EAAAA,MAAMA,GAAG;MACP,IAAI,IAAI,CAACV,OAAO,EAAE;EAChB,MAAA,IAAI,CAACA,OAAO,CAACU,MAAM,EAAE;EACvB;EACF;;EAEA;EACAoP,EAAAA,cAAcA,GAAG;EACf,IAAA,OAAO7kB,OAAO,CAAC,IAAI,CAACmlB,SAAS,EAAE,CAAC;EAClC;EAEAF,EAAAA,cAAcA,GAAG;EACf,IAAA,IAAI,CAAC,IAAI,CAACd,GAAG,EAAE;EACb,MAAA,IAAI,CAACA,GAAG,GAAG,IAAI,CAACiB,iBAAiB,CAAC,IAAI,CAAClB,WAAW,IAAI,IAAI,CAACmB,sBAAsB,EAAE,CAAC;EACtF;MAEA,OAAO,IAAI,CAAClB,GAAG;EACjB;IAEAiB,iBAAiBA,CAACvE,OAAO,EAAE;MACzB,MAAMsD,GAAG,GAAG,IAAI,CAACmB,mBAAmB,CAACzE,OAAO,CAAC,CAACc,MAAM,EAAE;;EAEtD;MACA,IAAI,CAACwC,GAAG,EAAE;EACR,MAAA,OAAO,IAAI;EACb;MAEAA,GAAG,CAAC1qB,SAAS,CAACzD,MAAM,CAACsR,iBAAe,EAAEC,iBAAe,CAAC;EACtD;EACA4c,IAAAA,GAAG,CAAC1qB,SAAS,CAACwQ,GAAG,CAAC,CAAA,GAAA,EAAM,IAAI,CAACpG,WAAW,CAACvI,IAAI,CAAA,KAAA,CAAO,CAAC;EAErD,IAAA,MAAMiqB,KAAK,GAAGluB,MAAM,CAAC,IAAI,CAACwM,WAAW,CAACvI,IAAI,CAAC,CAACpE,QAAQ,EAAE;EAEtDitB,IAAAA,GAAG,CAAC3hB,YAAY,CAAC,IAAI,EAAE+iB,KAAK,CAAC;EAE7B,IAAA,IAAI,IAAI,CAAClW,WAAW,EAAE,EAAE;EACtB8U,MAAAA,GAAG,CAAC1qB,SAAS,CAACwQ,GAAG,CAAC3C,iBAAe,CAAC;EACpC;EAEA,IAAA,OAAO6c,GAAG;EACZ;IAEAqB,UAAUA,CAAC3E,OAAO,EAAE;MAClB,IAAI,CAACqD,WAAW,GAAGrD,OAAO;EAC1B,IAAA,IAAI,IAAI,CAAC7P,QAAQ,EAAE,EAAE;QACnB,IAAI,CAAC4T,cAAc,EAAE;QACrB,IAAI,CAAC1T,IAAI,EAAE;EACb;EACF;IAEAoU,mBAAmBA,CAACzE,OAAO,EAAE;MAC3B,IAAI,IAAI,CAACoD,gBAAgB,EAAE;EACzB,MAAA,IAAI,CAACA,gBAAgB,CAACxC,aAAa,CAACZ,OAAO,CAAC;EAC9C,KAAC,MAAM;EACL,MAAA,IAAI,CAACoD,gBAAgB,GAAG,IAAI5C,eAAe,CAAC;UAC1C,GAAG,IAAI,CAAC5c,OAAO;EACf;EACA;UACAoc,OAAO;UACPC,UAAU,EAAE,IAAI,CAACS,wBAAwB,CAAC,IAAI,CAAC9c,OAAO,CAAC+e,WAAW;EACpE,OAAC,CAAC;EACJ;MAEA,OAAO,IAAI,CAACS,gBAAgB;EAC9B;EAEAoB,EAAAA,sBAAsBA,GAAG;MACvB,OAAO;EACL,MAAA,CAAC/C,sBAAsB,GAAG,IAAI,CAAC6C,SAAS;OACzC;EACH;EAEAA,EAAAA,SAASA,GAAG;EACV,IAAA,OAAO,IAAI,CAAC5D,wBAAwB,CAAC,IAAI,CAAC9c,OAAO,CAACkf,KAAK,CAAC,IAAI,IAAI,CAACnf,QAAQ,CAAC3K,YAAY,CAAC,wBAAwB,CAAC;EAClH;;EAEA;IACA4rB,4BAA4BA,CAACvnB,KAAK,EAAE;EAClC,IAAA,OAAO,IAAI,CAAC2F,WAAW,CAACsB,mBAAmB,CAACjH,KAAK,CAACE,cAAc,EAAE,IAAI,CAACsnB,kBAAkB,EAAE,CAAC;EAC9F;EAEArW,EAAAA,WAAWA,GAAG;EACZ,IAAA,OAAO,IAAI,CAAC5K,OAAO,CAAC6e,SAAS,IAAK,IAAI,CAACa,GAAG,IAAI,IAAI,CAACA,GAAG,CAAC1qB,SAAS,CAACC,QAAQ,CAAC4N,iBAAe,CAAE;EAC7F;EAEA0J,EAAAA,QAAQA,GAAG;EACT,IAAA,OAAO,IAAI,CAACmT,GAAG,IAAI,IAAI,CAACA,GAAG,CAAC1qB,SAAS,CAACC,QAAQ,CAAC6N,iBAAe,CAAC;EACjE;IAEA8N,aAAaA,CAAC8O,GAAG,EAAE;EACjB,IAAA,MAAM/N,SAAS,GAAGxa,OAAO,CAAC,IAAI,CAAC6I,OAAO,CAAC2R,SAAS,EAAE,CAAC,IAAI,EAAE+N,GAAG,EAAE,IAAI,CAAC3f,QAAQ,CAAC,CAAC;MAC7E,MAAMmhB,UAAU,GAAG3C,aAAa,CAAC5M,SAAS,CAAC/R,WAAW,EAAE,CAAC;EACzD,IAAA,OAAOsR,YAAmB,CAAC,IAAI,CAACnR,QAAQ,EAAE2f,GAAG,EAAE,IAAI,CAACtO,gBAAgB,CAAC8P,UAAU,CAAC,CAAC;EACnF;EAEA1P,EAAAA,UAAUA,GAAG;MACX,MAAM;EAAErD,MAAAA;OAAQ,GAAG,IAAI,CAACnO,OAAO;EAE/B,IAAA,IAAI,OAAOmO,MAAM,KAAK,QAAQ,EAAE;EAC9B,MAAA,OAAOA,MAAM,CAACxa,KAAK,CAAC,GAAG,CAAC,CAACoN,GAAG,CAAC5D,KAAK,IAAI3J,MAAM,CAACyW,QAAQ,CAAC9M,KAAK,EAAE,EAAE,CAAC,CAAC;EACnE;EAEA,IAAA,IAAI,OAAOgR,MAAM,KAAK,UAAU,EAAE;QAChC,OAAOsD,UAAU,IAAItD,MAAM,CAACsD,UAAU,EAAE,IAAI,CAAC1R,QAAQ,CAAC;EACxD;EAEA,IAAA,OAAOoO,MAAM;EACf;IAEA2O,wBAAwBA,CAACS,GAAG,EAAE;EAC5B,IAAA,OAAOpmB,OAAO,CAAComB,GAAG,EAAE,CAAC,IAAI,CAACxd,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAC,CAAC;EACrD;IAEAqR,gBAAgBA,CAAC8P,UAAU,EAAE;EAC3B,IAAA,MAAMxP,qBAAqB,GAAG;EAC5BC,MAAAA,SAAS,EAAEuP,UAAU;EACrBtP,MAAAA,SAAS,EAAE,CACT;EACEhb,QAAAA,IAAI,EAAE,MAAM;EACZib,QAAAA,OAAO,EAAE;EACPoN,UAAAA,kBAAkB,EAAE,IAAI,CAACjf,OAAO,CAACif;EACnC;EACF,OAAC,EACD;EACEroB,QAAAA,IAAI,EAAE,QAAQ;EACdib,QAAAA,OAAO,EAAE;EACP1D,UAAAA,MAAM,EAAE,IAAI,CAACqD,UAAU;EACzB;EACF,OAAC,EACD;EACE5a,QAAAA,IAAI,EAAE,iBAAiB;EACvBib,QAAAA,OAAO,EAAE;EACP5B,UAAAA,QAAQ,EAAE,IAAI,CAACjQ,OAAO,CAACiQ;EACzB;EACF,OAAC,EACD;EACErZ,QAAAA,IAAI,EAAE,OAAO;EACbib,QAAAA,OAAO,EAAE;EACPlhB,UAAAA,OAAO,EAAE,CAAI,CAAA,EAAA,IAAI,CAACyO,WAAW,CAACvI,IAAI,CAAA,MAAA;EACpC;EACF,OAAC,EACD;EACED,QAAAA,IAAI,EAAE,iBAAiB;EACvBkb,QAAAA,OAAO,EAAE,IAAI;EACbqP,QAAAA,KAAK,EAAE,YAAY;UACnBpqB,EAAE,EAAEqM,IAAI,IAAI;EACV;EACA;EACA,UAAA,IAAI,CAACod,cAAc,EAAE,CAACziB,YAAY,CAAC,uBAAuB,EAAEqF,IAAI,CAACge,KAAK,CAACzP,SAAS,CAAC;EACnF;SACD;OAEJ;MAED,OAAO;EACL,MAAA,GAAGD,qBAAqB;EACxB,MAAA,GAAGva,OAAO,CAAC,IAAI,CAAC6I,OAAO,CAACmQ,YAAY,EAAE,CAAC7d,SAAS,EAAEof,qBAAqB,CAAC;OACzE;EACH;EAEAiO,EAAAA,aAAaA,GAAG;MACd,MAAM0B,QAAQ,GAAG,IAAI,CAACrhB,OAAO,CAAC1D,OAAO,CAAC3I,KAAK,CAAC,GAAG,CAAC;EAEhD,IAAA,KAAK,MAAM2I,OAAO,IAAI+kB,QAAQ,EAAE;QAC9B,IAAI/kB,OAAO,KAAK,OAAO,EAAE;UACvBzC,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAE,IAAI,CAACX,WAAW,CAACuB,SAAS,CAAC0d,aAAW,CAAC,EAAE,IAAI,CAACre,OAAO,CAACnO,QAAQ,EAAE4H,KAAK,IAAI;EACtG,UAAA,MAAMyY,OAAO,GAAG,IAAI,CAAC8O,4BAA4B,CAACvnB,KAAK,CAAC;EACxDyY,UAAAA,OAAO,CAACqN,cAAc,CAACrB,aAAa,CAAC,GAAG,EAAEhM,OAAO,CAAC3F,QAAQ,EAAE,IAAI2F,OAAO,CAACqN,cAAc,CAACrB,aAAa,CAAC,CAAC;YACtGhM,OAAO,CAACxO,MAAM,EAAE;EAClB,SAAC,CAAC;EACJ,OAAC,MAAM,IAAIpH,OAAO,KAAK6hB,cAAc,EAAE;UACrC,MAAMmD,OAAO,GAAGhlB,OAAO,KAAK0hB,aAAa,GACvC,IAAI,CAAC5e,WAAW,CAACuB,SAAS,CAAC2F,gBAAgB,CAAC,GAC5C,IAAI,CAAClH,WAAW,CAACuB,SAAS,CAAC4S,eAAa,CAAC;UAC3C,MAAMgO,QAAQ,GAAGjlB,OAAO,KAAK0hB,aAAa,GACxC,IAAI,CAAC5e,WAAW,CAACuB,SAAS,CAAC4F,gBAAgB,CAAC,GAC5C,IAAI,CAACnH,WAAW,CAACuB,SAAS,CAAC2d,gBAAc,CAAC;EAE5CzkB,QAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEuhB,OAAO,EAAE,IAAI,CAACthB,OAAO,CAACnO,QAAQ,EAAE4H,KAAK,IAAI;EACtE,UAAA,MAAMyY,OAAO,GAAG,IAAI,CAAC8O,4BAA4B,CAACvnB,KAAK,CAAC;EACxDyY,UAAAA,OAAO,CAACqN,cAAc,CAAC9lB,KAAK,CAACM,IAAI,KAAK,SAAS,GAAGkkB,aAAa,GAAGD,aAAa,CAAC,GAAG,IAAI;YACvF9L,OAAO,CAAC+N,MAAM,EAAE;EAClB,SAAC,CAAC;EACFpmB,QAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEwhB,QAAQ,EAAE,IAAI,CAACvhB,OAAO,CAACnO,QAAQ,EAAE4H,KAAK,IAAI;EACvE,UAAA,MAAMyY,OAAO,GAAG,IAAI,CAAC8O,4BAA4B,CAACvnB,KAAK,CAAC;YACxDyY,OAAO,CAACqN,cAAc,CAAC9lB,KAAK,CAACM,IAAI,KAAK,UAAU,GAAGkkB,aAAa,GAAGD,aAAa,CAAC,GAC/E9L,OAAO,CAACnS,QAAQ,CAAC9K,QAAQ,CAACwE,KAAK,CAAC0B,aAAa,CAAC;YAEhD+W,OAAO,CAAC8N,MAAM,EAAE;EAClB,SAAC,CAAC;EACJ;EACF;MAEA,IAAI,CAACE,iBAAiB,GAAG,MAAM;QAC7B,IAAI,IAAI,CAACngB,QAAQ,EAAE;UACjB,IAAI,CAACyM,IAAI,EAAE;EACb;OACD;EAED3S,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,CAACrL,OAAO,CAACopB,cAAc,CAAC,EAAEC,gBAAgB,EAAE,IAAI,CAACmC,iBAAiB,CAAC;EAClG;EAEAN,EAAAA,SAASA,GAAG;MACV,MAAMV,KAAK,GAAG,IAAI,CAACnf,QAAQ,CAAC3K,YAAY,CAAC,OAAO,CAAC;MAEjD,IAAI,CAAC8pB,KAAK,EAAE;EACV,MAAA;EACF;MAEA,IAAI,CAAC,IAAI,CAACnf,QAAQ,CAAC3K,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC2K,QAAQ,CAAC2d,WAAW,CAAC5c,IAAI,EAAE,EAAE;QAClF,IAAI,CAACf,QAAQ,CAAChC,YAAY,CAAC,YAAY,EAAEmhB,KAAK,CAAC;EACjD;MAEA,IAAI,CAACnf,QAAQ,CAAChC,YAAY,CAAC,wBAAwB,EAAEmhB,KAAK,CAAC,CAAC;EAC5D,IAAA,IAAI,CAACnf,QAAQ,CAAC9B,eAAe,CAAC,OAAO,CAAC;EACxC;EAEAgiB,EAAAA,MAAMA,GAAG;MACP,IAAI,IAAI,CAAC1T,QAAQ,EAAE,IAAI,IAAI,CAAC+S,UAAU,EAAE;QACtC,IAAI,CAACA,UAAU,GAAG,IAAI;EACtB,MAAA;EACF;MAEA,IAAI,CAACA,UAAU,GAAG,IAAI;MAEtB,IAAI,CAACkC,WAAW,CAAC,MAAM;QACrB,IAAI,IAAI,CAAClC,UAAU,EAAE;UACnB,IAAI,CAAC7S,IAAI,EAAE;EACb;OACD,EAAE,IAAI,CAACzM,OAAO,CAACgf,KAAK,CAACvS,IAAI,CAAC;EAC7B;EAEAuT,EAAAA,MAAMA,GAAG;EACP,IAAA,IAAI,IAAI,CAACS,oBAAoB,EAAE,EAAE;EAC/B,MAAA;EACF;MAEA,IAAI,CAACnB,UAAU,GAAG,KAAK;MAEvB,IAAI,CAACkC,WAAW,CAAC,MAAM;EACrB,MAAA,IAAI,CAAC,IAAI,CAAClC,UAAU,EAAE;UACpB,IAAI,CAAC9S,IAAI,EAAE;EACb;OACD,EAAE,IAAI,CAACxM,OAAO,CAACgf,KAAK,CAACxS,IAAI,CAAC;EAC7B;EAEAgV,EAAAA,WAAWA,CAAC3pB,OAAO,EAAE4pB,OAAO,EAAE;EAC5B/X,IAAAA,YAAY,CAAC,IAAI,CAAC2V,QAAQ,CAAC;MAC3B,IAAI,CAACA,QAAQ,GAAGrnB,UAAU,CAACH,OAAO,EAAE4pB,OAAO,CAAC;EAC9C;EAEAhB,EAAAA,oBAAoBA,GAAG;EACrB,IAAA,OAAOluB,MAAM,CAACkI,MAAM,CAAC,IAAI,CAAC8kB,cAAc,CAAC,CAAC1jB,QAAQ,CAAC,IAAI,CAAC;EAC1D;IAEAiD,UAAUA,CAACC,MAAM,EAAE;MACjB,MAAM2iB,cAAc,GAAG7jB,WAAW,CAACK,iBAAiB,CAAC,IAAI,CAAC6B,QAAQ,CAAC;MAEnE,KAAK,MAAM4hB,aAAa,IAAIpvB,MAAM,CAACjB,IAAI,CAACowB,cAAc,CAAC,EAAE;EACvD,MAAA,IAAI/D,qBAAqB,CAAC7sB,GAAG,CAAC6wB,aAAa,CAAC,EAAE;UAC5C,OAAOD,cAAc,CAACC,aAAa,CAAC;EACtC;EACF;EAEA5iB,IAAAA,MAAM,GAAG;EACP,MAAA,GAAG2iB,cAAc;QACjB,IAAI,OAAO3iB,MAAM,KAAK,QAAQ,IAAIA,MAAM,GAAGA,MAAM,GAAG,EAAE;OACvD;EACDA,IAAAA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,CAAC;EACrCA,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC;EAC7B,IAAA,OAAOA,MAAM;EACf;IAEAE,iBAAiBA,CAACF,MAAM,EAAE;EACxBA,IAAAA,MAAM,CAAC+f,SAAS,GAAG/f,MAAM,CAAC+f,SAAS,KAAK,KAAK,GAAG7rB,QAAQ,CAAC+C,IAAI,GAAG9B,UAAU,CAAC6K,MAAM,CAAC+f,SAAS,CAAC;EAE5F,IAAA,IAAI,OAAO/f,MAAM,CAACigB,KAAK,KAAK,QAAQ,EAAE;QACpCjgB,MAAM,CAACigB,KAAK,GAAG;UACbvS,IAAI,EAAE1N,MAAM,CAACigB,KAAK;UAClBxS,IAAI,EAAEzN,MAAM,CAACigB;SACd;EACH;EAEA,IAAA,IAAI,OAAOjgB,MAAM,CAACmgB,KAAK,KAAK,QAAQ,EAAE;QACpCngB,MAAM,CAACmgB,KAAK,GAAGngB,MAAM,CAACmgB,KAAK,CAACzsB,QAAQ,EAAE;EACxC;EAEA,IAAA,IAAI,OAAOsM,MAAM,CAACqd,OAAO,KAAK,QAAQ,EAAE;QACtCrd,MAAM,CAACqd,OAAO,GAAGrd,MAAM,CAACqd,OAAO,CAAC3pB,QAAQ,EAAE;EAC5C;EAEA,IAAA,OAAOsM,MAAM;EACf;EAEAkiB,EAAAA,kBAAkBA,GAAG;MACnB,MAAMliB,MAAM,GAAG,EAAE;EAEjB,IAAA,KAAK,MAAM,CAACnO,GAAG,EAAEuM,KAAK,CAAC,IAAI5K,MAAM,CAACqJ,OAAO,CAAC,IAAI,CAACoE,OAAO,CAAC,EAAE;QACvD,IAAI,IAAI,CAACZ,WAAW,CAACT,OAAO,CAAC/N,GAAG,CAAC,KAAKuM,KAAK,EAAE;EAC3C4B,QAAAA,MAAM,CAACnO,GAAG,CAAC,GAAGuM,KAAK;EACrB;EACF;MAEA4B,MAAM,CAAClN,QAAQ,GAAG,KAAK;MACvBkN,MAAM,CAACzC,OAAO,GAAG,QAAQ;;EAEzB;EACA;EACA;EACA,IAAA,OAAOyC,MAAM;EACf;EAEAohB,EAAAA,cAAcA,GAAG;MACf,IAAI,IAAI,CAAC7P,OAAO,EAAE;EAChB,MAAA,IAAI,CAACA,OAAO,CAACS,OAAO,EAAE;QACtB,IAAI,CAACT,OAAO,GAAG,IAAI;EACrB;MAEA,IAAI,IAAI,CAACoP,GAAG,EAAE;EACZ,MAAA,IAAI,CAACA,GAAG,CAACnuB,MAAM,EAAE;QACjB,IAAI,CAACmuB,GAAG,GAAG,IAAI;EACjB;EACF;;EAEA;IACA,OAAO1oB,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAG+b,OAAO,CAACze,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEtD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAtI,kBAAkB,CAAC0oB,OAAO,CAAC;;ECtnB3B;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAMtoB,MAAI,GAAG,SAAS;EAEtB,MAAM+qB,cAAc,GAAG,iBAAiB;EACxC,MAAMC,gBAAgB,GAAG,eAAe;EAExC,MAAMljB,SAAO,GAAG;IACd,GAAGwgB,OAAO,CAACxgB,OAAO;EAClByd,EAAAA,OAAO,EAAE,EAAE;EACXjO,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdwD,EAAAA,SAAS,EAAE,OAAO;IAClB8K,QAAQ,EAAE,sCAAsC,GAC9C,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,QAAQ;EACVngB,EAAAA,OAAO,EAAE;EACX,CAAC;EAED,MAAMsC,aAAW,GAAG;IAClB,GAAGugB,OAAO,CAACvgB,WAAW;EACtBwd,EAAAA,OAAO,EAAE;EACX,CAAC;;EAED;EACA;EACA;;EAEA,MAAM0F,OAAO,SAAS3C,OAAO,CAAC;EAC5B;IACA,WAAWxgB,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACAupB,EAAAA,cAAcA,GAAG;MACf,OAAO,IAAI,CAACM,SAAS,EAAE,IAAI,IAAI,CAACqB,WAAW,EAAE;EAC/C;;EAEA;EACAnB,EAAAA,sBAAsBA,GAAG;MACvB,OAAO;EACL,MAAA,CAACgB,cAAc,GAAG,IAAI,CAAClB,SAAS,EAAE;EAClC,MAAA,CAACmB,gBAAgB,GAAG,IAAI,CAACE,WAAW;OACrC;EACH;EAEAA,EAAAA,WAAWA,GAAG;MACZ,OAAO,IAAI,CAACjF,wBAAwB,CAAC,IAAI,CAAC9c,OAAO,CAACoc,OAAO,CAAC;EAC5D;;EAEA;IACA,OAAOplB,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAG0e,OAAO,CAACphB,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEtD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAtI,kBAAkB,CAACqrB,OAAO,CAAC;;EC9F3B;EACA;EACA;EACA;EACA;EACA;;;EASA;EACA;EACA;;EAEA,MAAMjrB,MAAI,GAAG,WAAW;EACxB,MAAMqJ,UAAQ,GAAG,cAAc;EAC/B,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAChC,MAAMmD,YAAY,GAAG,WAAW;EAEhC,MAAM2e,cAAc,GAAG,CAAW5hB,QAAAA,EAAAA,WAAS,CAAE,CAAA;EAC7C,MAAMie,WAAW,GAAG,CAAQje,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAMqG,qBAAmB,GAAG,CAAA,IAAA,EAAOrG,WAAS,CAAA,EAAGiD,YAAY,CAAE,CAAA;EAE7D,MAAM4e,wBAAwB,GAAG,eAAe;EAChD,MAAM3e,mBAAiB,GAAG,QAAQ;EAElC,MAAM4e,iBAAiB,GAAG,wBAAwB;EAClD,MAAMC,qBAAqB,GAAG,QAAQ;EACtC,MAAMC,uBAAuB,GAAG,mBAAmB;EACnD,MAAMC,kBAAkB,GAAG,WAAW;EACtC,MAAMC,kBAAkB,GAAG,WAAW;EACtC,MAAMC,mBAAmB,GAAG,kBAAkB;EAC9C,MAAMC,mBAAmB,GAAG,CAAA,EAAGH,kBAAkB,CAAA,EAAA,EAAKC,kBAAkB,CAAMD,GAAAA,EAAAA,kBAAkB,CAAKE,EAAAA,EAAAA,mBAAmB,CAAE,CAAA;EAC1H,MAAME,iBAAiB,GAAG,WAAW;EACrC,MAAMC,0BAAwB,GAAG,kBAAkB;EAEnD,MAAM/jB,SAAO,GAAG;EACdwP,EAAAA,MAAM,EAAE,IAAI;EAAE;EACdwU,EAAAA,UAAU,EAAE,cAAc;EAC1BC,EAAAA,YAAY,EAAE,KAAK;EACnB9qB,EAAAA,MAAM,EAAE,IAAI;EACZ+qB,EAAAA,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;EACzB,CAAC;EAED,MAAMjkB,aAAW,GAAG;EAClBuP,EAAAA,MAAM,EAAE,eAAe;EAAE;EACzBwU,EAAAA,UAAU,EAAE,QAAQ;EACpBC,EAAAA,YAAY,EAAE,SAAS;EACvB9qB,EAAAA,MAAM,EAAE,SAAS;EACjB+qB,EAAAA,SAAS,EAAE;EACb,CAAC;;EAED;EACA;EACA;;EAEA,MAAMC,SAAS,SAAShjB,aAAa,CAAC;EACpCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;;EAEtB;EACA,IAAA,IAAI,CAACgkB,YAAY,GAAG,IAAItyB,GAAG,EAAE;EAC7B,IAAA,IAAI,CAACuyB,mBAAmB,GAAG,IAAIvyB,GAAG,EAAE;EACpC,IAAA,IAAI,CAACwyB,YAAY,GAAG3vB,gBAAgB,CAAC,IAAI,CAACyM,QAAQ,CAAC,CAACgY,SAAS,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAChY,QAAQ;MAClG,IAAI,CAACmjB,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,SAAS,GAAG,IAAI;MACrB,IAAI,CAACC,mBAAmB,GAAG;EACzBC,MAAAA,eAAe,EAAE,CAAC;EAClBC,MAAAA,eAAe,EAAE;OAClB;EACD,IAAA,IAAI,CAACC,OAAO,EAAE,CAAC;EACjB;;EAEA;IACA,WAAW5kB,OAAOA,GAAG;EACnB,IAAA,OAAOA,SAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,aAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACA0sB,EAAAA,OAAOA,GAAG;MACR,IAAI,CAACC,gCAAgC,EAAE;MACvC,IAAI,CAACC,wBAAwB,EAAE;MAE/B,IAAI,IAAI,CAACN,SAAS,EAAE;EAClB,MAAA,IAAI,CAACA,SAAS,CAACO,UAAU,EAAE;EAC7B,KAAC,MAAM;EACL,MAAA,IAAI,CAACP,SAAS,GAAG,IAAI,CAACQ,eAAe,EAAE;EACzC;MAEA,KAAK,MAAMC,OAAO,IAAI,IAAI,CAACZ,mBAAmB,CAACvoB,MAAM,EAAE,EAAE;EACvD,MAAA,IAAI,CAAC0oB,SAAS,CAACU,OAAO,CAACD,OAAO,CAAC;EACjC;EACF;EAEAzjB,EAAAA,OAAOA,GAAG;EACR,IAAA,IAAI,CAACgjB,SAAS,CAACO,UAAU,EAAE;MAC3B,KAAK,CAACvjB,OAAO,EAAE;EACjB;;EAEA;IACAlB,iBAAiBA,CAACF,MAAM,EAAE;EACxB;EACAA,IAAAA,MAAM,CAACjH,MAAM,GAAG5D,UAAU,CAAC6K,MAAM,CAACjH,MAAM,CAAC,IAAI7E,QAAQ,CAAC+C,IAAI;;EAE1D;EACA+I,IAAAA,MAAM,CAAC4jB,UAAU,GAAG5jB,MAAM,CAACoP,MAAM,GAAG,CAAGpP,EAAAA,MAAM,CAACoP,MAAM,CAAA,WAAA,CAAa,GAAGpP,MAAM,CAAC4jB,UAAU;EAErF,IAAA,IAAI,OAAO5jB,MAAM,CAAC8jB,SAAS,KAAK,QAAQ,EAAE;QACxC9jB,MAAM,CAAC8jB,SAAS,GAAG9jB,MAAM,CAAC8jB,SAAS,CAAClvB,KAAK,CAAC,GAAG,CAAC,CAACoN,GAAG,CAAC5D,KAAK,IAAI3J,MAAM,CAACC,UAAU,CAAC0J,KAAK,CAAC,CAAC;EACvF;EAEA,IAAA,OAAO4B,MAAM;EACf;EAEA0kB,EAAAA,wBAAwBA,GAAG;EACzB,IAAA,IAAI,CAAC,IAAI,CAACzjB,OAAO,CAAC4iB,YAAY,EAAE;EAC9B,MAAA;EACF;;EAEA;MACA/oB,YAAY,CAACC,GAAG,CAAC,IAAI,CAACkG,OAAO,CAAClI,MAAM,EAAEumB,WAAW,CAAC;EAElDxkB,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACkE,OAAO,CAAClI,MAAM,EAAEumB,WAAW,EAAE8D,qBAAqB,EAAE1oB,KAAK,IAAI;EAChF,MAAA,MAAMqqB,iBAAiB,GAAG,IAAI,CAACd,mBAAmB,CAAChyB,GAAG,CAACyI,KAAK,CAAC3B,MAAM,CAAC6V,IAAI,CAAC;EACzE,MAAA,IAAImW,iBAAiB,EAAE;UACrBrqB,KAAK,CAACuD,cAAc,EAAE;EACtB,QAAA,MAAMvH,IAAI,GAAG,IAAI,CAACwtB,YAAY,IAAInxB,MAAM;UACxC,MAAMiyB,MAAM,GAAGD,iBAAiB,CAACE,SAAS,GAAG,IAAI,CAACjkB,QAAQ,CAACikB,SAAS;UACpE,IAAIvuB,IAAI,CAACwuB,QAAQ,EAAE;YACjBxuB,IAAI,CAACwuB,QAAQ,CAAC;EAAEC,YAAAA,GAAG,EAAEH,MAAM;EAAEI,YAAAA,QAAQ,EAAE;EAAS,WAAC,CAAC;EAClD,UAAA;EACF;;EAEA;UACA1uB,IAAI,CAAC4hB,SAAS,GAAG0M,MAAM;EACzB;EACF,KAAC,CAAC;EACJ;EAEAJ,EAAAA,eAAeA,GAAG;EAChB,IAAA,MAAM9R,OAAO,GAAG;QACdpc,IAAI,EAAE,IAAI,CAACwtB,YAAY;EACvBJ,MAAAA,SAAS,EAAE,IAAI,CAAC7iB,OAAO,CAAC6iB,SAAS;EACjCF,MAAAA,UAAU,EAAE,IAAI,CAAC3iB,OAAO,CAAC2iB;OAC1B;EAED,IAAA,OAAO,IAAIyB,oBAAoB,CAACxoB,OAAO,IAAI,IAAI,CAACyoB,iBAAiB,CAACzoB,OAAO,CAAC,EAAEiW,OAAO,CAAC;EACtF;;EAEA;IACAwS,iBAAiBA,CAACzoB,OAAO,EAAE;EACzB,IAAA,MAAM0oB,aAAa,GAAG3H,KAAK,IAAI,IAAI,CAACoG,YAAY,CAAC/xB,GAAG,CAAC,IAAI2rB,KAAK,CAAC7kB,MAAM,CAAC3F,EAAE,EAAE,CAAC;MAC3E,MAAM6hB,QAAQ,GAAG2I,KAAK,IAAI;QACxB,IAAI,CAACyG,mBAAmB,CAACC,eAAe,GAAG1G,KAAK,CAAC7kB,MAAM,CAACksB,SAAS;EACjE,MAAA,IAAI,CAACO,QAAQ,CAACD,aAAa,CAAC3H,KAAK,CAAC,CAAC;OACpC;MAED,MAAM2G,eAAe,GAAG,CAAC,IAAI,CAACL,YAAY,IAAIhwB,QAAQ,CAACqC,eAAe,EAAE+hB,SAAS;MACjF,MAAMmN,eAAe,GAAGlB,eAAe,IAAI,IAAI,CAACF,mBAAmB,CAACE,eAAe;EACnF,IAAA,IAAI,CAACF,mBAAmB,CAACE,eAAe,GAAGA,eAAe;EAE1D,IAAA,KAAK,MAAM3G,KAAK,IAAI/gB,OAAO,EAAE;EAC3B,MAAA,IAAI,CAAC+gB,KAAK,CAAC8H,cAAc,EAAE;UACzB,IAAI,CAACvB,aAAa,GAAG,IAAI;EACzB,QAAA,IAAI,CAACwB,iBAAiB,CAACJ,aAAa,CAAC3H,KAAK,CAAC,CAAC;EAE5C,QAAA;EACF;EAEA,MAAA,MAAMgI,wBAAwB,GAAGhI,KAAK,CAAC7kB,MAAM,CAACksB,SAAS,IAAI,IAAI,CAACZ,mBAAmB,CAACC,eAAe;EACnG;QACA,IAAImB,eAAe,IAAIG,wBAAwB,EAAE;UAC/C3Q,QAAQ,CAAC2I,KAAK,CAAC;EACf;UACA,IAAI,CAAC2G,eAAe,EAAE;EACpB,UAAA;EACF;EAEA,QAAA;EACF;;EAEA;EACA,MAAA,IAAI,CAACkB,eAAe,IAAI,CAACG,wBAAwB,EAAE;UACjD3Q,QAAQ,CAAC2I,KAAK,CAAC;EACjB;EACF;EACF;EAEA6G,EAAAA,gCAAgCA,GAAG;EACjC,IAAA,IAAI,CAACT,YAAY,GAAG,IAAItyB,GAAG,EAAE;EAC7B,IAAA,IAAI,CAACuyB,mBAAmB,GAAG,IAAIvyB,GAAG,EAAE;EAEpC,IAAA,MAAMm0B,WAAW,GAAG1jB,cAAc,CAACxG,IAAI,CAACynB,qBAAqB,EAAE,IAAI,CAACniB,OAAO,CAAClI,MAAM,CAAC;EAEnF,IAAA,KAAK,MAAM+sB,MAAM,IAAID,WAAW,EAAE;EAChC;QACA,IAAI,CAACC,MAAM,CAAClX,IAAI,IAAI9Y,UAAU,CAACgwB,MAAM,CAAC,EAAE;EACtC,QAAA;EACF;EAEA,MAAA,MAAMf,iBAAiB,GAAG5iB,cAAc,CAACG,OAAO,CAACyjB,SAAS,CAACD,MAAM,CAAClX,IAAI,CAAC,EAAE,IAAI,CAAC5N,QAAQ,CAAC;;EAEvF;EACA,MAAA,IAAI1L,SAAS,CAACyvB,iBAAiB,CAAC,EAAE;EAChC,QAAA,IAAI,CAACf,YAAY,CAACryB,GAAG,CAACo0B,SAAS,CAACD,MAAM,CAAClX,IAAI,CAAC,EAAEkX,MAAM,CAAC;UACrD,IAAI,CAAC7B,mBAAmB,CAACtyB,GAAG,CAACm0B,MAAM,CAAClX,IAAI,EAAEmW,iBAAiB,CAAC;EAC9D;EACF;EACF;IAEAS,QAAQA,CAACzsB,MAAM,EAAE;EACf,IAAA,IAAI,IAAI,CAACorB,aAAa,KAAKprB,MAAM,EAAE;EACjC,MAAA;EACF;MAEA,IAAI,CAAC4sB,iBAAiB,CAAC,IAAI,CAAC1kB,OAAO,CAAClI,MAAM,CAAC;MAC3C,IAAI,CAACorB,aAAa,GAAGprB,MAAM;EAC3BA,IAAAA,MAAM,CAAC9C,SAAS,CAACwQ,GAAG,CAAClC,mBAAiB,CAAC;EACvC,IAAA,IAAI,CAACyhB,gBAAgB,CAACjtB,MAAM,CAAC;MAE7B+B,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEiiB,cAAc,EAAE;EAAE7mB,MAAAA,aAAa,EAAErD;EAAO,KAAC,CAAC;EAChF;IAEAitB,gBAAgBA,CAACjtB,MAAM,EAAE;EACvB;MACA,IAAIA,MAAM,CAAC9C,SAAS,CAACC,QAAQ,CAACgtB,wBAAwB,CAAC,EAAE;EACvD/gB,MAAAA,cAAc,CAACG,OAAO,CAACqhB,0BAAwB,EAAE5qB,MAAM,CAACpD,OAAO,CAAC+tB,iBAAiB,CAAC,CAAC,CAChFztB,SAAS,CAACwQ,GAAG,CAAClC,mBAAiB,CAAC;EACnC,MAAA;EACF;MAEA,KAAK,MAAM0hB,SAAS,IAAI9jB,cAAc,CAACO,OAAO,CAAC3J,MAAM,EAAEsqB,uBAAuB,CAAC,EAAE;EAC/E;EACA;QACA,KAAK,MAAM6C,IAAI,IAAI/jB,cAAc,CAACS,IAAI,CAACqjB,SAAS,EAAExC,mBAAmB,CAAC,EAAE;EACtEyC,QAAAA,IAAI,CAACjwB,SAAS,CAACwQ,GAAG,CAAClC,mBAAiB,CAAC;EACvC;EACF;EACF;IAEAohB,iBAAiBA,CAAC7Y,MAAM,EAAE;EACxBA,IAAAA,MAAM,CAAC7W,SAAS,CAACzD,MAAM,CAAC+R,mBAAiB,CAAC;EAE1C,IAAA,MAAM4hB,WAAW,GAAGhkB,cAAc,CAACxG,IAAI,CAAC,CAAGynB,EAAAA,qBAAqB,CAAI7e,CAAAA,EAAAA,mBAAiB,CAAE,CAAA,EAAEuI,MAAM,CAAC;EAChG,IAAA,KAAK,MAAMsZ,IAAI,IAAID,WAAW,EAAE;EAC9BC,MAAAA,IAAI,CAACnwB,SAAS,CAACzD,MAAM,CAAC+R,mBAAiB,CAAC;EAC1C;EACF;;EAEA;IACA,OAAOtM,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAG0f,SAAS,CAACpiB,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAExD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAIqE,IAAI,CAACrE,MAAM,CAAC,KAAKzM,SAAS,IAAIyM,MAAM,CAAC7C,UAAU,CAAC,GAAG,CAAC,IAAI6C,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAE2U,qBAAmB,EAAE,MAAM;IACjD,KAAK,MAAM2e,GAAG,IAAIlkB,cAAc,CAACxG,IAAI,CAACwnB,iBAAiB,CAAC,EAAE;EACxDY,IAAAA,SAAS,CAACpiB,mBAAmB,CAAC0kB,GAAG,CAAC;EACpC;EACF,CAAC,CAAC;;EAEF;EACA;EACA;;EAEA3uB,kBAAkB,CAACqsB,SAAS,CAAC;;ECrS7B;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMjsB,MAAI,GAAG,KAAK;EAClB,MAAMqJ,UAAQ,GAAG,QAAQ;EACzB,MAAME,WAAS,GAAG,CAAIF,CAAAA,EAAAA,UAAQ,CAAE,CAAA;EAEhC,MAAMiL,YAAU,GAAG,CAAO/K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAMgL,cAAY,GAAG,CAAShL,MAAAA,EAAAA,WAAS,CAAE,CAAA;EACzC,MAAM6K,YAAU,GAAG,CAAO7K,IAAAA,EAAAA,WAAS,CAAE,CAAA;EACrC,MAAM8K,aAAW,GAAG,CAAQ9K,KAAAA,EAAAA,WAAS,CAAE,CAAA;EACvC,MAAMoD,oBAAoB,GAAG,CAAQpD,KAAAA,EAAAA,WAAS,CAAE,CAAA;EAChD,MAAMiG,aAAa,GAAG,CAAUjG,OAAAA,EAAAA,WAAS,CAAE,CAAA;EAC3C,MAAMqG,mBAAmB,GAAG,CAAOrG,IAAAA,EAAAA,WAAS,CAAE,CAAA;EAE9C,MAAMwF,cAAc,GAAG,WAAW;EAClC,MAAMC,eAAe,GAAG,YAAY;EACpC,MAAM4I,YAAY,GAAG,SAAS;EAC9B,MAAMC,cAAc,GAAG,WAAW;EAClC,MAAM2W,QAAQ,GAAG,MAAM;EACvB,MAAMC,OAAO,GAAG,KAAK;EAErB,MAAMhiB,iBAAiB,GAAG,QAAQ;EAClC,MAAMT,iBAAe,GAAG,MAAM;EAC9B,MAAMC,iBAAe,GAAG,MAAM;EAC9B,MAAMyiB,cAAc,GAAG,UAAU;EAEjC,MAAM7C,wBAAwB,GAAG,kBAAkB;EACnD,MAAM8C,sBAAsB,GAAG,gBAAgB;EAC/C,MAAMC,4BAA4B,GAAG,CAAQ/C,KAAAA,EAAAA,wBAAwB,CAAG,CAAA,CAAA;EAExE,MAAMgD,kBAAkB,GAAG,qCAAqC;EAChE,MAAMC,cAAc,GAAG,6BAA6B;EACpD,MAAMC,cAAc,GAAG,CAAYH,SAAAA,EAAAA,4BAA4B,qBAAqBA,4BAA4B,CAAA,cAAA,EAAiBA,4BAA4B,CAAE,CAAA;EAC/J,MAAMliB,oBAAoB,GAAG,0EAA0E,CAAC;EACxG,MAAMsiB,mBAAmB,GAAG,CAAA,EAAGD,cAAc,CAAA,EAAA,EAAKriB,oBAAoB,CAAE,CAAA;EAExE,MAAMuiB,2BAA2B,GAAG,CAAIxiB,CAAAA,EAAAA,iBAAiB,4BAA4BA,iBAAiB,CAAA,0BAAA,EAA6BA,iBAAiB,CAAyB,uBAAA,CAAA;;EAE7K;EACA;EACA;;EAEA,MAAMyiB,GAAG,SAASjmB,aAAa,CAAC;IAC9BV,WAAWA,CAACzO,OAAO,EAAE;MACnB,KAAK,CAACA,OAAO,CAAC;MACd,IAAI,CAAC4f,OAAO,GAAG,IAAI,CAACxQ,QAAQ,CAACrL,OAAO,CAACgxB,kBAAkB,CAAC;EAExD,IAAA,IAAI,CAAC,IAAI,CAACnV,OAAO,EAAE;EACjB,MAAA;EACA;EACA;EACF;;EAEA;EACA,IAAA,IAAI,CAACyV,qBAAqB,CAAC,IAAI,CAACzV,OAAO,EAAE,IAAI,CAAC0V,YAAY,EAAE,CAAC;EAE7DpsB,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEsG,aAAa,EAAE5M,KAAK,IAAI,IAAI,CAAC6P,QAAQ,CAAC7P,KAAK,CAAC,CAAC;EAC9E;;EAEA;IACA,WAAW5C,IAAIA,GAAG;EAChB,IAAA,OAAOA,MAAI;EACb;;EAEA;EACA4V,EAAAA,IAAIA,GAAG;EAAE;EACP,IAAA,MAAMyZ,SAAS,GAAG,IAAI,CAACnmB,QAAQ;EAC/B,IAAA,IAAI,IAAI,CAAComB,aAAa,CAACD,SAAS,CAAC,EAAE;EACjC,MAAA;EACF;;EAEA;EACA,IAAA,MAAME,MAAM,GAAG,IAAI,CAACC,cAAc,EAAE;MAEpC,MAAMpV,SAAS,GAAGmV,MAAM,GACtBvsB,YAAY,CAACyC,OAAO,CAAC8pB,MAAM,EAAEjb,YAAU,EAAE;EAAEhQ,MAAAA,aAAa,EAAE+qB;OAAW,CAAC,GACtE,IAAI;MAEN,MAAMvV,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC4pB,SAAS,EAAEjb,YAAU,EAAE;EAAE9P,MAAAA,aAAa,EAAEirB;EAAO,KAAC,CAAC;MAExF,IAAIzV,SAAS,CAACjU,gBAAgB,IAAKuU,SAAS,IAAIA,SAAS,CAACvU,gBAAiB,EAAE;EAC3E,MAAA;EACF;EAEA,IAAA,IAAI,CAAC4pB,WAAW,CAACF,MAAM,EAAEF,SAAS,CAAC;EACnC,IAAA,IAAI,CAACK,SAAS,CAACL,SAAS,EAAEE,MAAM,CAAC;EACnC;;EAEA;EACAG,EAAAA,SAASA,CAAC51B,OAAO,EAAE61B,WAAW,EAAE;MAC9B,IAAI,CAAC71B,OAAO,EAAE;EACZ,MAAA;EACF;EAEAA,IAAAA,OAAO,CAACqE,SAAS,CAACwQ,GAAG,CAAClC,iBAAiB,CAAC;MAExC,IAAI,CAACijB,SAAS,CAACrlB,cAAc,CAACkB,sBAAsB,CAACzR,OAAO,CAAC,CAAC,CAAC;;MAE/D,MAAMsc,QAAQ,GAAGA,MAAM;QACrB,IAAItc,OAAO,CAACyE,YAAY,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;EAC1CzE,QAAAA,OAAO,CAACqE,SAAS,CAACwQ,GAAG,CAAC1C,iBAAe,CAAC;EACtC,QAAA;EACF;EAEAnS,MAAAA,OAAO,CAACsN,eAAe,CAAC,UAAU,CAAC;EACnCtN,MAAAA,OAAO,CAACoN,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC;EAC3C,MAAA,IAAI,CAAC0oB,eAAe,CAAC91B,OAAO,EAAE,IAAI,CAAC;EACnCkJ,MAAAA,YAAY,CAACyC,OAAO,CAAC3L,OAAO,EAAEua,aAAW,EAAE;EACzC/P,QAAAA,aAAa,EAAEqrB;EACjB,OAAC,CAAC;OACH;EAED,IAAA,IAAI,CAACjmB,cAAc,CAAC0M,QAAQ,EAAEtc,OAAO,EAAEA,OAAO,CAACqE,SAAS,CAACC,QAAQ,CAAC4N,iBAAe,CAAC,CAAC;EACrF;EAEAyjB,EAAAA,WAAWA,CAAC31B,OAAO,EAAE61B,WAAW,EAAE;MAChC,IAAI,CAAC71B,OAAO,EAAE;EACZ,MAAA;EACF;EAEAA,IAAAA,OAAO,CAACqE,SAAS,CAACzD,MAAM,CAAC+R,iBAAiB,CAAC;MAC3C3S,OAAO,CAAC8nB,IAAI,EAAE;MAEd,IAAI,CAAC6N,WAAW,CAACplB,cAAc,CAACkB,sBAAsB,CAACzR,OAAO,CAAC,CAAC,CAAC;;MAEjE,MAAMsc,QAAQ,GAAGA,MAAM;QACrB,IAAItc,OAAO,CAACyE,YAAY,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;EAC1CzE,QAAAA,OAAO,CAACqE,SAAS,CAACzD,MAAM,CAACuR,iBAAe,CAAC;EACzC,QAAA;EACF;EAEAnS,MAAAA,OAAO,CAACoN,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC;EAC5CpN,MAAAA,OAAO,CAACoN,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;EACtC,MAAA,IAAI,CAAC0oB,eAAe,CAAC91B,OAAO,EAAE,KAAK,CAAC;EACpCkJ,MAAAA,YAAY,CAACyC,OAAO,CAAC3L,OAAO,EAAEya,cAAY,EAAE;EAAEjQ,QAAAA,aAAa,EAAEqrB;EAAY,OAAC,CAAC;OAC5E;EAED,IAAA,IAAI,CAACjmB,cAAc,CAAC0M,QAAQ,EAAEtc,OAAO,EAAEA,OAAO,CAACqE,SAAS,CAACC,QAAQ,CAAC4N,iBAAe,CAAC,CAAC;EACrF;IAEAyG,QAAQA,CAAC7P,KAAK,EAAE;MACd,IAAI,CAAE,CAACmM,cAAc,EAAEC,eAAe,EAAE4I,YAAY,EAAEC,cAAc,EAAE2W,QAAQ,EAAEC,OAAO,CAAC,CAACzpB,QAAQ,CAACpC,KAAK,CAAC7I,GAAG,CAAE,EAAE;EAC7G,MAAA;EACF;MAEA6I,KAAK,CAACiZ,eAAe,EAAE,CAAA;MACvBjZ,KAAK,CAACuD,cAAc,EAAE;EAEtB,IAAA,MAAMsE,QAAQ,GAAG,IAAI,CAAC2kB,YAAY,EAAE,CAAC3nB,MAAM,CAAC3N,OAAO,IAAI,CAACkE,UAAU,CAAClE,OAAO,CAAC,CAAC;EAC5E,IAAA,IAAI+1B,iBAAiB;EAErB,IAAA,IAAI,CAACrB,QAAQ,EAAEC,OAAO,CAAC,CAACzpB,QAAQ,CAACpC,KAAK,CAAC7I,GAAG,CAAC,EAAE;EAC3C81B,MAAAA,iBAAiB,GAAGplB,QAAQ,CAAC7H,KAAK,CAAC7I,GAAG,KAAKy0B,QAAQ,GAAG,CAAC,GAAG/jB,QAAQ,CAACnN,MAAM,GAAG,CAAC,CAAC;EAChF,KAAC,MAAM;EACL,MAAA,MAAM+V,MAAM,GAAG,CAACrE,eAAe,EAAE6I,cAAc,CAAC,CAAC7S,QAAQ,CAACpC,KAAK,CAAC7I,GAAG,CAAC;EACpE81B,MAAAA,iBAAiB,GAAGzuB,oBAAoB,CAACqJ,QAAQ,EAAE7H,KAAK,CAAC3B,MAAM,EAAEoS,MAAM,EAAE,IAAI,CAAC;EAChF;EAEA,IAAA,IAAIwc,iBAAiB,EAAE;QACrBA,iBAAiB,CAAC7V,KAAK,CAAC;EAAE8V,QAAAA,aAAa,EAAE;EAAK,OAAC,CAAC;QAChDZ,GAAG,CAACrlB,mBAAmB,CAACgmB,iBAAiB,CAAC,CAACja,IAAI,EAAE;EACnD;EACF;EAEAwZ,EAAAA,YAAYA,GAAG;EAAE;MACf,OAAO/kB,cAAc,CAACxG,IAAI,CAACmrB,mBAAmB,EAAE,IAAI,CAACtV,OAAO,CAAC;EAC/D;EAEA8V,EAAAA,cAAcA,GAAG;EACf,IAAA,OAAO,IAAI,CAACJ,YAAY,EAAE,CAACvrB,IAAI,CAAC6G,KAAK,IAAI,IAAI,CAAC4kB,aAAa,CAAC5kB,KAAK,CAAC,CAAC,IAAI,IAAI;EAC7E;EAEAykB,EAAAA,qBAAqBA,CAACna,MAAM,EAAEvK,QAAQ,EAAE;MACtC,IAAI,CAACslB,wBAAwB,CAAC/a,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;EAExD,IAAA,KAAK,MAAMtK,KAAK,IAAID,QAAQ,EAAE;EAC5B,MAAA,IAAI,CAACulB,4BAA4B,CAACtlB,KAAK,CAAC;EAC1C;EACF;IAEAslB,4BAA4BA,CAACtlB,KAAK,EAAE;EAClCA,IAAAA,KAAK,GAAG,IAAI,CAACulB,gBAAgB,CAACvlB,KAAK,CAAC;EACpC,IAAA,MAAMwlB,QAAQ,GAAG,IAAI,CAACZ,aAAa,CAAC5kB,KAAK,CAAC;EAC1C,IAAA,MAAMylB,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAAC1lB,KAAK,CAAC;EAC9CA,IAAAA,KAAK,CAACxD,YAAY,CAAC,eAAe,EAAEgpB,QAAQ,CAAC;MAE7C,IAAIC,SAAS,KAAKzlB,KAAK,EAAE;QACvB,IAAI,CAACqlB,wBAAwB,CAACI,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC;EAClE;MAEA,IAAI,CAACD,QAAQ,EAAE;EACbxlB,MAAAA,KAAK,CAACxD,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;EACtC;MAEA,IAAI,CAAC6oB,wBAAwB,CAACrlB,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;;EAEnD;EACA,IAAA,IAAI,CAAC2lB,kCAAkC,CAAC3lB,KAAK,CAAC;EAChD;IAEA2lB,kCAAkCA,CAAC3lB,KAAK,EAAE;EACxC,IAAA,MAAMzJ,MAAM,GAAGoJ,cAAc,CAACkB,sBAAsB,CAACb,KAAK,CAAC;MAE3D,IAAI,CAACzJ,MAAM,EAAE;EACX,MAAA;EACF;MAEA,IAAI,CAAC8uB,wBAAwB,CAAC9uB,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;MAEzD,IAAIyJ,KAAK,CAACpP,EAAE,EAAE;EACZ,MAAA,IAAI,CAACy0B,wBAAwB,CAAC9uB,MAAM,EAAE,iBAAiB,EAAE,CAAA,EAAGyJ,KAAK,CAACpP,EAAE,CAAA,CAAE,CAAC;EACzE;EACF;EAEAs0B,EAAAA,eAAeA,CAAC91B,OAAO,EAAEw2B,IAAI,EAAE;EAC7B,IAAA,MAAMH,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAACt2B,OAAO,CAAC;MAChD,IAAI,CAACq2B,SAAS,CAAChyB,SAAS,CAACC,QAAQ,CAACswB,cAAc,CAAC,EAAE;EACjD,MAAA;EACF;EAEA,IAAA,MAAM7hB,MAAM,GAAGA,CAAC7R,QAAQ,EAAE+gB,SAAS,KAAK;QACtC,MAAMjiB,OAAO,GAAGuQ,cAAc,CAACG,OAAO,CAACxP,QAAQ,EAAEm1B,SAAS,CAAC;EAC3D,MAAA,IAAIr2B,OAAO,EAAE;UACXA,OAAO,CAACqE,SAAS,CAAC0O,MAAM,CAACkP,SAAS,EAAEuU,IAAI,CAAC;EAC3C;OACD;EAEDzjB,IAAAA,MAAM,CAACgf,wBAAwB,EAAEpf,iBAAiB,CAAC;EACnDI,IAAAA,MAAM,CAAC8hB,sBAAsB,EAAE1iB,iBAAe,CAAC;EAC/CkkB,IAAAA,SAAS,CAACjpB,YAAY,CAAC,eAAe,EAAEopB,IAAI,CAAC;EAC/C;EAEAP,EAAAA,wBAAwBA,CAACj2B,OAAO,EAAEqqB,SAAS,EAAE7d,KAAK,EAAE;EAClD,IAAA,IAAI,CAACxM,OAAO,CAACwE,YAAY,CAAC6lB,SAAS,CAAC,EAAE;EACpCrqB,MAAAA,OAAO,CAACoN,YAAY,CAACid,SAAS,EAAE7d,KAAK,CAAC;EACxC;EACF;IAEAgpB,aAAaA,CAACja,IAAI,EAAE;EAClB,IAAA,OAAOA,IAAI,CAAClX,SAAS,CAACC,QAAQ,CAACqO,iBAAiB,CAAC;EACnD;;EAEA;IACAwjB,gBAAgBA,CAAC5a,IAAI,EAAE;EACrB,IAAA,OAAOA,IAAI,CAAC1K,OAAO,CAACqkB,mBAAmB,CAAC,GAAG3Z,IAAI,GAAGhL,cAAc,CAACG,OAAO,CAACwkB,mBAAmB,EAAE3Z,IAAI,CAAC;EACrG;;EAEA;IACA+a,gBAAgBA,CAAC/a,IAAI,EAAE;EACrB,IAAA,OAAOA,IAAI,CAACxX,OAAO,CAACixB,cAAc,CAAC,IAAIzZ,IAAI;EAC7C;;EAEA;IACA,OAAOlV,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAG2iB,GAAG,CAACrlB,mBAAmB,CAAC,IAAI,CAAC;EAE1C,MAAA,IAAI,OAAO3B,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA;EACF;EAEA,MAAA,IAAIqE,IAAI,CAACrE,MAAM,CAAC,KAAKzM,SAAS,IAAIyM,MAAM,CAAC7C,UAAU,CAAC,GAAG,CAAC,IAAI6C,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,MAAAA,IAAI,CAACrE,MAAM,CAAC,EAAE;EAChB,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAlF,YAAY,CAACiC,EAAE,CAAC7I,QAAQ,EAAEuQ,oBAAoB,EAAED,oBAAoB,EAAE,UAAU9J,KAAK,EAAE;EACrF,EAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACoC,QAAQ,CAAC,IAAI,CAAC6G,OAAO,CAAC,EAAE;MACxCjJ,KAAK,CAACuD,cAAc,EAAE;EACxB;EAEA,EAAA,IAAInI,UAAU,CAAC,IAAI,CAAC,EAAE;EACpB,IAAA;EACF;IAEAkxB,GAAG,CAACrlB,mBAAmB,CAAC,IAAI,CAAC,CAAC+L,IAAI,EAAE;EACtC,CAAC,CAAC;;EAEF;EACA;EACA;EACA5S,YAAY,CAACiC,EAAE,CAAChK,MAAM,EAAE2U,mBAAmB,EAAE,MAAM;IACjD,KAAK,MAAM9V,OAAO,IAAIuQ,cAAc,CAACxG,IAAI,CAACorB,2BAA2B,CAAC,EAAE;EACtEC,IAAAA,GAAG,CAACrlB,mBAAmB,CAAC/P,OAAO,CAAC;EAClC;EACF,CAAC,CAAC;EACF;EACA;EACA;;EAEA8F,kBAAkB,CAACsvB,GAAG,CAAC;;ECxTvB;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMlvB,IAAI,GAAG,OAAO;EACpB,MAAMqJ,QAAQ,GAAG,UAAU;EAC3B,MAAME,SAAS,GAAG,CAAIF,CAAAA,EAAAA,QAAQ,CAAE,CAAA;EAEhC,MAAMknB,eAAe,GAAG,CAAYhnB,SAAAA,EAAAA,SAAS,CAAE,CAAA;EAC/C,MAAMinB,cAAc,GAAG,CAAWjnB,QAAAA,EAAAA,SAAS,CAAE,CAAA;EAC7C,MAAMmT,aAAa,GAAG,CAAUnT,OAAAA,EAAAA,SAAS,CAAE,CAAA;EAC3C,MAAMke,cAAc,GAAG,CAAWle,QAAAA,EAAAA,SAAS,CAAE,CAAA;EAC7C,MAAM+K,UAAU,GAAG,CAAO/K,IAAAA,EAAAA,SAAS,CAAE,CAAA;EACrC,MAAMgL,YAAY,GAAG,CAAShL,MAAAA,EAAAA,SAAS,CAAE,CAAA;EACzC,MAAM6K,UAAU,GAAG,CAAO7K,IAAAA,EAAAA,SAAS,CAAE,CAAA;EACrC,MAAM8K,WAAW,GAAG,CAAQ9K,KAAAA,EAAAA,SAAS,CAAE,CAAA;EAEvC,MAAMyC,eAAe,GAAG,MAAM;EAC9B,MAAMykB,eAAe,GAAG,MAAM,CAAC;EAC/B,MAAMxkB,eAAe,GAAG,MAAM;EAC9B,MAAMsV,kBAAkB,GAAG,SAAS;EAEpC,MAAMxZ,WAAW,GAAG;EAClBigB,EAAAA,SAAS,EAAE,SAAS;EACpB0I,EAAAA,QAAQ,EAAE,SAAS;EACnBvI,EAAAA,KAAK,EAAE;EACT,CAAC;EAED,MAAMrgB,OAAO,GAAG;EACdkgB,EAAAA,SAAS,EAAE,IAAI;EACf0I,EAAAA,QAAQ,EAAE,IAAI;EACdvI,EAAAA,KAAK,EAAE;EACT,CAAC;;EAED;EACA;EACA;;EAEA,MAAMwI,KAAK,SAAS1nB,aAAa,CAAC;EAChCV,EAAAA,WAAWA,CAACzO,OAAO,EAAEoO,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACpO,OAAO,EAAEoO,MAAM,CAAC;MAEtB,IAAI,CAACsgB,QAAQ,GAAG,IAAI;MACpB,IAAI,CAACoI,oBAAoB,GAAG,KAAK;MACjC,IAAI,CAACC,uBAAuB,GAAG,KAAK;MACpC,IAAI,CAAC/H,aAAa,EAAE;EACtB;;EAEA;IACA,WAAWhhB,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO;EAChB;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAOA,WAAW;EACpB;IAEA,WAAW/H,IAAIA,GAAG;EAChB,IAAA,OAAOA,IAAI;EACb;;EAEA;EACA4V,EAAAA,IAAIA,GAAG;MACL,MAAMkE,SAAS,GAAG9W,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEkL,UAAU,CAAC;MAEjE,IAAI0F,SAAS,CAACjU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,IAAI,CAACirB,aAAa,EAAE;EAEpB,IAAA,IAAI,IAAI,CAAC3nB,OAAO,CAAC6e,SAAS,EAAE;QAC1B,IAAI,CAAC9e,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC3C,eAAe,CAAC;EAC9C;MAEA,MAAMoK,QAAQ,GAAGA,MAAM;QACrB,IAAI,CAAClN,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC6mB,kBAAkB,CAAC;QAClDve,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEmL,WAAW,CAAC;QAEhD,IAAI,CAAC0c,kBAAkB,EAAE;OAC1B;MAED,IAAI,CAAC7nB,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC+1B,eAAe,CAAC,CAAC;EAChD1xB,IAAAA,MAAM,CAAC,IAAI,CAACmK,QAAQ,CAAC;MACrB,IAAI,CAACA,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC1C,eAAe,EAAEsV,kBAAkB,CAAC;EAEhE,IAAA,IAAI,CAAC7X,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAAClN,QAAQ,EAAE,IAAI,CAACC,OAAO,CAAC6e,SAAS,CAAC;EACtE;EAEArS,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAAC,IAAI,CAACqb,OAAO,EAAE,EAAE;EACnB,MAAA;EACF;MAEA,MAAM5W,SAAS,GAAGpX,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEoL,UAAU,CAAC;MAEjE,IAAI8F,SAAS,CAACvU,gBAAgB,EAAE;EAC9B,MAAA;EACF;MAEA,MAAMuQ,QAAQ,GAAGA,MAAM;QACrB,IAAI,CAAClN,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC8hB,eAAe,CAAC,CAAC;QAC7C,IAAI,CAACvnB,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAAC6mB,kBAAkB,EAAEtV,eAAe,CAAC;QACnEjJ,YAAY,CAACyC,OAAO,CAAC,IAAI,CAACyD,QAAQ,EAAEqL,YAAY,CAAC;OAClD;MAED,IAAI,CAACrL,QAAQ,CAAC/K,SAAS,CAACwQ,GAAG,CAAC4S,kBAAkB,CAAC;EAC/C,IAAA,IAAI,CAAC7X,cAAc,CAAC0M,QAAQ,EAAE,IAAI,CAAClN,QAAQ,EAAE,IAAI,CAACC,OAAO,CAAC6e,SAAS,CAAC;EACtE;EAEA1e,EAAAA,OAAOA,GAAG;MACR,IAAI,CAACwnB,aAAa,EAAE;EAEpB,IAAA,IAAI,IAAI,CAACE,OAAO,EAAE,EAAE;QAClB,IAAI,CAAC9nB,QAAQ,CAAC/K,SAAS,CAACzD,MAAM,CAACuR,eAAe,CAAC;EACjD;MAEA,KAAK,CAAC3C,OAAO,EAAE;EACjB;EAEA0nB,EAAAA,OAAOA,GAAG;MACR,OAAO,IAAI,CAAC9nB,QAAQ,CAAC/K,SAAS,CAACC,QAAQ,CAAC6N,eAAe,CAAC;EAC1D;;EAEA;EACA8kB,EAAAA,kBAAkBA,GAAG;EACnB,IAAA,IAAI,CAAC,IAAI,CAAC5nB,OAAO,CAACunB,QAAQ,EAAE;EAC1B,MAAA;EACF;EAEA,IAAA,IAAI,IAAI,CAACE,oBAAoB,IAAI,IAAI,CAACC,uBAAuB,EAAE;EAC7D,MAAA;EACF;EAEA,IAAA,IAAI,CAACrI,QAAQ,GAAGrnB,UAAU,CAAC,MAAM;QAC/B,IAAI,CAACwU,IAAI,EAAE;EACb,KAAC,EAAE,IAAI,CAACxM,OAAO,CAACgf,KAAK,CAAC;EACxB;EAEA8I,EAAAA,cAAcA,CAACruB,KAAK,EAAEsuB,aAAa,EAAE;MACnC,QAAQtuB,KAAK,CAACM,IAAI;EAChB,MAAA,KAAK,WAAW;EAChB,MAAA,KAAK,UAAU;EAAE,QAAA;YACf,IAAI,CAAC0tB,oBAAoB,GAAGM,aAAa;EACzC,UAAA;EACF;EAEA,MAAA,KAAK,SAAS;EACd,MAAA,KAAK,UAAU;EAAE,QAAA;YACf,IAAI,CAACL,uBAAuB,GAAGK,aAAa;EAC5C,UAAA;EACF;EAKF;EAEA,IAAA,IAAIA,aAAa,EAAE;QACjB,IAAI,CAACJ,aAAa,EAAE;EACpB,MAAA;EACF;EAEA,IAAA,MAAMxd,WAAW,GAAG1Q,KAAK,CAAC0B,aAAa;EACvC,IAAA,IAAI,IAAI,CAAC4E,QAAQ,KAAKoK,WAAW,IAAI,IAAI,CAACpK,QAAQ,CAAC9K,QAAQ,CAACkV,WAAW,CAAC,EAAE;EACxE,MAAA;EACF;MAEA,IAAI,CAACyd,kBAAkB,EAAE;EAC3B;EAEAjI,EAAAA,aAAaA,GAAG;EACd9lB,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEqnB,eAAe,EAAE3tB,KAAK,IAAI,IAAI,CAACquB,cAAc,CAACruB,KAAK,EAAE,IAAI,CAAC,CAAC;EAC1FI,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEsnB,cAAc,EAAE5tB,KAAK,IAAI,IAAI,CAACquB,cAAc,CAACruB,KAAK,EAAE,KAAK,CAAC,CAAC;EAC1FI,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEwT,aAAa,EAAE9Z,KAAK,IAAI,IAAI,CAACquB,cAAc,CAACruB,KAAK,EAAE,IAAI,CAAC,CAAC;EACxFI,IAAAA,YAAY,CAACiC,EAAE,CAAC,IAAI,CAACiE,QAAQ,EAAEue,cAAc,EAAE7kB,KAAK,IAAI,IAAI,CAACquB,cAAc,CAACruB,KAAK,EAAE,KAAK,CAAC,CAAC;EAC5F;EAEAkuB,EAAAA,aAAaA,GAAG;EACdje,IAAAA,YAAY,CAAC,IAAI,CAAC2V,QAAQ,CAAC;MAC3B,IAAI,CAACA,QAAQ,GAAG,IAAI;EACtB;;EAEA;IACA,OAAOroB,eAAeA,CAAC+H,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACoE,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGokB,KAAK,CAAC9mB,mBAAmB,CAAC,IAAI,EAAE3B,MAAM,CAAC;EAEpD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,IAAI,OAAOqE,IAAI,CAACrE,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,UAAA,MAAM,IAAIY,SAAS,CAAC,CAAoBZ,iBAAAA,EAAAA,MAAM,GAAG,CAAC;EACpD;EAEAqE,QAAAA,IAAI,CAACrE,MAAM,CAAC,CAAC,IAAI,CAAC;EACpB;EACF,KAAC,CAAC;EACJ;EACF;;EAEA;EACA;EACA;;EAEAuD,oBAAoB,CAACklB,KAAK,CAAC;;EAE3B;EACA;EACA;;EAEA/wB,kBAAkB,CAAC+wB,KAAK,CAAC;;EC7NzB;EACA;EACA;EACA;EACA;EACA;;AAeA,oBAAe;IACbzkB,KAAK;IACLU,MAAM;IACNqE,QAAQ;IACRgE,QAAQ;IACRuE,QAAQ;IACRqG,KAAK;IACL8B,SAAS;IACTsJ,OAAO;IACPgB,SAAS;IACTiD,GAAG;IACHyB,KAAK;EACLrI,EAAAA;EACF,CAAC;;;;;;;;;ACjCD;;ACAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACAA;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;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;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;;AC9DA;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;;;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;;;;;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;;;;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;AACA;AACA;AACA;AACA;AACA;AACA;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;;;;;ACzFA;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;;;;ACpYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;;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;;;;;ACjMA;AACA;;;;;ACDA;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;;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;;;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;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;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;;;;;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;;;;;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;;;;;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;;;;;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;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;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;;;;;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;;;;;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;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;;;;ACvGA;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;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnGA;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;;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;;;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;;;;;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;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;;;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;;;;;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;;;;;ACzLA;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;;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;;;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;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;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;;;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;;;;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACx5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECt3BA,IAAI6I,QAAQ,GAAG,CAAf;EACA,IAAIC,YAAY,GAAG,EAAnB;EAEA,IAAIC,KAAK,GAAG;EACV;EACA;EACAC,EAAAA,IAAI,EAAE,cAAUC,OAAV,EAAmBC,SAAnB,EAA8BC,GAA9B,EAAmC;EACvC,QAAIC,CAAJ;EACA,QAAIC,SAAJ;EACA,QAAIC,UAAJ;EACA,QAAIC,KAAK,GAAG,IAAIC,MAAJ,CAAW,MAAMN,SAAjB,EAA4B,GAA5B,CAAZ;EAEA,QAAI,gBAAgB,OAAOC,GAA3B,EACEA,GAAG,GAAG,EAAN,CADF,KAEK;EACH;EACA,WAAKC,CAAL,IAAUD,GAAV,EAAe;EACb,YAAIA,GAAG,CAACM,cAAJ,CAAmBL,CAAnB,CAAJ,EACE,OAAOD,GAAG,CAACC,CAAD,CAAV;EACH;EACF;EAED,QAAI,CAACH,OAAL,EACE,OAAOE,GAAP;EAEFG,IAAAA,UAAU,GAAGL,OAAO,CAACK,UAArB;;EACA,SAAKF,CAAC,GAAGE,UAAU,CAACI,MAApB,EAA4BN,CAAC,EAA7B,GAAmC;EACjCC,MAAAA,SAAS,GAAGC,UAAU,CAACF,CAAD,CAAtB;;EAEA,UAAIC,SAAS,IAAIA,SAAS,CAACM,SAAvB,IAAoCJ,KAAK,CAACK,IAAN,CAAWP,SAAS,CAACQ,IAArB,CAAxC,EAAoE;EAClEV,QAAAA,GAAG,CAAC,KAAKW,QAAL,CAAcT,SAAS,CAACQ,IAAV,CAAeE,KAAf,CAAqBb,SAAS,CAACQ,MAA/B,CAAd,CAAD,CAAH,GAA6D,KAAKM,gBAAL,CAAsBX,SAAS,CAACY,KAAhC,CAA7D;EACD;EACF;;EAED,WAAOd,GAAP;EACD,GAhCS;EAkCVe,EAAAA,SAAS,EAAE,mBAAUjB,OAAV,EAAmBC,SAAnB,EAA8BgB,UAA9B,EAAyC;EAClD,WAAOjB,OAAO,CAACkB,YAAR,CAAqBjB,SAAS,GAAGgB,UAAjC,CAAP;EACD,GApCS;EAsCVE,EAAAA,OAAO,EAAE,iBAAUnB,OAAV,EAAmBC,SAAnB,EAA8BF,IAA9B,EAAoCiB,KAApC,EAA2C;EAClDhB,IAAAA,OAAO,CAACoB,YAAR,CAAqB,KAAKC,SAAL,CAAepB,SAAS,GAAGF,IAA3B,CAArB,EAAuDuB,MAAM,CAACN,KAAD,CAA7D;EACD,GAxCS;EA0CVO,EAAAA,OAAO,EAAE,iBAASvB,OAAT,EAAkB;EACzB,WAAOA,OAAO,CAACwB,YAAR,CAAqB,MAArB,KAAgC,MAAvC;EACD,GA5CS;EA8CVC,EAAAA,UAAU,EAAE,sBAAY;EACtB,WAAO,KAAK7B,QAAQ,EAApB;EACD,GAhDS;;EAkDV;EACAmB,EAAAA,gBAAgB,EAAE,0BAAUC,KAAV,EAAiB;EACjC,QAAIU,GAAJ;;EAEA,QAAI;EACF,aAAOV,KAAK,GACVA,KAAK,IAAI,MAAT,KACCA,KAAK,IAAI,OAAT,GAAmB,KAAnB,GACDA,KAAK,IAAI,MAAT,GAAkB,IAAlB,GACA,CAACW,KAAK,CAACD,GAAG,GAAGE,MAAM,CAACZ,KAAD,CAAb,CAAN,GAA8BU,GAA9B,GACA,UAAUf,IAAV,CAAeK,KAAf,IAAwBa,IAAI,CAACC,KAAL,CAAWd,KAAX,CAAxB,GACAA,KALA,CADU,GAORA,KAPJ;EAQD,KATD,CASE,OAAOe,CAAP,EAAU;EAAE,aAAOf,KAAP;EAAe;EAC9B,GAhES;EAkEV;EACAH,EAAAA,QAAQ,EAAE,kBAAUmB,GAAV,EAAe;EACvB,WAAOA,GAAG,CAACC,OAAJ,CAAY,SAAZ,EAAuB,UAAUC,KAAV,EAAiBC,GAAjB,EAAsB;EAClD,aAAOA,GAAG,GAAGA,GAAG,CAACC,WAAJ,EAAH,GAAuB,EAAjC;EACD,KAFM,CAAP;EAGD,GAvES;EAyEV;EACAf,EAAAA,SAAS,EAAE,mBAAUW,GAAV,EAAe;EACxB,WAAOA,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,GAAnB,EACJA,OADI,CACI,uBADJ,EAC6B,OAD7B,EAEJA,OAFI,CAEI,mBAFJ,EAEyB,OAFzB,EAGJA,OAHI,CAGI,IAHJ,EAGU,GAHV,EAIJI,WAJI,EAAP;EAKD,GAhFS;EAkFVC,EAAAA,IAAI,EAAE,gBAAY;EAAA;;EAChB,QAAIC,MAAM,CAACC,OAAP,IAAkB,eAAe,OAAOD,MAAM,CAACC,OAAP,CAAeF,IAA3D,EACE,mBAAAC,MAAM,CAACC,OAAP,EAAeF,IAAf,wBAAuBG,SAAvB;EACH,GArFS;EAuFVC,EAAAA,QAAQ,EAAE,kBAASC,GAAT,EAAc;EACtB,QAAI,CAAC9C,YAAY,CAAC8C,GAAD,CAAjB,EAAwB;EACtB9C,MAAAA,YAAY,CAAC8C,GAAD,CAAZ,GAAoB,IAApB;EACA,WAAKL,IAAL,aAAaG,SAAb;EACD;EACF,GA5FS;EA8FVG,EAAAA,cAAc,EAAE,0BAAY;EAC1B/C,IAAAA,YAAY,GAAG,EAAf;EACD,GAhGS;EAkGVgD,EAAAA,UAAU,EAAE,oBAASC,MAAT,EAAiB;EAC3B,WAAOA,MAAM,CAACb,OAAP,CAAe,YAAf,EAA6B,EAA7B,CAAP;EACD,GApGS;EAsGVH,EAAAA,KAAK,EAAE;EACLiB,IAAAA,IAAI,EAAE,cAASD,MAAT,EAAiB;EACrB,UAAIE,MAAM,GAAGF,MAAM,CAACZ,KAAP,CAAa,0BAAb,CAAb;EACA,UAAI,CAACc,MAAL,EACE,OAAO,IAAP;;EAHmB,wBAIOA,MAAM,CAACC,GAAP,CAAW,UAAAC,CAAC;EAAA,eAAIC,QAAQ,CAACD,CAAD,EAAI,EAAJ,CAAZ;EAAA,OAAZ,CAJP;EAAA;EAAA,UAIhBE,CAJgB;EAAA,UAIbC,IAJa;EAAA,UAIPC,KAJO;EAAA,UAIAC,GAJA;;EAKrB,UAAIR,IAAI,GAAG,IAAIS,IAAJ,CAASH,IAAT,EAAeC,KAAK,GAAG,CAAvB,EAA0BC,GAA1B,CAAX;EACA,UAAIR,IAAI,CAACU,WAAL,OAAuBJ,IAAvB,IAA+BN,IAAI,CAACW,QAAL,KAAkB,CAAlB,KAAwBJ,KAAvD,IAAgEP,IAAI,CAACY,OAAL,OAAmBJ,GAAvF,EACE,OAAO,IAAP;EACF,aAAOR,IAAP;EACD,KAVI;EAWLD,IAAAA,MAAM,EAAE,gBAASA,OAAT,EAAiB;EACvB,aAAOA,OAAP;EACD,KAbI;EAcLc,IAAAA,OAAO,EAAE,iBAASd,MAAT,EAAiB;EACxB,UAAInB,KAAK,CAACmB,MAAD,CAAT,EACE,OAAO,IAAP;EACF,aAAOK,QAAQ,CAACL,MAAD,EAAS,EAAT,CAAf;EACD,KAlBI;EAmBLe,IAAAA,MAAM,EAAE,gBAASf,MAAT,EAAiB;EACvB,UAAInB,KAAK,CAACmB,MAAD,CAAT,EACE,MAAM,IAAN;EACF,aAAOgB,UAAU,CAAChB,MAAD,CAAjB;EACD,KAvBI;EAwBL,eAAW,SAASiB,QAAT,CAAkBjB,MAAlB,EAA0B;EACnC,aAAO,CAAE,iBAAiBnC,IAAjB,CAAsBmC,MAAtB,CAAT;EACD,KA1BI;EA2BLkB,IAAAA,MAAM,EAAE,gBAASlB,MAAT,EAAiB;EACvB,aAAOhD,KAAK,CAACiB,gBAAN,CAAuB+B,MAAvB,CAAP;EACD,KA7BI;EA8BLmB,IAAAA,MAAM,EAAE,gBAASA,OAAT,EAAiB;EACvB,UAAIC,KAAK,GAAG,EAAZ,CADuB;;EAIvB,UAAI,sBAAsBvD,IAAtB,CAA2BsD,OAA3B,CAAJ,EAAwC;EACtC;EACA;EACAC,QAAAA,KAAK,GAAGD,OAAM,CAAChC,OAAP,CAAe,gBAAf,EAAiC,IAAjC,CAAR,CAHsC;EAKtC;;EACAgC,QAAAA,OAAM,GAAGA,OAAM,CAAChC,OAAP,CAAe,IAAI1B,MAAJ,CAAW,aAAa2D,KAAb,GAAqB,GAAhC,CAAf,EAAqD,IAArD,CAAT;EACD,OAPD,MAOO;EACL;EACAD,QAAAA,OAAM,GAAG,MAAMA,OAAN,GAAe,GAAxB;EACD;;EACD,aAAO,IAAI1D,MAAJ,CAAW0D,OAAX,EAAmBC,KAAnB,CAAP;EACD;EA9CI,GAtGG;EAuJVC,EAAAA,gBAAgB,EAAE,0BAASC,eAAT,EAA0BtB,MAA1B,EAAkC;EAClD,QAAIuB,SAAS,GAAG,KAAKvC,KAAL,CAAWsC,eAAe,IAAI,QAA9B,CAAhB;EACA,QAAI,CAACC,SAAL,EACE,MAAM,yCAAyCD,eAAzC,GAA2D,GAAjE;EACF,QAAIE,SAAS,GAAGD,SAAS,CAACvB,MAAD,CAAzB;EACA,QAAIwB,SAAS,KAAK,IAAlB,EACE,qCAA8BF,eAA9B,iBAAmDtB,MAAnD;EACF,WAAOwB,SAAP;EACD,GA/JS;EAiKVC,EAAAA,eAAe,EAAE,yBAASC,MAAT,EAAiBvE,SAAjB,EAA4B;EAC3CuE,IAAAA,MAAM,GAAG,KAAK3B,UAAL,CAAgB2B,MAAM,IAAI,EAA1B,EAA8BC,KAA9B,CAAoC,KAApC,CAAT;EACA,QAAI,CAACD,MAAM,CAAC,CAAD,CAAX,EACE,OAAO,EAAP;EACF,WAAOE,CAAC,CAACzB,GAAF,CAAMuB,MAAN,EAAc,UAAAG,GAAG;EAAA,uBAAOA,GAAP,cAAc1E,SAAd;EAAA,KAAjB,EAA4C2E,IAA5C,CAAiD,GAAjD,CAAP;EACD,GAtKS;EAwKVC,EAAAA,UAAU,EAAE,oBAASC,KAAT,EAAgBC,MAAhB,EAAwB;EAClC;EACA,QAAIC,MAAM,GAAG,EAAb;EACAN,IAAAA,CAAC,CAACO,IAAF,CAAOH,KAAP,EAAc,UAAC1B,CAAD,EAAI8B,IAAJ,EAAa;EACzB,UAAIH,MAAM,CAACI,OAAP,CAAeD,IAAf,KAAwB,CAAC,CAA7B,EACEF,MAAM,CAACI,IAAP,CAAYF,IAAZ;EACH,KAHD;EAIA,WAAOF,MAAP;EACD,GAhLS;EAkLV;EACAK,EAAAA,GAAG,EAAE,aAASC,QAAT,EAAmB;EACtB;EACA,WAAOZ,CAAC,CAACa,IAAF,OAAAb,CAAC,qBAASY,QAAT,UAAmB,EAAnB,EAAuB,EAAvB,GAAR;EACD,GAtLS;EAwLV;EACAE,EAAAA,YAAY,EAAEC,MAAM,CAACC,MAAP,IAAkB,YAAY;EAC1C,QAAID,MAAM,GAAG,SAATA,MAAS,GAAY,EAAzB;;EACA,WAAO,UAAUE,SAAV,EAAqB;EAC1B,UAAIlD,SAAS,CAAChC,MAAV,GAAmB,CAAvB,EAA0B;EACxB,cAAMmF,KAAK,CAAC,+BAAD,CAAX;EACD;;EACD,UAAI,QAAOD,SAAP,KAAoB,QAAxB,EAAkC;EAChC,cAAME,SAAS,CAAC,4BAAD,CAAf;EACD;;EACDJ,MAAAA,MAAM,CAACE,SAAP,GAAmBA,SAAnB;EACA,UAAIX,MAAM,GAAG,IAAIS,MAAJ,EAAb;EACAA,MAAAA,MAAM,CAACE,SAAP,GAAmB,IAAnB;EACA,aAAOX,MAAP;EACD,KAXD;EAYD,GAd8B,EAzLrB;EAyMVc,EAAAA,eAAe,EAAE;EAzMP,CAAZ;;ECLA;EACA;EACA;EACA;EAEA,IAAIC,QAAQ,GAAG;EACb;EAEA;EACA9F,EAAAA,SAAS,EAAE,eAJE;EAMb;EACA+F,EAAAA,MAAM,EAAE,yBAPK;EASb;EACAC,EAAAA,QAAQ,EAAE,+EAVG;EAYb;EACAC,EAAAA,eAAe,EAAE,IAbJ;EAeb;EAEA;EACAC,EAAAA,QAAQ,EAAE,IAlBG;EAoBb;EACAC,EAAAA,KAAK,EAAE,IArBM;EAuBb;EACA;EACAC,EAAAA,SAAS,EAAE,IAzBE;EA2Bb;EACAC,EAAAA,mBAAmB,EAAE,CA5BR;EA8Bb;EACAC,EAAAA,KAAK,EAAE,OA/BM;EAiCb;EACAC,EAAAA,OAAO,EAAE,KAlCI;EAoCb;EACAC,EAAAA,mBAAmB,EAAE,OArCR;EAuCb;EACAC,EAAAA,UAAU,EAAE,eAxCC;EA0Cb;EACAC,EAAAA,YAAY,EAAE,iBA3CD;EA6Cb;EACA;EACAC,EAAAA,YAAY,EAAE,sBAAUC,KAAV,EAAiB,EA/ClB;EAiDb;EACA;EACAC,EAAAA,eAAe,EAAE,yBAAUD,KAAV,EAAiB,EAnDrB;EAqDb;EACAE,EAAAA,aAAa,EAAE,uCAtDF;EAwDb;EACAC,EAAAA,aAAa,EAAE;EAzDF,CAAf;;ECFA,IAAIC,IAAI,GAAG,SAAPA,IAAO,GAAY;EACrB,OAAKC,MAAL,GAAcpH,KAAK,CAAC2B,UAAN,EAAd;EACD,CAFD;;EAIAwF,IAAI,CAACtB,SAAL,GAAiB;EACfwB,EAAAA,YAAY,EAAE,IADC;EACK;EAEpBC,EAAAA,gCAAgC,EAAE,4CAAY;EAAA;;EAC5C,QAAIC,IAAI,GAAG,SAAPA,IAAO,GAAM;EACf,UAAIC,CAAC,GAAG5C,CAAC,CAAC6C,QAAF,EAAR;EACA,UAAI,SAAS,KAAI,CAACC,gBAAlB,EACEF,CAAC,CAACG,MAAF;EACF,aAAOH,CAAC,CAACI,OAAF,GAAYC,OAAZ,EAAP;EACD,KALD;;EAMA,WAAO,CAACN,IAAD,EAAOA,IAAP,CAAP;EACD,GAXc;EAafO,EAAAA,gBAAgB,EAAE,4BAAY;EAC5B9H,IAAAA,KAAK,CAACC,IAAN,CAAW,KAAKC,OAAhB,EAAyB,KAAK6H,OAAL,CAAa5H,SAAtC,EAAiD,KAAK6H,UAAtD;EACA,QAAI,KAAKC,MAAL,IAAe,KAAKA,MAAL,CAAYH,gBAA/B,EACE,KAAKG,MAAL,CAAYH,gBAAZ;EACF,WAAO,IAAP;EACD,GAlBc;EAoBfI,EAAAA,aAAa,EAAE,uBAAUC,WAAV,EAAuB;EACpC,SAAKH,UAAL,GAAkBhI,KAAK,CAAC0F,YAAN,CAAmB,KAAKuC,MAAL,CAAYF,OAA/B,CAAlB;EACA,SAAKA,OAAL,GAAe/H,KAAK,CAAC0F,YAAN,CAAmB,KAAKsC,UAAxB,CAAf,CAFoC;;EAIpC,SAAK,IAAI3H,CAAT,IAAc8H,WAAd,EAA2B;EACzB,UAAIA,WAAW,CAACzH,cAAZ,CAA2BL,CAA3B,CAAJ,EACE,KAAK0H,OAAL,CAAa1H,CAAb,IAAkB8H,WAAW,CAAC9H,CAAD,CAA7B;EACH;;EACD,SAAKyH,gBAAL;EACD,GA7Bc;EA+BfM,EAAAA,UAAU,EAAE,IA/BG;EAiCf;EACA;EACA;EACA;EACAC,EAAAA,EAAE,EAAE,YAAUvH,IAAV,EAAgBwH,EAAhB,EAAoB;EACtB,SAAKF,UAAL,GAAkB,KAAKA,UAAL,IAAmB,EAArC;EACA,QAAIG,KAAK,GAAG,KAAKH,UAAL,CAAgBtH,IAAhB,IAAwB,KAAKsH,UAAL,CAAgBtH,IAAhB,KAAyB,EAA7D;EACAyH,IAAAA,KAAK,CAACjD,IAAN,CAAWgD,EAAX;EAEA,WAAO,IAAP;EACD,GA3Cc;EA6Cf;EACAE,EAAAA,SAAS,EAAE,mBAAS1H,IAAT,EAAewH,EAAf,EAAmB;EAC5B1D,IAAAA,CAAC,CAAC6D,QAAF,CAAW,IAAX,EAAiB3H,IAAI,CAACyB,WAAL,EAAjB,EAAqC+F,EAArC;EACD,GAhDc;EAkDf;EACAI,EAAAA,GAAG,EAAE,aAAU5H,IAAV,EAAgBwH,EAAhB,EAAoB;EACvB,QAAIC,KAAK,GAAG,KAAKH,UAAL,IAAmB,KAAKA,UAAL,CAAgBtH,IAAhB,CAA/B;;EACA,QAAIyH,KAAJ,EAAW;EACT,UAAI,CAACD,EAAL,EAAS;EACP,eAAO,KAAKF,UAAL,CAAgBtH,IAAhB,CAAP;EACD,OAFD,MAEO;EACL,aAAK,IAAIT,CAAC,GAAGkI,KAAK,CAAC5H,MAAnB,EAA2BN,CAAC,EAA5B;EACE,cAAIkI,KAAK,CAAClI,CAAD,CAAL,KAAaiI,EAAjB,EACEC,KAAK,CAACI,MAAN,CAAatI,CAAb,EAAgB,CAAhB;EAFJ;EAGD;EACF;;EACD,WAAO,IAAP;EACD,GA/Dc;EAiEf;EACAuI,EAAAA,WAAW,EAAE,qBAAS9H,IAAT,EAAewH,EAAf,EAAmB;EAC9B1D,IAAAA,CAAC,CAACiE,aAAF,CAAgB,IAAhB,EAAsB/H,IAAI,CAACyB,WAAL,EAAtB;EACD,GApEc;EAsEf;EACA;EACA;EACAmE,EAAAA,OAAO,EAAE,iBAAU5F,IAAV,EAAgBgI,MAAhB,EAAwBC,QAAxB,EAAkC;EACzCD,IAAAA,MAAM,GAAGA,MAAM,IAAI,IAAnB;EACA,QAAIP,KAAK,GAAG,KAAKH,UAAL,IAAmB,KAAKA,UAAL,CAAgBtH,IAAhB,CAA/B;EACA,QAAIoE,MAAJ;AACA;EACA,QAAIqD,KAAJ,EAAW;EACT,WAAK,IAAIlI,CAAC,GAAGkI,KAAK,CAAC5H,MAAnB,EAA2BN,CAAC,EAA5B,GAAkC;EAChC6E,QAAAA,MAAM,GAAGqD,KAAK,CAAClI,CAAD,CAAL,CAAS2I,IAAT,CAAcF,MAAd,EAAsBA,MAAtB,EAA8BC,QAA9B,CAAT;EACA,YAAI7D,MAAM,KAAK,KAAf,EAAsB,OAAOA,MAAP;EACvB;EACF;;EACD,QAAI,KAAK+C,MAAT,EAAiB;EACf,aAAO,KAAKA,MAAL,CAAYvB,OAAZ,CAAoB5F,IAApB,EAA0BgI,MAA1B,EAAkCC,QAAlC,CAAP;EACD;;EACD,WAAO,IAAP;EACD,GAxFc;EA0FfE,EAAAA,YAAY,EAAE,sBAAU3C,KAAV,EAAiB4C,KAAjB,EAAwB;EACpClJ,IAAAA,KAAK,CAAC4C,QAAN,CAAe,0DAAf;EACA,WAAO,KAAKuG,SAAL,CAAe;EAAC7C,MAAAA,KAAK,EAALA,KAAD;EAAQ4C,MAAAA,KAAK,EAALA;EAAR,KAAf,CAAP;EACD,GA7Fc;EA+FfE,EAAAA,YAAY,EAAE,wBAAY;EACxB,WAAO,KAAKrB,OAAL,CAAa1B,QAAb,GACLzB,CAAC,CAAC,KAAKqD,MAAL,CAAY/H,OAAZ,CAAoBmJ,gBAApB,YAAyC,KAAKtB,OAAL,CAAa5H,SAAtD,wBAA4E,KAAK4H,OAAL,CAAa1B,QAAzF,SAAD,CADI,GAEL,KAAKiD,QAFP;EAGD;EAnGc,CAAjB;;ECJA,IAAIC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAASvG,MAAT,EAAiBrC,MAAjB,EAAyB;EACrD,MAAI6I,CAAC,GAAGxG,MAAM,CAACZ,KAAP,CAAa,kBAAb,CAAR;EACA,MAAI,CAACoH,CAAL,EACE,MAAM,mCAAmCxG,MAAnC,GAA4C,GAAlD;EACF,MAAIyG,MAAM,GAAGD,CAAC,CAAC,CAAD,CAAD,CAAK7E,KAAL,CAAW,GAAX,EAAgBxB,GAAhB,CAAoBnD,KAAK,CAAC+C,UAA1B,CAAb;EACA,MAAI0G,MAAM,CAAC9I,MAAP,KAAkBA,MAAtB,EACE,MAAM,qBAAqB8I,MAAM,CAAC9I,MAA5B,GAAqC,eAArC,GAAuDA,MAAvD,GAAgE,aAAtE;EACF,SAAO8I,MAAP;EACD,CARD;;EAUA,IAAIC,6BAA6B,GAAG,SAAhCA,6BAAgC,CAASC,eAAT,EAA0B3G,MAA1B,EAAkC4G,iBAAlC,EAAqD;EACvF,MAAIC,IAAI,GAAG,IAAX;EACA,MAAIC,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAIC,GAAT,IAAgBJ,eAAhB,EAAiC;EAC/B,QAAII,GAAJ,EAAS;EACP,UAAI7I,KAAK,GAAG0I,iBAAiB,CAACG,GAAD,CAA7B;EACA,UAAI,aAAa,OAAO7I,KAAxB,EACEA,KAAK,GAAGlB,KAAK,CAACqE,gBAAN,CAAuBsF,eAAe,CAACI,GAAD,CAAtC,EAA6C7I,KAA7C,CAAR;EACF4I,MAAAA,KAAK,CAACC,GAAD,CAAL,GAAa7I,KAAb;EACD,KALD,MAKO;EACL2I,MAAAA,IAAI,GAAG7J,KAAK,CAACqE,gBAAN,CAAuBsF,eAAe,CAACI,GAAD,CAAtC,EAA6C/G,MAA7C,CAAP;EACD;EACF;;EACD,SAAO,CAAC6G,IAAD,EAAOC,KAAP,CAAP;EACD,CAdD;;;EAkBA,IAAIE,SAAS,GAAG,SAAZA,SAAY,CAASC,IAAT,EAAe;EAC7BrF,EAAAA,CAAC,CAACsF,MAAF,CAAS,IAAT,EAAe,IAAf,EAAqBD,IAArB;EACD,CAFD;;EAIAD,SAAS,CAACnE,SAAV,GAAsB;EACpB;EACAsE,EAAAA,QAAQ,EAAE,kBAASjJ,KAAT,EAAgBkJ,mBAAhB,EAAqC;EAC7C,QAAI,KAAK9B,EAAT,EAAa;EAAE;EAEb,UAAI3F,SAAS,CAAChC,MAAV,GAAmB,CAAvB;EACEyJ,QAAAA,mBAAmB,GAAG,GAAGpJ,KAAH,CAASgI,IAAT,CAAcrG,SAAd,EAAyB,CAAzB,EAA4B,CAAC,CAA7B,CAAtB,CAHS;;EAIX,aAAO,KAAK2F,EAAL,CAAQpH,KAAR,EAAekJ,mBAAf,CAAP;EACD;;EAED,QAAIC,KAAK,CAACC,OAAN,CAAcpJ,KAAd,CAAJ,EAA0B;EACxB,UAAI,CAAC,KAAKqJ,gBAAV,EACE,MAAM,gBAAgB,KAAKzJ,IAArB,GAA4B,mCAAlC;EACF,aAAO,KAAKyJ,gBAAL,aAAyB5H,SAAzB,CAAP;EACD,KAJD,MAIO;EACL,UAAI6H,QAAQ,GAAG7H,SAAS,CAACA,SAAS,CAAChC,MAAV,GAAmB,CAApB,CAAxB;;EACA,UAAI,KAAK8J,YAAL,IAAqBD,QAAQ,CAACE,YAAT,EAAzB,EAAkD;EAChD/H,QAAAA,SAAS,CAAC,CAAD,CAAT,GAAe3C,KAAK,CAACgC,KAAN,CAAYiB,IAAZ,CAAiBN,SAAS,CAAC,CAAD,CAA1B,CAAf;EACA,YAAIA,SAAS,CAAC,CAAD,CAAT,KAAiB,IAArB,EACE,OAAO,KAAP;EACF,eAAO,KAAK8H,YAAL,aAAqB9H,SAArB,CAAP;EACD;;EACD,UAAI,KAAKgI,cAAT,EAAyB;EACvB,YAAI,CAACzJ,KAAL;EACE,iBAAO,IAAP;EACF,YAAIW,KAAK,CAACX,KAAD,CAAT,EACE,OAAO,KAAP;EACFyB,QAAAA,SAAS,CAAC,CAAD,CAAT,GAAeqB,UAAU,CAACrB,SAAS,CAAC,CAAD,CAAV,CAAzB;EACA,eAAO,KAAKgI,cAAL,aAAuBhI,SAAvB,CAAP;EACD;;EACD,UAAI,KAAKiI,cAAT,EAAyB;EACvB,eAAO,KAAKA,cAAL,aAAuBjI,SAAvB,CAAP;EACD;;EACD,YAAM,gBAAgB,KAAK7B,IAArB,GAA4B,gCAAlC;EACD;EACF,GAnCmB;EAqCpB;EACA;EACA+J,EAAAA,iBAAiB,EAAE,2BAASC,YAAT,EAAuBlB,iBAAvB,EAA0C;EAC3D,QAAI,aAAa,OAAOkB,YAAxB,EAAsC;EACpC;EACA;EACA,aAAOT,KAAK,CAACC,OAAN,CAAcQ,YAAd,IAA8BA,YAA9B,GAA6C,CAACA,YAAD,CAApD;EACD;;EACD,QAAIC,IAAI,GAAG,KAAKzG,eAAhB;;EACA,QAAI+F,KAAK,CAACC,OAAN,CAAcS,IAAd,CAAJ,EAAyB;EACvB,UAAItB,MAAM,GAAGF,uBAAuB,CAACuB,YAAD,EAAeC,IAAI,CAACpK,MAApB,CAApC;;EACA,WAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoJ,MAAM,CAAC9I,MAA3B,EAAmCN,CAAC,EAApC;EACEoJ,QAAAA,MAAM,CAACpJ,CAAD,CAAN,GAAYL,KAAK,CAACqE,gBAAN,CAAuB0G,IAAI,CAAC1K,CAAD,CAA3B,EAAgCoJ,MAAM,CAACpJ,CAAD,CAAtC,CAAZ;EADF;;EAEA,aAAOoJ,MAAP;EACD,KALD,MAKO,IAAI7E,CAAC,CAACoG,aAAF,CAAgBD,IAAhB,CAAJ,EAA2B;EAChC,aAAOrB,6BAA6B,CAACqB,IAAD,EAAOD,YAAP,EAAqBlB,iBAArB,CAApC;EACD,KAFM,MAEA;EACL,aAAO,CAAC5J,KAAK,CAACqE,gBAAN,CAAuB0G,IAAvB,EAA6BD,YAA7B,CAAD,CAAP;EACD;EACF,GAxDmB;EAyDpB;EACAxG,EAAAA,eAAe,EAAE,QA1DG;EA4DpB2G,EAAAA,QAAQ,EAAE;EA5DU,CAAtB;;EC9BA,IAAIC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAUC,UAAV,EAAsBC,OAAtB,EAA+B;EACrD,OAAKC,SAAL,GAAiB,mBAAjB,CADqD;;EAIrD,OAAKC,MAAL,GAAc,IAAd;EAEA,OAAKC,IAAL,CAAUJ,UAAU,IAAI,EAAxB,EAA4BC,OAAO,IAAI,EAAvC;EACD,CAPD;;EASA,IAAII,WAAW,GAAI;EACjBC,EAAAA,KAAK,EAAE,y2BADU;EAGjB;EACA1H,EAAAA,MAAM,EAAE,8BAJS;EAMjBD,EAAAA,OAAO,EAAE,SANQ;EAQjB4H,EAAAA,MAAM,EAAE,OARS;EAUjBC,EAAAA,QAAQ,EAAE,QAVO;EAYjB1I,EAAAA,IAAI,EAAE;EACJpC,IAAAA,IAAI,EAAE,cAAAK,KAAK;EAAA,aAAIlB,KAAK,CAACgC,KAAN,CAAYiB,IAAZ,CAAiB/B,KAAjB,MAA4B,IAAhC;EAAA;EADP,GAZW;EAgBjB0K,EAAAA,GAAG,EAAE,IAAInL,MAAJ,CACD;EAEE,0BAFF;EAGE;EACA,wBAJF,GAKE,KALF;EAOI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,0CAhBJ,GAiBI,4CAjBJ,GAkBI,gDAlBJ,GAmBE,GAnBF;EAqBI,oEArBJ;EAuBI,wEAvBJ;EAyBI,0CAzBJ,GA0BE,GA1BF;EA4BE,kBA5BF;EA8BE,cA9BF,GA+BA,GAhCC;EAhBY,CAAnB;EAmDA+K,WAAW,CAACK,KAAZ,GAAoBL,WAAW,CAACzH,MAAhC;;EAGA,IAAI+H,aAAa,GAAG,SAAhBA,aAAgB,CAAAlK,GAAG,EAAI;EACzB,MAAIQ,KAAK,GAAG,CAAC,KAAKR,GAAN,EAAWQ,KAAX,CAAiB,kCAAjB,CAAZ;;EACA,MAAI,CAACA,KAAL,EAAY;EAAE,WAAO,CAAP;EAAW;;EACzB,SAAO2J,IAAI,CAACC,GAAL,CACF,CADE;EAGF,GAAC5J,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAAL,CAASzB,MAApB,GAA6B,CAA9B;EAECyB,EAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,CAACA,KAAK,CAAC,CAAD,CAAjB,GAAuB,CAFxB,CAHE,CAAP;EAMD,CATD;;;EAYA,IAAI6J,cAAc,GAAG,SAAjBA,cAAiB,CAAClB,IAAD,EAAOmB,IAAP;EAAA,SAAgBA,IAAI,CAAC/I,GAAL,CAASnD,KAAK,CAACgC,KAAN,CAAY+I,IAAZ,CAAT,CAAhB;EAAA,CAArB;;;EAEA,IAAIoB,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACpB,IAAD,EAAOqB,QAAP,EAAoB;EAC5C,SAAO,UAAClL,KAAD,EAAoC;EAAA,sCAAzBmL,oBAAyB;EAAzBA,MAAAA,oBAAyB;EAAA;;EACzCA,IAAAA,oBAAoB,CAACC,GAArB,GADyC;;EAEzC,WAAOF,QAAQ,MAAR,UAASlL,KAAT,4BAAmB+K,cAAc,CAAClB,IAAD,EAAOsB,oBAAP,CAAjC,GAAP;EACD,GAHD;EAID,CALD;;EAOA,IAAIE,kBAAkB,GAAG,SAArBA,kBAAqB,CAAAH,QAAQ;EAAA,SAAK;EACpC3B,IAAAA,YAAY,EAAE0B,mBAAmB,CAAC,MAAD,EAASC,QAAT,CADG;EAEpCzB,IAAAA,cAAc,EAAEwB,mBAAmB,CAAC,QAAD,EAAWC,QAAX,CAFC;EAGpC9H,IAAAA,eAAe,EAAE8H,QAAQ,CAACzL,MAAT,IAAmB,CAAnB,GAAuB,QAAvB,GAAkC,CAAC,QAAD,EAAW,QAAX,CAHf;EAGqC;EACzEsK,IAAAA,QAAQ,EAAE;EAJ0B,GAAL;EAAA,CAAjC;;EAOAC,iBAAiB,CAACrF,SAAlB,GAA8B;EAC5B0F,EAAAA,IAAI,EAAE,cAAUJ,UAAV,EAAsBC,OAAtB,EAA+B;EACnC,SAAKA,OAAL,GAAeA,OAAf,CADmC;;EAGnC,SAAKD,UAAL,GAAkB,SAAc,EAAd,EAAkB,KAAKA,UAAvB,CAAlB;;EAEA,SAAK,IAAIrK,IAAT,IAAiBqK,UAAjB;EACE,WAAKqB,YAAL,CAAkB1L,IAAlB,EAAwBqK,UAAU,CAACrK,IAAD,CAAV,CAAiBwH,EAAzC,EAA6C6C,UAAU,CAACrK,IAAD,CAAV,CAAiBmK,QAA9D;EADF;;EAGAxI,IAAAA,MAAM,CAACgK,OAAP,CAAe/F,OAAf,CAAuB,wBAAvB;EACD,GAV2B;EAY5B;EACAgG,EAAAA,SAAS,EAAE,mBAAUpB,MAAV,EAAkB;EAC3B,QAAI,gBAAgB,OAAO,KAAKF,OAAL,CAAaE,MAAb,CAA3B,EACE,MAAM,IAAIxF,KAAJ,CAAUwF,MAAM,GAAG,kCAAnB,CAAN;EAEF,SAAKA,MAAL,GAAcA,MAAd;EAEA,WAAO,IAAP;EACD,GApB2B;EAsB5B;EACAqB,EAAAA,UAAU,EAAE,oBAAUrB,MAAV,EAAkBsB,QAAlB,EAA4BC,GAA5B,EAAiC;EAC3C,QAAI,qBAAoBD,QAApB,CAAJ,EACE,KAAKxB,OAAL,CAAaE,MAAb,IAAuBsB,QAAvB;EAEF,QAAI,SAASC,GAAb,EACE,OAAO,KAAKH,SAAL,CAAepB,MAAf,CAAP;EAEF,WAAO,IAAP;EACD,GA/B2B;EAiC5B;EACAwB,EAAAA,UAAU,EAAE,oBAAUxB,MAAV,EAAkBxK,IAAlB,EAAwBiM,OAAxB,EAAiC;EAC3C,QAAI,gBAAgB,OAAO,KAAK3B,OAAL,CAAaE,MAAb,CAA3B,EACE,KAAKF,OAAL,CAAaE,MAAb,IAAuB,EAAvB;EAEF,SAAKF,OAAL,CAAaE,MAAb,EAAqBxK,IAArB,IAA6BiM,OAA7B;EAEA,WAAO,IAAP;EACD,GAzC2B;EA2C5B;EACAC,EAAAA,WAAW,EAAE,qBAAU1B,MAAV,EAAkB2B,iBAAlB,EAAqC;EAChD,SAAK,IAAInM,IAAT,IAAiBmM,iBAAjB;EACE,WAAKH,UAAL,CAAgBxB,MAAhB,EAAwBxK,IAAxB,EAA8BmM,iBAAiB,CAACnM,IAAD,CAA/C;EADF;;EAGA,WAAO,IAAP;EACD,GAjD2B;EAmD5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA0L,EAAAA,YAAY,EAAE,sBAAU1L,IAAV,EAAgBoM,IAAhB,EAAsBC,IAAtB,EAA4B;EACxC,QAAI,KAAKhC,UAAL,CAAgBrK,IAAhB,CAAJ,EACEd,KAAK,CAACwC,IAAN,CAAW,gBAAgB1B,IAAhB,GAAuB,uBAAlC,EADF,KAEK,IAAImF,QAAQ,CAACvF,cAAT,CAAwBI,IAAxB,CAAJ,EAAmC;EACtCd,MAAAA,KAAK,CAACwC,IAAN,CAAW,MAAM1B,IAAN,GAAa,8DAAxB;EACA;EACD;EACD,WAAO,KAAKsM,aAAL,aAAsBzK,SAAtB,CAAP;EACD,GAzE2B;EA2E5B0K,EAAAA,YAAY,EAAE,sBAAUvM,IAAV,EAAgB;EAC5B,WAAO,CAAC,CAAC,KAAKqK,UAAL,CAAgBrK,IAAhB,CAAT;EACD,GA7E2B;EA+E5BwM,EAAAA,eAAe,EAAE,yBAAUxM,IAAV,EAAgBoM,IAAhB,EAAsBC,IAAtB,EAA4B;EAC3C,QAAI,CAAC,KAAKhC,UAAL,CAAgBrK,IAAhB,CAAL,EAA4B;EAC1Bd,MAAAA,KAAK,CAACwC,IAAN,CAAW,gBAAgB1B,IAAhB,GAAuB,2BAAlC;EACA,aAAO,KAAK0L,YAAL,aAAqB7J,SAArB,CAAP;EACD;;EACD,WAAO,KAAKyK,aAAL,aAAsBzK,SAAtB,CAAP;EACD,GArF2B;EAuF5B4K,EAAAA,eAAe,EAAE,yBAAUzM,IAAV,EAAgB;EAC/B,QAAI,CAAC,KAAKqK,UAAL,CAAgBrK,IAAhB,CAAL,EACEd,KAAK,CAACwC,IAAN,CAAW,gBAAgB1B,IAAhB,GAAuB,mBAAlC;EAEF,WAAO,KAAKqK,UAAL,CAAgBrK,IAAhB,CAAP;EAEA,WAAO,IAAP;EACD,GA9F2B;EAgG5BsM,EAAAA,aAAa,EAAE,uBAAUtM,IAAV,EAAgB0M,SAAhB,EAA2BvC,QAA3B,EAAqC;EAClD,QAAI,qBAAoBuC,SAApB,CAAJ,EAAmC;EACjC;EACAA,MAAAA,SAAS,GAAG;EACVlF,QAAAA,EAAE,EAAEkF,SADM;EAEVvC,QAAAA,QAAQ,EAAEA;EAFA,OAAZ;EAID;;EACD,QAAI,CAACuC,SAAS,CAACrD,QAAf,EAAyB;EACvBqD,MAAAA,SAAS,GAAG,IAAIxD,SAAJ,CAAcwD,SAAd,CAAZ;EACD;;EACD,SAAKrC,UAAL,CAAgBrK,IAAhB,IAAwB0M,SAAxB;;EAEA,SAAK,IAAIlC,MAAT,IAAmBkC,SAAS,CAACZ,QAAV,IAAsB,EAAzC;EACE,WAAKE,UAAL,CAAgBxB,MAAhB,EAAwBxK,IAAxB,EAA8B0M,SAAS,CAACZ,QAAV,CAAmBtB,MAAnB,CAA9B;EADF;;EAGA,WAAO,IAAP;EACD,GAjH2B;EAmH5BmC,EAAAA,eAAe,EAAE,yBAAUC,UAAV,EAAsB;EACrC,QAAIX,OAAJ,CADqC;;EAIrC,QAAI,WAAWW,UAAU,CAAC5M,IAA1B,EAAgC;EAC9B,UAAI6M,YAAY,GAAG,KAAKvC,OAAL,CAAa,KAAKE,MAAlB,EAA0BoC,UAAU,CAAC5M,IAArC,KAA8C,EAAjE;EACAiM,MAAAA,OAAO,GAAGY,YAAY,CAACD,UAAU,CAAC5C,YAAZ,CAAtB;EACD,KAHD,MAIEiC,OAAO,GAAG,KAAKa,aAAL,CAAmB,KAAKxC,OAAL,CAAa,KAAKE,MAAlB,EAA0BoC,UAAU,CAAC5M,IAArC,CAAnB,EAA+D4M,UAAU,CAAC5C,YAA1E,CAAV;;EAEF,WAAOiC,OAAO,IAAI,KAAK3B,OAAL,CAAa,KAAKE,MAAlB,EAA0BuC,cAArC,IAAuD,KAAKzC,OAAL,CAAa0C,EAAb,CAAgBD,cAA9E;EACD,GA9H2B;EAgI5B;EACAD,EAAAA,aAAa,EAAE,uBAAU5K,MAAV,EAAkB+K,UAAlB,EAA8B;EAC3C,QAAI,qBAAoBA,UAApB,CAAJ,EAAoC;EAClC,WAAK,IAAI1N,CAAT,IAAc0N,UAAd;EACE/K,QAAAA,MAAM,GAAG,KAAK4K,aAAL,CAAmB5K,MAAnB,EAA2B+K,UAAU,CAAC1N,CAAD,CAArC,CAAT;EADF;;EAGA,aAAO2C,MAAP;EACD;;EAED,WAAO,aAAa,OAAOA,MAApB,GAA6BA,MAAM,CAACb,OAAP,CAAe,KAAf,EAAsB4L,UAAtB,CAA7B,GAAiE,EAAxE;EACD,GA1I2B;EA4I5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA5C,EAAAA,UAAU,EAAE;EACV6C,IAAAA,QAAQ,EAAE;EACRpD,MAAAA,cAAc,EAAE,wBAAS1J,KAAT,EAAgB;EAC9B,eAAO,KAAKL,IAAL,CAAUK,KAAV,CAAP;EACD,OAHO;EAIR+J,MAAAA,QAAQ,EAAE;EAJF,KADA;EAOVgD,IAAAA,QAAQ,EAAE;EACR1D,MAAAA,gBAAgB,EAAE,0BAASd,MAAT,EAAiB;EACjC,eAAOA,MAAM,CAAC9I,MAAP,GAAgB,CAAvB;EACD,OAHO;EAIRiK,MAAAA,cAAc,EAAE,wBAAS1J,KAAT,EAAgB;EAC9B,eAAO,KAAKL,IAAL,CAAUK,KAAV,CAAP;EACD,OANO;EAOR+J,MAAAA,QAAQ,EAAE;EAPF,KAPA;EAgBVF,IAAAA,IAAI,EAAE;EACJH,MAAAA,cAAc,EAAE,wBAAS1J,KAAT,EAAgB6J,IAAhB,EAAqD;EAAA,uFAAJ,EAAI;EAAA,6BAA9BmD,IAA8B;EAAA,YAA9BA,IAA8B,0BAAvB,KAAuB;EAAA,6BAAhBC,IAAgB;EAAA,YAAhBA,IAAgB,0BAAT,CAAS;;EACnE,YAAIC,MAAM,GAAG5C,WAAW,CAACT,IAAD,CAAxB;;EACA,YAAI,CAACqD,MAAL,EAAa;EACX,gBAAM,IAAItI,KAAJ,CAAU,qBAAqBiF,IAArB,GAA4B,oBAAtC,CAAN;EACD;;EACD,YAAI,CAAC7J,KAAL,EACE,OAAO,IAAP,CANiE;;EAOnE,YAAI,CAACkN,MAAM,CAACvN,IAAP,CAAYK,KAAZ,CAAL,EACE,OAAO,KAAP;;EACF,YAAI,aAAa6J,IAAjB,EAAuB;EACrB,cAAI,CAAC,SAASlK,IAAT,CAAcqN,IAAI,IAAI,EAAtB,CAAL,EAAgC;EAC9B,gBAAIG,EAAE,GAAGvM,MAAM,CAACZ,KAAD,CAAf;EACA,gBAAIoN,QAAQ,GAAGvC,IAAI,CAACC,GAAL,CAASF,aAAa,CAACoC,IAAD,CAAtB,EAA8BpC,aAAa,CAACqC,IAAD,CAA3C,CAAf;EACA,gBAAIrC,aAAa,CAACuC,EAAD,CAAb,GAAoBC,QAAxB;EACE,qBAAO,KAAP,CAJ4B;;EAM9B,gBAAIC,KAAK,GAAG,SAARA,KAAQ,CAAAC,CAAC;EAAA,qBAAIzC,IAAI,CAAC0C,KAAL,CAAWD,CAAC,GAAGzC,IAAI,CAAC2C,GAAL,CAAS,EAAT,EAAaJ,QAAb,CAAf,CAAJ;EAAA,aAAb;;EACA,gBAAI,CAACC,KAAK,CAACF,EAAD,CAAL,GAAYE,KAAK,CAACJ,IAAD,CAAlB,IAA4BI,KAAK,CAACL,IAAD,CAAjC,IAA2C,CAA/C,EACE,OAAO,KAAP;EACH;EACF;;EACD,eAAO,IAAP;EACD,OAvBG;EAwBJ5J,MAAAA,eAAe,EAAE;EACf,YAAI,QADW;EAEf4J,QAAAA,IAAI,EAAE,QAFS;EAGfC,QAAAA,IAAI,EAAE;EAHS,OAxBb;EA6BJlD,MAAAA,QAAQ,EAAE;EA7BN,KAhBI;EA+CV0D,IAAAA,OAAO,EAAE;EACP/D,MAAAA,cAAc,EAAE,wBAAS1J,KAAT,EAAgBiD,MAAhB,EAAwB;EACtC,YAAI,CAACjD,KAAL,EACE,OAAO,IAAP,CAFoC;;EAGtC,eAAOiD,MAAM,CAACtD,IAAP,CAAYK,KAAZ,CAAP;EACD,OALM;EAMPoD,MAAAA,eAAe,EAAE,QANV;EAOP2G,MAAAA,QAAQ,EAAE;EAPH,KA/CC;EAwDV2D,IAAAA,SAAS,EAAE;EACThE,MAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiB2N,WAAjB,EAA8B;EAC5C,YAAI,CAAC3N,KAAL,EACE,OAAO,IAAP,CAF0C;;EAG5C,eAAOA,KAAK,CAACP,MAAN,IAAgBkO,WAAvB;EACD,OALQ;EAMTvK,MAAAA,eAAe,EAAE,SANR;EAOT2G,MAAAA,QAAQ,EAAE;EAPD,KAxDD;EAiEV6D,IAAAA,SAAS,EAAE;EACTlE,MAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiB2N,WAAjB,EAA8B;EAC5C,eAAO3N,KAAK,CAACP,MAAN,IAAgBkO,WAAvB;EACD,OAHQ;EAITvK,MAAAA,eAAe,EAAE,SAJR;EAKT2G,MAAAA,QAAQ,EAAE;EALD,KAjED;EAwEVtK,IAAAA,MAAM,EAAE;EACNiK,MAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiB6N,GAAjB,EAAsB/C,GAAtB,EAA2B;EACzC,YAAI,CAAC9K,KAAL,EACE,OAAO,IAAP,CAFuC;;EAGzC,eAAOA,KAAK,CAACP,MAAN,IAAgBoO,GAAhB,IAAuB7N,KAAK,CAACP,MAAN,IAAgBqL,GAA9C;EACD,OALK;EAMN1H,MAAAA,eAAe,EAAE,CAAC,SAAD,EAAY,SAAZ,CANX;EAON2G,MAAAA,QAAQ,EAAE;EAPJ,KAxEE;EAiFV+D,IAAAA,QAAQ,EAAE;EACRzE,MAAAA,gBAAgB,EAAE,0BAAUd,MAAV,EAAkBoF,WAAlB,EAA+B;EAC/C,eAAOpF,MAAM,CAAC9I,MAAP,IAAiBkO,WAAxB;EACD,OAHO;EAIRvK,MAAAA,eAAe,EAAE,SAJT;EAKR2G,MAAAA,QAAQ,EAAE;EALF,KAjFA;EAwFVgE,IAAAA,QAAQ,EAAE;EACR1E,MAAAA,gBAAgB,EAAE,0BAAUd,MAAV,EAAkBoF,WAAlB,EAA+B;EAC/C,eAAOpF,MAAM,CAAC9I,MAAP,IAAiBkO,WAAxB;EACD,OAHO;EAIRvK,MAAAA,eAAe,EAAE,SAJT;EAKR2G,MAAAA,QAAQ,EAAE;EALF,KAxFA;EA+FViE,IAAAA,KAAK,EAAE;EACL3E,MAAAA,gBAAgB,EAAE,0BAAUd,MAAV,EAAkBsF,GAAlB,EAAuB/C,GAAvB,EAA4B;EAC5C,eAAOvC,MAAM,CAAC9I,MAAP,IAAiBoO,GAAjB,IAAwBtF,MAAM,CAAC9I,MAAP,IAAiBqL,GAAhD;EACD,OAHI;EAIL1H,MAAAA,eAAe,EAAE,CAAC,SAAD,EAAY,SAAZ,CAJZ;EAKL2G,MAAAA,QAAQ,EAAE;EALL,KA/FG;EAsGV8D,IAAAA,GAAG,EAAExC,kBAAkB,CAAC,UAACrL,KAAD,EAAQ2N,WAAR;EAAA,aAAwB3N,KAAK,IAAI2N,WAAjC;EAAA,KAAD,CAtGb;EAuGV7C,IAAAA,GAAG,EAAEO,kBAAkB,CAAC,UAACrL,KAAD,EAAQ2N,WAAR;EAAA,aAAwB3N,KAAK,IAAI2N,WAAjC;EAAA,KAAD,CAvGb;EAwGVhD,IAAAA,KAAK,EAAEU,kBAAkB,CAAC,UAACrL,KAAD,EAAQ6N,GAAR,EAAa/C,GAAb;EAAA,aAAqB9K,KAAK,IAAI6N,GAAT,IAAgB7N,KAAK,IAAI8K,GAA9C;EAAA,KAAD,CAxGf;EAyGVmD,IAAAA,OAAO,EAAE;EACPvE,MAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiBkO,UAAjB,EAA6B;EAC3C,YAAI,CAAClO,KAAL,EACE,OAAO,IAAP,CAFyC;;EAG3C,YAAImO,UAAU,GAAGzK,CAAC,CAACwK,UAAD,CAAlB;EACA,YAAIC,UAAU,CAAC1O,MAAf,EACE,OAAOO,KAAK,KAAKmO,UAAU,CAACC,GAAX,EAAjB,CADF,KAGE,OAAOpO,KAAK,KAAKkO,UAAjB;EACH,OATM;EAUPnE,MAAAA,QAAQ,EAAE;EAVH,KAzGC;EAqHVsE,IAAAA,OAAO,EAAE;EACP3E,MAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiBkO,UAAjB,EAA6B;EAC3C,YAAI,CAAClO,KAAL,EAAY;EACV,iBAAO,IAAP,CADU;EAEX;;EAED,YAAIsO,EAAE,GAAG,+BAAT;EACA,eAAOA,EAAE,CAAC3O,IAAH,CAAQK,KAAR,CAAP;EACD,OARM;EASP+J,MAAAA,QAAQ,EAAE;EATH;EArHC;EAnJgB,CAA9B;;EC7FA,IAAIwE,EAAE,GAAG,EAAT;;EAEA,IAAIC,WAAW,GAAG,SAAdA,WAAc,CAAUC,SAAV,EAAqBC,SAArB,EAAgCC,IAAhC,EAAsC;EACtD,MAAIC,KAAK,GAAG,EAAZ;EACA,MAAIC,IAAI,GAAG,EAAX;;EAEA,OAAK,IAAI1P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsP,SAAS,CAAChP,MAA9B,EAAsCN,CAAC,EAAvC,EAA2C;EACzC,QAAI2P,KAAK,GAAG,KAAZ;;EAEA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,SAAS,CAACjP,MAA9B,EAAsCsP,CAAC,EAAvC;EACE,UAAIN,SAAS,CAACtP,CAAD,CAAT,CAAa6P,MAAb,CAAoBpP,IAApB,KAA6B8O,SAAS,CAACK,CAAD,CAAT,CAAaC,MAAb,CAAoBpP,IAArD,EAA2D;EACzDkP,QAAAA,KAAK,GAAG,IAAR;EACA;EACD;EAJH;;EAMA,QAAIA,KAAJ,EACED,IAAI,CAACzK,IAAL,CAAUqK,SAAS,CAACtP,CAAD,CAAnB,EADF,KAGEyP,KAAK,CAACxK,IAAN,CAAWqK,SAAS,CAACtP,CAAD,CAApB;EACH;;EAED,SAAO;EACL0P,IAAAA,IAAI,EAAEA,IADD;EAELD,IAAAA,KAAK,EAAEA,KAFF;EAGLK,IAAAA,OAAO,EAAE,CAACN,IAAD,GAAQH,WAAW,CAACE,SAAD,EAAYD,SAAZ,EAAuB,IAAvB,CAAX,CAAwCG,KAAhD,GAAwD;EAH5D,GAAP;EAKD,CAxBD;;EA0BAL,EAAE,CAACW,IAAH,GAAU;EAERC,EAAAA,kBAAkB,EAAE,8BAAY;EAAA;;EAC9B,SAAK/G,QAAL,CAAcjB,EAAd,CAAiB,gBAAjB,EAAmC,UAAAxD,GAAG,EAAI;EAAE,MAAA,KAAI,CAACyL,gBAAL,CAAsBzL,GAAtB;EAA6B,KAAzE;EACA,SAAKyE,QAAL,CAAcjB,EAAd,CAAiB,eAAjB,EAAkCrI,KAAK,CAACgG,eAAxC,EAAyD,UAAAnB,GAAG,EAAI;EAAE,MAAA,KAAI,CAAC0L,cAAL,CAAoB1L,GAApB;EAA2B,KAA7F,EAF8B;;EAK9B,QAAI,UAAU,KAAKkD,OAAL,CAAaxB,SAA3B,EACE;EAEF,SAAKrG,OAAL,CAAaoB,YAAb,CAA0B,YAA1B,EAAwC,EAAxC;EACD,GAXO;EAaRmF,EAAAA,KAAK,EAAE,iBAAY;EACjB,SAAK+J,aAAL,GAAqB,IAArB;EAEA,QAAI,SAAS,KAAK9I,gBAAd,IAAkC,WAAW,KAAKK,OAAL,CAAatB,KAA9D,EACE,OAAO,IAAP;;EAEF,SAAK,IAAIpG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKoQ,MAAL,CAAY9P,MAAhC,EAAwCN,CAAC,EAAzC,EAA6C;EAC3C,UAAIqQ,KAAK,GAAG,KAAKD,MAAL,CAAYpQ,CAAZ,CAAZ;;EACA,UAAI,SAASqQ,KAAK,CAAChJ,gBAAf,IAAmCgJ,KAAK,CAAChJ,gBAAN,CAAuB/G,MAAvB,GAAgC,CAAnE,IAAwE,gBAAgB,OAAO+P,KAAK,CAAC3I,OAAN,CAAc4I,OAAjH,EAA0H;EACxH,aAAKH,aAAL,GAAqBE,KAAK,CAACpH,QAA3B;EACA,YAAI,YAAY,KAAKvB,OAAL,CAAatB,KAA7B,EACE;EACH;EACF;;EAED,QAAI,SAAS,KAAK+J,aAAlB,EACE,OAAO,IAAP;EAEF,WAAO,KAAKA,aAAL,CAAmB/J,KAAnB,EAAP;EACD,GAhCO;EAkCRmK,EAAAA,UAAU,EAAE,sBAAY;EACtB;EACA,SAAKtH,QAAL,CAAcZ,GAAd,CAAkB,UAAlB;EACD;EArCO,CAAV;EAyCA+G,EAAE,CAAC1I,KAAH,GAAW;EAET8J,EAAAA,SAAS,EAAE,qBAAY;EACrB,SAAKC,QAAL,GADqB;;;EAIrB,QAAI,CAAC,KAAKC,GAAV,EACE,OALmB;;EAQrB,QAAIC,IAAI,GAAGtB,WAAW,CAAC,KAAKhI,gBAAN,EAAwB,KAAKqJ,GAAL,CAASE,oBAAjC,CAAtB,CARqB;;EAWrB,SAAKF,GAAL,CAASE,oBAAT,GAAgC,KAAKvJ,gBAArC,CAXqB;;EAcrB,SAAKwJ,kBAAL,GAdqB;;;EAiBrB,SAAKC,qBAAL,CAA2BH,IAA3B,EAjBqB;;;EAoBrB,SAAKX,kBAAL,GApBqB;;;EAuBrB,QAAI,CAACW,IAAI,CAACjB,IAAL,CAAUpP,MAAV,IAAoBqQ,IAAI,CAAClB,KAAL,CAAWnP,MAAhC,KAA2C,CAAC,KAAKyQ,WAArD,EAAkE;EAChE,WAAKA,WAAL,GAAmB,IAAnB;;EACA,WAAKf,kBAAL;EACD;EACF,GA7BQ;EA+BT;EACAgB,EAAAA,iBAAiB,EAAE,6BAAY;EAC7B;EACA,QAAI,SAAS,KAAK3J,gBAAlB,EACE,OAAO,EAAP;EAEF,QAAIkF,QAAQ,GAAG,EAAf;;EAEA,SAAK,IAAIvM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqH,gBAAL,CAAsB/G,MAA1C,EAAkDN,CAAC,EAAnD;EACEuM,MAAAA,QAAQ,CAACtH,IAAT,CAAc,KAAKoC,gBAAL,CAAsBrH,CAAtB,EAAyBiR,YAAzB,IACb,KAAKC,gBAAL,CAAsB,KAAK7J,gBAAL,CAAsBrH,CAAtB,EAAyB6P,MAA/C,CADD;EADF;;EAIA,WAAOtD,QAAP;EACD,GA5CQ;EA8CT;EACA4E,EAAAA,QAAQ,EAAE,kBAAU1Q,IAAV,EAA4D;EAAA,mFAAJ,EAAI;EAAA,QAA3CiM,OAA2C,QAA3CA,OAA2C;EAAA,QAAlCmD,MAAkC,QAAlCA,MAAkC;EAAA,gCAA1BuB,WAA0B;EAAA,QAA1BA,WAA0B,iCAAZ,IAAY;;EACpE,SAAKX,QAAL;;EACA,SAAKY,SAAL,CAAe5Q,IAAf,EAAqB;EAACiM,MAAAA,OAAO,EAAPA,OAAD;EAAUmD,MAAAA,MAAM,EAANA;EAAV,KAArB;;EAEA,QAAIuB,WAAJ,EACE,KAAKE,WAAL;EACH,GArDQ;EAuDT;EACAC,EAAAA,WAAW,EAAE,qBAAU9Q,IAAV,EAA4D;EAAA,oFAAJ,EAAI;EAAA,QAA3CiM,OAA2C,SAA3CA,OAA2C;EAAA,QAAlCmD,MAAkC,SAAlCA,MAAkC;EAAA,kCAA1BuB,WAA0B;EAAA,QAA1BA,WAA0B,kCAAZ,IAAY;;EACvE,SAAKX,QAAL;;EACA,SAAKe,YAAL,CAAkB/Q,IAAlB,EAAwB;EAACiM,MAAAA,OAAO,EAAPA,OAAD;EAAUmD,MAAAA,MAAM,EAANA;EAAV,KAAxB;;EAEA,QAAIuB,WAAJ,EACE,KAAKE,WAAL;EACH,GA9DQ;EAgET;EACAG,EAAAA,WAAW,EAAE,qBAAUhR,IAAV,EAA2C;EAAA,oFAAJ,EAAI;EAAA,kCAA1B2Q,WAA0B;EAAA,QAA1BA,WAA0B,kCAAZ,IAAY;;EACtD,SAAKX,QAAL;;EACA,SAAKiB,YAAL,CAAkBjR,IAAlB,EAFsD;EAKtD;;;EACA,QAAI2Q,WAAJ,EACE,KAAKP,kBAAL;EACH,GAzEQ;EA2ETA,EAAAA,kBAAkB,EAAE,8BAAY;EAC9B,QAAI,KAAKc,cAAL,MAAyB,KAAKC,eAAL,EAAzB,IAAmD,SAAS,KAAKvK,gBAArE,EACE,KAAKwK,aAAL,GADF,KAEK,IAAI,KAAKxK,gBAAL,CAAsB/G,MAAtB,GAA+B,CAAnC,EACH,KAAKgR,WAAL,GADG,KAGH,KAAKQ,WAAL;EACH,GAlFQ;EAoFThB,EAAAA,qBAAqB,EAAE,+BAAUH,IAAV,EAAgB;EACrC,QAAI,gBAAgB,OAAO,KAAKjJ,OAAL,CAAaqK,sBAAxC,EACE,OAFmC;;EAKrC,QAAI,gBAAgB,OAAO,KAAKrK,OAAL,CAAauJ,YAAxC,EAAsD;EACpD,UAAKN,IAAI,CAAClB,KAAL,CAAWnP,MAAX,IAAqBqQ,IAAI,CAACjB,IAAL,CAAUpP,MAApC,EAA6C;EAC3C,aAAK0R,mBAAL;;EAEA,YAAI,MAAM,KAAKtB,GAAL,CAASuB,cAAT,CAAwBC,IAAxB,CAA6B,+BAA7B,EAA8D5R,MAAxE,EACE,KAAKoQ,GAAL,CAASuB,cAAT,CACGE,MADH,CAEI5N,CAAC,CAAC,KAAKmD,OAAL,CAAab,aAAd,CAAD,CACCuL,QADD,CACU,8BADV,CAFJ;;EAMF,aAAK1B,GAAL,CAAS2B,kBAAT,CAA4BzS,IAA5B,CAAiC,kBAAjC,EAAqD,KAAK8Q,GAAL,CAAS4B,eAA9D;;EAEA,eAAO,KAAK5B,GAAL,CAASuB,cAAT,CACJG,QADI,CACK,QADL,EAEJxS,IAFI,CAEC,aAFD,EAEgB,OAFhB,EAGJsS,IAHI,CAGC,+BAHD,EAIJK,IAJI,CAIC,KAAK7K,OAAL,CAAauJ,YAJd,CAAP;EAKD;;EAED,WAAKP,GAAL,CAAS2B,kBAAT,CAA4BG,UAA5B,CAAuC,kBAAvC;;EAEA,aAAO,KAAK9B,GAAL,CAASuB,cAAT,CACJQ,WADI,CACQ,QADR,EAEJ7S,IAFI,CAEC,aAFD,EAEgB,MAFhB,EAGJsS,IAHI,CAGC,+BAHD,EAIJtN,MAJI,EAAP;EAKD,KAhCoC;;;EAmCrC,SAAK,IAAI5E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2Q,IAAI,CAACb,OAAL,CAAaxP,MAAjC,EAAyCN,CAAC,EAA1C;EACE,WAAK0R,YAAL,CAAkBf,IAAI,CAACb,OAAL,CAAa9P,CAAb,EAAgB6P,MAAhB,CAAuBpP,IAAzC;EADF;;EAGA,SAAKT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2Q,IAAI,CAAClB,KAAL,CAAWnP,MAA3B,EAAmCN,CAAC,EAApC;EACE,WAAKqR,SAAL,CAAeV,IAAI,CAAClB,KAAL,CAAWzP,CAAX,EAAc6P,MAAd,CAAqBpP,IAApC,EAA0C;EAACiM,QAAAA,OAAO,EAAEiE,IAAI,CAAClB,KAAL,CAAWzP,CAAX,EAAciR,YAAxB;EAAsCpB,QAAAA,MAAM,EAAEc,IAAI,CAAClB,KAAL,CAAWzP,CAAX,EAAc6P;EAA5D,OAA1C;EADF;;EAGA,SAAK7P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2Q,IAAI,CAACjB,IAAL,CAAUpP,MAA1B,EAAkCN,CAAC,EAAnC;EACE,WAAKwR,YAAL,CAAkBb,IAAI,CAACjB,IAAL,CAAU1P,CAAV,EAAa6P,MAAb,CAAoBpP,IAAtC,EAA4C;EAACiM,QAAAA,OAAO,EAAEiE,IAAI,CAACjB,IAAL,CAAU1P,CAAV,EAAaiR,YAAvB;EAAqCpB,QAAAA,MAAM,EAAEc,IAAI,CAACjB,IAAL,CAAU1P,CAAV,EAAa6P;EAA1D,OAA5C;EADF;EAED,GA/HQ;EAkITwB,EAAAA,SAAS,EAAE,mBAAU5Q,IAAV,SAAmC;EAAA,QAAlBiM,OAAkB,SAAlBA,OAAkB;EAAA,QAATmD,MAAS,SAATA,MAAS;;EAC5C,SAAKmC,mBAAL;;EACA,SAAKtB,GAAL,CAAS2B,kBAAT,CACGzS,IADH,CACQ,kBADR,EAC4B,KAAK8Q,GAAL,CAAS4B,eADrC;;EAEA,SAAK5B,GAAL,CAASuB,cAAT,CACGG,QADH,CACY,QADZ,EAEGxS,IAFH,CAEQ,aAFR,EAEuB,OAFvB,EAGGuS,MAHH,CAII5N,CAAC,CAAC,KAAKmD,OAAL,CAAab,aAAd,CAAD,CACCuL,QADD,CACU,aAAa3R,IADvB,EAEC8R,IAFD,CAEM7F,OAAO,IAAI,KAAKwE,gBAAL,CAAsBrB,MAAtB,CAFjB,CAJJ;EAQD,GA9IQ;EAgJT2B,EAAAA,YAAY,EAAE,sBAAU/Q,IAAV,SAAmC;EAAA,QAAlBiM,OAAkB,SAAlBA,OAAkB;EAAA,QAATmD,MAAS,SAATA,MAAS;;EAC/C,SAAKa,GAAL,CAASuB,cAAT,CACGG,QADH,CACY,QADZ,EAEGF,IAFH,CAEQ,cAAczR,IAFtB,EAGG8R,IAHH,CAGQ7F,OAAO,IAAI,KAAKwE,gBAAL,CAAsBrB,MAAtB,CAHnB;EAID,GArJQ;EAuJT6B,EAAAA,YAAY,EAAE,sBAAUjR,IAAV,EAAgB;EAC5B,SAAKiQ,GAAL,CAAS2B,kBAAT,CACGG,UADH,CACc,kBADd;;EAEA,SAAK9B,GAAL,CAASuB,cAAT,CACGQ,WADH,CACe,QADf,EAEG7S,IAFH,CAEQ,aAFR,EAEuB,MAFvB,EAGGsS,IAHH,CAGQ,cAAczR,IAHtB,EAIGmE,MAJH;EAKD,GA/JQ;EAiKTsM,EAAAA,gBAAgB,EAAE,0BAAU7D,UAAV,EAAsB;EACtC,QAAIqF,4BAA4B,GAAGrF,UAAU,CAAC5M,IAAX,GAAkB,SAArD;EAEA,QAAI,gBAAgB,OAAO,KAAKiH,OAAL,CAAagL,4BAAb,CAA3B,EACE,OAAOtQ,MAAM,CAACgK,OAAP,CAAemB,aAAf,CAA6B,KAAK7F,OAAL,CAAagL,4BAAb,CAA7B,EAAyErF,UAAU,CAAC5C,YAApF,CAAP;EAEF,WAAOrI,MAAM,CAACgK,OAAP,CAAegB,eAAf,CAA+BC,UAA/B,CAAP;EACD,GAxKQ;EA0KToD,EAAAA,QAAQ,EAAE,oBAAY;EACpB;EACA,QAAI,KAAKC,GAAL,IAAY,UAAU,KAAKhJ,OAAL,CAAaxB,SAAvC,EACE;EAEF,QAAIwK,GAAG,GAAG,EAAV,CALoB;;EAQpB,SAAK7Q,OAAL,CAAaoB,YAAb,CAA0B,KAAKyG,OAAL,CAAa5H,SAAb,GAAyB,IAAnD,EAAyD,KAAKiH,MAA9D;EAEA;EACA;;EACA2J,IAAAA,GAAG,CAAC2B,kBAAJ,GAAyB,KAAKM,mBAAL,EAAzB,CAZoB;;EAepBjC,IAAAA,GAAG,CAAC4B,eAAJ,GAAsB,iBAAiB,KAAK5K,OAAL,CAAa1B,QAAb,GAAwB,cAAc,KAAK0B,OAAL,CAAa1B,QAAnD,GAA8D,KAAKe,MAApF,CAAtB;EACA2J,IAAAA,GAAG,CAACuB,cAAJ,GAAqB1N,CAAC,CAAC,KAAKmD,OAAL,CAAad,aAAd,CAAD,CAA8BhH,IAA9B,CAAmC,IAAnC,EAAyC8Q,GAAG,CAAC4B,eAA7C,CAArB,CAhBoB;;EAmBpB5B,IAAAA,GAAG,CAACE,oBAAJ,GAA2B,EAA3B;EACAF,IAAAA,GAAG,CAACkC,4BAAJ,GAAmC,KAAnC,CApBoB;;EAuBpB,SAAKlC,GAAL,GAAWA,GAAX;EACD,GAlMQ;EAoMT;EACAiC,EAAAA,mBAAmB,EAAE,+BAAY;EAC/B;EACA,QAAI,aAAa,OAAO,KAAKjL,OAAL,CAAajB,YAAjC,IAAiDlC,CAAC,CAAC,KAAKmD,OAAL,CAAajB,YAAd,CAAD,CAA6BnG,MAAlF,EACE,OAAOiE,CAAC,CAAC,KAAKmD,OAAL,CAAajB,YAAd,CAAR,CAH6B;;EAM/B,QAAIoM,gBAAgB,GAAG,KAAKnL,OAAL,CAAajB,YAApC,CAN+B;;EAS/B,QAAI,aAAa,OAAO,KAAKiB,OAAL,CAAajB,YAAjC,IAAiD,eAAe,OAAOrE,MAAM,CAAC,KAAKsF,OAAL,CAAajB,YAAd,CAAjF,EACEoM,gBAAgB,GAAGzQ,MAAM,CAAC,KAAKsF,OAAL,CAAajB,YAAd,CAAzB;;EAEF,QAAI,eAAe,OAAOoM,gBAA1B,EAA4C;EAC1C,UAAIC,QAAQ,GAAGD,gBAAgB,CAAClK,IAAjB,CAAsB,IAAtB,EAA4B,IAA5B,CAAf,CAD0C;;EAI1C,UAAI,gBAAgB,OAAOmK,QAAvB,IAAmCA,QAAQ,CAACxS,MAAhD,EACE,OAAOwS,QAAP;EACH,KAND,MAMO,IAAI,qBAAoBD,gBAApB,KAAwCA,gBAAgB,YAAYE,MAApE,IAA8EF,gBAAgB,CAACvS,MAAnG,EAA2G;EAChH,aAAOuS,gBAAP;EACD,KAFM,MAEA,IAAIA,gBAAJ,EAAsB;EAC3BlT,MAAAA,KAAK,CAACwC,IAAN,CAAW,wBAAwB0Q,gBAAxB,GAA2C,qDAAtD;EACD;;EAED,WAAO,KAAKG,YAAL,EAAP;EACD,GA9NQ;EAgOTA,EAAAA,YAAY,EAAE,wBAAW;EACvB;EACA,QAAI,CAAC,KAAKtL,OAAL,CAAa1B,QAAd,IAA0B,KAAKnG,OAAL,CAAaoT,QAAb,KAA0B,QAAxD,EACE,OAAO,KAAKhK,QAAZ,CAHqB;;EAMvB,WAAO,KAAKA,QAAL,CAAcrB,MAAd,EAAP;EACD,GAvOQ;EAyOToK,EAAAA,mBAAmB,EAAE,+BAAY;EAC/B,QAAIkB,gBAAgB,GAAG,KAAKxL,OAAL,CAAaf,eAApC,CAD+B;;EAI/B,QAAI,MAAM,KAAK+J,GAAL,CAASuB,cAAT,CAAwBrK,MAAxB,GAAiCtH,MAA3C,EACE,OAAO,KAAKoQ,GAAL,CAASuB,cAAT,CAAwBrK,MAAxB,EAAP;;EAEF,QAAI,aAAa,OAAOsL,gBAAxB,EAA0C;EACxC,UAAI3O,CAAC,CAAC2O,gBAAD,CAAD,CAAoB5S,MAAxB,EACE,OAAOiE,CAAC,CAAC2O,gBAAD,CAAD,CAAoBf,MAApB,CAA2B,KAAKzB,GAAL,CAASuB,cAApC,CAAP,CADF,KAEK,IAAI,eAAe,OAAO7P,MAAM,CAAC8Q,gBAAD,CAAhC,EACHA,gBAAgB,GAAG9Q,MAAM,CAAC8Q,gBAAD,CAAzB,CADG,KAGHvT,KAAK,CAACwC,IAAN,CAAW,2BAA2B+Q,gBAA3B,GAA8C,qDAAzD;EACH;;EAED,QAAI,eAAe,OAAOA,gBAA1B,EACEA,gBAAgB,GAAGA,gBAAgB,CAACvK,IAAjB,CAAsB,IAAtB,EAA4B,IAA5B,CAAnB;EAEF,QAAI,qBAAoBuK,gBAApB,KAAwCA,gBAAgB,CAAC5S,MAA7D,EACE,OAAO4S,gBAAgB,CAACf,MAAjB,CAAwB,KAAKzB,GAAL,CAASuB,cAAjC,CAAP;EAEF,WAAO,KAAKe,YAAL,GAAoBG,KAApB,CAA0B,KAAKzC,GAAL,CAASuB,cAAnC,CAAP;EACD,GAhQQ;EAkQTjC,EAAAA,kBAAkB,EAAE,8BAAY;EAAA;;EAC9B,QAAIoD,OAAO,GAAG,KAAKrK,YAAL,EAAd;;EACA,QAAI1C,OAAJ,CAF8B;;EAK9B+M,IAAAA,OAAO,CAAC/K,GAAR,CAAY,UAAZ;EACA,QAAI,KAAK0I,WAAT,EACEqC,OAAO,CAACpL,EAAR,CAAWrI,KAAK,CAACyE,eAAN,CAAsB,KAAKsD,OAAL,CAAapB,mBAAnC,EAAwD,SAAxD,CAAX,EAA+E,YAAM;EACnF,MAAA,MAAI,CAAC+M,iBAAL;EACD,KAFD,EADF,KAIK,IAAIhN,OAAO,GAAG1G,KAAK,CAACyE,eAAN,CAAsB,KAAKsD,OAAL,CAAarB,OAAnC,EAA4C,SAA5C,CAAd,EAAsE;EACzE+M,MAAAA,OAAO,CAACpL,EAAR,CAAW3B,OAAX,EAAoB,UAAAiN,KAAK,EAAI;EAC3B,QAAA,MAAI,CAACD,iBAAL,CAAuBC,KAAvB;EACD,OAFD;EAGD;EACF,GAjRQ;EAmRTD,EAAAA,iBAAiB,EAAE,2BAAUC,KAAV,EAAiB;EAAA;;EAClC;EACA;EACA;EACA,QAAIA,KAAK,IAAI,YAAY9S,IAAZ,CAAiB8S,KAAK,CAAC5I,IAAvB,CAAb,EACE,IAAI,EAAE,KAAKgG,GAAL,IAAY,KAAKA,GAAL,CAASkC,4BAAvB,KAAwD,KAAKW,QAAL,GAAgBjT,MAAhB,IAA0B,KAAKoH,OAAL,CAAavB,mBAAnG,EACE;;EAEJ,QAAI,KAAKuB,OAAL,CAAa8L,QAAjB,EAA2B;EACzBpR,MAAAA,MAAM,CAACqR,YAAP,CAAoB,KAAKC,UAAzB;EACA,WAAKA,UAAL,GAAkBtR,MAAM,CAACuR,UAAP,CAAkB;EAAA,eAAM,MAAI,CAAC7J,QAAL,EAAN;EAAA,OAAlB,EAAyC,KAAKpC,OAAL,CAAa8L,QAAtD,CAAlB;EACD,KAHD,MAIE,KAAK1J,QAAL;EACH,GAhSQ;EAkST8J,EAAAA,QAAQ,EAAE,oBAAY;EACpB;EACA,SAAK7C,WAAL,GAAmB,KAAnB;;EACA,SAAKf,kBAAL,GAHoB;;;EAMpB,QAAI,gBAAgB,OAAO,KAAKU,GAAhC,EACE,OAPkB;;EAUpB,SAAKA,GAAL,CAASuB,cAAT,CACGQ,WADH,CACe,QADf,EAEGoB,QAFH,GAGGjP,MAHH,GAVoB;;;EAgBpB,SAAKkN,WAAL,GAhBoB;;;EAmBpB,SAAKpB,GAAL,CAASE,oBAAT,GAAgC,EAAhC;EACA,SAAKF,GAAL,CAASkC,4BAAT,GAAwC,KAAxC;EACD,GAvTQ;EAyTTrC,EAAAA,UAAU,EAAE,sBAAY;EACtB,SAAKqD,QAAL;;EAEA,QAAI,gBAAgB,OAAO,KAAKlD,GAAhC,EACE,KAAKA,GAAL,CAASuB,cAAT,CAAwBrN,MAAxB;EAEF,WAAO,KAAK8L,GAAZ;EACD,GAhUQ;EAkUTmB,EAAAA,aAAa,EAAE,yBAAY;EACzB,SAAKnB,GAAL,CAASkC,4BAAT,GAAwC,IAAxC;;EACA,SAAKlC,GAAL,CAAS2B,kBAAT,CAA4BI,WAA5B,CAAwC,KAAK/K,OAAL,CAAanB,UAArD,EAAiE6L,QAAjE,CAA0E,KAAK1K,OAAL,CAAalB,YAAvF;EACD,GArUQ;EAsUT8K,EAAAA,WAAW,EAAE,uBAAY;EACvB,SAAKZ,GAAL,CAASkC,4BAAT,GAAwC,IAAxC;;EACA,SAAKlC,GAAL,CAAS2B,kBAAT,CAA4BI,WAA5B,CAAwC,KAAK/K,OAAL,CAAalB,YAArD,EAAmE4L,QAAnE,CAA4E,KAAK1K,OAAL,CAAanB,UAAzF;EACD,GAzUQ;EA0UTuL,EAAAA,WAAW,EAAE,uBAAY;EACvB,SAAKpB,GAAL,CAAS2B,kBAAT,CAA4BI,WAA5B,CAAwC,KAAK/K,OAAL,CAAalB,YAArD,EAAmEiM,WAAnE,CAA+E,KAAK/K,OAAL,CAAanB,UAA5F;EACD;EA5UQ,CAAX;;ECpEA,IAAIwJ,IAAI,GAAG,SAAPA,IAAO,CAAUlQ,OAAV,EAAmB8H,UAAnB,EAA+BD,OAA/B,EAAwC;EACjD,OAAKsD,SAAL,GAAiB,MAAjB;EAEA,OAAKnL,OAAL,GAAeA,OAAf;EACA,OAAKoJ,QAAL,GAAgB1E,CAAC,CAAC1E,OAAD,CAAjB;EACA,OAAK8H,UAAL,GAAkBA,UAAlB;EACA,OAAKD,OAAL,GAAeA,OAAf;EACA,OAAKE,MAAL,GAAcxF,MAAM,CAACgK,OAArB;EAEA,OAAKgE,MAAL,GAAc,EAAd;EACA,OAAK/I,gBAAL,GAAwB,IAAxB;EACD,CAXD;;EAaA,IAAIyM,aAAa,GAAG;EAACC,EAAAA,OAAO,EAAE,IAAV;EAAgBC,EAAAA,QAAQ,EAAE,IAA1B;EAAgCC,EAAAA,QAAQ,EAAE;EAA1C,CAApB;EAEAlE,IAAI,CAACvK,SAAL,GAAiB;EACfyK,EAAAA,gBAAgB,EAAE,0BAAUqD,KAAV,EAAiB;EAAA;;EACjC;EACA,QAAI,SAASA,KAAK,CAACY,OAAnB,EACE,OAH+B;;EAMjC,QAAIC,YAAY,GAAG,KAAKC,aAAL,IAAsB,KAAKnL,QAAL,CAAciJ,IAAd,CAAmBvS,KAAK,CAACgG,eAAzB,EAA0C,CAA1C,CAAzC;EACA,SAAKyO,aAAL,GAAqB,IAArB;EACA,SAAKnL,QAAL,CAAciJ,IAAd,CAAmB,kCAAnB,EAAuDmC,IAAvD,CAA4D,UAA5D,EAAwE,IAAxE;EACA,QAAIF,YAAY,IAAI,SAASA,YAAY,CAAC9S,YAAb,CAA0B,gBAA1B,CAA7B,EACE;EAEFe,IAAAA,MAAM,CAACgK,OAAP,CAAekI,YAAf,GAA8B,EAA9B;EAEA,QAAI9M,OAAO,GAAG,KAAK+M,YAAL,CAAkB;EAACjB,MAAAA,KAAK,EAALA;EAAD,KAAlB,CAAd;;EAEA,QAAI,eAAe9L,OAAO,CAACgN,KAAR,EAAf,IAAkC,UAAU,KAAKC,QAAL,CAAc,QAAd,CAAhD,EAAyE,CAAzE,MAGO;EACL;EACAnB,MAAAA,KAAK,CAACoB,wBAAN;EACApB,MAAAA,KAAK,CAACqB,cAAN;EACA,UAAI,cAAcnN,OAAO,CAACgN,KAAR,EAAlB,EACEhN,OAAO,CAACoN,IAAR,CAAa,YAAM;EAAE,QAAA,KAAI,CAACC,OAAL,CAAaV,YAAb;EAA6B,OAAlD;EACH;EACF,GA3Bc;EA6BfjE,EAAAA,cAAc,EAAE,wBAASoD,KAAT,EAAgB;EAC9B,SAAKc,aAAL,GAAqBd,KAAK,CAACwB,aAA3B;EACD,GA/Bc;EAgCf;EACA;EACA;EACAD,EAAAA,OAAO,EAAE,iBAAUV,YAAV,EAAwB;EAC/B,QAAI,UAAU,KAAKM,QAAL,CAAc,QAAd,CAAd,EACE,OAF6B;;EAI/B,QAAIN,YAAJ,EAAkB;EAChB,UAAIY,UAAU,GAAG,KAAK9L,QAAL,CAAciJ,IAAd,CAAmB,kCAAnB,EAAuDmC,IAAvD,CAA4D,UAA5D,EAAwE,KAAxE,CAAjB;EACA,UAAI,MAAMU,UAAU,CAACzU,MAArB,EACEyU,UAAU,GAAGxQ,CAAC,CAAC,+DAAD,CAAD,CAAmEyQ,QAAnE,CAA4E,KAAK/L,QAAjF,CAAb;EACF8L,MAAAA,UAAU,CAACnV,IAAX,CAAgB;EACda,QAAAA,IAAI,EAAE0T,YAAY,CAAC9S,YAAb,CAA0B,MAA1B,CADQ;EAEdR,QAAAA,KAAK,EAAEsT,YAAY,CAAC9S,YAAb,CAA0B,OAA1B;EAFO,OAAhB;EAID;;EAED,SAAK4H,QAAL,CAAc5C,OAAd,CAAsB,SAAc9B,CAAC,CAAC0Q,KAAF,CAAQ,QAAR,CAAd,EAAiC;EAACf,MAAAA,OAAO,EAAE;EAAV,KAAjC,CAAtB;EACD,GAlDc;EAoDf;EACA;EACA;EACA;EACA;EACApK,EAAAA,QAAQ,EAAE,kBAAUpC,OAAV,EAAmB;EAC3B,QAAIpF,SAAS,CAAChC,MAAV,IAAoB,CAApB,IAAyB,CAACiE,CAAC,CAACoG,aAAF,CAAgBjD,OAAhB,CAA9B,EAAwD;EACtD/H,MAAAA,KAAK,CAAC4C,QAAN,CAAe,0FAAf;;EADsD,kDAE1BD,SAF0B;EAAA,UAEjD2D,KAFiD;EAAA,UAE1C4C,KAF0C;EAAA,UAEnCyK,KAFmC;;EAGtD5L,MAAAA,OAAO,GAAG;EAACzB,QAAAA,KAAK,EAALA,KAAD;EAAQ4C,QAAAA,KAAK,EAALA,KAAR;EAAeyK,QAAAA,KAAK,EAALA;EAAf,OAAV;EACD;;EACD,WAAOQ,aAAa,CAAE,KAAKS,YAAL,CAAkB7M,OAAlB,EAA2B8M,KAA3B,EAAF,CAApB;EACD,GAhEc;EAkEfD,EAAAA,YAAY,EAAE,wBAAsC;EAAA;EAAA;;EAAA,mFAAJ,EAAI;EAAA,QAA3BtO,KAA2B,QAA3BA,KAA2B;EAAA,QAApB4C,KAAoB,QAApBA,KAAoB;EAAA,QAAbyK,KAAa,QAAbA,KAAa;;EAClD,SAAK4B,WAAL,GAAmB5B,KAAnB;;EACA,QAAIA,KAAJ,EAAW;EACT,WAAK4B,WAAL,GAAmB,SAAc,EAAd,EAAkB5B,KAAlB,EAAyB;EAACqB,QAAAA,cAAc,EAAE,0BAAM;EACjEhV,UAAAA,KAAK,CAAC4C,QAAN,CAAe,wGAAf;EACA,UAAA,MAAI,CAAC8E,gBAAL,GAAwB,KAAxB;EACD;EAH2C,OAAzB,CAAnB;EAID;;EACD,SAAKA,gBAAL,GAAwB,IAAxB,CARkD;;EAWlD,SAAKoN,QAAL,CAAc,UAAd,EAXkD;;;EAclD,SAAKU,cAAL;;EAEA,QAAIhQ,QAAQ,GAAG,KAAKiQ,gCAAL,CAAsC,YAAM;EACzD,aAAO7Q,CAAC,CAACzB,GAAF,CAAM,MAAI,CAACsN,MAAX,EAAmB,UAAAC,KAAK;EAAA,eAAIA,KAAK,CAACkE,YAAN,CAAmB;EAAC1L,UAAAA,KAAK,EAALA,KAAD;EAAQ5C,UAAAA,KAAK,EAALA;EAAR,SAAnB,CAAJ;EAAA,OAAxB,CAAP;EACD,KAFc,CAAf;;EAIA,WAAO,yBAAAtG,KAAK,CAACuF,GAAN,CAAUC,QAAV,EACJyP,IADI,CACG,YAAM;EAAE,MAAA,MAAI,CAACH,QAAL,CAAc,SAAd;EAA2B,KADtC,EAEJY,IAFI,CAEG,YAAM;EACZ,MAAA,MAAI,CAAChO,gBAAL,GAAwB,KAAxB;;EACA,MAAA,MAAI,CAACjB,KAAL;;EACA,MAAA,MAAI,CAACqO,QAAL,CAAc,OAAd;EACD,KANI,EAOJa,MAPI,CAOG,YAAM;EAAE,MAAA,MAAI,CAACb,QAAL,CAAc,WAAd;EAA6B,KAPxC,GAQJvN,IARI,iDAQI,KAAKD,gCAAL,EARJ,EAAP;EASD,GA/Fc;EAiGf;EACA;EACA;EACA;EACAsO,EAAAA,OAAO,EAAE,iBAAU7N,OAAV,EAAmB;EAC1B,QAAIpF,SAAS,CAAChC,MAAV,IAAoB,CAApB,IAAyB,CAACiE,CAAC,CAACoG,aAAF,CAAgBjD,OAAhB,CAA9B,EAAwD;EACtD/H,MAAAA,KAAK,CAAC4C,QAAN,CAAe,yFAAf;;EADsD,mDAEjCD,SAFiC;EAAA,UAEjD2D,KAFiD;EAAA,UAE1C4C,KAF0C;;EAGtDnB,MAAAA,OAAO,GAAG;EAACzB,QAAAA,KAAK,EAALA,KAAD;EAAQ4C,QAAAA,KAAK,EAALA;EAAR,OAAV;EACD;;EACD,WAAOiL,aAAa,CAAE,KAAKhL,SAAL,CAAepB,OAAf,EAAwB8M,KAAxB,EAAF,CAApB;EACD,GA5Gc;EA8Gf;EACA;EACA;EACA1L,EAAAA,SAAS,EAAE,qBAA+B;EAAA;;EAAA,oFAAJ,EAAI;EAAA,QAApB7C,KAAoB,SAApBA,KAAoB;EAAA,QAAb4C,KAAa,SAAbA,KAAa;;EACxC,SAAKsM,cAAL;;EAEA,QAAIhQ,QAAQ,GAAG,KAAKiQ,gCAAL,CAAsC,YAAM;EACzD,aAAO7Q,CAAC,CAACzB,GAAF,CAAM,MAAI,CAACsN,MAAX,EAAmB,UAAAC,KAAK;EAAA,eAAIA,KAAK,CAACvH,SAAN,CAAgB;EAAC7C,UAAAA,KAAK,EAALA,KAAD;EAAQ4C,UAAAA,KAAK,EAALA;EAAR,SAAhB,CAAJ;EAAA,OAAxB,CAAP;EACD,KAFc,CAAf;;EAGA,WAAOlJ,KAAK,CAACuF,GAAN,CAAUC,QAAV,CAAP;EACD,GAxHc;EA0HfqQ,EAAAA,OAAO,EAAE,mBAAW;EAClB,SAAKL,cAAL;;EACA,WAAO,IAAP;EACD,GA7Hc;EA+Hf;EACAM,EAAAA,KAAK,EAAE,iBAAY;EACjB;EACA,SAAK,IAAIzV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKoQ,MAAL,CAAY9P,MAAhC,EAAwCN,CAAC,EAAzC;EACE,WAAKoQ,MAAL,CAAYpQ,CAAZ,EAAeyV,KAAf;EADF;;EAGA,SAAKhB,QAAL,CAAc,OAAd;EACD,GAtIc;EAwIf;EACAiB,EAAAA,OAAO,EAAE,mBAAY;EACnB;EACA,SAAKnF,UAAL,GAFmB;;;EAKnB,SAAK,IAAIvQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKoQ,MAAL,CAAY9P,MAAhC,EAAwCN,CAAC,EAAzC;EACE,WAAKoQ,MAAL,CAAYpQ,CAAZ,EAAe0V,OAAf;EADF;;EAGA,SAAKzM,QAAL,CAAc0M,UAAd,CAAyB,SAAzB;;EACA,SAAKlB,QAAL,CAAc,SAAd;EACD,GAnJc;EAqJfU,EAAAA,cAAc,EAAE,0BAAY;EAC1B,WAAO,KAAK1N,gBAAL,GAAwBmO,WAAxB,EAAP;EACD,GAvJc;EAyJfA,EAAAA,WAAW,EAAE,uBAAY;EAAA;;EACvB,QAAIC,SAAS,GAAG,KAAKzF,MAArB;EAEA,SAAKA,MAAL,GAAc,EAAd;EACA,SAAK0F,gBAAL,GAAwB,EAAxB;;EAEA,SAAKV,gCAAL,CAAsC,YAAM;EAC1C,MAAA,MAAI,CAACnM,QAAL,CACCiJ,IADD,CACM,MAAI,CAACxK,OAAL,CAAa7B,MADnB,EAECkQ,GAFD,CAEK,MAAI,CAACrO,OAAL,CAAa5B,QAFlB,EAGCiQ,GAHD,YAGS,MAAI,CAACrO,OAAL,CAAa5H,SAHtB,qBAICgF,IAJD,CAIM,UAAC7B,CAAD,EAAIpD,OAAJ,EAAgB;EACpB,YAAImW,aAAa,GAAG,IAAI5T,MAAM,CAACgK,OAAP,CAAe6J,OAAnB,CAA2BpW,OAA3B,EAAoC,EAApC,EAAwC,MAAxC,CAApB,CADoB;;EAIpB,YAAI,YAAYmW,aAAa,CAAChL,SAA1B,IAAuC,oBAAoBgL,aAAa,CAAChL,SAA7E,EAAwF;EACtF,cAAIkL,QAAQ,GAAGF,aAAa,CAAChL,SAAd,GAA0B,GAA1B,GAAgCgL,aAAa,CAACjP,MAA7D;;EACA,cAAI,gBAAgB,OAAO,MAAI,CAAC+O,gBAAL,CAAsBI,QAAtB,CAA3B,EAA4D;EAC1D,YAAA,MAAI,CAACJ,gBAAL,CAAsBI,QAAtB,IAAkCF,aAAlC;;EACA,YAAA,MAAI,CAAC5F,MAAL,CAAYnL,IAAZ,CAAiB+Q,aAAjB;EACD;EACF;EACF,OAfD;;EAiBAzR,MAAAA,CAAC,CAACO,IAAF,CAAOnF,KAAK,CAAC+E,UAAN,CAAiBmR,SAAjB,EAA4B,MAAI,CAACzF,MAAjC,CAAP,EAAiD,UAACnN,CAAD,EAAIoN,KAAJ,EAAc;EAC7DA,QAAAA,KAAK,CAACoF,KAAN;EACD,OAFD;EAGD,KArBD;;EAsBA,WAAO,IAAP;EACD,GAtLc;EAwLf;EACA;EACA;EACA;EACA;EACA;EACA;EACAL,EAAAA,gCAAgC,EAAE,0CAAUnN,EAAV,EAAc;EAC9C,QAAIkO,mBAAmB,GAAG,KAAK1O,gBAA/B;;EACA,SAAKA,gBAAL,GAAwB,YAAY;EAAE,aAAO,IAAP;EAAc,KAApD;;EACA,QAAI5C,MAAM,GAAGoD,EAAE,EAAf;EACA,SAAKR,gBAAL,GAAwB0O,mBAAxB;EACA,WAAOtR,MAAP;EACD,GArMc;EAuMf;EACA;EACA;EACA4P,EAAAA,QAAQ,EAAE,kBAAU2B,SAAV,EAAqB;EAC7B,WAAO,KAAK/P,OAAL,CAAa,UAAU+P,SAAvB,CAAP;EACD;EA5Mc,CAAjB;;EChBA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAASC,YAAT,EAAuB7V,IAAvB,EAA6BgK,YAA7B,EAA2CG,QAA3C,EAAqD2L,eAArD,EAAsE;EACvF,MAAMC,aAAa,GAAGpU,MAAM,CAACgK,OAAP,CAAeqK,kBAAf,CAAkC3L,UAAlC,CAA6CrK,IAA7C,CAAtB;EACA,MAAM0M,SAAS,GAAG,IAAIxD,SAAJ,CAAc6M,aAAd,CAAlB;EACA5L,EAAAA,QAAQ,GAAGA,QAAQ,IAAI0L,YAAY,CAAC5O,OAAb,CAAqBjH,IAAI,GAAG,UAA5B,CAAZ,IAAuD0M,SAAS,CAACvC,QAA5E;EACA2L,EAAAA,eAAe,GAAI,SAASA,eAA5B;;EAEA,WAAc,IAAd,EAAoB;EAClBpJ,IAAAA,SAAS,EAATA,SADkB;EAElB1M,IAAAA,IAAI,EAAJA,IAFkB;EAGlBgK,IAAAA,YAAY,EAAZA,YAHkB;EAIlBG,IAAAA,QAAQ,EAARA,QAJkB;EAKlB2L,IAAAA,eAAe,EAAfA;EALkB,GAApB;;EAOA,OAAKG,kBAAL,CAAwBJ,YAAY,CAAC5O,OAArC;EACD,CAdD;;EAgBA,IAAMiP,UAAU,GAAG,SAAbA,UAAa,CAAS9U,GAAT,EAAc;EAC/B,MAAM+U,GAAG,GAAG/U,GAAG,CAAC,CAAD,CAAH,CAAOI,WAAP,EAAZ;EACA,SAAO2U,GAAG,GAAG/U,GAAG,CAAClB,KAAJ,CAAU,CAAV,CAAb;EACD,CAHD;;EAKA0V,UAAU,CAAC7Q,SAAX,GAAuB;EACrBsE,EAAAA,QAAQ,EAAE,kBAASjJ,KAAT,EAAgBsJ,QAAhB,EAA0B;EAAA;;EAClC,WAAO,wBAAKgD,SAAL,EAAerD,QAAf,yBAAwBjJ,KAAxB,4BAAkC,KAAKgW,eAAvC,IAAwD1M,QAAxD,GAAP;EACD,GAHoB;EAKrBuM,EAAAA,kBAAkB,EAAE,4BAAShP,OAAT,EAAkB;EAAA;;EACpC,SAAKmP,eAAL,GAAuB,KAAK1J,SAAL,CAAe3C,iBAAf,CAAiC,KAAKC,YAAtC,EACrB,UAAAf,GAAG;EAAA,aAAIhC,OAAO,CAAC,KAAI,CAACjH,IAAL,GAAYkW,UAAU,CAACjN,GAAD,CAAvB,CAAX;EAAA,KADkB,CAAvB;EAGD;EAToB,CAAvB;;ECnBA,IAAIhD,KAAK,GAAG,SAARA,KAAQ,CAAU2J,KAAV,EAAiB1I,UAAjB,EAA6BD,OAA7B,EAAsCoP,mBAAtC,EAA2D;EACrE,OAAK9L,SAAL,GAAiB,OAAjB;EAEA,OAAKnL,OAAL,GAAewQ,KAAf;EACA,OAAKpH,QAAL,GAAgB1E,CAAC,CAAC8L,KAAD,CAAjB,CAJqE;;EAOrE,MAAI,gBAAgB,OAAOyG,mBAA3B,EAAgD;EAC9C,SAAKlP,MAAL,GAAckP,mBAAd;EACD;;EAED,OAAKpP,OAAL,GAAeA,OAAf;EACA,OAAKC,UAAL,GAAkBA,UAAlB,CAZqE;;EAerE,OAAKoP,WAAL,GAAmB,EAAnB;EACA,OAAKC,iBAAL,GAAyB,EAAzB;EACA,OAAK3P,gBAAL,GAAwB,IAAxB,CAjBqE;;EAoBrE,OAAK4P,gBAAL;EACD,CArBD;;EAuBA,IAAInD,eAAa,GAAG;EAACC,EAAAA,OAAO,EAAE,IAAV;EAAgBC,EAAAA,QAAQ,EAAE,IAA1B;EAAgCC,EAAAA,QAAQ,EAAE;EAA1C,CAApB;EAEAvN,KAAK,CAAClB,SAAN,GAAkB;EAChB;EACA;EACA;EACA;EACAsE,EAAAA,QAAQ,EAAE,kBAAUpC,OAAV,EAAmB;EAC3B,QAAIpF,SAAS,CAAChC,MAAV,IAAoB,CAApB,IAAyB,CAACiE,CAAC,CAACoG,aAAF,CAAgBjD,OAAhB,CAA9B,EAAwD;EACtD/H,MAAAA,KAAK,CAAC4C,QAAN,CAAe,2FAAf;EACAmF,MAAAA,OAAO,GAAG;EAACA,QAAAA,OAAO,EAAPA;EAAD,OAAV;EACD;;EACD,QAAIF,OAAO,GAAG,KAAK+M,YAAL,CAAkB7M,OAAlB,CAAd;EACA,QAAI,CAACF,OAAL;EACE,aAAO,IAAP;;EACF,YAAQA,OAAO,CAACgN,KAAR,EAAR;EACE,WAAK,SAAL;EAAgB,eAAO,IAAP;;EAChB,WAAK,UAAL;EAAiB,eAAO,IAAP;;EACjB,WAAK,UAAL;EAAiB,eAAO,KAAKnN,gBAAZ;EAHnB;EAKD,GAlBe;EAoBhB;EACA;EACA;EACAkN,EAAAA,YAAY,EAAE,wBAAgC;EAAA;EAAA;;EAAA,mFAAJ,EAAI;EAAA,QAArB1L,KAAqB,QAArBA,KAAqB;EAAA,QAAd5C,KAAc,QAAdA,KAAc;;EAC5C;EACA,SAAKuP,OAAL;EACA,QAAIvP,KAAK,IAAI,CAAC,KAAKiR,UAAL,CAAgBjR,KAAhB,CAAd,EACE;EAEF,SAAKpF,KAAL,GAAa,KAAK0S,QAAL,EAAb,CAN4C;;EAS5C,SAAKkB,QAAL,CAAc,UAAd;;EAEA,WAAO,8BAAK3L,SAAL,CAAe;EAACD,MAAAA,KAAK,EAALA,KAAD;EAAQhI,MAAAA,KAAK,EAAE,KAAKA,KAApB;EAA2BsW,MAAAA,UAAU,EAAE;EAAvC,KAAf,EACJ7B,MADI,CACG,YAAM;EAAE,MAAA,KAAI,CAAC9E,SAAL;EAAmB,KAD9B,EAEJoE,IAFI,CAEC,YAAQ;EAAE,MAAA,KAAI,CAACH,QAAL,CAAc,SAAd;EAA2B,KAFtC,EAGJY,IAHI,CAGC,YAAQ;EAAE,MAAA,KAAI,CAACZ,QAAL,CAAc,OAAd;EAAyB,KAHpC,EAIJa,MAJI,CAIG,YAAM;EAAE,MAAA,KAAI,CAACb,QAAL,CAAc,WAAd;EAA6B,KAJxC,GAKJvN,IALI,iDAKI,KAAKD,gCAAL,EALJ,EAAP;EAMD,GAxCe;EA0ChB0K,EAAAA,cAAc,EAAE,0BAAY;EAC1B,WAAO,MAAM,KAAKoF,WAAL,CAAiBzW,MAA9B;EACD,GA5Ce;EA8ChB;EACAsR,EAAAA,eAAe,EAAE,yBAAU/Q,KAAV,EAAiB;EAChC,QAAI,gBAAgB,OAAOA,KAA3B,EACEA,KAAK,GAAG,KAAK0S,QAAL,EAAR,CAF8B;EAKhC;;EACA,QAAI,CAAC1S,KAAK,CAACP,MAAP,IAAiB,CAAC,KAAK8W,WAAL,EAAlB,IAAwC,gBAAgB,OAAO,KAAK1P,OAAL,CAAa2P,eAAhF,EACE,OAAO,KAAP;EAEF,WAAO,IAAP;EACD,GAzDe;EA2DhBH,EAAAA,UAAU,EAAE,oBAAUjR,KAAV,EAAiB;EAC3B,QAAI+D,KAAK,CAACC,OAAN,CAAc,KAAKvC,OAAL,CAAazB,KAA3B,CAAJ,EACE,OAAO,CAAC,CAAD,KAAO1B,CAAC,CAAC+S,OAAF,CAAUrR,KAAV,EAAiB,KAAKyB,OAAL,CAAazB,KAA9B,CAAd;EACF,WAAO,KAAKyB,OAAL,CAAazB,KAAb,KAAuBA,KAA9B;EACD,GA/De;EAiEhB;EACA;EACA;EACA;EACAsP,EAAAA,OAAO,EAAE,iBAAU7N,OAAV,EAAmB;EAC1B,QAAIpF,SAAS,CAAChC,MAAV,IAAoB,CAApB,IAAyB,CAACiE,CAAC,CAACoG,aAAF,CAAgBjD,OAAhB,CAA9B,EAAwD;EACtD/H,MAAAA,KAAK,CAAC4C,QAAN,CAAe,0FAAf;;EADsD,kDAEjCD,SAFiC;EAAA,UAEjDuG,KAFiD;EAAA,UAE1ChI,KAF0C;;EAGtD6G,MAAAA,OAAO,GAAG;EAACmB,QAAAA,KAAK,EAALA,KAAD;EAAQhI,QAAAA,KAAK,EAALA;EAAR,OAAV;EACD;;EACD,QAAI2G,OAAO,GAAG,KAAKsB,SAAL,CAAepB,OAAf,CAAd;EACA,QAAI,CAACF,OAAL;EACE,aAAO,IAAP;EACF,WAAOsM,eAAa,CAACtM,OAAO,CAACgN,KAAR,EAAD,CAApB;EACD,GA/Ee;EAiFhB;EACA;EACA;EACA;EACA;EACA1L,EAAAA,SAAS,EAAE,qBAA0D;EAAA;;EAAA,oFAAJ,EAAI;EAAA,4BAA/CD,KAA+C;EAAA,QAA/CA,KAA+C,4BAAvC,KAAuC;EAAA,QAAhChI,KAAgC,SAAhCA,KAAgC;EAAA,QAAzBoF,KAAyB,SAAzBA,KAAyB;EAAA,QAAlBkR,UAAkB,SAAlBA,UAAkB;;EACnE;EACA,QAAI,CAACA,UAAL,EACE,KAAK3B,OAAL,GAHiE;;EAKnE,QAAIvP,KAAK,IAAI,CAAC,KAAKiR,UAAL,CAAgBjR,KAAhB,CAAd,EACE;EAEF,SAAKoB,gBAAL,GAAwB,IAAxB,CARmE;;EAWnE,QAAI,CAAC,KAAKsK,cAAL,EAAL,EACE,OAAOpN,CAAC,CAACa,IAAF,EAAP,CAZiE;;EAenE,QAAI,gBAAgB,OAAOvE,KAAvB,IAAgC,SAASA,KAA7C,EACEA,KAAK,GAAG,KAAK0S,QAAL,EAAR;EAEF,QAAI,CAAC,KAAK3B,eAAL,CAAqB/Q,KAArB,CAAD,IAAgC,SAASgI,KAA7C,EACE,OAAOtE,CAAC,CAACa,IAAF,EAAP;;EAEF,QAAImS,kBAAkB,GAAG,KAAKC,sBAAL,EAAzB;;EACA,QAAIrS,QAAQ,GAAG,EAAf;EACAZ,IAAAA,CAAC,CAACO,IAAF,CAAOyS,kBAAP,EAA2B,UAACtU,CAAD,EAAI8T,WAAJ,EAAoB;EAC7C;EACA;EACA,UAAIvP,OAAO,GAAG7H,KAAK,CAACuF,GAAN,CACZX,CAAC,CAACzB,GAAF,CAAMiU,WAAN,EAAmB,UAAA1J,UAAU;EAAA,eAAI,MAAI,CAACoK,mBAAL,CAAyB5W,KAAzB,EAAgCwM,UAAhC,CAAJ;EAAA,OAA7B,CADY,CAAd;EAGAlI,MAAAA,QAAQ,CAACF,IAAT,CAAcuC,OAAd;EACA,UAAIA,OAAO,CAACgN,KAAR,OAAoB,UAAxB,EACE,OAAO,KAAP,CAR2C;EAS9C,KATD;EAUA,WAAO7U,KAAK,CAACuF,GAAN,CAAUC,QAAV,CAAP;EACD,GAxHe;EA0HhB;EACAsS,EAAAA,mBAAmB,EAAE,6BAAS5W,KAAT,EAAgBwM,UAAhB,EAA4B;EAAA;;EAC/C,QAAIxI,MAAM,GAAGwI,UAAU,CAACvD,QAAX,CAAoBjJ,KAApB,EAA2B,IAA3B,CAAb,CAD+C;;EAG/C,QAAI,UAAUgE,MAAd,EACEA,MAAM,GAAGN,CAAC,CAAC6C,QAAF,GAAaE,MAAb,EAAT,CAJ6C;;EAM/C,WAAO3H,KAAK,CAACuF,GAAN,CAAU,CAACL,MAAD,CAAV,EAAoBwQ,IAApB,CAAyB,UAAApE,YAAY,EAAI;EAC9C,UAAI,EAAE,MAAI,CAAC5J,gBAAL,YAAiC2C,KAAnC,CAAJ,EACE,MAAI,CAAC3C,gBAAL,GAAwB,EAAxB;;EACF,MAAA,MAAI,CAACA,gBAAL,CAAsBpC,IAAtB,CAA2B;EACzB4K,QAAAA,MAAM,EAAExC,UADiB;EAEzB4D,QAAAA,YAAY,EAAE,aAAa,OAAOA,YAApB,IAAoCA;EAFzB,OAA3B;EAID,KAPM,CAAP;EAQD,GAzIe;EA2IhB;EACAsC,EAAAA,QAAQ,EAAE,oBAAY;EACpB,QAAI1S,KAAJ,CADoB;;EAIpB,QAAI,eAAe,OAAO,KAAK6G,OAAL,CAAa7G,KAAvC,EACEA,KAAK,GAAG,KAAK6G,OAAL,CAAa7G,KAAb,CAAmB,IAAnB,CAAR,CADF,KAEK,IAAI,gBAAgB,OAAO,KAAK6G,OAAL,CAAa7G,KAAxC,EACHA,KAAK,GAAG,KAAK6G,OAAL,CAAa7G,KAArB,CADG,KAGHA,KAAK,GAAG,KAAKoI,QAAL,CAAcgG,GAAd,EAAR,CATkB;;EAYpB,QAAI,gBAAgB,OAAOpO,KAAvB,IAAgC,SAASA,KAA7C,EACE,OAAO,EAAP;EAEF,WAAO,KAAK6W,iBAAL,CAAuB7W,KAAvB,CAAP;EACD,GA5Je;EA8JhB;EACA4U,EAAAA,KAAK,EAAE,iBAAY;EACjB,SAAK7B,QAAL;;EACA,WAAO,KAAKa,QAAL,CAAc,OAAd,CAAP;EACD,GAlKe;EAoKhB;EACAiB,EAAAA,OAAO,EAAE,mBAAY;EACnB;EACA,SAAKnF,UAAL;;EACA,SAAKtH,QAAL,CAAc0M,UAAd,CAAyB,SAAzB;EACA,SAAK1M,QAAL,CAAc0M,UAAd,CAAyB,eAAzB;;EACA,SAAKlB,QAAL,CAAc,SAAd;EACD,GA3Ke;EA6KhB;EACAe,EAAAA,OAAO,EAAE,mBAAY;EACnB,SAAKmC,mBAAL;;EACA,WAAO,IAAP;EACD,GAjLe;EAmLhBA,EAAAA,mBAAmB,EAAE,+BAAY;EAC/B,WAAO,KAAKlQ,gBAAL,GAAwBwP,gBAAxB,EAAP;EACD,GArLe;EAuLhBW,EAAAA,kBAAkB,EAAE,8BAAW;EAC7BjY,IAAAA,KAAK,CAAC4C,QAAN,CAAe,gEAAf;EACA,WAAO,KAAKiT,OAAL,EAAP;EACD,GA1Le;;EA4LhB;;;;;;;;EAQAqC,EAAAA,aAAa,EAAE,uBAAUpX,IAAV,EAAgBgK,YAAhB,EAA8BG,QAA9B,EAAwC2L,eAAxC,EAAyD;EAEtE,QAAInU,MAAM,CAACgK,OAAP,CAAeqK,kBAAf,CAAkC3L,UAAlC,CAA6CrK,IAA7C,CAAJ,EAAwD;EACtD,UAAI4M,UAAU,GAAG,IAAIgJ,UAAJ,CAAe,IAAf,EAAqB5V,IAArB,EAA2BgK,YAA3B,EAAyCG,QAAzC,EAAmD2L,eAAnD,CAAjB,CADsD;;EAItD,UAAI,gBAAgB,KAAKS,iBAAL,CAAuB3J,UAAU,CAAC5M,IAAlC,CAApB,EACE,KAAKqX,gBAAL,CAAsBzK,UAAU,CAAC5M,IAAjC;EAEF,WAAKsW,WAAL,CAAiB9R,IAAjB,CAAsBoI,UAAtB;EACA,WAAK2J,iBAAL,CAAuB3J,UAAU,CAAC5M,IAAlC,IAA0C4M,UAA1C;EACD;;EAED,WAAO,IAAP;EACD,GAlNe;EAoNhB;EACAyK,EAAAA,gBAAgB,EAAE,0BAAUrX,IAAV,EAAgB;EAChC,SAAK,IAAIT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK+W,WAAL,CAAiBzW,MAArC,EAA6CN,CAAC,EAA9C;EACE,UAAIS,IAAI,KAAK,KAAKsW,WAAL,CAAiB/W,CAAjB,EAAoBS,IAAjC,EAAuC;EACrC,aAAKsW,WAAL,CAAiBzO,MAAjB,CAAwBtI,CAAxB,EAA2B,CAA3B;EACA;EACD;EAJH;;EAKA,WAAO,KAAKgX,iBAAL,CAAuBvW,IAAvB,CAAP;EACA,WAAO,IAAP;EACD,GA7Ne;EA+NhB;EACAsX,EAAAA,gBAAgB,EAAE,0BAAUtX,IAAV,EAAgBiN,UAAhB,EAA4B9C,QAA5B,EAAsC;EACtD,WAAO,KAAKkN,gBAAL,CAAsBrX,IAAtB,EACJoX,aADI,CACUpX,IADV,EACgBiN,UADhB,EAC4B9C,QAD5B,CAAP;EAED,GAnOe;EAqOhB;EAEA;EACA;EACAqM,EAAAA,gBAAgB,EAAE,4BAAY;EAC5B,QAAIF,WAAW,GAAG,EAAlB;EACA,QAAIC,iBAAiB,GAAG,EAAxB,CAF4B;;EAK5B,SAAK,IAAIhX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK+W,WAAL,CAAiBzW,MAArC,EAA6CN,CAAC,EAA9C;EACE,UAAI,UAAU,KAAK+W,WAAL,CAAiB/W,CAAjB,EAAoBuW,eAAlC,EAAmD;EACjDQ,QAAAA,WAAW,CAAC9R,IAAZ,CAAiB,KAAK8R,WAAL,CAAiB/W,CAAjB,CAAjB;EACAgX,QAAAA,iBAAiB,CAAC,KAAKD,WAAL,CAAiB/W,CAAjB,EAAoBS,IAArB,CAAjB,GAA8C,KAAKsW,WAAL,CAAiB/W,CAAjB,CAA9C;EACD;EAJH;;EAMA,SAAK+W,WAAL,GAAmBA,WAAnB;EACA,SAAKC,iBAAL,GAAyBA,iBAAzB,CAZ4B;;EAe5B,SAAK,IAAIvW,IAAT,IAAiB,KAAKiH,OAAtB;EACE,WAAKmQ,aAAL,CAAmBpX,IAAnB,EAAyB,KAAKiH,OAAL,CAAajH,IAAb,CAAzB,EAA6CuX,SAA7C,EAAwD,IAAxD;EADF,KAf4B;;;EAmB5B,WAAO,KAAKC,qBAAL,EAAP;EACD,GA7Pe;EA+PhB;EACA;EACAA,EAAAA,qBAAqB,EAAE,iCAAY;EACjC;EACA,QAAI,SAAS,KAAKpY,OAAL,CAAawB,YAAb,CAA0B,UAA1B,CAAb,EACE,KAAKwW,aAAL,CAAmB,UAAnB,EAA+B,IAA/B,EAAqCG,SAArC,EAAgD,IAAhD,EAH+B;;EAMjC,QAAI,SAAS,KAAKnY,OAAL,CAAawB,YAAb,CAA0B,SAA1B,CAAb,EACE,KAAKwW,aAAL,CAAmB,SAAnB,EAA8B,KAAKhY,OAAL,CAAawB,YAAb,CAA0B,SAA1B,CAA9B,EAAoE2W,SAApE,EAA+E,IAA/E,EAP+B;;EAUjC,QAAItJ,GAAG,GAAG,KAAK7O,OAAL,CAAawB,YAAb,CAA0B,KAA1B,CAAV;EACA,QAAIsK,GAAG,GAAG,KAAK9L,OAAL,CAAawB,YAAb,CAA0B,KAA1B,CAAV;EACA,QAAI,SAASqN,GAAT,IAAgB,SAAS/C,GAA7B,EACE,KAAKkM,aAAL,CAAmB,OAAnB,EAA4B,CAACnJ,GAAD,EAAM/C,GAAN,CAA5B,EAAwCqM,SAAxC,EAAmD,IAAnD,EADF;EAAA,SAIK,IAAI,SAAStJ,GAAb,EACH,KAAKmJ,aAAL,CAAmB,KAAnB,EAA0BnJ,GAA1B,EAA+BsJ,SAA/B,EAA0C,IAA1C,EADG;EAAA,WAIA,IAAI,SAASrM,GAAb,EACH,KAAKkM,aAAL,CAAmB,KAAnB,EAA0BlM,GAA1B,EAA+BqM,SAA/B,EAA0C,IAA1C,EArB+B;;EAyBjC,QAAI,SAAS,KAAKnY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAT,IAAmD,SAAS,KAAKxB,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAhE,EACE,KAAKwW,aAAL,CAAmB,QAAnB,EAA6B,CAAC,KAAKhY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAD,EAAyC,KAAKxB,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAzC,CAA7B,EAA+G2W,SAA/G,EAA0H,IAA1H,EADF;EAAA,SAIK,IAAI,SAAS,KAAKnY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAb,EACH,KAAKwW,aAAL,CAAmB,WAAnB,EAAgC,KAAKhY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAhC,EAAwE2W,SAAxE,EAAmF,IAAnF,EADG;EAAA,WAIA,IAAI,SAAS,KAAKnY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAb,EACH,KAAKwW,aAAL,CAAmB,WAAnB,EAAgC,KAAKhY,OAAL,CAAawB,YAAb,CAA0B,WAA1B,CAAhC,EAAwE2W,SAAxE,EAAmF,IAAnF,EAlC+B;;EAsCjC,QAAItN,IAAI,GAAG/K,KAAK,CAACyB,OAAN,CAAc,KAAKvB,OAAnB,CAAX,CAtCiC;;EAyCjC,QAAI,aAAa6K,IAAjB,EAAuB;EACrB,aAAO,KAAKmN,aAAL,CAAmB,MAAnB,EAA2B,CAAC,QAAD,EAAW;EAC3ChK,QAAAA,IAAI,EAAE,KAAKhO,OAAL,CAAawB,YAAb,CAA0B,MAA1B,KAAqC,GADA;EAE3CyM,QAAAA,IAAI,EAAEY,GAAG,IAAI,KAAK7O,OAAL,CAAawB,YAAb,CAA0B,OAA1B;EAF8B,OAAX,CAA3B,EAGH2W,SAHG,EAGQ,IAHR,CAAP,CADqB;EAMtB,KAND,MAMO,IAAI,4BAA4BxX,IAA5B,CAAiCkK,IAAjC,CAAJ,EAA4C;EACjD,aAAO,KAAKmN,aAAL,CAAmB,MAAnB,EAA2BnN,IAA3B,EAAiCsN,SAAjC,EAA4C,IAA5C,CAAP;EACD;;EACD,WAAO,IAAP;EACD,GApTe;EAsThB;EACA;EACAZ,EAAAA,WAAW,EAAE,uBAAY;EACvB,QAAI,gBAAgB,OAAO,KAAKJ,iBAAL,CAAuBpJ,QAAlD,EACE,OAAO,KAAP;EAEF,WAAO,UAAU,KAAKoJ,iBAAL,CAAuBpJ,QAAvB,CAAgCnD,YAAjD;EACD,GA7Te;EA+ThB;EACA;EACAgK,EAAAA,QAAQ,EAAE,kBAAU2B,SAAV,EAAqB;EAC7B,WAAO,KAAK/P,OAAL,CAAa,WAAW+P,SAAxB,CAAP;EACD,GAnUe;EAqUhB;EACA;EACA;EACA;EACAsB,EAAAA,iBAAiB,EAAE,2BAAU7W,KAAV,EAAiB;EAClC,QAAI,SAAS,KAAK6G,OAAL,CAAawQ,SAA1B,EACEvY,KAAK,CAAC4C,QAAN,CAAe,yFAAf;EAEF,QAAI,aAAa,KAAKmF,OAAL,CAAayQ,UAA9B,EACEtX,KAAK,GAAGA,KAAK,CAACiB,OAAN,CAAc,SAAd,EAAyB,GAAzB,CAAR;EAEF,QAAK,WAAW,KAAK4F,OAAL,CAAayQ,UAAzB,IAAyC,aAAa,KAAKzQ,OAAL,CAAayQ,UAAnE,IAAmF,SAAS,KAAKzQ,OAAL,CAAawQ,SAA7G,EACErX,KAAK,GAAGlB,KAAK,CAAC+C,UAAN,CAAiB7B,KAAjB,CAAR;EAEF,WAAOA,KAAP;EACD,GApVe;EAsVhBwJ,EAAAA,YAAY,EAAE,wBAAW;EACvB,QAAI+N,CAAC,GAAG,KAAKpB,iBAAL,CAAuBtM,IAA/B;EACA,WAAO0N,CAAC,IAAIA,CAAC,CAAC3N,YAAF,KAAmB,MAA/B;EACD,GAzVe;EA2VhB;EACA;EACA;EACA+M,EAAAA,sBAAsB,EAAE,kCAAY;EAClC,QAAI,UAAU,KAAK9P,OAAL,CAAa3B,eAA3B,EACE,OAAO,CAAC,KAAKgR,WAAN,CAAP;EAEF,QAAIQ,kBAAkB,GAAG,EAAzB;EACA,QAAIc,KAAK,GAAG,EAAZ,CALkC;;EAQlC,SAAK,IAAIrY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK+W,WAAL,CAAiBzW,MAArC,EAA6CN,CAAC,EAA9C,EAAkD;EAChD,UAAIsY,CAAC,GAAG,KAAKvB,WAAL,CAAiB/W,CAAjB,EAAoB4K,QAA5B;EACA,UAAI,CAACyN,KAAK,CAACC,CAAD,CAAV,EACEf,kBAAkB,CAACtS,IAAnB,CAAwBoT,KAAK,CAACC,CAAD,CAAL,GAAW,EAAnC;EACFD,MAAAA,KAAK,CAACC,CAAD,CAAL,CAASrT,IAAT,CAAc,KAAK8R,WAAL,CAAiB/W,CAAjB,CAAd;EACD,KAbiC;;;EAelCuX,IAAAA,kBAAkB,CAACgB,IAAnB,CAAwB,UAAUC,CAAV,EAAaC,CAAb,EAAgB;EAAE,aAAOA,CAAC,CAAC,CAAD,CAAD,CAAK7N,QAAL,GAAgB4N,CAAC,CAAC,CAAD,CAAD,CAAK5N,QAA5B;EAAuC,KAAjF;EAEA,WAAO2M,kBAAP;EACD;EAhXe,CAAlB;;EC3BA,IAAImB,QAAQ,GAAG,SAAXA,QAAW,GAAY;EACzB,OAAK1N,SAAL,GAAiB,eAAjB;EACD,CAFD;;EAIA0N,QAAQ,CAAClT,SAAT,GAAqB;EACnB;EACAmT,EAAAA,UAAU,EAAE,oBAAU1P,QAAV,EAAoB;EAC9B,SAAK2P,SAAL,CAAe3T,IAAf,CAAoBgE,QAApB;EAEA,WAAO,IAAP;EACD,GANkB;EAQnB;EACA0O,EAAAA,mBAAmB,EAAE,+BAAY;EAC/B,QAAIkB,gBAAJ;EAEA,SAAK9B,WAAL,GAAmB,EAAnB,CAH+B;;EAM/B,QAAI,KAAKlX,OAAL,CAAaoT,QAAb,KAA0B,QAA9B,EAAwC;EACtC,WAAKxL,gBAAL,GAAwBwP,gBAAxB;;EAEA,aAAO,IAAP;EACD,KAV8B;;;EAa/B,SAAK,IAAIjX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4Y,SAAL,CAAetY,MAAnC,EAA2CN,CAAC,EAA5C,EAAgD;EAE9C;EACA,UAAI,CAACuE,CAAC,CAAC,MAAD,CAAD,CAAUuU,GAAV,CAAc,KAAKF,SAAL,CAAe5Y,CAAf,CAAd,EAAiCM,MAAtC,EAA8C;EAC5C,aAAKsY,SAAL,CAAetQ,MAAf,CAAsBtI,CAAtB,EAAyB,CAAzB;EACA;EACD;;EAED6Y,MAAAA,gBAAgB,GAAG,KAAKD,SAAL,CAAe5Y,CAAf,EAAkB+Y,IAAlB,CAAuB,eAAvB,EAAwCpB,mBAAxC,GAA8DZ,WAAjF;;EAEA,WAAK,IAAInH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,gBAAgB,CAACvY,MAArC,EAA6CsP,CAAC,EAA9C;EACE,aAAKiI,aAAL,CAAmBgB,gBAAgB,CAACjJ,CAAD,CAAhB,CAAoBnP,IAAvC,EAA6CoY,gBAAgB,CAACjJ,CAAD,CAAhB,CAAoBnF,YAAjE,EAA+EoO,gBAAgB,CAACjJ,CAAD,CAAhB,CAAoBhF,QAAnG,EAA6GiO,gBAAgB,CAACjJ,CAAD,CAAhB,CAAoB2G,eAAjI;EADF;EAED;;EAED,WAAO,IAAP;EACD,GArCkB;EAuCnB;EACAhD,EAAAA,QAAQ,EAAE,oBAAY;EACpB;EACA,QAAI,eAAe,OAAO,KAAK7L,OAAL,CAAa7G,KAAvC,EACE,OAAO,KAAK6G,OAAL,CAAa7G,KAAb,CAAmB,IAAnB,CAAP,CADF,KAEK,IAAI,gBAAgB,OAAO,KAAK6G,OAAL,CAAa7G,KAAxC,EACH,OAAO,KAAK6G,OAAL,CAAa7G,KAApB,CALkB;;EAQpB,QAAI,KAAKhB,OAAL,CAAaoT,QAAb,KAA0B,OAA9B,EAAuC;EACrC,UAAIvI,IAAI,GAAG/K,KAAK,CAACyB,OAAN,CAAc,KAAKvB,OAAnB,CAAX;EACA,UAAI6K,IAAI,KAAK,OAAb,EACE,OAAO,KAAK3B,YAAL,GAAoBiQ,MAApB,CAA2B,UAA3B,EAAuC/J,GAAvC,MAAgD,EAAvD,CAHmC;;EAMrC,UAAIvE,IAAI,KAAK,UAAb,EAAyB;EACvB,YAAItB,MAAM,GAAG,EAAb;;EAEA,aAAKL,YAAL,GAAoBiQ,MAApB,CAA2B,UAA3B,EAAuClU,IAAvC,CAA4C,YAAY;EACtDsE,UAAAA,MAAM,CAACnE,IAAP,CAAYV,CAAC,CAAC,IAAD,CAAD,CAAQ0K,GAAR,EAAZ;EACD,SAFD;;EAIA,eAAO7F,MAAP;EACD;EACF,KAvBmB;;;EA0BpB,QAAI,KAAKvJ,OAAL,CAAaoT,QAAb,KAA0B,QAA1B,IAAsC,SAAS,KAAKhK,QAAL,CAAcgG,GAAd,EAAnD,EACE,OAAO,EAAP,CA3BkB;;EA8BpB,WAAO,KAAKhG,QAAL,CAAcgG,GAAd,EAAP;EACD,GAvEkB;EAyEnBgK,EAAAA,KAAK,EAAE,iBAAY;EACjB,SAAKL,SAAL,GAAiB,CAAC,KAAK3P,QAAN,CAAjB;EAEA,WAAO,IAAP;EACD;EA7EkB,CAArB;;ECAA,IAAIgN,OAAO,GAAG,SAAVA,OAAU,CAAUpW,OAAV,EAAmB6H,OAAnB,EAA4BoP,mBAA5B,EAAiD;EAC7D,OAAKjX,OAAL,GAAeA,OAAf;EACA,OAAKoJ,QAAL,GAAgB1E,CAAC,CAAC1E,OAAD,CAAjB,CAF6D;;EAK7D,MAAIqZ,wBAAwB,GAAG,KAAKjQ,QAAL,CAAc8P,IAAd,CAAmB,SAAnB,CAA/B;;EACA,MAAIG,wBAAJ,EAA8B;EAE5B;EACA,QAAI,gBAAgB,OAAOpC,mBAAvB,IAA8CoC,wBAAwB,CAACtR,MAAzB,KAAoCxF,MAAM,CAACgK,OAA7F,EAAsG;EACpG8M,MAAAA,wBAAwB,CAACtR,MAAzB,GAAkCkP,mBAAlC;;EACAoC,MAAAA,wBAAwB,CAACrR,aAAzB,CAAuCqR,wBAAwB,CAACxR,OAAhE;EACD;;EAED,QAAI,qBAAoBA,OAApB,CAAJ,EAAiC;EAC/B,eAAcwR,wBAAwB,CAACxR,OAAvC,EAAgDA,OAAhD;EACD;;EAED,WAAOwR,wBAAP;EACD,GAnB4D;;;EAsB7D,MAAI,CAAC,KAAKjQ,QAAL,CAAc3I,MAAnB,EACE,MAAM,IAAImF,KAAJ,CAAU,+CAAV,CAAN;EAEF,MAAI,gBAAgB,OAAOqR,mBAAvB,IAA8C,WAAWA,mBAAmB,CAAC9L,SAAjF,EACE,MAAM,IAAIvF,KAAJ,CAAU,yCAAV,CAAN;EAEF,OAAKmC,MAAL,GAAckP,mBAAmB,IAAI1U,MAAM,CAACgK,OAA5C;EACA,SAAO,KAAKlB,IAAL,CAAUxD,OAAV,CAAP;EACD,CA9BD;;EAgCAuO,OAAO,CAACzQ,SAAR,GAAoB;EAClB0F,EAAAA,IAAI,EAAE,cAAUxD,OAAV,EAAmB;EACvB,SAAKsD,SAAL,GAAiB,SAAjB;EACA,SAAKmO,WAAL,GAAmB,OAAnB;EACA,SAAKpS,MAAL,GAAcpH,KAAK,CAAC2B,UAAN,EAAd,CAHuB;;EAMvB,SAAKuG,aAAL,CAAmBH,OAAnB,EANuB;;;EASvB,QAAI,KAAK7H,OAAL,CAAaoT,QAAb,KAA0B,MAA1B,IAAqCtT,KAAK,CAACmB,SAAN,CAAgB,KAAKjB,OAArB,EAA8B,KAAK6H,OAAL,CAAa5H,SAA3C,EAAsD,UAAtD,KAAqE,CAAC,KAAKmJ,QAAL,CAAcmQ,EAAd,CAAiB,KAAK1R,OAAL,CAAa7B,MAA9B,CAA/G,EACE,OAAO,KAAKwT,IAAL,CAAU,aAAV,CAAP,CAVqB;;EAavB,WAAO,KAAKC,UAAL,KAAoB,KAAKC,cAAL,EAApB,GAA4C,KAAKF,IAAL,CAAU,cAAV,CAAnD;EACD,GAfiB;EAiBlBC,EAAAA,UAAU,EAAE,sBAAY;EACtB,QAAI5O,IAAI,GAAG/K,KAAK,CAACyB,OAAN,CAAc,KAAKvB,OAAnB,CAAX;EACA,WAAS6K,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,UAA9B,IACL,KAAK7K,OAAL,CAAaoT,QAAb,KAA0B,QAA1B,IAAsC,SAAS,KAAKpT,OAAL,CAAawB,YAAb,CAA0B,UAA1B,CADlD;EAED,GArBiB;EAuBlB;EACA;EACAkY,EAAAA,cAAc,EAAE,0BAAY;EAAA;;EAC1B,QAAI9Y,IAAJ;AACA,EACA,QAAI+Y,uBAAJ,CAH0B;;EAM1B,SAAK9R,OAAL,CAAa1B,QAAb,GAAwB,KAAK0B,OAAL,CAAa1B,QAAb,KACrBvF,IAAI,GAAG,KAAKZ,OAAL,CAAawB,YAAb,CAA0B,MAA1B,CADc,KAEtB,KAAKxB,OAAL,CAAawB,YAAb,CAA0B,IAA1B,CAFF,CAN0B;;EAW1B,QAAI,KAAKxB,OAAL,CAAaoT,QAAb,KAA0B,QAA1B,IAAsC,SAAS,KAAKpT,OAAL,CAAawB,YAAb,CAA0B,UAA1B,CAAnD,EAA0F;EACxF,WAAKqG,OAAL,CAAa1B,QAAb,GAAwB,KAAK0B,OAAL,CAAa1B,QAAb,IAAyB,KAAKe,MAAtD;EACA,aAAO,KAAKsS,IAAL,CAAU,sBAAV,CAAP,CAFwF;EAKzF,KALD,MAKO,IAAI,CAAC,KAAK3R,OAAL,CAAa1B,QAAlB,EAA4B;EACjCrG,MAAAA,KAAK,CAACwC,IAAN,CAAW,uHAAX,EAAoI,KAAK8G,QAAzI;EACA,aAAO,IAAP;EACD,KAnByB;;;EAsB1B,SAAKvB,OAAL,CAAa1B,QAAb,GAAwB,KAAK0B,OAAL,CAAa1B,QAAb,CAAsBlE,OAAtB,CAA8B,wBAA9B,EAAwD,EAAxD,CAAxB,CAtB0B;;EAyB1B,QAAIrB,IAAJ,EAAU;EACR8D,MAAAA,CAAC,CAAC,iBAAiB9D,IAAjB,GAAwB,IAAzB,CAAD,CAAgCqE,IAAhC,CAAqC,UAAC9E,CAAD,EAAIyZ,KAAJ,EAAc;EACjD,YAAI/O,IAAI,GAAG/K,KAAK,CAACyB,OAAN,CAAcqY,KAAd,CAAX;EACA,YAAK/O,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,UAAlC,EACE+O,KAAK,CAACxY,YAAN,CAAmB,KAAI,CAACyG,OAAL,CAAa5H,SAAb,GAAyB,UAA5C,EAAwD,KAAI,CAAC4H,OAAL,CAAa1B,QAArE;EACH,OAJD;EAKD,KA/ByB;;;EAkC1B,QAAI0T,kBAAkB,GAAG,KAAK3Q,YAAL,EAAzB;;EACA,SAAK,IAAI/I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0Z,kBAAkB,CAACpZ,MAAvC,EAA+CN,CAAC,EAAhD,EAAoD;EAClDwZ,MAAAA,uBAAuB,GAAGjV,CAAC,CAACmV,kBAAkB,CAACC,GAAnB,CAAuB3Z,CAAvB,CAAD,CAAD,CAA6B+Y,IAA7B,CAAkC,SAAlC,CAA1B;;EACA,UAAI,gBAAgB,OAAOS,uBAA3B,EAAoD;EAElD,YAAI,CAAC,KAAKvQ,QAAL,CAAc8P,IAAd,CAAmB,eAAnB,CAAL,EAA0C;EACxCS,UAAAA,uBAAuB,CAACb,UAAxB,CAAmC,KAAK1P,QAAxC;EACD;;EAED;EACD;EACF,KA7CyB;EAgD1B;;;EACA,SAAKoQ,IAAL,CAAU,cAAV,EAA0B,IAA1B;EAEA,WAAOG,uBAAuB,IAAI,KAAKH,IAAL,CAAU,sBAAV,CAAlC;EACD,GA7EiB;EA+ElB;EACAA,EAAAA,IAAI,EAAE,cAAU3O,IAAV,EAAgBkP,UAAhB,EAA4B;EAChC,QAAIC,eAAJ;;EAEA,YAAQnP,IAAR;EACE,WAAK,aAAL;EACEmP,QAAAA,eAAe,GAAGtV,CAAC,CAACsF,MAAF,CAChB,IAAIkG,IAAJ,CAAS,KAAKlQ,OAAd,EAAuB,KAAK8H,UAA5B,EAAwC,KAAKD,OAA7C,CADgB,EAEhB,IAAIZ,IAAJ,EAFgB,EAGhB1E,MAAM,CAAC0X,aAHS,EAIhBlE,WAJgB,EAAlB;EAKA;;EACF,WAAK,cAAL;EACEiE,QAAAA,eAAe,GAAGtV,CAAC,CAACsF,MAAF,CAChB,IAAInD,KAAJ,CAAU,KAAK7G,OAAf,EAAwB,KAAK8H,UAA7B,EAAyC,KAAKD,OAA9C,EAAuD,KAAKE,MAA5D,CADgB,EAEhB,IAAId,IAAJ,EAFgB,EAGhB1E,MAAM,CAAC0X,aAHS,CAAlB;EAKA;;EACF,WAAK,sBAAL;EACED,QAAAA,eAAe,GAAGtV,CAAC,CAACsF,MAAF,CAChB,IAAInD,KAAJ,CAAU,KAAK7G,OAAf,EAAwB,KAAK8H,UAA7B,EAAyC,KAAKD,OAA9C,EAAuD,KAAKE,MAA5D,CADgB,EAEhB,IAAI8Q,QAAJ,EAFgB,EAGhB,IAAI5R,IAAJ,EAHgB,EAIhB1E,MAAM,CAAC0X,aAJS,EAKhBb,KALgB,EAAlB;EAMA;;EACF;EACE,cAAM,IAAIxT,KAAJ,CAAUiF,IAAI,GAAG,iCAAjB,CAAN;EAxBJ;;EA2BA,QAAI,KAAKhD,OAAL,CAAa1B,QAAjB,EACErG,KAAK,CAACqB,OAAN,CAAc,KAAKnB,OAAnB,EAA4B,KAAK6H,OAAL,CAAa5H,SAAzC,EAAoD,UAApD,EAAgE,KAAK4H,OAAL,CAAa1B,QAA7E;;EAEF,QAAI,gBAAgB,OAAO4T,UAA3B,EAAuC;EACrC,WAAK3Q,QAAL,CAAc8P,IAAd,CAAmB,eAAnB,EAAoCc,eAApC;EAEA,aAAOA,eAAP;EACD,KArC+B;;;EAwChC,SAAK5Q,QAAL,CAAc8P,IAAd,CAAmB,SAAnB,EAA8Bc,eAA9B,EAxCgC;;EA2ChCA,IAAAA,eAAe,CAAC7J,kBAAhB;;EACA6J,IAAAA,eAAe,CAACpF,QAAhB,CAAyB,MAAzB;;EAEA,WAAOoF,eAAP;EACD;EA/HiB,CAApB;;EC5BA,IAAIE,OAAO,GAAGxV,CAAC,CAAC0D,EAAF,CAAK+R,MAAL,CAAY1V,KAAZ,CAAkB,GAAlB,CAAd;;EACA,IAAItB,QAAQ,CAAC+W,OAAO,CAAC,CAAD,CAAR,CAAR,IAAwB,CAAxB,IAA6B/W,QAAQ,CAAC+W,OAAO,CAAC,CAAD,CAAR,CAAR,GAAuB,CAAxD,EAA2D;EACzD,QAAM,6EAAN;EACD;;EACD,IAAI,CAACA,OAAO,CAACE,OAAb,EAAsB;EACpBta,EAAAA,KAAK,CAACwC,IAAN,CAAW,2FAAX;EACD;;;EAED,IAAIiK,OAAO,GAAG,SAAc,IAAItF,IAAJ,EAAd,EAA0B;EACpCjH,EAAAA,OAAO,EAAEqa,QAD2B;EAEpCjR,EAAAA,QAAQ,EAAE1E,CAAC,CAAC2V,QAAD,CAFyB;EAGpCzS,EAAAA,gBAAgB,EAAE,IAHkB;EAIpCI,EAAAA,aAAa,EAAE,IAJqB;EAKpCoO,EAAAA,OAAO,EAAEA,OAL2B;EAMpCkE,EAAAA,OAAO,EAAE;EAN2B,CAA1B,CAAd;EAUA;;;EACA,SAAczT,KAAK,CAAClB,SAApB,EAA+B4J,EAAE,CAAC1I,KAAlC,EAAyCI,IAAI,CAACtB,SAA9C;;EACA,SAAcuK,IAAI,CAACvK,SAAnB,EAA8B4J,EAAE,CAACW,IAAjC,EAAuCjJ,IAAI,CAACtB,SAA5C;;;EAEA,SAAcyQ,OAAO,CAACzQ,SAAtB,EAAiCsB,IAAI,CAACtB,SAAtC;EAGA;;;EACAjB,CAAC,CAAC0D,EAAF,CAAKiM,OAAL,GAAe3P,CAAC,CAAC0D,EAAF,CAAKmS,IAAL,GAAY,UAAU1S,OAAV,EAAmB;EAC5C,MAAI,KAAKpH,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAI+Z,SAAS,GAAG,EAAhB;EAEA,SAAKvV,IAAL,CAAU,YAAY;EACpBuV,MAAAA,SAAS,CAACpV,IAAV,CAAeV,CAAC,CAAC,IAAD,CAAD,CAAQ2P,OAAR,CAAgBxM,OAAhB,CAAf;EACD,KAFD;EAIA,WAAO2S,SAAP;EACD,GAT2C;;;EAY5C,MAAI,KAAK/Z,MAAL,IAAe,CAAnB,EAAsB;EACpB;EACD;;EAED,SAAO,IAAI2V,OAAJ,CAAY,KAAK,CAAL,CAAZ,EAAqBvO,OAArB,CAAP;EACD,CAjBD;EAoBA;;;EACA,IAAI,gBAAgB,OAAOtF,MAAM,CAAC0X,aAAlC,EACE1X,MAAM,CAAC0X,aAAP,GAAuB,EAAvB;EAGF;;EACA1N,OAAO,CAAC1E,OAAR,GAAkB,SAAc/H,KAAK,CAAC0F,YAAN,CAAmBO,QAAnB,CAAd,EAA4CxD,MAAM,CAACkY,aAAnD,CAAlB;EACAlY,MAAM,CAACkY,aAAP,GAAuBlO,OAAO,CAAC1E,OAA/B;EAEA;;EACAtF,MAAM,CAACgK,OAAP,GAAiBhK,MAAM,CAACgY,IAAP,GAAchO,OAA/B;EACAA,OAAO,CAACzM,KAAR,GAAgBA,KAAhB;EACAyC,MAAM,CAACmY,YAAP,GAAsB,EAAtB;EACAhW,CAAC,CAACO,IAAF,CAAOnF,KAAP,EAAc,UAAC+J,GAAD,EAAM7I,KAAN,EAAgB;EAC5B,MAAI,eAAe,OAAOA,KAA1B,EAAiC;EAC/BuB,IAAAA,MAAM,CAACmY,YAAP,CAAoB7Q,GAApB,IAA2B,YAAa;EACtC/J,MAAAA,KAAK,CAAC4C,QAAN,CAAe,oFAAf;EACA,aAAO5C,KAAK,CAAC+J,GAAD,CAAL,OAAA/J,KAAK,YAAZ;EACD,KAHD;EAID;EACF,CAPD;;EAUA,IAAI6a,QAAQ,GAAGpY,MAAM,CAACgK,OAAP,CAAeqK,kBAAf,GAAoC,IAAI5L,iBAAJ,CAAsBzI,MAAM,CAACkY,aAAP,CAAqBxP,UAA3C,EAAuD1I,MAAM,CAACkY,aAAP,CAAqBG,IAA5E,CAAnD;EACArY,MAAM,CAACsY,gBAAP,GAA0B,EAA1B;EACAnW,CAAC,CAACO,IAAF,CAAO,sIAAsIR,KAAtI,CAA4I,GAA5I,CAAP,EAAyJ,UAAUtE,CAAV,EAAa2a,MAAb,EAAqB;EAC5KvY,EAAAA,MAAM,CAACgK,OAAP,CAAeuO,MAAf,IAAyB;EAAA,WAAaH,QAAQ,CAACG,MAAD,CAAR,OAAAH,QAAQ,YAArB;EAAA,GAAzB;;EACApY,EAAAA,MAAM,CAACsY,gBAAP,CAAwBC,MAAxB,IAAkC,YAAY;EAAA;;EAC5Chb,IAAAA,KAAK,CAAC4C,QAAN,iCAAwCoY,MAAxC,4EAAgHA,MAAhH;EACA,WAAO,mBAAAvY,MAAM,CAACgK,OAAP,EAAeuO,MAAf,yBAA0BrY,SAA1B,CAAP;EACD,GAHD;EAID,CAND;EASA;;EACAF,MAAM,CAACgK,OAAP,CAAegD,EAAf,GAAoBA,EAApB;EACAhN,MAAM,CAACwY,SAAP,GAAmB;EACjBnJ,EAAAA,WAAW,EAAE,qBAAUtH,QAAV,EAAoB1J,IAApB,EAA0Boa,gBAA1B,EAA4C;EACvD,QAAIzJ,WAAW,GAAG,SAASyJ,gBAA3B;EACAlb,IAAAA,KAAK,CAAC4C,QAAN;EACA,WAAO4H,QAAQ,CAACsH,WAAT,CAAqBhR,IAArB,EAA2B;EAAC2Q,MAAAA,WAAW,EAAXA;EAAD,KAA3B,CAAP;EACD,GALgB;EAMjBJ,EAAAA,iBAAiB,EAAE,2BAAU7G,QAAV,EAAoB;EACrCxK,IAAAA,KAAK,CAAC4C,QAAN;EACA,WAAO4H,QAAQ,CAAC6G,iBAAT,EAAP;EACD;EATgB,CAAnB;EAWAzM,CAAC,CAACO,IAAF,CAAO,uBAAuBR,KAAvB,CAA6B,GAA7B,CAAP,EAA0C,UAAUtE,CAAV,EAAa2a,MAAb,EAAqB;EAC7DvY,EAAAA,MAAM,CAACwY,SAAP,CAAiBD,MAAjB,IAA2B,UAAUxQ,QAAV,EAAoB1J,IAApB,EAA0BiM,OAA1B,EAAmCmD,MAAnC,EAA2CgL,gBAA3C,EAA6D;EACtF,QAAIzJ,WAAW,GAAG,SAASyJ,gBAA3B;EACAlb,IAAAA,KAAK,CAAC4C,QAAN,6CAAoDoY,MAApD;EACA,WAAOxQ,QAAQ,CAACwQ,MAAD,CAAR,CAAiBla,IAAjB,EAAuB;EAACiM,MAAAA,OAAO,EAAPA,OAAD;EAAUmD,MAAAA,MAAM,EAANA,MAAV;EAAkBuB,MAAAA,WAAW,EAAXA;EAAlB,KAAvB,CAAP;EACD,GAJD;EAKD,CAND;EASA;;EACA,IAAI,UAAUhP,MAAM,CAACkY,aAAP,CAAqBQ,QAAnC,EAA6C;EAC3CvW,EAAAA,CAAC,CAAC,YAAY;EACZ;EACA,QAAIA,CAAC,CAAC,yBAAD,CAAD,CAA6BjE,MAAjC,EACEiE,CAAC,CAAC,yBAAD,CAAD,CAA6B2P,OAA7B;EACH,GAJA,CAAD;EAKD;;ECnHD,IAAI6G,CAAC,GAAGxW,CAAC,CAAC,EAAD,CAAT;;EACA,IAAIyW,UAAU,GAAG,SAAbA,UAAa,GAAY;EAC3Brb,EAAAA,KAAK,CAAC4C,QAAN,CAAe,8GAAf;EACD,CAFD;;;EAKA,SAAS0Y,KAAT,CAAehT,EAAf,EAAmBiT,OAAnB,EAA4B;EAC1B;EACA,MAAI,CAACjT,EAAE,CAACkT,sBAAR,EAAgC;EAC9BlT,IAAAA,EAAE,CAACkT,sBAAH,GAA4B,YAAY;EACtC,UAAItP,IAAI,GAAG7B,KAAK,CAACxE,SAAN,CAAgB7E,KAAhB,CAAsBgI,IAAtB,CAA2BrG,SAA3B,EAAsC,CAAtC,CAAX;EACAuJ,MAAAA,IAAI,CAACuP,OAAL,CAAa,IAAb;EACAnT,MAAAA,EAAE,CAACoT,KAAH,CAASH,OAAO,IAAIH,CAApB,EAAuBlP,IAAvB;EACD,KAJD;EAKD;;EACD,SAAO5D,EAAE,CAACkT,sBAAV;EACD;;EAED,IAAIG,WAAW,GAAG,UAAlB;;EAEA,SAASlF,SAAT,CAAmB3V,IAAnB,EAAyB;EACvB,MAAIA,IAAI,CAAC8a,WAAL,CAAiBD,WAAjB,EAA8B,CAA9B,MAAqC,CAAzC,EACE,OAAO7a,IAAI,CAAC+a,MAAL,CAAYF,WAAW,CAAChb,MAAxB,CAAP;EACF,SAAOG,IAAP;EACD;;;EAGD8D,CAAC,CAACkX,MAAF,GAAW,UAAUhb,IAAV,EAAgBib,QAAhB,EAA0B;EACnC,MAAIR,OAAJ;EACAF,EAAAA,UAAU;;EACV,MAAI,qBAAoB1Y,SAAS,CAAC,CAAD,CAA7B,KAAoC,eAAe,OAAOA,SAAS,CAAC,CAAD,CAAvE,EAA4E;EAC1E4Y,IAAAA,OAAO,GAAG5Y,SAAS,CAAC,CAAD,CAAnB;EACAoZ,IAAAA,QAAQ,GAAGpZ,SAAS,CAAC,CAAD,CAApB;EACD;;EAED,MAAI,eAAe,OAAOoZ,QAA1B,EACE,MAAM,IAAIjW,KAAJ,CAAU,kBAAV,CAAN;EAEFrD,EAAAA,MAAM,CAACgK,OAAP,CAAepE,EAAf,CAAkBoO,SAAS,CAAC3V,IAAD,CAA3B,EAAmCwa,KAAK,CAACS,QAAD,EAAWR,OAAX,CAAxC;EACD,CAZD;;EAcA3W,CAAC,CAAC6D,QAAF,GAAa,UAAU+B,QAAV,EAAoB1J,IAApB,EAA0BwH,EAA1B,EAA8B;EACzC+S,EAAAA,UAAU;EACV,MAAI,EAAE7Q,QAAQ,YAAYzD,KAAtB,KAAgC,EAAEyD,QAAQ,YAAY4F,IAAtB,CAApC,EACE,MAAM,IAAItK,KAAJ,CAAU,4BAAV,CAAN;EAEF,MAAI,aAAa,OAAOhF,IAApB,IAA4B,eAAe,OAAOwH,EAAtD,EACE,MAAM,IAAIxC,KAAJ,CAAU,kBAAV,CAAN;EAEF0E,EAAAA,QAAQ,CAACnC,EAAT,CAAYoO,SAAS,CAAC3V,IAAD,CAArB,EAA6Bwa,KAAK,CAAChT,EAAD,CAAlC;EACD,CATD;;EAWA1D,CAAC,CAACgE,WAAF,GAAgB,UAAU9H,IAAV,EAAgBwH,EAAhB,EAAoB;EAClC+S,EAAAA,UAAU;EACV,MAAI,aAAa,OAAOva,IAApB,IAA4B,eAAe,OAAOwH,EAAtD,EACE,MAAM,IAAIxC,KAAJ,CAAU,iBAAV,CAAN;EACFrD,EAAAA,MAAM,CAACgK,OAAP,CAAe/D,GAAf,CAAmB+N,SAAS,CAAC3V,IAAD,CAA5B,EAAoCwH,EAAE,CAACkT,sBAAvC;EACD,CALD;;EAOA5W,CAAC,CAACiE,aAAF,GAAkB,UAAU2B,QAAV,EAAoB1J,IAApB,EAA0B;EAC1Cua,EAAAA,UAAU;EACV,MAAI,EAAE7Q,QAAQ,YAAYzD,KAAtB,KAAgC,EAAEyD,QAAQ,YAAY4F,IAAtB,CAApC,EACE,MAAM,IAAItK,KAAJ,CAAU,4BAAV,CAAN;EACF0E,EAAAA,QAAQ,CAAC9B,GAAT,CAAa+N,SAAS,CAAC3V,IAAD,CAAtB;EACD,CALD;;EAOA8D,CAAC,CAACoX,cAAF,GAAmB,UAAUlb,IAAV,EAAgB;EACjCua,EAAAA,UAAU;EACV5Y,EAAAA,MAAM,CAACgK,OAAP,CAAe/D,GAAf,CAAmB+N,SAAS,CAAC3V,IAAD,CAA5B;EACA8D,EAAAA,CAAC,CAAC,4BAAD,CAAD,CAAgCO,IAAhC,CAAqC,YAAY;EAC/C,QAAIqF,QAAQ,GAAG5F,CAAC,CAAC,IAAD,CAAD,CAAQwU,IAAR,CAAa,SAAb,CAAf;;EACA,QAAI5O,QAAJ,EAAc;EACZA,MAAAA,QAAQ,CAAC9B,GAAT,CAAa+N,SAAS,CAAC3V,IAAD,CAAtB;EACD;EACF,GALD;EAMD,CATD;;;EAYA8D,CAAC,CAACqX,IAAF,GAAS,UAAUnb,IAAV,EAAgB0J,QAAhB,EAA0B;EAAA;;EACjC6Q,EAAAA,UAAU;EACV,MAAIa,aAAa,GAAI1R,QAAQ,YAAYzD,KAArB,IAAgCyD,QAAQ,YAAY4F,IAAxE;EACA,MAAIlE,IAAI,GAAG7B,KAAK,CAACxE,SAAN,CAAgB7E,KAAhB,CAAsBgI,IAAtB,CAA2BrG,SAA3B,EAAsCuZ,aAAa,GAAG,CAAH,GAAO,CAA1D,CAAX;EACAhQ,EAAAA,IAAI,CAACuP,OAAL,CAAahF,SAAS,CAAC3V,IAAD,CAAtB;;EACA,MAAI,CAACob,aAAL,EAAoB;EAClB1R,IAAAA,QAAQ,GAAG/H,MAAM,CAACgK,OAAlB;EACD;;EACD,eAAAjC,QAAQ,EAAC9D,OAAT,qCAAoBwF,IAApB;EACD,CATD;;EC7EAtH,CAAC,CAACsF,MAAF,CAAS,IAAT,EAAeuC,OAAf,EAAwB;EACtB0P,EAAAA,eAAe,EAAE;EACf,eAAW;EACT7T,MAAAA,EAAE,EAAE,YAAU8T,GAAV,EAAe;EACjB;EACA;EACA;EACA;EACA,eAAOA,GAAG,CAACC,MAAJ,IAAc,GAAd,IAAqBD,GAAG,CAACC,MAAJ,GAAa,GAAzC;EACD,OAPQ;EAQTzQ,MAAAA,GAAG,EAAE;EARI,KADI;EAWf0Q,IAAAA,OAAO,EAAE;EACPhU,MAAAA,EAAE,EAAE,YAAU8T,GAAV,EAAe;EACjB;EACA,eAAOA,GAAG,CAACC,MAAJ,GAAa,GAAb,IAAoBD,GAAG,CAACC,MAAJ,IAAc,GAAzC;EACD,OAJM;EAKPzQ,MAAAA,GAAG,EAAE;EALE;EAXM,GADK;EAqBtB2Q,EAAAA,iBAAiB,EAAE,2BAAUzb,IAAV,EAAgBwH,EAAhB,EAAoBsD,GAApB,EAAyB7D,OAAzB,EAAkC;EACnD0E,IAAAA,OAAO,CAAC0P,eAAR,CAAwBrb,IAAxB,IAAgC;EAC9BwH,MAAAA,EAAE,EAAEA,EAD0B;EAE9BsD,MAAAA,GAAG,EAAEA,GAAG,IAAI,KAFkB;EAG9B7D,MAAAA,OAAO,EAAEA,OAAO,IAAI;EAHU,KAAhC;EAMA,WAAO,IAAP;EACD;EA7BqB,CAAxB;EAiCA0E,OAAO,CAACD,YAAR,CAAqB,QAArB,EAA+B;EAC7BlI,EAAAA,eAAe,EAAE;EACf,QAAI,QADW;EAEf,iBAAa,QAFE;EAGf,eAAW,SAHI;EAIf,eAAW;EAJI,GADY;EAQ7BsG,EAAAA,cAAc,EAAE,wBAAU1J,KAAV,EAAiB0K,GAAjB,EAAsB7D,OAAtB,EAA+ByC,QAA/B,EAAyC;EACvD,QAAI4O,IAAI,GAAG,EAAX;EACA,QAAIoD,WAAJ;EACA,QAAIC,GAAJ;EACA,QAAIjP,SAAS,GAAGzF,OAAO,CAACyF,SAAR,KAAsB,SAASzF,OAAO,CAACuU,OAAjB,GAA2B,SAA3B,GAAuC,SAA7D,CAAhB;EAEA,QAAI,gBAAgB,OAAO7P,OAAO,CAAC0P,eAAR,CAAwB3O,SAAxB,CAA3B,EACE,MAAM,IAAI1H,KAAJ,CAAU,4CAA4C0H,SAA5C,GAAwD,GAAlE,CAAN;EAEF5B,IAAAA,GAAG,GAAGa,OAAO,CAAC0P,eAAR,CAAwB3O,SAAxB,EAAmC5B,GAAnC,IAA0CA,GAAhD,CATuD;;EAYvD,QAAIA,GAAG,CAACvG,OAAJ,CAAY,SAAZ,IAAyB,CAAC,CAA9B,EAAiC;EAC/BuG,MAAAA,GAAG,GAAGA,GAAG,CAACzJ,OAAJ,CAAY,SAAZ,EAAuBua,kBAAkB,CAACxb,KAAD,CAAzC,CAAN;EACD,KAFD,MAEO;EACLkY,MAAAA,IAAI,CAAC5O,QAAQ,CAACtK,OAAT,CAAiBwB,YAAjB,CAA8B,MAA9B,KAAyC8I,QAAQ,CAACtK,OAAT,CAAiBwB,YAAjB,CAA8B,IAA9B,CAA1C,CAAJ,GAAqFR,KAArF;EACD,KAhBsD;;;EAmBvD,QAAIyb,aAAa,GAAG/X,CAAC,CAACsF,MAAF,CAAS,IAAT,EAAenC,OAAO,CAACA,OAAR,IAAmB,EAAlC,EAAuC0E,OAAO,CAAC0P,eAAR,CAAwB3O,SAAxB,EAAmCzF,OAA1E,CAApB,CAnBuD;;EAsBvDyU,IAAAA,WAAW,GAAG5X,CAAC,CAACsF,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmB;EAC/B0B,MAAAA,GAAG,EAAEA,GAD0B;EAE/BwN,MAAAA,IAAI,EAAEA,IAFyB;EAG/BrO,MAAAA,IAAI,EAAE;EAHyB,KAAnB,EAIX4R,aAJW,CAAd,CAtBuD;;EA6BvDnS,IAAAA,QAAQ,CAAC9D,OAAT,CAAiB,mBAAjB,EAAsC8D,QAAtC,EAAgDgS,WAAhD;EAEAC,IAAAA,GAAG,GAAG7X,CAAC,CAACgY,KAAF,CAAQJ,WAAR,CAAN,CA/BuD;;EAkCvD,QAAI,gBAAgB,OAAO/P,OAAO,CAACkI,YAAnC,EACElI,OAAO,CAACkI,YAAR,GAAuB,EAAvB,CAnCqD;;EAsCvD,QAAIyH,GAAG,GAAG3P,OAAO,CAACkI,YAAR,CAAqB8H,GAArB,IAA4BhQ,OAAO,CAACkI,YAAR,CAAqB8H,GAArB,KAA6B7X,CAAC,CAACiY,IAAF,CAAOL,WAAP,CAAnE;;EAEA,QAAIM,SAAS,GAAG,SAAZA,SAAY,GAAY;EAC1B,UAAI5X,MAAM,GAAGuH,OAAO,CAAC0P,eAAR,CAAwB3O,SAAxB,EAAmClF,EAAnC,CAAsCU,IAAtC,CAA2CwB,QAA3C,EAAqD4R,GAArD,EAA0DxQ,GAA1D,EAA+D7D,OAA/D,CAAb;EACA,UAAI,CAAC7C,MAAL;EACEA,QAAAA,MAAM,GAAGN,CAAC,CAAC6C,QAAF,GAAaE,MAAb,EAAT;EACF,aAAO/C,CAAC,CAACa,IAAF,CAAOP,MAAP,CAAP;EACD,KALD;;EAOA,WAAOkX,GAAG,CAACW,IAAJ,CAASD,SAAT,EAAoBA,SAApB,CAAP;EACD,GAxD4B;EA0D7B7R,EAAAA,QAAQ,EAAE,CAAC;EA1DkB,CAA/B;EA6DAwB,OAAO,CAACpE,EAAR,CAAW,aAAX,EAA0B,YAAY;EACpCoE,EAAAA,OAAO,CAACkI,YAAR,GAAuB,EAAvB;EACD,CAFD;;EAIAxN,IAAI,CAACtB,SAAL,CAAe0W,iBAAf,GAAmC,YAAY;EAC7Cvc,EAAAA,KAAK,CAAC4C,QAAN,CAAe,0HAAf;EACA,SAAO6J,OAAO,CAAC8P,iBAAR,OAAA9P,OAAO,EAAsB9J,SAAtB,CAAd;EACD,CAHD;;ECxGA;AACA,EAGA8J,OAAO,CAACO,WAAR,CAAoB,IAApB,EAA0B;EACxBa,EAAAA,cAAc,EAAE,iCADQ;EAExB9C,EAAAA,IAAI,EAAE;EACJU,IAAAA,KAAK,EAAS,qCADV;EAEJG,IAAAA,GAAG,EAAW,mCAFV;EAGJ7H,IAAAA,MAAM,EAAQ,sCAHV;EAIJD,IAAAA,OAAO,EAAO,uCAJV;EAKJ4H,IAAAA,MAAM,EAAQ,8BALV;EAMJC,IAAAA,QAAQ,EAAM;EANV,GAFkB;EAUxBqC,EAAAA,QAAQ,EAAQ,iCAVQ;EAWxBC,EAAAA,QAAQ,EAAQ,yBAXQ;EAYxBU,EAAAA,OAAO,EAAS,iCAZQ;EAaxBI,EAAAA,GAAG,EAAa,mDAbQ;EAcxB/C,EAAAA,GAAG,EAAa,iDAdQ;EAexBH,EAAAA,KAAK,EAAW,yCAfQ;EAgBxB+C,EAAAA,SAAS,EAAO,gEAhBQ;EAiBxBE,EAAAA,SAAS,EAAO,gEAjBQ;EAkBxBnO,EAAAA,MAAM,EAAU,+EAlBQ;EAmBxBqO,EAAAA,QAAQ,EAAQ,sCAnBQ;EAoBxBC,EAAAA,QAAQ,EAAQ,sCApBQ;EAqBxBC,EAAAA,KAAK,EAAW,4CArBQ;EAsBxBC,EAAAA,OAAO,EAAS,gCAtBQ;EAuBxBI,EAAAA,OAAO,EAAS;EAvBQ,CAA1B;EA0BA9C,OAAO,CAACC,SAAR,CAAkB,IAAlB;;ECpBA,SAASsQ,UAAT,GAAsB;EAAA;;EACpB,MAAIC,OAAO,GAAGxa,MAAM,IAAIya,MAAxB,CADoB;EAIpB;;EACA,WAAc,IAAd,EAAoB;EAElB;EACAC,IAAAA,aAAa,EAAE,uBAAAtY,GAAG,EAAI;EACpB,aAAOA,GAAG,CAACuY,aAAJ,IAAqBvY,GAAG,CAACuY,aAAJ,CAAkBC,SAAlB,KAAgC,KAA5D;EACD,KALiB;EAOlBC,IAAAA,cAAc,EAAE,wBAAAzY,GAAG,EAAI;EACrB,UAAI,KAAI,CAACsY,aAAL,CAAmBtY,GAAnB,CAAJ,EAA6B;EAC3BD,QAAAA,CAAC,CAACC,GAAG,CAACiE,MAAL,CAAD,CAAcpC,OAAd,CAAsB,OAAtB;EACD;EACF,KAXiB;EAalB6W,IAAAA,UAAU,EAAE,oBAAA1Y,GAAG,EAAI;EACjB,UAAI,KAAI,CAACsY,aAAL,CAAmBtY,GAAnB,CAAJ,EAA6B;EAC3B,QAAA,KAAI,CAAC2Y,SAAL,CAAe3Y,GAAf;;EACAD,QAAAA,CAAC,CAAC2V,QAAD,CAAD,CACGlS,EADH,CACM,mBADN,EAC2BxD,GAAG,CAACuU,IAAJ,CAASqE,QADpC,EAC8C,KAAI,CAACH,cADnD;;EAEA,QAAA,KAAI,CAACA,cAAL,CAAoBzY,GAApB;EACD;EACF,KApBiB;EAsBlB2Y,IAAAA,SAAS,EAAE,mBAAA3Y,GAAG,EAAI;EAChB,UAAI,KAAI,CAACsY,aAAL,CAAmBtY,GAAnB,CAAJ,EAA6B;EAC3BD,QAAAA,CAAC,CAAC2V,QAAD,CAAD;EAAA,SACG7R,GADH,CACO,kBADP,EAC2B7D,GAAG,CAACuU,IAAJ,CAASqE,QADpC,EAC8C,KAAI,CAACD,SADnD,EAEG9U,GAFH,CAEO,mBAFP,EAE4B7D,GAAG,CAACuU,IAAJ,CAASqE,QAFrC,EAE+C,KAAI,CAACF,UAFpD;EAGD;EACF,KA5BiB;EA8BlB;EACAG,IAAAA,OAAO,EAAE,mBAAM;EACb,UAAIT,OAAO,CAACU,iBAAZ,EAA+B;EAC7B;EACD;;EACDV,MAAAA,OAAO,CAACU,iBAAR,GAA4B,OAA5B;;EACA,8BAAqB,CAAC,QAAD,EAAW,wBAAX,EAAqC,qBAArC,EAA4D,oBAA5D,CAArB,0BAAwG;EAAnG,YAAIF,QAAQ,WAAZ;EACH7Y,QAAAA,CAAC,CAAC2V,QAAD,CAAD,CACGlS,EADH,CACM,kBADN,EAC0BoV,QAD1B,EACoC;EAACA,UAAAA,QAAQ,EAARA;EAAD,SADpC,EACgD,KAAI,CAACD,SADrD,EAEGnV,EAFH,CAEM,mBAFN,EAE2BoV,QAF3B,EAEqC;EAACA,UAAAA,QAAQ,EAARA;EAAD,SAFrC,EAEiD,KAAI,CAACF,UAFtD;EAGD;EACF,KAzCiB;EA2ClBK,IAAAA,SAAS,EAAE,qBAAM;EACf,aAAOX,OAAO,CAACU,iBAAf;EACA/Y,MAAAA,CAAC,CAAC2V,QAAD,CAAD,CAAY7R,GAAZ,CAAgB,aAAhB;EACD;EA9CiB,GAApB;EAiDD;AAED,mBAAe,IAAIsU,UAAJ,EAAf;;EC3DAa,UAAU,CAACH,OAAX;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC56LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp3eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/hFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChiDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;uLCt1CA,QAAS,CAAA,CAAT,CAAc,CAAd,CAAoB,CAApB,CAA0B,OACJ,WAAhB,QAAO,CAAA,CADa,CACS,CAAI,CAAG,CAAE,OAAO,GAAT,CADhB,CAEC,QAAhB,QAAO,CAAA,CAFQ,GAGtB,OAAO,CAAC,IAAR,CAAa,oDAAb,CAHsB,CAItB,CAAI,CAAG,CAAE,OAAO,CAAE,CAAC,CAAZ,CAJe,EASpB,CAAI,CAAC,OAAL,EAAgB,6EAA6E,IAA7E,CAAkF,CAAI,CAAC,IAAvF,CATI,CAUf,GAAI,CAAA,IAAJ,CAAS,UAA8B,CAA9B,CAAT,CAA8C,CAAE,IAAI,CAAE,CAAI,CAAC,IAAb,CAA9C,CAVe,CAYjB,CACR,CAED,QAAS,CAAA,CAAT,CAAmB,CAAnB,CAAwB,CAAxB,CAA8B,CAA9B,CAAoC,CAClC,GAAI,CAAA,CAAG,CAAG,GAAI,CAAA,cAAd,CACA,CAAG,CAAC,IAAJ,CAAS,KAAT,CAAgB,CAAhB,CAFkC,CAGlC,CAAG,CAAC,YAAJ,CAAmB,MAHe,CAIlC,CAAG,CAAC,MAAJ,CAAa,UAAY,CACvB,CAAM,CAAC,CAAG,CAAC,QAAL,CAAe,CAAf,CAAqB,CAArB,CACP,CANiC,CAOlC,CAAG,CAAC,OAAJ,CAAc,UAAY,CACxB,OAAO,CAAC,KAAR,CAAc,yBAAd,CACD,CATiC,CAUlC,CAAG,CAAC,IAAJ,EACD,CAED,QAAS,CAAA,CAAT,CAAsB,CAAtB,CAA2B,CACzB,GAAI,CAAA,CAAG,CAAG,GAAI,CAAA,cAAd,CAEA,CAAG,CAAC,IAAJ,CAAS,MAAT,CAAiB,CAAjB,IAHyB,CAIzB,GAAI,CACF,CAAG,CAAC,IAAJ,EACD,CAAC,MAAO,CAAP,CAAU,CAAE,CACd,MAAqB,IAAd,EAAA,CAAG,CAAC,MAAJ,EAAmC,GAAd,EAAA,CAAG,CAAC,MACjC,CAGD,QAAS,CAAA,CAAT,CAAgB,CAAhB,CAAsB,CACpB,GAAI,CACF,CAAI,CAAC,aAAL,CAAmB,GAAI,CAAA,UAAJ,CAAe,OAAf,CAAnB,CACD,CAAC,MAAO,CAAP,CAAU,CACV,GAAI,CAAA,CAAG,CAAG,QAAQ,CAAC,WAAT,CAAqB,aAArB,CAAV,CACA,CAAG,CAAC,cAAJ,CAAmB,OAAnB,OAAwC,MAAxC,CAAgD,CAAhD,CAAmD,CAAnD,CAAsD,CAAtD,CAAyD,EAAzD,CACsB,EADtB,aACsD,CADtD,CACyD,IADzD,CAFU,CAIV,CAAI,CAAC,aAAL,CAAmB,CAAnB,CACD,CACF,C,GAtDG,CAAA,CAAO,CAAqB,QAAlB,QAAO,CAAA,MAAP,EAA8B,MAAM,CAAC,MAAP,GAAkB,MAAhD,CACV,MADU,CACe,QAAhB,QAAO,CAAA,IAAP,EAA4B,IAAI,CAAC,IAAL,GAAc,IAA1C,CACT,IADS,CACgB,QAAlB,QAAO,CAAA,MAAP,EAA8B,MAAM,CAAC,MAAP,GAAkB,MAAhD,CACP,MADO,O,CAyDP,CAAc,CAAG,CAAO,CAAC,SAAR,EAAqB,YAAY,IAAZ,CAAiB,SAAS,CAAC,SAA3B,CAArB,EAA8D,cAAc,IAAd,CAAmB,SAAS,CAAC,SAA7B,CAA9D,EAAyG,CAAC,SAAS,IAAT,CAAc,SAAS,CAAC,SAAxB,C,CAE3H,CAAM,CAAG,CAAO,CAAC,MAAR,GAEQ,QAAlB,QAAO,CAAA,MAAP,EAA8B,MAAM,GAAK,CAA1C,CACI,UAAmB,CAAc,CADrC,CAIG,YAAc,CAAA,iBAAiB,CAAC,SAAhC,EAA6C,CAAC,CAA/C,CACA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAmC,IAC/B,CAAA,CAAG,CAAG,CAAO,CAAC,GAAR,EAAe,CAAO,CAAC,SADE,CAE/B,CAAC,CAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAF2B,CAGnC,CAAI,CAAG,CAAI,EAAI,CAAI,CAAC,IAAb,EAAqB,UAHO,CAKnC,CAAC,CAAC,QAAF,CAAa,CALsB,CAMnC,CAAC,CAAC,GAAF,CAAQ,UAN2B,CAWf,QAAhB,QAAO,CAAA,CAXwB,EAajC,CAAC,CAAC,IAAF,CAAS,CAbwB,CAc7B,CAAC,CAAC,MAAF,GAAa,QAAQ,CAAC,MAdO,CAmB/B,CAAK,CAAC,CAAD,CAnB0B,CAe/B,CAAW,CAAC,CAAC,CAAC,IAAH,CAAX,CACI,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CADZ,CAEI,CAAK,CAAC,CAAD,CAAI,CAAC,CAAC,MAAF,CAAW,QAAf,CAjBsB,GAuBjC,CAAC,CAAC,IAAF,CAAS,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAvBwB,CAwBjC,UAAU,CAAC,UAAY,CAAE,CAAG,CAAC,eAAJ,CAAoB,CAAC,CAAC,IAAtB,CAA6B,CAA5C,CAA8C,GAA9C,CAxBuB,CAyBjC,UAAU,CAAC,UAAY,CAAE,CAAK,CAAC,CAAD,CAAK,CAAzB,CAA2B,CAA3B,CAzBuB,CA2BpC,CA5BC,CA+BA,oBAAsB,CAAA,SAAtB,CACA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAmC,CAGnC,GAFA,CAAI,CAAG,CAAI,EAAI,CAAI,CAAC,IAAb,EAAqB,UAE5B,CAAoB,QAAhB,QAAO,CAAA,CAAX,CAUE,SAAS,CAAC,gBAAV,CAA2B,CAAG,CAAC,CAAD,CAAO,CAAP,CAA9B,CAA4C,CAA5C,CAVF,KACE,IAAI,CAAW,CAAC,CAAD,CAAf,CACE,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CADV,KAEO,CACL,GAAI,CAAA,CAAC,CAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAR,CACA,CAAC,CAAC,IAAF,CAAS,CAFJ,CAGL,CAAC,CAAC,MAAF,CAAW,QAHN,CAIL,UAAU,CAAC,UAAY,CAAE,CAAK,CAAC,CAAD,CAAK,CAAzB,CACX,CAIJ,CAhBC,CAmBA,SAAiB,CAAjB,CAAuB,CAAvB,CAA6B,CAA7B,CAAmC,CAAnC,CAA0C,CAS1C,GANA,CAAK,CAAG,CAAK,EAAI,IAAI,CAAC,EAAD,CAAK,QAAL,CAMrB,CALI,CAKJ,GAJE,CAAK,CAAC,QAAN,CAAe,KAAf,CACA,CAAK,CAAC,QAAN,CAAe,IAAf,CAAoB,SAApB,CAAgC,gBAGlC,EAAoB,QAAhB,QAAO,CAAA,CAAX,CAA8B,MAAO,CAAA,CAAQ,CAAC,CAAD,CAAO,CAAP,CAAa,CAAb,CAAf,CATY,GAWtC,CAAA,CAAK,CAAiB,0BAAd,GAAA,CAAI,CAAC,IAXyB,CAYtC,CAAQ,CAAG,eAAe,IAAf,CAAoB,CAAO,CAAC,WAA5B,GAA4C,CAAO,CAAC,MAZzB,CAatC,CAAW,CAAG,eAAe,IAAf,CAAoB,SAAS,CAAC,SAA9B,CAbwB,CAe1C,GAAI,CAAC,CAAW,EAAK,CAAK,EAAI,CAAzB,EAAsC,CAAvC,GAAgF,WAAtB,QAAO,CAAA,UAArE,CAAiG,CAE/F,GAAI,CAAA,CAAM,CAAG,GAAI,CAAA,UAAjB,CACA,CAAM,CAAC,SAAP,CAAmB,UAAY,CAC7B,GAAI,CAAA,CAAG,CAAG,CAAM,CAAC,MAAjB,CACA,CAAG,CAAG,CAAW,CAAG,CAAH,CAAS,CAAG,CAAC,OAAJ,CAAY,cAAZ,CAA4B,uBAA5B,CAFG,CAGzB,CAHyB,CAGlB,CAAK,CAAC,QAAN,CAAe,IAAf,CAAsB,CAHJ,CAIxB,QAAQ,CAAG,CAJa,CAK7B,CAAK,CAAG,IACT,CAT8F,CAU/F,CAAM,CAAC,aAAP,CAAqB,CAArB,CACD,CAXD,IAWO,IACD,CAAA,CAAG,CAAG,CAAO,CAAC,GAAR,EAAe,CAAO,CAAC,SAD5B,CAED,CAAG,CAAG,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAFL,CAGD,CAHC,CAGM,CAAK,CAAC,QAAN,CAAiB,CAHvB,CAIA,QAAQ,CAAC,IAAT,CAAgB,CAJhB,CAKL,CAAK,CAAG,IALH,CAML,UAAU,CAAC,UAAY,CAAE,CAAG,CAAC,eAAJ,CAAoB,CAApB,CAA0B,CAAzC,CAA2C,GAA3C,CACX,CACF,CA1FU,C,CA6Fb,CAAO,CAAC,MAAR,CAAiB,CAAM,CAAC,MAAP,CAAgB,C,CAEX,WAAlB,QAAO,CAAA,M,GACT,MAAM,CAAC,OAAP,CAAiB,C;;;ACzKnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh5EA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvrHA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7iJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACviBA;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;;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;;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;;AChEA;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;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;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;;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;;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;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC/eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;;AC9ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC32BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC31BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AChgEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC75BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;AC7CA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;ACjVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1wBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh+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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1iCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7iCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9wDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7rCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9kDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC16EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrlDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9jBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7iBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;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;;ACxIA;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;;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AC3NA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;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;;ACnCA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1vBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;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;;ACxCA;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;;AClBA;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;;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;;AC9BA;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;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;AC1CA;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;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;AChDA;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;;ACVA;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;;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;;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;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;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;;ACVA;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;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;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;;ACVA;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;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACjBA;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;;ACVA;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;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpaA;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;;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;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC9GA;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;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/yDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;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;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;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;;ACrEA;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;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACngCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7iDA;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;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;ACxEA;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;;AC3EA;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;;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;;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;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC59DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjuEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzKA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzKA;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;;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;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACzlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;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;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;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;;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9xBA;AACA;AACA;AACA;AACA;AACA;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;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;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;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;;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;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;ACpBA;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;;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;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;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;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACZA;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;;ACTA;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;;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;;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;;AClEA;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;;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;;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;;AChBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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;;AC/HA;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;;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;;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;;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;;AC/KA;","file":"vendor.js"}